commit d192c3670faac4e7fec1864fab82d6a2f69635a3 Author: Greg Tseng Date: Sat Mar 1 20:42:36 2025 -0500 initial commit cloning rt4 client and making a small cosmetic tweak diff --git a/README.md b/README.md new file mode 100644 index 0000000..1ff62c8 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +[Fork of Pazaz/RT4-Client](https://github.com/pazaz/rt4-client) + +## Goals + +* Identify all classes + * Create new static classes by grouping related members +* Identify all methods +* Identify all fields +* Identify all local variables +* Remove any remaining obfuscation (possibly none left) +* Fix poor decompiler behavior (fernflower) +* Replace magic numbers and bitmasks with named final fields +* Refactor code to improve behavior/readability +* Modernize code/libraries (High DPI support, modern refresh rates, ...) +* Support existing servers via global config flags that adjust packet behaviors +* Organize classes into packages + +OpenRS2 annotations are left in the source to build a deob map from, in case some of my changes aren't desirable. +That mapping can be used to generate a new deob with everything renamed for you. + +## Instructions + +Build requirements: +* Java 8+ + +Runtime requirements: +* SD: Java 8+ +* HD on Windows, use Java 15 or lower. There is a JOGL issue on 16+ related to how they grab the WGL context from the window. +* HD on Linux: Java 8+ +* HD on macOS: Not possible yet on latest macOS. Might work for earlier OS versions. + +``` +git clone https://github.com/Pazaz/RT4-Client.git +cd RT4-Client +./gradlew run +``` + +You will be connected to a test server automatically. +This server is provided by 2009scape for their own internal developments. + +## Deviations + +Configurable: +- Packet behaviors to make it compatible with existing servers +- View distance in HD +- Bilinear map filtering in HD/SD +- Tweening enabled by default (existed in client) +- Shift-click behavior on inventory items enabled by default (existed in client) + +Unconfigurable: +- JOGL was updated to 2.4.0 +- Update/render loop was decoupled to tick indepedently from each other +- Camera panning input rewritten to use render loop timing +- Varp array size was extended to 3500 instead of 2500 +- Mouse wheel camera movement (click middle button and move mouse) +- Render FPS is set to your monitor's refresh rate + +## Libraries Used + +- JOGL/Gluegen 2.4.0rc +- Google Gson 2.9.0 diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..e69de29 diff --git a/client/build.gradle b/client/build.gradle new file mode 100644 index 0000000..7d504d0 --- /dev/null +++ b/client/build.gradle @@ -0,0 +1,51 @@ +plugins { + id 'java' + id 'application' + id 'org.jetbrains.kotlin.jvm' version '1.4.10' +} + +mainClassName = 'rt4.client' +version = '1.0.0' + +sourceCompatibility = 1.8 +targetCompatibility = 1.8 + +compileJava.options.encoding = 'UTF-8' + +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} + +dependencies { + compileOnly project(':deob-annotations') + implementation project(':signlink') + + implementation 'lib:gson' + implementation 'lib:gluegen-rt' + implementation 'lib:gluegen-rt-natives-windows-amd64' + implementation 'lib:gluegen-rt-natives-windows-i586' + implementation 'lib:gluegen-rt-natives-linux-amd64' + implementation 'lib:gluegen-rt-natives-linux-i586' + implementation 'lib:gluegen-rt-natives-macosx-universal' + implementation 'lib:gluegen-rt-natives-android-aarch64' + implementation 'lib:gluegen-rt-natives-linux-aarch64' + + implementation 'lib:jogl-all' + implementation 'lib:jogl-all-natives-linux-aarch64' + implementation 'lib:jogl-all-natives-windows-amd64' + implementation 'lib:jogl-all-natives-windows-i586' + implementation 'lib:jogl-all-natives-linux-amd64' + implementation 'lib:jogl-all-natives-linux-i586' + implementation 'lib:jogl-all-natives-macosx-universal' + implementation 'lib:jogl-all-natives-android-aarch64' + + runtime 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10' +} + +jar { + manifest { + attributes 'Main-Class': "$mainClassName" + } + from { configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } } + duplicatesStrategy = DuplicatesStrategy.INCLUDE +} diff --git a/client/build/classes/java/main/plugin/Plugin.class b/client/build/classes/java/main/plugin/Plugin.class new file mode 100644 index 0000000..31152ab Binary files /dev/null and b/client/build/classes/java/main/plugin/Plugin.class differ diff --git a/client/build/classes/java/main/plugin/PluginInfo.class b/client/build/classes/java/main/plugin/PluginInfo.class new file mode 100644 index 0000000..e7d4a8c Binary files /dev/null and b/client/build/classes/java/main/plugin/PluginInfo.class differ diff --git a/client/build/classes/java/main/plugin/PluginRepository.class b/client/build/classes/java/main/plugin/PluginRepository.class new file mode 100644 index 0000000..f2f3ffc Binary files /dev/null and b/client/build/classes/java/main/plugin/PluginRepository.class differ diff --git a/client/build/classes/java/main/plugin/annotations/PluginMeta.class b/client/build/classes/java/main/plugin/annotations/PluginMeta.class new file mode 100644 index 0000000..dec684f Binary files /dev/null and b/client/build/classes/java/main/plugin/annotations/PluginMeta.class differ diff --git a/client/build/classes/java/main/plugin/api/API$1.class b/client/build/classes/java/main/plugin/api/API$1.class new file mode 100644 index 0000000..d2611b7 Binary files /dev/null and b/client/build/classes/java/main/plugin/api/API$1.class differ diff --git a/client/build/classes/java/main/plugin/api/API.class b/client/build/classes/java/main/plugin/api/API.class new file mode 100644 index 0000000..664dd62 Binary files /dev/null and b/client/build/classes/java/main/plugin/api/API.class differ diff --git a/client/build/classes/java/main/plugin/api/FontColor.class b/client/build/classes/java/main/plugin/api/FontColor.class new file mode 100644 index 0000000..31cec64 Binary files /dev/null and b/client/build/classes/java/main/plugin/api/FontColor.class differ diff --git a/client/build/classes/java/main/plugin/api/FontType.class b/client/build/classes/java/main/plugin/api/FontType.class new file mode 100644 index 0000000..e9810a7 Binary files /dev/null and b/client/build/classes/java/main/plugin/api/FontType.class differ diff --git a/client/build/classes/java/main/plugin/api/MiniMenuAction.class b/client/build/classes/java/main/plugin/api/MiniMenuAction.class new file mode 100644 index 0000000..be98b64 Binary files /dev/null and b/client/build/classes/java/main/plugin/api/MiniMenuAction.class differ diff --git a/client/build/classes/java/main/plugin/api/MiniMenuEntry.class b/client/build/classes/java/main/plugin/api/MiniMenuEntry.class new file mode 100644 index 0000000..f6f80d7 Binary files /dev/null and b/client/build/classes/java/main/plugin/api/MiniMenuEntry.class differ diff --git a/client/build/classes/java/main/plugin/api/MiniMenuType.class b/client/build/classes/java/main/plugin/api/MiniMenuType.class new file mode 100644 index 0000000..e374d05 Binary files /dev/null and b/client/build/classes/java/main/plugin/api/MiniMenuType.class differ diff --git a/client/build/classes/java/main/plugin/api/Privileges.class b/client/build/classes/java/main/plugin/api/Privileges.class new file mode 100644 index 0000000..ad8f7f1 Binary files /dev/null and b/client/build/classes/java/main/plugin/api/Privileges.class differ diff --git a/client/build/classes/java/main/plugin/api/SpritePNGLoader.class b/client/build/classes/java/main/plugin/api/SpritePNGLoader.class new file mode 100644 index 0000000..7e9d4e0 Binary files /dev/null and b/client/build/classes/java/main/plugin/api/SpritePNGLoader.class differ diff --git a/client/build/classes/java/main/plugin/api/SpritePixels.class b/client/build/classes/java/main/plugin/api/SpritePixels.class new file mode 100644 index 0000000..4e28e50 Binary files /dev/null and b/client/build/classes/java/main/plugin/api/SpritePixels.class differ diff --git a/client/build/classes/java/main/plugin/api/TextModifier.class b/client/build/classes/java/main/plugin/api/TextModifier.class new file mode 100644 index 0000000..a9f353a Binary files /dev/null and b/client/build/classes/java/main/plugin/api/TextModifier.class differ diff --git a/client/build/classes/java/main/plugin/api/WindowMode.class b/client/build/classes/java/main/plugin/api/WindowMode.class new file mode 100644 index 0000000..7343e89 Binary files /dev/null and b/client/build/classes/java/main/plugin/api/WindowMode.class differ diff --git a/client/build/classes/java/main/rt4/AbstractWorld.class b/client/build/classes/java/main/rt4/AbstractWorld.class new file mode 100644 index 0000000..5aa626a Binary files /dev/null and b/client/build/classes/java/main/rt4/AbstractWorld.class differ diff --git a/client/build/classes/java/main/rt4/AnimBase.class b/client/build/classes/java/main/rt4/AnimBase.class new file mode 100644 index 0000000..1d56032 Binary files /dev/null and b/client/build/classes/java/main/rt4/AnimBase.class differ diff --git a/client/build/classes/java/main/rt4/AnimFrame.class b/client/build/classes/java/main/rt4/AnimFrame.class new file mode 100644 index 0000000..b62a119 Binary files /dev/null and b/client/build/classes/java/main/rt4/AnimFrame.class differ diff --git a/client/build/classes/java/main/rt4/AnimFrameset.class b/client/build/classes/java/main/rt4/AnimFrameset.class new file mode 100644 index 0000000..019f758 Binary files /dev/null and b/client/build/classes/java/main/rt4/AnimFrameset.class differ diff --git a/client/build/classes/java/main/rt4/AreaSound.class b/client/build/classes/java/main/rt4/AreaSound.class new file mode 100644 index 0000000..a4ff8fb Binary files /dev/null and b/client/build/classes/java/main/rt4/AreaSound.class differ diff --git a/client/build/classes/java/main/rt4/AreaSoundManager.class b/client/build/classes/java/main/rt4/AreaSoundManager.class new file mode 100644 index 0000000..927493f Binary files /dev/null and b/client/build/classes/java/main/rt4/AreaSoundManager.class differ diff --git a/client/build/classes/java/main/rt4/ArrayUtils.class b/client/build/classes/java/main/rt4/ArrayUtils.class new file mode 100644 index 0000000..1c13454 Binary files /dev/null and b/client/build/classes/java/main/rt4/ArrayUtils.class differ diff --git a/client/build/classes/java/main/rt4/AttachLocRequest.class b/client/build/classes/java/main/rt4/AttachLocRequest.class new file mode 100644 index 0000000..8121a02 Binary files /dev/null and b/client/build/classes/java/main/rt4/AttachLocRequest.class differ diff --git a/client/build/classes/java/main/rt4/AudioChannel.class b/client/build/classes/java/main/rt4/AudioChannel.class new file mode 100644 index 0000000..802e68b Binary files /dev/null and b/client/build/classes/java/main/rt4/AudioChannel.class differ diff --git a/client/build/classes/java/main/rt4/AudioThread.class b/client/build/classes/java/main/rt4/AudioThread.class new file mode 100644 index 0000000..dafa9e4 Binary files /dev/null and b/client/build/classes/java/main/rt4/AudioThread.class differ diff --git a/client/build/classes/java/main/rt4/BasType.class b/client/build/classes/java/main/rt4/BasType.class new file mode 100644 index 0000000..7b8bedc Binary files /dev/null and b/client/build/classes/java/main/rt4/BasType.class differ diff --git a/client/build/classes/java/main/rt4/BasTypeList.class b/client/build/classes/java/main/rt4/BasTypeList.class new file mode 100644 index 0000000..f3b1ba8 Binary files /dev/null and b/client/build/classes/java/main/rt4/BasTypeList.class differ diff --git a/client/build/classes/java/main/rt4/Base37.class b/client/build/classes/java/main/rt4/Base37.class new file mode 100644 index 0000000..2c4cf20 Binary files /dev/null and b/client/build/classes/java/main/rt4/Base37.class differ diff --git a/client/build/classes/java/main/rt4/BrokenInputStream.class b/client/build/classes/java/main/rt4/BrokenInputStream.class new file mode 100644 index 0000000..2bbb25f Binary files /dev/null and b/client/build/classes/java/main/rt4/BrokenInputStream.class differ diff --git a/client/build/classes/java/main/rt4/BrokenOutputStream.class b/client/build/classes/java/main/rt4/BrokenOutputStream.class new file mode 100644 index 0000000..2cd09d1 Binary files /dev/null and b/client/build/classes/java/main/rt4/BrokenOutputStream.class differ diff --git a/client/build/classes/java/main/rt4/BrowserControl.class b/client/build/classes/java/main/rt4/BrowserControl.class new file mode 100644 index 0000000..8d4edee Binary files /dev/null and b/client/build/classes/java/main/rt4/BrowserControl.class differ diff --git a/client/build/classes/java/main/rt4/Buffer.class b/client/build/classes/java/main/rt4/Buffer.class new file mode 100644 index 0000000..9f92327 Binary files /dev/null and b/client/build/classes/java/main/rt4/Buffer.class differ diff --git a/client/build/classes/java/main/rt4/BufferedFile.class b/client/build/classes/java/main/rt4/BufferedFile.class new file mode 100644 index 0000000..e7e93a8 Binary files /dev/null and b/client/build/classes/java/main/rt4/BufferedFile.class differ diff --git a/client/build/classes/java/main/rt4/BufferedImageFrameBuffer.class b/client/build/classes/java/main/rt4/BufferedImageFrameBuffer.class new file mode 100644 index 0000000..5f96c5f Binary files /dev/null and b/client/build/classes/java/main/rt4/BufferedImageFrameBuffer.class differ diff --git a/client/build/classes/java/main/rt4/BufferedSocket.class b/client/build/classes/java/main/rt4/BufferedSocket.class new file mode 100644 index 0000000..18953ef Binary files /dev/null and b/client/build/classes/java/main/rt4/BufferedSocket.class differ diff --git a/client/build/classes/java/main/rt4/ByteArray.class b/client/build/classes/java/main/rt4/ByteArray.class new file mode 100644 index 0000000..b86edff Binary files /dev/null and b/client/build/classes/java/main/rt4/ByteArray.class differ diff --git a/client/build/classes/java/main/rt4/ByteArrayNode.class b/client/build/classes/java/main/rt4/ByteArrayNode.class new file mode 100644 index 0000000..5d43bc6 Binary files /dev/null and b/client/build/classes/java/main/rt4/ByteArrayNode.class differ diff --git a/client/build/classes/java/main/rt4/ByteArrayNodeSecondary.class b/client/build/classes/java/main/rt4/ByteArrayNodeSecondary.class new file mode 100644 index 0000000..34ecc75 Binary files /dev/null and b/client/build/classes/java/main/rt4/ByteArrayNodeSecondary.class differ diff --git a/client/build/classes/java/main/rt4/Bzip2DState.class b/client/build/classes/java/main/rt4/Bzip2DState.class new file mode 100644 index 0000000..d2dd988 Binary files /dev/null and b/client/build/classes/java/main/rt4/Bzip2DState.class differ diff --git a/client/build/classes/java/main/rt4/Bzip2Decompressor.class b/client/build/classes/java/main/rt4/Bzip2Decompressor.class new file mode 100644 index 0000000..535c8fc Binary files /dev/null and b/client/build/classes/java/main/rt4/Bzip2Decompressor.class differ diff --git a/client/build/classes/java/main/rt4/Cache.class b/client/build/classes/java/main/rt4/Cache.class new file mode 100644 index 0000000..84b302d Binary files /dev/null and b/client/build/classes/java/main/rt4/Cache.class differ diff --git a/client/build/classes/java/main/rt4/Camera.class b/client/build/classes/java/main/rt4/Camera.class new file mode 100644 index 0000000..4466023 Binary files /dev/null and b/client/build/classes/java/main/rt4/Camera.class differ diff --git a/client/build/classes/java/main/rt4/ChangeLocRequest.class b/client/build/classes/java/main/rt4/ChangeLocRequest.class new file mode 100644 index 0000000..8ad4083 Binary files /dev/null and b/client/build/classes/java/main/rt4/ChangeLocRequest.class differ diff --git a/client/build/classes/java/main/rt4/CharUtils.class b/client/build/classes/java/main/rt4/CharUtils.class new file mode 100644 index 0000000..45e8fa8 Binary files /dev/null and b/client/build/classes/java/main/rt4/CharUtils.class differ diff --git a/client/build/classes/java/main/rt4/Chat.class b/client/build/classes/java/main/rt4/Chat.class new file mode 100644 index 0000000..e7a2bf7 Binary files /dev/null and b/client/build/classes/java/main/rt4/Chat.class differ diff --git a/client/build/classes/java/main/rt4/Cheat.class b/client/build/classes/java/main/rt4/Cheat.class new file mode 100644 index 0000000..3a9af0f Binary files /dev/null and b/client/build/classes/java/main/rt4/Cheat.class differ diff --git a/client/build/classes/java/main/rt4/ClanChat.class b/client/build/classes/java/main/rt4/ClanChat.class new file mode 100644 index 0000000..ef7d44f Binary files /dev/null and b/client/build/classes/java/main/rt4/ClanChat.class differ diff --git a/client/build/classes/java/main/rt4/ClanMember.class b/client/build/classes/java/main/rt4/ClanMember.class new file mode 100644 index 0000000..8d34686 Binary files /dev/null and b/client/build/classes/java/main/rt4/ClanMember.class differ diff --git a/client/build/classes/java/main/rt4/ClientProt.class b/client/build/classes/java/main/rt4/ClientProt.class new file mode 100644 index 0000000..a560497 Binary files /dev/null and b/client/build/classes/java/main/rt4/ClientProt.class differ diff --git a/client/build/classes/java/main/rt4/ClientScript.class b/client/build/classes/java/main/rt4/ClientScript.class new file mode 100644 index 0000000..3e1c5a6 Binary files /dev/null and b/client/build/classes/java/main/rt4/ClientScript.class differ diff --git a/client/build/classes/java/main/rt4/ClientScriptList.class b/client/build/classes/java/main/rt4/ClientScriptList.class new file mode 100644 index 0000000..5ae2d3e Binary files /dev/null and b/client/build/classes/java/main/rt4/ClientScriptList.class differ diff --git a/client/build/classes/java/main/rt4/CollisionMap.class b/client/build/classes/java/main/rt4/CollisionMap.class new file mode 100644 index 0000000..992e6db Binary files /dev/null and b/client/build/classes/java/main/rt4/CollisionMap.class differ diff --git a/client/build/classes/java/main/rt4/ColorImageCache.class b/client/build/classes/java/main/rt4/ColorImageCache.class new file mode 100644 index 0000000..40fc4f3 Binary files /dev/null and b/client/build/classes/java/main/rt4/ColorImageCache.class differ diff --git a/client/build/classes/java/main/rt4/ColorImageCacheEntry.class b/client/build/classes/java/main/rt4/ColorImageCacheEntry.class new file mode 100644 index 0000000..1938691 Binary files /dev/null and b/client/build/classes/java/main/rt4/ColorImageCacheEntry.class differ diff --git a/client/build/classes/java/main/rt4/ColorUtils.class b/client/build/classes/java/main/rt4/ColorUtils.class new file mode 100644 index 0000000..95d40c6 Binary files /dev/null and b/client/build/classes/java/main/rt4/ColorUtils.class differ diff --git a/client/build/classes/java/main/rt4/Component.class b/client/build/classes/java/main/rt4/Component.class new file mode 100644 index 0000000..088f060 Binary files /dev/null and b/client/build/classes/java/main/rt4/Component.class differ diff --git a/client/build/classes/java/main/rt4/ComponentPointer.class b/client/build/classes/java/main/rt4/ComponentPointer.class new file mode 100644 index 0000000..8b40a5d Binary files /dev/null and b/client/build/classes/java/main/rt4/ComponentPointer.class differ diff --git a/client/build/classes/java/main/rt4/CreateManager.class b/client/build/classes/java/main/rt4/CreateManager.class new file mode 100644 index 0000000..ec1cc5f Binary files /dev/null and b/client/build/classes/java/main/rt4/CreateManager.class differ diff --git a/client/build/classes/java/main/rt4/Cross.class b/client/build/classes/java/main/rt4/Cross.class new file mode 100644 index 0000000..3e44897 Binary files /dev/null and b/client/build/classes/java/main/rt4/Cross.class differ diff --git a/client/build/classes/java/main/rt4/Cs1ScriptRunner.class b/client/build/classes/java/main/rt4/Cs1ScriptRunner.class new file mode 100644 index 0000000..8693f03 Binary files /dev/null and b/client/build/classes/java/main/rt4/Cs1ScriptRunner.class differ diff --git a/client/build/classes/java/main/rt4/CursorType.class b/client/build/classes/java/main/rt4/CursorType.class new file mode 100644 index 0000000..de41ac3 Binary files /dev/null and b/client/build/classes/java/main/rt4/CursorType.class differ diff --git a/client/build/classes/java/main/rt4/CursorTypeList.class b/client/build/classes/java/main/rt4/CursorTypeList.class new file mode 100644 index 0000000..772eac5 Binary files /dev/null and b/client/build/classes/java/main/rt4/CursorTypeList.class differ diff --git a/client/build/classes/java/main/rt4/DateUtil.class b/client/build/classes/java/main/rt4/DateUtil.class new file mode 100644 index 0000000..b4f078a Binary files /dev/null and b/client/build/classes/java/main/rt4/DateUtil.class differ diff --git a/client/build/classes/java/main/rt4/DeadClass.class b/client/build/classes/java/main/rt4/DeadClass.class new file mode 100644 index 0000000..8867cc3 Binary files /dev/null and b/client/build/classes/java/main/rt4/DeadClass.class differ diff --git a/client/build/classes/java/main/rt4/DelayedStateChange.class b/client/build/classes/java/main/rt4/DelayedStateChange.class new file mode 100644 index 0000000..0bea31c Binary files /dev/null and b/client/build/classes/java/main/rt4/DelayedStateChange.class differ diff --git a/client/build/classes/java/main/rt4/DirectByteArray.class b/client/build/classes/java/main/rt4/DirectByteArray.class new file mode 100644 index 0000000..f61ed13 Binary files /dev/null and b/client/build/classes/java/main/rt4/DirectByteArray.class differ diff --git a/client/build/classes/java/main/rt4/DisplayMode.class b/client/build/classes/java/main/rt4/DisplayMode.class new file mode 100644 index 0000000..ee0af5d Binary files /dev/null and b/client/build/classes/java/main/rt4/DisplayMode.class differ diff --git a/client/build/classes/java/main/rt4/Entity.class b/client/build/classes/java/main/rt4/Entity.class new file mode 100644 index 0000000..1ecc961 Binary files /dev/null and b/client/build/classes/java/main/rt4/Entity.class differ diff --git a/client/build/classes/java/main/rt4/EnumStringEntry.class b/client/build/classes/java/main/rt4/EnumStringEntry.class new file mode 100644 index 0000000..244c604 Binary files /dev/null and b/client/build/classes/java/main/rt4/EnumStringEntry.class differ diff --git a/client/build/classes/java/main/rt4/EnumType.class b/client/build/classes/java/main/rt4/EnumType.class new file mode 100644 index 0000000..696d9fa Binary files /dev/null and b/client/build/classes/java/main/rt4/EnumType.class differ diff --git a/client/build/classes/java/main/rt4/EnumTypeList.class b/client/build/classes/java/main/rt4/EnumTypeList.class new file mode 100644 index 0000000..5dee3cf Binary files /dev/null and b/client/build/classes/java/main/rt4/EnumTypeList.class differ diff --git a/client/build/classes/java/main/rt4/Environment.class b/client/build/classes/java/main/rt4/Environment.class new file mode 100644 index 0000000..a184e14 Binary files /dev/null and b/client/build/classes/java/main/rt4/Environment.class differ diff --git a/client/build/classes/java/main/rt4/Equipment.class b/client/build/classes/java/main/rt4/Equipment.class new file mode 100644 index 0000000..d74878b Binary files /dev/null and b/client/build/classes/java/main/rt4/Equipment.class differ diff --git a/client/build/classes/java/main/rt4/Find.class b/client/build/classes/java/main/rt4/Find.class new file mode 100644 index 0000000..4ca4bc4 Binary files /dev/null and b/client/build/classes/java/main/rt4/Find.class differ diff --git a/client/build/classes/java/main/rt4/Flames.class b/client/build/classes/java/main/rt4/Flames.class new file mode 100644 index 0000000..bded4a9 Binary files /dev/null and b/client/build/classes/java/main/rt4/Flames.class differ diff --git a/client/build/classes/java/main/rt4/FloType.class b/client/build/classes/java/main/rt4/FloType.class new file mode 100644 index 0000000..52fa2d2 Binary files /dev/null and b/client/build/classes/java/main/rt4/FloType.class differ diff --git a/client/build/classes/java/main/rt4/FloTypeList.class b/client/build/classes/java/main/rt4/FloTypeList.class new file mode 100644 index 0000000..118eddd Binary files /dev/null and b/client/build/classes/java/main/rt4/FloTypeList.class differ diff --git a/client/build/classes/java/main/rt4/FluType.class b/client/build/classes/java/main/rt4/FluType.class new file mode 100644 index 0000000..67453c9 Binary files /dev/null and b/client/build/classes/java/main/rt4/FluType.class differ diff --git a/client/build/classes/java/main/rt4/FluTypeList.class b/client/build/classes/java/main/rt4/FluTypeList.class new file mode 100644 index 0000000..c58d643 Binary files /dev/null and b/client/build/classes/java/main/rt4/FluTypeList.class differ diff --git a/client/build/classes/java/main/rt4/FogManager.class b/client/build/classes/java/main/rt4/FogManager.class new file mode 100644 index 0000000..af293c4 Binary files /dev/null and b/client/build/classes/java/main/rt4/FogManager.class differ diff --git a/client/build/classes/java/main/rt4/Font.class b/client/build/classes/java/main/rt4/Font.class new file mode 100644 index 0000000..fe843a9 Binary files /dev/null and b/client/build/classes/java/main/rt4/Font.class differ diff --git a/client/build/classes/java/main/rt4/FontMetricsList.class b/client/build/classes/java/main/rt4/FontMetricsList.class new file mode 100644 index 0000000..ac1b0a2 Binary files /dev/null and b/client/build/classes/java/main/rt4/FontMetricsList.class differ diff --git a/client/build/classes/java/main/rt4/Fonts.class b/client/build/classes/java/main/rt4/Fonts.class new file mode 100644 index 0000000..3e2b0fb Binary files /dev/null and b/client/build/classes/java/main/rt4/Fonts.class differ diff --git a/client/build/classes/java/main/rt4/FrameBuffer.class b/client/build/classes/java/main/rt4/FrameBuffer.class new file mode 100644 index 0000000..27c4c24 Binary files /dev/null and b/client/build/classes/java/main/rt4/FrameBuffer.class differ diff --git a/client/build/classes/java/main/rt4/FriendsList.class b/client/build/classes/java/main/rt4/FriendsList.class new file mode 100644 index 0000000..a29a4a1 Binary files /dev/null and b/client/build/classes/java/main/rt4/FriendsList.class differ diff --git a/client/build/classes/java/main/rt4/GameCanvas.class b/client/build/classes/java/main/rt4/GameCanvas.class new file mode 100644 index 0000000..da3da44 Binary files /dev/null and b/client/build/classes/java/main/rt4/GameCanvas.class differ diff --git a/client/build/classes/java/main/rt4/GameShell.class b/client/build/classes/java/main/rt4/GameShell.class new file mode 100644 index 0000000..c7022ca Binary files /dev/null and b/client/build/classes/java/main/rt4/GameShell.class differ diff --git a/client/build/classes/java/main/rt4/GlAlphaSprite.class b/client/build/classes/java/main/rt4/GlAlphaSprite.class new file mode 100644 index 0000000..7247a22 Binary files /dev/null and b/client/build/classes/java/main/rt4/GlAlphaSprite.class differ diff --git a/client/build/classes/java/main/rt4/GlBoundingBox.class b/client/build/classes/java/main/rt4/GlBoundingBox.class new file mode 100644 index 0000000..59ce58d Binary files /dev/null and b/client/build/classes/java/main/rt4/GlBoundingBox.class differ diff --git a/client/build/classes/java/main/rt4/GlBuffer.class b/client/build/classes/java/main/rt4/GlBuffer.class new file mode 100644 index 0000000..c463572 Binary files /dev/null and b/client/build/classes/java/main/rt4/GlBuffer.class differ diff --git a/client/build/classes/java/main/rt4/GlCleaner.class b/client/build/classes/java/main/rt4/GlCleaner.class new file mode 100644 index 0000000..aabc9f0 Binary files /dev/null and b/client/build/classes/java/main/rt4/GlCleaner.class differ diff --git a/client/build/classes/java/main/rt4/GlFont.class b/client/build/classes/java/main/rt4/GlFont.class new file mode 100644 index 0000000..73bada6 Binary files /dev/null and b/client/build/classes/java/main/rt4/GlFont.class differ diff --git a/client/build/classes/java/main/rt4/GlIndexedSprite.class b/client/build/classes/java/main/rt4/GlIndexedSprite.class new file mode 100644 index 0000000..8440678 Binary files /dev/null and b/client/build/classes/java/main/rt4/GlIndexedSprite.class differ diff --git a/client/build/classes/java/main/rt4/GlModel.class b/client/build/classes/java/main/rt4/GlModel.class new file mode 100644 index 0000000..f1e586f Binary files /dev/null and b/client/build/classes/java/main/rt4/GlModel.class differ diff --git a/client/build/classes/java/main/rt4/GlModel_Class23.class b/client/build/classes/java/main/rt4/GlModel_Class23.class new file mode 100644 index 0000000..a7c159d Binary files /dev/null and b/client/build/classes/java/main/rt4/GlModel_Class23.class differ diff --git a/client/build/classes/java/main/rt4/GlRaster.class b/client/build/classes/java/main/rt4/GlRaster.class new file mode 100644 index 0000000..95d2c53 Binary files /dev/null and b/client/build/classes/java/main/rt4/GlRaster.class differ diff --git a/client/build/classes/java/main/rt4/GlRenderer.class b/client/build/classes/java/main/rt4/GlRenderer.class new file mode 100644 index 0000000..2c0c8d5 Binary files /dev/null and b/client/build/classes/java/main/rt4/GlRenderer.class differ diff --git a/client/build/classes/java/main/rt4/GlSolidColorTexture.class b/client/build/classes/java/main/rt4/GlSolidColorTexture.class new file mode 100644 index 0000000..ab1865f Binary files /dev/null and b/client/build/classes/java/main/rt4/GlSolidColorTexture.class differ diff --git a/client/build/classes/java/main/rt4/GlSprite.class b/client/build/classes/java/main/rt4/GlSprite.class new file mode 100644 index 0000000..ab955d0 Binary files /dev/null and b/client/build/classes/java/main/rt4/GlSprite.class differ diff --git a/client/build/classes/java/main/rt4/GlTexture.class b/client/build/classes/java/main/rt4/GlTexture.class new file mode 100644 index 0000000..c54b789 Binary files /dev/null and b/client/build/classes/java/main/rt4/GlTexture.class differ diff --git a/client/build/classes/java/main/rt4/GlTile.class b/client/build/classes/java/main/rt4/GlTile.class new file mode 100644 index 0000000..c1d2bae Binary files /dev/null and b/client/build/classes/java/main/rt4/GlTile.class differ diff --git a/client/build/classes/java/main/rt4/GlVertexBufferObject.class b/client/build/classes/java/main/rt4/GlVertexBufferObject.class new file mode 100644 index 0000000..621af0b Binary files /dev/null and b/client/build/classes/java/main/rt4/GlVertexBufferObject.class differ diff --git a/client/build/classes/java/main/rt4/GlobalConfig.class b/client/build/classes/java/main/rt4/GlobalConfig.class new file mode 100644 index 0000000..88dcdde Binary files /dev/null and b/client/build/classes/java/main/rt4/GlobalConfig.class differ diff --git a/client/build/classes/java/main/rt4/GlobalJsonConfig.class b/client/build/classes/java/main/rt4/GlobalJsonConfig.class new file mode 100644 index 0000000..2500f57 Binary files /dev/null and b/client/build/classes/java/main/rt4/GlobalJsonConfig.class differ diff --git a/client/build/classes/java/main/rt4/GoSubFrame.class b/client/build/classes/java/main/rt4/GoSubFrame.class new file mode 100644 index 0000000..6f20462 Binary files /dev/null and b/client/build/classes/java/main/rt4/GoSubFrame.class differ diff --git a/client/build/classes/java/main/rt4/GroundDecor.class b/client/build/classes/java/main/rt4/GroundDecor.class new file mode 100644 index 0000000..b90d9cb Binary files /dev/null and b/client/build/classes/java/main/rt4/GroundDecor.class differ diff --git a/client/build/classes/java/main/rt4/GzipDecompressor.class b/client/build/classes/java/main/rt4/GzipDecompressor.class new file mode 100644 index 0000000..3488a2c Binary files /dev/null and b/client/build/classes/java/main/rt4/GzipDecompressor.class differ diff --git a/client/build/classes/java/main/rt4/HardReferenceNode.class b/client/build/classes/java/main/rt4/HardReferenceNode.class new file mode 100644 index 0000000..3f782df Binary files /dev/null and b/client/build/classes/java/main/rt4/HardReferenceNode.class differ diff --git a/client/build/classes/java/main/rt4/HashTable.class b/client/build/classes/java/main/rt4/HashTable.class new file mode 100644 index 0000000..b14cd01 Binary files /dev/null and b/client/build/classes/java/main/rt4/HashTable.class differ diff --git a/client/build/classes/java/main/rt4/HashTableIterator.class b/client/build/classes/java/main/rt4/HashTableIterator.class new file mode 100644 index 0000000..183ce68 Binary files /dev/null and b/client/build/classes/java/main/rt4/HashTableIterator.class differ diff --git a/client/build/classes/java/main/rt4/HintArrowManager.class b/client/build/classes/java/main/rt4/HintArrowManager.class new file mode 100644 index 0000000..6624f21 Binary files /dev/null and b/client/build/classes/java/main/rt4/HintArrowManager.class differ diff --git a/client/build/classes/java/main/rt4/HitBarList.class b/client/build/classes/java/main/rt4/HitBarList.class new file mode 100644 index 0000000..2935c0b Binary files /dev/null and b/client/build/classes/java/main/rt4/HitBarList.class differ diff --git a/client/build/classes/java/main/rt4/HookRequest.class b/client/build/classes/java/main/rt4/HookRequest.class new file mode 100644 index 0000000..189421e Binary files /dev/null and b/client/build/classes/java/main/rt4/HookRequest.class differ diff --git a/client/build/classes/java/main/rt4/HuffmanCodec.class b/client/build/classes/java/main/rt4/HuffmanCodec.class new file mode 100644 index 0000000..d8c16cc Binary files /dev/null and b/client/build/classes/java/main/rt4/HuffmanCodec.class differ diff --git a/client/build/classes/java/main/rt4/IdkType.class b/client/build/classes/java/main/rt4/IdkType.class new file mode 100644 index 0000000..bcd75b9 Binary files /dev/null and b/client/build/classes/java/main/rt4/IdkType.class differ diff --git a/client/build/classes/java/main/rt4/IdkTypeList.class b/client/build/classes/java/main/rt4/IdkTypeList.class new file mode 100644 index 0000000..864bd28 Binary files /dev/null and b/client/build/classes/java/main/rt4/IdkTypeList.class differ diff --git a/client/build/classes/java/main/rt4/IgnoreList.class b/client/build/classes/java/main/rt4/IgnoreList.class new file mode 100644 index 0000000..a63de03 Binary files /dev/null and b/client/build/classes/java/main/rt4/IgnoreList.class differ diff --git a/client/build/classes/java/main/rt4/ImageProducerFrameBuffer.class b/client/build/classes/java/main/rt4/ImageProducerFrameBuffer.class new file mode 100644 index 0000000..75b3162 Binary files /dev/null and b/client/build/classes/java/main/rt4/ImageProducerFrameBuffer.class differ diff --git a/client/build/classes/java/main/rt4/IndexedSprite.class b/client/build/classes/java/main/rt4/IndexedSprite.class new file mode 100644 index 0000000..6cd9a4a Binary files /dev/null and b/client/build/classes/java/main/rt4/IndexedSprite.class differ diff --git a/client/build/classes/java/main/rt4/IntHashTable.class b/client/build/classes/java/main/rt4/IntHashTable.class new file mode 100644 index 0000000..1fd22a9 Binary files /dev/null and b/client/build/classes/java/main/rt4/IntHashTable.class differ diff --git a/client/build/classes/java/main/rt4/IntNode.class b/client/build/classes/java/main/rt4/IntNode.class new file mode 100644 index 0000000..fdbf459 Binary files /dev/null and b/client/build/classes/java/main/rt4/IntNode.class differ diff --git a/client/build/classes/java/main/rt4/IntUtils.class b/client/build/classes/java/main/rt4/IntUtils.class new file mode 100644 index 0000000..4a0dee8 Binary files /dev/null and b/client/build/classes/java/main/rt4/IntUtils.class differ diff --git a/client/build/classes/java/main/rt4/InterfaceList.class b/client/build/classes/java/main/rt4/InterfaceList.class new file mode 100644 index 0000000..bb1906e Binary files /dev/null and b/client/build/classes/java/main/rt4/InterfaceList.class differ diff --git a/client/build/classes/java/main/rt4/Inv.class b/client/build/classes/java/main/rt4/Inv.class new file mode 100644 index 0000000..e8960dc Binary files /dev/null and b/client/build/classes/java/main/rt4/Inv.class differ diff --git a/client/build/classes/java/main/rt4/InvType.class b/client/build/classes/java/main/rt4/InvType.class new file mode 100644 index 0000000..92d9e7e Binary files /dev/null and b/client/build/classes/java/main/rt4/InvType.class differ diff --git a/client/build/classes/java/main/rt4/InvTypeList.class b/client/build/classes/java/main/rt4/InvTypeList.class new file mode 100644 index 0000000..ed30870 Binary files /dev/null and b/client/build/classes/java/main/rt4/InvTypeList.class differ diff --git a/client/build/classes/java/main/rt4/IsaacRandom.class b/client/build/classes/java/main/rt4/IsaacRandom.class new file mode 100644 index 0000000..51a92a4 Binary files /dev/null and b/client/build/classes/java/main/rt4/IsaacRandom.class differ diff --git a/client/build/classes/java/main/rt4/JagString.class b/client/build/classes/java/main/rt4/JagString.class new file mode 100644 index 0000000..1ec3a4f Binary files /dev/null and b/client/build/classes/java/main/rt4/JagString.class differ diff --git a/client/build/classes/java/main/rt4/JavaAudioChannel.class b/client/build/classes/java/main/rt4/JavaAudioChannel.class new file mode 100644 index 0000000..8d36a50 Binary files /dev/null and b/client/build/classes/java/main/rt4/JavaAudioChannel.class differ diff --git a/client/build/classes/java/main/rt4/JavaMouseWheel.class b/client/build/classes/java/main/rt4/JavaMouseWheel.class new file mode 100644 index 0000000..a2f3d3f Binary files /dev/null and b/client/build/classes/java/main/rt4/JavaMouseWheel.class differ diff --git a/client/build/classes/java/main/rt4/Js5.class b/client/build/classes/java/main/rt4/Js5.class new file mode 100644 index 0000000..16b4718 Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5.class differ diff --git a/client/build/classes/java/main/rt4/Js5CacheQueue.class b/client/build/classes/java/main/rt4/Js5CacheQueue.class new file mode 100644 index 0000000..ec43489 Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5CacheQueue.class differ diff --git a/client/build/classes/java/main/rt4/Js5CacheRequest.class b/client/build/classes/java/main/rt4/Js5CacheRequest.class new file mode 100644 index 0000000..ef51a2f Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5CacheRequest.class differ diff --git a/client/build/classes/java/main/rt4/Js5CachedResourceProvider.class b/client/build/classes/java/main/rt4/Js5CachedResourceProvider.class new file mode 100644 index 0000000..6ca5fc6 Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5CachedResourceProvider.class differ diff --git a/client/build/classes/java/main/rt4/Js5Compression.class b/client/build/classes/java/main/rt4/Js5Compression.class new file mode 100644 index 0000000..e5d3de3 Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5Compression.class differ diff --git a/client/build/classes/java/main/rt4/Js5GlTextureProvider.class b/client/build/classes/java/main/rt4/Js5GlTextureProvider.class new file mode 100644 index 0000000..1a2d274 Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5GlTextureProvider.class differ diff --git a/client/build/classes/java/main/rt4/Js5Index.class b/client/build/classes/java/main/rt4/Js5Index.class new file mode 100644 index 0000000..f788b42 Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5Index.class differ diff --git a/client/build/classes/java/main/rt4/Js5MasterIndex.class b/client/build/classes/java/main/rt4/Js5MasterIndex.class new file mode 100644 index 0000000..82485e7 Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5MasterIndex.class differ diff --git a/client/build/classes/java/main/rt4/Js5NetQueue.class b/client/build/classes/java/main/rt4/Js5NetQueue.class new file mode 100644 index 0000000..002f66e Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5NetQueue.class differ diff --git a/client/build/classes/java/main/rt4/Js5NetRequest.class b/client/build/classes/java/main/rt4/Js5NetRequest.class new file mode 100644 index 0000000..be5f181 Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5NetRequest.class differ diff --git a/client/build/classes/java/main/rt4/Js5QuickChatCommandDecoder.class b/client/build/classes/java/main/rt4/Js5QuickChatCommandDecoder.class new file mode 100644 index 0000000..f96318b Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5QuickChatCommandDecoder.class differ diff --git a/client/build/classes/java/main/rt4/Js5Request.class b/client/build/classes/java/main/rt4/Js5Request.class new file mode 100644 index 0000000..d39d69f Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5Request.class differ diff --git a/client/build/classes/java/main/rt4/Js5ResourceProvider.class b/client/build/classes/java/main/rt4/Js5ResourceProvider.class new file mode 100644 index 0000000..dedf4e4 Binary files /dev/null and b/client/build/classes/java/main/rt4/Js5ResourceProvider.class differ diff --git a/client/build/classes/java/main/rt4/Keyboard.class b/client/build/classes/java/main/rt4/Keyboard.class new file mode 100644 index 0000000..3a37403 Binary files /dev/null and b/client/build/classes/java/main/rt4/Keyboard.class differ diff --git a/client/build/classes/java/main/rt4/LangUtils.class b/client/build/classes/java/main/rt4/LangUtils.class new file mode 100644 index 0000000..a774b0a Binary files /dev/null and b/client/build/classes/java/main/rt4/LangUtils.class differ diff --git a/client/build/classes/java/main/rt4/Light.class b/client/build/classes/java/main/rt4/Light.class new file mode 100644 index 0000000..41d3c1d Binary files /dev/null and b/client/build/classes/java/main/rt4/Light.class differ diff --git a/client/build/classes/java/main/rt4/LightType.class b/client/build/classes/java/main/rt4/LightType.class new file mode 100644 index 0000000..65095c3 Binary files /dev/null and b/client/build/classes/java/main/rt4/LightType.class differ diff --git a/client/build/classes/java/main/rt4/LightTypeList.class b/client/build/classes/java/main/rt4/LightTypeList.class new file mode 100644 index 0000000..6ff6177 Binary files /dev/null and b/client/build/classes/java/main/rt4/LightTypeList.class differ diff --git a/client/build/classes/java/main/rt4/Light_Class45.class b/client/build/classes/java/main/rt4/Light_Class45.class new file mode 100644 index 0000000..b89a8d5 Binary files /dev/null and b/client/build/classes/java/main/rt4/Light_Class45.class differ diff --git a/client/build/classes/java/main/rt4/LightingManager.class b/client/build/classes/java/main/rt4/LightingManager.class new file mode 100644 index 0000000..3ce27d6 Binary files /dev/null and b/client/build/classes/java/main/rt4/LightingManager.class differ diff --git a/client/build/classes/java/main/rt4/LinkedList.class b/client/build/classes/java/main/rt4/LinkedList.class new file mode 100644 index 0000000..24307e3 Binary files /dev/null and b/client/build/classes/java/main/rt4/LinkedList.class differ diff --git a/client/build/classes/java/main/rt4/LiquidMaterialRenderer.class b/client/build/classes/java/main/rt4/LiquidMaterialRenderer.class new file mode 100644 index 0000000..197ecfa Binary files /dev/null and b/client/build/classes/java/main/rt4/LiquidMaterialRenderer.class differ diff --git a/client/build/classes/java/main/rt4/LoadingBar.class b/client/build/classes/java/main/rt4/LoadingBar.class new file mode 100644 index 0000000..83c8028 Binary files /dev/null and b/client/build/classes/java/main/rt4/LoadingBar.class differ diff --git a/client/build/classes/java/main/rt4/LoadingBarAwt.class b/client/build/classes/java/main/rt4/LoadingBarAwt.class new file mode 100644 index 0000000..b9ad347 Binary files /dev/null and b/client/build/classes/java/main/rt4/LoadingBarAwt.class differ diff --git a/client/build/classes/java/main/rt4/Loc.class b/client/build/classes/java/main/rt4/Loc.class new file mode 100644 index 0000000..3955e66 Binary files /dev/null and b/client/build/classes/java/main/rt4/Loc.class differ diff --git a/client/build/classes/java/main/rt4/LocEntity.class b/client/build/classes/java/main/rt4/LocEntity.class new file mode 100644 index 0000000..7f6b56e Binary files /dev/null and b/client/build/classes/java/main/rt4/LocEntity.class differ diff --git a/client/build/classes/java/main/rt4/LocType.class b/client/build/classes/java/main/rt4/LocType.class new file mode 100644 index 0000000..a06430f Binary files /dev/null and b/client/build/classes/java/main/rt4/LocType.class differ diff --git a/client/build/classes/java/main/rt4/LocTypeList.class b/client/build/classes/java/main/rt4/LocTypeList.class new file mode 100644 index 0000000..61db967 Binary files /dev/null and b/client/build/classes/java/main/rt4/LocTypeList.class differ diff --git a/client/build/classes/java/main/rt4/LocalizedText.class b/client/build/classes/java/main/rt4/LocalizedText.class new file mode 100644 index 0000000..8feb67a Binary files /dev/null and b/client/build/classes/java/main/rt4/LocalizedText.class differ diff --git a/client/build/classes/java/main/rt4/LoginManager.class b/client/build/classes/java/main/rt4/LoginManager.class new file mode 100644 index 0000000..9013b43 Binary files /dev/null and b/client/build/classes/java/main/rt4/LoginManager.class differ diff --git a/client/build/classes/java/main/rt4/LongNode.class b/client/build/classes/java/main/rt4/LongNode.class new file mode 100644 index 0000000..8585cb9 Binary files /dev/null and b/client/build/classes/java/main/rt4/LongNode.class differ diff --git a/client/build/classes/java/main/rt4/LruHashTable.class b/client/build/classes/java/main/rt4/LruHashTable.class new file mode 100644 index 0000000..665fcbf Binary files /dev/null and b/client/build/classes/java/main/rt4/LruHashTable.class differ diff --git a/client/build/classes/java/main/rt4/Map.class b/client/build/classes/java/main/rt4/Map.class new file mode 100644 index 0000000..526e6af Binary files /dev/null and b/client/build/classes/java/main/rt4/Map.class differ diff --git a/client/build/classes/java/main/rt4/MapChunk.class b/client/build/classes/java/main/rt4/MapChunk.class new file mode 100644 index 0000000..50e00ca Binary files /dev/null and b/client/build/classes/java/main/rt4/MapChunk.class differ diff --git a/client/build/classes/java/main/rt4/MapElement.class b/client/build/classes/java/main/rt4/MapElement.class new file mode 100644 index 0000000..bbd4dd1 Binary files /dev/null and b/client/build/classes/java/main/rt4/MapElement.class differ diff --git a/client/build/classes/java/main/rt4/MapElementList.class b/client/build/classes/java/main/rt4/MapElementList.class new file mode 100644 index 0000000..4838f1d Binary files /dev/null and b/client/build/classes/java/main/rt4/MapElementList.class differ diff --git a/client/build/classes/java/main/rt4/MapList.class b/client/build/classes/java/main/rt4/MapList.class new file mode 100644 index 0000000..1e124e1 Binary files /dev/null and b/client/build/classes/java/main/rt4/MapList.class differ diff --git a/client/build/classes/java/main/rt4/MapMarker.class b/client/build/classes/java/main/rt4/MapMarker.class new file mode 100644 index 0000000..69ba703 Binary files /dev/null and b/client/build/classes/java/main/rt4/MapMarker.class differ diff --git a/client/build/classes/java/main/rt4/MaterialManager.class b/client/build/classes/java/main/rt4/MaterialManager.class new file mode 100644 index 0000000..15c70e3 Binary files /dev/null and b/client/build/classes/java/main/rt4/MaterialManager.class differ diff --git a/client/build/classes/java/main/rt4/MaterialManager_Class106.class b/client/build/classes/java/main/rt4/MaterialManager_Class106.class new file mode 100644 index 0000000..6594d70 Binary files /dev/null and b/client/build/classes/java/main/rt4/MaterialManager_Class106.class differ diff --git a/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub1.class b/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub1.class new file mode 100644 index 0000000..51f7850 Binary files /dev/null and b/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub1.class differ diff --git a/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub1_Sub1.class b/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub1_Sub1.class new file mode 100644 index 0000000..0392663 Binary files /dev/null and b/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub1_Sub1.class differ diff --git a/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub2.class b/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub2.class new file mode 100644 index 0000000..8004c1f Binary files /dev/null and b/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub2.class differ diff --git a/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub2_Sub1.class b/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub2_Sub1.class new file mode 100644 index 0000000..83f6f29 Binary files /dev/null and b/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub2_Sub1.class differ diff --git a/client/build/classes/java/main/rt4/MaterialRenderer.class b/client/build/classes/java/main/rt4/MaterialRenderer.class new file mode 100644 index 0000000..e725ede Binary files /dev/null and b/client/build/classes/java/main/rt4/MaterialRenderer.class differ diff --git a/client/build/classes/java/main/rt4/MathUtils.class b/client/build/classes/java/main/rt4/MathUtils.class new file mode 100644 index 0000000..ba212cd Binary files /dev/null and b/client/build/classes/java/main/rt4/MathUtils.class differ diff --git a/client/build/classes/java/main/rt4/MidiDecoder.class b/client/build/classes/java/main/rt4/MidiDecoder.class new file mode 100644 index 0000000..c16b58c Binary files /dev/null and b/client/build/classes/java/main/rt4/MidiDecoder.class differ diff --git a/client/build/classes/java/main/rt4/MidiInstrument.class b/client/build/classes/java/main/rt4/MidiInstrument.class new file mode 100644 index 0000000..9128f40 Binary files /dev/null and b/client/build/classes/java/main/rt4/MidiInstrument.class differ diff --git a/client/build/classes/java/main/rt4/MidiNote.class b/client/build/classes/java/main/rt4/MidiNote.class new file mode 100644 index 0000000..97c0d0c Binary files /dev/null and b/client/build/classes/java/main/rt4/MidiNote.class differ diff --git a/client/build/classes/java/main/rt4/MidiNoteStream.class b/client/build/classes/java/main/rt4/MidiNoteStream.class new file mode 100644 index 0000000..b264886 Binary files /dev/null and b/client/build/classes/java/main/rt4/MidiNoteStream.class differ diff --git a/client/build/classes/java/main/rt4/MidiPcmStream.class b/client/build/classes/java/main/rt4/MidiPcmStream.class new file mode 100644 index 0000000..d848ffc Binary files /dev/null and b/client/build/classes/java/main/rt4/MidiPcmStream.class differ diff --git a/client/build/classes/java/main/rt4/MidiPlayer.class b/client/build/classes/java/main/rt4/MidiPlayer.class new file mode 100644 index 0000000..ef97421 Binary files /dev/null and b/client/build/classes/java/main/rt4/MidiPlayer.class differ diff --git a/client/build/classes/java/main/rt4/Midi_Class162.class b/client/build/classes/java/main/rt4/Midi_Class162.class new file mode 100644 index 0000000..e76a442 Binary files /dev/null and b/client/build/classes/java/main/rt4/Midi_Class162.class differ diff --git a/client/build/classes/java/main/rt4/MillisTimer.class b/client/build/classes/java/main/rt4/MillisTimer.class new file mode 100644 index 0000000..92383a1 Binary files /dev/null and b/client/build/classes/java/main/rt4/MillisTimer.class differ diff --git a/client/build/classes/java/main/rt4/MiniMap.class b/client/build/classes/java/main/rt4/MiniMap.class new file mode 100644 index 0000000..622b0c5 Binary files /dev/null and b/client/build/classes/java/main/rt4/MiniMap.class differ diff --git a/client/build/classes/java/main/rt4/MiniMenu.class b/client/build/classes/java/main/rt4/MiniMenu.class new file mode 100644 index 0000000..0065291 Binary files /dev/null and b/client/build/classes/java/main/rt4/MiniMenu.class differ diff --git a/client/build/classes/java/main/rt4/MixerListener.class b/client/build/classes/java/main/rt4/MixerListener.class new file mode 100644 index 0000000..a51f388 Binary files /dev/null and b/client/build/classes/java/main/rt4/MixerListener.class differ diff --git a/client/build/classes/java/main/rt4/MixerPcmStream.class b/client/build/classes/java/main/rt4/MixerPcmStream.class new file mode 100644 index 0000000..d7354ea Binary files /dev/null and b/client/build/classes/java/main/rt4/MixerPcmStream.class differ diff --git a/client/build/classes/java/main/rt4/Model.class b/client/build/classes/java/main/rt4/Model.class new file mode 100644 index 0000000..6bc43d7 Binary files /dev/null and b/client/build/classes/java/main/rt4/Model.class differ diff --git a/client/build/classes/java/main/rt4/MonochromeImageCache.class b/client/build/classes/java/main/rt4/MonochromeImageCache.class new file mode 100644 index 0000000..f093d68 Binary files /dev/null and b/client/build/classes/java/main/rt4/MonochromeImageCache.class differ diff --git a/client/build/classes/java/main/rt4/MonochromeImageCacheEntry.class b/client/build/classes/java/main/rt4/MonochromeImageCacheEntry.class new file mode 100644 index 0000000..dba51b8 Binary files /dev/null and b/client/build/classes/java/main/rt4/MonochromeImageCacheEntry.class differ diff --git a/client/build/classes/java/main/rt4/Mouse.class b/client/build/classes/java/main/rt4/Mouse.class new file mode 100644 index 0000000..2e46a45 Binary files /dev/null and b/client/build/classes/java/main/rt4/Mouse.class differ diff --git a/client/build/classes/java/main/rt4/MouseRecorder.class b/client/build/classes/java/main/rt4/MouseRecorder.class new file mode 100644 index 0000000..82910de Binary files /dev/null and b/client/build/classes/java/main/rt4/MouseRecorder.class differ diff --git a/client/build/classes/java/main/rt4/MouseWheel.class b/client/build/classes/java/main/rt4/MouseWheel.class new file mode 100644 index 0000000..765ef6b Binary files /dev/null and b/client/build/classes/java/main/rt4/MouseWheel.class differ diff --git a/client/build/classes/java/main/rt4/MsiType.class b/client/build/classes/java/main/rt4/MsiType.class new file mode 100644 index 0000000..f23a2f4 Binary files /dev/null and b/client/build/classes/java/main/rt4/MsiType.class differ diff --git a/client/build/classes/java/main/rt4/MsiTypeList.class b/client/build/classes/java/main/rt4/MsiTypeList.class new file mode 100644 index 0000000..c6be4d3 Binary files /dev/null and b/client/build/classes/java/main/rt4/MsiTypeList.class differ diff --git a/client/build/classes/java/main/rt4/MusicPlayer.class b/client/build/classes/java/main/rt4/MusicPlayer.class new file mode 100644 index 0000000..9a5637b Binary files /dev/null and b/client/build/classes/java/main/rt4/MusicPlayer.class differ diff --git a/client/build/classes/java/main/rt4/NanoTimer.class b/client/build/classes/java/main/rt4/NanoTimer.class new file mode 100644 index 0000000..fe9b725 Binary files /dev/null and b/client/build/classes/java/main/rt4/NanoTimer.class differ diff --git a/client/build/classes/java/main/rt4/Node.class b/client/build/classes/java/main/rt4/Node.class new file mode 100644 index 0000000..8688b68 Binary files /dev/null and b/client/build/classes/java/main/rt4/Node.class differ diff --git a/client/build/classes/java/main/rt4/Npc.class b/client/build/classes/java/main/rt4/Npc.class new file mode 100644 index 0000000..b270875 Binary files /dev/null and b/client/build/classes/java/main/rt4/Npc.class differ diff --git a/client/build/classes/java/main/rt4/NpcList.class b/client/build/classes/java/main/rt4/NpcList.class new file mode 100644 index 0000000..91981a6 Binary files /dev/null and b/client/build/classes/java/main/rt4/NpcList.class differ diff --git a/client/build/classes/java/main/rt4/NpcType.class b/client/build/classes/java/main/rt4/NpcType.class new file mode 100644 index 0000000..4f3db9a Binary files /dev/null and b/client/build/classes/java/main/rt4/NpcType.class differ diff --git a/client/build/classes/java/main/rt4/NpcTypeList.class b/client/build/classes/java/main/rt4/NpcTypeList.class new file mode 100644 index 0000000..953dafc Binary files /dev/null and b/client/build/classes/java/main/rt4/NpcTypeList.class differ diff --git a/client/build/classes/java/main/rt4/ObjStack.class b/client/build/classes/java/main/rt4/ObjStack.class new file mode 100644 index 0000000..86ff377 Binary files /dev/null and b/client/build/classes/java/main/rt4/ObjStack.class differ diff --git a/client/build/classes/java/main/rt4/ObjStackEntity.class b/client/build/classes/java/main/rt4/ObjStackEntity.class new file mode 100644 index 0000000..95fc527 Binary files /dev/null and b/client/build/classes/java/main/rt4/ObjStackEntity.class differ diff --git a/client/build/classes/java/main/rt4/ObjStackNode.class b/client/build/classes/java/main/rt4/ObjStackNode.class new file mode 100644 index 0000000..0907823 Binary files /dev/null and b/client/build/classes/java/main/rt4/ObjStackNode.class differ diff --git a/client/build/classes/java/main/rt4/ObjType$Opcodes.class b/client/build/classes/java/main/rt4/ObjType$Opcodes.class new file mode 100644 index 0000000..eb20fad Binary files /dev/null and b/client/build/classes/java/main/rt4/ObjType$Opcodes.class differ diff --git a/client/build/classes/java/main/rt4/ObjType.class b/client/build/classes/java/main/rt4/ObjType.class new file mode 100644 index 0000000..5d02b2d Binary files /dev/null and b/client/build/classes/java/main/rt4/ObjType.class differ diff --git a/client/build/classes/java/main/rt4/ObjTypeList.class b/client/build/classes/java/main/rt4/ObjTypeList.class new file mode 100644 index 0000000..f831841 Binary files /dev/null and b/client/build/classes/java/main/rt4/ObjTypeList.class differ diff --git a/client/build/classes/java/main/rt4/OverheadChat.class b/client/build/classes/java/main/rt4/OverheadChat.class new file mode 100644 index 0000000..e6e6aa7 Binary files /dev/null and b/client/build/classes/java/main/rt4/OverheadChat.class differ diff --git a/client/build/classes/java/main/rt4/Packet.class b/client/build/classes/java/main/rt4/Packet.class new file mode 100644 index 0000000..6e1b899 Binary files /dev/null and b/client/build/classes/java/main/rt4/Packet.class differ diff --git a/client/build/classes/java/main/rt4/ParamType.class b/client/build/classes/java/main/rt4/ParamType.class new file mode 100644 index 0000000..4c48b58 Binary files /dev/null and b/client/build/classes/java/main/rt4/ParamType.class differ diff --git a/client/build/classes/java/main/rt4/ParamTypeList.class b/client/build/classes/java/main/rt4/ParamTypeList.class new file mode 100644 index 0000000..f9750d0 Binary files /dev/null and b/client/build/classes/java/main/rt4/ParamTypeList.class differ diff --git a/client/build/classes/java/main/rt4/ParticleNode.class b/client/build/classes/java/main/rt4/ParticleNode.class new file mode 100644 index 0000000..1f97d54 Binary files /dev/null and b/client/build/classes/java/main/rt4/ParticleNode.class differ diff --git a/client/build/classes/java/main/rt4/ParticleSystem.class b/client/build/classes/java/main/rt4/ParticleSystem.class new file mode 100644 index 0000000..3125e2c Binary files /dev/null and b/client/build/classes/java/main/rt4/ParticleSystem.class differ diff --git a/client/build/classes/java/main/rt4/PathFinder.class b/client/build/classes/java/main/rt4/PathFinder.class new file mode 100644 index 0000000..43705ac Binary files /dev/null and b/client/build/classes/java/main/rt4/PathFinder.class differ diff --git a/client/build/classes/java/main/rt4/PathingEntity.class b/client/build/classes/java/main/rt4/PathingEntity.class new file mode 100644 index 0000000..f500420 Binary files /dev/null and b/client/build/classes/java/main/rt4/PathingEntity.class differ diff --git a/client/build/classes/java/main/rt4/PathingEntity_Class147.class b/client/build/classes/java/main/rt4/PathingEntity_Class147.class new file mode 100644 index 0000000..91ff1c3 Binary files /dev/null and b/client/build/classes/java/main/rt4/PathingEntity_Class147.class differ diff --git a/client/build/classes/java/main/rt4/PcmResampler.class b/client/build/classes/java/main/rt4/PcmResampler.class new file mode 100644 index 0000000..4061020 Binary files /dev/null and b/client/build/classes/java/main/rt4/PcmResampler.class differ diff --git a/client/build/classes/java/main/rt4/PcmSound.class b/client/build/classes/java/main/rt4/PcmSound.class new file mode 100644 index 0000000..5dcb668 Binary files /dev/null and b/client/build/classes/java/main/rt4/PcmSound.class differ diff --git a/client/build/classes/java/main/rt4/PcmStream.class b/client/build/classes/java/main/rt4/PcmStream.class new file mode 100644 index 0000000..aa69343 Binary files /dev/null and b/client/build/classes/java/main/rt4/PcmStream.class differ diff --git a/client/build/classes/java/main/rt4/PerlinNoise.class b/client/build/classes/java/main/rt4/PerlinNoise.class new file mode 100644 index 0000000..f310472 Binary files /dev/null and b/client/build/classes/java/main/rt4/PerlinNoise.class differ diff --git a/client/build/classes/java/main/rt4/PlainTile.class b/client/build/classes/java/main/rt4/PlainTile.class new file mode 100644 index 0000000..6e8e8fb Binary files /dev/null and b/client/build/classes/java/main/rt4/PlainTile.class differ diff --git a/client/build/classes/java/main/rt4/Player.class b/client/build/classes/java/main/rt4/Player.class new file mode 100644 index 0000000..c65c124 Binary files /dev/null and b/client/build/classes/java/main/rt4/Player.class differ diff --git a/client/build/classes/java/main/rt4/PlayerAppearance.class b/client/build/classes/java/main/rt4/PlayerAppearance.class new file mode 100644 index 0000000..76d74ac Binary files /dev/null and b/client/build/classes/java/main/rt4/PlayerAppearance.class differ diff --git a/client/build/classes/java/main/rt4/PlayerList.class b/client/build/classes/java/main/rt4/PlayerList.class new file mode 100644 index 0000000..9c1bd6e Binary files /dev/null and b/client/build/classes/java/main/rt4/PlayerList.class differ diff --git a/client/build/classes/java/main/rt4/PlayerSkillXpTable.class b/client/build/classes/java/main/rt4/PlayerSkillXpTable.class new file mode 100644 index 0000000..cd80393 Binary files /dev/null and b/client/build/classes/java/main/rt4/PlayerSkillXpTable.class differ diff --git a/client/build/classes/java/main/rt4/Preferences.class b/client/build/classes/java/main/rt4/Preferences.class new file mode 100644 index 0000000..fbd2677 Binary files /dev/null and b/client/build/classes/java/main/rt4/Preferences.class differ diff --git a/client/build/classes/java/main/rt4/ProjAnim.class b/client/build/classes/java/main/rt4/ProjAnim.class new file mode 100644 index 0000000..6254467 Binary files /dev/null and b/client/build/classes/java/main/rt4/ProjAnim.class differ diff --git a/client/build/classes/java/main/rt4/ProjAnimNode.class b/client/build/classes/java/main/rt4/ProjAnimNode.class new file mode 100644 index 0000000..844ab70 Binary files /dev/null and b/client/build/classes/java/main/rt4/ProjAnimNode.class differ diff --git a/client/build/classes/java/main/rt4/Protocol.class b/client/build/classes/java/main/rt4/Protocol.class new file mode 100644 index 0000000..eb13929 Binary files /dev/null and b/client/build/classes/java/main/rt4/Protocol.class differ diff --git a/client/build/classes/java/main/rt4/QuickChatCatType.class b/client/build/classes/java/main/rt4/QuickChatCatType.class new file mode 100644 index 0000000..c4512e1 Binary files /dev/null and b/client/build/classes/java/main/rt4/QuickChatCatType.class differ diff --git a/client/build/classes/java/main/rt4/QuickChatCatTypeList.class b/client/build/classes/java/main/rt4/QuickChatCatTypeList.class new file mode 100644 index 0000000..10d806b Binary files /dev/null and b/client/build/classes/java/main/rt4/QuickChatCatTypeList.class differ diff --git a/client/build/classes/java/main/rt4/QuickChatCommandDecoder.class b/client/build/classes/java/main/rt4/QuickChatCommandDecoder.class new file mode 100644 index 0000000..57e2cc2 Binary files /dev/null and b/client/build/classes/java/main/rt4/QuickChatCommandDecoder.class differ diff --git a/client/build/classes/java/main/rt4/QuickChatPhrase.class b/client/build/classes/java/main/rt4/QuickChatPhrase.class new file mode 100644 index 0000000..587dae6 Binary files /dev/null and b/client/build/classes/java/main/rt4/QuickChatPhrase.class differ diff --git a/client/build/classes/java/main/rt4/QuickChatPhraseType.class b/client/build/classes/java/main/rt4/QuickChatPhraseType.class new file mode 100644 index 0000000..71ef777 Binary files /dev/null and b/client/build/classes/java/main/rt4/QuickChatPhraseType.class differ diff --git a/client/build/classes/java/main/rt4/QuickChatPhraseTypeList.class b/client/build/classes/java/main/rt4/QuickChatPhraseTypeList.class new file mode 100644 index 0000000..c9e3526 Binary files /dev/null and b/client/build/classes/java/main/rt4/QuickChatPhraseTypeList.class differ diff --git a/client/build/classes/java/main/rt4/RandomUtils.class b/client/build/classes/java/main/rt4/RandomUtils.class new file mode 100644 index 0000000..f5237f7 Binary files /dev/null and b/client/build/classes/java/main/rt4/RandomUtils.class differ diff --git a/client/build/classes/java/main/rt4/Rasteriser.class b/client/build/classes/java/main/rt4/Rasteriser.class new file mode 100644 index 0000000..e1f9c63 Binary files /dev/null and b/client/build/classes/java/main/rt4/Rasteriser.class differ diff --git a/client/build/classes/java/main/rt4/RawModel.class b/client/build/classes/java/main/rt4/RawModel.class new file mode 100644 index 0000000..e11226d Binary files /dev/null and b/client/build/classes/java/main/rt4/RawModel.class differ diff --git a/client/build/classes/java/main/rt4/ReferenceNode.class b/client/build/classes/java/main/rt4/ReferenceNode.class new file mode 100644 index 0000000..724dbb8 Binary files /dev/null and b/client/build/classes/java/main/rt4/ReferenceNode.class differ diff --git a/client/build/classes/java/main/rt4/ReferenceNodeFactory.class b/client/build/classes/java/main/rt4/ReferenceNodeFactory.class new file mode 100644 index 0000000..2eab303 Binary files /dev/null and b/client/build/classes/java/main/rt4/ReferenceNodeFactory.class differ diff --git a/client/build/classes/java/main/rt4/ReflectionCheck.class b/client/build/classes/java/main/rt4/ReflectionCheck.class new file mode 100644 index 0000000..818b921 Binary files /dev/null and b/client/build/classes/java/main/rt4/ReflectionCheck.class differ diff --git a/client/build/classes/java/main/rt4/SceneGraph.class b/client/build/classes/java/main/rt4/SceneGraph.class new file mode 100644 index 0000000..25a6199 Binary files /dev/null and b/client/build/classes/java/main/rt4/SceneGraph.class differ diff --git a/client/build/classes/java/main/rt4/SceneGraph_Class120.class b/client/build/classes/java/main/rt4/SceneGraph_Class120.class new file mode 100644 index 0000000..2a5b055 Binary files /dev/null and b/client/build/classes/java/main/rt4/SceneGraph_Class120.class differ diff --git a/client/build/classes/java/main/rt4/Scenery.class b/client/build/classes/java/main/rt4/Scenery.class new file mode 100644 index 0000000..cfcba6d Binary files /dev/null and b/client/build/classes/java/main/rt4/Scenery.class differ diff --git a/client/build/classes/java/main/rt4/ScriptRunner$Cs2Opcodes.class b/client/build/classes/java/main/rt4/ScriptRunner$Cs2Opcodes.class new file mode 100644 index 0000000..6bc75d2 Binary files /dev/null and b/client/build/classes/java/main/rt4/ScriptRunner$Cs2Opcodes.class differ diff --git a/client/build/classes/java/main/rt4/ScriptRunner.class b/client/build/classes/java/main/rt4/ScriptRunner.class new file mode 100644 index 0000000..6129e37 Binary files /dev/null and b/client/build/classes/java/main/rt4/ScriptRunner.class differ diff --git a/client/build/classes/java/main/rt4/SecondaryHashTable.class b/client/build/classes/java/main/rt4/SecondaryHashTable.class new file mode 100644 index 0000000..742699d Binary files /dev/null and b/client/build/classes/java/main/rt4/SecondaryHashTable.class differ diff --git a/client/build/classes/java/main/rt4/SecondaryLinkedList.class b/client/build/classes/java/main/rt4/SecondaryLinkedList.class new file mode 100644 index 0000000..6eb465a Binary files /dev/null and b/client/build/classes/java/main/rt4/SecondaryLinkedList.class differ diff --git a/client/build/classes/java/main/rt4/SecondaryNode.class b/client/build/classes/java/main/rt4/SecondaryNode.class new file mode 100644 index 0000000..63d2a5f Binary files /dev/null and b/client/build/classes/java/main/rt4/SecondaryNode.class differ diff --git a/client/build/classes/java/main/rt4/SeqType.class b/client/build/classes/java/main/rt4/SeqType.class new file mode 100644 index 0000000..406a5ff Binary files /dev/null and b/client/build/classes/java/main/rt4/SeqType.class differ diff --git a/client/build/classes/java/main/rt4/SeqTypeList.class b/client/build/classes/java/main/rt4/SeqTypeList.class new file mode 100644 index 0000000..d7d03f3 Binary files /dev/null and b/client/build/classes/java/main/rt4/SeqTypeList.class differ diff --git a/client/build/classes/java/main/rt4/ServerActiveProperties.class b/client/build/classes/java/main/rt4/ServerActiveProperties.class new file mode 100644 index 0000000..639d347 Binary files /dev/null and b/client/build/classes/java/main/rt4/ServerActiveProperties.class differ diff --git a/client/build/classes/java/main/rt4/ServerProt.class b/client/build/classes/java/main/rt4/ServerProt.class new file mode 100644 index 0000000..8716934 Binary files /dev/null and b/client/build/classes/java/main/rt4/ServerProt.class differ diff --git a/client/build/classes/java/main/rt4/Shadow.class b/client/build/classes/java/main/rt4/Shadow.class new file mode 100644 index 0000000..fdf1559 Binary files /dev/null and b/client/build/classes/java/main/rt4/Shadow.class differ diff --git a/client/build/classes/java/main/rt4/ShadowManager.class b/client/build/classes/java/main/rt4/ShadowManager.class new file mode 100644 index 0000000..4816122 Binary files /dev/null and b/client/build/classes/java/main/rt4/ShadowManager.class differ diff --git a/client/build/classes/java/main/rt4/ShadowModelList.class b/client/build/classes/java/main/rt4/ShadowModelList.class new file mode 100644 index 0000000..b142f45 Binary files /dev/null and b/client/build/classes/java/main/rt4/ShadowModelList.class differ diff --git a/client/build/classes/java/main/rt4/ShapedTile.class b/client/build/classes/java/main/rt4/ShapedTile.class new file mode 100644 index 0000000..bb4b4fa Binary files /dev/null and b/client/build/classes/java/main/rt4/ShapedTile.class differ diff --git a/client/build/classes/java/main/rt4/SignLinkAudioChannel.class b/client/build/classes/java/main/rt4/SignLinkAudioChannel.class new file mode 100644 index 0000000..5942649 Binary files /dev/null and b/client/build/classes/java/main/rt4/SignLinkAudioChannel.class differ diff --git a/client/build/classes/java/main/rt4/SoftLruHashTable.class b/client/build/classes/java/main/rt4/SoftLruHashTable.class new file mode 100644 index 0000000..e621bdd Binary files /dev/null and b/client/build/classes/java/main/rt4/SoftLruHashTable.class differ diff --git a/client/build/classes/java/main/rt4/SoftReferenceNode.class b/client/build/classes/java/main/rt4/SoftReferenceNode.class new file mode 100644 index 0000000..396299b Binary files /dev/null and b/client/build/classes/java/main/rt4/SoftReferenceNode.class differ diff --git a/client/build/classes/java/main/rt4/SoftReferenceNodeFactory.class b/client/build/classes/java/main/rt4/SoftReferenceNodeFactory.class new file mode 100644 index 0000000..77b6401 Binary files /dev/null and b/client/build/classes/java/main/rt4/SoftReferenceNodeFactory.class differ diff --git a/client/build/classes/java/main/rt4/SoftwareAlphaSprite.class b/client/build/classes/java/main/rt4/SoftwareAlphaSprite.class new file mode 100644 index 0000000..2329f7f Binary files /dev/null and b/client/build/classes/java/main/rt4/SoftwareAlphaSprite.class differ diff --git a/client/build/classes/java/main/rt4/SoftwareFont.class b/client/build/classes/java/main/rt4/SoftwareFont.class new file mode 100644 index 0000000..af2773b Binary files /dev/null and b/client/build/classes/java/main/rt4/SoftwareFont.class differ diff --git a/client/build/classes/java/main/rt4/SoftwareIndexedSprite.class b/client/build/classes/java/main/rt4/SoftwareIndexedSprite.class new file mode 100644 index 0000000..687cb7c Binary files /dev/null and b/client/build/classes/java/main/rt4/SoftwareIndexedSprite.class differ diff --git a/client/build/classes/java/main/rt4/SoftwareModel.class b/client/build/classes/java/main/rt4/SoftwareModel.class new file mode 100644 index 0000000..2438c52 Binary files /dev/null and b/client/build/classes/java/main/rt4/SoftwareModel.class differ diff --git a/client/build/classes/java/main/rt4/SoftwareRaster.class b/client/build/classes/java/main/rt4/SoftwareRaster.class new file mode 100644 index 0000000..8e9527b Binary files /dev/null and b/client/build/classes/java/main/rt4/SoftwareRaster.class differ diff --git a/client/build/classes/java/main/rt4/SoftwareSprite.class b/client/build/classes/java/main/rt4/SoftwareSprite.class new file mode 100644 index 0000000..fa52ae4 Binary files /dev/null and b/client/build/classes/java/main/rt4/SoftwareSprite.class differ diff --git a/client/build/classes/java/main/rt4/Song.class b/client/build/classes/java/main/rt4/Song.class new file mode 100644 index 0000000..629b312 Binary files /dev/null and b/client/build/classes/java/main/rt4/Song.class differ diff --git a/client/build/classes/java/main/rt4/Sound.class b/client/build/classes/java/main/rt4/Sound.class new file mode 100644 index 0000000..81e5f8d Binary files /dev/null and b/client/build/classes/java/main/rt4/Sound.class differ diff --git a/client/build/classes/java/main/rt4/SoundBank.class b/client/build/classes/java/main/rt4/SoundBank.class new file mode 100644 index 0000000..fc783ed Binary files /dev/null and b/client/build/classes/java/main/rt4/SoundBank.class differ diff --git a/client/build/classes/java/main/rt4/SoundPcmStream.class b/client/build/classes/java/main/rt4/SoundPcmStream.class new file mode 100644 index 0000000..ae390f6 Binary files /dev/null and b/client/build/classes/java/main/rt4/SoundPcmStream.class differ diff --git a/client/build/classes/java/main/rt4/SoundPlayer.class b/client/build/classes/java/main/rt4/SoundPlayer.class new file mode 100644 index 0000000..42c80af Binary files /dev/null and b/client/build/classes/java/main/rt4/SoundPlayer.class differ diff --git a/client/build/classes/java/main/rt4/SpecularMaterialRenderer.class b/client/build/classes/java/main/rt4/SpecularMaterialRenderer.class new file mode 100644 index 0000000..4f6f1ae Binary files /dev/null and b/client/build/classes/java/main/rt4/SpecularMaterialRenderer.class differ diff --git a/client/build/classes/java/main/rt4/SpotAnim.class b/client/build/classes/java/main/rt4/SpotAnim.class new file mode 100644 index 0000000..d140571 Binary files /dev/null and b/client/build/classes/java/main/rt4/SpotAnim.class differ diff --git a/client/build/classes/java/main/rt4/SpotAnimNode.class b/client/build/classes/java/main/rt4/SpotAnimNode.class new file mode 100644 index 0000000..590ec08 Binary files /dev/null and b/client/build/classes/java/main/rt4/SpotAnimNode.class differ diff --git a/client/build/classes/java/main/rt4/SpotAnimType.class b/client/build/classes/java/main/rt4/SpotAnimType.class new file mode 100644 index 0000000..a520bed Binary files /dev/null and b/client/build/classes/java/main/rt4/SpotAnimType.class differ diff --git a/client/build/classes/java/main/rt4/SpotAnimTypeList.class b/client/build/classes/java/main/rt4/SpotAnimTypeList.class new file mode 100644 index 0000000..d4d94d8 Binary files /dev/null and b/client/build/classes/java/main/rt4/SpotAnimTypeList.class differ diff --git a/client/build/classes/java/main/rt4/Sprite.class b/client/build/classes/java/main/rt4/Sprite.class new file mode 100644 index 0000000..d8f3a28 Binary files /dev/null and b/client/build/classes/java/main/rt4/Sprite.class differ diff --git a/client/build/classes/java/main/rt4/SpriteLoader.class b/client/build/classes/java/main/rt4/SpriteLoader.class new file mode 100644 index 0000000..0cd0c9e Binary files /dev/null and b/client/build/classes/java/main/rt4/SpriteLoader.class differ diff --git a/client/build/classes/java/main/rt4/Sprites.class b/client/build/classes/java/main/rt4/Sprites.class new file mode 100644 index 0000000..ab79b72 Binary files /dev/null and b/client/build/classes/java/main/rt4/Sprites.class differ diff --git a/client/build/classes/java/main/rt4/StockMarketManager.class b/client/build/classes/java/main/rt4/StockMarketManager.class new file mode 100644 index 0000000..4adb10c Binary files /dev/null and b/client/build/classes/java/main/rt4/StockMarketManager.class differ diff --git a/client/build/classes/java/main/rt4/StockMarketOffer.class b/client/build/classes/java/main/rt4/StockMarketOffer.class new file mode 100644 index 0000000..2ed134d Binary files /dev/null and b/client/build/classes/java/main/rt4/StockMarketOffer.class differ diff --git a/client/build/classes/java/main/rt4/StringInterface.class b/client/build/classes/java/main/rt4/StringInterface.class new file mode 100644 index 0000000..6340033 Binary files /dev/null and b/client/build/classes/java/main/rt4/StringInterface.class differ diff --git a/client/build/classes/java/main/rt4/StringNode.class b/client/build/classes/java/main/rt4/StringNode.class new file mode 100644 index 0000000..25d50ea Binary files /dev/null and b/client/build/classes/java/main/rt4/StringNode.class differ diff --git a/client/build/classes/java/main/rt4/StringUtils.class b/client/build/classes/java/main/rt4/StringUtils.class new file mode 100644 index 0000000..c9ebdb5 Binary files /dev/null and b/client/build/classes/java/main/rt4/StringUtils.class differ diff --git a/client/build/classes/java/main/rt4/StructType.class b/client/build/classes/java/main/rt4/StructType.class new file mode 100644 index 0000000..638a81b Binary files /dev/null and b/client/build/classes/java/main/rt4/StructType.class differ diff --git a/client/build/classes/java/main/rt4/StructTypeList.class b/client/build/classes/java/main/rt4/StructTypeList.class new file mode 100644 index 0000000..5036e20 Binary files /dev/null and b/client/build/classes/java/main/rt4/StructTypeList.class differ diff --git a/client/build/classes/java/main/rt4/SynthEnvelope.class b/client/build/classes/java/main/rt4/SynthEnvelope.class new file mode 100644 index 0000000..c43b6dd Binary files /dev/null and b/client/build/classes/java/main/rt4/SynthEnvelope.class differ diff --git a/client/build/classes/java/main/rt4/SynthFilter.class b/client/build/classes/java/main/rt4/SynthFilter.class new file mode 100644 index 0000000..f502c5a Binary files /dev/null and b/client/build/classes/java/main/rt4/SynthFilter.class differ diff --git a/client/build/classes/java/main/rt4/SynthInstrument.class b/client/build/classes/java/main/rt4/SynthInstrument.class new file mode 100644 index 0000000..245eb54 Binary files /dev/null and b/client/build/classes/java/main/rt4/SynthInstrument.class differ diff --git a/client/build/classes/java/main/rt4/SynthSound.class b/client/build/classes/java/main/rt4/SynthSound.class new file mode 100644 index 0000000..3db8afa Binary files /dev/null and b/client/build/classes/java/main/rt4/SynthSound.class differ diff --git a/client/build/classes/java/main/rt4/Texture.class b/client/build/classes/java/main/rt4/Texture.class new file mode 100644 index 0000000..c3851f1 Binary files /dev/null and b/client/build/classes/java/main/rt4/Texture.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp.class b/client/build/classes/java/main/rt4/TextureOp.class new file mode 100644 index 0000000..9c21537 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp11.class b/client/build/classes/java/main/rt4/TextureOp11.class new file mode 100644 index 0000000..8ab29a9 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp11.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp12.class b/client/build/classes/java/main/rt4/TextureOp12.class new file mode 100644 index 0000000..54b0835 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp12.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp14.class b/client/build/classes/java/main/rt4/TextureOp14.class new file mode 100644 index 0000000..5411ab8 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp14.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp15.class b/client/build/classes/java/main/rt4/TextureOp15.class new file mode 100644 index 0000000..54cba5f Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp15.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp16.class b/client/build/classes/java/main/rt4/TextureOp16.class new file mode 100644 index 0000000..8232a6a Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp16.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp17.class b/client/build/classes/java/main/rt4/TextureOp17.class new file mode 100644 index 0000000..a550d76 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp17.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp19.class b/client/build/classes/java/main/rt4/TextureOp19.class new file mode 100644 index 0000000..76092b8 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp19.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp23.class b/client/build/classes/java/main/rt4/TextureOp23.class new file mode 100644 index 0000000..5a24453 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp23.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp25.class b/client/build/classes/java/main/rt4/TextureOp25.class new file mode 100644 index 0000000..ae210a1 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp25.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp27.class b/client/build/classes/java/main/rt4/TextureOp27.class new file mode 100644 index 0000000..663423d Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp27.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp28.class b/client/build/classes/java/main/rt4/TextureOp28.class new file mode 100644 index 0000000..4a28e9e Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp28.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp29.class b/client/build/classes/java/main/rt4/TextureOp29.class new file mode 100644 index 0000000..9b732d8 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp29.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp29SubOp.class b/client/build/classes/java/main/rt4/TextureOp29SubOp.class new file mode 100644 index 0000000..abbb8b8 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp29SubOp.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp29SubOp1.class b/client/build/classes/java/main/rt4/TextureOp29SubOp1.class new file mode 100644 index 0000000..901054a Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp29SubOp1.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp29SubOp2.class b/client/build/classes/java/main/rt4/TextureOp29SubOp2.class new file mode 100644 index 0000000..ac103f8 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp29SubOp2.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp29SubOp3.class b/client/build/classes/java/main/rt4/TextureOp29SubOp3.class new file mode 100644 index 0000000..33d19d3 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp29SubOp3.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp29SubOp4.class b/client/build/classes/java/main/rt4/TextureOp29SubOp4.class new file mode 100644 index 0000000..9eb9d81 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp29SubOp4.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp31.class b/client/build/classes/java/main/rt4/TextureOp31.class new file mode 100644 index 0000000..8830200 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp31.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp32.class b/client/build/classes/java/main/rt4/TextureOp32.class new file mode 100644 index 0000000..cb31351 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp32.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp33.class b/client/build/classes/java/main/rt4/TextureOp33.class new file mode 100644 index 0000000..58711a1 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp33.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp34.class b/client/build/classes/java/main/rt4/TextureOp34.class new file mode 100644 index 0000000..7c2d23f Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp34.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp35.class b/client/build/classes/java/main/rt4/TextureOp35.class new file mode 100644 index 0000000..24e0c1e Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp35.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp37.class b/client/build/classes/java/main/rt4/TextureOp37.class new file mode 100644 index 0000000..a183165 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp37.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp38.class b/client/build/classes/java/main/rt4/TextureOp38.class new file mode 100644 index 0000000..e48e3c9 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp38.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp4.class b/client/build/classes/java/main/rt4/TextureOp4.class new file mode 100644 index 0000000..fe6256f Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp4.class differ diff --git a/client/build/classes/java/main/rt4/TextureOp5.class b/client/build/classes/java/main/rt4/TextureOp5.class new file mode 100644 index 0000000..c1919c4 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOp5.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpBinary.class b/client/build/classes/java/main/rt4/TextureOpBinary.class new file mode 100644 index 0000000..5d71262 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpBinary.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpClamp.class b/client/build/classes/java/main/rt4/TextureOpClamp.class new file mode 100644 index 0000000..37ed7a1 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpClamp.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpColorFill.class b/client/build/classes/java/main/rt4/TextureOpColorFill.class new file mode 100644 index 0000000..829e9f2 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpColorFill.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpColorGradient.class b/client/build/classes/java/main/rt4/TextureOpColorGradient.class new file mode 100644 index 0000000..3315e30 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpColorGradient.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpCombine.class b/client/build/classes/java/main/rt4/TextureOpCombine.class new file mode 100644 index 0000000..bd93247 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpCombine.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpCurve.class b/client/build/classes/java/main/rt4/TextureOpCurve.class new file mode 100644 index 0000000..c489967 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpCurve.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpFlip.class b/client/build/classes/java/main/rt4/TextureOpFlip.class new file mode 100644 index 0000000..d0040cc Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpFlip.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpHorizontalGradient.class b/client/build/classes/java/main/rt4/TextureOpHorizontalGradient.class new file mode 100644 index 0000000..8ee7edb Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpHorizontalGradient.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpInterpolate.class b/client/build/classes/java/main/rt4/TextureOpInterpolate.class new file mode 100644 index 0000000..a5ef7ac Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpInterpolate.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpInvert.class b/client/build/classes/java/main/rt4/TextureOpInvert.class new file mode 100644 index 0000000..e447797 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpInvert.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpMonochrome.class b/client/build/classes/java/main/rt4/TextureOpMonochrome.class new file mode 100644 index 0000000..fc160e6 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpMonochrome.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpMonochromeFill.class b/client/build/classes/java/main/rt4/TextureOpMonochromeFill.class new file mode 100644 index 0000000..e64a3f4 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpMonochromeFill.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpNoise.class b/client/build/classes/java/main/rt4/TextureOpNoise.class new file mode 100644 index 0000000..9ed63ce Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpNoise.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpRange.class b/client/build/classes/java/main/rt4/TextureOpRange.class new file mode 100644 index 0000000..a48ef44 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpRange.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpSprite.class b/client/build/classes/java/main/rt4/TextureOpSprite.class new file mode 100644 index 0000000..73d8c10 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpSprite.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpTexture.class b/client/build/classes/java/main/rt4/TextureOpTexture.class new file mode 100644 index 0000000..ea5c676 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpTexture.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpTile.class b/client/build/classes/java/main/rt4/TextureOpTile.class new file mode 100644 index 0000000..8193d89 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpTile.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpTiledSprite.class b/client/build/classes/java/main/rt4/TextureOpTiledSprite.class new file mode 100644 index 0000000..7c089bb Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpTiledSprite.class differ diff --git a/client/build/classes/java/main/rt4/TextureOpVerticalGradient.class b/client/build/classes/java/main/rt4/TextureOpVerticalGradient.class new file mode 100644 index 0000000..7d88663 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureOpVerticalGradient.class differ diff --git a/client/build/classes/java/main/rt4/TextureProvider.class b/client/build/classes/java/main/rt4/TextureProvider.class new file mode 100644 index 0000000..901c5b5 Binary files /dev/null and b/client/build/classes/java/main/rt4/TextureProvider.class differ diff --git a/client/build/classes/java/main/rt4/ThreadUtils.class b/client/build/classes/java/main/rt4/ThreadUtils.class new file mode 100644 index 0000000..9e26323 Binary files /dev/null and b/client/build/classes/java/main/rt4/ThreadUtils.class differ diff --git a/client/build/classes/java/main/rt4/Tile.class b/client/build/classes/java/main/rt4/Tile.class new file mode 100644 index 0000000..4570c83 Binary files /dev/null and b/client/build/classes/java/main/rt4/Tile.class differ diff --git a/client/build/classes/java/main/rt4/Timer.class b/client/build/classes/java/main/rt4/Timer.class new file mode 100644 index 0000000..a5b5505 Binary files /dev/null and b/client/build/classes/java/main/rt4/Timer.class differ diff --git a/client/build/classes/java/main/rt4/TitleScreen.class b/client/build/classes/java/main/rt4/TitleScreen.class new file mode 100644 index 0000000..4a4e5c9 Binary files /dev/null and b/client/build/classes/java/main/rt4/TitleScreen.class differ diff --git a/client/build/classes/java/main/rt4/TracingException.class b/client/build/classes/java/main/rt4/TracingException.class new file mode 100644 index 0000000..9c93b8b Binary files /dev/null and b/client/build/classes/java/main/rt4/TracingException.class differ diff --git a/client/build/classes/java/main/rt4/TriangleNormal.class b/client/build/classes/java/main/rt4/TriangleNormal.class new file mode 100644 index 0000000..0ec7a82 Binary files /dev/null and b/client/build/classes/java/main/rt4/TriangleNormal.class differ diff --git a/client/build/classes/java/main/rt4/UnderwaterMaterialRenderer.class b/client/build/classes/java/main/rt4/UnderwaterMaterialRenderer.class new file mode 100644 index 0000000..6c4054b Binary files /dev/null and b/client/build/classes/java/main/rt4/UnderwaterMaterialRenderer.class differ diff --git a/client/build/classes/java/main/rt4/UnlitMaterialRenderer.class b/client/build/classes/java/main/rt4/UnlitMaterialRenderer.class new file mode 100644 index 0000000..ade3edf Binary files /dev/null and b/client/build/classes/java/main/rt4/UnlitMaterialRenderer.class differ diff --git a/client/build/classes/java/main/rt4/VarbitType.class b/client/build/classes/java/main/rt4/VarbitType.class new file mode 100644 index 0000000..9fe0379 Binary files /dev/null and b/client/build/classes/java/main/rt4/VarbitType.class differ diff --git a/client/build/classes/java/main/rt4/VarbitTypeList.class b/client/build/classes/java/main/rt4/VarbitTypeList.class new file mode 100644 index 0000000..2f71447 Binary files /dev/null and b/client/build/classes/java/main/rt4/VarbitTypeList.class differ diff --git a/client/build/classes/java/main/rt4/VarcDomain.class b/client/build/classes/java/main/rt4/VarcDomain.class new file mode 100644 index 0000000..46dd058 Binary files /dev/null and b/client/build/classes/java/main/rt4/VarcDomain.class differ diff --git a/client/build/classes/java/main/rt4/VarpDomain.class b/client/build/classes/java/main/rt4/VarpDomain.class new file mode 100644 index 0000000..77caa52 Binary files /dev/null and b/client/build/classes/java/main/rt4/VarpDomain.class differ diff --git a/client/build/classes/java/main/rt4/VarpType.class b/client/build/classes/java/main/rt4/VarpType.class new file mode 100644 index 0000000..a99d648 Binary files /dev/null and b/client/build/classes/java/main/rt4/VarpType.class differ diff --git a/client/build/classes/java/main/rt4/VarpTypeList.class b/client/build/classes/java/main/rt4/VarpTypeList.class new file mode 100644 index 0000000..73f299f Binary files /dev/null and b/client/build/classes/java/main/rt4/VarpTypeList.class differ diff --git a/client/build/classes/java/main/rt4/VertexNormal.class b/client/build/classes/java/main/rt4/VertexNormal.class new file mode 100644 index 0000000..e312195 Binary files /dev/null and b/client/build/classes/java/main/rt4/VertexNormal.class differ diff --git a/client/build/classes/java/main/rt4/VorbisCodebook.class b/client/build/classes/java/main/rt4/VorbisCodebook.class new file mode 100644 index 0000000..50ff92c Binary files /dev/null and b/client/build/classes/java/main/rt4/VorbisCodebook.class differ diff --git a/client/build/classes/java/main/rt4/VorbisFloor.class b/client/build/classes/java/main/rt4/VorbisFloor.class new file mode 100644 index 0000000..495303f Binary files /dev/null and b/client/build/classes/java/main/rt4/VorbisFloor.class differ diff --git a/client/build/classes/java/main/rt4/VorbisMapping.class b/client/build/classes/java/main/rt4/VorbisMapping.class new file mode 100644 index 0000000..1f22960 Binary files /dev/null and b/client/build/classes/java/main/rt4/VorbisMapping.class differ diff --git a/client/build/classes/java/main/rt4/VorbisResidue.class b/client/build/classes/java/main/rt4/VorbisResidue.class new file mode 100644 index 0000000..acdefa1 Binary files /dev/null and b/client/build/classes/java/main/rt4/VorbisResidue.class differ diff --git a/client/build/classes/java/main/rt4/VorbisSound.class b/client/build/classes/java/main/rt4/VorbisSound.class new file mode 100644 index 0000000..f384716 Binary files /dev/null and b/client/build/classes/java/main/rt4/VorbisSound.class differ diff --git a/client/build/classes/java/main/rt4/Wall.class b/client/build/classes/java/main/rt4/Wall.class new file mode 100644 index 0000000..fd198e2 Binary files /dev/null and b/client/build/classes/java/main/rt4/Wall.class differ diff --git a/client/build/classes/java/main/rt4/WallDecor.class b/client/build/classes/java/main/rt4/WallDecor.class new file mode 100644 index 0000000..6946a55 Binary files /dev/null and b/client/build/classes/java/main/rt4/WallDecor.class differ diff --git a/client/build/classes/java/main/rt4/WaterMaterialRenderer.class b/client/build/classes/java/main/rt4/WaterMaterialRenderer.class new file mode 100644 index 0000000..4b855bc Binary files /dev/null and b/client/build/classes/java/main/rt4/WaterMaterialRenderer.class differ diff --git a/client/build/classes/java/main/rt4/WaterfallMaterialRenderer.class b/client/build/classes/java/main/rt4/WaterfallMaterialRenderer.class new file mode 100644 index 0000000..24bdcb6 Binary files /dev/null and b/client/build/classes/java/main/rt4/WaterfallMaterialRenderer.class differ diff --git a/client/build/classes/java/main/rt4/WordPack.class b/client/build/classes/java/main/rt4/WordPack.class new file mode 100644 index 0000000..4406c5f Binary files /dev/null and b/client/build/classes/java/main/rt4/WordPack.class differ diff --git a/client/build/classes/java/main/rt4/World.class b/client/build/classes/java/main/rt4/World.class new file mode 100644 index 0000000..a16d9dc Binary files /dev/null and b/client/build/classes/java/main/rt4/World.class differ diff --git a/client/build/classes/java/main/rt4/WorldInfo.class b/client/build/classes/java/main/rt4/WorldInfo.class new file mode 100644 index 0000000..ec6a6a8 Binary files /dev/null and b/client/build/classes/java/main/rt4/WorldInfo.class differ diff --git a/client/build/classes/java/main/rt4/WorldList.class b/client/build/classes/java/main/rt4/WorldList.class new file mode 100644 index 0000000..c1e698b Binary files /dev/null and b/client/build/classes/java/main/rt4/WorldList.class differ diff --git a/client/build/classes/java/main/rt4/WorldMap.class b/client/build/classes/java/main/rt4/WorldMap.class new file mode 100644 index 0000000..0ed7a55 Binary files /dev/null and b/client/build/classes/java/main/rt4/WorldMap.class differ diff --git a/client/build/classes/java/main/rt4/WorldMapFont.class b/client/build/classes/java/main/rt4/WorldMapFont.class new file mode 100644 index 0000000..78e6c8e Binary files /dev/null and b/client/build/classes/java/main/rt4/WorldMapFont.class differ diff --git a/client/build/classes/java/main/rt4/client.class b/client/build/classes/java/main/rt4/client.class new file mode 100644 index 0000000..53145ff Binary files /dev/null and b/client/build/classes/java/main/rt4/client.class differ diff --git a/client/build/kotlin/client100jar-classes.txt b/client/build/kotlin/client100jar-classes.txt new file mode 100644 index 0000000..1594635 --- /dev/null +++ b/client/build/kotlin/client100jar-classes.txt @@ -0,0 +1 @@ +/home/greg/rt4-client/client/build/classes/java/main/plugin/Plugin.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/PluginInfo.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/PluginRepository.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/annotations/PluginMeta.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/api/API$1.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/api/API.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/api/FontColor.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/api/FontType.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/api/MiniMenuAction.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/api/MiniMenuEntry.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/api/MiniMenuType.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/api/Privileges.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/api/SpritePNGLoader.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/api/SpritePixels.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/api/TextModifier.class:/home/greg/rt4-client/client/build/classes/java/main/plugin/api/WindowMode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/AbstractWorld.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/AnimBase.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/AnimFrame.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/AnimFrameset.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/AreaSound.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/AreaSoundManager.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ArrayUtils.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/AttachLocRequest.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/AudioChannel.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/AudioThread.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/BasType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/BasTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Base37.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/BrokenInputStream.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/BrokenOutputStream.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/BrowserControl.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Buffer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/BufferedFile.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/BufferedImageFrameBuffer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/BufferedSocket.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ByteArray.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ByteArrayNode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ByteArrayNodeSecondary.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Bzip2DState.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Bzip2Decompressor.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Cache.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Camera.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ChangeLocRequest.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/CharUtils.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Chat.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Cheat.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ClanChat.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ClanMember.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ClientProt.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ClientScript.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ClientScriptList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/CollisionMap.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ColorImageCache.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ColorImageCacheEntry.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ColorUtils.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Component.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ComponentPointer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/CreateManager.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Cross.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Cs1ScriptRunner.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/CursorType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/CursorTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/DateUtil.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/DeadClass.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/DelayedStateChange.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/DirectByteArray.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/DisplayMode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Entity.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/EnumStringEntry.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/EnumType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/EnumTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Environment.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Equipment.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Find.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Flames.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/FloType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/FloTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/FluType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/FluTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/FogManager.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Font.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/FontMetricsList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Fonts.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/FrameBuffer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/FriendsList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GameCanvas.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GameShell.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlAlphaSprite.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlBoundingBox.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlBuffer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlCleaner.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlFont.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlIndexedSprite.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlModel.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlModel_Class23.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlRaster.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlRenderer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlSolidColorTexture.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlSprite.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlTexture.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlTile.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlVertexBufferObject.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlobalConfig.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GlobalJsonConfig.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GoSubFrame.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GroundDecor.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/GzipDecompressor.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/HardReferenceNode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/HashTable.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/HashTableIterator.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/HintArrowManager.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/HitBarList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/HookRequest.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/HuffmanCodec.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/IdkType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/IdkTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/IgnoreList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ImageProducerFrameBuffer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/IndexedSprite.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/IntHashTable.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/IntNode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/IntUtils.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/InterfaceList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Inv.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/InvType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/InvTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/IsaacRandom.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/JagString.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/JavaAudioChannel.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/JavaMouseWheel.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5CacheQueue.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5CacheRequest.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5CachedResourceProvider.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5Compression.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5GlTextureProvider.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5Index.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5MasterIndex.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5NetQueue.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5NetRequest.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5QuickChatCommandDecoder.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5Request.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Js5ResourceProvider.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Keyboard.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LangUtils.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Light.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LightType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LightTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Light_Class45.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LightingManager.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LinkedList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LiquidMaterialRenderer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LoadingBar.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LoadingBarAwt.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Loc.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LocEntity.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LocType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LocTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LocalizedText.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LoginManager.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LongNode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/LruHashTable.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Map.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MapChunk.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MapElement.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MapElementList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MapList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MapMarker.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MaterialManager.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MaterialManager_Class106.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub1.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub1_Sub1.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub2.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MaterialManager_Class106_Sub2_Sub1.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MaterialRenderer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MathUtils.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MidiDecoder.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MidiInstrument.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MidiNote.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MidiNoteStream.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MidiPcmStream.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MidiPlayer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Midi_Class162.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MillisTimer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MiniMap.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MiniMenu.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MixerListener.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MixerPcmStream.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Model.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MonochromeImageCache.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MonochromeImageCacheEntry.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Mouse.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MouseRecorder.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MouseWheel.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MsiType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MsiTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/MusicPlayer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/NanoTimer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Node.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Npc.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/NpcList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/NpcType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/NpcTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ObjStack.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ObjStackEntity.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ObjStackNode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ObjType$Opcodes.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ObjType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ObjTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/OverheadChat.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Packet.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ParamType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ParamTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ParticleNode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ParticleSystem.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/PathFinder.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/PathingEntity.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/PathingEntity_Class147.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/PcmResampler.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/PcmSound.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/PcmStream.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/PerlinNoise.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/PlainTile.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Player.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/PlayerAppearance.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/PlayerList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/PlayerSkillXpTable.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Preferences.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ProjAnim.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ProjAnimNode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Protocol.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/QuickChatCatType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/QuickChatCatTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/QuickChatCommandDecoder.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/QuickChatPhrase.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/QuickChatPhraseType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/QuickChatPhraseTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/RandomUtils.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Rasteriser.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/RawModel.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ReferenceNode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ReferenceNodeFactory.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ReflectionCheck.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SceneGraph.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SceneGraph_Class120.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Scenery.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ScriptRunner$Cs2Opcodes.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ScriptRunner.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SecondaryHashTable.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SecondaryLinkedList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SecondaryNode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SeqType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SeqTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ServerActiveProperties.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ServerProt.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Shadow.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ShadowManager.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ShadowModelList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ShapedTile.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SignLinkAudioChannel.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SoftLruHashTable.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SoftReferenceNode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SoftReferenceNodeFactory.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SoftwareAlphaSprite.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SoftwareFont.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SoftwareIndexedSprite.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SoftwareModel.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SoftwareRaster.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SoftwareSprite.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Song.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Sound.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SoundBank.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SoundPcmStream.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SoundPlayer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SpecularMaterialRenderer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SpotAnim.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SpotAnimNode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SpotAnimType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SpotAnimTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Sprite.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SpriteLoader.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Sprites.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/StockMarketManager.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/StockMarketOffer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/StringInterface.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/StringNode.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/StringUtils.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/StructType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/StructTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SynthEnvelope.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SynthFilter.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SynthInstrument.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/SynthSound.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Texture.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp11.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp12.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp14.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp15.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp16.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp17.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp19.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp23.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp25.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp27.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp28.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp29.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp29SubOp.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp29SubOp1.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp29SubOp2.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp29SubOp3.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp29SubOp4.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp31.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp32.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp33.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp34.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp35.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp37.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp38.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp4.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOp5.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpBinary.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpClamp.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpColorFill.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpColorGradient.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpCombine.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpCurve.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpFlip.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpHorizontalGradient.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpInterpolate.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpInvert.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpMonochrome.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpMonochromeFill.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpNoise.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpRange.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpSprite.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpTexture.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpTile.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpTiledSprite.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureOpVerticalGradient.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TextureProvider.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/ThreadUtils.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Tile.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Timer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TitleScreen.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TracingException.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/TriangleNormal.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/UnderwaterMaterialRenderer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/UnlitMaterialRenderer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/VarbitType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/VarbitTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/VarcDomain.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/VarpDomain.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/VarpType.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/VarpTypeList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/VertexNormal.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/VorbisCodebook.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/VorbisFloor.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/VorbisMapping.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/VorbisResidue.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/VorbisSound.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/Wall.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/WallDecor.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/WaterMaterialRenderer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/WaterfallMaterialRenderer.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/WordPack.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/World.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/WorldInfo.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/WorldList.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/WorldMap.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/WorldMapFont.class:/home/greg/rt4-client/client/build/classes/java/main/rt4/client.class \ No newline at end of file diff --git a/client/build/libs/client-1.0.0.jar b/client/build/libs/client-1.0.0.jar new file mode 100644 index 0000000..d6bb64c Binary files /dev/null and b/client/build/libs/client-1.0.0.jar differ diff --git a/client/build/resources/main/saradomin.png b/client/build/resources/main/saradomin.png new file mode 100644 index 0000000..e9ee33e Binary files /dev/null and b/client/build/resources/main/saradomin.png differ diff --git a/client/build/tmp/compileJava/previous-compilation-data.bin b/client/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..a76a344 Binary files /dev/null and b/client/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/client/build/tmp/jar/MANIFEST.MF b/client/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..ac8b26d --- /dev/null +++ b/client/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: rt4.client + diff --git a/client/config.json b/client/config.json new file mode 100644 index 0000000..5222e05 --- /dev/null +++ b/client/config.json @@ -0,0 +1,10 @@ +{ + "ip_management": "test.2009scape.org", + "ip_address": "test.2009scape.org", + "world": 1, + "server_port": 43594, + "wl_port": 43595, + "js5_port": 43595, + "mouseWheelZoom": true, + "pluginsFolder": "plugins" +} \ No newline at end of file diff --git a/client/plugins/AudioQOL/plugin.properties b/client/plugins/AudioQOL/plugin.properties new file mode 100644 index 0000000..fd79b30 --- /dev/null +++ b/client/plugins/AudioQOL/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Provides some QOL for audio, including better settings persistence' +VERSION=1.0 \ No newline at end of file diff --git a/client/plugins/BasicInputQOL/plugin.properties b/client/plugins/BasicInputQOL/plugin.properties new file mode 100644 index 0000000..e76c2bd --- /dev/null +++ b/client/plugins/BasicInputQOL/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Provides some basic input QOL like scroll zoom, middle click panning, etc.' +VERSION=1.0 \ No newline at end of file diff --git a/client/plugins/BetterShiftDrop/plugin.properties b/client/plugins/BetterShiftDrop/plugin.properties new file mode 100644 index 0000000..cd67695 --- /dev/null +++ b/client/plugins/BetterShiftDrop/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='bushtail' +DESCRIPTION='Better dropping and destroying while holding shift. Use ::bsd command to toggle. If for some reason after installing the plugin, Better Shift Drop does not activate, run the command to activate it.' +VERSION=2.0 \ No newline at end of file diff --git a/client/plugins/Craftify/plugin.properties b/client/plugins/Craftify/plugin.properties new file mode 100644 index 0000000..bf44a94 --- /dev/null +++ b/client/plugins/Craftify/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='bushtail' +DESCRIPTION='Add nameplates above players heads.' +VERSION=1.0 \ No newline at end of file diff --git a/client/plugins/EscClose/plugin.properties b/client/plugins/EscClose/plugin.properties new file mode 100644 index 0000000..e38752c --- /dev/null +++ b/client/plugins/EscClose/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Chisato' +DESCRIPTION='Allows you to use ESC in order to (safety) close the open interface/dialogue.' +VERSION=1.0 \ No newline at end of file diff --git a/client/plugins/GroundItems/plugin.properties b/client/plugins/GroundItems/plugin.properties new file mode 100644 index 0000000..c77a215 --- /dev/null +++ b/client/plugins/GroundItems/plugin.properties @@ -0,0 +1,8 @@ +AUTHOR=downthecrop +DESCRIPTION=Ground Items Overlay. Just like Runelite!\ +Commands:\ +::set(low,med,high,insane,hide)\ +::(tag,ignore)item ID\ +::(reset)groundconfig\ +Special thanks to Chisato for the original skeleton. +VERSION=1.3 \ No newline at end of file diff --git a/client/plugins/GroundItems/res/item_configs.json b/client/plugins/GroundItems/res/item_configs.json new file mode 100644 index 0000000..c1bff50 --- /dev/null +++ b/client/plugins/GroundItems/res/item_configs.json @@ -0,0 +1,130818 @@ +[ + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "The body of a Dwarf savaged by Goblins.", + "durability": null, + "name": "Dwarf remains", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "two_handed": "true", + "id": "0" + }, + { + "destroy_message": "I got this from Captain Lawgof.", + "shop_price": "1", + "examine": "Good for repairing a broken cannon.", + "durability": null, + "name": "Toolkit", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "Ammo for the Dwarf Cannon.", + "grand_exchange_price": "381", + "durability": null, + "name": "Cannonball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2" + }, + { + "shop_price": "1", + "examine": "Construction notes for Dwarf cannon ammo.", + "durability": null, + "name": "Nulodion's notes", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "3" + }, + { + "requirements": "{13,35}", + "shop_price": "5", + "examine": "Used to make cannon ammunition.", + "name": "Ammo mould", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "4" + }, + { + "shop_price": "20", + "examine": "An old note book.", + "durability": null, + "name": "Instruction manual", + "weight": "0.51", + "archery_ticket_price": "0", + "id": "5" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "The cannon is built on this.", + "grand_exchange_price": "189000", + "durability": null, + "name": "Cannon base", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "6" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "189000", + "durability": null, + "name": "Cannon base", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "The mounting for the multicannon.", + "grand_exchange_price": "185000", + "durability": null, + "name": "Cannon stand", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "8" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "185000", + "durability": null, + "name": "Cannon stand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "The barrels for the multicannon.", + "grand_exchange_price": "187000", + "durability": null, + "name": "Cannon barrels", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "10" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "187000", + "durability": null, + "name": "Cannon barrels", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "This powers the multicannon.", + "grand_exchange_price": "175200", + "durability": null, + "name": "Cannon furnace", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "12" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "175200", + "durability": null, + "name": "Cannon furnace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13" + }, + { + "shop_price": "1", + "examine": "A metal railing replacement.", + "durability": null, + "name": "Railing", + "archery_ticket_price": "0", + "id": "14" + }, + { + "examine": "A cloth given to me by Sir Galahad.", + "durability": null, + "name": "Holy table napkin", + "archery_ticket_price": "0", + "id": "15" + }, + { + "examine": "A small tin whistle.", + "durability": null, + "name": "Magic whistle", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "16" + }, + { + "examine": "I wonder what happens when I ring it?", + "durability": null, + "name": "Grail bell", + "archery_ticket_price": "0", + "id": "17" + }, + { + "examine": "It will point the way for me.", + "durability": null, + "name": "Magic gold feather", + "archery_ticket_price": "0", + "id": "18" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "White cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "20" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "Black cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "21" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "Blue cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "22" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "Red cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "23" + }, + { + "examine": "Doesn't look very tasty.", + "durability": null, + "name": "Rat poison", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "24" + }, + { + "examine": "Wormy.", + "durability": null, + "name": "Red vine worm", + "archery_ticket_price": "0", + "id": "25" + }, + { + "examine": "Hemenster fishing contest trophy.", + "durability": null, + "name": "Fishing trophy", + "archery_ticket_price": "0", + "id": "26" + }, + { + "examine": "Pass to the Hemenster fishing contest.", + "durability": null, + "name": "Fishing pass", + "archery_ticket_price": "0", + "id": "27" + }, + { + "shop_price": "121", + "examine": "Drives away all known 6 legged creatures.", + "durability": null, + "name": "Insect repellent", + "archery_ticket_price": "0", + "id": "28" + }, + { + "examine": "It's a bucket of wax.", + "durability": null, + "name": "Bucket of wax", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "30" + }, + { + "examine": "You shouldn't have this.", + "name": "RDT Slot", + "id": "31" + }, + { + "shop_price": "3", + "examine": "A spooky candle.", + "durability": null, + "name": "Lit black candle", + "archery_ticket_price": "0", + "id": "32" + }, + { + "shop_price": "24", + "examine": "A candle.", + "grand_exchange_price": "104", + "durability": null, + "name": "Lit candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "33" + }, + { + "shop_price": "24", + "examine": "A candle.", + "grand_exchange_price": "104", + "durability": null, + "name": "Lit candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "34" + }, + { + "shop_price": "200", + "examine": "This used to belong to King Arthur.", + "has_special": "true", + "durability": null, + "weight": "2.2", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "attack_audios": "2500,2500,2517,2500", + "name": "Excalibur", + "archery_ticket_price": "0", + "id": "35", + "bonuses": "20,29,-2,0,0,0,3,2,1,0,0,25,0,0,0" + }, + { + "shop_price": "24", + "ge_buy_limit": "100", + "examine": "A candle.", + "grand_exchange_price": "119", + "durability": null, + "name": "Candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "36" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "119", + "durability": null, + "name": "Candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "37" + }, + { + "shop_price": "3", + "examine": "A spooky candle.", + "durability": null, + "name": "Black candle", + "archery_ticket_price": "0", + "id": "38" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "16", + "durability": null, + "name": "Bronze arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "39" + }, + { + "shop_price": "26", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "23", + "durability": null, + "name": "Iron arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "40" + }, + { + "shop_price": "36", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "63", + "durability": null, + "name": "Steel arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "41" + }, + { + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "74", + "durability": null, + "name": "Mithril arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "42" + }, + { + "shop_price": "160", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "185", + "durability": null, + "name": "Adamant arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "43" + }, + { + "shop_price": "460", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "839", + "durability": null, + "name": "Rune arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "44" + }, + { + "ge_buy_limit": "10000", + "examine": "Opal bolt tips.", + "grand_exchange_price": "1", + "durability": null, + "name": "Opal bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "45" + }, + { + "ge_buy_limit": "10000", + "examine": "Pearl bolt tips.", + "grand_exchange_price": "5", + "durability": null, + "name": "Pearl bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "46" + }, + { + "shop_price": "114", + "ge_buy_limit": "10000", + "examine": "I can make bolts with these.", + "grand_exchange_price": "44", + "durability": null, + "name": "Barb bolttips", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "5", + "id": "47" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung longbow; I need a bowstring for this.", + "grand_exchange_price": "14", + "durability": null, + "name": "Longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "48" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "14", + "durability": null, + "name": "Longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "49" + }, + { + "ge_buy_limit": "10000", + "examine": "I need to find a string for this.", + "grand_exchange_price": "5", + "durability": null, + "name": "Shortbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "50" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5", + "durability": null, + "name": "Shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "51" + }, + { + "ge_buy_limit": "20000", + "examine": "A wooden arrow shaft", + "grand_exchange_price": "21", + "durability": null, + "name": "Arrow shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "52" + }, + { + "ge_buy_limit": "20000", + "examine": "A wooden arrow shaft with flights attached.", + "grand_exchange_price": "56", + "durability": null, + "name": "Headless arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "53" + }, + { + "shop_price": "50", + "ge_buy_limit": "10000", + "examine": "An unstrung oak bow; I need a bowstring for this.", + "grand_exchange_price": "7", + "durability": null, + "name": "Oak shortbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "54" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7", + "durability": null, + "name": "Oak shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "55" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung oak longbow; I need a bowstring for this.", + "grand_exchange_price": "20", + "durability": null, + "name": "Oak longbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "56" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "20", + "durability": null, + "name": "Oak longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "57" + }, + { + "shop_price": "64", + "ge_buy_limit": "10000", + "examine": "An unstrung willow longbow; I need a bowstring for this.", + "grand_exchange_price": "46", + "durability": null, + "name": "Willow longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "58" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "46", + "durability": null, + "name": "Willow longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "59" + }, + { + "shop_price": "16", + "ge_buy_limit": "10000", + "examine": "An unstrung willow shortbow; I need a bowstring for this.", + "grand_exchange_price": "20", + "durability": null, + "name": "Willow shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "60" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "20", + "durability": null, + "name": "Willow shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "61" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung maple bow; I need a bowstring for this.", + "grand_exchange_price": "94", + "durability": null, + "name": "Maple longbow (u)", + "tradeable": "true", + "weight": "1.2", + "archery_ticket_price": "0", + "id": "62" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "94", + "durability": null, + "name": "Maple longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "63" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung maple bow; I need a bowstring for this.", + "grand_exchange_price": "56", + "durability": null, + "name": "Maple shortbow (u)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "64" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "56", + "durability": null, + "name": "Maple shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "65" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung yew longbow; I need a bowstring for this.", + "grand_exchange_price": "468", + "durability": null, + "name": "Yew longbow (u)", + "tradeable": "true", + "weight": "1.32", + "archery_ticket_price": "0", + "id": "66" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "468", + "durability": null, + "name": "Yew longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "67" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung yew shortbow; I need a bowstring for this.", + "grand_exchange_price": "158", + "durability": null, + "name": "Yew shortbow (u)", + "tradeable": "true", + "weight": "1.32", + "archery_ticket_price": "0", + "id": "68" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "158", + "durability": null, + "name": "Yew shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "69" + }, + { + "shop_price": "931", + "ge_buy_limit": "10000", + "examine": "An unstrung magic longbow; I need a bowstring for this.", + "grand_exchange_price": "1246", + "durability": null, + "name": "Magic longbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "70" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1246", + "durability": null, + "name": "Magic longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "71" + }, + { + "shop_price": "890", + "ge_buy_limit": "10000", + "examine": "An unstrung magic shortbow; I need a bowstring for this.", + "grand_exchange_price": "745", + "durability": null, + "name": "Magic shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "72" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "745", + "durability": null, + "name": "Magic shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "73" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "A helmet, as worn by the minions of General Khazard.", + "durability": null, + "weight": "2.7", + "destroy": "true", + "equipment_slot": "0", + "destroy_message": "I can borrow another from the armoury near the Fight Arena.", + "name": "Khazard helmet", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "74", + "bonuses": "0,0,0,0,0,4,5,3,0,0,0,0,0,0,0" + }, + { + "shop_price": "12", + "examine": "Armour, as worn by the minions of General Khazard.", + "durability": null, + "weight": "0.5", + "destroy": "true", + "equipment_slot": "4", + "destroy_message": "I can borrow another from the armoury near the Fight Arena.", + "remove_sleeves": "true", + "name": "Khazard armour", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "75", + "bonuses": "0,0,0,0,0,9,11,10,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The lazy guard probably has a spare set...", + "examine": "These keys open the cells at the Khazard Fight Arena. (Fight Arena)", + "durability": null, + "name": "Khazard cell keys", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "76" + }, + { + "destroy_message": "Angor, the Khazard barman, has a stock of Khali brew.", + "shop_price": "5", + "examine": "A bottle of Khazard's worst brew.", + "durability": null, + "name": "Khali brew", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "77" + }, + { + "destroy_message": "Can only be fired from yew, magic, dark or twisted bows.", + "shop_price": "2", + "examine": "Can only be fired from yew, magic, or dark bows.", + "durability": null, + "name": "Ice arrows", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "78", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "The power in this staff causes it to vibrate gently.", + "durability": null, + "name": "Staff of armadyl", + "tradeable": "false", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "84", + "render_anim": "2553" + }, + { + "examine": "It catches the light! (Temple of Ikov)", + "durability": null, + "name": "Shiny key", + "archery_ticket_price": "0", + "id": "85" + }, + { + "examine": "An amulet made by Lucien.", + "durability": null, + "name": "Pendant of lucien", + "archery_ticket_price": "0", + "id": "86", + "equipment_slot": "2" + }, + { + "examine": "Yet another amulet.", + "durability": null, + "name": "Armadyl pendant", + "archery_ticket_price": "0", + "id": "87", + "equipment_slot": "2" + }, + { + "examine": "Magic boots that make you lighter than normal.", + "durability": null, + "name": "Boots of lightness", + "weight": "-4.5", + "archery_ticket_price": "0", + "id": "88", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Magic boots that make you lighter than normal.", + "durability": null, + "name": "Boots of lightness", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "89", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "It's very soft!", + "durability": null, + "name": "Child's blanket", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "90" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this guam potion.", + "grand_exchange_price": "285", + "durability": null, + "name": "Guam potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "91" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "285", + "durability": null, + "name": "Guam potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "92" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this marrentill potion.", + "grand_exchange_price": "43", + "durability": null, + "name": "Marrentill potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "93" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43", + "durability": null, + "name": "Marrentill potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "94" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this tarromin potion.", + "grand_exchange_price": "287", + "durability": null, + "name": "Tarromin potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "95" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "287", + "durability": null, + "name": "Tarromin potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "96" + }, + { + "shop_price": "64", + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this potion.", + "grand_exchange_price": "435", + "durability": null, + "name": "Harralander potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "97" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "435", + "durability": null, + "name": "Harralander potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "98" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this ranarr potion.", + "grand_exchange_price": "4823", + "durability": null, + "name": "Ranarr potion(unf)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "99" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4823", + "durability": null, + "name": "Ranarr potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "100" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this irit potion.", + "grand_exchange_price": "2243", + "durability": null, + "name": "Irit potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "101" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2243", + "durability": null, + "name": "Irit potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "102" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this avantoe potion.", + "grand_exchange_price": "3831", + "durability": null, + "name": "Avantoe potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "103" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3831", + "durability": null, + "name": "Avantoe potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "104" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this kwuarm potion.", + "grand_exchange_price": "1833", + "durability": null, + "name": "Kwuarm potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "105" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1833", + "durability": null, + "name": "Kwuarm potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "106" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this cadantine potion.", + "grand_exchange_price": "1844", + "durability": null, + "name": "Cadantine potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "107" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1844", + "durability": null, + "name": "Cadantine potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "108" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this dwarf weed potion.", + "grand_exchange_price": "6740", + "durability": null, + "name": "Dwarf weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "109" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6740", + "durability": null, + "name": "Dwarf weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "110" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this torstol potion.", + "grand_exchange_price": "14500", + "durability": null, + "name": "Torstol potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "111" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14500", + "durability": null, + "name": "Torstol potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "112" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "4 doses of Strength potion.", + "grand_exchange_price": "1041", + "durability": null, + "name": "Strength potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "113" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1041", + "durability": null, + "name": "Strength potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "114" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "3 doses of Strength potion.", + "grand_exchange_price": "812", + "durability": null, + "name": "Strength potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "115" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "812", + "durability": null, + "name": "Strength potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "116" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "2 doses of Strength potion.", + "grand_exchange_price": "656", + "durability": null, + "name": "Strength potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "117" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "656", + "durability": null, + "name": "Strength potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "118" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "1 dose of Strength potion.", + "grand_exchange_price": "355", + "durability": null, + "name": "Strength potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "119" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "355", + "durability": null, + "name": "Strength potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "120" + }, + { + "shop_price": "560", + "ge_buy_limit": "100", + "examine": "3 doses of Attack potion.", + "grand_exchange_price": "195", + "durability": null, + "name": "Attack potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "121" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Attack potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "122" + }, + { + "shop_price": "560", + "ge_buy_limit": "100", + "examine": "2 doses of Attack potion.", + "grand_exchange_price": "113", + "durability": null, + "name": "Attack potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "123" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "113", + "durability": null, + "name": "Attack potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "124" + }, + { + "shop_price": "560", + "ge_buy_limit": "100", + "examine": "1 dose of Attack potion.", + "grand_exchange_price": "197", + "durability": null, + "name": "Attack potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "125" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "197", + "durability": null, + "name": "Attack potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "126" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "3 doses of restore potion.", + "grand_exchange_price": "59", + "durability": null, + "name": "Restore potion(3)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "127" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "59", + "durability": null, + "name": "Restore potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "128" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "2 doses of restore potion.", + "grand_exchange_price": "35", + "durability": null, + "name": "Restore potion(2)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "129" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35", + "durability": null, + "name": "Restore potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "130" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "1 dose of restore potion.", + "grand_exchange_price": "21", + "durability": null, + "name": "Restore potion(1)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "131" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Restore potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "132" + }, + { + "shop_price": "114", + "ge_buy_limit": "100", + "examine": "3 doses of Defence Potion.", + "grand_exchange_price": "323", + "durability": null, + "name": "Defence potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "133" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "323", + "durability": null, + "name": "Defence potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "134" + }, + { + "shop_price": "114", + "ge_buy_limit": "100", + "examine": "2 doses of Defence Potion.", + "grand_exchange_price": "247", + "durability": null, + "name": "Defence potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "135" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "247", + "durability": null, + "name": "Defence potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "136" + }, + { + "shop_price": "114", + "ge_buy_limit": "100", + "examine": "1 dose of Defence Potion.", + "grand_exchange_price": "148", + "durability": null, + "name": "Defence potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "137" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "148", + "durability": null, + "name": "Defence potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "138" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Prayer restore potion.", + "grand_exchange_price": "4134", + "durability": null, + "name": "Prayer potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "139" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4134", + "durability": null, + "name": "Prayer potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "140" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Prayer restore potion.", + "grand_exchange_price": "2868", + "durability": null, + "name": "Prayer potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "141" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2868", + "durability": null, + "name": "Prayer potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "142" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Prayer restore potion.", + "grand_exchange_price": "1353", + "durability": null, + "name": "Prayer potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "143" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1353", + "durability": null, + "name": "Prayer potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "144" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super Attack potion.", + "grand_exchange_price": "691", + "durability": null, + "name": "Super attack(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "145" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "691", + "durability": null, + "name": "Super attack(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "146" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super Attack potion.", + "grand_exchange_price": "451", + "durability": null, + "name": "Super attack(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "147" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "451", + "durability": null, + "name": "Super attack(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "148" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super Attack potion.", + "grand_exchange_price": "243", + "durability": null, + "name": "Super attack(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "149" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "243", + "durability": null, + "name": "Super attack(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "150" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Fishing potion.", + "grand_exchange_price": "40", + "durability": null, + "name": "Fishing potion(3)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "151" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40", + "durability": null, + "name": "Fishing potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "152" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Fishing potion.", + "grand_exchange_price": "56", + "durability": null, + "name": "Fishing potion(2)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "153" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Fishing potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "154" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Fishing potion.", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing potion(1)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "155" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "156" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super Strength potion.", + "grand_exchange_price": "1679", + "durability": null, + "name": "Super strength(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "157" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1679", + "durability": null, + "name": "Super strength(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "158" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super Strength potion.", + "grand_exchange_price": "1164", + "durability": null, + "name": "Super strength(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "159" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1164", + "durability": null, + "name": "Super strength(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "160" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super Strength potion.", + "grand_exchange_price": "603", + "durability": null, + "name": "Super strength(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "161" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "603", + "durability": null, + "name": "Super strength(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "162" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super Defence potion.", + "grand_exchange_price": "113", + "durability": null, + "name": "Super defence(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "163" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "113", + "durability": null, + "name": "Super defence(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "164" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super Defence potion.", + "grand_exchange_price": "65", + "durability": null, + "name": "Super defence(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "165" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "65", + "durability": null, + "name": "Super defence(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "166" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super Defence potion.", + "grand_exchange_price": "41", + "durability": null, + "name": "Super defence(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "167" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "41", + "durability": null, + "name": "Super defence(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "168" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of ranging potion.", + "grand_exchange_price": "6224", + "durability": null, + "name": "Ranging potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "169" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "6224", + "durability": null, + "name": "Ranging potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "170" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of ranging potion.", + "grand_exchange_price": "4330", + "durability": null, + "name": "Ranging potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "171" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4330", + "durability": null, + "name": "Ranging potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "172" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of ranging potion.", + "grand_exchange_price": "2068", + "durability": null, + "name": "Ranging potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "173" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2068", + "durability": null, + "name": "Ranging potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "174" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "3 doses of antipoison potion.", + "grand_exchange_price": "1239", + "durability": null, + "name": "Antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "175" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1239", + "durability": null, + "name": "Antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "176" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "2 doses of antipoison potion.", + "grand_exchange_price": "822", + "durability": null, + "name": "Antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "177" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "822", + "durability": null, + "name": "Antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "178" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "1 dose of antipoison potion.", + "grand_exchange_price": "460", + "durability": null, + "name": "Antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "179" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "460", + "durability": null, + "name": "Antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "180" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super anti poison potion.", + "grand_exchange_price": "872", + "durability": null, + "name": "Super antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "181" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "872", + "durability": null, + "name": "Super antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "182" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super anti poison potion.", + "grand_exchange_price": "509", + "durability": null, + "name": "Super antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "183" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "509", + "durability": null, + "name": "Super antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "184" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super anti poison potion.", + "grand_exchange_price": "366", + "durability": null, + "name": "Super antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "185" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "durability": null, + "name": "Super antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "186" + }, + { + "ge_buy_limit": "1000", + "examine": "For use on daggers and projectiles.", + "grand_exchange_price": "33", + "durability": null, + "name": "Weapon poison", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "187" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "33", + "durability": null, + "name": "Weapon poison", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "188" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of Zamorak brew.", + "grand_exchange_price": "1818", + "durability": null, + "name": "Zamorak brew(3)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "189" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1818", + "durability": null, + "name": "Zamorak brew(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "190" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of Zamorak brew.", + "grand_exchange_price": "1004", + "durability": null, + "name": "Zamorak brew(2)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "191" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1004", + "durability": null, + "name": "Zamorak brew(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "192" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of Zamorak brew.", + "grand_exchange_price": "1175", + "durability": null, + "name": "Zamorak brew(1)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "193" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1175", + "durability": null, + "name": "Zamorak brew(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "194" + }, + { + "ge_buy_limit": "100", + "examine": "This is meant to be good for spots.", + "grand_exchange_price": "117", + "durability": null, + "name": "Potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "195" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "117", + "durability": null, + "name": "Potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "196" + }, + { + "shop_price": "39", + "ge_buy_limit": "100", + "examine": "Stankers gives out these strange cocktails for free.", + "grand_exchange_price": "124", + "durability": null, + "name": "Poison chalice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "197" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124", + "durability": null, + "name": "Poison chalice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "198" + }, + { + "requirements": "{3,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "150", + "durability": null, + "name": "Grimy guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "199" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "155", + "durability": null, + "name": "Grimy guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "200" + }, + { + "requirements": "{5,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "150", + "durability": null, + "name": "Grimy marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "201" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "26", + "durability": null, + "name": "Grimy marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "202" + }, + { + "requirements": "{11,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "150", + "durability": null, + "name": "Grimy tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "203" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "151", + "durability": null, + "name": "Grimy tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "204" + }, + { + "requirements": "{20,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "300", + "durability": null, + "name": "Grimy harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "205" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "275", + "durability": null, + "name": "Grimy harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "206" + }, + { + "requirements": "{15,25}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Grimy ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "207" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4909", + "durability": null, + "name": "Grimy ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "208" + }, + { + "requirements": "{15,40}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "209" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2034", + "durability": null, + "name": "Grimy irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "210" + }, + { + "requirements": "{15,48}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "500", + "durability": null, + "name": "Grimy avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "211" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3789", + "durability": null, + "name": "Grimy avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "212" + }, + { + "requirements": "{15,54}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "213" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1665", + "durability": null, + "name": "Grimy kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "214" + }, + { + "requirements": "{15,65}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "215" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1582", + "durability": null, + "name": "Grimy cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "216" + }, + { + "requirements": "{15,70}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Grimy dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "217" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6934", + "durability": null, + "name": "Grimy dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "218" + }, + { + "requirements": "{15,75}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "3200", + "durability": null, + "name": "Grimy torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "219" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "35800", + "durability": null, + "name": "Grimy torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "220" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "It seems to be looking at me.", + "grand_exchange_price": "27", + "durability": null, + "name": "Eye of newt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "221" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "27", + "durability": null, + "name": "Eye of newt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "222" + }, + { + "ge_buy_limit": "10000", + "examine": "Ewww!", + "grand_exchange_price": "888", + "durability": null, + "name": "Red spiders' eggs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "223" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "888", + "durability": null, + "name": "Red spiders' eggs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "224" + }, + { + "ge_buy_limit": "10000", + "examine": "The root of a limpwurt plant.", + "grand_exchange_price": "1984", + "durability": null, + "name": "Limpwurt root", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "225" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1984", + "durability": null, + "name": "Limpwurt root", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "226" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "A glass vial containing water.", + "grand_exchange_price": "35", + "durability": null, + "name": "Vial of water", + "tradeable": "true", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "227" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "35", + "durability": null, + "name": "Vial of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "228" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "An empty glass vial.", + "grand_exchange_price": "2", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "229" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "230" + }, + { + "shop_price": "67", + "ge_buy_limit": "10000", + "examine": "Strange spiky grass.", + "grand_exchange_price": "318", + "durability": null, + "name": "Snape grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "231" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "318", + "durability": null, + "name": "Snape grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "232" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "I can grind things for potions in this.", + "grand_exchange_price": "38", + "durability": null, + "name": "Pestle and mortar", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "233" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "38", + "durability": null, + "name": "Pestle and mortar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "234" + }, + { + "ge_buy_limit": "10000", + "examine": "Finely ground horn of Unicorn.", + "grand_exchange_price": "2460", + "durability": null, + "name": "Unicorn horn dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "235" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2460", + "durability": null, + "name": "Unicorn horn dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "236" + }, + { + "ge_buy_limit": "10000", + "examine": "This horn has restorative properties.", + "grand_exchange_price": "2481", + "durability": null, + "name": "Unicorn horn", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "237" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2481", + "durability": null, + "name": "Unicorn horn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "238" + }, + { + "ge_buy_limit": "10000", + "examine": "Sour berries, used in potions.", + "grand_exchange_price": "1438", + "durability": null, + "name": "White berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "239" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1438", + "durability": null, + "name": "White berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "240" + }, + { + "ge_buy_limit": "10000", + "examine": "Finely ground scale of Dragon.", + "grand_exchange_price": "1336", + "durability": null, + "name": "Dragon scale dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "241" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1336", + "durability": null, + "name": "Dragon scale dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "242" + }, + { + "ge_buy_limit": "10000", + "examine": "A large shiny scale.", + "grand_exchange_price": "1244", + "durability": null, + "name": "Blue dragon scale", + "tradeable": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "243" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1244", + "durability": null, + "name": "Blue dragon scale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "244" + }, + { + "ge_buy_limit": "10000", + "examine": "An evil wine that is often found in chaos temples.", + "grand_exchange_price": "2768", + "durability": null, + "name": "Wine of zamorak", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "245" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2768", + "durability": null, + "name": "Wine of zamorak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "246" + }, + { + "ge_buy_limit": "10000", + "examine": "They don't look very ripe.", + "grand_exchange_price": "83", + "durability": null, + "name": "Jangerberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "247" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "83", + "durability": null, + "name": "Jangerberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "248" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "182", + "durability": null, + "name": "Clean guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "249" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "182", + "durability": null, + "name": "Clean guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "250" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "23", + "durability": null, + "name": "Clean marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "251" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "23", + "durability": null, + "name": "Clean marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "252" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "144", + "durability": null, + "name": "Clean tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "253" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "144", + "durability": null, + "name": "Clean tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "254" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "275", + "durability": null, + "name": "Clean harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "255" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "275", + "durability": null, + "name": "Clean harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "256" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "4930", + "durability": null, + "name": "Clean ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "257" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4930", + "durability": null, + "name": "Clean ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "258" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "2072", + "durability": null, + "name": "Clean irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "259" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2072", + "durability": null, + "name": "Clean irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "260" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "3812", + "durability": null, + "name": "Clean avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "261" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3812", + "durability": null, + "name": "Clean avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "262" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "1641", + "durability": null, + "name": "Clean kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "263" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1641", + "durability": null, + "name": "Clean kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "264" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "1585", + "durability": null, + "name": "Clean cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "265" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1585", + "durability": null, + "name": "Clean cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "266" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "6925", + "durability": null, + "name": "Clean dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "267" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6925", + "durability": null, + "name": "Clean dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "268" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "8400", + "durability": null, + "name": "Clean torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "269" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "35900", + "durability": null, + "name": "Clean torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "270" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It looks like part of a machine", + "durability": null, + "name": "Pressure gauge", + "archery_ticket_price": "0", + "id": "271" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box of fish food / Keeps your pet fish strong and healthy.", + "durability": null, + "name": "Fish food", + "archery_ticket_price": "0", + "id": "272", + "equipment_slot": "5" + }, + { + "destroy_message": "You'll have to make more in Draynor Manor.", + "examine": "This isn't good for fish.", + "durability": null, + "name": "Poisoned fish food", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "274" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Key", + "archery_ticket_price": "0", + "id": "275" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's slightly charred.", + "durability": null, + "name": "Rubber tube", + "archery_ticket_price": "0", + "id": "276" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's pretty full.", + "durability": null, + "name": "Oil can", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "277" + }, + { + "examine": "A sharp cattleprod.", + "durability": null, + "name": "Cattleprod", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "278", + "weapon_interface": "5", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0", + "equipment_slot": "3" + }, + { + "examine": "Councillor Halgrive gave me this to kill some sheep.", + "durability": null, + "name": "Sheep feed", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "279" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (1)", + "archery_ticket_price": "0", + "id": "280" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (2)", + "archery_ticket_price": "0", + "id": "281" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (3)", + "archery_ticket_price": "0", + "id": "282" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (4)", + "archery_ticket_price": "0", + "id": "283" + }, + { + "remove_sleeves": "true", + "examine": "This should protect me from the plague, I hope!", + "durability": null, + "name": "Plague jacket", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "284", + "equipment_slot": "4" + }, + { + "examine": "A thick pair of leather trousers. or These should protect me from the plague, I hope!", + "durability": null, + "name": "Plague trousers", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "285", + "equipment_slot": "7" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Orange goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "286", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Blue goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "287", + "equipment_slot": "4" + }, + { + "shop_price": "16", + "ge_buy_limit": "100", + "examine": "Armour designed to fit goblins.", + "grand_exchange_price": "398", + "durability": null, + "name": "Goblin mail", + "tradeable": "true", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "288", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "398", + "durability": null, + "name": "Goblin mail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "289" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This contains some vital research results.", + "durability": null, + "name": "Research package", + "weight": "1", + "archery_ticket_price": "0", + "id": "290" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Notes", + "archery_ticket_price": "0", + "id": "291" + }, + { + "examine": "A book on elven history in northern RuneScape.", + "durability": null, + "name": "Book on baxtorian", + "archery_ticket_price": "0", + "id": "292" + }, + { + "examine": "A small pebble with elven inscription.", + "durability": null, + "name": "Glarial's pebble", + "archery_ticket_price": "0", + "id": "294" + }, + { + "examine": "A bright green gem set in a necklace.", + "durability": null, + "name": "Glarial's amulet", + "archery_ticket_price": "0", + "id": "295", + "equipment_slot": "2" + }, + { + "examine": "An urn containing Glarial's ashes./An empty urn made for Glarial's ashes.", + "durability": null, + "name": "Glarial's urn", + "archery_ticket_price": "0", + "id": "296" + }, + { + "examine": "An urn containing Glarial's ashes./An empty urn made for Glarial's ashes.", + "durability": null, + "name": "Glarial's urn", + "archery_ticket_price": "0", + "id": "297" + }, + { + "shop_price": "300", + "ge_buy_limit": "5000", + "examine": "Magical seeds in a mithril case.", + "grand_exchange_price": "623", + "durability": null, + "name": "Mithril seeds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "299" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A bit of rat.", + "durability": null, + "name": "Rat's tail", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "300" + }, + { + "requirements": "{10,40}", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Useful for catching lobsters.", + "grand_exchange_price": "100", + "durability": null, + "name": "Lobster pot", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "301" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "100", + "durability": null, + "name": "Lobster pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "302" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "Useful for catching small fish.", + "grand_exchange_price": "397", + "durability": null, + "name": "Small fishing net", + "tradeable": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "303" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "397", + "durability": null, + "name": "Small fishing net", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "304" + }, + { + "requirements": "{16,10}", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Useful for catching lots of fish.", + "grand_exchange_price": "329", + "durability": null, + "name": "Big fishing net", + "tradeable": "true", + "weight": "8.1", + "archery_ticket_price": "0", + "id": "305" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "329", + "durability": null, + "name": "Big fishing net", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "306" + }, + { + "requirements": "{5,10}", + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Useful for catching sardine or herring.", + "grand_exchange_price": "74", + "durability": null, + "name": "Fishing rod", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "307" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Fishing rod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "308" + }, + { + "requirements": "{20,10}", + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Useful for catching salmon or trout.In Daemonhiem: Just add feathers.", + "grand_exchange_price": "123", + "durability": null, + "name": "Fly fishing rod", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "309" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "123", + "durability": null, + "name": "Fly fishing rod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "310" + }, + { + "requirements": "{10,35}", + "shop_price": "45", + "ge_buy_limit": "5000", + "examine": "Useful for catching big fish.", + "grand_exchange_price": "235", + "durability": null, + "name": "Harpoon", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "311" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "235", + "durability": null, + "name": "Harpoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "312" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "For use with a fishing rod.", + "grand_exchange_price": "3", + "durability": null, + "name": "Fishing bait", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "313" + }, + { + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Used for fly fishing.", + "grand_exchange_price": "24", + "durability": null, + "name": "Feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "314" + }, + { + "ge_buy_limit": "10000", + "examine": "Some nicely cooked shrimp.", + "grand_exchange_price": "9", + "durability": null, + "name": "Shrimps", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "315" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "9", + "durability": null, + "name": "Shrimps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "316" + }, + { + "shop_price": "6", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "7", + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "317" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "7", + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "318" + }, + { + "ge_buy_limit": "10000", + "examine": "Some nicely cooked anchovies.", + "grand_exchange_price": "26", + "durability": null, + "name": "Anchovies", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "319" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "26", + "durability": null, + "name": "Anchovies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "320" + }, + { + "shop_price": "16", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "11", + "durability": null, + "name": "Raw anchovies", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "321" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "11", + "durability": null, + "name": "Raw anchovies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "322" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "324" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked Sardines.", + "grand_exchange_price": "12", + "durability": null, + "name": "Sardine", + "tradeable": "true", + "weight": "0.12", + "archery_ticket_price": "0", + "id": "325" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "12", + "durability": null, + "name": "Sardine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "326" + }, + { + "shop_price": "7", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "31", + "durability": null, + "name": "Raw sardine", + "tradeable": "true", + "weight": "0.12", + "archery_ticket_price": "0", + "id": "327" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "31", + "durability": null, + "name": "Raw sardine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "328" + }, + { + "shop_price": "88", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked salmon.", + "grand_exchange_price": "278", + "durability": null, + "name": "Salmon", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "329" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "278", + "durability": null, + "name": "Salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "330" + }, + { + "shop_price": "36", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "172", + "durability": null, + "name": "Raw salmon", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "331" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "172", + "durability": null, + "name": "Raw salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "332" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked trout.", + "grand_exchange_price": "172", + "durability": null, + "name": "Trout", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "333" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "172", + "durability": null, + "name": "Trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "334" + }, + { + "shop_price": "7", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "67", + "durability": null, + "name": "Raw trout", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "335" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "67", + "durability": null, + "name": "Raw trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "336" + }, + { + "examine": "Some nicely cooked giant carp.", + "durability": null, + "name": "Giant carp", + "archery_ticket_price": "0", + "id": "337" + }, + { + "examine": "I should try cooking this.", + "durability": null, + "name": "Raw giant carp", + "archery_ticket_price": "0", + "id": "338" + }, + { + "shop_price": "49", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked fish.", + "grand_exchange_price": "19", + "durability": null, + "name": "Cod", + "tradeable": "true", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "339" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "19", + "durability": null, + "name": "Cod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "340" + }, + { + "shop_price": "49", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "29", + "durability": null, + "name": "Raw cod", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "341" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "29", + "durability": null, + "name": "Raw cod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "342" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "344" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "63", + "durability": null, + "name": "Raw herring", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "345" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "63", + "durability": null, + "name": "Raw herring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "346" + }, + { + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked herring.", + "grand_exchange_price": "23", + "durability": null, + "name": "Herring", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "347" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "23", + "durability": null, + "name": "Herring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "348" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "72", + "durability": null, + "name": "Raw pike", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "349" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "72", + "durability": null, + "name": "Raw pike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "350" + }, + { + "ge_buy_limit": "10000", + "examine": "Some nicely cooked pike.", + "grand_exchange_price": "94", + "durability": null, + "name": "Pike", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "351" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "94", + "durability": null, + "name": "Pike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "352" + }, + { + "shop_price": "26", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw mackerel", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "353" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw mackerel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "354" + }, + { + "shop_price": "23", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked fish.", + "grand_exchange_price": "5", + "durability": null, + "name": "Mackerel", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "355" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5", + "durability": null, + "name": "Mackerel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "356" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "358" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "210", + "durability": null, + "name": "Raw tuna", + "tradeable": "true", + "weight": "0.379", + "archery_ticket_price": "0", + "id": "359" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "210", + "durability": null, + "name": "Raw tuna", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "360" + }, + { + "shop_price": "126", + "ge_buy_limit": "10000", + "examine": "Wow, this is a big fish.", + "grand_exchange_price": "281", + "durability": null, + "name": "Tuna", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "361" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "281", + "durability": null, + "name": "Tuna", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "362" + }, + { + "ge_buy_limit": "20000", + "examine": "Wow, this is a big fish.", + "grand_exchange_price": "490", + "durability": null, + "name": "Raw bass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "363" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "490", + "durability": null, + "name": "Raw bass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "364" + }, + { + "shop_price": "270", + "ge_buy_limit": "10000", + "examine": "Wow, this is a big fish.", + "grand_exchange_price": "330", + "durability": null, + "name": "Bass", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "365" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "330", + "durability": null, + "name": "Bass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "366" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "368" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "370" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "513", + "durability": null, + "name": "Raw swordfish", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "371" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "513", + "durability": null, + "name": "Raw swordfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "372" + }, + { + "shop_price": "400", + "ge_buy_limit": "10000", + "examine": "I'd better be careful eating this!", + "grand_exchange_price": "501", + "durability": null, + "name": "Swordfish", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "373" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "501", + "durability": null, + "name": "Swordfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "374" + }, + { + "durability": null, + "name": "Burnt swordfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "376" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "322", + "durability": null, + "name": "Raw lobster", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "377" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "322", + "durability": null, + "name": "Raw lobster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "378" + }, + { + "shop_price": "107", + "ge_buy_limit": "10000", + "examine": "This looks tricky to eat.", + "grand_exchange_price": "334", + "durability": null, + "name": "Lobster", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "379" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "334", + "durability": null, + "name": "Lobster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "380" + }, + { + "durability": null, + "name": "Burnt lobster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "382" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "1615", + "durability": null, + "name": "Raw shark", + "tradeable": "true", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "383" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "1615", + "durability": null, + "name": "Raw shark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "384" + }, + { + "ge_buy_limit": "10000", + "examine": "I'd better be careful eating this.", + "grand_exchange_price": "1682", + "durability": null, + "name": "Shark", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "385" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1682", + "durability": null, + "name": "Shark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "386" + }, + { + "durability": null, + "name": "Burnt shark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "388" + }, + { + "ge_buy_limit": "20000", + "examine": "Tastier when cooked.", + "grand_exchange_price": "2114", + "durability": null, + "name": "Raw manta ray", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "389" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "2114", + "durability": null, + "name": "Raw manta ray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "390" + }, + { + "ge_buy_limit": "10000", + "examine": "Mmmm...this looks tasty!", + "grand_exchange_price": "2552", + "durability": null, + "name": "Manta ray", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "391" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2552", + "durability": null, + "name": "Manta ray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "392" + }, + { + "durability": null, + "name": "Burnt manta ray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "394" + }, + { + "ge_buy_limit": "20000", + "examine": "Looks wrinkly.", + "grand_exchange_price": "2397", + "durability": null, + "name": "Raw sea turtle", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "395" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "2397", + "durability": null, + "name": "Raw sea turtle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "396" + }, + { + "ge_buy_limit": "10000", + "examine": "Tasty!", + "grand_exchange_price": "2486", + "durability": null, + "name": "Sea turtle", + "tradeable": "true", + "weight": "0.35", + "archery_ticket_price": "0", + "id": "397" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2486", + "durability": null, + "name": "Sea turtle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "398" + }, + { + "durability": null, + "name": "Burnt sea turtle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "400" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "Slightly damp seaweed.", + "grand_exchange_price": "780", + "durability": null, + "name": "Seaweed", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "401" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "780", + "durability": null, + "name": "Seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "402" + }, + { + "ge_buy_limit": "10000", + "examine": "Slightly damp seaweed.", + "grand_exchange_price": "291", + "durability": null, + "name": "Edible seaweed", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "403" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "291", + "durability": null, + "name": "Edible seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "404" + }, + { + "ge_buy_limit": "100", + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "4162", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "405" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4162", + "durability": null, + "name": "Casket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "406" + }, + { + "ge_buy_limit": "500", + "examine": "Its a rare oyster.", + "grand_exchange_price": "23", + "durability": null, + "name": "Oyster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "407" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "23", + "durability": null, + "name": "Oyster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "408" + }, + { + "shop_price": "5", + "examine": "Aww, it's empty.", + "durability": null, + "name": "Empty oyster", + "tradeable": "true", + "weight": "0.08", + "archery_ticket_price": "0", + "id": "409" + }, + { + "durability": null, + "name": "Empty oyster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "410" + }, + { + "shop_price": "44", + "ge_buy_limit": "500", + "examine": "I could work wonders with a chisel on this pearl.", + "grand_exchange_price": "18", + "durability": null, + "name": "Oyster pearl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "411", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "18", + "durability": null, + "name": "Oyster pearl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "412" + }, + { + "ge_buy_limit": "500", + "examine": "I could work wonders with a chisel on these pearls.", + "grand_exchange_price": "639", + "durability": null, + "name": "Oyster pearls", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "413", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "639", + "durability": null, + "name": "Oyster pearls", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "414" + }, + { + "examine": "An expensive colourless liquid.", + "durability": null, + "name": "Ethenea", + "archery_ticket_price": "0", + "id": "415" + }, + { + "examine": "This isn't worth much.", + "durability": null, + "name": "Liquid honey", + "archery_ticket_price": "0", + "id": "416" + }, + { + "examine": "It's highly poisonous.", + "durability": null, + "name": "Sulphuric broline", + "weight": "1", + "archery_ticket_price": "0", + "id": "417" + }, + { + "examine": "Probably best I don't keep this too long.", + "durability": null, + "name": "Plague sample", + "archery_ticket_price": "0", + "id": "418" + }, + { + "examine": "A special kind of paper.", + "durability": null, + "name": "Touch paper", + "archery_ticket_price": "0", + "id": "419" + }, + { + "examine": "Apparently it distills.", + "durability": null, + "name": "Distillator", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "420" + }, + { + "examine": "Yup. It's an amulet.", + "durability": null, + "name": "Lathas' amulet", + "archery_ticket_price": "0", + "id": "421", + "equipment_slot": "2" + }, + { + "examine": "Birds love this stuff!", + "durability": null, + "name": "Bird feed", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "422" + }, + { + "examine": "(empty) It's empty... (full) It's full of pigeons.", + "durability": null, + "name": "Pigeon cage", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "424" + }, + { + "examine": "(empty) It's empty... (full) It's full of pigeons.", + "durability": null, + "name": "Pigeon cage", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "425" + }, + { + "ge_buy_limit": "100", + "shop_price": "5", + "examine": "Top half of a priest suit.", + "durability": null, + "weight": "2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "55", + "name": "Priest gown", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "426", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "55", + "durability": null, + "name": "Priest gown", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "427" + }, + { + "ge_buy_limit": "100", + "shop_price": "5", + "examine": "Bottom half of a priest suit.", + "grand_exchange_price": "14", + "durability": null, + "name": "Priest gown", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "428", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,3,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Priest gown", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "429" + }, + { + "remove_sleeves": "true", + "examine": "Medical looking.", + "durability": null, + "name": "Doctors' gown", + "weight": "1", + "archery_ticket_price": "0", + "id": "430", + "equipment_slot": "4" + }, + { + "shop_price": "27", + "examine": "A very strong spirit brewed in Karamja.", + "durability": null, + "name": "Karamjan rum", + "archery_ticket_price": "0", + "id": "431" + }, + { + "examine": "Pirates don't have the best handwriting...", + "durability": null, + "name": "Pirate message", + "weight": "1", + "archery_ticket_price": "0", + "id": "433" + }, + { + "ge_buy_limit": "25000", + "examine": "Some hard dry clay.", + "grand_exchange_price": "150", + "durability": null, + "name": "Clay", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "434" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "406", + "durability": null, + "name": "Clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "435" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "80", + "tokkul_price": "4", + "durability": null, + "name": "Copper ore", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "436" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "58", + "durability": null, + "name": "Copper ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "437" + }, + { + "shop_price": "6", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "80", + "tokkul_price": "4", + "durability": null, + "name": "Tin ore", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "438" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "46", + "durability": null, + "name": "Tin ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "439" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "204", + "tokkul_price": "25", + "durability": null, + "name": "Iron ore", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "440" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "396", + "durability": null, + "name": "Iron ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "441" + }, + { + "shop_price": "82", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "180", + "tokkul_price": "112", + "durability": null, + "name": "Silver ore", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "442" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "205", + "durability": null, + "name": "Silver ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "443" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "311", + "tokkul_price": "225", + "durability": null, + "name": "Gold ore", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "444" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "319", + "durability": null, + "name": "Gold ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "445" + }, + { + "examine": "This needs refining.", + "durability": null, + "name": "'perfect' gold ore", + "archery_ticket_price": "0", + "id": "446" + }, + { + "shop_price": "243", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "420", + "tokkul_price": "243", + "durability": null, + "name": "Mithril ore", + "tradeable": "true", + "weight": "1.75", + "archery_ticket_price": "0", + "id": "447" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "369", + "durability": null, + "name": "Mithril ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "448" + }, + { + "shop_price": "1300", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "1160", + "tokkul_price": "600", + "durability": null, + "name": "Adamantite ore", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "449" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "1622", + "durability": null, + "name": "Adamantite ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "450" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "10300", + "tokkul_price": "4800", + "durability": null, + "name": "Runite ore", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "451" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "10300", + "durability": null, + "name": "Runite ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "452" + }, + { + "ge_buy_limit": "25000", + "examine": "Hmm a non-renewable energy source!", + "grand_exchange_price": "320", + "tokkul_price": "67", + "durability": null, + "name": "Coal", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "453" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "315", + "durability": null, + "name": "Coal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "454" + }, + { + "examine": "The official Alfred Grimhand bar crawl card.", + "durability": null, + "name": "Barcrawl card", + "archery_ticket_price": "0", + "id": "455" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "456" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "457" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "458" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "459" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "460" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "461" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "462" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "463" + }, + { + "ge_buy_limit": "10000", + "examine": "Found on strange plants that grow around Karamja.", + "grand_exchange_price": "403", + "durability": null, + "name": "Strange fruit", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "464" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "403", + "durability": null, + "name": "Strange fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "465" + }, + { + "shop_price": "1", + "examine": "Useless without the head.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Pickaxe handle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "466", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Pickaxe handle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "467" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "468", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "469" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "470", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "471" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "472", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "473" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "474", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "475" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "476", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "477" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "478", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "479" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Bronze pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "480" + }, + { + "durability": null, + "name": "Bronze pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "481" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Iron pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "482" + }, + { + "durability": null, + "name": "Iron pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "483" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Steel pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "484" + }, + { + "durability": null, + "name": "Steel pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "485" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Mithril pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "486" + }, + { + "durability": null, + "name": "Mithril pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "487" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Adamant pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "488" + }, + { + "durability": null, + "name": "Adamant pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "489" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Rune pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "490" + }, + { + "durability": null, + "name": "Rune pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "491" + }, + { + "examine": "Useless without the head.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "492", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "493" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "494", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "495" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "496", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "497" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "498", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "499" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "500", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "501" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "502", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "503" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "504", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "505" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "506", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "507" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "508" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "509" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "510" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "511" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "512" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "513" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "514" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "515" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "516" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "517" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "518" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "519" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "520" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "521" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted beef", + "archery_ticket_price": "0", + "id": "522" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted rat meat", + "archery_ticket_price": "0", + "id": "523" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted bear meat", + "archery_ticket_price": "0", + "id": "524" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted chicken", + "weight": "1", + "archery_ticket_price": "0", + "id": "525" + }, + { + "shop_price": "190", + "ge_buy_limit": "10000", + "grand_exchange_price": "190", + "examine": "Bones are for burying!", + "durability": null, + "name": "Bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "526" + }, + { + "shop_price": "190", + "ge_buy_limit": "10000", + "grand_exchange_price": "190", + "durability": null, + "name": "Bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "527" + }, + { + "ge_buy_limit": "10000", + "examine": "Bones are for burying!", + "grand_exchange_price": "329", + "durability": null, + "name": "Burnt bones", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "528" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "329", + "durability": null, + "name": "Burnt bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "529" + }, + { + "ge_buy_limit": "10000", + "examine": "Ew it's a pile of bones.", + "grand_exchange_price": "354", + "durability": null, + "name": "Bat bones", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "530" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "354", + "durability": null, + "name": "Bat bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "531" + }, + { + "shop_price": "593", + "ge_buy_limit": "10000", + "examine": "Normal: Ew, it's a pile of bones.", + "grand_exchange_price": "593", + "durability": null, + "name": "Big bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "532" + }, + { + "shop_price": "593", + "ge_buy_limit": "10000", + "grand_exchange_price": "593", + "durability": null, + "name": "Big bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "533" + }, + { + "ge_buy_limit": "10000", + "examine": "Ew, it's a pile of bones.", + "grand_exchange_price": "1357", + "durability": null, + "name": "Babydragon bones", + "tradeable": "true", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "534" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1357", + "durability": null, + "name": "Babydragon bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "535" + }, + { + "ge_buy_limit": "10000", + "examine": "These would feed a dog for months.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Dragon bones", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "536" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4065", + "durability": null, + "name": "Dragon bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "537" + }, + { + "ge_buy_limit": "100", + "examine": "Keeps a druid's knees nice and warm.", + "grand_exchange_price": "168", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "538", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "168", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "539" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "I feel closer to the gods when I am wearing this.", + "grand_exchange_price": "328", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "540", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "328", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "541" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "528", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "542", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "528", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "543" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "1495", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "544", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,6,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1495", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "545" + }, + { + "remove_sleeves": "true", + "examine": "I feel closer to the gods when I am wearing this. (Top) If a shade had knees, this would keep them nice and warm. (Bottom)", + "durability": null, + "name": "Shade robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "546", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "4" + }, + { + "examine": "I feel closer to the gods when I am wearing this. (Top) If a shade had knees, this would keep them nice and warm. (Bottom)", + "durability": null, + "name": "Shade robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "548", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,4,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "Issued by RuneScape Council to all new citizens.", + "grand_exchange_price": "123", + "durability": null, + "name": "Newcomer map", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "550" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "123", + "durability": null, + "name": "Newcomer map", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "551" + }, + { + "examine": "It lets me talk to ghosts.", + "durability": null, + "name": "Ghostspeak amulet", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "552", + "equipment_slot": "2" + }, + { + "destroy_message": "If you get rid of the skull you'll have to search for it again.", + "examine": "Ooooh spooky!", + "durability": null, + "name": "Ghost's skull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "553" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "554" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "555" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "556" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "557" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "Used for basic missile spells.", + "grand_exchange_price": "18", + "tokkul_price": "4", + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "558" + }, + { + "shop_price": "16", + "ge_buy_limit": "25000", + "examine": "Used for Curse spells", + "grand_exchange_price": "16", + "tokkul_price": "4", + "durability": null, + "name": "Body rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "559" + }, + { + "shop_price": "310", + "ge_buy_limit": "25000", + "examine": "Used for medium missile spells.", + "grand_exchange_price": "320", + "durability": null, + "tokkul_price": "270", + "name": "Death rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "560" + }, + { + "shop_price": "372", + "ge_buy_limit": "25000", + "examine": "Used for alchemy spells.", + "grand_exchange_price": "380", + "durability": null, + "name": "Nature rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "561" + }, + { + "shop_price": "140", + "ge_buy_limit": "25000", + "examine": "Used for small missile spells.", + "grand_exchange_price": "140", + "durability": null, + "tokkul_price": "135", + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "562" + }, + { + "shop_price": "378", + "ge_buy_limit": "25000", + "examine": "Used for teleport spells.", + "grand_exchange_price": "380", + "durability": null, + "name": "Law rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "563" + }, + { + "shop_price": "232", + "ge_buy_limit": "25000", + "examine": "Used for enchant spells.", + "grand_exchange_price": "240", + "durability": null, + "name": "Cosmic rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "564" + }, + { + "shop_price": "550", + "ge_buy_limit": "25000", + "examine": "Used for large missile spells.", + "grand_exchange_price": "560", + "durability": null, + "name": "Blood rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "565" + }, + { + "shop_price": "400", + "ge_buy_limit": "25000", + "examine": "Used for high level curse spells.", + "grand_exchange_price": "420", + "durability": null, + "name": "Soul rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "566" + }, + { + "ge_buy_limit": "5000", + "examine": "I'd prefer it if it was powered.", + "grand_exchange_price": "561", + "durability": null, + "name": "Unpowered orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "567" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "561", + "durability": null, + "name": "Unpowered orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "568" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2346", + "durability": null, + "name": "Fire orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "569" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2346", + "durability": null, + "name": "Fire orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "570" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2024", + "durability": null, + "name": "Water orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "571" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2024", + "durability": null, + "name": "Water orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "572" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2162", + "durability": null, + "name": "Air orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "573" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2162", + "durability": null, + "name": "Air orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "574" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2208", + "durability": null, + "name": "Earth orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "575" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2208", + "durability": null, + "name": "Earth orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "576" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "I can do magic better in this.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1840", + "name": "Wizard robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "577", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1840", + "durability": null, + "name": "Wizard robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "578" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.45", + "equipment_slot": "0", + "grand_exchange_price": "361", + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "579", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "grand_exchange_price": "361", + "durability": null, + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "580" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "I can do magic better in this.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1364", + "name": "Black robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "581", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1364", + "durability": null, + "name": "Black robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "582" + }, + { + "shop_price": "10", + "examine": "Empty: It's a bailing bucket. Full: It's a bailing bucket full of salty water.", + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "583" + }, + { + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "584" + }, + { + "shop_price": "10", + "examine": "Empty: It's a bailing bucket. Full: It's a bailing bucket full of salty water.", + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "585" + }, + { + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "586" + }, + { + "examine": "A strange glowing green orb.", + "durability": null, + "name": "Orb of protection", + "weight": "1", + "archery_ticket_price": "0", + "id": "587" + }, + { + "examine": "Two strange glowing green orbs.", + "durability": null, + "name": "Orbs of protection", + "archery_ticket_price": "0", + "id": "588" + }, + { + "examine": "It's an amulet of protection given to me by the Gnomes.", + "durability": null, + "name": "Gnome amulet", + "archery_ticket_price": "0", + "id": "589", + "bonuses": "0,0,0,0,0,13,13,13,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "shop_price": "1", + "ge_buy_limit": "5000", + "examine": "Useful for lighting a fire.", + "grand_exchange_price": "118", + "durability": null, + "name": "Tinderbox", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "590" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "118", + "durability": null, + "name": "Tinderbox", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "591" + }, + { + "ge_buy_limit": "10000", + "examine": "A heap of ashes.", + "grand_exchange_price": "368", + "durability": null, + "name": "Ashes", + "tradeable": "true", + "weight": "0.056", + "archery_ticket_price": "0", + "id": "592" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "368", + "durability": null, + "name": "Ashes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "593" + }, + { + "examine": "A lit home-made torch.", + "durability": null, + "name": "Lit torch", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "594" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An unlit home-made torch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Unlit torch", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "596" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Unlit torch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "597" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with bronze heads and oil-soaked cloth. lit: An easy to make, bronze-headed fire arrow.", + "grand_exchange_price": "162", + "durability": null, + "name": "Bronze fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "598", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "100", + "examine": "A book on the history of astronomy in RuneScape.", + "grand_exchange_price": "658", + "durability": null, + "name": "Astronomy book", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "600" + }, + { + "destroy_message": "You'll have to find another, down in the dungeon.", + "examine": "A small key for a large door.", + "durability": null, + "name": "Goblin kitchen key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "601" + }, + { + "destroy_message": "You'll have to get another down in the Dungeon", + "examine": "An unusual clay mould in the shape of a disc.", + "durability": null, + "name": "Lens mould", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "602" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A perfectly circular disc of glass.", + "durability": null, + "name": "Observatory lens", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "603" + }, + { + "shop_price": "160", + "examine": "A slender bone shard given to you by Zadimus.", + "durability": null, + "name": "Bone shard", + "archery_ticket_price": "0", + "id": "604" + }, + { + "shop_price": "100", + "examine": "A key fashioned from a shard of bone. (Shilo Village)", + "durability": null, + "name": "Bone key", + "archery_ticket_price": "0", + "id": "605" + }, + { + "examine": "A stone plaque with carved letters in it.", + "durability": null, + "name": "Stone-plaque", + "archery_ticket_price": "0", + "id": "606" + }, + { + "examine": "An ancient tattered scroll.", + "durability": null, + "name": "Tattered scroll", + "archery_ticket_price": "0", + "id": "607" + }, + { + "shop_price": "100", + "examine": "An ancient crumpled scroll.", + "durability": null, + "name": "Crumpled scroll", + "archery_ticket_price": "0", + "id": "608" + }, + { + "examine": "The remains of the Zombie Queen.", + "durability": null, + "name": "Rashiliyia corpse", + "archery_ticket_price": "0", + "id": "609" + }, + { + "examine": "The remains of Zadimus.", + "durability": null, + "name": "Zadimus corpse", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "610" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "611" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "612" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "613" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "614" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "615" + }, + { + "destroy_message": "You made the beads of the dead during the Shilo Village quest. You can get another from Yanni Salika in Shilo Village for 1200 gold.", + "shop_price": "1200", + "examine": "A curious looking neck ornament.", + "durability": null, + "name": "Beads of the dead", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "616", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,1,0,0", + "equipment_slot": "2" + }, + { + "bankable": "false", + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "archery_ticket_price": "0", + "id": "617" + }, + { + "examine": "Beads carved out of a bone.", + "durability": null, + "name": "Bone beads", + "archery_ticket_price": "0", + "id": "618" + }, + { + "shop_price": "35", + "examine": "Allows you to rest in the luxurious Paramayer[sic] Inn.", + "durability": null, + "name": "Paramaya ticket", + "archery_ticket_price": "0", + "id": "619" + }, + { + "shop_price": "35", + "examine": "Allows you to rest in the luxurious Paramayer[sic] Inn.", + "durability": null, + "name": "Paramaya ticket", + "archery_ticket_price": "0", + "id": "620" + }, + { + "examine": "Sold in Shilo Village for passage on the 'Lady of the Waves'.", + "durability": null, + "name": "Ship ticket", + "archery_ticket_price": "0", + "id": "621" + }, + { + "examine": "An ivory sword pommel.", + "durability": null, + "name": "Sword pommel", + "archery_ticket_price": "0", + "id": "623" + }, + { + "examine": "Notes taken from the tomb of Bervirius.", + "durability": null, + "name": "Bervirius notes", + "archery_ticket_price": "0", + "id": "624" + }, + { + "examine": "A decorated belt used to trade information between distant villages.", + "durability": null, + "name": "Wampum belt", + "archery_ticket_price": "0", + "id": "625" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and pink.", + "grand_exchange_price": "558", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "626", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "558", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "627" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and green.", + "grand_exchange_price": "397", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "628", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "397", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "629" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and blue.", + "grand_exchange_price": "612", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "630", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "612", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "631" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and cream.", + "grand_exchange_price": "496", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "632", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "496", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "633" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and turquoise.", + "grand_exchange_price": "226", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "634", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "226", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "635" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in pink.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "265", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "636", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "265", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "637" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in green.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "235", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "638", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "235", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "639" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in blue.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "447", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "640", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "447", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "641" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in cream.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "396", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "642", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "396", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "643" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in turquoise.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "70", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "644", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "70", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "645" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for pink.", + "grand_exchange_price": "249", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "646", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "249", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "647" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for green.", + "grand_exchange_price": "210", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "648", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "210", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "649" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for blue.", + "grand_exchange_price": "453", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "650", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "453", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "651" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for cream.", + "grand_exchange_price": "348", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "652", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "348", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "653" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for turquoise.", + "grand_exchange_price": "92", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "654", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "655" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "677", + "examine": "A silly, pink pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "656", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "677", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "657" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "480", + "examine": "A silly, green pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "658", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "480", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "659" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "examine": "A silly, blue pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "660", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "661" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1102", + "examine": "A silly, cream pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "662", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1102", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "663" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "295", + "examine": "A silly, turquoise pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "664", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "295", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "665" + }, + { + "examine": "Picture of a posing Paladin.", + "durability": null, + "name": "Portrait", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "666" + }, + { + "turn90cw_anim": "821", + "examine": "A Faladian Knight's sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "attack_speed": "5", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "292", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "809", + "attack_audios": "2500,2500,2517,2500", + "name": "Blurite sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "667", + "stand_turn_anim": "823", + "bonuses": "9,14,-2,0,0,0,3,2,0,0,0,10,0,0,0" + }, + { + "examine": "Definitely blue.", + "durability": null, + "name": "Blurite ore", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "668" + }, + { + "examine": "A receptacle for specimens!", + "durability": null, + "name": "Specimen jar", + "archery_ticket_price": "0", + "id": "669" + }, + { + "examine": "A small brush used to clean rock samples.", + "durability": null, + "name": "Specimen brush", + "archery_ticket_price": "0", + "id": "670" + }, + { + "examine": "A carefully-kept-safe skull sample.", + "durability": null, + "name": "Animal skull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "671" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A special cup.", + "durability": null, + "name": "Special cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "672" + }, + { + "examine": "A lucky mascot.", + "durability": null, + "name": "Teddy", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "673" + }, + { + "examine": "A roughly shaped piece of rock.", + "durability": null, + "name": "Cracked sample", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "674" + }, + { + "examine": "A small pick for digging.", + "durability": null, + "name": "Rock pick", + "archery_ticket_price": "0", + "id": "675", + "equipment_slot": "3" + }, + { + "examine": "Used for digging!", + "durability": null, + "name": "Trowel", + "archery_ticket_price": "0", + "id": "676" + }, + { + "examine": "An empty tray for panning.", + "durability": null, + "name": "Panning tray", + "archery_ticket_price": "0", + "id": "677" + }, + { + "examine": "This tray contains gold nuggets.", + "durability": null, + "name": "Panning tray", + "archery_ticket_price": "0", + "id": "678" + }, + { + "examine": "This tray contains mud.", + "durability": null, + "name": "Panning tray", + "archery_ticket_price": "0", + "id": "679" + }, + { + "examine": "Pure, lovely gold!", + "durability": null, + "name": "Nuggets", + "archery_ticket_price": "0", + "id": "680" + }, + { + "examine": "An unusual symbol as yet unidentified by the archaeological expert.", + "durability": null, + "name": "Ancient talisman", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "681" + }, + { + "examine": "A letter waiting to be stamped.", + "durability": null, + "name": "Unstamped letter", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "682" + }, + { + "examine": "A sealed letter of recommendation.", + "durability": null, + "name": "Sealed letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "683" + }, + { + "examine": "Used to hold up trousers!", + "durability": null, + "name": "Belt buckle", + "weight": "1", + "archery_ticket_price": "0", + "id": "684" + }, + { + "examine": "Phew!", + "durability": null, + "name": "Old boot", + "archery_ticket_price": "0", + "id": "685" + }, + { + "examine": "A decent-enough weapon gone rusty.", + "durability": null, + "name": "Rusty sword", + "weight": "2", + "archery_ticket_price": "0", + "id": "686" + }, + { + "examine": "This must have been shot at high speed.", + "durability": null, + "name": "Broken arrow", + "archery_ticket_price": "0", + "id": "687" + }, + { + "examine": "Not Dick Whittington's helper at all!", + "durability": null, + "name": "Buttons", + "archery_ticket_price": "0", + "id": "688" + }, + { + "examine": "I pity the poor person beaten with this!", + "attack_audios": "2555,0,0,0", + "durability": null, + "name": "Broken staff", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "689" + }, + { + "examine": "Smashed glass.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "690" + }, + { + "examine": "The owner has passed Earth Sciences Level 1 exam.", + "durability": null, + "name": "Level 1 certificate", + "archery_ticket_price": "0", + "id": "691" + }, + { + "examine": "The owner has passed Earth Sciences Level 2 exam.", + "durability": null, + "name": "Level 2 certificate", + "archery_ticket_price": "0", + "id": "692" + }, + { + "examine": "The owner has passed Earth Sciences Level 3 exam.", + "durability": null, + "name": "Level 3 certificate", + "archery_ticket_price": "0", + "id": "693" + }, + { + "examine": "Smashing!", + "durability": null, + "name": "Ceramic remains", + "archery_ticket_price": "0", + "id": "694" + }, + { + "examine": "Now, if I could just find a tooth fairy to sell this to...", + "durability": null, + "name": "Old tooth", + "archery_ticket_price": "0", + "id": "695" + }, + { + "examine": "A letter inviting me to use the private digging shafts.", + "durability": null, + "name": "Invitation letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "696" + }, + { + "examine": "It would be hard to repair this!", + "durability": null, + "name": "Damaged armour", + "weight": "7.75", + "archery_ticket_price": "0", + "id": "697" + }, + { + "examine": "Armour left over from a great fight.", + "durability": null, + "name": "Broken armour", + "weight": "8", + "archery_ticket_price": "0", + "id": "698" + }, + { + "examine": "An old stone slab with writing on it.", + "durability": null, + "name": "Stone tablet", + "archery_ticket_price": "0", + "id": "699" + }, + { + "examine": "An acrid chemical.", + "durability": null, + "name": "Chemical powder", + "archery_ticket_price": "0", + "id": "700" + }, + { + "examine": "An acrid chemical.", + "durability": null, + "name": "Ammonium nitrate", + "archery_ticket_price": "0", + "id": "701" + }, + { + "examine": "A strong chemical.", + "durability": null, + "name": "Unidentified liquid", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "702" + }, + { + "shop_price": "1", + "examine": "A strong chemical.", + "durability": null, + "name": "Nitroglycerin", + "weight": "1", + "archery_ticket_price": "0", + "id": "703" + }, + { + "examine": "Charcoal - crushed to small pieces!", + "durability": null, + "name": "Ground charcoal", + "archery_ticket_price": "0", + "id": "704" + }, + { + "examine": "A mixture of strong chemicals.", + "durability": null, + "name": "Chemical compound", + "weight": "2", + "archery_ticket_price": "0", + "id": "707" + }, + { + "examine": "The root of an arcenia plant.", + "durability": null, + "name": "Arcenia root", + "archery_ticket_price": "0", + "id": "708" + }, + { + "examine": "An unusually shaped vase. You can see something glinting inside.", + "durability": null, + "name": "Vase", + "archery_ticket_price": "0", + "id": "710" + }, + { + "examine": "It's about chemicals, judging from its cover.", + "durability": null, + "name": "Book on chemicals", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "711" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "712" + }, + { + "examine": "Notes given to you by Radimus Erkle, it includes a partially completed map.", + "durability": null, + "name": "Radimus notes", + "archery_ticket_price": "0", + "id": "714" + }, + { + "examine": "Notes given to you by Radimus Erkle, it includes a partially completed map.", + "durability": null, + "name": "Radimus notes", + "archery_ticket_price": "0", + "id": "715" + }, + { + "examine": "It makes a loud but interesting sound when swung in the air.", + "durability": null, + "name": "Bull roarer", + "archery_ticket_price": "0", + "id": "716" + }, + { + "examine": "A scrawled note with spidery writing on it.", + "durability": null, + "name": "Scrawled note", + "archery_ticket_price": "0", + "id": "717" + }, + { + "examine": "A scrawled note with spidery writing on it.", + "durability": null, + "name": "A scribbled note", + "archery_ticket_price": "0", + "id": "718" + }, + { + "examine": "A scrawled note with spidery writing on it.", + "durability": null, + "name": "Scrumpled note", + "archery_ticket_price": "0", + "id": "719" + }, + { + "examine": "A rough sketch of a bowl shaped vessel given to you by Gujuo.", + "durability": null, + "name": "Sketch", + "archery_ticket_price": "0", + "id": "720" + }, + { + "examine": "A specially made bowl constructed out of pure gold.", + "durability": null, + "name": "Gold bowl", + "archery_ticket_price": "0", + "id": "721" + }, + { + "examine": "A specially made bowl constructed out of pure gold and blessed.", + "durability": null, + "name": "Blessed gold bowl", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "722" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "723" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "724" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "725" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "726" + }, + { + "examine": "One of nature's pipes.", + "durability": null, + "name": "Hollow reed", + "weight": "0.012", + "archery_ticket_price": "0", + "id": "727" + }, + { + "examine": "One of nature's pipes.", + "durability": null, + "name": "Hollow reed", + "weight": "0.012", + "archery_ticket_price": "0", + "id": "728" + }, + { + "examine": "It looks like the Shamans personal notes...", + "durability": null, + "name": "Shamans tome", + "archery_ticket_price": "0", + "id": "729" + }, + { + "examine": "An ancient tome on Demonology.", + "durability": null, + "name": "Binding book", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "730" + }, + { + "shop_price": "160", + "examine": "An enchanted empty glass vial.", + "durability": null, + "name": "Enchanted vial", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "731" + }, + { + "examine": "A vial of holy water, good against certain demons.", + "durability": null, + "name": "Holy water", + "archery_ticket_price": "0", + "id": "732", + "weapon_interface": "18", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,24", + "equipment_slot": "3" + }, + { + "examine": "Fragments of a broken container.", + "durability": null, + "name": "Smashed glass", + "archery_ticket_price": "0", + "id": "733" + }, + { + "examine": "These need to be germinated before they can be used. / These are germinated and ready to be planted in fertile soil.", + "durability": null, + "name": "Yommi tree seeds", + "archery_ticket_price": "0", + "id": "735" + }, + { + "examine": "These need to be germinated before they can be used. / These are germinated and ready to be planted in fertile soil.", + "durability": null, + "name": "Yommi tree seeds", + "archery_ticket_price": "0", + "id": "736" + }, + { + "examine": "A Snakeweed mixture, needs another ingredient.", + "durability": null, + "name": "Snakeweed mixture", + "weight": "1", + "archery_ticket_price": "0", + "id": "737" + }, + { + "examine": "It's a mixture of ardrigal and water. Needs another ingredient.", + "durability": null, + "name": "Ardrigal mixture", + "archery_ticket_price": "0", + "id": "738" + }, + { + "examine": "A bravery potion for which Gujuo gave you the details, let's hope it works.", + "durability": null, + "name": "Bravery potion", + "archery_ticket_price": "0", + "id": "739" + }, + { + "shop_price": "160", + "examine": "A silly, blue pointed hat.", + "grand_exchange_price": "472", + "durability": null, + "name": "Blue hat", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "hat": "true", + "id": "740", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "It looks like it's been snapped off of something.", + "durability": null, + "name": "Chunk of crystal", + "archery_ticket_price": "0", + "id": "741" + }, + { + "examine": "It looks like it's been snapped off of something.", + "durability": null, + "name": "Hunk of crystal", + "archery_ticket_price": "0", + "id": "742" + }, + { + "examine": "It looks like it's been snapped off of something.", + "durability": null, + "name": "Lump of crystal", + "archery_ticket_price": "0", + "id": "743" + }, + { + "examine": "A heart shaped crystal.", + "durability": null, + "name": "Heart crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "744" + }, + { + "examine": "A heart shaped crystal.", + "durability": null, + "name": "Heart crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "745" + }, + { + "attack_anims": "400,400,400,400", + "examine": "A black obsidian dagger, it has a strange aura about it.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Dark dagger", + "archery_ticket_price": "0", + "id": "746", + "weapon_interface": "5", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,0,0,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "examine": "A black obsidian dagger, it has a strange aura about it - it seems to be glowing.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "attack_audios": "2517,2517,2500,2517", + "name": "Glowing dagger", + "archery_ticket_price": "0", + "id": "747", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,0,0,0,0" + }, + { + "examine": "A powerful spell for good.", + "durability": null, + "name": "Holy force", + "archery_ticket_price": "0", + "id": "748" + }, + { + "examine": "A well carved totem pole made from the trunk of a Yommi tree.", + "durability": null, + "name": "Yommi totem", + "weight": "3", + "archery_ticket_price": "0", + "id": "749" + }, + { + "examine": "A gilded totem pole from the Kharazi tribe.", + "durability": null, + "name": "Gilded totem", + "archery_ticket_price": "0", + "id": "750" + }, + { + "examine": "A common gnomeball, obtained by playing gnomeball.", + "durability": null, + "name": "Gnomeball", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "751", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Gnomeball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "752" + }, + { + "ge_buy_limit": "100", + "examine": "Poisonous berries.", + "grand_exchange_price": "42", + "durability": null, + "name": "Cadava berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "753" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "42", + "durability": null, + "name": "Cadava berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "754" + }, + { + "shop_price": "1", + "examine": "This potion will most certainly almost kill you.", + "durability": null, + "name": "Cadava potion", + "archery_ticket_price": "0", + "id": "756" + }, + { + "examine": "Phoenix Gang weapon store key.", + "durability": null, + "name": "Weapon store key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "759" + }, + { + "durability": null, + "name": "Weapon store key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "760" + }, + { + "destroy_message": "You'll have to kill Jonny the beard in order to get another one.", + "examine": "An intelligence report.", + "durability": null, + "name": "Intel report", + "destroy": "true", + "archery_ticket_price": "0", + "id": "761" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Half of the Shield of Arrav.", + "durability": null, + "name": "Broken shield", + "destroy": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "763" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Half of the Shield of Arrav.", + "durability": null, + "name": "Broken shield", + "destroy": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "765" + }, + { + "turn90cw_anim": "821", + "examine": "Second-rate crossbow, former property of the Phoenix Gang.", + "walk_anim": "4226", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Phoenix crossbow", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "767", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Phoenix crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "768" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Entrance certificate to the Imperial Guard.", + "durability": null, + "name": "Certificate", + "archery_ticket_price": "0", + "id": "769" + }, + { + "destroy_message": "You can get another branch if you chop the dramen tree underneath Entrana again.", + "examine": "A limb of the fabled Dramen tree.", + "durability": null, + "name": "Dramen branch", + "tradeable": "false", + "destroy": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "771" + }, + { + "turn90cw_anim": "1207", + "examine": "Crafted from a Dramen tree branch.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Dramen staff", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "772", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "examine": "A perfect ruby ring.", + "durability": null, + "name": "'perfect' ring", + "archery_ticket_price": "0", + "id": "773", + "equipment_slot": "12" + }, + { + "examine": "A perfect ruby necklace.", + "durability": null, + "name": "'perfect' necklace", + "archery_ticket_price": "0", + "id": "774", + "equipment_slot": "2" + }, + { + "destroy_message": "You can obtain another set of Cooking gauntlets from Dimintheis.", + "examine": "These gauntlets empower with a greater ability to cook fish.", + "durability": null, + "name": "Cooking gauntlets", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "775", + "bonuses": "2,2,2,0,0,8,9,7,0,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can obtain another set of Goldsmith gauntlets from Dimintheis.", + "examine": "These gauntlets empower the bearer whilst making gold.", + "durability": null, + "name": "Goldsmith gauntlets", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "776", + "bonuses": "2,2,2,0,0,8,9,7,0,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can obtain another set of Chaos gauntlets from Dimintheis.", + "examine": "These gauntlets empower spell casters.", + "durability": null, + "name": "Chaos gauntlets", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "777", + "bonuses": "2,2,2,0,0,8,9,7,0,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "My reward for assisting the Fitzharmon family.", + "durability": null, + "name": "Family gauntlets", + "weight": "1", + "archery_ticket_price": "0", + "id": "778", + "bonuses": "2,2,2,0,0,8,9,7,0,0,0,2,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "A fragment of the Fitzharmon family crest.", + "durability": null, + "name": "Crest part", + "archery_ticket_price": "0", + "id": "779" + }, + { + "examine": "A fragment of the Fitzharmon family crest.", + "durability": null, + "name": "Crest part", + "archery_ticket_price": "0", + "id": "780" + }, + { + "examine": "A fragment of the Fitzharmon family crest.", + "durability": null, + "name": "Crest part", + "archery_ticket_price": "0", + "id": "781" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A sample of the bark from the Grand Tree.", + "durability": null, + "name": "Bark sample", + "archery_ticket_price": "0", + "id": "783" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A book to translate the ancient gnome language into English.", + "durability": null, + "name": "Translation book", + "archery_ticket_price": "0", + "id": "784" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Perhaps I should read it and see what Glough is up to!", + "durability": null, + "name": "Glough's journal", + "archery_ticket_price": "0", + "id": "785" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Hazelmere wrote something down on this scroll.", + "durability": null, + "name": "Hazelmere's scroll", + "archery_ticket_price": "0", + "id": "786" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An order from the Karamja shipyard.", + "durability": null, + "name": "Lumber order", + "archery_ticket_price": "0", + "id": "787" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "The key to Glough's chest.", + "durability": null, + "name": "Glough's key", + "weight": "1", + "archery_ticket_price": "0", + "id": "788" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "789" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "790" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "791" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "792" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An ancient rock with strange magical properties.", + "durability": null, + "name": "Daconia rock", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "793" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "These are plans for an invasion!", + "durability": null, + "name": "Invasion plans", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "794" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A model of a Karamja warship", + "durability": null, + "name": "War ship", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "795" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "3", + "name": "Bronze thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "800", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,5" + }, + { + "shop_price": "13", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "14", + "name": "Iron thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "801", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,5}", + "shop_price": "38", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "60", + "name": "Steel thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "802", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,11" + }, + { + "requirements": "{4,20}", + "shop_price": "105", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "135", + "name": "Mithril thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "803", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,16" + }, + { + "requirements": "{4,30}", + "shop_price": "262", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "138", + "name": "Adamant thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "804", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,23" + }, + { + "requirements": "{4,40}", + "shop_price": "698", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "has_special": "true", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "243", + "name": "Rune thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "805", + "bonuses": "0,0,0,0,26,0,0,0,0,0,0,0,0,0,36" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "53", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "806", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "59", + "attack_audios": "2547,0,0,0", + "name": "Iron dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "807", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "50", + "attack_audios": "2547,0,0,0", + "name": "Steel dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "808", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "68", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "809", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "96", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "810", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "122", + "attack_audios": "2547,0,0,0", + "name": "Rune dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "811", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "66", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "812", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "66", + "attack_audios": "2547,0,0,0", + "name": "Iron dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "813", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "75", + "attack_audios": "2547,0,0,0", + "name": "Steel dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "814", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "65", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "815", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "75", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "816", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "110", + "attack_audios": "2547,0,0,0", + "name": "Rune dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "817", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Poisoned dart(p)", + "archery_ticket_price": "0", + "id": "818", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of bronze - needs feathers for flight.", + "grand_exchange_price": "24", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Bronze dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "819" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of iron - needs feathers for flight.", + "grand_exchange_price": "19", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Iron dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "820" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of steel - needs feathers for flight.", + "grand_exchange_price": "66", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Steel dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "821" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of mithril - needs feathers for flight.", + "grand_exchange_price": "97", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Mithril dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "822" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of adamantite - needs feathers for flight.", + "grand_exchange_price": "212", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Adamant dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "823" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of runite - needs feathers for flight.", + "grand_exchange_price": "498", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Rune dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "824" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "6", + "name": "Bronze javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "825", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "2", + "name": "Iron javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "826", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "19", + "name": "Steel javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "827", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "25", + "name": "Mithril javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "828", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "shop_price": "100", + "ge_buy_limit": "1000", + "examine": "An adamant tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "51", + "name": "Adamant javelin", + "tradeable": "true", + "archery_ticket_price": "100", + "id": "829", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "requirements": "{4,40}", + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "186", + "name": "Rune javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "830", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "19", + "name": "Bronze javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "831", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "19", + "name": "Iron javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "832", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "34", + "name": "Steel javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "833", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "44", + "name": "Mithril javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "834", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "shop_price": "100", + "ge_buy_limit": "1000", + "examine": "An adamant tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "88", + "name": "Adamant javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "835", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "requirements": "{4,40}", + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "256", + "name": "Rune javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "836", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "This fires crossbow bolts.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "276", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "837", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0", + "shop_price": "70", + "durability": null, + "weight": "8", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Crossbow" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "276", + "durability": null, + "name": "Crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "838" + }, + { + "ge_buy_limit": "5000", + "turn90cw_anim": "821", + "examine": "A nice sturdy bow.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "55", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "839", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,0", + "shop_price": "80", + "durability": null, + "weight": "1.8", + "weapon_interface": "16", + "render_anim": "1", + "attack_audios": "2700,0,0,0", + "name": "Longbow" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "55", + "durability": null, + "name": "Longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "840" + }, + { + "ge_buy_limit": "5000", + "turn90cw_anim": "821", + "examine": "A shortbow made of wood.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "79", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "841", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,0", + "shop_price": "50", + "durability": null, + "weight": "1.33", + "weapon_interface": "16", + "render_anim": "1", + "attack_audios": "2700,0,0,0", + "name": "Shortbow" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "79", + "durability": null, + "name": "Shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "842" + }, + { + "requirements": "{4,5}", + "shop_price": "164", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of oak, still effective.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "54", + "attack_audios": "2700,0,0,0", + "name": "Oak shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "843", + "bonuses": "0,0,0,0,14,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "54", + "durability": null, + "name": "Oak shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "844" + }, + { + "requirements": "{4,5}", + "shop_price": "160", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of oak.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "132", + "attack_audios": "2700,0,0,0", + "name": "Oak longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "845", + "bonuses": "0,0,0,0,14,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "132", + "durability": null, + "name": "Oak longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "846" + }, + { + "requirements": "{4,20}", + "shop_price": "320", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of willow.", + "durability": null, + "weight": "1.5", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "132", + "attack_audios": "2700,0,0,0", + "name": "Willow longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "847", + "bonuses": "0,0,0,0,20,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "132", + "durability": null, + "name": "Willow longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "848" + }, + { + "requirements": "{4,20}", + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of willow, still effective.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "106", + "attack_audios": "2700,0,0,0", + "name": "Willow shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "849", + "bonuses": "0,0,0,0,20,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "106", + "durability": null, + "name": "Willow shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "850" + }, + { + "requirements": "{4,30}", + "shop_price": "640", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of maple.", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "320", + "attack_audios": "2700,0,0,0", + "name": "Maple longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "851", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "320", + "durability": null, + "name": "Maple longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "852" + }, + { + "requirements": "{4,30}", + "shop_price": "400", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of maple, still effective.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "290", + "attack_audios": "2700,0,0,0", + "name": "Maple shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "853", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "290", + "durability": null, + "name": "Maple shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "854" + }, + { + "requirements": "{4,40}", + "shop_price": "674", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of yew.", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "706", + "attack_audios": "2700,0,0,0", + "name": "Yew longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "855", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "706", + "durability": null, + "name": "Yew longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "856" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of yew, still effective.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "422", + "attack_audios": "2700,0,0,0", + "name": "Yew shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "857", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "422", + "durability": null, + "name": "Yew shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "858" + }, + { + "requirements": "{4,50}", + "shop_price": "1270", + "ge_buy_limit": "5000", + "examine": "A nice sturdy magical bow.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "1437", + "attack_audios": "2700,0,0,0", + "name": "Magic longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "859", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1437", + "durability": null, + "name": "Magic longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "860" + }, + { + "requirements": "{4,50}", + "shop_price": "5600", + "ge_buy_limit": "5000", + "examine": "Short and magical, but still effective.", + "has_special": "true", + "durability": null, + "weight": "1.3", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "959", + "attack_audios": "2700,0,0,0", + "name": "Magic shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "861", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "959", + "durability": null, + "name": "Magic shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "862" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "87", + "attack_audios": "2704,0,0,0", + "name": "Iron knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "863", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "73", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "864", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "136", + "attack_audios": "2704,0,0,0", + "name": "Steel knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "865", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "201", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "866", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "421", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "867", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1132", + "attack_audios": "2704,0,0,0", + "name": "Rune knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "868", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "95", + "attack_audios": "2704,0,0,0", + "name": "Black knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "869", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "73", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "870", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "88", + "attack_audios": "2704,0,0,0", + "name": "Iron knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "871", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "124", + "attack_audios": "2704,0,0,0", + "name": "Steel knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "872", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "226", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "873", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "69", + "attack_audios": "2704,0,0,0", + "name": "Black knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "874", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "503", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "875", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1374", + "attack_audios": "2704,0,0,0", + "name": "Rune knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "876", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "877", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "38", + "durability": null, + "name": "Bronze bolts(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "878", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "25000", + "examine": "Opal tipped bronze crossbow bolts", + "grand_exchange_price": "5", + "durability": null, + "name": "Opal bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "879", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,14", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "ge_buy_limit": "25000", + "examine": "Pearl tipped Iron crossbow bolts.", + "grand_exchange_price": "32", + "durability": null, + "name": "Pearl bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "880", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,48", + "equipment_slot": "13" + }, + { + "shop_price": "80", + "ge_buy_limit": "10000", + "examine": "Great if you have a crossbow!", + "grand_exchange_price": "42", + "durability": null, + "name": "Barbed bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "881", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,12", + "equipment_slot": "13" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "10", + "durability": null, + "name": "Bronze arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "882", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "39", + "durability": null, + "name": "Bronze arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "883", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "10", + "durability": null, + "name": "Iron arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "884", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "41", + "durability": null, + "name": "Iron arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "885", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "25", + "durability": null, + "name": "Steel arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "886", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "69", + "durability": null, + "name": "Steel arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "887", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "30", + "durability": null, + "name": "Mithril arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "888", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "69", + "durability": null, + "name": "Mithril arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "889", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "111", + "durability": null, + "name": "Adamant arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "890", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "109", + "durability": null, + "name": "Adamant arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "891", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "212", + "durability": null, + "name": "Rune arrow", + "tradeable": "true", + "archery_ticket_price": "40", + "id": "892", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "257", + "durability": null, + "name": "Rune arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "893", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with bronze heads and oil-soaked cloth. lit: An easy to make, bronze-headed fire arrow.", + "grand_exchange_price": "228", + "durability": null, + "name": "Bronze fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "942", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "0", + "examine": "Ugh! It's wriggling!", + "durability": null, + "name": "Worm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "943" + }, + { + "durability": null, + "name": "Worm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "944" + }, + { + "durability": null, + "name": "Throwing rope", + "archery_ticket_price": "0", + "id": "945", + "equipment_slot": "3" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "A dangerous looking knife.", + "grand_exchange_price": "32", + "durability": null, + "name": "Knife", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "946" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "32", + "durability": null, + "name": "Knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "947" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "This would make warm clothing.", + "grand_exchange_price": "9", + "durability": null, + "name": "Bear fur", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "948" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9", + "durability": null, + "name": "Bear fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "949" + }, + { + "shop_price": "21", + "ge_buy_limit": "100", + "examine": "It's a sheet of silk.", + "grand_exchange_price": "27", + "durability": null, + "name": "Silk", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "950" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27", + "durability": null, + "name": "Silk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "951" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A slightly muddy spade. / Popular with farmers and treasure hunters.", + "grand_exchange_price": "117", + "durability": null, + "name": "Spade", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "952" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "117", + "durability": null, + "name": "Spade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "953" + }, + { + "shop_price": "18", + "ge_buy_limit": "100", + "examine": "A coil of rope.", + "grand_exchange_price": "96", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "954" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "96", + "durability": null, + "name": "Rope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "955" + }, + { + "examine": "Get your axes from Bob's Axes.", + "durability": null, + "name": "Flier", + "archery_ticket_price": "0", + "id": "956" + }, + { + "shop_price": "70", + "ge_buy_limit": "100", + "examine": "This would make warm clothing.", + "grand_exchange_price": "34", + "durability": null, + "name": "Grey wolf fur", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "958" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34", + "durability": null, + "name": "Grey wolf fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "959" + }, + { + "shop_price": "100", + "ge_buy_limit": "10000", + "examine": "A plank of wood!", + "grand_exchange_price": "234", + "durability": null, + "name": "Plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "960" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "234", + "durability": null, + "name": "Plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "961" + }, + { + "ge_buy_limit": "2", + "examine": "I need to pull this.", + "grand_exchange_price": "15", + "durability": null, + "name": "Christmas cracker", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "962" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1900000000", + "durability": null, + "name": "Christmas cracker", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "963" + }, + { + "examine": "A fraction of a roof.", + "durability": null, + "name": "Tile", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "966" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "Used for making notes.", + "grand_exchange_price": "153", + "durability": null, + "name": "Papyrus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "970" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "153", + "durability": null, + "name": "Papyrus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "971" + }, + { + "shop_price": "15", + "examine": "Used for making notes.", + "grand_exchange_price": "163", + "durability": null, + "name": "Papyrus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "972" + }, + { + "shop_price": "45", + "ge_buy_limit": "100", + "examine": "A lump of charcoal.", + "grand_exchange_price": "272", + "durability": null, + "name": "Charcoal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "973" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "272", + "durability": null, + "name": "Charcoal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "974" + }, + { + "shop_price": "52", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "grand_exchange_price": "619", + "name": "Machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "975", + "bonuses": "0,6,-2,0,0,0,0,0,0,0,0,5,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "619", + "durability": null, + "name": "Machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "976" + }, + { + "durability": null, + "name": "Cooking pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "978" + }, + { + "shop_price": "10", + "ge_buy_limit": "2", + "examine": "Used to get out of Thordur's blackhole.", + "grand_exchange_price": "298000000", + "durability": null, + "name": "Disk of returning", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "981" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "298000000", + "durability": null, + "name": "Disk of returning", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "982" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "A key found on the floor of Edgeville Dungeon.", + "grand_exchange_price": "547", + "durability": null, + "name": "Brass key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "983" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "547", + "durability": null, + "name": "Brass key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "984" + }, + { + "ge_buy_limit": "100", + "examine": "The tooth end of the mysterious Crystal key. Can you find the other half?", + "grand_exchange_price": "24900", + "durability": null, + "name": "Tooth half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "985" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24900", + "durability": null, + "name": "Tooth half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "986" + }, + { + "ge_buy_limit": "100", + "examine": "The loop end of the mysterious Crystal key. Can you find the other half?", + "grand_exchange_price": "21100", + "durability": null, + "name": "Loop half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "987" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21100", + "durability": null, + "name": "Loop half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "988" + }, + { + "ge_buy_limit": "100", + "examine": "A mysterious key for a mysterious chest.", + "grand_exchange_price": "48700", + "durability": null, + "name": "Crystal key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "989" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48700", + "durability": null, + "name": "Crystal key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "990" + }, + { + "ge_buy_limit": "100", + "examine": "It looks like the key to a chest", + "grand_exchange_price": "4971", + "durability": null, + "name": "Muddy key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "991" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4971", + "durability": null, + "name": "Muddy key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "992" + }, + { + "ge_buy_limit": "100", + "examine": "You get a sense of dread from this key.", + "grand_exchange_price": "54600", + "durability": null, + "name": "Sinister key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "993" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "54600", + "durability": null, + "name": "Sinister key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "994" + }, + { + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "995" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A mostly clean apron.", + "grand_exchange_price": "93", + "durability": null, + "name": "White apron", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "1005", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "White apron", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1006" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A bright red cape.", + "grand_exchange_price": "187", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1007", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1008" + }, + { + "ge_buy_limit": "100", + "examine": "I'd prefer a gold one.", + "grand_exchange_price": "65", + "durability": null, + "name": "Brass necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1009", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65", + "durability": null, + "name": "Brass necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1010" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "Leg covering favored by women and wizards.", + "grand_exchange_price": "208", + "durability": null, + "name": "Blue skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1011", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "208", + "durability": null, + "name": "Blue skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1012" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A ladies skirt.", + "grand_exchange_price": "216", + "durability": null, + "name": "Pink skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1013", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "216", + "durability": null, + "name": "Pink skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1014" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "Clothing favoured by women and dark wizards.", + "grand_exchange_price": "30", + "durability": null, + "name": "Black skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1015", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Black skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1016" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "grand_exchange_price": "280", + "durability": null, + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "1017", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "280", + "durability": null, + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1018" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A warm black cape.", + "grand_exchange_price": "209", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1019", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "209", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1020" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick blue cape.", + "grand_exchange_price": "504", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1021", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "504", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1022" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick yellow cape.", + "grand_exchange_price": "439", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1023", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "439", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1024" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A black piece of cloth on a string.", + "grand_exchange_price": "111", + "durability": null, + "name": "Eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1025", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "durability": null, + "name": "Eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1026" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick green cape.", + "grand_exchange_price": "1061", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1027", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1061", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1028" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick purple cape.", + "grand_exchange_price": "955", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1029", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "955", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1030" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick orange cape.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "1", + "grand_exchange_price": "1656", + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1031", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1656", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1032" + }, + { + "shop_price": "30", + "ge_buy_limit": "2", + "examine": "A robe worn by worshippers of Zamorak.", + "grand_exchange_price": "2481", + "durability": null, + "name": "Zamorak robe", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1033", + "bonuses": "0,0,0,2,0,0,0,0,3,0,0,0,3,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2481", + "durability": null, + "name": "Zamorak robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1034" + }, + { + "shop_price": "40", + "ge_buy_limit": "2", + "examine": "A robe worn by worshippers of Zamorak.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1259", + "name": "Zamorak robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1035", + "bonuses": "0,0,0,2,0,0,0,0,3,0,3,0,3,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1259", + "durability": null, + "name": "Zamorak robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1036" + }, + { + "destroy_message": "You can get a replacement from Diango.", + "shop_price": "1", + "examine": "A rabbit-like adornment.", + "durability": null, + "name": "Bunny ears", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1037", + "equipment_slot": "0" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Red partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1038", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1500000000", + "durability": null, + "name": "Red partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1039" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Yellow partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1040", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000000", + "durability": null, + "name": "Yellow partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1041" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Blue partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1042", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2100000000", + "durability": null, + "name": "Blue partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1043" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Green partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1044", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1300000000", + "durability": null, + "name": "Green partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1045" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Purple partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1046", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1000000000", + "durability": null, + "name": "Purple partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1047" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "White partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1048", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2000000000", + "durability": null, + "name": "White partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1049" + }, + { + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "It's a Santa hat.", + "durability": null, + "weight": "0.1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5", + "name": "Santa hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "1050" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "112600000", + "durability": null, + "name": "Santa hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1051" + }, + { + "shop_price": "450", + "examine": "The cape worn by members of the Legends Guild.", + "durability": null, + "name": "Cape of legends", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "1052", + "bonuses": "0,0,0,0,0,7,7,7,7,7,7,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "shop_price": "15", + "ge_buy_limit": "2", + "examine": "Aaaarrrghhh ... I'm a monster.", + "durability": null, + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "98000000", + "name": "Green h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1053" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "98000000", + "durability": null, + "name": "Green h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1054" + }, + { + "remove_head": "true", + "shop_price": "15", + "ge_buy_limit": "2", + "examine": "Aaaarrrghhh ... I'm a monster.", + "durability": null, + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "115900000", + "name": "Blue h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1055" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "115900000", + "durability": null, + "name": "Blue h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1056" + }, + { + "remove_head": "true", + "shop_price": "15", + "ge_buy_limit": "2", + "examine": "Aaaarrrghhh ... I'm a monster.", + "durability": null, + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "154300000", + "name": "Red h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1057" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "154300000", + "durability": null, + "name": "Red h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1058" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "These will keep my hands warm!", + "grand_exchange_price": "12", + "durability": null, + "name": "Leather gloves", + "tradeable": "true", + "weight": "0.23", + "archery_ticket_price": "0", + "id": "1059", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "12", + "durability": null, + "name": "Leather gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1060" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "Comfortable leather boots.", + "grand_exchange_price": "144", + "durability": null, + "name": "Leather boots", + "tradeable": "true", + "weight": "0.34", + "archery_ticket_price": "0", + "id": "1061", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "144", + "durability": null, + "name": "Leather boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1062" + }, + { + "shop_price": "18", + "ge_buy_limit": "5000", + "examine": "Better than no armour!", + "grand_exchange_price": "13", + "durability": null, + "name": "Leather vambraces", + "tradeable": "true", + "weight": "0.22", + "archery_ticket_price": "0", + "id": "1063", + "bonuses": "0,0,0,0,4,2,2,1,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13", + "durability": null, + "name": "Leather vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1064" + }, + { + "requirements": "{4,40}", + "shop_price": "2500", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "0.28", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "1407", + "name": "Green d'hide vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1065", + "bonuses": "0,0,0,-10,8,3,2,4,2,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1407", + "durability": null, + "name": "Green d'hide vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1066" + }, + { + "shop_price": "280", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "1,0,1", + "equipment_slot": "7", + "grand_exchange_price": "55", + "name": "Iron platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1067", + "bonuses": "0,0,0,-21,-7,11,10,10,-4,10,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "55", + "durability": null, + "name": "Iron platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1068" + }, + { + "requirements": "{1,5}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "1,0,1", + "equipment_slot": "7", + "grand_exchange_price": "426", + "name": "Steel platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1069", + "bonuses": "0,0,0,-21,-7,17,16,15,-4,16,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "426", + "durability": null, + "name": "Steel platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1070" + }, + { + "requirements": "{1,20}", + "shop_price": "2600", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "7.7", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "1391", + "name": "Mithril platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1071", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1391", + "durability": null, + "name": "Mithril platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1072" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "10", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "3649", + "name": "Adamant platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1073", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3649", + "durability": null, + "name": "Adamant platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1074" + }, + { + "shop_price": "80", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "grand_exchange_price": "34", + "durability": null, + "name": "Bronze platelegs", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "1075", + "bonuses": "0,0,0,-21,-7,8,7,6,-4,7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34", + "durability": null, + "name": "Bronze platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1076" + }, + { + "requirements": "{1,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "These look pretty heavy", + "durability": null, + "weight": "9", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "4995", + "name": "Black platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1077", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4995", + "durability": null, + "name": "Black platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1078" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "38500", + "name": "Rune platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1079", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38500", + "durability": null, + "name": "Rune platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1080" + }, + { + "shop_price": "280", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "grand_exchange_price": "86", + "durability": null, + "name": "Iron plateskirt", + "tradeable": "true", + "weight": "8.1", + "archery_ticket_price": "0", + "id": "1081", + "bonuses": "0,0,0,-21,-7,11,10,10,-4,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "86", + "durability": null, + "name": "Iron plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1082" + }, + { + "requirements": "{1,5}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "8.1", + "equipment_slot": "7", + "grand_exchange_price": "514", + "name": "Steel plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1083", + "bonuses": "0,0,0,-21,-7,17,16,15,-4,16,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "514", + "durability": null, + "name": "Steel plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1084" + }, + { + "requirements": "{1,20}", + "shop_price": "2600", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "7.2", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "1339", + "name": "Mithril plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1085", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1339", + "durability": null, + "name": "Mithril plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1086" + }, + { + "shop_price": "80", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "grand_exchange_price": "113", + "durability": null, + "name": "Bronze plateskirt", + "tradeable": "true", + "weight": "8.1", + "archery_ticket_price": "0", + "id": "1087", + "bonuses": "0,0,0,-21,-7,8,7,6,-4,7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "113", + "durability": null, + "name": "Bronze plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1088" + }, + { + "requirements": "{1,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "8", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "2180", + "name": "Black plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1089", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2180", + "durability": null, + "name": "Black plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1090" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "3610", + "name": "Adamant plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1091", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3610", + "durability": null, + "name": "Adamant plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1092" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "8", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "38100", + "name": "Rune plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1093", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38100", + "durability": null, + "name": "Rune plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1094" + }, + { + "shop_price": "23", + "ge_buy_limit": "5000", + "examine": "Better than no armour!", + "grand_exchange_price": "5", + "durability": null, + "name": "Leather chaps", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1095", + "bonuses": "0,0,0,0,4,2,2,1,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5", + "durability": null, + "name": "Leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1096" + }, + { + "requirements": "{4,20}", + "shop_price": "750", + "ge_buy_limit": "1000", + "examine": "Those studs should provide a bit more protection.", + "durability": null, + "weight": "4.5", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "377", + "name": "Studded chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1097", + "bonuses": "0,0,0,-5,6,15,16,17,6,16,5,0,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "377", + "durability": null, + "name": "Studded chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1098" + }, + { + "requirements": "{4,40}", + "shop_price": "3900", + "ge_buy_limit": "5000", + "examine": "100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,4,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2228", + "name": "Green d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1099", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2228", + "durability": null, + "name": "Green d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1100" + }, + { + "shop_price": "210", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "76", + "durability": null, + "name": "Iron chainbody", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "1101", + "bonuses": "0,0,0,-15,0,10,15,19,-3,12,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "76", + "durability": null, + "name": "Iron chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1102" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "37", + "durability": null, + "name": "Bronze chainbody", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "1103", + "bonuses": "0,0,0,-15,0,7,11,13,-3,9,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "37", + "durability": null, + "name": "Bronze chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1104" + }, + { + "requirements": "{1,5}", + "shop_price": "750", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6", + "equipment_slot": "4", + "grand_exchange_price": "265", + "name": "Steel chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1105", + "bonuses": "0,0,0,-15,0,17,25,30,-3,19,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "265", + "durability": null, + "name": "Steel chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1106" + }, + { + "requirements": "{1,10}", + "shop_price": "1440", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6.8", + "absorb": "1,0,2", + "equipment_slot": "4", + "grand_exchange_price": "961", + "name": "Black chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1107", + "bonuses": "0,0,0,-15,0,22,32,39,-3,24,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "961", + "durability": null, + "name": "Black chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1108" + }, + { + "requirements": "{1,20}", + "shop_price": "1950", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "5.8", + "absorb": "1,0,3", + "equipment_slot": "4", + "grand_exchange_price": "963", + "name": "Mithril chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1109", + "bonuses": "0,0,0,-15,0,25,35,42,-3,27,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "963", + "durability": null, + "name": "Mithril chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1110" + }, + { + "requirements": "{1,30}", + "shop_price": "4800", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "7.7", + "absorb": "2,0,4", + "equipment_slot": "4", + "grand_exchange_price": "2731", + "name": "Adamant chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1111", + "bonuses": "0,0,0,-15,0,36,50,61,-3,38,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2731", + "durability": null, + "name": "Adamant chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1112" + }, + { + "requirements": "{1,40}", + "shop_price": "50000", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6.8", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "29800", + "name": "Rune chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1113", + "bonuses": "0,0,0,-15,0,63,72,78,-3,65,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29800", + "durability": null, + "name": "Rune chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1114" + }, + { + "shop_price": "560", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.95", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "434", + "name": "Iron platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1115", + "bonuses": "0,0,0,-30,-10,21,20,12,-6,20,5,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "434", + "durability": null, + "name": "Iron platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1116" + }, + { + "shop_price": "160", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.5", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "36", + "name": "Bronze platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1117", + "bonuses": "0,0,0,-30,-10,15,14,9,-6,14,5,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "36", + "durability": null, + "name": "Bronze platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1118" + }, + { + "requirements": "{1,5}", + "shop_price": "2000", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1077", + "name": "Steel platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1119", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1077", + "durability": null, + "name": "Steel platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1120" + }, + { + "requirements": "{1,20}", + "shop_price": "5200", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "8.6", + "absorb": "1,0,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "2965", + "name": "Mithril platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1121", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,20,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "2965", + "durability": null, + "name": "Mithril platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1122" + }, + { + "requirements": "{1,30}", + "shop_price": "16256", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "11", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "9790", + "name": "Adamant platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1123", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "9790", + "durability": null, + "name": "Adamant platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1124" + }, + { + "requirements": "{1,10}", + "shop_price": "3840", + "ge_buy_limit": "500", + "examine": "Provides Excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "4915", + "name": "Black platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1125", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "4915", + "durability": null, + "name": "Black platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1126" + }, + { + "requirements": "{1,40}", + "shop_price": "65000", + "ge_buy_limit": "100", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "38800", + "name": "Rune platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1127", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38800", + "durability": null, + "name": "Rune platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1128" + }, + { + "shop_price": "20", + "ge_buy_limit": "1000", + "examine": "Better than no armour!", + "grand_exchange_price": "34", + "durability": null, + "name": "Leather body", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "1129", + "bonuses": "0,0,0,-2,2,8,9,10,4,9,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "34", + "durability": null, + "name": "Leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1130" + }, + { + "requirements": "{1,10}", + "shop_price": "170", + "ge_buy_limit": "1000", + "examine": "Harder than normal leather.", + "durability": null, + "weight": "3.6", + "absorb": "0,2,1", + "equipment_slot": "4", + "grand_exchange_price": "43", + "name": "Hardleather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1131", + "bonuses": "0,0,0,-4,8,12,15,18,6,15,10,0,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "43", + "durability": null, + "name": "Hardleather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1132" + }, + { + "requirements": "{1,20}-{4,20}", + "shop_price": "850", + "ge_buy_limit": "1000", + "examine": "These studs should provide a bit more protection.", + "durability": null, + "weight": "5", + "absorb": "0,3,1", + "equipment_slot": "4", + "grand_exchange_price": "414", + "name": "Studded body", + "tradeable": "true", + "archery_ticket_price": "150", + "id": "1133", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "414", + "durability": null, + "name": "Studded body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1134" + }, + { + "requirements": "{1,40}-{4,40}", + "shop_price": "7800", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "4544", + "name": "Green d'hide body", + "tradeable": "true", + "archery_ticket_price": "2400", + "id": "1135", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4544", + "durability": null, + "name": "Green d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1136" + }, + { + "remove_head": "true", + "shop_price": "84", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "22", + "name": "Iron med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1137", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22", + "durability": null, + "name": "Iron med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1138" + }, + { + "remove_head": "true", + "shop_price": "24", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "39", + "name": "Bronze med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1139", + "bonuses": "0,0,0,-3,-1,3,4,2,-1,3,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "39", + "durability": null, + "name": "Bronze med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1140" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "52", + "name": "Steel med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1141", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "52", + "durability": null, + "name": "Steel med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1142" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.3", + "equipment_slot": "0", + "grand_exchange_price": "272", + "name": "Mithril med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1143", + "bonuses": "0,0,0,-3,-1,10,11,9,-1,10,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "272", + "durability": null, + "name": "Mithril med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1144" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "1024", + "name": "Adamant med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1145", + "bonuses": "0,0,0,-3,-1,14,15,13,-1,14,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1024", + "durability": null, + "name": "Adamant med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1146" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "19200", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "11400", + "name": "Rune med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1147", + "bonuses": "0,0,0,-3,-1,22,23,21,-1,22,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11400", + "durability": null, + "name": "Rune med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1148" + }, + { + "remove_head": "true", + "requirements": "{1,60}", + "ge_buy_limit": "100", + "examine": "Makes the wearer pretty intimidating.", + "durability": null, + "weight": "1.3", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "60500", + "name": "Dragon med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1149", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60500", + "durability": null, + "name": "Dragon med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1150" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "shop_price": "530", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "242", + "name": "Black med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1151", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "242", + "durability": null, + "name": "Black med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1152" + }, + { + "remove_head": "true", + "shop_price": "61", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "56", + "name": "Iron full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1153", + "bonuses": "0,0,0,-6,-2,6,7,5,-1,6,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Iron full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1154" + }, + { + "remove_head": "true", + "shop_price": "44", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "67", + "name": "Bronze full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1155", + "bonuses": "0,0,0,-6,-2,4,5,3,-1,4,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "67", + "durability": null, + "name": "Bronze full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1156" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "550", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "195", + "name": "Steel full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1157", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Steel full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1158" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "1430", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "675", + "name": "Mithril full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1159", + "bonuses": "0,0,0,-6,-2,13,14,11,-1,13,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "675", + "durability": null, + "name": "Mithril full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1160" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "shop_price": "3520", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "1911", + "name": "Adamant full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1161", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1911", + "durability": null, + "name": "Adamant full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1162" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "20900", + "name": "Rune full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1163", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20900", + "durability": null, + "name": "Rune full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1164" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "shop_price": "1372", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "731", + "name": "Black full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1165", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "731", + "durability": null, + "name": "Black full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1166" + }, + { + "remove_head": "true", + "shop_price": "24", + "ge_buy_limit": "5000", + "examine": "Better than no armour!", + "durability": null, + "weight": "0.9", + "equipment_slot": "0", + "grand_exchange_price": "9", + "name": "Leather cowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1167", + "bonuses": "0,0,0,0,1,2,3,4,2,3,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "9", + "durability": null, + "name": "Leather cowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1168" + }, + { + "remove_head": "true", + "requirements": "{4,20}", + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "Light weight head protection.", + "durability": null, + "weight": "0.9", + "equipment_slot": "0", + "grand_exchange_price": "56", + "name": "Coif", + "tradeable": "true", + "archery_ticket_price": "100", + "id": "1169", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,5,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "56", + "durability": null, + "name": "Coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1170" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A solid wooden shield.", + "grand_exchange_price": "483", + "durability": null, + "name": "Wooden shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1171", + "bonuses": "0,0,0,0,0,4,5,3,1,4,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "483", + "durability": null, + "name": "Wooden shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1172" + }, + { + "shop_price": "48", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze sq shield", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1173", + "bonuses": "0,0,0,-6,-2,5,6,4,0,5,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1174" + }, + { + "shop_price": "168", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "grand_exchange_price": "39", + "durability": null, + "name": "Iron sq shield", + "tradeable": "true", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "1175", + "bonuses": "0,0,0,-6,-2,8,9,7,0,8,1,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "39", + "durability": null, + "name": "Iron sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1176" + }, + { + "requirements": "{1,5}", + "shop_price": "600", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3", + "equipment_slot": "5", + "grand_exchange_price": "185", + "name": "Steel sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1177", + "bonuses": "0,0,0,-6,-2,12,13,11,0,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "185", + "durability": null, + "name": "Steel sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1178" + }, + { + "requirements": "{1,10}", + "shop_price": "1463", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "511", + "name": "Black sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1179", + "bonuses": "0,0,0,-6,-2,15,16,14,0,15,9,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "511", + "durability": null, + "name": "Black sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1180" + }, + { + "requirements": "{1,20}", + "shop_price": "1560", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3.1", + "absorb": "2,0,4", + "equipment_slot": "5", + "grand_exchange_price": "744", + "name": "Mithril sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1181", + "bonuses": "0,0,0,-6,-2,17,19,15,0,17,18,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "744", + "durability": null, + "name": "Mithril sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1182" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2136", + "name": "Adamant sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1183", + "bonuses": "0,0,0,-6,-2,24,26,22,0,24,25,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2136", + "durability": null, + "name": "Adamant sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1184" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3.64", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "22800", + "name": "Rune sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1185", + "bonuses": "0,0,0,-6,-2,38,40,36,0,38,35,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22800", + "durability": null, + "name": "Rune sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1186" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "An ancient and powerful looking Dragon Square shield.", + "durability": null, + "weight": "3", + "absorb": "5,0,11", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "431900", + "name": "Dragon sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1187", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "431900", + "durability": null, + "name": "Dragon sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1188" + }, + { + "shop_price": "86", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "grand_exchange_price": "18", + "durability": null, + "name": "Bronze kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "1189", + "bonuses": "0,0,0,-8,-2,5,7,6,-1,6,1,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Bronze kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1190" + }, + { + "shop_price": "233", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "grand_exchange_price": "57", + "durability": null, + "name": "Iron kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "1191", + "bonuses": "0,0,0,-8,-2,8,10,9,-1,9,2,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57", + "durability": null, + "name": "Iron kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1192" + }, + { + "requirements": "{1,5}", + "shop_price": "850", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "equipment_slot": "5", + "grand_exchange_price": "354", + "name": "Steel kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1193", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "354", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1194" + }, + { + "requirements": "{1,10}", + "shop_price": "2121", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "3311", + "name": "Black kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1195", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3311", + "durability": null, + "name": "Black kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1196" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "4.5", + "absorb": "2,0,4", + "equipment_slot": "5", + "grand_exchange_price": "1128", + "name": "Mithril kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1197", + "bonuses": "0,0,0,-8,-2,18,22,20,-1,20,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1128", + "durability": null, + "name": "Mithril kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1198" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.8", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3066", + "name": "Adamant kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1199", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3066", + "durability": null, + "name": "Adamant kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1200" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "35600", + "name": "Rune kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1201", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35600", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1202" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "35", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1203", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35", + "durability": null, + "name": "Iron dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1204" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "105", + "attack_audios": "2517,2517,2500,2517", + "name": "Bronze dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1205", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "105", + "durability": null, + "name": "Bronze dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1206" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "17", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1207", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Steel dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1208" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "71", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1209", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "71", + "durability": null, + "name": "Mithril dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1210" + }, + { + "requirements": "{0,30}", + "shop_price": "816", + "ge_buy_limit": "100", + "examine": "Short and deadly.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "300", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1211", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "300", + "durability": null, + "name": "Adamant dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1212" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "lendable": "true", + "grand_exchange_price": "4642", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1213", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4642", + "durability": null, + "name": "Rune dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1214" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "17700", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1215", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "17700", + "durability": null, + "name": "Dragon dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1216" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "79", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1217", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "79", + "durability": null, + "name": "Black dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1218" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "56", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1219", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Iron dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1220" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "86", + "attack_audios": "2517,2517,2500,2517", + "name": "Bronze dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1221", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "86", + "durability": null, + "name": "Bronze dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1222" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "98", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1223", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98", + "durability": null, + "name": "Steel dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1224" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "129", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1225", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "129", + "durability": null, + "name": "Mithril dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1226" + }, + { + "requirements": "{0,30}", + "shop_price": "816", + "ge_buy_limit": "100", + "examine": "Short and deadly.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "365", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1227", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "365", + "durability": null, + "name": "Adamant dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1228" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "lendable": "true", + "grand_exchange_price": "4831", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1229", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4831", + "durability": null, + "name": "Rune dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1230" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "17600", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1231", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "17600", + "durability": null, + "name": "Dragon dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1232" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "67", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1233", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "67", + "durability": null, + "name": "Black dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1234" + }, + { + "durability": null, + "name": "Poisoned dagger(p)", + "archery_ticket_price": "0", + "id": "1235", + "render_anim": "2584" + }, + { + "durability": null, + "name": "Poisoned dagger(p)", + "archery_ticket_price": "0", + "id": "1236" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "858", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1237", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0", + "shop_price": "26", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Bronze spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "858", + "durability": null, + "name": "Bronze spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1238" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "209", + "stand_anim": "813", + "tradeable": "true", + "name": "Iron spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1239", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "209", + "durability": null, + "name": "Iron spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1240" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "340", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1241", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0", + "requirements": "{0,5}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Steel spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "340", + "durability": null, + "name": "Steel spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1242" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "353", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1243", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0", + "requirements": "{0,20}", + "durability": null, + "weight": "1.8", + "weapon_interface": "14", + "render_anim": "28", + "name": "Mithril spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "353", + "durability": null, + "name": "Mithril spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1244" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "1191", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1245", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0", + "requirements": "{0,30}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Adamant spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "durability": null, + "name": "Adamant spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1246" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "12200", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1247", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0", + "requirements": "{0,40}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Rune spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12200", + "durability": null, + "name": "Rune spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1248" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "37200", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1249", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "37200", + "durability": null, + "name": "Dragon spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1250", + "defence_anim": "2079" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "389", + "stand_anim": "813", + "tradeable": "true", + "name": "Bronze spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1251", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "389", + "durability": null, + "name": "Bronze spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1252" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "212", + "stand_anim": "813", + "tradeable": "true", + "name": "Iron spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1253", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "212", + "durability": null, + "name": "Iron spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1254" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "136", + "stand_anim": "813", + "tradeable": "true", + "name": "Steel spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1255", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "136", + "durability": null, + "name": "Steel spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1256" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "350", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1257", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0", + "requirements": "{0,20}", + "durability": null, + "weight": "1.8", + "weapon_interface": "14", + "render_anim": "28", + "name": "Mithril spear(p)" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "350", + "durability": null, + "name": "Mithril spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1258" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "1004", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1259", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0", + "requirements": "{0,30}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Adamant spear(p)" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1004", + "durability": null, + "name": "Adamant spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1260" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "12400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1261", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0", + "requirements": "{0,40}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Rune spear(p)" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12400", + "durability": null, + "name": "Rune spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1262" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "39700", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1263", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear(p)" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "39700", + "durability": null, + "name": "Dragon spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1264" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.25", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "17", + "attack_audios": "2508,2508,2508,2508", + "name": "Bronze pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1265", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Bronze pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1266" + }, + { + "shop_price": "140", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.25", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "200", + "attack_audios": "2508,2508,2508,2508", + "name": "Iron pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1267", + "bonuses": "5,-2,3,0,0,0,1,0,0,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "200", + "durability": null, + "name": "Iron pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1268" + }, + { + "requirements": "{0,5}", + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.25", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "571", + "attack_audios": "2508,2508,2508,2508", + "name": "Steel pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1269", + "bonuses": "8,-2,6,0,0,0,1,0,0,0,0,9,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "571", + "durability": null, + "name": "Steel pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1270" + }, + { + "requirements": "{0,30}-{14,31}", + "shop_price": "3200", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.7", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "1782", + "attack_audios": "2508,2508,2508,2508", + "name": "Adamant pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1271", + "bonuses": "17,-2,15,0,0,0,1,0,0,0,0,19,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1782", + "durability": null, + "name": "Adamant pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1272" + }, + { + "requirements": "{0,20}", + "shop_price": "1300", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "611", + "attack_audios": "2508,2508,2508,2508", + "name": "Mithril pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1273", + "bonuses": "12,-2,10,0,0,0,1,0,0,0,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "611", + "durability": null, + "name": "Mithril pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1274" + }, + { + "requirements": "{0,40}-{14,41}", + "shop_price": "32000", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.2", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "lendable": "true", + "grand_exchange_price": "19500", + "attack_audios": "2508,2508,2508,2508", + "name": "Rune pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1275", + "bonuses": "26,-2,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19500", + "durability": null, + "name": "Rune pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1276" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "13", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1277", + "stand_turn_anim": "823", + "bonuses": "4,3,-2,0,0,0,2,1,0,0,0,5,0,0,0", + "shop_price": "33", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Bronze sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Bronze sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1278" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "17", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1279", + "stand_turn_anim": "823", + "bonuses": "6,4,-2,0,0,0,2,1,0,0,0,7,0,0,0", + "shop_price": "91", + "durability": null, + "weight": "1.8", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Iron sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Iron sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1280" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "79", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1281", + "stand_turn_anim": "823", + "bonuses": "11,8,-2,0,0,0,2,1,0,0,0,12,0,0,0", + "requirements": "{0,5}", + "shop_price": "412", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Steel sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "79", + "durability": null, + "name": "Steel sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1282" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "197", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1283", + "stand_turn_anim": "823", + "bonuses": "14,10,-2,0,0,0,2,1,0,0,0,12,0,0,0", + "requirements": "{0,10}", + "shop_price": "624", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Black sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "197", + "durability": null, + "name": "Black sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1284" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "313", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1285", + "stand_turn_anim": "823", + "bonuses": "16,11,-2,0,0,0,2,1,0,0,0,17,0,0,0", + "requirements": "{0,20}", + "shop_price": "266", + "durability": null, + "weight": "1.5", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Mithril sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "313", + "durability": null, + "name": "Mithril sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1286" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "1046", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1287", + "stand_turn_anim": "823", + "bonuses": "23,18,-2,0,0,0,2,1,0,0,0,24,0,0,0", + "requirements": "{0,30}", + "shop_price": "2080", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Adamant sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1046", + "durability": null, + "name": "Adamant sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1288" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "12300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1289", + "stand_turn_anim": "823", + "bonuses": "38,26,-2,0,0,0,2,1,0,0,0,39,0,0,0", + "requirements": "{0,40}", + "shop_price": "20800", + "durability": null, + "weight": "1.8", + "weapon_interface": "5", + "render_anim": "1381", + "lendable": "true", + "attack_audios": "2500,2500,2517,2500", + "name": "Rune sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12300", + "durability": null, + "name": "Rune sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1290" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "14", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1291", + "stand_turn_anim": "823", + "bonuses": "4,5,-2,0,0,0,3,2,0,0,0,7,0,0,0", + "shop_price": "23", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Bronze longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Bronze longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1292" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "22", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1293", + "stand_turn_anim": "823", + "bonuses": "6,8,-2,0,0,0,3,2,0,0,0,10,0,0,0", + "shop_price": "177", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Iron longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22", + "durability": null, + "name": "Iron longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1294" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "147", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1295", + "stand_turn_anim": "823", + "bonuses": "9,14,-2,0,0,0,3,2,0,0,0,16,0,0,0", + "requirements": "{0,5}", + "shop_price": "500", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Steel longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Steel longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1296" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "384", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1297", + "stand_turn_anim": "823", + "bonuses": "13,18,-2,0,0,0,3,2,0,0,0,16,0,0,0", + "requirements": "{0,10}", + "shop_price": "960", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Black longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "durability": null, + "name": "Black longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1298" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "602", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1299", + "stand_turn_anim": "823", + "bonuses": "15,20,-2,0,0,0,3,2,0,0,0,22,0,0,0", + "requirements": "{0,20}", + "shop_price": "1074", + "durability": null, + "weight": "1.5", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Mithril longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "602", + "durability": null, + "name": "Mithril longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1300" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "1808", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1301", + "stand_turn_anim": "823", + "bonuses": "20,29,-2,0,0,0,3,2,0,0,0,31,0,0,0", + "requirements": "{0,30}", + "shop_price": "3200", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Adamant longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1808", + "durability": null, + "name": "Adamant longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1302" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "19000", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1303", + "stand_turn_anim": "823", + "bonuses": "38,47,-2,0,0,0,3,2,0,0,0,49,0,0,0", + "requirements": "{0,40}", + "shop_price": "32000", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "lendable": "true", + "attack_audios": "2500,2500,2517,2500", + "name": "Rune longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19000", + "durability": null, + "name": "Rune longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1304" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A very powerful sword.", + "walk_anim": "1146", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "60200", + "stand_anim": "809", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1305", + "stand_turn_anim": "823", + "bonuses": "58,69,-2,0,0,0,3,2,0,0,0,71,0,0,0", + "requirements": "{0,60}", + "shop_price": "100000", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1426", + "lendable": "true", + "attack_audios": "2500,2500,2517,2500", + "name": "Dragon longsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "60200", + "durability": null, + "name": "Dragon longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1306" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "89", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1307", + "stand_turn_anim": "7040", + "bonuses": "-4,9,8,-4,0,0,0,0,0,-1,0,10,0,0,0", + "shop_price": "160", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Bronze 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "89", + "durability": null, + "name": "Bronze 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1308" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "32", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1309", + "stand_turn_anim": "7040", + "bonuses": "-4,13,10,-4,0,0,0,0,0,-1,0,14,0,0,0", + "shop_price": "260", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Iron 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "32", + "durability": null, + "name": "Iron 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1310" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "411", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1311", + "stand_turn_anim": "7040", + "bonuses": "-4,21,16,-4,0,0,0,0,0,-1,0,22,0,0,0", + "requirements": "{0,5}", + "shop_price": "1000", + "durability": null, + "weight": "3", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Steel 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "411", + "durability": null, + "name": "Steel 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1312" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "1031", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1313", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,-4,0,0,0,0,0,-1,0,26,0,0,0", + "requirements": "{0,10}", + "shop_price": "2400", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Black 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1031", + "durability": null, + "name": "Black 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1314" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "1396", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1315", + "stand_turn_anim": "7040", + "bonuses": "-4,30,24,-4,0,0,0,0,0,-1,0,31,0,0,0", + "requirements": "{0,20}", + "shop_price": "3000", + "durability": null, + "weight": "3.1", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Mithril 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1396", + "durability": null, + "name": "Mithril 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1316" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "3577", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1317", + "stand_turn_anim": "7040", + "bonuses": "-4,43,30,-4,0,0,0,0,0,-1,0,44,0,0,0", + "requirements": "{0,30}", + "shop_price": "6400", + "durability": null, + "weight": "4", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Adamant 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3577", + "durability": null, + "name": "Adamant 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1318" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "38200", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1319", + "stand_turn_anim": "7040", + "bonuses": "-4,69,50,-4,0,0,0,0,0,-1,0,70,0,0,0", + "requirements": "{0,40}", + "shop_price": "40000", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "2503,0,2504,0", + "name": "Rune 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38200", + "durability": null, + "name": "Rune 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1320" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "13", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1321", + "stand_turn_anim": "823", + "bonuses": "1,7,-2,0,0,0,1,0,0,0,0,6,0,0,0", + "shop_price": "40", + "durability": null, + "weight": "1", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Bronze scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Bronze scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1322" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "30", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1323", + "stand_turn_anim": "823", + "bonuses": "2,10,-2,0,0,0,1,0,0,0,0,9,0,0,0", + "shop_price": "112", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Iron scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Iron scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1324" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "101", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1325", + "stand_turn_anim": "823", + "bonuses": "3,15,-2,0,0,0,1,0,0,0,0,14,0,0,0", + "requirements": "{0,5}", + "shop_price": "400", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Steel scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "101", + "durability": null, + "name": "Steel scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1326" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "4498", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1327", + "stand_turn_anim": "823", + "bonuses": "4,19,-2,0,0,0,1,0,0,0,0,14,0,0,0", + "requirements": "{0,10}", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Black scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4498", + "durability": null, + "name": "Black scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1328" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "469", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1329", + "stand_turn_anim": "823", + "bonuses": "5,21,-2,0,0,0,1,0,0,0,0,20,0,0,0", + "requirements": "{0,20}", + "shop_price": "1040", + "durability": null, + "weight": "1.5", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Mithril scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "469", + "durability": null, + "name": "Mithril scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1330" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A viciously curved sword", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "1525", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1331", + "stand_turn_anim": "823", + "bonuses": "6,29,-2,0,0,0,1,0,0,0,0,28,0,0,0", + "requirements": "{0,30}", + "shop_price": "2304", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Adamant scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1525", + "durability": null, + "name": "Adamant scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1332" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "15200", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1333", + "stand_turn_anim": "823", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0", + "requirements": "{0,40}", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "lendable": "true", + "attack_audios": "2500,0,2517,0", + "name": "Rune scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15200", + "durability": null, + "name": "Rune scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1334" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "20", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1335", + "stand_turn_anim": "823", + "bonuses": "-4,-4,11,-4,0,0,0,0,0,0,0,9,0,0,0", + "shop_price": "224", + "durability": null, + "weight": "1.8", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Iron warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Iron warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1336" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "16", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1337", + "stand_turn_anim": "823", + "bonuses": "-4,-4,10,-4,0,0,0,0,0,0,0,8,0,0,0", + "shop_price": "59", + "durability": null, + "weight": "1", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Bronze warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Bronze warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1338" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "283", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1339", + "stand_turn_anim": "823", + "bonuses": "-4,-4,18,-4,0,0,0,0,0,0,0,16,0,0,0", + "requirements": "{0,5}", + "shop_price": "832", + "durability": null, + "weight": "1", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Steel warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "283", + "durability": null, + "name": "Steel warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1340" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "562", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1341", + "stand_turn_anim": "823", + "bonuses": "-4,-4,22,-4,0,0,0,0,0,0,0,19,0,0,0", + "requirements": "{0,10}", + "shop_price": "1274", + "durability": null, + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Black warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "562", + "durability": null, + "name": "Black warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1342" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "1071", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1343", + "stand_turn_anim": "823", + "bonuses": "-4,-4,25,-4,0,0,0,0,0,0,0,20,0,0,0", + "requirements": "{0,20}", + "shop_price": "2158", + "durability": null, + "weight": "1.5", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Mithril warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1071", + "durability": null, + "name": "Mithril warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1344" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "2996", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1345", + "stand_turn_anim": "823", + "bonuses": "-4,-4,33,-4,0,0,0,0,0,0,0,31,0,0,0", + "requirements": "{0,30}", + "shop_price": "5356", + "durability": null, + "weight": "2", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Adamant warhammer" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2996", + "durability": null, + "name": "Adamant warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1346" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "24600", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1347", + "stand_turn_anim": "823", + "bonuses": "-4,-4,53,-4,0,0,0,0,0,0,0,48,0,0,0", + "requirements": "{0,40}", + "shop_price": "41000", + "durability": null, + "weight": "1.8", + "weapon_interface": "10", + "render_anim": "1430", + "lendable": "true", + "attack_audios": "2504,0,0,0", + "name": "Rune warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24600", + "durability": null, + "name": "Rune warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1348" + }, + { + "shop_price": "56", + "ge_buy_limit": "100", + "examine": "A woodcutter's axe.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "2", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "8", + "attack_audios": "2498,2498,2497,2498", + "name": "Iron axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1349", + "bonuses": "-2,5,3,0,0,0,1,0,0,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Iron axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1350" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A woodcutter's axe.", + "durability": null, + "weight": "1.35", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "44", + "attack_audios": "2498,2498,2497,2498", + "name": "Bronze axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1351", + "bonuses": "-2,4,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44", + "durability": null, + "name": "Bronze axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1352" + }, + { + "requirements": "{0,5}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A woodcutter's axe.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "36", + "attack_audios": "2498,2498,2497,2498", + "name": "Steel axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1353", + "bonuses": "-2,8,6,0,0,0,1,0,0,0,0,9,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "36", + "durability": null, + "name": "Steel axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1354" + }, + { + "requirements": "{0,20}", + "shop_price": "660", + "ge_buy_limit": "100", + "examine": "A powerful axe.", + "durability": null, + "weight": "1.1", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "141", + "attack_audios": "2498,2498,2497,2498", + "name": "Mithril axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1355", + "bonuses": "-2,12,10,0,0,0,1,0,0,0,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "141", + "durability": null, + "name": "Mithril axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1356" + }, + { + "requirements": "{0,30}-{8,31}", + "shop_price": "1625", + "ge_buy_limit": "100", + "examine": "A powerful axe.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "592", + "attack_audios": "2498,2498,2497,2498", + "name": "Adamant axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1357", + "bonuses": "-2,17,15,0,0,0,1,0,0,0,0,19,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "592", + "durability": null, + "name": "Adamant axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1358" + }, + { + "requirements": "{0,40}-{8,41}", + "ge_buy_limit": "100", + "examine": "A powerful axe.", + "durability": null, + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "7495", + "attack_audios": "2498,2498,2497,2498", + "name": "Rune axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1359", + "bonuses": "-2,26,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7495", + "durability": null, + "name": "Rune axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1360" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "examine": "A sinister looking axe.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "335", + "attack_audios": "2498,2498,2497,2498", + "name": "Black axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1361", + "bonuses": "-2,10,8,0,0,0,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "335", + "durability": null, + "name": "Black axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1362" + }, + { + "shop_price": "182", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "21", + "attack_audios": "2498,2498,2497,2498", + "name": "Iron battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1363", + "bonuses": "-2,8,5,0,0,0,0,0,0,-1,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Iron battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1364" + }, + { + "requirements": "{0,5}", + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "208", + "attack_audios": "2498,2498,2497,2498", + "name": "Steel battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1365", + "bonuses": "-2,16,11,0,0,0,0,0,0,-1,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "208", + "durability": null, + "name": "Steel battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1366" + }, + { + "requirements": "{0,10}", + "shop_price": "1248", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "556", + "attack_audios": "2498,2498,2497,2498", + "name": "Black battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1367", + "bonuses": "-2,20,15,0,0,0,0,0,0,-1,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "556", + "durability": null, + "name": "Black battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1368" + }, + { + "requirements": "{0,20}", + "shop_price": "1690", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "809", + "attack_audios": "2498,2498,2497,2498", + "name": "Mithril battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1369", + "bonuses": "-2,22,17,0,0,0,0,0,0,-1,0,29,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "809", + "durability": null, + "name": "Mithril battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1370" + }, + { + "requirements": "{0,30}", + "shop_price": "4160", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "3", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "2311", + "attack_audios": "2498,2498,2497,2498", + "name": "Adamant battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1371", + "bonuses": "-2,31,26,0,0,0,0,0,0,-1,0,41,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2311", + "durability": null, + "name": "Adamant battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1372" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "lendable": "true", + "grand_exchange_price": "24800", + "attack_audios": "2498,2498,2497,2498", + "name": "Rune battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1373", + "bonuses": "-2,48,43,0,0,0,0,0,0,-1,0,64,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24800", + "durability": null, + "name": "Rune battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1374" + }, + { + "shop_price": "52", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "15", + "attack_audios": "2498,2498,2497,2498", + "name": "Bronze battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1375", + "bonuses": "-2,6,3,0,0,0,0,0,0,-1,0,9,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "durability": null, + "name": "Bronze battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1376" + }, + { + "requirements": "{0,60}", + "shop_price": "200000", + "ge_buy_limit": "10", + "examine": "A vicious looking axe.", + "has_special": "true", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "lendable": "true", + "grand_exchange_price": "123200", + "attack_audios": "2498,2498,2497,2498", + "name": "Dragon battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1377", + "bonuses": "-2,70,65,0,0,0,0,0,0,-1,0,85,0,0,0" + }, + { + "requirements": "{0,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "123200", + "durability": null, + "name": "Dragon battleaxe", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "1378", + "defence_anim": "397" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "37", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1379", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0", + "shop_price": "15", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "37", + "durability": null, + "name": "Staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1380" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "784", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1381", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,10,0,2,3,1,10,0,0,3,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of air" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "784", + "durability": null, + "name": "Staff of air", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1382" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "890", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1383", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,10,0,2,3,1,10,0,0,3,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of water" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "890", + "durability": null, + "name": "Staff of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1384" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "879", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1385", + "stand_turn_anim": "1209", + "bonuses": "1,-1,9,10,0,2,3,1,10,0,0,5,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of earth" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "879", + "durability": null, + "name": "Staff of earth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1386" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "1330", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1387", + "stand_turn_anim": "1209", + "bonuses": "3,-1,9,10,0,2,3,1,10,0,0,6,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of fire" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1330", + "durability": null, + "name": "Staff of fire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1388" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "58", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1389", + "stand_turn_anim": "1209", + "bonuses": "2,-1,10,10,0,2,3,1,10,0,0,7,0,0,0", + "shop_price": "200", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Magic staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "58", + "durability": null, + "name": "Magic staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1390" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "7963", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1391", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,12,0,2,3,1,12,0,0,32,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "7000", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7963", + "durability": null, + "name": "Battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1392" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9113", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1393", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "19600", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Fire battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9113", + "durability": null, + "name": "Fire battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1394" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9122", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1395", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Water battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9122", + "durability": null, + "name": "Water battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1396" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "8982", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1397", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "7000", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Air battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8982", + "durability": null, + "name": "Air battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1398" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9041", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1399", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Earth battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9041", + "durability": null, + "name": "Earth battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1400" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "25400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1401", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic fire staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25400", + "durability": null, + "name": "Mystic fire staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1402" + }, + { + "requirements": "{0,40}-{6,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "24800", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "true", + "name": "Mystic water staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1403", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24800", + "durability": null, + "name": "Mystic water staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1404" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "25100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1405", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic air staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25100", + "durability": null, + "name": "Mystic air staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1406" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "25400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1407", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "shop_price": "40000", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic earth staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25400", + "durability": null, + "name": "Mystic earth staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1408" + }, + { + "turn90cw_anim": "1207", + "examine": "An ancient staff, formerly the property of Iban.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Iban's staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1409", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,10,0,2,3,1,10,0,0,50,0,0,0" + }, + { + "examine": "An ancient staff, formerly the property of Iban.", + "attack_audios": "2555,0,0,0", + "durability": null, + "name": "Iban's staff", + "weight": "2.2", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "1410", + "bonuses": "10,-1,40,10,0,2,3,1,10,0,0,50,0,0,0" + }, + { + "durability": null, + "name": "Farmer's fork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1412" + }, + { + "durability": null, + "name": "Halberd", + "archery_ticket_price": "0", + "attack_speed": "7", + "id": "1413" + }, + { + "durability": null, + "name": "Halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1414" + }, + { + "attack_audios": "2504,0,0,0", + "durability": null, + "name": "Warhammer", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "1415" + }, + { + "durability": null, + "name": "Warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1416" + }, + { + "durability": null, + "name": "Javelin", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "1417" + }, + { + "durability": null, + "name": "Javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1418" + }, + { + "turn90cw_anim": "821", + "examine": "It's a Scythe.", + "walk_anim": "819", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "22", + "turn180_anim": "820", + "render_anim": "1383", + "defence_anim": "383", + "equipment_slot": "3", + "attack_anims": "382,382,382,382", + "stand_anim": "847", + "name": "Scythe", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1419", + "stand_turn_anim": "823", + "bonuses": "3,8,3,0,0,0,3,1,0,0,0,10,0,0,0" + }, + { + "shop_price": "80", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "7", + "name": "Iron mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1420", + "bonuses": "4,-2,9,0,0,0,0,0,0,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Iron mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1421" + }, + { + "shop_price": "18", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "12", + "name": "Bronze mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1422", + "bonuses": "1,-2,6,0,0,0,0,0,0,0,0,5,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1423" + }, + { + "requirements": "{0,5}", + "shop_price": "225", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "31", + "name": "Steel mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1424", + "bonuses": "7,-2,13,0,0,0,0,0,0,0,0,11,2,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "31", + "durability": null, + "name": "Steel mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1425" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "954", + "name": "Black mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1426", + "bonuses": "8,-2,16,0,0,0,0,0,0,0,0,13,2,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "954", + "durability": null, + "name": "Black mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1427" + }, + { + "requirements": "{0,20}", + "shop_price": "585", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.5", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "157", + "name": "Mithril mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1428", + "bonuses": "11,-2,18,0,0,0,0,0,0,0,0,16,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "157", + "durability": null, + "name": "Mithril mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1429" + }, + { + "requirements": "{0,30}", + "shop_price": "1440", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "673", + "name": "Adamant mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1430", + "bonuses": "13,-2,25,0,0,0,0,0,0,0,0,23,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "673", + "durability": null, + "name": "Adamant mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1431" + }, + { + "requirements": "{0,40}", + "shop_price": "14400", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "lendable": "true", + "grand_exchange_price": "8380", + "name": "Rune mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1432", + "bonuses": "20,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8380", + "durability": null, + "name": "Rune mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1433" + }, + { + "requirements": "{0,60}", + "shop_price": "50000", + "ge_buy_limit": "10", + "examine": "A spiky mace.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "lendable": "true", + "grand_exchange_price": "29300", + "name": "Dragon mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1434", + "bonuses": "40,-2,60,0,0,0,0,0,0,0,0,55,5,0,0" + }, + { + "requirements": "{0,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "29300", + "durability": null, + "name": "Dragon mace", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "1435" + }, + { + "shop_price": "1", + "ge_buy_limit": "25000", + "examine": "An uncharged Rune Stone.", + "grand_exchange_price": "40", + "durability": null, + "name": "Rune essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1436" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "40", + "durability": null, + "name": "Rune essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1437" + }, + { + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "404", + "durability": null, + "name": "Air talisman", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1438" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "404", + "durability": null, + "name": "Air talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1439" + }, + { + "requirements": "{9,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "785", + "durability": null, + "name": "Earth talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1440" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "785", + "durability": null, + "name": "Earth talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1441" + }, + { + "requirements": "{14,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "4140", + "durability": null, + "name": "Fire talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1442" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "4140", + "durability": null, + "name": "Fire talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1443" + }, + { + "requirements": "{5,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "7975", + "durability": null, + "name": "Water talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1444" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "7975", + "durability": null, + "name": "Water talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1445" + }, + { + "requirements": "{20,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "1373", + "durability": null, + "name": "Body talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1446" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1373", + "durability": null, + "name": "Body talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1447" + }, + { + "requirements": "{2,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "285", + "durability": null, + "name": "Mind talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1448" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "285", + "durability": null, + "name": "Mind talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1449" + }, + { + "requirements": "{20,77}", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "3178", + "durability": null, + "name": "Blood talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1450" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "3178", + "durability": null, + "name": "Blood talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1451" + }, + { + "requirements": "{20,35}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "605", + "durability": null, + "name": "Chaos talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1452" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "605", + "durability": null, + "name": "Chaos talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1453" + }, + { + "requirements": "{20,27}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "785", + "durability": null, + "name": "Cosmic talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1454" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "785", + "durability": null, + "name": "Cosmic talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1455" + }, + { + "requirements": "{20,65}", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "2501", + "durability": null, + "name": "Death talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1456" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "2501", + "durability": null, + "name": "Death talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1457" + }, + { + "requirements": "{20,54}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "1219", + "durability": null, + "name": "Law talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1458" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1219", + "durability": null, + "name": "Law talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1459" + }, + { + "durability": null, + "name": "Soul talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1461" + }, + { + "requirements": "{20,44}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "1596", + "durability": null, + "name": "Nature talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1462" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1596", + "durability": null, + "name": "Nature talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1463" + }, + { + "ge_buy_limit": "5000", + "examine": "I can exchange this for equipment.", + "grand_exchange_price": "9", + "durability": null, + "name": "Archery ticket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1464" + }, + { + "examine": "For use on daggers and projectiles.", + "grand_exchange_price": "36", + "durability": null, + "name": "Weapon poison", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1465" + }, + { + "examine": "Some damp wooden sticks.", + "durability": null, + "name": "Damp sticks", + "archery_ticket_price": "0", + "id": "1467" + }, + { + "examine": "Some dry wooden sticks.", + "durability": null, + "name": "Dry sticks", + "archery_ticket_price": "0", + "id": "1468" + }, + { + "examine": "Smashed glass.", + "durability": null, + "name": "Broken glass", + "archery_ticket_price": "0", + "id": "1469" + }, + { + "ge_buy_limit": "100", + "examine": "A small round red bead.", + "grand_exchange_price": "169", + "durability": null, + "name": "Red bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1470" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "169", + "durability": null, + "name": "Red bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1471" + }, + { + "ge_buy_limit": "100", + "examine": "A small round yellow bead.", + "grand_exchange_price": "249", + "durability": null, + "name": "Yellow bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1472" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "249", + "durability": null, + "name": "Yellow bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1473" + }, + { + "ge_buy_limit": "100", + "examine": "A small round black bead.", + "grand_exchange_price": "229", + "durability": null, + "name": "Black bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1474" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "229", + "durability": null, + "name": "Black bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1475" + }, + { + "ge_buy_limit": "100", + "examine": "A small round white bead.", + "grand_exchange_price": "1530", + "durability": null, + "name": "White bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1476" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1530", + "durability": null, + "name": "White bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1477" + }, + { + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "Wizard Mizgog sells these aim-enhancing amulets.", + "grand_exchange_price": "2870", + "durability": null, + "name": "Amulet of accuracy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1478", + "bonuses": "4,4,4,4,4,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2870", + "durability": null, + "name": "Amulet of accuracy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1479" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1481" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1482" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1483" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1484" + }, + { + "examine": "A damp, wet cloth.", + "durability": null, + "name": "Damp cloth", + "archery_ticket_price": "0", + "id": "1485" + }, + { + "examine": "A broken piece of railing.", + "durability": null, + "name": "Piece of railing", + "weight": "2", + "archery_ticket_price": "0", + "id": "1486" + }, + { + "examine": "This horn has restorative properties.", + "grand_exchange_price": "1159", + "durability": null, + "name": "Unicorn horn", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1487" + }, + { + "examine": "A coat of arms of the Ardougne Paladins.", + "durability": null, + "name": "Paladin's badge", + "archery_ticket_price": "0", + "id": "1488" + }, + { + "examine": "A coat of arms of the Ardougne Paladins.", + "durability": null, + "name": "Paladin's badge", + "archery_ticket_price": "0", + "id": "1489" + }, + { + "examine": "A coat of arms of the Ardougne Paladins.", + "durability": null, + "name": "Paladin's badge", + "archery_ticket_price": "0", + "id": "1490" + }, + { + "examine": "On the ground: Curiosity has yet to kill this one...", + "durability": null, + "name": "Witch's cat", + "weight": "1.2", + "archery_ticket_price": "0", + "id": "1491" + }, + { + "examine": "A simple doll with Iban's likeness.", + "durability": null, + "name": "Doll of iban", + "weight": "1", + "archery_ticket_price": "0", + "id": "1492" + }, + { + "examine": "An account of the last times of someone.", + "durability": null, + "name": "Old journal", + "archery_ticket_price": "0", + "id": "1493" + }, + { + "examine": "The tale of Iban.", + "durability": null, + "name": "History of iban", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1494" + }, + { + "shop_price": "5000", + "examine": "Strong dwarvish gloves.", + "durability": null, + "name": "Klank's gauntlets", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1495", + "bonuses": "2,2,2,0,0,8,9,7,0,0,5,2,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "I thought you only saw these in pairs?", + "durability": null, + "name": "Iban's dove", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1496" + }, + { + "examine": "A mystical demonic amulet.", + "durability": null, + "name": "Amulet of othanian", + "archery_ticket_price": "0", + "id": "1497" + }, + { + "examine": "A mystical demonic amulet.", + "durability": null, + "name": "Amulet of doomion", + "archery_ticket_price": "0", + "id": "1498" + }, + { + "examine": "A mystical demonic amulet.", + "durability": null, + "name": "Amulet of holthion", + "archery_ticket_price": "0", + "id": "1499" + }, + { + "examine": "A strange dark liquid.", + "durability": null, + "name": "Iban's shadow", + "archery_ticket_price": "0", + "id": "1500" + }, + { + "examine": "Smells stronger than most spirits.", + "durability": null, + "name": "Dwarf brew", + "archery_ticket_price": "0", + "id": "1501" + }, + { + "examine": "The burnt remains of Iban.", + "durability": null, + "name": "Iban's ashes", + "weight": "0.056", + "archery_ticket_price": "0", + "id": "1502" + }, + { + "examine": "A search warrant for a house in West Ardougne.", + "durability": null, + "name": "Warrant", + "archery_ticket_price": "0", + "id": "1503" + }, + { + "examine": "It doesn't look very tasty.", + "durability": null, + "name": "Hangover cure", + "weight": "2", + "archery_ticket_price": "0", + "id": "1504" + }, + { + "examine": "Maybe I should read this...", + "durability": null, + "name": "A magic scroll", + "archery_ticket_price": "0", + "id": "1505" + }, + { + "remove_head": "true", + "examine": "Stops me from breathing nasty stuff!", + "durability": null, + "name": "Gas mask", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "1506", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Quite a small key (Plague City).", + "durability": null, + "name": "A small key", + "archery_ticket_price": "0", + "id": "1507" + }, + { + "examine": "It seems to say \"hongorer lure\"...", + "durability": null, + "name": "A scruffy note", + "archery_ticket_price": "0", + "id": "1508" + }, + { + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Picture", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1510" + }, + { + "shop_price": "4", + "ge_buy_limit": "25000", + "examine": "A number of wooden logs.", + "grand_exchange_price": "120", + "durability": null, + "name": "Logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1511" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "279", + "durability": null, + "name": "Logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1512" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a magic tree.", + "grand_exchange_price": "680", + "durability": null, + "name": "Magic logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1513" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "1581", + "durability": null, + "name": "Magic logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1514" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a yew tree.", + "grand_exchange_price": "320", + "durability": null, + "name": "Yew logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1515" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "532", + "durability": null, + "name": "Yew logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1516" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a maple tree.", + "grand_exchange_price": "160", + "durability": null, + "name": "Maple logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1517" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "20", + "durability": null, + "name": "Maple logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1518" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a willow tree.", + "grand_exchange_price": "80", + "durability": null, + "name": "Willow logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1519" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "11", + "durability": null, + "name": "Willow logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1520" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from an Oak Tree.", + "grand_exchange_price": "140", + "durability": null, + "name": "Oak logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1521" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "153", + "durability": null, + "name": "Oak logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1522" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "For picking tough locks.", + "grand_exchange_price": "1311", + "durability": null, + "name": "Lockpick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1523" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1311", + "durability": null, + "name": "Lockpick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1524" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy snake weed", + "archery_ticket_price": "0", + "id": "1525" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean snake weed", + "archery_ticket_price": "0", + "id": "1526" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy ardrigal", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1527" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean ardrigal", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1528" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy sito foil", + "archery_ticket_price": "0", + "id": "1529" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean sito foil", + "archery_ticket_price": "0", + "id": "1530" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy volencia moss", + "archery_ticket_price": "0", + "id": "1531" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean volencia moss", + "archery_ticket_price": "0", + "id": "1532" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy rogue's purse", + "archery_ticket_price": "0", + "id": "1533" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean rogue's purse", + "archery_ticket_price": "0", + "id": "1534" + }, + { + "examine": "A piece of map.", + "durability": null, + "name": "Map part", + "archery_ticket_price": "0", + "id": "1535" + }, + { + "examine": "A piece of map.", + "durability": null, + "name": "Map part", + "archery_ticket_price": "0", + "id": "1536" + }, + { + "examine": "A piece of map.", + "durability": null, + "name": "Map part", + "archery_ticket_price": "0", + "id": "1537" + }, + { + "examine": "A map of the route to Crandor.", + "durability": null, + "name": "Crandor map", + "archery_ticket_price": "0", + "id": "1538" + }, + { + "shop_price": "52", + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "59", + "durability": null, + "name": "Steel nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1539" + }, + { + "ge_buy_limit": "100", + "examine": "This provides partial protection from dragon-breath attacks.", + "grand_exchange_price": "637", + "durability": null, + "name": "Anti-dragon shield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "1540", + "bonuses": "0,0,0,0,0,7,9,8,2,8,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "637", + "durability": null, + "name": "Anti-dragon shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1541" + }, + { + "shop_price": "1", + "examine": "A key to Melzar's Maze.", + "durability": null, + "name": "Maze key", + "archery_ticket_price": "0", + "id": "1542" + }, + { + "destroy_message": "You can get another from Dr Harlow in the Blue Moon Inn of Varrock.", + "examine": "A very pointy stick.", + "durability": null, + "name": "Stake", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1549", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "examine": "Deters vampires.", + "grand_exchange_price": "20", + "durability": null, + "name": "Garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1550" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1551" + }, + { + "examine": "Sardine flavoured with doogle leaves.", + "durability": null, + "name": "Doogle sardine", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1552" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1555" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1556" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1557" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1558" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1559" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1560" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1561" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1562" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1563" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1564" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1565" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1566" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1567" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1568" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1569" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1570" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1571" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1572" + }, + { + "examine": "A tasty herb good for seasoning.", + "durability": null, + "name": "Doogle leaves", + "archery_ticket_price": "0", + "id": "1573" + }, + { + "examine": "For feline training expertise.", + "durability": null, + "name": "Cat training medal", + "archery_ticket_price": "0", + "id": "1575", + "equipment_slot": "2" + }, + { + "examine": "Candlestick used during Heroes' Quest.", + "durability": null, + "name": "Pete's candlestick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1577" + }, + { + "durability": null, + "name": "Pete's candlestick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1578" + }, + { + "examine": "This denotes a Master Thief.", + "durability": null, + "name": "Thieves' armband", + "archery_ticket_price": "0", + "id": "1579" + }, + { + "examine": "These will keep my hands cold!", + "durability": null, + "name": "Ice gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1580", + "bonuses": "0,0,0,0,0,0,3,4,0,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Yuck.", + "durability": null, + "name": "Blamish snail slime", + "weight": "1", + "archery_ticket_price": "0", + "id": "1581" + }, + { + "examine": "Made from the finest snail slime.", + "durability": null, + "name": "Blamish oil", + "archery_ticket_price": "0", + "id": "1582" + }, + { + "examine": "Firebird feather.", + "durability": null, + "name": "Fire feather", + "archery_ticket_price": "0", + "id": "1583" + }, + { + "examine": "Apparently my name is Hartigan", + "durability": null, + "name": "Id papers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1584" + }, + { + "examine": "Useful for catching lava eels.", + "durability": null, + "name": "Oily fishing rod", + "weight": "1", + "archery_ticket_price": "0", + "id": "1585" + }, + { + "examine": "This is of use in completing Heroes' Quest. (Heroes' Quest)", + "durability": null, + "name": "Miscellaneous key", + "tradeable": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "1586" + }, + { + "durability": null, + "name": "Miscellaneous key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1587" + }, + { + "examine": "The key I got from Grip. (Heroes' Quest)", + "durability": null, + "name": "Grips' key ring", + "archery_ticket_price": "0", + "id": "1588" + }, + { + "shop_price": "1", + "examine": "I wonder what this unlocks. (Heroes' Quest)", + "durability": null, + "name": "Dusty key", + "archery_ticket_price": "0", + "id": "1590" + }, + { + "examine": "Key to a cell. (Heroes' Quest)", + "durability": null, + "name": "Jail key", + "archery_ticket_price": "0", + "id": "1591" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold rings.", + "grand_exchange_price": "316", + "durability": null, + "name": "Ring mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1592" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "316", + "durability": null, + "name": "Ring mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1593" + }, + { + "examine": "Used to make unholy symbols.", + "durability": null, + "name": "Unholy mould", + "archery_ticket_price": "0", + "id": "1594" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold amulets.", + "grand_exchange_price": "288", + "durability": null, + "name": "Amulet mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1595" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "288", + "durability": null, + "name": "Amulet mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1596" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold necklaces.", + "grand_exchange_price": "269", + "durability": null, + "name": "Necklace mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1597" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "269", + "durability": null, + "name": "Necklace mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1598" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make holy symbols of Saradomin.", + "grand_exchange_price": "504", + "durability": null, + "name": "Holy mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1599" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "504", + "durability": null, + "name": "Holy mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1600" + }, + { + "ge_buy_limit": "500", + "examine": "This looks valuable.", + "grand_exchange_price": "14800", + "durability": null, + "name": "Diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1601" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "14800", + "durability": null, + "name": "Diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1602" + }, + { + "shop_price": "400", + "ge_buy_limit": "1000", + "examine": "This looks valuable.", + "grand_exchange_price": "1598", + "durability": null, + "name": "Ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1603" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1598", + "durability": null, + "name": "Ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1604" + }, + { + "shop_price": "350", + "ge_buy_limit": "1000", + "examine": "This looks valuable.", + "grand_exchange_price": "853", + "durability": null, + "name": "Emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1605" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "853", + "durability": null, + "name": "Emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1606" + }, + { + "shop_price": "175", + "ge_buy_limit": "1000", + "examine": "This looks valuable.", + "grand_exchange_price": "520", + "durability": null, + "name": "Sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1607" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "520", + "durability": null, + "name": "Sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1608" + }, + { + "ge_buy_limit": "1000", + "shop_price": "100", + "examine": "A semi precious stone.", + "grand_exchange_price": "44", + "durability": null, + "name": "Opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1609" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "41", + "durability": null, + "name": "Opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1610" + }, + { + "ge_buy_limit": "1000", + "shop_price": "150", + "grand_exchange_price": "84", + "examine": "A semi precious stone.", + "durability": null, + "name": "Jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1611" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "83", + "durability": null, + "name": "Jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1612" + }, + { + "ge_buy_limit": "1000", + "shop_price": "200", + "examine": "A semi precious stone.", + "grand_exchange_price": "120", + "durability": null, + "name": "Red topaz", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1613" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "103", + "durability": null, + "name": "Red topaz", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1614" + }, + { + "shop_price": "75000", + "ge_buy_limit": "100", + "examine": "This looks valuable.", + "grand_exchange_price": "27400", + "durability": null, + "name": "Dragonstone", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1615" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27400", + "durability": null, + "name": "Dragonstone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1616" + }, + { + "ge_buy_limit": "500", + "examine": "An uncut diamond.", + "grand_exchange_price": "2160", + "tokkul_price": "300", + "durability": null, + "name": "Uncut diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1617" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "20000", + "durability": null, + "name": "Uncut diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1618" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut ruby.", + "grand_exchange_price": "1140", + "tokkul_price": "150", + "durability": null, + "name": "Uncut ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1619" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4970", + "durability": null, + "name": "Uncut ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1620" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "An uncut emerald.", + "grand_exchange_price": "580", + "tokkul_price": "75", + "durability": null, + "name": "Uncut emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1621" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2621", + "durability": null, + "name": "Uncut emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1622" + }, + { + "shop_price": "25", + "ge_buy_limit": "1000", + "examine": "An uncut sapphire.", + "grand_exchange_price": "420", + "tokkul_price": "37", + "durability": null, + "name": "Uncut sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1623" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1851", + "durability": null, + "name": "Uncut sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1624" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut opal.", + "grand_exchange_price": "65", + "durability": null, + "name": "Uncut opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1625" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "65", + "durability": null, + "name": "Uncut opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1626" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut jade.", + "grand_exchange_price": "138", + "durability": null, + "name": "Uncut jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1627" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "138", + "durability": null, + "name": "Uncut jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1628" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut red topaz.", + "grand_exchange_price": "279", + "durability": null, + "name": "Uncut red topaz", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1629" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "279", + "durability": null, + "name": "Uncut red topaz", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1630" + }, + { + "shop_price": "75000", + "ge_buy_limit": "100", + "examine": "An uncut dragonstone.", + "grand_exchange_price": "31700", + "tokkul_price": "1500", + "durability": null, + "name": "Uncut dragonstone", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1631" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "31700", + "durability": null, + "name": "Uncut dragonstone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1632" + }, + { + "examine": "This gem is crushed and broken.", + "durability": null, + "name": "Crushed gem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1633" + }, + { + "durability": null, + "name": "Crushed gem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1634" + }, + { + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "165", + "durability": null, + "name": "Gold ring", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "id": "1635", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "165", + "durability": null, + "name": "Gold ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1636" + }, + { + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "561", + "durability": null, + "name": "Sapphire ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1637", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "561", + "durability": null, + "name": "Sapphire ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1638" + }, + { + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "884", + "durability": null, + "name": "Emerald ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1639", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "884", + "durability": null, + "name": "Emerald ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1640" + }, + { + "shop_price": "2025", + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "1110", + "durability": null, + "name": "Ruby ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1641", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1110", + "durability": null, + "name": "Ruby ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1642" + }, + { + "shop_price": "3172", + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "4416", + "durability": null, + "name": "Diamond ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1643", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4416", + "durability": null, + "name": "Diamond ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1644" + }, + { + "shop_price": "7750", + "ge_buy_limit": "100", + "examine": "A valuable ring.", + "grand_exchange_price": "26700", + "durability": null, + "name": "Dragonstone ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1645", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26700", + "durability": null, + "name": "Dragonstone ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1646" + }, + { + "examine": "A valuable ring.", + "grand_exchange_price": "547", + "durability": null, + "name": "Sapphire ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1649" + }, + { + "examine": "A valuable ring.", + "grand_exchange_price": "993", + "durability": null, + "name": "Emerald ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1650" + }, + { + "shop_price": "2025", + "examine": "A valuable ring.", + "grand_exchange_price": "1125", + "durability": null, + "name": "Ruby ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1651" + }, + { + "shop_price": "3172", + "examine": "A valuable ring.", + "grand_exchange_price": "3622", + "durability": null, + "name": "Diamond ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1652" + }, + { + "shop_price": "7750", + "examine": "A valuable ring.", + "grand_exchange_price": "19606", + "durability": null, + "name": "Dragonstone ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1653" + }, + { + "shop_price": "450", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "185", + "durability": null, + "name": "Gold necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1654", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "185", + "durability": null, + "name": "Gold necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1655" + }, + { + "shop_price": "945", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "534", + "durability": null, + "name": "Sapphire necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1656", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "534", + "durability": null, + "name": "Sapphire necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1657" + }, + { + "shop_price": "1425", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "781", + "durability": null, + "name": "Emerald necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1658", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "781", + "durability": null, + "name": "Emerald necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1659" + }, + { + "shop_price": "870", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Ruby necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1660", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1276", + "durability": null, + "name": "Ruby necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1661" + }, + { + "shop_price": "3307", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "14300", + "durability": null, + "name": "Diamond necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1662", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "14300", + "durability": null, + "name": "Diamond necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1663" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1664", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1665" + }, + { + "shop_price": "945", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "532", + "durability": null, + "name": "Sapphire necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1668" + }, + { + "shop_price": "1425", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "741", + "durability": null, + "name": "Emerald necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1669" + }, + { + "shop_price": "870", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "1194", + "durability": null, + "name": "Ruby necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1670" + }, + { + "shop_price": "3307", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "9795", + "durability": null, + "name": "Diamond necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1671" + }, + { + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "23010", + "durability": null, + "name": "Dragon necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1672" + }, + { + "shop_price": "350", + "ge_buy_limit": "5000", + "examine": "A plain gold amulet.", + "grand_exchange_price": "172", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1673" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "172", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1674" + }, + { + "shop_price": "810", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "473", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1675" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "473", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1676" + }, + { + "shop_price": "1147", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "695", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1677" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "695", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1678" + }, + { + "shop_price": "2025", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1268", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1679" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1268", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1680" + }, + { + "shop_price": "3307", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "3359", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1681" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3359", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1682" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "26900", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1683" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26900", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1684" + }, + { + "shop_price": "810", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "417", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1687" + }, + { + "shop_price": "1147", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "648", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1688" + }, + { + "shop_price": "2025", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1098", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1689" + }, + { + "shop_price": "3307", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1993", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1690" + }, + { + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "18436", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1691" + }, + { + "shop_price": "350", + "ge_buy_limit": "5000", + "examine": "A plain gold amulet.", + "grand_exchange_price": "137", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1692", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "137", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1693" + }, + { + "shop_price": "810", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "435", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1694", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "435", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1695" + }, + { + "shop_price": "1147", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "659", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1696", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "659", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1697" + }, + { + "shop_price": "2025", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1115", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1698", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1115", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1699" + }, + { + "shop_price": "3307", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "2706", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1700", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2706", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1701" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "27100", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1702", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27100", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1703" + }, + { + "ge_buy_limit": "100", + "examine": "A very powerful dragonstone amulet.", + "grand_exchange_price": "28000", + "durability": null, + "name": "Amulet of glory", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1704", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1705" + }, + { + "examine": "A dragonstone amulet with 1 magic charge.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1706", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1707" + }, + { + "examine": "A dragonstone amulet with 2 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1708", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1709" + }, + { + "examine": "A dragonstone amulet with 3 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1710", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1711" + }, + { + "ge_buy_limit": "100", + "examine": "A dragonstone amulet with 4 magic charges.", + "grand_exchange_price": "29300", + "durability": null, + "name": "Amulet of glory(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1712", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1713" + }, + { + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "It needs a string so I can wear it.", + "grand_exchange_price": "83", + "durability": null, + "name": "Unstrung symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1714" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "83", + "durability": null, + "name": "Unstrung symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1715" + }, + { + "shop_price": "120", + "ge_buy_limit": "5000", + "examine": "A symbol of Saradomin.", + "grand_exchange_price": "29", + "durability": null, + "name": "Unblessed symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1716", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "29", + "durability": null, + "name": "Unblessed symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1717" + }, + { + "shop_price": "300", + "ge_buy_limit": "5000", + "examine": "A blessed holy symbol of Saradomin.", + "grand_exchange_price": "88", + "durability": null, + "name": "Holy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1718", + "bonuses": "0,0,0,0,0,2,2,2,2,2,3,0,8,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "88", + "durability": null, + "name": "Holy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1719" + }, + { + "ge_buy_limit": "5000", + "examine": "It needs a string so I can wear it.", + "grand_exchange_price": "178", + "durability": null, + "name": "Unstrung emblem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1720" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "178", + "durability": null, + "name": "Unstrung emblem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1721" + }, + { + "shop_price": "120", + "ge_buy_limit": "5000", + "examine": "An unholy symbol of Zamorak.", + "grand_exchange_price": "24", + "durability": null, + "name": "Unpowered symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1722", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "24", + "durability": null, + "name": "Unpowered symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1723" + }, + { + "shop_price": "135", + "ge_buy_limit": "5000", + "examine": "An unholy symbol of Zamorak.", + "grand_exchange_price": "57", + "durability": null, + "name": "Unholy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1724", + "bonuses": "2,2,2,2,2,0,0,0,0,0,0,0,8,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "examine": "An enchanted ruby amulet.", + "grand_exchange_price": "1247", + "durability": null, + "name": "Amulet of strength", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1725", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,10,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1247", + "durability": null, + "name": "Amulet of strength", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1726" + }, + { + "shop_price": "900", + "ge_buy_limit": "5000", + "examine": "An enchanted sapphire amulet of magic.", + "grand_exchange_price": "519", + "durability": null, + "name": "Amulet of magic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1727", + "bonuses": "0,0,0,10,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "519", + "durability": null, + "name": "Amulet of magic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1728" + }, + { + "shop_price": "1275", + "ge_buy_limit": "5000", + "examine": "An enchanted emerald amulet of protection.", + "grand_exchange_price": "721", + "durability": null, + "name": "Amulet of defence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1729", + "bonuses": "0,0,0,0,0,7,7,7,7,7,7,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "721", + "durability": null, + "name": "Amulet of defence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1730" + }, + { + "shop_price": "3525", + "ge_buy_limit": "5000", + "examine": "An enchanted diamond amulet of power.", + "grand_exchange_price": "2573", + "durability": null, + "name": "Amulet of power", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1731", + "bonuses": "6,6,6,6,6,6,6,6,6,6,6,6,1,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2573", + "durability": null, + "name": "Amulet of power", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1732" + }, + { + "shop_price": "1", + "ge_buy_limit": "5000", + "examine": "Used with a thread to make clothes.", + "grand_exchange_price": "5", + "durability": null, + "name": "Needle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1733" + }, + { + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Use with a needle to make clothes.", + "grand_exchange_price": "7", + "durability": null, + "name": "Thread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1734" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "For shearing sheep.", + "grand_exchange_price": "76", + "durability": null, + "name": "Shears", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1735" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "76", + "durability": null, + "name": "Shears", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1736" + }, + { + "ge_buy_limit": "5000", + "examine": "I think this came from a sheep.", + "grand_exchange_price": "160", + "durability": null, + "name": "Wool", + "tradeable": "true", + "weight": "0.14", + "archery_ticket_price": "0", + "id": "1737" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "160", + "durability": null, + "name": "Wool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1738" + }, + { + "ge_buy_limit": "10000", + "examine": "I should take this to the tannery.", + "grand_exchange_price": "140", + "durability": null, + "name": "Cowhide", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "1739" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "516", + "durability": null, + "name": "Cowhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1740" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of leather.", + "grand_exchange_price": "638", + "durability": null, + "name": "Leather", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "1741" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "638", + "durability": null, + "name": "Leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1742" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of hard leather.", + "grand_exchange_price": "640", + "durability": null, + "name": "Hard leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1743" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "640", + "durability": null, + "name": "Hard leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1744" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared green dragon hide.", + "grand_exchange_price": "2237", + "durability": null, + "name": "Green d-leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1745" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2237", + "durability": null, + "name": "Green d-leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1746" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a Black Dragon.", + "grand_exchange_price": "5802", + "durability": null, + "name": "Black dragonhide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1747" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5802", + "durability": null, + "name": "Black dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1748" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a red dragon.", + "grand_exchange_price": "3539", + "durability": null, + "name": "Red dragonhide", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1749" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3539", + "durability": null, + "name": "Red dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1750" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a blue dragon.", + "grand_exchange_price": "2473", + "durability": null, + "name": "Blue dragonhide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1751" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2473", + "durability": null, + "name": "Blue dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1752" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a green dragon.", + "grand_exchange_price": "1000", + "durability": null, + "name": "Green dragonhide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1753" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1933", + "durability": null, + "name": "Green dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1754" + }, + { + "shop_price": "14", + "ge_buy_limit": "100", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "20", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1755" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1756" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A mostly clean apron.", + "grand_exchange_price": "74", + "durability": null, + "name": "Brown apron", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "1757", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Brown apron", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1758" + }, + { + "ge_buy_limit": "5000", + "examine": "Spun from sheeps' wool.", + "grand_exchange_price": "115", + "durability": null, + "name": "Ball of wool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1759" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "115", + "durability": null, + "name": "Ball of wool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1760" + }, + { + "ge_buy_limit": "10000", + "examine": "Clay soft enough to mould.", + "grand_exchange_price": "487", + "durability": null, + "name": "Soft clay", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1761" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "487", + "durability": null, + "name": "Soft clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1762" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of red dye.", + "grand_exchange_price": "1374", + "durability": null, + "name": "Red dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1763" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1374", + "durability": null, + "name": "Red dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1764" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of yellow dye.", + "grand_exchange_price": "549", + "durability": null, + "name": "Yellow dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1765" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "549", + "durability": null, + "name": "Yellow dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1766" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of blue dye", + "grand_exchange_price": "642", + "durability": null, + "name": "Blue dye", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1767" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "642", + "durability": null, + "name": "Blue dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1768" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of orange dye.", + "grand_exchange_price": "1258", + "durability": null, + "name": "Orange dye", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1769" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1258", + "durability": null, + "name": "Orange dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1770" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of green dye.", + "grand_exchange_price": "503", + "durability": null, + "name": "Green dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1771" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "503", + "durability": null, + "name": "Green dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1772" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of purple dye.", + "grand_exchange_price": "288", + "durability": null, + "name": "Purple dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1773" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "288", + "durability": null, + "name": "Purple dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1774" + }, + { + "ge_buy_limit": "10000", + "examine": "Hot glass ready to be blown into useful objects.", + "grand_exchange_price": "924", + "durability": null, + "name": "Molten glass", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1775" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "924", + "durability": null, + "name": "Molten glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1776" + }, + { + "ge_buy_limit": "10000", + "examine": "I need a bow stave to attach this to.", + "grand_exchange_price": "240", + "durability": null, + "name": "Bow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1777" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "223", + "durability": null, + "name": "Bow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1778" + }, + { + "shop_price": "73", + "ge_buy_limit": "25000", + "examine": "A plant cultivated for fibres (ground); I should use this with a spinning wheel (item).", + "grand_exchange_price": "73", + "durability": null, + "name": "Flax", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1779" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "73", + "durability": null, + "name": "Flax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1780" + }, + { + "ge_buy_limit": "10000", + "examine": "One of the ingredients for making glass.", + "grand_exchange_price": "575", + "durability": null, + "name": "Soda ash", + "tradeable": "true", + "weight": "0.09", + "archery_ticket_price": "0", + "id": "1781" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "575", + "durability": null, + "name": "Soda ash", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1782" + }, + { + "ge_buy_limit": "10000", + "examine": "One of the ingredients for making glass.", + "grand_exchange_price": "265", + "durability": null, + "name": "Bucket of sand", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "1783" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "265", + "durability": null, + "name": "Bucket of sand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1784" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to form molten glass into useful items.", + "grand_exchange_price": "195", + "durability": null, + "name": "Glassblowing pipe", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1785" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Glassblowing pipe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1786" + }, + { + "ge_buy_limit": "100", + "examine": "I need to put this in a pottery oven.", + "grand_exchange_price": "53", + "durability": null, + "name": "Unfired pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1787" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "53", + "durability": null, + "name": "Unfired pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1788" + }, + { + "ge_buy_limit": "100", + "examine": "I need to put this in a pottery oven.", + "grand_exchange_price": "96", + "durability": null, + "name": "Unfired pie dish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1789" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "96", + "durability": null, + "name": "Unfired pie dish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1790" + }, + { + "shop_price": "32", + "ge_buy_limit": "100", + "examine": "I need to put this in a pottery oven.", + "grand_exchange_price": "194", + "durability": null, + "name": "Unfired bowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1791" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "194", + "durability": null, + "name": "Unfired bowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1792" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A slightly bluish leaf.", + "grand_exchange_price": "57", + "durability": null, + "name": "Woad leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1793" + }, + { + "ge_buy_limit": "100", + "examine": "Useful for crafting items.", + "grand_exchange_price": "249", + "durability": null, + "name": "Bronze wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1794" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "249", + "durability": null, + "name": "Bronze wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1795" + }, + { + "examine": "Anna's shiny silver coated necklace.", + "durability": null, + "name": "Silver necklace", + "weight": "1", + "archery_ticket_price": "0", + "id": "1796", + "equipment_slot": "2" + }, + { + "examine": "Anna's shiny silver coated necklace.", + "durability": null, + "name": "Silver necklace", + "weight": "1", + "archery_ticket_price": "0", + "id": "1797", + "equipment_slot": "2" + }, + { + "examine": "Bob's shiny silver coated tea cup.", + "durability": null, + "name": "Silver cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1798" + }, + { + "examine": "Bob's shiny silver coated tea cup.", + "durability": null, + "name": "Silver cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1799" + }, + { + "examine": "Carol's shiny silver coated bottle.", + "durability": null, + "name": "Silver bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1800" + }, + { + "examine": "Carol's shiny silver coated bottle.", + "durability": null, + "name": "Silver bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1801" + }, + { + "examine": "David's shiny silver coated book.", + "durability": null, + "name": "Silver book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1802" + }, + { + "examine": "David's shiny silver coated book.", + "durability": null, + "name": "Silver book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1803" + }, + { + "examine": "Elizabeth's shiny silver coated needle.", + "durability": null, + "name": "Silver needle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1804" + }, + { + "examine": "Elizabeth's shiny silver coated needle.", + "durability": null, + "name": "Silver needle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1805" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1806" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1807" + }, + { + "examine": "Some (colour) thread found at the murder scene.", + "durability": null, + "name": "Criminal's thread", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1808" + }, + { + "examine": "Some (colour) thread found at the murder scene.", + "durability": null, + "name": "Criminal's thread", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1809" + }, + { + "examine": "Some (colour) thread found at the murder scene.", + "durability": null, + "name": "Criminal's thread", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1810" + }, + { + "examine": "A piece of fly paper. It's sticky.", + "durability": null, + "name": "Flypaper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1811" + }, + { + "examine": "A pot found at the murder scene, with a sickly odour.", + "durability": null, + "name": "Pungent pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1812" + }, + { + "examine": "A flimsy-looking dagger found at the crime scene./A flimsy looking dagger found at the crime scene coated with a thin layer of flour.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Criminal's dagger", + "archery_ticket_price": "0", + "id": "1813" + }, + { + "examine": "A flimsy-looking dagger found at the crime scene./A flimsy looking dagger found at the crime scene coated with a thin layer of flour.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Criminal's dagger", + "archery_ticket_price": "0", + "id": "1814" + }, + { + "examine": "The fingerprints of the murderer.", + "durability": null, + "name": "Killer's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1815" + }, + { + "examine": "An imprint of Anna's fingerprint.", + "durability": null, + "name": "Anna's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1816" + }, + { + "examine": "An imprint of Bob's fingerprint.", + "durability": null, + "name": "Bob's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1817" + }, + { + "examine": "An imprint of Carol's fingerprint.", + "durability": null, + "name": "Carol's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1818" + }, + { + "examine": "An imprint of David's fingerprint.", + "durability": null, + "name": "David's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1819" + }, + { + "examine": "An imprint of Elizabeth's fingerprint.", + "durability": null, + "name": "Elizabeth's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1820" + }, + { + "examine": "An imprint of Frank's fingerprint.", + "durability": null, + "name": "Frank's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1821" + }, + { + "examine": "An unidentified fingerprint taken from the murder weapon.", + "durability": null, + "name": "Unknown print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1822" + }, + { + "shop_price": "30", + "ge_buy_limit": "100", + "examine": "A full waterskin with four portions of water.", + "grand_exchange_price": "184", + "durability": null, + "name": "Waterskin(4)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1823" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "184", + "durability": null, + "name": "Waterskin(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1824" + }, + { + "shop_price": "30", + "examine": "A nearly full waterskin with three portions of water.", + "grand_exchange_price": "4", + "durability": null, + "name": "Waterskin(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1825" + }, + { + "durability": null, + "name": "Waterskin(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1826" + }, + { + "shop_price": "30", + "examine": "A half empty waterskin with two portions of water.", + "grand_exchange_price": "4", + "durability": null, + "name": "Waterskin(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1827" + }, + { + "durability": null, + "name": "Waterskin(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1828" + }, + { + "shop_price": "30", + "examine": "A nearly empty waterskin with one portion of water.", + "grand_exchange_price": "4", + "durability": null, + "name": "Waterskin(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1829" + }, + { + "durability": null, + "name": "Waterskin(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1830" + }, + { + "shop_price": "30", + "ge_buy_limit": "100", + "examine": "A completely empty waterskin - you'll need to fill it up.", + "grand_exchange_price": "93", + "durability": null, + "name": "Waterskin(0)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1831" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "Waterskin(0)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1832" + }, + { + "remove_sleeves": "true", + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool, light desert shirt.", + "grand_exchange_price": "93", + "durability": null, + "name": "Desert shirt", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1833", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "Desert shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1834" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool, light desert robe.", + "grand_exchange_price": "74", + "durability": null, + "name": "Desert robe", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1835", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Desert robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1836" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Comfortable desert shoes.", + "grand_exchange_price": "257", + "durability": null, + "name": "Desert boots", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1837", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "257", + "durability": null, + "name": "Desert boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1838" + }, + { + "examine": "This key is crudely made. It came from the mining camp Mercenary Captain.", + "durability": null, + "name": "Metal key", + "archery_ticket_price": "0", + "id": "1839" + }, + { + "examine": "A metallic key, usually used by prison guards. (Tourist Trap)", + "durability": null, + "name": "Cell door key", + "archery_ticket_price": "0", + "id": "1840" + }, + { + "examine": "An empty barrel/A Splendid barrel.", + "grand_exchange_price": "206", + "durability": null, + "name": "Barrel", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "1841" + }, + { + "examine": "Inventory: A mining barrel with Ana in it.While in the mine cart: It's Ana... in a barrel... in a mine cart.", + "durability": null, + "name": "Ana in a barrel", + "weight": "32", + "archery_ticket_price": "0", + "id": "1842" + }, + { + "examine": "This key unlocks a very sturdy gate. Ana gave me this key. (Tourist Trap)", + "durability": null, + "name": "Wrought iron key", + "archery_ticket_price": "0", + "id": "1843" + }, + { + "remove_sleeves": "true", + "examine": "A filthy, smelly, flea infested shirt.", + "durability": null, + "name": "Slave shirt", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1844", + "equipment_slot": "4" + }, + { + "examine": "A filthy, smelly, flea infested robe.", + "durability": null, + "name": "Slave robe", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1845", + "equipment_slot": "7" + }, + { + "examine": "A set of filthy, smelly, flea infested desert slave boots.", + "durability": null, + "name": "Slave boots", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "1846", + "equipment_slot": "10" + }, + { + "examine": "A piece of paper with barely legible writing - looks like a recipe!", + "durability": null, + "name": "Scrumpled paper", + "archery_ticket_price": "0", + "id": "1847" + }, + { + "shop_price": "5", + "examine": "Very important information.", + "durability": null, + "name": "Shantay disclaimer", + "archery_ticket_price": "0", + "id": "1848" + }, + { + "examine": "A prototype throwing dart.", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Prototype dart", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1849" + }, + { + "examine": "Plans of a technical nature.", + "durability": null, + "name": "Technical plans", + "weight": "1", + "archery_ticket_price": "0", + "id": "1850" + }, + { + "examine": "The most delicious of pineapples.", + "durability": null, + "name": "Tenti pineapple", + "weight": "1", + "archery_ticket_price": "0", + "id": "1851" + }, + { + "examine": "A key to the chest in Captain Siad's room.", + "durability": null, + "name": "Bedabin key", + "archery_ticket_price": "0", + "id": "1852" + }, + { + "examine": "A protoype dart tip - it looks deadly.", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Prototype dart tip", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1853" + }, + { + "shop_price": "5", + "examine": "Allows you to pass through the Shantay pass into the Kharid Desert.", + "durability": null, + "name": "Shantay pass", + "archery_ticket_price": "0", + "id": "1854" + }, + { + "examine": "A Tourist's Guide to Ardougne.", + "durability": null, + "name": "Guide book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1856" + }, + { + "examine": "The Rantuki tribe's totem.", + "durability": null, + "name": "Totem", + "weight": "3", + "archery_ticket_price": "0", + "id": "1857" + }, + { + "examine": "It says 'To Lord Handelmort, Handelmort Mansion'.", + "durability": null, + "name": "Address label", + "archery_ticket_price": "0", + "id": "1858" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to cook this first / Freshly cooked ugthanki meat.", + "grand_exchange_price": "486", + "durability": null, + "name": "Raw ugthanki meat", + "tradeable": "true", + "weight": "0.75", + "archery_ticket_price": "0", + "id": "1859" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "486", + "durability": null, + "name": "Raw ugthanki meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1860" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to cook this first / Freshly cooked ugthanki meat.", + "grand_exchange_price": "687", + "durability": null, + "name": "Ugthanki meat", + "tradeable": "true", + "weight": "0.75", + "archery_ticket_price": "0", + "id": "1861" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "687", + "durability": null, + "name": "Ugthanki meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1862" + }, + { + "shop_price": "9", + "ge_buy_limit": "1000", + "examine": "I need to cook this.", + "grand_exchange_price": "90", + "durability": null, + "name": "Pitta dough", + "tradeable": "true", + "weight": "0.14", + "archery_ticket_price": "0", + "id": "1863" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "90", + "durability": null, + "name": "Pitta dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1864" + }, + { + "ge_buy_limit": "1000", + "examine": "Nicely baked pitta bread. Needs more ingredients to make a kebab.", + "grand_exchange_price": "22", + "durability": null, + "name": "Pitta bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1865" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "22", + "durability": null, + "name": "Pitta bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1866" + }, + { + "durability": null, + "name": "Burnt pitta bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1868" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of tomatoes in a bowl.", + "grand_exchange_price": "90", + "durability": null, + "name": "Chopped tomato", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1869" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "90", + "durability": null, + "name": "Chopped tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1870" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of onions in a bowl.", + "grand_exchange_price": "142", + "durability": null, + "name": "Chopped onion", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1871" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "142", + "durability": null, + "name": "Chopped onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1872" + }, + { + "ge_buy_limit": "1000", + "examine": "Strips of ugthanki meat in a bowl.", + "grand_exchange_price": "348", + "durability": null, + "name": "Chopped ugthanki", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1873" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "348", + "durability": null, + "name": "Chopped ugthanki", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1874" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of chopped onions and tomatoes in a bowl", + "grand_exchange_price": "31", + "durability": null, + "name": "Onion & tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1875" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "31", + "durability": null, + "name": "Onion & tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1876" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "A mixture of chopped onions and ugthanki meat in a bowl.", + "grand_exchange_price": "330", + "durability": null, + "name": "Ugthanki & onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1877" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "330", + "durability": null, + "name": "Ugthanki & onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1878" + }, + { + "ge_buy_limit": "10000", + "examine": "A mixture of chopped tomatoes and ugthanki meat in a bowl.", + "grand_exchange_price": "331", + "durability": null, + "name": "Ugthanki & tomato", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "1879" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "331", + "durability": null, + "name": "Ugthanki & tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1880" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of chopped tomatoes, onions and ugthanki meat in a bowl", + "grand_exchange_price": "412", + "durability": null, + "name": "Kebab mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1881" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "412", + "durability": null, + "name": "Kebab mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1882" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2027", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1883" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2027", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1884" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1499", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1885" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1499", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1886" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Useful for baking cakes.", + "grand_exchange_price": "20", + "durability": null, + "name": "Cake tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1887" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Cake tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1888" + }, + { + "ge_buy_limit": "1000", + "examine": "Now all I need to do is cook it.", + "grand_exchange_price": "559", + "durability": null, + "name": "Uncooked cake", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1889" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "559", + "durability": null, + "name": "Uncooked cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1890" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "A plain sponge cake.", + "grand_exchange_price": "155", + "durability": null, + "name": "Cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1891" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "155", + "durability": null, + "name": "Cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1892" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "A plain sponge cake.", + "grand_exchange_price": "39", + "durability": null, + "name": "2/3 cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1893" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "39", + "durability": null, + "name": "2/3 cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1894" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "A plain sponge cake.", + "grand_exchange_price": "32", + "durability": null, + "name": "Slice of cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1895" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "32", + "durability": null, + "name": "Slice of cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1896" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks very tasty.", + "grand_exchange_price": "416", + "durability": null, + "name": "Chocolate cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1897" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "416", + "durability": null, + "name": "Chocolate cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1898" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks very tasty.", + "grand_exchange_price": "181", + "durability": null, + "name": "2/3 chocolate cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1899" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "181", + "durability": null, + "name": "2/3 chocolate cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1900" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks very tasty.", + "grand_exchange_price": "13", + "durability": null, + "name": "Chocolate slice", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1901" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Chocolate slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1902" + }, + { + "durability": null, + "name": "Burnt cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1904" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "190", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1905" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "190", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1906" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "171", + "durability": null, + "name": "Wizard's mind bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1907" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "171", + "durability": null, + "name": "Wizard's mind bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1908" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "828", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1909" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "828", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1910" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "487", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1911" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "487", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1912" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "212", + "durability": null, + "name": "Dwarven stout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1913" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "212", + "durability": null, + "name": "Dwarven stout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1914" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A murky glass full of your average, everyday pirate slosh.", + "grand_exchange_price": "19", + "durability": null, + "name": "Grog", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1915" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Grog", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1916" + }, + { + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "202", + "durability": null, + "name": "Beer", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1917", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "202", + "durability": null, + "name": "Beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1918" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "I need to fill this with beer.", + "grand_exchange_price": "10", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1919" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1920" + }, + { + "ge_buy_limit": "100", + "examine": "It's a bowl of water.", + "grand_exchange_price": "97", + "durability": null, + "name": "Bowl of water", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1921" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "97", + "durability": null, + "name": "Bowl of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1922" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "Useful for mixing things.", + "grand_exchange_price": "34", + "durability": null, + "name": "Bowl", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1923" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34", + "durability": null, + "name": "Bowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1924" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "It's an empty bucket.", + "grand_exchange_price": "30", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1925" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1926" + }, + { + "shop_price": "12", + "ge_buy_limit": "1000", + "examine": "It's a bucket of milk.", + "grand_exchange_price": "103", + "durability": null, + "name": "Bucket of milk", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "1927" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "103", + "durability": null, + "name": "Bucket of milk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1928" + }, + { + "ge_buy_limit": "100", + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "72", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1929" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "72", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1930" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "This pot is empty.", + "grand_exchange_price": "6", + "durability": null, + "name": "Empty pot", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "1931" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6", + "durability": null, + "name": "Empty pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1932" + }, + { + "shop_price": "14", + "ge_buy_limit": "1000", + "examine": "There is flour in this pot.", + "grand_exchange_price": "172", + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "1933" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "172", + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1934" + }, + { + "shop_price": "1", + "ge_buy_limit": "10000", + "examine": "This jug is empty.", + "grand_exchange_price": "29", + "durability": null, + "name": "Jug", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1935" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "29", + "durability": null, + "name": "Jug", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1936" + }, + { + "shop_price": "1", + "ge_buy_limit": "10000", + "examine": "It's full of water.", + "grand_exchange_price": "87", + "durability": null, + "name": "Jug of water", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1937" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "87", + "durability": null, + "name": "Jug of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1938" + }, + { + "ge_buy_limit": "5000", + "examine": "A foul smelling thick tar like substance.", + "grand_exchange_price": "103", + "durability": null, + "name": "Swamp tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1939" + }, + { + "shop_price": "38", + "ge_buy_limit": "5000", + "examine": "A tar-like substance mixed with flour and warmed.", + "grand_exchange_price": "342", + "durability": null, + "name": "Raw swamp paste", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1940" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "A tar-like substance mixed with flour and warmed.", + "grand_exchange_price": "1", + "durability": null, + "name": "Swamp paste", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1941" + }, + { + "shop_price": "11", + "ge_buy_limit": "500", + "examine": "This could be used to make a good stew.", + "grand_exchange_price": "91", + "durability": null, + "name": "Potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1942" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "91", + "durability": null, + "name": "Potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1943" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "A nice fresh egg.", + "grand_exchange_price": "99", + "durability": null, + "name": "Egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1944" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "99", + "durability": null, + "name": "Egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1945" + }, + { + "shop_price": "14", + "examine": "There is flour in this pot.", + "grand_exchange_price": "162", + "durability": null, + "name": "Flour", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "1946" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "Some wheat heads.", + "grand_exchange_price": "7", + "durability": null, + "name": "Grain", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "1947" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7", + "durability": null, + "name": "Grain", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1948" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "What a silly hat.", + "grand_exchange_price": "233", + "durability": null, + "name": "Chef's hat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1949", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "233", + "durability": null, + "name": "Chef's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1950" + }, + { + "shop_price": "3", + "ge_buy_limit": "1000", + "examine": "Very bright red berries.", + "grand_exchange_price": "337", + "durability": null, + "name": "Redberries", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1951" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "337", + "durability": null, + "name": "Redberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1952" + }, + { + "ge_buy_limit": "1000", + "examine": "Potentially pastry.", + "grand_exchange_price": "433", + "durability": null, + "name": "Pastry dough", + "tradeable": "true", + "weight": "0.16", + "archery_ticket_price": "0", + "id": "1953" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "433", + "durability": null, + "name": "Pastry dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1954" + }, + { + "shop_price": "36", + "ge_buy_limit": "1000", + "examine": "Keeps the doctor away.", + "grand_exchange_price": "353", + "durability": null, + "name": "Cooking apple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1955" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "353", + "durability": null, + "name": "Cooking apple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1956" + }, + { + "shop_price": "12", + "ge_buy_limit": "1000", + "examine": "A strong smelling onion.", + "grand_exchange_price": "8", + "durability": null, + "name": "Onion", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1957" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8", + "durability": null, + "name": "Onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1958" + }, + { + "ge_buy_limit": "2", + "examine": "Happy Halloween.", + "grand_exchange_price": "273600000", + "durability": null, + "name": "Pumpkin", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1959" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "273600000", + "durability": null, + "name": "Pumpkin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1960" + }, + { + "ge_buy_limit": "2", + "examine": "Happy Easter.", + "grand_exchange_price": "80400000", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1961" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "80400000", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1962" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "263", + "durability": null, + "name": "Banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1963", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "263", + "durability": null, + "name": "Banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1964" + }, + { + "ge_buy_limit": "1000", + "examine": "On ground: Cabbage... yuck!In inventory: Yuck, I don't like cabbage.", + "grand_exchange_price": "41", + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1965" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "41", + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1966" + }, + { + "examine": "On ground: Cabbage... yuck!In inventory: Yuck, I don't like cabbage.", + "grand_exchange_price": "55", + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1967" + }, + { + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1968" + }, + { + "shop_price": "1", + "examine": "A home made spinach thing.", + "durability": null, + "name": "Spinach roll", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1969" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "A meaty kebab.", + "grand_exchange_price": "97", + "durability": null, + "name": "Kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1971" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "97", + "durability": null, + "name": "Kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1972" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Mmmmmmm chocolate.", + "grand_exchange_price": "295", + "durability": null, + "name": "Chocolate bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1973", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "295", + "durability": null, + "name": "Chocolate bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1974" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "It's ground-up chocolate.", + "grand_exchange_price": "370", + "durability": null, + "name": "Chocolate dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1975" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "370", + "durability": null, + "name": "Chocolate dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1976" + }, + { + "examine": "Milk with chocolate in it.", + "durability": null, + "name": "Chocolatey milk", + "weight": "2", + "archery_ticket_price": "0", + "id": "1977" + }, + { + "shop_price": "10", + "ge_buy_limit": "1000", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1978" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1979" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An empty cup.", + "grand_exchange_price": "5", + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1980" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1981" + }, + { + "shop_price": "25", + "ge_buy_limit": "10000", + "examine": "This would make good ketchup.", + "grand_exchange_price": "159", + "durability": null, + "name": "Tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1982" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "159", + "durability": null, + "name": "Tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1983" + }, + { + "shop_price": "1", + "examine": "Rotten to the core!", + "durability": null, + "name": "Rotten apple", + "archery_ticket_price": "0", + "id": "1984" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "It's got holes in it.", + "grand_exchange_price": "188", + "durability": null, + "name": "Cheese", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1985" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "188", + "durability": null, + "name": "Cheese", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1986" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "Good grapes for wine making.", + "grand_exchange_price": "1510", + "durability": null, + "name": "Grapes", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1987" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1510", + "durability": null, + "name": "Grapes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1988" + }, + { + "ge_buy_limit": "2", + "examine": "An optimist would say it is half full.", + "grand_exchange_price": "227700000", + "durability": null, + "name": "Half full wine jug", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1989" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "227700000", + "durability": null, + "name": "Half full wine jug", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1990" + }, + { + "examine": "Oh dear, this wine is terrible!", + "durability": null, + "name": "Jug of bad wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1991" + }, + { + "examine": "Oh dear, this wine is terrible!", + "durability": null, + "name": "Jug of bad wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1992" + }, + { + "shop_price": "128", + "ge_buy_limit": "1000", + "examine": "It's full of wine.", + "grand_exchange_price": "36", + "durability": null, + "name": "Jug of wine", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "1993" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "36", + "durability": null, + "name": "Jug of wine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1994" + }, + { + "examine": "This wine needs to ferment before it can be drunk.", + "durability": null, + "name": "Unfermented wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1995" + }, + { + "examine": "This wine needs to ferment before it can be drunk.", + "durability": null, + "name": "Unfermented wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1996" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "177", + "durability": null, + "name": "Incomplete stew", + "archery_ticket_price": "0", + "id": "1997" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "177", + "durability": null, + "name": "Incomplete stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1998" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "210", + "durability": null, + "name": "Incomplete stew", + "archery_ticket_price": "0", + "id": "1999" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "210", + "durability": null, + "name": "Incomplete stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2000" + }, + { + "shop_price": "1", + "ge_buy_limit": "200", + "examine": "I need to cook this.", + "grand_exchange_price": "600", + "durability": null, + "name": "Uncooked stew", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2001" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "600", + "durability": null, + "name": "Uncooked stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2002" + }, + { + "shop_price": "20", + "ge_buy_limit": "200", + "examine": "It's a meat and potato stew.", + "grand_exchange_price": "1133", + "durability": null, + "name": "Stew", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "2003" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1133", + "durability": null, + "name": "Stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2004" + }, + { + "durability": null, + "name": "Burnt stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2006" + }, + { + "shop_price": "230", + "ge_buy_limit": "1000", + "examine": "This could liven up an otherwise bland stew.", + "grand_exchange_price": "277", + "durability": null, + "name": "Spice", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2007" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "277", + "durability": null, + "name": "Spice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2008" + }, + { + "ge_buy_limit": "200", + "examine": "I need to cook this.", + "grand_exchange_price": "1382", + "durability": null, + "name": "Uncooked curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2009" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1382", + "durability": null, + "name": "Uncooked curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2010" + }, + { + "ge_buy_limit": "200", + "examine": "It's a spicy hot curry.", + "grand_exchange_price": "1001", + "durability": null, + "name": "Curry", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "2011" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1001", + "durability": null, + "name": "Curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2012" + }, + { + "durability": null, + "name": "Burnt curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2014" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "An absolutely clear spirit sold by well-stocked bars.", + "grand_exchange_price": "366", + "durability": null, + "name": "Vodka", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2015" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "durability": null, + "name": "Vodka", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2016" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "This Draynor malt is sold by well-stocked bars.", + "grand_exchange_price": "68", + "durability": null, + "name": "Whisky", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2017" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "68", + "durability": null, + "name": "Whisky", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2018" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A strong spirit that tastes of Juniper; sold at well-stocked bars.", + "grand_exchange_price": "184", + "durability": null, + "name": "Gin", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2019" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "184", + "durability": null, + "name": "Gin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2020" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A strong spirit best served in a large glass.", + "grand_exchange_price": "146", + "durability": null, + "name": "Brandy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2021" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "146", + "durability": null, + "name": "Brandy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2022" + }, + { + "shop_price": "5", + "examine": "A book on tree gnome cocktails.", + "durability": null, + "name": "Cocktail guide", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2023" + }, + { + "durability": null, + "name": "Cocktail guide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2024" + }, + { + "shop_price": "2", + "examine": "Used for mixing cocktails.", + "durability": null, + "name": "Cocktail shaker", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2025" + }, + { + "shop_price": "1", + "examine": "For sipping cocktails.", + "durability": null, + "name": "Cocktail glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2026" + }, + { + "durability": null, + "name": "Cocktail glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2027" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Blurberry Special.", + "grand_exchange_price": "70", + "durability": null, + "name": "Premade blurb' sp.", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2028" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "70", + "durability": null, + "name": "Premade blurb' sp.", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2029" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Chocolate Saturday.", + "grand_exchange_price": "13", + "durability": null, + "name": "Premade choc s'dy", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2030" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Premade choc s'dy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2031" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Drunk Dragon.", + "grand_exchange_price": "34", + "durability": null, + "name": "Premade dr' dragon", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2032" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "34", + "durability": null, + "name": "Premade dr' dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2033" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Fruit Blast.", + "grand_exchange_price": "48", + "durability": null, + "name": "Premade fr' blast", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2034" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "48", + "durability": null, + "name": "Premade fr' blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2035" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Pineapple Punch.", + "grand_exchange_price": "40", + "durability": null, + "name": "Premade p' punch", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2036" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "40", + "durability": null, + "name": "Premade p' punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2037" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Short Green Guy.", + "grand_exchange_price": "33", + "durability": null, + "name": "Premade sgg", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2038" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "33", + "durability": null, + "name": "Premade sgg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2039" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A Premade Wizard Blizzard.", + "grand_exchange_price": "26", + "durability": null, + "name": "Premade wiz blz'd", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2040" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "26", + "durability": null, + "name": "Premade wiz blz'd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2041" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2042" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2043" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2044" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2045" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2046" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2047" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A fresh healthy fruit mix.", + "grand_exchange_price": "285", + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2048" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "285", + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2049" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2050" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2051" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2052" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2053" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "774", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2054" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "774", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2055" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2056" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2057" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2058" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2059" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2060" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2061" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2062" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2063" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "Looks good... smells strong.", + "grand_exchange_price": "5468", + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2064" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5468", + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2065" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2066" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2067" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2068" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2069" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2070" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2071" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2072" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2073" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "272", + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2074" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "272", + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2075" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2076" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2077" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2078" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2079" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A Short Green Guy... looks good.", + "grand_exchange_price": "756", + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2080" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "756", + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2081" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2082" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2083" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A cool refreshing fruit mix.", + "grand_exchange_price": "1802", + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2084" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1802", + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2085" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2086" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2087" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2088" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2089" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2090" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2091" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "506", + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2092" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "506", + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2093" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2094" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2095" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2096" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2097" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2098" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2099" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2100" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2101" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A common fruit, popularly used in cocktails.", + "grand_exchange_price": "86", + "durability": null, + "name": "Lemon", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2102" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "86", + "durability": null, + "name": "Lemon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2103" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a lemon!", + "grand_exchange_price": "29", + "durability": null, + "name": "Lemon chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2104" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "29", + "durability": null, + "name": "Lemon chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2105" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a lemon!", + "grand_exchange_price": "16", + "durability": null, + "name": "Lemon slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2106" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "16", + "durability": null, + "name": "Lemon slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2107" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "A common fruit.", + "grand_exchange_price": "930", + "durability": null, + "name": "Orange", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2108" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "930", + "durability": null, + "name": "Orange", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2109" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh chunks of orange.", + "grand_exchange_price": "46", + "durability": null, + "name": "Orange chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2110" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "46", + "durability": null, + "name": "Orange chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2111" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh orange slices.", + "grand_exchange_price": "163", + "durability": null, + "name": "Orange slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2112" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "163", + "durability": null, + "name": "Orange slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2113" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "It can be cut up into something more manageable with a knife.", + "grand_exchange_price": "45", + "durability": null, + "name": "Pineapple", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "2114" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "45", + "durability": null, + "name": "Pineapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2115" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh chunks of pineapple.", + "grand_exchange_price": "86", + "durability": null, + "name": "Pineapple chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2116" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "86", + "durability": null, + "name": "Pineapple chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2117" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a pineapple!", + "grand_exchange_price": "25", + "durability": null, + "name": "Pineapple ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2118" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "25", + "durability": null, + "name": "Pineapple ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2119" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A common fruit, popularly used in cocktails.", + "grand_exchange_price": "78", + "durability": null, + "name": "Lime", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2120" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "78", + "durability": null, + "name": "Lime", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2121" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh chunks of lime.", + "grand_exchange_price": "16", + "durability": null, + "name": "Lime chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2122" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "16", + "durability": null, + "name": "Lime chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2123" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a lime!", + "grand_exchange_price": "25", + "durability": null, + "name": "Lime slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2124" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "25", + "durability": null, + "name": "Lime slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2125" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "Some rather pretty blue berries picked from a dwellberry bush.", + "grand_exchange_price": "144", + "durability": null, + "name": "Dwellberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2126" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "144", + "durability": null, + "name": "Dwellberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2127" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A common ingredient in gnome cuisine.", + "grand_exchange_price": "275", + "durability": null, + "name": "Equa leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2128" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "275", + "durability": null, + "name": "Equa leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2129" + }, + { + "shop_price": "2", + "ge_buy_limit": "10000", + "examine": "Fresh cream.", + "grand_exchange_price": "58", + "durability": null, + "name": "Pot of cream", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2130" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "58", + "durability": null, + "name": "Pot of cream", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2131" + }, + { + "shop_price": "58", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "282", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2132" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "282", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2133" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "85", + "durability": null, + "name": "Raw rat meat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2134" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "85", + "durability": null, + "name": "Raw rat meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2135" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "307", + "durability": null, + "name": "Raw bear meat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2136" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "307", + "durability": null, + "name": "Raw bear meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2137" + }, + { + "shop_price": "60", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "386", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "2138" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "386", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2139" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "70", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2140" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "70", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2141" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "111", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2142" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "111", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2143" + }, + { + "durability": null, + "name": "Burnt chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2145" + }, + { + "examine": "Oh dear, it's totally burnt!", + "durability": null, + "name": "Burnt meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2146" + }, + { + "durability": null, + "name": "Burnt meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2147" + }, + { + "examine": "A very strange eel.", + "durability": null, + "name": "Raw lava eel", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2148" + }, + { + "examine": "Strange, it looks cooler now it's been cooked.", + "durability": null, + "name": "Lava eel", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "2149" + }, + { + "ge_buy_limit": "10000", + "examine": "A slippery little blighter.", + "grand_exchange_price": "750", + "durability": null, + "name": "Swamp toad", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2150" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "750", + "durability": null, + "name": "Swamp toad", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2151" + }, + { + "ge_buy_limit": "1000", + "examine": "They're a gnome delicacy apparently.", + "grand_exchange_price": "661", + "durability": null, + "name": "Toad's legs", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2152" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "661", + "durability": null, + "name": "Toad's legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2153" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2154" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2155" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Spicy toad's legs", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2156" + }, + { + "durability": null, + "name": "Spicy toad's legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2157" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Seasoned legs", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2158" + }, + { + "durability": null, + "name": "Seasoned legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2159" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Spicy worm", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2160" + }, + { + "durability": null, + "name": "Spicy worm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2161" + }, + { + "ge_buy_limit": "100", + "examine": "They're a gnome delicacy apparently.", + "grand_exchange_price": "24", + "durability": null, + "name": "King worm", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2162" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24", + "durability": null, + "name": "King worm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2163" + }, + { + "shop_price": "1", + "examine": "A deep tin used to make gnome battas in.", + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2164" + }, + { + "shop_price": "10", + "examine": "A shallow tray used to make crunchies in.", + "durability": null, + "name": "Crunchy tray", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2165" + }, + { + "shop_price": "10", + "examine": "A large ovenproof bowl.", + "durability": null, + "name": "Gnomebowl mould", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2166" + }, + { + "examine": "Aluft Gianne's favourite dishes.", + "durability": null, + "name": "Gianne's cook book", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2167" + }, + { + "durability": null, + "name": "Gianne's cook book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2168" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "It's Aluft Gianne's secret mix of spices.", + "grand_exchange_price": "28", + "durability": null, + "name": "Gnome spice", + "tradeable": "true", + "weight": "0.14", + "archery_ticket_price": "0", + "id": "2169" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "28", + "durability": null, + "name": "Gnome spice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2170" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "It's made from a secret recipe.", + "grand_exchange_price": "13", + "durability": null, + "name": "Gianne dough", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2171" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Gianne dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2172" + }, + { + "examine": "This gnome bowl doesn't look very appetizing.", + "durability": null, + "name": "Picture", + "weight": "1", + "archery_ticket_price": "0", + "id": "2173" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2174" + }, + { + "durability": null, + "name": "Burnt gnomebowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2176" + }, + { + "examine": "This gnomebowl is in the early stages of preparation.", + "durability": null, + "name": "Half baked bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2177" + }, + { + "examine": "This gnomebowl needs cooking.", + "durability": null, + "name": "Raw gnomebowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2178" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2179" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2180" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2181" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2182" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2183" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2184" + }, + { + "shop_price": "450", + "ge_buy_limit": "1000", + "examine": "Full of creamy, chocolately goodness.", + "grand_exchange_price": "4400", + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2185" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4400", + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2186" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "2321", + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2187" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2321", + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2188" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2189" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2190" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "454", + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2191" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "454", + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2192" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2193" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2194" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks pretty healthy.", + "grand_exchange_price": "481", + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2195" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "481", + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2196" + }, + { + "examine": "These crunchies don't look very appetising.", + "durability": null, + "name": "Odd crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2197" + }, + { + "durability": null, + "name": "Odd crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2198" + }, + { + "durability": null, + "name": "Burnt crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2200" + }, + { + "examine": "This crunchy is in the early stages of preparation.", + "durability": null, + "name": "Half baked crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2201" + }, + { + "ge_buy_limit": "1000", + "examine": "These crunchies need cooking.", + "grand_exchange_price": "163", + "durability": null, + "name": "Raw crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2202" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2203" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2204" + }, + { + "shop_price": "80", + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "255", + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2205" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "255", + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2206" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2207" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2208" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "Yum... smells good.", + "grand_exchange_price": "816", + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2209" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "816", + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2210" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2211" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2212" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "Yum...smells spicy.", + "grand_exchange_price": "101", + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2213" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "101", + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2214" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2215" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2216" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "1228", + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2217" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1228", + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2218" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Worm Batta.", + "grand_exchange_price": "130", + "durability": null, + "name": "Premade w'm batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2219" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "130", + "durability": null, + "name": "Premade w'm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2220" + }, + { + "ge_buy_limit": "1000", + "examine": "A Premade Toad Batta.", + "grand_exchange_price": "127", + "durability": null, + "name": "Premade t'd batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2221" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "127", + "durability": null, + "name": "Premade t'd batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2222" + }, + { + "ge_buy_limit": "1000", + "examine": "A Premade Cheese and Tomato Batta.", + "grand_exchange_price": "137", + "durability": null, + "name": "Premade c+t batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2223" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "137", + "durability": null, + "name": "Premade c+t batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2224" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Fruit Batta.", + "grand_exchange_price": "131", + "durability": null, + "name": "Premade fr't batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2225" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "131", + "durability": null, + "name": "Premade fr't batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2226" + }, + { + "ge_buy_limit": "1000", + "examine": "A Premade Vegetable Batta.", + "grand_exchange_price": "134", + "durability": null, + "name": "Premade veg batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2227" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "134", + "durability": null, + "name": "Premade veg batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2228" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Chocolate Bomb.", + "grand_exchange_price": "1227", + "durability": null, + "name": "Premade choc bomb", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2229" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1227", + "durability": null, + "name": "Premade choc bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2230" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Tangled Toads Legs.", + "grand_exchange_price": "867", + "durability": null, + "name": "Premade ttl", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2231" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "867", + "durability": null, + "name": "Premade ttl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2232" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Worm Hole.", + "grand_exchange_price": "237", + "durability": null, + "name": "Premade worm hole", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2233" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "237", + "durability": null, + "name": "Premade worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2234" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Vegetable Ball.", + "grand_exchange_price": "233", + "durability": null, + "name": "Premade veg ball", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2235" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "233", + "durability": null, + "name": "Premade veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2236" + }, + { + "ge_buy_limit": "1000", + "examine": "Some Premade Worm Crunchies.", + "grand_exchange_price": "76", + "durability": null, + "name": "Premade w'm crun", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2237" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "76", + "durability": null, + "name": "Premade w'm crun", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2238" + }, + { + "ge_buy_limit": "1000", + "examine": "Some Premade chocchip crunchies.", + "grand_exchange_price": "95", + "durability": null, + "name": "Premade ch' crunch", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2239" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "95", + "durability": null, + "name": "Premade ch' crunch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2240" + }, + { + "ge_buy_limit": "1000", + "examine": "Some premade Spicy Crunchies.", + "grand_exchange_price": "103", + "durability": null, + "name": "Premade s'y crunch", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2241" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "103", + "durability": null, + "name": "Premade s'y crunch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2242" + }, + { + "shop_price": "80", + "ge_buy_limit": "1000", + "examine": "Some premade Toad Crunchies.", + "grand_exchange_price": "43", + "durability": null, + "name": "Premade t'd crunch", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2243" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "43", + "durability": null, + "name": "Premade t'd crunch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2244" + }, + { + "examine": "This batta doesn't look very appetising.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2245" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2246" + }, + { + "durability": null, + "name": "Burnt batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2248" + }, + { + "examine": "This gnome batta is in the early stages of preparation.", + "durability": null, + "name": "Half baked batta", + "archery_ticket_price": "0", + "id": "2249" + }, + { + "shop_price": "1", + "examine": "This gnome batta needs cooking.", + "durability": null, + "name": "Raw batta", + "archery_ticket_price": "0", + "id": "2250" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2251" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2252" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "140", + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2253" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "140", + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2254" + }, + { + "shop_price": "78", + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "271", + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2255" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "271", + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2256" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2257" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2258" + }, + { + "ge_buy_limit": "1000", + "examine": "This smells really good.", + "grand_exchange_price": "260", + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2259" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "260", + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2260" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2261" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2262" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2263" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2264" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2265" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2266" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2267" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2268" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2269" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2270" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2271" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2272" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2273" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2274" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2275" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2276" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "303", + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2277" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "303", + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2278" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2279" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2280" + }, + { + "ge_buy_limit": "1000", + "examine": "Well... It looks healthy.", + "grand_exchange_price": "240", + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2281" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "240", + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2282" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "I need to add some tomato next.", + "grand_exchange_price": "418", + "durability": null, + "name": "Pizza base", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2283" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "418", + "durability": null, + "name": "Pizza base", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2284" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to add some cheese next.", + "grand_exchange_price": "366", + "durability": null, + "name": "Incomplete pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2285" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Incomplete pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2286" + }, + { + "ge_buy_limit": "1000", + "examine": "This needs cooking.", + "grand_exchange_price": "1141", + "durability": null, + "name": "Uncooked pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2287" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1141", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2288" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "A cheese and tomato pizza.", + "grand_exchange_price": "1357", + "durability": null, + "name": "Plain pizza", + "tradeable": "true", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "2289" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1357", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Plain pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2290" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "Half of this plain pizza has been eaten.", + "grand_exchange_price": "238", + "durability": null, + "name": "1/2 plain pizza", + "tradeable": "true", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "2291" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "238", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 plain pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2292" + }, + { + "ge_buy_limit": "1000", + "examine": "A pizza with bits of meat on it.", + "grand_exchange_price": "1012", + "durability": null, + "name": "Meat pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2293" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1012", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Meat pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2294" + }, + { + "ge_buy_limit": "1000", + "examine": "Half of this meat pizza has been eaten.", + "grand_exchange_price": "339", + "durability": null, + "name": "1/2 meat pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2295" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "339", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 meat pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2296" + }, + { + "ge_buy_limit": "1000", + "examine": "A pizza with anchovies.", + "grand_exchange_price": "1573", + "durability": null, + "name": "Anchovy pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2297" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1573", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Anchovy pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2298" + }, + { + "ge_buy_limit": "1000", + "examine": "Half of this anchovy pizza has been eaten.", + "grand_exchange_price": "44", + "durability": null, + "name": "1/2 anchovy pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2299" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "44", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 anchovy pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2300" + }, + { + "ge_buy_limit": "1000", + "examine": "A pizza with bits of pineapple on it.", + "grand_exchange_price": "1469", + "durability": null, + "name": "Pineapple pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2301" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1469", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Pineapple pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2302" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "156", + "examine": "Half of this pineapple pizza has been eaten.", + "durability": null, + "name": "1/2 p'apple pizza", + "archery_ticket_price": "0", + "id": "2303" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 p'apple pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2304" + }, + { + "examine": "Oh dear!", + "durability": null, + "name": "Burnt pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2306" + }, + { + "ge_buy_limit": "1000", + "examine": "Some uncooked dough.", + "grand_exchange_price": "158", + "durability": null, + "name": "Bread dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2307" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "158", + "durability": null, + "name": "Bread dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2308" + }, + { + "shop_price": "24", + "ge_buy_limit": "1000", + "examine": "Nice crispy bread.", + "grand_exchange_price": "110", + "durability": null, + "name": "Bread", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2309" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "110", + "durability": null, + "name": "Bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2310" + }, + { + "durability": null, + "name": "Burnt bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2312" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Deceptively pie shaped.", + "grand_exchange_price": "174", + "durability": null, + "name": "Pie dish", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2313" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "174", + "durability": null, + "name": "Pie dish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2314" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to find a filling for this pie.", + "grand_exchange_price": "887", + "durability": null, + "name": "Pie shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2315" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "887", + "durability": null, + "name": "Pie shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2316" + }, + { + "ge_buy_limit": "1000", + "examine": "This would be much tastier cooked.", + "grand_exchange_price": "781", + "durability": null, + "name": "Uncooked apple pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2317" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "781", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked apple pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2318" + }, + { + "ge_buy_limit": "1000", + "examine": "This would be much healthier cooked.", + "grand_exchange_price": "747", + "durability": null, + "name": "Uncooked meat pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2319" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "747", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2320" + }, + { + "ge_buy_limit": "1000", + "examine": "This would be much more appetising cooked.", + "grand_exchange_price": "802", + "durability": null, + "name": "Uncooked berry pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2321" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "802", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked berry pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2322" + }, + { + "shop_price": "140", + "ge_buy_limit": "1000", + "examine": "Mmm Apple pie.", + "grand_exchange_price": "246", + "durability": null, + "name": "Apple pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2323" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "246", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Apple pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2324" + }, + { + "ge_buy_limit": "1000", + "examine": "Looks tasty.", + "grand_exchange_price": "534", + "durability": null, + "name": "Redberry pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2325" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "534", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Redberry pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2326" + }, + { + "shop_price": "16", + "ge_buy_limit": "1000", + "grand_exchange_price": "160", + "examine": "Not for vegetarians.", + "durability": null, + "name": "Meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2327" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2328" + }, + { + "examine": "I think I left it on the stove too long.", + "durability": null, + "name": "Burnt pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2330" + }, + { + "shop_price": "16", + "ge_buy_limit": "1000", + "grand_exchange_price": "174", + "examine": "Half of it is suitable for vegetarians.", + "durability": null, + "name": "Half a meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2331" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "174", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2332" + }, + { + "ge_buy_limit": "1000", + "examine": "So tasty I kept some for later.", + "grand_exchange_price": "248", + "durability": null, + "name": "Half a redberry pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2333" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "248", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a redberry pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2334" + }, + { + "shop_price": "140", + "ge_buy_limit": "1000", + "examine": "Mmm half an apple pie.", + "grand_exchange_price": "146", + "durability": null, + "name": "Half an apple pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2335" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "146", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half an apple pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2336" + }, + { + "ge_buy_limit": "1000", + "examine": "Raw meat from the oomlie bird.", + "grand_exchange_price": "155", + "durability": null, + "name": "Raw oomlie", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2337" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "155", + "durability": null, + "name": "Raw oomlie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2338" + }, + { + "examine": "A thick green palm leaf used by natives to cook meat.", + "durability": null, + "name": "Palm leaf", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2339" + }, + { + "examine": "A thick green palm leaf used by natives to cook meat.", + "durability": null, + "name": "Palm leaf", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2340" + }, + { + "ge_buy_limit": "1000", + "examine": "Oomlie meat in a palm leaf pouch. It just needs to be cooked.", + "grand_exchange_price": "814", + "durability": null, + "name": "Wrapped oomlie", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2341" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "814", + "durability": null, + "name": "Wrapped oomlie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2342" + }, + { + "ge_buy_limit": "1000", + "examine": "Deliciously cooked oomlie meat in a palm leaf pouch.", + "grand_exchange_price": "1126", + "durability": null, + "name": "Cooked oomlie wrap", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2343" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1126", + "durability": null, + "name": "Cooked oomlie wrap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2344" + }, + { + "durability": null, + "name": "Burnt oomlie wrap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2346" + }, + { + "shop_price": "13", + "ge_buy_limit": "1000", + "examine": "Good for hitting things!", + "grand_exchange_price": "37", + "durability": null, + "name": "Hammer", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "2347" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "37", + "durability": null, + "name": "Hammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2348" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "It's a bar of bronze.", + "grand_exchange_price": "268", + "durability": null, + "name": "Bronze bar", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "2349" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "268", + "durability": null, + "name": "Bronze bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2350" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of iron.", + "grand_exchange_price": "493", + "durability": null, + "name": "Iron bar", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "2351" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "493", + "durability": null, + "name": "Iron bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2352" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of steel.", + "grand_exchange_price": "1266", + "durability": null, + "name": "Steel bar", + "tradeable": "true", + "weight": "1.81", + "archery_ticket_price": "0", + "id": "2353" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1266", + "durability": null, + "name": "Steel bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2354" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of silver.", + "grand_exchange_price": "274", + "durability": null, + "name": "Silver bar", + "tradeable": "true", + "weight": "1.81", + "archery_ticket_price": "0", + "id": "2355" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "274", + "durability": null, + "name": "Silver bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2356" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of gold.", + "grand_exchange_price": "107", + "durability": null, + "name": "Gold bar", + "tradeable": "true", + "weight": "1.81", + "archery_ticket_price": "0", + "id": "2357" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "107", + "durability": null, + "name": "Gold bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2358" + }, + { + "shop_price": "120", + "ge_buy_limit": "10000", + "examine": "It's a bar of mithril.", + "grand_exchange_price": "1920", + "durability": null, + "name": "Mithril bar", + "tradeable": "true", + "weight": "1.6", + "archery_ticket_price": "0", + "id": "2359" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1920", + "durability": null, + "name": "Mithril bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2360" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of adamant.", + "grand_exchange_price": "3306", + "durability": null, + "name": "Adamantite bar", + "tradeable": "true", + "weight": "2.04", + "archery_ticket_price": "0", + "id": "2361" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3306", + "durability": null, + "name": "Adamantite bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2362" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of rune.", + "grand_exchange_price": "13300", + "durability": null, + "name": "Runite bar", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2363" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "13300", + "durability": null, + "name": "Runite bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2364" + }, + { + "examine": "It's a 'perfect' golden bar.", + "durability": null, + "name": "'perfect' gold bar", + "weight": "2", + "archery_ticket_price": "0", + "id": "2365" + }, + { + "requirements": "{13,60}", + "ge_buy_limit": "100", + "examine": "The left half of a Dragon Square Shield.", + "grand_exchange_price": "65800", + "durability": null, + "name": "Shield left half", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2366" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65800", + "durability": null, + "name": "Shield left half", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2367" + }, + { + "requirements": "{13,60}", + "shop_price": "750000", + "ge_buy_limit": "100", + "examine": "The right half of a dragon square shield.", + "grand_exchange_price": "743100", + "durability": null, + "name": "Shield right half", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2368" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "743100", + "durability": null, + "name": "Shield right half", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2369" + }, + { + "shop_price": "100", + "ge_buy_limit": "5000", + "examine": "A set of studs for leather armour.", + "grand_exchange_price": "792", + "durability": null, + "name": "Steel studs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2370" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "792", + "durability": null, + "name": "Steel studs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2371" + }, + { + "destroy_message": "This item will likely break if you put it down, and you will have to go looking for another one.", + "examine": "An old statue of an ogre warrior.", + "durability": null, + "name": "Ogre relic", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2372" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Part of an ogre relic.", + "durability": null, + "name": "Relic part 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2373" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Part of an ogre relic.", + "durability": null, + "name": "Relic part 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2374" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Part of an ogre relic.", + "durability": null, + "name": "Relic part 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2375" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "It's a map.", + "durability": null, + "name": "Skavid map", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "2376" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Very tooth-like.", + "durability": null, + "name": "Ogre tooth", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2377" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Formerly the property of the ogre, Toban", + "durability": null, + "name": "Toban's key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2378" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Handy if you want to break all your teeth.", + "durability": null, + "name": "Rock cake", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2379" + }, + { + "destroy_message": "This item will likely break if you put it down here, and you will have to go looking for another.", + "examine": "Eeeeyeeew!", + "durability": null, + "name": "Fingernails", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2384" + }, + { + "examine": "I can't wear this old thing.", + "durability": null, + "name": "Old robe", + "weight": "1", + "archery_ticket_price": "0", + "id": "2385" + }, + { + "examine": "Looks kind of useless.", + "durability": null, + "name": "Unusual armour", + "weight": "4", + "archery_ticket_price": "0", + "id": "2386" + }, + { + "examine": "Pointy.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Damaged dagger", + "archery_ticket_price": "0", + "id": "2387" + }, + { + "examine": "Useless as an eye patch.", + "durability": null, + "name": "Tattered eye patch", + "archery_ticket_price": "0", + "id": "2388" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "An empty glass vial.", + "grand_exchange_price": "1", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2389" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "An empty glass vial.", + "grand_exchange_price": "1", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2390" + }, + { + "ge_buy_limit": "100", + "examine": "Let's see it fly, now!", + "grand_exchange_price": "350", + "durability": null, + "name": "Ground bat bones", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2391" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "350", + "durability": null, + "name": "Ground bat bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2392" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "It's a stolen bar of gold.", + "durability": null, + "name": "Toban's gold", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2393" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This is meant to be good for spots.", + "grand_exchange_price": "157", + "durability": null, + "name": "Potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2394" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A dangerous magical liquid.", + "durability": null, + "name": "Magic ogre potion", + "archery_ticket_price": "0", + "id": "2395", + "equipment_slot": "3" + }, + { + "examine": "A spell is written on this parchment.", + "durability": null, + "name": "Spell scroll", + "archery_ticket_price": "0", + "id": "2396" + }, + { + "examine": "A tattered old robe.", + "durability": null, + "name": "Shaman robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "2397" + }, + { + "examine": "Deadly.", + "durability": null, + "name": "Cave nightshade", + "archery_ticket_price": "0", + "id": "2398" + }, + { + "turn90cw_anim": "821", + "examine": "The magical sword 'Silverlight'. / The magical sword 'Silverlight', stained black with mushroom ink. (during Shadow of the Storm)", + "walk_anim": "819", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "822", + "attack_speed": "5", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "defence_anim": "388", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "808", + "name": "Silverlight", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "2402", + "stand_turn_anim": "823", + "bonuses": "9,14,-2,0,0,0,3,2,1,0,0,12,0,0,0" + }, + { + "examine": "Scroll containing a powerful enchantment of restoration.", + "durability": null, + "name": "Hazeel scroll", + "weight": "1", + "archery_ticket_price": "0", + "id": "2403" + }, + { + "remove_sleeves": "true", + "examine": "Decorative armour; an heirloom of the Carnillean family.", + "durability": null, + "name": "Carnillean armour", + "weight": "9", + "archery_ticket_price": "0", + "id": "2405", + "bonuses": "0,0,0,0,0,20,14,8,0,0,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "A sign of my commitment to Hazeel.", + "durability": null, + "name": "Hazeel's mark", + "archery_ticket_price": "0", + "id": "2406", + "equipment_slot": "2" + }, + { + "examine": "A child's ball.", + "durability": null, + "name": "Ball", + "archery_ticket_price": "0", + "id": "2407" + }, + { + "examine": "A key to the Witch's house's front door. (Witch's House)", + "durability": null, + "name": "Door key", + "archery_ticket_price": "0", + "id": "2409" + }, + { + "examine": "A very attractive magnet.", + "durability": null, + "name": "Magnet", + "archery_ticket_price": "0", + "id": "2410" + }, + { + "examine": "A cape from the almighty god Saradomin.", + "durability": null, + "name": "Saradomin cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2412", + "bonuses": "0,0,0,10,0,1,1,2,10,0,5,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A cape from the almighty god Guthix.", + "durability": null, + "name": "Guthix cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2413", + "bonuses": "0,0,0,10,0,1,1,2,10,0,5,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A cape from the almighty god Zamorak.", + "durability": null, + "name": "Zamorak cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2414", + "bonuses": "0,0,0,10,0,1,1,2,10,0,5,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "80000", + "examine": "A magical staff imbued with the power of Saradomin.", + "durability": null, + "weight": "2.2", + "attack_speed": "4", + "weapon_interface": "1", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "attack_audios": "2555,0,0,0", + "name": "Saradomin staff", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "2415", + "bonuses": "-1,-1,6,6,0,2,3,1,6,0,0,2,0,0,0" + }, + { + "shop_price": "80000", + "examine": "A magical staff imbued with the power of Guthix.", + "durability": null, + "weight": "2", + "attack_speed": "4", + "weapon_interface": "1", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "attack_audios": "2555,0,0,0", + "name": "Guthix staff", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "2416", + "bonuses": "-1,-1,6,6,0,2,3,1,6,0,0,2,0,0,0" + }, + { + "shop_price": "80000", + "turn90cw_anim": "1207", + "examine": "A magical staff imbued with the power of Zamorak.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Zamorak staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "2417", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,6,6,0,2,3,1,6,0,0,2,0,0,0" + }, + { + "examine": "A grey woollen wig.", + "durability": null, + "name": "Wig", + "archery_ticket_price": "0", + "id": "2419" + }, + { + "examine": "A grey woollen wig.", + "durability": null, + "name": "Wig", + "archery_ticket_price": "0", + "id": "2421" + }, + { + "lendable": "true", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "2147483647", + "durability": null, + "name": "Blue partyhat", + "archery_ticket_price": "0", + "id": "2422" + }, + { + "examine": "Imprint of a key in a lump of clay.", + "durability": null, + "name": "Key print", + "archery_ticket_price": "0", + "id": "2423" + }, + { + "examine": "A bottle of skin coloured paste.", + "durability": null, + "name": "Paste", + "archery_ticket_price": "0", + "id": "2424" + }, + { + "attack_audios": "2704,0,0,0", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2425" + }, + { + "durability": null, + "name": "Burnt oomlie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2427" + }, + { + "shop_price": "8002", + "ge_buy_limit": "100", + "examine": "4 doses of Attack potion.", + "grand_exchange_price": "275", + "durability": null, + "name": "Attack potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2428" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "275", + "durability": null, + "name": "Attack potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2429" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "4 doses of restore potion.", + "grand_exchange_price": "101", + "durability": null, + "name": "Restore potion(4)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "2430" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "101", + "durability": null, + "name": "Restore potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2431" + }, + { + "shop_price": "7832", + "ge_buy_limit": "100", + "examine": "4 doses of Defence Potion.", + "grand_exchange_price": "448", + "durability": null, + "name": "Defence potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2432" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "448", + "durability": null, + "name": "Defence potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2433" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Prayer restore potion.", + "grand_exchange_price": "5687", + "durability": null, + "name": "Prayer potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2434" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5687", + "durability": null, + "name": "Prayer potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2435" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "examine": "4 doses of super Attack potion.", + "grand_exchange_price": "898", + "durability": null, + "name": "Super attack(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2436" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "grand_exchange_price": "898", + "durability": null, + "name": "Super attack(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2437" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Fishing potion.", + "grand_exchange_price": "73", + "durability": null, + "name": "Fishing potion(4)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "2438" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "73", + "durability": null, + "name": "Fishing potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2439" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "examine": "4 doses of super Strength potion.", + "grand_exchange_price": "2278", + "durability": null, + "name": "Super strength(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2440" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "grand_exchange_price": "2278", + "durability": null, + "name": "Super strength(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2441" + }, + { + "shop_price": "7000", + "ge_buy_limit": "1000", + "examine": "4 doses of super Defence potion.", + "grand_exchange_price": "153", + "durability": null, + "name": "Super defence(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2442" + }, + { + "shop_price": "7000", + "ge_buy_limit": "1000", + "grand_exchange_price": "153", + "durability": null, + "name": "Super defence(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2443" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of ranging potion.", + "grand_exchange_price": "8317", + "durability": null, + "name": "Ranging potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2444" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8317", + "durability": null, + "name": "Ranging potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2445" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "4 doses of antipoison potion.", + "grand_exchange_price": "1624", + "durability": null, + "name": "Antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2446" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1624", + "durability": null, + "name": "Antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2447" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of super anti poison potion.", + "grand_exchange_price": "1062", + "durability": null, + "name": "Super antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2448" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1062", + "durability": null, + "name": "Super antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2449" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of Zamorak brew.", + "grand_exchange_price": "2838", + "durability": null, + "name": "Zamorak brew(4)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2450" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2838", + "durability": null, + "name": "Zamorak brew(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2451" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of anti-firebreath potion.", + "grand_exchange_price": "4743", + "durability": null, + "name": "Antifire potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2452" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4743", + "durability": null, + "name": "Antifire potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2453" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of anti-firebreath potion.", + "grand_exchange_price": "3518", + "durability": null, + "name": "Antifire potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2454" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3518", + "durability": null, + "name": "Antifire potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2455" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of anti-firebreath potion.", + "grand_exchange_price": "2291", + "durability": null, + "name": "Antifire potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2456" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2291", + "durability": null, + "name": "Antifire potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2457" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of anti-firebreath potion.", + "grand_exchange_price": "1099", + "durability": null, + "name": "Antifire potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2458" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1099", + "durability": null, + "name": "Antifire potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2459" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "704", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2460", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "704", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2461" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "704", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2462", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "704", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2463" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "638", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2464", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "638", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2465" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "629", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2466", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "629", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2467" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "639", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2468", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "639", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2469" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "613", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2470", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "613", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2471" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "711", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2472", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "711", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2473" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "48700", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2474", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48700", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2475" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "5975", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2476", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5975", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2477" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "7274", + "durability": null, + "name": "Clean lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2481" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7274", + "durability": null, + "name": "Clean lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2482" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this lantadyme potion.", + "grand_exchange_price": "6940", + "durability": null, + "name": "Lantadyme potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2483" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6940", + "durability": null, + "name": "Lantadyme potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2484" + }, + { + "requirements": "{15,67}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2485" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7210", + "durability": null, + "name": "Grimy lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2486" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "1705", + "name": "Blue d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2487", + "bonuses": "0,0,0,-10,9,4,3,5,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1705", + "durability": null, + "name": "Blue d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2488" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "5000", + "examine": "Vambraces made from 100% real dragonhide.", + "durability": null, + "weight": "0.25", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "2046", + "name": "Red d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2489", + "bonuses": "0,0,0,-10,10,5,4,6,6,0,5,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2046", + "durability": null, + "name": "Red d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2490" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "5000", + "examine": "Vambraces made from 100% real dragonhide.", + "durability": null, + "weight": "0.25", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "2506", + "name": "Black d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2491", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2506", + "durability": null, + "name": "Black d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2492" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,5,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2504", + "name": "Blue d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2493", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2504", + "durability": null, + "name": "Blue d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2494" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,6,3", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "3142", + "name": "Red d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2495", + "bonuses": "0,0,0,-10,14,28,22,30,20,28,25,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3142", + "durability": null, + "name": "Red d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2496" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,7,3", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "4744", + "name": "Black d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2497", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4744", + "durability": null, + "name": "Black d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2498" + }, + { + "requirements": "{1,40}-{4,50}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "5420", + "name": "Blue d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2499", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5420", + "durability": null, + "name": "Blue d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2500" + }, + { + "requirements": "{1,40}-{4,60}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "6680", + "name": "Red d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2501", + "bonuses": "0,0,0,-15,25,50,42,55,40,50,50,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "6680", + "durability": null, + "name": "Red d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2502" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "8098", + "name": "Black d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2503", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "8098", + "durability": null, + "name": "Black d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2504" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared blue dragonhide.", + "grand_exchange_price": "2888", + "durability": null, + "name": "Blue d-leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "2505" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2888", + "durability": null, + "name": "Blue d-leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2506" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared red dragonhide.", + "grand_exchange_price": "4464", + "durability": null, + "name": "Red dragon leather", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2507" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4464", + "durability": null, + "name": "Red dragon leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2508" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared black dragonhide.", + "grand_exchange_price": "6664", + "durability": null, + "name": "Black d-leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "2509" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6664", + "durability": null, + "name": "Black d-leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2510" + }, + { + "shop_price": "4", + "examine": "A number of wooden logs.", + "grand_exchange_price": "124", + "durability": null, + "name": "Logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2511" + }, + { + "lendable": "true", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "2902937", + "rare_item": "true", + "durability": null, + "name": "Dragon chainbody", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "2513", + "absorb": "4,0,9", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "shop_price": "6", + "examine": "I should try cooking this.", + "grand_exchange_price": "6", + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2514" + }, + { + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2515" + }, + { + "shop_price": "14", + "examine": "There is flour in this pot.", + "grand_exchange_price": "162", + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "2516" + }, + { + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2517" + }, + { + "shop_price": "1", + "examine": "Pretty smelly.", + "durability": null, + "name": "Rotten tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2518" + }, + { + "durability": null, + "name": "Rotten tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2519" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2520" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2521" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2522" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2523" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2524" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2525" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2526" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2527" + }, + { + "bankable": "false", + "examine": "Wonder what happens if I rub it...", + "durability": null, + "name": "Lamp", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2528" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "2529" + }, + { + "shop_price": "140", + "grand_exchange_price": "140", + "durability": null, + "name": "Bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2530" + }, + { + "durability": null, + "name": "Bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2531" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with iron heads and oil-soaked cloth. lit: An easy to make, iron-headed fire arrow.", + "grand_exchange_price": "316", + "durability": null, + "name": "Iron fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2532", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with iron heads and oil-soaked cloth. lit: An easy to make, iron-headed fire arrow.", + "grand_exchange_price": "305", + "durability": null, + "name": "Iron fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2533", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with steel heads and oil-soaked cloth. lit: An easy to make, steel-headed fire arrow.", + "grand_exchange_price": "325", + "durability": null, + "name": "Steel fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2534", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with steel heads and oil-soaked cloth. lit: An easy to make, steel-headed fire arrow.", + "grand_exchange_price": "327", + "durability": null, + "name": "Steel fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2535", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with mithril heads and oil-soaked cloth. lit: An easy to make, mithril-headed fire arrow.", + "grand_exchange_price": "9", + "durability": null, + "name": "Mithril fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2536", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with mithril heads and oil-soaked cloth. lit: An easy to make, mithril-headed fire arrow.", + "grand_exchange_price": "63", + "durability": null, + "name": "Mithril fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2537", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with adamant heads and oil-soaked cloth.lit: An easy-to-make, Adamant-headed fire arrow.", + "grand_exchange_price": "90", + "durability": null, + "name": "Adamant fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2538", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with adamant heads and oil-soaked cloth.lit: An easy-to-make, Adamant-headed fire arrow.", + "grand_exchange_price": "127", + "durability": null, + "name": "Adamant fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2539", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "An easy to make, rune-headed fire arrow.", + "grand_exchange_price": "539", + "durability": null, + "name": "Rune fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2540", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "An easy to make, rune-headed fire arrow.", + "grand_exchange_price": "682", + "durability": null, + "name": "Rune fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2541", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "5000", + "examine": "An enchanted ring.", + "grand_exchange_price": "943", + "durability": null, + "name": "Ring of recoil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2550", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "943", + "durability": null, + "name": "Ring of recoil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2551" + }, + { + "shop_price": "770", + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "1237", + "durability": null, + "name": "Ring of duelling(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2552", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1237", + "durability": null, + "name": "Ring of duelling(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2553" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2554", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2555" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2556", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2557" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2558", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2559" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2560", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2561" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2562", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2563" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2564", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2565" + }, + { + "shop_price": "770", + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "594", + "durability": null, + "name": "Ring of duelling(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2566", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "594", + "durability": null, + "name": "Ring of duelling(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2567" + }, + { + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "1103", + "durability": null, + "name": "Ring of forging", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2568", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1103", + "durability": null, + "name": "Ring of forging", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2569" + }, + { + "shop_price": "3000", + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "4540", + "durability": null, + "name": "Ring of life", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2570", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4540", + "durability": null, + "name": "Ring of life", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2571" + }, + { + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2572", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2573" + }, + { + "examine": "Used by navigators to find their position in RuneScape.", + "durability": null, + "name": "Sextant", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2574" + }, + { + "examine": "A fine looking time piece.", + "durability": null, + "name": "Watch", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2575" + }, + { + "examine": "A navigator's chart of RuneScape.", + "durability": null, + "name": "Chart", + "archery_ticket_price": "0", + "id": "2576" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Lightweight boots ideal for rangers.", + "durability": null, + "weight": "0.2", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "13900000", + "name": "Ranger boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2577", + "bonuses": "0,0,0,-10,8,2,3,4,2,0,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "13900000", + "durability": null, + "name": "Ranger boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2578" + }, + { + "requirements": "{6,20}", + "ge_buy_limit": "2", + "examine": "Slightly magical boots.", + "durability": null, + "weight": "1", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "747300", + "name": "Wizard boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2579", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "747300", + "durability": null, + "name": "Wizard boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2580" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Endorsed by Robin Hood.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "4400000", + "name": "Robin hood hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2581", + "bonuses": "0,0,0,-10,8,4,6,8,4,4,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "4400000", + "durability": null, + "name": "Robin hood hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2582" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "74900", + "name": "Black platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2583", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "74900", + "durability": null, + "name": "Black platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2584" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platelegs with trim.", + "grand_exchange_price": "39900", + "durability": null, + "name": "Black platelegs (t)", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "2585", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "39900", + "durability": null, + "name": "Black platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2586" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "100", + "examine": "Black full helmet with trim.", + "durability": null, + "weight": "2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "82200", + "name": "Black full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2587", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "82200", + "durability": null, + "name": "Black full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2588" + }, + { + "requirements": "{1,10}", + "shop_price": "2072", + "ge_buy_limit": "2", + "examine": "Black kiteshield with trim.", + "durability": null, + "weight": "5", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "73000", + "name": "Black kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2589", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "73000", + "durability": null, + "name": "Black kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2590" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "589000", + "name": "Black platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2591", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "589000", + "durability": null, + "name": "Black platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2592" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platelegs with gold trim.", + "grand_exchange_price": "216700", + "durability": null, + "name": "Black platelegs (g)", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "2593", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "216700", + "durability": null, + "name": "Black platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2594" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "100", + "examine": "Black full helmet with gold trim.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "364800", + "name": "Black full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2595", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "364800", + "durability": null, + "name": "Black full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2596" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black kiteshield with gold trim.", + "durability": null, + "weight": "5", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "355600", + "name": "Black kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2597", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "355600", + "durability": null, + "name": "Black kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2598" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "104000", + "name": "Adam platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2599", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "104000", + "durability": null, + "name": "Adam platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2600" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "2", + "examine": "These look heavy", + "durability": null, + "weight": "10", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "23200", + "name": "Adam platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2601", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "23200", + "durability": null, + "name": "Adam platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2602" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.8", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "49100", + "name": "Adam kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2603", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "49100", + "durability": null, + "name": "Adam kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2604" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant full helm with trim", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "85000", + "name": "Adam full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2605", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "85000", + "durability": null, + "name": "Adam full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2606" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "359500", + "name": "Adam platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2607", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "359500", + "durability": null, + "name": "Adam platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2608" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "2", + "examine": "Adamant platelegs with gold trim.", + "durability": null, + "weight": "10", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "94300", + "name": "Adam platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2609", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "94300", + "durability": null, + "name": "Adam platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2610" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant kiteshield with gold trim.", + "durability": null, + "weight": "6", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "170100", + "name": "Adam kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2611", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "170100", + "durability": null, + "name": "Adam kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2612" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant full helmet with gold trim.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "222400", + "name": "Adam full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2613", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "222400", + "durability": null, + "name": "Adam full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2614" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "426200", + "name": "Rune platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2615", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "426200", + "durability": null, + "name": "Rune platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2616" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "ge_buy_limit": "2", + "examine": "Rune platelegs with gold trim.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "243400", + "name": "Rune platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2617", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "243400", + "durability": null, + "name": "Rune platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2618" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "35000", + "ge_buy_limit": "100", + "examine": "Rune full helmet with gold trim.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "506800", + "name": "Rune full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2619", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "506800", + "durability": null, + "name": "Rune full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2620" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield with gold trim", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "392700", + "name": "Rune kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2621", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "392700", + "durability": null, + "name": "Rune kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2622" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "162700", + "name": "Rune platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2623", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "162700", + "durability": null, + "name": "Rune platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2624" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs with trim!", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "95400", + "name": "Rune platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2625", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "95400", + "durability": null, + "name": "Rune platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2626" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune full helmet with trim.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "216600", + "name": "Rune full helm (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2627", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "216600", + "durability": null, + "name": "Rune full helm (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2628" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A large, metal shield with a nice trim.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "160300", + "name": "Rune kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2629", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "160300", + "durability": null, + "name": "Rune kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2630" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Your money or your life!", + "grand_exchange_price": "83500", + "durability": null, + "name": "Highwayman mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2631", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "83500", + "durability": null, + "name": "Highwayman mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2632" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "34300", + "durability": null, + "name": "Blue beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2633", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "34300", + "durability": null, + "name": "Blue beret", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2634" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Parlez-vous francais?(Do you speak French?)", + "grand_exchange_price": "117500", + "durability": null, + "name": "Black beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2635", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "117500", + "durability": null, + "name": "Black beret", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2636" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "328000", + "durability": null, + "name": "White beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2637", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "328000", + "durability": null, + "name": "White beret", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2638" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "All for one and one for all!", + "grand_exchange_price": "29100", + "durability": null, + "name": "Tan cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2639", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "29100", + "durability": null, + "name": "Tan cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2640" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "All for one and one for all!", + "grand_exchange_price": "23600", + "durability": null, + "name": "Dark cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2641", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "23600", + "durability": null, + "name": "Dark cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2642" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "All for one and one for all!", + "grand_exchange_price": "384500", + "durability": null, + "name": "Black cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2643", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "384500", + "durability": null, + "name": "Black cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2644" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A minimalist's hat.", + "grand_exchange_price": "91300", + "durability": null, + "name": "Red headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2645", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "91300", + "durability": null, + "name": "Red headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2646" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A minimalist's hat.", + "grand_exchange_price": "32900", + "durability": null, + "name": "Black headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2647", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32900", + "durability": null, + "name": "Black headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2648" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A minimalist's hat.", + "grand_exchange_price": "17800", + "durability": null, + "name": "Brown headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2649", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "17800", + "durability": null, + "name": "Brown headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2650" + }, + { + "ge_buy_limit": "2", + "examine": "Shiver me timbers!", + "grand_exchange_price": "82500", + "durability": null, + "name": "Pirate's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2651", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "82500", + "durability": null, + "name": "Pirate's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2652" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "809000", + "name": "Zamorak platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2653", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "809000", + "durability": null, + "name": "Zamorak platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2654" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "281500", + "name": "Zamorak platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2655", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "281500", + "durability": null, + "name": "Zamorak platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2656" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A full helmet in the colours of Zamorak.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "601500", + "name": "Zamorak full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2657", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "601500", + "durability": null, + "name": "Zamorak full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2658" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A Rune kiteshield in the colours of Zamorak.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "499500", + "name": "Zamorak kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2659", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "499500", + "durability": null, + "name": "Zamorak kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2660" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody in the colours of Saradomin.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "1600000", + "name": "Saradomin platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2661", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Saradomin platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2662" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs in the colours of Saradomin.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "444000", + "name": "Saradomin platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2663", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "444000", + "durability": null, + "name": "Saradomin platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2664" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune full helmet in the colours of Saradomin.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1100000", + "name": "Saradomin full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2665", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Saradomin full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2666" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield in the colours of Saradomin.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "795900", + "name": "Saradomin kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2667", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "795900", + "durability": null, + "name": "Saradomin kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2668" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody in the colours of Guthix.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "307900", + "name": "Guthix platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2669", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "307900", + "durability": null, + "name": "Guthix platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2670" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs in the colours of Guthix.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "169900", + "name": "Guthix platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2671", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "169900", + "durability": null, + "name": "Guthix platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2672" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune full helmet in the colours of Guthix.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "323100", + "name": "Guthix full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2673", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,1,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "323100", + "durability": null, + "name": "Guthix full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2674" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield in the colours of Guthix.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "247300", + "name": "Guthix kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2675", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "247300", + "durability": null, + "name": "Guthix kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2676" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2677" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2678" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2679" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2680" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2681" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2682" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2683" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2684" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2685" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2686" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2687" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2688" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2689" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2690" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2691" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2692" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2693" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2694" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2695" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2696" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2697" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2698" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2699" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2700" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2701" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2702" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2703" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2704" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2705" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2706" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2707" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2708" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2709" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2710" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2711" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2712" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2713" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2714" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2715" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2716" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2717" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2718" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2719" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2720" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2721" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2722" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2723" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2724" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2725" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2726" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2727" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2728" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2729" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2730" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2731" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2732" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2733" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2734" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2735" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2736" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2737" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2738" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2739" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2740" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2741" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2742" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2743" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2744" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2745" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2746" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2747" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2748" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2773" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2774" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2775" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2776" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2777" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2778" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2779" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2780" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2781" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2782" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2783" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2784" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2785" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2786" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2787" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2788" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2789" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2790" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2791" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2792" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2793" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2794" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "2795" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2796" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2797" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "2798" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2799" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "2800" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2801" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2802" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2803" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2804" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2805" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2806" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2807" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2808" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2809" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2810" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2811" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2812" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2813" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2814" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2815" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2816" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2817" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2818" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2819" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2820" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2821" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2822" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2823" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2824" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2825" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2826" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2827" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2828" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2829" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2830" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2831" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2833" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2835" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2837" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2839" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2841" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2842" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2843" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2844" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2845" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2846" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2847" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2848" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2849" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2850" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2851" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2852" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2853" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2854" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2855" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2856" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2857" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2858" + }, + { + "ge_buy_limit": "1000", + "examine": "Bones of a recently slain wolf.", + "grand_exchange_price": "1266", + "durability": null, + "name": "Wolf bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2859" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1266", + "durability": null, + "name": "Wolf bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2860" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "I can make an ogre arrow with these.", + "grand_exchange_price": "5", + "durability": null, + "name": "Wolfbone arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2861" + }, + { + "ge_buy_limit": "25000", + "examine": "These logs are longer than normal.", + "grand_exchange_price": "169", + "durability": null, + "name": "Achey tree logs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2862" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "169", + "durability": null, + "name": "Achey tree logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2863" + }, + { + "ge_buy_limit": "1000", + "examine": "A wooden arrow shaft", + "grand_exchange_price": "47", + "durability": null, + "name": "Ogre arrow shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2864" + }, + { + "ge_buy_limit": "1000", + "examine": "An ogre arrow with four flights attached.", + "grand_exchange_price": "172", + "durability": null, + "name": "Flighted ogre arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2865" + }, + { + "requirements": "{4,30}", + "shop_price": "25", + "ge_buy_limit": "1000", + "examine": "A large ogre arrow with a bone tip.", + "grand_exchange_price": "49", + "durability": null, + "name": "Ogre arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2866", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows", + "archery_ticket_price": "0", + "id": "2871", + "equipment_slot": "3" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows (3)", + "archery_ticket_price": "0", + "id": "2872" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows (2)", + "archery_ticket_price": "0", + "id": "2873" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows (1)", + "archery_ticket_price": "0", + "id": "2874" + }, + { + "bankable": "false", + "examine": "An inflated toad.", + "durability": null, + "name": "Bloated toad", + "tradeable": "false", + "destroy": "true", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "2875" + }, + { + "ge_buy_limit": "10000", + "examine": "I need to cook this first.", + "grand_exchange_price": "2145", + "durability": null, + "name": "Raw chompy", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "2876" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2145", + "durability": null, + "name": "Raw chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2877" + }, + { + "shop_price": "130", + "ge_buy_limit": "1000", + "examine": "It might look delicious to an ogre.Roasted chompy bird.", + "grand_exchange_price": "95", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "2878" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "95", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2879" + }, + { + "durability": null, + "name": "Ruined chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2881" + }, + { + "examine": "It has been deliciously seasoned to taste wonderful for ogres.", + "durability": null, + "name": "Seasoned chompy", + "weight": "10", + "archery_ticket_price": "0", + "id": "2882" + }, + { + "requirements": "{4,30}", + "shop_price": "500", + "examine": "More powerful than a normal bow, useful against large game birds.", + "durability": null, + "weight": "1", + "attack_speed": "8", + "two_handed": "true", + "weapon_interface": "16", + "equipment_slot": "3", + "attack_audios": "2700,0,0,0", + "name": "Ogre bow", + "archery_ticket_price": "0", + "id": "2883", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Book of the elemental shield.", + "durability": null, + "name": "Battered book", + "archery_ticket_price": "0", + "id": "2886" + }, + { + "examine": "An old battered key. (Elemental Workshop I)", + "durability": null, + "name": "Battered key", + "archery_ticket_price": "0", + "id": "2887" + }, + { + "examine": "This is an empty stone bowl. / This is a stone bowl full of lava.", + "durability": null, + "name": "A stone bowl", + "archery_ticket_price": "0", + "id": "2888", + "equipment_slot": "3" + }, + { + "examine": "This is an empty stone bowl. / This is a stone bowl full of lava.", + "durability": null, + "name": "A stone bowl", + "archery_ticket_price": "0", + "id": "2889", + "equipment_slot": "3" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A shield made in the Elemental Workshop.", + "grand_exchange_price": "709", + "durability": null, + "name": "Elemental shield", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2890", + "bonuses": "0,0,0,0,0,0,0,0,6,0,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "709", + "durability": null, + "name": "Elemental shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2891" + }, + { + "examine": "This needs refining.", + "durability": null, + "name": "Elemental ore", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "2892" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "1570", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2894", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1570", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2895" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "867", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2896", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "867", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2897" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "741", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2898", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "741", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2899" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "844", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2900", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "844", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2901" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1039", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2902", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1039", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2903" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "1359", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2904", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1359", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2905" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "958", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2906", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "958", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2907" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "474", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2908", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "474", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2909" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "1445", + "tradeable": "true", + "name": "Hat", + "archery_ticket_price": "0", + "hat": "true", + "id": "2910", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1445", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2911" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1254", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2912", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1254", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2913" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "1054", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2914", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1054", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2915" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "789", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2916", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "789", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2917" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "603", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2918", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "603", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2919" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "997", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2920", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "997", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2921" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1221", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2922", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1221", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2923" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "737", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2924", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "737", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2925" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "504", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2926", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "504", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2927" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "637", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2928", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "637", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2929" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "925", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2930", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "925", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2931" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1829", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2932", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1829", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2933" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "988", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2934", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "988", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2935" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "925", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2936", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "925", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2937" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "927", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2938", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "927", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2939" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "1209", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2940", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1209", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2941" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "634", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2942", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "634", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2943" + }, + { + "examine": "A key made from solid gold", + "durability": null, + "name": "Golden key", + "archery_ticket_price": "0", + "id": "2944" + }, + { + "examine": "A key made of solid iron.", + "durability": null, + "name": "Iron key", + "archery_ticket_price": "0", + "id": "2945" + }, + { + "examine": "A replica tinderbox made of solid gold.", + "durability": null, + "name": "Golden tinderbox", + "archery_ticket_price": "0", + "id": "2946" + }, + { + "examine": "A replica candle made of solid gold.", + "durability": null, + "name": "Golden candle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2947" + }, + { + "examine": "A replica pot made of solid gold.", + "durability": null, + "name": "Golden pot", + "archery_ticket_price": "0", + "id": "2948" + }, + { + "examine": "A replica hammer made of solid gold.", + "durability": null, + "name": "Golden hammer", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "2949" + }, + { + "examine": "A replica needle made of solid gold.", + "durability": null, + "name": "Golden needle", + "archery_ticket_price": "0", + "id": "2951" + }, + { + "examine": "A silver dagger that can prevent werewolves changing form.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "attack_audios": "2517,2517,2500,2517", + "name": "Wolfbane", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "2952", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,1,10,5,0,0" + }, + { + "examine": "It's a bucket of water.", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2953" + }, + { + "examine": "It's a bucket of water.", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2954" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "16", + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2955" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2956" + }, + { + "examine": "An empty druid pouch.", + "durability": null, + "name": "Druid pouch", + "archery_ticket_price": "0", + "id": "2957" + }, + { + "examine": "A druid pouch.", + "durability": null, + "name": "Druid pouch", + "archery_ticket_price": "0", + "id": "2958" + }, + { + "examine": "Erhhh! It stinks.", + "durability": null, + "name": "Rotten food", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2959" + }, + { + "durability": null, + "name": "Rotten food", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2960" + }, + { + "ge_buy_limit": "100", + "examine": "It's a silver sickle.", + "durability": null, + "weight": "1.6", + "weapon_interface": "6", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "28", + "name": "Silver sickle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2961", + "bonuses": "0,0,0,0,0,0,1,1,1,1,0,1,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28", + "durability": null, + "name": "Silver sickle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2962" + }, + { + "attack_anims": "390,390,381,390", + "examine": "It's a blessed silver sickle.", + "durability": null, + "name": "Silver sickle(b)", + "weight": "1.5", + "archery_ticket_price": "0", + "weapon_interface": "6", + "id": "2963", + "bonuses": "0,0,0,0,0,0,1,1,1,1,0,1,5,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "shop_price": "1", + "examine": "Used for washing your face, amongst other things.", + "durability": null, + "name": "Washing bowl", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2964" + }, + { + "examine": "A small mirror, probably used for grooming.", + "durability": null, + "name": "Mirror", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2966" + }, + { + "examine": "A druidic spell given to you freely by the spirit of Filliman Tarlock.", + "durability": null, + "name": "Druidic spell", + "archery_ticket_price": "0", + "id": "2968" + }, + { + "examine": "A used druidic spell given to you freely by the spirit of Filliman Tarlock.", + "durability": null, + "name": "A used spell", + "archery_ticket_price": "0", + "id": "2969" + }, + { + "ge_buy_limit": "10000", + "examine": "A mushroom from the swamps of Mort Myre.", + "grand_exchange_price": "915", + "durability": null, + "name": "Mort myre fungus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2970" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "915", + "durability": null, + "name": "Mort myre fungus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2971" + }, + { + "ge_buy_limit": "100", + "examine": "A cutting from a budding branch.", + "grand_exchange_price": "338", + "durability": null, + "name": "Mort myre stem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2972" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "338", + "durability": null, + "name": "Mort myre stem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2973" + }, + { + "ge_buy_limit": "100", + "examine": "A pear picked from a dying bush in Mort Myre.", + "grand_exchange_price": "975", + "durability": null, + "name": "Mort myre pear", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2974" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "975", + "durability": null, + "name": "Mort myre pear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2975" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Used to make sickles.", + "grand_exchange_price": "498", + "durability": null, + "name": "Sickle mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2976" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "498", + "durability": null, + "name": "Sickle mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2977" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2978", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2979", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2980", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2981", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2982", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2983", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2984", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2985", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2986", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2987", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2988", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2989", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2990", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2991", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2992", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2993", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2994", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2995", + "equipment_slot": "0" + }, + { + "examine": "I can exchange these for further experience or items.", + "durability": null, + "name": "Agility arena ticket", + "archery_ticket_price": "0", + "id": "2996" + }, + { + "shop_price": "800", + "ge_buy_limit": "10", + "examine": "You should see the shark...", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Pirate's hook", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2997", + "bonuses": "0,0,0,0,0,1,5,3,0,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "4056", + "durability": null, + "name": "Clean toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2998" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4056", + "durability": null, + "name": "Clean toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2999" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "10500", + "durability": null, + "name": "Clean snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3000" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "10500", + "durability": null, + "name": "Clean snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3001" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this toadflax potion.", + "grand_exchange_price": "3988", + "durability": null, + "name": "Toadflax potion(unf)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3002" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3988", + "durability": null, + "name": "Toadflax potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3003" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this snapdragon potion.", + "grand_exchange_price": "9588", + "durability": null, + "name": "Snapdragon potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3004" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9588", + "durability": null, + "name": "Snapdragon potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3005" + }, + { + "shop_price": "150", + "examine": "Keep out of reach of children and familiars.", + "durability": null, + "name": "Firework", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3006" + }, + { + "durability": null, + "name": "Firework", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3007" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "4 doses of energy potion.", + "grand_exchange_price": "33", + "durability": null, + "name": "Energy potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3008" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "33", + "durability": null, + "name": "Energy potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3009" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "3 doses of energy potion.", + "grand_exchange_price": "18", + "durability": null, + "name": "Energy potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3010" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Energy potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3011" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "2 doses of energy potion.", + "grand_exchange_price": "11", + "durability": null, + "name": "Energy potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3012" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Energy potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3013" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "1 dose of energy potion.", + "grand_exchange_price": "25", + "durability": null, + "name": "Energy potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3014" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Energy potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3015" + }, + { + "shop_price": "4000", + "ge_buy_limit": "1000", + "examine": "4 doses of super energy potion.", + "grand_exchange_price": "3088", + "durability": null, + "name": "Super energy(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3016" + }, + { + "shop_price": "4000", + "ge_buy_limit": "1000", + "grand_exchange_price": "3088", + "durability": null, + "name": "Super energy(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3017" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super energy potion.", + "grand_exchange_price": "2485", + "durability": null, + "name": "Super energy(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3018" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2485", + "durability": null, + "name": "Super energy(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3019" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super energy potion.", + "grand_exchange_price": "1592", + "durability": null, + "name": "Super energy(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3020" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1592", + "durability": null, + "name": "Super energy(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3021" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super energy potion.", + "grand_exchange_price": "1432", + "durability": null, + "name": "Super energy(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3022" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1432", + "durability": null, + "name": "Super energy(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3023" + }, + { + "shop_price": "12000", + "ge_buy_limit": "1000", + "examine": "4 doses of super restore potion.", + "grand_exchange_price": "11500", + "durability": null, + "name": "Super restore(4)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3024" + }, + { + "shop_price": "12000", + "ge_buy_limit": "1000", + "grand_exchange_price": "11500", + "durability": null, + "name": "Super restore(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3025" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super restore potion.", + "grand_exchange_price": "8690", + "durability": null, + "name": "Super restore(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3026" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8690", + "durability": null, + "name": "Super restore(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3027" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super restore potion.", + "grand_exchange_price": "5637", + "durability": null, + "name": "Super restore(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3028" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5637", + "durability": null, + "name": "Super restore(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3029" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super restore potion.", + "grand_exchange_price": "2606", + "durability": null, + "name": "Super restore(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3030" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2606", + "durability": null, + "name": "Super restore(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3031" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Agility potion.", + "grand_exchange_price": "276", + "durability": null, + "name": "Agility potion(4)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3032" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "276", + "durability": null, + "name": "Agility potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3033" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Agility potion.", + "grand_exchange_price": "148", + "durability": null, + "name": "Agility potion(3)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3034" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "148", + "durability": null, + "name": "Agility potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3035" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Agility potion.", + "grand_exchange_price": "115", + "durability": null, + "name": "Agility potion(2)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3036" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "115", + "durability": null, + "name": "Agility potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3037" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Agility potion.", + "grand_exchange_price": "306", + "durability": null, + "name": "Agility potion(1)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3038" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "306", + "durability": null, + "name": "Agility potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3039" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Magic potion.", + "grand_exchange_price": "7214", + "durability": null, + "name": "Magic potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3040" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7214", + "durability": null, + "name": "Magic potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3041" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Magic potion.", + "grand_exchange_price": "5285", + "durability": null, + "name": "Magic potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3042" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5285", + "durability": null, + "name": "Magic potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3043" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Magic potion.", + "grand_exchange_price": "3697", + "durability": null, + "name": "Magic potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3044" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3697", + "durability": null, + "name": "Magic potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3045" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Magic potion.", + "grand_exchange_price": "1826", + "durability": null, + "name": "Magic potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3046" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1826", + "durability": null, + "name": "Magic potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3047" + }, + { + "durability": null, + "name": "Pirate's hook", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3048" + }, + { + "requirements": "{15,30}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "3996", + "durability": null, + "name": "Grimy toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3049" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3996", + "durability": null, + "name": "Grimy toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3050" + }, + { + "requirements": "{15,59}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "10500", + "durability": null, + "name": "Grimy snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3051" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "10500", + "durability": null, + "name": "Grimy snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3052" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9985", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3053", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Lava battlestaff" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "34100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3054", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "shop_price": "160", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic lava staff" + }, + { + "durability": null, + "name": "Lava battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3055" + }, + { + "durability": null, + "name": "Mystic lava staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3056" + }, + { + "examine": "A mime would wear this.", + "durability": null, + "name": "Mime mask", + "archery_ticket_price": "0", + "id": "3057", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime top", + "archery_ticket_price": "0", + "id": "3058", + "equipment_slot": "4" + }, + { + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime legs", + "archery_ticket_price": "0", + "id": "3059", + "equipment_slot": "7" + }, + { + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime gloves", + "archery_ticket_price": "0", + "id": "3060", + "equipment_slot": "9" + }, + { + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime boots", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3061", + "equipment_slot": "10" + }, + { + "examine": "It seems to be humming...", + "durability": null, + "name": "Strange box", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3062" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "628", + "attack_audios": "2547,0,0,0", + "name": "Black dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3093", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "740", + "attack_audios": "2547,0,0,0", + "name": "Black dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3094", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "48", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "702", + "name": "Bronze claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3095", + "bonuses": "3,4,-4,0,0,1,2,1,0,0,0,5,0,0,0" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "13", + "name": "Iron claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3096", + "bonuses": "4,6,-4,0,0,2,3,1,0,0,0,7,0,0,0" + }, + { + "requirements": "{0,5}", + "shop_price": "175", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "20", + "name": "Steel claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3097", + "bonuses": "8,11,-4,0,0,3,6,2,0,0,0,12,0,0,0" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "6", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "940", + "name": "Black claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3098", + "bonuses": "10,14,-4,0,0,4,7,2,0,0,0,14,0,0,0" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "114", + "name": "Mithril claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3099", + "bonuses": "11,16,-4,0,0,4,8,2,0,0,0,17,0,0,0" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "649", + "name": "Adamant claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3100", + "bonuses": "18,23,-4,0,0,6,12,3,0,0,0,24,0,0,0" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "has_special": "true", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "lendable": "true", + "grand_exchange_price": "6939", + "name": "Rune claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3101", + "bonuses": "26,38,-4,0,0,10,19,5,0,0,0,39,0,0,0" + }, + { + "examine": "The combination to Burthorpe Castle's equipment room.", + "durability": null, + "name": "Combination", + "archery_ticket_price": "0", + "id": "3102" + }, + { + "examine": "The guard wrote the IOU on the back of some paper.", + "durability": null, + "name": "Iou", + "archery_ticket_price": "0", + "id": "3103" + }, + { + "examine": "This map shows the secret way up to Death Plateau.", + "durability": null, + "name": "Secret way map", + "archery_ticket_price": "0", + "id": "3104" + }, + { + "shop_price": "1900", + "ge_buy_limit": "100", + "examine": "Boots made for general climbing; rocks a speciality.", + "durability": null, + "destroy": "true", + "weight": "0.3", + "equipment_slot": "10", + "grand_exchange_price": "51400", + "name": "Climbing boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3105", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,2,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "51400", + "durability": null, + "name": "Climbing boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3106" + }, + { + "examine": "Climbing boots with spikes.", + "durability": null, + "name": "Spiked boots", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3107", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,2,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3109" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3110" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3111" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3112" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3113" + }, + { + "examine": "Entrance certificate to the Imperial Guard.", + "durability": null, + "name": "Certificate", + "archery_ticket_price": "0", + "id": "3114" + }, + { + "durability": null, + "name": "Bronze claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3115" + }, + { + "durability": null, + "name": "Iron claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3116" + }, + { + "durability": null, + "name": "Steel claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3117" + }, + { + "durability": null, + "name": "Black claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3118" + }, + { + "durability": null, + "name": "Mithril claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3119" + }, + { + "durability": null, + "name": "Adamant claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3120" + }, + { + "durability": null, + "name": "Rune claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3121" + }, + { + "requirements": "{1,50}-{2,50}", + "ge_buy_limit": "10", + "examine": "A solid stone shield.", + "durability": null, + "weight": "6.8", + "absorb": "5,0,10", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "34800", + "name": "Granite shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3122", + "bonuses": "0,0,0,-12,-8,40,42,38,0,65,50,0,0,0,0" + }, + { + "ge_buy_limit": "10000", + "examine": "Large glistening bones which glow with a pale yellow aura.", + "grand_exchange_price": "1975", + "durability": null, + "name": "Shaikahan bones", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "3123" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1975", + "durability": null, + "name": "Shaikahan bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3124" + }, + { + "ge_buy_limit": "10000", + "examine": "Fairly big bones which smell distinctly of Jogre.", + "grand_exchange_price": "1023", + "durability": null, + "name": "Jogre bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "3125" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1023", + "durability": null, + "name": "Jogre bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3126" + }, + { + "examine": "These blackened Jogre bones have been somehow burnt.", + "durability": null, + "name": "Burnt jogre bones", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "3127" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3128" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3129" + }, + { + "examine": "Burnt Jogre bones marinated in lovely Karambwanji sauce. Perfect./Burnt Jogre bones marinated in lovely Karabwanji sauce. Not quite right.", + "durability": null, + "name": "Marinated j' bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3130" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3131" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3132" + }, + { + "examine": "Burnt Jogre bones marinated in lovely Karambwanji sauce. Perfect./Burnt Jogre bones marinated in lovely Karabwanji sauce. Not quite right.", + "durability": null, + "name": "Marinated j' bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3133" + }, + { + "durability": null, + "name": "Granite shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3134" + }, + { + "shop_price": "1", + "examine": "The key to the troll prison.", + "durability": null, + "name": "Cell key 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3136" + }, + { + "examine": "The key to the troll prison.", + "durability": null, + "name": "Cell key 2", + "weight": "1", + "archery_ticket_price": "0", + "id": "3137" + }, + { + "ge_buy_limit": "10000", + "examine": "How am I supposed to eat that?!", + "grand_exchange_price": "1834", + "durability": null, + "name": "Potato cactus", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3138" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1834", + "durability": null, + "name": "Potato cactus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3139" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "A series of connected metal rings.", + "rare_item": "true", + "durability": null, + "weight": "6.8", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "4300000", + "name": "Dragon chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3140", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "4300000", + "durability": null, + "name": "Dragon chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3141" + }, + { + "shop_price": "440", + "ge_buy_limit": "20000", + "examine": "A raw green octopus.", + "grand_exchange_price": "1775", + "durability": null, + "name": "Raw karambwan", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3142" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "1775", + "durability": null, + "name": "Raw karambwan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3143" + }, + { + "shop_price": "460", + "ge_buy_limit": "10000", + "examine": "Cooked octopus.", + "grand_exchange_price": "1455", + "durability": null, + "name": "Cooked karambwan", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3144" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1455", + "durability": null, + "name": "Cooked karambwan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3145" + }, + { + "examine": "Cooked octopus. It looks poorly cooked and quite dangerous.", + "durability": null, + "name": "Poison karambwan", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3146" + }, + { + "shop_price": "460", + "examine": "Cooked octopus.", + "grand_exchange_price": "906", + "durability": null, + "name": "Cooked karambwan", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3147" + }, + { + "durability": null, + "name": "Burnt karambwan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3149" + }, + { + "examine": "Small brightly coloured tropical fish.", + "durability": null, + "name": "Raw karambwanji", + "archery_ticket_price": "0", + "id": "3150" + }, + { + "examine": "Small brightly coloured tropical fish.", + "durability": null, + "name": "Karambwanji", + "weight": "0.99", + "archery_ticket_price": "0", + "id": "3151" + }, + { + "examine": "Freshly made octopus paste. It smells quite nauseating.", + "durability": null, + "name": "Karambwan paste", + "archery_ticket_price": "0", + "id": "3152" + }, + { + "examine": "Freshly made octopus paste. It smells quite nauseating.", + "durability": null, + "name": "Karambwan paste", + "archery_ticket_price": "0", + "id": "3153" + }, + { + "examine": "Freshly made octopus paste. It smells quite nauseating.", + "durability": null, + "name": "Karambwan paste", + "archery_ticket_price": "0", + "id": "3154" + }, + { + "examine": "This paste smells of raw fish./This paste smells of cooked fish.", + "durability": null, + "name": "Karambwanji paste", + "archery_ticket_price": "0", + "id": "3155" + }, + { + "examine": "This paste smells of raw fish./This paste smells of cooked fish.", + "durability": null, + "name": "Karambwanji paste", + "archery_ticket_price": "0", + "id": "3156" + }, + { + "requirements": "{10,65}", + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A wide bodied and thin necked vessel, encrusted with sea salt. / The Karambwan Vessel is loaded with Karambwanji", + "grand_exchange_price": "221", + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "3157", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "221", + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3158" + }, + { + "requirements": "{10,65}", + "shop_price": "5", + "examine": "A wide bodied and thin necked vessel, encrusted with sea salt. / The Karambwan Vessel is loaded with Karambwanji", + "grand_exchange_price": "240", + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "3159" + }, + { + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3160" + }, + { + "examine": "A set of instructions explaining how to construct a Karambwan vessel", + "durability": null, + "name": "Crafting manual", + "archery_ticket_price": "0", + "id": "3161" + }, + { + "ge_buy_limit": "100", + "examine": "You swear you had more than three slices before.", + "grand_exchange_price": "38", + "durability": null, + "name": "Sliced banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3162" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38", + "durability": null, + "name": "Sliced banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3163" + }, + { + "shop_price": "27", + "examine": "A very strong spirit brewed in Karamja.", + "durability": null, + "name": "Karamjan rum", + "archery_ticket_price": "0", + "id": "3164" + }, + { + "shop_price": "27", + "examine": "A very strong spirit brewed in Karamja.", + "durability": null, + "name": "Karamjan rum", + "archery_ticket_price": "0", + "id": "3165" + }, + { + "examine": "It's the body of a dead monkey.", + "durability": null, + "name": "Monkey corpse", + "weight": "1", + "archery_ticket_price": "0", + "id": "3166" + }, + { + "examine": "It's the skin of a (hopefully) dead monkey.", + "durability": null, + "name": "Monkey skin", + "archery_ticket_price": "0", + "id": "3167" + }, + { + "examine": "A 'Seaweed in Monkey Skin' sandwich. Perfect for statue repair.", + "durability": null, + "name": "Seaweed sandwich", + "archery_ticket_price": "0", + "id": "3168" + }, + { + "examine": "A body of a dead monkey, tastefully stuffed with seaweed.", + "durability": null, + "name": "Stuffed monkey", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3169" + }, + { + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "266", + "stand_anim": "813", + "name": "Bronze spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3170", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "304", + "stand_anim": "813", + "name": "Iron spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3171", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "requirements": "{0,5}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "503", + "stand_anim": "813", + "name": "Steel spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3172", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "requirements": "{0,20}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned mithril tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "368", + "stand_anim": "813", + "name": "Mithril spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3173", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0" + }, + { + "requirements": "{0,30}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned adamant tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "1093", + "stand_anim": "813", + "name": "Adamant spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3174", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0" + }, + { + "requirements": "{0,40}", + "turn90cw_anim": "1207", + "examine": "\tA Karambwan poisoned rune tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "12089", + "stand_anim": "813", + "name": "Rune spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3175", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "requirements": "{0,60}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "37446", + "stand_anim": "813", + "name": "Dragon spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3176", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "3177", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3178" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3179" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3180" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3181" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3182" + }, + { + "ge_buy_limit": "10000", + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "588", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3183" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "588", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3184" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3185" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3186" + }, + { + "shop_price": "140", + "grand_exchange_price": "140", + "durability": null, + "name": "Bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3187" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "A piece of silk which can be used to remove poison from weapons.", + "grand_exchange_price": "286", + "durability": null, + "name": "Cleaning cloth", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3188" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "286", + "durability": null, + "name": "Cleaning cloth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3189" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "522", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3190", + "stand_turn_anim": "1209", + "bonuses": "7,8,0,-4,0,-1,1,2,0,0,0,8,0,0,0", + "shop_price": "104", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "name": "Bronze halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "522", + "durability": null, + "name": "Bronze halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3191" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "124", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3192", + "stand_turn_anim": "1209", + "bonuses": "9,12,0,-4,0,-1,1,2,0,0,0,12,0,0,0", + "shop_price": "364", + "durability": null, + "weight": "3.1", + "weapon_interface": "15", + "render_anim": "28", + "name": "Iron halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124", + "durability": null, + "name": "Iron halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3193" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "726", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3194", + "stand_turn_anim": "1209", + "bonuses": "14,19,0,-4,0,-1,2,3,0,0,0,20,0,0,0", + "requirements": "{0,5}", + "shop_price": "1300", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "name": "Steel halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "726", + "durability": null, + "name": "Steel halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3195" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "4344", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3196", + "stand_turn_anim": "1209", + "bonuses": "19,25,0,-4,0,-1,2,3,0,0,0,20,0,0,0", + "requirements": "{0,5}-{2,10}", + "shop_price": "2496", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "name": "Black halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4344", + "durability": null, + "name": "Black halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3197" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "6995", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3198", + "stand_turn_anim": "1209", + "bonuses": "22,28,0,-4,0,-1,2,4,0,0,0,29,0,0,0", + "requirements": "{0,20}-{2,10}", + "shop_price": "3380", + "durability": null, + "weight": "2.7", + "weapon_interface": "15", + "render_anim": "28", + "name": "Mithril halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6995", + "durability": null, + "name": "Mithril halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3199" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "4690", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3200", + "stand_turn_anim": "1209", + "bonuses": "28,41,0,-4,0,-1,3,4,0,0,0,42,0,0,0", + "requirements": "{0,30}-{2,15}", + "shop_price": "8320", + "durability": null, + "weight": "3.6", + "weapon_interface": "15", + "render_anim": "28", + "name": "Adamant halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4690", + "durability": null, + "name": "Adamant halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3201" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "77100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3202", + "stand_turn_anim": "1209", + "bonuses": "48,67,0,-4,0,-1,4,5,0,0,0,68,0,0,0", + "requirements": "{0,40}-{2,20}", + "shop_price": "128000", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "lendable": "true", + "name": "Rune halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "77100", + "durability": null, + "name": "Rune halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3203" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon halberd.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "201000", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3204", + "stand_turn_anim": "1209", + "bonuses": "70,95,0,-4,0,-1,4,5,0,0,0,89,0,0,0", + "requirements": "{0,60}-{2,30}", + "shop_price": "325000", + "durability": null, + "weight": "3.1", + "weapon_interface": "15", + "render_anim": "28", + "lendable": "true", + "name": "Dragon halberd" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "201000", + "durability": null, + "name": "Dragon halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3205" + }, + { + "examine": "A summons from King Lathas.", + "durability": null, + "name": "King's message", + "archery_ticket_price": "0", + "id": "3206" + }, + { + "examine": "A letter for King Lathas from Lord Iorwerth.", + "durability": null, + "name": "Iorwerths message", + "archery_ticket_price": "0", + "id": "3207" + }, + { + "examine": "Lord Iorwerth's crystal pendant.", + "durability": null, + "name": "Crystal pendant", + "archery_ticket_price": "0", + "id": "3208", + "equipment_slot": "2" + }, + { + "examine": "A piece of chemical formation.", + "durability": null, + "name": "Sulphur", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "3209" + }, + { + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Some limestone.", + "grand_exchange_price": "238", + "durability": null, + "name": "Limestone", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "3211" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "238", + "durability": null, + "name": "Limestone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3212" + }, + { + "examine": "Some quicklime.", + "durability": null, + "name": "Quicklime", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "3213" + }, + { + "examine": "A pot of ground quicklime.", + "durability": null, + "name": "Pot of quicklime", + "archery_ticket_price": "0", + "id": "3214" + }, + { + "shop_price": "160", + "examine": "A pile of ground sulphur.", + "durability": null, + "name": "Ground sulphur", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3215" + }, + { + "ge_buy_limit": "100", + "examine": "An empty barrel/A Splendid barrel.", + "grand_exchange_price": "207", + "durability": null, + "name": "Barrel", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3216" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "207", + "durability": null, + "name": "Barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3217" + }, + { + "examine": "A fused barrel full of fire oil.", + "durability": null, + "name": "Barrel bomb", + "weight": "32", + "archery_ticket_price": "0", + "id": "3218" + }, + { + "examine": "A fused barrel full of fire oil.", + "durability": null, + "name": "Barrel bomb", + "weight": "32", + "archery_ticket_price": "0", + "id": "3219" + }, + { + "examine": "A barrel full of coal-tar.", + "durability": null, + "name": "Barrel of coal-tar", + "weight": "32", + "archery_ticket_price": "0", + "id": "3220" + }, + { + "examine": "A barrel full of naphtha.", + "durability": null, + "name": "Barrel of naphtha", + "weight": "32", + "archery_ticket_price": "0", + "id": "3221" + }, + { + "examine": "A barrel full of naphtha and sulphur./A barrel full of naphtha and quicklime.", + "durability": null, + "name": "Naphtha mix", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3222" + }, + { + "examine": "A barrel full of naphtha and sulphur./A barrel full of naphtha and quicklime.", + "durability": null, + "name": "Naphtha mix", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3223" + }, + { + "examine": "A strip of cloth.", + "durability": null, + "name": "Strip of cloth", + "archery_ticket_price": "0", + "id": "3224" + }, + { + "shop_price": "67", + "ge_buy_limit": "5000", + "examine": "Might taste better cooked.", + "grand_exchange_price": "312", + "durability": null, + "name": "Raw rabbit", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3226" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "312", + "durability": null, + "name": "Raw rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3227" + }, + { + "shop_price": "19", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "35", + "durability": null, + "name": "Cooked rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3228" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "35", + "durability": null, + "name": "Cooked rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3229" + }, + { + "examine": "A book by Mel Achy.", + "durability": null, + "name": "Big book of bangs", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "3230" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3232" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3234" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3236" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3238" + }, + { + "ge_buy_limit": "100", + "examine": "Bark from a hollow tree.", + "grand_exchange_price": "23", + "durability": null, + "name": "Bark", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3239" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23", + "durability": null, + "name": "Bark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3240" + }, + { + "examine": "One of RuneScape's many citizens. In Karamja or South of Falador: One of RuneScape's many citizens, apparently trying to be an explorer. In Lumbridge: One of Lumbridge's many citizens. In a Falador home: One of RuneScape's many citizens. He looks worried ", + "durability": null, + "name": "Man", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3241" + }, + { + "examine": "He grows crops in the area.", + "durability": null, + "name": "Farmer", + "archery_ticket_price": "0", + "id": "3243" + }, + { + "examine": "Rogueish.", + "durability": null, + "name": "Rogue", + "archery_ticket_price": "0", + "id": "3247" + }, + { + "examine": "Varies, refer below.", + "durability": null, + "name": "Guard", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3249" + }, + { + "examine": "A member of Ardougne's militia.", + "durability": null, + "name": "Knight of ardougne", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3251" + }, + { + "examine": "The strong arm of the law.", + "durability": null, + "name": "Watchman", + "archery_ticket_price": "0", + "id": "3253" + }, + { + "examine": "A holy warrior.", + "durability": null, + "name": "Paladin", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3255" + }, + { + "examine": "Heroic!", + "durability": null, + "name": "Hero", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "3259" + }, + { + "examine": "A pale, tough looking herb.", + "durability": null, + "name": "Goutweed", + "archery_ticket_price": "0", + "id": "3261" + }, + { + "examine": "It's tough and spiky.", + "durability": null, + "name": "Troll thistle", + "archery_ticket_price": "0", + "id": "3262" + }, + { + "examine": "It'll be easier to grind now.", + "durability": null, + "name": "Dried thistle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3263" + }, + { + "examine": "It's ready for mixing.", + "durability": null, + "name": "Ground thistle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3264" + }, + { + "examine": "It's part of Eadgar's plan.", + "durability": null, + "name": "Troll potion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3265" + }, + { + "examine": "It's rather drunk.", + "durability": null, + "name": "Drunk parrot", + "archery_ticket_price": "0", + "id": "3266" + }, + { + "examine": "It's dirty and smelly.", + "durability": null, + "name": "Dirty robe", + "archery_ticket_price": "0", + "id": "3267" + }, + { + "examine": "It's good enough to fool a troll.", + "durability": null, + "name": "Fake man", + "archery_ticket_price": "0", + "id": "3268" + }, + { + "examine": "The key to the Trollheim storeroom.", + "durability": null, + "name": "Storeroom key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3269" + }, + { + "examine": "Pineapple chunks dipped in a strong liquor.", + "durability": null, + "name": "Alco-chunks", + "archery_ticket_price": "0", + "id": "3270" + }, + { + "ge_buy_limit": "5000", + "examine": "That used to be a vampyre!", + "grand_exchange_price": "381", + "durability": null, + "name": "Vampire dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3325" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "381", + "durability": null, + "name": "Vampire dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3326" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "An easy-to-make, marshy-coloured, Mort Myre snail shell helmet.", + "grand_exchange_price": "56", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3327", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3328" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Rounded: A red and black snail shell helmet. Pointed: A red and black pointed snail shell helmet.", + "durability": null, + "weight": "2", + "equipment_slot": "0", + "grand_exchange_price": "291", + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3329", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "291", + "durability": null, + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3330" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell helmet.", + "grand_exchange_price": "57", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3331", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3332" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "A moody blue snail shell helmet, mort myre snail shell helm", + "grand_exchange_price": "73", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "weight": "1.9", + "archery_ticket_price": "0", + "id": "3333", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "73", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3334" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "An easy-to-make, orange-and-bark coloured, Mort Myre snail shell helmet.", + "grand_exchange_price": "63", + "durability": null, + "name": "Broken bark snelm", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3335", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "63", + "durability": null, + "name": "Broken bark snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3336" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "An easy-to-make, marshy-coloured, Mort Myre snail shell helmet.", + "grand_exchange_price": "58", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3337", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "58", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3338" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Rounded: A red and black snail shell helmet. Pointed: A red and black pointed snail shell helmet.", + "durability": null, + "weight": "2", + "equipment_slot": "0", + "grand_exchange_price": "147", + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3339", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3340" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell helmet.", + "grand_exchange_price": "54", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3341", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "54", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3342" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "A moody blue snail shell helmet, mort myre snail shell helm", + "grand_exchange_price": "248", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "weight": "1.9", + "archery_ticket_price": "0", + "id": "3343", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "248", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3344" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, 'myre'-coloured, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "155", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3345" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "155", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3346" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, red, Mort myre snail shell; looks protective.", + "grand_exchange_price": "590", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3347" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "590", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3348" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "134", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3349" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "134", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3350" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, blue, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "230", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3351" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "230", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3352" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, bark-coloured, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "195", + "durability": null, + "name": "Blamish bark shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3353" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Blamish bark shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3354" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, 'myre'-coloured, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "145", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3355" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "145", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3356" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, red, Mort myre snail shell; looks protective.", + "grand_exchange_price": "614", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3357" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "614", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3358" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "173", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3359" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "173", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3360" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, blue, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "874", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3361" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "874", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3362" + }, + { + "shop_price": "74", + "ge_buy_limit": "10000", + "examine": "The thin, slimy corpse of a deceased giant snail.", + "grand_exchange_price": "2047", + "durability": null, + "name": "Thin snail", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3363" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2047", + "durability": null, + "name": "Thin snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3364" + }, + { + "ge_buy_limit": "1000", + "examine": "The lean, slimy corspe of a dead snail.", + "grand_exchange_price": "958", + "durability": null, + "name": "Lean snail", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3365" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "958", + "durability": null, + "name": "Lean snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3366" + }, + { + "shop_price": "160", + "ge_buy_limit": "10000", + "examine": "The fat, slimy, corpse of a deceased giant snail.", + "grand_exchange_price": "971", + "durability": null, + "name": "Fat snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3367" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "971", + "durability": null, + "name": "Fat snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3368" + }, + { + "ge_buy_limit": "10000", + "examine": "A succulently slimy piece of sumptuous snail.", + "grand_exchange_price": "833", + "durability": null, + "name": "Thin snail meat", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "3369" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "833", + "durability": null, + "name": "Thin snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3370" + }, + { + "ge_buy_limit": "10000", + "examine": "A succulently slimey slice of sumptuous snail.", + "grand_exchange_price": "251", + "durability": null, + "name": "Lean snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3371" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "251", + "durability": null, + "name": "Lean snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3372" + }, + { + "ge_buy_limit": "10000", + "examine": "A succulently slimy slice of sumptuous snail.", + "grand_exchange_price": "603", + "durability": null, + "name": "Fat snail meat", + "tradeable": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "3373" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "603", + "durability": null, + "name": "Fat snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3374" + }, + { + "durability": null, + "name": "Burnt snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3376" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "An empty sample bottle.", + "grand_exchange_price": "14", + "durability": null, + "name": "Sample bottle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3377" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Sample bottle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3378" + }, + { + "ge_buy_limit": "1000", + "examine": "A slime covered eel - yuck!", + "grand_exchange_price": "358", + "durability": null, + "name": "Slimy eel", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3379" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "358", + "durability": null, + "name": "Slimy eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3380" + }, + { + "ge_buy_limit": "1000", + "examine": "A cooked slimy eel - not delicious, but pretty nutritious.", + "grand_exchange_price": "274", + "durability": null, + "name": "Cooked slimy eel", + "tradeable": "true", + "destroy": "false", + "weight": "2", + "archery_ticket_price": "0", + "id": "3381" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "274", + "durability": null, + "name": "Cooked slimy eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3382" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "A wooden helmet.", + "durability": null, + "weight": "0.9", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5993", + "name": "Splitbark helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3385", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5993", + "durability": null, + "name": "Splitbark helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3386" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Provides good protection.", + "durability": null, + "weight": "4.5", + "absorb": "6,3,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "26700", + "name": "Splitbark body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3387", + "bonuses": "0,0,0,10,-10,36,26,42,15,0,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26700", + "durability": null, + "name": "Splitbark body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3388" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "These should protect my legs.", + "durability": null, + "weight": "3.6", + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "43700", + "name": "Splitbark legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3389", + "bonuses": "0,0,0,7,-7,22,20,25,10,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43700", + "durability": null, + "name": "Splitbark legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3390" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "These should keep my hands safe.", + "durability": null, + "weight": "0.9", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "2786", + "name": "Splitbark gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3391", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2786", + "durability": null, + "name": "Splitbark gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3392" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Wooden foot protection.", + "durability": null, + "weight": "0.9", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "3808", + "name": "Splitbark boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3393", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,9,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3808", + "durability": null, + "name": "Splitbark boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3394" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "18", + "durability": null, + "name": "Loar remains", + "tradeable": "true", + "weight": "1.35", + "archery_ticket_price": "0", + "id": "3396" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "18", + "durability": null, + "name": "Loar remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3397" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "249", + "durability": null, + "name": "Phrin remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3398" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "249", + "durability": null, + "name": "Phrin remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3399" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "138", + "durability": null, + "name": "Riyl remains", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3400" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "138", + "durability": null, + "name": "Riyl remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3401" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "334", + "durability": null, + "name": "Asyn remains", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3402" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "334", + "durability": null, + "name": "Asyn remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3403" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "5264", + "durability": null, + "name": "Fiyr remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3404" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5264", + "durability": null, + "name": "Fiyr remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3405" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this potion.", + "grand_exchange_price": "137", + "durability": null, + "name": "Ash potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3406" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137", + "durability": null, + "name": "Ash potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3407" + }, + { + "examine": "4 doses serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (4)", + "archery_ticket_price": "0", + "id": "3408" + }, + { + "examine": "3 doses serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (3)", + "archery_ticket_price": "0", + "id": "3410" + }, + { + "examine": "2 doses serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (2)", + "archery_ticket_price": "0", + "id": "3412" + }, + { + "examine": "1 dose serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (1)", + "archery_ticket_price": "0", + "id": "3414" + }, + { + "shop_price": "208", + "examine": "3 doses permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (4)", + "archery_ticket_price": "0", + "id": "3416" + }, + { + "shop_price": "208", + "examine": "3 doses permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (3)", + "archery_ticket_price": "0", + "id": "3417" + }, + { + "shop_price": "208", + "examine": "2 doses permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (2)", + "archery_ticket_price": "0", + "id": "3418" + }, + { + "shop_price": "208", + "examine": "1 dose permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (1)", + "archery_ticket_price": "0", + "id": "3419" + }, + { + "shop_price": "21", + "ge_buy_limit": "10000", + "examine": "A well carved limestone brick.", + "grand_exchange_price": "178", + "durability": null, + "name": "Limestone brick", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3420" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "178", + "durability": null, + "name": "Limestone brick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3421" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "4 doses of olive oil.", + "grand_exchange_price": "678", + "durability": null, + "name": "Olive oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3422" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "678", + "durability": null, + "name": "Olive oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3423" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "3 doses of olive oil.", + "grand_exchange_price": "413", + "durability": null, + "name": "Olive oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3424" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "413", + "durability": null, + "name": "Olive oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3425" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "2 doses of olive oil.", + "grand_exchange_price": "173", + "durability": null, + "name": "Olive oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3426" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "173", + "durability": null, + "name": "Olive oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3427" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "1 dose of olive oil.", + "grand_exchange_price": "110", + "durability": null, + "name": "Olive oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3428" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "110", + "durability": null, + "name": "Olive oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3429" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "3587", + "durability": null, + "name": "Sacred oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3430" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3587", + "durability": null, + "name": "Sacred oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3431" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "2596", + "durability": null, + "name": "Sacred oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3432" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2596", + "durability": null, + "name": "Sacred oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3433" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "1713", + "durability": null, + "name": "Sacred oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3434" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1713", + "durability": null, + "name": "Sacred oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3435" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "1846", + "durability": null, + "name": "Sacred oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3436" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1846", + "durability": null, + "name": "Sacred oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3437" + }, + { + "ge_buy_limit": "25000", + "examine": "Funeral logs used for burning loars.", + "grand_exchange_price": "853", + "durability": null, + "name": "Pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3438" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "853", + "durability": null, + "name": "Pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3439" + }, + { + "ge_buy_limit": "1000", + "examine": "Oak logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "1122", + "durability": null, + "name": "Oak pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3440" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1122", + "durability": null, + "name": "Oak pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3441" + }, + { + "ge_buy_limit": "1000", + "examine": "Willow logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "1164", + "durability": null, + "name": "Willow pyre logs", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3442" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1164", + "durability": null, + "name": "Willow pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3443" + }, + { + "ge_buy_limit": "1000", + "examine": "Maple logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "3313", + "durability": null, + "name": "Maple pyre logs", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3444" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3313", + "durability": null, + "name": "Maple pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3445" + }, + { + "ge_buy_limit": "1000", + "examine": "Yew logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "4424", + "durability": null, + "name": "Yew pyre logs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3446" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4424", + "durability": null, + "name": "Yew pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3447" + }, + { + "ge_buy_limit": "1000", + "examine": "Magic logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "5611", + "durability": null, + "name": "Magic pyre logs", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3448" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5611", + "durability": null, + "name": "Magic pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3449" + }, + { + "examine": "A bronze key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key red", + "archery_ticket_price": "0", + "id": "3450" + }, + { + "examine": "A bronze key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key brown", + "archery_ticket_price": "0", + "id": "3451" + }, + { + "examine": "A bronze key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key crimson", + "archery_ticket_price": "0", + "id": "3452" + }, + { + "examine": "A bronze key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key black", + "archery_ticket_price": "0", + "id": "3453" + }, + { + "examine": "A bronze key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key purple", + "archery_ticket_price": "0", + "id": "3454" + }, + { + "examine": "A steel key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key red", + "archery_ticket_price": "0", + "id": "3455" + }, + { + "examine": "A steel key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key brown", + "archery_ticket_price": "0", + "id": "3456" + }, + { + "examine": "A steel key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key crimson", + "archery_ticket_price": "0", + "id": "3457" + }, + { + "examine": "A steel key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key black", + "archery_ticket_price": "0", + "id": "3458" + }, + { + "examine": "A steel key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key purple", + "archery_ticket_price": "0", + "id": "3459" + }, + { + "examine": "A black key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key red", + "archery_ticket_price": "0", + "id": "3460" + }, + { + "examine": "A black key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key brown", + "archery_ticket_price": "0", + "id": "3461" + }, + { + "examine": "A black key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key crimson", + "archery_ticket_price": "0", + "id": "3462" + }, + { + "examine": "A black key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key black", + "archery_ticket_price": "0", + "id": "3463" + }, + { + "examine": "A black key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key purple", + "archery_ticket_price": "0", + "id": "3464" + }, + { + "examine": "A silver key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key red", + "archery_ticket_price": "0", + "id": "3465" + }, + { + "examine": "A silver key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key brown", + "archery_ticket_price": "0", + "id": "3466" + }, + { + "examine": "A silver key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key crimson", + "archery_ticket_price": "0", + "id": "3467" + }, + { + "examine": "A silver key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key black", + "archery_ticket_price": "0", + "id": "3468" + }, + { + "examine": "A silver key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key purple", + "archery_ticket_price": "0", + "id": "3469" + }, + { + "ge_buy_limit": "1000", + "examine": "Amazingly untouched by time.", + "grand_exchange_price": "956", + "durability": null, + "name": "Fine cloth", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3470" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "956", + "durability": null, + "name": "Fine cloth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3471" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black plateskirt with trim.", + "grand_exchange_price": "3077", + "durability": null, + "name": "Black plateskirt (t)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "3472", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black plateskirt with gold trim.", + "grand_exchange_price": "10600", + "durability": null, + "name": "Black plateskirt (g)", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "3473", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant plateskirt with trim.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "4403", + "name": "Adam plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3474", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant plateskirt with gold trim.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "11000", + "name": "Adam plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3475", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt with gold trim.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "42500", + "name": "Rune plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3476", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "shop_price": "81280", + "ge_buy_limit": "2", + "examine": "Rune plateskirt with trim.", + "durability": null, + "weight": "8", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "38300", + "name": "Rune plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3477", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "42000", + "name": "Zamorak plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3478", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt in the colours of Saradomin.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "44000", + "name": "Saradomin plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3479", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt in the colours of Guthix.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "39100", + "name": "Guthix plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3480", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody with complete gold trim & plating.", + "durability": null, + "weight": "10", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "2500000", + "name": "Gilded platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3481", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2500000", + "durability": null, + "name": "Gilded platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3482" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs with gold plate.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2200000", + "name": "Gilded platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3483", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2200000", + "durability": null, + "name": "Gilded platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3484" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt with gold plate.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "162300", + "name": "Gilded plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3485", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune full helmet with gold plate.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "477200", + "name": "Gilded full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3486", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "477200", + "durability": null, + "name": "Gilded full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3487" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield with gold plate.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "515400", + "name": "Gilded kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3488", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "515400", + "durability": null, + "name": "Gilded kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3489" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3490" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3491" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3492" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3493" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3494" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3495" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3496" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3497" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3498" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3499" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3500" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3501" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3502" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3503" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3504" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3505" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3506" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3507" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3508" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3509" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3510" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3511" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3512" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3513" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3514" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3515" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3516" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3517" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3518" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3519" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3520" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3521" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3522" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3523" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3524" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3525" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3526" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3527" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3528" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3529" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3530" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3531" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3532" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3533" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3534" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3535" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3536" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3537" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3538" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3539" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3540" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3541" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3542" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3543" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3544" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3545" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3546" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3547" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3548" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3549" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3550" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3551" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3552" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3553" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3554" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3555" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3556" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3557" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3558" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3559" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3560" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3561" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3562" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3563" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3564" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3565" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3566" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3567" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3568" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3569" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3570" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3571" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3572" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3573" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3574" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3575" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3576" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3577" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3578" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3579" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3580" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3581" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3582" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3583" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3584" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3585" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3586" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3587" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3588" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3589" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3590" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3591" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3592" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3593" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3594" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3595" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3596" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3597" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3598" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3599" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3600" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3601" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3602" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3603" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3604" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3605" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3607" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3609" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3610" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3611" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3612" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3613" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3614" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3615" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3616" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3617" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3618" + }, + { + "durability": null, + "name": "Black plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3668" + }, + { + "durability": null, + "name": "Black plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3669" + }, + { + "durability": null, + "name": "Adam plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3670" + }, + { + "durability": null, + "name": "Adam plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3671" + }, + { + "durability": null, + "name": "Rune plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3672" + }, + { + "durability": null, + "name": "Rune plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3673" + }, + { + "durability": null, + "name": "Zamorak plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3674" + }, + { + "durability": null, + "name": "Saradomin plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3675" + }, + { + "durability": null, + "name": "Guthix plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3676" + }, + { + "durability": null, + "name": "Gilded plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3677" + }, + { + "shop_price": "13000", + "examine": "An exquisitely shaped tool specially designed for fixing temples.", + "durability": null, + "name": "Flamtaer hammer", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3678" + }, + { + "examine": "A sealed letter of recommendation.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3685" + }, + { + "examine": "It's almost a musical instrument.", + "durability": null, + "name": "Unstrung lyre", + "weight": "1", + "archery_ticket_price": "0", + "id": "3688", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Lyre", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "3689", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "3690", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(1)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "3691", + "equipment_slot": "3" + }, + { + "examine": "I can use this to make a lyre.", + "durability": null, + "name": "Branch", + "weight": "1", + "archery_ticket_price": "0", + "id": "3692" + }, + { + "shop_price": "1000", + "examine": "I can spin this into golden wool.", + "durability": null, + "name": "Golden fleece", + "weight": "1", + "archery_ticket_price": "0", + "id": "3693" + }, + { + "examine": "I can use this to make a lyre.", + "durability": null, + "name": "Golden wool", + "weight": "1", + "archery_ticket_price": "0", + "id": "3694" + }, + { + "turn90cw_anim": "6662", + "examine": "The lowest maintenance pet you will ever have.", + "walk_anim": "6658", + "durability": null, + "turn90ccw_anim": "6663", + "turn180_anim": "6659", + "render_anim": "792", + "equipment_slot": "3", + "stand_anim": "6657", + "name": "Pet rock", + "run_anim": "6660", + "archery_ticket_price": "0", + "id": "3695", + "stand_turn_anim": "6661" + }, + { + "examine": "Talisman to bind the Draugen.", + "durability": null, + "name": "Hunters' talisman", + "archery_ticket_price": "0", + "id": "3696" + }, + { + "examine": "Talisman to bind the Draugen.", + "durability": null, + "name": "Hunters' talisman", + "archery_ticket_price": "0", + "id": "3697" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some flowers from a distant land.", + "durability": null, + "name": "Exotic flower", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3698" + }, + { + "examine": "A hauntingly beautiful love ballad.", + "durability": null, + "name": "Fremennik ballad", + "archery_ticket_price": "0", + "id": "3699" + }, + { + "examine": "A pair of sturdy made custom boots.", + "durability": null, + "name": "Sturdy boots", + "archery_ticket_price": "0", + "id": "3700" + }, + { + "examine": "Could probably be a bit clearer?", + "durability": null, + "name": "Tracking map", + "archery_ticket_price": "0", + "id": "3701" + }, + { + "examine": "A finely crafted string for a custom bow", + "durability": null, + "name": "Custom bow string", + "archery_ticket_price": "0", + "id": "3702" + }, + { + "examine": "An extremely odd, non-edible fish.", + "durability": null, + "name": "Unusual fish", + "archery_ticket_price": "0", + "id": "3703" + }, + { + "examine": "Map showing the best fishing spots out at sea.", + "durability": null, + "name": "Sea fishing map", + "archery_ticket_price": "0", + "id": "3704" + }, + { + "examine": "An estimate of expected local weather conditions.", + "durability": null, + "name": "Weather forecast", + "archery_ticket_price": "0", + "id": "3705" + }, + { + "examine": "Shows the wearer is worthy of the Champions table.", + "durability": null, + "name": "Champions token", + "archery_ticket_price": "0", + "id": "3706" + }, + { + "examine": "Probably the greatest cocktail in the world.", + "durability": null, + "name": "Legendary cocktail", + "archery_ticket_price": "0", + "id": "3707" + }, + { + "examine": "A signed statement promising a reduction on sales tax.", + "durability": null, + "name": "Fiscal statement", + "archery_ticket_price": "0", + "id": "3708" + }, + { + "shop_price": "5000", + "examine": "A legally binding contract promising not to enter the longhall.", + "durability": null, + "name": "Promissory note", + "archery_ticket_price": "0", + "id": "3709" + }, + { + "examine": "This employment contract is for a warrior to act as a bodyguard.", + "durability": null, + "name": "Warriors' contract", + "archery_ticket_price": "0", + "id": "3710" + }, + { + "shop_price": "325", + "examine": "A lot of beer in a barrel.", + "grand_exchange_price": "1555", + "durability": null, + "name": "Keg of beer", + "tradeable": "true", + "weight": "20", + "archery_ticket_price": "0", + "id": "3711" + }, + { + "examine": "Suspiciously close to beer, but without the side effects.", + "durability": null, + "name": "Low alcohol keg", + "weight": "20", + "archery_ticket_price": "0", + "id": "3712" + }, + { + "examine": "It's some kind of weird little parcel thing.", + "durability": null, + "name": "Strange object", + "archery_ticket_price": "0", + "id": "3713" + }, + { + "examine": "It's some kind of weird little parcel thing.", + "durability": null, + "name": "Lit strange object", + "archery_ticket_price": "0", + "id": "3714" + }, + { + "examine": "A red coloured disk, apparently made out of wood.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3715" + }, + { + "examine": "A red coloured disk, apparently made out of wood.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3716" + }, + { + "examine": "A very attractive magnet.", + "durability": null, + "name": "Magnet", + "archery_ticket_price": "0", + "id": "3718" + }, + { + "examine": "Some blue thread.", + "durability": null, + "name": "Thread", + "archery_ticket_price": "0", + "id": "3719" + }, + { + "examine": "A small pick for cracking small objects.", + "durability": null, + "name": "Pick", + "archery_ticket_price": "0", + "id": "3720" + }, + { + "examine": "Might be fun to play with in the bath.", + "durability": null, + "name": "Ship toy", + "archery_ticket_price": "0", + "id": "3721" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's a bucket of salty water.", + "durability": null, + "name": "Full bucket", + "archery_ticket_price": "0", + "id": "3722" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is eighty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "4/5ths full bucket", + "archery_ticket_price": "0", + "id": "3723" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is sixty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "3/5ths full bucket", + "archery_ticket_price": "0", + "id": "3724" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is forty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "2/5ths full bucket", + "archery_ticket_price": "0", + "id": "3725" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is twenty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "1/5ths full bucket", + "archery_ticket_price": "0", + "id": "3726" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Empty bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3727" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket of water is frozen solid.", + "durability": null, + "name": "Frozen bucket", + "archery_ticket_price": "0", + "id": "3728" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug is completely full. It has a 3 painted on its side.", + "durability": null, + "name": "Full jug", + "archery_ticket_price": "0", + "id": "3729" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug is two thirds full. It has a 3 painted on its side.", + "durability": null, + "name": "2/3rds full jug", + "archery_ticket_price": "0", + "id": "3730" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug is one third full. It has a 3 painted on its side.", + "durability": null, + "name": "1/3rds full jug", + "archery_ticket_price": "0", + "id": "3731" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "1", + "examine": "This jug is empty.", + "grand_exchange_price": "164", + "durability": null, + "name": "Empty jug", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "3732" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug of water is frozen solid.", + "durability": null, + "name": "Frozen jug", + "archery_ticket_price": "0", + "id": "3733" + }, + { + "examine": "An unusually shaped vase. You can see something glinting inside.", + "durability": null, + "name": "Vase", + "archery_ticket_price": "0", + "id": "3734" + }, + { + "examine": "An unusually shaped vase full of water. You can see something glinting inside.", + "durability": null, + "name": "Vase of water", + "archery_ticket_price": "0", + "id": "3735" + }, + { + "examine": "An unusually shaped vase full of ice. You can see something glinting inside.", + "durability": null, + "name": "Frozen vase", + "archery_ticket_price": "0", + "id": "3736" + }, + { + "examine": "This looks like a lid to some kind of container.", + "durability": null, + "name": "Vase lid", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3737" + }, + { + "examine": "The lid is screwed on tightly. ", + "durability": null, + "name": "Sealed vase", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3738" + }, + { + "examine": "The lid is screwed on tightly. It is full of water.", + "durability": null, + "name": "Sealed vase", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3739" + }, + { + "examine": "The lid is screwed on tightly. It is very cold. ", + "durability": null, + "name": "Sealed vase", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3740" + }, + { + "examine": "A small, cold key.", + "durability": null, + "name": "Frozen key", + "archery_ticket_price": "0", + "id": "3741" + }, + { + "examine": "The colouring on it seems to be some kind of sticky goop.", + "durability": null, + "name": "Red herring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3742" + }, + { + "examine": "A red coloured disk, apparently made out of wood.", + "durability": null, + "name": "Red disk", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3743" + }, + { + "examine": "A simple looking disk made of wood.", + "durability": null, + "name": "Wooden disk", + "archery_ticket_price": "0", + "id": "3744" + }, + { + "shop_price": "27", + "examine": "The key to leave the Seer's house.", + "durability": null, + "name": "Seer's key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3745" + }, + { + "examine": "Yup, it's sticky, it's red and it's goop.", + "durability": null, + "name": "Sticky red goop", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "3746" + }, + { + "durability": null, + "name": "Sticky red goop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3747" + }, + { + "remove_head": "true", + "examine": "A sturdy helm worn only by Fremennik clan members.", + "durability": null, + "name": "Fremennik helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "3748", + "absorb": "1,0,2", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helmet is worn by archers.", + "durability": null, + "weight": "2", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48900", + "name": "Archer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3749", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Archer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3750" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helmet is worn by berserkers.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "60900", + "name": "Berserker helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3751", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Berserker helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3752" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helm is worn by warriors.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "50700", + "name": "Warrior helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3753", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "50700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Warrior helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3754" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helm is worn by farseers.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "47900", + "name": "Farseer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3755", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Farseer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3756" + }, + { + "attack_anims": "390,390,381,390", + "examine": "A sword used only by Fremennik warriors.", + "durability": null, + "name": "Fremennik blade", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "4", + "weapon_interface": "6", + "id": "3757", + "bonuses": "6,29,-2,0,0,0,1,0,0,0,0,28,0,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "examine": "A shield worn by Fremennik warriors.", + "durability": null, + "name": "Fremennik shield", + "destroy": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "3758", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "697", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3759", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "697", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3760" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "54", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3761", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "54", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3762" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "581", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3763", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "581", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3764" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "912", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3765", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "912", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3766" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "100", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3767", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "100", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3768" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "486", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3769", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "486", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3770" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "242", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3771", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "242", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3772" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "500", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3773", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "500", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3774" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "450", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3775", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "450", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3776" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "674", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3777", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "674", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3778" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "809", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3779", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "809", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3780" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "632", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3781", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "632", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3782" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "517", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3783", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "517", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3784" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "398", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3785", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "398", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3786" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "283", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3787", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "283", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3788" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "966", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3789", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "966", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3790" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "205", + "durability": null, + "name": "Fremennik boots", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3791", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "205", + "durability": null, + "name": "Fremennik boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3792" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "The latest fashion of Rellekka.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1191", + "name": "Fremennik robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3793", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "durability": null, + "name": "Fremennik robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3794" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "The latest fashion of Rellekka.", + "grand_exchange_price": "663", + "durability": null, + "name": "Fremennik skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "3795", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "663", + "durability": null, + "name": "Fremennik skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3796" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "grand_exchange_price": "2380", + "durability": null, + "name": "Fremennik hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3797", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2380", + "durability": null, + "name": "Fremennik hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3798" + }, + { + "ge_buy_limit": "10", + "shop_price": "650", + "examine": "These will keep my hands warm!", + "grand_exchange_price": "172", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "3799", + "bonuses": "0,0,0,0,0,0,1,2,0,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "172", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3800" + }, + { + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "A lot of beer in a barrel. Beer in a barrel - a specialty of the Fremennik Province.", + "grand_exchange_price": "1817", + "durability": null, + "name": "Keg of beer", + "tradeable": "true", + "weight": "20", + "archery_ticket_price": "0", + "id": "3801" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1817", + "durability": null, + "name": "Keg of beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3802" + }, + { + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "393", + "durability": null, + "name": "Beer", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3803" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "393", + "durability": null, + "name": "Beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3804" + }, + { + "shop_price": "26", + "examine": "A big cup for a big thirst.", + "durability": null, + "name": "Tankard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3805" + }, + { + "durability": null, + "name": "Tankard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3806" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Saradomin page 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3827" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "686000", + "durability": null, + "name": "Saradomin page 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3828" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "522800", + "durability": null, + "name": "Saradomin page 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3829" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "629500", + "durability": null, + "name": "Saradomin page 4", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3830" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "7100000", + "durability": null, + "name": "Zamorak page 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3831" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "5400000", + "durability": null, + "name": "Zamorak page 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3832" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "4700000", + "durability": null, + "name": "Zamorak page 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3833" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "5900000", + "durability": null, + "name": "Zamorak page 4", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3834" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Guthix page 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3835" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "997100", + "durability": null, + "name": "Guthix page 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3836" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "953100", + "durability": null, + "name": "Guthix page 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3837" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Guthix page 4", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3838" + }, + { + "shop_price": "5000", + "examine": "An incomplete book of Saradomin.", + "durability": null, + "name": "Damaged book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3839", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "5000", + "examine": "The Holy book of Saradomin.", + "durability": null, + "name": "Holy book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3840", + "bonuses": "0,0,0,0,0,8,8,8,8,8,8,0,5,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "5000", + "examine": "An incomplete book of Zamorak.", + "durability": null, + "name": "Damaged book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3841", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "examine": "The unholy book of Zamorak.", + "durability": null, + "name": "Unholy book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3842", + "bonuses": "8,8,8,8,8,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "5000", + "examine": "An incomplete book of Guthix.", + "durability": null, + "name": "Damaged book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3843", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "examine": "The holy book of Guthix.", + "durability": null, + "name": "Book of balance", + "weight": "1", + "archery_ticket_price": "0", + "id": "3844", + "bonuses": "4,4,4,4,4,4,4,4,4,4,4,0,5,0,0", + "equipment_slot": "5" + }, + { + "examine": "Looks like some kind of manual.", + "durability": null, + "name": "Manual", + "tradeable": "false", + "destroy": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3847" + }, + { + "examine": "A key to the front door of the lighthouse. (Horror from the Deep)", + "durability": null, + "name": "Lighthouse key", + "archery_ticket_price": "0", + "id": "3848" + }, + { + "examine": "Looks old and rusty...", + "durability": null, + "name": "Rusty casket", + "tradeable": "false", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3849" + }, + { + "durability": null, + "name": "Unholy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3852" + }, + { + "shop_price": "490", + "ge_buy_limit": "10000", + "examine": "An enchanted necklace.", + "grand_exchange_price": "852", + "durability": null, + "name": "Games necklace(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3853", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "852", + "durability": null, + "name": "Games necklace(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3854" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3855", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3856" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3857", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3858" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3859", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3860" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3861", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3862" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3863", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3864" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3865", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3866" + }, + { + "shop_price": "490", + "ge_buy_limit": "10000", + "examine": "An enchanted necklace.", + "grand_exchange_price": "2093", + "durability": null, + "name": "Games necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3867", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2093", + "durability": null, + "name": "Games necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3868" + }, + { + "durability": null, + "name": "Stool", + "archery_ticket_price": "0", + "id": "3893", + "equipment_slot": "3" + }, + { + "examine": "It's not very good.", + "durability": null, + "name": "Awful anthem", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3894" + }, + { + "examine": "Much better.", + "durability": null, + "name": "Good anthem", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3895" + }, + { + "examine": "Just needs the King's signature.", + "durability": null, + "name": "Treaty", + "archery_ticket_price": "0", + "id": "3896" + }, + { + "examine": "For making a giant pen.", + "durability": null, + "name": "Giant nib", + "archery_ticket_price": "0", + "id": "3897" + }, + { + "examine": "The king should be able to use this.", + "durability": null, + "name": "Giant pen", + "archery_ticket_price": "0", + "id": "3898" + }, + { + "shop_price": "15", + "examine": "Not as good as a pet frog.", + "durability": null, + "name": "Iron sickle", + "weight": "1.6", + "archery_ticket_price": "0", + "id": "3899", + "weapon_interface": "6", + "bonuses": "0,0,0,0,0,0,1,1,1,1,0,1,0,0,0", + "equipment_slot": "3" + }, + { + "examine": "Managing Thine Kingdom for Noobes by A. Ghrim.", + "durability": null, + "name": "Ghrim's book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3901" + }, + { + "examine": "A pile of gout tubers suitable for use in mountainous terrain.", + "durability": null, + "name": "Hardy gout tuber", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4001" + }, + { + "examine": "It looks like some kind of control panel.", + "durability": null, + "name": "Spare controls", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "4002" + }, + { + "examine": "It's the official Gnome Royal Seal, signed by King Narode Shareen.", + "durability": null, + "name": "Gnome royal seal", + "archery_ticket_price": "0", + "id": "4004" + }, + { + "shop_price": "160", + "examine": "Unreadable orders handwritten by King Narnode Shareen.", + "durability": null, + "name": "Narnode's orders", + "archery_ticket_price": "0", + "id": "4005" + }, + { + "shop_price": "10", + "examine": "Magical monkey talking dentures! What more can we say? Ook!", + "durability": null, + "name": "Monkey dentures", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "4006" + }, + { + "examine": "A gold bar with a talkative monkey spirit.", + "durability": null, + "name": "Enchanted bar", + "weight": "2", + "archery_ticket_price": "0", + "id": "4007" + }, + { + "shop_price": "3", + "examine": "It's... the eye of a gnome! Now what on earth could one do with this?", + "durability": null, + "name": "Eye of gnome", + "weight": "1", + "archery_ticket_price": "0", + "id": "4008" + }, + { + "shop_price": "3", + "examine": "It's... the eye of a gnome! Now what on earth could one do with this?", + "durability": null, + "name": "Eye of gnome", + "weight": "1", + "archery_ticket_price": "0", + "id": "4009" + }, + { + "shop_price": "3", + "examine": "They are Monkey Nuts. Yummy.", + "durability": null, + "name": "Monkey nuts", + "archery_ticket_price": "0", + "id": "4012" + }, + { + "shop_price": "50", + "examine": "It's a monkey bar. It looks highly nutritious.", + "durability": null, + "name": "Monkey bar", + "archery_ticket_price": "0", + "id": "4014" + }, + { + "shop_price": "300", + "examine": "It's a bowl full of mushy banana", + "durability": null, + "name": "Banana stew", + "archery_ticket_price": "0", + "id": "4016" + }, + { + "examine": "It's an amulet mould shaped like a monkey head.", + "durability": null, + "name": "M'amulet mould", + "weight": "1", + "archery_ticket_price": "0", + "id": "4020" + }, + { + "examine": "It's an Amulet of Monkey Speak. It makes vague chattering noises.", + "durability": null, + "name": "M'speak amulet", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4021", + "equipment_slot": "2" + }, + { + "examine": "It's an unstrung Amulet of Monkey Speak. It makes vague chattering noises.", + "durability": null, + "name": "M'speak amulet", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4022" + }, + { + "shop_price": "1000", + "examine": "A magic talisman in shape of a monkey head.", + "durability": null, + "name": "Monkey talisman", + "weight": "1.25", + "archery_ticket_price": "0", + "id": "4023" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4024", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4025", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4026", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4027", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4028", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4029", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4030", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4031", + "equipment_slot": "3" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Dummy", + "archery_ticket_price": "0", + "id": "4032" + }, + { + "examine": "It's a very ancient skull from some kind of ape.", + "durability": null, + "name": "Monkey skull", + "archery_ticket_price": "0", + "id": "4034" + }, + { + "examine": "It is the official sigil of the 10th squad of the Royal Guard.", + "durability": null, + "name": "10th squad sigil", + "archery_ticket_price": "0", + "id": "4035", + "equipment_slot": "2" + }, + { + "turn90cw_anim": "1424", + "examine": "The Holy Team Standard", + "walk_anim": "1422", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Saradomin banner", + "tradeable": "false", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "4037", + "stand_turn_anim": "1426" + }, + { + "durability": null, + "name": "Saradomin banner", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4038" + }, + { + "turn90cw_anim": "1424", + "examine": "The Zamorak team's flag.", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Zamorak banner", + "tradeable": "false", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "4039", + "stand_turn_anim": "1426" + }, + { + "durability": null, + "name": "Zamorak banner", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4040" + }, + { + "examine": "The colours of Saradomin/Zamorak.", + "durability": null, + "name": "Hooded cloak", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4041", + "equipment_slot": "1" + }, + { + "examine": "The colours of Saradomin/Zamorak.", + "durability": null, + "name": "Hooded cloak", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4042", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Rock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4044" + }, + { + "examine": "I could use this to destroy things...", + "durability": null, + "name": "Explosive potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4045" + }, + { + "durability": null, + "name": "Explosive potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4046" + }, + { + "examine": "A coil of rope.", + "durability": null, + "name": "Climbing rope", + "archery_ticket_price": "0", + "id": "4047" + }, + { + "durability": null, + "name": "Climbing rope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4048" + }, + { + "examine": "A box of bandages for healing.", + "durability": null, + "name": "Bandages", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4049" + }, + { + "durability": null, + "name": "Bandages", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4050" + }, + { + "examine": "Good for repairing a broken cannon.", + "durability": null, + "name": "Toolkit", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4051" + }, + { + "durability": null, + "name": "Toolkit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4052" + }, + { + "examine": "Handy for hindering the enemy team's movement.", + "durability": null, + "name": "Barricade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4053" + }, + { + "durability": null, + "name": "Barricade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4054" + }, + { + "shop_price": "5", + "examine": "It's a manual for Castle Wars", + "durability": null, + "name": "Castlewars manual", + "weight": "1", + "archery_ticket_price": "0", + "id": "4055" + }, + { + "examine": "I can exchange these for further items.", + "durability": null, + "name": "Castle wars ticket", + "archery_ticket_price": "0", + "id": "4067" + }, + { + "requirements": "{0,5}", + "shop_price": "50", + "turn90cw_anim": "821", + "examine": "A very decorative sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "equipment_slot": "3", + "stand_anim": "808", + "name": "Decorative sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4068", + "stand_turn_anim": "823", + "bonuses": "13,18,-2,0,0,0,3,2,0,0,0,16,0,0,0" + }, + { + "remove_sleeves": "true", + "requirements": "{1,5}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4069", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,5}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4070", + "bonuses": "0,0,0,-21,-7,17,16,15,-4,16,2,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "40", + "examine": "A very decorative helm.", + "durability": null, + "name": "Decorative helm", + "weight": "1", + "archery_ticket_price": "0", + "id": "4071", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,3,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,5}", + "shop_price": "60", + "examine": "A very decorative shield.", + "durability": null, + "name": "Decorative shield", + "archery_ticket_price": "0", + "id": "4072", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Not so useful for lighting a fire.", + "durability": null, + "name": "Damp tinderbox", + "archery_ticket_price": "0", + "id": "4073" + }, + { + "durability": null, + "name": "Damp tinderbox", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4074" + }, + { + "examine": "A bizarre fungus. It glows with a pale blue light.", + "durability": null, + "name": "Glowing fungus", + "archery_ticket_price": "0", + "id": "4075" + }, + { + "examine": "A key I found in the lower levels of the Morytanian mines. (Haunted Mine) / As the 'Innocent-looking key': A shiny key sitting quietly on a crate.", + "durability": null, + "name": "Crystal-mine key", + "archery_ticket_price": "0", + "id": "4077" + }, + { + "examine": "I stole this from a Saradominist I met South of Mort'ton.", + "durability": null, + "name": "Zealot's key", + "archery_ticket_price": "0", + "id": "4078" + }, + { + "examine": "A gift from Santa.", + "durability": null, + "name": "Yo-yo", + "archery_ticket_price": "0", + "id": "4079" + }, + { + "examine": "Increases the wearer's strength and accuracy by 15% when fighting the undead.", + "durability": null, + "name": "Salve amulet", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "4081", + "bonuses": "0,0,0,0,0,3,3,3,0,0,3,0,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "An unstrung crystal imbued with the power of Saradomin.", + "durability": null, + "name": "Salve shard", + "archery_ticket_price": "0", + "id": "4082" + }, + { + "examine": "Unwaxed: It needs waxing before I can use it. Waxed: A waxed sled.", + "durability": null, + "name": "Sled", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4083", + "equipment_slot": "3" + }, + { + "turn90cw_anim": "1468", + "examine": "Unwaxed: It needs waxing before I can use it. Waxed: A waxed sled.", + "walk_anim": "1468", + "durability": null, + "turn90ccw_anim": "1468", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "1468", + "render_anim": "1119", + "equipment_slot": "3", + "stand_anim": "1461", + "name": "Sled", + "run_anim": "1468", + "archery_ticket_price": "0", + "id": "4084", + "stand_turn_anim": "1468" + }, + { + "examine": "I can use this to wax my sled.", + "durability": null, + "name": "Wax", + "archery_ticket_price": "0", + "id": "4085", + "equipment_slot": "5" + }, + { + "examine": "These pale flowers have a pungent odour.", + "durability": null, + "name": "Trollweiss", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "4086", + "weapon_interface": "12", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0", + "equipment_slot": "3" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "Looks pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "190500", + "name": "Dragon platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4087", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "190500", + "durability": null, + "name": "Dragon platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4088" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "13700", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "4089", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13700", + "durability": null, + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4090" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "ge_buy_limit": "100", + "examine": "The upper half of a magical robe.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "72100", + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4091", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "72100", + "durability": null, + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4092" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "ge_buy_limit": "100", + "examine": "The lower half of a magical robe.", + "durability": null, + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "47700", + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4093", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47700", + "durability": null, + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4094" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical gloves.", + "durability": null, + "weight": "0.4", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "5913", + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4095", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5913", + "durability": null, + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4096" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical boots.", + "durability": null, + "weight": "0.4", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "6303", + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4097", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6303", + "durability": null, + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4098" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "Black: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "16700", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "4099", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16700", + "durability": null, + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4100" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "ge_buy_limit": "100", + "examine": "The upper half of a magical robe.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "75100", + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4101", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "75100", + "durability": null, + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4102" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "ge_buy_limit": "100", + "examine": "The lower half of a magical robe.", + "durability": null, + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "50700", + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4103", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "50700", + "durability": null, + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4104" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Dark magical gloves.", + "durability": null, + "weight": "0.4", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "8913", + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4105", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8913", + "durability": null, + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4106" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical boots.", + "durability": null, + "weight": "0.4", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "9303", + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4107", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9303", + "durability": null, + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4108" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "White: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "16700", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "4109", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16700", + "durability": null, + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4110" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "ge_buy_limit": "100", + "examine": "The upper half of a magical robe.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "75100", + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4111", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "75100", + "durability": null, + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4112" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "ge_buy_limit": "100", + "examine": "The lower half of a magical robe.", + "durability": null, + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "50700", + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4113", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "50700", + "durability": null, + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4114" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Bright magical gloves.", + "durability": null, + "weight": "0.4", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "8913", + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4115", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8913", + "durability": null, + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4116" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical boots.", + "durability": null, + "weight": "0.4", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "9303", + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4117", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9303", + "durability": null, + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4118" + }, + { + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "359", + "durability": null, + "name": "Bronze boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4119", + "bonuses": "0,0,0,-3,-1,1,2,3,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "359", + "durability": null, + "name": "Bronze boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4120" + }, + { + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "17000", + "durability": null, + "name": "Iron boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4121", + "bonuses": "0,0,0,-3,-1,2,3,4,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17000", + "durability": null, + "name": "Iron boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4122" + }, + { + "requirements": "{1,5}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "258", + "durability": null, + "name": "Steel boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4123", + "bonuses": "0,0,0,-3,-1,5,6,7,0,0,5,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "258", + "durability": null, + "name": "Steel boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4124" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "317", + "durability": null, + "name": "Black boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4125", + "bonuses": "0,0,0,-3,-1,7,8,9,0,0,7,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "317", + "durability": null, + "name": "Black boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4126" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "580", + "durability": null, + "name": "Mithril boots", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4127", + "bonuses": "0,0,0,-3,-1,8,9,10,0,0,8,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "580", + "durability": null, + "name": "Mithril boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4128" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "1336", + "durability": null, + "name": "Adamant boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4129", + "bonuses": "0,0,0,-3,-1,10,11,12,0,0,9,1,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1336", + "durability": null, + "name": "Adamant boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4130" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "durability": null, + "weight": "1.3", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "7474", + "name": "Rune boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4131", + "bonuses": "0,0,0,-3,-1,12,13,14,0,0,10,2,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7474", + "durability": null, + "name": "Rune boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4132" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4133" + }, + { + "examine": "A spiky crawling critter. (level 23) Not very tasty-looking. (level 138)", + "durability": null, + "name": "Cave crawler", + "archery_ticket_price": "0", + "attack_speed": "3", + "id": "4134" + }, + { + "examine": "A tortured screaming soul.", + "durability": null, + "name": "Banshee", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4135" + }, + { + "examine": "The slime of evil.", + "durability": null, + "name": "Rockslug", + "archery_ticket_price": "0", + "id": "4136" + }, + { + "examine": "The winged reptile.", + "durability": null, + "name": "Cockatrice", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4137" + }, + { + "examine": "A small fire demon.", + "durability": null, + "name": "Pyrefiend", + "archery_ticket_price": "0", + "id": "4138" + }, + { + "examine": "The eyes of evil.", + "durability": null, + "name": "Basilisk", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4139" + }, + { + "examine": "An evil magic user.", + "durability": null, + "name": "Infernal mage", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4140" + }, + { + "examine": "The tongue of evil.", + "durability": null, + "name": "Bloodveld", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4141" + }, + { + "examine": "• Needs cream.....• Wibbly.• Wobbly...• There's always room for jelly.• Doesn't look so tough...• Looks scared to see me.", + "durability": null, + "name": "Jelly", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4142" + }, + { + "durability": null, + "name": "Turoth", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4143" + }, + { + "examine": "A very smelly ghost.", + "durability": null, + "name": "Abberant spectre", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4144" + }, + { + "examine": "The vacuumed face of evil.", + "durability": null, + "name": "Dust devil", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4145" + }, + { + "durability": null, + "name": "Kurask", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4146" + }, + { + "examine": "Flies like a rock.", + "durability": null, + "name": "Gargoyle", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4147" + }, + { + "durability": null, + "name": "Nechryael", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4148" + }, + { + "examine": "A denizen of the Abyss!", + "durability": null, + "name": "Abyssal demon", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4149" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4150", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,28,0,0" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A weapon from the Abyss.", + "walk_anim": "1660", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "1659", + "equipment_slot": "3", + "attack_anims": "1658,1658,1658,1658", + "grand_exchange_price": "413500", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1661", + "archery_ticket_price": "0", + "id": "4151", + "stand_turn_anim": "823", + "bonuses": "0,82,0,0,0,0,0,0,0,0,0,82,0,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "0.45", + "weapon_interface": "11", + "equip_audio": "2249", + "render_anim": "620", + "lendable": "true", + "attack_audios": "2720,0,0,0", + "name": "Abyssal whip" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "413500", + "durability": null, + "name": "Abyssal whip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4152" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1663", + "examine": "Simplicity is the best weapon.", + "walk_anim": "1663", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1663", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1663", + "defence_anim": "1666", + "equipment_slot": "3", + "attack_anims": "1665,1665,1665,1665", + "grand_exchange_price": "29900", + "stand_anim": "1662", + "tradeable": "true", + "run_anim": "1664", + "archery_ticket_price": "0", + "id": "4153", + "stand_turn_anim": "823", + "bonuses": "0,0,81,0,0,0,0,0,0,0,0,79,0,0,0", + "requirements": "{0,50}-{2,50}", + "durability": null, + "weight": "4.5", + "weapon_interface": "10", + "render_anim": "27", + "lendable": "true", + "attack_audios": "2714,0,0,0", + "name": "Granite maul" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "29900", + "durability": null, + "name": "Granite maul", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4154" + }, + { + "shop_price": "1", + "examine": "I can contact the Slayer Masters with this.", + "durability": null, + "name": "Enchanted gem", + "archery_ticket_price": "0", + "id": "4155" + }, + { + "requirements": "{1,20}-{18,25}", + "shop_price": "5000", + "ge_buy_limit": "100", + "examine": "I can just about see things in this shield's reflection.", + "durability": null, + "weight": "2.2", + "equipment_slot": "5", + "grand_exchange_price": "3318", + "name": "Mirror shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4156", + "bonuses": "0,0,0,0,0,10,15,5,5,10,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3318", + "durability": null, + "name": "Mirror shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4157" + }, + { + "requirements": "{0,55}-{18,50}", + "shop_price": "31000", + "turn90cw_anim": "1207", + "examine": "A spear with a leaf-shaped point.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "stand_anim": "813", + "name": "Leaf-bladed spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4158", + "stand_turn_anim": "1209", + "bonuses": "47,42,36,0,0,1,1,0,0,0,0,50,0,0,0" + }, + { + "requirements": "{0,55}-{18,50}", + "shop_price": "31000", + "examine": "A spear with a leaf-shaped point.", + "durability": null, + "name": "Leaf-bladed spear", + "weight": "2", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "4159", + "equipment_slot": "3" + }, + { + "requirements": "{18,55}-{4,50}", + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrow", + "archery_ticket_price": "0", + "id": "4160", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "A bag of salt.", + "grand_exchange_price": "1", + "durability": null, + "name": "Bag of salt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4161" + }, + { + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "I can even smash stone with this.", + "grand_exchange_price": "140", + "durability": null, + "name": "Rock hammer", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "4162", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "140", + "durability": null, + "name": "Rock hammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4163" + }, + { + "requirements": "{18,10}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Stops me breathing in too much dust.", + "grand_exchange_price": "615", + "durability": null, + "name": "Face mask", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4164", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "615", + "durability": null, + "name": "Face mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4165" + }, + { + "requirements": "{18,15}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "These will protect my ears from loud noise.", + "grand_exchange_price": "484", + "durability": null, + "name": "Earmuffs", + "tradeable": "true", + "weight": "2.6", + "archery_ticket_price": "0", + "id": "4166", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "484", + "durability": null, + "name": "Earmuffs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4167" + }, + { + "requirements": "{18,60}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Protects me from any bad smells.", + "grand_exchange_price": "523", + "durability": null, + "name": "Nose peg", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "4168", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "523", + "durability": null, + "name": "Nose peg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4169" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An old and magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "12100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4170", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,12,0,2,3,1,10,0,0,35,0,0,0", + "requirements": "{18,55}-{6,50}", + "shop_price": "21000", + "durability": null, + "weight": "1.8", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Slayer's staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12100", + "durability": null, + "name": "Slayer's staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4171" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4172", + "equipment_slot": "13" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4173", + "equipment_slot": "13" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4174", + "equipment_slot": "13" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4175", + "equipment_slot": "13" + }, + { + "examine": "A weapon from the Abyss.", + "rare_item": "true", + "durability": null, + "weight": "0.45", + "attack_speed": "4", + "render_anim": "620", + "lendable": "true", + "grand_exchange_price": "388392", + "name": "Abyssal whip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4178", + "bonuses": "0,82,0,0,0,0,0,0,0,0,0,82,0,0,0" + }, + { + "examine": "A big, bad troll.", + "durability": null, + "name": "Stick", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "4179" + }, + { + "lendable": "true", + "examine": "Looks pretty heavy.", + "grand_exchange_price": "165900", + "durability": null, + "name": "Dragon platelegs", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "4180", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "durability": null, + "name": "Mouth grip", + "archery_ticket_price": "0", + "id": "4181", + "equipment_slot": "3" + }, + { + "examine": "A pale, tough looking herb.", + "durability": null, + "name": "Goutweed", + "archery_ticket_price": "0", + "id": "4182" + }, + { + "examine": "A six-pointed marble and obsidian amulet", + "durability": null, + "name": "Star amulet", + "archery_ticket_price": "0", + "id": "4183" + }, + { + "examine": "Upon close examination, this seems to be a key.", + "durability": null, + "name": "Cavern key", + "archery_ticket_price": "0", + "id": "4184" + }, + { + "examine": "Upon close examination, this seems to be a key.", + "durability": null, + "name": "Tower key", + "archery_ticket_price": "0", + "id": "4185" + }, + { + "examine": "Upon close examination, this seems to be a key.", + "durability": null, + "name": "Shed key", + "archery_ticket_price": "0", + "id": "4186" + }, + { + "examine": "Triangular in shape, made from marble, and as large as your hand.", + "durability": null, + "name": "Marble amulet", + "archery_ticket_price": "0", + "id": "4187" + }, + { + "examine": "Triangular in shape, made from obsidian, and as large as your hand.", + "durability": null, + "name": "Obsidian amulet", + "archery_ticket_price": "0", + "id": "4188" + }, + { + "examine": "A length of garden cane.", + "durability": null, + "name": "Garden cane", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4189" + }, + { + "examine": "See article", + "durability": null, + "name": "Garden brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4190" + }, + { + "examine": "See article", + "durability": null, + "name": "Extended brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4191" + }, + { + "examine": "See article", + "durability": null, + "name": "Extended brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4192" + }, + { + "examine": "See article", + "durability": null, + "name": "Extended brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4193", + "equipment_slot": "3" + }, + { + "examine": "A pair of limp, dead arms.", + "durability": null, + "name": "Arms", + "weight": "2", + "archery_ticket_price": "0", + "id": "4195" + }, + { + "examine": "A pair of lifeless, rotting legs.", + "durability": null, + "name": "Legs", + "archery_ticket_price": "0", + "id": "4196" + }, + { + "examine": "No brain: A gruesome, decapitated head, whose brain has rotted away. Brain: A gruesome, decapitated head - its eyes stare lifelessly at nothing.", + "durability": null, + "name": "Decapitated head", + "weight": "3", + "archery_ticket_price": "0", + "id": "4197" + }, + { + "examine": "No brain: A gruesome, decapitated head, whose brain has rotted away. Brain: A gruesome, decapitated head - its eyes stare lifelessly at nothing.", + "durability": null, + "name": "Decapitated head", + "weight": "3", + "archery_ticket_price": "0", + "id": "4198" + }, + { + "shop_price": "50", + "examine": "A pickled brain, submerged inside a jar of vinegar.", + "durability": null, + "name": "Pickled brain", + "archery_ticket_price": "0", + "id": "4199" + }, + { + "examine": "A mould for making silver lightning conductors.", + "durability": null, + "name": "Conductor mould", + "archery_ticket_price": "0", + "id": "4200" + }, + { + "examine": "A silver lightning conductor.", + "durability": null, + "name": "Conductor", + "weight": "4", + "archery_ticket_price": "0", + "id": "4201" + }, + { + "destroy_message": "Another can be received from pickpocketing Dr. Fenkenstrain in the tower.", + "examine": "Unactivated: The Ring of charos.Activated: The power within this ring has been activated.", + "durability": null, + "name": "Ring of charos", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4202", + "equipment_slot": "12" + }, + { + "examine": "This consecration seed looks grey and dead.", + "durability": null, + "name": "Consecration seed", + "archery_ticket_price": "0", + "id": "4205" + }, + { + "examine": "This consecration seed looks grey and dead.", + "durability": null, + "name": "Consecration seed", + "archery_ticket_price": "0", + "id": "4206" + }, + { + "ge_buy_limit": "10", + "examine": "This crystal seed looks grey and dead.", + "grand_exchange_price": "92600", + "durability": null, + "name": "Crystal seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4207" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "92600", + "durability": null, + "name": "Crystal seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4208" + }, + { + "examine": "A book on Cadarn clan history.", + "durability": null, + "name": "Cadarn lineage", + "archery_ticket_price": "0", + "id": "4209" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "ge_buy_limit": "10", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "905300", + "attack_audios": "2700,0,0,0", + "name": "New crystal bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4212", + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "905300", + "durability": null, + "name": "New crystal bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4213" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow full", + "archery_ticket_price": "0", + "id": "4214", + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 9/10", + "archery_ticket_price": "0", + "id": "4215", + "bonuses": "0,0,0,0,96,0,0,0,0,0,0,0,0,0,68" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 8/10", + "archery_ticket_price": "0", + "id": "4216", + "bonuses": "0,0,0,0,92,0,0,0,0,0,0,0,0,0,66" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 7/10", + "archery_ticket_price": "0", + "id": "4217", + "bonuses": "0,0,0,0,88,0,0,0,0,0,0,0,0,0,64" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 6/10", + "archery_ticket_price": "0", + "id": "4218", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,62" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 5/10", + "archery_ticket_price": "0", + "id": "4219", + "bonuses": "0,0,0,0,80,0,0,0,0,0,0,0,0,0,60" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 4/10", + "archery_ticket_price": "0", + "id": "4220", + "bonuses": "0,0,0,0,76,0,0,0,0,0,0,0,0,0,58" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 3/10", + "archery_ticket_price": "0", + "id": "4221", + "bonuses": "0,0,0,0,72,0,0,0,0,0,0,0,0,0,56" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 2/10", + "archery_ticket_price": "0", + "id": "4222", + "bonuses": "0,0,0,0,68,0,0,0,0,0,0,0,0,0,54" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 1/10", + "archery_ticket_price": "0", + "id": "4223", + "bonuses": "0,0,0,0,64,0,0,0,0,0,0,0,0,0,52" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "ge_buy_limit": "10", + "examine": "A nice sturdy crystal shield.", + "durability": null, + "weight": "2", + "absorb": "6,0,12", + "equipment_slot": "5", + "grand_exchange_price": "756900", + "name": "New crystal shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4224", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield full", + "weight": "2", + "archery_ticket_price": "0", + "id": "4225", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 9/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4226", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,49,52,51,0,78,68,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 8/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4227", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,47,50,49,0,76,66,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 7/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4228", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,45,48,47,0,74,65,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 6/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4229", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,43,46,45,0,72,63,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 5/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4230", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,41,44,43,0,70,61,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 4/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4231", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,39,42,41,0,68,59,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 3/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4232", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,37,40,39,0,66,58,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 2/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4233", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,35,38,37,0,64,56,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 1/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4234", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,33,36,35,0,62,54,0,0,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "New crystal shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4235" + }, + { + "requirements": "{4,5}", + "examine": "This bow has been signed by Robin, Master Bowman.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "equipment_slot": "3", + "name": "Signed oak bow", + "archery_ticket_price": "0", + "id": "4236", + "bonuses": "0,0,0,0,14,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "It's a bowl of water, with some nettles in it.", + "durability": null, + "name": "Nettle-water", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4237" + }, + { + "examine": "It's a bowl of (milky) nettle tea.", + "durability": null, + "name": "Nettle tea", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4239" + }, + { + "examine": "It's a bowl of (milky) nettle tea.", + "durability": null, + "name": "Nettle tea", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4240" + }, + { + "examine": "(In inventory) A handful of nettles (In ground) I better not get stung/I wouldn't like to get stung/I wish I could sting other people/Dock leaves at the ready/These may hurt/nettles sting my leggies(Draynor Village nettles)", + "durability": null, + "name": "Nettles", + "archery_ticket_price": "0", + "id": "4241" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4242" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4243" + }, + { + "examine": "A porcelain cup.", + "durability": null, + "name": "Porcelain cup", + "archery_ticket_price": "0", + "id": "4244" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4245" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4246" + }, + { + "examine": "The Robes of Necrovarus.", + "durability": null, + "name": "Mystical robes", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "4247" + }, + { + "examine": "The Book of Haricanto.", + "durability": null, + "name": "Book of haricanto", + "weight": "2", + "archery_ticket_price": "0", + "id": "4248" + }, + { + "shop_price": "32", + "examine": "A translation manual.", + "durability": null, + "name": "Translation manual", + "weight": "1", + "archery_ticket_price": "0", + "id": "4249" + }, + { + "examine": "The amulet of ghostspeak glows green from the crone's enchantment.", + "durability": null, + "name": "Ghostspeak amulet", + "archery_ticket_price": "0", + "id": "4250", + "equipment_slot": "2" + }, + { + "destroy_message": "The Ectophial will smash if you drop it. Velorina can replace it.", + "examine": "The Ectophial.", + "durability": null, + "name": "Ectophial", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4251" + }, + { + "destroy_message": "The Ectophial will smash if you drop it. Velorina can replace it.", + "examine": "The Ectophial.", + "durability": null, + "name": "Ectophial", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4252" + }, + { + "examine": "A small wooden ship. / A small wooden ship with a silk flag.", + "durability": null, + "name": "Model ship", + "archery_ticket_price": "0", + "id": "4253" + }, + { + "examine": "A small wooden ship. / A small wooden ship with a silk flag.", + "durability": null, + "name": "Model ship", + "archery_ticket_price": "0", + "id": "4254" + }, + { + "examine": "A pot of crushed bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4255" + }, + { + "examine": "A pot of crushed bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4256" + }, + { + "examine": "A pot of crushed wolf bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4257" + }, + { + "examine": "A pot of crushed burnt bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4258" + }, + { + "examine": "A pot of crushed monkey bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4259" + }, + { + "examine": "A pot of crushed monkey bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4260" + }, + { + "examine": "A pot of crushed bat bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4261" + }, + { + "examine": "A pot of crushed big bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4262" + }, + { + "examine": "A pot of crushed jogre bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4263" + }, + { + "examine": "A pot of crushed zogre bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4264" + }, + { + "examine": "A pot of crushed shaikahan bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4265" + }, + { + "examine": "A pot of crushed baby dragon bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4266" + }, + { + "examine": "A pot of crushed wyvern bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4267" + }, + { + "examine": "A pot of crushed dragon bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4268" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4269" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4270" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4271" + }, + { + "shop_price": "100", + "examine": "A key fashioned from a shard of bone. (Shilo Village)", + "durability": null, + "name": "Bone key", + "archery_ticket_price": "0", + "id": "4272" + }, + { + "examine": "A section from some kind of map.", + "durability": null, + "name": "Map scrap", + "archery_ticket_price": "0", + "id": "4274" + }, + { + "examine": "A section from some kind of map.", + "durability": null, + "name": "Map scrap", + "archery_ticket_price": "0", + "id": "4275" + }, + { + "examine": "A section from some kind of map.", + "durability": null, + "name": "Map scrap", + "archery_ticket_price": "0", + "id": "4276" + }, + { + "examine": "A complete treasure map.", + "durability": null, + "name": "Treasure map", + "archery_ticket_price": "0", + "id": "4277" + }, + { + "examine": "A token with ectoplasm on it.", + "durability": null, + "name": "Ecto-token", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4278" + }, + { + "examine": "A scroll of paper containing signatures.", + "durability": null, + "name": "Petition form", + "archery_ticket_price": "0", + "id": "4283" + }, + { + "examine": "Before Ectofuntus: It's a bedsheet.After Ectofuntus: It's an ectoplasm-covered bedsheet.", + "durability": null, + "name": "Bedsheet", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "4284", + "equipment_slot": "0" + }, + { + "examine": "Before Ectofuntus: It's a bedsheet.After Ectofuntus: It's an ectoplasm-covered bedsheet.", + "durability": null, + "name": "Bedsheet", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "4285", + "equipment_slot": "0" + }, + { + "examine": "It's a bucket of ectoplasm.", + "durability": null, + "name": "Bucket of slime", + "weight": "3", + "archery_ticket_price": "0", + "id": "4286" + }, + { + "shop_price": "58", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "440", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "4287" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "440", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4288" + }, + { + "shop_price": "60", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "263", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "4289" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "263", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4290" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "59", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4291" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "59", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4292" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "74", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "4293" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "74", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4294" + }, + { + "examine": "A member of the 'Humans Against Monsters' group.", + "durability": null, + "name": "Female h.a.m.", + "archery_ticket_price": "0", + "id": "4295" + }, + { + "examine": "A member of the 'Humans Against Monsters' group.", + "durability": null, + "name": "Male h.a.m.", + "archery_ticket_price": "0", + "id": "4297" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "The label says 'Vivid Crimson', but it looks like pink to me!", + "grand_exchange_price": "19", + "durability": null, + "name": "Ham shirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4298", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Ham shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4299" + }, + { + "ge_buy_limit": "100", + "examine": "The label says 'Vivid Crimson', but it looks like pink to me!", + "grand_exchange_price": "11", + "durability": null, + "name": "Ham robe", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4300", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Ham robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4301" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Light-weight head protection and eye shield.", + "grand_exchange_price": "400", + "durability": null, + "name": "Ham hood", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4302", + "bonuses": "0,0,0,0,0,0,1,2,0,1,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "400", + "durability": null, + "name": "Ham hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4303" + }, + { + "ge_buy_limit": "100", + "examine": "A HAM cape.", + "grand_exchange_price": "25", + "durability": null, + "name": "Ham cloak", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4304", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Ham cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4305" + }, + { + "ge_buy_limit": "100", + "examine": "A badge for the HAM cult.", + "grand_exchange_price": "63", + "durability": null, + "name": "H.a.m logo", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.5", + "id": "4306", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "63", + "durability": null, + "name": "H.a.m logo", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4307" + }, + { + "ge_buy_limit": "10", + "examine": "Gloves worn by the Humans Against Monsters group.", + "grand_exchange_price": "59", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4308", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "59", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4309" + }, + { + "ge_buy_limit": "100", + "examine": "Boots worn by the Humans Against Monsters group.", + "grand_exchange_price": "323", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4310", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "323", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4311" + }, + { + "examine": "A book on elven crystal.", + "durability": null, + "name": "Crystal of seren", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4313" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "2342", + "durability": null, + "name": "Team-1 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4315", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2342", + "durability": null, + "name": "Team-1 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4316" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1145", + "durability": null, + "name": "Team-2 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4317", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1145", + "durability": null, + "name": "Team-2 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4318" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "141", + "durability": null, + "name": "Team-3 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4319", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "141", + "durability": null, + "name": "Team-3 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4320" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "973", + "durability": null, + "name": "Team-4 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4321", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "973", + "durability": null, + "name": "Team-4 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4322" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1294", + "durability": null, + "name": "Team-5 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4323", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1294", + "durability": null, + "name": "Team-5 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4324" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "124", + "durability": null, + "name": "Team-6 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4325", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124", + "durability": null, + "name": "Team-6 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4326" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1264", + "durability": null, + "name": "Team-7 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4327", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1264", + "durability": null, + "name": "Team-7 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4328" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1824", + "durability": null, + "name": "Team-8 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4329", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1824", + "durability": null, + "name": "Team-8 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4330" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "841", + "durability": null, + "name": "Team-9 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4331", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "841", + "durability": null, + "name": "Team-9 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4332" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1127", + "durability": null, + "name": "Team-10 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4333", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1127", + "durability": null, + "name": "Team-10 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4334" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "2011", + "durability": null, + "name": "Team-11 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4335", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2011", + "durability": null, + "name": "Team-11 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4336" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1591", + "durability": null, + "name": "Team-12 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4337", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1591", + "durability": null, + "name": "Team-12 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4338" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "308", + "durability": null, + "name": "Team-13 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4339", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "308", + "durability": null, + "name": "Team-13 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4340" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1504", + "durability": null, + "name": "Team-14 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4341", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1504", + "durability": null, + "name": "Team-14 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4342" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1462", + "durability": null, + "name": "Team-15 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4343", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1462", + "durability": null, + "name": "Team-15 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4344" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "313", + "durability": null, + "name": "Team-16 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4345", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "313", + "durability": null, + "name": "Team-16 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4346" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1231", + "durability": null, + "name": "Team-17 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4347", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1231", + "durability": null, + "name": "Team-17 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4348" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1678", + "durability": null, + "name": "Team-18 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4349", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1678", + "durability": null, + "name": "Team-18 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4350" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1041", + "durability": null, + "name": "Team-19 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4351", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1041", + "durability": null, + "name": "Team-19 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4352" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "703", + "durability": null, + "name": "Team-20 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4353", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "703", + "durability": null, + "name": "Team-20 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4354" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1292", + "durability": null, + "name": "Team-21 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4355", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1292", + "durability": null, + "name": "Team-21 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4356" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1368", + "durability": null, + "name": "Team-22 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4357", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1368", + "durability": null, + "name": "Team-22 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4358" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "280", + "durability": null, + "name": "Team-23 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4359", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "280", + "durability": null, + "name": "Team-23 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4360" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1512", + "durability": null, + "name": "Team-24 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4361", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1512", + "durability": null, + "name": "Team-24 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4362" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1395", + "durability": null, + "name": "Team-25 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4363", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1395", + "durability": null, + "name": "Team-25 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4364" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "191", + "durability": null, + "name": "Team-26 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4365", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "191", + "durability": null, + "name": "Team-26 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4366" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1420", + "durability": null, + "name": "Team-27 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4367", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1420", + "durability": null, + "name": "Team-27 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4368" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1920", + "durability": null, + "name": "Team-28 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4369", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1920", + "durability": null, + "name": "Team-28 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4370" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1175", + "durability": null, + "name": "Team-29 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4371", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1175", + "durability": null, + "name": "Team-29 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4372" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "552", + "durability": null, + "name": "Team-30 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4373", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "552", + "durability": null, + "name": "Team-30 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4374" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1385", + "durability": null, + "name": "Team-31 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4375", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1385", + "durability": null, + "name": "Team-31 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4376" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1168", + "durability": null, + "name": "Team-32 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4377", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1168", + "durability": null, + "name": "Team-32 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4378" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "211", + "durability": null, + "name": "Team-33 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4379", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "211", + "durability": null, + "name": "Team-33 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4380" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1128", + "durability": null, + "name": "Team-34 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4381", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1128", + "durability": null, + "name": "Team-34 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4382" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1140", + "durability": null, + "name": "Team-35 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4383", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1140", + "durability": null, + "name": "Team-35 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4384" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "84", + "durability": null, + "name": "Team-36 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4385", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "84", + "durability": null, + "name": "Team-36 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4386" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1010", + "durability": null, + "name": "Team-37 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4387", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1010", + "durability": null, + "name": "Team-37 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4388" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1833", + "durability": null, + "name": "Team-38 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4389", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1833", + "durability": null, + "name": "Team-38 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4390" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "914", + "durability": null, + "name": "Team-39 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4391", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "914", + "durability": null, + "name": "Team-39 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4392" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "582", + "durability": null, + "name": "Team-40 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4393", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "582", + "durability": null, + "name": "Team-40 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4394" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1471", + "durability": null, + "name": "Team-41 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4395", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1471", + "durability": null, + "name": "Team-41 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4396" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1072", + "durability": null, + "name": "Team-42 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4397", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1072", + "durability": null, + "name": "Team-42 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4398" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "298", + "durability": null, + "name": "Team-43 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4399", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "298", + "durability": null, + "name": "Team-43 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4400" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1268", + "durability": null, + "name": "Team-44 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4401", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1268", + "durability": null, + "name": "Team-44 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4402" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1371", + "durability": null, + "name": "Team-45 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4403", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1371", + "durability": null, + "name": "Team-45 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4404" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "140", + "durability": null, + "name": "Team-46 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4405", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "140", + "durability": null, + "name": "Team-46 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4406" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1233", + "durability": null, + "name": "Team-47 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4407", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1233", + "durability": null, + "name": "Team-47 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4408" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1836", + "durability": null, + "name": "Team-48 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4409", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1836", + "durability": null, + "name": "Team-48 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4410" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1185", + "durability": null, + "name": "Team-49 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4411", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1185", + "durability": null, + "name": "Team-49 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4412" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "708", + "durability": null, + "name": "Team-50 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4413", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "708", + "durability": null, + "name": "Team-50 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4414" + }, + { + "examine": "A jungle forester's blunt axe.", + "durability": null, + "name": "Blunt axe", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4415" + }, + { + "examine": "A strong medicinal brew for heavy chests.", + "durability": null, + "name": "Herbal tincture", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4416" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "223", + "durability": null, + "name": "Guthix rest(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4417" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "223", + "durability": null, + "name": "Guthix rest(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4418" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "134", + "durability": null, + "name": "Guthix rest(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4419" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "134", + "durability": null, + "name": "Guthix rest(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4420" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "83", + "durability": null, + "name": "Guthix rest(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4421" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "durability": null, + "name": "Guthix rest(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4422" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "44", + "durability": null, + "name": "Guthix rest(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4423" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44", + "durability": null, + "name": "Guthix rest(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4424" + }, + { + "examine": "A half-filled feather mattress.", + "durability": null, + "name": "Stodgy mattress", + "weight": "10", + "archery_ticket_price": "0", + "id": "4425" + }, + { + "examine": "A comfy-looking feather mattress.", + "durability": null, + "name": "Comfy mattress", + "weight": "15", + "archery_ticket_price": "0", + "id": "4426" + }, + { + "examine": "Looks like a bunch of rust to me.", + "durability": null, + "name": "Iron oxide", + "weight": "1", + "archery_ticket_price": "0", + "id": "4427" + }, + { + "examine": "An animate rock spell is written on this parchment.", + "durability": null, + "name": "Animate rock scroll", + "archery_ticket_price": "0", + "id": "4428" + }, + { + "examine": "The weathervane directions should now work.", + "durability": null, + "name": "Directionals", + "archery_ticket_price": "0", + "id": "4430" + }, + { + "examine": "A fixed weathervane ornament.", + "durability": null, + "name": "Ornament", + "archery_ticket_price": "0", + "id": "4432" + }, + { + "examine": "A fixed weathervane rotating pillar.", + "durability": null, + "name": "Weathervane pillar", + "archery_ticket_price": "0", + "id": "4434" + }, + { + "examine": "Clear skies ahead, with some chance of showers, thunderstorms, ice and hail.", + "durability": null, + "name": "Weather report", + "archery_ticket_price": "0", + "id": "4435" + }, + { + "ge_buy_limit": "100", + "examine": "This is pretty well sealed.", + "grand_exchange_price": "245", + "durability": null, + "name": "Airtight pot", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "4436" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "245", + "durability": null, + "name": "Airtight pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4437" + }, + { + "ge_buy_limit": "100", + "examine": "This needs firing, then it should fit on a normal-sized pot.", + "grand_exchange_price": "16", + "durability": null, + "name": "Unfired pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4438" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Unfired pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4439" + }, + { + "ge_buy_limit": "100", + "examine": "This should fit on a normal-sized pot.", + "grand_exchange_price": "5", + "durability": null, + "name": "Pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4440" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4441" + }, + { + "examine": "An airtight pot with something inside, most likely breathing salts.", + "durability": null, + "name": "Breathing salts", + "archery_ticket_price": "0", + "id": "4442" + }, + { + "examine": "A large cage for transporting chickens.", + "durability": null, + "name": "Chicken cage", + "weight": "1", + "archery_ticket_price": "0", + "id": "4443" + }, + { + "examine": "A jungle forester's super sharp axe.", + "durability": null, + "name": "Sharpened axe", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4444" + }, + { + "examine": "Some mahogany logs which have been professionally cured.", + "durability": null, + "name": "Red mahogany log", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4445" + }, + { + "destroy_message": "You can get another key ring from Yanni Salika in Shilo Village.", + "shop_price": "500", + "examine": "I can store my keys here.", + "durability": null, + "name": "Steel key ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4446" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4447" + }, + { + "ge_buy_limit": "100", + "examine": "It's a bowl of hot water.", + "grand_exchange_price": "111", + "durability": null, + "name": "Bowl of hot water", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4456" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "durability": null, + "name": "Bowl of hot water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4457" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of water.", + "grand_exchange_price": "36", + "durability": null, + "name": "Cup of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4458" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "36", + "durability": null, + "name": "Cup of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4459" + }, + { + "ge_buy_limit": "100", + "examine": "It's hot!", + "grand_exchange_price": "102", + "durability": null, + "name": "Cup of hot water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4460" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "102", + "durability": null, + "name": "Cup of hot water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4461" + }, + { + "examine": "A ruined herb tea.", + "durability": null, + "name": "Ruined herb tea", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4462" + }, + { + "durability": null, + "name": "Ruined herb tea", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4463" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4464" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4465" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4466" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4467" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4468" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4469" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4470" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4471" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "17", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4472" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4473" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4474" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4475" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4476" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4477" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "46", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4478" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "46", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4479" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "41", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4480" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "41", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4481" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "43", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4482" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4483" + }, + { + "shop_price": "160", + "examine": "The strange characters supposedly grant Svidi safe passage into Rellekka.", + "durability": null, + "name": "Safety guarantee", + "archery_ticket_price": "0", + "id": "4484" + }, + { + "examine": "This fruit is known as White Pearl. Should taste good.", + "durability": null, + "name": "White pearl", + "weight": "1", + "archery_ticket_price": "0", + "id": "4485" + }, + { + "examine": "You can grow this seed even in cold mountain ranges!", + "durability": null, + "name": "White pearl seed", + "archery_ticket_price": "0", + "id": "4486" + }, + { + "examine": "It's a piece of the Ancient Rock of the mountain people. It's still just a stone.", + "durability": null, + "name": "Half a rock", + "weight": "1", + "archery_ticket_price": "0", + "id": "4487" + }, + { + "examine": "The corpse of a woman who died long ago.", + "durability": null, + "name": "Corpse of woman", + "weight": "1", + "archery_ticket_price": "0", + "id": "4488" + }, + { + "examine": "This used to belong to Asleif, daughter of the mountain camp chieftain.", + "durability": null, + "name": "Asleif's necklace", + "archery_ticket_price": "0", + "id": "4489" + }, + { + "examine": "Marginally better than egg on your face.", + "durability": null, + "name": "Mud", + "archery_ticket_price": "0", + "id": "4490" + }, + { + "examine": "A muddy rock.", + "durability": null, + "name": "Muddy rock", + "weight": "1", + "archery_ticket_price": "0", + "id": "4492" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4494" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4495" + }, + { + "examine": "Splintered into pieces, it has become completely useless to you.", + "durability": null, + "name": "Broken pole", + "archery_ticket_price": "0", + "id": "4496" + }, + { + "shop_price": "18", + "examine": "A coil of rope.", + "grand_exchange_price": "101", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4498", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Rope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4499" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4500", + "equipment_slot": "3" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4501", + "equipment_slot": "3" + }, + { + "remove_head": "true", + "shop_price": "3000", + "examine": "Quite ferocious looking.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "0", + "destroy_message": "Hamal, the Chieftain of the Mountain Camp, can replace this.", + "name": "Bearhead", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4502", + "bonuses": "0,0,0,-3,-3,12,14,10,7,9,0,0,0,0,0" + }, + { + "requirements": "{0,20}", + "shop_price": "50", + "turn90cw_anim": "821", + "examine": "A very decorative sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "808", + "name": "Decorative sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4503", + "stand_turn_anim": "823", + "bonuses": "15,20,-2,0,0,0,3,2,0,0,0,22,0,0,0" + }, + { + "remove_sleeves": "true", + "requirements": "{1,20}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4504", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,20,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,20}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4505", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "40", + "examine": "A very decorative helm.", + "durability": null, + "name": "Decorative helm", + "weight": "1", + "archery_ticket_price": "0", + "id": "4506", + "bonuses": "0,0,0,-3,-1,10,11,9,-1,10,5,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,20}", + "shop_price": "60", + "examine": "A very decorative shield.", + "durability": null, + "name": "Decorative shield", + "archery_ticket_price": "0", + "id": "4507", + "bonuses": "0,0,0,-8,-2,18,22,20,-1,20,20,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{0,30}", + "shop_price": "50", + "turn90cw_anim": "821", + "examine": "A very decorative sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "808", + "name": "Decorative sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4508", + "stand_turn_anim": "823", + "bonuses": "20,29,-2,0,0,0,3,2,0,0,0,31,0,0,0" + }, + { + "remove_sleeves": "true", + "requirements": "{1,30}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4509", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,30}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4510", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "shop_price": "40", + "examine": "A very decorative helm.", + "durability": null, + "name": "Decorative helm", + "weight": "1", + "archery_ticket_price": "0", + "id": "4511", + "bonuses": "0,0,0,-3,-1,14,15,13,-1,14,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,30}", + "shop_price": "60", + "examine": "A very decorative shield.", + "durability": null, + "name": "Decorative shield", + "archery_ticket_price": "0", + "id": "4512", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0", + "equipment_slot": "5" + }, + { + "remove_head": "true", + "durability": null, + "name": "Castlewars hood", + "archery_ticket_price": "0", + "id": "4513", + "bonuses": "0,0,0,0,0,0,1,2,0,1,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Castlewars cloak", + "archery_ticket_price": "0", + "id": "4514", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "durability": null, + "name": "Castlewars hood", + "archery_ticket_price": "0", + "id": "4515", + "bonuses": "0,0,0,0,0,0,1,2,0,1,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Castlewars cloak", + "archery_ticket_price": "0", + "id": "4516", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "examine": "This could feed a family of gnomes for a week!", + "grand_exchange_price": "970", + "durability": null, + "name": "Giant frog legs", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4517" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "970", + "durability": null, + "name": "Giant frog legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4518" + }, + { + "requirements": "{12,11}", + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Empty: An oil lamp with no oil in it.Filled: Not the genie sort.", + "grand_exchange_price": "1575", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4522" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1575", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4523" + }, + { + "shop_price": "10", + "examine": "Empty: An oil lamp with no oil in it.Filled: Not the genie sort.", + "grand_exchange_price": "2", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4524" + }, + { + "requirements": "{12,11}", + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Empty: An oil lamp with no oil in it.Filled: Not the genie sort.", + "grand_exchange_price": "2", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4525" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4526" + }, + { + "requirements": "{4,11}", + "ge_buy_limit": "100", + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "39", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4527" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "39", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4528" + }, + { + "requirements": "{4,11}", + "ge_buy_limit": "100", + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "431", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4529" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "431", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4530" + }, + { + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "1", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4531" + }, + { + "requirements": "{4,11}", + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "1", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4532" + }, + { + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4533" + }, + { + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "1", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4534" + }, + { + "requirements": "{11,26}", + "ge_buy_limit": "100", + "examine": "Unfuelled: Put oil in to complete it. Unlit: An unlit oil lantern. Lit: It lights your way through the dark places of the earth.", + "grand_exchange_price": "12", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4535" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4536" + }, + { + "requirements": "{11,26}", + "ge_buy_limit": "100", + "examine": "Unfuelled: Put oil in to complete it. Unlit: An unlit oil lantern. Lit: It lights your way through the dark places of the earth.", + "grand_exchange_price": "218", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4537" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "218", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4538" + }, + { + "examine": "Unfuelled: Put oil in to complete it. Unlit: An unlit oil lantern. Lit: It lights your way through the dark places of the earth.", + "grand_exchange_price": "198", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4539" + }, + { + "shop_price": "43", + "ge_buy_limit": "100", + "examine": "Add the glass to complete.", + "grand_exchange_price": "8", + "durability": null, + "name": "Oil lantern frame", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4540" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Oil lantern frame", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4541" + }, + { + "shop_price": "88", + "ge_buy_limit": "100", + "examine": "A roughly circular disc of glass.", + "grand_exchange_price": "1", + "durability": null, + "name": "Lantern lens", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4542" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Lantern lens", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4543" + }, + { + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "You need to add a lens before you can use it.", + "grand_exchange_price": "88", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4544" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "88", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4545" + }, + { + "requirements": "{11,49}", + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "You need to add lamp oil before you can use it.", + "grand_exchange_price": "158", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4546" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "158", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4547" + }, + { + "requirements": "{11,49}", + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "A sturdy steel lantern.", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4548" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4549" + }, + { + "shop_price": "400", + "examine": "A sturdy steel lantern casting a bright beam.", + "grand_exchange_price": "1235", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "4550" + }, + { + "remove_head": "true", + "requirements": "{1,5}-{18,35}", + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "weight": "2.2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "774", + "name": "Spiny helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4551", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "774", + "durability": null, + "name": "Spiny helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4552" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Blue sweets", + "archery_ticket_price": "0", + "id": "4558" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Deep blue sweets", + "archery_ticket_price": "0", + "id": "4559" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "White sweets", + "archery_ticket_price": "0", + "id": "4560" + }, + { + "examine": "Remember to brush after eating!", + "grand_exchange_price": "10037", + "durability": null, + "name": "Purple sweets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4561" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Red sweets", + "archery_ticket_price": "0", + "id": "4562" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Green sweets", + "archery_ticket_price": "0", + "id": "4563" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Pink sweets", + "archery_ticket_price": "0", + "id": "4564" + }, + { + "bankable": "true", + "turn90cw_anim": "821", + "examine": "Hand them out to spread the Easter happiness.", + "walk_anim": "1836", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "822", + "weapon_interface": "12", + "turn180_anim": "820", + "render_anim": "594", + "equipment_slot": "3", + "fun_weapon": "true", + "stand_anim": "1837", + "name": "Basket of eggs", + "tradeable": "false", + "run_anim": "1836", + "archery_ticket_price": "0", + "id": "4565", + "stand_turn_anim": "823" + }, + { + "examine": "Perhaps not the most powerful weapon in RuneScape.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "1834", + "equipment_slot": "3", + "attack_anims": "1833,1833,1833,1833", + "fun_weapon": "true", + "name": "Rubber chicken", + "archery_ticket_price": "0", + "id": "4566", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "remove_head": "true", + "examine": "Made of gold and white gold.", + "durability": null, + "name": "Gold helmet", + "weight": "31.7", + "archery_ticket_price": "0", + "id": "4567", + "bonuses": "0,0,0,0,0,0,10,20,0,10,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "This book is almost falling apart, you'll have to handle it quite carefully.", + "durability": null, + "name": "Dwarven lore", + "archery_ticket_price": "0", + "id": "4568" + }, + { + "examine": "A missing page from Rolad's book! It seems to be the first one.", + "durability": null, + "name": "Book page 1", + "archery_ticket_price": "0", + "id": "4569" + }, + { + "examine": "A missing page from Rolad's book! It seems to be the second one.", + "durability": null, + "name": "Book page 2", + "archery_ticket_price": "0", + "id": "4570" + }, + { + "examine": "A missing page from Rolad's book! It seems to be the third one.", + "durability": null, + "name": "Book page 3", + "archery_ticket_price": "0", + "id": "4571" + }, + { + "examine": "A collection of missing pages from Rolad's book!", + "durability": null, + "name": "Pages", + "archery_ticket_price": "0", + "id": "4572" + }, + { + "examine": "A collection of missing pages from Rolad's book!", + "durability": null, + "name": "Pages", + "archery_ticket_price": "0", + "id": "4573" + }, + { + "examine": "These are the base schematics of a dwarven multicannon.", + "durability": null, + "name": "Base schematics", + "archery_ticket_price": "0", + "id": "4574" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "536", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4580", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "536", + "durability": null, + "name": "Black spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4581" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "2808", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4582", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2808", + "durability": null, + "name": "Black spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4583" + }, + { + "requirements": "{0,10}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "309", + "stand_anim": "813", + "name": "Black spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4584", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "This looks pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "161000", + "name": "Dragon plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4585", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "161000", + "durability": null, + "name": "Dragon plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4586" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "65400", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4587", + "stand_turn_anim": "823", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0", + "requirements": "{0,60}", + "shop_price": "100000", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "lendable": "true", + "attack_audios": "2500,0,2517,0", + "name": "Dragon scimitar" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "65400", + "durability": null, + "name": "Dragon scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4588" + }, + { + "examine": "Keys to the Mayor's house. (The Feud)", + "durability": null, + "name": "Keys", + "archery_ticket_price": "0", + "id": "4589" + }, + { + "examine": "The Mayor of Pollnivneach's wife's jewels.", + "durability": null, + "name": "Jewels", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4590" + }, + { + "shop_price": "1", + "examine": "Wear it on your head.", + "durability": null, + "name": "Karidian headpiece", + "archery_ticket_price": "0", + "id": "4591" + }, + { + "shop_price": "1", + "examine": "Makes me itch.", + "durability": null, + "name": "Fake beard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4593" + }, + { + "shop_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4597" + }, + { + "shop_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4598" + }, + { + "shop_price": "1", + "examine": "A handy little club made out of oak.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "10", + "defence_anim": "425", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "name": "Oak-blackjack", + "archery_ticket_price": "0", + "id": "4599", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,2,0,0,0" + }, + { + "shop_price": "600", + "ge_buy_limit": "100", + "examine": "A handy little club made out of willow.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "defence_anim": "425", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "321", + "name": "Willow-blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4600", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,8,0,0,0" + }, + { + "examine": "Dung of the Camelus Horribleus variety.", + "durability": null, + "name": "Ugthanki dung", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4601" + }, + { + "examine": "Dung of the Camelus Horribleus variety.", + "durability": null, + "name": "Ugthanki dung", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4602" + }, + { + "shop_price": "2", + "examine": "A receipt for one 'Camelus Horribleus", + "durability": null, + "name": "Receipt", + "archery_ticket_price": "0", + "id": "4603" + }, + { + "examine": "A red viscous liquid in a vial.", + "durability": null, + "name": "Hag's poison", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4604" + }, + { + "examine": "Makes a hissing sound.", + "durability": null, + "name": "Snake charm", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4605", + "equipment_slot": "3" + }, + { + "examine": "This is used to hold snakes.", + "durability": null, + "name": "Snake basket", + "archery_ticket_price": "0", + "id": "4606" + }, + { + "examine": "This basket contains a snake.", + "durability": null, + "name": "Snake basket full", + "weight": "1", + "archery_ticket_price": "0", + "id": "4607" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "A meaty and very hot kebab.", + "grand_exchange_price": "403", + "durability": null, + "name": "Super kebab", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "4608" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "403", + "durability": null, + "name": "Super kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4609" + }, + { + "examine": "The bottle feels warm.", + "durability": null, + "name": "Red hot sauce", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4610" + }, + { + "remove_head": "true", + "examine": "A disguise suitable for the desert.", + "durability": null, + "name": "Desert disguise", + "archery_ticket_price": "0", + "id": "4611", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Willow-blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4612" + }, + { + "shop_price": "75", + "examine": "It has a picture of a dragon on it.", + "durability": null, + "name": "Spinning plate", + "archery_ticket_price": "0", + "id": "4613" + }, + { + "examine": "Alas...", + "durability": null, + "name": "Broken plate", + "archery_ticket_price": "0", + "id": "4614" + }, + { + "examine": "An archaeologist's notes.", + "durability": null, + "name": "Varmen's notes", + "archery_ticket_price": "0", + "id": "4616" + }, + { + "examine": "The museum curator's key (The Golem).", + "durability": null, + "name": "Display cabinet key", + "archery_ticket_price": "0", + "id": "4617" + }, + { + "examine": "It's pretty, but you wish you knew what it was.", + "durability": null, + "name": "Strange implement", + "archery_ticket_price": "0", + "id": "4619" + }, + { + "examine": "It looks horrible.On ground: Not good for eating.", + "durability": null, + "name": "Black mushroom", + "weight": "1", + "archery_ticket_price": "0", + "id": "4620" + }, + { + "examine": "A long feather patterned like a flame.", + "durability": null, + "name": "Phoenix feather", + "archery_ticket_price": "0", + "id": "4621" + }, + { + "examine": "Black ink made out of mushrooms.", + "durability": null, + "name": "Black mushroom ink", + "weight": "1", + "archery_ticket_price": "0", + "id": "4622" + }, + { + "examine": "A phoenix feather dipped in ink.", + "durability": null, + "name": "Phoenix quill pen", + "archery_ticket_price": "0", + "id": "4623" + }, + { + "examine": "It reads 'YOUR TASK IS DONE'.", + "durability": null, + "name": "Golem program", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4624" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A cheeky little lager from the Bandit Camp.", + "grand_exchange_price": "1133", + "durability": null, + "name": "Bandit's brew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4627" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1133", + "durability": null, + "name": "Bandit's brew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4628" + }, + { + "examine": "A copy of the engravings found on a mysterious stone tablet.", + "durability": null, + "name": "Etchings", + "archery_ticket_price": "0", + "id": "4654" + }, + { + "examine": "A rough translation made from archaeological etchings.", + "durability": null, + "name": "Translation", + "weight": "1", + "archery_ticket_price": "0", + "id": "4655" + }, + { + "examine": "This key is unusally warm to the touch.", + "durability": null, + "name": "Warm key", + "archery_ticket_price": "0", + "id": "4656" + }, + { + "examine": "A ring that allows you to see things that are normally invisible.", + "durability": null, + "name": "Ring of visibility", + "archery_ticket_price": "0", + "id": "4657", + "equipment_slot": "12" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4658" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4659" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4660" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4661" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4662" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4663" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4664" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4665" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4666" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4667" + }, + { + "examine": "Finely ground garlic powder.", + "durability": null, + "name": "Garlic powder", + "archery_ticket_price": "0", + "id": "4668" + }, + { + "examine": "The Diamond of Blood.", + "durability": null, + "name": "Blood diamond", + "archery_ticket_price": "0", + "id": "4670" + }, + { + "examine": "The Diamond of Ice.", + "durability": null, + "name": "Ice diamond", + "archery_ticket_price": "0", + "id": "4671" + }, + { + "examine": "The Diamond of Smoke.", + "durability": null, + "name": "Smoke diamond", + "weight": "1", + "archery_ticket_price": "0", + "id": "4672" + }, + { + "examine": "The Diamond of Shadow.", + "durability": null, + "name": "Shadow diamond", + "weight": "1", + "archery_ticket_price": "0", + "id": "4673" + }, + { + "examine": "An old and strangely shaped metal cross.", + "durability": null, + "name": "Gilded cross", + "archery_ticket_price": "0", + "id": "4674" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A magical staff of ancient origin...", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "59300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4675", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,15,0,2,3,1,15,0,0,50,-1,0,0", + "requirements": "{0,50}-{6,50}", + "shop_price": "80000", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2555,0,0,0", + "name": "Ancient staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "59300", + "durability": null, + "name": "Ancient staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4676" + }, + { + "examine": "It's an amulet of cat speak. It makes vague purring noises.", + "durability": null, + "name": "Catspeak amulet", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4677", + "equipment_slot": "2" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4678" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4679" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4680" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4681" + }, + { + "shop_price": "300", + "examine": "A blessed holy symbol of Saradomin.", + "grand_exchange_price": "112", + "durability": null, + "name": "Holy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4682", + "bonuses": "0,0,0,0,0,2,2,2,2,2,3,0,0,8,0" + }, + { + "shop_price": "135", + "examine": "An unholy symbol of Zamorak.", + "grand_exchange_price": "52", + "durability": null, + "name": "Unholy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4683", + "bonuses": "2,2,2,2,2,0,0,0,0,0,0,0,0,8,0" + }, + { + "shop_price": "30", + "examine": "One sheet of mummy wrap.", + "durability": null, + "name": "Linen", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4684" + }, + { + "examine": "Little book of embalming by Bod E. Wrapper.", + "durability": null, + "name": "Embalming manual", + "archery_ticket_price": "0", + "id": "4686" + }, + { + "examine": "It's a bucket of sap.", + "durability": null, + "name": "Bucket of sap", + "weight": "2", + "archery_ticket_price": "0", + "id": "4687" + }, + { + "examine": "A little heap of salt.", + "durability": null, + "name": "Pile of salt", + "archery_ticket_price": "0", + "id": "4689" + }, + { + "examine": "Miniature golden statue of a sphinx.", + "durability": null, + "name": "Sphinx's token", + "archery_ticket_price": "0", + "id": "4691" + }, + { + "shop_price": "130000", + "examine": "A very delicate sheet of gold.", + "grand_exchange_price": "132580", + "durability": null, + "name": "Gold leaf", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4692" + }, + { + "examine": "It's a bucket of salty water.", + "durability": null, + "name": "Full bucket", + "archery_ticket_price": "0", + "id": "4693" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Water and Fire Rune.", + "grand_exchange_price": "48", + "durability": null, + "name": "Steam rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4694" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined air and water rune.", + "grand_exchange_price": "249", + "durability": null, + "name": "Mist rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4695" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Air and Earth Rune.", + "grand_exchange_price": "20", + "durability": null, + "name": "Dust rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4696" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Air and Fire Rune.", + "grand_exchange_price": "148", + "durability": null, + "name": "Smoke rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4697" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Earth and Water rune.", + "grand_exchange_price": "657", + "durability": null, + "name": "Mud rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4698" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined earth and fire rune.", + "grand_exchange_price": "49", + "durability": null, + "name": "Lava rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4699" + }, + { + "examine": "You need to add lamp oil before you can use it.", + "durability": null, + "name": "Sapphire lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4700" + }, + { + "examine": "A bullseye lantern with a sapphire for a lens.", + "durability": null, + "name": "Sapphire lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4701" + }, + { + "examine": "A lantern casting a bright blue beam.", + "durability": null, + "name": "Sapphire lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4702" + }, + { + "shop_price": "975000", + "examine": "A magic stone to make high-level furniture.", + "grand_exchange_price": "977755", + "durability": null, + "name": "Magic stone", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4703" + }, + { + "turn90cw_anim": "821", + "examine": "A magic stone bowl for catching the tears of Guthix.", + "walk_anim": "819", + "durability": null, + "destroy": "true", + "weight": "1.8", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "1", + "equipment_slot": "3", + "stand_anim": "808", + "name": "Stone bowl", + "tradeable": "false", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4704", + "stand_turn_anim": "823" + }, + { + "examine": "This book must be really old!", + "durability": null, + "name": "Crumbling tome", + "archery_ticket_price": "0", + "id": "4707" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's leather hood.", + "durability": null, + "rare_item": "true", + "weight": "0.9", + "absorb": "5,2,0", + "equipment_slot": "0", + "grand_exchange_price": "94300", + "name": "Ahrim's hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4708", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "94300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4709" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "69500", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4710", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0", + "requirements": "{0,70}-{6,70}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "69500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4711" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe top.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "10,5,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1000000", + "name": "Ahrim's robetop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4712", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1000000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's robetop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4713" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "durability": null, + "rare_item": "true", + "weight": "12", + "absorb": "7,3,0", + "equipment_slot": "7", + "grand_exchange_price": "1700000", + "name": "Ahrim's robeskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4714", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1700000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's robeskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4715" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's helm.", + "durability": "1", + "rare_item": "true", + "weight": "1", + "absorb": "2,0,5", + "equipment_slot": "0", + "grand_exchange_price": "1300000", + "name": "Dharok's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4716", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1300000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4717" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "rare_item": "true", + "turn90ccw_anim": "822", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "516900", + "stand_anim": "2065", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4718", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0", + "requirements": "{0,70}-{2,70}", + "durability": null, + "weight": "13", + "weapon_interface": "2", + "render_anim": "134", + "name": "Dharok's greataxe" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "516900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's greataxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4719" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's platebody armour.", + "durability": null, + "rare_item": "true", + "weight": "9.9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "511400", + "name": "Dharok's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4720", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "511400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4721" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's plate leg armour.", + "durability": null, + "rare_item": "true", + "weight": "10", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "748800", + "name": "Dharok's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4722", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "748800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4723" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's helm", + "durability": null, + "rare_item": "true", + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "396300", + "name": "Guthan's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4724", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "396300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4725" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "588400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4726", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Guthan's warspear" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "588400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's warspear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4727" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's platebody armour.", + "durability": null, + "rare_item": "true", + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "316800", + "name": "Guthan's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4728", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "316800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4729" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's chainskirt.", + "durability": null, + "rare_item": "true", + "weight": "8", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "315600", + "name": "Guthan's chainskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4730", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "315600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's chainskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4731" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's coif.", + "durability": null, + "rare_item": "true", + "absorb": "0,5,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "38900", + "name": "Karil's coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4732", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "38900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4733" + }, + { + "ge_buy_limit": "1", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "rare_item": "true", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "2076", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "188000", + "stand_anim": "2074", + "tradeable": "true", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4734", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,70}", + "durability": null, + "weight": "2", + "weapon_interface": "17", + "render_anim": "372", + "attack_audios": "2700,0,0,0", + "name": "Karil's crossbow" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "188000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4735" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "10000", + "examine": "Karil the Tainted's leather body armour.", + "durability": null, + "rare_item": "true", + "weight": "6", + "absorb": "0,10,5", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1800000", + "name": "Karil's leathertop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4736", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1800000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's leathertop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4737" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "10000", + "examine": "Karil the Tainted's leather skirt.", + "durability": null, + "rare_item": "true", + "weight": "2", + "absorb": "0,7,3", + "equipment_slot": "7", + "grand_exchange_price": "217000", + "name": "Karil's leatherskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4738", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "217000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's leatherskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4739" + }, + { + "requirements": "{4,70}", + "shop_price": "420", + "ge_buy_limit": "10000", + "examine": "Must need a special type of crossbow to use this.", + "grand_exchange_price": "238", + "durability": null, + "name": "Bolt rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4740", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,55", + "equipment_slot": "13" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "139000", + "name": "Torag's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4745", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "139000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4746" + }, + { + "requirements": "{0,70}-{2,70}", + "ge_buy_limit": "1000", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "rare_item": "true", + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "111600", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4747", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "111600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's hammers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4748" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's platebody armour.", + "durability": null, + "rare_item": "true", + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "346200", + "name": "Torag's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4749", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "346200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4750" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's plate leg armour.", + "durability": null, + "rare_item": "true", + "weight": "9", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "427200", + "name": "Torag's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4751", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "427200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4752" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's helm.", + "durability": null, + "rare_item": "true", + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "687200", + "name": "Verac's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4753", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "687200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4754" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "rare_item": "true", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "2060", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "135500", + "stand_anim": "1832", + "tradeable": "true", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4755", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "2", + "weapon_interface": "8", + "render_anim": "1426", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "135500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's flail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4756" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's brassard.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "270000", + "name": "Verac's brassard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4757", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "270000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's brassard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4758" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's plate skirt.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "411400", + "name": "Verac's plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4759", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "411400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4760" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt bronze arrow...ouch", + "grand_exchange_price": "39", + "durability": null, + "name": "Bronze brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4773", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,11", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt iron arrow...ouch", + "grand_exchange_price": "14", + "durability": null, + "name": "Iron brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4778", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,13", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt steel arrow...ouch", + "grand_exchange_price": "20", + "durability": null, + "name": "Steel brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4783", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,19", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt black arrow...ouch", + "grand_exchange_price": "63", + "durability": null, + "name": "Black brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4788", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "20", + "ge_buy_limit": "1000", + "examine": "Blunt mithril arrow...ouch", + "grand_exchange_price": "80", + "durability": null, + "name": "Mithril brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4793", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,34", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt adamant arrow...ouch", + "grand_exchange_price": "154", + "durability": null, + "name": "Adamant brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4798", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,45", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "180", + "ge_buy_limit": "1000", + "examine": "Blunt rune arrow...ouch", + "grand_exchange_price": "188", + "durability": null, + "name": "Rune brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4803", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "examine": "A very black prism.", + "durability": null, + "name": "Black prism", + "archery_ticket_price": "0", + "id": "4808" + }, + { + "examine": "A half torn necromantic page.", + "durability": null, + "name": "Torn page", + "archery_ticket_price": "0", + "id": "4809" + }, + { + "examine": "It's about to fall apart.", + "durability": null, + "name": "Ruined backpack", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4810" + }, + { + "examine": "A white ceramic mug with a dragon insignia.", + "durability": null, + "name": "Dragon inn tankard", + "archery_ticket_price": "0", + "id": "4811" + }, + { + "ge_buy_limit": "10000", + "examine": "A pile of Zombie Ogre bones.", + "grand_exchange_price": "1167", + "durability": null, + "name": "Zogre bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4812" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1167", + "durability": null, + "name": "Zogre bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4813" + }, + { + "examine": "A classic realist charcoal portrait of Sithik.", + "durability": null, + "name": "Sithik portrait", + "archery_ticket_price": "0", + "id": "4814" + }, + { + "examine": "A classic realist charcoal portrait of Sithik.", + "durability": null, + "name": "Sithik portrait", + "archery_ticket_price": "0", + "id": "4815" + }, + { + "examine": "A signed classic realist charcoal portrait of Sithik.", + "durability": null, + "name": "Signed portrait", + "archery_ticket_price": "0", + "id": "4816" + }, + { + "examine": "A book explaining the art of portraiture.", + "durability": null, + "name": "Book of portraiture", + "weight": "1", + "archery_ticket_price": "0", + "id": "4817", + "equipment_slot": "5" + }, + { + "examine": "An ancient ogre artefact-resembling a large heavy helm.", + "durability": null, + "name": "Ogre artefact", + "archery_ticket_price": "0", + "id": "4818" + }, + { + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "16", + "durability": null, + "name": "Bronze nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4819" + }, + { + "shop_price": "33", + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "16", + "durability": null, + "name": "Iron nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4820" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "13", + "durability": null, + "name": "Black nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4821" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "35", + "durability": null, + "name": "Mithril nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4822" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "87", + "durability": null, + "name": "Adamantite nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4823" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "114", + "durability": null, + "name": "Rune nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4824" + }, + { + "ge_buy_limit": "100", + "examine": "An unstrung composite ogre bow.", + "grand_exchange_price": "447", + "durability": null, + "name": "Unstrung comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4825" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "447", + "durability": null, + "name": "Unstrung comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4826" + }, + { + "requirements": "{4,30}", + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "A composite ogre bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "225", + "attack_audios": "2700,0,0,0", + "name": "Comp ogre bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4827", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "225", + "durability": null, + "name": "Comp ogre bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4828" + }, + { + "examine": "A book of H.A.M. affiliation", + "durability": null, + "name": "Book of 'h.a.m", + "archery_ticket_price": "0", + "id": "4829", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "examine": "Ancient ogre bones from the ogre burial tomb.", + "grand_exchange_price": "5931", + "durability": null, + "name": "Fayrg bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4830" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5931", + "durability": null, + "name": "Fayrg bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4831" + }, + { + "ge_buy_limit": "10000", + "examine": "Ancient ogre bones from the ogre burial tomb.", + "grand_exchange_price": "7093", + "durability": null, + "name": "Raurg bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4832" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7093", + "durability": null, + "name": "Raurg bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4833" + }, + { + "ge_buy_limit": "10000", + "examine": "Ancient ogre bones from the burial tomb.", + "grand_exchange_price": "16300", + "durability": null, + "name": "Ourg bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4834" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "16300", + "durability": null, + "name": "Ourg bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4835" + }, + { + "examine": "Some strange liquid given to you by Zavistic Rarve.", + "durability": null, + "name": "Strange potion", + "archery_ticket_price": "0", + "id": "4836" + }, + { + "examine": "A book of necromantic spells.", + "durability": null, + "name": "Necromancy book", + "archery_ticket_price": "0", + "id": "4837", + "equipment_slot": "5" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4838" + }, + { + "examine": "A key to some sort of special tomb area.", + "durability": null, + "name": "Ogre gate key", + "archery_ticket_price": "0", + "id": "4839" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this rogue's purse potion.", + "grand_exchange_price": "2194", + "durability": null, + "name": "Rogue's purse potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4840" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2194", + "durability": null, + "name": "Rogue's purse potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4841" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "4 doses of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "1430", + "durability": null, + "name": "Relicym's balm(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4842" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1430", + "durability": null, + "name": "Relicym's balm(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4843" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "3 doses of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "654", + "durability": null, + "name": "Relicym's balm(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4844" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "654", + "durability": null, + "name": "Relicym's balm(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4845" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "2 doses of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "325", + "durability": null, + "name": "Relicym's balm(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4846" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "325", + "durability": null, + "name": "Relicym's balm(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4847" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "1 dose of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "204", + "durability": null, + "name": "Relicym's balm(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4848" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "204", + "durability": null, + "name": "Relicym's balm(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4849" + }, + { + "ge_buy_limit": "100", + "examine": "A key which opens a coffin!", + "grand_exchange_price": "1963", + "durability": null, + "name": "Ogre coffin key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4850" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1963", + "durability": null, + "name": "Ogre coffin key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4851" + }, + { + "examine": "A pot of crushed fayrg bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4852" + }, + { + "examine": "A pot of crushed raurg bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4853" + }, + { + "examine": "A pot of crushed ourg bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4854" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4855" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 100", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4856", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 75", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4857", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 50", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4858", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 25", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4859", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's leather hood.", + "durability": null, + "weight": "0.9", + "absorb": "5,2,0", + "equipment_slot": "0", + "grand_exchange_price": "51700", + "name": "Ahrim's hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4860" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "51700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4861" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 100", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4862", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 75", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4863", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 50", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4864", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 25", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4865", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "50600", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 0", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4866", + "stand_turn_anim": "1209" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "50600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's staff 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4867" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 100", + "weight": "5", + "archery_ticket_price": "0", + "id": "4868", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 75", + "weight": "5", + "archery_ticket_price": "0", + "id": "4869", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 50", + "weight": "5", + "archery_ticket_price": "0", + "id": "4870", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 25", + "weight": "5", + "archery_ticket_price": "0", + "id": "4871", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe top.", + "durability": null, + "weight": "5", + "absorb": "10,5,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1100000", + "name": "Ahrim's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4872" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1100000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4873" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 100", + "weight": "12", + "archery_ticket_price": "0", + "id": "4874", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 75", + "weight": "12", + "archery_ticket_price": "0", + "id": "4875", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 50", + "weight": "12", + "archery_ticket_price": "0", + "id": "4876", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 25", + "weight": "12", + "archery_ticket_price": "0", + "id": "4877", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Ahrim's skirt 0", + "tradeable": "true", + "weight": "12", + "archery_ticket_price": "0", + "id": "4878", + "absorb": "7,3,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1500000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4879" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 100", + "weight": "1", + "archery_ticket_price": "0", + "id": "4880", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 75", + "weight": "1", + "archery_ticket_price": "0", + "id": "4881", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 50", + "weight": "1", + "archery_ticket_price": "0", + "id": "4882", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 25", + "weight": "1", + "archery_ticket_price": "0", + "id": "4883", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "equipment_slot": "0", + "grand_exchange_price": "1300000", + "name": "Dharok's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4884" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1300000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4885" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 100", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4886", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 75", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4887", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 50", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4888", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 25", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4889", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "render_anim": "134", + "equipment_slot": "3", + "grand_exchange_price": "442600", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "tradeable": "true", + "name": "Dharok's axe 0", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4890", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "442600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's axe 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4891" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 100", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4892", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 75", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4893", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 50", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4894", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 25", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4895", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's platebody armour.", + "durability": null, + "weight": "9.9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "438200", + "name": "Dharok's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4896" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "438200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4897" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 100", + "weight": "10", + "archery_ticket_price": "0", + "id": "4898", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 75", + "weight": "10", + "archery_ticket_price": "0", + "id": "4899", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 50", + "weight": "10", + "archery_ticket_price": "0", + "id": "4900", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 25", + "weight": "10", + "archery_ticket_price": "0", + "id": "4901", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "676000", + "durability": null, + "name": "Dharok's legs 0", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "4902", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "676000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's legs 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4903" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 100", + "archery_ticket_price": "0", + "id": "4904", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 75", + "archery_ticket_price": "0", + "id": "4905", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 50", + "archery_ticket_price": "0", + "id": "4906", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 25", + "archery_ticket_price": "0", + "id": "4907", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "368200", + "name": "Guthan's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4908" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "368200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4909" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 100", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4910", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 75", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4911", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 50", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4912", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 25", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4913", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "379500", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "tradeable": "true", + "name": "Guthan's spear 0", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4914", + "stand_turn_anim": "1209" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "379500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's spear 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4915" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 100", + "weight": "9", + "archery_ticket_price": "0", + "id": "4916", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 75", + "weight": "9", + "archery_ticket_price": "0", + "id": "4917", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 50", + "weight": "9", + "archery_ticket_price": "0", + "id": "4918", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 25", + "weight": "9", + "archery_ticket_price": "0", + "id": "4919", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's platebody armour.", + "durability": null, + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "245900", + "name": "Guthan's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4920" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "245900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4921" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 100", + "weight": "8", + "archery_ticket_price": "0", + "id": "4922", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 75", + "weight": "8", + "archery_ticket_price": "0", + "id": "4923", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 50", + "weight": "8", + "archery_ticket_price": "0", + "id": "4924", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 25", + "weight": "8", + "archery_ticket_price": "0", + "id": "4925", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "240900", + "durability": null, + "name": "Guthan's skirt 0", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "4926", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "240900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4927" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 100", + "archery_ticket_price": "0", + "id": "4928", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 75", + "archery_ticket_price": "0", + "id": "4929", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 50", + "archery_ticket_price": "0", + "id": "4930", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 25", + "archery_ticket_price": "0", + "id": "4931", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's coif.", + "durability": null, + "absorb": "0,5,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "7557", + "name": "Karil's coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4932" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "7557", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4933" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 100", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4934", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 75", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4935", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 50", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4936", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 25", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4937", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "render_anim": "372", + "equipment_slot": "3", + "grand_exchange_price": "106300", + "stand_anim": "2074", + "name": "Karil's x-bow 0", + "tradeable": "true", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4938", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "106300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's x-bow 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4939" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 100", + "weight": "6", + "archery_ticket_price": "0", + "id": "4940", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 75", + "weight": "6", + "archery_ticket_price": "0", + "id": "4941", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 50", + "weight": "6", + "archery_ticket_price": "0", + "id": "4942", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 25", + "weight": "6", + "archery_ticket_price": "0", + "id": "4943", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's leather body armour.", + "durability": null, + "weight": "6", + "absorb": "0,10,5", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1500000", + "name": "Karil's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4944" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "1500000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4945" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 100", + "weight": "2", + "archery_ticket_price": "0", + "id": "4946", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 75", + "weight": "2", + "archery_ticket_price": "0", + "id": "4947", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 50", + "weight": "2", + "archery_ticket_price": "0", + "id": "4948", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 25", + "weight": "2", + "archery_ticket_price": "0", + "id": "4949", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "153100", + "durability": null, + "name": "Karil's skirt 0", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "4950", + "absorb": "0,7,3", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "153100", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4951" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 100", + "archery_ticket_price": "0", + "id": "4952", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 75", + "archery_ticket_price": "0", + "id": "4953", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 50", + "archery_ticket_price": "0", + "id": "4954", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 25", + "archery_ticket_price": "0", + "id": "4955", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "78200", + "name": "Torag's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4956" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "78200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4957" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 100", + "archery_ticket_price": "0", + "id": "4958", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 75", + "archery_ticket_price": "0", + "id": "4959", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 50", + "archery_ticket_price": "0", + "id": "4960", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 25", + "archery_ticket_price": "0", + "id": "4961", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "95600", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4962" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's hammer 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4963" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 100", + "weight": "9", + "archery_ticket_price": "0", + "id": "4964", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 75", + "weight": "9", + "archery_ticket_price": "0", + "id": "4965", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 50", + "weight": "9", + "archery_ticket_price": "0", + "id": "4966", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 25", + "weight": "9", + "archery_ticket_price": "0", + "id": "4967", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's platebody armour.", + "durability": null, + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "271600", + "name": "Torag's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4968" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "271600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4969" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 100", + "weight": "9", + "archery_ticket_price": "0", + "id": "4970", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 75", + "weight": "9", + "archery_ticket_price": "0", + "id": "4971", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 50", + "weight": "9", + "archery_ticket_price": "0", + "id": "4972", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 25", + "weight": "9", + "archery_ticket_price": "0", + "id": "4973", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "371300", + "durability": null, + "name": "Torag's legs 0", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "4974", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "371300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's legs 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4975" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 100", + "archery_ticket_price": "0", + "id": "4976", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 75", + "archery_ticket_price": "0", + "id": "4977", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 50", + "archery_ticket_price": "0", + "id": "4978", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 25", + "archery_ticket_price": "0", + "id": "4979", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "648900", + "name": "Verac's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4980" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "648900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4981" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 100", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4982", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 75", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4983", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 50", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4984", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 25", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4985", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "render_anim": "1426", + "equipment_slot": "3", + "grand_exchange_price": "95500", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "tradeable": "true", + "name": "Verac's flail 0", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4986", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's flail 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4987" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 100", + "weight": "5", + "archery_ticket_price": "0", + "id": "4988", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 75", + "weight": "5", + "archery_ticket_price": "0", + "id": "4989", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 50", + "weight": "5", + "archery_ticket_price": "0", + "id": "4990", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 25", + "weight": "5", + "archery_ticket_price": "0", + "id": "4991", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's brassard.", + "durability": null, + "weight": "5", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "174000", + "name": "Verac's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4992" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "174000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4993" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 100", + "weight": "5", + "archery_ticket_price": "0", + "id": "4994", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 75", + "weight": "5", + "archery_ticket_price": "0", + "id": "4995", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 50", + "weight": "5", + "archery_ticket_price": "0", + "id": "4996", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 25", + "weight": "5", + "archery_ticket_price": "0", + "id": "4997", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "321600", + "durability": null, + "name": "Verac's skirt 0", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "4998", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "321600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4999" + }, + { + "ge_buy_limit": "1000", + "examine": "It's incredibly slimy.", + "grand_exchange_price": "373", + "durability": null, + "name": "Raw cave eel", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5001" + }, + { + "ge_buy_limit": "1000", + "examine": "It's a bit slimy.", + "grand_exchange_price": "164", + "durability": null, + "name": "Cave eel", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5003" + }, + { + "examine": "That's disgusting!", + "durability": null, + "name": "Frog spawn", + "archery_ticket_price": "0", + "id": "5004" + }, + { + "durability": null, + "name": "Raw cave eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5005" + }, + { + "durability": null, + "name": "Burnt cave eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5006" + }, + { + "durability": null, + "name": "Cave eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5007" + }, + { + "examine": "A book about the ancient goblin tribes.", + "durability": null, + "name": "Goblin symbol book", + "weight": "1", + "archery_ticket_price": "0", + "id": "5009" + }, + { + "examine": "You found the Lumbridge silverware in the HAM cave.", + "durability": null, + "name": "Silverware", + "archery_ticket_price": "0", + "id": "5011" + }, + { + "examine": "A peace treaty between Lumbridge and the Cave Goblins.", + "durability": null, + "name": "Peace treaty", + "archery_ticket_price": "0", + "id": "5012" + }, + { + "shop_price": "900", + "examine": "A helmet with a lamp on it.", + "grand_exchange_price": "380", + "durability": null, + "name": "Mining helmet", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5013", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{11,65}", + "shop_price": "900", + "ge_buy_limit": "100", + "examine": "A helmet with an unlit lamp on it.", + "durability": null, + "weight": "1", + "equipment_slot": "0", + "grand_exchange_price": "342", + "name": "Mining helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5014", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "342", + "durability": null, + "name": "Mining helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5015" + }, + { + "ge_buy_limit": "100", + "shop_price": "600", + "turn90cw_anim": "1207", + "examine": "Basic but brutal!", + "walk_anim": "1205", + "durability": null, + "weight": "1.3", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "two_handed": "false", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "219", + "stand_anim": "813", + "tradeable": "true", + "name": "Bone spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5016", + "stand_turn_anim": "1209", + "bonuses": "11,11,11,0,0,1,1,0,0,0,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5017" + }, + { + "shop_price": "600", + "ge_buy_limit": "100", + "examine": "Basic but brutal!", + "durability": null, + "weight": "0.9", + "attack_speed": "6", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "384", + "name": "Bone club", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5018", + "bonuses": "-4,-4,16,-4,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone club", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5019" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5020" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5021" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5022" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5023" + }, + { + "remove_sleeves": "true", + "shop_price": "812", + "ge_buy_limit": "100", + "examine": "Far too small to wear.", + "grand_exchange_price": "710", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5024", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "710", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5025" + }, + { + "remove_sleeves": "true", + "shop_price": "812", + "ge_buy_limit": "100", + "examine": "Yellow top, too small for me.", + "grand_exchange_price": "908", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5026", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "908", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5027" + }, + { + "remove_sleeves": "true", + "shop_price": "812", + "ge_buy_limit": "100", + "examine": "Blue top, very tiny.", + "grand_exchange_price": "1357", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5028", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1357", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5029" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "867", + "examine": "Tiny!", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5030", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "867", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5031" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "1023", + "examine": "Tiny!", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5032", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1023", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5033" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "1282", + "examine": "Tiny!", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5034", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1282", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5035" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "746", + "examine": "A pair of long dwarven trousers... long for dwarves, of course.", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5036", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "746", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5037" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "378", + "examine": "A pair of long dwarven trousers... long for dwarves, of course.", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5038", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "378", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5039" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "442", + "examine": "A pair of long dwarven trousers... long for dwarves, of course.", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5040", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "442", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5041" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "examine": "These look great, on dwarves!", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5042", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5043" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1229", + "examine": "Yellow shorts. Far too small for you.", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5044", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1229", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5045" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2582", + "examine": "Blue shorts, these would look great on dwarves!", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5046", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2582", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5047" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "681", + "examine": "A brown skirt. Size small!", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5048", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "681", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5049" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1151", + "examine": "A blue skirt.", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5050", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1151", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5051" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "803", + "examine": "Lilac skirt.", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5052", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "803", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5053" + }, + { + "examine": "A short angry guy.", + "durability": null, + "name": "Dwarf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5054" + }, + { + "durability": null, + "name": "Dwarf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5055" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5056" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5057" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5058" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5059" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5060", + "equipment_slot": "3" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5061", + "equipment_slot": "3" + }, + { + "examine": "One of a pair I assume.", + "durability": null, + "name": "Left boot", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5062" + }, + { + "examine": "A good looking boot, for the right foot. Literally.", + "durability": null, + "name": "Right boot", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5063" + }, + { + "examine": "A lovely pair of boots.", + "durability": null, + "name": "Exquisite boots", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5064" + }, + { + "examine": "An old library book. It bears the title 'Scholars to Dwarven Costumes'.", + "durability": null, + "name": "Book on costumes", + "archery_ticket_price": "0", + "id": "5065" + }, + { + "examine": "These notes are from a meeting of the Keldagrim Consortium.", + "durability": null, + "name": "Meeting notes", + "archery_ticket_price": "0", + "id": "5066" + }, + { + "examine": "Clothes for the sculptor's model.", + "durability": null, + "name": "Exquisite clothes", + "archery_ticket_price": "0", + "id": "5067" + }, + { + "examine": "A master at farming.", + "durability": null, + "name": "Master farmer", + "archery_ticket_price": "0", + "id": "5068" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5070" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5071" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5072" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5073" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5074" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5075" + }, + { + "examine": "A red bird's egg.", + "durability": null, + "name": "Bird's egg", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5076" + }, + { + "examine": "A blue bird's egg.", + "durability": null, + "name": "Bird's egg", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5077" + }, + { + "examine": "A green bird's egg.", + "durability": null, + "name": "Bird's egg", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5078" + }, + { + "requirements": "{2,19}", + "shop_price": "84", + "ge_buy_limit": "100", + "examine": "A marigold seed - plant in flower patch.", + "grand_exchange_price": "8", + "durability": null, + "name": "Marigold seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5096" + }, + { + "requirements": "{11,19}", + "shop_price": "98", + "ge_buy_limit": "100", + "examine": "A rosemary seed - plant in flower patch.", + "grand_exchange_price": "3", + "durability": null, + "name": "Rosemary seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5097" + }, + { + "requirements": "{24,19}", + "shop_price": "14", + "ge_buy_limit": "100", + "examine": "A nasturtium seed - plant in flower patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Nasturtium seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5098" + }, + { + "requirements": "{19,25}", + "ge_buy_limit": "100", + "examine": "A woad seed - plant in flower patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Woad seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5099" + }, + { + "requirements": "{19,26}", + "shop_price": "70", + "ge_buy_limit": "100", + "examine": "A limpwurt seed - plant in flower patch.", + "grand_exchange_price": "273", + "durability": null, + "name": "Limpwurt seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5100" + }, + { + "requirements": "{10,19}", + "ge_buy_limit": "100", + "examine": "A redberry seed - Plant in a bush patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Redberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5101" + }, + { + "requirements": "{22,19}", + "ge_buy_limit": "100", + "examine": "A cadavaberry seed - Plant in a bush patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Cadavaberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5102" + }, + { + "requirements": "{19,36}", + "ge_buy_limit": "100", + "examine": "A dwellberry seed - Plant in a bush patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Dwellberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5103" + }, + { + "requirements": "{19,48}", + "shop_price": "22", + "ge_buy_limit": "100", + "examine": "A jangerberry bush seed - plant in a bush patch.", + "grand_exchange_price": "2", + "durability": null, + "name": "Jangerberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5104" + }, + { + "requirements": "{19,59}", + "ge_buy_limit": "100", + "examine": "A whiteberry bush seed - plant in a bush patch.", + "grand_exchange_price": "8", + "durability": null, + "name": "Whiteberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5105" + }, + { + "requirements": "{19,70}", + "ge_buy_limit": "100", + "examine": "A poison ivy bush seed - plant in a bush patch.", + "grand_exchange_price": "38", + "durability": null, + "name": "Poison ivy seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5106" + }, + { + "requirements": "{19,55}", + "shop_price": "29", + "ge_buy_limit": "100", + "examine": "A Cactus seed - plant in a cactus patch.", + "grand_exchange_price": "10", + "durability": null, + "name": "Cactus seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5280" + }, + { + "requirements": "{19,63}", + "ge_buy_limit": "100", + "examine": "Also known as Deadly Nightshade - plant in a belladonna patch.", + "grand_exchange_price": "24", + "durability": null, + "name": "Belladonna seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5281" + }, + { + "requirements": "{19,53}", + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Mushroom spore", + "archery_ticket_price": "0", + "id": "5282" + }, + { + "requirements": "{19,27}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "4", + "durability": null, + "name": "Apple tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5283" + }, + { + "requirements": "{19,33}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "5", + "durability": null, + "name": "Banana tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5284" + }, + { + "requirements": "{19,39}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "30", + "durability": null, + "name": "Orange tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5285" + }, + { + "requirements": "{19,42}", + "ge_buy_limit": "100", + "examine": "Plant this in a plant pot of soil to grow a sapling.", + "grand_exchange_price": "265", + "durability": null, + "name": "Curry tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5286" + }, + { + "requirements": "{19,51}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "13700", + "durability": null, + "name": "Pineapple seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5287" + }, + { + "requirements": "{19,57}", + "ge_buy_limit": "100", + "examine": "Plant this in a plant pot of soil to grow a sapling.", + "grand_exchange_price": "41200", + "durability": null, + "name": "Papaya tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5288" + }, + { + "requirements": "{19,68}", + "shop_price": "35000", + "ge_buy_limit": "100", + "examine": "Plant in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "105100", + "durability": null, + "name": "Palm tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5289" + }, + { + "requirements": "{19,72}", + "shop_price": "35000", + "ge_buy_limit": "100", + "examine": "Plant in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "32000", + "durability": null, + "name": "Calquat tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5290" + }, + { + "requirements": "{9,19}", + "ge_buy_limit": "100", + "examine": "A guam seed - plant in a herb patch.", + "grand_exchange_price": "5", + "durability": null, + "name": "Guam seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5291" + }, + { + "requirements": "{14,19}", + "ge_buy_limit": "100", + "examine": "A marrentill seed - plant in a herb patch.", + "grand_exchange_price": "5", + "durability": null, + "name": "Marrentill seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5292" + }, + { + "requirements": "{19,19}", + "ge_buy_limit": "100", + "examine": "A tarromin seed - plant in a herb patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Tarromin seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5293" + }, + { + "requirements": "{19,26}", + "ge_buy_limit": "100", + "examine": "A harralander seed - plant in a herb patch.", + "grand_exchange_price": "4", + "durability": null, + "name": "Harralander seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5294" + }, + { + "requirements": "{19,32}", + "shop_price": "4000", + "ge_buy_limit": "100", + "examine": "A Ranarr seed - plant in a herb patch.", + "grand_exchange_price": "9489", + "durability": null, + "name": "Ranarr seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5295" + }, + { + "requirements": "{19,38}", + "ge_buy_limit": "100", + "examine": "A toadflax seed - plant in a herb patch.", + "grand_exchange_price": "2980", + "durability": null, + "name": "Toadflax seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5296" + }, + { + "requirements": "{19,44}", + "ge_buy_limit": "100", + "examine": "An irit seed - plant in a herb patch.", + "grand_exchange_price": "181", + "durability": null, + "name": "Irit seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5297" + }, + { + "requirements": "{19,50}", + "ge_buy_limit": "100", + "examine": "An avantoe seed - plant in a herb patch.", + "grand_exchange_price": "2492", + "durability": null, + "name": "Avantoe seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5298" + }, + { + "requirements": "{19,56}", + "ge_buy_limit": "100", + "examine": "A kwuarm seed - plant in a herb patch.", + "grand_exchange_price": "537", + "durability": null, + "name": "Kwuarm seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5299" + }, + { + "requirements": "{19,62}", + "ge_buy_limit": "100", + "examine": "A snapdragon seed - plant in a herb patch.", + "grand_exchange_price": "47800", + "durability": null, + "name": "Snapdragon seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5300" + }, + { + "requirements": "{19,67}", + "ge_buy_limit": "100", + "examine": "A cadantine seed - plant in a herb patch.", + "grand_exchange_price": "1253", + "durability": null, + "name": "Cadantine seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5301" + }, + { + "requirements": "{19,73}", + "ge_buy_limit": "100", + "examine": "A lantadyme seed - plant in a herb patch.", + "grand_exchange_price": "37100", + "durability": null, + "name": "Lantadyme seed", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5302" + }, + { + "requirements": "{19,79}", + "ge_buy_limit": "100", + "examine": "A dwarf weed seed - plant in a herb patch.", + "grand_exchange_price": "41900", + "durability": null, + "name": "Dwarf weed seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5303" + }, + { + "requirements": "{19,85}", + "ge_buy_limit": "100", + "examine": "A Torstol seed - plant in a herb patch.", + "grand_exchange_price": "302300", + "durability": null, + "name": "Torstol seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5304" + }, + { + "requirements": "{3,19}", + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "A barley seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Barley seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5305" + }, + { + "requirements": "{13,19}", + "shop_price": "86", + "ge_buy_limit": "100", + "examine": "A jute seed - plant in a hops patch.", + "grand_exchange_price": "2", + "durability": null, + "name": "Jute seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5306" + }, + { + "requirements": "{4,19}", + "shop_price": "52", + "ge_buy_limit": "100", + "examine": "A hammerstone hop seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Hammerstone seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5307" + }, + { + "requirements": "{8,19}", + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "An Asgarnian hop seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Asgarnian seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5308" + }, + { + "requirements": "{16,19}", + "shop_price": "210", + "ge_buy_limit": "100", + "examine": "A yanillian hop seed - plant in a hops patch.", + "grand_exchange_price": "11", + "durability": null, + "name": "Yanillian seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5309" + }, + { + "requirements": "{21,19}", + "shop_price": "8", + "ge_buy_limit": "100", + "examine": "A krandorian hop seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Krandorian seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5310" + }, + { + "requirements": "{19,28}", + "shop_price": "14", + "ge_buy_limit": "100", + "examine": "A wildblood hop seed - plant in a hops patch.", + "grand_exchange_price": "12", + "durability": null, + "name": "Wildblood seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5311" + }, + { + "requirements": "{15,19}", + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "22", + "durability": null, + "name": "Acorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5312" + }, + { + "requirements": "{19,30}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "945", + "durability": null, + "name": "Willow seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5313" + }, + { + "requirements": "{19,45}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "35400", + "durability": null, + "name": "Maple seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5314" + }, + { + "requirements": "{19,60}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "81900", + "durability": null, + "name": "Yew seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5315" + }, + { + "requirements": "{19,75}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "276900", + "durability": null, + "name": "Magic seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5316" + }, + { + "requirements": "{19,83}", + "shop_price": "55000", + "examine": "Plant this in a plant pot of soil to grow a sapling.", + "durability": null, + "name": "Spirit seed", + "archery_ticket_price": "0", + "id": "5317" + }, + { + "shop_price": "8", + "ge_buy_limit": "500", + "examine": "A potato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Potato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5318" + }, + { + "requirements": "{5,19}", + "shop_price": "10", + "ge_buy_limit": "500", + "examine": "An onion seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Onion seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5319" + }, + { + "requirements": "{20,19}", + "ge_buy_limit": "500", + "examine": "A sweetcorn seed - plant in an allotment.", + "grand_exchange_price": "2", + "durability": null, + "name": "Sweetcorn seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5320" + }, + { + "requirements": "{19,47}", + "shop_price": "56", + "ge_buy_limit": "500", + "examine": "A watermelon seed - plant in an allotment.", + "grand_exchange_price": "2491", + "durability": null, + "name": "Watermelon seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5321" + }, + { + "requirements": "{12,19}", + "shop_price": "10", + "ge_buy_limit": "500", + "examine": "A tomato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Tomato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5322" + }, + { + "requirements": "{19,31}", + "ge_buy_limit": "500", + "examine": "A strawberry seed - plant in an allotment.", + "grand_exchange_price": "240", + "durability": null, + "name": "Strawberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5323" + }, + { + "requirements": "{7,19}", + "shop_price": "25", + "ge_buy_limit": "500", + "examine": "A cabbage seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Cabbage seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5324" + }, + { + "shop_price": "12", + "ge_buy_limit": "100", + "examine": "Not suitable for archaeological digs.", + "grand_exchange_price": "106", + "durability": null, + "name": "Gardening trowel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5325" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "106", + "durability": null, + "name": "Gardening trowel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5326" + }, + { + "examine": "I need to attach this to its head.", + "durability": null, + "name": "Spade handle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5327" + }, + { + "examine": "I need to attach this to its handle.", + "durability": null, + "name": "Spade head", + "archery_ticket_price": "0", + "id": "5328" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Good for pruning away diseased leaves.", + "grand_exchange_price": "204", + "durability": null, + "name": "Secateurs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5329", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "204", + "durability": null, + "name": "Secateurs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5330" + }, + { + "shop_price": "8", + "ge_buy_limit": "100", + "examine": "This watering can is empty.", + "grand_exchange_price": "298", + "durability": null, + "name": "Watering can", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5331" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "298", + "durability": null, + "name": "Watering can", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5332" + }, + { + "shop_price": "8", + "examine": " This watering can is almost empty.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(1)", + "archery_ticket_price": "0", + "weight": "0.2", + "id": "5333" + }, + { + "shop_price": "8", + "examine": "This watering can is three-quarters empty.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(2)", + "archery_ticket_price": "0", + "weight": "0.3", + "id": "5334" + }, + { + "shop_price": "8", + "examine": "This watering can is just under half-full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(3)", + "archery_ticket_price": "0", + "weight": "0.4", + "id": "5335" + }, + { + "shop_price": "8", + "examine": " Some would say this watering can is half-full, others half-empty.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(4)", + "archery_ticket_price": "0", + "weight": "0.5", + "id": "5336" + }, + { + "shop_price": "8", + "examine": "This watering can is just over half-full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(5)", + "archery_ticket_price": "0", + "weight": "0.6", + "id": "5337" + }, + { + "shop_price": "8", + "examine": " This watering can is three quarters full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(6)", + "archery_ticket_price": "0", + "weight": "0.7", + "id": "5338" + }, + { + "shop_price": "8", + "examine": " This watering can is almost completely full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(7)", + "archery_ticket_price": "0", + "weight": "0.8", + "id": "5339" + }, + { + "shop_price": "8", + "examine": " This watering can is completely full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(8)", + "archery_ticket_price": "0", + "weight": "0.9", + "id": "5340" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Use this to clear weeds.", + "grand_exchange_price": "99", + "durability": null, + "name": "Rake", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "5341" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "99", + "durability": null, + "name": "Rake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5342" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Use this to plant seeds with.", + "grand_exchange_price": "117", + "durability": null, + "name": "Seed dibber", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5343" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "117", + "durability": null, + "name": "Seed dibber", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5344" + }, + { + "ge_buy_limit": "100", + "examine": "A pair of gardening boots.", + "grand_exchange_price": "3186", + "durability": null, + "name": "Gardening boots", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5345", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3186", + "durability": null, + "name": "Gardening boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5346" + }, + { + "examine": "I need to reattach this to its head.", + "durability": null, + "name": "Rake handle", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5347" + }, + { + "examine": "I need to reattach this to its handle.", + "durability": null, + "name": "Rake head", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5348" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An empty plant pot.", + "grand_exchange_price": "20", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5350" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5351" + }, + { + "shop_price": "9", + "ge_buy_limit": "100", + "examine": "An unfired plant pot.", + "grand_exchange_price": "7", + "durability": null, + "name": "Unfired plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5352" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Unfired plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5353" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "A plant pot filled with soil.", + "grand_exchange_price": "340", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5354" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "340", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5355" + }, + { + "shop_price": "1", + "examine": "A plant pot filled with soil.", + "grand_exchange_price": "243", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5356" + }, + { + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5357" + }, + { + "shop_price": "200", + "examine": "An acorn has been sown and watered in this plant pot.", + "durability": null, + "name": "Oak seedling", + "archery_ticket_price": "0", + "id": "5358" + }, + { + "examine": "A willow tree seed has been sown and watered in this plant pot", + "durability": null, + "name": "Willow seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5359" + }, + { + "examine": "A maple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Maple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5360" + }, + { + "examine": "A yew seed has been sown in the plant pot", + "durability": null, + "name": "Yew seedling", + "weight": "1", + "archery_ticket_price": "0", + "id": "5361" + }, + { + "examine": "A magic tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Magic seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5362" + }, + { + "examine": "A spirit seedling is growing in this pot. It has been sown and watered.", + "durability": null, + "name": "Spirit seedling", + "archery_ticket_price": "0", + "id": "5363" + }, + { + "shop_price": "200", + "examine": "An acorn has been sown and watered in this plant pot.", + "durability": null, + "name": "Oak seedling", + "archery_ticket_price": "0", + "id": "5364" + }, + { + "examine": "A willow tree seed has been sown and watered in this plant pot", + "durability": null, + "name": "Willow seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5365" + }, + { + "examine": "A maple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Maple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5366" + }, + { + "examine": "A yew seed has been sown in the plant pot", + "durability": null, + "name": "Yew seedling", + "weight": "1", + "archery_ticket_price": "0", + "id": "5367" + }, + { + "examine": "A magic tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Magic seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5368" + }, + { + "examine": "A spirit seedling is growing in this pot. It has been sown and watered.", + "durability": null, + "name": "Spirit seedling", + "archery_ticket_price": "0", + "id": "5369" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Oak sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5370" + }, + { + "examine": "This sapling is ready to be replanted in a tree patch.", + "durability": null, + "name": "Willow sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5371" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Maple sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5372" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Yew sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5373" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Magic sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5374" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Spirit sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5375" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "An empty fruit basket.", + "grand_exchange_price": "1", + "durability": null, + "name": "Basket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5376" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Basket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5377" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5378" + }, + { + "durability": null, + "name": "Apples(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5379" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5380" + }, + { + "durability": null, + "name": "Apples(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5381" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5382" + }, + { + "durability": null, + "name": "Apples(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5383" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(4)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5384" + }, + { + "durability": null, + "name": "Apples(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5385" + }, + { + "ge_buy_limit": "1000", + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "2448", + "durability": null, + "name": "Apples(5)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5386" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2448", + "durability": null, + "name": "Apples(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5387" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5388" + }, + { + "durability": null, + "name": "Oranges(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5389" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5390" + }, + { + "durability": null, + "name": "Oranges(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5391" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5392" + }, + { + "durability": null, + "name": "Oranges(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5393" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5394" + }, + { + "durability": null, + "name": "Oranges(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5395" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "A common fruit.", + "grand_exchange_price": "5649", + "durability": null, + "name": "Oranges(5)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5396" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5649", + "durability": null, + "name": "Oranges(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5397" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(1)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5398" + }, + { + "durability": null, + "name": "Strawberries(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5399" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(2)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5400" + }, + { + "durability": null, + "name": "Strawberries(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5401" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(3)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5402" + }, + { + "durability": null, + "name": "Strawberries(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5403" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(4)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5404" + }, + { + "durability": null, + "name": "Strawberries(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5405" + }, + { + "ge_buy_limit": "10000", + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "406", + "durability": null, + "name": "Strawberries(5)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5406" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "406", + "durability": null, + "name": "Strawberries(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5407" + }, + { + "examine": "A fruit basket filled with bananas.", + "grand_exchange_price": "1064", + "durability": null, + "name": "Bananas(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5408" + }, + { + "durability": null, + "name": "Bananas(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5409" + }, + { + "examine": "A fruit basket filled with bananas.", + "grand_exchange_price": "1064", + "durability": null, + "name": "Bananas(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5410" + }, + { + "durability": null, + "name": "Bananas(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5411" + }, + { + "examine": "A fruit basket filled with bananas.", + "grand_exchange_price": "1064", + "durability": null, + "name": "Bananas(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5412" + }, + { + "durability": null, + "name": "Bananas(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5413" + }, + { + "shop_price": "2", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "171", + "durability": null, + "name": "Bananas(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5414" + }, + { + "durability": null, + "name": "Bananas(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5415" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "1637", + "durability": null, + "name": "Bananas(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5416" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1637", + "durability": null, + "name": "Bananas(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5417" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An empty sack.", + "grand_exchange_price": "45", + "durability": null, + "name": "Empty sack", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5418" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "45", + "durability": null, + "name": "Empty sack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5419" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(1)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5420" + }, + { + "durability": null, + "name": "Potatoes(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5421" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(2)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5422" + }, + { + "durability": null, + "name": "Potatoes(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5423" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(3)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5424" + }, + { + "durability": null, + "name": "Potatoes(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5425" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(4)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5426" + }, + { + "durability": null, + "name": "Potatoes(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5427" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(5)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5428" + }, + { + "durability": null, + "name": "Potatoes(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5429" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(6)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5430" + }, + { + "durability": null, + "name": "Potatoes(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5431" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(7)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5432" + }, + { + "durability": null, + "name": "Potatoes(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5433" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(8)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5434" + }, + { + "durability": null, + "name": "Potatoes(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5435" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(9)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5436" + }, + { + "durability": null, + "name": "Potatoes(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5437" + }, + { + "ge_buy_limit": "1000", + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1052", + "durability": null, + "name": "Potatoes(10)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5438" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1052", + "durability": null, + "name": "Potatoes(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5439" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(1)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5440" + }, + { + "durability": null, + "name": "Onions(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5441" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(2)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5442" + }, + { + "durability": null, + "name": "Onions(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5443" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(3)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5444" + }, + { + "durability": null, + "name": "Onions(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5445" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(4)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5446" + }, + { + "durability": null, + "name": "Onions(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5447" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(5)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5448" + }, + { + "durability": null, + "name": "Onions(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5449" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(6)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5450" + }, + { + "durability": null, + "name": "Onions(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5451" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(7)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5452" + }, + { + "durability": null, + "name": "Onions(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5453" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(8)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5454" + }, + { + "durability": null, + "name": "Onions(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5455" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(9)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5456" + }, + { + "durability": null, + "name": "Onions(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5457" + }, + { + "ge_buy_limit": "1000", + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "489", + "durability": null, + "name": "Onions(10)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5458" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "489", + "durability": null, + "name": "Onions(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5459" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5460" + }, + { + "durability": null, + "name": "Cabbages(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5461" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5462" + }, + { + "durability": null, + "name": "Cabbages(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5463" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5464" + }, + { + "durability": null, + "name": "Cabbages(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5465" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5466" + }, + { + "durability": null, + "name": "Cabbages(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5467" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5468" + }, + { + "durability": null, + "name": "Cabbages(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5469" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5470" + }, + { + "durability": null, + "name": "Cabbages(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5471" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5472" + }, + { + "durability": null, + "name": "Cabbages(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5473" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5474" + }, + { + "durability": null, + "name": "Cabbages(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5475" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5476" + }, + { + "durability": null, + "name": "Cabbages(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5477" + }, + { + "ge_buy_limit": "1000", + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "917", + "durability": null, + "name": "Cabbages(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5478" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "917", + "durability": null, + "name": "Cabbages(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5479" + }, + { + "examine": "An apple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Apple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5480" + }, + { + "examine": "A banana tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Banana seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5481" + }, + { + "examine": "An orange tree seed has been sown (and watered)in this plant pot.", + "durability": null, + "name": "Orange seedling", + "archery_ticket_price": "0", + "id": "5482" + }, + { + "examine": "A curry seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Curry seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5483" + }, + { + "examine": "A pineapple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Pineapple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5484" + }, + { + "examine": "This needs watering before it will grow.", + "durability": null, + "name": "Papaya seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5485" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Palm seedling", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "5486" + }, + { + "examine": "A calquat tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Calquat seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5487" + }, + { + "examine": "An apple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Apple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5488" + }, + { + "examine": "A banana tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Banana seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5489" + }, + { + "examine": "An orange tree seed has been sown (and watered)in this plant pot.", + "durability": null, + "name": "Orange seedling", + "archery_ticket_price": "0", + "id": "5490" + }, + { + "examine": "A curry seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Curry seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5491" + }, + { + "examine": "A pineapple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Pineapple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5492" + }, + { + "examine": "This needs watering before it will grow.", + "durability": null, + "name": "Papaya seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5493" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Palm seedling", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "5494" + }, + { + "examine": "A calquat tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Calquat seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5495" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Apple sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5496" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Banana sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5497" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Orange sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5498" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Curry sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5499" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Pineapple sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5500" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Papaya sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5501" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Palm sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5502" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Calquat sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5503" + }, + { + "ge_buy_limit": "10000", + "examine": "A freshly picked strawberry.", + "grand_exchange_price": "23", + "durability": null, + "name": "Strawberry", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5504" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "23", + "durability": null, + "name": "Strawberry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5505" + }, + { + "examine": "The Wise Old Man of Draynor Village asked you to take this to someone.", + "durability": null, + "name": "Old man's message", + "archery_ticket_price": "0", + "id": "5506" + }, + { + "examine": "A tatty old book belonging to the Wise Old Man of Draynor Village.", + "durability": null, + "name": "Strange book", + "archery_ticket_price": "0", + "id": "5507" + }, + { + "examine": "A tatty old book belonging to the Wise Old Man of Draynor Village.", + "durability": null, + "name": "Book of folklore", + "archery_ticket_price": "0", + "id": "5508" + }, + { + "examine": "A small pouch used for storing essence.", + "durability": null, + "name": "Small pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5509" + }, + { + "examine": "A medium-sized pouch used for storing essence.", + "durability": null, + "name": "Medium pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5510" + }, + { + "examine": "A medium-sized pouch used for storing essence.", + "durability": null, + "name": "Medium pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5511" + }, + { + "shop_price": "25000", + "examine": "A large pouch used for storing essence.", + "durability": null, + "name": "Large pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5512" + }, + { + "shop_price": "25000", + "examine": "A large pouch used for storing essence.", + "durability": null, + "name": "Large pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5513" + }, + { + "shop_price": "50000", + "examine": "A giant-sized pouch used for storing essence.", + "durability": null, + "name": "Giant pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5514" + }, + { + "shop_price": "50000", + "examine": "A giant-sized pouch used for storing essence.", + "durability": null, + "name": "Giant pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5515" + }, + { + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "186900", + "durability": null, + "name": "Elemental talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5516" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "186900", + "durability": null, + "name": "Elemental talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5517" + }, + { + "examine": "When empty:", + "durability": null, + "name": "Scrying orb", + "weight": "1", + "archery_ticket_price": "0", + "id": "5518" + }, + { + "examine": "When empty:", + "durability": null, + "name": "Scrying orb", + "weight": "1", + "archery_ticket_price": "0", + "id": "5519" + }, + { + "examine": "Some research notes on abyssal space.", + "durability": null, + "name": "Abyssal book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5520" + }, + { + "ge_buy_limit": "100", + "examine": "A necklace embedded with mystical power.", + "grand_exchange_price": "720", + "durability": null, + "name": "Binding necklace", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5521", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "720", + "durability": null, + "name": "Binding necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5522" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A mould for tiaras.", + "grand_exchange_price": "315", + "durability": null, + "name": "Tiara mould", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5523" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "315", + "durability": null, + "name": "Tiara mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5524" + }, + { + "ge_buy_limit": "1000", + "examine": "Makes me feel like a Princess.", + "grand_exchange_price": "13", + "durability": null, + "name": "Tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5525", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5526" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of air.", + "grand_exchange_price": "5", + "durability": null, + "name": "Air tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5527", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Air tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5528" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the mind.", + "grand_exchange_price": "10", + "durability": null, + "name": "Mind tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5529", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Mind tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5530" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of water.", + "grand_exchange_price": "1351", + "durability": null, + "name": "Water tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5531", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1351", + "durability": null, + "name": "Water tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5532" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the body.", + "grand_exchange_price": "5", + "durability": null, + "name": "Body tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5533", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Body tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5534" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the earth.", + "grand_exchange_price": "4", + "durability": null, + "name": "Earth tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5535", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4", + "durability": null, + "name": "Earth tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5536" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of fire.", + "grand_exchange_price": "8", + "durability": null, + "name": "Fire tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5537", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Fire tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5538" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the cosmos.", + "grand_exchange_price": "8", + "durability": null, + "name": "Cosmic tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5539", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Cosmic tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5540" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of nature.", + "grand_exchange_price": "10", + "durability": null, + "name": "Nature tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5541", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Nature tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5542" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of chaos.", + "grand_exchange_price": "10", + "durability": null, + "name": "Chaos tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5543", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Chaos tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5544" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of law.", + "grand_exchange_price": "11", + "durability": null, + "name": "Law tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5545", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Law tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5546" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of death.", + "grand_exchange_price": "65", + "durability": null, + "name": "Death tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5547", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65", + "durability": null, + "name": "Death tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5548" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of Blood.", + "grand_exchange_price": "1058", + "durability": null, + "name": "Blood tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5549", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1058", + "durability": null, + "name": "Blood tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5550" + }, + { + "ge_buy_limit": "100", + "examine": " A tiara infused with the properties of the soul.", + "durability": null, + "name": "Soul tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "5551", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Soul tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5552" + }, + { + "remove_sleeves": "true", + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue top", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5553", + "bonuses": "0,0,0,0,0,10,10,10,10,10,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue mask", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5554", + "bonuses": "0,0,0,0,0,5,5,5,5,5,0,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue trousers", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5555", + "bonuses": "0,0,0,0,0,7,7,7,7,7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "examine": "Black banded leather gloves, a rogue's dream!", + "durability": null, + "name": "Rogue gloves", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5556", + "bonuses": "0,0,0,0,0,2,2,2,2,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Black banded leather boots, a rogue's dream!", + "durability": null, + "name": "Rogue boots", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5557", + "bonuses": "0,0,0,0,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "35", + "examine": "It can do almost anything!", + "durability": null, + "name": "Rogue kit", + "archery_ticket_price": "0", + "id": "5558" + }, + { + "examine": "A small satchel of bright powder!", + "durability": null, + "name": "Flash powder", + "weight": "1", + "archery_ticket_price": "0", + "id": "5559" + }, + { + "shop_price": "10", + "examine": "A useful hearing aid.", + "durability": null, + "name": "Stethoscope", + "archery_ticket_price": "0", + "id": "5560", + "equipment_slot": "5" + }, + { + "examine": "I can escape the Maze with this!", + "durability": null, + "name": "Mystic jewel", + "archery_ticket_price": "0", + "id": "5561" + }, + { + "examine": "A fraction of a roof.", + "durability": null, + "name": "Picture", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "5568" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "6000", + "ge_buy_limit": "100", + "examine": "An initiate Temple Knight's helm.", + "durability": null, + "weight": "2.2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "3512", + "name": "Initiate sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5574", + "bonuses": "0,0,0,-6,-2,13,14,11,-1,13,5,0,3,0,0" + }, + { + "requirements": "{1,20}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "An initiate Temple Knight's Armour.", + "durability": null, + "weight": "8", + "absorb": "1,0,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "5776", + "name": "Initiate hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5575", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,20,0,6,0,0" + }, + { + "requirements": "{1,20}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "An initiate Temple Knight's leg armour.", + "durability": null, + "weight": "7", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "4574", + "name": "Initiate cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5576", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,5,0,0" + }, + { + "examine": "A vial of something labelled 'Cupric Sulfate'.", + "durability": null, + "name": "Cupric sulphate", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5577" + }, + { + "examine": "A vial of something labelled 'Acetic Acid'.", + "durability": null, + "name": "Acetic acid", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5578" + }, + { + "examine": "A vial of something labelled 'Gypsum'.", + "durability": null, + "name": "Gypsum", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5579" + }, + { + "examine": "A vial of something labelled 'Sodium Chloride'.", + "durability": null, + "name": "Sodium chloride", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5580" + }, + { + "examine": "A vial of something labelled 'Nitrous Oxide'.", + "durability": null, + "name": "Nitrous oxide", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5581" + }, + { + "examine": "A vial of something labelled Dihydrogen Monoxide.", + "durability": null, + "name": "Vial of liquid", + "archery_ticket_price": "0", + "id": "5582" + }, + { + "examine": "A vial of something labelled 'Powdered Tin Ore'.", + "durability": null, + "name": "Tin ore powder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5583" + }, + { + "examine": "A vial of something labelled 'Powdered Cupric Ore'.", + "durability": null, + "name": "Cupric ore powder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5584" + }, + { + "examine": "It's a metal spade without a handle.", + "durability": null, + "name": "Metal spade", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "5586" + }, + { + "examine": "It's a metal spade without a handle.", + "durability": null, + "name": "Metal spade", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "5587" + }, + { + "examine": "Looks like a pretty boring read.", + "durability": null, + "name": "Alchemical notes", + "archery_ticket_price": "0", + "id": "5588" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5592" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5593" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5594" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5595" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5596" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5597" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5598" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5599" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5600" + }, + { + "shop_price": "14", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "33", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5601" + }, + { + "examine": "Useful for crafting items.", + "grand_exchange_price": "237", + "durability": null, + "name": "Bronze wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5602" + }, + { + "shop_price": "1", + "examine": "For shearing sheep.", + "grand_exchange_price": "41", + "durability": null, + "name": "Shears", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5603" + }, + { + "examine": "A very attractive magnet.", + "durability": null, + "name": "Magnet", + "archery_ticket_price": "0", + "id": "5604" + }, + { + "shop_price": "25", + "examine": "A dangerous looking knife.", + "grand_exchange_price": "102", + "durability": null, + "name": "Knife", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5605" + }, + { + "examine": "I can exchange this for one free makeover with the makeover mage.", + "durability": null, + "name": "Makeover voucher", + "weight": "1", + "archery_ticket_price": "0", + "id": "5606" + }, + { + "shop_price": "2", + "examine": "Some wheat heads.", + "grand_exchange_price": "20", + "durability": null, + "name": "Grain", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "5607", + "equipment_slot": "1" + }, + { + "examine": "A cunning animal.", + "durability": null, + "name": "Fox", + "archery_ticket_price": "0", + "id": "5608", + "equipment_slot": "3" + }, + { + "examine": "Normal: Yep. Definitely a chicken.", + "durability": null, + "name": "Chicken", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "5609", + "equipment_slot": "5" + }, + { + "examine": "There's not much sand left in the top half...", + "durability": null, + "name": "Hourglass", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5610" + }, + { + "durability": null, + "name": "Initiate sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5611" + }, + { + "durability": null, + "name": "Initiate hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5612" + }, + { + "durability": null, + "name": "Initiate cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5613" + }, + { + "turn90cw_anim": "330", + "walk_anim": "330", + "durability": null, + "turn90ccw_anim": "330", + "turn180_anim": "330", + "render_anim": "191", + "equipment_slot": "3", + "stand_anim": "330", + "name": "Magic carpet", + "run_anim": "330", + "archery_ticket_price": "0", + "id": "5614", + "stand_turn_anim": "330" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "5615" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "127", + "durability": null, + "name": "Bronze arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5616", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "138", + "durability": null, + "name": "Iron arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5617", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "159", + "durability": null, + "name": "Steel arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5618", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "176", + "durability": null, + "name": "Mithril arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5619", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "211", + "durability": null, + "name": "Adamant arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5620", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "415", + "durability": null, + "name": "Rune arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5621", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "1076", + "durability": null, + "name": "Bronze arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5622", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "1037", + "durability": null, + "name": "Iron arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5623", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "1038", + "durability": null, + "name": "Steel arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5624", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "718", + "durability": null, + "name": "Mithril arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5625", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "101", + "durability": null, + "name": "Adamant arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5626", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Rune arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5627", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "162", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5628", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "164", + "attack_audios": "2547,0,0,0", + "name": "Iron dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5629", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "173", + "attack_audios": "2547,0,0,0", + "name": "Steel dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5630", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "822", + "attack_audios": "2547,0,0,0", + "name": "Black dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5631", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "196", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5632", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "244", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5633", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "370", + "attack_audios": "2547,0,0,0", + "name": "Rune dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5634", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1733", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5635", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1687", + "attack_audios": "2547,0,0,0", + "name": "Iron dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5636", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1654", + "attack_audios": "2547,0,0,0", + "name": "Steel dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5637", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "2422", + "attack_audios": "2547,0,0,0", + "name": "Black dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5638", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1660", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5639", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1352", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5640", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1109", + "attack_audios": "2547,0,0,0", + "name": "Rune dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5641", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "115", + "name": "Bronze javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5642", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "112", + "name": "Iron javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5643", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "128", + "name": "Steel javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5644", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "141", + "name": "Mithril javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5645", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "100", + "shop_price": "100", + "examine": "An adamant tipped javelin.", + "durability": null, + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "179", + "name": "Adamant javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5646", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "302", + "name": "Rune javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5647", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1755", + "name": "Bronze jav'n(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5648", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1756", + "name": "Iron javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5649", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1769", + "name": "Steel javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5650", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1736", + "name": "Mithril javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5651", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "100", + "shop_price": "100", + "examine": "An adamant tipped javelin.", + "durability": null, + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1514", + "name": "Adamant javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5652", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "requirements": "{4,40}", + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1521", + "name": "Rune javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5653", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "164", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5654", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "170", + "attack_audios": "2704,0,0,0", + "name": "Iron knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5655", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "212", + "attack_audios": "2704,0,0,0", + "name": "Steel knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5656", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "330", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5657", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "66", + "attack_audios": "2704,0,0,0", + "name": "Black knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5658", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "609", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5659", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1511", + "attack_audios": "2704,0,0,0", + "name": "Rune knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5660", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1514", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5661", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1212", + "attack_audios": "2704,0,0,0", + "name": "Iron knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5662", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1579", + "attack_audios": "2704,0,0,0", + "name": "Steel knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5663", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1368", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5664", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "103", + "attack_audios": "2704,0,0,0", + "name": "Black knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5665", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1505", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5666", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "2207", + "attack_audios": "2704,0,0,0", + "name": "Rune knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5667", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "483", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5668", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "483", + "durability": null, + "name": "Iron dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5669" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "350", + "attack_audios": "2517,2517,2500,2517", + "name": "Bronze dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5670", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "350", + "durability": null, + "name": "Bronze dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5671" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "575", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5672", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "575", + "durability": null, + "name": "Steel dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5673" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "538", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5674", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "538", + "durability": null, + "name": "Mithril dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5675" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "durability": null, + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "800", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5676", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "800", + "durability": null, + "name": "Adamant dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5677" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "4538", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5678", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4538", + "durability": null, + "name": "Rune dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5679" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "16800", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5680", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "attack_anims": "396,396,395,396", + "ge_buy_limit": "10", + "grand_exchange_price": "16800", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Dragon dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5681", + "defence_anim": "397" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "664", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5682", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "664", + "durability": null, + "name": "Black dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5683" + }, + { + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Poison dagger(p+)", + "archery_ticket_price": "0", + "id": "5684", + "weapon_interface": "5", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0", + "render_anim": "2584", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Poison dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5685" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4128", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5686", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4128", + "durability": null, + "name": "Iron dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5687" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "5088", + "attack_audios": "2517,2517,2500,2517", + "name": "Br'ze dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5688", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5088", + "durability": null, + "name": "Br'ze dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5689" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4729", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5690", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4729", + "durability": null, + "name": "Steel dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5691" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "3476", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5692", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3476", + "durability": null, + "name": "Mithril dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5693" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "durability": null, + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4612", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5694", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4612", + "durability": null, + "name": "Adamant dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5695" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "5061", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5696", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5061", + "durability": null, + "name": "Rune dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5697" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "20300", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5698", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "attack_anims": "396,396,395,396", + "ge_buy_limit": "10", + "grand_exchange_price": "20300", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Dragon dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5699", + "defence_anim": "397" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4921", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5700", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4921", + "durability": null, + "name": "Black dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5701" + }, + { + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Poison dagger(p++)", + "archery_ticket_price": "0", + "id": "5702", + "weapon_interface": "5", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0", + "render_anim": "2584", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Poison dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5703" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "861", + "stand_anim": "813", + "name": "Bronze spear(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5704", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "861", + "durability": null, + "name": "Bronze spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5705" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "676", + "stand_anim": "813", + "name": "Iron spear(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5706", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "676", + "durability": null, + "name": "Iron spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5707" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "596", + "stand_anim": "813", + "tradeable": "true", + "name": "Steel spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5708", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "596", + "durability": null, + "name": "Steel spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5709" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "802", + "stand_anim": "813", + "tradeable": "true", + "name": "Mithril spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5710", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "802", + "durability": null, + "name": "Mithril spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5711" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1394", + "stand_anim": "813", + "tradeable": "true", + "name": "Adamant spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5712", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1394", + "durability": null, + "name": "Adamant spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5713" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "12500", + "stand_anim": "813", + "tradeable": "true", + "name": "Rune spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5714", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12500", + "durability": null, + "name": "Rune spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5715" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "41800", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5716", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear(p+)" + }, + { + "attack_anims": "2080,2081,2082,2080", + "ge_buy_limit": "10", + "grand_exchange_price": "41800", + "durability": null, + "name": "Dragon spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5717", + "defence_anim": "2079" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "7557", + "stand_anim": "813", + "name": "Bronze spear(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5718", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7557", + "durability": null, + "name": "Bronze spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5719" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8394", + "stand_anim": "813", + "name": "Iron spear(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5720", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8394", + "durability": null, + "name": "Iron spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5721" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8336", + "stand_anim": "813", + "tradeable": "true", + "name": "Steel spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5722", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8336", + "durability": null, + "name": "Steel spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5723" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "7035", + "stand_anim": "813", + "tradeable": "true", + "name": "Mithril spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5724", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7035", + "durability": null, + "name": "Mithril spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5725" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "7530", + "stand_anim": "813", + "name": "Adamant spear(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5726", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7530", + "durability": null, + "name": "Adamant spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5727" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "17700", + "stand_anim": "813", + "tradeable": "true", + "name": "Rune spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5728", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17700", + "durability": null, + "name": "Rune spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5729" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "37800", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5730", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear(p++)" + }, + { + "attack_anims": "2080,2081,2082,2080", + "ge_buy_limit": "10", + "grand_exchange_price": "37800", + "durability": null, + "name": "Dragon spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5731", + "defence_anim": "2079" + }, + { + "durability": null, + "name": "Stool", + "archery_ticket_price": "0", + "id": "5732", + "equipment_slot": "5" + }, + { + "examine": "Yuk!", + "durability": null, + "name": "Rotten potato", + "archery_ticket_price": "0", + "id": "5733" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "3351", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5734", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3351", + "durability": null, + "name": "Black spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5735" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "9065", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5736", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9065", + "durability": null, + "name": "Black spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5737" + }, + { + "shop_price": "15", + "examine": "A slightly bluish leaf.", + "grand_exchange_price": "19", + "durability": null, + "name": "Woad leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5738" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "459", + "durability": null, + "name": "Asgarnian ale(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5739" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "459", + "durability": null, + "name": "Asgarnian ale(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5740" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "1193", + "durability": null, + "name": "Mature wmb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5741" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1193", + "durability": null, + "name": "Mature wmb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5742" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "65400", + "durability": null, + "name": "Greenman's ale(m)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5743" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65400", + "durability": null, + "name": "Greenman's ale(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5744" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "2458", + "durability": null, + "name": "Dragon bitter(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5745" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2458", + "durability": null, + "name": "Dragon bitter(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5746" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "56400", + "durability": null, + "name": "Dwarven stout(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5747" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56400", + "durability": null, + "name": "Dwarven stout(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5748" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "19", + "durability": null, + "name": "Moonlight mead(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5749" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Moonlight mead(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5750" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "890", + "durability": null, + "name": "Axeman's folly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5751" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "890", + "durability": null, + "name": "Axeman's folly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5752" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Axeman's folly(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5753" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26000", + "durability": null, + "name": "Axeman's folly(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5754" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "3694", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5755" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3694", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5756" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "42800", + "durability": null, + "name": "Chef's delight(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5757" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "42800", + "durability": null, + "name": "Chef's delight(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5758" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "7", + "durability": null, + "name": "Slayer's respite", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5759" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Slayer's respite", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5760" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "1748", + "durability": null, + "name": "Slayer's respite(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5761" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1748", + "durability": null, + "name": "Slayer's respite(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5762" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "1279", + "durability": null, + "name": "Cider", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5763" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1279", + "durability": null, + "name": "Cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5764" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "3614", + "durability": null, + "name": "Mature cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5765" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3614", + "durability": null, + "name": "Mature cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5766" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A pot filled with ale yeast.", + "grand_exchange_price": "59", + "durability": null, + "name": "Ale yeast", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "5767" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "59", + "durability": null, + "name": "Ale yeast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5768" + }, + { + "ge_buy_limit": "100", + "examine": "Sliced and hollowed out to form a keg.", + "grand_exchange_price": "8", + "durability": null, + "name": "Calquat keg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5769" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Calquat keg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5770" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "1934", + "durability": null, + "name": "Dwarven stout(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5771" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1934", + "durability": null, + "name": "Dwarven stout(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5772" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "3214", + "durability": null, + "name": "Dwarven stout(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5773" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3214", + "durability": null, + "name": "Dwarven stout(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5774" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "4886", + "durability": null, + "name": "Dwarven stout(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5775" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4886", + "durability": null, + "name": "Dwarven stout(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5776" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "5159", + "durability": null, + "name": "Dwarven stout(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5777" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5159", + "durability": null, + "name": "Dwarven stout(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5778" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "3344", + "durability": null, + "name": "Asgarnian ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5779" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3344", + "durability": null, + "name": "Asgarnian ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5780" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "6103", + "durability": null, + "name": "Asgarnian ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5781" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6103", + "durability": null, + "name": "Asgarnian ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5782" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "9230", + "durability": null, + "name": "Asgarnian ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5783" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9230", + "durability": null, + "name": "Asgarnian ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5784" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "12900", + "durability": null, + "name": "Asgarnian ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5785" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12900", + "durability": null, + "name": "Asgarnian ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5786" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "3441", + "durability": null, + "name": "Greenmans ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5787" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3441", + "durability": null, + "name": "Greenmans ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5788" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "4670", + "durability": null, + "name": "Greenmans ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5789" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4670", + "durability": null, + "name": "Greenmans ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5790" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "7654", + "durability": null, + "name": "Greenmans ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5791" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7654", + "durability": null, + "name": "Greenmans ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5792" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "6317", + "durability": null, + "name": "Greenmans ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5793" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6317", + "durability": null, + "name": "Greenmans ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5794" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "1495", + "durability": null, + "name": "Mind bomb(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5795" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1495", + "durability": null, + "name": "Mind bomb(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5796" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "2721", + "durability": null, + "name": "Mind bomb(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5797" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2721", + "durability": null, + "name": "Mind bomb(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5798" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "4038", + "durability": null, + "name": "Mind bomb(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5799" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4038", + "durability": null, + "name": "Mind bomb(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5800" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "5166", + "durability": null, + "name": "Mind bomb(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5801" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5166", + "durability": null, + "name": "Mind bomb(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5802" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "1673", + "durability": null, + "name": "Dragon bitter(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5803" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1673", + "durability": null, + "name": "Dragon bitter(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5804" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "3259", + "durability": null, + "name": "Dragon bitter(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5805" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3259", + "durability": null, + "name": "Dragon bitter(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5806" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "4845", + "durability": null, + "name": "Dragon bitter(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5807" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4845", + "durability": null, + "name": "Dragon bitter(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5808" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "5924", + "durability": null, + "name": "Dragon bitter(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5809" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5924", + "durability": null, + "name": "Dragon bitter(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5810" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "1298", + "durability": null, + "name": "Moonlight mead(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5811" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1298", + "durability": null, + "name": "Moonlight mead(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5812" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "2510", + "durability": null, + "name": "Moonlight mead(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5813" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2510", + "durability": null, + "name": "Moonlight mead(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5814" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "3721", + "durability": null, + "name": "Moonlight mead(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5815" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3721", + "durability": null, + "name": "Moonlight mead(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5816" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "4883", + "durability": null, + "name": "Moonlight mead(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5817" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4883", + "durability": null, + "name": "Moonlight mead(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5818" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "3333", + "durability": null, + "name": "Axeman's folly(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5819" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3333", + "durability": null, + "name": "Axeman's folly(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5820" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "6093", + "durability": null, + "name": "Axeman's folly(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5821" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6093", + "durability": null, + "name": "Axeman's folly(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5822" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "8978", + "durability": null, + "name": "Axeman's folly(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5823" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8978", + "durability": null, + "name": "Axeman's folly(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5824" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "9212", + "durability": null, + "name": "Axeman's folly(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5825" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9212", + "durability": null, + "name": "Axeman's folly(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5826" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "3851", + "durability": null, + "name": "Chef's delight(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5827" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3851", + "durability": null, + "name": "Chef's delight(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5828" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "6589", + "durability": null, + "name": "Chef's delight(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5829" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6589", + "durability": null, + "name": "Chef's delight(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5830" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "9536", + "durability": null, + "name": "Chef's delight(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5831" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9536", + "durability": null, + "name": "Chef's delight(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5832" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "13200", + "durability": null, + "name": "Chef's delight(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5833" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13200", + "durability": null, + "name": "Chef's delight(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5834" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "1127", + "durability": null, + "name": "Slayer's respite(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5835" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1127", + "durability": null, + "name": "Slayer's respite(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5836" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "2168", + "durability": null, + "name": "Slayer's respite(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5837" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2168", + "durability": null, + "name": "Slayer's respite(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5838" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "3209", + "durability": null, + "name": "Slayer's respite(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5839" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3209", + "durability": null, + "name": "Slayer's respite(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5840" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "3582", + "durability": null, + "name": "Slayer's respite(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5841" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3582", + "durability": null, + "name": "Slayer's respite(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5842" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "6040", + "durability": null, + "name": "Cider(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5843" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6040", + "durability": null, + "name": "Cider(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5844" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "11000", + "durability": null, + "name": "Cider(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5845" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11000", + "durability": null, + "name": "Cider(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5846" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "15400", + "durability": null, + "name": "Cider(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5847" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15400", + "durability": null, + "name": "Cider(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5848" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "18900", + "durability": null, + "name": "Cider(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5849" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18900", + "durability": null, + "name": "Cider(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5850" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "44600", + "durability": null, + "name": "Dwarven stout(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5851" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44600", + "durability": null, + "name": "Dwarven stout(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5852" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "68900", + "durability": null, + "name": "Dwarven stout(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5853" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "68900", + "durability": null, + "name": "Dwarven stout(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5854" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "98800", + "durability": null, + "name": "Dwarven stout(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5855" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98800", + "durability": null, + "name": "Dwarven stout(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5856" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "237400", + "durability": null, + "name": "Dwarven stout(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5857" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "237400", + "durability": null, + "name": "Dwarven stout(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5858" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "1697", + "durability": null, + "name": "Asgarnian ale(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5859" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1697", + "durability": null, + "name": "Asgarnian ale(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5860" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "3307", + "durability": null, + "name": "Asgarnian ale(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5861" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3307", + "durability": null, + "name": "Asgarnian ale(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5862" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "4917", + "durability": null, + "name": "Asgarnian ale(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5863" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4917", + "durability": null, + "name": "Asgarnian ale(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5864" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "6778", + "durability": null, + "name": "Asgarnian ale(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5865" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6778", + "durability": null, + "name": "Asgarnian ale(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5866" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "57600", + "durability": null, + "name": "Greenmans ale(m1)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5867" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57600", + "durability": null, + "name": "Greenmans ale(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5868" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "92000", + "durability": null, + "name": "Greenmans ale(m2)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5869" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92000", + "durability": null, + "name": "Greenmans ale(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5870" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "136700", + "durability": null, + "name": "Greenmans ale(m3)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5871" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "136700", + "durability": null, + "name": "Greenmans ale(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5872" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "231700", + "durability": null, + "name": "Greenmans ale(m4)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5873" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "231700", + "durability": null, + "name": "Greenmans ale(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5874" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "3032", + "durability": null, + "name": "Mind bomb(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5875" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3032", + "durability": null, + "name": "Mind bomb(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5876" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "5977", + "durability": null, + "name": "Mind bomb(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5877" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5977", + "durability": null, + "name": "Mind bomb(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5878" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "8922", + "durability": null, + "name": "Mind bomb(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5879" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8922", + "durability": null, + "name": "Mind bomb(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5880" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "12700", + "durability": null, + "name": "Mind bomb(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5881" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12700", + "durability": null, + "name": "Mind bomb(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5882" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "2125", + "durability": null, + "name": "Dragon bitter(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5883" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2125", + "durability": null, + "name": "Dragon bitter(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5884" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "4163", + "durability": null, + "name": "Dragon bitter(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5885" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4163", + "durability": null, + "name": "Dragon bitter(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5886" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "6201", + "durability": null, + "name": "Dragon bitter(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5887" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6201", + "durability": null, + "name": "Dragon bitter(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5888" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "8834", + "durability": null, + "name": "Dragon bitter(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5889" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8834", + "durability": null, + "name": "Dragon bitter(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5890" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "1315", + "durability": null, + "name": "M'light mead(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5891" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1315", + "durability": null, + "name": "M'light mead(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5892" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "2543", + "durability": null, + "name": "M'light mead(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5893" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2543", + "durability": null, + "name": "M'light mead(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5894" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "3771", + "durability": null, + "name": "M'light mead(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5895" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3771", + "durability": null, + "name": "M'light mead(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5896" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "5000", + "durability": null, + "name": "M'light mead(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5897" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5000", + "durability": null, + "name": "M'light mead(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5898" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "13500", + "durability": null, + "name": "Axeman's folly(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5899" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13500", + "durability": null, + "name": "Axeman's folly(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5900" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "24800", + "durability": null, + "name": "Axeman's folly(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5901" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24800", + "durability": null, + "name": "Axeman's folly(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5902" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "37300", + "durability": null, + "name": "Axeman's folly(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5903" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "37300", + "durability": null, + "name": "Axeman's folly(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5904" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "60700", + "durability": null, + "name": "Axeman's folly(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5905" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60700", + "durability": null, + "name": "Axeman's folly(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5906" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "18000", + "durability": null, + "name": "Chef's delight(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5907" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18000", + "durability": null, + "name": "Chef's delight(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5908" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "34300", + "durability": null, + "name": "Chef's delight(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5909" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34300", + "durability": null, + "name": "Chef's delight(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5910" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "51000", + "durability": null, + "name": "Chef's delight(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5911" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "51000", + "durability": null, + "name": "Chef's delight(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5912" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "98600", + "durability": null, + "name": "Chef's delight(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5913" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98600", + "durability": null, + "name": "Chef's delight(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5914" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "3672", + "durability": null, + "name": "Slayer respite(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5915" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3672", + "durability": null, + "name": "Slayer respite(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5916" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "7258", + "durability": null, + "name": "Slayer respite(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5917" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7258", + "durability": null, + "name": "Slayer respite(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5918" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "10800", + "durability": null, + "name": "Slayer respite(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5919" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10800", + "durability": null, + "name": "Slayer respite(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5920" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "15300", + "durability": null, + "name": "Slayer respite(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5921" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15300", + "durability": null, + "name": "Slayer respite(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5922" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "2966", + "durability": null, + "name": "Cider(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5923" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2966", + "durability": null, + "name": "Cider(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5924" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "5845", + "durability": null, + "name": "Cider(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5925" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5845", + "durability": null, + "name": "Cider(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5926" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "8724", + "durability": null, + "name": "Cider(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5927" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8724", + "durability": null, + "name": "Cider(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5928" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "11900", + "durability": null, + "name": "Cider(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5929" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11900", + "durability": null, + "name": "Cider(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5930" + }, + { + "ge_buy_limit": "5000", + "examine": "I can weave this to make sacks.", + "grand_exchange_price": "532", + "durability": null, + "name": "Jute fibre", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "5931" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "532", + "durability": null, + "name": "Jute fibre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5932" + }, + { + "ge_buy_limit": "200", + "examine": "A branch from a willow tree.", + "grand_exchange_price": "1255", + "durability": null, + "name": "Willow branch", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5933" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1255", + "durability": null, + "name": "Willow branch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5934" + }, + { + "ge_buy_limit": "10000", + "examine": "A vial filled with coconut milk.", + "grand_exchange_price": "1307", + "durability": null, + "name": "Coconut milk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5935" + }, + { + "ge_buy_limit": "1000", + "examine": "A vial of extra-strong weapon poison, for spears and daggers.", + "grand_exchange_price": "605", + "durability": null, + "name": "Weapon poison+", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5937" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "605", + "durability": null, + "name": "Weapon poison+", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5938" + }, + { + "ge_buy_limit": "1000", + "examine": "A vial of super strong weapon poison, for spears and daggers.", + "grand_exchange_price": "4817", + "durability": null, + "name": "Weapon poison++", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5940" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4817", + "durability": null, + "name": "Weapon poison++", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5941" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1032", + "durability": null, + "name": "Antipoison+(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5943" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1032", + "durability": null, + "name": "Antipoison+(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5944" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1499", + "durability": null, + "name": "Antipoison+(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5945" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1499", + "durability": null, + "name": "Antipoison+(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5946" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1316", + "durability": null, + "name": "Antipoison+(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5947" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1316", + "durability": null, + "name": "Antipoison+(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5948" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1599", + "durability": null, + "name": "Antipoison+(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5949" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1599", + "durability": null, + "name": "Antipoison+(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5950" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of a super-strong antipoison potion.", + "grand_exchange_price": "1138", + "durability": null, + "name": "Antipoison++(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5952" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1138", + "durability": null, + "name": "Antipoison++(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5953" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of a super-strong antipoison potion.", + "grand_exchange_price": "1071", + "durability": null, + "name": "Antipoison++(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5954" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1071", + "durability": null, + "name": "Antipoison++(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5955" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of a super-strong antipoison potion.", + "grand_exchange_price": "632", + "durability": null, + "name": "Antipoison++(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5956" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "632", + "durability": null, + "name": "Antipoison++(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5957" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of a super-strong antipoison potion.", + "grand_exchange_price": "821", + "durability": null, + "name": "Antipoison++(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5958" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "821", + "durability": null, + "name": "Antipoison++(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5959" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5960" + }, + { + "durability": null, + "name": "Tomatoes(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5961" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5962" + }, + { + "durability": null, + "name": "Tomatoes(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5963" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5964" + }, + { + "durability": null, + "name": "Tomatoes(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5965" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5966" + }, + { + "durability": null, + "name": "Tomatoes(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5967" + }, + { + "ge_buy_limit": "10000", + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "335", + "durability": null, + "name": "Tomatoes(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5968" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "335", + "durability": null, + "name": "Tomatoes(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5969" + }, + { + "ge_buy_limit": "5000", + "examine": "I could make a spicy curry with this.", + "grand_exchange_price": "318", + "durability": null, + "name": "Curry leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5970" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "318", + "durability": null, + "name": "Curry leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5971" + }, + { + "ge_buy_limit": "5000", + "examine": "Looks delicious.", + "grand_exchange_price": "2074", + "durability": null, + "name": "Papaya fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5972" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2074", + "durability": null, + "name": "Papaya fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5973" + }, + { + "ge_buy_limit": "5000", + "examine": "It's a coconut.", + "grand_exchange_price": "2568", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5974" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2568", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5975" + }, + { + "ge_buy_limit": "5000", + "examine": "It's a coconut.", + "grand_exchange_price": "1258", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5976" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1258", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5977" + }, + { + "ge_buy_limit": "10000", + "examine": "All the milk has been removed.", + "grand_exchange_price": "54", + "durability": null, + "name": "Coconut shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5978" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "54", + "durability": null, + "name": "Coconut shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5979" + }, + { + "ge_buy_limit": "100", + "examine": "This is the largest fruit I've ever seen.", + "grand_exchange_price": "43", + "durability": null, + "name": "Calquat fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5980" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43", + "durability": null, + "name": "Calquat fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5981" + }, + { + "shop_price": "48", + "ge_buy_limit": "10000", + "examine": "A juicy watermelon.", + "grand_exchange_price": "41", + "durability": null, + "name": "Watermelon", + "tradeable": "true", + "weight": "0.111", + "archery_ticket_price": "0", + "id": "5982" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "41", + "durability": null, + "name": "Watermelon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5983" + }, + { + "ge_buy_limit": "1000", + "examine": "A slice of watermelon.", + "grand_exchange_price": "40", + "durability": null, + "name": "Watermelon slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5984" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "40", + "durability": null, + "name": "Watermelon slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5985" + }, + { + "ge_buy_limit": "10000", + "examine": "Raw sweetcorn.", + "grand_exchange_price": "19", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5986" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "19", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5987" + }, + { + "ge_buy_limit": "10000", + "examine": "Delicious cooked sweetcorn.", + "grand_exchange_price": "15", + "durability": null, + "name": "Cooked sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5988" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "15", + "durability": null, + "name": "Cooked sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5989" + }, + { + "durability": null, + "name": "Burnt sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5991" + }, + { + "ge_buy_limit": "100", + "examine": "A bucket of apple mush.", + "grand_exchange_price": "425", + "durability": null, + "name": "Apple mush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5992" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "425", + "durability": null, + "name": "Apple mush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5993" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Hammerstone hops.", + "grand_exchange_price": "14", + "durability": null, + "name": "Hammerstone hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5994" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "14", + "durability": null, + "name": "Hammerstone hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5995" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Asgarnian hops.", + "grand_exchange_price": "2", + "durability": null, + "name": "Asgarnian hops", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5996" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2", + "durability": null, + "name": "Asgarnian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5997" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Yanillian hops.", + "grand_exchange_price": "1", + "durability": null, + "name": "Yanillian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5998" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Yanillian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5999" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "A handful of Krandorian hops.", + "grand_exchange_price": "2", + "durability": null, + "name": "Krandorian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6000" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2", + "durability": null, + "name": "Krandorian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6001" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of wildblood hops.", + "grand_exchange_price": "66", + "durability": null, + "name": "Wildblood hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6002" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "66", + "durability": null, + "name": "Wildblood hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6003" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "examine": "A Bittercap Mushroom", + "durability": null, + "name": "Mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6004" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "durability": null, + "name": "Mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6005" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Barley.", + "grand_exchange_price": "211", + "durability": null, + "name": "Barley", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6006" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "211", + "durability": null, + "name": "Barley", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6007" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of barley malt.", + "grand_exchange_price": "410", + "durability": null, + "name": "Barley malt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6008" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "410", + "durability": null, + "name": "Barley malt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6009" + }, + { + "ge_buy_limit": "1000", + "examine": "A bunch of marigolds.", + "grand_exchange_price": "3326", + "durability": null, + "name": "Marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6010" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3326", + "durability": null, + "name": "Marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6011" + }, + { + "ge_buy_limit": "1000", + "examine": "A bunch of nasturtiums.", + "grand_exchange_price": "52", + "durability": null, + "name": "Nasturtiums", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6012" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "52", + "durability": null, + "name": "Nasturtiums", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6013" + }, + { + "ge_buy_limit": "1000", + "examine": "Some rosemary.", + "grand_exchange_price": "29", + "durability": null, + "name": "Rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6014" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "29", + "durability": null, + "name": "Rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6015" + }, + { + "ge_buy_limit": "10000", + "examine": "Don't prick yourself with this.", + "grand_exchange_price": "6990", + "durability": null, + "name": "Cactus spine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6016" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6990", + "durability": null, + "name": "Cactus spine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6017" + }, + { + "ge_buy_limit": "10000", + "examine": "They look sweet and juicy, but only a fool would eat them.", + "grand_exchange_price": "399", + "durability": null, + "name": "Poison ivy berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6018" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "399", + "durability": null, + "name": "Poison ivy berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6019" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "152", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6020" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "152", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6021" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "27", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6022" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6023" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "21", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6024" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6025" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "7", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6026" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6027" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "11", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6028" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6029" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "4", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6030" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6031" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Good for plants, helps them grow.", + "grand_exchange_price": "97", + "durability": null, + "name": "Compost", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6032" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "97", + "durability": null, + "name": "Compost", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6033" + }, + { + "ge_buy_limit": "10000", + "examine": "Super-good for the smallest or largest of plants.", + "grand_exchange_price": "909", + "durability": null, + "name": "Supercompost", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6034" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "909", + "durability": null, + "name": "Supercompost", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6035" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "Use this on plants to cure disease.", + "grand_exchange_price": "170", + "durability": null, + "name": "Plant cure", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6036" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "170", + "durability": null, + "name": "Plant cure", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6037" + }, + { + "ge_buy_limit": "100", + "examine": "I could use this to make jewellery.", + "grand_exchange_price": "1078", + "durability": null, + "name": "Magic string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6038" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1078", + "durability": null, + "name": "Magic string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6039" + }, + { + "destroy_message": "You will need to create a new amulet if you destroy this one.", + "examine": "An Amulet of Nature.", + "durability": null, + "name": "Amulet of nature", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6040", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "examine": "Strung with the root of a Magic Tree. If I enchant this it will become an amulet of nature.", + "grand_exchange_price": "1996", + "durability": null, + "name": "Pre-nature amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6041", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1996", + "durability": null, + "name": "Pre-nature amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6042" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of the Oak tree.", + "grand_exchange_price": "60", + "durability": null, + "name": "Oak roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6043" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60", + "durability": null, + "name": "Oak roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6044" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of the Willow tree.", + "grand_exchange_price": "41", + "durability": null, + "name": "Willow roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6045" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "41", + "durability": null, + "name": "Willow roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6046" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of the Maple tree.", + "grand_exchange_price": "40", + "durability": null, + "name": "Maple roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6047" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40", + "durability": null, + "name": "Maple roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6048" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of a yew tree", + "grand_exchange_price": "570", + "durability": null, + "name": "Yew roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6049" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "570", + "durability": null, + "name": "Yew roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6050" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of a magic tree.", + "grand_exchange_price": "5853", + "durability": null, + "name": "Magic roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6051" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5853", + "durability": null, + "name": "Magic roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6052" + }, + { + "durability": null, + "name": "Spirit roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6054" + }, + { + "shop_price": "1", + "examine": "A handful of weeds.", + "durability": null, + "name": "Weeds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6055" + }, + { + "durability": null, + "name": "Weeds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6056" + }, + { + "examine": "A sack filled with hay. / This sack of hay has a bronze spear sticking through it.", + "durability": null, + "name": "Hay sack", + "archery_ticket_price": "0", + "id": "6057" + }, + { + "examine": "A sack filled with hay. / This sack of hay has a bronze spear sticking through it.", + "durability": null, + "name": "Hay sack", + "archery_ticket_price": "0", + "id": "6058" + }, + { + "examine": "This should scare the birds.", + "durability": null, + "name": "Scarecrow", + "archery_ticket_price": "0", + "id": "6059" + }, + { + "durability": null, + "name": "Stool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6060" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "134", + "durability": null, + "name": "Bronze bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6061", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "1162", + "durability": null, + "name": "Bronze bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6062", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "examine": "How do I wash blood stains out?", + "durability": null, + "name": "Bloody mourner top", + "weight": "2.72", + "archery_ticket_price": "0", + "id": "6064" + }, + { + "remove_sleeves": "true", + "examine": "A thick heavy leather top.", + "durability": null, + "name": "Mourner top", + "archery_ticket_price": "0", + "id": "6065", + "equipment_slot": "4" + }, + { + "examine": "Damaged: These are in need of a good tailor.Repaired: A pair of mourner trousers.", + "durability": null, + "name": "Mourner trousers", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "6066" + }, + { + "examine": "Damaged: These are in need of a good tailor.Repaired: A pair of mourner trousers.", + "durability": null, + "name": "Mourner trousers", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "6067", + "equipment_slot": "7" + }, + { + "shop_price": "160", + "examine": "These will keep my hands warm.", + "durability": null, + "name": "Mourner gloves", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6068", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "160", + "examine": "Comfortable leather boots.", + "durability": null, + "name": "Mourner boots", + "weight": "1.36", + "archery_ticket_price": "0", + "id": "6069", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "A dull brown cape.", + "durability": null, + "name": "Mourner cloak", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "6070", + "equipment_slot": "1" + }, + { + "shop_price": "160", + "examine": "A letter of recommendation.", + "durability": null, + "name": "Mourner letter", + "archery_ticket_price": "0", + "id": "6071" + }, + { + "examine": "A bar of soap taken from Tegid.", + "durability": null, + "name": "Tegid's soap", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6072" + }, + { + "examine": "A book on the history of Prifddinas.", + "durability": null, + "name": "Prifddinas' history", + "archery_ticket_price": "0", + "id": "6073" + }, + { + "examine": "A book on the exploration of the eastern realm.", + "durability": null, + "name": "Eastern discovery", + "archery_ticket_price": "0", + "id": "6075" + }, + { + "examine": "A book on the settlement of the eastern realm.", + "durability": null, + "name": "Eastern settlement", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6077" + }, + { + "examine": "A book about the great divide.", + "durability": null, + "name": "The great divide", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6079" + }, + { + "examine": "A strange broken device of gnomic design.", + "durability": null, + "name": "Broken device", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6081" + }, + { + "turn90cw_anim": "2319", + "examine": "A device for firing dye.", + "walk_anim": "2317", + "durability": null, + "weight": "4", + "turn90ccw_anim": "2320", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "20", + "turn180_anim": "2318", + "render_anim": "284", + "equipment_slot": "3", + "stand_anim": "2316", + "name": "Fixed device", + "run_anim": "2322", + "archery_ticket_price": "0", + "id": "6082", + "stand_turn_anim": "2321" + }, + { + "examine": "This key has seen a lot of use. (Mourning's Ends Part I)", + "durability": null, + "name": "Tarnished key", + "archery_ticket_price": "0", + "id": "6083" + }, + { + "examine": "A large pair of ogre bellows filled with red dye.", + "durability": null, + "name": "Red dye bellows", + "archery_ticket_price": "0", + "id": "6085" + }, + { + "examine": "A large pair of ogre bellows filled with blue dye.", + "durability": null, + "name": "Blue dye bellows", + "archery_ticket_price": "0", + "id": "6086" + }, + { + "examine": "A large pair of ogre bellows filled with yellow dye.", + "durability": null, + "name": "Yellow dye bellows", + "archery_ticket_price": "0", + "id": "6087" + }, + { + "examine": "A large pair of ogre bellows filled with green dye.", + "durability": null, + "name": "Green dye bellows", + "archery_ticket_price": "0", + "id": "6088" + }, + { + "examine": "A blue dye filled toad.", + "durability": null, + "name": "Blue toad", + "weight": "1", + "archery_ticket_price": "0", + "id": "6089" + }, + { + "examine": "A red dye filled toad.", + "durability": null, + "name": "Red toad", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "6090" + }, + { + "examine": "A yellow dye filled toad.", + "durability": null, + "name": "Yellow toad", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "6091" + }, + { + "examine": "A green dye filled toad.", + "durability": null, + "name": "Green toad", + "weight": "1", + "archery_ticket_price": "0", + "id": "6092" + }, + { + "examine": "A barrel full of rotten apples.", + "durability": null, + "name": "Rotten apples", + "weight": "17", + "archery_ticket_price": "0", + "id": "6093" + }, + { + "examine": "A barrel full of mushed apples.", + "durability": null, + "name": "Apple barrel", + "archery_ticket_price": "0", + "id": "6094" + }, + { + "examine": "A barrel full of rotten apples and naptha.", + "durability": null, + "name": "Naphtha apple mix", + "archery_ticket_price": "0", + "id": "6095" + }, + { + "examine": "A barrel full of toxic naphtha.", + "durability": null, + "name": "Toxic naphtha", + "weight": "32", + "archery_ticket_price": "0", + "id": "6096" + }, + { + "examine": "It's a sieve.", + "durability": null, + "name": "Sieve", + "archery_ticket_price": "0", + "id": "6097" + }, + { + "examine": "A pile of toxic powder.", + "durability": null, + "name": "Toxic powder", + "archery_ticket_price": "0", + "id": "6098" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (4)", + "archery_ticket_price": "0", + "id": "6099" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (3)", + "archery_ticket_price": "0", + "id": "6100" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (2)", + "archery_ticket_price": "0", + "id": "6101" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (1)", + "archery_ticket_price": "0", + "id": "6102" + }, + { + "examine": "A tiny Elf crystal, I need to have this re-enchanted", + "durability": null, + "name": "Tiny elf crystal", + "archery_ticket_price": "0", + "id": "6103" + }, + { + "examine": "This key is newly cut. (Mourning's Ends Part II)", + "durability": null, + "name": "New key", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "6104" + }, + { + "examine": "They seem to be not quite of this world...", + "durability": null, + "name": "Ghostly boots", + "archery_ticket_price": "0", + "id": "6106", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "remove_sleeves": "true", + "examine": "Varies", + "durability": null, + "name": "Ghostly robe", + "archery_ticket_price": "0", + "id": "6107", + "bonuses": "0,0,0,5,0,0,0,0,5,0,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "Varies", + "durability": null, + "name": "Ghostly robe", + "archery_ticket_price": "0", + "id": "6108", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "A ghostly hood, fit for a ghostly head.", + "durability": null, + "name": "Ghostly hood", + "archery_ticket_price": "0", + "id": "6109", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "They seem to fade in and out of existence...", + "durability": null, + "name": "Ghostly gloves", + "archery_ticket_price": "0", + "id": "6110", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Made of a strange, ghostly material...", + "durability": null, + "name": "Ghostly cloak", + "archery_ticket_price": "0", + "id": "6111", + "bonuses": "0,0,0,5,0,0,0,0,5,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "destroy_message": "Return to the drunken dwarf's drunken relative to get your seeds back.", + "examine": "Kelda hop seeds can only be grown underground!", + "durability": null, + "name": "Kelda seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6112" + }, + { + "destroy_message": "Return to the Keldagrim palace gardener to get your hops back.", + "examine": "A handful of Kelda Hops.", + "durability": null, + "name": "Kelda hops", + "tradeable": "false", + "destroy": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "6113" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pint of bluish beer.", + "durability": null, + "name": "Kelda stout", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6118" + }, + { + "examine": "There is a strange [green/yellow] marking on this stone.", + "durability": null, + "name": "Square stone", + "weight": "1", + "archery_ticket_price": "0", + "id": "6119" + }, + { + "examine": "There is a strange [green/yellow] marking on this stone.", + "durability": null, + "name": "Square stone", + "weight": "1", + "archery_ticket_price": "0", + "id": "6120" + }, + { + "durability": null, + "name": "A chair", + "archery_ticket_price": "0", + "id": "6122", + "equipment_slot": "5" + }, + { + "shop_price": "1", + "examine": "I need to fill this with beer.", + "grand_exchange_price": "25", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "6123", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Coconut milk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6124" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(2)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6125", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(3)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6126", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(4)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6127", + "equipment_slot": "3" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "Protective headwear made from crabs. Better than it sounds.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21000", + "name": "Rock-shell helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6128", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,6,0,0,0,0" + }, + { + "lendable": "true", + "requirements": "{1,40}", + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "40600", + "durability": null, + "name": "Rock-shell plate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6129", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,30,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "Some tough leggings made from rock crab parts.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "39400", + "name": "Rock-shell legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6130", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,10,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "A helm fit for any Fremennik ranger.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "35800", + "name": "Spined helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6131", + "bonuses": "-6,-6,-6,-6,6,6,6,6,6,0,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35800", + "durability": null, + "name": "Spined helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6132" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "A constant reminder that I'm above a Dagannoth in the food chain.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "4386", + "name": "Spined body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6133", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4386", + "durability": null, + "name": "Spined body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6134" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "Stylish leg armour for rangers with a lingering smell of raw fish...", + "durability": null, + "weight": "5", + "absorb": "0,4,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2132", + "name": "Spined chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6135", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2132", + "durability": null, + "name": "Spined chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6136" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Make your foes cower by wearing a skull as a helmet!", + "durability": null, + "weight": "1.3", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "29500", + "name": "Skeletal helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6137", + "bonuses": "0,0,0,2,-2,10,9,11,3,0,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29500", + "durability": null, + "name": "Skeletal helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6138" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "The bones in this armour seems to vibrate with a magic quality...", + "durability": null, + "weight": "4.9", + "absorb": "6,3,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "27800", + "name": "Skeletal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6139", + "bonuses": "0,0,0,8,-10,35,25,42,15,0,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27800", + "durability": null, + "name": "Skeletal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6140" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "A superior set of strengthened slacks for any self respecting seer.", + "durability": null, + "weight": "4", + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "23600", + "name": "Skeletal bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6141", + "bonuses": "0,0,0,6,-7,22,20,24,10,0,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23600", + "durability": null, + "name": "Skeletal bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6142" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Some finely crafted Fremennik boots, made from spined dagannoth hide.", + "grand_exchange_price": "1671", + "durability": null, + "name": "Spined boots", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6143", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1671", + "durability": null, + "name": "Spined boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6144" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Some Fremennik boots, made from the shards of a rock crab's shell.", + "grand_exchange_price": "756", + "durability": null, + "name": "Rock-shell boots", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6145", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "756", + "durability": null, + "name": "Rock-shell boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6146" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Some finely crafted Fremennik boots, made from the bones of a Wallasalki.", + "grand_exchange_price": "4958", + "durability": null, + "name": "Skeletal boots", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6147", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4958", + "durability": null, + "name": "Skeletal boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6148" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Fremennik gloves stitched together from spined dagannoth hide.", + "grand_exchange_price": "955", + "durability": null, + "name": "Spined gloves", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6149", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "955", + "durability": null, + "name": "Spined gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6150" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Fremennik gloves stitched together from rock crab shell shards.", + "grand_exchange_price": "951", + "durability": null, + "name": "Rock-shell gloves", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6151", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "951", + "durability": null, + "name": "Rock-shell gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6152" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Fremennik gloves stitched together from wallasalki bones fragments.", + "grand_exchange_price": "21800", + "durability": null, + "name": "Skeletal gloves", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6153", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21800", + "durability": null, + "name": "Skeletal gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6154" + }, + { + "ge_buy_limit": "500", + "examine": "A sturdy piece of dagannoth hide.", + "grand_exchange_price": "3978", + "durability": null, + "name": "Dagannoth hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6155" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "3978", + "durability": null, + "name": "Dagannoth hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6156" + }, + { + "ge_buy_limit": "100", + "examine": "A spherical chunk of rock-shell.", + "grand_exchange_price": "7371", + "durability": null, + "name": "Rock-shell chunk", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6157" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7371", + "durability": null, + "name": "Rock-shell chunk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6158" + }, + { + "ge_buy_limit": "100", + "examine": "A curved piece of rock-shell.", + "grand_exchange_price": "11300", + "durability": null, + "name": "Rock-shell shard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6159" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11300", + "durability": null, + "name": "Rock-shell shard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6160" + }, + { + "ge_buy_limit": "100", + "examine": "A slim piece of rock-shell.", + "grand_exchange_price": "16100", + "durability": null, + "name": "Rock-shell splinter", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6161" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16100", + "durability": null, + "name": "Rock-shell splinter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6162" + }, + { + "ge_buy_limit": "100", + "examine": "A fearsome looking skull.", + "grand_exchange_price": "9859", + "durability": null, + "name": "Skull piece", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6163" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9859", + "durability": null, + "name": "Skull piece", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6164" + }, + { + "ge_buy_limit": "100", + "examine": "A slightly damaged ribcage.", + "grand_exchange_price": "11300", + "durability": null, + "name": "Ribcage piece", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6165" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11300", + "durability": null, + "name": "Ribcage piece", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6166" + }, + { + "ge_buy_limit": "100", + "examine": "An interesting looking bone shard.", + "grand_exchange_price": "10300", + "durability": null, + "name": "Fibula piece", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6167" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10300", + "durability": null, + "name": "Fibula piece", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6168" + }, + { + "ge_buy_limit": "100", + "examine": "A toughened chunk of dagannoth hide.", + "grand_exchange_price": "23400", + "durability": null, + "name": "Circular hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6169" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23400", + "durability": null, + "name": "Circular hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6170" + }, + { + "ge_buy_limit": "100", + "examine": "A tattered chunk of dagannoth hide.", + "grand_exchange_price": "502", + "durability": null, + "name": "Flattened hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6171" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "502", + "durability": null, + "name": "Flattened hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6172" + }, + { + "ge_buy_limit": "100", + "examine": "A weathered chunk of dagannoth hide.", + "grand_exchange_price": "398", + "durability": null, + "name": "Stretched hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6173" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "398", + "durability": null, + "name": "Stretched hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6174" + }, + { + "durability": null, + "name": "Rock-shell helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6175" + }, + { + "examine": "A sturdy body armour made from rock crab pieces.", + "durability": null, + "name": "Rock-shell plate", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "9", + "id": "6176" + }, + { + "durability": null, + "name": "Rock-shell legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6177" + }, + { + "examine": "I need to cook this first.", + "durability": null, + "name": "Raw pheasant", + "weight": "10", + "archery_ticket_price": "0", + "id": "6178" + }, + { + "examine": "I need to cook this first.", + "durability": null, + "name": "Raw pheasant", + "weight": "10", + "archery_ticket_price": "0", + "id": "6179" + }, + { + "remove_sleeves": "true", + "examine": "A leather strapped top.", + "durability": null, + "name": "Lederhosen top", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6180", + "equipment_slot": "4" + }, + { + "examine": "Brown leather shorts with bright white socks?", + "durability": null, + "name": "Lederhosen shorts", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6181", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "A hat with a goat's hair attached.", + "durability": null, + "name": "Lederhosen hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "6182", + "equipment_slot": "0" + }, + { + "examine": "I can use this at the Varrock clothes shop.", + "durability": null, + "name": "Frog token", + "archery_ticket_price": "0", + "id": "6183" + }, + { + "remove_sleeves": "true", + "examine": "Very posh!", + "durability": null, + "name": "Prince tunic", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "6184", + "equipment_slot": "4" + }, + { + "examine": "Very posh!", + "durability": null, + "name": "Prince leggings", + "weight": "2", + "archery_ticket_price": "0", + "id": "6185", + "equipment_slot": "7" + }, + { + "remove_sleeves": "true", + "examine": "Very posh!", + "durability": null, + "name": "Princess blouse", + "weight": "2", + "archery_ticket_price": "0", + "id": "6186", + "equipment_slot": "4" + }, + { + "examine": "Very posh!", + "durability": null, + "name": "Princess skirt", + "weight": "2", + "archery_ticket_price": "0", + "id": "6187", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "Now that's just silly.", + "durability": null, + "name": "Frog mask", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6188", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Could there be something valuable in here?", + "durability": null, + "name": "Mystery box", + "weight": "1", + "archery_ticket_price": "0", + "id": "6199", + "point_price": "2" + }, + { + "destroy_message": "A ghastly fish", + "examine": "A raw...fish? Is this a fish??", + "durability": null, + "name": "Raw fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6200" + }, + { + "examine": "Fish-tastic!", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "6201" + }, + { + "destroy_message": "A ghastly fish", + "examine": "It's a fish-like thing that appears to already be cooked. It looks disgusting.", + "durability": null, + "name": "Fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6202" + }, + { + "destroy_message": "A ghastly fish", + "examine": "A raw...fish? Is this a fish??", + "durability": null, + "name": "Raw fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6204" + }, + { + "destroy_message": "A ghastly fish", + "examine": "It's a fish-like thing that appears to already be cooked. It looks disgusting.", + "durability": null, + "name": "Fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6206" + }, + { + "examine": "It's an amulet of Man speak. It makes vague grunting noises.", + "durability": null, + "name": "Man speak amulet", + "archery_ticket_price": "0", + "id": "6208", + "equipment_slot": "2" + }, + { + "shop_price": "40", + "examine": "Useful for catching small fish.", + "grand_exchange_price": "433", + "durability": null, + "name": "Small fishing net", + "tradeable": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "6209" + }, + { + "ge_buy_limit": "1000", + "examine": "Teak logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "3365", + "durability": null, + "name": "Teak pyre logs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6211" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3365", + "durability": null, + "name": "Teak pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6212" + }, + { + "ge_buy_limit": "1000", + "examine": "Mahogany logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "3574", + "durability": null, + "name": "Mahogany pyre log", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "6213" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3574", + "durability": null, + "name": "Mahogany pyre log", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6214" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2007", + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6215", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2007", + "durability": null, + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6216" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6217", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6218" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6219", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6220" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6221", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6222" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6223", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6224" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6225", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6226" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6227", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6228" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6229", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6230" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6231", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6232" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6233", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6234" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2572", + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6235", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2572", + "durability": null, + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6236" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2200", + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6237", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2200", + "durability": null, + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6238" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6239", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6240" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6241", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6242" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6243", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6244" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6245", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6246" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6247", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6248" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6249", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6250" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6251", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6252" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6253", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6254" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6255", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6256" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2731", + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6257", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2731", + "durability": null, + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6258" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "1494", + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6259", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "attack_anims": "7060", + "ge_buy_limit": "100", + "grand_exchange_price": "1494", + "durability": null, + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6260" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6261", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6262" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6263", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6264" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6265", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6266" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6267", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6268" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6269", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6270" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6271", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6272" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6273", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6274" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6275", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6276" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6277", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6278" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2957", + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6279", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2957", + "durability": null, + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6280" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden pole for use in primitive construction.", + "grand_exchange_price": "1", + "durability": null, + "name": "Thatch spar light", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6281", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Thatch spar light", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6282" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden pole for use in primitive construction.", + "grand_exchange_price": "2", + "durability": null, + "name": "Thatch spar med", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6283", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Thatch spar med", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6284" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden pole for use in primitive construction.", + "grand_exchange_price": "3", + "durability": null, + "name": "Thatch spar dense", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6285", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3", + "durability": null, + "name": "Thatch spar dense", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6286" + }, + { + "ge_buy_limit": "10000", + "examine": "Scaly but not slimy!", + "grand_exchange_price": "2084", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6287" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2084", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6288" + }, + { + "ge_buy_limit": "10000", + "examine": "Scaley but not slimy!", + "grand_exchange_price": "2019", + "durability": null, + "name": "Snakeskin", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6289" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2019", + "durability": null, + "name": "Snakeskin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6290" + }, + { + "ge_buy_limit": "1000", + "examine": "Its creeping days are over!", + "grand_exchange_price": "1949", + "durability": null, + "name": "Spider carcass", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "6291" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1949", + "durability": null, + "name": "Spider carcass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6292" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "Raw: A raw spider threaded onto a skewer stick.Cooked: A nicely roasted spider threaded onto a skewer stick.", + "grand_exchange_price": "207", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "6293" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "207", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6294" + }, + { + "shop_price": "40", + "ge_buy_limit": "1000", + "examine": "A raw spider threaded onto an arrow shaft. (Raw) A nicely roasted spider threaded onto an arrow shaft. (Cooked) A badly burnt spider threaded onto a charred arrow shaft. (Burnt)", + "grand_exchange_price": "106", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6295" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "106", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6296" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "Raw: A raw spider threaded onto a skewer stick.Cooked: A nicely roasted spider threaded onto a skewer stick.", + "grand_exchange_price": "54", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "6297" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "54", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6298" + }, + { + "shop_price": "40", + "ge_buy_limit": "1000", + "examine": "A raw spider threaded onto an arrow shaft. (Raw) A nicely roasted spider threaded onto an arrow shaft. (Cooked) A badly burnt spider threaded onto a charred arrow shaft. (Burnt)", + "grand_exchange_price": "78", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6299" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "78", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6300" + }, + { + "durability": null, + "name": "Burnt spider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6302" + }, + { + "shop_price": "40", + "examine": "A raw spider threaded onto an arrow shaft. (Raw) A nicely roasted spider threaded onto an arrow shaft. (Cooked) A badly burnt spider threaded onto a charred arrow shaft. (Burnt)", + "grand_exchange_price": "106", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6303" + }, + { + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6304" + }, + { + "ge_buy_limit": "1000", + "examine": "A sharp pointed stick, quite resistant to fire.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skewer stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6305" + }, + { + "ge_buy_limit": "10000", + "examine": "Karamja currency.", + "grand_exchange_price": "2", + "durability": null, + "name": "Trading sticks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6306" + }, + { + "ge_buy_limit": "100", + "examine": "Plant this in a herb patch to grow Goutweed.", + "grand_exchange_price": "6991", + "durability": null, + "name": "Gout tuber", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "6311" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6991", + "durability": null, + "name": "Gout tuber", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6312" + }, + { + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weight": "1.35", + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "grand_exchange_price": "179", + "name": "Opal machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6313", + "bonuses": "0,8,-2,0,0,0,1,1,0,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "179", + "durability": null, + "name": "Opal machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6314" + }, + { + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "grand_exchange_price": "4473", + "name": "Jade machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6315", + "bonuses": "0,11,-2,0,0,0,1,1,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4473", + "durability": null, + "name": "Jade machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6316" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weight": "1.3", + "attack_speed": "4", + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "8774", + "name": "Red topaz machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6317", + "bonuses": "0,16,-2,0,0,0,1,1,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8774", + "durability": null, + "name": "Red topaz machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6318" + }, + { + "ge_buy_limit": "100", + "examine": "A giant mosquito's proboscis: aerodynamic, sharp and pointy!", + "grand_exchange_price": "9733", + "durability": null, + "name": "Proboscis", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6319" + }, + { + "requirements": "{1,30}-{4,30}", + "shop_price": "1588", + "ge_buy_limit": "100", + "examine": "Made from 100% real snakeskin.", + "durability": null, + "weight": "10", + "absorb": "0,4,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "23100", + "name": "Snakeskin body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6322", + "bonuses": "0,0,0,-5,12,25,28,32,15,35,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23100", + "durability": null, + "name": "Snakeskin body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6323" + }, + { + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "100", + "examine": "Made from 100% real snake.", + "durability": null, + "weight": "3.6", + "absorb": "0,3,1", + "equipment_slot": "7", + "grand_exchange_price": "702", + "name": "Snakeskin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6324", + "bonuses": "0,0,0,-5,6,8,8,10,4,10,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "702", + "durability": null, + "name": "Snakeskin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6325" + }, + { + "remove_head": "true", + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "100", + "examine": "Lightweight head protection.", + "durability": null, + "weight": "0.9", + "absorb": "0,2,1", + "equipment_slot": "0", + "grand_exchange_price": "871", + "name": "Snakeskin bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6326", + "bonuses": "0,0,0,-5,4,2,4,4,2,2,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "871", + "durability": null, + "name": "Snakeskin bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6327" + }, + { + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "100", + "examine": "Made from snakes.", + "grand_exchange_price": "10800", + "durability": null, + "name": "Snakeskin boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "6328", + "bonuses": "0,0,0,-10,3,1,1,2,1,0,9,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10800", + "durability": null, + "name": "Snakeskin boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6329" + }, + { + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "10000", + "examine": "Made from 100% real snake.", + "grand_exchange_price": "914", + "durability": null, + "name": "Snakeskin v'brace", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6330", + "bonuses": "0,0,0,-5,6,2,2,2,1,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "914", + "durability": null, + "name": "Snakeskin v'brace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6331" + }, + { + "ge_buy_limit": "25000", + "examine": "Some well-cut mahogany logs.", + "grand_exchange_price": "503", + "durability": null, + "name": "Mahogany logs", + "tradeable": "true", + "weight": "1.33", + "archery_ticket_price": "0", + "id": "6332" + }, + { + "ge_buy_limit": "25000", + "examine": "Some well-cut teak logs.", + "grand_exchange_price": "92", + "durability": null, + "name": "Teak logs", + "tradeable": "true", + "weight": "1.35", + "archery_ticket_price": "0", + "id": "6333" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "92", + "durability": null, + "name": "Teak logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6334" + }, + { + "ge_buy_limit": "100", + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1306", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6335", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1306", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6336" + }, + { + "ge_buy_limit": "100", + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "997", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6337", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "997", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6338" + }, + { + "ge_buy_limit": "100", + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1018", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6339", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1018", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6340" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "3331", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6341", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3331", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6342" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "1382", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6343", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1382", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6344" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "2337", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6345", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2337", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6346" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "734", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6347", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "734", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6348" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "2793", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6349", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2793", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6350" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "3171", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6351", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3171", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6352" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "1416", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6353", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1416", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6354" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "2785", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6355", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2785", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6356" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "944", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6357", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "944", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6358" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "672", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6359", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "672", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6360" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "2484", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6361", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2484", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6362" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "499", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6363", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "499", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6364" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "2440", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6365", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2440", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6366" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "1479", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6367", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1479", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6368" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "823", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6369", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "823", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6370" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "2683", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6371", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2683", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6372" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "331", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6373", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "331", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6374" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "3010", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6375", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3010", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6376" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "2310", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6377", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2310", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6378" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "1697", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6379", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1697", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6380" + }, + { + "shop_price": "24", + "ge_buy_limit": "100", + "examine": "A fez hat. Juss like that.", + "grand_exchange_price": "690", + "durability": null, + "name": "Fez", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "6382", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "690", + "durability": null, + "name": "Fez", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6383" + }, + { + "remove_sleeves": "true", + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A bit itchy.", + "grand_exchange_price": "649", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6384", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "649", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6385" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "Has a coarse hard wearing texture.", + "grand_exchange_price": "533", + "durability": null, + "name": "Desert robes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6386", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "533", + "durability": null, + "name": "Desert robes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6387" + }, + { + "remove_sleeves": "true", + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A bit itchy.", + "grand_exchange_price": "1016", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6388", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1016", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6389" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "Better than factor 50 sun cream.", + "grand_exchange_price": "515", + "durability": null, + "name": "Desert legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6390", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "515", + "durability": null, + "name": "Desert legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6391" + }, + { + "remove_head": "true", + "shop_price": "35", + "ge_buy_limit": "100", + "examine": "Good for keeping the sun off my neck.", + "grand_exchange_price": "531", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6392", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "531", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6393" + }, + { + "remove_sleeves": "true", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Colourful.", + "grand_exchange_price": "650", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6394", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "650", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6395" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool light Menaphite robe.", + "grand_exchange_price": "440", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6396", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "440", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6397" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Look at those nobbily knees.", + "grand_exchange_price": "246", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6398", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "246", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6399" + }, + { + "remove_head": "true", + "shop_price": "35", + "ge_buy_limit": "100", + "examine": "Good for keeping the sun off my neck.", + "grand_exchange_price": "484", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6400", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "484", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6401" + }, + { + "remove_sleeves": "true", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Colourful.", + "grand_exchange_price": "557", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6402", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "557", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6403" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool light Menaphite robe.", + "grand_exchange_price": "449", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6404", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "449", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6405" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Look at those nobbily knees.", + "grand_exchange_price": "236", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6406", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "236", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6407" + }, + { + "requirements": "{17,10}-{0,10}", + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "An offensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "852", + "name": "Oak blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6408", + "bonuses": "0,0,4,0,0,0,0,0,0,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "852", + "durability": null, + "name": "Oak blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6409" + }, + { + "requirements": "{17,10}-{1,10}", + "ge_buy_limit": "100", + "examine": "An defensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "818", + "name": "Oak blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6410", + "bonuses": "0,0,0,0,0,0,0,4,0,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "818", + "durability": null, + "name": "Oak blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6411" + }, + { + "requirements": "{17,20}-{0,20}", + "ge_buy_limit": "100", + "examine": "An offensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "1418", + "name": "Willow blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6412", + "bonuses": "0,0,8,0,0,0,0,0,0,0,0,8,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1418", + "durability": null, + "name": "Willow blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6413" + }, + { + "requirements": "{17,20}-{1,20}", + "ge_buy_limit": "100", + "examine": "A defensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "1285", + "name": "Willow blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6414", + "bonuses": "0,0,0,0,0,0,0,8,0,0,0,8,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1285", + "durability": null, + "name": "Willow blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6415" + }, + { + "requirements": "{17,30}", + "shop_price": "1200", + "ge_buy_limit": "100", + "examine": "A solid bit of maple.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "10", + "defence_anim": "425", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "1432", + "name": "Maple blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6416", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1432", + "durability": null, + "name": "Maple blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6417" + }, + { + "requirements": "{17,30}-{0,30}", + "shop_price": "1600", + "ge_buy_limit": "100", + "examine": "An offensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "2079", + "name": "Maple blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6418", + "bonuses": "0,0,24,0,0,0,0,0,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2079", + "durability": null, + "name": "Maple blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6419" + }, + { + "requirements": "{17,30}-{1,30}", + "shop_price": "952", + "ge_buy_limit": "100", + "examine": "A defensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "2407", + "name": "Maple blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6420", + "bonuses": "0,0,0,0,0,0,0,24,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2407", + "durability": null, + "name": "Maple blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6421" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "9", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6422" + }, + { + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6423" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6424" + }, + { + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6425" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "7", + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6426" + }, + { + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6427" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "16", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6428" + }, + { + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6429" + }, + { + "shop_price": "140", + "examine": "Used for small missile spells.", + "grand_exchange_price": "65", + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6430" + }, + { + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6431" + }, + { + "shop_price": "310", + "examine": "Used for medium missile spells.", + "grand_exchange_price": "399", + "durability": null, + "name": "Death rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6432" + }, + { + "durability": null, + "name": "Death rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6433" + }, + { + "shop_price": "378", + "examine": "Used for teleport spells.", + "grand_exchange_price": "277", + "durability": null, + "name": "Law rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6434" + }, + { + "durability": null, + "name": "Law rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6435" + }, + { + "shop_price": "17", + "examine": "Used for basic missile spells.", + "grand_exchange_price": "6", + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6436" + }, + { + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6437" + }, + { + "shop_price": "16", + "examine": "Used for Curse spells", + "grand_exchange_price": "6", + "durability": null, + "name": "Body rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6438" + }, + { + "durability": null, + "name": "Body rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6439" + }, + { + "examine": "A spadeful of refined coal.", + "durability": null, + "name": "Spadeful of coke", + "weight": "2", + "archery_ticket_price": "0", + "id": "6448" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A white rosebush seed.", + "durability": null, + "name": "White rose seed", + "tradeable": "false", + "destroy": "true", + "weight": "28.928", + "archery_ticket_price": "0", + "id": "6453" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A red rosebush seed.", + "durability": null, + "name": "Red rose seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6454" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pink rosebush seed.", + "durability": null, + "name": "Pink rose seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6455" + }, + { + "destroy_message": "You can get some more Burthorpe vine seeds from Berald in Taverly.", + "examine": "A grapevine seed.", + "durability": null, + "name": "Vine seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6456" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A delphinium seed.", + "durability": null, + "name": "Delphinium seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6457" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A snowdrop seed.", + "durability": null, + "name": "Snowdrop seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6460" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Shoot: A shoot that has been cut from a dying White Tree.Plant pot: A young White Tree sapling.Plant pot after watering: This shoot from a White Tree has been watered and will soon grow.", + "durability": null, + "name": "White tree shoot", + "archery_ticket_price": "0", + "id": "6461" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Shoot: A shoot that has been cut from a dying White Tree.Plant pot: A young White Tree sapling.Plant pot after watering: This shoot from a White Tree has been watered and will soon grow.", + "durability": null, + "name": "White tree shoot", + "archery_ticket_price": "0", + "id": "6462" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Shoot: A shoot that has been cut from a dying White Tree.Plant pot: A young White Tree sapling.Plant pot after watering: This shoot from a White Tree has been watered and will soon grow.", + "durability": null, + "name": "White tree shoot", + "archery_ticket_price": "0", + "id": "6463" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A young White Tree sapling", + "durability": null, + "name": "White tree sapling", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "6464" + }, + { + "destroy_message": "Another can be received from pickpocketing Dr. Fenkenstrain in the tower.", + "examine": "Unactivated: The Ring of charos.Activated: The power within this ring has been activated.", + "durability": null, + "name": "Ring of charos(a)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6465", + "equipment_slot": "12" + }, + { + "examine": "A rune essence chip that has been broken into shards.", + "durability": null, + "name": "Rune shards", + "archery_ticket_price": "0", + "id": "6466" + }, + { + "examine": "Crushed rune essence.", + "durability": null, + "name": "Rune dust", + "archery_ticket_price": "0", + "id": "6467" + }, + { + "shop_price": "25", + "examine": "Use this on plants to cure disease.", + "grand_exchange_price": "199", + "durability": null, + "name": "Plant cure", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6468" + }, + { + "examine": "Looks delicious.", + "durability": null, + "name": "White tree fruit", + "archery_ticket_price": "0", + "id": "6469" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "11500", + "durability": null, + "name": "Compost potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6470" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11500", + "durability": null, + "name": "Compost potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6471" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "6804", + "durability": null, + "name": "Compost potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6472" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6804", + "durability": null, + "name": "Compost potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6473" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "3338", + "durability": null, + "name": "Compost potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6474" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3338", + "durability": null, + "name": "Compost potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6475" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "1734", + "durability": null, + "name": "Compost potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6476" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1734", + "durability": null, + "name": "Compost potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6477" + }, + { + "destroy_message": "You can get another one from Queen Ellamaria", + "examine": "I can use this to move heavy objects. (or) An empty trolley.", + "durability": null, + "name": "Trolley", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6478" + }, + { + "destroy_message": "You can get another list from Queen Ellamaria in Varrock", + "examine": "A list of things that I must collect for Queen Ellamaria.", + "durability": null, + "name": "List", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6479" + }, + { + "requirements": "{4,60}", + "shop_price": "375", + "ge_buy_limit": "100", + "examine": "A razor sharp ring of obsidian.", + "durability": null, + "tokkul_price": "375", + "attack_speed": "4", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2614,2614,2614,2614", + "grand_exchange_price": "340", + "name": "Toktz-xil-ul", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6522", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,49" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A razor sharp sword of obsidian.", + "durability": null, + "tokkul_price": "60000", + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "5", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "30200", + "name": "Toktz-xil-ak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6523", + "bonuses": "47,38,-2,0,0,2,3,0,0,0,0,49,0,0,0" + }, + { + "requirements": "{1,60}", + "shop_price": "67500", + "ge_buy_limit": "10", + "examine": "A spiked shield of Obsidian.", + "durability": null, + "tokkul_price": "67500", + "weight": "3.6", + "absorb": "5,0,11", + "equipment_slot": "5", + "grand_exchange_price": "34700", + "name": "Toktz-ket-xil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6524", + "bonuses": "0,0,0,-12,-8,40,42,38,0,65,60,5,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "37500", + "ge_buy_limit": "10", + "examine": "A large knife of Obsidian.", + "durability": null, + "tokkul_price": "37500", + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "6", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "16900", + "name": "Toktz-xil-ek", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6525", + "bonuses": "16,48,0,0,0,0,0,0,0,0,0,39,0,0,0" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A staff of obsidian.", + "walk_anim": "1205", + "tokkul_price": "52500", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "26300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6526", + "stand_turn_anim": "1209", + "bonuses": "15,-1,55,15,0,10,15,5,15,0,0,55,5,0,0", + "requirements": "{0,60}-{6,60}", + "shop_price": "52500", + "durability": null, + "weight": "1", + "weapon_interface": "1", + "render_anim": "28", + "name": "Toktz-mej-tal" + }, + { + "requirements": "{0,60}", + "shop_price": "45000", + "ge_buy_limit": "10", + "examine": "A mace of obsidian.", + "durability": null, + "tokkul_price": "45000", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "10", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "22600", + "name": "Tzhaar-ket-em", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6527", + "bonuses": "-4,-4,62,0,0,0,0,0,0,0,0,56,0,0,0" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1663", + "examine": "A maul of obsidian.", + "walk_anim": "1663", + "tokkul_price": "75000", + "turn90ccw_anim": "1663", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1663", + "defence_anim": "1666", + "equipment_slot": "3", + "attack_anims": "2661,2661,2661,2661", + "grand_exchange_price": "31000", + "stand_anim": "1662", + "tradeable": "true", + "run_anim": "1664", + "archery_ticket_price": "0", + "id": "6528", + "stand_turn_anim": "823", + "bonuses": "0,0,80,-4,0,0,0,0,0,0,0,85,0,0,0", + "requirements": "{2,60}", + "shop_price": "75000", + "durability": null, + "weight": "3.6", + "weapon_interface": "10", + "render_anim": "27", + "attack_audios": "2520,0,0,0", + "name": "Tzhaar-ket-om" + }, + { + "examine": "It's a Token of some kind made from Obsidian.", + "durability": null, + "name": "Tokkul", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "6529" + }, + { + "durability": null, + "name": "Toktz-xil-ak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6535" + }, + { + "durability": null, + "name": "Toktz-ket-xil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6536" + }, + { + "durability": null, + "name": "Toktz-xil-ek", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6537" + }, + { + "durability": null, + "name": "Toktz-mej-tal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6538" + }, + { + "durability": null, + "name": "Tzhaar-ket-em", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6539" + }, + { + "durability": null, + "name": "Tzhaar-ket-om", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6540" + }, + { + "destroy_message": "You can get a replacement mouse toy by speaking to Bob, the Jagex cat.", + "examine": "An Advanced Combat Training Device.", + "durability": null, + "name": "Mouse toy", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6541", + "weapon_interface": "12", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You will not get a replacement for the present. Open it for your reward.", + "examine": "Thanks for all your help! Love, Bob & Neite.", + "durability": null, + "name": "Present", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6542" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6543" + }, + { + "destroy_message": "You can get another Amulet of Catspeak from the Sphinx in Sophanem.", + "examine": "It's an amulet of cat speak. It makes vague purring noises.", + "durability": null, + "name": "Catspeak amulet(e)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6544", + "equipment_slot": "2" + }, + { + "destroy_message": "You have completed the chores; you can safely destroy the list.", + "examine": "A list of chores that Bob gave you to do.", + "durability": null, + "name": "Chores", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6545" + }, + { + "destroy_message": "You found the recipe in Unferth's bookcase, which is in his Burthorpe house, you will be able to get a replacement.", + "examine": "It says on the back 'My favourite recipe.", + "durability": null, + "name": "Recipe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6546" + }, + { + "destroy_message": "You can get another Doctor's hat from the Apothecary in Varrock.", + "examine": "A mirror helps reflect light on the subject.", + "durability": null, + "name": "Doctors hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6547", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another Nurse's hat from the Apothecary in Varrock.", + "examine": "A nurse's hat, but does it have healing powers?", + "durability": null, + "name": "Nurse hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6548", + "equipment_slot": "0" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6549" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6550" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6551" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6552" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6553" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6554" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6555" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6556" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6557" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6558" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6559" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6560" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "368700", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6562", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mud battlestaff" + }, + { + "requirements": "{0,40}-{6,40}", + "ge_buy_limit": "10", + "shop_price": "40000", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "423100", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "true", + "name": "Mystic mud staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6563", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0" + }, + { + "examine": "A valuable ring.", + "grand_exchange_price": "6609743", + "durability": null, + "name": "Onyx ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6564" + }, + { + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "4501000", + "durability": null, + "name": "Onyx necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6565" + }, + { + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "9058124", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6566" + }, + { + "shop_price": "90000", + "ge_buy_limit": "100", + "examine": "A cape woven of obsidian plates.", + "durability": null, + "tokkul_price": "90000", + "weight": "1.8", + "equipment_slot": "1", + "lendable": "true", + "grand_exchange_price": "42000", + "name": "Obsidian cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6568", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "42000", + "durability": null, + "name": "Obsidian cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6569" + }, + { + "examine": "A cape of fire.", + "durability": null, + "name": "Fire cape", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6570", + "bonuses": "1,1,1,1,1,11,11,11,11,11,11,4,2,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "2700000", + "ge_buy_limit": "100", + "examine": "An uncut onyx.", + "grand_exchange_price": "10700000", + "tokkul_price": "300000", + "durability": null, + "name": "Uncut onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6571" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10700000", + "durability": null, + "name": "Uncut onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6572" + }, + { + "ge_buy_limit": "100", + "examine": "This looks valuable.", + "grand_exchange_price": "10700000", + "durability": null, + "name": "Onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6573" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10700000", + "durability": null, + "name": "Onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6574" + }, + { + "ge_buy_limit": "100", + "examine": "A valuable ring.", + "grand_exchange_price": "11900000", + "durability": null, + "name": "Onyx ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6575", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11900000", + "durability": null, + "name": "Onyx ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6576" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "4500000", + "durability": null, + "name": "Onyx necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6577", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4500000", + "durability": null, + "name": "Onyx necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6578" + }, + { + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "9058124", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6579" + }, + { + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6580" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "10900000", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6581", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10900000", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6582" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring.", + "grand_exchange_price": "803700", + "durability": null, + "name": "Ring of stone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6583", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "803700", + "durability": null, + "name": "Ring of stone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6584" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "A very powerful onyx amulet.", + "grand_exchange_price": "9200000", + "durability": null, + "name": "Amulet of fury", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6585", + "bonuses": "10,10,10,10,10,15,15,15,15,15,15,8,5,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9200000", + "durability": null, + "name": "Amulet of fury", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6586" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "360", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "1013", + "name": "White claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6587", + "bonuses": "10,14,-4,0,0,4,7,2,0,0,0,14,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1013", + "durability": null, + "name": "White claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6588" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "1248", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "1459", + "attack_audios": "2498,2498,2497,2498", + "name": "White battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6589", + "bonuses": "-2,20,15,0,0,0,0,0,0,-1,0,24,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1459", + "durability": null, + "name": "White battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6590" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "479", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6591", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "479", + "durability": null, + "name": "White dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6592" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "497", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6593", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "497", + "durability": null, + "name": "White dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6594" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "982", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6595", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "982", + "durability": null, + "name": "White dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6596" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "8422", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6597", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8422", + "durability": null, + "name": "White dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6598" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A white halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "1834", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6599", + "stand_turn_anim": "1209", + "bonuses": "19,25,0,-4,0,-1,2,3,0,0,0,20,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "1920", + "durability": null, + "weight": "3.1", + "weapon_interface": "15", + "render_anim": "28", + "name": "White halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1834", + "durability": null, + "name": "White halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6600" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "432", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "481", + "name": "White mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6601", + "bonuses": "8,-2,16,0,0,0,0,0,0,0,0,13,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "481", + "durability": null, + "name": "White mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6602" + }, + { + "requirements": "{0,10}-{5,10}", + "ge_buy_limit": "100", + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "650", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "true", + "name": "White magic staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6603", + "stand_turn_anim": "1209", + "bonuses": "2,-1,10,10,0,2,3,1,10,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "650", + "durability": null, + "name": "White magic staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6604" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "grand_exchange_price": "1187", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "6605", + "stand_turn_anim": "823", + "bonuses": "14,10,-2,0,0,0,2,1,0,0,0,12,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "624", + "durability": null, + "weight": "1.8", + "weapon_interface": "5", + "render_anim": "1381", + "name": "White sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1187", + "durability": null, + "name": "White sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6606" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "2060", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "6607", + "stand_turn_anim": "823", + "bonuses": "13,18,-2,0,0,0,3,2,0,0,0,16,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "960", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "name": "White longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2060", + "durability": null, + "name": "White longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6608" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "4029", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "6609", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,-4,0,0,0,0,0,-1,0,26,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "1920", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "White 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4029", + "durability": null, + "name": "White 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6610" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "1404", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "6611", + "stand_turn_anim": "823", + "bonuses": "4,19,-2,0,0,0,1,0,0,0,0,14,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "768", + "durability": null, + "weight": "1", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "White scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1404", + "durability": null, + "name": "White scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6612" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "980", + "ge_buy_limit": "100", + "examine": "I don't think it's intended for joinery.", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "weapon_interface": "10", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "1178", + "attack_audios": "2504,0,0,0", + "name": "White warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6613", + "bonuses": "-4,-4,22,-4,0,0,0,0,0,0,0,19,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1178", + "durability": null, + "name": "White warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6614" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1440", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6.8", + "absorb": "1,0,2", + "equipment_slot": "4", + "grand_exchange_price": "788", + "name": "White chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6615", + "bonuses": "0,0,0,-15,0,22,32,39,-3,24,10,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "788", + "durability": null, + "name": "White chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6616" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "3840", + "ge_buy_limit": "100", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "5837", + "name": "White platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6617", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5837", + "durability": null, + "name": "White platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6618" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "576", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "durability": null, + "weight": "1.3", + "equipment_slot": "10", + "grand_exchange_price": "1016", + "name": "White boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6619", + "bonuses": "0,0,0,-3,-1,7,8,9,0,0,7,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1016", + "durability": null, + "name": "White boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6620" + }, + { + "remove_head": "true", + "requirements": "{1,10}-{5,10}", + "shop_price": "576", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.9", + "equipment_slot": "0", + "grand_exchange_price": "853", + "name": "White med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6621", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,4,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "853", + "durability": null, + "name": "White med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6622" + }, + { + "remove_head": "true", + "requirements": "{1,10}-{5,10}", + "shop_price": "1056", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "2624", + "name": "White full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6623", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2624", + "durability": null, + "name": "White full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6624" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "Big, white and heavy looking.", + "durability": null, + "weight": "9", + "equipment_slot": "7", + "grand_exchange_price": "2115", + "name": "White platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6625", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2115", + "durability": null, + "name": "White platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6626" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "Big, white, and heavy looking.", + "durability": null, + "weight": "8.1", + "equipment_slot": "7", + "grand_exchange_price": "2000", + "name": "White plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6627", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2000", + "durability": null, + "name": "White plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6628" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "These will keep my hands warm!", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "2036", + "name": "White gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6629", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2036", + "durability": null, + "name": "White gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6630" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1152", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3.6", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "1360", + "name": "White sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6631", + "bonuses": "0,0,0,-6,-2,15,16,14,0,15,9,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1360", + "durability": null, + "name": "White sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6632" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1632", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "2390", + "name": "White kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6633", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2390", + "durability": null, + "name": "White kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6634" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A Temple Knight Communication Orb. Top Secret! / Use this to stay in touch with Korasi and Jessika. (A Void Dance version) / Tyr's commorb, given to him by Sir Tiffy. (Tyr's commorb)", + "durability": null, + "name": "Commorb", + "weight": "1", + "archery_ticket_price": "0", + "id": "6635" + }, + { + "examine": "Proof that I have defeated the evil mage Solus.", + "durability": null, + "name": "Solus's hat", + "archery_ticket_price": "0", + "id": "6636" + }, + { + "examine": "From a darker dimension.", + "durability": null, + "name": "Dark beast", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "6637" + }, + { + "examine": "A key to the nature of light itself. (Mourning's Ends Part II)", + "durability": null, + "name": "Colour wheel", + "archery_ticket_price": "0", + "id": "6638" + }, + { + "destroy_message": "Resetting the light maze will generate a new mirror.", + "examine": "A small hand mirror.", + "durability": null, + "name": "Hand mirror", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6639" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A yellow crystal.", + "durability": null, + "name": "Yellow crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6641" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A cyan crystal.", + "durability": null, + "name": "Cyan crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6643" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A blue crystal.", + "durability": null, + "name": "Blue crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6644" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A fractured crystal, one of the edges is clear.", + "durability": null, + "name": "Fractured crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6646" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A fractured crystal, one of the edges is clear.", + "durability": null, + "name": "Fractured crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6647" + }, + { + "destroy_message": "You can obtain another list from Thorgel.", + "examine": "It's a list of items I need to collect.", + "durability": null, + "name": "Item list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6648" + }, + { + "examine": "The journal of Nissyen Edern.", + "durability": null, + "name": "Edern's journal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6649" + }, + { + "examine": "A blackened crystal sample.", + "durability": null, + "name": "Blackened crystal", + "archery_ticket_price": "0", + "id": "6650" + }, + { + "examine": "A newly formed crystal / A warm energy radiates from this crystal.", + "durability": null, + "name": "Newly made crystal", + "archery_ticket_price": "0", + "id": "6651" + }, + { + "examine": "A newly formed crystal / A warm energy radiates from this crystal.", + "durability": null, + "name": "Newly made crystal", + "archery_ticket_price": "0", + "id": "6652" + }, + { + "destroy_message": "You can get another Crystal trinket from Arianwyn in Lletya.", + "examine": "A small Crystal trinket.", + "durability": null, + "name": "Crystal trinket", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6653" + }, + { + "remove_sleeves": "true", + "examine": "Examine what?", + "durability": null, + "name": "Camo top", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "6654", + "equipment_slot": "4" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo bottoms", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6655", + "equipment_slot": "7" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo helmet", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6656", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "Examine what?", + "durability": null, + "name": "Camo top", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "6657", + "equipment_slot": "4" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo bottoms", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6658", + "equipment_slot": "7" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo helmet", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6659", + "equipment_slot": "0" + }, + { + "shop_price": "60", + "examine": "The jar keeps shaking... I'm scared.", + "durability": null, + "name": "Fishing explosive", + "archery_ticket_price": "0", + "id": "6660" + }, + { + "examine": "An angry Ogre in a funny hat.", + "durability": null, + "name": "Mogre", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "6661" + }, + { + "examine": "This fishing rod seems to have been bitten in half.", + "durability": null, + "name": "Broken fishing rod", + "archery_ticket_price": "0", + "id": "6662" + }, + { + "examine": "It seems someone vacated this boot in a hurry.", + "durability": null, + "name": "Forlorn boot", + "archery_ticket_price": "0", + "id": "6663" + }, + { + "requirements": "{18,32}", + "shop_price": "60", + "examine": "The jar keeps shaking... I'm scared.", + "durability": null, + "name": "Fishing explosive", + "archery_ticket_price": "0", + "id": "6664" + }, + { + "examine": "Fishy, damp and smelly.", + "durability": null, + "name": "Mudskipper hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "6665", + "equipment_slot": "0" + }, + { + "examine": "Strangely uncomfortable flippers.", + "durability": null, + "name": "Flippers", + "weight": "2", + "archery_ticket_price": "0", + "id": "6666", + "bonuses": "-2,-2,-2,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "10000", + "examine": "An empty fishbowl.", + "grand_exchange_price": "431", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "6667" + }, + { + "examine": "A fishless fishbowl.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6668" + }, + { + "examine": "A fishless fishbowl with some seaweed.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6669" + }, + { + "examine": "A fishbowl with a Tiny Bluefish in it.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6670" + }, + { + "examine": "A fishbowl with a Tiny Greenfish in it.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6671" + }, + { + "examine": "A fishbowl with a Tiny Spinefish in it.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6672" + }, + { + "examine": "An empty fishbowl in a net.", + "durability": null, + "name": "Fishbowl and net", + "weight": "2", + "archery_ticket_price": "0", + "id": "6673" + }, + { + "shop_price": "10", + "examine": "A tiny net for grabbing tiny fish.", + "durability": null, + "name": "Tiny net", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6674" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.", + "durability": null, + "name": "An empty box", + "archery_ticket_price": "0", + "id": "6675" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Guam Leaf...", + "durability": null, + "name": "Guam in a box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6677" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Guam Leaf...", + "durability": null, + "name": "Guam in a box?", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6678" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Seaweed...", + "durability": null, + "name": "Seaweed in a box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6679" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Seaweed...", + "durability": null, + "name": "Seaweed in a box?", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6680" + }, + { + "ge_buy_limit": "100", + "examine": "One of the ingredients for making fish food.", + "grand_exchange_price": "1", + "durability": null, + "name": "Ground guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6681" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Ground guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6682" + }, + { + "ge_buy_limit": "100", + "examine": "One of the ingredients for making fish food.", + "grand_exchange_price": "14", + "durability": null, + "name": "Ground seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6683" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Ground seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6684" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "15300", + "durability": null, + "name": "Saradomin brew(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6685" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "15300", + "durability": null, + "name": "Saradomin brew(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6686" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "11400", + "durability": null, + "name": "Saradomin brew(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6687" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "11400", + "durability": null, + "name": "Saradomin brew(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6688" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "7566", + "durability": null, + "name": "Saradomin brew(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6689" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7566", + "durability": null, + "name": "Saradomin brew(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6690" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "3783", + "durability": null, + "name": "Saradomin brew(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6691" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3783", + "durability": null, + "name": "Saradomin brew(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6692" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a crushed bird's nest.", + "grand_exchange_price": "10500", + "durability": null, + "name": "Crushed nest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6693" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "10500", + "durability": null, + "name": "Crushed nest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6694" + }, + { + "examine": "\"A cold-blooded creature, partial to warmth.", + "durability": null, + "name": "Desert lizard", + "archery_ticket_price": "0", + "id": "6695" + }, + { + "requirements": "{22,18}", + "shop_price": "1", + "examine": "Contains ice-cold water.", + "durability": null, + "name": "Ice cooler", + "archery_ticket_price": "0", + "id": "6696" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "A pat of freshly churned butter.", + "grand_exchange_price": "405", + "durability": null, + "name": "Pat of butter", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "6697" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "405", + "durability": null, + "name": "Pat of butter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6698" + }, + { + "durability": null, + "name": "Burnt potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6700" + }, + { + "ge_buy_limit": "1000", + "examine": "It'd taste even better with some toppings.", + "grand_exchange_price": "326", + "durability": null, + "name": "Baked potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6701" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "326", + "durability": null, + "name": "Baked potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6702" + }, + { + "ge_buy_limit": "1000", + "examine": "A baked potato with butter.", + "grand_exchange_price": "745", + "durability": null, + "name": "Potato with butter", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6703" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "745", + "durability": null, + "name": "Potato with butter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6704" + }, + { + "shop_price": "350", + "ge_buy_limit": "10000", + "examine": "A baked potato with butter and cheese.", + "grand_exchange_price": "604", + "durability": null, + "name": "Potato with cheese", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6705" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "604", + "durability": null, + "name": "Potato with cheese", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6706" + }, + { + "examine": "An amulet of Camel-speak. It makes vague braying noises.", + "durability": null, + "name": "Camulet", + "archery_ticket_price": "0", + "id": "6707", + "equipment_slot": "2" + }, + { + "shop_price": "200", + "examine": "Especially good against diseased arachnids.", + "durability": null, + "name": "Slayer gloves", + "archery_ticket_price": "0", + "id": "6708", + "bonuses": "0,0,0,0,0,4,5,3,0,0,1,0,0,0,0" + }, + { + "examine": "A bunch of legs, eyes and teeth.", + "durability": null, + "name": "Fever spider", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "6709" + }, + { + "examine": "A blindweed seed - plant in a Blindweed patch.", + "durability": null, + "name": "Blindweed seed", + "archery_ticket_price": "0", + "id": "6710" + }, + { + "examine": "An inedible, foul smelling herb.", + "durability": null, + "name": "Blindweed", + "archery_ticket_price": "0", + "id": "6711" + }, + { + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6712" + }, + { + "examine": "A heavy metal wrench.", + "durability": null, + "name": "Wrench", + "archery_ticket_price": "0", + "id": "6713" + }, + { + "examine": "A shining paragon of wrenchly virtue.", + "durability": null, + "name": "Holy wrench", + "archery_ticket_price": "0", + "id": "6714" + }, + { + "examine": "They look at you balefully. 'Feed us...", + "durability": null, + "name": "Sluglings", + "archery_ticket_price": "0", + "id": "6715" + }, + { + "examine": "A sinister looking squid.", + "durability": null, + "name": "Karamthulhu", + "archery_ticket_price": "0", + "id": "6716" + }, + { + "examine": "A sinister looking squid.", + "durability": null, + "name": "Karamthulhu", + "archery_ticket_price": "0", + "id": "6717" + }, + { + "examine": "A diseased deceased Fever Spider. Handle with care.", + "durability": null, + "name": "Fever spider body", + "archery_ticket_price": "0", + "id": "6718" + }, + { + "examine": "Sorry, I mean a bucket of 'rum'.", + "durability": null, + "name": "Unsanitary swill", + "archery_ticket_price": "0", + "id": "6719" + }, + { + "requirements": "{18,42}", + "shop_price": "200", + "examine": "Especially good against diseased arachnids.", + "durability": null, + "name": "Slayer gloves", + "archery_ticket_price": "0", + "id": "6720", + "bonuses": "0,0,0,0,0,4,5,3,0,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "A decent enough weapon gone rusty.", + "attack_audios": "2500,0,2517,0", + "durability": null, + "name": "Rusty scimitar", + "weight": "2", + "archery_ticket_price": "0", + "id": "6721" + }, + { + "examine": "Alas...I hardly knew him.", + "durability": null, + "name": "Zombie head", + "archery_ticket_price": "0", + "id": "6722" + }, + { + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6723" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "100", + "examine": "An ancient Fremennik bow that was once used to battle the Moon Clan.", + "has_special": "true", + "durability": null, + "rare_item": "true", + "weight": "1", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "12200", + "name": "Seercull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6724", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12200", + "durability": null, + "name": "Seercull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6725" + }, + { + "durability": null, + "name": "Mud battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6726" + }, + { + "durability": null, + "name": "Mystic mud staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6727" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "6728" + }, + { + "ge_buy_limit": "10000", + "examine": "These would feed a dogfish for months!", + "grand_exchange_price": "9616", + "durability": null, + "name": "Dagannoth bones", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "6729" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "9616", + "durability": null, + "name": "Dagannoth bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6730" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A mysterious ring that can fill the wearer with magical power...", + "grand_exchange_price": "478800", + "rare_item": "true", + "durability": null, + "name": "Seers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6731", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "478800", + "durability": null, + "name": "Seers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6732" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A fabled ring that improves the wearer's skill with a bow...", + "grand_exchange_price": "1400000", + "rare_item": "true", + "durability": null, + "name": "Archers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6733", + "bonuses": "0,0,0,0,4,0,0,0,0,4,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Archers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6734" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A legendary ring once worn by Fremennik warriors.", + "grand_exchange_price": "178100", + "rare_item": "true", + "durability": null, + "name": "Warrior ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6735", + "bonuses": "0,4,0,0,0,0,4,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "178100", + "durability": null, + "name": "Warrior ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6736" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A ring reputed to bring out a berserk fury in its wearer.", + "grand_exchange_price": "2700000", + "rare_item": "true", + "durability": null, + "name": "Berserker ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6737", + "bonuses": "0,0,0,0,0,0,0,4,0,0,0,4,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "2700000", + "durability": null, + "name": "Berserker ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6738" + }, + { + "requirements": "{0,60}", + "ge_buy_limit": "10", + "examine": "A very powerful axe.", + "has_special": "true", + "rare_item": "true", + "durability": null, + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "813100", + "attack_audios": "2498,2498,2497,2498", + "name": "Dragon axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6739", + "bonuses": "-2,38,32,0,0,0,1,0,0,0,0,42,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "813100", + "durability": null, + "name": "Dragon axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6740" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "6741", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6742" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6744" + }, + { + "examine": "The magical sword 'Silverlight'. / The magical sword 'Silverlight', stained black with mushroom ink. (during Shadow of the Storm)", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "name": "Silverlight", + "archery_ticket_price": "0", + "id": "6745", + "bonuses": "9,14,-2,0,0,0,3,2,1,0,0,12,0,0,0" + }, + { + "examine": "The magical sword Silverlight, enhanced with the blood of Agrith-Naar.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "name": "Darklight", + "archery_ticket_price": "0", + "id": "6746", + "bonuses": "10,16,-2,0,0,0,3,2,2,0,0,13,0,0,0" + }, + { + "examine": "Used to make the sigil of the demon Agrith-Naar.", + "durability": null, + "name": "Demonic sigil mould", + "archery_ticket_price": "0", + "id": "6747" + }, + { + "examine": "A sigil used for the summoning of the demon Agrith-Naar.", + "durability": null, + "name": "Demonic sigil", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6748" + }, + { + "examine": "Will this book help in summoning Agrith-Naar?", + "durability": null, + "name": "Demonic tome", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6749" + }, + { + "remove_sleeves": "true", + "examine": "A desert shirt stained black with mushroom ink.", + "durability": null, + "name": "Black desert shirt", + "archery_ticket_price": "0", + "id": "6750", + "equipment_slot": "4" + }, + { + "examine": "A desert robe stained black with mushroom ink.", + "durability": null, + "name": "Black desert robe", + "archery_ticket_price": "0", + "id": "6752", + "equipment_slot": "7" + }, + { + "destroy_message": "Hopefully Erin has a copy!", + "examine": "It changes temperature as I walk. (Meeting History)", + "durability": null, + "name": "Enchanted key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6754", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Guthix Mjolnir.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "You can reclaim this item from the place you found it.", + "grand_exchange_price": "2875", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6760", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0", + "shop_price": "250", + "durability": null, + "weight": "2", + "weapon_interface": "3", + "render_anim": "28", + "name": "Guthix mjolnir" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2875", + "durability": null, + "name": "Guthix mjolnir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6761" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Saradomin Mjolnir.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "You can reclaim this item from the place you found it.", + "grand_exchange_price": "17200", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6762", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0", + "shop_price": "250", + "durability": null, + "weight": "2", + "weapon_interface": "3", + "render_anim": "28", + "name": "Saradomin mjolnir" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17200", + "durability": null, + "name": "Saradomin mjolnir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6763" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Zamorak mjolnir.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "You can reclaim this item from the place you found it.", + "grand_exchange_price": "4115", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6764", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0", + "durability": null, + "weight": "2", + "weapon_interface": "3", + "render_anim": "28", + "name": "Zamorak mjolnir" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4115", + "durability": null, + "name": "Zamorak mjolnir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6765" + }, + { + "examine": "Antipoison for Pox.", + "durability": null, + "name": "Cat antipoison", + "archery_ticket_price": "0", + "id": "6766" + }, + { + "examine": "A little more smelly than usual.", + "durability": null, + "name": "Poisoned cheese", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "6768" + }, + { + "destroy_message": "You can obtain another sheet of music by talking to the snakecharmer of Pollnivneach.", + "examine": "Charming.", + "durability": null, + "name": "Music scroll", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6769" + }, + { + "destroy_message": "You can obtain another set of directions to the party by talking to Jimmy Dazzler.", + "examine": "Jimmy Dazzler's directions.", + "durability": null, + "name": "Directions", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6770" + }, + { + "examine": "Contains garden weeds.", + "durability": null, + "name": "Pot of weeds", + "archery_ticket_price": "0", + "id": "6771" + }, + { + "examine": "Contains slowly burning garden weeds.", + "durability": null, + "name": "Smouldering pot", + "archery_ticket_price": "0", + "id": "6772" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole for putting rats on.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6773", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with one rat on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6774", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with two rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6775", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with three rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6776", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with four rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6777", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with five rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6778", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with six rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6779", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "examine": "Menaphite thug.", + "durability": null, + "name": "Menaphite thug", + "archery_ticket_price": "0", + "id": "6780" + }, + { + "remove_sleeves": "true", + "examine": "This looks quite old.", + "durability": null, + "name": "Robe of elidinis", + "archery_ticket_price": "0", + "id": "6786", + "equipment_slot": "4" + }, + { + "examine": "This looks quite old.", + "durability": null, + "name": "Robe of elidinis", + "archery_ticket_price": "0", + "id": "6787", + "equipment_slot": "7" + }, + { + "examine": "This robe is too torn to wear.", + "durability": null, + "name": "Torn robe", + "weight": "1", + "archery_ticket_price": "0", + "id": "6788" + }, + { + "examine": "This robe is too torn to wear.", + "durability": null, + "name": "Torn robe", + "weight": "1", + "archery_ticket_price": "0", + "id": "6789" + }, + { + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "id": "6790", + "equipment_slot": "10" + }, + { + "examine": "Awusah's Sole.", + "durability": null, + "name": "Sole", + "weight": "1", + "archery_ticket_price": "0", + "id": "6791" + }, + { + "examine": "An ancient key from the shrine in Nardah. (Spirits of the Elid)", + "durability": null, + "name": "Ancestral key", + "archery_ticket_price": "0", + "id": "6792" + }, + { + "examine": "The Ballad of Jaresh.", + "durability": null, + "name": "Ballad", + "archery_ticket_price": "0", + "id": "6793" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A tasty treat from Nardah - better eat this before it melts.", + "grand_exchange_price": "210", + "durability": null, + "name": "Choc-ice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6794" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "210", + "durability": null, + "name": "Choc-ice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6795" + }, + { + "bankable": "false", + "examine": "Wonder what happens if I rub it...", + "durability": null, + "name": "Lamp", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6796" + }, + { + "shop_price": "8", + "examine": "See article", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can", + "archery_ticket_price": "0", + "id": "6797" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6798" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6799" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6800" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6801" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6802" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6803" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6804" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6805" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6806" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6807" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6808" + }, + { + "requirements": "{1,50}-{2,50}", + "ge_buy_limit": "10", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "15", + "absorb": "2,0,5", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "39400", + "name": "Granite legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6809", + "bonuses": "0,0,0,-31,-18,43,45,41,-4,68,20,0,0,0,0" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "6810" + }, + { + "examine": "A very dangerous pile of animated Wyvern bones.", + "durability": null, + "name": "Skeletal wyvern", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "6811" + }, + { + "ge_buy_limit": "1000", + "examine": "Bones of a huge flying creature.", + "grand_exchange_price": "4845", + "durability": null, + "name": "Wyvern bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6812" + }, + { + "durability": null, + "name": "Granite legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6813" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "This would make warm clothing.", + "grand_exchange_price": "90", + "durability": null, + "name": "Fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6814" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "90", + "durability": null, + "name": "Fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6815" + }, + { + "durability": null, + "name": "Wyvern bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6816" + }, + { + "turn90cw_anim": "7044", + "examine": "A slender two-handed sword.", + "walk_anim": "7046", + "durability": null, + "destroy": "true", + "weight": "3", + "turn90ccw_anim": "7043", + "two_handed": "true", + "turn180_anim": "7045", + "render_anim": "124", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "7047", + "name": "Slender blade", + "tradeable": "false", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "6817", + "stand_turn_anim": "7040" + }, + { + "turn90cw_anim": "1207", + "examine": "A sharp sword that can also fire arrows.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "3", + "turn90ccw_anim": "1208", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can make a replacement.", + "stand_anim": "813", + "name": "Bow-sword", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6818", + "stand_turn_anim": "1209" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "25000", + "examine": "A large pouch used for storing essence.", + "durability": null, + "name": "Large pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "6819" + }, + { + "destroy_message": "I can get another from the assassin beside the winch that leads down into Senntisten temple.", + "examine": "It seems to have pieces missing. After Temple at Senntisten quest: The assassin's plunder from the church on Entrana.", + "durability": null, + "name": "Relic", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6820" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This looks valuable.", + "durability": null, + "name": "Orb", + "archery_ticket_price": "0", + "id": "6821" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6822" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6823" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6824" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6825" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6826" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6827" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6828" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6829" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6830" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6831" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6832" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6833" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6834" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6835" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6836" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6837" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6838" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6839" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6840" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6841" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6842" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6843" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6844" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6845" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6846" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6847" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6848" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6849" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6850" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6851" + }, + { + "examine": "A box for storing completed puppets.", + "durability": null, + "name": "Puppet box", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6852" + }, + { + "examine": "A box for storing painted baubles.", + "durability": null, + "name": "Bauble box", + "archery_ticket_price": "0", + "id": "6853" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box for storing completed puppets.", + "durability": null, + "name": "Puppet box", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6854" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box for storing painted baubles.", + "durability": null, + "name": "Bauble box", + "archery_ticket_price": "0", + "id": "6855" + }, + { + "destroy_message": "You can obtain another hat from Diango in the Draynor Market.", + "examine": "A woolly bobble hat.", + "durability": null, + "name": "Bobble hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6856", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A woolly scarf.", + "durability": null, + "name": "Bobble scarf", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6857", + "equipment_slot": "2" + }, + { + "destroy_message": "You can obtain another hat from Diango in the Draynor Market.", + "shop_price": "160", + "examine": "A woolly Jester hat.", + "durability": null, + "name": "Jester hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6858", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another Jester scarf from Diango.", + "examine": "A woolly jester scarf.", + "durability": null, + "name": "Jester scarf", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6859", + "equipment_slot": "2" + }, + { + "destroy_message": "You may get another from Diango in Draynor Village.", + "examine": "A woolly triple bobble jester hat.", + "durability": null, + "name": "Tri-jester hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6860", + "equipment_slot": "0" + }, + { + "destroy_message": "You can obtain another jester scarf from Diango in the Draynor Market.", + "examine": "A woolly jester scarf.", + "durability": null, + "name": "Tri-jester scarf", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6861", + "equipment_slot": "2" + }, + { + "destroy_message": "You can obtain another hat from Diango in the Draynor Market.", + "examine": "A woolly tobogganing hat.", + "durability": null, + "name": "Woolly hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6862", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A woolly tobogganing scarf.", + "durability": null, + "name": "Woolly scarf", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6863", + "equipment_slot": "2" + }, + { + "examine": "The controlling part of a marionette.", + "durability": null, + "name": "Marionette handle", + "archery_ticket_price": "0", + "id": "6864", + "equipment_slot": "3" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6865" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6866" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6867" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6868" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6869" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6870" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6871" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6872" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6873" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6874" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6875" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6876" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6877" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6878" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6879" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6880" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6881" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6882" + }, + { + "examine": "A tasty fruit.", + "durability": null, + "name": "Peach", + "archery_ticket_price": "0", + "id": "6883" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A magic training arena progress hat", + "durability": null, + "name": "Progress hat", + "archery_ticket_price": "0", + "id": "6885", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A magic training arena progress hat", + "durability": null, + "name": "Progress hat", + "archery_ticket_price": "0", + "id": "6886", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A magic training arena progress hat", + "durability": null, + "name": "Progress hat", + "archery_ticket_price": "0", + "id": "6887", + "equipment_slot": "0" + }, + { + "bankable": "false", + "examine": "A guardian of the arena.", + "durability": null, + "name": "Guardian statue", + "archery_ticket_price": "0", + "id": "6888" + }, + { + "requirements": "{6,60}", + "ge_buy_limit": "10", + "examine": "The magical book of the Mage.", + "grand_exchange_price": "3800000", + "durability": null, + "name": "Mage's book", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6889", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3800000", + "durability": null, + "name": "Mage's book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6890" + }, + { + "shop_price": "200", + "examine": "A book about the Training Arena.", + "durability": null, + "name": "Arena book", + "weight": "1", + "archery_ticket_price": "0", + "id": "6891" + }, + { + "bankable": "false", + "shop_price": "6", + "examine": "Comfortable leather boots.", + "grand_exchange_price": "189", + "durability": null, + "name": "Leather boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "6893", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0" + }, + { + "bankable": "false", + "examine": "A large metal shield.", + "grand_exchange_price": "3084", + "durability": null, + "name": "Adamant kiteshield", + "tradeable": "true", + "weight": "5.8", + "archery_ticket_price": "0", + "id": "6894", + "absorb": "3,0,6", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "bankable": "false", + "examine": "A medium sized helmet.", + "grand_exchange_price": "1049", + "durability": null, + "name": "Adamant med helm", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6895", + "absorb": "1,0,2", + "bonuses": "0,0,0,-3,-1,14,15,13,-1,14,6,0,0,0,0" + }, + { + "bankable": "false", + "shop_price": "350", + "examine": "This looks valuable.", + "grand_exchange_price": "644", + "durability": null, + "name": "Emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6896" + }, + { + "bankable": "false", + "shop_price": "32000", + "examine": "A razor sharp longsword", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "lendable": "true", + "grand_exchange_price": "18938", + "attack_audios": "2500,2500,2517,2500", + "name": "Rune longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6897", + "bonuses": "38,47,-2,0,0,0,3,2,0,0,0,49,0,0,0" + }, + { + "bankable": "false", + "examine": "A green cylinder", + "durability": null, + "name": "Cylinder", + "archery_ticket_price": "0", + "id": "6898" + }, + { + "bankable": "false", + "examine": "A yellow cube", + "durability": null, + "name": "Cube", + "archery_ticket_price": "0", + "id": "6899" + }, + { + "bankable": "false", + "examine": "A blue icosahedron.", + "durability": null, + "name": "Icosahedron", + "archery_ticket_price": "0", + "id": "6900" + }, + { + "bankable": "false", + "examine": "A red pentamid.", + "durability": null, + "name": "Pentamid", + "archery_ticket_price": "0", + "id": "6901" + }, + { + "bankable": "false", + "examine": "This looks valuable.", + "durability": null, + "name": "Orb", + "archery_ticket_price": "0", + "id": "6902" + }, + { + "bankable": "false", + "examine": "This looks valuable.", + "durability": null, + "name": "Dragonstone", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "6903" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6904" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6905" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6906" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6907" + }, + { + "requirements": "{6,45}", + "shop_price": "303030030", + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A beginner level wand", + "walk_anim": "1146", + "durability": null, + "weight": "0.2", + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "render_anim": "1426", + "equipment_slot": "3", + "grand_exchange_price": "11500", + "stand_anim": "809", + "name": "Beginner wand", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6908", + "stand_turn_anim": "823", + "bonuses": "0,0,0,5,0,0,0,0,5,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "11500", + "durability": null, + "name": "Beginner wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6909" + }, + { + "requirements": "{6,50}", + "ge_buy_limit": "10", + "shop_price": "606060060", + "turn90cw_anim": "821", + "examine": "An apprentice level wand.", + "walk_anim": "1146", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "defence_anim": "420", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "82000", + "stand_anim": "809", + "tradeable": "true", + "name": "Apprentice wand", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6910", + "stand_turn_anim": "823", + "bonuses": "0,0,0,10,0,0,0,0,10,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "82000", + "durability": null, + "name": "Apprentice wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6911" + }, + { + "requirements": "{6,55}", + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A teacher level wand.", + "walk_anim": "1146", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "render_anim": "1426", + "equipment_slot": "3", + "grand_exchange_price": "944100", + "stand_anim": "809", + "name": "Teacher wand", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6912", + "stand_turn_anim": "823", + "bonuses": "0,0,0,15,0,0,0,0,15,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "944100", + "durability": null, + "name": "Teacher wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6913" + }, + { + "requirements": "{6,60}", + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A master level wand.", + "walk_anim": "1146", + "durability": null, + "weight": "0.1", + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "defence_anim": "420", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "1700000", + "stand_anim": "8980", + "tradeable": "true", + "name": "Master wand", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6914", + "stand_turn_anim": "823", + "bonuses": "0,0,0,20,0,0,0,0,20,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Master wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6915" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical robes.", + "durability": null, + "weight": "2.2", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "3300000", + "name": "Infinity top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6916", + "bonuses": "0,0,0,22,0,0,0,0,22,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3300000", + "durability": null, + "name": "Infinity top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6917" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "A mystic hat.", + "durability": null, + "weight": "0.4", + "absorb": "1,0,0", + "equipment_slot": "0", + "grand_exchange_price": "1800000", + "name": "Infinity hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "6918", + "bonuses": "0,0,0,6,0,0,0,0,6,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1800000", + "durability": null, + "name": "Infinity hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6919" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical boots.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "10", + "grand_exchange_price": "1200000", + "name": "Infinity boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6920", + "bonuses": "0,0,0,5,0,0,0,0,5,0,5,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Infinity boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6921" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical gloves.", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Infinity gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6922", + "bonuses": "0,0,0,5,0,0,0,0,5,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Infinity gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6923" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical robes.", + "durability": null, + "weight": "1.8", + "absorb": "2,1,0", + "equipment_slot": "7", + "grand_exchange_price": "2500000", + "name": "Infinity bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6924", + "bonuses": "0,0,0,17,0,0,0,0,17,0,17,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "2500000", + "durability": null, + "name": "Infinity bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6925" + }, + { + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "983", + "durability": null, + "name": "Bones to peaches", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6926" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A severed hand covered with sand.", + "durability": null, + "name": "Sandy hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6945" + }, + { + "destroy_message": "Speak to the Guard Captain in Yanille to get another beer soaked hand.", + "examine": "A severed hand dripping with beer.", + "durability": null, + "name": "Beer-soaked hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6946" + }, + { + "destroy_message": "Speak to Bert to replace this Rota.", + "examine": "A copy of a work rota.", + "durability": null, + "name": "Bert's rota", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6947" + }, + { + "destroy_message": "Search Sandy's office in Brimhaven for another Rota.", + "examine": "An original work rota.", + "durability": null, + "name": "Sandy's rota", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6948" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Maybe I should read this...", + "durability": null, + "name": "A magic scroll", + "archery_ticket_price": "0", + "id": "6949" + }, + { + "destroy_message": "Speak to Zavistic Rarve to replace your magical orb.", + "examine": "An ordinary looking scrying orb.", + "durability": null, + "name": "Magical orb", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6950" + }, + { + "destroy_message": "Speak to Zavistic Rarve to replace your magical orb.", + "examine": "This magical scrying orb pulsates as it stores information.", + "durability": null, + "name": "Magical orb (a)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6951" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle of truth serum.", + "examine": "Fluid sloshes innocently in this vial.", + "durability": null, + "name": "Truth serum", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6952" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle.", + "examine": "A bottle of water.", + "durability": null, + "name": "Bottled water", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6953" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle to make some more red berry juice.", + "examine": "Redberry juice sloshes around in this vial, waiting for white berries to be added.", + "durability": null, + "name": "Redberry juice", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6954" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to make more pink dye.", + "shop_price": "20", + "examine": "A vial of pink dye.", + "durability": null, + "name": "Pink dye", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6955" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle to make the lens again.", + "examine": "This lens has a pinkish tinge to it.", + "durability": null, + "name": "Rose-tinted lens", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6956", + "equipment_slot": "3" + }, + { + "destroy_message": "Speak to Mazion near the sandpit on Entrana to find the Wizard Head again.", + "examine": "A decapitated, sand-covered head.", + "durability": null, + "name": "Wizard's head", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6957" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A handful of sand from Sandy's pocket.", + "durability": null, + "name": "Sand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6958" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Use pink dye on a cape and this is what you get!", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "1", + "grand_exchange_price": "919", + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6959", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "919", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6960" + }, + { + "examine": "A freshly baked baguette.", + "durability": null, + "name": "Baguette", + "archery_ticket_price": "0", + "id": "6961" + }, + { + "ge_buy_limit": "1000", + "examine": "A freshly made triangle sandwich.", + "grand_exchange_price": "110", + "durability": null, + "name": "Triangle sandwich", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6962" + }, + { + "examine": "A freshly made roll.", + "durability": null, + "name": "Roll", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6963" + }, + { + "bankable": "false", + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "archery_ticket_price": "0", + "id": "6964" + }, + { + "examine": "A freshly made square sandwich.", + "durability": null, + "name": "Square sandwich", + "archery_ticket_price": "0", + "id": "6965" + }, + { + "lendable": "true", + "examine": "Makes the wearer pretty intimidating.", + "grand_exchange_price": "61200", + "durability": null, + "name": "Dragon med helm", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "6967", + "absorb": "2,0,4", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "durability": null, + "name": "Triangle sandwich", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6968" + }, + { + "examine": "I'd better be careful eating this.", + "grand_exchange_price": "694", + "durability": null, + "name": "Shark", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6969" + }, + { + "examine": "It's a solid gold pyramid!", + "durability": null, + "name": "Pyramid top", + "weight": "11", + "archery_ticket_price": "0", + "id": "6970" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "4", + "durability": null, + "name": "Sandstone (1kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6971" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4", + "durability": null, + "name": "Sandstone (1kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6972" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "27", + "durability": null, + "name": "Sandstone (2kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6973" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27", + "durability": null, + "name": "Sandstone (2kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6974" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "30", + "durability": null, + "name": "Sandstone (5kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6975" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Sandstone (5kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6976" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "120", + "durability": null, + "name": "Sandstone (10kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6977" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "120", + "durability": null, + "name": "Sandstone (10kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6978" + }, + { + "ge_buy_limit": "10000", + "examine": "See article", + "grand_exchange_price": "304", + "durability": null, + "name": "Granite (500g)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6979" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "304", + "durability": null, + "name": "Granite (500g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6980" + }, + { + "ge_buy_limit": "10000", + "examine": "See article", + "grand_exchange_price": "845", + "durability": null, + "name": "Granite (2kg)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6981" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "845", + "durability": null, + "name": "Granite (2kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6982" + }, + { + "ge_buy_limit": "10000", + "examine": "See article", + "grand_exchange_price": "2153", + "durability": null, + "name": "Granite (5kg)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6983", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2153", + "durability": null, + "name": "Granite (5kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6984" + }, + { + "destroy_message": "You can make another 20 kg block by giving enough stone to Lazim.", + "examine": "A huge twenty-kilo block of sandstone.", + "durability": null, + "name": "Sandstone (20kg)", + "destroy": "true", + "weight": "20", + "archery_ticket_price": "0", + "id": "6985" + }, + { + "destroy_message": "You can make another 32 kg sandstone block by giving enough stone to Lazim.", + "examine": "A huge thirty-two-kilo block of sandstone.", + "durability": null, + "name": "Sandstone (32kg)", + "destroy": "true", + "weight": "32", + "archery_ticket_price": "0", + "id": "6986" + }, + { + "destroy_message": "You can make another statue body by giving Lazim 20 kg of stone and then crafting it.", + "examine": "The body of a sandstone statue.", + "durability": null, + "name": "Sandstone body", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6987" + }, + { + "destroy_message": "You can make another statue base by giving Lazim 32 kg of stone and then crafting it.", + "examine": "The base and legs of a sandstone statue.", + "durability": null, + "name": "Sandstone base", + "destroy": "true", + "weight": "32", + "archery_ticket_price": "0", + "id": "6988" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of a Z.", + "durability": null, + "name": "Z sigil", + "archery_ticket_price": "0", + "id": "6993" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of an M.", + "durability": null, + "name": "M sigil", + "archery_ticket_price": "0", + "id": "6994" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of an R.", + "durability": null, + "name": "R sigil", + "archery_ticket_price": "0", + "id": "6995" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of a K.", + "durability": null, + "name": "K sigil", + "archery_ticket_price": "0", + "id": "6996" + }, + { + "destroy_message": "You can get the statue's left arm back from Lazim.", + "examine": "The left arm of a large stone statue.", + "durability": null, + "name": "Stone left arm", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "6997" + }, + { + "destroy_message": "You can get the statue's right arm back from Lazim.", + "examine": "The right arm of a large stone statue.", + "durability": null, + "name": "Stone right arm", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "6998" + }, + { + "destroy_message": "You can get the statue's left leg back from Lazim.", + "examine": "The left leg of a large stone statue.", + "durability": null, + "name": "Stone left leg", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "6999" + }, + { + "destroy_message": "You can get the statue's right leg back from Lazim.", + "examine": "The right leg of a large stone statue.", + "durability": null, + "name": "Stone right leg", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "7000" + }, + { + "destroy_message": "You can make another positive mould by using soft clay on the pedestal in Enakhra's temple.", + "examine": "A positive clay mould of a camel's head.", + "durability": null, + "name": "Camel mould (p)", + "tradeable": "false", + "destroy": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7001" + }, + { + "remove_head": "true", + "examine": "Blend in in the desert.", + "durability": null, + "name": "Camel mask", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7003", + "equipment_slot": "0" + }, + { + "shop_price": "14", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "33", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7004", + "equipment_slot": "3" + }, + { + "requirements": "{18,33}-{11,33}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A lantern to aid attacking Harpie bugs.", + "grand_exchange_price": "466", + "durability": null, + "name": "Unlit bug lantern", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "7051", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "466", + "durability": null, + "name": "Unlit bug lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7052" + }, + { + "requirements": "{18,33}", + "shop_price": "130", + "examine": "A lantern to aid attacking Harpie bugs.", + "durability": null, + "name": "Lit bug lantern", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "7053", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with chilli con carne", + "grand_exchange_price": "415", + "durability": null, + "name": "Chilli potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7054" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "415", + "durability": null, + "name": "Chilli potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7055" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with egg and tomato.", + "grand_exchange_price": "441", + "durability": null, + "name": "Egg potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7056" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "441", + "durability": null, + "name": "Egg potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7057" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with mushroom and onions.", + "grand_exchange_price": "1165", + "durability": null, + "name": "Mushroom potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7058" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1165", + "durability": null, + "name": "Mushroom potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7059" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with tuna and sweetcorn.", + "grand_exchange_price": "2134", + "durability": null, + "name": "Tuna potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7060" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2134", + "durability": null, + "name": "Tuna potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7061" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of meat in chilli-con-carne sauce.", + "grand_exchange_price": "215", + "durability": null, + "name": "Chilli con carne", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7062" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "215", + "durability": null, + "name": "Chilli con carne", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7063" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of scrambled eggs and tomato", + "grand_exchange_price": "126", + "durability": null, + "name": "Egg and tomato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7064" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "126", + "durability": null, + "name": "Egg and tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7065" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of fried mushroom and onions.", + "grand_exchange_price": "368", + "durability": null, + "name": "Mushroom & onion", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7066" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "368", + "durability": null, + "name": "Mushroom & onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7067" + }, + { + "ge_buy_limit": "10000", + "examine": "A bowl of cooked tuna and sweetcorn.", + "grand_exchange_price": "514", + "durability": null, + "name": "Tuna and corn", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7068" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "514", + "durability": null, + "name": "Tuna and corn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7069" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of finely minced meat.", + "grand_exchange_price": "22", + "durability": null, + "name": "Minced meat", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7070" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "22", + "durability": null, + "name": "Minced meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7071" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of spicy sauce.", + "grand_exchange_price": "70", + "durability": null, + "name": "Spicy sauce", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7072" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "70", + "durability": null, + "name": "Spicy sauce", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7073" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of chopped garlic.", + "grand_exchange_price": "39", + "durability": null, + "name": "Chopped garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7074" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "39", + "durability": null, + "name": "Chopped garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7075" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of uncooked egg.", + "grand_exchange_price": "34", + "durability": null, + "name": "Uncooked egg", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7076" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "34", + "durability": null, + "name": "Uncooked egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7077" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of scrambled egg.", + "grand_exchange_price": "24", + "durability": null, + "name": "Scrambled egg", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7078" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "24", + "durability": null, + "name": "Scrambled egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7079" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of sliced Bittercap mushrooms.", + "grand_exchange_price": "149", + "durability": null, + "name": "Sliced mushrooms", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7080" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "149", + "durability": null, + "name": "Sliced mushrooms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7081" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of fried Bittercap mushrooms.", + "grand_exchange_price": "189", + "durability": null, + "name": "Fried mushrooms", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7082" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "189", + "durability": null, + "name": "Fried mushrooms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7083" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of sliced, fried onions.", + "grand_exchange_price": "40", + "durability": null, + "name": "Fried onions", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7084" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "40", + "durability": null, + "name": "Fried onions", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7085" + }, + { + "ge_buy_limit": "10000", + "examine": "A bowl of finely chopped tuna.", + "grand_exchange_price": "233", + "durability": null, + "name": "Chopped tuna", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7086" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "233", + "durability": null, + "name": "Chopped tuna", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7087" + }, + { + "ge_buy_limit": "10000", + "examine": "Raw sweetcorn.", + "grand_exchange_price": "110", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7088" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "110", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7089" + }, + { + "durability": null, + "name": "Burnt egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7091" + }, + { + "durability": null, + "name": "Burnt onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7093" + }, + { + "durability": null, + "name": "Burnt mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7095" + }, + { + "examine": "Best keep this away from naked flames.", + "durability": null, + "name": "Gunpowder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7108" + }, + { + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7109" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "48", + "examine": "A seaworthy grey shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7110", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7111" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "714", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7112", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "714", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7113" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "Not for land lubbers.", + "grand_exchange_price": "2530", + "durability": null, + "name": "Pirate boots", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "7114", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2530", + "durability": null, + "name": "Pirate boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7115" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "77", + "examine": "Well, okay, they're beige, but they're part of the white pirate clothing set, so...", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7116", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "77", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7117" + }, + { + "examine": "A cannister holding shrapnel.", + "durability": null, + "name": "Canister", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7118" + }, + { + "examine": "For cleaning and packing the cannon.", + "durability": null, + "name": "Ramrod", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "7120" + }, + { + "examine": "A plank of wood to repair the hull with.", + "durability": null, + "name": "Repair plank", + "archery_ticket_price": "0", + "id": "7121" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "904", + "examine": "A sea worthy shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7122", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "904", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7123" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "340", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7124", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "340", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7125" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "examine": "A sea worthy pair of trousers.", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7126", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7127" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "744", + "examine": "A sea worthy shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7128", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "744", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7129" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "154", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7130", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "154", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7131" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "253", + "examine": "A sea worthy pair of trousers.", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7132", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "253", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7133" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "examine": "A sea worthy shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7134", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7135" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "469", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7136", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "469", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7137" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "examine": "A sea worthy pair of trousers.", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7138", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7139" + }, + { + "shop_price": "2560", + "examine": "Feels quite lucky.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "6", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "attack_audios": "2500,2500,2517,2500", + "name": "Lucky cutlass", + "archery_ticket_price": "0", + "id": "7140", + "bonuses": "5,20,0,-5,0,6,6,6,0,0,0,25,0,0,0" + }, + { + "shop_price": "1040", + "examine": "I hope he doesn't want it back.", + "durability": null, + "name": "Harry's cutlass", + "weight": "1", + "archery_ticket_price": "0", + "attack_speed": "4", + "weapon_interface": "6", + "id": "7141", + "bonuses": "3,14,0,-5,0,4,4,4,0,0,0,22,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "25600", + "examine": "The very butcher of a silk button.", + "durability": null, + "name": "Rapier", + "weight": "1", + "archery_ticket_price": "0", + "attack_speed": "4", + "weapon_interface": "5", + "id": "7142", + "bonuses": "45,7,-2,0,0,0,1,0,0,0,0,44,0,0,0", + "render_anim": "2622", + "equipment_slot": "3" + }, + { + "examine": "Looks valuable.", + "durability": null, + "name": "Plunder", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7143" + }, + { + "examine": "By Cap'n Hook-Hand Morrisane.", + "durability": null, + "name": "Book o' piracy", + "archery_ticket_price": "0", + "id": "7144" + }, + { + "examine": "A working cannon barrel.", + "durability": null, + "name": "Cannon barrel", + "weight": "32", + "archery_ticket_price": "0", + "id": "7145" + }, + { + "examine": "Not likely to work again.", + "durability": null, + "name": "Broken cannon", + "weight": "32", + "archery_ticket_price": "0", + "id": "7146" + }, + { + "examine": "A plank of wood to repair the hull with.", + "durability": null, + "name": "Repair plank", + "archery_ticket_price": "0", + "id": "7148" + }, + { + "examine": "A cannister holding shrapnel.", + "durability": null, + "name": "Canister", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7149" + }, + { + "examine": "Useful for pinning up paintings.", + "durability": null, + "name": "Tacks", + "archery_ticket_price": "0", + "id": "7150" + }, + { + "shop_price": "18", + "examine": "A coil of rope.", + "grand_exchange_price": "101", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "7155" + }, + { + "shop_price": "1", + "examine": "Useful for lighting a fire.", + "grand_exchange_price": "121", + "durability": null, + "name": "Tinderbox", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "7156" + }, + { + "shop_price": "30", + "examine": "I think it is eating through the bottle.", + "durability": null, + "name": "Braindeath 'rum", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7157" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7044", + "examine": "A two-handed dragon sword.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "1000000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "7158", + "stand_turn_anim": "7040", + "bonuses": "-4,92,80,-4,0,0,0,0,0,-1,0,93,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "3", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "2503,0,2504,0", + "name": "Dragon 2h sword" + }, + { + "requirements": "{18,37}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "They're heavily insulated wellies.", + "durability": null, + "weight": "1.3", + "equipment_slot": "10", + "grand_exchange_price": "269", + "name": "Insulated boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7159", + "bonuses": "0,0,0,0,0,1,1,0,0,1,0,0,0,0,0" + }, + { + "examine": "Before being attacked: A ball of Electrical energy.", + "durability": null, + "name": "Killerwatt", + "archery_ticket_price": "0", + "attack_speed": "2", + "id": "7160" + }, + { + "durability": null, + "name": "Insulated boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7161" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Lots of pie recipes for me to try.", + "grand_exchange_price": "62", + "durability": null, + "name": "Pie recipe book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7162" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "62", + "durability": null, + "name": "Pie recipe book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7163" + }, + { + "shop_price": "54", + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "77", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7164" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "77", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7165" + }, + { + "shop_price": "54", + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "284", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7166" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "284", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7167" + }, + { + "ge_buy_limit": "1000", + "examine": "Needs to be baked before I can use it.", + "grand_exchange_price": "1625", + "durability": null, + "name": "Raw mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7168" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1625", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7169" + }, + { + "shop_price": "54", + "ge_buy_limit": "1000", + "turn90cw_anim": "821", + "examine": "All the good of the earth.", + "walk_anim": "819", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "13", + "turn180_anim": "820", + "render_anim": "1", + "equipment_slot": "3", + "grand_exchange_price": "2024", + "stand_anim": "808", + "name": "Mud pie", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7170", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2024", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7171" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "94", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7172" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "94", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7173" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "150", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7174" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "150", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7175" + }, + { + "ge_buy_limit": "1000", + "examine": "Needs cooking before I eat it.", + "grand_exchange_price": "1052", + "durability": null, + "name": "Raw garden pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7176" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1052", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7177" + }, + { + "ge_buy_limit": "1000", + "examine": "What I wouldn't give for a good steak about now...", + "grand_exchange_price": "1667", + "durability": null, + "name": "Garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7178" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1667", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7179" + }, + { + "ge_buy_limit": "1000", + "examine": "What I wouldn't give for a good steak about now...", + "grand_exchange_price": "442", + "durability": null, + "name": "Half a garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7180" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "442", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7181" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "51", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7182" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "51", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7183" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "691", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7184" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "691", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7185" + }, + { + "ge_buy_limit": "1000", + "examine": "Raw fish is risky, better cook it.", + "grand_exchange_price": "1198", + "durability": null, + "name": "Raw fish pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7186" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1198", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7187" + }, + { + "ge_buy_limit": "1000", + "examine": "Bounty of the sea.", + "grand_exchange_price": "121", + "durability": null, + "name": "Fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7188" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "121", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7189" + }, + { + "ge_buy_limit": "1000", + "examine": "Bounty of the sea.", + "grand_exchange_price": "56", + "durability": null, + "name": "Half a fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7190" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "56", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7191" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients. ", + "grand_exchange_price": "159", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7192" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "159", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7193" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "537", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7194" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "537", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7195" + }, + { + "ge_buy_limit": "1000", + "examine": "This would taste a lot better cooked.", + "grand_exchange_price": "1813", + "durability": null, + "name": "Raw admiral pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7196" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1813", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7197" + }, + { + "ge_buy_limit": "1000", + "examine": "Much tastier than a normal fish pie.", + "grand_exchange_price": "532", + "durability": null, + "name": "Admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7198" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "532", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7199" + }, + { + "ge_buy_limit": "1000", + "examine": "Much tastier than a normal fish pie.", + "grand_exchange_price": "184", + "durability": null, + "name": "Half an admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7200" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "184", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half an admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7201" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "126", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7202" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "126", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7203" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "1116", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7204" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1116", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7205" + }, + { + "ge_buy_limit": "1000", + "examine": "Good as it looks, I'd better cook it.", + "grand_exchange_price": "3787", + "durability": null, + "name": "Raw wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7206" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3787", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7207" + }, + { + "ge_buy_limit": "1000", + "examine": "A triumph of man over nature.", + "grand_exchange_price": "1322", + "durability": null, + "name": "Wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7208" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1322", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7209" + }, + { + "ge_buy_limit": "1000", + "examine": "A triumph of man over nature.", + "grand_exchange_price": "112", + "durability": null, + "name": "Half a wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7210" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "112", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7211" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "495", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7212" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "495", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7213" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "980", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7214" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "980", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7215" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh fruit may be good for you, but I should really cook this.", + "grand_exchange_price": "2577", + "durability": null, + "name": "Raw summer pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7216" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2577", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7217" + }, + { + "ge_buy_limit": "1000", + "examine": "All the fruits of a very small forest.", + "grand_exchange_price": "1288", + "durability": null, + "name": "Summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7218" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1288", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7219" + }, + { + "ge_buy_limit": "1000", + "examine": "All the fruits of a very small forest.", + "grand_exchange_price": "430", + "durability": null, + "name": "Half a summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7220" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "430", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7221" + }, + { + "shop_price": "19", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "32", + "durability": null, + "name": "Burnt rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7222" + }, + { + "shop_price": "25", + "ge_buy_limit": "1000", + "examine": "A delicious looking piece of roast rabbit.", + "grand_exchange_price": "37", + "durability": null, + "name": "Roast rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7223" + }, + { + "shop_price": "67", + "ge_buy_limit": "1000", + "examine": "Might taste better cooked.", + "grand_exchange_price": "112", + "durability": null, + "name": "Skewered rabbit", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7224" + }, + { + "shop_price": "81", + "ge_buy_limit": "100", + "examine": "An iron spit.", + "grand_exchange_price": "18", + "durability": null, + "name": "Iron spit", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7225" + }, + { + "durability": null, + "name": "Burnt chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7227" + }, + { + "shop_price": "130", + "ge_buy_limit": "1000", + "examine": "It might look delicious to an ogre.Roasted chompy bird.", + "grand_exchange_price": "164", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7228" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "164", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7229" + }, + { + "ge_buy_limit": "1000", + "examine": "A skewered chompy bird.", + "grand_exchange_price": "294", + "durability": null, + "name": "Skewered chompy", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7230" + }, + { + "durability": null, + "name": "Burnt rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7231" + }, + { + "durability": null, + "name": "Roast rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7232" + }, + { + "durability": null, + "name": "Skewered rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7233" + }, + { + "durability": null, + "name": "Iron spit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7234" + }, + { + "durability": null, + "name": "Skewered chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7235" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7236" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7237" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7238" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7239" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7240" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7241" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7242" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7243" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7244" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7245" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7246" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7247" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7248" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7249" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7250" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7251" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7252" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7253" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7254" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7255" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7256" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7257" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7258" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7259" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7260" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7261" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7262" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7263" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7264" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7265" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7266" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7267" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7268" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7269" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7270" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7271" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7272" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7273" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7274" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7275" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7276" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7277" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7278" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7279" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7280" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7281" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7282" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7283" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7284" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7285" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7286" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7287" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7288" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7289" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7290" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7291" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7292" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7293" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7294" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7295" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7296" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7298" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7300" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7301" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7303" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7304" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7305" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7306" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7307" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7308" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7309" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7310" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7311" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7312" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7313" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7314" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7315" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7316" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7317" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7318" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "36600", + "durability": null, + "name": "Red boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7319", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36600", + "durability": null, + "name": "Red boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7320" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "16600", + "durability": null, + "name": "Orange boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7321", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "16600", + "durability": null, + "name": "Orange boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7322" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "43000", + "durability": null, + "name": "Green boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7323", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "43000", + "durability": null, + "name": "Green boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7324" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "37600", + "durability": null, + "name": "Blue boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7325", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "37600", + "durability": null, + "name": "Blue boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7326" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "41700", + "durability": null, + "name": "Black boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7327", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "41700", + "durability": null, + "name": "Black boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7328" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "93", + "durability": null, + "name": "Red firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7329" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "94", + "durability": null, + "name": "Green firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7330" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "113", + "durability": null, + "name": "Blue firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7331" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black kitesheild with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "14300", + "name": "Black shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7332", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14300", + "durability": null, + "name": "Black shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7333" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "16400", + "name": "Adamant shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7334", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "16400", + "durability": null, + "name": "Adamant shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7335" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "34200", + "name": "Rune shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7336", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "34200", + "durability": null, + "name": "Rune shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7337" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black kiteshield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "9797", + "name": "Black shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7338", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "9797", + "durability": null, + "name": "Black shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7339" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3248", + "name": "Adamant shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7340", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3248", + "durability": null, + "name": "Adamant shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7341" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32400", + "name": "Rune shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7342", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32400", + "durability": null, + "name": "Rune shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7343" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black shield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "7405", + "name": "Black shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7344", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7405", + "durability": null, + "name": "Black shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7345" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "5271", + "name": "Adamant shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7346", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5271", + "durability": null, + "name": "Adamant shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7347" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32700", + "name": "Rune shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7348", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32700", + "durability": null, + "name": "Rune shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7349" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black shield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "5572", + "name": "Black shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7350", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5572", + "durability": null, + "name": "Black shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7351" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3366", + "name": "Adamant shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7352", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3366", + "durability": null, + "name": "Adamant shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7353" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32500", + "name": "Rune shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7354", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32500", + "durability": null, + "name": "Rune shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7355" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black shield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "7159", + "name": "Black shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7356", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7159", + "durability": null, + "name": "Black shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7357" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "6328", + "name": "Adamant shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7358", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "6328", + "durability": null, + "name": "Adamant shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7359" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32400", + "name": "Rune shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7360", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "requirements": "", + "ge_buy_limit": "2", + "grand_exchange_price": "32400", + "durability": null, + "name": "Rune shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7361" + }, + { + "requirements": "{1,20}-{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "durability": null, + "weight": "5.4", + "absorb": "0,3,1", + "equipment_slot": "4", + "grand_exchange_price": "101600", + "name": "Studded body (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7362", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "101600", + "durability": null, + "name": "Studded body (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7363" + }, + { + "requirements": "{1,20}-{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "durability": null, + "weight": "5.4", + "absorb": "0,3,1", + "equipment_slot": "4", + "grand_exchange_price": "27300", + "name": "Studded body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7364", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "27300", + "durability": null, + "name": "Studded body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7365" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "durability": null, + "weight": "4.5", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "114600", + "name": "Studded chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7366", + "bonuses": "0,0,0,-5,6,15,16,17,6,16,5,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "114600", + "durability": null, + "name": "Studded chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7367" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim, too!", + "durability": null, + "weight": "4.5", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "36800", + "name": "Studded chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7368", + "bonuses": "0,0,0,-5,6,15,16,17,6,16,5,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36800", + "durability": null, + "name": "Studded chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7369" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide. With colourful trim!", + "grand_exchange_price": "212400", + "durability": null, + "name": "D'hide body(g)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7370", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "212400", + "durability": null, + "name": "D'hide body(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7371" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide. With colourful trim!", + "grand_exchange_price": "38800", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7372", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "38800", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7373" + }, + { + "requirements": "{1,50}-{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "6883", + "durability": null, + "name": "D'hide body (g)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7374", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "6883", + "durability": null, + "name": "D'hide body (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7375" + }, + { + "requirements": "{1,50}-{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "5268", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7376", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5268", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7377" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "1300000", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7378", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1300000", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7379" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "304300", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7380", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "304300", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7381" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "21300", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7382", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "21300", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7383" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "2554", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7384", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2554", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7385" + }, + { + "ge_buy_limit": "2", + "examine": "Leg covering favoured by women and wizards. With a colourful trim!", + "grand_exchange_price": "298900", + "durability": null, + "name": "Blue skirt (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7386", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "298900", + "durability": null, + "name": "Blue skirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7387" + }, + { + "ge_buy_limit": "2", + "examine": "Leg covering favoured by women and wizards. With a colourful trim!", + "grand_exchange_price": "126800", + "durability": null, + "name": "Blue skirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7388", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "126800", + "durability": null, + "name": "Blue skirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7389" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "I can practise magic better in this.", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Wizard robe (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7390", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Wizard robe (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7391" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "I can do magic better in this.", + "grand_exchange_price": "244600", + "durability": null, + "name": "Wizard robe (t)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7392", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "244600", + "durability": null, + "name": "Wizard robe (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7393" + }, + { + "ge_buy_limit": "2", + "examine": "A silly pointed hat with colourful trim.", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Wizard hat (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "hat": "true", + "id": "7394", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Wizard hat (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7395" + }, + { + "ge_buy_limit": "2", + "examine": "A silly pointed hat, with colourful trim.", + "grand_exchange_price": "352700", + "durability": null, + "name": "Wizard hat (t)", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "hat": "true", + "id": "7396", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "352700", + "durability": null, + "name": "Wizard hat (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7397" + }, + { + "requirements": "{1,40}-{6,20}", + "ge_buy_limit": "2", + "examine": "Enchanted Wizards robes.", + "durability": null, + "weight": "1.8", + "absorb": "2,1,0", + "equipment_slot": "7", + "grand_exchange_price": "50000", + "name": "Enchanted robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7398", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,40}", + "ge_buy_limit": "2", + "examine": "Enchanted Wizards robes.", + "durability": null, + "weight": "1", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "75100", + "name": "Enchanted top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7399", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{6,20}", + "ge_buy_limit": "2", + "examine": "A three pointed hat of magic.", + "grand_exchange_price": "8845", + "durability": null, + "name": "Enchanted hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7400", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Enchanted robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7401" + }, + { + "durability": null, + "name": "Enchanted top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7402" + }, + { + "durability": null, + "name": "Enchanted hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7403" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Red logs", + "archery_ticket_price": "0", + "id": "7404" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Green logs", + "weight": "2", + "archery_ticket_price": "0", + "id": "7405" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Blue logs", + "weight": "2", + "archery_ticket_price": "0", + "id": "7406" + }, + { + "durability": null, + "name": "Dragon 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7407" + }, + { + "destroy_message": "I found this in a grave at Draynor Manor.", + "examine": "I shouldn't joke; this is a grave matter.", + "durability": null, + "name": "Draynor skull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7408" + }, + { + "shop_price": "40000", + "examine": "The only way to kill a Tanglefoot.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "attack_speed": "5", + "weapon_interface": "5", + "equipment_slot": "3", + "destroy_message": "I'll chat to Malignius Mortifer if I want another pair.", + "name": "Magic secateurs", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "7409", + "bonuses": "7,9,-5,1,0,0,1,0,1,0,0,1,0,0,0" + }, + { + "destroy_message": "I can always find another Tanglefoot if I need more.", + "examine": "Contains the Fairy Queen's magical essence.", + "durability": null, + "name": "Queen's secateurs", + "archery_ticket_price": "0", + "id": "7410", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A list of the Fairy Queen's symptoms.", + "durability": null, + "name": "Symptoms list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7411" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "archery_ticket_price": "0", + "id": "7413" + }, + { + "durability": null, + "name": "Paddle", + "archery_ticket_price": "0", + "id": "7414", + "weapon_interface": "1", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Paddle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7415" + }, + { + "ge_buy_limit": "5000", + "examine": "A mole claw.", + "grand_exchange_price": "11800", + "durability": null, + "name": "Mole claw", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7416" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "11800", + "durability": null, + "name": "Mole claw", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7417" + }, + { + "ge_buy_limit": "5000", + "examine": "The skin of a large mole.", + "grand_exchange_price": "12000", + "durability": null, + "name": "Mole skin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7418" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "12000", + "durability": null, + "name": "Mole skin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7419" + }, + { + "examine": "A fun guy. No wait, that's awful. Plus it doesn't even make sense. (As Fungi) A bouncy fungus. (Level 74) A fun guy. No wait, that's awful.. (Level 86)", + "durability": null, + "name": "Mutated zygomite", + "archery_ticket_price": "0", + "id": "7420" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 10", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7421", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 9", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7422", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 8", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7423", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 7", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7424", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 6", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7425", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 5", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7426", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 4", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7427", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 3", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7428", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 2", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7429", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 1", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7430", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 0", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7431", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "10", + "examine": "Does exactly what it says on the tin. (Kills Fungi.)", + "durability": null, + "name": "Fungicide", + "archery_ticket_price": "0", + "id": "7432" + }, + { + "shop_price": "35", + "ge_buy_limit": "100", + "examine": "Spoooooon!", + "durability": null, + "weight": "0.4", + "attack_speed": "5", + "weapon_interface": "6", + "equipment_slot": "3", + "grand_exchange_price": "44", + "name": "Wooden spoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7433", + "bonuses": "4,5,-2,0,0,0,3,2,0,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44", + "durability": null, + "name": "Wooden spoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7434" + }, + { + "shop_price": "45", + "ge_buy_limit": "100", + "examine": "A large whisk of death.", + "durability": null, + "attack_speed": "4", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "11", + "name": "Egg whisk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7435", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Egg whisk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7436" + }, + { + "requirements": "{0,10}", + "shop_price": "292", + "ge_buy_limit": "100", + "examine": "Use the spork.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "196", + "name": "Spork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7437", + "bonuses": "11,8,-2,0,0,0,2,1,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "196", + "durability": null, + "name": "Spork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7438" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "shop_price": "1728", + "turn90cw_anim": "7044", + "examine": "A large spatula... of doom!", + "walk_anim": "7046", + "durability": null, + "weight": "3.6", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "turn180_anim": "7045", + "render_anim": "124", + "equipment_slot": "3", + "grand_exchange_price": "953", + "stand_anim": "7047", + "tradeable": "true", + "name": "Spatula", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "7439", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,-4,0,0,0,0,0,-1,0,22,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "953", + "durability": null, + "name": "Spatula", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7440" + }, + { + "requirements": "{0,20}", + "shop_price": "1494", + "ge_buy_limit": "100", + "examine": "Looks like it's non-stick too!", + "durability": null, + "weight": "1.5", + "attack_speed": "6", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "836", + "name": "Frying pan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7441", + "bonuses": "-4,-4,25,-4,0,0,0,0,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "836", + "durability": null, + "name": "Frying pan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7442" + }, + { + "requirements": "{0,30}", + "shop_price": "2880", + "ge_buy_limit": "100", + "examine": "Generally used for impaling fresh meat.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "6", + "equipment_slot": "3", + "grand_exchange_price": "1712", + "name": "Skewer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7443", + "bonuses": "20,29,-2,0,0,0,3,2,0,0,0,31,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1712", + "durability": null, + "name": "Skewer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7444" + }, + { + "requirements": "{0,40}", + "shop_price": "12960", + "ge_buy_limit": "100", + "examine": "That's how I roll!", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "8445", + "name": "Rolling pin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7445", + "bonuses": "20,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8445", + "durability": null, + "name": "Rolling pin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7446" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A sharp, dependable knife, for filleting meat.", + "durability": null, + "attack_speed": "4", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "4686", + "attack_audios": "2704,0,0,0", + "name": "Kitchen knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7447", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4686", + "durability": null, + "name": "Kitchen knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7448" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "Often used to soften tough meat up.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "1666", + "equipment_slot": "3", + "attack_anims": "2067,2066,2068", + "grand_exchange_price": "24700", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7449", + "stand_turn_anim": "823", + "bonuses": "-4,-4,53,-4,0,0,0,0,0,0,0,48,0,0,0", + "requirements": "{0,40}", + "shop_price": "41500", + "durability": null, + "weight": "1", + "weapon_interface": "10", + "render_anim": "1", + "name": "Meat tenderiser" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24700", + "durability": null, + "name": "Meat tenderiser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7450" + }, + { + "requirements": "{0,40}", + "shop_price": "24040", + "ge_buy_limit": "100", + "examine": "An effective tool for chopping tough meat.", + "durability": null, + "weight": "0.5", + "attack_speed": "4", + "weapon_interface": "6", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "15000", + "attack_audios": "2500,0,2517,0", + "name": "Cleaver", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7451", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15000", + "durability": null, + "name": "Cleaver", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7452" + }, + { + "shop_price": "50", + "examine": "A pair of plain gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7453", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "100", + "examine": "A pair of bronze-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7454", + "bonuses": "2,2,2,1,2,2,2,2,1,2,1,2,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "325", + "examine": "A pair of iron-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7455", + "bonuses": "3,3,3,2,3,3,3,3,2,3,2,3,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "500", + "examine": "A pair of steel-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7456", + "bonuses": "4,4,4,2,4,4,4,4,2,4,2,4,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "1000", + "examine": "A pair of black-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7457", + "bonuses": "5,5,5,3,5,5,5,5,3,5,3,5,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "1500", + "examine": "A pair of mithril-coloured gloves.", + "durability": null, + "name": "Gloves", + "archery_ticket_price": "0", + "id": "7458", + "bonuses": "6,6,6,3,6,6,6,6,3,6,3,6,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "2500", + "examine": "A pair of adamant-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7459", + "bonuses": "7,7,7,4,7,7,7,7,4,7,4,7,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,13}", + "shop_price": "5000", + "examine": "A pair of rune-coloured gloves.", + "durability": null, + "name": "Gloves", + "archery_ticket_price": "0", + "id": "7460", + "bonuses": "8,8,8,4,8,8,8,8,4,8,4,8,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,41}", + "shop_price": "100000", + "examine": "A pair of dragon-coloured gloves.", + "durability": null, + "name": "Gloves", + "archery_ticket_price": "0", + "id": "7461", + "bonuses": "9,9,9,5,9,9,9,9,5,9,5,9,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,41}", + "shop_price": "100000", + "examine": "A pair of Barrows-themed gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7462", + "bonuses": "12,12,12,6,12,12,12,12,6,12,6,12,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "It's cornflour in a pot.", + "durability": null, + "name": "Cornflour", + "weight": "1", + "archery_ticket_price": "0", + "id": "7463" + }, + { + "examine": "A tatty old book belonging to the Wise Old Man of Draynor Village.", + "durability": null, + "name": "Book on chickens", + "archery_ticket_price": "0", + "id": "7464" + }, + { + "examine": "Surprise, it looks like a vanilla pod.", + "durability": null, + "name": "Vanilla pod", + "archery_ticket_price": "0", + "id": "7465" + }, + { + "examine": "It's cornflour in a pot.", + "durability": null, + "name": "Cornflour", + "weight": "1", + "archery_ticket_price": "0", + "id": "7466" + }, + { + "examine": "It's cornflour in a pot.", + "durability": null, + "name": "Pot of cornflour", + "weight": "1", + "archery_ticket_price": "0", + "id": "7468" + }, + { + "destroy_message": "I'll have to get all the ingredients again.", + "examine": "A mixture of milk, cream and cornflour.", + "durability": null, + "name": "Cornflour mixture", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7470" + }, + { + "destroy_message": "I'll have to get all the ingredients again.", + "examine": "It's a bucket of milk and cream.", + "durability": null, + "name": "Milky mixture", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7471" + }, + { + "examine": "Some cinnamon sticks.", + "durability": null, + "name": "Cinnamon", + "archery_ticket_price": "0", + "id": "7472" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pot of brulee supreme.", + "durability": null, + "name": "Brulee supreme", + "archery_ticket_price": "0", + "id": "7476" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "What came first, the chicken or...", + "durability": null, + "name": "Evil chicken's egg", + "archery_ticket_price": "0", + "id": "7477" + }, + { + "destroy_message": "I got this by killing a Black Dragon. It might be hard to get another one.", + "examine": "It's got a dragon on it.", + "durability": null, + "name": "Dragon token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7478" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's a meat and potato stew with fancy seasoning.", + "durability": null, + "name": "Spicy stew", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7479" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (4)", + "archery_ticket_price": "0", + "id": "7480" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (3)", + "archery_ticket_price": "0", + "id": "7481" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (2)", + "archery_ticket_price": "0", + "id": "7482" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (1)", + "archery_ticket_price": "0", + "id": "7483" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (4)", + "archery_ticket_price": "0", + "id": "7484" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (3)", + "archery_ticket_price": "0", + "id": "7485" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (2)", + "archery_ticket_price": "0", + "id": "7486" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (1)", + "archery_ticket_price": "0", + "id": "7487" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (4)", + "archery_ticket_price": "0", + "id": "7488" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (3)", + "archery_ticket_price": "0", + "id": "7489" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (2)", + "archery_ticket_price": "0", + "id": "7490" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (1)", + "archery_ticket_price": "0", + "id": "7491" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (4)", + "archery_ticket_price": "0", + "id": "7492" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (3)", + "archery_ticket_price": "0", + "id": "7493" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (2)", + "archery_ticket_price": "0", + "id": "7494" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (1)", + "archery_ticket_price": "0", + "id": "7495" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Empty spice shaker", + "archery_ticket_price": "0", + "id": "7496" + }, + { + "examine": "A cool refreshing fruit mix. With ash in for some reason.", + "durability": null, + "name": "Dirty blast", + "archery_ticket_price": "0", + "id": "7497" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7498" + }, + { + "examine": "He seems to like wearing black.", + "durability": null, + "name": "Evil dave", + "archery_ticket_price": "0", + "id": "7499" + }, + { + "examine": "A short angry guy.", + "durability": null, + "name": "Dwarf", + "archery_ticket_price": "0", + "id": "7500" + }, + { + "examine": "He provides new players with useful information.", + "durability": null, + "name": "Lumbridge guide", + "archery_ticket_price": "0", + "id": "7502" + }, + { + "examine": "He looks a little shifty.", + "durability": null, + "name": "Osman", + "archery_ticket_price": "0", + "id": "7504" + }, + { + "examine": "A shifty-looking character.", + "durability": null, + "name": "Pirate pete", + "archery_ticket_price": "0", + "id": "7505" + }, + { + "examine": "Leader of the White Knights.", + "durability": null, + "name": "Sir amik varze", + "archery_ticket_price": "0", + "id": "7506" + }, + { + "examine": "He's been frozen in time.", + "durability": null, + "name": "Skrach", + "archery_ticket_price": "0", + "id": "7507" + }, + { + "shop_price": "4", + "examine": "There appears to be a coin in the bottom. Liked by dwarves.", + "durability": null, + "name": "Asgoldian ale", + "archery_ticket_price": "0", + "id": "7508" + }, + { + "examine": "Red hot and glowing, ouch! Only for dwarf consumption.", + "durability": null, + "name": "Dwarven rock cake", + "weight": "8.5", + "archery_ticket_price": "0", + "id": "7509" + }, + { + "examine": "Cool and heavy as a brick. Only for dwarf consumption.", + "durability": null, + "name": "Dwarven rock cake", + "weight": "8.5", + "archery_ticket_price": "0", + "id": "7510" + }, + { + "examine": "Two out of two goblin generals prefer it!", + "durability": null, + "name": "Slop of compromise", + "archery_ticket_price": "0", + "id": "7511" + }, + { + "examine": "Previously a nice crispy loaf of bread. Now just kind of icky.", + "durability": null, + "name": "Soggy bread", + "archery_ticket_price": "0", + "id": "7512" + }, + { + "examine": "They clearly taste so much better this way!", + "durability": null, + "name": "Spicy maggots", + "archery_ticket_price": "0", + "id": "7513" + }, + { + "examine": "Orange slices which have been dyed, but it looks more like they died.", + "durability": null, + "name": "Dyed orange", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7514" + }, + { + "examine": "Glad these aren't in my bed.", + "durability": null, + "name": "Breadcrumbs", + "archery_ticket_price": "0", + "id": "7515" + }, + { + "examine": "Those leaves look useful!", + "durability": null, + "name": "Kelp", + "archery_ticket_price": "0", + "id": "7516" + }, + { + "examine": "Kelp flakes. Smells of the sea.", + "durability": null, + "name": "Ground kelp", + "weight": "2", + "archery_ticket_price": "0", + "id": "7517" + }, + { + "examine": "A smelly meat.", + "durability": null, + "name": "Crab meat", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7518" + }, + { + "examine": "A smelly meat.", + "durability": null, + "name": "Crab meat", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7519" + }, + { + "ge_buy_limit": "100", + "examine": "Nice and Tasty!", + "grand_exchange_price": "219", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7521" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7522" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7523" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7524" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7525" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7526" + }, + { + "examine": "A smelly paste.", + "durability": null, + "name": "Ground crab meat", + "archery_ticket_price": "0", + "id": "7527" + }, + { + "examine": "A smelly paste.", + "durability": null, + "name": "Ground cod", + "archery_ticket_price": "0", + "id": "7528" + }, + { + "examine": "Would taste nicer if I cooked it.", + "durability": null, + "name": "Raw fishcake", + "archery_ticket_price": "0", + "id": "7529" + }, + { + "examine": "Mmmm, reminds me of the seaside.", + "durability": null, + "name": "Cooked fishcake", + "archery_ticket_price": "0", + "id": "7530" + }, + { + "examine": "Hmmm, what can I use this for?", + "durability": null, + "name": "Mudskipper hide", + "weight": "1", + "archery_ticket_price": "0", + "id": "7532" + }, + { + "remove_head": "true", + "examine": "You'll look daft, but at least you won't drown!", + "durability": null, + "name": "Fishbowl helmet", + "weight": "5", + "archery_ticket_price": "0", + "id": "7534", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "I'll need a helmet to make this work.", + "durability": null, + "name": "Diving apparatus", + "weight": "10", + "archery_ticket_price": "0", + "id": "7535", + "equipment_slot": "1" + }, + { + "examine": "Fresh off the crab itself.", + "durability": null, + "name": "Fresh crab claw", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7536" + }, + { + "examine": "If it is good enough for crabs, it's good enough for me.", + "durability": null, + "name": "Crab claw", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7537", + "bonuses": "0,0,0,0,0,3,4,2,0,0,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Fresh off the crab itself.", + "durability": null, + "name": "Fresh crab shell", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7538" + }, + { + "remove_head": "true", + "examine": "If it's good enough for crabs, it's good enough for me!", + "durability": null, + "name": "Crab helmet", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7539", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "Darn, it's useless now.", + "durability": null, + "name": "Broken crab claw", + "archery_ticket_price": "0", + "id": "7540" + }, + { + "examine": "Darn, it's useless now.", + "durability": null, + "name": "Broken crab shell", + "archery_ticket_price": "0", + "id": "7541" + }, + { + "destroy_message": "Maybe Traiborn will have another.", + "examine": "Imbued with knowledge itself.", + "durability": null, + "name": "Cake of guidance", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7542" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Now all I need to do is cook it.", + "durability": null, + "name": "Raw guide cake", + "archery_ticket_price": "0", + "id": "7543" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Egg containing knowledge.", + "durability": null, + "name": "Enchanted egg", + "archery_ticket_price": "0", + "id": "7544" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Guiding milk.", + "durability": null, + "name": "Enchanted milk", + "weight": "2", + "archery_ticket_price": "0", + "id": "7545" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pot of special flour.", + "durability": null, + "name": "Enchanted flour", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7546" + }, + { + "examine": "A druid pouch.", + "durability": null, + "name": "Druid pouch", + "archery_ticket_price": "0", + "id": "7547" + }, + { + "shop_price": "8", + "examine": "A potato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Potato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7548" + }, + { + "durability": null, + "name": "Potato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7549" + }, + { + "shop_price": "10", + "examine": "An onion seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Onion seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7550" + }, + { + "durability": null, + "name": "Onion seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7551" + }, + { + "shop_price": "76", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "24", + "durability": null, + "name": "Mithril arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7552", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,22,0,0" + }, + { + "durability": null, + "name": "Mithril arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7553" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "16", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7554" + }, + { + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7555" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7556" + }, + { + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7557" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "9", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7558" + }, + { + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7559" + }, + { + "shop_price": "140", + "examine": "Used for small missile spells.", + "grand_exchange_price": "65", + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7560" + }, + { + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7561" + }, + { + "shop_price": "10", + "examine": "A tomato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Tomato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7562" + }, + { + "durability": null, + "name": "Tomato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7563" + }, + { + "examine": "An inflated toad tied to a rock like a balloon.", + "durability": null, + "name": "Balloon toad", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7564" + }, + { + "examine": "An inflated toad tied to a rock like a balloon.", + "durability": null, + "name": "Balloon toad", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7565" + }, + { + "ge_buy_limit": "100", + "examine": "The uncooked meat of a Jubbly bird.", + "grand_exchange_price": "422", + "durability": null, + "name": "Raw jubbly", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7566" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "422", + "durability": null, + "name": "Raw jubbly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7567" + }, + { + "ge_buy_limit": "100", + "examine": "Lovely jubbly!", + "grand_exchange_price": "944", + "durability": null, + "name": "Cooked jubbly", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7568" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "944", + "durability": null, + "name": "Cooked jubbly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7569" + }, + { + "durability": null, + "name": "Burnt jubbly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7571" + }, + { + "examine": "Like a banana only redder.", + "durability": null, + "name": "Red banana", + "archery_ticket_price": "0", + "id": "7572", + "equipment_slot": "5" + }, + { + "examine": "Like monkey nuts only tchikier.", + "durability": null, + "name": "Tchiki monkey nuts", + "archery_ticket_price": "0", + "id": "7573" + }, + { + "examine": "Perfect for stuffing snakes.", + "durability": null, + "name": "Sliced red banana", + "archery_ticket_price": "0", + "id": "7574" + }, + { + "examine": "Mixing this with jam would just be wrong.", + "durability": null, + "name": "Tchiki nut paste", + "archery_ticket_price": "0", + "id": "7575" + }, + { + "examine": "Like a snake only not alive.", + "durability": null, + "name": "Snake corpse", + "weight": "3", + "archery_ticket_price": "0", + "id": "7576" + }, + { + "examine": "This snake is stuffed right up.", + "durability": null, + "name": "Raw stuffed snake", + "weight": "3", + "archery_ticket_price": "0", + "id": "7577" + }, + { + "examine": "Is this really what you wanted to do?", + "durability": null, + "name": "Odd stuffed snake", + "archery_ticket_price": "0", + "id": "7578" + }, + { + "examine": "Fit for a Monkey King. (cooked)", + "durability": null, + "name": "Stuffed snake", + "weight": "3", + "archery_ticket_price": "0", + "id": "7579" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Overgrown hellcat", + "archery_ticket_price": "0", + "id": "7581" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Hell cat", + "archery_ticket_price": "0", + "id": "7582" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Hell-kitten", + "archery_ticket_price": "0", + "id": "7583" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Wily hellcat", + "archery_ticket_price": "0", + "id": "7585" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Dummy", + "archery_ticket_price": "0", + "id": "7586" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7587" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7588" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7589" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7590" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7591" + }, + { + "examine": "Aside from the braaaains on the lapel, it's still quite good.", + "durability": null, + "name": "Zombie shirt", + "archery_ticket_price": "0", + "id": "7592", + "equipment_slot": "4" + }, + { + "examine": "Good for a shamble about town.", + "durability": null, + "name": "Zombie trousers", + "archery_ticket_price": "0", + "id": "7593", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "I look 40,000 years old in this...", + "durability": null, + "name": "Zombie mask", + "archery_ticket_price": "0", + "id": "7594", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Smells pretty funky.", + "durability": null, + "name": "Zombie gloves", + "archery_ticket_price": "0", + "id": "7595", + "equipment_slot": "9" + }, + { + "shop_price": "160", + "examine": "Thrilling.", + "durability": null, + "name": "Zombie boots", + "archery_ticket_price": "0", + "id": "7596", + "equipment_slot": "10" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7597" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7598" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7599" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7600" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7601" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7602" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7603" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7604" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7605" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7606" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7607" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7608" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7609" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7610" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7611" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7612" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7613" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7614" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7615" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7616" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7617" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7618" + }, + { + "examine": "A silvery rod of mithril and silver with sapphire on top.", + "durability": null, + "name": "Silvthrill rod", + "archery_ticket_price": "0", + "id": "7620" + }, + { + "examine": "A bucket partially filled with rubble. / A bucket totally filled with rubble.", + "durability": null, + "name": "Bucket of rubble", + "weight": "2", + "archery_ticket_price": "0", + "id": "7622" + }, + { + "examine": "A bucket partially filled with rubble. / A bucket totally filled with rubble.", + "durability": null, + "name": "Bucket of rubble", + "weight": "2", + "archery_ticket_price": "0", + "id": "7624" + }, + { + "examine": "A bucket partially filled with rubble. / A bucket totally filled with rubble.", + "durability": null, + "name": "Bucket of rubble", + "weight": "2", + "archery_ticket_price": "0", + "id": "7626" + }, + { + "destroy_message": "You can get another plaster fragment by exploring near the Inn in Burgh de Rott.", + "examine": "A fragment of plaster with some impressions on it.", + "durability": null, + "name": "Plaster fragment", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7628" + }, + { + "destroy_message": "You can get another scroll by exploring near the Inn in Burgh de Rott.", + "examine": "An ancient tattered scroll.", + "durability": null, + "name": "Dusty scroll", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7629" + }, + { + "destroy_message": "You can get another temple key by talking to Drezel.", + "examine": "A key for the Temple Library. (In Aid of the Myreque)", + "durability": null, + "name": "Temple library key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7632" + }, + { + "destroy_message": "You can get another Ancient Book by searching the library in the temple on the Salve.", + "shop_price": "5000", + "examine": "The unholy book of a forgotten god.", + "durability": null, + "name": "Ancient book", + "weight": "1", + "archery_ticket_price": "0", + "id": "7633", + "bonuses": "4,4,4,6,0,4,4,4,6,0,2,0,0,5,0" + }, + { + "destroy_message": "You can get another Crumbling tome by searching the library in the temple on the Salve.", + "examine": "An ancient history book.", + "durability": null, + "name": "Battered tome", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7634" + }, + { + "destroy_message": "You can get another Leather book by searching the library in the temple on the Salve.", + "examine": "An ancient leather-bound tome.", + "durability": null, + "name": "Leather book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7635" + }, + { + "examine": "Rod of Ivandis dust.", + "durability": null, + "name": "Rod dust", + "archery_ticket_price": "0", + "id": "7636" + }, + { + "examine": "A silvery rod of mithril and silver with sapphire on top.", + "durability": null, + "name": "Silvthrill rod", + "archery_ticket_price": "0", + "id": "7637", + "equipment_slot": "3" + }, + { + "examine": "A silvery rod of mithril and silver with sapphire on top.", + "durability": null, + "name": "Silvthrill rod", + "archery_ticket_price": "0", + "id": "7638" + }, + { + "turn90cw_anim": "1207", + "examine": "A fully charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(10)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7639", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(9)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7640", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(8)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7641", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(7)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7642", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(6)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7643", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(5)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7644", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(4)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7645", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(3)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7646", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "2! 2 charges left! Ha Ha Ha.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(2)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7647", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(1)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7648", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "destroy_message": "You can make another one of these by using clay on Ivandis' coffin.", + "examine": "A mould of the Rod of Ivandis.", + "durability": null, + "name": "Rod clay mould", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7649" + }, + { + "ge_buy_limit": "1000", + "examine": "It's ground up silver.", + "grand_exchange_price": "316", + "durability": null, + "name": "Silver dust", + "tradeable": "true", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "7650" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "316", + "durability": null, + "name": "Silver dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7651" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "96", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7652" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "96", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7653" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "77", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7654" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "77", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7655" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "58", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7656" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "58", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7657" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "30", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7658" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "30", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7659" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "140", + "durability": null, + "name": "Guthix balance(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7660" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "140", + "durability": null, + "name": "Guthix balance(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7661" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "168", + "durability": null, + "name": "Guthix balance(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7662" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "168", + "durability": null, + "name": "Guthix balance(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7663" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "132", + "durability": null, + "name": "Guthix balance(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7664" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "132", + "durability": null, + "name": "Guthix balance(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7665" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "66", + "durability": null, + "name": "Guthix balance(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7666" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "66", + "durability": null, + "name": "Guthix balance(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7667" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1663", + "examine": "A specially crafted hammer with strange markings on it.", + "walk_anim": "1663", + "turn90ccw_anim": "1663", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1663", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "1615", + "stand_anim": "1662", + "tradeable": "true", + "run_anim": "1664", + "archery_ticket_price": "0", + "id": "7668", + "stand_turn_anim": "823", + "bonuses": "-4,-4,35,-4,0,0,0,0,0,0,0,35,0,0,0", + "shop_price": "3000", + "durability": null, + "weight": "1.8", + "weapon_interface": "10", + "render_anim": "27", + "name": "Gadderhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1615", + "durability": null, + "name": "Gadderhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7669" + }, + { + "turn90cw_anim": "3680", + "examine": "I think they look a bit silly.", + "walk_anim": "3680", + "durability": null, + "weight": "0.4", + "turn90ccw_anim": "3680", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "turn180_anim": "3680", + "render_anim": "1386", + "equipment_slot": "3", + "stand_anim": "3677", + "name": "Boxing gloves", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7671", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "turn90cw_anim": "3680", + "examine": "I think they look a bit silly.", + "walk_anim": "3680", + "durability": null, + "weight": "0.4", + "turn90ccw_anim": "3680", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "turn180_anim": "3680", + "render_anim": "1386", + "equipment_slot": "3", + "stand_anim": "3677", + "name": "Boxing gloves", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7673", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "examine": "A less-than razor sharp sword.", + "durability": null, + "name": "Wooden sword", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "7675", + "weapon_interface": "5", + "bonuses": "4,3,-2,0,0,0,2,1,0,0,0,5,0,0,0", + "render_anim": "2584", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Wooden shield", + "archery_ticket_price": "0", + "id": "7676", + "equipment_slot": "5" + }, + { + "examine": "It knows where the treasure is.", + "durability": null, + "name": "Treasure stone", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "7677" + }, + { + "shop_price": "160", + "examine": "You can use this to open the prize chest!", + "durability": null, + "name": "Prize key", + "weight": "1", + "archery_ticket_price": "0", + "id": "7678" + }, + { + "examine": "A good tool for bashing someone.", + "durability": null, + "name": "Pugel", + "archery_ticket_price": "0", + "two_handed": "true", + "id": "7679", + "weapon_interface": "14", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Pugel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7680" + }, + { + "examine": "Party Pete's Bumper Book Of Games", + "durability": null, + "name": "Game book", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7681" + }, + { + "durability": null, + "name": "Hoop", + "archery_ticket_price": "0", + "id": "7682", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Hoop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7683" + }, + { + "durability": null, + "name": "Dart", + "archery_ticket_price": "0", + "attack_speed": "3", + "id": "7684", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7685" + }, + { + "durability": null, + "name": "Bow and arrow", + "archery_ticket_price": "0", + "id": "7686", + "weapon_interface": "1", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Bow and arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7687" + }, + { + "examine": "The kettle is empty.", + "durability": null, + "name": "Kettle", + "archery_ticket_price": "0", + "id": "7688" + }, + { + "durability": null, + "name": "Kettle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7689" + }, + { + "examine": "It's full of cold water.", + "durability": null, + "name": "Full kettle", + "archery_ticket_price": "0", + "id": "7690" + }, + { + "examine": "It's full of boiling water.", + "durability": null, + "name": "Hot kettle", + "archery_ticket_price": "0", + "id": "7691" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7692" + }, + { + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7693" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7694" + }, + { + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7695" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7696" + }, + { + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7697" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7698" + }, + { + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7699" + }, + { + "examine": "Add boiling water to make a tea.", + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7700" + }, + { + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7701" + }, + { + "examine": "This teapot is empty.", + "durability": null, + "name": "Teapot", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7702" + }, + { + "durability": null, + "name": "Teapot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7703" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7704" + }, + { + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7705" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7706" + }, + { + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7707" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7708" + }, + { + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7709" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7710" + }, + { + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7711" + }, + { + "examine": "Add boiling water to make a tea.", + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7712" + }, + { + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7713" + }, + { + "examine": "This teapot is empty.", + "durability": null, + "name": "Teapot", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7714" + }, + { + "durability": null, + "name": "Teapot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7715" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7716" + }, + { + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7717" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7718" + }, + { + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7719" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7720" + }, + { + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7721" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7722" + }, + { + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7723" + }, + { + "examine": "Add boiling water to make a tea.", + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7724" + }, + { + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7725" + }, + { + "examine": "This teapot is empty.", + "durability": null, + "name": "Teapot", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7726" + }, + { + "durability": null, + "name": "Teapot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7727" + }, + { + "shop_price": "1", + "examine": "An empty cup.", + "grand_exchange_price": "7", + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7728" + }, + { + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7729" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7730" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7731" + }, + { + "examine": "A porcelain cup.", + "durability": null, + "name": "Porcelain cup", + "archery_ticket_price": "0", + "id": "7732" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7733" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7734" + }, + { + "examine": "A porcelain cup.", + "durability": null, + "name": "Porcelain cup", + "archery_ticket_price": "0", + "id": "7735" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7736" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7737" + }, + { + "examine": "Mmm, how about a nice cup of tea?", + "durability": null, + "name": "Tea leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7738" + }, + { + "durability": null, + "name": "Tea leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7739" + }, + { + "examine": "A glass of frothy ale.", + "grand_exchange_price": "151", + "durability": null, + "name": "Beer", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7740" + }, + { + "durability": null, + "name": "Beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7741" + }, + { + "shop_price": "1", + "examine": "I need to fill this with beer.", + "grand_exchange_price": "25", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "7742" + }, + { + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7743" + }, + { + "shop_price": "3", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "131", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7744" + }, + { + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7745" + }, + { + "shop_price": "2", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "569", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7746" + }, + { + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7747" + }, + { + "shop_price": "2", + "examine": "A glass of bitter.", + "grand_exchange_price": "523", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7748" + }, + { + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7749" + }, + { + "shop_price": "5", + "examine": "A foul smelling brew.", + "grand_exchange_price": "14", + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7750" + }, + { + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7751" + }, + { + "shop_price": "2", + "examine": "A glass of Cider", + "grand_exchange_price": "1539", + "durability": null, + "name": "Cider", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7752" + }, + { + "durability": null, + "name": "Cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7753" + }, + { + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "2371", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7754" + }, + { + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7755" + }, + { + "durability": null, + "name": "Paintbrush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7756", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Paintbrush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7757" + }, + { + "examine": "A decent-enough weapon gone rusty.", + "durability": null, + "name": "Rusty sword", + "weight": "2", + "archery_ticket_price": "0", + "id": "7758", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "examine": "Nice bit of crafting.", + "grand_exchange_price": "3140", + "durability": null, + "name": "Toy soldier", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7759" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3140", + "durability": null, + "name": "Toy soldier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7760" + }, + { + "examine": "Nice bit of crafting.", + "grand_exchange_price": "3123", + "durability": null, + "name": "Toy soldier (wound)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7761" + }, + { + "durability": null, + "name": "Toy soldier (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7762" + }, + { + "ge_buy_limit": "100", + "examine": "In inventory: Nice bit of crafting! When released: Nice bit of crafting that...", + "grand_exchange_price": "3236", + "durability": null, + "name": "Toy doll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7763" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3236", + "durability": null, + "name": "Toy doll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7764" + }, + { + "examine": "In inventory: Nice bit of crafting! When released: Nice bit of crafting that...", + "grand_exchange_price": "3289", + "durability": null, + "name": "Toy doll (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7765" + }, + { + "durability": null, + "name": "Toy doll (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7766" + }, + { + "shop_price": "1705", + "ge_buy_limit": "100", + "examine": "Nice bit of crafting!", + "grand_exchange_price": "3384", + "durability": null, + "name": "Toy mouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7767" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3384", + "durability": null, + "name": "Toy mouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7768" + }, + { + "shop_price": "1705", + "examine": "Nice bit of crafting!", + "grand_exchange_price": "3484", + "durability": null, + "name": "Toy mouse (wound)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7769" + }, + { + "durability": null, + "name": "Toy mouse (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7770" + }, + { + "ge_buy_limit": "100", + "examine": "Inventory: Nice bit of crafting!As a follower: An amazing piece of crafting.", + "grand_exchange_price": "2930", + "durability": null, + "name": "Clockwork cat", + "tradeable": "true", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7771" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2930", + "durability": null, + "name": "Clockwork cat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7772" + }, + { + "examine": "I can use this to make a lyre.", + "durability": null, + "name": "Branch", + "weight": "1", + "archery_ticket_price": "0", + "id": "7773", + "equipment_slot": "3" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7774" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7775" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7776" + }, + { + "examine": "A long section of vine made up of lots of shorter sections.", + "durability": null, + "name": "Long vine", + "archery_ticket_price": "0", + "id": "7777" + }, + { + "examine": "A short section of vines.", + "durability": null, + "name": "Short vine", + "archery_ticket_price": "0", + "id": "7778" + }, + { + "examine": "A tome of learning that focuses on the Fishing skill.", + "durability": null, + "name": "Fishing tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7779" + }, + { + "examine": "A tome of learning that focuses on the Fishing skill.", + "durability": null, + "name": "Fishing tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7780" + }, + { + "examine": "A tome of learning that focuses on the Fishing skill.", + "durability": null, + "name": "Fishing tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7781" + }, + { + "examine": "A tome of learning that focuses on Agility.", + "durability": null, + "name": "Agility tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7782" + }, + { + "examine": "A tome of learning that focuses on Agility.", + "durability": null, + "name": "Agility tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7783" + }, + { + "examine": "A tome of learning that focuses on Agility.", + "durability": null, + "name": "Agility tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7784" + }, + { + "examine": "A tome of learning that focuses on the Thieving skill.", + "durability": null, + "name": "Thieving tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7785" + }, + { + "examine": "A tome of learning that focuses on the Thieving skill.", + "durability": null, + "name": "Thieving tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7786" + }, + { + "examine": "A tome of learning that focuses on the Thieving skill.", + "durability": null, + "name": "Thieving tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7787" + }, + { + "examine": "A tome of learning which focuses on the Slayer skill.", + "durability": null, + "name": "Slayer tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7788" + }, + { + "examine": "A tome of learning which focuses on the Slayer skill.", + "durability": null, + "name": "Slayer tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7789" + }, + { + "examine": "A tome of learning which focuses on the Slayer skill.", + "durability": null, + "name": "Slayer tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7790" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Mining skill.", + "durability": null, + "name": "Mining tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7791" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Mining skill.", + "durability": null, + "name": "Mining tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7792" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Mining skill.", + "durability": null, + "name": "Mining tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7793" + }, + { + "examine": "A tome of learning that focuses on Firemaking.", + "durability": null, + "name": "Firemaking tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7794" + }, + { + "examine": "A tome of learning that focuses on Firemaking.", + "durability": null, + "name": "Firemaking tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7795" + }, + { + "examine": "A tome of learning that focuses on Firemaking.", + "durability": null, + "name": "Firemaking tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7796" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Woodcutting skill.", + "durability": null, + "name": "Woodcutting tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7797" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Woodcutting skill.", + "durability": null, + "name": "Woodcutting tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7798" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Woodcutting skill.", + "durability": null, + "name": "Woodcutting tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7799" + }, + { + "examine": "A shell from a giant snail.", + "durability": null, + "name": "Snail shell", + "weight": "7", + "archery_ticket_price": "0", + "id": "7800" + }, + { + "ge_buy_limit": "10000", + "examine": "Scaly but not slimy!", + "grand_exchange_price": "1618", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7801" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1618", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7802" + }, + { + "shop_price": "100", + "examine": "A non-magical copy of the make-over mage's amulet.", + "durability": null, + "name": "Yin yang amulet", + "archery_ticket_price": "0", + "id": "7803", + "equipment_slot": "2" + }, + { + "turn90cw_anim": "1207", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Picture", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7804", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7805" + }, + { + "attack_anims": "381,390,390,390", + "examine": "A heavy duty sword.", + "durability": null, + "name": "Anger sword", + "archery_ticket_price": "0", + "attack_speed": "3", + "id": "7806", + "weapon_interface": "5", + "bonuses": "20,20,20,0,0,0,2,1,0,0,0,5,0,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "attack_anims": "395,395,401,395", + "examine": "A heavy duty axe.", + "durability": null, + "attack_audios": "2498,2498,2497,2498", + "name": "Anger battleaxe", + "archery_ticket_price": "0", + "id": "7807", + "weapon_interface": "2", + "bonuses": "20,20,20,0,0,0,0,0,0,-1,0,13,0,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "attack_anims": "390,390,381,390", + "examine": "A heavy duty mace.", + "durability": null, + "name": "Anger mace", + "archery_ticket_price": "0", + "id": "7808", + "weapon_interface": "8", + "bonuses": "20,20,20,0,0,0,0,0,0,0,0,5,1,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "turn90cw_anim": "1207", + "examine": "A heavy duty spear.", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "stand_anim": "813", + "name": "Anger spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7809", + "stand_turn_anim": "1209", + "bonuses": "20,20,20,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "shop_price": "1", + "examine": "This wine clearly did not age well.", + "durability": null, + "name": "Jug of vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7810" + }, + { + "examine": "Well, this pot is certainly full of vinegar and no mistake.", + "durability": null, + "name": "Pot of vinegar", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "7811" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Goblin skull", + "archery_ticket_price": "0", + "id": "7812" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7813" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Goblin skull", + "archery_ticket_price": "0", + "id": "7814" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bear ribs", + "archery_ticket_price": "0", + "id": "7815" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7816" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bear ribs", + "archery_ticket_price": "0", + "id": "7817" + }, + { + "examine": "Unpolished: This needs a good polish.", + "durability": null, + "name": "Ram skull", + "archery_ticket_price": "0", + "id": "7818" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7819" + }, + { + "examine": "Unpolished: This needs a good polish.", + "durability": null, + "name": "Ram skull", + "archery_ticket_price": "0", + "id": "7820" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Unicorn bone", + "archery_ticket_price": "0", + "id": "7821" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7822" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Unicorn bone", + "archery_ticket_price": "0", + "id": "7823" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant rat bone", + "archery_ticket_price": "0", + "id": "7824" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7825" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant rat bone", + "archery_ticket_price": "0", + "id": "7826" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7827" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7828" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7829" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Wolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7830" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7831" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Wolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7832" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7833" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7834" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7835" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rat bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7836" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7837" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rat bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7838" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Baby dragon bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7839" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7840" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Baby dragon bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7841" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ogre ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7842" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7843" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ogre ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7844" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7845" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7846" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7847" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7848" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7849" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7850" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Mogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7851" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7852" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Mogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7853" + }, + { + "examine": "This needs a good polish./ This belongs in a museum!", + "durability": null, + "name": "Monkey paw", + "archery_ticket_price": "0", + "id": "7854" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7855" + }, + { + "examine": "This needs a good polish./ This belongs in a museum!", + "durability": null, + "name": "Monkey paw", + "archery_ticket_price": "0", + "id": "7856" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Dagannoth ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7857" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7858" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Dagannoth ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7859" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Snake spine", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7860" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7861" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Snake spine", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7862" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zombie bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7863" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7864" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zombie bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7865" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Werewolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7866" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7867" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Werewolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7868" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Moss giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7869" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7870" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Moss giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7871" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Fire giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7872" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7873" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Fire giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7874" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ice giant ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7875" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7876" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ice giant ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7877" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Terrorbird wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7878" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7879" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Terrorbird wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7880" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ghoul bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7881" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7882" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ghoul bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7883" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Troll bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7884" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7885" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Troll bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7886" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Seagull wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7887" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7888" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Seagull wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7889" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Undead cow ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7890" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7891" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Undead cow ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7892" + }, + { + "shop_price": "160", + "examine": "Unpolished: This needs a good polish. Polished: This bone belongs in a museum!", + "durability": null, + "name": "Experiment bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7893" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7894" + }, + { + "shop_price": "160", + "examine": "Unpolished: This needs a good polish. Polished: This bone belongs in a museum!", + "durability": null, + "name": "Experiment bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7895" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rabbit bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7896" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7897" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rabbit bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7898" + }, + { + "examine": "Dirty:This bone needs a good polish.", + "durability": null, + "name": "Basilisk bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7899" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7900" + }, + { + "examine": "Dirty:This bone needs a good polish.", + "durability": null, + "name": "Basilisk bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7901" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Desert lizard bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7902" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7903" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Desert lizard bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7904" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Cave goblin skull", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7905" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7906" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Cave goblin skull", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7907" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Big frog leg", + "weight": "1", + "archery_ticket_price": "0", + "id": "7908" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7909" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Big frog leg", + "weight": "1", + "archery_ticket_price": "0", + "id": "7910" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Vulture wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7911" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7912" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Vulture wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7913" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jackal bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7914" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7915" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jackal bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7916" + }, + { + "destroy_message": "The ram skull helm looks like it will fall apart if you drop it. You would have to go to the Odd Old Man for a replacement.", + "examine": "Makes me feel baaad to the bone.", + "durability": null, + "name": "Ram skull helm", + "weight": "3", + "archery_ticket_price": "0", + "id": "7917", + "bonuses": "0,0,0,0,-2,19,21,16,0,19,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "The bonesack looks like it will fall apart if you drop it. You would have to go to the Odd Old Man for a replacement.", + "examine": "The Bonesack is a little old item that protects like leather.", + "durability": null, + "name": "Bonesack", + "weight": "9", + "archery_ticket_price": "0", + "id": "7918", + "bonuses": "0,0,0,0,0,4,4,4,4,4,4,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "500", + "examine": "A very good vintage.", + "durability": null, + "name": "Bottle of wine", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7919" + }, + { + "durability": null, + "name": "Bottle of wine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7920" + }, + { + "examine": "This one has clearly been taken down and passed around.", + "durability": null, + "name": "Empty wine bottle", + "weight": "1", + "archery_ticket_price": "0", + "id": "7921" + }, + { + "examine": "The money off voucher has expired.", + "durability": null, + "name": "Al kharid flyer", + "archery_ticket_price": "0", + "id": "7922" + }, + { + "examine": "A ring given to you by the Easter Bunny.", + "durability": null, + "name": "Easter ring", + "archery_ticket_price": "0", + "id": "7927" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7928" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7929" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7930" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7931" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7932" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7933" + }, + { + "shop_price": "390", + "ge_buy_limit": "100", + "examine": "A field ration to help your wounds go away.", + "grand_exchange_price": "171", + "durability": null, + "name": "Field ration", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7934" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "171", + "durability": null, + "name": "Field ration", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7935" + }, + { + "shop_price": "1", + "ge_buy_limit": "25000", + "examine": "An uncharged Rune Stone of extra capability.", + "grand_exchange_price": "180", + "durability": null, + "name": "Pure essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7936" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "109", + "durability": null, + "name": "Pure essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7937" + }, + { + "ge_buy_limit": "5000", + "examine": "A word in your shell-like.", + "grand_exchange_price": "13600", + "durability": null, + "name": "Tortoise shell", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "7939" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13600", + "durability": null, + "name": "Tortoise shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7940" + }, + { + "examine": "A sturdy sheet of iron.", + "durability": null, + "name": "Iron sheet", + "weight": "1.75", + "archery_ticket_price": "0", + "id": "7941" + }, + { + "examine": "Perfect for storing. Not so good for eating.", + "durability": null, + "name": "Fresh monkfish", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "7942" + }, + { + "examine": "Perfect for storing. Not so good for eating.", + "durability": null, + "name": "Fresh monkfish", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "7943" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this./Freshly caught. Needs cooking. (Fresh Monkfish)", + "grand_exchange_price": "618", + "durability": null, + "name": "Raw monkfish", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7944" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "618", + "durability": null, + "name": "Raw monkfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7945" + }, + { + "ge_buy_limit": "10000", + "examine": "A tasty fish.", + "grand_exchange_price": "617", + "durability": null, + "name": "Monkfish", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7946" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "617", + "durability": null, + "name": "Monkfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7947" + }, + { + "durability": null, + "name": "Burnt monkfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7949" + }, + { + "examine": "A highly portable army of skeletal magic.", + "durability": null, + "name": "Bone seeds", + "archery_ticket_price": "0", + "id": "7950" + }, + { + "shop_price": "160", + "examine": "A book taken from the desk of Herman Caranos.", + "durability": null, + "name": "Herman's book", + "tradeable": "false", + "destroy": "true", + "weight": "0.09", + "archery_ticket_price": "0", + "id": "7951" + }, + { + "examine": "Useless without the head.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7952", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7953" + }, + { + "durability": null, + "name": "Burnt shrimp", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7955" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7956" + }, + { + "shop_price": "2", + "examine": "A mostly clean apron.", + "grand_exchange_price": "169", + "durability": null, + "name": "White apron", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "7957" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A prop for holding up a tunnel roof.", + "durability": null, + "name": "Mining prop", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7958" + }, + { + "destroy_message": "You can get your box back by talking to the guard by the dungeon entrance in Etceteria.", + "examine": "A box full of stolen Etceterian items.", + "durability": null, + "name": "Heavy box", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7959" + }, + { + "examine": "It says 'To the dungeons' on the side.", + "durability": null, + "name": "Empty box", + "archery_ticket_price": "0", + "id": "7960" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7961" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7962" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7963" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7964" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7965" + }, + { + "examine": "A dwarf-made coal engine. It looks very sturdy.", + "durability": null, + "name": "Engine", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7967" + }, + { + "examine": "A beam with a pulley attached.", + "durability": null, + "name": "Pulley beam", + "archery_ticket_price": "0", + "id": "7969" + }, + { + "examine": "A long beam with a pulley attached.", + "durability": null, + "name": "Long pulley beam", + "archery_ticket_price": "0", + "id": "7970" + }, + { + "examine": "A very long beam with a pulley attached.", + "durability": null, + "name": "Longer pulley beam", + "archery_ticket_price": "0", + "id": "7971" + }, + { + "examine": "The manual for an AMCE Lift-In-A-Box.", + "durability": null, + "name": "Lift manual", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7972" + }, + { + "examine": "A wooden beam.", + "durability": null, + "name": "Beam", + "archery_ticket_price": "0", + "id": "7973" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "7975" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Cockatrice head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7976" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Basilisk head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7977" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kurask head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7978" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Abyssal head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7979" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kbd heads", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7980" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kq head", + "archery_ticket_price": "0", + "id": "7981" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "7982" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Cockatrice head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7983" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Basilisk head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7984" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kurask head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7985" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Abyssal head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7986" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kbd heads", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7987" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kq head", + "archery_ticket_price": "0", + "id": "7988" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big bass", + "weight": "6", + "archery_ticket_price": "0", + "id": "7989" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big bass", + "weight": "6", + "archery_ticket_price": "0", + "id": "7990" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big swordfish", + "archery_ticket_price": "0", + "id": "7991" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big swordfish", + "archery_ticket_price": "0", + "id": "7992" + }, + { + "examine": "Its a monster! I should get this stuffed!", + "durability": null, + "name": "Big shark", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "7993" + }, + { + "examine": "Its a monster! I should get this stuffed!", + "durability": null, + "name": "Big shark", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "7994" + }, + { + "examine": "A portrait of King Arthur.", + "durability": null, + "name": "Arthur portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7995" + }, + { + "shop_price": "1000", + "examine": "A portrait of Elena.", + "durability": null, + "name": "Elena portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7996" + }, + { + "examine": "A painting of the staute of King Alvis of Keldagrim", + "durability": null, + "name": "Keldagrim portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7997" + }, + { + "examine": "A portrait of Prince Brand and Princess Astrid of Miscellania.", + "durability": null, + "name": "Misc. portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7998" + }, + { + "shop_price": "2000", + "examine": "The exotic land of the Elves.", + "durability": null, + "name": "Isafdar painting", + "archery_ticket_price": "0", + "id": "8000" + }, + { + "shop_price": "2000", + "examine": "The tropical coast of karamja.", + "durability": null, + "name": "Karamja painting", + "archery_ticket_price": "0", + "id": "8001" + }, + { + "shop_price": "2000", + "examine": "Oxtable's famous painting of the Lumbridge water mill.", + "durability": null, + "name": "Lumbridge painting", + "weight": "1", + "archery_ticket_price": "0", + "id": "8002" + }, + { + "shop_price": "2000", + "examine": "A painting of the spooky forests of morytania.", + "durability": null, + "name": "Morytania painting", + "weight": "1", + "archery_ticket_price": "0", + "id": "8003" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1341", + "durability": null, + "name": "Varrock teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8007" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1371", + "durability": null, + "name": "Lumbridge teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8008" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1414", + "durability": null, + "name": "Falador teleport", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8009" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1369", + "durability": null, + "name": "Camelot teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8010" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1511", + "durability": null, + "name": "Ardougne teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8011" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1025", + "durability": null, + "name": "Watchtower t'port", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8012" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1426", + "durability": null, + "name": "Teleport to house", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8013" + }, + { + "ge_buy_limit": "200", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "360", + "durability": null, + "name": "Bones to bananas", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8014" + }, + { + "ge_buy_limit": "200", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "620", + "durability": null, + "name": "Bones to peaches", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8015" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "343", + "durability": null, + "name": "Enchant sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8016" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "409", + "durability": null, + "name": "Enchant emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8017" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "207", + "durability": null, + "name": "Enchant ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8018" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "326", + "durability": null, + "name": "Enchant diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8019" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "250", + "durability": null, + "name": "Enchant dragonstn.", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8020" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "31", + "durability": null, + "name": "Enchant onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8021" + }, + { + "grand_exchange_price": "1918", + "durability": null, + "name": "Wooden bed", + "archery_ticket_price": "0", + "id": "8031" + }, + { + "grand_exchange_price": "1631", + "durability": null, + "name": "Oak bed", + "archery_ticket_price": "0", + "id": "8032" + }, + { + "grand_exchange_price": "1388", + "durability": null, + "name": "Large oak bed", + "archery_ticket_price": "0", + "id": "8033" + }, + { + "grand_exchange_price": "1376", + "durability": null, + "name": "Teak bed", + "archery_ticket_price": "0", + "id": "8034" + }, + { + "grand_exchange_price": "1996", + "durability": null, + "name": "Large teak bed", + "archery_ticket_price": "0", + "id": "8035" + }, + { + "grand_exchange_price": "1314", + "durability": null, + "name": "4-poster", + "archery_ticket_price": "0", + "id": "8036" + }, + { + "grand_exchange_price": "274779", + "durability": null, + "name": "Gilded 4-poster", + "archery_ticket_price": "0", + "id": "8037" + }, + { + "grand_exchange_price": "18", + "durability": null, + "name": "Shoe box", + "archery_ticket_price": "0", + "id": "8038" + }, + { + "grand_exchange_price": "42", + "durability": null, + "name": "Oak drawers", + "archery_ticket_price": "0", + "id": "8039" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak wardrobe", + "archery_ticket_price": "0", + "id": "8040" + }, + { + "grand_exchange_price": "126", + "durability": null, + "name": "Teak drawers", + "archery_ticket_price": "0", + "id": "8041" + }, + { + "grand_exchange_price": "12", + "durability": null, + "name": "Teak wardrobe", + "archery_ticket_price": "0", + "id": "8042" + }, + { + "grand_exchange_price": "102", + "durability": null, + "name": "Mahogany 'drobe", + "archery_ticket_price": "0", + "id": "8043" + }, + { + "grand_exchange_price": "139452", + "durability": null, + "name": "Gilded wardrobe", + "archery_ticket_price": "0", + "id": "8044" + }, + { + "grand_exchange_price": "510", + "durability": null, + "name": "Shaving stand", + "archery_ticket_price": "0", + "id": "8045" + }, + { + "grand_exchange_price": "449", + "durability": null, + "name": "Oak shaving stand", + "archery_ticket_price": "0", + "id": "8046" + }, + { + "grand_exchange_price": "147", + "durability": null, + "name": "Oak dresser", + "archery_ticket_price": "0", + "id": "8047" + }, + { + "grand_exchange_price": "478", + "durability": null, + "name": "Teak dresser", + "archery_ticket_price": "0", + "id": "8048" + }, + { + "grand_exchange_price": "456", + "durability": null, + "name": "Fancy teak dresser", + "archery_ticket_price": "0", + "id": "8049" + }, + { + "grand_exchange_price": "404", + "durability": null, + "name": "Mahogany dresser", + "archery_ticket_price": "0", + "id": "8050" + }, + { + "grand_exchange_price": "140594", + "durability": null, + "name": "Gilded dresser", + "archery_ticket_price": "0", + "id": "8051" + }, + { + "grand_exchange_price": "367", + "durability": null, + "name": "Oak clock", + "archery_ticket_price": "0", + "id": "8052" + }, + { + "grand_exchange_price": "552", + "durability": null, + "name": "Teak clock", + "archery_ticket_price": "0", + "id": "8053" + }, + { + "grand_exchange_price": "154310", + "durability": null, + "name": "Gilded clock", + "archery_ticket_price": "0", + "id": "8054" + }, + { + "examine": "When unanimated: A dusty old suit of armour. When animated: Aaargh, it's alive!", + "durability": null, + "name": "Suit of armour", + "archery_ticket_price": "0", + "id": "8085" + }, + { + "grand_exchange_price": "13", + "durability": null, + "name": "Wooden bench", + "archery_ticket_price": "0", + "id": "8108" + }, + { + "grand_exchange_price": "131", + "durability": null, + "name": "Oak bench", + "archery_ticket_price": "0", + "id": "8109" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak bench", + "archery_ticket_price": "0", + "id": "8110" + }, + { + "grand_exchange_price": "17", + "durability": null, + "name": "Teak dining bench", + "archery_ticket_price": "0", + "id": "8111" + }, + { + "grand_exchange_price": "2", + "durability": null, + "name": "Carved teak bench", + "archery_ticket_price": "0", + "id": "8112" + }, + { + "grand_exchange_price": "145", + "durability": null, + "name": "Mahogany bench", + "archery_ticket_price": "0", + "id": "8113" + }, + { + "grand_exchange_price": "531526", + "durability": null, + "name": "Gilded bench", + "archery_ticket_price": "0", + "id": "8114" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Wood dining table", + "archery_ticket_price": "0", + "id": "8115" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak dining table", + "archery_ticket_price": "0", + "id": "8116" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak table", + "archery_ticket_price": "0", + "id": "8117" + }, + { + "grand_exchange_price": "2", + "durability": null, + "name": "Teak table", + "archery_ticket_price": "0", + "id": "8118" + }, + { + "grand_exchange_price": "249", + "durability": null, + "name": "Carved teak table", + "archery_ticket_price": "0", + "id": "8119" + }, + { + "grand_exchange_price": "497", + "durability": null, + "name": "Mahogany table", + "archery_ticket_price": "0", + "id": "8120" + }, + { + "grand_exchange_price": "394177", + "durability": null, + "name": "Opulent table", + "archery_ticket_price": "0", + "id": "8121" + }, + { + "shop_price": "24", + "examine": "A candle.", + "grand_exchange_price": "104", + "durability": null, + "name": "Candles", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8128" + }, + { + "durability": null, + "name": "Skeleton guard", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8131" + }, + { + "examine": "He doesn't seem pleased to see me./Beware of the dog! (Construction)", + "durability": null, + "name": "Guard dog", + "archery_ticket_price": "0", + "id": "8132" + }, + { + "examine": "He doesn't look very welcoming.", + "durability": null, + "name": "Hobgoblin guard", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8133" + }, + { + "examine": "Young but still dangerous.", + "durability": null, + "name": "Baby red dragon", + "archery_ticket_price": "0", + "id": "8134" + }, + { + "examine": "No spider could grow that big! It's unrealistic!", + "durability": null, + "name": "Huge spider", + "archery_ticket_price": "0", + "id": "8135" + }, + { + "examine": "(Level 122)", + "durability": null, + "name": "Hellhound", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8137" + }, + { + "examine": "I don't think insect repellent will work...", + "durability": null, + "name": "Kalphite soldier", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8139" + }, + { + "examine": "The Tok-Xil fires deadly spines out of its arm, projected by its own heat.", + "durability": null, + "name": "Tok-xil", + "archery_ticket_price": "0", + "id": "8140" + }, + { + "examine": "Its scales seem to be made of steel.", + "durability": null, + "name": "Steel dragon", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8142" + }, + { + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Thorny hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8203" + }, + { + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Nice hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8204" + }, + { + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Small box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8205" + }, + { + "shop_price": "20000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Topiary hedge", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8206" + }, + { + "shop_price": "25000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Fancy hedge", + "weight": "10", + "archery_ticket_price": "0", + "id": "8207" + }, + { + "shop_price": "50000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Tall fancy hedge", + "archery_ticket_price": "0", + "id": "8208" + }, + { + "examine": "Some rosemary.", + "grand_exchange_price": "20", + "durability": null, + "name": "Rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8210" + }, + { + "examine": "A bunch of marigolds.", + "grand_exchange_price": "3862", + "durability": null, + "name": "Marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8214" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Beer barrel", + "archery_ticket_price": "0", + "id": "8239" + }, + { + "grand_exchange_price": "16860", + "durability": null, + "name": "Cider barrel", + "archery_ticket_price": "0", + "id": "8240" + }, + { + "shop_price": "3", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "131", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8241" + }, + { + "shop_price": "2", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "569", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8242" + }, + { + "shop_price": "2", + "examine": "A glass of bitter.", + "grand_exchange_price": "523", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8243" + }, + { + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "2371", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8244" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Wood kitchen table", + "archery_ticket_price": "0", + "id": "8246" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak kitchen table", + "archery_ticket_price": "0", + "id": "8247" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Teak kitchen table", + "archery_ticket_price": "0", + "id": "8248" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8260" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Cockatrice head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8261" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Basilisk head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8262" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kurask head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8263" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Abyssal head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8264" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kbd heads", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8265" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kq head", + "archery_ticket_price": "0", + "id": "8266" + }, + { + "durability": null, + "name": "Runite armour", + "archery_ticket_price": "0", + "id": "8272", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "examine": "The magical sword 'Silverlight'. / The magical sword 'Silverlight', stained black with mushroom ink. (during Shadow of the Storm)", + "durability": null, + "name": "Silverlight", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "8279", + "bonuses": "9,14,-2,0,0,0,3,2,1,0,0,12,0,0,0" + }, + { + "examine": "This used to belong to King Arthur.", + "durability": null, + "name": "Excalibur", + "weight": "2.2", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "8280", + "bonuses": "20,29,-2,0,0,0,3,2,1,0,0,25,0,0,0" + }, + { + "examine": "The magical sword Silverlight, enhanced with the blood of Agrith-Naar.", + "durability": null, + "name": "Darklight", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "8281", + "bonuses": "10,16,-2,0,0,0,3,2,2,0,0,13,0,0,0" + }, + { + "examine": "This provides partial protection from dragon-breath attacks.", + "grand_exchange_price": "305", + "durability": null, + "name": "Anti-dragon shield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8282", + "bonuses": "0,0,0,0,0,7,9,8,2,8,0,0,0,0,0" + }, + { + "examine": "A very powerful dragonstone amulet.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8283", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,0,3,0" + }, + { + "shop_price": "450", + "examine": "The cape worn by members of the Legends Guild.", + "durability": null, + "name": "Cape of legends", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "8284", + "bonuses": "0,0,0,0,0,7,7,7,7,7,7,0,0,0,0" + }, + { + "examine": "Legendary King of the Britons.", + "durability": null, + "name": "King arthur", + "archery_ticket_price": "0", + "id": "8285" + }, + { + "examine": "She looks concerned.", + "durability": null, + "name": "Elena", + "archery_ticket_price": "0", + "id": "8286" + }, + { + "examine": "It's full of pent-up aggression.", + "durability": null, + "name": "Rocnar", + "archery_ticket_price": "0", + "id": "8305" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Crude wooden chair", + "archery_ticket_price": "0", + "id": "8309" + }, + { + "grand_exchange_price": "50", + "durability": null, + "name": "Wooden chair", + "archery_ticket_price": "0", + "id": "8310" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Rocking chair", + "archery_ticket_price": "0", + "id": "8311" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak chair", + "archery_ticket_price": "0", + "id": "8312" + }, + { + "grand_exchange_price": "2", + "durability": null, + "name": "Oak armchair", + "archery_ticket_price": "0", + "id": "8313" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Teak armchair", + "archery_ticket_price": "0", + "id": "8314" + }, + { + "grand_exchange_price": "8", + "durability": null, + "name": "Mahogany armchair", + "archery_ticket_price": "0", + "id": "8315" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden bookcase", + "archery_ticket_price": "0", + "id": "8319" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak bookcase", + "archery_ticket_price": "0", + "id": "8320" + }, + { + "grand_exchange_price": "52", + "durability": null, + "name": "Mahogany b'kcase", + "archery_ticket_price": "0", + "id": "8321" + }, + { + "requirements": "{5,22}", + "shop_price": "1000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged dead tree", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8417" + }, + { + "durability": null, + "name": "Bagged dead tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8418" + }, + { + "requirements": "{10,22}", + "shop_price": "2000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged nice tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8419" + }, + { + "durability": null, + "name": "Bagged nice tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8420" + }, + { + "requirements": "{15,22}", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged oak tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8421" + }, + { + "durability": null, + "name": "Bagged oak tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8422" + }, + { + "requirements": "{22,30}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged willow tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8423" + }, + { + "durability": null, + "name": "Bagged willow tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8424" + }, + { + "requirements": "{22,45}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged maple tree", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8425" + }, + { + "durability": null, + "name": "Bagged maple tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8426" + }, + { + "requirements": "{22,60}", + "shop_price": "20000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged yew tree", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8427" + }, + { + "durability": null, + "name": "Bagged yew tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8428" + }, + { + "requirements": "{22,75}", + "shop_price": "50000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged magic tree", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8429" + }, + { + "durability": null, + "name": "Bagged magic tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8430" + }, + { + "shop_price": "1000", + "ge_buy_limit": "5000", + "examine": "You can plant this in your garden.", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bagged plant 1", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8431" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bagged plant 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8432" + }, + { + "requirements": "{6,22}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged plant 2", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8433" + }, + { + "durability": null, + "name": "Bagged plant 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8434" + }, + { + "requirements": "{12,22}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged plant 3", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8435" + }, + { + "durability": null, + "name": "Bagged plant 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8436" + }, + { + "requirements": "{22,56}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Thorny hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8437" + }, + { + "durability": null, + "name": "Thorny hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8438" + }, + { + "requirements": "{22,60}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Nice hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8439" + }, + { + "durability": null, + "name": "Nice hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8440" + }, + { + "requirements": "{22,64}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Small box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8441" + }, + { + "durability": null, + "name": "Small box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8442" + }, + { + "requirements": "{22,68}", + "shop_price": "20000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Topiary hedge", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8443" + }, + { + "durability": null, + "name": "Topiary hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8444" + }, + { + "requirements": "{22,72}", + "shop_price": "25000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Fancy hedge", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8445" + }, + { + "durability": null, + "name": "Fancy hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8446" + }, + { + "requirements": "{22,76}", + "shop_price": "50000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Tall fancy hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8447" + }, + { + "durability": null, + "name": "Tall fancy hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8448" + }, + { + "requirements": "{22,80}", + "shop_price": "100000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Tall box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8449" + }, + { + "durability": null, + "name": "Tall box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8450" + }, + { + "requirements": "{22,66}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8451" + }, + { + "durability": null, + "name": "Bagged rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8452" + }, + { + "requirements": "{22,71}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged daffodils", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8453" + }, + { + "durability": null, + "name": "Bagged daffodils", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8454" + }, + { + "requirements": "{22,76}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged bluebells", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8455" + }, + { + "durability": null, + "name": "Bagged bluebells", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8456" + }, + { + "requirements": "{22,66}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged sunflower", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8457" + }, + { + "durability": null, + "name": "Bagged sunflower", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8458" + }, + { + "requirements": "{22,71}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8459" + }, + { + "durability": null, + "name": "Bagged marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8460" + }, + { + "requirements": "{22,76}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged roses", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8461" + }, + { + "durability": null, + "name": "Bagged roses", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8462" + }, + { + "shop_price": "160", + "examine": "How to build a house.", + "durability": null, + "name": "Construction guide", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8463" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8464", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8466", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8468", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8470", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8472", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8474", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8476", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8478", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8480", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8482", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8484", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8486", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8488", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8490", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8492", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8494", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble crude chair.", + "durability": null, + "name": "Crude wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8496" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Crude wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8497" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "53", + "examine": "A ready-to-assemble wooden chair.", + "durability": null, + "name": "Wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8498" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "53", + "durability": null, + "name": "Wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8499" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble rocking chair.", + "durability": null, + "name": "Rocking chair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8500" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Rocking chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8501" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "examine": "A ready-to-assemble oak chair.", + "durability": null, + "name": "Oak chair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8502" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Oak chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8503" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak armchair.", + "durability": null, + "name": "Oak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8504" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8505" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble teak armchair.", + "durability": null, + "name": "Teak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8506" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Teak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8507" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "examine": "A ready-to-assemble mahogany armchair.", + "durability": null, + "name": "Mahogany armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8508" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Mahogany armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8509" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble wooden bookcase.", + "durability": null, + "name": "Wooden bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8510" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8511" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak bookcase.", + "durability": null, + "name": "Oak bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8512" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8513" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "46", + "examine": "A ready-to-assemble mahogany bookcase.", + "durability": null, + "name": "Mahogany b'kcase", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8514" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "46", + "durability": null, + "name": "Mahogany b'kcase", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8515" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble beer barrel.", + "durability": null, + "name": "Beer barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8516" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Beer barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8517" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16900", + "examine": "A ready-to-assemble cider barrel.", + "durability": null, + "name": "Cider barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8518" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16900", + "durability": null, + "name": "Cider barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8519" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Asgarnian Ale.", + "grand_exchange_price": "4586", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8520" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4586", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8521" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Greenman's Ale.", + "grand_exchange_price": "8875", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8522" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8875", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8523" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Dragon Bitter.", + "grand_exchange_price": "10300", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8524" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10300", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8525" + }, + { + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Chef's Delight.", + "grand_exchange_price": "48800", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8526" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48800", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8527" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble wooden kitchen table.", + "durability": null, + "name": "Wood kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8528" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Wood kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8529" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak kitchen table.", + "durability": null, + "name": "Oak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8530" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8531" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble teak kitchen table.", + "durability": null, + "name": "Teak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8532" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Teak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8533" + }, + { + "durability": null, + "name": "Oak lectern", + "archery_ticket_price": "0", + "id": "8535" + }, + { + "durability": null, + "name": "Eagle lectern", + "archery_ticket_price": "0", + "id": "8537" + }, + { + "durability": null, + "name": "Demon lectern", + "archery_ticket_price": "0", + "id": "8539" + }, + { + "durability": null, + "name": "Teak eagle lectern", + "archery_ticket_price": "0", + "id": "8541" + }, + { + "durability": null, + "name": "Teak demon lectern", + "archery_ticket_price": "0", + "id": "8543" + }, + { + "durability": null, + "name": "Mahogany eagle", + "archery_ticket_price": "0", + "id": "8545" + }, + { + "durability": null, + "name": "Mahogany demon", + "archery_ticket_price": "0", + "id": "8547" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble wooden dining table.", + "durability": null, + "name": "Wood dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8548" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Wood dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8549" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak dining table.", + "durability": null, + "name": "Oak dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8550" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8551" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble carved oak dining table.", + "durability": null, + "name": "Carved oak table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8552" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8553" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "examine": "A ready-to-assemble teak dining table.", + "durability": null, + "name": "Teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8554" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8555" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "245", + "examine": "A ready-to-assemble carved teak dining table.", + "durability": null, + "name": "Carved teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8556" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "245", + "durability": null, + "name": "Carved teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8557" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "575", + "examine": "A ready-to-assemble mahogany dining table.", + "durability": null, + "name": "Mahogany table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8558" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "575", + "durability": null, + "name": "Mahogany table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8559" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "379100", + "examine": "A ready-to-assemble opulent dining table.", + "durability": null, + "name": "Opulent table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8560" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "379100", + "durability": null, + "name": "Opulent table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8561" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "examine": "A ready-to-assemble wooden dining bench.", + "durability": null, + "name": "Wooden bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8562" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "durability": null, + "name": "Wooden bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8563" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137", + "examine": "A ready-to-assemble oak dining bench.", + "durability": null, + "name": "Oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8564" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137", + "durability": null, + "name": "Oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8565" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble carved oak dining bench.", + "durability": null, + "name": "Carved oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8566" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8567" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "examine": "A ready-to-assemble teak dining bench.", + "durability": null, + "name": "Teak dining bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8568" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Teak dining bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8569" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "examine": "A ready-to-assemble carved teak dining bench.", + "durability": null, + "name": "Carved teak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8570" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Carved teak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8571" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "126", + "examine": "A ready-to-assemble mahogany dining bench.", + "durability": null, + "name": "Mahogany bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8572" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "126", + "durability": null, + "name": "Mahogany bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8573" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "517600", + "examine": "A ready-to-assemble gilded mahogany dining bench.", + "durability": null, + "name": "Gilded bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8574" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "517600", + "durability": null, + "name": "Gilded bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8575" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1974", + "examine": "A ready-to-assemble wooden bed.", + "durability": null, + "name": "Wooden bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8576" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1974", + "durability": null, + "name": "Wooden bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8577" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1775", + "examine": "A ready-to-assemble oak bed.", + "durability": null, + "name": "Oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8578" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1775", + "durability": null, + "name": "Oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8579" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1433", + "examine": "A ready-to-assemble large oak bed.", + "durability": null, + "name": "Large oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8580" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1433", + "durability": null, + "name": "Large oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8581" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1442", + "examine": "A ready-to-assemble teak bed.", + "durability": null, + "name": "Teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8582" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1442", + "durability": null, + "name": "Teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8583" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2030", + "examine": "A ready-to-assemble large teak bed.", + "durability": null, + "name": "Large teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8584" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2030", + "durability": null, + "name": "Large teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8585" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1401", + "examine": "A ready-to-assemble four-poster bed.", + "durability": null, + "name": "4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8586" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1401", + "durability": null, + "name": "4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8587" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "286700", + "examine": "A ready-to-assemble gilded four-poster bed.", + "durability": null, + "name": "Gilded 4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8588" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "286700", + "durability": null, + "name": "Gilded 4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8589" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "examine": "A ready-to-assemble oak clock.", + "durability": null, + "name": "Oak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8590" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "durability": null, + "name": "Oak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8591" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "595", + "examine": "A ready-to-assemble teak clock.", + "durability": null, + "name": "Teak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8592" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "595", + "durability": null, + "name": "Teak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8593" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156100", + "examine": "A ready-to-assemble gilded mahogany clock.", + "durability": null, + "name": "Gilded clock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8594" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156100", + "durability": null, + "name": "Gilded clock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8595" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "510", + "examine": "A ready-to-assemble shaving stand.", + "durability": null, + "name": "Shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8596" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "510", + "durability": null, + "name": "Shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8597" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "examine": "A ready-to-assemble oak shaving stand.", + "durability": null, + "name": "Oak shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8598" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "durability": null, + "name": "Oak shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8599" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "examine": "A ready-to-assemble oak dresser.", + "durability": null, + "name": "Oak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8600" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Oak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8601" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "478", + "examine": "A ready-to-assemble teak dresser.", + "durability": null, + "name": "Teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8602" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "478", + "durability": null, + "name": "Teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8603" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "examine": "A ready-to-assemble fancy teak dresser.", + "durability": null, + "name": "Fancy teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8604" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "durability": null, + "name": "Fancy teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8605" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "399", + "examine": "A ready-to-assemble mahogany dresser.", + "durability": null, + "name": "Mahogany dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8606" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "399", + "durability": null, + "name": "Mahogany dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8607" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "138800", + "examine": "A ready-to-assemble gilded dresser.", + "durability": null, + "name": "Gilded dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8608" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "138800", + "durability": null, + "name": "Gilded dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8609" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "examine": "A ready-to-assemble shoe box.", + "durability": null, + "name": "Shoe box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8610" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Shoe box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8611" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47", + "examine": "A ready-to-assemble oak chest of drawers.", + "durability": null, + "name": "Oak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8612" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47", + "durability": null, + "name": "Oak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8613" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak bedroom wardrobe.", + "durability": null, + "name": "Oak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8614" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8615" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "132", + "examine": "A ready-to-assemble teak chest of drawers.", + "durability": null, + "name": "Teak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8616" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "132", + "durability": null, + "name": "Teak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8617" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "examine": "A ready-to-assemble teak bedroom wardrobe.", + "durability": null, + "name": "Teak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8618" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Teak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8619" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98", + "examine": "A ready-to-assemble mahogany bedroom wardrobe.", + "durability": null, + "name": "Mahogany 'drobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8620" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98", + "durability": null, + "name": "Mahogany 'drobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8621" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137700", + "examine": "A ready-to-assemble gilded mahogany bedroom wardrobe.", + "durability": null, + "name": "Gilded wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8622" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137700", + "durability": null, + "name": "Gilded wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8623" + }, + { + "durability": null, + "name": "Crystal ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8625" + }, + { + "durability": null, + "name": "Elemental sphere", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8627" + }, + { + "durability": null, + "name": "Crystal of power", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8629" + }, + { + "durability": null, + "name": "Globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8631" + }, + { + "durability": null, + "name": "Ornamental globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8633" + }, + { + "durability": null, + "name": "Lunar globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8635" + }, + { + "durability": null, + "name": "Celestial globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8637" + }, + { + "durability": null, + "name": "Armillary sphere", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8639" + }, + { + "durability": null, + "name": "Small orrery", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8641" + }, + { + "durability": null, + "name": "Large orrery", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8643" + }, + { + "durability": null, + "name": "Wooden telescope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8645" + }, + { + "durability": null, + "name": "Teak telescope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8647" + }, + { + "durability": null, + "name": "Mahogany 'scope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8649" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8650", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8652", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8654", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8656", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8658", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8660", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8662", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8664", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8666", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8668", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8670", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8672", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8674", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8676", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8678", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8680", + "stand_turn_anim": "1426" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8682", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8684", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8686", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8688", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8690", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8692", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8694", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8696", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8698", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8700", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8702", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8704", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8706", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8708", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8710", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8712", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8714", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8716", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8718", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8720", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8722", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8724", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8726", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8728", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8730", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8732", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8734", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8736", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8738", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8740", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8742", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8744", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8746", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8748", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8750", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8752", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8754", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8756", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8758", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8760", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8762", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8764", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8766", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8768", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8770", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8772", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8774", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8776", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "examine": "A plank of sturdy oak.", + "grand_exchange_price": "660", + "durability": null, + "name": "Oak plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "8778" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "660", + "durability": null, + "name": "Oak plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8779" + }, + { + "shop_price": "500", + "ge_buy_limit": "10000", + "examine": "A plank of fine teak.", + "grand_exchange_price": "959", + "durability": null, + "name": "Teak plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "8780" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "959", + "durability": null, + "name": "Teak plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8781" + }, + { + "shop_price": "1500", + "ge_buy_limit": "10000", + "examine": "A plank of expensive mahogany.", + "grand_exchange_price": "2286", + "durability": null, + "name": "Mahogany plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "8782" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2286", + "durability": null, + "name": "Mahogany plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8783" + }, + { + "shop_price": "130000", + "ge_buy_limit": "100", + "examine": "A very delicate sheet of gold.", + "grand_exchange_price": "133800", + "durability": null, + "name": "Gold leaf", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8784" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "133800", + "durability": null, + "name": "Gold leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8785" + }, + { + "shop_price": "325000", + "ge_buy_limit": "100", + "examine": "A beautifully carved marble block.", + "grand_exchange_price": "324800", + "durability": null, + "name": "Marble block", + "tradeable": "true", + "weight": "13.6", + "archery_ticket_price": "0", + "id": "8786" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "324800", + "durability": null, + "name": "Marble block", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8787" + }, + { + "shop_price": "975000", + "ge_buy_limit": "100", + "examine": "A magic stone to make high-level furniture.", + "grand_exchange_price": "980300", + "durability": null, + "name": "Magic stone", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8788" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "980300", + "durability": null, + "name": "Magic stone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8789" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A bolt of ordinary cloth.", + "grand_exchange_price": "1090", + "durability": null, + "name": "Bolt of cloth", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8790" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1090", + "durability": null, + "name": "Bolt of cloth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8791" + }, + { + "ge_buy_limit": "5000", + "examine": "A clockwork mechanism.", + "grand_exchange_price": "1630", + "durability": null, + "name": "Clockwork", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8792" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1630", + "durability": null, + "name": "Clockwork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8793" + }, + { + "shop_price": "13", + "ge_buy_limit": "100", + "examine": "Good for cutting wood.", + "grand_exchange_price": "64", + "durability": null, + "name": "Saw", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8794", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "64", + "durability": null, + "name": "Saw", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8795" + }, + { + "durability": null, + "name": "Mahogany logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8836" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "A hefty beam of timber, perfect for building temples.", + "grand_exchange_price": "29", + "durability": null, + "name": "Timber beam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8837" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "29", + "durability": null, + "name": "Timber beam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8838" + }, + { + "remove_sleeves": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "Torso armour from the order of the Void Knights.", + "durability": null, + "name": "Void knight top", + "tradeable": "false", + "weight": "6.5", + "archery_ticket_price": "0", + "id": "8839", + "bonuses": "0,0,0,0,0,45,45,45,45,45,45,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "Leg armour of the order of the Void Knights.", + "durability": null, + "name": "Void knight robe", + "tradeable": "false", + "weight": "8", + "archery_ticket_price": "0", + "id": "8840", + "bonuses": "0,0,0,0,0,30,30,30,30,30,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "A mace used by the order of the Void Knights.", + "durability": null, + "weight": "1", + "attack_speed": "5", + "weapon_interface": "1", + "render_anim": "2553", + "equipment_slot": "3", + "attack_anims": "401,401,401,401", + "name": "Void knight mace", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "8841", + "bonuses": "22,0,41,8,0,2,2,2,2,2,0,38,6,0,0" + }, + { + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "150", + "examine": "Gloves as used by the order of the Void Knights.", + "durability": null, + "name": "Void knight gloves", + "tradeable": "false", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "8842", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "A defensive weapon.", + "durability": null, + "name": "Bronze defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8844", + "bonuses": "3,2,1,-3,-2,3,2,1,-3,-2,1,0,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "examine": "A defensive weapon.", + "durability": null, + "name": "Iron defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8845", + "bonuses": "5,4,3,-3,-2,5,4,3,-3,-2,2,0,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,5}-{1,5}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Steel defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8846", + "bonuses": "7,6,5,-3,-2,7,6,5,-3,-2,3,1,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,10}-{1,10}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Black defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8847", + "bonuses": "9,8,7,-3,-2,9,8,7,-3,-2,4,2,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,20}-{1,20}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Mithril defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8848", + "bonuses": "10,9,8,-3,-2,10,9,8,-3,-2,5,3,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,30}-{1,30}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Adamant defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8849", + "bonuses": "13,12,11,-3,-2,13,12,11,-3,-2,6,4,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,40}-{1,40}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Rune defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8850", + "bonuses": "20,19,18,-3,-2,20,19,18,-3,-2,8,5,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "examine": "Warrior Guild Token.", + "durability": null, + "name": "Warrior guild token", + "archery_ticket_price": "0", + "id": "8851" + }, + { + "examine": "Large, round, heavy shield.", + "durability": null, + "name": "Defensive shield", + "weight": "3.6", + "archery_ticket_price": "0", + "two_handed": "false", + "id": "8856", + "bonuses": "0,0,0,-6,-2,8,9,7,0,8,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Just landed 18lb shot.", + "durability": null, + "name": "18lb shot", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8858" + }, + { + "examine": "Just landed 22lb shot.", + "durability": null, + "name": "22lb shot", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8859" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "One barrel", + "destroy": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "8860", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Two barrels", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "8861", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Three barrels", + "destroy": "true", + "weight": "13.5", + "archery_ticket_price": "0", + "id": "8862", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Four barrels", + "destroy": "true", + "weight": "18.1", + "archery_ticket_price": "0", + "id": "8863", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Five barrels", + "destroy": "true", + "weight": "22.6", + "archery_ticket_price": "0", + "id": "8864", + "equipment_slot": "0" + }, + { + "examine": "A heap of finely ground ashes.", + "durability": null, + "name": "Ground ashes", + "archery_ticket_price": "0", + "id": "8865" + }, + { + "examine": "A key made of solid iron.", + "durability": null, + "name": "Iron key", + "archery_ticket_price": "0", + "id": "8869" + }, + { + "examine": "See article", + "durability": null, + "name": "Zanik", + "archery_ticket_price": "0", + "id": "8870" + }, + { + "turn90cw_anim": "4194", + "examine": "It's got Zanik in it.", + "walk_anim": "4194", + "durability": null, + "destroy": "true", + "weight": "32", + "turn90ccw_anim": "4194", + "turn180_anim": "4194", + "render_anim": "822", + "equipment_slot": "3", + "stand_anim": "4193", + "name": "Crate with zanik", + "tradeable": "false", + "run_anim": "4194", + "archery_ticket_price": "0", + "id": "8871", + "stand_turn_anim": "4194" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "2855", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8872", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2855", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8873" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "3033", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8874", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3033", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8875" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "3523", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger (p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8876", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3523", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger (p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8877" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "8337", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger (p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8878", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8337", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger (p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8879" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "This fires crossbow bolts.", + "walk_anim": "4226", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "1159", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "8880", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,42,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,28}", + "shop_price": "2000", + "durability": null, + "weight": "2.2", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Dorgeshuun c'bow" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1159", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dorgeshuun c'bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8881" + }, + { + "requirements": "{4,28}", + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Good if you have a bone crossbow!", + "grand_exchange_price": "12", + "durability": null, + "name": "Bone bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8882", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "examine": "See article", + "durability": null, + "name": "Zanik", + "archery_ticket_price": "0", + "id": "8887" + }, + { + "bankable": "false", + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "archery_ticket_price": "0", + "id": "8890" + }, + { + "examine": "A horrible, emaciated ape like creature with beady red eyes.", + "durability": null, + "name": "Cave horror", + "archery_ticket_price": "0", + "id": "8900" + }, + { + "requirements": "{1,20}-{2,10}", + "ge_buy_limit": "10", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "989400", + "durability": null, + "name": "Black mask (10)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8901", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "989400", + "durability": null, + "name": "Black mask (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8902" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (9)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8903", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8904" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (8)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8905", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8906" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (7)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8907", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8908" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (6)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8909", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8910" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (5)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8911", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8912" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (4)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8913", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8914" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (3)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8915", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8916" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (2)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8917", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8918" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (1)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8919", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8920" + }, + { + "requirements": "{1,20}-{2,10}", + "ge_buy_limit": "10", + "examine": "An inert-seeming cave horror mask.", + "grand_exchange_price": "956100", + "durability": null, + "name": "Black mask", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8921", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "956100", + "durability": null, + "name": "Black mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8922" + }, + { + "requirements": "{18,35}", + "shop_price": "900", + "examine": "A stick on a string... pure style.", + "durability": null, + "name": "Witchwood icon", + "archery_ticket_price": "0", + "id": "8923", + "bonuses": "0,0,0,1,0,0,0,0,0,0,0,0,1,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "examine": "A white bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8924", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A red bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8925", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A blue bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8926", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A brown bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8927", + "equipment_slot": "0" + }, + { + "examine": "A pirate hat and a patch for the right eye.", + "durability": null, + "name": "Hat and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8928", + "equipment_slot": "0" + }, + { + "shop_price": "800", + "examine": "Tied together so they don't come apart.", + "durability": null, + "name": "Crabclaw and hook", + "weight": "1", + "archery_ticket_price": "0", + "id": "8929", + "bonuses": "0,0,0,0,0,3,5,3,0,0,0,1,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Crude wooden pipe section.", + "durability": null, + "name": "Pipe section", + "weight": "1", + "archery_ticket_price": "0", + "id": "8930" + }, + { + "durability": null, + "name": "Pipe section", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8931" + }, + { + "examine": "Repairs made with this will be patchy at best.", + "durability": null, + "name": "Lumber patch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8932" + }, + { + "durability": null, + "name": "Lumber patch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8933" + }, + { + "examine": "Slimy logs from the scrapey tree.", + "durability": null, + "name": "Scrapey tree logs", + "archery_ticket_price": "0", + "id": "8934" + }, + { + "durability": null, + "name": "Scrapey tree logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8935" + }, + { + "examine": "Very blue.", + "durability": null, + "name": "Blue flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8936" + }, + { + "durability": null, + "name": "Blue flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8937" + }, + { + "examine": "Very red.", + "durability": null, + "name": "Red flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8938" + }, + { + "durability": null, + "name": "Red flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8939" + }, + { + "examine": "Bluuuuuuuue Monkeeeeeeey!", + "durability": null, + "name": "Blue monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8943" + }, + { + "examine": "Bluuuuuuuue Monkeeeeeeey!", + "durability": null, + "name": "Blue monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8944" + }, + { + "examine": "Bluuuuuuuue Monkeeeeeeey!", + "durability": null, + "name": "Blue monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8945" + }, + { + "examine": "A well red monkey.", + "durability": null, + "name": "Red monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8946" + }, + { + "examine": "A well red monkey.", + "durability": null, + "name": "Red monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8947" + }, + { + "examine": "A well red monkey.", + "durability": null, + "name": "Red monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8948" + }, + { + "remove_head": "true", + "examine": "Essential pirate wear.", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8949", + "equipment_slot": "0" + }, + { + "examine": "Shiver me timbers!", + "grand_exchange_price": "83200", + "durability": null, + "name": "Pirate hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8950", + "equipment_slot": "0" + }, + { + "examine": "Piratical currency.", + "durability": null, + "name": "Pieces of eight", + "archery_ticket_price": "0", + "id": "8951" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Blue naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8952", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Green naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8953", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Red naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8954", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Brown naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8955", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Black naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8956", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Purple naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8957", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Grey naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8958", + "equipment_slot": "4" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Blue tricorn hat", + "archery_ticket_price": "0", + "id": "8959", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Green tricorn hat", + "archery_ticket_price": "0", + "id": "8960", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Red tricorn hat", + "archery_ticket_price": "0", + "id": "8961", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Brown tricorn hat", + "archery_ticket_price": "0", + "id": "8962", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Black tricorn hat", + "archery_ticket_price": "0", + "id": "8963", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Purple tricorn hat", + "archery_ticket_price": "0", + "id": "8964", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Grey tricorn hat", + "archery_ticket_price": "0", + "id": "8965", + "equipment_slot": "0" + }, + { + "shop_price": "200", + "turn90cw_anim": "1424", + "examine": "The flag of The Cutthroat.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Cutthroat flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8966", + "stand_turn_anim": "1426" + }, + { + "shop_price": "200", + "turn90cw_anim": "1424", + "examine": "The flag of The Guilded Smile.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "attack_speed": "2", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Guilded smile flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8967", + "stand_turn_anim": "1426" + }, + { + "shop_price": "300", + "turn90cw_anim": "1424", + "examine": "The flag of The Bronze Fist.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Bronze fist flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8968", + "stand_turn_anim": "1426" + }, + { + "shop_price": "400", + "turn90cw_anim": "1424", + "examine": "The flag of The Lucky Shot.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Lucky shot flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8969", + "stand_turn_anim": "1426" + }, + { + "shop_price": "500", + "turn90cw_anim": "1424", + "examine": "The flag of The Treasure Trove.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Treasure flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8970", + "stand_turn_anim": "1426" + }, + { + "shop_price": "600", + "turn90cw_anim": "1424", + "examine": "The flag of The Phasmatys Pride.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Phasmatys flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8971", + "stand_turn_anim": "1426" + }, + { + "examine": "A Bowl of red water.", + "durability": null, + "name": "Bowl of red water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8972" + }, + { + "durability": null, + "name": "Bowl of red water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8973" + }, + { + "examine": "A Bowl of blue water.", + "durability": null, + "name": "Bowl of blue water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8974" + }, + { + "durability": null, + "name": "Bowl of blue water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8975" + }, + { + "examine": "Monkeys seem to like throwing these.", + "durability": null, + "name": "Bitternut", + "archery_ticket_price": "0", + "id": "8976" + }, + { + "examine": "Greasy bark from the scrapey tree.", + "durability": null, + "name": "Scrapey bark", + "weight": "1.1", + "archery_ticket_price": "0", + "id": "8977" + }, + { + "durability": null, + "name": "Scrapey bark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8978" + }, + { + "examine": "Caution; not for use over troubled water.", + "durability": null, + "name": "Bridge section", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8979" + }, + { + "durability": null, + "name": "Bridge section", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8980" + }, + { + "examine": "Better than sea slugs.", + "durability": null, + "name": "Sweetgrubs", + "archery_ticket_price": "0", + "id": "8981" + }, + { + "durability": null, + "name": "Sweetgrubs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8982" + }, + { + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8986" + }, + { + "durability": null, + "name": "Torch", + "archery_ticket_price": "0", + "id": "8987", + "equipment_slot": "3" + }, + { + "shop_price": "5", + "examine": "Apparently good for brewing.", + "durability": null, + "name": "The stuff", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "8988" + }, + { + "examine": "A how-to of brewing and arson.", + "durability": null, + "name": "Brewin' guide", + "archery_ticket_price": "0", + "id": "8989" + }, + { + "examine": "A how-to of brewing and arson.", + "durability": null, + "name": "Brewin' guide", + "archery_ticket_price": "0", + "id": "8990" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Blue navy slacks", + "archery_ticket_price": "0", + "id": "8991", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Green navy slacks", + "archery_ticket_price": "0", + "id": "8992", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Red navy slacks", + "archery_ticket_price": "0", + "id": "8993", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Brown navy slacks", + "archery_ticket_price": "0", + "id": "8994", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Black navy slacks", + "archery_ticket_price": "0", + "id": "8995", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Purple navy slacks", + "archery_ticket_price": "0", + "id": "8996", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Grey navy slacks", + "archery_ticket_price": "0", + "id": "8997", + "equipment_slot": "7" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8998" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8999" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9000" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9001" + }, + { + "durability": null, + "name": "Hat and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9002" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "WARNING: Contains information which could make your account secure!", + "grand_exchange_price": "100", + "durability": null, + "name": "Security book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9003" + }, + { + "ge_buy_limit": "100", + "examine": "Information regarding the Stronghold of Security.", + "grand_exchange_price": "16", + "durability": null, + "name": "Stronghold notes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9004" + }, + { + "destroy_message": "You can get another pair of Fancy Boots from the Stronghold of Security", + "examine": "Very nice boots from the Stronghold of Security.", + "durability": null, + "name": "Fancy boots", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9005", + "bonuses": "0,0,0,-3,-1,1,2,3,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You can get another pair of Fighting Boots from the Stronghold of Security.", + "examine": "Very nice boots from the Stronghold of Security.", + "durability": null, + "name": "Fighting boots", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9006", + "bonuses": "0,0,0,-3,-1,1,2,3,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Ooooh spooky!", + "durability": null, + "name": "Right skull half", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "9007" + }, + { + "examine": "Ooooh spooky!", + "durability": null, + "name": "Left skull half", + "tradeable": "false", + "destroy": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "9008" + }, + { + "examine": "Seems to be for use with a staff or sceptre of some sort.", + "durability": null, + "name": "Strange skull", + "tradeable": "false", + "weight": "1.2", + "archery_ticket_price": "0", + "id": "9009" + }, + { + "examine": "Top half of a broken sceptre.", + "durability": null, + "name": "Top of sceptre", + "tradeable": "false", + "weight": "2", + "archery_ticket_price": "0", + "id": "9010" + }, + { + "examine": "Bottom half of a broken sceptre.", + "durability": null, + "name": "Bottom of sceptre", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "9011" + }, + { + "examine": "Sceptre with runes on it, seems to be missing something.", + "durability": null, + "name": "Runed sceptre", + "tradeable": "false", + "weight": "3.5", + "archery_ticket_price": "0", + "id": "9012" + }, + { + "turn90cw_anim": "1207", + "examine": "A fragile magical Sceptre.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can obtain another Sceptre by collecting all four pieces from the Stronghold of Security.", + "stand_anim": "813", + "name": "Skull sceptre", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9013", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "durability": null, + "name": "Security book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9014" + }, + { + "durability": null, + "name": "Stronghold notes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9015" + }, + { + "examine": "Oversized nail clippings.", + "durability": null, + "name": "Gorak claws", + "archery_ticket_price": "0", + "id": "9016" + }, + { + "examine": "A flower with magical properties.", + "durability": null, + "name": "Star flower", + "archery_ticket_price": "0", + "id": "9017" + }, + { + "examine": "Ground-down gorak claws.", + "durability": null, + "name": "Gorak claw powder", + "weight": "1", + "archery_ticket_price": "0", + "id": "9018" + }, + { + "examine": "Contains the Fairy Queen's magical essence.", + "durability": null, + "name": "Queen's secateurs", + "archery_ticket_price": "0", + "id": "9020", + "equipment_slot": "3" + }, + { + "destroy_message": "Maybe I can find another in Fairy Nuff's grotto.", + "examine": "A scroll that says she's a healer, that's Fairy Nuff.", + "durability": null, + "name": "Nuff's certificate", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9025" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Pyramid will give me 50 coins for this.", + "grand_exchange_price": "187", + "durability": null, + "name": "Ivory comb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9026" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "durability": null, + "name": "Ivory comb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9027" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Pyramid will give me 1000 coins for this.", + "grand_exchange_price": "513", + "durability": null, + "name": "Golden scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9028" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "513", + "durability": null, + "name": "Golden scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9029" + }, + { + "ge_buy_limit": "100", + "examine": "Little ornament in the shape of a scarab.", + "grand_exchange_price": "168", + "durability": null, + "name": "Stone scarab", + "tradeable": "true", + "weight": "0.07", + "archery_ticket_price": "0", + "id": "9030" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "168", + "durability": null, + "name": "Stone scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9031" + }, + { + "ge_buy_limit": "100", + "examine": "A small pottery scarab.", + "grand_exchange_price": "74", + "durability": null, + "name": "Pottery scarab", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9032" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Pottery scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9033" + }, + { + "ge_buy_limit": "100", + "examine": "A small golden statuette.", + "grand_exchange_price": "740", + "durability": null, + "name": "Golden statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9034" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "740", + "durability": null, + "name": "Golden statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9035" + }, + { + "ge_buy_limit": "100", + "examine": "A small pottery statuette.", + "grand_exchange_price": "97", + "durability": null, + "name": "Pottery statuette", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9036" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "97", + "durability": null, + "name": "Pottery statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9037" + }, + { + "ge_buy_limit": "100", + "examine": "A small stone statuette.", + "grand_exchange_price": "193", + "durability": null, + "name": "Stone statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9038" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "193", + "durability": null, + "name": "Stone statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9039" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Arena will give me 750 coins for this.", + "grand_exchange_price": "379", + "durability": null, + "name": "Gold seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9040" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "379", + "durability": null, + "name": "Gold seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9041" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Pyramid will give me 150 coins for this.", + "grand_exchange_price": "147", + "durability": null, + "name": "Stone seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9042" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Stone seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9043" + }, + { + "requirements": "{0,30}-{6,30}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "This sceptre is fully charged.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1000000", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9044", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9045" + }, + { + "requirements": "{0,30}-{6,30}", + "turn90cw_anim": "1207", + "examine": "This sceptre has two charges left.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "27", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9046", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9047" + }, + { + "requirements": "{0,30}-{6,30}", + "turn90cw_anim": "1207", + "examine": "This sceptre has one charge left.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "27", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9048", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9049" + }, + { + "requirements": "{0,30}-{6,30}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "This sceptre has no charges left.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "985800", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9050", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "985800", + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9051" + }, + { + "ge_buy_limit": "1000", + "examine": "Delicious and nutritious. Well, nutritious anyway.", + "grand_exchange_price": "68", + "durability": null, + "name": "Locust meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9052" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "68", + "durability": null, + "name": "Locust meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9053" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Red goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9054", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Black goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9055", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Yellow goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9056", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Green goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9057", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Purple goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9058", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Pink goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9059", + "equipment_slot": "4" + }, + { + "examine": "A mystical lantern casting a green beam.", + "durability": null, + "name": "Emerald lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "9064" + }, + { + "examine": "A mystical lantern casting a green beam.", + "durability": null, + "name": "Emerald lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "9065", + "equipment_slot": "5" + }, + { + "examine": "A roughly circular disc of glass.", + "durability": null, + "name": "Emerald lens", + "archery_ticket_price": "0", + "id": "9066" + }, + { + "examine": "A log of my thoughts...", + "durability": null, + "name": "Dream log", + "weight": "1", + "archery_ticket_price": "0", + "id": "9067" + }, + { + "shop_price": "1000", + "examine": "Mystical headgear.", + "durability": null, + "name": "Moonclan helm", + "archery_ticket_price": "0", + "id": "9068", + "bonuses": "0,0,0,3,-5,3,3,3,3,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "1000", + "examine": "A mystical hat.", + "durability": null, + "name": "Moonclan hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "9069", + "bonuses": "0,0,0,3,-5,3,3,3,3,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "shop_price": "1000", + "examine": "Provides good protection.", + "durability": null, + "name": "Moonclan armour", + "weight": "4", + "archery_ticket_price": "0", + "id": "9070", + "bonuses": "0,0,0,5,-10,5,5,5,5,-10,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "1000", + "examine": "This should protect my legs.", + "durability": null, + "name": "Moonclan skirt", + "weight": "3", + "archery_ticket_price": "0", + "id": "9071", + "bonuses": "0,0,0,5,-7,5,5,5,5,-7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "900", + "examine": "These should keep my hands safe.", + "durability": null, + "name": "Moonclan gloves", + "archery_ticket_price": "0", + "id": "9072", + "bonuses": "0,0,0,2,-5,2,2,2,2,-5,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "900", + "examine": "Groovy foot protection.", + "durability": null, + "name": "Moonclan boots", + "archery_ticket_price": "0", + "id": "9073", + "bonuses": "0,0,0,2,-5,2,2,2,2,-5,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "200", + "examine": "A mystical cape.", + "durability": null, + "name": "Moonclan cape", + "archery_ticket_price": "0", + "id": "9074", + "bonuses": "0,0,0,2,-2,0,1,1,2,-2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "220", + "ge_buy_limit": "25000", + "examine": "Used for Lunar Spells", + "grand_exchange_price": "231", + "durability": null, + "name": "Astral rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9075" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This needs refining", + "durability": null, + "name": "Lunar ore", + "weight": "7", + "archery_ticket_price": "0", + "id": "9076" + }, + { + "destroy_message": "You'll have to mine another lunar ore and smelt it.", + "examine": "It's a bar of magic metal.", + "durability": null, + "name": "Lunar bar", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9077" + }, + { + "examine": "A book of Moonclan history.", + "durability": null, + "name": "Moonclan manual", + "weight": "1", + "archery_ticket_price": "0", + "id": "9078" + }, + { + "examine": "The tooth, the whole tooth, and nothing but the tooth.", + "durability": null, + "name": "Suqah tooth", + "archery_ticket_price": "0", + "id": "9079" + }, + { + "examine": "An untanned piece of suqah hide.", + "durability": null, + "name": "Suqah hide", + "archery_ticket_price": "0", + "id": "9080" + }, + { + "examine": "A piece of Suqah hide that has been expertly tanned into leather.", + "durability": null, + "name": "Suqah leather", + "weight": "3", + "archery_ticket_price": "0", + "id": "9081" + }, + { + "examine": "A ground Suqah tooth.", + "durability": null, + "name": "Ground tooth", + "archery_ticket_price": "0", + "id": "9082" + }, + { + "destroy_message": "Brundt the Chieftain will probably have another lying around somewhere anyway...", + "examine": "A seal of passage issued by Brundt the Chieftain of the Fremennik.", + "durability": null, + "name": "Seal of passage", + "tradeable": "false", + "destroy": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "9083", + "equipment_slot": "2" + }, + { + "requirements": "{6,65}", + "shop_price": "30000", + "turn90cw_anim": "1207", + "examine": "A Moonclan staff.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9084", + "stand_turn_anim": "1209", + "bonuses": "3,2,16,13,0,2,3,2,13,1,0,15,3,0,0" + }, + { + "destroy_message": "You'll have to get another from the Oneiromancer.", + "examine": "A vessel for holding liquid.", + "durability": null, + "name": "Empty vial", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9085" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "10", + "examine": "A glass vial containing water.", + "grand_exchange_price": "21", + "durability": null, + "name": "Vial of water", + "tradeable": "true", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "9086" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel for dreaming while awake!", + "durability": null, + "name": "Waking sleep vial", + "archery_ticket_price": "0", + "id": "9087" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel with water and Guam inside.", + "durability": null, + "name": "Guam vial", + "archery_ticket_price": "0", + "id": "9088" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel with water and Marrentill inside.", + "durability": null, + "name": "Marr vial", + "archery_ticket_price": "0", + "id": "9089" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel with water, guam and marrentill inside.", + "durability": null, + "name": "Guam-marr vial", + "archery_ticket_price": "0", + "id": "9090" + }, + { + "requirements": "{6,65}", + "turn90cw_anim": "1207", + "examine": "A staff enchanted by air.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff - pt1", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9091", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "requirements": "{6,65}", + "turn90cw_anim": "1207", + "examine": "A staff enchanted by air and fire.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff - pt2", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9092", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "requirements": "{6,65}", + "turn90cw_anim": "1207", + "examine": "A staff enchanted by air, fire and water.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff - pt3", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9093", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "examine": "Small bits of wood from the first magic tree!", + "durability": null, + "name": "Kindling", + "archery_ticket_price": "0", + "id": "9094" + }, + { + "examine": "Magic wood soaked with a potion of waking sleep. Groovy.", + "durability": null, + "name": "Soaked kindling", + "archery_ticket_price": "0", + "id": "9095" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{6,65}", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9096", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,7,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "120000", + "examine": "Provides good protection.", + "durability": null, + "destroy": "true", + "weight": "4.5", + "absorb": "6,3,0", + "equipment_slot": "4", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "remove_sleeves": "true", + "name": "Lunar torso", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9097", + "bonuses": "0,0,0,10,-10,34,22,40,12,0,35,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "80000", + "examine": "These should protect my legs.", + "durability": null, + "destroy": "true", + "weight": "3.65", + "absorb": "4,2,0", + "equipment_slot": "7", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar legs", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9098", + "bonuses": "0,0,0,7,-7,20,19,23,9,0,20,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "10000", + "examine": "These should keep my hands safe.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "equipment_slot": "9", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar gloves", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9099", + "bonuses": "0,0,0,4,-1,2,1,1,2,0,1,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "10000", + "examine": "Mystical foot protection.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "equipment_slot": "10", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar boots", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9100", + "bonuses": "0,0,0,2,-1,1,2,2,2,0,2,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "12000", + "examine": "Oooo pretty!", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "1", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar cape", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9101", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0" + }, + { + "destroy_message": "The Oneiromancer might be able to help you get another.", + "requirements": "{1,40}-{6,65}", + "shop_price": "4000", + "examine": "Awesome.", + "durability": null, + "name": "Lunar amulet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9102", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "destroy_message": "The Oneiromancer might be able to help you get another.", + "examine": "I'll be the talk of the town with this... maybe.", + "durability": null, + "name": "A special tiara", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9103" + }, + { + "destroy_message": "The Oneiromancer might be able to help you get another.", + "requirements": "{1,40}-{6,65}", + "shop_price": "2000", + "examine": "A mysterious ring that can fill the wearer with magical power.", + "durability": null, + "name": "Lunar ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9104", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Astral tiara", + "archery_ticket_price": "0", + "id": "9106", + "equipment_slot": "0" + }, + { + "requirements": "{4,16}", + "examine": "Blurite crossbow bolts.", + "durability": null, + "name": "Blurite bolts", + "archery_ticket_price": "0", + "id": "9139", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "41", + "durability": null, + "name": "Iron bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9140", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "shop_price": "150", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "90", + "durability": null, + "name": "Steel bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9141", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "108", + "durability": null, + "name": "Mithril bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9142", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "shop_price": "23", + "ge_buy_limit": "10000", + "examine": "Adamantite crossbow bolts.", + "grand_exchange_price": "210", + "durability": null, + "name": "Adamant bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9143", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "627", + "durability": null, + "name": "Rune bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9144", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "8", + "durability": null, + "name": "Silver bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9145", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A bronze crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "29", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9174", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,0", + "shop_price": "92", + "durability": null, + "weight": "4", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Bronze crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "29", + "durability": null, + "name": "Bronze crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9175" + }, + { + "requirements": "{4,16}", + "turn90cw_anim": "821", + "examine": "A blurite crossbow.", + "walk_anim": "4226", + "durability": null, + "weight": "4", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Blurite crossbow", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9176", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,30,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "An iron crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "20", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9177", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,42,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,26}", + "shop_price": "157", + "durability": null, + "weight": "4", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Iron crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "20", + "durability": null, + "name": "Iron crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9178" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A steel crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "99", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9179", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,54,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,31}", + "durability": null, + "weight": "5", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Steel crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "99", + "durability": null, + "name": "Steel crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9180" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A mithril crossbow", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "355", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9181", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,66,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,36}", + "durability": null, + "weight": "6", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Mith crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "355", + "durability": null, + "name": "Mith crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9182" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "An adamantite crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "905", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9183", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,78,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,46}", + "shop_price": "2244", + "durability": null, + "weight": "6", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Adamant crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "905", + "durability": null, + "name": "Adamant crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9184" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A runite crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "9706", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9185", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,90,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,61}", + "shop_price": "16200", + "durability": null, + "weight": "6", + "weapon_interface": "17", + "render_anim": "175", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Rune crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "9706", + "durability": null, + "name": "Rune crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9186" + }, + { + "ge_buy_limit": "10000", + "examine": "Jade bolt tips.", + "grand_exchange_price": "2", + "durability": null, + "name": "Jade bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9187" + }, + { + "ge_buy_limit": "10000", + "examine": "Red Topaz bolt tips.", + "grand_exchange_price": "2", + "durability": null, + "name": "Topaz bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9188" + }, + { + "ge_buy_limit": "10000", + "examine": "Sapphire bolt tips.", + "grand_exchange_price": "4", + "durability": null, + "name": "Sapphire bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9189" + }, + { + "ge_buy_limit": "10000", + "examine": "Emerald bolt tips.", + "grand_exchange_price": "84", + "durability": null, + "name": "Emerald bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9190" + }, + { + "ge_buy_limit": "10000", + "examine": "Ruby bolt tips.", + "grand_exchange_price": "159", + "durability": null, + "name": "Ruby bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9191" + }, + { + "ge_buy_limit": "10000", + "examine": "Diamond bolt tips.", + "grand_exchange_price": "1289", + "durability": null, + "name": "Diamond bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9192" + }, + { + "ge_buy_limit": "10000", + "examine": "Dragonstone bolt tips.", + "grand_exchange_price": "2477", + "durability": null, + "name": "Dragon bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9193" + }, + { + "shop_price": "13500", + "ge_buy_limit": "10000", + "examine": "Onyx bolt tips.", + "grand_exchange_price": "8096", + "tokkul_price": "1500", + "durability": null, + "name": "Onyx bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9194" + }, + { + "ge_buy_limit": "25000", + "examine": "Enchanted Opal tipped Bronze Crossbow Bolts.", + "grand_exchange_price": "10", + "durability": null, + "name": "Opal bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9236", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,14", + "equipment_slot": "13" + }, + { + "requirements": "{4,15}", + "examine": "Enchanted Jade tipped Blurite Crossbow Bolts.", + "durability": null, + "name": "Jade bolts (e)", + "archery_ticket_price": "0", + "id": "9237", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "ge_buy_limit": "25000", + "examine": "Enchanted Pearl tipped Iron Crossbow Bolts.", + "grand_exchange_price": "36", + "durability": null, + "name": "Pearl bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9238", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,48", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "25000", + "examine": "Enchanted Red Topaz tipped Steel Crossbow Bolts.", + "grand_exchange_price": "44", + "durability": null, + "name": "Topaz bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9239", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,66", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "103", + "ge_buy_limit": "25000", + "examine": "Enchanted Sapphire tipped Mithril Crossbow Bolts.", + "grand_exchange_price": "95", + "durability": null, + "name": "Sapphire bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9240", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,83", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "ge_buy_limit": "25000", + "examine": "Enchanted Emerald tipped Mithril Crossbow Bolts.", + "grand_exchange_price": "304", + "durability": null, + "name": "Emerald bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9241", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,85", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Enchanted Ruby tipped Adamantite Crossbow Bolts.", + "grand_exchange_price": "450", + "durability": null, + "name": "Ruby bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9242", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,103", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Enchanted Diamond tipped Adamantite Crossbow Bolts.", + "grand_exchange_price": "1631", + "durability": null, + "name": "Diamond bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9243", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,105", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Enchanted Dragonstone tipped Runite Crossbow Bolts.", + "grand_exchange_price": "3217", + "durability": null, + "name": "Dragon bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9244", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,117", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Enchanted Onyx tipped runite Crossbow Bolts.", + "grand_exchange_price": "8870", + "durability": null, + "name": "Onyx bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9245", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,120", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "durability": null, + "name": "Blurite bolts(p)", + "archery_ticket_price": "0", + "id": "9286", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "88", + "durability": null, + "name": "Iron bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9287", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "132", + "durability": null, + "name": "Steel bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9288", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "146", + "durability": null, + "name": "Mithril bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9289", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "shop_price": "23", + "ge_buy_limit": "10000", + "examine": "Adamantite crossbow bolts.", + "grand_exchange_price": "302", + "durability": null, + "name": "Adamant bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9290", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "734", + "durability": null, + "name": "Runite bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9291", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "34", + "durability": null, + "name": "Silver bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9292", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "durability": null, + "name": "Blurite bolts(p+)", + "archery_ticket_price": "0", + "id": "9293", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "185", + "durability": null, + "name": "Iron bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9294", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "215", + "durability": null, + "name": "Steel bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9295", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "296", + "durability": null, + "name": "Mithril bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9296", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "10000", + "grand_exchange_price": "472", + "durability": null, + "name": "Adamant bolts(p+)", + "archery_ticket_price": "0", + "id": "9297", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "1130", + "durability": null, + "name": "Runite bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9298", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "129", + "durability": null, + "name": "Silver bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9299", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "durability": null, + "name": "Blurite bolts(p++)", + "archery_ticket_price": "0", + "id": "9300", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "1136", + "durability": null, + "name": "Iron bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9301", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "1088", + "durability": null, + "name": "Steel bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9302", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "903", + "durability": null, + "name": "Mithril bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9303", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "10000", + "grand_exchange_price": "1043", + "durability": null, + "name": "Adamant bolts(p++)", + "archery_ticket_price": "0", + "id": "9304", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "1581", + "durability": null, + "name": "Runite bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9305", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "1211", + "durability": null, + "name": "Silver bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9306", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "examine": "Jade tipped blurite bolts.", + "durability": null, + "name": "Jade bolts", + "archery_ticket_price": "0", + "id": "9335", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "shop_price": "62", + "ge_buy_limit": "25000", + "examine": "Red Topaz tipped Steel Crossbow Bolts.", + "grand_exchange_price": "60", + "durability": null, + "name": "Topaz bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9336", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,66", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "ge_buy_limit": "25000", + "examine": "Sapphire tipped Mithril crossbow bolts.", + "grand_exchange_price": "89", + "durability": null, + "name": "Sapphire bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9337", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,83", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "ge_buy_limit": "25000", + "examine": "Emerald tipped Mithril crossbow bolts.", + "grand_exchange_price": "177", + "durability": null, + "name": "Emerald bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9338", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,85", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Ruby tipped Adamantite crossbow bolts.", + "grand_exchange_price": "408", + "durability": null, + "name": "Ruby bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9339", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,103", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Diamond tipped Adamantite crossbow bolts.", + "grand_exchange_price": "1545", + "durability": null, + "name": "Diamond bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9340", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,105", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Dragonstone tipped Runite crossbow bolts.", + "grand_exchange_price": "3201", + "durability": null, + "name": "Dragon bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9341", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,117", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Onyx tipped Runite crossbow bolts.", + "grand_exchange_price": "8752", + "durability": null, + "name": "Onyx bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9342", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,120", + "equipment_slot": "13" + }, + { + "shop_price": "1", + "ge_buy_limit": "10000", + "examine": "Unfeathered bronze crossbow bolts.", + "grand_exchange_price": "3", + "durability": null, + "name": "Bronze bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9375" + }, + { + "examine": "Unfeathered blurite crossbow bolts.", + "durability": null, + "name": "Blurite bolts (unf)", + "archery_ticket_price": "0", + "id": "9376" + }, + { + "shop_price": "2", + "ge_buy_limit": "10000", + "examine": "Unfeathered iron crossbow bolts.", + "grand_exchange_price": "14", + "durability": null, + "name": "Iron bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9377" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered steel crossbow bolts.", + "grand_exchange_price": "61", + "durability": null, + "name": "Steel bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9378" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered mithril crossbow bolts.", + "grand_exchange_price": "115", + "durability": null, + "name": "Mithril bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9379" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered adamantite crossbow bolts.", + "grand_exchange_price": "266", + "durability": null, + "name": "Adamant bolts(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9380" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered runite crossbow bolts", + "grand_exchange_price": "1235", + "durability": null, + "name": "Runite bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9381" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered silver crossbow bolts.", + "grand_exchange_price": "2", + "durability": null, + "name": "Silver bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9382" + }, + { + "examine": "A mithril grapple tipped bolt with a rope.", + "grand_exchange_price": "1447", + "durability": null, + "name": "Grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9415" + }, + { + "ge_buy_limit": "100", + "examine": "A mithril grapple tip.", + "grand_exchange_price": "461", + "durability": null, + "name": "Mith grapple tip", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9416" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "461", + "durability": null, + "name": "Mith grapple tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9417" + }, + { + "ge_buy_limit": "1000", + "examine": "A mithril grapple tipped bolt with a rope.", + "grand_exchange_price": "858", + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9418" + }, + { + "ge_buy_limit": "1000", + "examine": "A mithril grapple tipped bolt with a rope.", + "grand_exchange_price": "1470", + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9419", + "equipment_slot": "13" + }, + { + "requirements": "{9,9}", + "shop_price": "20", + "ge_buy_limit": "5000", + "examine": "A pair of bronze crossbow limbs.", + "grand_exchange_price": "49", + "durability": null, + "name": "Bronze limbs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9420", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "49", + "durability": null, + "name": "Bronze limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9421" + }, + { + "requirements": "{24,9}", + "examine": "A pair of blurite crossbow limbs.", + "durability": null, + "name": "Blurite limbs", + "weight": "1", + "archery_ticket_price": "0", + "id": "9422", + "equipment_slot": "5" + }, + { + "requirements": "{9,39}", + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "A pair of iron crossbow limbs.", + "grand_exchange_price": "34", + "durability": null, + "name": "Iron limbs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9423", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "34", + "durability": null, + "name": "Iron limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9424" + }, + { + "requirements": "{9,46}", + "shop_price": "900", + "ge_buy_limit": "5000", + "examine": "A pair of steel crossbow limbs.", + "grand_exchange_price": "97", + "durability": null, + "name": "Steel limbs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9425", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "durability": null, + "name": "Steel limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9426" + }, + { + "requirements": "{9,54}", + "shop_price": "650", + "ge_buy_limit": "5000", + "examine": "A pair of mithril crossbow limbs.", + "grand_exchange_price": "347", + "durability": null, + "name": "Mithril limbs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9427", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "347", + "durability": null, + "name": "Mithril limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9428" + }, + { + "requirements": "{9,61}", + "shop_price": "4800", + "ge_buy_limit": "5000", + "examine": "A pair of adamantite crossbow limbs.", + "grand_exchange_price": "1434", + "durability": null, + "name": "Adamantite limbs", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9429", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1434", + "durability": null, + "name": "Adamantite limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9430" + }, + { + "requirements": "{9,69}", + "ge_buy_limit": "5000", + "examine": "A pair of runite crossbow limbs.", + "grand_exchange_price": "9441", + "durability": null, + "name": "Runite limbs", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9431", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "9441", + "durability": null, + "name": "Runite limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9432" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "1500", + "examine": "A pouch for storing crossbow bolts.", + "durability": null, + "name": "Bolt pouch", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9433" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "A mould for creating silver crossbow bolts.", + "grand_exchange_price": "409", + "durability": null, + "name": "Bolt mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9434" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "409", + "durability": null, + "name": "Bolt mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9435" + }, + { + "ge_buy_limit": "1000", + "examine": "I can use this to make a crossbow string.", + "grand_exchange_price": "196", + "durability": null, + "name": "Sinew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9436" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "196", + "durability": null, + "name": "Sinew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9437" + }, + { + "ge_buy_limit": "1000", + "examine": "A string for a crossbow.", + "grand_exchange_price": "203", + "durability": null, + "name": "Crossbow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9438" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "203", + "durability": null, + "name": "Crossbow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9439" + }, + { + "requirements": "{9,9}", + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "A wooden crossbow stock", + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9440", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9441" + }, + { + "requirements": "{24,9}", + "ge_buy_limit": "1000", + "examine": "An oak crossbow stock.", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak stock", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9442", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9443" + }, + { + "requirements": "{9,39}", + "shop_price": "21", + "ge_buy_limit": "1000", + "examine": "A willow crossbow stock.", + "grand_exchange_price": "3", + "durability": null, + "name": "Willow stock", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9444", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3", + "durability": null, + "name": "Willow stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9445" + }, + { + "requirements": "{9,46}", + "shop_price": "231", + "ge_buy_limit": "1000", + "examine": "A teak crossbow stock.", + "grand_exchange_price": "6", + "durability": null, + "name": "Teak stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9446", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "6", + "durability": null, + "name": "Teak stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9447" + }, + { + "requirements": "{9,54}", + "ge_buy_limit": "1000", + "examine": "A maple crossbow stock.", + "grand_exchange_price": "7", + "durability": null, + "name": "Maple stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9448", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7", + "durability": null, + "name": "Maple stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9449" + }, + { + "requirements": "{9,61}", + "ge_buy_limit": "1000", + "examine": "A Mahogany crossbow stock.", + "grand_exchange_price": "23", + "durability": null, + "name": "Mahogany stock", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9450", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "23", + "durability": null, + "name": "Mahogany stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9451" + }, + { + "requirements": "{9,69}", + "ge_buy_limit": "1000", + "examine": "A yew crossbow stock.", + "grand_exchange_price": "37", + "durability": null, + "name": "Yew stock", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9452", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "37", + "durability": null, + "name": "Yew stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9453" + }, + { + "shop_price": "27", + "ge_buy_limit": "500", + "examine": "An unstrung bronze crossbow.", + "grand_exchange_price": "25", + "durability": null, + "name": "Bronze c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9454" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "25", + "durability": null, + "name": "Bronze c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9455" + }, + { + "shop_price": "27", + "examine": "An unstrung blurite crossbow.", + "durability": null, + "name": "Blurite c'bow (u)", + "weight": "8", + "archery_ticket_price": "0", + "id": "9456" + }, + { + "ge_buy_limit": "500", + "examine": "An unstrung iron crossbow.", + "grand_exchange_price": "26", + "durability": null, + "name": "Iron c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9457" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "26", + "durability": null, + "name": "Iron c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9458" + }, + { + "shop_price": "27", + "ge_buy_limit": "500", + "examine": "An unstrung steel crossbow.", + "grand_exchange_price": "114", + "durability": null, + "name": "Steel c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9459" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "114", + "durability": null, + "name": "Steel c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9460" + }, + { + "shop_price": "27", + "ge_buy_limit": "500", + "examine": "An unstrung mithril crossbow.", + "grand_exchange_price": "330", + "durability": null, + "name": "Mithril c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9461" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "330", + "durability": null, + "name": "Mithril c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9462" + }, + { + "shop_price": "693", + "ge_buy_limit": "500", + "examine": "An unstrung adamantite crossbow.", + "grand_exchange_price": "1007", + "durability": null, + "name": "Adamant c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9463" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1007", + "durability": null, + "name": "Adamant c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9464" + }, + { + "shop_price": "4000", + "ge_buy_limit": "500", + "examine": "An unstrung runite crossbow.", + "grand_exchange_price": "9493", + "durability": null, + "name": "Runite c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9465" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "9493", + "durability": null, + "name": "Runite c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9466" + }, + { + "examine": "It's a bar of blurite.", + "durability": null, + "name": "Blurite bar", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "9467" + }, + { + "examine": "What is left over when a log is made into a plank.", + "durability": null, + "name": "Sawdust", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "9468" + }, + { + "ge_buy_limit": "100", + "examine": "A seed pod of the Grand Tree.", + "grand_exchange_price": "16200", + "durability": null, + "name": "Grand seed pod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9469" + }, + { + "ge_buy_limit": "10", + "examine": "A scarf. You feel your upper lip stiffening.", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Gnome scarf", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9470", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Gnome scarf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9471" + }, + { + "ge_buy_limit": "10", + "examine": "Tally Ho!", + "grand_exchange_price": "95800", + "durability": null, + "name": "Gnome goggles", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9472", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95800", + "durability": null, + "name": "Gnome goggles", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9473" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9474" + }, + { + "ge_buy_limit": "100", + "examine": "It looks very minty.", + "grand_exchange_price": "675", + "durability": null, + "name": "Mint cake", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9475" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "675", + "durability": null, + "name": "Mint cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9476" + }, + { + "examine": "You can check on your delivery details here", + "durability": null, + "name": "Aluft aloft box", + "archery_ticket_price": "0", + "id": "9477" + }, + { + "shop_price": "1", + "examine": "This cheese & tomato batta needs baking (and garnishing with equa leaves).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9478" + }, + { + "shop_price": "1", + "examine": "This cheese & tomato batta needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9479" + }, + { + "shop_price": "1", + "examine": "This fruit batta needs baking (and garnishing with gnome spices).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9480" + }, + { + "shop_price": "1", + "examine": "This fruit batta needs garnishing with gnome spices.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9481" + }, + { + "shop_price": "1", + "examine": "This toad batta needs baking.", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9482" + }, + { + "shop_price": "1", + "examine": "This veggie batta needs baking (and garnishing with equa leaves).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9483" + }, + { + "shop_price": "1", + "examine": "This veggie batta needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9484" + }, + { + "shop_price": "1", + "examine": "This worm batta needs baking (and garnishing with equa leaves).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9485" + }, + { + "shop_price": "1", + "examine": "This worm batta needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9486" + }, + { + "shop_price": "28", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "740", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9487" + }, + { + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9488" + }, + { + "shop_price": "28", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "740", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9489" + }, + { + "shop_price": "28", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "740", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9508" + }, + { + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9509" + }, + { + "shop_price": "28", + "examine": "A Short Green Guy... looks good.", + "grand_exchange_price": "954", + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9510" + }, + { + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9511" + }, + { + "shop_price": "28", + "examine": "A fresh healthy fruit mix.", + "grand_exchange_price": "287", + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9512" + }, + { + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9513" + }, + { + "shop_price": "28", + "examine": "A cool refreshing fruit mix.", + "grand_exchange_price": "2276", + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9514" + }, + { + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9515" + }, + { + "shop_price": "28", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "577", + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9516" + }, + { + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9517" + }, + { + "shop_price": "28", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "281", + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9518" + }, + { + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9519" + }, + { + "shop_price": "30", + "examine": "Looks good... smells strong.", + "grand_exchange_price": "27", + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9520" + }, + { + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9521" + }, + { + "shop_price": "1", + "examine": "A deep tin used to make gnome battas in.", + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9522" + }, + { + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9523" + }, + { + "shop_price": "1", + "examine": "A deep tin used to make gnome battas in.", + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9524" + }, + { + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9525" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "310", + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9527" + }, + { + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9528" + }, + { + "shop_price": "78", + "examine": "It actually smells quite good.", + "grand_exchange_price": "280", + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9529" + }, + { + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9530" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "148", + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9531" + }, + { + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9532" + }, + { + "examine": "Well... It looks healthy.", + "grand_exchange_price": "240", + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9533" + }, + { + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9534" + }, + { + "examine": "This smells really good.", + "grand_exchange_price": "266", + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9535" + }, + { + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9536" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "2606", + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9538" + }, + { + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9539" + }, + { + "shop_price": "70", + "examine": "Yum...smells spicy.", + "grand_exchange_price": "99", + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9540" + }, + { + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9541" + }, + { + "shop_price": "80", + "examine": "It actually smells quite good.", + "grand_exchange_price": "255", + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9542" + }, + { + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9543" + }, + { + "shop_price": "70", + "examine": "Yum... smells good.", + "grand_exchange_price": "889", + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9544" + }, + { + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9545" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "475", + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9547" + }, + { + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9548" + }, + { + "examine": "This looks pretty healthy.", + "grand_exchange_price": "514", + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9549" + }, + { + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9550" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "2650", + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "9551" + }, + { + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9552" + }, + { + "shop_price": "450", + "examine": "Full of creamy, chocolately goodness.", + "grand_exchange_price": "4704", + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "9553" + }, + { + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9554" + }, + { + "examine": "This unfinished choco bomb needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9558" + }, + { + "examine": "This unfinished tangled toad legs bowl needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9559" + }, + { + "examine": "This unfinished choc bomb needs cream and chocolate dust.", + "durability": null, + "name": "Unfinished bowl", + "archery_ticket_price": "0", + "id": "9560" + }, + { + "examine": "This unfinished veggie ball needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9561" + }, + { + "examine": "This unfinished veggie ball needs equa leaves.", + "durability": null, + "name": "Unfinished bowl", + "archery_ticket_price": "0", + "id": "9562" + }, + { + "examine": "This unfinished worm hole needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9563" + }, + { + "examine": "This unfinished worm hole needs equa leaves.", + "durability": null, + "name": "Unfinished bowl", + "archery_ticket_price": "0", + "id": "9564" + }, + { + "durability": null, + "name": "Cocktail shaker", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9565" + }, + { + "examine": "This wizzard blizzard needs pouring, a lime slice, and pineapple chunks.", + "durability": null, + "name": "Mixed blizzard", + "archery_ticket_price": "0", + "id": "9566" + }, + { + "examine": "This short green guy cocktail needs pouring, a lime slice and equa leaves.", + "durability": null, + "name": "Mixed sgg", + "archery_ticket_price": "0", + "id": "9567" + }, + { + "examine": "This fruit blast cocktail needs pouring and a lemon slice.", + "durability": null, + "name": "Mixed blast", + "archery_ticket_price": "0", + "id": "9568" + }, + { + "examine": "This pineapple punch needs pouring, lime and pineapple chunks, and a orange slice.", + "durability": null, + "name": "Mixed punch", + "archery_ticket_price": "0", + "id": "9569" + }, + { + "examine": "This blurberry special needs pouring, orange and lemon chunks, a lime slice and equa leaves.", + "durability": null, + "name": "Mixed blurberry special", + "archery_ticket_price": "0", + "id": "9570" + }, + { + "examine": "This choco chip crunchy needs baking and garnishing with chocolate dust.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9577" + }, + { + "examine": "This choco chip crunchy needs garnishing with chocolate dust.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9578" + }, + { + "examine": "This spicy crunchy needs baking and garnishing with gnome spices.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9579" + }, + { + "examine": "This spicy crunchy needs garnishing with gnome spices.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9580" + }, + { + "examine": "This toad crunchy needs baking and garnishing with equa leaves.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9581" + }, + { + "examine": "This toad crunchy needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9582" + }, + { + "examine": "This worm crunchy needs baking and garnishing with gnome spices.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9583" + }, + { + "examine": "This worm crunchy needs garnishing with gnome spices.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9584" + }, + { + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9585" + }, + { + "durability": null, + "name": "Crunchy tray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9586" + }, + { + "durability": null, + "name": "Gnomebowl mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9587" + }, + { + "durability": null, + "name": "Raw crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9588" + }, + { + "destroy_message": "Speak to Sir Amik Varze at the beginning of the Black Knight's Fortress Quest.", + "examine": "A dossier containing info on the Black Knight plot.", + "durability": null, + "name": "Dossier", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9589" + }, + { + "examine": "A dossier containing info on the Black Knight plot.", + "durability": null, + "name": "Dossier", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9590" + }, + { + "examine": "Glue made from tree sap and ground mud runes.", + "durability": null, + "name": "Magic glue", + "weight": "3", + "archery_ticket_price": "0", + "id": "9592" + }, + { + "examine": "This doesn't look like it will do anything interesting.", + "durability": null, + "name": "Weird gloop", + "tradeable": "false", + "destroy": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "9593" + }, + { + "examine": "Mud runes ground into a powder.", + "durability": null, + "name": "Ground mud runes", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9594" + }, + { + "examine": "A red circular crystalline disc.", + "durability": null, + "name": "Red circle", + "archery_ticket_price": "0", + "id": "9597" + }, + { + "examine": "A red triangular crystalline disc.", + "durability": null, + "name": "Red triangle", + "archery_ticket_price": "0", + "id": "9598" + }, + { + "examine": "A red square-shaped crystalline disc.", + "durability": null, + "name": "Red square", + "archery_ticket_price": "0", + "id": "9599" + }, + { + "examine": "A red pentagon shaped crystalline disc.", + "durability": null, + "name": "Red pentagon", + "archery_ticket_price": "0", + "id": "9600" + }, + { + "examine": "An orange circular crystalline disc.", + "durability": null, + "name": "Orange circle", + "archery_ticket_price": "0", + "id": "9601" + }, + { + "examine": "An orange triangular crystalline disc.", + "durability": null, + "name": "Orange triangle", + "archery_ticket_price": "0", + "id": "9602" + }, + { + "examine": "An orange square-shaped crystalline disc.", + "durability": null, + "name": "Orange square", + "archery_ticket_price": "0", + "id": "9603" + }, + { + "examine": "An orange pentagon shaped crystalline disc.", + "durability": null, + "name": "Orange pentagon", + "archery_ticket_price": "0", + "id": "9604" + }, + { + "examine": "A yellow circular crystalline disc.", + "durability": null, + "name": "Yellow circle", + "archery_ticket_price": "0", + "id": "9605" + }, + { + "examine": "A yellow triangular crystalline disc.", + "durability": null, + "name": "Yellow triangle", + "archery_ticket_price": "0", + "id": "9606" + }, + { + "examine": "A yellow square-shaped crystalline disc.", + "durability": null, + "name": "Yellow square", + "archery_ticket_price": "0", + "id": "9607" + }, + { + "examine": "A yellow pentagon shaped crystalline disc.", + "durability": null, + "name": "Yellow pentagon", + "archery_ticket_price": "0", + "id": "9608" + }, + { + "examine": "A green circular crystalline disc.", + "durability": null, + "name": "Green circle", + "archery_ticket_price": "0", + "id": "9609" + }, + { + "examine": "A green triangular crystalline disc.", + "durability": null, + "name": "Green triangle", + "archery_ticket_price": "0", + "id": "9610" + }, + { + "examine": "A green square shaped crystalline disc.", + "durability": null, + "name": "Green square", + "archery_ticket_price": "0", + "id": "9611" + }, + { + "examine": "A green pentagon shaped crystalline disc.", + "durability": null, + "name": "Green pentagon", + "archery_ticket_price": "0", + "id": "9612" + }, + { + "examine": "A blue circular crystalline disc.", + "durability": null, + "name": "Blue circle", + "archery_ticket_price": "0", + "id": "9613" + }, + { + "examine": "A blue triangular crystalline disc.", + "durability": null, + "name": "Blue triangle", + "archery_ticket_price": "0", + "id": "9614" + }, + { + "examine": "A blue square shaped crystalline disc.", + "durability": null, + "name": "Blue square", + "archery_ticket_price": "0", + "id": "9615" + }, + { + "examine": "A blue pentagon shaped crystalline disc.", + "durability": null, + "name": "Blue pentagon", + "archery_ticket_price": "0", + "id": "9616" + }, + { + "examine": "An indigo circular crystalline disc.", + "durability": null, + "name": "Indigo circle", + "archery_ticket_price": "0", + "id": "9617" + }, + { + "examine": "An indigo triangular crystalline disc.", + "durability": null, + "name": "Indigo triangle", + "archery_ticket_price": "0", + "id": "9618" + }, + { + "examine": "An indigo square shaped crystalline disc.", + "durability": null, + "name": "Indigo square", + "archery_ticket_price": "0", + "id": "9619" + }, + { + "examine": "An indigo pentagon shaped crystalline disc.", + "durability": null, + "name": "Indigo pentagon", + "archery_ticket_price": "0", + "id": "9620" + }, + { + "examine": "A violet circular crystalline disc.", + "durability": null, + "name": "Violet circle", + "archery_ticket_price": "0", + "id": "9621" + }, + { + "examine": "A violet triangular crystalline disc.", + "durability": null, + "name": "Violet triangle", + "archery_ticket_price": "0", + "id": "9622" + }, + { + "examine": "A violet square-shaped crystalline disc.", + "durability": null, + "name": "Violet square", + "archery_ticket_price": "0", + "id": "9623" + }, + { + "examine": "A violet pentagon shaped crystalline disc.", + "durability": null, + "name": "Violet pentagon", + "archery_ticket_price": "0", + "id": "9624" + }, + { + "destroy_message": "Maybe Brimstail will have another...", + "examine": "A magical saw.", + "durability": null, + "name": "Crystal saw", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9625", + "equipment_slot": "3" + }, + { + "destroy_message": "Maybe Brimstail will have another...", + "examine": "This small crystal seed looks grey and dead.", + "durability": null, + "name": "Small crystal seed", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9626" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "1265", + "ge_buy_limit": "100", + "examine": "As used by King Tyras personal guard.", + "durability": null, + "weight": "0.9", + "equipment_slot": "0", + "grand_exchange_price": "1406", + "name": "Tyras helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9629", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1406", + "durability": null, + "name": "Tyras helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9630" + }, + { + "examine": "This needs refining.", + "durability": null, + "name": "Daeyalt ore", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9632" + }, + { + "shop_price": "635", + "ge_buy_limit": "100", + "examine": "Dressing like the Vyrewatch could be a useful disguise in the ghetto of Meiyerditch.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "2160", + "name": "Vyrewatch top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9634", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2160", + "durability": null, + "name": "Vyrewatch top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9635" + }, + { + "shop_price": "635", + "ge_buy_limit": "100", + "examine": "Dress like a powerful Vyrewatch!", + "grand_exchange_price": "1204", + "durability": null, + "name": "Vyrewatch legs", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9636", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1204", + "durability": null, + "name": "Vyrewatch legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9637" + }, + { + "shop_price": "635", + "ge_buy_limit": "100", + "examine": "Dress like a powerful Vyrewatch!", + "grand_exchange_price": "2874", + "durability": null, + "name": "Vyrewatch shoes", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9638", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2874", + "durability": null, + "name": "Vyrewatch shoes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9639" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Could be used as a disguise in the ghetto of Meiyerditch.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "588", + "name": "Citizen top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9640", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "588", + "durability": null, + "name": "Citizen top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9641" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Could be used as a disguise in the ghetto of Meiyerditch.", + "grand_exchange_price": "491", + "durability": null, + "name": "Citizen trousers", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9642", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "491", + "durability": null, + "name": "Citizen trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9643" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Could be used as a disguise in the ghetto of Meiyerditch.", + "grand_exchange_price": "458", + "durability": null, + "name": "Citizen shoes", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9644", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "458", + "durability": null, + "name": "Citizen shoes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9645" + }, + { + "destroy_message": "You can get another sketch by using charcoal with papyrus, when on the wall near Castle Drakyn.", + "examine": "Northern approach of the castle.", + "durability": null, + "name": "Castle sketch 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9646" + }, + { + "destroy_message": "You can get another sketch by using charcoal with papyrus, when on the wall near Castle Drakyn.", + "examine": "Western approach of the castle.", + "durability": null, + "name": "Castle sketch 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9647" + }, + { + "destroy_message": "You can get another sketch by using charcoal with papyrus, when on the wall near Castle Drakyn.", + "examine": "Southern approach of the castle.", + "durability": null, + "name": "Castle sketch 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9648" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A key to some large, strange door.", + "durability": null, + "name": "Large ornate key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9651" + }, + { + "destroy_message": "Unknown You can reclaim this item from the place you found it.", + "examine": "A book called Haemalchemy Volume 1.", + "durability": null, + "name": "Haemalchemy", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9652" + }, + { + "destroy_message": "Safalaan gave you this message; he would probably write out another one for you.", + "examine": "A sealed message from Safalaan to Valiaf.", + "durability": null, + "name": "Sealed message", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9653" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A key to the Witch's house's front door. (Witch's House)", + "durability": null, + "name": "Door key", + "archery_ticket_price": "0", + "id": "9654" + }, + { + "destroy_message": "You found this ladder top on a wall section in the north of Meiyerditch; you can get another one there.", + "examine": "The top part of a ladder.", + "durability": null, + "name": "Ladder top", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9655" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A tome of experience that awards 2000 XP per chapter.", + "durability": null, + "name": "Tome of xp (3)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9656" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A tome of experience that awards 2000 XP per chapter.", + "durability": null, + "name": "Tome of xp (2)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9657" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A tome of experience that awards 2000 XP per chapter.", + "durability": null, + "name": "Tome of xp (1)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9658" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9659" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9660" + }, + { + "destroy_message": "Safalaan gave you this key as a reward for helping out in Meiyerditch, you can get another key from him.", + "examine": "A key allowing a shortcut into the Sanguinesti region. (Darkness of Hallowvale)", + "durability": null, + "name": "Shortcut key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9662" + }, + { + "durability": null, + "name": "Torch", + "archery_ticket_price": "0", + "id": "9665", + "equipment_slot": "3" + }, + { + "shop_price": "25000", + "ge_buy_limit": "100", + "examine": "Unknown edit", + "grand_exchange_price": "27500", + "durability": null, + "name": "Pros'yte harness m", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "9666" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27500", + "durability": null, + "name": "Pros'yte harness m", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9667" + }, + { + "shop_price": "20000", + "ge_buy_limit": "100", + "examine": "Unknown edit", + "grand_exchange_price": "22700", + "durability": null, + "name": "Initiate harness m", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "9668" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22700", + "durability": null, + "name": "Initiate harness m", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9669" + }, + { + "shop_price": "25000", + "ge_buy_limit": "100", + "examine": "Unknown edit", + "grand_exchange_price": "27900", + "durability": null, + "name": "Pros'yte harness f", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "9670" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27900", + "durability": null, + "name": "Pros'yte harness f", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9671" + }, + { + "remove_head": "true", + "requirements": "{1,30}-{5,20}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's helm.", + "durability": null, + "weight": "2", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "4619", + "name": "Proselyte sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9672", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,4,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4619", + "durability": null, + "name": "Proselyte sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9673" + }, + { + "requirements": "{1,30}-{5,20}", + "shop_price": "12000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's armour.", + "durability": null, + "weight": "8.6", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "7076", + "name": "Proselyte hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9674", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,8,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7076", + "durability": null, + "name": "Proselyte hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9675" + }, + { + "requirements": "{1,30}-{5,20}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's leg armour", + "durability": null, + "weight": "7.7", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "5923", + "name": "Proselyte cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9676", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5923", + "durability": null, + "name": "Proselyte cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9677" + }, + { + "requirements": "{1,30}-{5,20}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's leg armour.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "5730", + "name": "Proselyte tasset", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9678", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5730", + "durability": null, + "name": "Proselyte tasset", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9679" + }, + { + "examine": "A rendered down baby sea slug.", + "durability": null, + "name": "Sea slug glue", + "archery_ticket_price": "0", + "id": "9680" + }, + { + "destroy_message": "As a security precaution, your CommOrb will automatically self", + "examine": "A Temple Knight Communication Orb. Top Secret!", + "durability": null, + "name": "Commorb v2", + "archery_ticket_price": "0", + "id": "9681" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A copy of the mysterious glyphs.", + "durability": null, + "name": "Door transcription", + "archery_ticket_price": "0", + "id": "9682" + }, + { + "examine": "Dead sea slug, very sticky.", + "durability": null, + "name": "Dead sea slug", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9683" + }, + { + "destroy_message": "You can get this page from Mayor Hobb's Desk.", + "examine": "A page from Maledict's holy book.", + "durability": null, + "name": "Page 1", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9684" + }, + { + "destroy_message": "You can get this page from Ezekial Lovecraft.", + "examine": "A page from Maledict's holy book.", + "durability": null, + "name": "Page 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9685" + }, + { + "destroy_message": "You will have to get the torn page from Col. O' Niall.", + "examine": "A page from Maledict's holy book.", + "durability": null, + "name": "Page 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9686" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A piece of torn page.", + "durability": null, + "name": "Fragment 1", + "archery_ticket_price": "0", + "id": "9687" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A piece of torn page.", + "durability": null, + "name": "Fragment 2", + "archery_ticket_price": "0", + "id": "9688" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A piece of torn page.", + "durability": null, + "name": "Fragment 3", + "archery_ticket_price": "0", + "id": "9689" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank water rune.", + "durability": null, + "name": "Blank water rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9690" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9691" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank air rune.", + "durability": null, + "name": "Blank air rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9692" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "9", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9693" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank earth rune.", + "durability": null, + "name": "Blank earth rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9694" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "7", + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9695" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank mind rune.", + "durability": null, + "name": "Blank mind rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9696" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "Used for basic missile spells.", + "grand_exchange_price": "6", + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9697" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank fire rune.", + "durability": null, + "name": "Blank fire rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9698" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "16", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9699" + }, + { + "durability": null, + "name": "Torch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9701" + }, + { + "examine": "A big, bad troll.", + "durability": null, + "name": "Stick", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "9702", + "weapon_interface": "5", + "equipment_slot": "3" + }, + { + "shop_price": "35", + "examine": "Basic training sword.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "attack_audios": "2500,2500,2517,2500", + "name": "Training sword", + "archery_ticket_price": "0", + "id": "9703", + "bonuses": "4,3,-2,0,0,0,2,1,0,0,0,5,0,0,0" + }, + { + "examine": "Made of flimsy painted wood.", + "durability": null, + "name": "Training shield", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "9704", + "bonuses": "0,0,0,0,0,4,5,3,1,4,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Light and flexible, good for a beginner.", + "durability": null, + "destroy": "true", + "weight": "1.3", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "attack_audios": "2700,0,0,0", + "name": "Training bow", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9705", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Standard training arrows.", + "durability": null, + "name": "Training arrows", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9706", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "examine": "Book of the elemental shield.", + "durability": null, + "name": "Slashed book", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9715" + }, + { + "examine": "Book of the elemental helm.", + "durability": null, + "name": "Beaten book", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9717" + }, + { + "examine": "On the subject of lava dippers.", + "durability": null, + "name": "Crane schematic", + "archery_ticket_price": "0", + "id": "9718" + }, + { + "examine": "A scroll with a lever schematic drawn on it.", + "durability": null, + "name": "Lever schematic", + "archery_ticket_price": "0", + "id": "9719" + }, + { + "examine": "A crane claw.", + "durability": null, + "name": "Crane claw", + "weight": "1", + "archery_ticket_price": "0", + "id": "9720" + }, + { + "examine": "A pipe that belongs in a cannon stand.", + "durability": null, + "name": "Pipe", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9723" + }, + { + "examine": "A large cog.", + "durability": null, + "name": "Large cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "9724" + }, + { + "examine": "A medium cog.", + "durability": null, + "name": "Medium cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "9725" + }, + { + "examine": "A small cog.", + "durability": null, + "name": "Small cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "9726" + }, + { + "examine": "A primed elemental ingot.", + "durability": null, + "name": "Primed bar", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "9727" + }, + { + "examine": "An elemental mind ingot.", + "durability": null, + "name": "Elemental mind bar", + "weight": "1", + "archery_ticket_price": "0", + "id": "9728" + }, + { + "ge_buy_limit": "100", + "examine": "A helmet made in the Elemental Workshop.", + "grand_exchange_price": "196", + "durability": null, + "name": "Elemental helmet", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9729", + "bonuses": "0,0,0,0,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "196", + "durability": null, + "name": "Elemental helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9730" + }, + { + "ge_buy_limit": "100", + "examine": "A shield made in the Elemental Workshop.", + "grand_exchange_price": "8351", + "durability": null, + "name": "Mind shield", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9731", + "bonuses": "0,0,0,0,0,0,0,0,9,0,25,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8351", + "durability": null, + "name": "Mind shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9732" + }, + { + "shop_price": "1200", + "ge_buy_limit": "100", + "examine": "A helmet made in the Elemental Workshop.", + "grand_exchange_price": "1589", + "durability": null, + "name": "Mind helmet", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9733", + "bonuses": "0,0,0,0,0,0,0,0,6,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1589", + "durability": null, + "name": "Mind helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9734" + }, + { + "ge_buy_limit": "10000", + "examine": "Not much good for blowing.", + "grand_exchange_price": "902", + "durability": null, + "name": "Desert goat horn", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9735" + }, + { + "ge_buy_limit": "10000", + "examine": "Finely ground desert goat horn.", + "grand_exchange_price": "1082", + "durability": null, + "name": "Goat horn dust", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9736" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1082", + "durability": null, + "name": "Goat horn dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9737" + }, + { + "durability": null, + "name": "Desert goat horn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9738" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "4 doses of combat potion.", + "grand_exchange_price": "45", + "durability": null, + "name": "Combat potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9739" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "45", + "durability": null, + "name": "Combat potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9740" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "3 doses of combat potion.", + "grand_exchange_price": "25", + "durability": null, + "name": "Combat potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9741" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Combat potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9742" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "2 doses of combat potion.", + "grand_exchange_price": "19", + "durability": null, + "name": "Combat potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9743" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Combat potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9744" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "1 dose of combat potion.", + "grand_exchange_price": "72", + "durability": null, + "name": "Combat potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9745" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "72", + "durability": null, + "name": "Combat potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9746" + }, + { + "requirements": "{0,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of attack.", + "durability": null, + "name": "Attack cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9747", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{0,99}", + "durability": null, + "name": "Attack cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9748", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{0,99}", + "shop_price": "99000", + "examine": "Attack skillcape hood.", + "durability": null, + "name": "Attack hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9749", + "equipment_slot": "0" + }, + { + "requirements": "{2,99}", + "shop_price": "99000", + "examine": "The cape only worn by the strongest people.", + "durability": null, + "name": "Strength cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9750", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{2,99}", + "durability": null, + "name": "Strength cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9751", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{2,99}", + "shop_price": "99000", + "examine": "Strength skillcape hood.", + "durability": null, + "name": "Strength hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9752", + "equipment_slot": "0" + }, + { + "requirements": "{1,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of the art of Defence.", + "durability": null, + "name": "Defence cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9753", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{1,99}", + "durability": null, + "name": "Defence cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9754", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{1,99}", + "shop_price": "99000", + "examine": "Defence skillcape hood.", + "durability": null, + "name": "Defence hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9755", + "equipment_slot": "0" + }, + { + "requirements": "{4,99}", + "shop_price": "99000", + "examine": "The cape worn by master archers.", + "durability": null, + "name": "Ranging cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9756", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{4,99}", + "durability": null, + "name": "Ranging cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9757", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{4,99}", + "shop_price": "99000", + "examine": "Range skillcape hood.", + "durability": null, + "name": "Ranging hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9758", + "equipment_slot": "0" + }, + { + "requirements": "{5,99}", + "shop_price": "99000", + "examine": "The cape worn by the most pious of heroes.", + "durability": null, + "name": "Prayer cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9759", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{5,99}", + "durability": null, + "name": "Prayer cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9760", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{5,99}", + "shop_price": "99000", + "examine": "Prayer skillcape hood.", + "durability": null, + "name": "Prayer hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9761", + "equipment_slot": "0" + }, + { + "requirements": "{6,99}", + "shop_price": "99000", + "examine": "The cape worn by the most powerful mages.", + "durability": null, + "name": "Magic cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9762", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{6,99}", + "durability": null, + "name": "Magic cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9763", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{6,99}", + "shop_price": "99000", + "examine": "Magic skillcape hood.", + "durability": null, + "name": "Magic hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9764", + "equipment_slot": "0" + }, + { + "requirements": "{20,99}", + "shop_price": "99000", + "examine": "The cape worn by master runecrafters.", + "durability": null, + "name": "Runecraft cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9765", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{20,99}", + "durability": null, + "name": "Runecraft cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9766", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{20,99}", + "shop_price": "99000", + "examine": "Runecrafting skillcape hood.", + "durability": null, + "name": "Runecrafting hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9767", + "equipment_slot": "0" + }, + { + "requirements": "{3,99}", + "shop_price": "99000", + "examine": "The cape worn by well-constituted adventurers.", + "durability": null, + "name": "Hitpoints cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9768", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{3,99}", + "durability": null, + "name": "Hitpoints cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9769", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{3,99}", + "shop_price": "99000", + "examine": "Constitution skillcape hood.", + "durability": null, + "name": "Hitpoints hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9770", + "equipment_slot": "0" + }, + { + "requirements": "{16,99}", + "shop_price": "99000", + "examine": "The cape worn by the most agile of heroes.", + "durability": null, + "name": "Agility cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9771", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{16,99}", + "durability": null, + "name": "Agility cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9772", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{16,99}", + "shop_price": "99000", + "examine": "Agility skillcape hood.", + "durability": null, + "name": "Agility hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9773", + "equipment_slot": "0" + }, + { + "requirements": "{15,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled at the art of herblore.", + "durability": null, + "name": "Herblore cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9774", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{15,99}", + "durability": null, + "name": "Herblore cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9775", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{15,99}", + "shop_price": "99000", + "examine": "Herblore skillcape hood.", + "durability": null, + "name": "Herblore hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9776", + "equipment_slot": "0" + }, + { + "requirements": "{17,99}", + "shop_price": "99000", + "examine": "The cape worn by master thieves.", + "durability": null, + "name": "Thieving cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9777", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{17,99}", + "durability": null, + "name": "Thieving cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9778", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{17,99}", + "shop_price": "99000", + "examine": "Thieving skillcape hood.", + "durability": null, + "name": "Thieving hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9779", + "equipment_slot": "0" + }, + { + "requirements": "{12,99}", + "shop_price": "99000", + "examine": "The cape worn by master craftworkers.", + "durability": null, + "name": "Crafting cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9780", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{12,99}", + "durability": null, + "name": "Crafting cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9781", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{12,99}", + "shop_price": "99000", + "examine": "Crafting skillcape hood.", + "durability": null, + "name": "Crafting hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9782", + "equipment_slot": "0" + }, + { + "requirements": "{9,99}", + "shop_price": "99000", + "examine": "The cape worn by the best of fletchers.", + "durability": null, + "name": "Fletching cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9783", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{9,99}", + "durability": null, + "name": "Fletching cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9784", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{9,99}", + "shop_price": "99000", + "examine": "Fletching skillcape hood.", + "durability": null, + "name": "Fletching hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9785", + "equipment_slot": "0" + }, + { + "requirements": "{18,99}", + "shop_price": "99000", + "examine": "The cape worn by slayer masters.", + "durability": null, + "name": "Slayer cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9786", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{18,99}", + "durability": null, + "name": "Slayer cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9787", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{18,99}", + "shop_price": "99000", + "examine": "Slayer skillcape hood.", + "durability": null, + "name": "Slayer hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9788", + "equipment_slot": "0" + }, + { + "requirements": "{22,99}", + "shop_price": "99000", + "examine": "The cape worn by master builders.", + "durability": null, + "name": "Construct. cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9789", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{22,99}", + "durability": null, + "name": "Construct. cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9790", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{22,99}", + "shop_price": "99000", + "examine": "Construction skillcape hood.", + "durability": null, + "name": "Construct. hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9791", + "equipment_slot": "0" + }, + { + "requirements": "{14,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled miners.", + "durability": null, + "name": "Mining cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9792", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{14,99}", + "durability": null, + "name": "Mining cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9793", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{14,99}", + "shop_price": "99000", + "examine": "Mining skillcape hood.", + "durability": null, + "name": "Mining hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9794", + "equipment_slot": "0" + }, + { + "requirements": "{13,99}", + "shop_price": "99000", + "examine": "The cape worn by master smiths.", + "durability": null, + "name": "Smithing cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9795", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{13,99}", + "durability": null, + "name": "Smithing cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9796", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{13,99}", + "shop_price": "99000", + "examine": "Smithing skillcape hood.", + "durability": null, + "name": "Smithing hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9797", + "equipment_slot": "0" + }, + { + "requirements": "{10,99}", + "shop_price": "99000", + "examine": "The cape worn by the best fishermen.", + "durability": null, + "name": "Fishing cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9798", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{10,99}", + "durability": null, + "name": "Fishing cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9799", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{10,99}", + "shop_price": "99000", + "examine": "Fishing skillcape hood.", + "durability": null, + "name": "Fishing hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9800", + "equipment_slot": "0" + }, + { + "requirements": "{7,99}", + "shop_price": "99000", + "examine": "The cape worn by the world's best chefs.", + "durability": null, + "name": "Cooking cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9801", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{7,99}", + "durability": null, + "name": "Cooking cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9802", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{7,99}", + "shop_price": "99000", + "examine": "Cooking skillcape hood.", + "durability": null, + "name": "Cooking hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9803", + "equipment_slot": "0" + }, + { + "requirements": "{11,99}", + "shop_price": "99000", + "examine": "The cape worn by master firelighters.", + "durability": null, + "name": "Firemaking cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9804", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{11,99}", + "durability": null, + "name": "Firemaking cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9805", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{11,99}", + "shop_price": "99000", + "examine": "Firemaking skillcape hood.", + "durability": null, + "name": "Firemaking hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9806", + "equipment_slot": "0" + }, + { + "requirements": "{8,99}", + "shop_price": "99000", + "examine": "The cape worn by master woodcutters (Obtaining level 99 skill)", + "durability": null, + "name": "Woodcutting cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9807", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{8,99}", + "durability": null, + "name": "Woodcut. cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9808", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{8,99}", + "shop_price": "99000", + "examine": "Woodcutting skillcape hood.", + "durability": null, + "name": "Woodcutting hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9809", + "equipment_slot": "0" + }, + { + "requirements": "{19,99}", + "shop_price": "99000", + "examine": "The cape worn by master farmers.", + "durability": null, + "name": "Farming cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9810", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{19,99}", + "durability": null, + "name": "Farming cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9811", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{19,99}", + "shop_price": "99000", + "examine": "Farming skillcape hood.", + "durability": null, + "name": "Farming hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9812", + "equipment_slot": "0" + }, + { + "shop_price": "99000", + "examine": "The cape worn by only the most experienced adventurers.", + "durability": null, + "name": "Quest point cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9813", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "shop_price": "99000", + "examine": "Quest skillcape hood.", + "durability": null, + "name": "Quest point hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9814", + "equipment_slot": "0" + }, + { + "examine": "A woolly bobble hat.", + "durability": null, + "name": "Bobble hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "9815", + "equipment_slot": "0" + }, + { + "examine": "A woolly scarf.", + "durability": null, + "name": "Bobble scarf", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "9816", + "equipment_slot": "2" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak cape rack", + "archery_ticket_price": "0", + "id": "9817" + }, + { + "grand_exchange_price": "88", + "durability": null, + "name": "Teak cape rack", + "archery_ticket_price": "0", + "id": "9818" + }, + { + "grand_exchange_price": "120", + "durability": null, + "name": "M'gany cape rack", + "archery_ticket_price": "0", + "id": "9819" + }, + { + "grand_exchange_price": "136025", + "durability": null, + "name": "Gilded cape rack", + "archery_ticket_price": "0", + "id": "9820" + }, + { + "grand_exchange_price": "328598", + "durability": null, + "name": "Marble cape rack", + "archery_ticket_price": "0", + "id": "9821" + }, + { + "grand_exchange_price": "979747", + "durability": null, + "name": "Magical cape rack", + "archery_ticket_price": "0", + "id": "9822" + }, + { + "grand_exchange_price": "59", + "durability": null, + "name": "Oak costume box", + "archery_ticket_price": "0", + "id": "9823" + }, + { + "grand_exchange_price": "122", + "durability": null, + "name": "Teak costume box", + "archery_ticket_price": "0", + "id": "9824" + }, + { + "grand_exchange_price": "59", + "durability": null, + "name": "Mahogany cos box", + "archery_ticket_price": "0", + "id": "9825" + }, + { + "grand_exchange_price": "15", + "durability": null, + "name": "Oak armour case", + "archery_ticket_price": "0", + "id": "9826" + }, + { + "grand_exchange_price": "27", + "durability": null, + "name": "Teak armour case", + "archery_ticket_price": "0", + "id": "9827" + }, + { + "grand_exchange_price": "90", + "durability": null, + "name": "M'gany arm'r case", + "archery_ticket_price": "0", + "id": "9828" + }, + { + "grand_exchange_price": "103", + "durability": null, + "name": "Oak magic wardrobe", + "archery_ticket_price": "0", + "id": "9829" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak magic wardrobe", + "archery_ticket_price": "0", + "id": "9830" + }, + { + "grand_exchange_price": "127", + "durability": null, + "name": "Teak magic wardrobe", + "archery_ticket_price": "0", + "id": "9831" + }, + { + "grand_exchange_price": "13", + "durability": null, + "name": "Carved teak magic wardrobe", + "archery_ticket_price": "0", + "id": "9832" + }, + { + "grand_exchange_price": "135", + "durability": null, + "name": "Mahogany magic wardrobe", + "archery_ticket_price": "0", + "id": "9833" + }, + { + "grand_exchange_price": "137267", + "durability": null, + "name": "Gilded magic wardrobe", + "archery_ticket_price": "0", + "id": "9834" + }, + { + "grand_exchange_price": "341567", + "durability": null, + "name": "Marble magic wardrobe", + "archery_ticket_price": "0", + "id": "9835" + }, + { + "grand_exchange_price": "21", + "durability": null, + "name": "Oak toy box", + "archery_ticket_price": "0", + "id": "9836" + }, + { + "grand_exchange_price": "151", + "durability": null, + "name": "Teak toy box", + "archery_ticket_price": "0", + "id": "9837" + }, + { + "grand_exchange_price": "20", + "durability": null, + "name": "Mahogany toy box", + "archery_ticket_price": "0", + "id": "9838" + }, + { + "grand_exchange_price": "21", + "durability": null, + "name": "Oak treasure chest", + "archery_ticket_price": "0", + "id": "9839" + }, + { + "grand_exchange_price": "157", + "durability": null, + "name": "Teak treas' chest", + "archery_ticket_price": "0", + "id": "9840" + }, + { + "grand_exchange_price": "39", + "durability": null, + "name": "M'gany treas' chest", + "archery_ticket_price": "0", + "id": "9841" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3", + "examine": "A ready-to-assemble oak cape rack.", + "durability": null, + "name": "Oak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9843" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92", + "examine": "A ready-to-assemble teak cape rack..", + "durability": null, + "name": "Teak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9844" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "examine": "A ready-to-assemble mahogany cape rack.", + "durability": null, + "name": "M'gany cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9845" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "130900", + "examine": "A ready-to-assemble gilded mahogany rack.", + "durability": null, + "name": "Gilded cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9846" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "329500", + "examine": "A ready-to-assemble marble cape rack.", + "durability": null, + "name": "Marble cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9847" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1000000", + "examine": "A ready-to-assemble magic cape rack.", + "durability": null, + "name": "Magical cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9848" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "examine": "A ready-to-assemble oak toy box.", + "durability": null, + "name": "Oak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9849" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "165", + "examine": "A ready-to-assemble teak toy box.", + "durability": null, + "name": "Teak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9850" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "examine": "A ready-to-assemble mahogany toy box.", + "durability": null, + "name": "Mahogany toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9851" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "examine": "A ready-to-assemble oak magic wardrobe.", + "durability": null, + "name": "Oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9852" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak magic wardrobe.", + "durability": null, + "name": "Carved oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9853" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "133", + "examine": "A ready-to-assemble teak magic wardrobe.", + "durability": null, + "name": "Teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9854" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "examine": "A ready-to-assemble carved teak magic wardrobe.", + "durability": null, + "name": "Carved teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9855" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "129", + "examine": "A ready-to-assemble mahogany magic wardrobe.", + "durability": null, + "name": "Mahogany magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9856" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137700", + "examine": "A ready-to-assemble gilded mahogany magic wardrobe.", + "durability": null, + "name": "Gilded magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9857" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "335800", + "examine": "A ready-to-assemble marble magic wardrobe.", + "durability": null, + "name": "Marble magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9858" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "examine": "A ready-to-assemble oak armour case.", + "durability": null, + "name": "Oak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9859" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29", + "examine": "A ready-to-assemble teak armour case.", + "durability": null, + "name": "Teak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9860" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "88", + "examine": "A ready-to-assemble mahogany armour case.", + "durability": null, + "name": "M'gany arm'r case", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9861" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24", + "examine": "A ready-to-assemble oak treasure chest.", + "durability": null, + "name": "Oak treasure chest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9862" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "164", + "examine": "A ready-to-assemble teak treasure chest.", + "durability": null, + "name": "Teak treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9863" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "41", + "examine": "A ready-to-assemble mahogany treasure chest.", + "durability": null, + "name": "M'gany treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9864" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "62", + "durability": null, + "name": "Oak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9865" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "135", + "durability": null, + "name": "Teak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9866" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60", + "durability": null, + "name": "Mahogany cos box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9867" + }, + { + "durability": null, + "name": "Oak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9868" + }, + { + "durability": null, + "name": "Teak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9869" + }, + { + "durability": null, + "name": "M'gany cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9870" + }, + { + "durability": null, + "name": "Gilded cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9871" + }, + { + "durability": null, + "name": "Marble cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9872" + }, + { + "durability": null, + "name": "Magical cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9873" + }, + { + "durability": null, + "name": "Oak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9874" + }, + { + "durability": null, + "name": "Teak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9875" + }, + { + "durability": null, + "name": "Mahogany toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9876" + }, + { + "durability": null, + "name": "Oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9877" + }, + { + "durability": null, + "name": "Carved oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9878" + }, + { + "durability": null, + "name": "Teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9879" + }, + { + "durability": null, + "name": "Carved teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9880" + }, + { + "durability": null, + "name": "Mahogany magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9881" + }, + { + "durability": null, + "name": "Gilded magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9882" + }, + { + "durability": null, + "name": "Marble magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9883" + }, + { + "durability": null, + "name": "Oak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9884" + }, + { + "durability": null, + "name": "Teak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9885" + }, + { + "durability": null, + "name": "M'gany arm'r case", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9886" + }, + { + "durability": null, + "name": "Oak treasure chest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9887" + }, + { + "durability": null, + "name": "Teak treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9888" + }, + { + "durability": null, + "name": "M'gany treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9889" + }, + { + "durability": null, + "name": "Oak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9890" + }, + { + "durability": null, + "name": "Teak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9891" + }, + { + "durability": null, + "name": "Mahogany cos box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9892" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A lump that at some point might have been a gout tuber.", + "durability": null, + "name": "Goutweedy lump", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9901" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pile of gout tubers suitable for use in mountainous terrain.", + "durability": null, + "name": "Hardy gout tubers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9902" + }, + { + "destroy_message": "My Arm will probably have a spare copy.", + "examine": "Farmer Gricoller's Farming Manual.", + "durability": null, + "name": "Farming manual", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9903" + }, + { + "examine": "A book for sailors.", + "durability": null, + "name": "Sailing book", + "archery_ticket_price": "0", + "id": "9904" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9906", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9907", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9908", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9909", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9910", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9911", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9912", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A white destabiliser for use in a ghost buster.", + "durability": null, + "name": "White destabiliser", + "archery_ticket_price": "0", + "id": "9913", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A red destabiliser for use in a ghost buster.", + "durability": null, + "name": "Red destabiliser", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9914", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A blue destabiliser for use in a ghost buster.", + "durability": null, + "name": "Blue destabiliser", + "archery_ticket_price": "0", + "id": "9915", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A green destabiliser for use in a ghost buster.", + "durability": null, + "name": "Green destabiliser", + "archery_ticket_price": "0", + "id": "9916", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A yellow destabiliser for use in a ghost buster.", + "durability": null, + "name": "Yellow destabiliser", + "archery_ticket_price": "0", + "id": "9917", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A black destabiliser for use in a ghost buster.", + "durability": null, + "name": "Black destabiliser", + "archery_ticket_price": "0", + "id": "9918", + "equipment_slot": "5" + }, + { + "examine": "An angry-looking tree root.", + "durability": null, + "name": "Evil root", + "archery_ticket_price": "0", + "id": "9919" + }, + { + "remove_head": "true", + "destroy_message": "Players may get another from Diango in Draynor Village.", + "examine": "Better not light it!", + "durability": null, + "name": "Jack lantern mask", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9920", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Skeleton feet.", + "durability": null, + "name": "Skeleton boots", + "weight": "2", + "archery_ticket_price": "0", + "id": "9921", + "equipment_slot": "10" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some skeletal gloves.", + "durability": null, + "name": "Skeleton gloves", + "weight": "2", + "archery_ticket_price": "0", + "id": "9922", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Does my pelvis look big in this?", + "durability": null, + "name": "Skeleton leggings", + "weight": "2", + "archery_ticket_price": "0", + "id": "9923", + "equipment_slot": "7" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "remove_sleeves": "true", + "examine": "The shirt of a fully body skeleton costume.", + "durability": null, + "name": "Skeleton shirt", + "weight": "2", + "archery_ticket_price": "0", + "id": "9924", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scary skeleton mask.", + "durability": null, + "name": "Skeleton mask", + "weight": "2", + "archery_ticket_price": "0", + "id": "9925", + "equipment_slot": "0" + }, + { + "destroy_message": "You'll have to buy another one from Auguste on Entrana.", + "shop_price": "30000", + "examine": "This sapling is ready to be replanted in a tree patch.", + "durability": null, + "name": "Auguste's sapling", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9932" + }, + { + "examine": "An incomplete origami balloon.", + "durability": null, + "name": "Balloon structure", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9933" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Origami balloon", + "archery_ticket_price": "0", + "id": "9934" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Yellow balloon", + "archery_ticket_price": "0", + "id": "9935" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Blue balloon", + "archery_ticket_price": "0", + "id": "9936" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Red balloon", + "archery_ticket_price": "0", + "id": "9937" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Orange balloon", + "archery_ticket_price": "0", + "id": "9938" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Green balloon", + "archery_ticket_price": "0", + "id": "9939" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Purple balloon", + "archery_ticket_price": "0", + "id": "9940" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Pink balloon", + "archery_ticket_price": "0", + "id": "9941" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Black balloon", + "archery_ticket_price": "0", + "id": "9942" + }, + { + "examine": "A bag full of sand.", + "durability": null, + "name": "Sandbag", + "weight": "1", + "archery_ticket_price": "0", + "id": "9943", + "equipment_slot": "3" + }, + { + "destroy_message": "You'll have to visit Auguste on Entrana to get a new jacket.", + "remove_sleeves": "true", + "examine": "For all your flying needs.", + "durability": null, + "name": "Bomber jacket", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9944", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You'll have to visit Auguste on Entrana to get a new cap.", + "examine": "The red baron would be jealous.", + "durability": null, + "name": "Bomber cap", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9945", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "For better flying vision.", + "durability": null, + "name": "Cap and goggles", + "archery_ticket_price": "0", + "id": "9946", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A red coloured disk that's seen better days.", + "durability": null, + "name": "Old red disk", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9947" + }, + { + "requirements": "{21,99}", + "shop_price": "99000", + "examine": "The cape worn by master hunters.", + "durability": null, + "name": "Hunter cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9948", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,99}", + "durability": null, + "name": "Hunter cape(t)", + "archery_ticket_price": "0", + "id": "9949", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{21,99}", + "shop_price": "99000", + "examine": "Hunter skillcape hood.", + "durability": null, + "name": "Hunter hood", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9950", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Imp", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "9952" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9953" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9954" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9955" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9956" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9957" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9958" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9959" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9960" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9961" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9962" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9963" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9964" + }, + { + "examine": "It appears to be protecting the nest.", + "durability": null, + "name": "Giant eagle", + "archery_ticket_price": "0", + "id": "9974" + }, + { + "examine": "Aww, how cute. ", + "durability": null, + "name": "Rabbit", + "archery_ticket_price": "0", + "id": "9975" + }, + { + "examine": "Even more volatile than its vegetarian counterpart.", + "grand_exchange_price": "796", + "durability": null, + "name": "Red chinchompa", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "9977", + "bonuses": "0,0,0,0,70,0,0,0,0,0,0,0,15,0,0" + }, + { + "shop_price": "63", + "ge_buy_limit": "10000", + "examine": "This certainly needs cooking!", + "grand_exchange_price": "204", + "durability": null, + "name": "Raw bird meat", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "9978" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "204", + "durability": null, + "name": "Raw bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9979" + }, + { + "ge_buy_limit": "1000", + "examine": "A nicely roasted bird.", + "grand_exchange_price": "18", + "durability": null, + "name": "Roast bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9980" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "18", + "durability": null, + "name": "Roast bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9981" + }, + { + "durability": null, + "name": "Burnt bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9983" + }, + { + "shop_price": "63", + "ge_buy_limit": "1000", + "examine": "This certainly needs cooking!", + "grand_exchange_price": "130", + "durability": null, + "name": "Skewered bird meat", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "9984" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "130", + "durability": null, + "name": "Skewered bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9985" + }, + { + "ge_buy_limit": "1000", + "examine": "A slab of raw beast meat.", + "grand_exchange_price": "16", + "durability": null, + "name": "Raw beast meat", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9986" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "16", + "durability": null, + "name": "Raw beast meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9987" + }, + { + "ge_buy_limit": "1000", + "examine": "A delicious looking slab of roast beast.", + "grand_exchange_price": "42", + "durability": null, + "name": "Roast beast meat", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9988" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "42", + "durability": null, + "name": "Roast beast meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9989" + }, + { + "durability": null, + "name": "Burnt beast meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9991" + }, + { + "ge_buy_limit": "1000", + "examine": "Beast meat on a spit.", + "grand_exchange_price": "97", + "durability": null, + "name": "Skewered beast", + "tradeable": "true", + "weight": "3.5", + "archery_ticket_price": "0", + "id": "9992" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "97", + "durability": null, + "name": "Skewered beast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9993" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of chopped tomatoes with an extra kick.", + "grand_exchange_price": "324", + "durability": null, + "name": "Spicy tomato", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9994" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "324", + "durability": null, + "name": "Spicy tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9995" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of chopped beef with an extra kick.", + "grand_exchange_price": "263", + "durability": null, + "name": "Spicy minced meat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9996" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "263", + "durability": null, + "name": "Spicy minced meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9997" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of hunter potion.", + "grand_exchange_price": "566", + "durability": null, + "name": "Hunter potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9998" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "566", + "durability": null, + "name": "Hunter potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9999" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of hunter potion.", + "grand_exchange_price": "229", + "durability": null, + "name": "Hunter potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10000" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "229", + "durability": null, + "name": "Hunter potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10001" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of hunter potion.", + "grand_exchange_price": "159", + "durability": null, + "name": "Hunter potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10002" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "159", + "durability": null, + "name": "Hunter potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10003" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of hunter potion.", + "grand_exchange_price": "148", + "durability": null, + "name": "Hunter potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10004" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "148", + "durability": null, + "name": "Hunter potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10005" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A simple bird catcher./There's something caught in it.", + "grand_exchange_price": "2", + "durability": null, + "name": "Bird snare", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10006" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Bird snare", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10007" + }, + { + "requirements": "{21,27}", + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "If a creature goes inside, then the box should slam shut.", + "grand_exchange_price": "308", + "durability": null, + "name": "Box trap", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10008" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "308", + "durability": null, + "name": "Box trap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10009" + }, + { + "requirements": "{21,15}", + "shop_price": "24", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "For catching butterflies...", + "walk_anim": "1205", + "durability": null, + "weight": "0.2", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "weapon_interface": "10", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1", + "stand_anim": "813", + "name": "Butterfly net", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10010", + "stand_turn_anim": "1209" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Butterfly net", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10011" + }, + { + "requirements": "{21,15}", + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "It's got little holes at the top.", + "grand_exchange_price": "156", + "durability": null, + "name": "Butterfly jar", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10012" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156", + "durability": null, + "name": "Butterfly jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10013" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "143", + "examine": "There's a black warlock butterfly in here.", + "durability": null, + "name": "Black warlock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10014" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "143", + "durability": null, + "name": "Black warlock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10015" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "227", + "examine": "There's a snowy knight butterfly in here.", + "durability": null, + "name": "Snowy knight", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10016" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "227", + "durability": null, + "name": "Snowy knight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10017" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "180", + "examine": "There's a sapphire glacialis butterfly in here.", + "durability": null, + "name": "Sapphire glacialis", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10018" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "180", + "durability": null, + "name": "Sapphire glacialis", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10019" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1270", + "examine": "There's a ruby harvest butterfly in here.", + "durability": null, + "name": "Ruby harvest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10020" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1270", + "durability": null, + "name": "Ruby harvest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10021" + }, + { + "shop_price": "500", + "examine": "A very large, single leather glove", + "durability": null, + "name": "Falconer's glove", + "tradeable": "false", + "destroy": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "10023", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "500", + "turn90cw_anim": "5166", + "examine": "A very large, single leather glove", + "walk_anim": "5164", + "durability": null, + "destroy": "true", + "weight": "1.8", + "turn90ccw_anim": "5167", + "attack_speed": "4", + "turn180_anim": "5165", + "render_anim": "1283", + "equipment_slot": "3", + "stand_anim": "5160", + "name": "Falconer's glove", + "tradeable": "false", + "run_anim": "5168", + "archery_ticket_price": "0", + "id": "10024", + "stand_turn_anim": "5161", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0" + }, + { + "requirements": "{21,71}", + "shop_price": "720", + "ge_buy_limit": "100", + "examine": "A magical catching box.", + "grand_exchange_price": "784", + "durability": null, + "name": "Magic box", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10025" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "784", + "durability": null, + "name": "Magic box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10026" + }, + { + "shop_price": "720", + "examine": "A magical catching box.", + "grand_exchange_price": "743", + "durability": null, + "name": "Imp-in-a-box(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10027" + }, + { + "shop_price": "720", + "examine": "A magical catching box.", + "grand_exchange_price": "743", + "durability": null, + "name": "Imp-in-a-box(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10028" + }, + { + "requirements": "{21,31}", + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "Reduces the risk of hand severage when poking large, vicious carnivores.", + "durability": null, + "weight": "1", + "weapon_interface": "6", + "equipment_slot": "3", + "grand_exchange_price": "1", + "name": "Teasing stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10029", + "bonuses": "7,8,0,-4,0,-1,1,2,0,0,0,8,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Teasing stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10030" + }, + { + "requirements": "{21,27}", + "shop_price": "18", + "ge_buy_limit": "100", + "examine": "The snare will tighten around animals passing through.", + "grand_exchange_price": "1", + "durability": null, + "name": "Rabbit snare", + "tradeable": "true", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "10031" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Rabbit snare", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10032" + }, + { + "requirements": "{4,45}", + "ge_buy_limit": "20000", + "turn90cw_anim": "3177", + "walk_anim": "3177", + "durability": null, + "turn90ccw_anim": "3177", + "attack_speed": "4", + "weapon_interface": "19", + "turn180_anim": "3177", + "render_anim": "234", + "equipment_slot": "3", + "grand_exchange_price": "973", + "stand_anim": "3175", + "name": "Chinchompa", + "run_anim": "3178", + "archery_ticket_price": "0", + "id": "10033", + "stand_turn_anim": "3177", + "bonuses": "0,0,0,0,45,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,55}", + "ge_buy_limit": "20000", + "turn90cw_anim": "3177", + "examine": "Even more volatile than its vegetarian counterpart.", + "walk_anim": "3177", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "3177", + "attack_speed": "4", + "weapon_interface": "19", + "turn180_anim": "3177", + "render_anim": "234", + "equipment_slot": "3", + "grand_exchange_price": "1382", + "stand_anim": "3175", + "name": "Red chinchompa", + "tradeable": "true", + "run_anim": "3178", + "archery_ticket_price": "0", + "id": "10034", + "stand_turn_anim": "3177", + "bonuses": "0,0,0,0,70,0,0,0,0,0,0,0,0,0,15" + }, + { + "requirements": "{21,52}", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in polar areas.", + "grand_exchange_price": "449", + "durability": null, + "name": "Kyatt legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10035", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,10,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "449", + "durability": null, + "name": "Kyatt legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10036" + }, + { + "requirements": "{21,52}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in polar areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "272", + "name": "Kyatt top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10037", + "bonuses": "0,0,0,0,0,10,15,19,0,12,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "272", + "durability": null, + "name": "Kyatt top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10038" + }, + { + "remove_head": "true", + "requirements": "{21,52}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in polar areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "grand_exchange_price": "8338", + "name": "Kyatt hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10039", + "bonuses": "0,0,0,0,-1,4,5,3,0,4,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8338", + "durability": null, + "name": "Kyatt hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10040" + }, + { + "requirements": "{21,28}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "grand_exchange_price": "2889", + "durability": null, + "name": "Larupia legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10041", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,5,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2889", + "durability": null, + "name": "Larupia legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10042" + }, + { + "requirements": "{21,28}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "3232", + "name": "Larupia top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10043", + "bonuses": "0,0,0,0,0,10,15,19,0,12,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3232", + "durability": null, + "name": "Larupia top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10044" + }, + { + "remove_head": "true", + "requirements": "{21,28}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "grand_exchange_price": "7237", + "name": "Larupia hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10045", + "bonuses": "0,0,0,0,-1,4,5,3,0,4,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7237", + "durability": null, + "name": "Larupia hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10046" + }, + { + "requirements": "{21,38}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "7", + "grand_exchange_price": "266", + "name": "Graahk legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10047", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "266", + "durability": null, + "name": "Graahk legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10048" + }, + { + "requirements": "{21,38}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "252", + "name": "Graahk top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10049", + "bonuses": "0,0,0,0,0,10,15,19,0,12,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "252", + "durability": null, + "name": "Graahk top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10050" + }, + { + "remove_head": "true", + "requirements": "{21,38}", + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "grand_exchange_price": "8445", + "name": "Graahk headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10051", + "bonuses": "0,0,0,0,-1,4,5,3,0,4,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8445", + "durability": null, + "name": "Graahk headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10052" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in wooded areas.", + "grand_exchange_price": "3527", + "durability": null, + "name": "Wood camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10053", + "bonuses": "0,0,0,0,0,10,15,19,0,12,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3527", + "durability": null, + "name": "Wood camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10054" + }, + { + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in wooded areas.", + "grand_exchange_price": "3228", + "durability": null, + "name": "Wood camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10055", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3228", + "durability": null, + "name": "Wood camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10056" + }, + { + "requirements": "{21,4}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in jungle areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "315", + "name": "Jungle camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10057", + "bonuses": "0,0,0,0,0,10,15,19,0,12,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "315", + "durability": null, + "name": "Jungle camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10058" + }, + { + "requirements": "{21,4}", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in jungle areas.", + "grand_exchange_price": "462", + "durability": null, + "name": "Jungle camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10059", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "462", + "durability": null, + "name": "Jungle camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10060" + }, + { + "requirements": "{21,10}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "541", + "name": "Desert camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10061", + "bonuses": "0,0,0,0,0,10,15,19,0,12,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "541", + "durability": null, + "name": "Desert camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10062" + }, + { + "requirements": "{21,10}", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in desert areas.", + "grand_exchange_price": "910", + "durability": null, + "name": "Desert camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10063", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "910", + "durability": null, + "name": "Desert camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10064" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in polar areas.", + "grand_exchange_price": "7990", + "durability": null, + "name": "Polar camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10065", + "bonuses": "0,0,0,0,0,10,15,19,0,12,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7990", + "durability": null, + "name": "Polar camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10066" + }, + { + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in polar areas", + "grand_exchange_price": "8389", + "durability": null, + "name": "Polar camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10067", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8389", + "durability": null, + "name": "Polar camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10068" + }, + { + "requirements": "{21,40}", + "ge_buy_limit": "100", + "examine": "A surprisingly aerodynamic cape.", + "grand_exchange_price": "1140", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "weight": "-2.2", + "archery_ticket_price": "0", + "id": "10069", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1140", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10070" + }, + { + "requirements": "{21,66}", + "ge_buy_limit": "100", + "examine": "A really surprisingly aerodynamic cape.", + "grand_exchange_price": "1262", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "weight": "-4.5", + "archery_ticket_price": "0", + "id": "10071", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1262", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10072" + }, + { + "requirements": "{21,40}", + "examine": "A surprisingly aerodynamic cape.", + "grand_exchange_price": "951", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10073", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,66}", + "examine": "A really surprisingly aerodynamic cape.", + "grand_exchange_price": "881", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10074", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,54}", + "ge_buy_limit": "100", + "examine": "Made from dark kebbit fur, these are perfect for tasks of a stealthier nature.", + "grand_exchange_price": "1063", + "durability": null, + "name": "Gloves of silence", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10075", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1063", + "durability": null, + "name": "Gloves of silence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10076" + }, + { + "ge_buy_limit": "100", + "examine": "Attack at your own risk.", + "grand_exchange_price": "80", + "durability": null, + "name": "Spiky vambraces", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10077", + "bonuses": "0,0,0,0,4,2,2,1,0,0,1,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "80", + "durability": null, + "name": "Spiky vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10078" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "100", + "examine": "Made from 100% real dragonhide. Now with added spikiness.", + "grand_exchange_price": "1353", + "durability": null, + "name": "Green spiky vambs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10079", + "bonuses": "0,0,0,-10,8,3,2,4,2,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1353", + "durability": null, + "name": "Green spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10080" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "100", + "examine": "Made from 100% real dragonhide. Now with added spikiness.", + "grand_exchange_price": "1773", + "durability": null, + "name": "Blue spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10081", + "bonuses": "0,0,0,-10,9,4,3,5,4,0,4,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1773", + "durability": null, + "name": "Blue spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10082" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "100", + "examine": "Vambraces made from 100% real dragonhide. Now with added spikes.", + "grand_exchange_price": "1978", + "durability": null, + "name": "Red spiky vambs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10083", + "bonuses": "0,0,0,-10,10,5,4,6,6,0,5,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1978", + "durability": null, + "name": "Red spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10084" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "100", + "examine": "Vambraces made from 100% real dragonhide. Now with added spikiness.", + "grand_exchange_price": "2727", + "durability": null, + "name": "Black spiky vambs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10085", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2727", + "durability": null, + "name": "Black spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10086" + }, + { + "ge_buy_limit": "5000", + "examine": "Attractive to other birds and hunters alike.", + "grand_exchange_price": "20", + "durability": null, + "name": "Stripy feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10087" + }, + { + "shop_price": "3", + "ge_buy_limit": "5000", + "examine": "A vivid red feather.", + "grand_exchange_price": "23", + "durability": null, + "name": "Red feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10088" + }, + { + "ge_buy_limit": "5000", + "examine": "A cool blue feather.", + "grand_exchange_price": "27", + "durability": null, + "name": "Blue feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10089" + }, + { + "ge_buy_limit": "5000", + "examine": "A bright yellow feather.", + "grand_exchange_price": "36", + "durability": null, + "name": "Yellow feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10090" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "A fairly plain feather.", + "grand_exchange_price": "25", + "durability": null, + "name": "Orange feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10091" + }, + { + "ge_buy_limit": "100", + "examine": "It's a shabby-looking larupia fur.", + "grand_exchange_price": "1195", + "durability": null, + "name": "Tatty larupia fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10093" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1195", + "durability": null, + "name": "Tatty larupia fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10094" + }, + { + "ge_buy_limit": "100", + "examine": "It's a perfect-looking larupia fur.", + "grand_exchange_price": "4986", + "durability": null, + "name": "Larupia fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10095" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4986", + "durability": null, + "name": "Larupia fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10096" + }, + { + "ge_buy_limit": "100", + "examine": "It's a shabby-looking graahk fur.", + "grand_exchange_price": "28", + "durability": null, + "name": "Tatty graahk fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10097" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28", + "durability": null, + "name": "Tatty graahk fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10098" + }, + { + "ge_buy_limit": "100", + "examine": "It's a perfect-looking graahk fur.", + "grand_exchange_price": "7574", + "durability": null, + "name": "Graahk fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10099" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7574", + "durability": null, + "name": "Graahk fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10100" + }, + { + "ge_buy_limit": "100", + "examine": "It's a shabby-looking kyatt fur.", + "grand_exchange_price": "23", + "durability": null, + "name": "Tatty kyatt fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10101" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23", + "durability": null, + "name": "Tatty kyatt fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10102" + }, + { + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "It's a perfect-looking kyatt fur.", + "grand_exchange_price": "11100", + "durability": null, + "name": "Kyatt fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10103" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11100", + "durability": null, + "name": "Kyatt fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10104" + }, + { + "ge_buy_limit": "5000", + "examine": "These bone spikes are both very tough and very sharp.", + "grand_exchange_price": "154", + "durability": null, + "name": "Kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10105" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "154", + "durability": null, + "name": "Kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10106" + }, + { + "ge_buy_limit": "5000", + "examine": "These bone spikes are both very tough and very sharp.", + "grand_exchange_price": "1619", + "durability": null, + "name": "Long kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10107" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1619", + "durability": null, + "name": "Long kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10108" + }, + { + "ge_buy_limit": "5000", + "examine": "A kebbit-sized set of dentures.", + "grand_exchange_price": "894", + "durability": null, + "name": "Kebbit teeth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10109" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "894", + "durability": null, + "name": "Kebbit teeth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10110" + }, + { + "ge_buy_limit": "5000", + "examine": "Previously a kebbit-sized set of dentures.", + "grand_exchange_price": "947", + "durability": null, + "name": "Kebbit teeth dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10111" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "947", + "durability": null, + "name": "Kebbit teeth dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10112" + }, + { + "ge_buy_limit": "5000", + "examine": "More menacing when attached to the owner.", + "grand_exchange_price": "55", + "durability": null, + "name": "Kebbit claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10113" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "55", + "durability": null, + "name": "Kebbit claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10114" + }, + { + "ge_buy_limit": "100", + "examine": "Sleek, silent, and furry.", + "grand_exchange_price": "92", + "durability": null, + "name": "Dark kebbit fur", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10115" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92", + "durability": null, + "name": "Dark kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10116" + }, + { + "shop_price": "12", + "ge_buy_limit": "175", + "examine": "A thick fur for a cold climate.", + "grand_exchange_price": "3862", + "durability": null, + "name": "Polar kebbit fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10117" + }, + { + "ge_buy_limit": "175", + "grand_exchange_price": "3862", + "durability": null, + "name": "Polar kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10118" + }, + { + "ge_buy_limit": "100", + "examine": "Not actually from a weasel, but it is, at least, furry.", + "grand_exchange_price": "3", + "durability": null, + "name": "Feldip weasel fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10119" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3", + "durability": null, + "name": "Feldip weasel fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10120" + }, + { + "ge_buy_limit": "100", + "examine": "Common fur from a common kebbit.", + "grand_exchange_price": "1555", + "durability": null, + "name": "Common kebbit fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10121" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1555", + "durability": null, + "name": "Common kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10122" + }, + { + "ge_buy_limit": "100", + "examine": "Sandy coloured kebbit fur.", + "grand_exchange_price": "95", + "durability": null, + "name": "Desert devil fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10123" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "95", + "durability": null, + "name": "Desert devil fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10124" + }, + { + "ge_buy_limit": "100", + "examine": "Maybe this is why people think furry dice make you go faster.", + "grand_exchange_price": "8", + "durability": null, + "name": "Spotted kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10125" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Spotted kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10126" + }, + { + "ge_buy_limit": "100", + "examine": "Nature's equivalent of go-faster stripes.", + "grand_exchange_price": "69", + "durability": null, + "name": "Dashing kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10127" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "69", + "durability": null, + "name": "Dashing kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10128" + }, + { + "requirements": "{10,35}", + "ge_buy_limit": "100", + "examine": "A mighty Hunter weapon. One previous owner.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "19", + "name": "Barb-tail harpoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10129", + "bonuses": "9,4,-4,0,0,0,0,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Barb-tail harpoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10130" + }, + { + "requirements": "{21,24}", + "ge_buy_limit": "100", + "examine": "Not so lucky for the rabbit.", + "grand_exchange_price": "789", + "durability": null, + "name": "Strung rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10132", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "789", + "durability": null, + "name": "Strung rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10133" + }, + { + "ge_buy_limit": "100", + "examine": "This could be put on a string and worn for luck.", + "grand_exchange_price": "543", + "durability": null, + "name": "Rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10134" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "543", + "durability": null, + "name": "Rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10135" + }, + { + "shop_price": "48", + "ge_buy_limit": "10000", + "examine": "Well, this would certainly add some colour to a meal.", + "grand_exchange_price": "99", + "durability": null, + "name": "Rainbow fish", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10136" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "99", + "durability": null, + "name": "Rainbow fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10137" + }, + { + "ge_buy_limit": "20000", + "examine": "A colourful fish, attracted to colourful flies.", + "grand_exchange_price": "236", + "durability": null, + "name": "Raw rainbow fish", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10138" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "236", + "durability": null, + "name": "Raw rainbow fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10139" + }, + { + "durability": null, + "name": "Burnt rainbow fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10141" + }, + { + "requirements": "{0,30}-{4,30}-{6,30}", + "ge_buy_limit": "10000", + "examine": "A thick, foul-smelling, tar-like substance with a green tinge", + "grand_exchange_price": "28", + "durability": null, + "name": "Guam tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10142", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{0,50}-{4,50}-{6,50}", + "ge_buy_limit": "10000", + "examine": "A thick, foul-smelling, tar-like substance with an orange tinge.", + "grand_exchange_price": "12", + "durability": null, + "name": "Marrentill tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10143", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{0,60}-{4,60}-{6,60}", + "ge_buy_limit": "10000", + "examine": "A thick, foul-smelling, tar-like substance with a red tinge.", + "grand_exchange_price": "28", + "durability": null, + "name": "Tarromin tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10144", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{0,70}-{4,70}-{6,70}", + "ge_buy_limit": "10000", + "examine": "A dark, thick, foul-smelling, tar-like substance.", + "grand_exchange_price": "47", + "durability": null, + "name": "Harralander tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10145", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "5245", + "examine": "Slightly slimy, but kind of cute.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "6", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10146", + "stand_turn_anim": "823", + "bonuses": "0,19,0,0,29,0,0,0,0,0,0,31,0,0,0", + "requirements": "{0,50}-{4,50}-{6,50}", + "shop_price": "127", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Orange salamander" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "5245", + "examine": "Slightly slimy but certainly striking.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "27", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10147", + "stand_turn_anim": "823", + "bonuses": "0,37,0,0,47,0,0,0,0,0,0,49,0,0,0", + "requirements": "{0,60}-{4,60}-{6,60}", + "shop_price": "190", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Red salamander" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "5245", + "examine": "Slightly slimy and somewhat menacing.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "124", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10148", + "stand_turn_anim": "823", + "bonuses": "0,59,0,0,69,0,0,0,0,0,0,71,0,0,0", + "requirements": "{0,70}-{4,70}-{6,70}", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Black salamander" + }, + { + "ge_buy_limit": "2000", + "turn90cw_anim": "5245", + "examine": "A very slimy and generally disgusting green lizard.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "1802", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10149", + "stand_turn_anim": "823", + "bonuses": "0,10,0,0,20,0,0,0,0,0,0,22,0,0,0", + "requirements": "{0,30}-{4,30}-{6,30}", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Swamp lizard" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A noose on a stick.", + "walk_anim": "5250", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "5251", + "render_anim": "1279", + "equipment_slot": "3", + "grand_exchange_price": "1", + "stand_anim": "5254", + "name": "Noose wand", + "tradeable": "true", + "run_anim": "5253", + "archery_ticket_price": "0", + "id": "10150", + "stand_turn_anim": "5252" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Noose wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10151" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "100", + "shop_price": "1300", + "turn90cw_anim": "821", + "examine": "A weapon made of bone and wood.", + "walk_anim": "4226", + "durability": null, + "weight": "5", + "turn90ccw_anim": "822", + "attack_speed": "4", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "grand_exchange_price": "2496", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "tradeable": "true", + "name": "Hunters' crossbow", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "10156", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,55,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2496", + "durability": null, + "name": "Hunters' crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10157" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "1000", + "examine": "Bolts made from the spikes of a prickly kebbit.", + "grand_exchange_price": "28", + "durability": null, + "name": "Kebbit bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10158", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "1000", + "examine": "Bolts made from the spikes of a razor-backed kebbit.", + "grand_exchange_price": "352", + "durability": null, + "name": "Long kebbit bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10159", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,38", + "equipment_slot": "13" + }, + { + "durability": null, + "name": "Orange salamander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10160" + }, + { + "durability": null, + "name": "Red salamander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10161" + }, + { + "durability": null, + "name": "Black salamander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10162" + }, + { + "durability": null, + "name": "Swamp lizard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10163" + }, + { + "examine": "Probably a bit too big for fly fishing.", + "durability": null, + "name": "Eagle feather", + "archery_ticket_price": "0", + "id": "10167" + }, + { + "examine": "A cape made from giant eagle feathers.", + "durability": null, + "name": "Eagle cape", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10171", + "equipment_slot": "1" + }, + { + "examine": "A cheaply made fake beak.", + "durability": null, + "name": "Fake beak", + "archery_ticket_price": "0", + "id": "10172", + "equipment_slot": "0" + }, + { + "examine": "The title reads 'William Oddity's Guide to the Avian.", + "durability": null, + "name": "Bird book", + "archery_ticket_price": "0", + "id": "10173" + }, + { + "destroy_message": "You can obtain another metal feather from the camp", + "examine": "A small feather made out of some sort of metal. The detail is exquisite.", + "durability": null, + "name": "Metal feather", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10174" + }, + { + "destroy_message": "You can get another by inspecting the opening", + "examine": "An intricate feather crafted from a silver-coloured metal of some sort.", + "durability": null, + "name": "Silver feather", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10176" + }, + { + "destroy_message": "You can get another by taking from pedestal.", + "examine": "An intricate feather crafted from a bronze-coloured metal of some sort.", + "durability": null, + "name": "Bronze feather", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10177" + }, + { + "examine": "\"It looks like bird seed, but it's not quite right somehow.", + "durability": null, + "name": "Odd bird seed", + "archery_ticket_price": "0", + "id": "10178" + }, + { + "examine": "There's a feather glued to the front. \"Property of Arthur Artimus\".", + "durability": null, + "name": "Feathered journal", + "archery_ticket_price": "0", + "id": "10179" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10180" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10181" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10182" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10183" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10184" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10185" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10186" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10187" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10188" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10189" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10190" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10191" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10192" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10193" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10194" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10195" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10196" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10197" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10198" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10199" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10200" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10201" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10202" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10203" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10204" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10205" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10206" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10207" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10208" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10209" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10210" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10211" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10212" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10213" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10214" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10215" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10216" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10217" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10218" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10219" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10220" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10221" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10222" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10223" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10224" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10225" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10226" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10227" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10228" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10229" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10230" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10231" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10232" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10233" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10234" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10235" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10236" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10237" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10238" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10239" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10240" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10241" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10242" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10243" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10244" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10245" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10246" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10247" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10248" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10249" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10250" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10251" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10252" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10253" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10254" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10255" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10256" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10257" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10258" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10259" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10260" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10261" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10262" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10263" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10264" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10265" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10266" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10267" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10268" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10269" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10270" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10271" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10272" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10273" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10274" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10275" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10276" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10277" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10278" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10279" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A powerful bow made from willow.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "equipment_slot": "3", + "grand_exchange_price": "136", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10280", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,22,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,20}", + "durability": null, + "weight": "1.8", + "weapon_interface": "16", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Willow comp bow" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "136", + "durability": null, + "name": "Willow comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10281" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A powerful bow made from yew wood.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "equipment_slot": "3", + "grand_exchange_price": "876", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10282", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,49,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,40}", + "durability": null, + "weight": "1.8", + "weapon_interface": "16", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Yew comp bow" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "876", + "durability": null, + "name": "Yew comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10283" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A powerful bow made from magic wood.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "equipment_slot": "3", + "grand_exchange_price": "1268", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10284", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,71,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,50}", + "durability": null, + "weight": "1.3", + "weapon_interface": "16", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Magic comp bow" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1268", + "durability": null, + "name": "Magic comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10285" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "23600", + "name": "Rune helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10286", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "23600", + "durability": null, + "name": "Rune helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10287" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "20800", + "name": "Rune helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10288", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20800", + "durability": null, + "name": "Rune helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10289" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "20800", + "name": "Rune helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10290", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20800", + "durability": null, + "name": "Rune helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10291" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "21100", + "name": "Rune helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10292", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "21100", + "durability": null, + "name": "Rune helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10293" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "24900", + "name": "Rune helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10294", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "24900", + "durability": null, + "name": "Rune helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10295" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "31500", + "name": "Adamant helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10296", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "31500", + "durability": null, + "name": "Adamant helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10297" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "10100", + "name": "Adamant helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10298", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10100", + "durability": null, + "name": "Adamant helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10299" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "8797", + "name": "Adamant helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10300", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8797", + "durability": null, + "name": "Adamant helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10301" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An Adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "10900", + "name": "Adamant helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10302", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10900", + "durability": null, + "name": "Adamant helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10303" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "17100", + "name": "Adamant helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10304", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "17100", + "durability": null, + "name": "Adamant helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10305" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "20400", + "name": "Black helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10306", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20400", + "durability": null, + "name": "Black helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10307" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "7033", + "name": "Black helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10308", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7033", + "durability": null, + "name": "Black helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10309" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "7574", + "name": "Black helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10310", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7574", + "durability": null, + "name": "Black helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10311" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "10100", + "name": "Black helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10312", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10100", + "durability": null, + "name": "Black helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10313" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "10400", + "name": "Black helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10314", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10400", + "durability": null, + "name": "Black helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10315" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "8196", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10316", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8196", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10317" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "14700", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10318", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14700", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10319" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "8403", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10320", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8403", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10321" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "9230", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10322", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "9230", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10323" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "8197", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10324", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8197", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10325" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "112", + "durability": null, + "name": "Purple firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10326" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "167", + "durability": null, + "name": "White firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10327" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "White logs", + "archery_ticket_price": "0", + "id": "10328" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Purple logs", + "archery_ticket_price": "0", + "id": "10329" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "4", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "33900000", + "name": "3rd age range top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10330", + "bonuses": "0,0,0,-15,30,55,47,60,60,55,52,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "33900000", + "durability": null, + "name": "3rd age range top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10331" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "6", + "absorb": "0,4,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "20800000", + "name": "3rd age range legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10332", + "bonuses": "0,0,0,-10,17,31,25,33,30,31,25,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20800000", + "durability": null, + "name": "3rd age range legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10333" + }, + { + "remove_head": "true", + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "5000", + "examine": "Ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "6100000", + "name": "3rd age range coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10334", + "bonuses": "0,0,0,-2,9,4,7,10,5,8,12,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "6100000", + "durability": null, + "name": "3rd age range coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10335" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "1", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "7100000", + "name": "3rd age vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10336", + "bonuses": "0,0,0,-10,11,6,5,7,9,0,5,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7100000", + "durability": null, + "name": "3rd age vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10337" + }, + { + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "durability": null, + "weight": "2.5", + "absorb": "4,2,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "66500000", + "name": "3rd age robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10338", + "bonuses": "0,0,0,24,0,0,0,0,24,0,24,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "66500000", + "durability": null, + "name": "3rd age robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10339" + }, + { + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "durability": null, + "weight": "1", + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "31500000", + "name": "3rd age robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10340", + "bonuses": "0,0,0,19,0,0,0,0,19,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "31500000", + "durability": null, + "name": "3rd age robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10341" + }, + { + "remove_head": "true", + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "durability": null, + "absorb": "2,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21000000", + "name": "3rd age mage hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10342", + "bonuses": "0,0,0,8,0,0,0,0,8,0,12,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "21000000", + "durability": null, + "name": "3rd age mage hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10343" + }, + { + "lendable": "true", + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "20100000", + "durability": null, + "name": "3rd age amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10344", + "bonuses": "0,0,0,15,0,0,0,0,10,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20100000", + "durability": null, + "name": "3rd age amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10345" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "2", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "92800000", + "name": "3rd age platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10346", + "bonuses": "0,0,0,-25,-2,78,76,83,-5,75,25,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "92800000", + "durability": null, + "name": "3rd age platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10347" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "9", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "86200000", + "name": "3rd age platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10348", + "bonuses": "0,0,0,-20,0,96,108,113,-4,97,52,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "86200000", + "durability": null, + "name": "3rd age platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10349" + }, + { + "remove_head": "true", + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "1", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "41600000", + "name": "3rd age full helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10350", + "bonuses": "0,0,0,-5,-2,47,49,43,-3,48,12,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "41600000", + "durability": null, + "name": "3rd age full helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10351" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "2", + "absorb": "5,0,11", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "65100000", + "name": "3rd age kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10352", + "bonuses": "0,0,0,-10,-4,63,65,61,-3,63,60,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "65100000", + "durability": null, + "name": "3rd age kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10353" + }, + { + "ge_buy_limit": "100", + "examine": "A dragonstone amulet with 4 magic charges.", + "grand_exchange_price": "233100", + "durability": null, + "name": "Amulet of glory(t4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10354", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "233100", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10355" + }, + { + "examine": "A dragonstone amulet with 3 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10356", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10357" + }, + { + "examine": "A dragonstone amulet with 2 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10358", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10359" + }, + { + "examine": "A dragonstone amulet with 1 magic charge.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10360", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10361" + }, + { + "ge_buy_limit": "100", + "examine": "A very powerful dragonstone amulet with a nice trim.", + "grand_exchange_price": "223000", + "durability": null, + "name": "Amulet of glory(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10362", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "223000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10363" + }, + { + "ge_buy_limit": "2", + "examine": "An enchanted ruby amulet with a nice trim.", + "grand_exchange_price": "819400", + "durability": null, + "name": "Strength amulet(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10364", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,10,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "819400", + "durability": null, + "name": "Strength amulet(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10365" + }, + { + "ge_buy_limit": "5000", + "examine": "An enchanted sapphire amulet of magic.", + "grand_exchange_price": "128700", + "durability": null, + "name": "Amulet of magic(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10366", + "bonuses": "0,0,0,10,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "128700", + "durability": null, + "name": "Amulet of magic(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10367" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide vambraces.", + "grand_exchange_price": "116200", + "durability": null, + "name": "Zamorak bracers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10368", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "116200", + "durability": null, + "name": "Zamorak bracers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10369" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide body armour.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "155200", + "name": "Zamorak d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10370", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "155200", + "durability": null, + "name": "Zamorak d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10371" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide chaps.", + "durability": null, + "weight": "5", + "absorb": "0,4,2", + "equipment_slot": "7", + "grand_exchange_price": "35100", + "name": "Zamorak chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10372", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "35100", + "durability": null, + "name": "Zamorak chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10373" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide coif.", + "durability": null, + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "35900", + "name": "Zamorak coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10374", + "bonuses": "0,0,0,-1,7,4,7,10,4,8,8,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "35900", + "durability": null, + "name": "Zamorak coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10375" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide vambraces.", + "grand_exchange_price": "3181", + "durability": null, + "name": "Guthix bracers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10376", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3181", + "durability": null, + "name": "Guthix bracers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10377" + }, + { + "requirements": "{1,40}-{4,70}", + "shop_price": "13", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide body armour.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "39800", + "name": "Guthix dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10378", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "39800", + "durability": null, + "name": "Guthix dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10379" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide chaps.", + "durability": null, + "weight": "5", + "absorb": "0,4,2", + "equipment_slot": "7", + "grand_exchange_price": "7346", + "name": "Guthix chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10380", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7346", + "durability": null, + "name": "Guthix chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10381" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide coif.", + "durability": null, + "weight": "0.85", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "27500", + "name": "Guthix coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10382", + "bonuses": "0,0,0,-1,7,4,7,10,4,8,8,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "27500", + "durability": null, + "name": "Guthix coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10383" + }, + { + "requirements": "{1,70}-{4,40}", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide vambraces.", + "grand_exchange_price": "70800", + "durability": null, + "name": "Saradomin bracers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10384", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "70800", + "durability": null, + "name": "Saradomin bracers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10385" + }, + { + "requirements": "{1,40}-{4,70}", + "shop_price": "13000", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide body armour.", + "durability": null, + "destroy": "true", + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "164100", + "name": "Saradomin d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10386", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "164100", + "durability": null, + "name": "Saradomin d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10387" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide chaps.", + "grand_exchange_price": "36600", + "durability": null, + "name": "Saradomin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10388", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36600", + "durability": null, + "name": "Saradomin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10389" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide coif.", + "durability": null, + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "28000", + "name": "Saradomin coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10390", + "bonuses": "0,0,0,-1,7,4,7,10,4,8,8,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "28000", + "durability": null, + "name": "Saradomin coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10391" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A big 'do about nothing.", + "grand_exchange_price": "45400", + "durability": null, + "name": "A powdered wig", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10392", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "45400", + "durability": null, + "name": "A powdered wig", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10393" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "These'll help me stay alive.", + "grand_exchange_price": "448900", + "durability": null, + "name": "Flared trousers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10394", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "448900", + "durability": null, + "name": "Flared trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10395" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Alas, someone has slashed my pantaloons.", + "grand_exchange_price": "9863", + "durability": null, + "name": "Pantaloons", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10396", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "9863", + "durability": null, + "name": "Pantaloons", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10397" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A cap for wearing whil...zzzzzzzzz", + "grand_exchange_price": "276400", + "durability": null, + "name": "Sleeping cap", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10398", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "276400", + "durability": null, + "name": "Sleeping cap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10399" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant mans' black shirt.", + "grand_exchange_price": "921500", + "durability": null, + "name": "Black ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10400", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "921500", + "durability": null, + "name": "Black ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10401" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant black pair of pantaloons.", + "grand_exchange_price": "270700", + "durability": null, + "name": "Black ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10402", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "270700", + "durability": null, + "name": "Black ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10403" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant men's red shirt.", + "grand_exchange_price": "118600", + "durability": null, + "name": "Red ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10404", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "118600", + "durability": null, + "name": "Red ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10405" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant red pair of pantaloons.", + "grand_exchange_price": "39400", + "durability": null, + "name": "Red ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10406", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "39400", + "durability": null, + "name": "Red ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10407" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant mans' blue shirt.", + "grand_exchange_price": "134700", + "durability": null, + "name": "Blue ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10408", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "134700", + "durability": null, + "name": "Blue ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10409" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant pair of men's blue pantaloons", + "grand_exchange_price": "80700", + "durability": null, + "name": "Blue ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10410", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "80700", + "durability": null, + "name": "Blue ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10411" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant men's green shirt.", + "grand_exchange_price": "162600", + "durability": null, + "name": "Green ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10412", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "162600", + "durability": null, + "name": "Green ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10413" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant green pair of men's pantaloons.", + "grand_exchange_price": "36100", + "durability": null, + "name": "Green ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10414", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36100", + "durability": null, + "name": "Green ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10415" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant men's purple shirt.", + "grand_exchange_price": "116200", + "durability": null, + "name": "Purple ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10416", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "116200", + "durability": null, + "name": "Purple ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10417" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant purple pair of pantaloons.", + "grand_exchange_price": "73400", + "durability": null, + "name": "Purple ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10418", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "73400", + "durability": null, + "name": "Purple ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10419" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made ladies' elegant white blouse.", + "grand_exchange_price": "571500", + "durability": null, + "name": "White ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10420", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "571500", + "durability": null, + "name": "White ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10421" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant white skirt.", + "grand_exchange_price": "56600", + "durability": null, + "name": "White ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10422", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "56600", + "durability": null, + "name": "White ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10423" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant ladies' red blouse.", + "grand_exchange_price": "15000", + "durability": null, + "name": "Red ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10424", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "15000", + "durability": null, + "name": "Red ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10425" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant Red skirt.", + "grand_exchange_price": "7132", + "durability": null, + "name": "Red ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10426", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7132", + "durability": null, + "name": "Red ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10427" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made ladies' elegant blue blouse.", + "grand_exchange_price": "22200", + "durability": null, + "name": "Blue ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10428", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "22200", + "durability": null, + "name": "Blue ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10429" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant blue skirt.", + "grand_exchange_price": "12200", + "durability": null, + "name": "Blue ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10430", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "12200", + "durability": null, + "name": "Blue ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10431" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made ladies' elegant green blouse.", + "grand_exchange_price": "12300", + "durability": null, + "name": "Green ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10432", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "12300", + "durability": null, + "name": "Green ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10433" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant green skirt.", + "grand_exchange_price": "10300", + "durability": null, + "name": "Green ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10434", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10300", + "durability": null, + "name": "Green ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10435" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant ladies' purple blouse.", + "grand_exchange_price": "22800", + "durability": null, + "name": "Purple ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10436", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "22800", + "durability": null, + "name": "Purple ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10437" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant purple skirt.", + "grand_exchange_price": "16700", + "durability": null, + "name": "Purple ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10438", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "16700", + "durability": null, + "name": "Purple ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10439" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A Saradomin crozier.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "8611", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10440", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,6,0,0", + "requirements": "{5,60}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Saradomin crozier" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8611", + "durability": null, + "name": "Saradomin crozier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10441" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A Guthix crozier.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "2925", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10442", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,6,0,0", + "requirements": "{5,60}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Guthix crozier" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2925", + "durability": null, + "name": "Guthix crozier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10443" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A Zamorak crozier.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "2794", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10444", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,6,0,0", + "requirements": "{5,60}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Zamorak crozier" + }, + { + "attack_anims": "", + "ge_buy_limit": "2", + "grand_exchange_price": "2794", + "durability": null, + "name": "Zamorak crozier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10445" + }, + { + "requirements": "{5,40}", + "ge_buy_limit": "2", + "examine": "A Saradomin cloak.", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Saradomin cloak", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10446", + "bonuses": "0,0,0,1,0,3,3,3,3,3,3,0,3,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Saradomin cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10447" + }, + { + "requirements": "{5,40}", + "ge_buy_limit": "2", + "examine": "A Guthix cloak.", + "grand_exchange_price": "391000", + "durability": null, + "name": "Guthix cloak", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10448", + "bonuses": "0,0,0,1,0,3,3,3,3,3,3,0,3,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "391000", + "durability": null, + "name": "Guthix cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10449" + }, + { + "requirements": "{5,40}", + "ge_buy_limit": "2", + "examine": "A Zamorak cloak.", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Zamorak cloak", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10450", + "bonuses": "0,0,0,1,0,3,3,3,3,3,3,0,3,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Zamorak cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10451" + }, + { + "remove_head": "true", + "requirements": "{5,40}-{6,40}", + "ge_buy_limit": "2", + "examine": "A Saradomin mitre.", + "grand_exchange_price": "299200", + "durability": null, + "name": "Saradomin mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10452", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,5,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "299200", + "durability": null, + "name": "Saradomin mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10453" + }, + { + "remove_head": "true", + "requirements": "{5,40}-{6,40}", + "ge_buy_limit": "2", + "examine": "A Guthix mitre.", + "grand_exchange_price": "130300", + "durability": null, + "name": "Guthix mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10454", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,5,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "130300", + "durability": null, + "name": "Guthix mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10455" + }, + { + "remove_head": "true", + "requirements": "{5,40}-{6,40}", + "ge_buy_limit": "2", + "examine": "A Zamorak mitre.", + "durability": null, + "weight": "0.3", + "equipment_slot": "0", + "grand_exchange_price": "346500", + "name": "Zamorak mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10456", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,5,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "346500", + "durability": null, + "name": "Zamorak mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10457" + }, + { + "requirements": "{5,20}", + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "Blessed vestments of Saradomin.", + "grand_exchange_price": "121400", + "durability": null, + "name": "Saradomin robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10458", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "121400", + "durability": null, + "name": "Saradomin robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10459" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Zamorak Vestments.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "154700", + "name": "Zamorak robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10460", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "154700", + "durability": null, + "name": "Zamorak robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10461" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Blessed vestments of Guthix.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "75200", + "name": "Guthix robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10462", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "75200", + "durability": null, + "name": "Guthix robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10463" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Leggings from the Saradomin Vestments.", + "grand_exchange_price": "56300", + "durability": null, + "name": "Saradomin robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10464", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "56300", + "durability": null, + "name": "Saradomin robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10465" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Leggings from the Guthix Vestments.", + "grand_exchange_price": "56900", + "durability": null, + "name": "Guthix robe legs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10466", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "56900", + "durability": null, + "name": "Guthix robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10467" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Legs of the Zamorak Vestments.", + "grand_exchange_price": "79400", + "durability": null, + "name": "Zamorak robe legs", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "10468", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "79400", + "durability": null, + "name": "Zamorak robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10469" + }, + { + "requirements": "{5,60}", + "ge_buy_limit": "2", + "examine": "A Saradomin stole.", + "grand_exchange_price": "14000", + "durability": null, + "name": "Saradomin stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10470", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,10,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14000", + "durability": null, + "name": "Saradomin stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10471" + }, + { + "requirements": "{5,60}", + "ge_buy_limit": "2", + "examine": "A blessed stole.", + "grand_exchange_price": "3849", + "durability": null, + "name": "Guthix stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10472", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,10,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3849", + "durability": null, + "name": "Guthix stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10473" + }, + { + "requirements": "{5,60}", + "ge_buy_limit": "2", + "examine": "A Zamorak stole.", + "grand_exchange_price": "13700", + "durability": null, + "name": "Zamorak stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10474", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,10,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "13700", + "durability": null, + "name": "Zamorak stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10475" + }, + { + "ge_buy_limit": "1000", + "examine": "Remember to brush after eating!", + "grand_exchange_price": "22700", + "durability": null, + "name": "Purple sweets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10476" + }, + { + "durability": null, + "name": "Scroll", + "archery_ticket_price": "0", + "id": "10485", + "equipment_slot": "3" + }, + { + "shop_price": "1", + "examine": "An empty sack.", + "grand_exchange_price": "30", + "durability": null, + "name": "Empty sack", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10486" + }, + { + "turn90cw_anim": "821", + "examine": "Yup, definitely a chicken...an undead chicken.", + "walk_anim": "5364", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "12", + "turn180_anim": "5438", + "equip_audio": "3277", + "render_anim": "1171", + "equipment_slot": "3", + "stand_anim": "5363", + "name": "Undead chicken", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10487", + "stand_turn_anim": "823", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "destroy_message": "The Witch in Draynor supplies these bars.", + "examine": "An iron bar supplied by an insane old crone.", + "durability": null, + "name": "Selected iron", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10488", + "equipment_slot": "3" + }, + { + "destroy_message": "I can make another magnet using special bars. The Witch in Draynor supplies these bars.", + "examine": "A magnet designed for undead chicken use.", + "durability": null, + "name": "Bar magnet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10489" + }, + { + "destroy_message": "I can chop more wood from undead trees using my blessed axe.", + "examine": "Were they trying to escape just then?", + "durability": null, + "name": "Undead twigs", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10490" + }, + { + "examine": "It radiates purity but can still lop off heads.", + "durability": null, + "destroy": "true", + "weight": "1.1", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "equipment_slot": "3", + "destroy_message": "I can obtain a replacement axe from the Burthorpe Slayer Master.", + "name": "Blessed axe", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10491", + "bonuses": "-2,12,10,0,0,0,1,0,0,0,0,13,2,0,0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "These make no sense at all.", + "durability": null, + "name": "Research notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10492" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "They still make no sense, but look more meaningful now.", + "durability": null, + "name": "Translated notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10493" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Attach tab A to button B then fold along line C...", + "durability": null, + "name": "A pattern", + "archery_ticket_price": "0", + "id": "10494" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A desirable residence for discerning, undead chickens.", + "durability": null, + "name": "A container", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10495" + }, + { + "examine": "Shiny!", + "durability": null, + "name": "Polished buttons", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10496" + }, + { + "shop_price": "999", + "examine": "A bagged chicken ready to serve you, magnet in claw.", + "durability": null, + "destroy": "true", + "weight": "4.5", + "equip_audio": "3284", + "equipment_slot": "1", + "destroy_message": "I can buy a replacement from Ava in Draynor Manor; she will charge me 999 coins for this service.", + "name": "Ava's attractor", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10498", + "bonuses": "0,0,0,0,2,0,0,0,2,0,0,0,0,0,0" + }, + { + "shop_price": "999", + "examine": "A superior bagged chicken ready to serve you, magnet in claw.", + "durability": null, + "destroy": "true", + "weight": "4.5", + "equip_audio": "3284", + "equipment_slot": "1", + "destroy_message": "I can obtain a replacement for this from Ava in Draynor Manor. She will need 999 coins to buy the lower", + "name": "Ava's accumulator", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10499", + "bonuses": "0,0,0,0,4,0,1,0,4,0,0,0,0,0,0" + }, + { + "destroy_message": "I can obtain a replacement for this from the crone who lives west of the Port Phasmatys farm.", + "examine": "Allows the ghost farmer to talk to Alice - a breakthrough!", + "durability": null, + "name": "Crone-made amulet", + "tradeable": "false", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10500", + "equipment_slot": "2" + }, + { + "examine": "Made from snow. / It's a ball of snow! Uncanny. / How did this not melt in the box?", + "durability": null, + "name": "Snowball", + "archery_ticket_price": "0", + "id": "10501", + "weapon_interface": "18", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,1", + "equipment_slot": "3" + }, + { + "examine": "A gublinch frozen and crumbled into shards.", + "durability": null, + "name": "Gublinch shards", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "10506" + }, + { + "remove_head": "true", + "destroy_message": "You can reclaim this item from the place you found it. this item", + "examine": "A reindeer hat and a matching flashing nose.", + "durability": null, + "name": "Reindeer hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10507", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A wintumber tree for your player-owned house.", + "durability": null, + "name": "Wintumber tree", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "10508" + }, + { + "examine": "Made from snow. / It's a ball of snow! Uncanny. / How did this not melt in the box?", + "durability": null, + "name": "Snowball", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10509" + }, + { + "durability": null, + "name": "Snowball", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10510" + }, + { + "examine": "They're going to sing to you!", + "durability": null, + "name": "Zanaris choir", + "archery_ticket_price": "0", + "id": "10511" + }, + { + "destroy_message": "Unknown You can reclaim this item from the place you found it.", + "examine": "Some dry crackers.", + "durability": null, + "name": "Crackers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10513" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A block of tofu.", + "durability": null, + "name": "Tofu", + "archery_ticket_price": "0", + "id": "10514" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some meaty worms.", + "durability": null, + "name": "Worms", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10515" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10516" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10517" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10518" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10519" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10520" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10521" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10522" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10523" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10524" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10525" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10526" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10527" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10528" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10529" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10530" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Used to poison your enemies!", + "durability": null, + "name": "Green egg", + "archery_ticket_price": "0", + "id": "10531" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Will explode when fired.", + "durability": null, + "name": "Red egg", + "archery_ticket_price": "0", + "id": "10532" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Stun your foes!", + "durability": null, + "name": "Blue egg", + "archery_ticket_price": "0", + "id": "10533" + }, + { + "examine": "A yellow egg; it needs passing to the Healer to be poisoned!", + "durability": null, + "name": "Yellow egg", + "archery_ticket_price": "0", + "id": "10534" + }, + { + "examine": "A poisoned yellow egg; pass it to the Attacker for spikes to be added!", + "durability": null, + "name": "Poisoned egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10535" + }, + { + "examine": "A poisoned, spiky egg; pass to the defender for heating!", + "durability": null, + "name": "Spiked/pois. egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10536" + }, + { + "examine": "A heated, poisoned, spiky egg; pass to the Collector for loading.", + "durability": null, + "name": "Omega egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10537" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Defender horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10538" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some poisoned tofu.", + "durability": null, + "name": "Poisoned tofu", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10539" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some poisoned worms.", + "durability": null, + "name": "Poisoned worms", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10540" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A poisoned leg of meat.", + "durability": null, + "name": "Poisoned meat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10541" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(4)", + "archery_ticket_price": "0", + "id": "10542" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(3)", + "archery_ticket_price": "0", + "id": "10543" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(2)", + "archery_ticket_price": "0", + "id": "10544" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(1)", + "archery_ticket_price": "0", + "id": "10545" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A full healing vial.", + "durability": null, + "name": "Healing vial", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10546" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance Healer hat.", + "durability": null, + "name": "Healer hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "10547", + "absorb": "3,1,0", + "bonuses": "-5,-5,-5,7,-5,6,8,10,8,0,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance Fighter hat.", + "durability": null, + "name": "Fighter hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "10548", + "absorb": "1,0,3", + "bonuses": "5,5,5,-7,-7,30,32,28,-3,28,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance Runner hat.", + "durability": null, + "name": "Runner hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "10549", + "absorb": "1,0,3", + "bonuses": "0,0,0,0,0,30,32,27,1,30,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance ranger hat.", + "durability": null, + "name": "Ranger hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "10550", + "absorb": "0,3,1", + "bonuses": "-5,-5,-5,-5,7,7,10,11,5,9,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,40}", + "shop_price": "375", + "examine": "Penance Fighter torso armour.", + "durability": null, + "destroy": "true", + "weight": "4", + "absorb": "3,0,6", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Fighter torso", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10551", + "bonuses": "0,0,0,-30,0,66,85,62,-6,67,40,4,0,0,0" + }, + { + "requirements": "{1,40}", + "shop_price": "100", + "examine": "Boots made from a Penance Runner.", + "durability": null, + "name": "Runner boots", + "archery_ticket_price": "0", + "id": "10552", + "bonuses": "0,0,0,-3,-1,12,13,14,0,0,10,2,0,0,0", + "equipment_slot": "10" + }, + { + "requirements": "{1,40}", + "shop_price": "150", + "examine": "These gloves seem unbelievably light!", + "durability": null, + "name": "Penance gloves", + "weight": "-7", + "archery_ticket_price": "0", + "id": "10553", + "bonuses": "0,0,0,0,0,0,3,4,0,2,2,4,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,40}", + "shop_price": "150", + "examine": "These gloves seem unbelievably light!", + "durability": null, + "name": "Penance gloves", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "10554", + "bonuses": "0,0,0,0,0,0,3,4,0,2,2,4,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,40}", + "shop_price": "375", + "examine": "A skirt made from the skin of a Penance Ranger.", + "durability": null, + "name": "Penance skirt", + "weight": "3", + "archery_ticket_price": "0", + "id": "10555", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,16,26,21,28,19,27,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10556", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10557", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10558", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10559", + "equipment_slot": "1" + }, + { + "examine": "A horn for communication with your team members.", + "durability": null, + "name": "Collector horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10560" + }, + { + "destroy_message": "You will have to ask Captain Cain for another.", + "shop_price": "160", + "examine": "A book about the Barbarian Assault Queen.", + "durability": null, + "name": "Queen help book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10562" + }, + { + "requirements": "{1,50}-{2,50}", + "shop_price": "95000", + "ge_buy_limit": "10", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "22.6", + "absorb": "4,0,8", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "126800", + "name": "Granite body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10564", + "bonuses": "0,0,0,-22,-5,87,84,79,-6,97,45,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "126800", + "durability": null, + "name": "Granite body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10565" + }, + { + "examine": "A cape of fire.", + "durability": null, + "name": "Fire cape", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10566", + "bonuses": "1,1,1,1,1,11,11,11,11,11,11,4,2,0,0", + "equipment_slot": "1" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10567", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10568" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10569", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10570" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10571", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10572" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10573", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10574" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10575", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10576" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10577", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10578" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10579", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10580" + }, + { + "examine": "(Normal) A mystical-feeling dagger. (Poisoned) The twisted blade is covered with a nasty poison.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "name": "Keris", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10581", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0" + }, + { + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "durability": null, + "name": "Keris(p)", + "archery_ticket_price": "0", + "id": "10582", + "weapon_interface": "5", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "durability": null, + "name": "Keris(p+)", + "archery_ticket_price": "0", + "id": "10583", + "weapon_interface": "5", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "durability": null, + "name": "Keris(p++)", + "archery_ticket_price": "0", + "id": "10584", + "weapon_interface": "5", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "destroy_message": "You can obtain a replacement lamp from the high priest in Sophanem.", + "examine": "A mystical lamp, engraved with scenes of carnage.", + "durability": null, + "name": "Combat lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10586" + }, + { + "destroy_message": "I got this diary in Tarn's Lair, perhaps I can get another one there.", + "examine": "Tarn Razorlor's diary.", + "durability": null, + "name": "Tarn's diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10587" + }, + { + "examine": "Increases the wearer's Strength and Attack by 20% when fighting the undead.", + "durability": null, + "name": "Salve amulet(e)", + "weight": "1", + "archery_ticket_price": "0", + "id": "10588", + "bonuses": "0,0,0,0,0,3,3,3,0,0,3,0,3,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "requirements": "{1,50}-{2,50}", + "ge_buy_limit": "10", + "examine": "A stone helmet.", + "durability": null, + "weight": "4", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "28000", + "name": "Granite helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10589", + "bonuses": "0,0,0,-9,-7,31,33,29,-1,39,9,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "28000", + "durability": null, + "name": "Granite helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10590" + }, + { + "examine": "A terrifying dog beast.", + "durability": null, + "name": "Terror dog", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "10591" + }, + { + "destroy_message": "You can make another with tanned leather and a mahogany plank.", + "examine": "Small drums.", + "durability": null, + "name": "Penguin bongos", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10592" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Every song needs a cowbell.", + "durability": null, + "name": "Cowbells", + "weight": "2", + "archery_ticket_price": "0", + "id": "10593" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A book about clockwork mechanisms.", + "durability": null, + "name": "Clockwork book", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10594" + }, + { + "destroy_message": "You'll have to make another one at your house. Speak to Larry to learn how to make one.", + "examine": "A clockwork penguin suit.", + "durability": null, + "name": "Clockwork suit", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10595" + }, + { + "destroy_message": "You'll have to make another one at your house. Speak to Larry to learn how to make one.", + "examine": "A clockwork penguin suit.", + "durability": null, + "name": "Clockwork suit", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10596" + }, + { + "destroy_message": "You will need to speak to Noodle to get another.", + "examine": "So you can be a penguin too!", + "durability": null, + "name": "Kgp id card", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10600" + }, + { + "shop_price": "15000", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10601", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "shop_price": "15000", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10602", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "shop_price": "15000", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10603", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Make your foes cower by wearing a skull as a helmet!", + "durability": null, + "weight": "1.3", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "25569", + "name": "Skeletal helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10604", + "bonuses": "0,0,0,2,-2,10,9,11,3,0,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "examine": "Mystical robes.", + "grand_exchange_price": "3932123", + "durability": null, + "name": "Infinity top", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "10605", + "absorb": "3,1,0", + "bonuses": "0,0,0,22,0,0,0,0,22,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "lendable": "true", + "examine": "A wooden helmet.", + "grand_exchange_price": "5623", + "durability": null, + "name": "Splitbark helm", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10606", + "absorb": "3,1,0", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "They seem to be not quite of this world...", + "durability": null, + "name": "Ghostly boots", + "archery_ticket_price": "0", + "id": "10607", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "1000", + "examine": "A mystical hat.", + "durability": null, + "name": "Moonclan hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "10608", + "bonuses": "0,0,0,3,-5,3,3,3,3,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10609", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "10610", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "Torso armour from the order of the Void Knights.", + "durability": null, + "name": "Void knight top", + "tradeable": "false", + "weight": "6.5", + "archery_ticket_price": "0", + "id": "10611", + "bonuses": "0,0,0,0,0,40,40,40,40,40,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue mask", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "10612", + "bonuses": "0,0,0,0,0,5,5,5,5,5,0,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Protective headwear made from crabs. Better than it sounds.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "24661", + "name": "Rock-shell helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10613", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A helm fit for any Fremennik ranger.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "35640", + "name": "Spined helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10614", + "bonuses": "-6,-6,-6,-6,6,6,6,6,6,0,0,0,0,0,0" + }, + { + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1021", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10615", + "equipment_slot": "0" + }, + { + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1021", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10616", + "equipment_slot": "0" + }, + { + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1021", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10617", + "equipment_slot": "0" + }, + { + "shop_price": "3840", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "4595", + "name": "White platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10618", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,0,0,1,0,0" + }, + { + "shop_price": "10000", + "examine": "An initiate Temple Knight's Armour.", + "durability": null, + "weight": "8", + "absorb": "1,0,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "5821", + "name": "Initiate hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10619", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,0,0,6,0,0" + }, + { + "shop_price": "12000", + "examine": "A Proselyte Temple Knight's armour.", + "durability": null, + "weight": "8.6", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "6960", + "name": "Proselyte hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10620", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,0,0,8,0,0" + }, + { + "remove_sleeves": "true", + "examine": "A thick heavy leather top.", + "durability": null, + "name": "Mourner top", + "archery_ticket_price": "0", + "id": "10621", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in polar areas.", + "grand_exchange_price": "216", + "durability": null, + "name": "Kyatt top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10622", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "grand_exchange_price": "1793", + "durability": null, + "name": "Larupia top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10623", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "examine": "This should make me harder to spot in desert areas.", + "grand_exchange_price": "246", + "durability": null, + "name": "Graahk top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10624", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in wooded areas.", + "grand_exchange_price": "3883", + "durability": null, + "name": "Wood camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10625", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in jungle areas.", + "grand_exchange_price": "325", + "durability": null, + "name": "Jungle camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10626", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in desert areas.", + "grand_exchange_price": "606", + "durability": null, + "name": "Desert camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10627", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in polar areas.", + "grand_exchange_price": "5614", + "durability": null, + "name": "Polar camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10628", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "A mime would wear this.", + "durability": null, + "name": "Mime mask", + "archery_ticket_price": "0", + "id": "10629", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "Very posh!", + "durability": null, + "name": "Princess blouse", + "weight": "2", + "archery_ticket_price": "0", + "id": "10630", + "equipment_slot": "4" + }, + { + "examine": "Aside from the braaaains on the lapel, it's still quite good.", + "durability": null, + "name": "Zombie shirt", + "archery_ticket_price": "0", + "id": "10631", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Examine what?", + "durability": null, + "name": "Camo top", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "10632", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "A leather strapped top.", + "durability": null, + "name": "Lederhosen top", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "10633", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "I feel closer to the gods when I am wearing this. (Top) If a shade had knees, this would keep them nice and warm. (Bottom)", + "durability": null, + "name": "Shade robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "10634", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "450", + "examine": "The cape worn by members of the Legends Guild.", + "durability": null, + "name": "Cape of legends", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10635", + "bonuses": "0,0,0,0,0,7,7,7,7,7,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "lendable": "true", + "shop_price": "90000", + "examine": "A cape woven of obsidian plates.", + "grand_exchange_price": "38500", + "durability": null, + "name": "Obsidian cape", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10636", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A cape of fire.", + "durability": null, + "name": "Fire cape", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10637", + "bonuses": "1,1,1,1,1,11,11,11,11,11,0,4,2,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "50", + "examine": "Ooohhh look at the pretty colours...", + "durability": null, + "name": "Team-1 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10638", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{0,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of attack.", + "durability": null, + "name": "Attack cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10639", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{2,99}", + "shop_price": "99000", + "examine": "The cape only worn by the strongest people.", + "durability": null, + "name": "Strength cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10640", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{1,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of the art of Defence.", + "durability": null, + "name": "Defence cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10641", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{4,99}", + "shop_price": "99000", + "examine": "The cape worn by master archers.", + "durability": null, + "name": "Ranging cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10642", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{5,99}", + "shop_price": "99000", + "examine": "The cape worn by the most pious of heroes.", + "durability": null, + "name": "Prayer cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10643", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{6,99}", + "shop_price": "99000", + "examine": "The cape worn by the most powerful mages.", + "durability": null, + "name": "Magic cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10644", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{20,99}", + "shop_price": "99000", + "examine": "The cape worn by master runecrafters.", + "durability": null, + "name": "Runecraft cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10645", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,99}", + "shop_price": "99000", + "examine": "The cape worn by master hunters.", + "durability": null, + "name": "Hunter cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10646", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{3,99}", + "shop_price": "99000", + "examine": "The cape worn by well-constituted adventurers.", + "durability": null, + "name": "Hitpoints cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10647", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{16,99}", + "shop_price": "99000", + "examine": "The cape worn by the most agile of heroes.", + "durability": null, + "name": "Agility cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10648", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{15,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled at the art of herblore.", + "durability": null, + "name": "Herblore cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10649", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{17,99}", + "shop_price": "99000", + "examine": "The cape worn by master thieves.", + "durability": null, + "name": "Thieving cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10650", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{12,99}", + "shop_price": "99000", + "examine": "The cape worn by master craftworkers.", + "durability": null, + "name": "Crafting cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10651", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{9,99}", + "shop_price": "99000", + "examine": "The cape worn by the best of fletchers.", + "durability": null, + "name": "Fletching cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10652", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{18,99}", + "shop_price": "99000", + "examine": "The cape worn by slayer masters.", + "durability": null, + "name": "Slayer cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10653", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{22,99}", + "shop_price": "99000", + "examine": "The cape worn by master builders.", + "durability": null, + "name": "Construct. cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10654", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{14,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled miners.", + "durability": null, + "name": "Mining cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10655", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{13,99}", + "shop_price": "99000", + "examine": "The cape worn by master smiths.", + "durability": null, + "name": "Smithing cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10656", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{10,99}", + "shop_price": "99000", + "examine": "The cape worn by the best fishermen.", + "durability": null, + "name": "Fishing cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10657", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{7,99}", + "shop_price": "99000", + "examine": "The cape worn by the world's best chefs.", + "durability": null, + "name": "Cooking cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10658", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{11,99}", + "shop_price": "99000", + "examine": "The cape worn by master firelighters.", + "durability": null, + "name": "Firemaking cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10659", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{8,99}", + "shop_price": "99000", + "examine": "The cape worn by master woodcutters (Obtaining level 99 skill)", + "durability": null, + "name": "Woodcutting cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10660", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{19,99}", + "shop_price": "99000", + "examine": "The cape worn by master farmers.", + "durability": null, + "name": "Farming cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10661", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "99000", + "examine": "The cape worn by only the most experienced adventurers.", + "durability": null, + "name": "Quest point cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10662", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A surprisingly aerodynamic cape.", + "grand_exchange_price": "951", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10663", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A really surprisingly aerodynamic cape.", + "grand_exchange_price": "881", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10664", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{1,10}", + "examine": "A black kitesheild with a heraldic design.", + "grand_exchange_price": "15249", + "durability": null, + "name": "Black shield(h1)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10665", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "16339", + "name": "Adamant shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10666", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "35300", + "durability": null, + "name": "Rune shield(h1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10667", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black kiteshield with a heraldic design.", + "grand_exchange_price": "9751", + "durability": null, + "name": "Black shield(h2)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10668", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3353", + "name": "Adamant shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10669", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "31903", + "durability": null, + "name": "Rune shield(h2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10670", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black shield with a heraldic design.", + "grand_exchange_price": "6791", + "durability": null, + "name": "Black shield(h3)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10671", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "5566", + "name": "Adamant shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10672", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "32082", + "durability": null, + "name": "Rune shield(h3)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10673", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black shield with a heraldic design.", + "grand_exchange_price": "5159", + "durability": null, + "name": "Black shield(h4)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10674", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3219", + "name": "Adamant shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10675", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "32351", + "durability": null, + "name": "Rune shield(h4)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10676", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black shield with a heraldic design.", + "grand_exchange_price": "8451", + "durability": null, + "name": "Black shield(h5)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10677", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "5905", + "name": "Adamant shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10678", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "35200", + "durability": null, + "name": "Rune shield(h5)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10679", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "grand_exchange_price": "67430", + "durability": null, + "name": "Studded body (g)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10680", + "absorb": "0,3,1", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "grand_exchange_price": "22400", + "durability": null, + "name": "Studded body (t)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10681", + "absorb": "0,3,1", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body(g)", + "archery_ticket_price": "0", + "id": "10682", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body (t)", + "archery_ticket_price": "0", + "id": "10683", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body (g)", + "archery_ticket_price": "0", + "id": "10684", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body (t)", + "archery_ticket_price": "0", + "id": "10685", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "I can practise magic better in this.", + "durability": null, + "name": "Wizard robe (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10686", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "I can do magic better in this.", + "durability": null, + "name": "Wizard robe (t)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10687", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,20}-{6,40}", + "examine": "Enchanted Wizards robes.", + "durability": null, + "weight": "1", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "72800", + "name": "Enchanted top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10688", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "examine": "Slightly magical boots.", + "grand_exchange_price": "763602", + "durability": null, + "name": "Wizard boots", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10689", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "requirements": "{1,10}", + "examine": "Black platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "90744", + "name": "Black platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10690", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,0,0,0,0,0" + }, + { + "requirements": "{1,10}", + "examine": "Black platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "230800", + "name": "Black platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10691", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,0,0,0,0,0" + }, + { + "lendable": "true", + "examine": "Your money or your life!", + "grand_exchange_price": "92519", + "durability": null, + "name": "Highwayman mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10692", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "64066", + "durability": null, + "name": "Blue beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "10693", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Parlez-vous francais?(Do you speak French?)", + "grand_exchange_price": "158274", + "durability": null, + "name": "Black beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "10694", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "281900", + "durability": null, + "name": "White beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "10695", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Lightweight boots ideal for rangers.", + "grand_exchange_price": "11781186", + "durability": null, + "name": "Ranger boots", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10696", + "bonuses": "0,0,0,-10,8,2,3,4,2,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "79300", + "name": "Adam platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10697", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,0,0,0,0,0" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "207912", + "name": "Adam platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10698", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "22022", + "durability": null, + "name": "Black helm (h1)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10699", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "11700", + "durability": null, + "name": "Black helm (h2)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10700", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "10424", + "durability": null, + "name": "Black helm (h3)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10701", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "12717", + "durability": null, + "name": "Black helm (h4)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10702", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "17852", + "durability": null, + "name": "Black helm (h5)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10703", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "30298", + "durability": null, + "name": "Rune helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10704", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "26127", + "durability": null, + "name": "Rune helm (h2)", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10705", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "37333", + "durability": null, + "name": "Rune helm (h3)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10706", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "29600", + "durability": null, + "name": "Rune helm (h4)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10707", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "41325", + "durability": null, + "name": "Rune helm (h5)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10708", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "28407", + "name": "Adamant helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10709", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "9839", + "name": "Adamant helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10710", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "8485", + "name": "Adamant helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10711", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An Adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "10774", + "name": "Adamant helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10712", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "17390", + "name": "Adamant helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10713", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10714", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10715", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10716", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10717", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10718", + "equipment_slot": "4" + }, + { + "examine": "A very powerful dragonstone amulet.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10719", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "A cape from the almighty god Guthix.", + "durability": null, + "name": "Guthix cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10720", + "bonuses": "0,0,0,10,0,1,1,2,10,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "examine": "Now that's just silly.", + "durability": null, + "name": "Frog mask", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10721", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A reindeer hat and a matching flashing nose.", + "durability": null, + "name": "Reindeer hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10722" + }, + { + "remove_head": "true", + "destroy_message": "You may get another from Diango in Draynor Village.", + "examine": "Better not light it!", + "durability": null, + "name": "Jack lantern mask", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10723", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Skeleton feet.", + "durability": null, + "name": "Skeleton boots", + "weight": "2", + "archery_ticket_price": "0", + "id": "10724", + "equipment_slot": "10" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some skeletal gloves.", + "durability": null, + "name": "Skeleton gloves", + "weight": "2", + "archery_ticket_price": "0", + "id": "10725", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Does my pelvis look big in this?", + "durability": null, + "name": "Skeleton leggings", + "weight": "2", + "archery_ticket_price": "0", + "id": "10726", + "equipment_slot": "7" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "remove_sleeves": "true", + "examine": "The shirt of a fully body skeleton costume.", + "durability": null, + "name": "Skeleton shirt", + "weight": "2", + "archery_ticket_price": "0", + "id": "10727", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scary skeleton mask.", + "durability": null, + "name": "Skeleton mask", + "weight": "2", + "archery_ticket_price": "0", + "id": "10728", + "equipment_slot": "0" + }, + { + "examine": "A ring given to you by the Easter Bunny.", + "durability": null, + "name": "Easter ring", + "archery_ticket_price": "0", + "id": "10729" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10730" + }, + { + "examine": "Alas...I hardly knew him.", + "durability": null, + "name": "Zombie head", + "archery_ticket_price": "0", + "id": "10731" + }, + { + "turn90cw_anim": "821", + "examine": "Perhaps not the most powerful weapon in RuneScape.", + "walk_anim": "1830", + "durability": null, + "weight": "0.4", + "turn90ccw_anim": "822", + "attack_speed": "4", + "weapon_interface": "12", + "turn180_anim": "1830", + "render_anim": "182", + "equipment_slot": "3", + "fun_weapon": "true", + "stand_anim": "1832", + "name": "Rubber chicken", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10732", + "stand_turn_anim": "823", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "examine": "A gift from Santa.", + "durability": null, + "name": "Yo-yo", + "archery_ticket_price": "0", + "id": "10733" + }, + { + "examine": "A rabbit-like adornment.", + "durability": null, + "name": "Bunny ears", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10734", + "equipment_slot": "0" + }, + { + "turn90cw_anim": "821", + "examine": "It's a Scythe.", + "walk_anim": "819", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "820", + "render_anim": "1383", + "equipment_slot": "3", + "stand_anim": "847", + "name": "Scythe", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10735", + "stand_turn_anim": "823", + "bonuses": "3,8,3,0,0,0,3,1,0,0,0,10,0,0,0" + }, + { + "examine": "An enchanted ruby amulet with a nice trim.", + "grand_exchange_price": "443800", + "durability": null, + "name": "Strength amulet(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10736", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,10,0,0,0", + "equipment_slot": "2" + }, + { + "examine": "An enchanted sapphire amulet of magic.", + "grand_exchange_price": "67158", + "durability": null, + "name": "Amulet of magic(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10738", + "bonuses": "0,0,0,10,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "A big 'do about nothing.", + "grand_exchange_price": "36879", + "durability": null, + "name": "A powdered wig", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10740", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "These'll help me stay alive.", + "grand_exchange_price": "559284", + "durability": null, + "name": "Flared trousers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10742", + "equipment_slot": "7" + }, + { + "lendable": "true", + "examine": "Alas, someone has slashed my pantaloons.", + "grand_exchange_price": "12022", + "durability": null, + "name": "Pantaloons", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10744", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "A cap for wearing whil...zzzzzzzzz", + "grand_exchange_price": "376084", + "durability": null, + "name": "Sleeping cap", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10746", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10748", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10750", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10752", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10754", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10756", + "equipment_slot": "4" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "56600", + "durability": null, + "name": "Red boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10758", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "20300", + "durability": null, + "name": "Orange boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10760", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "59940", + "durability": null, + "name": "Green boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10762", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "54236", + "durability": null, + "name": "Blue boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10764", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "56495", + "durability": null, + "name": "Black boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10766", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A minimalist's hat.", + "grand_exchange_price": "114319", + "durability": null, + "name": "Red headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10768", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A minimalist's hat.", + "grand_exchange_price": "41778", + "durability": null, + "name": "Black headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10770", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A minimalist's hat.", + "grand_exchange_price": "21764", + "durability": null, + "name": "Brown headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10772", + "equipment_slot": "0" + }, + { + "examine": "Shiver me timbers!", + "grand_exchange_price": "83200", + "durability": null, + "name": "Pirate's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10774", + "equipment_slot": "0" + }, + { + "examine": "Rune platebody in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "647800", + "name": "Zamorak platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10776", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody in the colours of Saradomin.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "1097689", + "name": "Saradomin plate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10778", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody in the colours of Guthix.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "241600", + "name": "Guthix platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10780", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody with complete gold trim & plating.", + "durability": null, + "weight": "10", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "1653821", + "name": "Gilded platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10782", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "examine": "Blessed vestments of Saradomin.", + "grand_exchange_price": "106389", + "durability": null, + "name": "Saradomin robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10784", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Zamorak Vestments.", + "grand_exchange_price": "151000", + "durability": null, + "name": "Zamorak robe top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10786", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blessed vestments of Guthix.", + "grand_exchange_price": "80181", + "durability": null, + "name": "Guthix robe top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10788", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Zamorak blessed dragonhide body armour.", + "grand_exchange_price": "84966", + "durability": null, + "name": "Zamorak d'hide", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "10790", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "13000", + "examine": "Saradomin blessed dragonhide body armour.", + "durability": null, + "destroy": "true", + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "92762", + "name": "Saradomin d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10792", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,0,0,0,0,0" + }, + { + "shop_price": "13", + "examine": "Guthix blessed dragonhide body armour.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "22384", + "name": "Guthix dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10794", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,0,0,0,0,0" + }, + { + "lendable": "true", + "examine": "Endorsed by Robin Hood.", + "grand_exchange_price": "3070557", + "durability": null, + "name": "Robin hood hat", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10796", + "bonuses": "0,0,0,-10,8,4,6,8,4,4,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "Rune platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "231400", + "name": "Rune platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10798", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "61100", + "name": "Rune platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10800", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "lendable": "true", + "examine": "All for one and one for all!", + "grand_exchange_price": "56677", + "durability": null, + "name": "Tan cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10802", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "All for one and one for all!", + "grand_exchange_price": "18942", + "durability": null, + "name": "Dark cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10804", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "All for one and one for all!", + "grand_exchange_price": "421305", + "durability": null, + "name": "Black cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10806", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "1000", + "examine": "Arctic Pine logs prepared with sacred oil for a funeral pyre", + "grand_exchange_price": "3453", + "durability": null, + "name": "Arctic pyre logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10808" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3453", + "durability": null, + "name": "Arctic pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10809" + }, + { + "ge_buy_limit": "25000", + "examine": "Log cut from an arctic pine.", + "grand_exchange_price": "90", + "durability": null, + "name": "Arctic pine logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10810", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "90", + "durability": null, + "name": "Arctic pine logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10811" + }, + { + "ge_buy_limit": "1000", + "examine": "Used to repair bridges.", + "grand_exchange_price": "18", + "durability": null, + "name": "Split log", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10812" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "18", + "durability": null, + "name": "Split log", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10813" + }, + { + "shop_price": "120", + "ge_buy_limit": "1000", + "examine": "I can spin this into rope.", + "grand_exchange_price": "113", + "durability": null, + "name": "Hair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10814" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "113", + "durability": null, + "name": "Hair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10815" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "I need to cook this.", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw yak meat", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10816" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw yak meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10817" + }, + { + "shop_price": "50", + "ge_buy_limit": "5000", + "examine": "Thakkrad, of Neitiznot, can cure this.", + "grand_exchange_price": "301", + "durability": null, + "name": "Yak-hide", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10818" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "301", + "durability": null, + "name": "Yak-hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10819" + }, + { + "ge_buy_limit": "5000", + "examine": "Ready to be cut and sewn into armour.", + "grand_exchange_price": "396", + "durability": null, + "name": "Cured yak-hide", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10820" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "396", + "durability": null, + "name": "Cured yak-hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10821" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "examine": "Smelly yak body armour.", + "durability": null, + "weight": "3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "122", + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10822", + "bonuses": "0,0,0,-5,0,25,20,15,-2,25,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "122", + "durability": null, + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10823" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "examine": "Leg protection, made from smelly yak-hide.", + "durability": null, + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "2", + "id": "10824", + "bonuses": "0,0,0,-5,10,25,20,15,-2,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "durability": null, + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10825" + }, + { + "requirements": "{1,25}", + "ge_buy_limit": "100", + "examine": "A wooden shield with a rope rim.", + "durability": null, + "destroy": "true", + "weight": "3", + "equipment_slot": "5", + "grand_exchange_price": "402", + "name": "Fremennik round shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10826", + "bonuses": "0,0,0,-10,-10,17,17,31,-4,33,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "402", + "durability": null, + "name": "Fremennik round shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10827" + }, + { + "remove_head": "true", + "requirements": "{1,55}", + "shop_price": "50000", + "ge_buy_limit": "100", + "examine": "A gift from Neitiznot's Burgher.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "equipment_slot": "0", + "grand_exchange_price": "44800", + "name": "Helm of neitiznot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10828", + "bonuses": "0,0,0,0,0,31,29,34,3,30,8,3,3,0,0" + }, + { + "destroy_message": "King Sorvott of Jatizso will give you another one, grudgingly.", + "examine": "The document is stamped with King Gjuki Sorvott IV's royal seal.", + "durability": null, + "name": "Royal decree", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10830" + }, + { + "destroy_message": "Are you sure? You can replace it by talking to King Sorvott.", + "examine": "An empty tax bag.", + "durability": null, + "name": "Empty tax bag", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10831" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "examine": "A silly hat with bells.", + "durability": null, + "name": "Silly jester hat", + "tradeable": "false", + "destroy": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "10836", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "remove_sleeves": "true", + "examine": "A jester's jangly top.", + "durability": null, + "name": "Silly jester top", + "tradeable": "false", + "destroy": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "10837", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "examine": "Silly jester tights.", + "durability": null, + "name": "Silly jester tights", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10838", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "examine": "Silly jester boots.", + "durability": null, + "name": "Silly jester boots", + "tradeable": "false", + "destroy": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "10839", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "durability": null, + "name": "A jester stick", + "archery_ticket_price": "0", + "id": "10840", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "No brain: A gruesome, decapitated head, whose brain has rotted away. Brain: A gruesome, decapitated head - its eyes stare lifelessly at nothing.", + "durability": null, + "name": "Decapitated head", + "weight": "3", + "archery_ticket_price": "0", + "id": "10842" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Helm of neitiznot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10843" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Spring sq'irk", + "archery_ticket_price": "0", + "id": "10844" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Summer sq'irk", + "archery_ticket_price": "0", + "id": "10845" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Autumn sq'irk", + "archery_ticket_price": "0", + "id": "10846" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Winter sq'irk", + "archery_ticket_price": "0", + "id": "10847" + }, + { + "examine": "Made from 4 spring sq'irks.", + "durability": null, + "name": "Spring sq'irkjuice", + "weight": "1", + "archery_ticket_price": "0", + "id": "10848" + }, + { + "examine": "Made from 2 summer sq'irks.", + "durability": null, + "name": "Summer sq'irkjuice", + "weight": "1", + "archery_ticket_price": "0", + "id": "10849" + }, + { + "examine": "Made from 3 autumn sq'irks.", + "durability": null, + "name": "Autumn sq'irkjuice", + "weight": "1", + "archery_ticket_price": "0", + "id": "10850" + }, + { + "examine": "Made from 5 winter sq'irks.", + "durability": null, + "name": "Winter sq'irkjuice", + "archery_ticket_price": "0", + "id": "10851" + }, + { + "destroy_message": "You will need to speak to Sin Seer in Seers' Village to get another one.", + "shop_price": "40", + "examine": "Her writing is too scrawled to make out what it says.", + "durability": null, + "name": "Sin seer's note", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10856" + }, + { + "destroy_message": "You will need to speak to General Khazard, near the Fremennik Province, to get another.", + "examine": "A severed human leg.", + "durability": null, + "name": "Severed leg", + "tradeable": "false", + "destroy": "true", + "weight": "12", + "archery_ticket_price": "0", + "id": "10857" + }, + { + "turn90cw_anim": "7044", + "examine": "A shadow sword.", + "walk_anim": "7046", + "durability": null, + "destroy": "true", + "weight": "3.6", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "turn180_anim": "7045", + "render_anim": "124", + "equipment_slot": "3", + "destroy_message": "You can get another one by visiting the cave near the Fishing guild. A friendly ghost will replace it for you. You must be wearing a Ring of visibility, or you cannot get it back.", + "stand_anim": "7047", + "name": "Shadow sword", + "tradeable": "false", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "10858", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,4,0,0,0,0,4,-1,0,26,0,0,0" + }, + { + "examine": "You can put nice, hot tea in it.", + "durability": null, + "name": "Tea flask", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10859" + }, + { + "examine": "You can put nice, hot tea in it.", + "durability": null, + "name": "Tea flask", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10860" + }, + { + "examine": "You can put nice, hot tea in it.", + "durability": null, + "name": "Tea flask", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10861" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "Can't get any safer than this.", + "durability": null, + "name": "Hard hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10862", + "equipment_slot": "0" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "remove_sleeves": "true", + "examine": "Very fetching.", + "durability": null, + "name": "Builder's shirt", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10863", + "equipment_slot": "4" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "Slightly tatty in my opinion.", + "durability": null, + "name": "Builder's trousers", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10864", + "equipment_slot": "7" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "They'll offer good protection for my toes.", + "durability": null, + "name": "Builder's boots", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10865", + "equipment_slot": "10" + }, + { + "examine": "Used to bolt things together.", + "durability": null, + "name": "Rivets", + "archery_ticket_price": "0", + "id": "10866" + }, + { + "examine": "Some magical fluid to bind surfaces.", + "durability": null, + "name": "Binding fluid", + "archery_ticket_price": "0", + "id": "10870" + }, + { + "examine": "A pipe that belongs in a cannon stand.", + "durability": null, + "name": "Pipe", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10871" + }, + { + "examine": "A ring used to join two pipes together.", + "durability": null, + "name": "Pipe ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10872" + }, + { + "examine": "A sheet of metal.", + "durability": null, + "name": "Metal sheet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10873" + }, + { + "examine": "Bound to have some use.", + "durability": null, + "name": "Coloured ball", + "archery_ticket_price": "0", + "id": "10874" + }, + { + "examine": "A wheel used to control valves.", + "durability": null, + "name": "Valve wheel", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10875" + }, + { + "examine": "Some unknown metal substance.", + "durability": null, + "name": "Metal bar", + "archery_ticket_price": "0", + "id": "10876" + }, + { + "shop_price": "128", + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Plain satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10877", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Green satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10878", + "equipment_slot": "5" + }, + { + "shop_price": "128", + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Red satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10879", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Black satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10880", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Gold satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10881", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Rune satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10882", + "equipment_slot": "5" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "Can't get any safer than this.", + "durability": null, + "name": "Hard hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10883", + "equipment_slot": "0" + }, + { + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10884" + }, + { + "examine": "A small keg of gunpowder.", + "durability": null, + "name": "Keg", + "weight": "12", + "archery_ticket_price": "0", + "id": "10885" + }, + { + "examine": "Used to cure poison through prayer.", + "durability": null, + "name": "Prayer book", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10886" + }, + { + "turn90cw_anim": "5867", + "examine": "This is likely to put my back out... (when fixed) OR It's broken. I should see if a pirate smith can fix it. (when broken)", + "walk_anim": "5867", + "has_special": "true", + "durability": null, + "weight": "30", + "turn90ccw_anim": "5867", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "5867", + "defence_anim": "5866", + "render_anim": "985", + "equipment_slot": "3", + "attack_anims": "5865,5865,5865,5865", + "destroy_message": "If you drop the Anchor it will be destroyed, and you will need to get a new one from Brother Tranquillity, then pay Smith to re", + "stand_anim": "5869", + "name": "Barrelchest anchor", + "run_anim": "5868", + "archery_ticket_price": "0", + "id": "10887", + "stand_turn_anim": "823", + "bonuses": "-2,10,92,0,0,0,0,0,0,0,0,100,0,0,0" + }, + { + "examine": "This is likely to put my back out... (when fixed) OR It's broken. I should see if a pirate smith can fix it. (when broken)", + "durability": null, + "name": "Barrelchest anchor", + "weight": "30", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "10888", + "bonuses": "-2,10,92,0,0,0,0,0,0,0,0,100,0,0,0" + }, + { + "destroy_message": "If you drop this lamp it will be destroyed, and you will need to see Brother Tranquility for another.", + "examine": "This will answer my prayers.", + "durability": null, + "name": "Blessed lamp", + "archery_ticket_price": "0", + "id": "10889" + }, + { + "destroy_message": "This book is old and delicate. You can reclaim this item from the place you found it.ping it here will destroy it and you will have to search the Edgeville Monastery bookcase for another.", + "examine": "Used to cure poison through prayer.", + "durability": null, + "name": "Prayer book", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10890" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden cat toy.", + "grand_exchange_price": "922", + "durability": null, + "name": "Wooden cat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10891" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "922", + "durability": null, + "name": "Wooden cat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10892" + }, + { + "examine": "A cranial clamp.", + "durability": null, + "name": "Cranial clamp", + "archery_ticket_price": "0", + "id": "10893" + }, + { + "examine": "Some tongs for use with brains.", + "durability": null, + "name": "Brain tongs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10894" + }, + { + "examine": "A bell jar for covering things.", + "durability": null, + "name": "Bell jar", + "weight": "1", + "archery_ticket_price": "0", + "id": "10895" + }, + { + "examine": "A silver whistle.", + "durability": null, + "name": "Wolf whistle", + "archery_ticket_price": "0", + "id": "10896" + }, + { + "examine": "A shipping order list.", + "durability": null, + "name": "Shipping order", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10897" + }, + { + "examine": "A small keg of gunpowder.", + "durability": null, + "name": "Keg", + "weight": "12", + "archery_ticket_price": "0", + "id": "10898" + }, + { + "examine": "Part of a crate.", + "durability": null, + "name": "Crate part", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10899" + }, + { + "examine": "One skull staple.", + "durability": null, + "name": "Skull staple", + "archery_ticket_price": "0", + "id": "10904" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "8420", + "durability": null, + "name": "Mixture - step 1(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10909" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8420", + "durability": null, + "name": "Mixture - step 1(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10910" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "6543", + "durability": null, + "name": "Mixture - step 1(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10911" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6543", + "durability": null, + "name": "Mixture - step 1(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10912" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 1(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10913" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 1(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10914" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 1(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10915" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 1(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10916" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "8665", + "durability": null, + "name": "Mixture - step 2(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10917" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8665", + "durability": null, + "name": "Mixture - step 2(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10918" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "6695", + "durability": null, + "name": "Mixture - step 2(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10919" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6695", + "durability": null, + "name": "Mixture - step 2(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10920" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 2(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10921" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 2(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10922" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 2(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10923" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 2(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10924" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "15900", + "durability": null, + "name": "Sanfew serum(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10925" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15900", + "durability": null, + "name": "Sanfew serum(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10926" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "12000", + "durability": null, + "name": "Sanfew serum(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10927" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12000", + "durability": null, + "name": "Sanfew serum(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10928" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "10200", + "durability": null, + "name": "Sanfew serum(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10929" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10200", + "durability": null, + "name": "Sanfew serum(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10930" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "6114", + "durability": null, + "name": "Sanfew serum(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10931" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6114", + "durability": null, + "name": "Sanfew serum(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10932" + }, + { + "examine": "You certainly will be alright wearing these.", + "durability": null, + "name": "Lumberjack boots", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10933", + "equipment_slot": "10" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10934" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10935" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10936" + }, + { + "ge_buy_limit": "100", + "examine": "The claws from a nail beast", + "grand_exchange_price": "203", + "durability": null, + "name": "Nail beast nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10937" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "203", + "durability": null, + "name": "Nail beast nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10938" + }, + { + "remove_sleeves": "true", + "examine": "You certainly will be alright wearing this.", + "durability": null, + "name": "Lumberjack top", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "10939", + "equipment_slot": "4" + }, + { + "examine": "You certainly will be alright wearing these.", + "durability": null, + "name": "Lumberjack legs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10940", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "You certainly will be alright wearing this.", + "durability": null, + "name": "Lumberjack hat", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10941", + "equipment_slot": "0" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10942" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10943" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10944" + }, + { + "remove_sleeves": "true", + "examine": "You certainly will be alright wearing this.", + "durability": null, + "name": "Lumberjack top", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "10945", + "equipment_slot": "4" + }, + { + "examine": "One skull staple.", + "durability": null, + "name": "Skull staples", + "archery_ticket_price": "0", + "id": "10950" + }, + { + "examine": "One skull staple.", + "durability": null, + "name": "Skull staples", + "archery_ticket_price": "0", + "id": "10951" + }, + { + "requirements": "{18,39}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "Don't make anyone jump when you ring this!", + "grand_exchange_price": "57", + "durability": null, + "name": "Slayer bell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10952" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57", + "durability": null, + "name": "Slayer bell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10953" + }, + { + "requirements": "{1,25}-{4,25}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "Armour made out of Frog hide.", + "durability": null, + "weight": "3", + "absorb": "0,3,1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1797", + "name": "Frog-leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10954", + "bonuses": "0,0,0,-5,10,23,26,30,15,32,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1797", + "durability": null, + "name": "Frog-leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10955" + }, + { + "requirements": "{1,25}-{4,25}", + "shop_price": "900", + "ge_buy_limit": "100", + "examine": "Chaps made out of Frog hide.", + "durability": null, + "weight": "3", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "361", + "name": "Frog-leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10956", + "bonuses": "0,0,0,-5,2,7,7,9,4,9,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "361", + "durability": null, + "name": "Frog-leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10957" + }, + { + "requirements": "{1,25}-{4,25}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Boots made out of Frog hide.", + "durability": null, + "weight": "1", + "equipment_slot": "10", + "grand_exchange_price": "1156", + "name": "Frog-leather boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10958", + "bonuses": "0,0,0,-8,2,1,1,1,0,1,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1156", + "durability": null, + "name": "Frog-leather boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10959" + }, + { + "shop_price": "10", + "examine": "Thick and tasty soup.", + "durability": null, + "name": "Green gloop soup", + "archery_ticket_price": "0", + "id": "10960" + }, + { + "shop_price": "10", + "examine": "A big bowl of frogspawn gumbo.", + "durability": null, + "name": "Frogspawn gumbo", + "archery_ticket_price": "0", + "id": "10961" + }, + { + "shop_price": "10", + "examine": "A juicy frogburger.", + "durability": null, + "name": "Frogburger", + "weight": "1", + "archery_ticket_price": "0", + "id": "10962" + }, + { + "examine": "Nice and crunchy.", + "durability": null, + "name": "Coated frogs' legs", + "archery_ticket_price": "0", + "id": "10963" + }, + { + "shop_price": "10", + "examine": "Bat shish kebab.", + "durability": null, + "name": "Bat shish", + "archery_ticket_price": "0", + "id": "10964" + }, + { + "shop_price": "10", + "examine": "Wall beast fingers in a white fern sauce.", + "durability": null, + "name": "Fingers", + "archery_ticket_price": "0", + "id": "10965" + }, + { + "examine": "A whole roasted frog.", + "durability": null, + "name": "Roast frog", + "weight": "1", + "archery_ticket_price": "0", + "id": "10967" + }, + { + "examine": "Tasty saut??ed mushrooms.", + "durability": null, + "name": "Mushrooms", + "archery_ticket_price": "0", + "id": "10968" + }, + { + "examine": "Chunky cave-crawler fillets.", + "durability": null, + "name": "Fillets", + "archery_ticket_price": "0", + "id": "10969" + }, + { + "examine": "Steamed cave pond loach.", + "durability": null, + "name": "Loach", + "weight": "1", + "archery_ticket_price": "0", + "id": "10970" + }, + { + "examine": "Cave-eel sushi.", + "durability": null, + "name": "Eel sushi", + "archery_ticket_price": "0", + "id": "10971" + }, + { + "shop_price": "2", + "examine": "Oldak's Marvellous Moving-Over-Distance Sphere.", + "durability": null, + "name": "Dorgesh-kaan sphere", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "10972" + }, + { + "requirements": "{11,52}", + "ge_buy_limit": "1000", + "examine": "A component of cave goblin Magic.", + "grand_exchange_price": "90", + "durability": null, + "name": "Light orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10973" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "90", + "durability": null, + "name": "Light orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10974" + }, + { + "examine": "A goblin wrench.", + "durability": null, + "name": "Spanner", + "weight": "1", + "archery_ticket_price": "0", + "id": "10975" + }, + { + "shop_price": "1000", + "examine": "A Construction bone.", + "durability": null, + "name": "Long bone", + "weight": "1", + "archery_ticket_price": "0", + "id": "10976" + }, + { + "shop_price": "2000", + "examine": "A curved Construction bone.", + "durability": null, + "name": "Curved bone", + "weight": "1", + "archery_ticket_price": "0", + "id": "10977" + }, + { + "ge_buy_limit": "500", + "examine": "Swamp weed found in the caves near Dorgesh-Kaan.", + "grand_exchange_price": "292", + "durability": null, + "name": "Swamp weed", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10978" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "292", + "durability": null, + "name": "Swamp weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10979" + }, + { + "examine": "Add a wire to complete it.", + "durability": null, + "name": "Empty light orb", + "archery_ticket_price": "0", + "id": "10980" + }, + { + "ge_buy_limit": "1000", + "examine": "Wire found in Dorgesh-Kaan.", + "grand_exchange_price": "988", + "durability": null, + "name": "Cave goblin wire", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10981" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "988", + "durability": null, + "name": "Cave goblin wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10982" + }, + { + "destroy_message": "You can get another cog from the old power station.", + "shop_price": "160", + "examine": "A cog. Broken: A broken cog.", + "durability": null, + "name": "Cog", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10983" + }, + { + "destroy_message": "You can get another cog from the old power station.", + "shop_price": "160", + "examine": "A cog. Broken: A broken cog.", + "durability": null, + "name": "Cog", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10984" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10985" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10986" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A meter.", + "durability": null, + "name": "Meter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10987" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A meter.", + "durability": null, + "name": "Meter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10988" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A capacitor.", + "durability": null, + "name": "Capacitor", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10989" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A capacitor.", + "durability": null, + "name": "Capacitor", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10990" + }, + { + "destroy_message": "You can get another power box from the old power station.", + "examine": "A powerbox. Broken: A broken powerbox.", + "durability": null, + "name": "Powerbox", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10993" + }, + { + "destroy_message": "You can get another power box from the old power station.", + "examine": "A powerbox. Broken: A broken powerbox.", + "durability": null, + "name": "Powerbox", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10994" + }, + { + "examine": "A perfect example of a tortoise shell.", + "durability": null, + "name": "Perfect shell", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "10995" + }, + { + "examine": "A perfect example of a snail shell.", + "durability": null, + "name": "Perfect snail shell", + "weight": "7", + "archery_ticket_price": "0", + "id": "10996" + }, + { + "examine": "On wall: That white dot looks like an eye! Off wall: A strange mole-like being.", + "durability": null, + "name": "Molanisk", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "10997" + }, + { + "examine": "One of the many citizens of Dorgesh-Kaan.", + "durability": null, + "name": "Cave goblin", + "archery_ticket_price": "0", + "id": "10998" + }, + { + "examine": "A tattered goblin holy book.", + "durability": null, + "name": "Goblin book", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10999" + }, + { + "destroy_message": "You will need to get another copy from the Varrock Palace Library if you destroy this one.", + "examine": "The History of Dagon'hai.", + "durability": null, + "name": "Dagon'hai history", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11001" + }, + { + "destroy_message": "You will need to get another copy from the Varrock Palace Library if you destroy this one.", + "examine": "The diary of Sin'keth Magis.", + "durability": null, + "name": "Sin'keth's diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11002" + }, + { + "destroy_message": "You will need to ask Rat for another empty folder if you destroy this one.", + "examine": "A folder for Rat's papers.", + "durability": null, + "name": "An empty folder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11003" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A folder for rat's papers. It needs more pages.", + "durability": null, + "name": "Used folder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11006" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A full folder. You should take this back to Rat.", + "durability": null, + "name": "Full folder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11007" + }, + { + "destroy_message": "You will need to find more papers about the outlaws if you destroy this.", + "examine": "A page of Rat's document.", + "durability": null, + "name": "Rat's paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11008" + }, + { + "destroy_message": "You will need to get another copy of the letter from Rat if you destroy this.", + "shop_price": "160", + "examine": "A letter in a strange language.", + "durability": null, + "name": "Rat's letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11009" + }, + { + "destroy_message": "You will need to ask Surok for another letter to Rat if you destroy this.", + "shop_price": "27", + "examine": "A letter.", + "durability": null, + "name": "Surok's letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11010" + }, + { + "examine": "Instructions for the beacon ring.", + "durability": null, + "name": "Zaff's instructions", + "archery_ticket_price": "0", + "id": "11011" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A wand.", + "durability": null, + "name": "Wand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11012", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This wand is glowing with chaos magic.", + "durability": null, + "name": "Infused wand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11013", + "equipment_slot": "3" + }, + { + "destroy_message": "You will need to get another ring from Zaff if you destroy this one.", + "examine": "A magical ring.", + "durability": null, + "name": "Beacon ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11014", + "bonuses": "0,0,0,2,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "remove_head": "true", + "examine": "Cock-a-doodle-do!", + "durability": null, + "name": "Chicken head", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11015", + "equipment_slot": "0" + }, + { + "examine": "Perfect for crossing the road.", + "durability": null, + "name": "Chicken feet", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11016", + "equipment_slot": "10" + }, + { + "remove_sleeves": "true", + "examine": "I look fowl in this.", + "durability": null, + "name": "Chicken wings", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11017", + "equipment_slot": "4" + }, + { + "examine": "What's the matter, are you chicken?", + "durability": null, + "name": "Chicken legs", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11018", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to Diango to get another pair of chicken feet.", + "examine": "Perfect for crossing the road.", + "durability": null, + "name": "Chicken feet", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11019", + "equipment_slot": "10" + }, + { + "destroy_message": "You will need to speak to Diango to get another set of chicken wings.", + "remove_sleeves": "true", + "examine": "I look fowl in this.", + "durability": null, + "name": "Chicken wings", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11020", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You will need to speak to Diango to get another chicken head.", + "examine": "Cock-a-doodle-do!", + "durability": null, + "name": "Chicken head", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11021", + "equipment_slot": "0" + }, + { + "destroy_message": "You will need to speak to Diango to get another set of chicken legs.", + "examine": "What's the matter, are you chicken?", + "durability": null, + "name": "Chicken legs", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11022", + "equipment_slot": "7" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Let's see how far the rabbit hole goes.", + "durability": null, + "name": "Magic egg", + "archery_ticket_price": "0", + "id": "11023" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Used for making chocolate rabbits.", + "durability": null, + "name": "Rabbit mould", + "archery_ticket_price": "0", + "id": "11024" + }, + { + "examine": "Some chocolate chunks.", + "durability": null, + "name": "Chocolate chunks", + "archery_ticket_price": "0", + "id": "11025" + }, + { + "examine": "Chocolatey kebbit goodness.", + "durability": null, + "name": "Chocolate kebbit", + "archery_ticket_price": "0", + "id": "11026" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11027", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11028", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11029", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11030", + "equipment_slot": "3" + }, + { + "destroy_message": "These logs will be destroyed if you drop them and you will need to see Olaf Hradson to get some more.", + "examine": "A number of dripping, waterlogged planks.", + "durability": null, + "name": "Damp planks", + "archery_ticket_price": "0", + "id": "11031" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A log with some squiggles carved into it.", + "durability": null, + "name": "Crude carving", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11032" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Another log with some sort of bird hacked into it.", + "durability": null, + "name": "Cruder carving", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11033" + }, + { + "destroy_message": "This map will be destroyed if you drop it and you will need to see Olaf Hradson to get another.", + "examine": "A faded map marking a cross next to a section of the landscape.", + "durability": null, + "name": "Sven's last map", + "archery_ticket_price": "0", + "id": "11034" + }, + { + "destroy_message": "These logs will be destroyed if you drop them and you will need to chop more from the windswept tree.", + "examine": "Logs taken from the exotic-looking windswept tree.", + "durability": null, + "name": "Windswept logs", + "archery_ticket_price": "0", + "id": "11035" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "examine": "A salty sword.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "6", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "120200", + "name": "Brine sabre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11037", + "bonuses": "7,47,-2,0,0,0,0,0,0,0,0,46,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "120200", + "durability": null, + "name": "Brine sabre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11038" + }, + { + "examine": "Looks like it might still float.", + "durability": null, + "name": "Rotten barrel", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11044" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Looks like it might still float.", + "durability": null, + "name": "Rotten barrel", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11045" + }, + { + "shop_price": "18", + "examine": "A coil of rope.", + "grand_exchange_price": "101", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "11046" + }, + { + "examine": "Eww, a bald rat!", + "durability": null, + "name": "Brine rat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "11047" + }, + { + "examine": "A piece of ancient goblin armour.", + "durability": null, + "name": "Armour shard", + "archery_ticket_price": "0", + "id": "11048" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11049" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Axe head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11050" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11051" + }, + { + "examine": "A piece of ancient goblin helmet.", + "durability": null, + "name": "Helmet fragment", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11052" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11053" + }, + { + "examine": "A piece of an ancient goblin shield.", + "durability": null, + "name": "Shield fragment", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11054" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11055" + }, + { + "examine": "A piece of an ancient goblin sword.", + "durability": null, + "name": "Sword fragment", + "archery_ticket_price": "0", + "id": "11056" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11057" + }, + { + "durability": null, + "name": "Mace", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "11058" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11059" + }, + { + "shop_price": "2", + "examine": "Oldak's marvellous Moving-over-distance Sphere", + "durability": null, + "name": "Goblin village sphere", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "11060" + }, + { + "requirements": "{0,25}-{5,15}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "It has ancient goblin symbols on it.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "4093", + "name": "Ancient mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11061", + "bonuses": "10,-2,16,0,0,0,0,0,0,0,0,14,3,0,0" + }, + { + "durability": null, + "name": "Ancient mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11064" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold bracelets.", + "grand_exchange_price": "456", + "durability": null, + "name": "Bracelet mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "11065" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "456", + "durability": null, + "name": "Bracelet mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11066" + }, + { + "shop_price": "165", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "223", + "durability": null, + "name": "Gold bracelet", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11069", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "223", + "durability": null, + "name": "Gold bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11070" + }, + { + "shop_price": "1035", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "578", + "durability": null, + "name": "Sapphire bracelet", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11072", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "578", + "durability": null, + "name": "Sapphire bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11073" + }, + { + "shop_price": "506", + "ge_buy_limit": "5000", + "examine": "Now I can become a potter.", + "grand_exchange_price": "644", + "durability": null, + "name": "Bracelet of clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11074", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "644", + "durability": null, + "name": "Bracelet of clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11075" + }, + { + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "786", + "durability": null, + "name": "Emerald bracelet", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11076", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "786", + "durability": null, + "name": "Emerald bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11077" + }, + { + "ge_buy_limit": "34464", + "examine": "Must be worn as you enter the game to receive the bonus for that game.", + "grand_exchange_price": "926", + "durability": null, + "name": "Castlewar brace(3)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11079", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "926", + "durability": null, + "name": "Castlewar brace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11080" + }, + { + "examine": "Must be worn as you enter the game to receive the bonus for that game.", + "grand_exchange_price": "3", + "durability": null, + "name": "Castlewar brace(2)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11081", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Castlewar brace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11082" + }, + { + "ge_buy_limit": "5000", + "examine": "Must be worn as you enter the game to receive the bonus for that game.", + "grand_exchange_price": "3484", + "durability": null, + "name": "Castlewar brace(1)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11083", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3484", + "durability": null, + "name": "Castlewar brace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11084" + }, + { + "shop_price": "2325", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "1271", + "durability": null, + "name": "Ruby bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11085", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1271", + "durability": null, + "name": "Ruby bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11086" + }, + { + "ge_buy_limit": "5000", + "examine": "It eases diseases!", + "grand_exchange_price": "1376", + "durability": null, + "name": "Inoculation brace", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11088", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1376", + "durability": null, + "name": "Inoculation brace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11089" + }, + { + "ge_buy_limit": "5000", + "examine": "In case of emergency, wear necklace.", + "grand_exchange_price": "15400", + "durability": null, + "name": "Phoenix necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11090", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "15400", + "durability": null, + "name": "Phoenix necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11091" + }, + { + "shop_price": "3422", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "12100", + "durability": null, + "name": "Diamond bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11092", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "12100", + "durability": null, + "name": "Diamond bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11093" + }, + { + "ge_buy_limit": "5000", + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "15200", + "durability": null, + "name": "Forinthry brace(5)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11095", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "15200", + "durability": null, + "name": "Forinthry brace(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11096" + }, + { + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "5", + "durability": null, + "name": "Forinthry brace(4)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11097", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Forinthry brace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11098" + }, + { + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "5", + "durability": null, + "name": "Forinthry brace(3)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11099", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Forinthry brace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11100" + }, + { + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "5", + "durability": null, + "name": "Forinthry brace(2)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11101", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Forinthry brace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11102" + }, + { + "ge_buy_limit": "5000", + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "2537", + "durability": null, + "name": "Forinthry brace(1)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11103", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2537", + "durability": null, + "name": "Forinthry brace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11104" + }, + { + "ge_buy_limit": "100", + "examine": "This will help me travel.", + "grand_exchange_price": "30400", + "durability": null, + "name": "Skills necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11105", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30400", + "durability": null, + "name": "Skills necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11106" + }, + { + "examine": "This will help me travel.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skills necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11107", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Skills necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11108" + }, + { + "examine": "This will help me travel.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skills necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11109", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Skills necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11110" + }, + { + "examine": "This will help me travel.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skills necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11111", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Skills necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11112" + }, + { + "ge_buy_limit": "100", + "examine": "This will help me travel.", + "grand_exchange_price": "28400", + "durability": null, + "name": "Skills necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11113", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28400", + "durability": null, + "name": "Skills necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11114" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon bracelet", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11115", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11116" + }, + { + "ge_buy_limit": "100", + "examine": "A handy way to get around.", + "grand_exchange_price": "29700", + "durability": null, + "name": "Combat bracelet(4)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11118", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11119" + }, + { + "examine": "A handy way to get around.", + "grand_exchange_price": "1", + "durability": null, + "name": "Combat bracelet(3)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11120", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11121" + }, + { + "examine": "A handy way to get around.", + "grand_exchange_price": "1", + "durability": null, + "name": "Combat bracelet(2)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11122", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11123" + }, + { + "examine": "A handy way to get around.", + "grand_exchange_price": "1", + "durability": null, + "name": "Combat bracelet(1)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11124", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11125" + }, + { + "ge_buy_limit": "100", + "examine": "You will need to recharge the bracelet at the Legends Guild.", + "grand_exchange_price": "29000", + "durability": null, + "name": "Combat bracelet", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11126", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11127" + }, + { + "ge_buy_limit": "100", + "examine": "Makes obsidian weapons even stronger!", + "grand_exchange_price": "2400000", + "durability": null, + "name": "Berserker necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11128", + "bonuses": "-10,-10,-10,0,0,-20,-20,-20,-20,-20,-20,7,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2400000", + "durability": null, + "name": "Berserker necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11129" + }, + { + "shop_price": "80400", + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "941200", + "durability": null, + "name": "Onyx bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11130", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "941200", + "durability": null, + "name": "Onyx bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11131" + }, + { + "ge_buy_limit": "100", + "examine": "Helps to restore your life points.", + "grand_exchange_price": "124200", + "durability": null, + "name": "Regen bracelet", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11133", + "bonuses": "8,8,8,3,7,6,6,6,3,6,5,7,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124200", + "durability": null, + "name": "Regen bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11134" + }, + { + "remove_sleeves": "true", + "examine": "For all your flying needs.", + "durability": null, + "name": "Bomber jacket", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11135", + "equipment_slot": "4" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pair of pale green Karamja gloves.", + "durability": null, + "name": "Karamja gloves 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11136", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11137" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pair of green Karamja gloves.", + "durability": null, + "name": "Karamja gloves 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11138", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11139" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pair of dark green Karamja gloves.", + "durability": null, + "name": "Karamja gloves 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11140", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11141" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "When empty: A vessel for holding liquid. Filled with water: A vessel containing water. Filled with Goutweed: A vessel containing water and goutweed.", + "durability": null, + "name": "Dream vial (empty)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11151" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "When empty: A vessel for holding liquid. Filled with water: A vessel containing water. Filled with Goutweed: A vessel containing water and goutweed.", + "durability": null, + "name": "Dream vial (water)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11152" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "When empty: A vessel for holding liquid. Filled with water: A vessel containing water. Filled with Goutweed: A vessel containing water and goutweed.", + "durability": null, + "name": "Dream vial (herb)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11153" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Potion of Shared Dreaming. One dream for two!", + "durability": null, + "name": "Dream potion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11154" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A ground astral rune.", + "durability": null, + "name": "Ground astral rune", + "archery_ticket_price": "0", + "id": "11155" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An astral rune that has been broken into shards.", + "durability": null, + "name": "Astral rune shards", + "archery_ticket_price": "0", + "id": "11156" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A lunar-styled lamp. I wonder what's inside?", + "durability": null, + "name": "Dreamy lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11157" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Perfect for storing heavy things.", + "durability": null, + "name": "Cyrisus's chest", + "tradeable": "false", + "destroy": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "11158" + }, + { + "destroy_message": "You will have to create another using the Lunar Spellbook.", + "ge_buy_limit": "100", + "examine": "A box of Hunter goodies.", + "grand_exchange_price": "3", + "durability": null, + "name": "Hunter kit", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "11159" + }, + { + "destroy_message": "You'll need to get it back from Captain Rovin.", + "examine": "Complete Shield of Arrav.", + "durability": null, + "name": "Restored shield", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "11164" + }, + { + "turn90cw_anim": "821", + "examine": "Second-rate crossbow, former property of the Phoenix Gang.", + "walk_anim": "4226", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Phoenix crossbow", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "11165", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Phoenix crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11166" + }, + { + "turn90cw_anim": "821", + "examine": "Second-rate crossbow, former property of the Phoenix Gang.", + "walk_anim": "4226", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Phoenix crossbow", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "11167", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Phoenix crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11168" + }, + { + "shop_price": "50", + "examine": "A collection of written news on paper!", + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11169" + }, + { + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11170" + }, + { + "shop_price": "50", + "examine": "A collection of written news on paper!", + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11171" + }, + { + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11172" + }, + { + "destroy_message": "Instead of destroying this I should get a friend to help me retrieve the other half.", + "examine": "I can use this to claim a reward from the King, if I get the other half.", + "durability": null, + "name": "Half certificate", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11173" + }, + { + "destroy_message": "Instead of destroying this I should get a friend to help me retrieve the other half.", + "examine": "I can use this to claim a reward from the King, if I get the other half.", + "durability": null, + "name": "Half certificate", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11174" + }, + { + "destroy_message": "You can get another find from the pile in the cleaning area of Varrock Museum.", + "examine": "A roughly-prepared archaeological find ready for cleaning.", + "durability": null, + "name": "Uncleaned find", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11175" + }, + { + "examine": "An old looking coin.", + "durability": null, + "name": "Old coin", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11179" + }, + { + "examine": "A cracked and rusty looking coin.", + "durability": null, + "name": "Ancient coin", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11180" + }, + { + "examine": "A very old symbol of Saradomin.", + "durability": null, + "name": "Ancient symbol", + "archery_ticket_price": "0", + "id": "11181" + }, + { + "examine": "An old symbol of Saradomin.", + "durability": null, + "name": "Old symbol", + "archery_ticket_price": "0", + "id": "11182" + }, + { + "examine": "An old vase with Saradominist markings - it has been chipped.", + "durability": null, + "name": "Old chipped vase", + "archery_ticket_price": "0", + "id": "11183" + }, + { + "examine": "A map of Varrock Museum.", + "durability": null, + "name": "Museum map", + "archery_ticket_price": "0", + "id": "11184" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11185" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11186" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11187" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11188" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11189" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (1)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11190", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (2)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11191", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (3)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11192", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (4)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11193", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (5)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11194", + "equipment_slot": "2" + }, + { + "examine": "A recently-cleaned necklace.", + "durability": null, + "name": "Clean necklace", + "archery_ticket_price": "0", + "id": "11195", + "equipment_slot": "2" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "One of Grimgnash's feathers.", + "durability": null, + "name": "Griffin feather", + "archery_ticket_price": "0", + "id": "11196" + }, + { + "destroy_message": "You will need to try and find another pendant in the mouse hole if you destroy this.", + "examine": "The pendant belonging to Miazrqa.", + "durability": null, + "name": "Miazrqa's pendant", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11197" + }, + { + "destroy_message": "You will need to find another sheet of music in the witch's basement if you destroy this.", + "examine": "A sheet of music.", + "durability": null, + "name": "Music sheet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11198" + }, + { + "destroy_message": "You will need to obtain another helmet from Rupert the Beard if you destroy this", + "shop_price": "60000", + "examine": "A sturdy helmet that belonged to Rupert the beard.", + "durability": null, + "name": "Rupert's helmet", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11199" + }, + { + "remove_head": "true", + "requirements": "{1,50}", + "shop_price": "60000", + "ge_buy_limit": "100", + "examine": "A sturdy helmet that belonged to Rupert the beard.", + "durability": null, + "weight": "1.9", + "equipment_slot": "0", + "grand_exchange_price": "35800", + "name": "Dwarven helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11200", + "bonuses": "0,0,6,-2,-2,27,28,31,5,24,8,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35800", + "durability": null, + "name": "Dwarven helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11201" + }, + { + "destroy_message": "You will need to find another copy in the witch's basement if you destroy this.", + "examine": "A recipe for a shrinking potion.", + "durability": null, + "name": "Shrinking recipe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11202" + }, + { + "destroy_message": "You will need to find another copy in the witch's basement if you destroy this.", + "examine": "A list of tasks for the day.", + "durability": null, + "name": "To-do list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11203" + }, + { + "destroy_message": "You will need to make another shrinking potion if you destroy this.", + "examine": "Apparently it shrinks you. Very fast.", + "durability": null, + "name": "Shrink-me-quick", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11204", + "equipment_slot": "3" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "A shrunk ogleroot! How odd...", + "grand_exchange_price": "35", + "durability": null, + "name": "Shrunk ogleroot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11205" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A shiny golden goblin. Strange!", + "durability": null, + "name": "Golden goblin", + "tradeable": "false", + "destroy": "true", + "weight": "30", + "archery_ticket_price": "0", + "id": "11210" + }, + { + "destroy_message": "You will need to get another bag of beans from Sylas if you destroy this one.", + "examine": "A bag of magic beans.", + "durability": null, + "name": "Magic beans", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11211" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "2674", + "durability": null, + "name": "Dragon arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11212", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with dragon heads and oil-soaked cloth.lit: Dragon-headed fire arrow.", + "grand_exchange_price": "3988", + "durability": null, + "name": "Dragon fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11217", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with dragon heads and oil-soaked cloth.lit: Dragon-headed fire arrow.", + "grand_exchange_price": "3834", + "durability": null, + "name": "Dragon fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11222", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "3141", + "durability": null, + "name": "Dragon arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11227", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "2866", + "durability": null, + "name": "Dragon arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11228", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "3766", + "durability": null, + "name": "Dragon arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11229", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "315", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11230", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "445", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11231", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dragon dart tip - needs feathers for flight.", + "grand_exchange_price": "746", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Dragon dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11232" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "516", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11233", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "1248", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11234", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A bow from a darker dimension.", + "walk_anim": "819", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "822", + "attack_speed": "9", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "143400", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "11235", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,95,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,60}", + "durability": null, + "weight": "1.9", + "weapon_interface": "16", + "equip_audio": "3738", + "render_anim": "1", + "lendable": "true", + "attack_audios": "3731,0,0,0", + "name": "Dark bow" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "143400", + "durability": null, + "name": "Dark bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11236" + }, + { + "ge_buy_limit": "10000", + "examine": "Dragon talons, usable as arrowheads.", + "grand_exchange_price": "3391", + "durability": null, + "name": "Dragon arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11237" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "A baby impling in a jar. That's a bit cruel.", + "grand_exchange_price": "529", + "durability": null, + "name": "Baby impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11238" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "529", + "durability": null, + "name": "Baby impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11239" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "A young impling in a jar. Don't trap me, man.", + "grand_exchange_price": "514", + "durability": null, + "name": "Young impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11240" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "514", + "durability": null, + "name": "Young impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11241" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "A gourmet impling in a jar.", + "grand_exchange_price": "677", + "durability": null, + "name": "Gourm' impling jar", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11242" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "677", + "durability": null, + "name": "Gourm' impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11243" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Earth impling in a jar.", + "grand_exchange_price": "1343", + "durability": null, + "name": "Earth impling jar", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11244" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1343", + "durability": null, + "name": "Earth impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11245" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Essence impling in a jar.", + "grand_exchange_price": "1266", + "durability": null, + "name": "Ess' impling jar", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11246" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1266", + "durability": null, + "name": "Ess' impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11247" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Eclectic impling in a jar.", + "grand_exchange_price": "2943", + "durability": null, + "name": "Eclectic impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11248" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2943", + "durability": null, + "name": "Eclectic impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11249" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Nature impling in a jar.", + "grand_exchange_price": "8593", + "durability": null, + "name": "Nature impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11250" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8593", + "durability": null, + "name": "Nature impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11251" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Magpie impling in a jar.", + "grand_exchange_price": "22900", + "durability": null, + "name": "Magpie impling jar", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11252" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "22900", + "durability": null, + "name": "Magpie impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11253" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Ninja impling in a jar.", + "grand_exchange_price": "21800", + "durability": null, + "name": "Ninja impling jar", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11254" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "21800", + "durability": null, + "name": "Ninja impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11255" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "500", + "examine": "Dragon impling in a jar.", + "grand_exchange_price": "423600", + "durability": null, + "name": "Dragon impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11256" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "423600", + "durability": null, + "name": "Dragon impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11257" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Creates butterfly and impling jars.", + "durability": null, + "name": "Jar generator", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11258" + }, + { + "requirements": "{21,17}", + "shop_price": "3", + "turn90cw_anim": "6610", + "examine": "For catching butterflies.", + "walk_anim": "6607", + "durability": null, + "destroy": "true", + "weight": "0.2", + "turn90ccw_anim": "6609", + "attack_speed": "4", + "two_handed": "", + "weapon_interface": "14", + "turn180_anim": "6608", + "render_anim": "1426", + "equipment_slot": "3", + "destroy_message": "You will have to trade with Elnock to get a new magic butterfly net.", + "stand_anim": "6604", + "name": "Magic butterfly net", + "tradeable": "false", + "run_anim": "6603", + "archery_ticket_price": "0", + "id": "11259", + "stand_turn_anim": "6611" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "It's got little holes in the top.", + "grand_exchange_price": "248", + "durability": null, + "name": "Impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11260" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "248", + "durability": null, + "name": "Impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11261" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Imps seem to hate this stuff. Can't say I blame them.", + "grand_exchange_price": "1016", + "durability": null, + "name": "Imp repellent", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11262" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1016", + "durability": null, + "name": "Imp repellent", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11263" + }, + { + "ge_buy_limit": "100", + "examine": "Omega 3 oil. Good for the brain, not so for the nose.", + "grand_exchange_price": "601", + "durability": null, + "name": "Anchovy oil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11264" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "601", + "durability": null, + "name": "Anchovy oil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11265" + }, + { + "ge_buy_limit": "100", + "examine": "Fish paste. Urk.", + "grand_exchange_price": "57", + "durability": null, + "name": "Anchovy paste", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11266" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11267" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11268" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11269" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11270" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11271" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11272" + }, + { + "destroy_message": "You will have to ask Elnock for another one of these.", + "examine": "Lets you easily identify your prey.", + "durability": null, + "name": "Impling scroll", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11273" + }, + { + "remove_sleeves": "true", + "examine": "The label says 'Vivid Crimson', but it looks like pink to me!", + "grand_exchange_price": "27", + "durability": null, + "name": "Ham shirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "11274", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11275" + }, + { + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11276" + }, + { + "lendable": "true", + "examine": "I hope I don't meet any roundheads...", + "durability": null, + "name": "Cavalier mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11277", + "equipment_slot": "8" + }, + { + "examine": "Essential mime wear.", + "durability": null, + "name": "Beret mask", + "weight": "1", + "archery_ticket_price": "0", + "id": "11278", + "equipment_slot": "0" + }, + { + "destroy_message": "You can complete the quest by speaking to Oziach even if you do not have the head.", + "examine": "The severed head of the great dragon Elvarg!", + "durability": null, + "name": "Elvarg's head", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11279", + "equipment_slot": "3" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "I hope I don't meet any roundheads...", + "durability": null, + "name": "Cavalier and mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11280", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Cavalier and mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11281" + }, + { + "remove_head": "true", + "examine": "Essential mime wear.", + "durability": null, + "name": "Beret and mask", + "weight": "1", + "archery_ticket_price": "0", + "id": "11282", + "equipment_slot": "0" + }, + { + "requirements": "{1,75}", + "examine": "A heavy shield with a snarling, draconic visage.", + "grand_exchange_price": "5653008", + "rare_item": "true", + "durability": null, + "name": "Dragonfire shield", + "weight": "7.2", + "archery_ticket_price": "0", + "id": "11283", + "bonuses": "0,0,0,-10,-5,20,25,22,10,22,17,7,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,75}", + "ge_buy_limit": "10", + "examine": "A heavy shield with a snarling, draconic visage.", + "rare_item": "true", + "durability": null, + "weight": "7.2", + "equipment_slot": "5", + "grand_exchange_price": "7700000", + "name": "Dragonfire shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11284", + "bonuses": "0,0,0,-10,-5,20,25,22,10,22,17,7,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "7700000", + "durability": null, + "name": "Dragonfire shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11285" + }, + { + "ge_buy_limit": "10", + "examine": "It looks like this could be attached to a shield somehow.", + "grand_exchange_price": "8000000", + "rare_item": "true", + "durability": null, + "name": "Draconic visage", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "11286" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "8000000", + "durability": null, + "name": "Draconic visage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11287" + }, + { + "examine": "A heavy barbarian Fishing rod.", + "durability": null, + "name": "Barbarian rod", + "weight": "1", + "archery_ticket_price": "0", + "id": "11323" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "Roe, or cheap fishy eggs.", + "grand_exchange_price": "17", + "durability": null, + "name": "Roe", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "11324" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "17", + "durability": null, + "name": "Roe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11325" + }, + { + "ge_buy_limit": "5000", + "examine": "Caviar, or expensive fishy eggs.", + "grand_exchange_price": "370", + "durability": null, + "name": "Caviar", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "11326" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "370", + "durability": null, + "name": "Caviar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11327" + }, + { + "shop_price": "11", + "ge_buy_limit": "5000", + "examine": "A sad-looking trout.", + "grand_exchange_price": "9", + "durability": null, + "name": "Leaping trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11328" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "9", + "durability": null, + "name": "Leaping trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11329" + }, + { + "ge_buy_limit": "5000", + "examine": "Some non-tasty salmon.", + "grand_exchange_price": "19", + "durability": null, + "name": "Leaping salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11330" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "19", + "durability": null, + "name": "Leaping salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11331" + }, + { + "ge_buy_limit": "5000", + "examine": "A bloated sturgeon.", + "grand_exchange_price": "151", + "durability": null, + "name": "Leaping sturgeon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11332" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "151", + "durability": null, + "name": "Leaping sturgeon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11333" + }, + { + "ge_buy_limit": "100", + "examine": "Slices of inedible fish.", + "grand_exchange_price": "2", + "durability": null, + "name": "Fish offcuts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11334" + }, + { + "remove_head": "true", + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "Protects your head and looks impressive too.", + "rare_item": "true", + "durability": null, + "weight": "2", + "absorb": "2,0,4", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "51600000", + "name": "Dragon full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11335", + "bonuses": "0,0,0,-6,-2,45,48,41,-1,46,12,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "51600000", + "durability": null, + "name": "Dragon full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11336" + }, + { + "destroy_message": "I can gather more from the caverns below the Baxtorian Lake.", + "examine": "The bones of a barbarian warrior, slain by his fellow adventurers.", + "durability": null, + "name": "Mangled bones", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11337" + }, + { + "destroy_message": "I can gather more from the caverns below the Baxtorian Lake.", + "examine": "The bones of a barbarian warrior, slain by vile dragons.", + "durability": null, + "name": "Chewed bones", + "destroy": "true", + "weight": "9.6", + "archery_ticket_price": "0", + "id": "11338" + }, + { + "destroy_message": "I can obtain another from Otto.", + "examine": "Records from my discoveries beneath the lake.", + "durability": null, + "name": "My notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11339" + }, + { + "destroy_message": "I can obtain another from Otto.", + "examine": "A record of Otto's instructions to me.", + "durability": null, + "name": "Barbarian skills", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11340" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11341" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11342" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11343" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11344" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11345" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11346" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11347" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11348" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11349" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11350" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11351" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11352" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11353" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11354" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11355" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11356" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11357" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11358" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11359" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11360" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11361" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11362" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11363" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11364" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11365" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11366" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "204", + "stand_anim": "813", + "name": "Bronze hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11367", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "204", + "durability": null, + "name": "Bronze hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11368" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "25", + "stand_anim": "813", + "name": "Iron hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11369", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Iron hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11370" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "93", + "stand_anim": "813", + "name": "Steel hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11371", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "Steel hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11372" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "357", + "stand_anim": "813", + "name": "Mithril hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11373", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "357", + "durability": null, + "name": "Mithril hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11374" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1095", + "stand_anim": "813", + "name": "Adamant hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11375", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1095", + "durability": null, + "name": "Adamant hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11376" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "12300", + "stand_anim": "813", + "name": "Rune hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11377", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12300", + "durability": null, + "name": "Rune hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11378" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "290", + "stand_anim": "813", + "name": "Bronze hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11379", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "290", + "durability": null, + "name": "Bronze hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11380" + }, + { + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed bronze hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Bronze hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11381", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "775", + "stand_anim": "813", + "name": "Bronze hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11382", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "775", + "durability": null, + "name": "Bronze hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11383" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8974", + "stand_anim": "813", + "name": "Bronze hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11384", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8974", + "durability": null, + "name": "Bronze hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11385" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "99", + "stand_anim": "813", + "name": "Iron hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11386", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "99", + "durability": null, + "name": "Iron hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11387" + }, + { + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed iron hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Iron hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11388", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "584", + "stand_anim": "813", + "name": "Iron hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11389", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "584", + "durability": null, + "name": "Iron hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11390" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8783", + "stand_anim": "813", + "name": "Iron hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11391", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8783", + "durability": null, + "name": "Iron hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11392" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "151", + "stand_anim": "813", + "name": "Steel hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11393", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "151", + "durability": null, + "name": "Steel hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11394" + }, + { + "requirements": "{0,5}", + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed steel hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Steel hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11395", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "636", + "stand_anim": "813", + "name": "Steel hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11396", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "636", + "durability": null, + "name": "Steel hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11397" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8835", + "stand_anim": "813", + "name": "Steel hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11398", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8835", + "durability": null, + "name": "Steel hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11399" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "440", + "stand_anim": "813", + "name": "Mithril hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11400", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "440", + "durability": null, + "name": "Mithril hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11401" + }, + { + "requirements": "{0,20}", + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed mithril hasta", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "353", + "stand_anim": "813", + "name": "Mithril hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11402", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "925", + "stand_anim": "813", + "name": "Mithril hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11403", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "925", + "durability": null, + "name": "Mithril hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11404" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8711", + "stand_anim": "813", + "name": "Mithril hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11405", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8711", + "durability": null, + "name": "Mithril hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11406" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1154", + "stand_anim": "813", + "name": "Adamant hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11407", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1154", + "durability": null, + "name": "Adamant hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11408" + }, + { + "requirements": "{0,30}", + "turn90cw_anim": "1207", + "examine": "\tA karambwan poison-tipped, one-handed adamantite hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Adamant hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11409", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1639", + "stand_anim": "813", + "name": "Adamant hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11410", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1639", + "durability": null, + "name": "Adamant hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11411" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "9388", + "stand_anim": "813", + "name": "Adamant hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11412", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9388", + "durability": null, + "name": "Adamant hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11413" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "12300", + "stand_anim": "813", + "name": "Rune hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11414", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12300", + "durability": null, + "name": "Rune hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11415" + }, + { + "requirements": "{0,40}", + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed rune hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Rune hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11416", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "12200", + "stand_anim": "813", + "name": "Rune hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11417", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12200", + "durability": null, + "name": "Rune hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11418" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "15500", + "stand_anim": "813", + "name": "Rune hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11419", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15500", + "durability": null, + "name": "Rune hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11420" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy attack potion", + "grand_exchange_price": "20", + "durability": null, + "name": "Attack mix(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "11429" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "20", + "durability": null, + "name": "Attack mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11430" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy attack potion", + "grand_exchange_price": "19", + "durability": null, + "name": "Attack mix(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "11431" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "19", + "durability": null, + "name": "Attack mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11432" + }, + { + "ge_buy_limit": "1000", + "examine": "Two doses of fishy antipoison potion.", + "grand_exchange_price": "455", + "durability": null, + "name": "Antipoison mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11433" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "455", + "durability": null, + "name": "Antipoison mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11434" + }, + { + "ge_buy_limit": "1000", + "examine": "Two doses of fishy antipoison potion.", + "grand_exchange_price": "608", + "durability": null, + "name": "Antipoison mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11435" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "608", + "durability": null, + "name": "Antipoison mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11436" + }, + { + "ge_buy_limit": "1000", + "examine": "2 dose: Two doses of fishy Relicym's balm.", + "grand_exchange_price": "264", + "durability": null, + "name": "Relicym's mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11437" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "264", + "durability": null, + "name": "Relicym's mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11438" + }, + { + "ge_buy_limit": "1000", + "examine": "2 dose: Two doses of fishy Relicym's balm.", + "grand_exchange_price": "131", + "durability": null, + "name": "Relicym's mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11439" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "131", + "durability": null, + "name": "Relicym's mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11440" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy strength potion.", + "grand_exchange_price": "159", + "durability": null, + "name": "Strength mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11441" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "159", + "durability": null, + "name": "Strength mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11442" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy strength potion.", + "grand_exchange_price": "164", + "durability": null, + "name": "Strength mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11443" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "164", + "durability": null, + "name": "Strength mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11444" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy Combat potion", + "grand_exchange_price": "366", + "durability": null, + "name": "Combat mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11445" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "durability": null, + "name": "Combat mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11446" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy Combat potion", + "grand_exchange_price": "328", + "durability": null, + "name": "Combat mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11447" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "328", + "durability": null, + "name": "Combat mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11448" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of fishy restore potion.", + "grand_exchange_price": "17", + "durability": null, + "name": "Restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11449" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "17", + "durability": null, + "name": "Restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11450" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of fishy restore potion.", + "grand_exchange_price": "24", + "durability": null, + "name": "Restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11451" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "24", + "durability": null, + "name": "Restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11452" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy energy potion.", + "grand_exchange_price": "248", + "durability": null, + "name": "Energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11453" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "248", + "durability": null, + "name": "Energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11454" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy energy potion.", + "grand_exchange_price": "212", + "durability": null, + "name": "Energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11455" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "212", + "durability": null, + "name": "Energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11456" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy defence potion", + "grand_exchange_price": "887", + "durability": null, + "name": "Defence mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11457" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "887", + "durability": null, + "name": "Defence mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11458" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy defence potion", + "grand_exchange_price": "780", + "durability": null, + "name": "Defence mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11459" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "780", + "durability": null, + "name": "Defence mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11460" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of a fishy agility potion", + "grand_exchange_price": "388", + "durability": null, + "name": "Agility mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11461" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "388", + "durability": null, + "name": "Agility mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11462" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of a fishy agility potion", + "grand_exchange_price": "459", + "durability": null, + "name": "Agility mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11463" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "459", + "durability": null, + "name": "Agility mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11464" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of a fishy Prayer potion.", + "grand_exchange_price": "2761", + "durability": null, + "name": "Prayer mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11465" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2761", + "durability": null, + "name": "Prayer mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11466" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of a fishy Prayer potion.", + "grand_exchange_price": "1857", + "durability": null, + "name": "Prayer mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11467" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1857", + "durability": null, + "name": "Prayer mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11468" + }, + { + "ge_buy_limit": "1000", + "examine": "one/two doses of fishy super attack potion", + "grand_exchange_price": "375", + "durability": null, + "name": "Superattack mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11469" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "375", + "durability": null, + "name": "Superattack mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11470" + }, + { + "ge_buy_limit": "1000", + "examine": "one/two doses of fishy super attack potion", + "grand_exchange_price": "516", + "durability": null, + "name": "Superattack mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11471" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "516", + "durability": null, + "name": "Superattack mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11472" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy super antipoison potion.", + "grand_exchange_price": "613", + "durability": null, + "name": "Anti-p supermix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11473" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "613", + "durability": null, + "name": "Anti-p supermix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11474" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy super antipoison potion.", + "grand_exchange_price": "1119", + "durability": null, + "name": "Anti-p supermix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11475" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1119", + "durability": null, + "name": "Anti-p supermix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11476" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two Doses of fishy fishing potion.", + "grand_exchange_price": "123", + "durability": null, + "name": "Fishing mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11477" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "123", + "durability": null, + "name": "Fishing mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11478" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two Doses of fishy fishing potion.", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11479" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11480" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super energy potion.", + "grand_exchange_price": "1062", + "durability": null, + "name": "Sup. energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11481" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1062", + "durability": null, + "name": "Sup. energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11482" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super energy potion.", + "grand_exchange_price": "562", + "durability": null, + "name": "Sup. energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11483" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "562", + "durability": null, + "name": "Sup. energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11484" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Super strength potion.", + "grand_exchange_price": "955", + "durability": null, + "name": "Sup. str. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11485" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "955", + "durability": null, + "name": "Sup. str. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11486" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Super strength potion.", + "grand_exchange_price": "1040", + "durability": null, + "name": "Sup. str. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11487" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1040", + "durability": null, + "name": "Sup. str. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11488" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Magic essence potion.", + "grand_exchange_price": "808", + "durability": null, + "name": "Magic ess. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11489" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "808", + "durability": null, + "name": "Magic ess. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11490" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Magic essence potion.", + "grand_exchange_price": "447", + "durability": null, + "name": "Magic ess. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11491" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "447", + "durability": null, + "name": "Magic ess. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11492" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super restore potion.", + "grand_exchange_price": "3670", + "durability": null, + "name": "Sup. restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11493" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3670", + "durability": null, + "name": "Sup. restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11494" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super restore potion.", + "grand_exchange_price": "3104", + "durability": null, + "name": "Sup. restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11495" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3104", + "durability": null, + "name": "Sup. restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11496" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy super defence potion", + "grand_exchange_price": "38", + "durability": null, + "name": "Sup. def. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11497" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "38", + "durability": null, + "name": "Sup. def. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11498" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy super defence potion", + "grand_exchange_price": "66", + "durability": null, + "name": "Sup. def. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11499" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "66", + "durability": null, + "name": "Sup. def. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11500" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy extra strength antidote potion.", + "grand_exchange_price": "1909", + "durability": null, + "name": "Antidote+ mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11501" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1909", + "durability": null, + "name": "Antidote+ mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11502" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy extra strength antidote potion.", + "grand_exchange_price": "1330", + "durability": null, + "name": "Antidote+ mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11503" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1330", + "durability": null, + "name": "Antidote+ mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11504" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy anti-fire breath potion.", + "grand_exchange_price": "2048", + "durability": null, + "name": "Antifire mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11505" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2048", + "durability": null, + "name": "Antifire mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11506" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy anti-fire breath potion.", + "grand_exchange_price": "1444", + "durability": null, + "name": "Antifire mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11507" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1444", + "durability": null, + "name": "Antifire mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11508" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy ranging potion.", + "grand_exchange_price": "2879", + "durability": null, + "name": "Ranging mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11509" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2879", + "durability": null, + "name": "Ranging mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11510" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy ranging potion.", + "grand_exchange_price": "1880", + "durability": null, + "name": "Ranging mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11511" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1880", + "durability": null, + "name": "Ranging mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11512" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy magic potion.", + "grand_exchange_price": "1022", + "durability": null, + "name": "Magic mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11513" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1022", + "durability": null, + "name": "Magic mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11514" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy magic potion.", + "grand_exchange_price": "1323", + "durability": null, + "name": "Magic mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11515" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1323", + "durability": null, + "name": "Magic mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11516" + }, + { + "ge_buy_limit": "1000", + "examine": "Doses of fishy hunting potion", + "grand_exchange_price": "146", + "durability": null, + "name": "Hunting mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11517" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "146", + "durability": null, + "name": "Hunting mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11518" + }, + { + "ge_buy_limit": "1000", + "examine": "Doses of fishy hunting potion", + "grand_exchange_price": "87", + "durability": null, + "name": "Hunting mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11519" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "87", + "durability": null, + "name": "Hunting mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11520" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Zamorak potion.", + "grand_exchange_price": "665", + "durability": null, + "name": "Zamorak mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11521" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "665", + "durability": null, + "name": "Zamorak mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11522" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Zamorak potion.", + "grand_exchange_price": "339", + "durability": null, + "name": "Zamorak mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11523" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "339", + "durability": null, + "name": "Zamorak mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11524" + }, + { + "ge_buy_limit": "5000", + "examine": "More fluff than feather.", + "grand_exchange_price": "325", + "durability": null, + "name": "Wimpy feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11525" + }, + { + "destroy_message": "If you drop this book it will be destroyed. You cannot replace it.", + "examine": "Educate yourself.", + "durability": null, + "name": "Book of knowledge", + "weight": "1", + "archery_ticket_price": "0", + "id": "11640" + }, + { + "durability": null, + "name": "Astronomy book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11655" + }, + { + "ge_buy_limit": "100", + "examine": "A book that explains the art of crafting items from glass.", + "grand_exchange_price": "278", + "durability": null, + "name": "Glassblowing book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11656" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "278", + "durability": null, + "name": "Glassblowing book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11657" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A mage helm from the order of the Void Knights.", + "durability": null, + "name": "Void mage helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11663", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A ranger helm from the order of the Void Knights", + "durability": null, + "name": "Void ranger helm", + "tradeable": "false", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "11664", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A melee helm from the order of the Void Knights.", + "durability": null, + "name": "Void melee helm", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "11665", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Void seal(8)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11666", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(7)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11667", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(6)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11668", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(5)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11669", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(4)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11670", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(3)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11671", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(2)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11672", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(1)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11673", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A mage helm from the order of the Void Knights.", + "durability": null, + "name": "Void mage helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11674", + "bonuses": "0,0,0,0,0,6,6,6,6,6,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A ranger helm from the order of the Void Knights", + "durability": null, + "name": "Void ranger helm", + "tradeable": "false", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "11675", + "bonuses": "0,0,0,0,0,6,6,6,6,6,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A melee helm from the order of the Void Knights.", + "durability": null, + "name": "Void melee helm", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "11676", + "bonuses": "0,0,0,0,0,6,6,6,6,6,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "I can find another book in the Keldagrim library.", + "examine": "\"Beyond Trollheim\" by Nestor Peregrine.", + "durability": null, + "name": "Explorer's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11677" + }, + { + "destroy_message": "You'll need to visit the Sinclair Mansion to get another one.", + "examine": "A black helm, too small for your head", + "durability": null, + "name": "Black knight helm", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "11678" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11679" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A change of address form.", + "durability": null, + "name": "Address form", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11680" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It has something written on it.", + "durability": null, + "name": "Scrap paper", + "archery_ticket_price": "0", + "id": "11681" + }, + { + "examine": "I could use this to pick the lock.", + "durability": null, + "name": "Hair clip", + "archery_ticket_price": "0", + "id": "11682" + }, + { + "ge_buy_limit": "10", + "examine": "Godsword shards 1 and 2.Godsword shards 2 and 3.Godsword shards 1 and 3.", + "grand_exchange_price": "331300", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11686" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "331300", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11687" + }, + { + "ge_buy_limit": "10", + "examine": "Godsword shards 1 and 2.Godsword shards 2 and 3.Godsword shards 1 and 3.", + "grand_exchange_price": "342100", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11688" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "342100", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11689" + }, + { + "ge_buy_limit": "10", + "examine": "The blade for the ultimate weapon.", + "grand_exchange_price": "466800", + "durability": null, + "name": "Godsword blade", + "tradeable": "true", + "weight": "7.5", + "archery_ticket_price": "0", + "id": "11690" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "466800", + "durability": null, + "name": "Godsword blade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11691" + }, + { + "ge_buy_limit": "10", + "examine": "Godsword shards 1 and 2.Godsword shards 2 and 3.Godsword shards 1 and 3.", + "grand_exchange_price": "348500", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11692" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "348500", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11693" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A beautiful, heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "28000000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11694", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Armadyl godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "28000000", + "durability": null, + "name": "Armadyl godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11695" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A brutally heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "3700000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11696", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Bandos godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3700000", + "durability": null, + "name": "Bandos godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11697" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A gracious, heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "22000000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11698", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Saradomin godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "22000000", + "durability": null, + "name": "Saradomin godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11699" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A terrifying, heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "6100000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11700", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Zamorak godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "6100000", + "durability": null, + "name": "Zamorak godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11701" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "30600000", + "rare_item": "true", + "durability": null, + "name": "Armadyl hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11702" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "30600000", + "durability": null, + "name": "Armadyl hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11703" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "3300000", + "rare_item": "true", + "durability": null, + "name": "Bandos hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11704" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3300000", + "durability": null, + "name": "Bandos hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11705" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "24900000", + "rare_item": "true", + "durability": null, + "name": "Saradomin hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11706" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "24900000", + "durability": null, + "name": "Saradomin hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11707" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "6100000", + "rare_item": "true", + "durability": null, + "name": "Zamorak hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11708" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "6100000", + "durability": null, + "name": "Zamorak hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11709" + }, + { + "ge_buy_limit": "10", + "examine": "Part of the Godsword blade.", + "grand_exchange_price": "150200", + "durability": null, + "rare_item": "true", + "name": "Godsword shard 1", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11710" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "150200", + "durability": null, + "name": "Godsword shard 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11711" + }, + { + "ge_buy_limit": "10", + "examine": "Part of the Godsword blade.", + "grand_exchange_price": "149100", + "durability": null, + "rare_item": "true", + "name": "Godsword shard 2", + "tradeable": "true", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11712" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "149100", + "durability": null, + "name": "Godsword shard 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11713" + }, + { + "ge_buy_limit": "10", + "examine": "Part of the Godsword blade.", + "grand_exchange_price": "149800", + "durability": null, + "rare_item": "true", + "name": "Godsword shard 3", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11714" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "149800", + "durability": null, + "name": "Godsword shard 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11715" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "An evil spear.", + "walk_anim": "1205", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "5400000", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11716", + "stand_turn_anim": "1209", + "bonuses": "85,65,65,0,0,13,13,12,0,13,0,75,2,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "3", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Zamorakian spear" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "5400000", + "durability": null, + "name": "Zamorakian spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11717" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "A helmet of great craftmanship.", + "rare_item": "true", + "durability": null, + "weight": "0.5", + "absorb": "0,5,2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "4100000", + "name": "Armadyl helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11718", + "bonuses": "-5,-5,-5,-5,10,6,8,10,10,8,12,0,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "4100000", + "durability": null, + "name": "Armadyl helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11719" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "A chestplate of great craftsmanship", + "rare_item": "true", + "durability": null, + "weight": "4", + "absorb": "0,10,5", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "14800000", + "name": "Armadyl chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11720", + "bonuses": "-7,-7,-7,-15,33,56,48,61,70,57,52,0,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "14800000", + "durability": null, + "name": "Armadyl chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11721" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "2", + "examine": "A rune plateskirt in the colours of Armadyl.", + "rare_item": "true", + "durability": null, + "weight": "8", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "14800000", + "name": "Armadyl plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11722", + "bonuses": "-6,-6,-6,-10,20,32,26,34,40,33,25,0,1,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14800000", + "durability": null, + "name": "Armadyl plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11723" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "1", + "examine": "A sturdy chestplate.", + "rare_item": "true", + "durability": null, + "weight": "12", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "14700000", + "name": "Bandos chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11724", + "bonuses": "0,0,0,-15,-10,98,93,105,-6,133,52,4,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "14700000", + "durability": null, + "name": "Bandos chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11725" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "1", + "examine": "A sturdy pair of tassets.", + "rare_item": "true", + "durability": null, + "weight": "8", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "15200000", + "name": "Bandos tassets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11726", + "bonuses": "0,0,0,-21,-7,71,63,66,-4,93,25,2,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "15200000", + "durability": null, + "name": "Bandos tassets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11727" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "1", + "examine": "Some sturdy boots", + "rare_item": "true", + "durability": null, + "weight": "6", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "111700", + "name": "Bandos boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11728", + "bonuses": "0,0,0,-5,-3,17,18,19,0,0,15,0,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "111700", + "durability": null, + "name": "Bandos boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11729" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "The incredible blade of an Icyene.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7044", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "5300000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11730", + "stand_turn_anim": "7040", + "bonuses": "0,82,60,0,0,0,0,0,0,0,0,82,2,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "3", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Saradomin sword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "5300000", + "durability": null, + "name": "Saradomin sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11731" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "These will protect my feet.", + "durability": null, + "rare_item": "true", + "weight": "1", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "95400", + "name": "Dragon boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11732", + "bonuses": "0,0,0,-3,-1,16,17,18,0,0,15,4,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95400", + "durability": null, + "name": "Dragon boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11733" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scroll for Sir Tiffy. The wax seal is broken. / Before reading the scroll: A scroll for Sir Tiffy. It is sealed with a wax insignia.", + "durability": null, + "name": "Knight's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11734" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scroll for Sir Tiffy. The wax seal is broken. / Before reading the scroll: A scroll for Sir Tiffy. It is sealed with a wax insignia.", + "durability": null, + "name": "Knight's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11735" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "231300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11736", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Steam battlestaff" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "231300", + "durability": null, + "name": "Steam battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11737" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "267600", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11738", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic steam staff" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "267600", + "durability": null, + "name": "Mystic steam staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11739" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11741" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11743" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11745" + }, + { + "destroy_message": "There may be another in the chest where you found this.", + "examine": "This probably opens a chest in Golrie's caves. (Path of Glophrie)", + "durability": null, + "name": "A key to a chest", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11747" + }, + { + "destroy_message": "There may be another in the chest where you found this.", + "examine": "This opens the door into Golrie's strongroom. (Path of Glophrie)", + "durability": null, + "name": "Strongroom key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11748" + }, + { + "destroy_message": "Maybe Brimstail will have another crystal seed you could grow into a chime.", + "examine": "It makes a sound.", + "durability": null, + "name": "Crystal chime", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11749", + "equipment_slot": "3" + }, + { + "destroy_message": "There may be another in the chest where you found this.", + "examine": "Notes written by Yewnock while copying Oaknock's machine.", + "durability": null, + "name": "Yewnock's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11750" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11753" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11754" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11755" + }, + { + "destroy_message": "You will need to get a new set of armour from Rat Burgiss if you destroy this one.", + "remove_sleeves": "true", + "examine": "Varrock Smithing armour.", + "durability": null, + "name": "Varrock armour 1", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11756", + "bonuses": "0,0,0,-30,-10,15,14,9,-6,14,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You will need to get a new set of armour from Reldo if you destroy this one.", + "remove_sleeves": "true", + "examine": "Varrock smithing armour.", + "durability": null, + "name": "Varrock armour 2", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11757", + "bonuses": "0,0,0,-30,-10,21,20,12,-6,20,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You will need to get a new set of armour from Vannaka if you destroy this one.", + "remove_sleeves": "true", + "examine": "Varrock smithing armour.", + "durability": null, + "name": "Varrock armour 3", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11758", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "4", + "examine": "A number of wooden logs.", + "grand_exchange_price": "124", + "durability": null, + "name": "Logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11760" + }, + { + "destroy_message": "You can get the diary again from Sandy's desk.", + "examine": "A locked/unlocked diary.", + "durability": null, + "name": "Locked diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11761" + }, + { + "destroy_message": "You can get the diary again from Sandy's desk.", + "examine": "A locked/unlocked diary.", + "durability": null, + "name": "Unlocked diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11762" + }, + { + "destroy_message": "You can get the foot again from the creatures in the Jade Vine.", + "examine": "A wizard's severed foot. You can tell by the robes.", + "durability": null, + "name": "Foot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11764" + }, + { + "destroy_message": "You can get the arm again from the creatures in the Jade Vine.", + "examine": "\"A wizard's severed arm. You can tell by the robes.", + "durability": null, + "name": "Left arm", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11766" + }, + { + "destroy_message": "You can get the arm again from the creatures in the Jade Vine.", + "examine": "A wizard's severed arm. You can tell by the robes.", + "durability": null, + "name": "Right arm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11767" + }, + { + "destroy_message": "You can get the leg again from the creatures in the Jade Vine.", + "examine": "A wizard's severed leg. You can tell by the robes.", + "durability": null, + "name": "Left leg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11768" + }, + { + "destroy_message": "You can get the leg again from the creatures in the Jade Vine.", + "examine": "A wizard's severed leg. You can tell by the robes.", + "durability": null, + "name": "Right leg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11769" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11770" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11771" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11772" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11773" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11774" + }, + { + "examine": "A floppy root cutting. Quite dead.", + "durability": null, + "name": "Wilted cutting", + "archery_ticket_price": "0", + "id": "11775" + }, + { + "examine": "A potted root.", + "durability": null, + "name": "Potted root", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11776" + }, + { + "destroy_message": "You can get the sealed pot back by visiting Garth, the farmer on Karamja.", + "examine": "This sealed pot contains your vine cutting - hopefully still alive.", + "durability": null, + "name": "Sealed pot", + "tradeable": "false", + "destroy": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11777" + }, + { + "examine": "A large seed.", + "durability": null, + "name": "Jade vine seed", + "archery_ticket_price": "0", + "id": "11778" + }, + { + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "Surely this holds many a dark tale...", + "durability": null, + "name": "The grim reaper's diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11780" + }, + { + "bankable": "false", + "destroy_message": "Another can be found in the Grim Reaper's house.", + "examine": "Some of the Grim Reaper's garb.", + "durability": null, + "name": "Grim's robe", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11781" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "Someone's Last Will and Testament.", + "durability": null, + "name": "Last will and testament", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11782" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "A tasty treat for Muncher.", + "durability": null, + "name": "Human bones", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11783" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "Ooooh spooky!", + "durability": null, + "name": "Servant's skull", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11784" + }, + { + "bankable": "false", + "destroy_message": "You can get a replacement from Diango in Draynor Village.", + "examine": "There's not much sand left in the top half...", + "durability": null, + "name": "Hourglass", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11785" + }, + { + "bankable": "false", + "destroy_message": "Another can be found in the Grim Reaper's house.", + "examine": "Used to sharpen the blade of a scythe.", + "durability": null, + "name": "Scythe sharpener", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11786" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "That's gross. Why am I carrying it around?", + "durability": null, + "name": "Human eye", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11787" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "A 'Voice of Doom' potion, used to deepen your voice.", + "durability": null, + "name": "'voice of doom' potion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11788" + }, + { + "remove_head": "true", + "destroy_message": "You should be able to get another from Diango in Draynor Village.", + "examine": "Allows me to imitate the harbinger of doom, the stealer of souls, the eternal end...", + "durability": null, + "name": "Grim reaper hood", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11789", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "destroy_message": "You should be able to get another from Diango in Draynor Village.", + "examine": "Allows me to imitate the harbinger of doom, the stealer of souls, the eternal end...", + "durability": null, + "name": "Grim reaper hood", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11790", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "White goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "11791", + "equipment_slot": "4" + }, + { + "examine": "Smaller than the average goblin. After The Chosen Commander: Oldak's new assistant.", + "durability": null, + "name": "Grubfoot", + "archery_ticket_price": "0", + "id": "11792" + }, + { + "examine": "See article", + "durability": null, + "name": "Zanik", + "archery_ticket_price": "0", + "id": "11793" + }, + { + "shop_price": "32", + "examine": "Oldak's Marvellous Moving-Over-Distance Sphere", + "durability": null, + "name": "Plain of mud sphere", + "archery_ticket_price": "0", + "id": "11794" + }, + { + "destroy_message": "The Ekeleshuun priest probably has a spare.", + "examine": "The key you stole from the Ekeleshuun priest.", + "durability": null, + "name": "Ekeleshuun key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11795" + }, + { + "destroy_message": "The Narogoshuun priest probably has a spare.", + "examine": "The key you stole from the Narogoshuun priest.", + "durability": null, + "name": "Narogoshuun key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11796" + }, + { + "destroy_message": "The Huzamogaarb priest probably has a spare.", + "examine": "The key you stole from the Huzamogaarb priest.", + "durability": null, + "name": "Huzamogaarb key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11797" + }, + { + "destroy_message": "The Saragorgak priest probably has a spare.", + "examine": "The key you stole from the Saragorgak priest.", + "durability": null, + "name": "Saragorgak key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11798" + }, + { + "destroy_message": "The Horogothgar priest probably has a spare.", + "examine": "The key you stole from the Horogothgar priest.", + "durability": null, + "name": "Horogothgar key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11799" + }, + { + "destroy_message": "The Yurkolgokh priest probably has a spare.", + "examine": "The key you stole from the Yurkolgokh priest.", + "durability": null, + "name": "Yurkolgokh key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11800" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Snothead's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11802" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Snailfeet's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11803" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Mosschin's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11804" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Redeyes's bone", + "archery_ticket_price": "0", + "id": "11805" + }, + { + "examine": "An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Strongbones's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11806" + }, + { + "examine": "You can combine these with a toadflax to make a goblin transformation potion.", + "durability": null, + "name": "Pharmakos berries", + "archery_ticket_price": "0", + "id": "11807" + }, + { + "examine": "An ugly albino fish.", + "durability": null, + "name": "Whitefish", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11808" + }, + { + "examine": "4 doses of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (4)", + "archery_ticket_price": "0", + "id": "11809", + "equipment_slot": "5" + }, + { + "examine": "3 doses of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (3)", + "archery_ticket_price": "0", + "id": "11810" + }, + { + "examine": "2 doses of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (2)", + "archery_ticket_price": "0", + "id": "11811" + }, + { + "examine": "1 dose of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (1)", + "archery_ticket_price": "0", + "id": "11812" + }, + { + "shop_price": "177", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing bronze full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "614", + "durability": null, + "name": "Bronze armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11814" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "614", + "durability": null, + "name": "Bronze armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11815" + }, + { + "shop_price": "177", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing bronze full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "938", + "durability": null, + "name": "Bronze armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11816", + "bonuses": "0,0,0,-59,-19,27,26,18,-11,25,5,0,0,1,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "938", + "durability": null, + "name": "Bronze armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11817" + }, + { + "shop_price": "1022", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing iron full helm, platebody, legs, and kiteshield.", + "grand_exchange_price": "1830", + "durability": null, + "name": "Iron armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11818", + "bonuses": "0,0,0,-65,-21,46,44,33,-12,45,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1830", + "durability": null, + "name": "Iron armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11819" + }, + { + "shop_price": "1022", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing iron full helm, platebody, skirt, and kiteshield.", + "grand_exchange_price": "1711", + "durability": null, + "name": "Iron armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11820", + "bonuses": "0,0,0,-65,-21,46,44,33,-12,45,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1711", + "durability": null, + "name": "Iron armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11821" + }, + { + "requirements": "{5,1}", + "shop_price": "2365", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing steel full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "3646", + "durability": null, + "name": "Steel armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11822", + "bonuses": "0,0,0,-65,-21,71,72,60,-12,70,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3646", + "durability": null, + "name": "Steel armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11823" + }, + { + "requirements": "{5,1}", + "shop_price": "2365", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing steel full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "3796", + "durability": null, + "name": "Steel armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11824", + "bonuses": "0,0,0,-65,-21,71,72,60,-12,70,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3796", + "durability": null, + "name": "Steel armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11825" + }, + { + "requirements": "{10,1}", + "shop_price": "11286", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing Black full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "18900", + "durability": null, + "name": "Black armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11826" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18900", + "durability": null, + "name": "Black armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11827" + }, + { + "requirements": "{10,1}", + "shop_price": "11286", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a black full helm, platebody, skirt and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "grand_exchange_price": "14600", + "name": "Black armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11828", + "bonuses": "0,0,0,-65,-21,91,92,78,-12,90,27,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14600", + "durability": null, + "name": "Black armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11829" + }, + { + "requirements": "{20,1}", + "shop_price": "15232", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a mithril full helm, platebody, legs and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,6", + "grand_exchange_price": "8764", + "name": "Mithril armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11830", + "bonuses": "0,0,0,-65,-21,101,102,89,-12,97,52,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8764", + "durability": null, + "name": "Mithril armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11831" + }, + { + "requirements": "{20,1}", + "shop_price": "15232", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a mithril full helm, platebody, skirt and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,5", + "grand_exchange_price": "7829", + "name": "Mithril armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11832", + "bonuses": "0,0,0,-65,-21,101,102,89,-12,99,50,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7829", + "durability": null, + "name": "Mithril armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11833" + }, + { + "requirements": "{1,30}", + "shop_price": "28276", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing an adamant full helm, platebody, legs and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "7,0,15", + "grand_exchange_price": "20600", + "name": "Adamant armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11834", + "bonuses": "0,0,0,-65,-21,144,146,129,-12,142,76,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20600", + "durability": null, + "name": "Adamant armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11835" + }, + { + "requirements": "{1,30}", + "shop_price": "28276", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing an adamant full helm, platebody, skirt and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "7,0,15", + "grand_exchange_price": "21500", + "name": "Adamant armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11836", + "bonuses": "0,0,0,-65,-21,144,146,129,-12,142,76,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21500", + "durability": null, + "name": "Adamant armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11837" + }, + { + "requirements": "{1,40}", + "shop_price": "136112", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a rune full helm, platebody, legs and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "9,0,20", + "grand_exchange_price": "136300", + "name": "Rune armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11838", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "136300", + "durability": null, + "name": "Rune armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11839" + }, + { + "requirements": "{1,40}", + "shop_price": "136112", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a rune full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "140300", + "durability": null, + "name": "Rune armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11840" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "140300", + "durability": null, + "name": "Rune armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11841" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "4800000", + "examine": "Grand Exchange set containing a dragon helm, chainbody, legs.", + "durability": null, + "name": "Dragon chain armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "2.2", + "id": "11842" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "4800000", + "durability": null, + "name": "Dragon chain armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11843" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "4600000", + "examine": "Grand Exchange set containing a dragon helm, chainbody, skirt.", + "durability": null, + "name": "Dragon chain armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "2.2", + "id": "11844" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "4600000", + "durability": null, + "name": "Dragon chain armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11845" + }, + { + "requirements": "{0,70}-{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Ahrim's robetop, robeskirt, hood, and staff.", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - ahrim's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11846" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - ahrim's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11847" + }, + { + "requirements": "{0,70}-{1,70}-{2,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Dharok's helm, body, legs and greataxe.", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - dharok's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11848" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - dharok's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11849" + }, + { + "requirements": "{0,70}-{1,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Guthan's helm, platebody, chainskirt and warspear.", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Barrows - guthan's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11850" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Barrows - guthan's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11851" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "10", + "examine": "A Grand Exchange set containing Karil's coif, crossbow, leather body, and leather skirt.", + "grand_exchange_price": "2200000", + "durability": null, + "name": "Barrows - karil's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11852" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "2200000", + "durability": null, + "name": "Barrows - karil's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11853" + }, + { + "requirements": "{0,70}-{1,70}-{2,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Torag's helm, body, legs and hammers.", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Barrows - torag's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11854" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Barrows - torag's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11855" + }, + { + "requirements": "{0,70}-{1,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Verac's helm, brassard, plateskirt and flail.", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Barrows - verac's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11856" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Barrows - verac's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11857" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a helm, body, legs and shield", + "grand_exchange_price": "388700000", + "durability": null, + "name": "Third age melee set", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11858" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "388700000", + "durability": null, + "name": "Third age melee set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11859" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing coif, body, chaps and vambraces.", + "grand_exchange_price": "87500000", + "durability": null, + "name": "Third age ranger set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11860" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "87500000", + "durability": null, + "name": "Third age ranger set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11861" + }, + { + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a body, legs, amulet and hat", + "grand_exchange_price": "163100000", + "durability": null, + "name": "Third age mage set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11862" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "163100000", + "durability": null, + "name": "Third age mage set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11863" + }, + { + "requirements": "{1,40}-{4,40}", + "shop_price": "9000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "durability": null, + "weight": "2.2", + "absorb": "0,10,5", + "grand_exchange_price": "8932", + "name": "Green dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11864", + "bonuses": "0,0,0,-40,31,65,50,73,30,62,58,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8932", + "durability": null, + "name": "Green dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11865" + }, + { + "requirements": "{1,40}-{4,50}", + "shop_price": "12000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "grand_exchange_price": "9062", + "durability": null, + "name": "Blue dragonhide set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11866" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9062", + "durability": null, + "name": "Blue dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11867" + }, + { + "requirements": "{1,40}-{4,60}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "grand_exchange_price": "12800", + "durability": null, + "name": "Red dragonhide set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11868" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12800", + "durability": null, + "name": "Red dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11869" + }, + { + "requirements": "{1,40}-{4,70}", + "shop_price": "40000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "grand_exchange_price": "17600", + "durability": null, + "name": "Black dragonhide set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11870" + }, + { + "durability": null, + "name": "Black dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11871" + }, + { + "requirements": "{20,1}-{6,40}", + "shop_price": "169143", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing mystic hat, top, bottoms, gloves, and boots.", + "grand_exchange_price": "163300", + "durability": null, + "name": "Mystic robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11872" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "163300", + "durability": null, + "name": "Mystic robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11873" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing hat, top, bottoms, gloves, and boots", + "grand_exchange_price": "11000000", + "durability": null, + "name": "Infinity robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11874" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "11000000", + "durability": null, + "name": "Infinity robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11875" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a helm, body, boots, gauntlets and legs.", + "grand_exchange_price": "107400", + "durability": null, + "name": "Splitbark armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11876", + "absorb": "13,6,0", + "bonuses": "0,0,0,24,-21,74,59,86,32,0,74,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "107400", + "durability": null, + "name": "Splitbark armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11877" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "341200", + "durability": null, + "name": "Black trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11878", + "absorb": "2,0,4", + "bonuses": "0,0,0,-65,-21,91,92,77,-12,90,23,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "341200", + "durability": null, + "name": "Black trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11879" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "331600", + "durability": null, + "name": "Black trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11880", + "absorb": "2,0,4", + "bonuses": "0,0,0,-65,-21,91,92,77,-12,90,23,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "331600", + "durability": null, + "name": "Black trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11881" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Black gold-trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11882" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Black gold-trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11883" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "1300000", + "durability": null, + "name": "Black gold-trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11884" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1300000", + "durability": null, + "name": "Black gold-trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11885" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "318100", + "durability": null, + "name": "Adamant trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11886" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "318100", + "durability": null, + "name": "Adamant trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11887" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "293700", + "durability": null, + "name": "Adamant trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11888" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "293700", + "durability": null, + "name": "Adamant trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11889" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "949400", + "durability": null, + "name": "Adamant gold-trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11890" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "949400", + "durability": null, + "name": "Adamant gold-trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11891" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "880500", + "durability": null, + "name": "Adamant gold-trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11892" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "880500", + "durability": null, + "name": "Adamant gold-trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11893" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "702500", + "durability": null, + "name": "Rune trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11894", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "702500", + "durability": null, + "name": "Rune trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11895" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "675400", + "durability": null, + "name": "Rune trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11896", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "675400", + "durability": null, + "name": "Rune trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11897" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Rune gold-trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11898", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Rune gold-trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11899" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Rune gold-trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11900", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Rune gold-trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11901" + }, + { + "requirements": "{20,1}-{6,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing hat, robetops and bottoms", + "grand_exchange_price": "207200", + "durability": null, + "name": "Enchanted set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11902" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "207200", + "durability": null, + "name": "Enchanted set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11903" + }, + { + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing hat, robetops and bottoms", + "grand_exchange_price": "877900", + "durability": null, + "name": "Trimmed blue wizard set", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11904" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "877900", + "durability": null, + "name": "Trimmed blue wizard set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11905" + }, + { + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing hat, robe top and bottom", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Gold-trimmed blue wizard set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11906" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Gold-trimmed blue wizard set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11907" + }, + { + "requirements": "{20,4}", + "ge_buy_limit": "10000", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "85100", + "durability": null, + "name": "Trimmed leather armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11908" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "85100", + "durability": null, + "name": "Trimmed leather armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11909" + }, + { + "requirements": "{20,4}", + "ge_buy_limit": "10000", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "217200", + "durability": null, + "name": "Gold-trimmed leather armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11910" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "217200", + "durability": null, + "name": "Gold-trimmed leather armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11911" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "371600", + "durability": null, + "name": "Green d'hide trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11912", + "absorb": "0,10,5", + "bonuses": "0,0,0,-40,31,65,50,73,30,62,58,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "371600", + "durability": null, + "name": "Green d'hide trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11913" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Green d'hide gold-trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11914", + "absorb": "0,10,5", + "bonuses": "0,0,0,-40,31,65,50,73,30,62,58,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Green d'hide gold-trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11915" + }, + { + "requirements": "{1,40}-{4,50}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "38300", + "durability": null, + "name": "Blue d'hide trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11916" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "38300", + "durability": null, + "name": "Blue d'hide trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11917" + }, + { + "requirements": "{1,40}-{4,50}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps.", + "grand_exchange_price": "50000", + "durability": null, + "name": "Blue d'hide gold-trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11918" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "50000", + "durability": null, + "name": "Blue d'hide gold-trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11919" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body, chaps, bracers and coif.", + "grand_exchange_price": "179500", + "durability": null, + "name": "Green d'hide blessed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11920" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "179500", + "durability": null, + "name": "Green d'hide blessed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11921" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body, chaps, bracers and coif.", + "grand_exchange_price": "477500", + "durability": null, + "name": "Blue d'hide blessed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11922" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "477500", + "durability": null, + "name": "Blue d'hide blessed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11923" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body, chaps, bracers and coif.", + "grand_exchange_price": "585300", + "durability": null, + "name": "Red d'hide blessed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11924" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "585300", + "durability": null, + "name": "Red d'hide blessed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11925" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and shield.", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Guthix armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11926", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Guthix armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11927" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield", + "grand_exchange_price": "4000000", + "durability": null, + "name": "Saradomin armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11928", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "4000000", + "durability": null, + "name": "Saradomin armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11929" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield", + "grand_exchange_price": "2300000", + "durability": null, + "name": "Zamorak armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11930", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2300000", + "durability": null, + "name": "Zamorak armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11931" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Guthix armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11932", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Guthix armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11933" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield", + "grand_exchange_price": "3600000", + "durability": null, + "name": "Saradomin armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11934", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3600000", + "durability": null, + "name": "Saradomin armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11935" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield", + "grand_exchange_price": "2000000", + "durability": null, + "name": "Zamorak armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11936", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2000000", + "durability": null, + "name": "Zamorak armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11937" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "5900000", + "durability": null, + "name": "Gilded armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11938" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5900000", + "durability": null, + "name": "Gilded armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11939" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "4300000", + "durability": null, + "name": "Gilded armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11940" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "4300000", + "durability": null, + "name": "Gilded armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11941" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing helm, platebody, legs, boots and gloves", + "grand_exchange_price": "145000", + "durability": null, + "name": "Rockshell armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11942" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "145000", + "durability": null, + "name": "Rockshell armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11943" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing helm, body, chaps, boots and gloves", + "grand_exchange_price": "94500", + "durability": null, + "name": "Spined armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11944", + "absorb": "0,13,6", + "bonuses": "-6,-6,-6,-31,29,68,56,78,34,62,47,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "94500", + "durability": null, + "name": "Spined armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11945" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing helm, top, bottoms, boots and gloves", + "grand_exchange_price": "145200", + "durability": null, + "name": "Skeletal armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11946" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "145200", + "durability": null, + "name": "Skeletal armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11947" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A tiny model of Lumbridge Castle inside a glass dome.", + "durability": null, + "name": "Snow globe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11949", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A tiny model of Lumbridge Castle inside a glass dome.", + "durability": null, + "name": "Snow globe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11950", + "equipment_slot": "3" + }, + { + "attack_anims": "5063", + "examine": "Made from snow. / It's a ball of snow! Uncanny. / How did this not melt in the box?", + "durability": null, + "name": "Snowball", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "11951", + "weapon_interface": "18", + "equipment_slot": "3" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a snow warrior.", + "durability": null, + "name": "Ice sword", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11952" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a snow mage.", + "attack_audios": "2555,0,0,0", + "durability": null, + "name": "Winter staff", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11953" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a snow ranger.", + "durability": null, + "name": "Holly bow", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11954" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a barbarian snowman.", + "durability": null, + "name": "Barbarian snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11955" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "It's actually made of cardboard, but it looks like a dragon full helm.", + "durability": null, + "name": "Dragon snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11956" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Use this to make your snowman look like a dwarf.", + "durability": null, + "name": "Dwarf snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11957" + }, + { + "bankable": "false", + "destroy_message": "Talk to a snow imp to get another.", + "examine": "Arr! Shiver me snowman!", + "durability": null, + "name": "Pirate snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11958" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "The most traditional snowman hat.", + "durability": null, + "name": "Snowman top hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11959" + }, + { + "requirements": "{20,1}-{6,40}", + "shop_price": "215431", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing hat, top, bottoms, gloves, and boots", + "grand_exchange_price": "487300", + "durability": null, + "name": "Light mystic robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11960" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "487300", + "durability": null, + "name": "Light mystic robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11961" + }, + { + "requirements": "{20,1}-{6,40}", + "shop_price": "228541", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing hat, top, bottoms, gloves, and boots", + "grand_exchange_price": "294000", + "durability": null, + "name": "Dark mystic robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11962" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "294000", + "durability": null, + "name": "Dark mystic robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11963" + }, + { + "examine": "I can hatch this in an incubator.", + "durability": null, + "name": "Raven egg", + "archery_ticket_price": "0", + "id": "11964" + }, + { + "examine": "I can hatch this in an incubator.", + "durability": null, + "name": "Vulture egg", + "archery_ticket_price": "0", + "id": "11965" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "archery_ticket_price": "0", + "id": "11966" + }, + { + "shop_price": "750000", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing cannon base, stand, barrels and furnace.", + "grand_exchange_price": "718900", + "durability": null, + "name": "Dwarf cannon set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11967" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "718900", + "durability": null, + "name": "Dwarf cannon set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11968" + }, + { + "destroy_message": "If I destroy this it will disintegrate into its component parts and drop to the floor.", + "examine": "A water tiara infused with water runes. Protects from the hot desert sun.", + "durability": null, + "name": "Enchanted water tiara", + "weight": "1", + "archery_ticket_price": "0", + "id": "11969", + "bonuses": "0,0,0,2,0,5,5,5,3,3,0,0,2,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "I can obtain and fill another one from the archaeologist near Sophanem.", + "examine": "A crate full of distressed gear.", + "durability": null, + "name": "Smelly crate", + "tradeable": "false", + "destroy": "true", + "weight": "30", + "archery_ticket_price": "0", + "id": "11970" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An empty crate, ready for bronze gear.", + "durability": null, + "name": "Empty crate", + "archery_ticket_price": "0", + "id": "11972" + }, + { + "destroy_message": "I can obtain another one from the archaeologist near Sophanem.", + "examine": "A book of research on Scabarite history.", + "durability": null, + "name": "Scabaras research", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11973" + }, + { + "destroy_message": "I can obtain another one from Simon Templeton.", + "examine": "Issued by Simon Templeton.", + "durability": null, + "name": "Artefact receipt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11974" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11975" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11976" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11977" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11978" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11979" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11980" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11981" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11982" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11983" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11984" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11985" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11986" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11987" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11988" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11989" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11990" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11991" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11992" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11993" + }, + { + "destroy_message": "I can obtain another one from the archaeologists near Sophanem.", + "examine": "Newly made, but to an ancient pattern. (Dealing with Scabaras)", + "durability": null, + "name": "Scabarite key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11994" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze dagger.", + "examine": "It has been oxidised.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Oxidised dagger", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11995" + }, + { + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised medium helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11996" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze sword.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised sword", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11997" + }, + { + "turn90cw_anim": "821", + "examine": "It has been oxidised.", + "walk_anim": "819", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "1", + "destroy_message": "I can make another one by using camel dung on a bronze scimitar.", + "stand_anim": "808", + "attack_audios": "2500,0,2517,0", + "name": "Oxidised scimitar", + "tradeable": "false", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "11998", + "stand_turn_anim": "823" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze longsword.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised longsword", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11999" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze full helmet.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised full helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12000" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze square shield.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised square shield", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12001" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze chainbody.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised chainbody", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12002" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze kiteshield.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised kiteshield", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12003" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze two", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised two-handed sword", + "tradeable": "false", + "destroy": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "12004" + }, + { + "destroy_message": "I can make another one by using camel dung on some bronze platelegs.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised platelegs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12005" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze plateskirt.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised plateskirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12006" + }, + { + "requirements": "{23,52}", + "ge_buy_limit": "5000", + "grand_exchange_price": "330", + "examine": "I can summon a spirit terrorbird familiar with this.", + "durability": null, + "name": "Spirit terrorbird pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12007" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "330", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit terrorbird pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12008" + }, + { + "requirements": "{16,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "239", + "examine": "I can summon a granite crab familiar with this.", + "durability": null, + "name": "Granite crab pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12009" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "239", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Granite crab pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12010" + }, + { + "requirements": "{23,75}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2918", + "examine": "I can summon a praying mantis familiar with this.", + "durability": null, + "name": "Praying mantis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12011" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2918", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Praying mantis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12012" + }, + { + "requirements": "{23,78}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2167", + "examine": "I can summon a giant ent familiar with this.", + "durability": null, + "name": "Giant ent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12013" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2167", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Giant ent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12014" + }, + { + "requirements": "{23,63}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2018", + "examine": "I can summon a spirit cobra familiar with this.", + "durability": null, + "name": "Spirit cobra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12015" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2018", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit cobra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12016" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "121", + "examine": "I can summon a spirit dagannoth familiar with this.", + "durability": null, + "name": "Spirit dagannoth pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12017" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "121", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit dagannoth pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12018" + }, + { + "requirements": "{13,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "248", + "examine": "I can summon a thorny snail familiar with this.", + "durability": null, + "name": "Thorny snail pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12019" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "248", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Thorny snail pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12020" + }, + { + "requirements": "{23,33}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1268", + "examine": "I can summon a beaver familiar with this.", + "durability": null, + "name": "Beaver pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12021" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1268", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Beaver pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12022" + }, + { + "requirements": "{23,58}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "I can summon a karamthulhu overlord familiar with this.", + "durability": null, + "name": "Karam. overlord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12023" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karam. overlord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12024" + }, + { + "requirements": "{23,80}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2235", + "examine": "I can summon a hydra familiar with this.", + "durability": null, + "name": "Hydra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12025" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2235", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hydra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12026" + }, + { + "requirements": "{23,55}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2641", + "examine": "I can summon a spirit jelly familiar with this.", + "durability": null, + "name": "Spirit jelly pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12027" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2641", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit jelly pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12028" + }, + { + "requirements": "{23,68}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3506", + "examine": "I can summon a bunyip familiar with this.", + "durability": null, + "name": "Bunyip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12029" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3506", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bunyip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12030" + }, + { + "requirements": "{23,67}", + "ge_buy_limit": "5000", + "grand_exchange_price": "13200", + "examine": "I can summon a war tortoise familiar with this.", + "durability": null, + "name": "War tortoise pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12031" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "War tortoise pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12032" + }, + { + "requirements": "{23,69}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2269", + "examine": "I can summon a fruit bat familiar with this.", + "durability": null, + "name": "Fruit bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12033" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2269", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Fruit bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12034" + }, + { + "requirements": "{23,54}", + "ge_buy_limit": "5000", + "grand_exchange_price": "4004", + "examine": "I can summon an abyssal parasite familiar with this.", + "durability": null, + "name": "Abyssal parasite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12035" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4004", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Abyssal parasite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12036" + }, + { + "requirements": "{23,62}", + "ge_buy_limit": "5000", + "grand_exchange_price": "5660", + "examine": "I can summon an abyssal lurker familiar with this.", + "durability": null, + "name": "Abyssal lurker pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12037" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5660", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Abyssal lurker pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12038" + }, + { + "requirements": "{23,88}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2439", + "examine": "I can summon a unicorn stallion familiar with this.", + "durability": null, + "name": "Unicorn stallion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12039" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2439", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Unicorn stallion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12040" + }, + { + "requirements": "{23,47}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1559", + "examine": "I can summon a magpie familiar with this.", + "durability": null, + "name": "Magpie pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12041" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1559", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Magpie pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12042" + }, + { + "requirements": "{4,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "258", + "examine": "I can summon a dreadfowl familiar with this.", + "durability": null, + "name": "Dreadfowl pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12043" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "258", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dreadfowl pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12044" + }, + { + "requirements": "{23,64}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "I can summon a stranger plant familiar with this.", + "durability": null, + "name": "Stranger plant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12045" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Stranger plant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12046" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "301", + "examine": "I can summon a spirit wolf familiar with this.", + "durability": null, + "name": "Spirit wolf pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12047" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "301", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit wolf pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12048" + }, + { + "requirements": "{18,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "808", + "examine": "I can summon a desert wyrm familiar with this.", + "durability": null, + "name": "Desert wyrm pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12049" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "808", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Desert wyrm pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12050" + }, + { + "requirements": "{23,42}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1812", + "examine": "I can summon an evil turnip familiar with this.", + "durability": null, + "name": "Evil turnip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12051" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1812", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Evil turnip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12052" + }, + { + "requirements": "{23,31}", + "ge_buy_limit": "10000", + "grand_exchange_price": "1416", + "examine": "I can summon a vampire bat familiar with this.", + "durability": null, + "name": "Vampire bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12053" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1416", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Vampire bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12054" + }, + { + "requirements": "{19,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "992", + "examine": "I can summon a spirit scorpion familiar with this.", + "durability": null, + "name": "Spirit scorpion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12055" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "992", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit scorpion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12056" + }, + { + "requirements": "{23,71}", + "ge_buy_limit": "5000", + "grand_exchange_price": "332", + "examine": "I can summon an arctic bear familiar with this.", + "durability": null, + "name": "Arctic bear pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12057" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "332", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Arctic bear pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12058" + }, + { + "requirements": "{10,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2225", + "examine": "I can summon a spirit spider familiar with this.", + "durability": null, + "name": "Spirit spider pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12059" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2225", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit spider pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12060" + }, + { + "requirements": "{23,49}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2045", + "examine": "I can summon a bloated leech familiar with this.", + "durability": null, + "name": "Bloated leech pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12061" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2045", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bloated leech pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12062" + }, + { + "requirements": "{23,25}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3746", + "examine": "I can summon a spirit kalphite familiar with this.", + "durability": null, + "name": "Spirit kalphite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12063" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3746", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit kalphite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12064" + }, + { + "requirements": "{23,32}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1470", + "examine": "I can summon a honey badger familiar with this.", + "durability": null, + "name": "Honey badger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12065" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1470", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Honey badger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12066" + }, + { + "requirements": "{23,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1578", + "examine": "I can summon an albino rat familiar with this.", + "durability": null, + "name": "Albino rat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12067" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1578", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Albino rat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12068" + }, + { + "requirements": "{23,74}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2924", + "examine": "I can summon a granite lobster familiar with this.", + "durability": null, + "name": "Granite lobster pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12069" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2924", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Granite lobster pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12070" + }, + { + "requirements": "{23,41}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1375", + "examine": "I can summon a macaw familiar with this.", + "durability": null, + "name": "Macaw pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12071" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1375", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Macaw pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12072" + }, + { + "requirements": "{23,36}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1804", + "examine": "I can summon a bronze minotaur familiar with this.", + "durability": null, + "name": "Bronze minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12073" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1804", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bronze minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12074" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "I can summon an iron minotaur familiar with this.", + "durability": null, + "name": "Iron minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12075" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Iron minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12076" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2529", + "examine": "I can summon a steel minotaur familiar with this", + "durability": null, + "name": "Steel minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12077" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2529", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Steel minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12078" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2666", + "examine": "I can summon a mithril minotaur with this.", + "durability": null, + "name": "Mithril minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12079" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2666", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Mithril minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12080" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "I can summon an adamant minotaur familiar with this.", + "durability": null, + "name": "Adamant minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12081" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Adamant minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12082" + }, + { + "requirements": "{23,86}", + "ge_buy_limit": "5000", + "grand_exchange_price": "373", + "examine": "I can summon a rune minotaur with this.", + "durability": null, + "name": "Rune minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12083" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "373", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Rune minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12084" + }, + { + "requirements": "{23,61}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2468", + "examine": "I can summon a smoke devil familiar with this.", + "durability": null, + "name": "Smoke devil pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12085" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2468", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Smoke devil pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12086" + }, + { + "requirements": "{23,40}", + "ge_buy_limit": "5000", + "grand_exchange_price": "319", + "examine": "I can summon a bull ant familiar with this.", + "durability": null, + "name": "Bull ant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12087" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "319", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bull ant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12088" + }, + { + "requirements": "{23,92}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3625", + "examine": "I can summon a wolpertinger familiar with this.", + "durability": null, + "name": "Wolpertinger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12089" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3625", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Wolpertinger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12090" + }, + { + "requirements": "{23,28}", + "ge_buy_limit": "5000", + "grand_exchange_price": "906", + "examine": "I can summon a compost mound familiar with this.", + "durability": null, + "name": "Compost mound pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12091" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "906", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Compost mound pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12092" + }, + { + "requirements": "{23,96}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3696", + "examine": "I can summon a pack yak familiar with this.", + "durability": null, + "name": "Pack yak pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12093" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3696", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Pack yak pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12094" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1514", + "examine": "I can summon a spirit cockatrice familiar with this.", + "durability": null, + "name": "Sp. cockatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12095" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1514", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. cockatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12096" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1523", + "examine": "I can summon a spirit guthatrice familiar with this.", + "durability": null, + "name": "Sp. guthatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12097" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1523", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. guthatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12098" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1492", + "examine": "I can summon a spirit saratrice familiar with this.", + "durability": null, + "name": "Sp. saratrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12099" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1492", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. saratrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12100" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1515", + "examine": "I can summon a spirit zamatrice familiar with this.", + "durability": null, + "name": "Sp. zamatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12101" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1515", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. zamatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12102" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1531", + "examine": "I can summon a spirit pengatrice familiar with this.", + "durability": null, + "name": "Sp. pengatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12103" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1531", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. pengatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12104" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3085", + "examine": "I can summon a spirit coraxatrice familiar with this.", + "durability": null, + "name": "Sp. coraxatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12105" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3085", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. coraxatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12106" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3881", + "examine": "I can summon a spirit vulatrice familiar with this.", + "durability": null, + "name": "Sp. vulatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12107" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3881", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. vulatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12108" + }, + { + "ge_buy_limit": "10000", + "examine": "A stripy brown egg.", + "grand_exchange_price": "1053", + "durability": null, + "name": "Cockatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12109" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1053", + "durability": null, + "name": "Cockatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12110" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy green egg.", + "grand_exchange_price": "1171", + "durability": null, + "name": "Guthatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12111" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1171", + "durability": null, + "name": "Guthatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12112" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy blue egg.", + "grand_exchange_price": "1080", + "durability": null, + "name": "Saratrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12113" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1080", + "durability": null, + "name": "Saratrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12114" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy red egg.", + "grand_exchange_price": "1154", + "durability": null, + "name": "Zamatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12115" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1154", + "durability": null, + "name": "Zamatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12116" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy grey egg.", + "grand_exchange_price": "2676", + "durability": null, + "name": "Pengatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12117" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2676", + "durability": null, + "name": "Pengatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12118" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy black egg.", + "grand_exchange_price": "2865", + "durability": null, + "name": "Coraxatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12119" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2865", + "durability": null, + "name": "Coraxatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12120" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy pink egg.", + "grand_exchange_price": "18900", + "durability": null, + "name": "Vulatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12121" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "18900", + "durability": null, + "name": "Vulatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12122" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "293", + "examine": "I can summon a barker toad familiar with this.", + "durability": null, + "name": "Barker toad pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12123" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "293", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Barker toad pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12124" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "A swarm of little flies.", + "grand_exchange_price": "97", + "durability": null, + "name": "Flies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12125" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "97", + "durability": null, + "name": "Flies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12126" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Some beetle bits.", + "grand_exchange_price": "176", + "durability": null, + "name": "Beetle bits", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12127" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "176", + "durability": null, + "name": "Beetle bits", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12128" + }, + { + "ge_buy_limit": "100", + "examine": "Good for feeding birds.", + "grand_exchange_price": "1", + "durability": null, + "name": "Ground fishing bait", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12129" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Mmmm...nuts.", + "grand_exchange_price": "673", + "durability": null, + "name": "Nuts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12130" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "673", + "durability": null, + "name": "Nuts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12131" + }, + { + "examine": "Makes me want to do a truffle shuffle.", + "durability": null, + "name": "Truffle", + "tradeable": "false", + "destroy": "true", + "weight": "28.928", + "archery_ticket_price": "0", + "id": "12132" + }, + { + "durability": null, + "name": "Truffle", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12133", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "5000", + "examine": "An evil turnip.", + "grand_exchange_price": "6750", + "durability": null, + "name": "Evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12134" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "6750", + "durability": null, + "name": "Evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12135" + }, + { + "ge_buy_limit": "5000", + "examine": "An evil turnip.", + "grand_exchange_price": "133", + "durability": null, + "name": "2/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12136" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "133", + "durability": null, + "name": "2/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12137" + }, + { + "ge_buy_limit": "5000", + "examine": "An evil turnip.", + "grand_exchange_price": "20", + "durability": null, + "name": "1/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12138" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "20", + "durability": null, + "name": "1/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12139" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Summoning potion.", + "grand_exchange_price": "4489", + "durability": null, + "name": "Summoning potion(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12140" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4489", + "durability": null, + "name": "Summoning potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12141" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Summoning potion.", + "grand_exchange_price": "3320", + "durability": null, + "name": "Summoning potion(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12142" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3320", + "durability": null, + "name": "Summoning potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12143" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Summoning potion.", + "grand_exchange_price": "1671", + "durability": null, + "name": "Summoning potion(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12144" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1671", + "durability": null, + "name": "Summoning potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12145" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Summoning potion.", + "grand_exchange_price": "1576", + "durability": null, + "name": "Summoning potion(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12146" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1576", + "durability": null, + "name": "Summoning potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12147" + }, + { + "ge_buy_limit": "100", + "examine": "Grows into the root-vegetable of all evil.", + "grand_exchange_price": "68", + "durability": null, + "name": "Evil turnip seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12148" + }, + { + "ge_buy_limit": "5000", + "examine": "Utterly terrifying!", + "grand_exchange_price": "7101", + "durability": null, + "name": "Carved evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12153" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7101", + "durability": null, + "name": "Carved evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12154" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3", + "examine": "Can be used to create Summoning pouches.", + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12155" + }, + { + "ge_buy_limit": "5000", + "examine": "This is what bees craft.", + "grand_exchange_price": "393", + "durability": null, + "name": "Honeycomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12156" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "393", + "durability": null, + "name": "Honeycomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12157" + }, + { + "shop_price": "1", + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Gold charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12158" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Green charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12159" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Crimson charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12160" + }, + { + "examine": "A charm used to summon familiars", + "durability": null, + "name": "Abyssal charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12161" + }, + { + "examine": "A charm used to summon talon beasts.", + "durability": null, + "name": "Talon beast charm", + "archery_ticket_price": "0", + "id": "12162" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Blue charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12163" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void ravager.", + "durability": null, + "name": "Ravager charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12164" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void shifter.", + "durability": null, + "name": "Shifter charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12165" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void Spinner.", + "durability": null, + "name": "Spinner charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12166" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void torcher.", + "durability": null, + "name": "Torcher charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12167" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Obsidian charm", + "archery_ticket_price": "0", + "id": "12168" + }, + { + "requirements": "{23,99}", + "shop_price": "99000", + "examine": "The cape worn by master summoners.", + "durability": null, + "name": "Summoning cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12169", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{23,99}", + "durability": null, + "name": "Summoning cape(t)", + "archery_ticket_price": "0", + "id": "12170", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{23,99}", + "shop_price": "99000", + "examine": "Summoning skillcape hood.", + "durability": null, + "name": "Summoning hood", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12171", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "3597", + "durability": null, + "name": "Clean spirit weed", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12172" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3597", + "durability": null, + "name": "Clean spirit weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12173" + }, + { + "requirements": "{15,35}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "3634", + "durability": null, + "name": "Grimy spirit weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12174" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3634", + "durability": null, + "name": "Grimy spirit weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12175" + }, + { + "requirements": "{19,36}", + "ge_buy_limit": "100", + "examine": "A seed for spirit weed.", + "grand_exchange_price": "698", + "durability": null, + "name": "Spirit weed seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12176" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this spirit weed potion.", + "grand_exchange_price": "2963", + "durability": null, + "name": "Spirit weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12181" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2963", + "durability": null, + "name": "Spirit weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12182" + }, + { + "shop_price": "25", + "ge_buy_limit": "10000", + "examine": "Shards of an obelisk.", + "grand_exchange_price": "24", + "durability": null, + "name": "Spirit shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12183" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12184" + }, + { + "examine": "A fantastic saradomin owl.", + "durability": null, + "name": "Saradomin owl", + "archery_ticket_price": "0", + "id": "12185" + }, + { + "examine": "A stately zamorak hawk.", + "durability": null, + "name": "Zamorak hawk", + "archery_ticket_price": "0", + "id": "12186" + }, + { + "examine": "An impressive Guthix raptor.", + "durability": null, + "name": "Guthix raptor", + "archery_ticket_price": "0", + "id": "12187" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12190" + }, + { + "examine": "It's lively and energetic.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12191" + }, + { + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12192" + }, + { + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12193" + }, + { + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12194" + }, + { + "examine": "This little puppy is very quiet. (Puppy)Come by! Come by! (Adult)", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12195" + }, + { + "examine": "One proud little puppy. (Puppy)Looks like it's chewing a wasp. (Adult)", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12196" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Dragon hatchling", + "archery_ticket_price": "0", + "id": "12197" + }, + { + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12198" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12199" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12200" + }, + { + "examine": "It's a colour-coordinated lizard!", + "durability": null, + "name": "Chameleon", + "archery_ticket_price": "0", + "id": "12203" + }, + { + "remove_head": "true", + "requirements": "{23,10}", + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "Doors could be a problem, wearing these...", + "durability": null, + "weight": "1", + "equipment_slot": "0", + "grand_exchange_price": "40", + "name": "Antlers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12204", + "bonuses": "0,0,0,0,0,0,0,0,0,0,8,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40", + "durability": null, + "name": "Antlers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12205" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "Doors could be a problem, wearing these...", + "grand_exchange_price": "50", + "durability": null, + "name": "Antlers (charged)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12206", + "bonuses": "0,0,0,0,0,0,0,0,0,0,8,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{23,30}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "It's a little smelly in there.", + "durability": null, + "weight": "3", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "254", + "name": "Lizard skull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12207", + "bonuses": "0,0,0,0,1,2,3,4,2,3,12,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "254", + "durability": null, + "name": "Lizard skull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12208" + }, + { + "remove_head": "true", + "shop_price": "200", + "examine": "It's a little smelly in there.", + "durability": null, + "weight": "3", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "211", + "name": "Lizard skull (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12209", + "bonuses": "0,0,0,0,1,2,3,4,2,3,12,0,0,0,0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "234", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12210", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "234", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12211" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12212", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "662", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12213", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "662", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12214" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12215", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "90", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12216", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "90", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12217" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12218", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12219", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12220" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12221", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "211", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12222", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "211", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12223" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12224", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12294" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12296" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12298" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12300" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12302" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12304" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12306" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12308" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12310" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12312" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12314" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12316" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12318" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12320" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12322" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12324" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12326" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12328" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12330" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12332" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12334" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12336" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12338" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12340" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12342" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12344" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12346" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12348" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12350" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12352" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12354" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12356" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12358" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12360" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12362" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12364" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12366" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12368" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12370" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12372" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12374" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12376" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12378" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12380" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12382" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12384" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12386" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12388" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12390" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12392" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12394" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12396" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12398" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12400" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12402" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12404" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12406" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12408" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12410" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12412" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12414" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12416" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12418" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12420" + }, + { + "requirements": "{23,41}", + "ge_buy_limit": "5000", + "grand_exchange_price": "96", + "examine": "A scroll for a macaw familiar.", + "durability": null, + "name": "Herbcall scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12422" + }, + { + "requirements": "{23,69}", + "ge_buy_limit": "5000", + "grand_exchange_price": "258", + "examine": "A scroll for a fruit bat familiar.", + "durability": null, + "name": "Fruitfall scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12423" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "146", + "examine": "A scroll for an ibis familiar.", + "durability": null, + "name": "Fish rain scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12424" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7", + "examine": "A scroll for a spirit wolf familiar.", + "durability": null, + "name": "Howl scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12425" + }, + { + "requirements": "{23,47}", + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "examine": "A scroll for a magpie familiar.", + "durability": null, + "name": "Thieving fingers scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12426" + }, + { + "requirements": "{23,62}", + "ge_buy_limit": "5000", + "grand_exchange_price": "533", + "examine": "A scroll for an abyssal lurker familiar.", + "durability": null, + "name": "Abyssal stealth scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12427" + }, + { + "requirements": "{23,10}", + "ge_buy_limit": "5000", + "grand_exchange_price": "237", + "examine": "A scroll for a spirit spider familiar.", + "durability": null, + "name": "Egg spawn scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12428" + }, + { + "requirements": "{23,33}", + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "examine": "A scroll for a beaver familiar.", + "durability": null, + "name": "Multichop scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12429" + }, + { + "requirements": "{23,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "121", + "examine": "A scroll for an albino rat familiar.", + "durability": null, + "name": "Cheese feast scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12430" + }, + { + "requirements": "{23,40}", + "ge_buy_limit": "5000", + "grand_exchange_price": "39", + "examine": "A scroll for a bull ant familiar.", + "durability": null, + "name": "Unburden scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12431" + }, + { + "requirements": "{23,19}", + "ge_buy_limit": "5000", + "grand_exchange_price": "72", + "examine": "A scroll for a spirit scorpion familiar.", + "durability": null, + "name": "Venom shot scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12432" + }, + { + "requirements": "{23,32}", + "ge_buy_limit": "5000", + "grand_exchange_price": "99", + "examine": "A scroll for a honey badger familiar.", + "durability": null, + "name": "Insane ferocity scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12433" + }, + { + "requirements": "{23,88}", + "ge_buy_limit": "5000", + "grand_exchange_price": "299", + "examine": "A scroll for a unicorn stallion familiar.", + "durability": null, + "name": "Healing aura scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12434" + }, + { + "requirements": "{23,96}", + "ge_buy_limit": "5000", + "grand_exchange_price": "428", + "examine": "A scroll for a pack yak familiar.", + "durability": null, + "name": "Winter storage scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12435" + }, + { + "requirements": "{23,63}", + "ge_buy_limit": "5000", + "grand_exchange_price": "223", + "examine": "A scroll for a spirit cobra familiar.", + "durability": null, + "name": "Oph. incubation scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12436" + }, + { + "requirements": "{23,92}", + "ge_buy_limit": "5000", + "grand_exchange_price": "419", + "examine": "A scroll for a wolpertinger familiar.", + "durability": null, + "name": "Magic focus scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12437" + }, + { + "requirements": "{23,68}", + "ge_buy_limit": "5000", + "grand_exchange_price": "220", + "examine": "A scroll for a bunyip familiar.", + "durability": null, + "name": "Swallow whole scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12438" + }, + { + "requirements": "{23,67}", + "ge_buy_limit": "5000", + "grand_exchange_price": "269", + "examine": "A scroll for a war tortoise familiar.", + "durability": null, + "name": "Testudo scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12439" + }, + { + "requirements": "{23,28}", + "ge_buy_limit": "5000", + "grand_exchange_price": "47", + "examine": "A scroll for a compost mound familiar.", + "durability": null, + "name": "Generate compost scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12440" + }, + { + "requirements": "{23,52}", + "ge_buy_limit": "5000", + "grand_exchange_price": "35", + "examine": "A scroll for a spirit terrorbird familiar.", + "durability": null, + "name": "Tireless run scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12441" + }, + { + "requirements": "{23,80}", + "ge_buy_limit": "5000", + "grand_exchange_price": "174", + "examine": "A scroll for a hydra familiar.", + "durability": null, + "name": "Regrowth scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12442" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1118", + "examine": "A scroll for a Pest Control familiar.", + "durability": null, + "name": "Call to arms scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12443" + }, + { + "requirements": "{23,49}", + "ge_buy_limit": "5000", + "grand_exchange_price": "148", + "examine": "A scroll for a bloated leech familiar.", + "durability": null, + "name": "Blood drain scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12444" + }, + { + "requirements": "{23,4}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7", + "examine": "A scroll for a dreadfowl familiar.", + "durability": null, + "name": "Dreadfowl strike scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12445" + }, + { + "requirements": "{23,25}", + "ge_buy_limit": "5000", + "grand_exchange_price": "122", + "examine": "A scroll for a spirit kalphite familiar.", + "durability": null, + "name": "Sandstorm scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12446" + }, + { + "requirements": "{23,31}", + "ge_buy_limit": "1000", + "grand_exchange_price": "98", + "examine": "A scroll for a vampire bat familiar.", + "durability": null, + "name": "Vampire touch scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12447" + }, + { + "requirements": "{23,42}", + "ge_buy_limit": "5000", + "grand_exchange_price": "123", + "examine": "A scroll for an evil turnip familiar.", + "durability": null, + "name": "Evil flames scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12448" + }, + { + "requirements": "{23,74}", + "ge_buy_limit": "5000", + "grand_exchange_price": "219", + "examine": "A scroll for a granite lobster familiar.", + "durability": null, + "name": "Crushing claw scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12449" + }, + { + "requirements": "{23,75}", + "ge_buy_limit": "5000", + "grand_exchange_price": "221", + "examine": "A scroll for a praying mantis familiar.", + "durability": null, + "name": "Mantis strike scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12450" + }, + { + "requirements": "{23,71}", + "ge_buy_limit": "5000", + "grand_exchange_price": "12", + "examine": "A scroll for an arctic bear familiar.", + "durability": null, + "name": "Arctic blast scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12451" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "10", + "examine": "A scroll for a barker toad familiar.", + "durability": null, + "name": "Toad bark scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12452" + }, + { + "requirements": "{23,55}", + "ge_buy_limit": "5000", + "grand_exchange_price": "202", + "examine": "A scroll for a spirit jelly familiar.", + "durability": null, + "name": "Dissolve scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12453" + }, + { + "requirements": "{23,54}", + "ge_buy_limit": "5000", + "grand_exchange_price": "163", + "examine": "A scroll for an abyssal parasite familiar.", + "durability": null, + "name": "Abyssal drain scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12454" + }, + { + "requirements": "{23,58}", + "ge_buy_limit": "5000", + "grand_exchange_price": "198", + "examine": "A scroll for a karamthulhu overlord familiar.", + "durability": null, + "name": "Doomsphere scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12455" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "9", + "examine": "A scroll for a spirit dagannoth familiar.", + "durability": null, + "name": "Spike shot scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12456" + }, + { + "requirements": "{23,78}", + "ge_buy_limit": "5000", + "grand_exchange_price": "146", + "examine": "A scroll for a giant ent familiar.", + "durability": null, + "name": "Acorn missile scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12457" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "examine": "A scroll for a cockatrice variant familiar.", + "durability": null, + "name": "Petrifying gaze scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12458" + }, + { + "requirements": "{23,13}", + "ge_buy_limit": "5000", + "grand_exchange_price": "10", + "examine": "A scroll for a thorny snail familiar.", + "durability": null, + "name": "Slime spray scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12459" + }, + { + "requirements": "{23,18}", + "ge_buy_limit": "5000", + "grand_exchange_price": "47", + "examine": "A scroll for a desert wyrm familiar.", + "durability": null, + "name": "Electric lash scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12460" + }, + { + "requirements": "{23,36}", + "ge_buy_limit": "5000", + "grand_exchange_price": "135", + "examine": "A scroll for a bronze minotaur familiar.", + "durability": null, + "name": "Bronze bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12461" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "180", + "examine": "A scroll for an iron minotaur familiar.", + "durability": null, + "name": "Iron bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12462" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "182", + "examine": "A scroll for a steel minotaur familiar.", + "durability": null, + "name": "Steel bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12463" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "198", + "examine": "A scroll for a mithril minotaur familiar.", + "durability": null, + "name": "Mith bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12464" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "203", + "examine": "A scroll for an adamant minotaur familiar.", + "durability": null, + "name": "Addy bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12465" + }, + { + "requirements": "{23,86}", + "ge_buy_limit": "5000", + "grand_exchange_price": "67", + "examine": "A scroll for a rune minotaur familiar.", + "durability": null, + "name": "Rune bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12466" + }, + { + "requirements": "{23,64}", + "ge_buy_limit": "5000", + "grand_exchange_price": "171", + "examine": "A scroll for a stranger plant familiar.", + "durability": null, + "name": "Poisonous blast scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12467" + }, + { + "requirements": "{23,61}", + "ge_buy_limit": "5000", + "grand_exchange_price": "170", + "examine": "A scroll for a smoke devil familiar.", + "durability": null, + "name": "Dust cloud scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12468" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12469" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12471" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12473" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12475" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Red dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12477" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Blue dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12478" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Green dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12479" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Black dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12480" + }, + { + "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.", + "durability": null, + "name": "Baby penguin", + "archery_ticket_price": "0", + "id": "12481" + }, + { + "examine": "I can hatch this in an Incubator.", + "durability": null, + "name": "Penguin egg", + "archery_ticket_price": "0", + "id": "12483" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12484" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12485" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12486" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Raccoon", + "archery_ticket_price": "0", + "id": "12487" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12488" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12489" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12490" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12491" + }, + { + "examine": "It's a colour-coordinated lizard!", + "durability": null, + "name": "Baby chameleon", + "archery_ticket_price": "0", + "id": "12492" + }, + { + "examine": "It's a colour-coordinated lizard!", + "durability": null, + "name": "Chameleon", + "archery_ticket_price": "0", + "id": "12493" + }, + { + "examine": "A lizard's egg.", + "durability": null, + "name": "Chameleon egg", + "weight": "1", + "archery_ticket_price": "0", + "id": "12494" + }, + { + "examine": "A lizard's egg.", + "durability": null, + "name": "Chameleon egg", + "weight": "1", + "archery_ticket_price": "0", + "id": "12495" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12496" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12498" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12499" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12500" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12501" + }, + { + "examine": "Apparently, this token is worth one baby giant crab to someone called Nung.", + "durability": null, + "name": "Crunchy claw token", + "archery_ticket_price": "0", + "id": "12502" + }, + { + "examine": "A fluffy chick.", + "durability": null, + "name": "Saradomin chick", + "archery_ticket_price": "0", + "id": "12503" + }, + { + "examine": "Lovely blue plumage.", + "durability": null, + "name": "Saradomin bird", + "archery_ticket_price": "0", + "id": "12504" + }, + { + "examine": "A fantastic saradomin owl.", + "durability": null, + "name": "Saradomin owl", + "archery_ticket_price": "0", + "id": "12505" + }, + { + "examine": "A fluffy chick.", + "durability": null, + "name": "Zamorak chick", + "archery_ticket_price": "0", + "id": "12506" + }, + { + "examine": "Lovely red plumage.", + "durability": null, + "name": "Zamorak bird", + "archery_ticket_price": "0", + "id": "12507" + }, + { + "examine": "A stately zamorak hawk.", + "durability": null, + "name": "Zamorak hawk", + "archery_ticket_price": "0", + "id": "12508" + }, + { + "examine": "A fluffy chick.", + "durability": null, + "name": "Guthix chick", + "archery_ticket_price": "0", + "id": "12509" + }, + { + "examine": "Lovely green plumage.", + "durability": null, + "name": "Guthix bird", + "archery_ticket_price": "0", + "id": "12510" + }, + { + "examine": "An impressive Guthix raptor.", + "durability": null, + "name": "Guthix raptor", + "archery_ticket_price": "0", + "id": "12511" + }, + { + "requirements": "{4,23}", + "examine": "It's lively and energetic.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12512" + }, + { + "requirements": "{4,23}", + "examine": "It's lively and energetic.", + "durability": null, + "name": "Terrier", + "archery_ticket_price": "0", + "id": "12513" + }, + { + "requirements": "{4,23}", + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12514" + }, + { + "requirements": "{4,23}", + "examine": "An aerodynamic doggy.", + "durability": null, + "name": "Greyhound", + "archery_ticket_price": "0", + "id": "12515" + }, + { + "requirements": "{4,23}", + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12516" + }, + { + "requirements": "{4,23}", + "examine": "My most faithful friend.", + "durability": null, + "name": "Labrador", + "archery_ticket_price": "0", + "id": "12517" + }, + { + "requirements": "{4,23}", + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12518" + }, + { + "requirements": "{4,23}", + "examine": "A purebred doggy.", + "durability": null, + "name": "Dalmatian", + "archery_ticket_price": "0", + "id": "12519" + }, + { + "requirements": "{4,23}", + "examine": "This little puppy is very quiet.", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12520" + }, + { + "requirements": "{4,23}", + "examine": "Come by! Come by!", + "durability": null, + "name": "Sheepdog", + "archery_ticket_price": "0", + "id": "12521" + }, + { + "requirements": "{4,23}", + "examine": "One proud little puppy.", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12522" + }, + { + "requirements": "{4,23}", + "examine": "Looks like it's chewing a wasp.", + "durability": null, + "name": "Bulldog", + "archery_ticket_price": "0", + "id": "12523" + }, + { + "requirements": "{23,99}", + "shop_price": "99000", + "examine": "The cape worn by master summoners.", + "durability": null, + "name": "Summoning cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12524", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "1", + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Gold charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12527" + }, + { + "examine": "A key to Pikkupstix's trapdoor.", + "durability": null, + "name": "Trapdoor key", + "archery_ticket_price": "0", + "id": "12528" + }, + { + "shop_price": "25", + "examine": "Shards of an obelisk.", + "grand_exchange_price": "24", + "durability": null, + "name": "Spirit shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12530" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1914", + "examine": "I can summon an ibis familiar with this.", + "durability": null, + "name": "Ibis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12531" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1914", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ibis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12532" + }, + { + "requirements": "{23,16}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7", + "examine": "A scroll for a granite crab familiar.", + "durability": null, + "name": "Stony shell scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12533" + }, + { + "ge_buy_limit": "1000", + "examine": "Meat from a creature that can be hunted in Isafdar.", + "grand_exchange_price": "7968", + "durability": null, + "name": "Raw pawya meat", + "tradeable": "true", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "12535" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7968", + "durability": null, + "name": "Raw pawya meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12536" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12538" + }, + { + "ge_buy_limit": "5000", + "examine": "Spikes from a grenwall.", + "grand_exchange_price": "1704", + "durability": null, + "name": "Grenwall spikes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12539" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12545" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12547" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12548" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12549" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12550" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Baby platypus", + "archery_ticket_price": "0", + "id": "12551" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Baby platypus", + "archery_ticket_price": "0", + "id": "12552" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Baby platypus", + "archery_ticket_price": "0", + "id": "12553" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Patrick", + "archery_ticket_price": "0", + "id": "12554" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Penelope", + "archery_ticket_price": "0", + "id": "12555" + }, + { + "examine": "I bet he can't wait until it's cooked.", + "durability": null, + "name": "Peter", + "archery_ticket_price": "0", + "id": "12556" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Peanut", + "archery_ticket_price": "0", + "id": "12557" + }, + { + "examine": "Marginally better than egg on your face.", + "durability": null, + "name": "Mud", + "archery_ticket_price": "0", + "id": "12558", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "The height of style?", + "grand_exchange_price": "1004", + "durability": null, + "name": "Ogre wig", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12559", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1004", + "durability": null, + "name": "Ogre wig", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12560" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "It's a little big on me.", + "grand_exchange_price": "197", + "durability": null, + "name": "Ogre kilt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12561", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "197", + "durability": null, + "name": "Ogre kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12562" + }, + { + "remove_sleeves": "true", + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "It's a little big on me.", + "grand_exchange_price": "536", + "durability": null, + "name": "Ogre top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12563", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "536", + "durability": null, + "name": "Ogre top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12564" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "Good for stomping.", + "grand_exchange_price": "420", + "durability": null, + "name": "Ogre boots", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "12565", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "420", + "durability": null, + "name": "Ogre boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12566" + }, + { + "ge_buy_limit": "100", + "examine": "It's a slightly sickly-looking fur.", + "grand_exchange_price": "1468", + "durability": null, + "name": "Diseased kebbit fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12567" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "A furry hat with an unnerving tail.", + "grand_exchange_price": "3656", + "durability": null, + "name": "Davy kebbit hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12568", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3656", + "durability": null, + "name": "Davy kebbit hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12569" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "8684", + "examine": "A big piece of tree.", + "walk_anim": "8684", + "durability": null, + "weight": "10", + "turn90ccw_anim": "8684", + "attack_speed": "7", + "weapon_interface": "10", + "turn180_anim": "8684", + "render_anim": "1157", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,401,401", + "grand_exchange_price": "77", + "stand_anim": "8683", + "name": "Ogre club", + "tradeable": "true", + "run_anim": "8685", + "archery_ticket_price": "0", + "id": "12570", + "stand_turn_anim": "823", + "bonuses": "-6,-2,15,0,0,0,0,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "77", + "durability": null, + "name": "Ogre club", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12571" + }, + { + "ge_buy_limit": "100", + "examine": "A delicate, sweet-smelling flower.", + "grand_exchange_price": "20", + "durability": null, + "name": "Lavender", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12572" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Lavender", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12573" + }, + { + "ge_buy_limit": "100", + "examine": "A stiff, pungent grass.", + "grand_exchange_price": "31", + "durability": null, + "name": "Fever grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12574" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "31", + "durability": null, + "name": "Fever grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12575" + }, + { + "ge_buy_limit": "100", + "examine": "A cheerful, aromatic flower.", + "grand_exchange_price": "12", + "durability": null, + "name": "Tansymum", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12576" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Tansymum", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12577" + }, + { + "turn90cw_anim": "8681", + "examine": "A stiff, pungent grass.", + "walk_anim": "8681", + "durability": null, + "turn90ccw_anim": "8681", + "turn180_anim": "8681", + "render_anim": "294", + "equipment_slot": "3", + "grand_exchange_price": "41", + "stand_anim": "8682", + "name": "Smouldering fever grass", + "tradeable": "true", + "run_anim": "8690", + "archery_ticket_price": "0", + "id": "12578", + "stand_turn_anim": "8682" + }, + { + "turn90cw_anim": "8681", + "examine": "A delicate, sweet-smelling flower.", + "walk_anim": "8681", + "durability": null, + "turn90ccw_anim": "8681", + "turn180_anim": "8681", + "render_anim": "294", + "equipment_slot": "3", + "grand_exchange_price": "29", + "stand_anim": "8682", + "name": "Smouldering lavender", + "tradeable": "true", + "run_anim": "8690", + "archery_ticket_price": "0", + "id": "12579", + "stand_turn_anim": "8682" + }, + { + "turn90cw_anim": "8681", + "examine": "A cheerful, aromatic flower.", + "walk_anim": "8681", + "durability": null, + "turn90ccw_anim": "8681", + "turn180_anim": "8681", + "render_anim": "294", + "equipment_slot": "3", + "grand_exchange_price": "18", + "stand_anim": "8682", + "name": "Smouldering tansymum", + "tradeable": "true", + "run_anim": "8690", + "archery_ticket_price": "0", + "id": "12580", + "stand_turn_anim": "8682" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a eucalyptus tree.", + "grand_exchange_price": "507", + "durability": null, + "name": "Eucalyptus logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12581", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "507", + "durability": null, + "name": "Eucalyptus logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12582" + }, + { + "ge_buy_limit": "1000", + "examine": "Logs cut from a eucalyptus tree.", + "grand_exchange_price": "3609", + "durability": null, + "name": "Eucalyptus pyre logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12583" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3609", + "durability": null, + "name": "Eucalyptus pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12584" + }, + { + "ge_buy_limit": "100", + "examine": "A modest and mild plant.", + "grand_exchange_price": "20", + "durability": null, + "name": "Primweed", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12588" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Primweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12589" + }, + { + "ge_buy_limit": "100", + "examine": "A pretty but putrid flower.", + "grand_exchange_price": "16", + "durability": null, + "name": "Stinkbloom", + "tradeable": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "12590" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Stinkbloom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12591" + }, + { + "durability": null, + "name": "Diseased kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12592" + }, + { + "destroy_message": "If you need to, you can get another from the Tyras Camp catapult engineer.", + "examine": "The plans for repairing the Tyras Camp catapult.", + "durability": null, + "name": "Catapult schematics", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12593" + }, + { + "destroy_message": "If you need to, you can get another from General Hining in the Tyras Camp.", + "examine": "General Hining wants me to deliver this to the Catapult Engineer.", + "durability": null, + "name": "Engineer's letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12594" + }, + { + "destroy_message": "You can always get another from the drunken sailor in Port Sarim.", + "examine": "Taken from a drunken sailor in Port Sarim.", + "durability": null, + "name": "Sailor's hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "12595", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another set from Thaki the delivery dwarf in Port Sarim.", + "examine": "Dwarf-made parts for repairing the Tyras Camp catapult.", + "durability": null, + "name": "Metal catapult parts", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12596" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12597" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12598" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12599" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12600" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12601" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12602" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12603" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12604" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12605" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12606" + }, + { + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12607", + "equipment_slot": "5" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "An amulet of Farming with 1 charge.", + "grand_exchange_price": "271", + "durability": null, + "name": "Amulet of farming(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12608", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "271", + "durability": null, + "name": "Amulet of farming(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12609" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 2 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12610", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12611" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 3 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12612", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12613" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 4 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12614", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12615" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 5 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12616", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12617" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 6 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12618", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12619" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 7 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12620", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12621" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "An amulet of Farming with 8 charges.", + "grand_exchange_price": "210", + "durability": null, + "name": "Amulet of farming(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12622", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "210", + "durability": null, + "name": "Amulet of farming(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12623" + }, + { + "shop_price": "10", + "examine": "An ogleroot. How odd.", + "durability": null, + "name": "Ogleroot", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0", + "id": "12624" + }, + { + "destroy_message": "You will need to obtain more flags from Mrs. Winkin or Farmer Blinkin if you have lost all of the flags you have.", + "shop_price": "500", + "examine": "A flag to put in the ground.", + "durability": null, + "name": "Flag", + "tradeable": "false", + "destroy": "true", + "weight": "0", + "archery_ticket_price": "0", + "id": "12625" + }, + { + "destroy_message": "You will need to get another exam paper from Professor Henry", + "examine": "Player Safety test", + "durability": null, + "name": "Test paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12626" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12627" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12628" + }, + { + "destroy_message": "You can get another pair of gloves from the chest in the Stronghold of Player Safety.", + "examine": "Gloves from the Stronghold of Player Safety.", + "durability": null, + "name": "Safety gloves", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12629", + "bonuses": "0,0,0,0,0,1,2,2,1,2,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Rubium is very unstable", + "shop_price": "10", + "examine": "Be careful with this near water.", + "durability": null, + "name": "Rubium", + "weight": "1", + "archery_ticket_price": "0", + "id": "12630" + }, + { + "destroy_message": "The train is tiny", + "examine": "(While on the ground) Kennith's lost toy. (While in your inventory) A wooden toy train.", + "durability": null, + "name": "Toy train", + "archery_ticket_price": "0", + "id": "12631" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12632" + }, + { + "examine": "The jar is shaking violently!", + "durability": null, + "name": "Super fishing explosive", + "archery_ticket_price": "0", + "id": "12633" + }, + { + "destroy_message": "You can get another chocatrice cape from Diango in Draynor Village.", + "examine": "A thick, orange cape.", + "durability": null, + "name": "Chocatrice cape", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12634", + "equipment_slot": "1" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12635" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12636" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12637" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12638" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12639" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12640" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12641" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12642" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12643" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12644" + }, + { + "destroy_message": "You can get another chocatrice cape from Diango in Draynor Village.", + "examine": "A thick, orange cape.", + "durability": null, + "name": "Chocatrice cape", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12645", + "equipment_slot": "1" + }, + { + "examine": "A chocolate egg wrapped in coloured foil.", + "durability": null, + "name": "Chocolate egg", + "archery_ticket_price": "0", + "id": "12646" + }, + { + "examine": "A chocolate egg wrapped in coloured foil.", + "durability": null, + "name": "Chocolate egg", + "archery_ticket_price": "0", + "id": "12647" + }, + { + "examine": "A chocolate egg wrapped in coloured foil.", + "durability": null, + "name": "Chocolate egg", + "archery_ticket_price": "0", + "id": "12648" + }, + { + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12649" + }, + { + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "12650" + }, + { + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "12651" + }, + { + "examine": "It's a bucket of coal from the Easter Bunny's warren.", + "durability": null, + "name": "Bucket of coal", + "weight": "3", + "archery_ticket_price": "0", + "id": "12652" + }, + { + "examine": "It's a bucket of coal from the Easter Bunny's warren.", + "durability": null, + "name": "Bucket of coal", + "weight": "3", + "archery_ticket_price": "0", + "id": "12653" + }, + { + "destroy_message": "Are you sure you want to destroy this object?
You can get another in the Easter Bunny's warren.", + "examine": "A stripy brown egg.", + "grand_exchange_price": "1255", + "durability": null, + "name": "Cockatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12654" + }, + { + "destroy_message": "Are you sure you want to destroy this object?
You can make another at the Easter Bunny's warren.", + "examine": "A cockatrice egg that has been dipped in molten chocolate.", + "durability": null, + "name": "Chocatrice egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12655", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some chocolate chunks.", + "durability": null, + "name": "Chocolate chunks", + "archery_ticket_price": "0", + "id": "12657" + }, + { + "remove_head": "true", + "shop_price": "3520", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "1913", + "name": "Adamant full helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12658", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "3520", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "1913", + "name": "Adamant full helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12659", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Lightweight head protection.", + "grand_exchange_price": "1040", + "durability": null, + "name": "Snakeskin bandana (e)", + "tradeable": "false", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "12660", + "absorb": "0,2,1", + "bonuses": "0,0,0,-5,4,2,4,4,2,2,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Lightweight head protection.", + "grand_exchange_price": "1040", + "durability": null, + "name": "Snakeskin bandana (charged)", + "tradeable": "false", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "12661", + "absorb": "0,2,1", + "bonuses": "0,0,0,-5,4,2,4,4,2,2,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A wooden helmet.", + "durability": null, + "weight": "0.9", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5623", + "name": "Splitbark helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12662", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A wooden helmet.", + "durability": null, + "weight": "0.9", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5623", + "name": "Splitbark helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12663", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21200", + "name": "Rune full helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12664", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21200", + "name": "Rune full helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12665", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Makes the wearer pretty intimidating.", + "durability": null, + "weight": "1.3", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "61200", + "name": "Dragon med helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12666", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Makes the wearer pretty intimidating.", + "durability": null, + "weight": "1.3", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "61200", + "name": "Dragon med helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12667", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm (e)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12668", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm (charged)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12669", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A helmet of great craftmanship.", + "durability": null, + "weight": "0.5", + "absorb": "0,5,2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "3932989", + "name": "Armadyl helmet (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12670", + "bonuses": "-5,-5,-5,-5,10,6,8,10,10,8,12,0,1,0,0" + }, + { + "remove_head": "true", + "examine": "A helmet of great craftmanship.", + "durability": null, + "weight": "0.5", + "absorb": "0,5,2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "3932989", + "name": "Armadyl helmet (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12671", + "bonuses": "-5,-5,-5,-5,10,6,8,10,10,8,12,0,1,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by archers.", + "durability": null, + "weight": "2", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "41000", + "name": "Archer helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12672", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by archers.", + "durability": null, + "weight": "2", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "41000", + "name": "Archer helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12673", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by berserkers.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48800", + "name": "Berserker helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12674", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by berserkers.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48800", + "name": "Berserker helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12675", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by warriors.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48200", + "name": "Warrior helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12676", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by warriors.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48200", + "name": "Warrior helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12677", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by farseers.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "46400", + "name": "Farseer helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12678", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by farseers.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "46400", + "name": "Farseer helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12679", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "50000", + "examine": "A gift from Neitiznot's Burgher.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "equipment_slot": "0", + "grand_exchange_price": "44831", + "name": "Helm of neitiznot (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12680", + "bonuses": "0,0,0,0,0,31,29,34,3,30,8,3,3,0,0" + }, + { + "remove_head": "true", + "shop_price": "50000", + "examine": "A gift from Neitiznot's Burgher.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "equipment_slot": "0", + "grand_exchange_price": "44831", + "name": "Helm of neitiznot (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12681", + "bonuses": "0,0,0,0,0,31,29,34,3,30,8,3,3,0,0" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12682" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12684" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12686" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12688" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12690" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12692" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12694" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12696" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12698" + }, + { + "requirements": "{4,23}", + "examine": "A hyperactive little pup.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12700" + }, + { + "requirements": "{4,23}", + "examine": "A hyperactive little pup.", + "durability": null, + "name": "Terrier", + "archery_ticket_price": "0", + "id": "12701" + }, + { + "requirements": "{4,23}", + "examine": "Such a brave doggy.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12702" + }, + { + "requirements": "{4,23}", + "examine": "Such a brave doggy.", + "durability": null, + "name": "Terrier", + "archery_ticket_price": "0", + "id": "12703" + }, + { + "requirements": "{4,23}", + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12704" + }, + { + "requirements": "{4,23}", + "examine": "An aerodynamic doggy.", + "durability": null, + "name": "Greyhound", + "archery_ticket_price": "0", + "id": "12705" + }, + { + "requirements": "{4,23}", + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12706" + }, + { + "requirements": "{4,23}", + "examine": "An aerodynamic doggy.", + "durability": null, + "name": "Greyhound", + "archery_ticket_price": "0", + "id": "12707" + }, + { + "requirements": "{4,23}", + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12708" + }, + { + "requirements": "{4,23}", + "examine": "My most faithful friend.", + "durability": null, + "name": "Labrador", + "archery_ticket_price": "0", + "id": "12709" + }, + { + "requirements": "{4,23}", + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12710" + }, + { + "requirements": "{4,23}", + "examine": "My most faithful friend.", + "durability": null, + "name": "Labrador", + "archery_ticket_price": "0", + "id": "12711" + }, + { + "requirements": "{4,23}", + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12712" + }, + { + "requirements": "{4,23}", + "examine": "A purebred doggy.", + "durability": null, + "name": "Dalmatian", + "archery_ticket_price": "0", + "id": "12713" + }, + { + "requirements": "{4,23}", + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12714" + }, + { + "requirements": "{4,23}", + "examine": "A purebred doggy.", + "durability": null, + "name": "Dalmatian", + "archery_ticket_price": "0", + "id": "12715" + }, + { + "requirements": "{4,23}", + "examine": "This little puppy is very quiet.", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12716" + }, + { + "requirements": "{4,23}", + "examine": "Come by! Come by!", + "durability": null, + "name": "Sheepdog", + "archery_ticket_price": "0", + "id": "12717" + }, + { + "requirements": "{4,23}", + "examine": "This little puppy is very quiet.", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12718" + }, + { + "requirements": "{4,23}", + "examine": "Come by! Come by!", + "durability": null, + "name": "Sheepdog", + "archery_ticket_price": "0", + "id": "12719" + }, + { + "requirements": "{4,23}", + "examine": "One proud little puppy.", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12720" + }, + { + "requirements": "{4,23}", + "examine": "Looks like it's chewing a wasp.", + "durability": null, + "name": "Bulldog", + "archery_ticket_price": "0", + "id": "12721" + }, + { + "requirements": "{4,23}", + "examine": "One proud little puppy.", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12722" + }, + { + "requirements": "{4,23}", + "examine": "Looks like it's chewing a wasp.", + "durability": null, + "name": "Bulldog", + "archery_ticket_price": "0", + "id": "12723" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12724" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12725" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12726" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12727" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12728" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12729" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12730" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12731" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12732" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12733" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12734" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Raccoon", + "archery_ticket_price": "0", + "id": "12735" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12736" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Raccoon", + "archery_ticket_price": "0", + "id": "12737" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12738" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12739" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12740" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12741" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12742" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12743" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12744" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12745" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12746" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12747" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12748" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12749" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12750" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12751" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12752" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12753" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12754" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12755" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12756" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12757" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12758" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12759" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12760" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12761" + }, + { + "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.", + "durability": null, + "name": "Baby penguin", + "archery_ticket_price": "0", + "id": "12763" + }, + { + "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.", + "durability": null, + "name": "Baby penguin", + "archery_ticket_price": "0", + "id": "12765" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12766" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12767" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12768" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12769" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12770" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12771" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12772" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12773" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12774" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12775" + }, + { + "requirements": "{23,85}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2613", + "examine": "I can summon a swamp titan familiar with this.", + "durability": null, + "name": "Swamp titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12776" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2613", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Swamp titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12777" + }, + { + "requirements": "{17,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "130", + "examine": "I can summon a spirit mosquito familiar with this.", + "durability": null, + "name": "Spirit mosquito pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12778" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "130", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit mosquito pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12779" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "16100", + "examine": "I can summon a void spinner familiar with this.", + "durability": null, + "name": "Void spinner pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12780" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "16100", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void spinner pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12781" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2458", + "examine": "I can summon a forge regent familiar with this.", + "durability": null, + "name": "Forge regent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12782" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2458", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Forge regent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12783" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "4097", + "examine": "I can summon a spirit larupia familiar with this.", + "durability": null, + "name": "Spirit larupia pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12784" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4097", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit larupia pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12785" + }, + { + "requirements": "{23,89}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3856", + "examine": "I can summon a geyser titan familiar with this.", + "durability": null, + "name": "Geyser titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12786" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3856", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Geyser titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12787" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3840", + "examine": "I can summon a lava titan familiar with this.", + "durability": null, + "name": "Lava titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12788" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3840", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Lava titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12789" + }, + { + "requirements": "{23,99}", + "ge_buy_limit": "5000", + "grand_exchange_price": "5800", + "examine": "I can summon a steel titan familiar with this.", + "durability": null, + "name": "Steel titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12790" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Steel titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12791" + }, + { + "requirements": "{23,73}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3436", + "examine": "I can summon an obsidian golem familiar with this.", + "durability": null, + "name": "Obsidian golem pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12792" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3436", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Obsidian golem pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12793" + }, + { + "requirements": "{23,77}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3017", + "examine": "I can summon a talon beast familiar with this.", + "durability": null, + "name": "Talon beast pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12794" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3017", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Talon beast pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12795" + }, + { + "requirements": "{23,93}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2991", + "examine": "I can summon an abyssal titan familiar with this.", + "durability": null, + "name": "Abyssal titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12796" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2991", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Abyssal titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12797" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "18300", + "examine": "I can summon a void torcher familiar with this.", + "durability": null, + "name": "Void torcher pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12798" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "18300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void torcher pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12799" + }, + { + "requirements": "{23,29}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1513", + "examine": "I can summon a giant chinchompa familiar with this.", + "durability": null, + "name": "Giant chinchompa pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12800" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1513", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Giant chinchompa pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12801" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3567", + "examine": "I can summon a fire titan familiar with this.", + "durability": null, + "name": "Fire titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12802" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3567", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Fire titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12803" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3548", + "examine": "I can summon a moss titan familiar with this.", + "durability": null, + "name": "Moss titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12804" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3548", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Moss titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12805" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7184", + "examine": "I can summon an ice titan familiar with this.", + "durability": null, + "name": "Ice titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12806" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7184", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ice titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12807" + }, + { + "requirements": "{22,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1116", + "examine": "I can summon a spirit Tz-Kih familiar with this.", + "durability": null, + "name": "Spirit tz-kih pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12808" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1116", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit tz-kih pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12809" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7919", + "examine": "I can summon a spirit graahk familiar with this.", + "durability": null, + "name": "Spirit graahk pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12810" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7919", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit graahk pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12811" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "13300", + "examine": "I can summon a spirit kyatt familiar with this.", + "durability": null, + "name": "Spirit kyatt pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12812" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit kyatt pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12813" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "18600", + "examine": "I can summon a void shifter familiar with this.", + "durability": null, + "name": "Void shifter pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12814" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "18600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void shifter pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12815" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1951", + "examine": "I can summon a pyrelord familiar with this.", + "durability": null, + "name": "Pyrelord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12816" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1951", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Pyrelord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12817" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "10700", + "examine": "I can summon a void ravager familiar with this.", + "durability": null, + "name": "Void ravager pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12818" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "10700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void ravager pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12819" + }, + { + "requirements": "{23,70}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1382", + "examine": "I can summon a ravenous locust familiar with this.", + "durability": null, + "name": "Ravenous locust pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12820" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1382", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ravenous locust pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12821" + }, + { + "requirements": "{23,95}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3470", + "examine": "I can summon an iron titan familiar with this.", + "durability": null, + "name": "Iron titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12822" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3470", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Iron titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12823" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "380", + "examine": "A scroll for an elemental titan familiar.", + "durability": null, + "name": "Titan's con. scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12824" + }, + { + "requirements": "{23,99}", + "ge_buy_limit": "5000", + "grand_exchange_price": "646", + "examine": "A scroll for a steel titan familiar.", + "durability": null, + "name": "Steel of legends scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12825" + }, + { + "requirements": "{23,73}", + "ge_buy_limit": "5000", + "grand_exchange_price": "271", + "examine": "A scroll for an obsidian golem familiar.", + "durability": null, + "name": "Volcanic str. scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12826" + }, + { + "requirements": "{23,93}", + "ge_buy_limit": "5000", + "grand_exchange_price": "310", + "examine": "A scroll for an abyssal titan familiar.", + "durability": null, + "name": "Essence shipment scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12827" + }, + { + "requirements": "{23,95}", + "ge_buy_limit": "5000", + "grand_exchange_price": "389", + "examine": "A scroll for an iron titan familiar.", + "durability": null, + "name": "Iron within scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12828" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "146", + "examine": "A scroll for a pyrelord familiar.", + "durability": null, + "name": "Immense heat scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12829" + }, + { + "requirements": "{23,70}", + "ge_buy_limit": "5000", + "grand_exchange_price": "149", + "examine": "A scroll for a ravenous locust familiar.", + "durability": null, + "name": "Famine scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12830" + }, + { + "requirements": "{23,77}", + "ge_buy_limit": "5000", + "grand_exchange_price": "245", + "examine": "A scroll for a talon beast familiar.", + "durability": null, + "name": "Deadly claw scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12831" + }, + { + "requirements": "{23,85}", + "ge_buy_limit": "5000", + "grand_exchange_price": "192", + "examine": "A scroll for a swamp titan familiar.", + "durability": null, + "name": "Swamp plague scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12832" + }, + { + "requirements": "{23,89}", + "ge_buy_limit": "5000", + "grand_exchange_price": "294", + "examine": "A scroll for a geyser titan familiar.", + "durability": null, + "name": "Boil scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12833" + }, + { + "requirements": "{23,29}", + "ge_buy_limit": "5000", + "grand_exchange_price": "103", + "examine": "A scroll for a giant chinchompa familiar.", + "durability": null, + "name": "Explode scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12834" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "250", + "examine": "A scroll for a spirit graahk familiar.", + "durability": null, + "name": "Goad scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12835" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1428", + "examine": "A scroll for a spirit kyatt familiar.", + "durability": null, + "name": "Ambush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12836" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "300", + "examine": "A scroll for a lava titan familiar.", + "durability": null, + "name": "Ebon thunder scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12837" + }, + { + "requirements": "{23,17}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1", + "examine": "A scroll for a spirit mosquito familiar.", + "durability": null, + "name": "Pester scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12838" + }, + { + "requirements": "{23,22}", + "ge_buy_limit": "5000", + "grand_exchange_price": "78", + "examine": "A scroll for a spirit Tz-Kih familiar.", + "durability": null, + "name": "Fireball assault scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12839" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "196", + "examine": "A scroll for a spirit larupia familiar.", + "durability": null, + "name": "Rending scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12840" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "173", + "examine": "A scroll for a forge regent familiar.", + "durability": null, + "name": "Inferno scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12841" + }, + { + "turn90cw_anim": "8963", + "stand_anim": "8964", + "walk_anim": "8961", + "durability": null, + "name": "Gnomecopter", + "run_anim": "8963", + "archery_ticket_price": "0", + "turn90ccw_anim": "8963", + "id": "12842", + "stand_turn_anim": "8963", + "turn180_anim": "8963", + "equipment_slot": "1" + }, + { + "destroy_message": "This is for use with the gnomecopters, north of Lumbridge. Sasquine Huburns will give you another one.", + "examine": "It tells gnomecopters where you wish to go.", + "durability": null, + "name": "Gnomecopter ticket", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12843" + }, + { + "shop_price": "100", + "turn90cw_anim": "8983", + "examine": "A kite with a dragon on it.", + "walk_anim": "8982", + "durability": null, + "turn90ccw_anim": "8984", + "attack_speed": "4", + "turn180_anim": "8985", + "render_anim": "593", + "equipment_slot": "3", + "stand_anim": "8981", + "name": "Toy kite", + "run_anim": "8986", + "archery_ticket_price": "0", + "id": "12844", + "stand_turn_anim": "8987" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12845", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12846", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12847", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12848", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12849", + "stand_turn_anim": "9000" + }, + { + "examine": "A generic elemental rune", + "durability": null, + "name": "Elemental rune", + "archery_ticket_price": "0", + "id": "12850" + }, + { + "examine": "A generic non-elemental rune", + "durability": null, + "name": "Catalytic rune", + "archery_ticket_price": "0", + "id": "12851" + }, + { + "examine": "A token awarded for taking part in the Fist of Guthix minigame.", + "durability": null, + "name": "Fist of guthix token", + "archery_ticket_price": "0", + "id": "12852" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box of bandages for healing.", + "durability": null, + "name": "Bandages", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12853" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Teleports you to the centre of the arena.", + "durability": null, + "name": "Tele-orb", + "archery_ticket_price": "0", + "id": "12855" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Irit gloves", + "archery_ticket_price": "0", + "id": "12856", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "100", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Avantoe gloves", + "archery_ticket_price": "0", + "id": "12857", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Kwuarm gloves", + "archery_ticket_price": "0", + "id": "12858", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Cadantine gloves", + "archery_ticket_price": "0", + "id": "12859", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Swordfish gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "12860", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves", + "durability": null, + "name": "Shark gloves", + "weight": "1", + "archery_ticket_price": "0", + "id": "12861", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Dragon slayer gloves", + "archery_ticket_price": "0", + "id": "12862", + "equipment_slot": "9" + }, + { + "destroy_message": "You can buy a new pair from the druids at the Fist of Guthix activity.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Air runecrafting gloves", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12863", + "equipment_slot": "9" + }, + { + "destroy_message": "You can buy a new pair from the druids at the Fist of Guthix activity.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Water runecrafting gloves", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12864", + "equipment_slot": "9" + }, + { + "destroy_message": "You can buy a new pair from the druids at the Fist of Guthix minigame.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Earth runecrafting gloves", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12865", + "equipment_slot": "9" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12866", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12867", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12868", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12869", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12870", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "ge_buy_limit": "10", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "78900", + "name": "Battle hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12871", + "bonuses": "0,0,0,2,0,3,2,3,2,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "78900", + "durability": null, + "name": "Battle hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12872" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12873", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12874", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12875", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12876", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12877", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "ge_buy_limit": "10", + "examine": "Its arcane power is waning.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "431400", + "name": "Battle robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12878", + "bonuses": "0,0,0,7,0,4,4,5,7,0,8,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "431400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Battle robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12879" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12880", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12881", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12882", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12883", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12884", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "ge_buy_limit": "10", + "examine": "Its arcane power is waning.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "538000", + "name": "Battle robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12885", + "bonuses": "0,0,0,6,0,4,3,4,6,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "538000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Battle robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12886" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12887", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12888", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12889", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12890", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12891", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "ge_buy_limit": "10", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "8504", + "name": "Druidic mage hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12892", + "bonuses": "0,0,0,1,0,0,0,0,1,0,1,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "8504", + "durability": null, + "name": "Druidic mage hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12893" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12894", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12895", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12896", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12897", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12898", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "ge_buy_limit": "10", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "76300", + "name": "Druidic mage top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12899", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "76300", + "durability": null, + "name": "Druidic mage top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12900" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12901", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12902", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12903", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12904", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12905", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "ge_buy_limit": "10", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "60800", + "name": "Druidic mage bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12906", + "bonuses": "0,0,0,2,0,0,0,0,2,0,2,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "60800", + "durability": null, + "name": "Druidic mage bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12907" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12908", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12909", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12910", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12911", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12912", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Not so spiky anymore.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2718", + "name": "Adamant spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12913", + "bonuses": "0,0,0,-6,-2,11,12,10,0,11,4,1,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "Not so spiky anymore!", + "grand_exchange_price": "2718", + "durability": null, + "name": "Adamant spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12914" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12915", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12916", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12917", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12918", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12919", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "ge_buy_limit": "10", + "examine": "Not so spiky anymore!", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "23700", + "name": "Adamant berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12920", + "bonuses": "0,0,0,-8,-2,12,14,13,-1,8,4,1,0,0,0" + }, + { + "ge_buy_limit": "10", + "examine": "Not so spiky anymore!", + "grand_exchange_price": "23700", + "durability": null, + "name": "Adamant berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12921" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12922", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0", + "point_price": "35" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12923", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12924", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12925", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12926", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "50500", + "name": "Rune spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12927", + "bonuses": "0,0,0,-6,-2,14,15,13,0,14,8,2,0,0,0" + }, + { + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "grand_exchange_price": "50500", + "durability": null, + "name": "Rune spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12928" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12929", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0", + "point_price": "35" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12930", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12931", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12932", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12933", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "135300", + "name": "Rune berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12934", + "bonuses": "0,0,0,-8,-2,16,18,17,-1,17,9,2,0,0,0" + }, + { + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "grand_exchange_price": "135300", + "durability": null, + "name": "Rune berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12935" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12936", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12937", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12938", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12939", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12940", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A worn out coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "92700", + "name": "Green d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12941", + "bonuses": "0,0,0,-1,1,1,2,2,1,2,1,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A worn out coif made of green dragonhide.", + "grand_exchange_price": "92700", + "durability": null, + "name": "Green d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12942" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12943", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12944", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "Fully charged: A coif made of blue dragonhide. Fully degraded: A worn out coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12945", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12946", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12947", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A worn out coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "131900", + "name": "Blue d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12948", + "bonuses": "0,0,0,-1,1,1,2,2,1,2,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A worn out coif made of blue dragonhide.", + "grand_exchange_price": "131900", + "durability": null, + "name": "Blue d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12949" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12950", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12951", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "Fully charged: A coif made of red dragonhide.Fully degraded: A worn out coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12952", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12953", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12954", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A worn out coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "156600", + "name": "Red d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12955", + "bonuses": "0,0,0,-1,2,1,2,3,1,2,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A worn out coif made of red dragonhide.", + "grand_exchange_price": "156600", + "durability": null, + "name": "Red d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12956" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12957", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12958", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12959", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12960", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "Fully charged: A coif made of black dragonhide. Fully degraded: A worn out coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12961", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "229000", + "name": "Black d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12962", + "bonuses": "0,0,0,-1,3,1,3,3,1,2,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A coif made of black dragonhide.", + "grand_exchange_price": "229000", + "durability": null, + "name": "Black d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12963" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12964", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12965", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12966", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12967", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12968", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "ge_buy_limit": "10", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "6511", + "name": "Combat hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12969", + "bonuses": "0,0,0,1,0,0,0,0,1,0,2,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "6511", + "durability": null, + "name": "Combat hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12970" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12971", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12972", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12973", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12974", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12975", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "ge_buy_limit": "10", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "61500", + "name": "Combat robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12976", + "bonuses": "0,0,0,3,0,0,0,0,3,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "61500", + "durability": null, + "name": "Combat robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12977" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12978", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12979", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12980", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12981", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12982", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "ge_buy_limit": "10", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "47800", + "name": "Combat robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12983", + "bonuses": "0,0,0,2,0,0,0,0,2,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "47800", + "durability": null, + "name": "Combat robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12984" + }, + { + "shop_price": "15", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "3694", + "durability": null, + "name": "Bronze gauntlets", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12985", + "bonuses": "0,0,0,-1,-1,2,3,3,-1,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "3275", + "durability": null, + "name": "Worn-out bronze gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12986", + "bonuses": "0,0,0,-1,-1,0,1,1,-1,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3275", + "durability": null, + "name": "Worn-out bronze gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12987" + }, + { + "shop_price": "30", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "17339", + "durability": null, + "name": "Iron gauntlets", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12988", + "bonuses": "0,0,0,-1,-1,3,4,4,-1,3,3,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "30", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "16000", + "durability": null, + "name": "Worn-out iron gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12989", + "bonuses": "0,0,0,-1,-1,0,1,1,-1,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16000", + "durability": null, + "name": "Worn-out iron gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12990" + }, + { + "requirements": "{1,5}", + "shop_price": "50", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "29844", + "durability": null, + "name": "Steel gauntlets", + "tradeable": "false", + "weight": "10", + "archery_ticket_price": "0", + "id": "12991", + "bonuses": "0,0,0,-1,-1,4,5,5,-1,4,4,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,5}", + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "durability": null, + "weight": "10", + "equipment_slot": "9", + "grand_exchange_price": "27000", + "name": "Worn-out steel gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12992", + "bonuses": "0,0,0,-1,-1,1,1,1,-1,1,1,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27000", + "durability": null, + "name": "Worn-out steel gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12993" + }, + { + "requirements": "{1,10}", + "shop_price": "75", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "50808", + "durability": null, + "name": "Black gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "12994", + "bonuses": "0,0,0,-1,-1,5,6,6,-1,5,5,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,10}", + "shop_price": "75", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "40100", + "name": "Worn-out black gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12995", + "bonuses": "0,0,0,-1,-1,1,2,2,-1,1,1,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40100", + "durability": null, + "name": "Worn-out black gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12996" + }, + { + "requirements": "{1,20}", + "shop_price": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "60064", + "durability": null, + "name": "Mithril gauntlets", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12997", + "bonuses": "0,0,0,-1,-1,6,7,7,-1,6,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,20}", + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "54200", + "durability": null, + "name": "Worn-out mithril gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12998", + "bonuses": "0,0,0,-1,-1,2,2,2,-1,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "54200", + "durability": null, + "name": "Worn-out mithril gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12999" + }, + { + "requirements": "{1,30}", + "shop_price": "150", + "examine": "I have to keep my hands safe! Uncharged: A bit worse for wear.", + "grand_exchange_price": "74526", + "durability": null, + "name": "Adamant gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "13000", + "bonuses": "0,0,0,-1,-1,8,9,9,-1,8,8,1,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,30}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe! Uncharged: A bit worse for wear.", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "71500", + "name": "Worn-out adamant gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13001", + "bonuses": "0,0,0,-1,-1,2,3,3,-1,2,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "71500", + "durability": null, + "name": "Worn-out adamant gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13002" + }, + { + "requirements": "{1,40}", + "shop_price": "200", + "examine": "Fully charged: I have to keep my hands safe! Worn-Out: A bit worse for wear.", + "grand_exchange_price": "95700", + "durability": null, + "name": "Rune gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "13003", + "bonuses": "0,0,0,-1,-1,10,11,11,-1,10,10,2,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,40}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Fully charged: I have to keep my hands safe! Worn-Out: A bit worse for wear.", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "99900", + "name": "Worn-out rune gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13004", + "bonuses": "0,0,0,-1,-1,3,4,4,-1,3,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "99900", + "durability": null, + "name": "Worn-out rune gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13005" + }, + { + "requirements": "{1,60}", + "shop_price": "300", + "examine": "Uncharged: A bit worse for wear. Charged: I have to keep my hands safe!", + "grand_exchange_price": "214700", + "durability": null, + "name": "Dragon gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "13006", + "bonuses": "0,0,0,-1,-1,14,15,15,-1,14,14,3,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,60}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Uncharged: A bit worse for wear. Charged: I have to keep my hands safe!", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "166200", + "name": "Worn-out dragon gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13007", + "bonuses": "0,0,0,-1,-1,4,5,5,-1,4,4,1,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "166200", + "durability": null, + "name": "Worn-out dragon gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13008" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13010" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13011" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13012" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13013" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13014" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13015" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13016" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13017" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13018" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13019" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13020" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13021" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13022" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13023" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13024" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13025" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13026" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13027" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13028" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13029" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13030" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13031" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13032" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13033" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13034" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13035" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13036" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13037" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13038" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13039" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13040" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13041" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13042" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13043" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13044" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13045" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13046" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13047" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13048" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13049" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13050" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13051" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13052" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13053" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13054" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13055" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13056" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13057" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13058" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13059" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13060" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13061" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13062" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13063" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13064" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13065" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13066" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13067" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13068" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13069" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13070" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13071" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13072" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13074" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13075" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13076" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13077" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13078" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13079" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13080" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A black crossbow.", + "walk_anim": "4226", + "durability": null, + "weight": "5", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "grand_exchange_price": "261", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "tradeable": "true", + "name": "Black crossbow", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "13081", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,60,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "261", + "durability": null, + "name": "Black crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13082" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "55", + "durability": null, + "name": "Black bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13083", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "141", + "durability": null, + "name": "Black bolts(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13084", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "233", + "durability": null, + "name": "Black bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13085", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "1690", + "durability": null, + "name": "Black bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13086", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{0,8}", + "ge_buy_limit": "2", + "examine": "A sapphire-topped cane.", + "durability": null, + "weight": "0.5", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "77000", + "name": "Black cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13095", + "bonuses": "0,-2,16,0,0,0,0,0,0,0,0,13,2,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "77000", + "durability": null, + "name": "Black cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13096" + }, + { + "requirements": "{0,28}", + "ge_buy_limit": "2", + "examine": "A ruby-topped cane.", + "durability": null, + "weight": "0.5", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "19100", + "name": "Adamant cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13097", + "bonuses": "0,-2,25,0,0,0,0,0,0,0,0,23,3,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "19100", + "durability": null, + "name": "Adamant cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13098" + }, + { + "requirements": "{0,38}", + "ge_buy_limit": "2", + "examine": "A diamond-topped cane.", + "durability": null, + "weight": "0.5", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "14500", + "name": "Rune cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13099", + "bonuses": "0,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14500", + "durability": null, + "name": "Rune cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13100" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Comes with a free rabbit!", + "grand_exchange_price": "160400", + "durability": null, + "name": "Top hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13101", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "160400", + "durability": null, + "name": "Top hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13102" + }, + { + "ge_buy_limit": "2", + "examine": "Official explorer headgear!", + "grand_exchange_price": "85400", + "durability": null, + "name": "Pith helmet", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "13103", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "85400", + "durability": null, + "name": "Pith helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13104" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "ge_buy_limit": "2", + "examine": "Spikier than normal.", + "durability": null, + "weight": "10", + "equipment_slot": "0", + "grand_exchange_price": "38300", + "name": "Spiked helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13105", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "38300", + "durability": null, + "name": "Spiked helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13106" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Shear elegance.", + "grand_exchange_price": "296700", + "durability": null, + "name": "Sheep mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13107", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "296700", + "durability": null, + "name": "Sheep mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13108" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "I can get the look right, but can I do the waddle too?", + "grand_exchange_price": "633600", + "durability": null, + "name": "Penguin mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13109", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "633600", + "durability": null, + "name": "Penguin mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13110" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "The bats have left the belltower.", + "grand_exchange_price": "399000", + "durability": null, + "name": "Bat mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13111", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "399000", + "durability": null, + "name": "Bat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13112" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "It's the year of the cat!", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Cat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13113", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Cat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13114" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "I'm hungry like the wolf.", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Wolf mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13115", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Wolf mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13116" + }, + { + "turn90cw_anim": "9053", + "examine": "A fully charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "defence_anim": "9048", + "equipment_slot": "3", + "attack_anims": "9097,9097,9097,9097", + "stand_anim": "9049", + "name": "Ivandis flail (30)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13117", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (29)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13118", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "9054", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail(28)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13119", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (27)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13120", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (26)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13121", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (25)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13122", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (24)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13123", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (23)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13124", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (22)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13125", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (21)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13126", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (20)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13127", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (19)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13128", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (18)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13129", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (17)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13130", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (16)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13131", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (15)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13132", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (14)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13133", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (13)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13134", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (12)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13135", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (11)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13136", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (10)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13137", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (9)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13138", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (8)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13139", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (7)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13140", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (6)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13141", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (5)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13142", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (4)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13143", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (3)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13144", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (2)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13145", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - one last charge left.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (1)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13146", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "examine": "Flail of Ivandis dust.", + "durability": null, + "name": "Flail dust", + "archery_ticket_price": "0", + "id": "13147" + }, + { + "destroy_message": "You found this page in the top floor of Paterdomus temple on an old table.", + "examine": "A page ripped from a book; it looks like a map of some kind.", + "durability": null, + "name": "Book page", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13149" + }, + { + "destroy_message": "You got this book from a bunk bed in Sanguinesti Myreque base.", + "examine": "A big book of combat techniques.", + "durability": null, + "name": "Combat book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13151" + }, + { + "examine": "Used to make a metal chain.", + "durability": null, + "name": "Chain link mould", + "weight": "1", + "archery_ticket_price": "0", + "id": "13153" + }, + { + "examine": "A chain made from mithril and silver.", + "durability": null, + "name": "Silvthril chain", + "weight": "3", + "archery_ticket_price": "0", + "id": "13154" + }, + { + "examine": "A blessed sickle with an emerald recessed into it.", + "durability": null, + "name": "Silver sickle emerald(b)", + "weight": "1", + "archery_ticket_price": "0", + "id": "13155", + "equipment_slot": "3" + }, + { + "examine": "A blessed and enchanted silver sickle with an emerald recessed into it.", + "durability": null, + "name": "Enchanted sickle emerald(b)", + "weight": "1", + "archery_ticket_price": "0", + "id": "13156", + "equipment_slot": "3" + }, + { + "examine": "A Vyrewatch corpse. Just a husk, really.", + "durability": null, + "name": "Vyre corpse", + "weight": "5", + "archery_ticket_price": "0", + "id": "13157" + }, + { + "examine": "An ornate key: precise workmanship and an ethereal glow. (Legacy of Seergaze)", + "durability": null, + "name": "Columbarium key", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13158" + }, + { + "destroy_message": "You got this key by cremating a Vyrewatch in the Paterdomus Columbarium.", + "examine": "An ornate key: precise workmanship and an ethereal glow. (Legacy of Seergaze)", + "durability": null, + "name": "Ornate tomb key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13159" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A Tome of Experience (2nd Edition) that awards 2500 XP per chapter.", + "durability": null, + "name": "Tome of xp 2nd ed (3)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13160" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A Tome of Experience (2nd Edition) that awards 2500 XP per chapter.", + "durability": null, + "name": "Tome of xp 2nd ed (2)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13161" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A Tome of Experience (2nd Edition) that awards 2500 XP per chapter.", + "durability": null, + "name": "Tome of xp 2nd ed (1)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13162" + }, + { + "examine": "A sapphire-topped cane.", + "grand_exchange_price": "115390", + "durability": null, + "name": "Black cane", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "attack_speed": "5", + "weapon_interface": "10", + "id": "13163", + "bonuses": "0,-2,16,0,0,0,0,0,0,0,0,13,2,0,0", + "equipment_slot": "3" + }, + { + "examine": "A ruby-topped cane.", + "grand_exchange_price": "18514", + "durability": null, + "name": "Adamant cane", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "weapon_interface": "10", + "id": "13164", + "bonuses": "0,-2,25,0,0,0,0,0,0,0,0,23,3,0,0", + "equipment_slot": "3" + }, + { + "examine": "A diamond-topped cane.", + "durability": null, + "weight": "0.5", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "15023", + "name": "Rune cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13165", + "bonuses": "0,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "lendable": "true", + "examine": "Comes with a free rabbit!", + "grand_exchange_price": "425919", + "durability": null, + "name": "Top hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13166", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Official explorer headgear!", + "grand_exchange_price": "99682", + "durability": null, + "name": "Pith helmet", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "13167", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Spikier than normal.", + "grand_exchange_price": "39643", + "durability": null, + "name": "Spiked helmet", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "13168", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "Shear elegance.", + "grand_exchange_price": "313558", + "durability": null, + "name": "Sheep mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13169", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "I can get the look right, but can I do the waddle too?", + "grand_exchange_price": "609515", + "durability": null, + "name": "Penguin mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13170", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "The bats have left the belltower.", + "grand_exchange_price": "371616", + "durability": null, + "name": "Bat mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13171", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "It's the year of the cat!", + "grand_exchange_price": "1066648", + "durability": null, + "name": "Cat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13172", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "I'm hungry like the wolf.", + "grand_exchange_price": "1303443", + "durability": null, + "name": "Wolf mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13173", + "equipment_slot": "0" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Blue navy slacks", + "archery_ticket_price": "0", + "id": "13174", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Green navy slacks", + "archery_ticket_price": "0", + "id": "13175", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Red navy slacks", + "archery_ticket_price": "0", + "id": "13176", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Brown navy slacks", + "archery_ticket_price": "0", + "id": "13177", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Black navy slacks", + "archery_ticket_price": "0", + "id": "13178", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Purple navy slacks", + "archery_ticket_price": "0", + "id": "13179", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Grey navy slacks", + "archery_ticket_price": "0", + "id": "13180", + "equipment_slot": "7" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Blue naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13181", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Green naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13182", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Red naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13183", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Brown naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13184", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Black naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13185", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Purple naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13186", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Grey naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13187", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Blue tricorn hat", + "archery_ticket_price": "0", + "id": "13188", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Green tricorn hat", + "archery_ticket_price": "0", + "id": "13189", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Red tricorn hat", + "archery_ticket_price": "0", + "id": "13190", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Brown tricorn hat", + "archery_ticket_price": "0", + "id": "13191", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Black tricorn hat", + "archery_ticket_price": "0", + "id": "13192", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Purple tricorn hat", + "archery_ticket_price": "0", + "id": "13193", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Grey tricorn hat", + "archery_ticket_price": "0", + "id": "13194", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this lamp, it will be destroyed. You can obtain another from Dunstan.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Mysterious lamp", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13227" + }, + { + "destroy_message": "You can get another net from Professor Arblenap on Ice Mountain.", + "examine": "Professor Arblenap gave you this net to catch the baby icefiends on Ice Mountain.", + "durability": null, + "name": "Icefiend net", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13230", + "equipment_slot": "3" + }, + { + "examine": "You should give this to Professor Arblenap.", + "durability": null, + "name": "Baby icefiend", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13231", + "equipment_slot": "3" + }, + { + "destroy_message": "It will reappear near the bottom of Ice Mountain.", + "examine": "The remains of the Oracle's tent on Ice Mountain.", + "durability": null, + "name": "Tent", + "tradeable": "false", + "destroy": "true", + "weight": "30", + "archery_ticket_price": "0", + "id": "13232" + }, + { + "destroy_message": "You can get it back by pickpocketing Drorkar again.", + "examine": "You took this key from Drorkar's pocket in the power station. (Perils of Ice Mountain)", + "durability": null, + "name": "Dwarven key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13234" + }, + { + "examine": "A plank of oak that has been treated to resist fire.", + "durability": null, + "name": "Treated oak plank", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "13238" + }, + { + "shop_price": "14", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "33", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "13239" + }, + { + "durability": null, + "name": ".", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13240", + "equipment_slot": "5" + }, + { + "examine": "A plank of oak that has been treated to resist fire.", + "durability": null, + "name": "Treated plank", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "13241" + }, + { + "durability": null, + "name": ".", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13242" + }, + { + "examine": "An old stone slab with writing on it.", + "durability": null, + "name": "Stone tablet", + "archery_ticket_price": "0", + "id": "13243" + }, + { + "examine": "A book for those who want to visit the TzHaar city.", + "durability": null, + "name": "Tzhaar tourist guide", + "archery_ticket_price": "0", + "id": "13244" + }, + { + "destroy_message": "You can mine more stone slabs in the TzHaar mine.", + "examine": "A flawed block of obsidian from the Karamja volcano.", + "durability": null, + "name": "Stone slab", + "tradeable": "false", + "destroy": "true", + "weight": "32", + "archery_ticket_price": "0", + "id": "13245" + }, + { + "destroy_message": "You can get more pillars by crafting stone slabs from the TzHaar mine.", + "examine": "A support pillar.", + "durability": null, + "name": "Pillar", + "tradeable": "false", + "destroy": "true", + "weight": "25", + "archery_ticket_price": "0", + "id": "13246" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13247", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13248", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13249", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13250", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can obtain another from the mummy guardian in the undead slayer's tomb.", + "examine": "A key obtained in Catolax's tomb.", + "durability": null, + "name": "Ranged path key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13259", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can obtain another from the mummy guardian in the undead slayer's tomb.", + "examine": "A key obtained in Catolax's tomb.", + "durability": null, + "name": "Magic path key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13260", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "shop_price": "650", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Slayer helmet", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13263", + "bonuses": "0,0,0,0,0,30,32,27,0,30,7,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "The remains of a banshee's scream.", + "durability": null, + "name": "Banshee voice", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13276", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "400", + "examine": "More of that crazy Slayer headgear.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Masked earmuffs", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13277", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "For use against turoth and kurasks.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "89", + "name": "Broad arrow heads", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13278", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "For use against turoth and kurasks.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "17", + "name": "Unfinished broad bolts", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13279", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "For use against turoth and kurasks.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "grand_exchange_price": "34", + "name": "Broad-tipped bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13280", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(8)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13281", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(7)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13282", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(6)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13283", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(5)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13284", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(4)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13285", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(3)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13286", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(2)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13287", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(1)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13288", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "turn90cw_anim": "1207", + "examine": "A razor-sharp sword.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "43082", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13290", + "stand_turn_anim": "823", + "bonuses": "67,62,0,0,0,0,0,0,0,0,0,50,0,0,0", + "requirements": "{0,50}-{18,55}", + "shop_price": "68000", + "durability": null, + "destroy": "false", + "weapon_interface": "5", + "attack_audios": "2517,2517,2500,2517", + "name": "Leaf-bladed sword" + }, + { + "shop_price": "68000", + "examine": "A razor-sharp sword.", + "grand_exchange_price": "43082", + "durability": null, + "name": "Leaf-bladed sword", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13291" + }, + { + "durability": null, + "name": "Letter", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13292", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Plans", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13293", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these plans, they will be lost and you will need to see Captain Donnie for a replacement.", + "examine": "A charcoal rubbing taken from 50% Luke.", + "durability": null, + "name": "Charcoal rubbing", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13294", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Frank's mark, you will need to see him to get another.", + "examine": "Signature from Frank.", + "durability": null, + "name": "Frank's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13295", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these lockpicks, you will need to look under the mattress to get another set.", + "examine": "A device for opening locked doors.", + "durability": null, + "name": "Crude lockpick", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13296", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "The top of a Custom Officer's uniform.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "If you drop this shirt you will need to kill another Customs officer for a replacement.", + "remove_sleeves": "true", + "name": "Customs shirt", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13297", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these trousers you will need to kill another Customs officer for a replacement.", + "examine": "The trousers of a Custom Officer's uniform.", + "durability": null, + "name": "Customs trousers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13298", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "If you drop this hat you will need to kill another Customs officer for a replacement.", + "examine": "The hat of a Custom Officer's uniform.", + "durability": null, + "name": "Customs hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13299", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13300", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13301", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Brooch", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13302", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Izzy's No-Beard's mark, you will need to see him to get another.", + "examine": "Signature from Izzy No-Beard.", + "durability": null, + "name": "Izzy's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13303", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Key", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13304", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this crowbar, you will need to get another from the chest on the sunken ship.", + "examine": "This could be useful.", + "durability": null, + "name": "Crowbar", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13305", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the idol, you will need to go diving to get another replacement.", + "examine": "An idol. It has many heads.", + "durability": null, + "name": "Idol of many heads", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13307", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Bill Teach's mark, you will need to see him to get another.", + "examine": "Signature from Bill Teach.", + "durability": null, + "name": "Bill teach's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13308", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this paper, you will need to call to the guards for a replacement. ", + "examine": "This is generally used for writing on.", + "durability": null, + "name": "Paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13309", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this note, you'll need to call the guards for replacement paper.", + "examine": "A written confession.", + "durability": null, + "name": "Confession", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13310", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13311", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this ink, you will need to call to the guards for a replacement.", + "examine": "An empty ink bottle./This is full of ink.", + "durability": null, + "name": "Ink bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13312", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this paper you will need to call to the guards to replace it and the ink.", + "examine": "It's got ink all over it.", + "durability": null, + "name": "Inky paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13313", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this ink, you will need to call to the guards for a replacement.", + "examine": "An empty ink bottle./This is full of ink.", + "durability": null, + "name": "Ink bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13314", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this bottle, you will need to call to the guards for a replacement.", + "examine": "It's smashed. I should mind my fingers.", + "durability": null, + "name": "Smashed bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13315", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "The top part of a prisoner's uniform.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "If you drop this top, then you will need to speak to the guards to get it replaced.", + "remove_sleeves": "true", + "name": "Prison uniform top", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13316", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these trousers, then you will need to speak to the guards to get it replaced.", + "examine": "The bottom part of a prisoner's uniform.", + "durability": null, + "name": "Prison uniform trousers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13317", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "examine": "It's covered in fish slop.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "If you drop this top, you will need to speak to the guards to get it replaced, then find a way to get stew on it again.", + "remove_sleeves": "true", + "name": "Fishy prison uniform top", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13318", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this cup it will be destroyed and you will have to pick up another.", + "examine": "A standard prison-issue tin cup.", + "durability": null, + "name": "Tin cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13319", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "If you drop this cup it will be destroyed and you will have to pick up another.", + "examine": "A standard prison-issue tin cup.", + "durability": null, + "name": "Tin cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13320", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Destroy", + "examine": "A pipe that belongs in a cannon stand.", + "durability": null, + "name": "Pipe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13321", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, it will be destroyed and you will have to get another.", + "durability": null, + "name": "Accordion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13322", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, it will be destroyed and you will have to get another.", + "durability": null, + "name": "Accordion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13323", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, it will be destroyed and you will have to get another.", + "durability": null, + "name": "Accordion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13324", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, pipe and inky paper, it will all be destroyed and you will need to get all the items back again.", + "examine": "A very crude vacuum pump.", + "durability": null, + "name": "Vacuum pump", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13325", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this, you will lose all the items you put in it, as well as the seagull.", + "examine": "It sounds like a law firm.", + "durability": null, + "name": "Vacuum pump and gull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13326", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "If you drop this quill, you will need to talk to the guard for a replacement.", + "examine": "From a bird - can be used for writing.", + "durability": null, + "name": "Quill", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13327", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "From a bird - can be used for writing. It has some ink on the tip.", + "durability": null, + "name": "Inky quill", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13328", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13329", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13330", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this dead parrot, there is a chance that bad, bad things will happen to you - unless you see 50 Ships Mufassah for a replacement.", + "examine": "A very dead rotten parrot.", + "durability": null, + "name": "Ex-parrot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13331", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this cage, you will need to see Bill Teach for a replacement.", + "examine": "It feels very cold to the touch.", + "durability": null, + "name": "Magical cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13332", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this dead parrot in a cage (and who wouldn't) then you will need to see ", + "examine": "A very dead rotten parrot in a magical cage.", + "durability": null, + "name": "Ex-parrot in a magic cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13333", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the cage, the ex-ex-parrot will escape.", + "examine": "A very alive rotten parrot in a magic cage.", + "durability": null, + "name": "Ex-ex-parrot in a magic cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13334", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Ex-ex-parrot", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13335", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Ex-ex-parrot", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13336", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "A pirate impling in a jar.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "grand_exchange_price": "7346", + "name": "Pirate impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13337", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "shop_price": "50", + "grand_exchange_price": "7346", + "durability": null, + "name": "Pirate impling jar", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13338" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A white bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13339", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A white bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13340", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A red bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13341", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A red bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13342", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A blue bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13343", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A blue bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13344", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A brown bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13345", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A brown bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13346", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13347", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13348", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13349", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13350", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A orange bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13351", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A orange bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13352", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "100", + "examine": "It's dark, and I'm wearing two patches. Hit it!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Double eyepatches", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13353", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "Two patches and a hat.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Pirate hat and eyepatches", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13354", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "100", + "examine": "A patch for the left eye.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "23485", + "name": "Left eyepatch", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13355", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A patch for the left eye.", + "grand_exchange_price": "23485", + "durability": null, + "name": "Left eyepatch", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13356" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A hat and a patch.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Pirate hat and eyepatch", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13357", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A seaworthy grey shirt.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13358", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13359" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A seaworthy purple shirt.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13360", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13361" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A seaworthy orange shirt.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13362", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13363" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "A seaworthy pair of grey trousers.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "7", + "grand_exchange_price": "1", + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13364", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "350", + "grand_exchange_price": "1", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13365" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "A seaworthy pair of purple trousers.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "7", + "grand_exchange_price": "1", + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13366", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "350", + "grand_exchange_price": "1", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13367" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "A seaworthy pair of orange trousers.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "7", + "grand_exchange_price": "1", + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13368", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "350", + "grand_exchange_price": "1", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13369" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13370", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "durability": null, + "name": "Bandana", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13371" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13372", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "durability": null, + "name": "Bandana", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13373" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "An orange bandana.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13374", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "durability": null, + "name": "Bandana", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13375" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13376", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A orange bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13377", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13378", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Destroy", + "examine": "Some rock fragments.", + "durability": null, + "name": "Rock fragments", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13379", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the letter, it will be destroyed and you'll need to see Bill Teach for another.", + "examine": "Note from Teach to Brass Hand Harry.", + "durability": null, + "name": "Introduction letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13380", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13381", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13382", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13383", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13384", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13385", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Wall beast fingers in a white fern sauce.", + "durability": null, + "name": "Fingers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13386", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "This hand part is small and delicate, and dropping it here will lose it. If you lose it, you will need to see Brass Hand Harry for a replacement.", + "examine": "A brass thumb.", + "durability": null, + "name": "Thumb", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13387", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13388", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "This hand part is small and delicate, and dropping it here will lose it. If you lose it, you will need to see Brass Hand Harry for a replacement.", + "examine": "A brass wrist.", + "durability": null, + "name": "Wrist", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13389", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "This hand part is small and delicate, and dropping it here will lose it. If you lose it, you will need to see Brass Hand Harry for a replacement.", + "examine": "A brass brace.", + "durability": null, + "name": "Brace", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13390", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this hand, you will destroy it and you will have to remake it from parts that Brass Hand Harry has.", + "examine": "A completed brass hand.", + "durability": null, + "name": "Brass hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13391", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this ink pad, you will lose it and will need to see Brass Hand Harry for a replacement.", + "examine": "It's soaked with ink.", + "durability": null, + "name": "Ink pad", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13392", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this hand, you will destroy it and you will have to remake it from parts that Brass Hand Harry has.", + "examine": "An inky brass hand.", + "durability": null, + "name": "Inky hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13393", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this paper, you will need to call to the guards for a replacement. ", + "examine": "This is generally used for writing on.", + "durability": null, + "name": "Paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13394", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Brass Hand Harry's mark, it will be destroyed and you need to see him to get another.", + "examine": "Handprint from Brass Hand Harry.", + "durability": null, + "name": "Brass hand harry's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13395", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Makes me itch.", + "durability": null, + "name": "Fake beard", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13396", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "examine": "It looks like someone has sneezed in it.", + "durability": null, + "name": "Fake moustache and nose", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13397", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "examine": "Why is the monocle nailed to it?", + "durability": null, + "name": "Fake monocle, moustache and nose", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13398", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "You can barely see where it connected to the mop handle.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "name": "Curly wig", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13399", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "It looks like it is part-dog, part-mould.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "name": "Straight wig", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13400", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this order for 'rum' you will need to speak to the Rusty Anchor barman to get another.", + "examine": "An order simply for 'rum'.", + "durability": null, + "name": "Order", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13401", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Captain Braindeath's mark, you will need to speak to him to get another.", + "examine": "Signature of Captain Braindeath.", + "durability": null, + "name": "Braindeath's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13402", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "300", + "examine": "A replica tinderbox made of solid gold.", + "durability": null, + "name": "Golden tinderbox", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13403", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A bow from a darker dimension.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "9", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equip_audio": "3738", + "render_anim": "303", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "86850", + "attack_audios": "3731,0,0,0", + "name": "Dark bow", + "archery_ticket_price": "0", + "id": "13405", + "bonuses": "0,0,0,0,95,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "59171", + "name": "Ancient staff", + "archery_ticket_price": "0", + "id": "13406", + "bonuses": "10,-1,40,15,0,2,3,1,15,0,5,50,0,-1,10" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helmet is worn by archers.", + "grand_exchange_price": "46334", + "durability": null, + "name": "Archer helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13407", + "absorb": "0,3,1", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helmet is worn by berserkers.", + "grand_exchange_price": "45978", + "durability": null, + "name": "Berserker helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13408", + "absorb": "1,0,3", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helm is worn by warriors.", + "grand_exchange_price": "45664", + "durability": null, + "name": "Warrior helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13409", + "absorb": "1,0,3", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helm is worn by farseers.", + "grand_exchange_price": "45989", + "durability": null, + "name": "Farseer helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13410", + "absorb": "3,1,0", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Protective headwear made from crabs. Better than it sounds.", + "grand_exchange_price": "20378", + "durability": null, + "name": "Rock-shell helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13411", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,6,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A sturdy body armour made from rock crab pieces.", + "grand_exchange_price": "41788", + "durability": null, + "name": "Rock-shell plate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13412", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Some tough leggings made from rock crab parts.", + "grand_exchange_price": "37139", + "durability": null, + "name": "Rock-shell legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13413", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A helm fit for any Fremennik ranger.", + "grand_exchange_price": "37724", + "durability": null, + "name": "Spined helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13414", + "absorb": "0,3,1", + "bonuses": "0,-6,-6,-6,6,6,6,6,6,0,6,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A constant reminder that I'm above a Dagannoth in the food chain.", + "grand_exchange_price": "5773", + "durability": null, + "name": "Spined body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13415", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,30,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Stylish leg armour for rangers with a lingering smell of raw fish...", + "grand_exchange_price": "2696", + "durability": null, + "name": "Spined chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13416", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Make your foes cower by wearing a skull as a helmet!", + "grand_exchange_price": "39060", + "durability": null, + "name": "Skeletal helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13417", + "absorb": "3,1,0", + "bonuses": "0,0,0,2,-2,10,9,11,3,0,6,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The bones in this armour seems to vibrate with a magic quality...", + "grand_exchange_price": "26289", + "durability": null, + "name": "Skeletal top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13418", + "absorb": "6,3,0", + "bonuses": "0,0,0,8,-10,35,25,42,15,0,30,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A superior set of strengthened slacks for any self respecting seer.", + "grand_exchange_price": "24591", + "durability": null, + "name": "Skeletal bottoms", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13419", + "absorb": "4,2,0", + "bonuses": "0,0,0,6,-7,22,20,24,10,0,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Some finely crafted Fremennik boots, made from spined dagannoth hide.", + "grand_exchange_price": "158181", + "durability": null, + "name": "Spined boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13420", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,1,1,0,0,0,1,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Some Fremennik boots, made from the shards of a rock crab's shell.", + "grand_exchange_price": "1358", + "durability": null, + "name": "Rock-shell boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13421", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Some finely crafted Fremennik boots, made from the bones of a Wallasalki.", + "grand_exchange_price": "7788", + "durability": null, + "name": "Skeletal boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13422", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fremennik gloves stitched together from spined dagannoth hide.", + "grand_exchange_price": "3027", + "durability": null, + "name": "Spined gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13423", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,1,2,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Fremennik gloves stitched together from rock crab shell shards.", + "grand_exchange_price": "12839", + "durability": null, + "name": "Rock-shell gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13424", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fremennik gloves stitched together from wallasalki bones fragments.", + "grand_exchange_price": "25838", + "durability": null, + "name": "Skeletal gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13425", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A mysterious ring that can fill the wearer with magical power...", + "grand_exchange_price": "799703", + "durability": null, + "name": "Seers ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13426", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A fabled ring that improves the wearer's skill with a bow...", + "grand_exchange_price": "483521", + "durability": null, + "name": "Archers ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13427", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,4,0,0,0,0,4,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A legendary ring once worn by Fremennik warriors.", + "grand_exchange_price": "361302", + "durability": null, + "name": "Warrior ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13428", + "absorb": "0,0,0", + "bonuses": "0,4,0,0,0,0,4,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A ring reputed to bring out a berserk fury in its wearer.", + "grand_exchange_price": "963418", + "durability": null, + "name": "Berserker ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13429", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,4,0,0,0,4,0,0,0" + }, + { + "examine": "A two-handed dragon sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "124", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1024000", + "name": "Dragon 2h sword", + "archery_ticket_price": "0", + "id": "13430", + "bonuses": "-4,92,80,-4,0,0,0,0,0,-1,0,93,0,0,0" + }, + { + "shop_price": "20", + "examine": "Useful for catching crayfish.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "25", + "name": "Crayfish cage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13431", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Swap this note at any bank for the equivalent item.", + "grand_exchange_price": "25", + "durability": null, + "name": "Crayfish cage", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13432" + }, + { + "shop_price": "5", + "examine": "Some cooked crayfish. Eat it to heal.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "32", + "name": "Crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13433", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "5", + "examine": "Swap this note at any bank for the equivalent item.", + "grand_exchange_price": "32", + "durability": null, + "name": "Crayfish", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13434" + }, + { + "shop_price": "5", + "examine": "I should try cooking this. Used in Cooking (1).", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "41", + "name": "Raw crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13435", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "5", + "examine": "Swap this note at any bank for the equivalent item.", + "grand_exchange_price": "41", + "durability": null, + "name": "Raw crayfish", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13436" + }, + { + "shop_price": "1", + "durability": null, + "name": "Burnt crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "destroy": "false", + "attack_speed": "4", + "id": "13437", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Burnt crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "destroy": "false", + "attack_speed": "4", + "id": "13438" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13439", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "This is a bag of runes for Sir Vant.", + "durability": null, + "name": "Bag of runes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13440", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A very powerful onyx amulet.", + "grand_exchange_price": "2285210", + "durability": null, + "name": "Amulet of fury", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13442", + "absorb": "0,0,0", + "bonuses": "10,10,10,10,10,15,15,15,15,15,15,8,0,5,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A cape woven of obsidian plates.", + "grand_exchange_price": "56575", + "durability": null, + "name": "Obsidian cape", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13443", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0" + }, + { + "examine": "A weapon from the Abyss.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "11", + "absorb": "0,0,0", + "render_anim": "1578", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "114775", + "name": "Abyssal whip", + "archery_ticket_price": "0", + "id": "13444", + "bonuses": "0,82,0,0,0,0,0,0,0,0,0,82,0,0,0" + }, + { + "examine": "Simplicity is the best weapon.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "10", + "absorb": "0,0,0", + "render_anim": "27", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "29584", + "name": "Granite maul", + "archery_ticket_price": "0", + "id": "13445", + "bonuses": "0,0,81,0,0,0,0,0,0,0,0,79,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13446", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13447", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13448", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Protects your head and looks impressive too.", + "grand_exchange_price": "5756658", + "durability": null, + "name": "Dragon full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13449", + "absorb": "2,0,4", + "bonuses": "0,0,0,-6,-2,45,48,41,-1,46,12,0,0,0,0" + }, + { + "examine": "A beautiful, heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "7767458", + "name": "Armadyl godsword", + "archery_ticket_price": "0", + "id": "13450", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "A brutally heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1504919", + "name": "Bandos godsword", + "archery_ticket_price": "0", + "id": "13451", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "A gracious, heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "34966317", + "name": "Saradomin godsword", + "archery_ticket_price": "0", + "id": "13452", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "A terrifying, heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "2132037", + "name": "Zamorak godsword", + "archery_ticket_price": "0", + "id": "13453", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "An evil spear.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "1581", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "2070507", + "name": "Zamorakian spear", + "archery_ticket_price": "0", + "id": "13454", + "bonuses": "85,65,65,0,0,13,13,12,0,13,0,75,0,2,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A helmet of great craftmanship.", + "grand_exchange_price": "3732060", + "durability": null, + "name": "Armadyl helmet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13455", + "absorb": "0,5,2", + "bonuses": "-5,-5,-5,-5,10,6,6,10,10,8,12,0,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A chestplate of great craftsmanship", + "grand_exchange_price": "9628666", + "durability": null, + "name": "Armadyl chestplate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13456", + "absorb": "0,10,5", + "bonuses": "-7,-7,-7,-15,33,56,48,61,70,57,52,0,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A chainskirt of great craftsmanship.", + "grand_exchange_price": "9754868", + "durability": null, + "name": "Armadyl plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13457", + "absorb": "0,7,3", + "bonuses": "-6,-6,-6,-10,20,32,26,34,40,33,25,0,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A sturdy chestplate.", + "grand_exchange_price": "6460055", + "durability": null, + "name": "Bandos chestplate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13458", + "absorb": "4,0,9", + "bonuses": "0,0,0,-15,-10,98,93,105,-6,133,52,4,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A sturdy pair of tassets.", + "grand_exchange_price": "4228256", + "durability": null, + "name": "Bandos tassets", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13459", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,71,63,66,-4,93,25,2,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Some sturdy boots.", + "grand_exchange_price": "1259091", + "durability": null, + "name": "Bandos boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13460", + "absorb": "0,0,0", + "bonuses": "0,0,0,-5,-3,17,18,19,0,0,15,0,0,1,0" + }, + { + "examine": "The incredible blade of an Icyene.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "850151", + "name": "Saradomin sword", + "archery_ticket_price": "0", + "id": "13461", + "bonuses": "0,82,60,0,0,0,0,0,0,0,0,82,0,2,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These will protect my feet.", + "grand_exchange_price": "17336", + "durability": null, + "name": "Dragon boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13462", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,16,17,18,0,0,15,4,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13463", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another by talking about jobs with citizens and tutors around Lumbridge.", + "examine": "This reminds me of my current job and who set me to the task.", + "durability": null, + "name": "Task list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13464", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "16744", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger", + "archery_ticket_price": "0", + "id": "13465", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p)", + "archery_ticket_price": "0", + "id": "13466", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p+)", + "archery_ticket_price": "0", + "id": "13467", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p++)", + "archery_ticket_price": "0", + "id": "13468", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "examine": "A powerful axe.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "2", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "7263", + "name": "Rune axe", + "archery_ticket_price": "0", + "id": "13469", + "bonuses": "-2,26,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "examine": "A very powerful axe.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "2", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "3794577", + "name": "Dragon axe", + "archery_ticket_price": "0", + "id": "13470", + "bonuses": "-2,38,32,0,0,0,1,0,0,0,0,42,0,0,0" + }, + { + "examine": "A vicious looking axe.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "23993", + "name": "Rune battleaxe", + "archery_ticket_price": "0", + "id": "13471", + "bonuses": "-2,48,43,0,0,0,0,0,0,-1,0,64,0,0,0" + }, + { + "requirements": "{0,60}", + "examine": "A vicious looking axe.", + "has_special": "true", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "2586", + "defence_anim": "397", + "attack_anims": "395,395,401,395", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "123019", + "attack_audios": "2498,2498,2497,2498", + "name": "Dragon battleaxe", + "archery_ticket_price": "0", + "id": "13472", + "bonuses": "-2,70,65,0,0,0,0,0,0,-1,0,85,0,0,0" + }, + { + "examine": "I don't think it's intended for joinery.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "render_anim": "1430", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "24357", + "name": "Rune warhammer", + "archery_ticket_price": "0", + "id": "13473", + "bonuses": "-4,-4,53,-4,0,0,0,0,0,0,0,48,0,0,0" + }, + { + "examine": "A razor-sharp longsword", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "18420", + "name": "Rune longsword", + "archery_ticket_price": "0", + "id": "13474", + "bonuses": "38,47,-2,0,0,0,3,2,0,0,0,49,0,0,0" + }, + { + "examine": "A very powerful sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "58355", + "name": "Dragon longsword", + "archery_ticket_price": "0", + "id": "13475", + "bonuses": "58,69,-2,0,0,0,3,2,0,0,0,71,0,0,0" + }, + { + "examine": "A vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1582", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "14690", + "name": "Rune scimitar", + "archery_ticket_price": "0", + "id": "13476", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0" + }, + { + "examine": "A vicious, curved sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1928", + "attack_anims": "390,390,381,390", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "60405", + "name": "Dragon scimitar", + "archery_ticket_price": "0", + "id": "13477", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0" + }, + { + "examine": "A dragon halberd.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "15", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "200189", + "name": "Dragon halberd", + "archery_ticket_price": "0", + "id": "13478", + "bonuses": "70,95,0,-4,0,-1,4,5,0,0,0,89,0,0,0" + }, + { + "requirements": "{0,60}", + "examine": "A spiky mace.", + "has_special": "true", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "390,390,381,390", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "28817", + "name": "Dragon mace", + "archery_ticket_price": "0", + "id": "13479", + "bonuses": "40,-2,60,0,0,0,0,0,0,0,0,55,0,5,0" + }, + { + "examine": "Used for mining.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "18546", + "name": "Rune pickaxe", + "archery_ticket_price": "0", + "id": "13480", + "bonuses": "26,-2,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "2280904", + "durability": null, + "name": "Dragon chainbody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13481", + "absorb": "4,0,9", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides excellent protection.", + "grand_exchange_price": "38062", + "durability": null, + "name": "Rune platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13482", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "4373", + "durability": null, + "name": "Green d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13483", + "absorb": "0,6,3", + "bonuses": "0,0,0,-20,15,40,32,45,20,40,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "5266", + "durability": null, + "name": "Blue d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13484", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "6276", + "durability": null, + "name": "Red d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13485", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,25,50,42,55,40,50,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "7619", + "durability": null, + "name": "Black d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13486", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These look pretty heavy.", + "grand_exchange_price": "37355", + "durability": null, + "name": "Rune platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13487", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Looks pretty heavy.", + "grand_exchange_price": "160755", + "durability": null, + "name": "Dragon platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13488", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Designer leg protection.", + "grand_exchange_price": "37248", + "durability": null, + "name": "Rune plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13489", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This looks pretty heavy.", + "grand_exchange_price": "161006", + "durability": null, + "name": "Dragon plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13490", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "100% real dragonhide.", + "grand_exchange_price": "2037", + "durability": null, + "name": "Green d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13491", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "2352", + "durability": null, + "name": "Blue d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13492", + "absorb": "0,5,2", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "2761", + "durability": null, + "name": "Red d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13493", + "absorb": "0,6,3", + "bonuses": "0,0,0,-10,14,28,22,30,20,28,25,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "3377", + "durability": null, + "name": "Black d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13494", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Makes the wearer pretty intimidating.", + "grand_exchange_price": "59676", + "durability": null, + "name": "Dragon med helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13495", + "absorb": "2,0,4", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A full face helmet.", + "grand_exchange_price": "20388", + "durability": null, + "name": "Rune full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13496", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "1208", + "durability": null, + "name": "Green d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13497", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,8,3,2,4,2,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "1488", + "durability": null, + "name": "Blue d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13498", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,9,4,3,5,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Vambraces made from 100% real dragonhide.", + "grand_exchange_price": "1714", + "durability": null, + "name": "Red d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13499", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,10,5,4,6,6,0,5,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Vambraces made from 100% real dragonhide.", + "grand_exchange_price": "2208", + "durability": null, + "name": "Black d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13500", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A wooden helmet.", + "grand_exchange_price": "5210", + "durability": null, + "name": "Splitbark helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13501", + "absorb": "3,1,0", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides good protection.", + "grand_exchange_price": "27106", + "durability": null, + "name": "Splitbark body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13502", + "absorb": "6,3,0", + "bonuses": "0,0,0,10,-10,36,26,42,15,0,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These should protect my legs.", + "grand_exchange_price": "56050", + "durability": null, + "name": "Splitbark legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13503", + "absorb": "4,2,0", + "bonuses": "0,0,0,7,-7,22,20,25,10,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These should keep my hands safe.", + "grand_exchange_price": "2442", + "durability": null, + "name": "Splitbark gauntlets", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13504", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Wooden foot protection.", + "grand_exchange_price": "6845", + "durability": null, + "name": "Splitbark boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13505", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,9,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "An ancient and powerful looking Dragon Square shield.", + "grand_exchange_price": "328356", + "durability": null, + "name": "Dragon sq shield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13506", + "absorb": "5,0,11", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A large metal shield.", + "grand_exchange_price": "31885", + "durability": null, + "name": "Rune kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13507", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Blue: A magical hat. ", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13508", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The upper half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13509", + "absorb": "3,1,0", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The lower half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13510", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Bright/Dark magical gloves.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13511", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Magical boots.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13512", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Blue: A magical hat. ", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13513", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The upper half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13514", + "absorb": "3,1,0", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The lower half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13515", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Bright/Dark magical gloves.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13516", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Magical boots.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13517", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Blue: A magical hat. ", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13518", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The upper half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13519", + "absorb": "3,1,0", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The lower half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13520", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Bright/Dark magical gloves.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13521", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Magical boots.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13522", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "examine": "A nice sturdy bow made out of maple.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "193", + "name": "Maple longbow", + "archery_ticket_price": "0", + "id": "13523", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A shortbow made out of maple, still effective.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "111", + "name": "Maple shortbow", + "archery_ticket_price": "0", + "id": "13524", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A nice sturdy bow made out of yew.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "486", + "name": "Yew longbow", + "archery_ticket_price": "0", + "id": "13525", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A shortbow made out of yew, still effective.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "253", + "name": "Yew shortbow", + "archery_ticket_price": "0", + "id": "13526", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A nice sturdy magical bow.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1211", + "name": "Magic longbow", + "archery_ticket_price": "0", + "id": "13527", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Short and magical, but still effective.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "655", + "name": "Magic shortbow", + "archery_ticket_price": "0", + "id": "13528", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "An ancient Fremennik bow that was once used to battle the Moon Clan.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "21698", + "name": "Seercull", + "archery_ticket_price": "0", + "id": "13529", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A runite crossbow.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "17", + "absorb": "0,0,0", + "render_anim": "175", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "8890", + "name": "Rune crossbow", + "archery_ticket_price": "0", + "id": "13530", + "bonuses": "0,0,0,0,90,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1696744720", + "durability": null, + "name": "Red partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13531", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1314730495", + "durability": null, + "name": "Yellow partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13532", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "2147483647", + "durability": null, + "name": "Blue partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13533", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1481913809", + "durability": null, + "name": "Green partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13534", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1248900588", + "durability": null, + "name": "Purple partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13535", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "2147473360", + "durability": null, + "name": "White partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13536", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "It's a Santa hat.", + "grand_exchange_price": "130433327", + "durability": null, + "name": "Santa hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13537", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Aaaarrrghhh ... I'm a monster.", + "grand_exchange_price": "104671288", + "durability": null, + "name": "Green h'ween mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13538", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Aaaarrrghhh ... I'm a monster.", + "grand_exchange_price": "127720943", + "durability": null, + "name": "Blue h'ween mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13539", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Aaaarrrghhh ... I'm a monster.", + "grand_exchange_price": "171640098", + "durability": null, + "name": "Red h'ween mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13540", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful bow made from willow.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "2606", + "name": "Willow comp bow", + "archery_ticket_price": "0", + "id": "13541", + "bonuses": "0,0,0,0,22,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful bow made from yew wood.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "588", + "name": "Yew comp bow", + "archery_ticket_price": "0", + "id": "13542", + "bonuses": "0,0,0,0,49,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful bow made from magic wood.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1345", + "name": "Magic comp bow", + "archery_ticket_price": "0", + "id": "13543", + "bonuses": "0,0,0,0,71,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "74503559", + "durability": null, + "name": "3rd age range top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13544", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,30,55,47,60,60,55,52,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "47837515", + "durability": null, + "name": "3rd age range legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13545", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,17,31,25,33,30,31,25,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "9746895", + "durability": null, + "name": "3rd age range coif", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13546", + "absorb": "0,3,1", + "bonuses": "0,0,0,-2,9,4,7,10,5,8,12,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "6826420", + "durability": null, + "name": "3rd age vambraces", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13547", + "absorb": "0,0,0", + "bonuses": "0,0,0,-11,11,6,5,7,9,0,5,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "138719269", + "durability": null, + "name": "3rd age robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13548", + "absorb": "4,2,0", + "bonuses": "0,0,0,24,0,0,0,0,24,0,24,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "89961678", + "durability": null, + "name": "3rd age robe", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13549", + "absorb": "4,2,0", + "bonuses": "0,0,0,19,0,0,0,0,19,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "14976830", + "durability": null, + "name": "3rd age mage hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13550", + "absorb": "2,1,0", + "bonuses": "0,0,0,8,0,0,0,0,8,0,12,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "35019596", + "durability": null, + "name": "3rd age amulet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13551", + "absorb": "0,0,0", + "bonuses": "0,0,0,15,0,0,0,0,10,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "244180930", + "durability": null, + "name": "3rd age platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13552", + "absorb": "3,0,6", + "bonuses": "0,0,0,-25,-2,78,76,83,-5,75,25,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "266509014", + "durability": null, + "name": "3rd age platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13553", + "absorb": "4,0,9", + "bonuses": "0,0,0,-20,0,96,108,113,-4,97,52,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "50697678", + "durability": null, + "name": "3rd age full helmet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13554", + "absorb": "2,0,4", + "bonuses": "0,0,0,-5,-2,47,49,43,-3,48,12,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "91262203", + "durability": null, + "name": "3rd age kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13555", + "absorb": "5,0,11", + "bonuses": "0,0,0,-10,-4,63,65,61,-3,63,60,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Lightweight boots ideal for rangers.", + "grand_exchange_price": "6253527", + "durability": null, + "name": "Ranger boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13556", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,8,2,3,4,2,0,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Slightly magical boots.", + "grand_exchange_price": "388955", + "durability": null, + "name": "Wizard boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13557", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Endorsed by Robin Hood.", + "grand_exchange_price": "1962571", + "durability": null, + "name": "Robin hood hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13558", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,8,4,6,8,4,4,7,0,0,0,0" + }, + { + "destroy_message": "You will have talk to Explorer Jack in Lumbridge if you destroy this one.", + "shop_price": "350", + "examine": "A Lumbridge explorer's ring.", + "durability": null, + "name": "Explorer's ring 1", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13560", + "absorb": "0,0,0", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,1,0,0", + "equipment_slot": "12" + }, + { + "destroy_message": "You will have talk to ", + "shop_price": "350", + "examine": "A Lumbridge explorer's ring.", + "durability": null, + "name": "Explorer's ring 2", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13561", + "absorb": "0,0,0", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,1,0,0", + "equipment_slot": "12" + }, + { + "destroy_message": "You will need to obtain a new ring from Ned in Draynor if you destroy this one.", + "shop_price": "350", + "examine": "A Lumbridge explorer's ring.", + "durability": null, + "name": "Explorer's ring 3", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13562", + "absorb": "0,0,0", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,1,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "38", + "examine": "An occasionally edible mushroom.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "100", + "name": "Button mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13563", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "38", + "examine": "An occasionally edible mushroom.", + "grand_exchange_price": "100", + "durability": null, + "name": "Button mushroom", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13564" + }, + { + "durability": null, + "name": "Doll", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13565", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You may be able to find a new ring near where Summer stood outside the wilderness wall.", + "examine": "This magical ring once belonged to Summer's mother.", + "durability": null, + "name": "Jennica's ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13566", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "destroy_message": "Drop", + "examine": "Logs cut from a cursed magic tree.", + "durability": null, + "name": "Cursed magic logs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13567", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Logs cut from a cursed magic tree.", + "durability": null, + "name": "Cursed magic logs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13568" + }, + { + "destroy_message": "Hopefully, Jorral will be able to return them.", + "examine": "Notes on how to use the enchanted key.", + "durability": null, + "name": "Enchanted key notes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13569", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Useful for mixing things.", + "grand_exchange_price": "106", + "durability": null, + "name": "Bowl", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13570", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "It's a bucket of milk.", + "grand_exchange_price": "177", + "durability": null, + "name": "Bucket of milk", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13571", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A fresh herb.", + "grand_exchange_price": "595", + "durability": null, + "name": "Clean guam", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13572", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to start again from stratch.", + "examine": "A bowlful of bees' precious product.", + "durability": null, + "name": "Bowl of honey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13573", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to start again from stratch.", + "examine": "A bowlful of milk and honey.", + "durability": null, + "name": "Bowl of milk and honey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13574", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to start again from stratch.", + "examine": "A bowl full of milk, honey and guam.", + "durability": null, + "name": "Bowl of milk, honey and guam", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13575", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Hopefully, the family has more papyrus and charcoal.", + "examine": "Your best impression of a map of RuneScape.", + "durability": null, + "name": "Map of runescape", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13576", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Used for making notes.", + "grand_exchange_price": "290", + "durability": null, + "name": "Papyrus", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13577", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A lump of charcoal.", + "grand_exchange_price": "296", + "durability": null, + "name": "Charcoal", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13578", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A slightly muddy spade. ", + "grand_exchange_price": "130", + "durability": null, + "name": "Spade", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13579", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A plant pot filled with soil.", + "durability": null, + "name": "Plant pot", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13580", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Pear tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13581", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Mango tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13582", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Quince tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13583", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Lemon tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13584", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Avocado tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13585", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Plum tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13586", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "4", + "examine": "I can grind things for potions in this.", + "grand_exchange_price": "169", + "durability": null, + "name": "Pestle and mortar", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13587", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "One of the ingredients for making fish food.", + "grand_exchange_price": "5", + "durability": null, + "name": "Ground guam", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13588", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2", + "examine": "It's an empty bucket. ", + "grand_exchange_price": "39", + "durability": null, + "name": "Bucket", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13589", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "It seems to change temperature as I walk. (Making History)", + "durability": null, + "name": "Enchanted key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13591", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Hopefully, you can find another.", + "examine": "Some ladies jewellery.", + "durability": null, + "name": "A brooch", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13592", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will not get another chance to read the book!", + "examine": "It's falling apart, but full of knowledge.", + "durability": null, + "name": "Old tome", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13593", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Runecrafting guild teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13598", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Air altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13599", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Mind altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13600", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Water altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13601", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Earth altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13602", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Fire altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13603", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Body altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13604", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Cosmic altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13605", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Chaos altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13606", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Nature altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13607", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Law altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13608", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Death altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13609", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Blood altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13610", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Astral altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13611", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13612", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13613", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "75", + "examine": "Heavy duty wizard robes.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Runecrafter robe", + "archery_ticket_price": "0", + "id": "13614", + "bonuses": "0,0,0,5,0,5,5,5,5,5,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13615", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13616", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "A heavy-duty wizard robe.", + "durability": null, + "name": "Runecrafter skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13617", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,4,4,4,4,4,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Essence can be rough on the hands", + "durability": null, + "name": "Runecrafter gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13618", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "75", + "examine": "Heavy duty wizard robes.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Runecrafter robe", + "archery_ticket_price": "0", + "id": "13619", + "bonuses": "0,0,0,5,0,5,5,5,5,5,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13620", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13621", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "A heavy-duty wizard robe.", + "durability": null, + "name": "Runecrafter skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13622", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,4,4,4,4,4,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Essence can be rough on the hands", + "durability": null, + "name": "Runecrafter gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13623", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "75", + "examine": "Heavy duty wizard robes.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Runecrafter robe", + "archery_ticket_price": "0", + "id": "13624", + "bonuses": "0,0,0,5,0,5,5,5,5,5,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13625", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13626", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "A heavy-duty wizard robe.", + "durability": null, + "name": "Runecrafter skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13627", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,4,4,4,4,4,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Essence can be rough on the hands", + "durability": null, + "name": "Runecrafter gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13628", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Drop", + "shop_price": "15", + "examine": "Staff with a holder for a talisman on top.", + "durability": null, + "name": "Runecrafting staff", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "13629", + "absorb": "0,0,0", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0", + "render_anim": "28" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Air talisman staff", + "archery_ticket_price": "0", + "id": "13630", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Mind talisman staff", + "archery_ticket_price": "0", + "id": "13631", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Water talisman staff", + "archery_ticket_price": "0", + "id": "13632", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Earth talisman staff", + "archery_ticket_price": "0", + "id": "13633", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Fire talisman staff", + "archery_ticket_price": "0", + "id": "13634", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Body talisman staff", + "archery_ticket_price": "0", + "id": "13635", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Cosmic talisman staff", + "archery_ticket_price": "0", + "id": "13636", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Chaos talisman staff", + "archery_ticket_price": "0", + "id": "13637", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "No", + "name": "Nature talisman staff", + "archery_ticket_price": "0", + "id": "13638", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Law talisman staff", + "archery_ticket_price": "0", + "id": "13639", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Death talisman staff", + "archery_ticket_price": "0", + "id": "13640", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Blood talisman staff", + "archery_ticket_price": "0", + "id": "13641", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You will have to speak to Wizard Elriss to get another omni-talisman.", + "name": "Omni-talisman staff", + "archery_ticket_price": "0", + "id": "13642", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "20", + "examine": "Attracts Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Yellow attractor", + "archery_ticket_price": "0", + "id": "13643", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Repels Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Yellow repeller", + "archery_ticket_price": "0", + "id": "13644", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Attracts Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Green attractor", + "archery_ticket_price": "0", + "id": "13645", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Repels Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Green repeller", + "archery_ticket_price": "0", + "id": "13646", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "It creates barriers.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Green barrier generator", + "archery_ticket_price": "0", + "id": "13647", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "It creates barriers.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Yellow barrier generator", + "archery_ticket_price": "0", + "id": "13648", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will have to speak to ", + "shop_price": "4", + "examine": "Many mysterious powers emanate from the talisman.", + "durability": null, + "name": "Omni-talisman", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13649", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13650", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13651", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13652", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13653", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13654", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will have to speak to Wizard Elriss to get another omni-talisman.", + "shop_price": "100", + "examine": "A tiara infused with the properties of all talismans.", + "durability": null, + "name": "Omni-tiara", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13655", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13656", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13657", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13658", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "100", + "examine": "It burns, burns, burns...", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "12", + "destroy_message": "To get another Ring of Fire, you need to keep six beacons alight simultaneously and then talk to King Roald.", + "name": "Ring of fire", + "archery_ticket_price": "0", + "id": "13659", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "point_price": "50" + }, + { + "destroy_message": "To get another pair of Flame Gloves, you need to keep ten beacons alight simultaneously and then talk to King Roald.", + "shop_price": "200", + "examine": "The hottest gloves in town.", + "durability": null, + "name": "Flame gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13660", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "300", + "examine": "Danger: risk of fire.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "1096", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "destroy_message": "To get another Inferno Adze, you need to keep all fourteen beacons alight simultaneously and then talk to King Roald.", + "name": "Inferno adze", + "archery_ticket_price": "0", + "id": "13661", + "bonuses": "10,9,7,0,0,0,1,0,0,0,0,11,0,0,0", + "point_price": "75" + }, + { + "durability": null, + "name": "Fire beacon", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13662", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The ticket says: Tearing this ticket will make you leave the circus. Choose wisely.", + "shop_price": "10", + "examine": "Tear ticket to exit the circus.", + "durability": null, + "name": "Circus ticket", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13663", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "10", + "examine": "Let's give them a big hand!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "326", + "equipment_slot": "3", + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "name": "Giant's hand", + "archery_ticket_price": "0", + "id": "13666", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "A clown hat!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Clown hat", + "archery_ticket_price": "0", + "id": "13667", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10", + "examine": "Buttoning this up is tricky.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "remove_sleeves": "true", + "name": "Clown shirt", + "archery_ticket_price": "0", + "id": "13668", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "These are my funny pants.", + "durability": null, + "name": "Clown leggings", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13669", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "For helping clowns stay upright.", + "durability": null, + "name": "Clown shoes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13670", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "examine": "For making a happy noise.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "8", + "absorb": "0,0,0", + "render_anim": "327", + "equipment_slot": "3", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Tambourine", + "archery_ticket_price": "0", + "id": "13671", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "shop_price": "10", + "examine": "Very stylish.", + "durability": null, + "name": "Ringmaster hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13672", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "10", + "examine": "Fits nicely.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "remove_sleeves": "true", + "name": "Ringmaster shirt", + "archery_ticket_price": "0", + "id": "13673", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "shop_price": "10", + "examine": "Very stylish.", + "durability": null, + "name": "Ringmaster pants", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13674", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "shop_price": "10", + "examine": "Shiny.", + "durability": null, + "name": "Ringmaster boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13675", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "examine": "For shouting at people.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "8", + "absorb": "0,0,0", + "render_anim": "328", + "equipment_slot": "3", + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "name": "Mega-phonus", + "archery_ticket_price": "0", + "id": "13676", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10", + "examine": "Stretchy.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "remove_sleeves": "true", + "name": "Acrobat shirt", + "archery_ticket_price": "0", + "id": "13677", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very tight fitting.", + "durability": null, + "name": "Acrobat pants", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13678", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "These keep your feet off the floor.", + "durability": null, + "name": "Acrobat shoes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13679", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Oh no, I'm bald! Just kidding.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Acrobat hood", + "archery_ticket_price": "0", + "id": "13680", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10", + "examine": "Stretchy.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "remove_sleeves": "true", + "name": "Acrobat shirt", + "archery_ticket_price": "0", + "id": "13681", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very tight fitting.", + "durability": null, + "name": "Acrobat pants", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13682", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "These keep your feet off the floor.", + "durability": null, + "name": "Acrobat shoes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13683", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Oh no, I'm bald! Just kidding.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Acrobat hood", + "archery_ticket_price": "0", + "id": "13684", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "name": "A stylish hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13685", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "name": "A stylish hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13686", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "name": "A stylish hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13687", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "A stylish hat", + "archery_ticket_price": "0", + "id": "13688", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "A stylish hat", + "archery_ticket_price": "0", + "id": "13689", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "A stylish hat", + "archery_ticket_price": "0", + "id": "13690", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13691", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13692", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13693", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13694", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13695", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13696", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "10", + "durability": null, + "name": "Leggings", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13697", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Leggings", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13698", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Leggings", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13699", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Skirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13700", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Skirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13701", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Skirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13702", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13703", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13704", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13705", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13706", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You can get another Tightrope 101 by speaking to the Agility assistant.", + "examine": "Shows you the moves you need to succeed!", + "durability": null, + "name": "Tightrope 101", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13707", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another Tightrope 101 by speaking to the Agility assistant.", + "examine": "Shows you the moves you need to succeed!", + "durability": null, + "name": "Tightrope 101", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13708" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 10 is advised when juggling these.", + "durability": null, + "name": "Balls (level 10 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13709", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 20 is advised when juggling these.", + "durability": null, + "name": "Plates (level 20 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13710", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 30 is advised when juggling these.", + "durability": null, + "name": "Eggs (level 30 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13711", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 40 is advised when juggling these.", + "durability": null, + "name": "Knives (level 40 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13712", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 50 is advised when juggling these.", + "durability": null, + "name": "Spades (level 50 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13713", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 60 is advised when juggling these.", + "durability": null, + "name": "Tuna (level 60 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13714", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 70 is advised when juggling these.", + "durability": null, + "name": "Soap (level 70 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13715", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 80 is advised when juggling these.", + "durability": null, + "name": "Cannon balls (level 80 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13716", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 90 is advised when juggling these.", + "durability": null, + "name": "Torches (level 90 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13717", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 99 is advised when juggling these.", + "durability": null, + "name": "Chinchompas (level 99 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13718", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "50", + "examine": "Short, but effective.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "176", + "equipment_slot": "3", + "destroy_message": "You can get another one from the equipment box for this performance.", + "name": "Performance shortbow", + "archery_ticket_price": "0", + "id": "13719", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "14", + "examine": "A finely balanced throwing knife.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "You can get another one from the equipment box for this performance.", + "name": "Performance knife", + "archery_ticket_price": "0", + "id": "13720", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "4", + "examine": "A finely balanced throwing axe.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "You can get another one from the equipment box for this performance.", + "name": "Performance throwing axe", + "archery_ticket_price": "0", + "id": "13721", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "7", + "examine": "Arrows with bronze heads.", + "durability": null, + "name": "Performance arrow", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13722", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "13" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Teleport spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13723", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Levitation spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13724", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Alchemy spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13725", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Elemental spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13726", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can mine more if you find another crashed star.", + "shop_price": "50", + "examine": "Small, shiny bits of rock.", + "durability": null, + "name": "Stardust", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13727", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak with Larry/Chuck at Ardougne Zoo to get another.", + "examine": "Notes on the locations of penguin spies.", + "durability": null, + "name": "Spy notebook", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13732", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,40}-{5,55}", + "shop_price": "70000", + "examine": "An ethereal shield.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "39982", + "name": "Spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13734", + "bonuses": "0,0,0,0,0,39,41,50,1,45,40,0,1,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "70000", + "examine": "An ethereal shield.", + "grand_exchange_price": "39982", + "durability": null, + "name": "Spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13735" + }, + { + "requirements": "{1,70}-{5,60}", + "shop_price": "1400000", + "examine": "An ethereal shield that has been blessed with holy powers.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "936814", + "name": "Blessed spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13736", + "bonuses": "0,0,0,0,0,53,55,73,2,52,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1400000", + "examine": "An ethereal shield that has been blessed with holy powers.", + "grand_exchange_price": "936814", + "durability": null, + "name": "Blessed spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13737" + }, + { + "requirements": "{1,75}-{6,65}-{5,70}", + "shop_price": "2000000", + "examine": "An ethereal shield with an arcane sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "15076199", + "name": "Arcane spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13738", + "bonuses": "0,0,0,20,0,53,55,73,2,52,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with an arcane sigil attached to it.", + "grand_exchange_price": "15076199", + "durability": null, + "name": "Arcane spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13739" + }, + { + "requirements": "{1,75}-{5,75}", + "shop_price": "2000000", + "examine": "An ethereal shield with a divine sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "40003587", + "name": "Divine spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13740", + "bonuses": "0,0,0,0,0,63,65,75,2,57,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with a divine sigil attached to it.", + "grand_exchange_price": "40003587", + "durability": null, + "name": "Divine spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13741" + }, + { + "requirements": "{1,75}-{5,75}", + "shop_price": "2000000", + "examine": "An ethereal shield with an elysian sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "28420591", + "name": "Elysian spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13742", + "bonuses": "0,0,0,0,0,63,65,75,2,57,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with an elysian sigil attached to it.", + "grand_exchange_price": "28420591", + "durability": null, + "name": "Elysian spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13743" + }, + { + "requirements": "{1,75}-{5,70}-{6,65}", + "shop_price": "2000000", + "examine": "An ethereal shield with a spectral sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "3616112", + "name": "Spectral spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13744", + "bonuses": "0,0,0,0,0,53,55,73,30,52,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with a spectral sigil attached to it.", + "grand_exchange_price": "3616112", + "durability": null, + "name": "Spectral spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13745" + }, + { + "shop_price": "750000", + "examine": "A sigil in the shape of an arcane rune.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "19508553", + "name": "Arcane sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13746", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil in the shape of an arcane rune.", + "grand_exchange_price": "19508553", + "durability": null, + "name": "Arcane sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13747" + }, + { + "shop_price": "750000", + "examine": "A sigil in the shape of a divine symbol.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "53026134", + "name": "Divine sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13748", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil in the shape of a divine symbol.", + "grand_exchange_price": "53026134", + "durability": null, + "name": "Divine sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13749" + }, + { + "shop_price": "750000", + "examine": "A sigil marked with elysian signs.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "36159098", + "name": "Elysian sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13750", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil marked with elysian signs.", + "grand_exchange_price": "36159098", + "durability": null, + "name": "Elysian sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13751" + }, + { + "shop_price": "750000", + "examine": "A sigil tempered with spectral powers.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "3116720", + "name": "Spectral sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13752", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil tempered with spectral powers.", + "grand_exchange_price": "3116720", + "durability": null, + "name": "Spectral sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13753" + }, + { + "shop_price": "750000", + "examine": "A bottle of holy elixir.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "950904", + "name": "Holy elixir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13754", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A bottle of holy elixir.", + "grand_exchange_price": "950904", + "durability": null, + "name": "Holy elixir", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13755" + }, + { + "destroy_message": "Drop", + "shop_price": "40", + "examine": "Logs cut from cursed willow roots.", + "durability": null, + "name": "Cursed willow logs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13756", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "A loyal scout of Varrock.", + "durability": null, + "name": "Hartwin", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13757", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to keep searching trees near the zombie trails until you find another.", + "examine": "A key that was found while tracking zombies. (Defender of Varrock)", + "durability": null, + "name": "Grubby key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13758", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to speak to Thurgo to find another.", + "shop_price": "1", + "examine": "The location of ", + "durability": null, + "name": "Scrap of paper", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13759", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Bottle", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13760", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A bottle of red mist.", + "durability": null, + "name": "Bottle of mist", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13761", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another from ", + "examine": "This lists each of the founding members of the ", + "durability": null, + "name": "List of elders", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13762", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "I hope I don't meet any roundheads...", + "durability": null, + "name": "Cavalier and mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13763", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A right hand fighting claw.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "absorb": "0,0,0", + "equip_audio": "1003", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "6535", + "name": "Rune claws", + "archery_ticket_price": "0", + "id": "13764", + "bonuses": "26,38,-4,0,0,10,19,5,0,0,0,39,0,0,0" + }, + { + "examine": "A powerful dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "4381", + "name": "Rune dagger", + "archery_ticket_price": "0", + "id": "13765", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Rune dagger(p)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13766", + "absorb": "0,0,0", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Rune dagger(p+)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13767", + "absorb": "0,0,0", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Rune dagger(p++)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13768", + "absorb": "0,0,0", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "examine": "A rune tipped spear.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "11317", + "name": "Rune spear", + "archery_ticket_price": "0", + "id": "13769", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "examine": "A dragon tipped spear.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "36774", + "name": "Dragon spear", + "archery_ticket_price": "0", + "id": "13770", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "destroy_message": "Drop", + "name": "Rune spear(p)", + "archery_ticket_price": "0", + "id": "13771", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "name": "Dragon spear(p)", + "archery_ticket_price": "0", + "id": "13772", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "destroy_message": "Drop", + "name": "Rune spear(p+)", + "archery_ticket_price": "0", + "id": "13773", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "name": "Dragon spear(p+)", + "archery_ticket_price": "0", + "id": "13774", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "destroy_message": "Drop", + "name": "Rune spear(p++)", + "archery_ticket_price": "0", + "id": "13775", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "name": "Dragon spear(p++)", + "archery_ticket_price": "0", + "id": "13776", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "examine": "A razor-sharp sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1381", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "11849", + "name": "Rune sword", + "archery_ticket_price": "0", + "id": "13777", + "bonuses": "38,26,-2,0,0,0,2,1,0,0,0,39,0,0,0" + }, + { + "examine": "A two handed sword.", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "124", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "37511", + "name": "Rune 2h sword", + "archery_ticket_price": "0", + "id": "13778", + "bonuses": "-4,69,50,-4,0,0,0,0,0,-1,0,70,0,0,0" + }, + { + "examine": "A rune halberd.", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "15", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "74298", + "name": "Rune halberd", + "archery_ticket_price": "0", + "id": "13779", + "bonuses": "48,67,0,-4,0,-1,4,5,0,0,0,68,0,0,0" + }, + { + "examine": "A spiky mace.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "7917", + "name": "Rune mace", + "archery_ticket_price": "0", + "id": "13780", + "bonuses": "20,-2,39,0,0,0,0,0,0,0,0,36,0,4,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "29145", + "durability": null, + "name": "Rune chainbody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13781", + "absorb": "3,0,6", + "bonuses": "0,0,0,-15,0,63,72,78,-3,65,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These will protect my feet.", + "grand_exchange_price": "7036", + "durability": null, + "name": "Rune boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13782", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,12,13,14,0,0,10,2,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A medium sized helmet.", + "grand_exchange_price": "10678", + "durability": null, + "name": "Rune med helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13783", + "absorb": "1,0,3", + "bonuses": "0,0,0,-3,-1,22,23,21,-1,22,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A stone helmet.", + "grand_exchange_price": "26576", + "durability": null, + "name": "Granite helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13784", + "absorb": "2,0,4", + "bonuses": "0,0,0,-9,-7,31,33,29,-1,39,9,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides excellent protection.", + "grand_exchange_price": "136414", + "durability": null, + "name": "Granite body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13785", + "absorb": "4,0,8", + "bonuses": "0,0,0,-22,-5,87,84,79,-6,97,45,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These look pretty heavy.", + "grand_exchange_price": "72213", + "durability": null, + "name": "Granite legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13786", + "absorb": "2,0,5", + "bonuses": "0,0,0,-31,-18,43,45,41,-4,68,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A medium square shield.", + "grand_exchange_price": "22225", + "durability": null, + "name": "Rune sq shield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13787", + "absorb": "3,0,7", + "bonuses": "0,0,0,-6,-2,38,40,36,0,38,35,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A solid stone shield.", + "grand_exchange_price": "32512", + "durability": null, + "name": "Granite shield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13788", + "absorb": "5,0,10", + "bonuses": "0,0,0,-12,-8,40,42,38,0,65,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A big 'do about nothing.", + "grand_exchange_price": "42991", + "durability": null, + "name": "A powdered wig", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13789", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These'll help me stay alive.", + "grand_exchange_price": "811293", + "durability": null, + "name": "Flared trousers", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13790", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Alas, someone has slashed my pantaloons.", + "grand_exchange_price": "19286", + "durability": null, + "name": "Pantaloons", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13791", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A cap for wearing whil...zzzzzzzzz", + "grand_exchange_price": "75357", + "durability": null, + "name": "Sleeping cap", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13792", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A diamond-topped cane.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "76692", + "name": "Rune cane", + "archery_ticket_price": "0", + "id": "13793", + "bonuses": "0,-2,39,0,0,0,0,0,0,0,0,36,0,4,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Comes with a free rabbit!", + "grand_exchange_price": "333537", + "durability": null, + "name": "Top hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13794", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Shear elegance.", + "grand_exchange_price": "582969", + "durability": null, + "name": "Sheep mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13795", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "I can get the look right, but can I do the waddle too?", + "grand_exchange_price": "1159807", + "durability": null, + "name": "Penguin mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13796", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The bats have left the belltower.", + "grand_exchange_price": "681595", + "durability": null, + "name": "Bat mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13797", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "It's the year of the cat!", + "grand_exchange_price": "2512014", + "durability": null, + "name": "Cat mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13798", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "I'm hungry like the wolf.", + "grand_exchange_price": "3240770", + "durability": null, + "name": "Wolf mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13799", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody with gold trim.", + "grand_exchange_price": "343688", + "durability": null, + "name": "Rune platebody (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13800", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "drop", + "examine": "Rune platelegs with gold trim.", + "grand_exchange_price": "238139", + "durability": null, + "name": "Rune platelegs (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13801", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt with gold trim.", + "grand_exchange_price": "37616", + "durability": null, + "name": "Rune plateskirt (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13802", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet with gold trim.", + "grand_exchange_price": "247877", + "durability": null, + "name": "Rune full helm(g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13803", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield with gold trim", + "grand_exchange_price": "118205", + "durability": null, + "name": "Rune kiteshield (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13804", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody with trim.", + "grand_exchange_price": "100586", + "durability": null, + "name": "Rune platebody (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13805", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs with trim!", + "grand_exchange_price": "81577", + "durability": null, + "name": "Rune platelegs (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13806", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt with trim.", + "grand_exchange_price": "37701", + "durability": null, + "name": "Rune plateskirt (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13807", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet with trim.", + "grand_exchange_price": "95809", + "durability": null, + "name": "Rune full helm (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13808", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A large, metal shield with a nice trim.", + "grand_exchange_price": "46469", + "durability": null, + "name": "Rune kiteshield (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13809", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Your money or your life!", + "grand_exchange_price": "252995", + "durability": null, + "name": "Highwayman mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13810", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Parlez-vous francais?", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "135411", + "name": "Blue beret", + "archery_ticket_price": "0", + "hat": true, + "id": "13811", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Parlez-vous francais?", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "451371", + "name": "Black beret", + "archery_ticket_price": "0", + "hat": true, + "id": "13812", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Parlez-vous Francais?", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "704147", + "name": "White beret", + "archery_ticket_price": "0", + "hat": true, + "id": "13813", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "All for one and one for all!", + "grand_exchange_price": "42014", + "durability": null, + "name": "Tan cavalier", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13814", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "All for one and one for all!", + "grand_exchange_price": "61518", + "durability": null, + "name": "Dark cavalier", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13815", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "All for one and one for all!", + "grand_exchange_price": "338530", + "durability": null, + "name": "Black cavalier", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13816", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A minimalist's hat.", + "grand_exchange_price": "159694", + "durability": null, + "name": "Red headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13817", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A minimalist's hat.", + "grand_exchange_price": "83543", + "durability": null, + "name": "Black headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13818", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A minimalist's hat.", + "grand_exchange_price": "26474", + "durability": null, + "name": "Brown headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13819", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody in the colours of Zamorak.", + "grand_exchange_price": "868398", + "durability": null, + "name": "Zamorak platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13820", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs in the colours of Zamorak.", + "grand_exchange_price": "316989", + "durability": null, + "name": "Zamorak platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13821", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt in the colours of Zamorak.", + "grand_exchange_price": "38597", + "durability": null, + "name": "Zamorak plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13822", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A full helmet in the colours of Zamorak.", + "grand_exchange_price": "618480", + "durability": null, + "name": "Zamorak full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13823", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A Rune kiteshield in the colours of Zamorak.", + "grand_exchange_price": "225574", + "durability": null, + "name": "Zamorak kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13824", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody in the colours of Saradomin.", + "grand_exchange_price": "1555099", + "durability": null, + "name": "Saradomin platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13825", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs in the colours of Saradomin.", + "grand_exchange_price": "376849", + "durability": null, + "name": "Saradomin platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13826", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt in the colours of Saradomin.", + "grand_exchange_price": "53048", + "durability": null, + "name": "Saradomin plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13827", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet in the colours of Saradomin.", + "grand_exchange_price": "1025974", + "durability": null, + "name": "Saradomin full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13828", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield in the colours of Saradomin.", + "grand_exchange_price": "353916", + "durability": null, + "name": "Saradomin kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13829", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody in the colours of Guthix.", + "grand_exchange_price": "406762", + "durability": null, + "name": "Guthix platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13830", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs in the colours of Guthix.", + "grand_exchange_price": "181471", + "durability": null, + "name": "Guthix platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13831", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt in the colours of Guthix.", + "grand_exchange_price": "38388", + "durability": null, + "name": "Guthix plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13832", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A rune full helmet in the colours of Guthix.", + "grand_exchange_price": "399963", + "durability": null, + "name": "Guthix full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13833", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield in the colours of Guthix.", + "grand_exchange_price": "185266", + "durability": null, + "name": "Guthix kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13834", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody with complete gold trim & plating.", + "grand_exchange_price": "2034838", + "durability": null, + "name": "Gilded platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13835", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs with gold plate.", + "grand_exchange_price": "1299758", + "durability": null, + "name": "Gilded platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13836", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt with gold plate.", + "grand_exchange_price": "84191", + "durability": null, + "name": "Gilded plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13837", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet with gold plate.", + "grand_exchange_price": "1057068", + "durability": null, + "name": "Gilded full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13838", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield with gold plate.", + "grand_exchange_price": "506093", + "durability": null, + "name": "Gilded kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13839", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,45,0,0,0,0" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Atk, Def, Str and LP xp.", + "durability": null, + "name": "Brawling gloves (melee)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13845", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Ranged xp.", + "durability": null, + "name": "Brawling gloves (ranged)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13846", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Magic xp.", + "durability": null, + "name": "Brawling gloves (magic)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13847", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Prayer xp.", + "durability": null, + "name": "Brawling gloves (prayer)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13848", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Agility xp.", + "durability": null, + "name": "Brawling gloves (agility)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13849", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Woodcutting xp.", + "durability": null, + "name": "Brawling gloves (wc)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13850", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Firemaking xp.", + "durability": null, + "name": "Brawling gloves (fm)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13851", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Mining xp.", + "durability": null, + "name": "Brawling gloves (mining)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13852", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Hunting xp.", + "durability": null, + "name": "Brawling gloves (hunter)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13853", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Thieving xp.", + "durability": null, + "name": "Brawling gloves (thieving)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13854", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Smithing xp.", + "durability": null, + "name": "Brawling gloves (smithing)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13855", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Fishing xp.", + "durability": null, + "name": "Brawling gloves (fishing)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13856", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Cooking xp.", + "durability": null, + "name": "Brawling gloves (cooking)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13857", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1412812", + "name": "Zuriel's robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13858", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1412812", + "durability": null, + "name": "Zuriel's robe top", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13859" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1412812", + "name": "Zuriel's robe top (deg)", + "archery_ticket_price": "0", + "id": "13860", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "986668", + "name": "Zuriel's robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13861", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "986668", + "durability": null, + "name": "Zuriel's robe bottom", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13862" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "986668", + "name": "Zuriel's robe bottom (deg)", + "archery_ticket_price": "0", + "id": "13863", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "361542", + "name": "Zuriel's hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13864", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "361542", + "durability": null, + "name": "Zuriel's hood", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13865" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "150000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "361542", + "name": "Zuriel's hood (deg)", + "archery_ticket_price": "0", + "id": "13866", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "destroy_message": "Drop", + "grand_exchange_price": "2116989", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13867", + "stand_turn_anim": "1209", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10", + "requirements": "{6,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Zuriel's staff" + }, + { + "destroy_message": "Drop", + "requirements": "{6,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "2116989", + "durability": null, + "name": "Zuriel's staff", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13868" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "destroy_message": "Drop", + "grand_exchange_price": "2116989", + "stand_anim": "813", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13869", + "stand_turn_anim": "1209", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10", + "shop_price": "300000", + "durability": null, + "destroy": "true", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Zuriel's staff (deg)" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "926341", + "name": "Morrigan's leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13870", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "926341", + "durability": null, + "name": "Morrigan's leather body", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13871" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "926341", + "name": "Morrigan's leather body (deg)", + "archery_ticket_price": "0", + "id": "13872", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop, Destroy after degrading.", + "grand_exchange_price": "510395", + "name": "Morrigan's leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13873", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "destroy_message": "Drop, Destroy after degrading.", + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "510395", + "durability": null, + "name": "Morrigan's leather chaps", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13874" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop, Destroy after degrading.", + "grand_exchange_price": "510395", + "name": "Morrigan's leather chaps (deg)", + "archery_ticket_price": "0", + "id": "13875", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "236411", + "name": "Morrigan's coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13876", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "236411", + "durability": null, + "name": "Morrigan's coif", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13877" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "150000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "236411", + "name": "Morrigan's coif (deg)", + "archery_ticket_price": "0", + "id": "13878", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "requirements": "{4,78}", + "shop_price": "4000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13879", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13880", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13881", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13882", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "4000", + "examine": "A vicious throwing axe.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "5", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "9994", + "name": "Morrigan's throwing axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13883", + "bonuses": "0,0,0,0,93,0,0,0,0,0,0,0,0,0,117" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1619096", + "name": "Statius's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13884", + "bonuses": "5,5,7,-30,-10,154,145,121,-6,157,60,5,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1619096", + "durability": null, + "name": "Statius's platebody", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13885" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1619096", + "name": "Statius's platebody (deg)", + "archery_ticket_price": "0", + "id": "13886", + "bonuses": "5,5,7,-30,-10,154,145,121,-6,157,60,5,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop, Destroy once it has been degraded.", + "remove_sleeves": "true", + "grand_exchange_price": "2154168", + "name": "Vesta's chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13887", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "destroy_message": "Drop, Destroy once it has been degraded.", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "2154168", + "durability": null, + "name": "Vesta's chainbody", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13888" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop, Destroy once it has been degraded.", + "remove_sleeves": "true", + "grand_exchange_price": "2154168", + "name": "Vesta's chainbody (deg)", + "archery_ticket_price": "0", + "id": "13889", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1735029", + "name": "Statius's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13890", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1735029", + "durability": null, + "name": "Statius's platelegs", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13891" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1735029", + "name": "Statius's platelegs (deg)", + "archery_ticket_price": "0", + "id": "13892", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1860767", + "name": "Vesta's plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13893", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1860767", + "durability": null, + "name": "Vesta's plateskirt", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13894" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1860767", + "name": "Vesta's plateskirt (deg)", + "archery_ticket_price": "0", + "id": "13895", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1301986", + "name": "Statius's full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13896", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1301986", + "durability": null, + "name": "Statius's full helm", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13897" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "150000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1301986", + "name": "Statius' full helm (deg)", + "archery_ticket_price": "0", + "id": "13898", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "10464249", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13899", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weapon_interface": "5", + "render_anim": "1426", + "attack_audios": "2500,2500,2517,2500", + "name": "Vesta's longsword" + }, + { + "destroy_message": "Drop", + "requirements": "{0,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "10464249", + "durability": null, + "name": "Vesta's longsword", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13900" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "10464249", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13901", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "true", + "weapon_interface": "5", + "render_anim": "1426", + "attack_audios": "2500,2500,2517,2500", + "name": "Vesta's longsword (deg)" + }, + { + "turn90cw_anim": "821", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "destroy_message": "Drop, Destroy once it has been degraded.", + "grand_exchange_price": "7424450", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13902", + "stand_turn_anim": "823", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,114,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weapon_interface": "10", + "attack_audios": "2504,0,0,0", + "name": "Statius's warhammer" + }, + { + "destroy_message": "Drop, Destroy once it has been degraded.", + "requirements": "{0,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "7424450", + "durability": null, + "name": "Statius's warhammer", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13903" + }, + { + "turn90cw_anim": "821", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "destroy_message": "Drop, Destroy once it has been degraded.", + "grand_exchange_price": "7424450", + "stand_anim": "808", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13904", + "stand_turn_anim": "823", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,114,0,0,0", + "shop_price": "300000", + "durability": null, + "destroy": "true", + "weapon_interface": "10", + "render_anim": "1426", + "attack_audios": "2504,0,0,0", + "name": "Statius' warhammer (deg)" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "5264612", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13905", + "stand_turn_anim": "1209", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,122,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weight": "4.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Vesta's spear" + }, + { + "requirements": "{0,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "two_handed": "true", + "destroy_message": "Drop", + "grand_exchange_price": "5264612", + "name": "Vesta's spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13906" + }, + { + "requirements": "{0,78}", + "shop_price": "180000", + "examine": "This item degrades in combat, and will turn to dust.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "5264612", + "name": "Vesta's spear (deg)", + "archery_ticket_price": "0", + "id": "13907", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,122,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1897306", + "name": "Corrupt statius's platebody", + "archery_ticket_price": "0", + "id": "13908", + "bonuses": "5,5,7,-10,-30,154,145,121,-6,157,60,5,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1897306", + "durability": null, + "name": "Corrupt statius's platebody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13909" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1897306", + "name": "Corrupt statius's platebody (deg)", + "archery_ticket_price": "0", + "id": "13910", + "bonuses": "5,5,7,-10,-30,154,145,121,-6,157,60,5,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "2546175", + "name": "Corrupt vesta's chainbody", + "archery_ticket_price": "0", + "id": "13911", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "2546175", + "durability": null, + "name": "Corrupt vesta's chainbody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13912" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "2546175", + "name": "Corrupt vesta's chainbody (deg)", + "archery_ticket_price": "0", + "id": "13913", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1734527", + "name": "Corrupt statius's platelegs", + "archery_ticket_price": "0", + "id": "13914", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1734527", + "durability": null, + "name": "Corrupt statius's platelegs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13915" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1734527", + "name": "Corrupt statius's platelegs (deg)", + "archery_ticket_price": "0", + "id": "13916", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1942627", + "name": "Corrupt vesta's plateskirt", + "archery_ticket_price": "0", + "id": "13917", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1942627", + "durability": null, + "name": "Corrupt vesta's plateskirt", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13918" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1942627", + "name": "Corrupt vesta's plateskirt (deg)", + "archery_ticket_price": "0", + "id": "13919", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1062835", + "name": "Corrupt statius's full helm", + "archery_ticket_price": "0", + "id": "13920", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1062835", + "durability": null, + "name": "Corrupt statius's full helm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13921" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1062835", + "name": "Corrupt statius' full helm (deg)", + "archery_ticket_price": "0", + "id": "13922", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "turn90cw_anim": "1207", + "examine": "This item degrades while worn, and will turn to dust.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "3739998", + "name": "Corrupt vesta's longsword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13923", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "turn90cw_anim": "1207", + "examine": "This item degrades while worn, and will turn to dust.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "render_anim": "1426", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "3739998", + "name": "Corrupt vesta's longsword", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13924", + "stand_turn_anim": "823" + }, + { + "requirements": "{0,78}", + "shop_price": "75000", + "turn90cw_anim": "1207", + "examine": "This item degrades while worn, and will turn to dust.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "render_anim": "1426", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "3739998", + "name": "C. vesta's longsword (deg)", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13925", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "3033516", + "attack_audios": "395,395,395,395", + "name": "Corrupt statius's warhammer", + "archery_ticket_price": "0", + "id": "13926", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,114,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "3033516", + "durability": null, + "name": "Corrupt statius's warhammer", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13927" + }, + { + "requirements": "{0,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "8", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "3033516", + "name": "C. statius's warhammer (deg)", + "archery_ticket_price": "0", + "id": "13928", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "343474", + "name": "Corrupt vesta's spear", + "archery_ticket_price": "0", + "id": "13929", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,0,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "destroy_message": "Drop", + "grand_exchange_price": "343474", + "name": "Corrupt vesta's spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13930" + }, + { + "requirements": "{0,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "343474", + "name": "Corrupt vesta's spear (deg)", + "archery_ticket_price": "0", + "id": "13931", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "253230", + "name": "Corrupt zuriel's robe top", + "archery_ticket_price": "0", + "id": "13932", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "253230", + "durability": null, + "name": "Corrupt zuriel's robe top", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13933" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "253230", + "name": "Corrupt zuriel's robe top (deg)", + "archery_ticket_price": "0", + "id": "13934", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "121290", + "name": "Corrupt zuriel's robe bottom", + "archery_ticket_price": "0", + "id": "13935", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "121290", + "durability": null, + "name": "Corrupt zuriel's robe bottom", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13936" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "121290", + "name": "Corrupt zuriel's robe bottom (deg)", + "archery_ticket_price": "0", + "id": "13937", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "43778", + "name": "Corrupt zuriel's hood", + "archery_ticket_price": "0", + "id": "13938", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "43778", + "durability": null, + "name": "Corrupt zuriel's hood", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13939" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "43778", + "name": "Corrupt zuriel's hood (deg)", + "archery_ticket_price": "0", + "id": "13940", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "requirements": "{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2555,0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "219418", + "attack_audios": "2555,0,0,0", + "name": "Corrupt zuriel's staff", + "archery_ticket_price": "0", + "id": "13941", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10" + }, + { + "destroy_message": "Drop", + "requirements": "{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "219418", + "durability": null, + "name": "Corrupt zuriel's staff", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13942" + }, + { + "requirements": "{6,78}", + "shop_price": "70000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "219418", + "name": "Corrupt zuriel's staff (deg)", + "archery_ticket_price": "0", + "id": "13943", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "387212", + "name": "Corrupt morrigan's leather body", + "archery_ticket_price": "0", + "id": "13944", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "387212", + "durability": null, + "name": "Corrupt morrigan's leather body", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13945" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "387212", + "name": "Corrupt morrigan's leather body (deg)", + "archery_ticket_price": "0", + "id": "13946", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "84592", + "name": "Corrupt morrigan's leather chaps", + "archery_ticket_price": "0", + "id": "13947", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "84592", + "durability": null, + "name": "Corrupt morrigan's leather chaps", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13948" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "84592", + "name": "Corrupt morrigan's leather chaps (deg)", + "archery_ticket_price": "0", + "id": "13949", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "63502", + "name": "Corrupt morrigan's coif", + "archery_ticket_price": "0", + "id": "13950", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "63502", + "durability": null, + "name": "Corrupt morrigan's coif", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13951" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "63502", + "name": "Corrupt morrigan's coif (deg)", + "archery_ticket_price": "0", + "id": "13952", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "requirements": "{4,78}", + "shop_price": "1000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "Corrupt morrigan's javelin", + "archery_ticket_price": "0", + "id": "13953", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "C. morrigan's javelin (p)", + "archery_ticket_price": "0", + "id": "13954", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "C. morrigan's javelin (p+)", + "archery_ticket_price": "0", + "id": "13955", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "C. morrigan's javelin (p++)", + "archery_ticket_price": "0", + "id": "13956", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "1000", + "examine": "A vicious throwing axe.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "5388", + "name": "C. morrigan's throwing axe", + "archery_ticket_price": "0", + "id": "13957", + "bonuses": "0,0,0,0,93,0,0,0,0,0,0,0,0,0,117" + }, + { + "requirements": "{0,78}-{4,78}", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "168278", + "name": "Corrupt dragon chainbody", + "archery_ticket_price": "0", + "id": "13958", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "168278", + "durability": null, + "name": "Corrupt dragon chainbody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13959" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "168278", + "name": "Corrupt dragon chainbody (deg)", + "archery_ticket_price": "0", + "id": "13960", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "2,0,4", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "121835", + "name": "Corrupt dragon med helm", + "archery_ticket_price": "0", + "id": "13961", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "121835", + "durability": null, + "name": "Corrupt dragon med helm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13962" + }, + { + "remove_head": "true", + "shop_price": "36000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "2,0,4", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "121835", + "name": "Corrupt dragon med helm (deg)", + "archery_ticket_price": "0", + "id": "13963", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "5,0,11", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "79703", + "name": "Corrupt dragon sq shield", + "archery_ticket_price": "0", + "id": "13964", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "79703", + "durability": null, + "name": "Corrupt dragon sq shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13965" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "5,0,11", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "79703", + "name": "Corrupt dragon sq shield (deg)", + "archery_ticket_price": "0", + "id": "13966", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Destroy", + "grand_exchange_price": "71066", + "name": "Corrupt dragon plateskirt", + "archery_ticket_price": "0", + "id": "13967", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "destroy_message": "Destroy", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "71066", + "durability": null, + "name": "Corrupt dragon plateskirt", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13968" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Destroy", + "grand_exchange_price": "71066", + "name": "Corrupt dragon plateskirt (deg)", + "archery_ticket_price": "0", + "id": "13969", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "87957", + "name": "Corrupt dragon platelegs", + "archery_ticket_price": "0", + "id": "13970", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "87957", + "durability": null, + "name": "Corrupt dragon platelegs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13971" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "87957", + "name": "Corrupt dragon platelegs (deg)", + "archery_ticket_price": "0", + "id": "13972", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "destroy_message": "Drop", + "grand_exchange_price": "332229", + "attack_audios": "2498,2498,2497,2498", + "name": "Corrupt dragon battleaxe", + "archery_ticket_price": "0", + "id": "13973", + "bonuses": "-2,70,65,0,0,0,0,0,-1,-1,0,85,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "4", + "render_anim": "2586", + "defence_anim": "397", + "attack_anims": "395,395,401,395", + "destroy_message": "Drop", + "grand_exchange_price": "332229", + "attack_audios": "2498,2498,2497,2498", + "name": "Corrupt dragon battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13974", + "bonuses": "-2,70,65,0,0,0,0,0,0,-1,0,85,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "destroy_message": "Drop", + "grand_exchange_price": "332229", + "attack_audios": "2498,2498,2497,2498", + "name": "C. dragon battleaxe (deg)", + "archery_ticket_price": "0", + "id": "13975", + "bonuses": "-2,70,65,0,0,0,0,0,-1,-1,0,85,0,0,0" + }, + { + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "grand_exchange_price": "33358", + "attack_audios": "2517,2517,2500,2517", + "name": "Corrupt dragon dagger", + "archery_ticket_price": "0", + "id": "13976", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "grand_exchange_price": "33358", + "attack_audios": "2517,2517,2500,2517", + "name": "Corrupt dragon dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13977" + }, + { + "shop_price": "18000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "grand_exchange_price": "33358", + "attack_audios": "2517,2517,2500,2517", + "name": "C. dragon dagger (deg)", + "archery_ticket_price": "0", + "id": "13978", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "100000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1928", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "338644", + "attack_audios": "2500,0,2517,0", + "name": "Corrupt dragon scimitar", + "archery_ticket_price": "0", + "id": "13979", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "338644", + "durability": null, + "name": "Corrupt dragon scimitar", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13980" + }, + { + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1928", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "338644", + "name": "C. dragon scimitar (deg)", + "archery_ticket_price": "0", + "id": "13981", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "100000", + "ge_buy_limit": "10", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "207053", + "attack_audios": "2500,2500,2517,2500", + "name": "Corrupt dragon longsword", + "archery_ticket_price": "0", + "id": "13982", + "bonuses": "58,69,-2,0,0,0,3,2,1,0,0,71,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "207053", + "durability": null, + "name": "Corrupt dragon longsword", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13983" + }, + { + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "207053", + "name": "C. dragon longsword (deg)", + "archery_ticket_price": "0", + "id": "13984", + "bonuses": "58,69,-2,0,0,0,3,2,1,0,0,71,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "50096", + "name": "Corrupt dragon mace", + "archery_ticket_price": "0", + "id": "13985", + "bonuses": "40,-2,60,1,0,0,0,0,0,0,0,55,0,5,0" + }, + { + "requirements": "{0,60}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "4", + "defence_anim": "397", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "50096", + "name": "Corrupt dragon mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13986" + }, + { + "requirements": "{0,60}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "50096", + "name": "Corrupt dragon mace (deg)", + "archery_ticket_price": "0", + "id": "13987", + "bonuses": "40,-2,60,1,0,0,0,0,0,0,0,55,0,5,0" + }, + { + "shop_price": "40000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "920922", + "name": "Corrupt dragon spear", + "archery_ticket_price": "0", + "id": "13988", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "40000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "920922", + "name": "Corrupt dragon spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13989" + }, + { + "shop_price": "24000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "920922", + "name": "Corrupt dragon spear (deg)", + "archery_ticket_price": "0", + "id": "13990", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "destroy_message": "You can get another copy by searching bookshelves around RuneScape.", + "shop_price": "5", + "examine": "A book about the Wilderness.", + "durability": null, + "name": "Pvp worlds manual", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14056", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "25", + "examine": "A threat to dusty corners everywhere.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "8", + "absorb": "0,0,0", + "render_anim": "1072", + "equipment_slot": "3", + "destroy_message": "You can obtain another by talking to Maggie the witch.", + "name": "Broomstick", + "archery_ticket_price": "0", + "id": "14057", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the goulash, it will be destroyed. You can get some more by dipping a bowl into Maggie's cauldron.", + "shop_price": "2", + "examine": "What a curious and ghoulish smell!", + "durability": null, + "name": "Goulash", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14058", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another flask of magic unguent from the chest in Betty's basement.", + "shop_price": "2", + "examine": "Purple and pungent.", + "durability": null, + "name": "Magic unguent", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14061", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another flask of broom ointment from Hetty in Rimmington.", + "shop_price": "2", + "examine": "To be used on brooms.", + "durability": null, + "name": "Broom ointment", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14062", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you release this newt, you can get another from the crate in Hetty's basement in Rimmington.", + "shop_price": "5", + "examine": "A newt from Hetty's basement.", + "durability": null, + "name": "Newt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14064", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another newt label from Gus in Hetty's basement in Rimmington.", + "shop_price": "1", + "examine": "A label for a shipping crate.", + "durability": null, + "name": "Newt label", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14065", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another toad label from Gus in Hetty's basement in Rimmington.", + "shop_price": "1", + "examine": "A label for a shipping crate.", + "durability": null, + "name": "Toad label", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14066", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another newt-and-toad label from Gus in Hetty's basement in Rimmington.", + "shop_price": "1", + "examine": "A label for a shipping crate.", + "durability": null, + "name": "Newts and toads label", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14067", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can obtain another wand from the chest in Betty's basement.", + "shop_price": "15", + "examine": "Warm to the touch.", + "durability": null, + "name": "Betty's wand", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14068", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you destroy this item, you can get another from Lottie in Betty's basement.", + "shop_price": "2", + "examine": "What a view!", + "durability": null, + "name": "Magic slate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14069", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you release this creature, you will have to restart the puzzle in Betty's basement.", + "shop_price": "1", + "examine": "Desert dweller.", + "durability": null, + "name": "Reptile", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14070", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you release this creature, you will have to restart the puzzle in Betty's basement.", + "shop_price": "1", + "examine": "Bleak and beaky.", + "durability": null, + "name": "Blackbird", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14071", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "An annoying flappy thing.", + "durability": null, + "name": "Bat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14072", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "It's an extremely small brown spider, probably very poisonous.", + "durability": null, + "name": "Spider", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14073", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "A popular dwarven delicacy.", + "durability": null, + "name": "Rat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14074", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "durability": null, + "name": "Snail", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14075", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "15", + "examine": "The height of warlock fashion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You can get another warlock top from Diango in Draynor Village.", + "remove_sleeves": "true", + "name": "Warlock top", + "archery_ticket_price": "0", + "id": "14076", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another set of warlock legs from Diango in Draynor Village.", + "shop_price": "15", + "examine": "Tattered but trendy.", + "durability": null, + "name": "Warlock legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14077", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "15", + "examine": "The height of witchly fashion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You can get another witch top from Diango in Draynor.", + "remove_sleeves": "true", + "name": "Witch top", + "archery_ticket_price": "0", + "id": "14078", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another witch top from Diango in Draynor.", + "shop_price": "15", + "examine": "Tattered but trendy.", + "durability": null, + "name": "Witch skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14079", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another witch cloak from Diango in Draynor.", + "shop_price": "15", + "examine": "Ragged but rugged.", + "durability": null, + "name": "Witch cloak", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14080", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "destroy_message": "You can get another warlock cloak from Diango in Draynor Village.", + "shop_price": "15", + "examine": "Ragged but rugged.", + "durability": null, + "name": "Warlock cloak", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14081", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A sticky orb of popped corn.", + "durability": null, + "name": "Popcorn ball", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14082", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "Chocolatey goodness.", + "durability": null, + "name": "Chocolate drop", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14083", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "Sugary bliss.", + "durability": null, + "name": "Wrapped candy", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14084", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "An urgent communiqu?? revealing important information.", + "durability": null, + "name": "Armadyl communiqu?", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14085", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "15", + "examine": "The height of witchly fashion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You can get another witch top from Diango in Draynor.", + "remove_sleeves": "true", + "name": "Witch top", + "archery_ticket_price": "0", + "id": "14086", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another witch top from Diango in Draynor.", + "shop_price": "15", + "examine": "Tattered but trendy.", + "durability": null, + "name": "Witch skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14087", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another witch cloak from Diango in Draynor.", + "shop_price": "15", + "examine": "Ragged but rugged.", + "durability": null, + "name": "Witch cloak", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14088", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14089", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14090", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14091", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14092", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14093", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "43333", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Sacred clay platebody", + "archery_ticket_price": "0", + "id": "14094", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "42667", + "examine": "The sacred clay bottom has transformed into spiked, platemail legs.", + "durability": null, + "name": "Sacred clay platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14095", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "shop_price": "23467", + "examine": "The sacred clay hat has transformed into a spined helm.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "1,0,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Sacred clay helm", + "archery_ticket_price": "0", + "id": "14096", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "shop_price": "17066", + "examine": "The sacred clay weapon has transformed into a sharp scimitar.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay scimitar", + "archery_ticket_price": "0", + "id": "14097", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "This can turn into a variety of tools.", + "durability": null, + "name": "Volatile clay tool", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14098", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your volatile tool wants to mine some rocks.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Volatile clay pickaxe", + "archery_ticket_price": "0", + "id": "14099", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your volatile tool wants to cut some wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Volatile clay hatchet", + "archery_ticket_price": "0", + "id": "14100", + "bonuses": "-2,26,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to spear some big fish.", + "durability": null, + "name": "Volatile clay harpoon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14101", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "21333", + "examine": "Your volatile tool wants to catch some butterflies.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Volatile clay butterfly net", + "archery_ticket_price": "0", + "id": "14102", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to make some bows or arrows.", + "durability": null, + "name": "Volatile clay fletching knife", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14103", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to work metal or build furniture.", + "durability": null, + "name": "Volatile clay hammer", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14104", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to make some leather armour.", + "durability": null, + "name": "Volatile clay needle", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14105", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "This can turn into a variety of tools.", + "durability": null, + "name": "Proto-tool", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14106", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a pickaxe.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay pickaxe", + "archery_ticket_price": "0", + "id": "14107", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a hatchet.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay hatchet", + "archery_ticket_price": "0", + "id": "14108", + "bonuses": "-2,4,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a harpoon.", + "durability": null, + "name": "Sacred clay harpoon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14109", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "1", + "examine": "Your sacred clay tool has transformed into a butterfly net.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay butterfly net", + "archery_ticket_price": "0", + "id": "14110", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "The sacred clay has transformed into a knife.", + "durability": null, + "name": "Sacred clay fletching knife", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14111", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a hammer.", + "durability": null, + "name": "Sacred clay hammer", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14112", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "The sacred clay has transformed into a needle.", + "durability": null, + "name": "Sacred clay needle", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14113", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "43333", + "examine": "The sacred clay top has transformed into a heavy, magical robe.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Sacred clay robe top", + "archery_ticket_price": "0", + "id": "14114", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "42667", + "examine": "The sacred clay bottom has transformed into a heavy, magical robe.", + "durability": null, + "name": "Sacred clay robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14115", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "23467", + "examine": "The sacred clay hat has transformed into a wizard hat.", + "durability": null, + "name": "Sacred clay hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14116", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "17066", + "examine": "The sacred clay weapon has transformed into a magical staff.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay staff", + "archery_ticket_price": "0", + "id": "14117", + "bonuses": "10,-1,40,10,0,2,3,1,10,0,0,50,0,0,0" + }, + { + "shop_price": "43333", + "examine": "The sacred clay top has transformed into a leather body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Sacred clay body", + "archery_ticket_price": "0", + "id": "14118", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "42667", + "examine": "The sacred clay bottom has been transformed into a set of chaps.", + "durability": null, + "name": "Sacred clay chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14119", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "shop_price": "23467", + "examine": "The sacred clay hat has transformed into a coif.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,3,1", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Sacred clay coif", + "archery_ticket_price": "0", + "id": "14120", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,5,0,0,0,0" + }, + { + "shop_price": "17066", + "examine": "The sacred clay weapon has transformed into a bow.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay bow", + "archery_ticket_price": "0", + "id": "14121", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14122", + "bonuses": "10,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14123" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14124", + "bonuses": "15,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14125" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14126", + "bonuses": "20,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14127" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14128", + "bonuses": "25,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14129" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14130", + "bonuses": "30,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14131" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14132", + "bonuses": "0,10,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14133" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14134", + "bonuses": "0,15,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14135" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14136", + "bonuses": "0,20,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14137" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14138", + "bonuses": "0,25,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14139" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14140", + "bonuses": "0,30,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14141" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14142", + "bonuses": "10,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14143" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14144", + "bonuses": "15,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14145" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14146", + "bonuses": "20,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14147" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14148", + "bonuses": "25,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14149" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14150", + "bonuses": "30,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14151" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14152", + "bonuses": "0,0,10,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14153" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14154", + "bonuses": "0,0,15,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14155" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14156", + "bonuses": "0,0,20,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14157" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14158", + "bonuses": "0,0,25,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14159" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14160", + "bonuses": "0,0,30,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14161" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14162", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14163" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14164", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14165" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14166", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14167" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14168", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14169" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14170", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14171" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14172", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14173" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14174", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14175" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14176", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14177" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14178", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14179" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14180", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14181" + }, + { + "destroy_message": "Drop", + "shop_price": "15", + "examine": "Very low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14182", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "15", + "examine": "Very low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14183" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "Low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14184", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "Low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14185" + }, + { + "destroy_message": "Drop", + "shop_price": "45", + "examine": "Medium quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14186", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "45", + "examine": "Medium quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14187" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "High quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14188", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "High quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14189" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Very high quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14190", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Very high quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14191" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14192", + "bonuses": "0,0,0,0,55,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14193" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14194", + "bonuses": "0,0,0,0,90,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14195" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14196", + "bonuses": "0,0,0,0,135,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14197" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14198", + "bonuses": "0,0,0,0,180,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14199" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14200", + "bonuses": "0,0,0,0,225,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14201" + }, + { + "shop_price": "2", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14202", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,15" + }, + { + "shop_price": "4", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14203", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30" + }, + { + "shop_price": "6", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14204", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,45" + }, + { + "shop_price": "8", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14205", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60" + }, + { + "shop_price": "10", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14206", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75" + }, + { + "shop_price": "150", + "examine": "3 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14207", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "3 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14208" + }, + { + "shop_price": "120", + "examine": "4 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14210" + }, + { + "shop_price": "90", + "examine": "3 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14211", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14212" + }, + { + "shop_price": "60", + "examine": "2 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14213", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14214" + }, + { + "shop_price": "30", + "examine": "1 dose of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14215", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14216" + }, + { + "shop_price": "150", + "examine": "4 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14217", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "4 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14218" + }, + { + "shop_price": "120", + "examine": "4 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14219", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14220" + }, + { + "shop_price": "90", + "examine": "3 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14221", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14222" + }, + { + "shop_price": "60", + "examine": "2 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14223", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14224" + }, + { + "shop_price": "30", + "examine": "1 dose of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14225", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14226" + }, + { + "shop_price": "150", + "examine": "5 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14227", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14228" + }, + { + "shop_price": "120", + "examine": "4 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14229", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14230" + }, + { + "shop_price": "90", + "examine": "3 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14231", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14232" + }, + { + "shop_price": "60", + "examine": "2 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14233", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14234" + }, + { + "shop_price": "30", + "examine": "1 dose of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14235", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14236" + }, + { + "shop_price": "150", + "examine": "5 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14237", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14238" + }, + { + "shop_price": "120", + "examine": "4 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14239", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14240" + }, + { + "shop_price": "90", + "examine": "3 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14241", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14242" + }, + { + "shop_price": "60", + "examine": "2 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14243", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14244" + }, + { + "shop_price": "30", + "examine": "1 dose of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14245", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14246" + }, + { + "shop_price": "150", + "examine": "4 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14247", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14248" + }, + { + "shop_price": "120", + "examine": "4 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14249", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14250" + }, + { + "shop_price": "90", + "examine": "3 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14251", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14252" + }, + { + "shop_price": "60", + "examine": "2 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14253", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14254" + }, + { + "shop_price": "30", + "examine": "1 dose of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14255", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14256" + }, + { + "shop_price": "150", + "examine": "3 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14257", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "3 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14258" + }, + { + "shop_price": "120", + "examine": "4 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14259", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14260" + }, + { + "shop_price": "90", + "examine": "3 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14261", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14262" + }, + { + "shop_price": "60", + "examine": "2 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14263", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14264" + }, + { + "shop_price": "30", + "examine": "1 dose of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14265", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14266" + }, + { + "shop_price": "150", + "examine": "4 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14267", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14268" + }, + { + "shop_price": "120", + "examine": "4 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14269", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14270" + }, + { + "shop_price": "90", + "examine": "3 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14271", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14272" + }, + { + "shop_price": "60", + "examine": "2 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14273", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14274" + }, + { + "shop_price": "30", + "examine": "1 dose of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14275", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14276" + }, + { + "shop_price": "150", + "examine": "3 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14277", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "3 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14278" + }, + { + "shop_price": "120", + "examine": "4 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14279", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14280" + }, + { + "shop_price": "90", + "examine": "3 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14281", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14282" + }, + { + "shop_price": "60", + "examine": "2 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14283", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14284" + }, + { + "shop_price": "30", + "examine": "1 dose of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14285", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14286" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14287", + "bonuses": "0,55,0,0,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14288" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14289", + "bonuses": "0,90,0,0,0,0,0,0,0,0,0,30,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14290" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14291", + "bonuses": "0,145,0,0,0,0,0,0,0,0,0,45,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14292" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14293", + "bonuses": "0,180,0,0,0,0,0,0,0,0,0,60,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14294" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14295", + "bonuses": "0,225,0,0,0,0,0,0,0,0,0,75,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14296" + }, + { + "shop_price": "30", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14297", + "bonuses": "41,0,0,0,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14298" + }, + { + "shop_price": "60", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14299", + "bonuses": "68,0,0,0,0,0,0,0,0,0,0,30,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14300" + }, + { + "shop_price": "90", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14301", + "bonuses": "101,0,0,0,0,0,0,0,0,0,0,45,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14302" + }, + { + "shop_price": "120", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14303", + "bonuses": "135,0,0,0,0,0,0,0,0,0,0,60,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14304" + }, + { + "shop_price": "150", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14305", + "bonuses": "168,0,0,0,0,0,0,0,0,0,0,75,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14306" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14307", + "bonuses": "0,0,83,0,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14308" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14309", + "bonuses": "0,0,135,0,0,0,0,0,0,0,0,30,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14310" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14311", + "bonuses": "0,0,202,0,0,0,0,0,0,0,0,45,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14312" + }, + { + "shop_price": "120", + "examine": "The Sacred Clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14313", + "bonuses": "0,0,270,0,0,0,0,0,0,0,0,60,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The Sacred Clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14314" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14315", + "bonuses": "0,0,338,0,0,0,0,0,0,0,0,75,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14316" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14317", + "bonuses": "0,0,0,0,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe top (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14318" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14319", + "bonuses": "0,0,0,0,0,0,0,0,40,0,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14320" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14321", + "bonuses": "0,0,0,0,0,0,0,0,60,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14322" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14323", + "bonuses": "0,0,0,0,0,0,0,0,80,0,80,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14324" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14325", + "bonuses": "0,0,0,0,0,0,0,0,100,0,100,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14326" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14327", + "bonuses": "0,0,0,0,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14328" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14329", + "bonuses": "0,0,0,0,0,0,0,0,30,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14330" + }, + { + "shop_price": "90", + "examine": "The sacred clay transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14331", + "bonuses": "0,0,0,0,0,0,0,0,45,0,45,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14332" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14333", + "bonuses": "0,0,0,0,0,0,0,0,60,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14334" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14335", + "bonuses": "0,0,0,0,0,0,0,0,75,0,75,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14336" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14337", + "bonuses": "0,0,0,0,0,0,0,0,10,0,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14338" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14339", + "bonuses": "0,0,0,0,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14340" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14341", + "bonuses": "0,0,0,0,0,0,0,0,30,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14342" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14343", + "bonuses": "0,0,0,0,0,0,0,0,40,0,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14344" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14345", + "bonuses": "0,0,0,0,0,0,0,0,50,0,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14346" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14347", + "bonuses": "0,0,0,-30,-10,20,20,20,-10,10,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platebody (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14348" + }, + { + "shop_price": "60", + "examine": "The sacred clay transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14349", + "bonuses": "0,0,0,-30,-10,40,40,40,-10,20,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay transformed into a hard, metallic substance.", + "durability": null, + "name": "Platebody (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14350" + }, + { + "shop_price": "90", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14351", + "bonuses": "0,0,0,-30,-10,60,60,60,-10,30,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "name": "Platebody (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14352" + }, + { + "shop_price": "120", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14353", + "bonuses": "0,0,0,-30,-10,80,80,80,-10,40,80,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "name": "Platebody (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14354" + }, + { + "shop_price": "150", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14355", + "bonuses": "0,0,0,-30,-10,100,100,100,-10,50,100,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "name": "Platebody (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14356" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14357", + "bonuses": "0,0,0,-30,-10,15,15,15,-10,7,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14358" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14359", + "bonuses": "0,0,0,-30,-10,30,30,30,-10,15,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14360" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14361", + "bonuses": "0,0,0,-30,-10,45,45,45,-10,23,45,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14362" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14363", + "bonuses": "0,0,0,-30,-10,60,60,60,-10,30,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14364" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14365", + "bonuses": "0,0,0,-30,-10,75,75,75,-10,37,75,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14366" + }, + { + "remove_head": "true", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14367", + "bonuses": "0,0,0,-30,-10,10,10,10,-10,5,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14368" + }, + { + "remove_head": "true", + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14369", + "bonuses": "0,0,0,-30,-10,20,20,20,-10,10,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14370" + }, + { + "remove_head": "true", + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14371", + "bonuses": "0,0,0,-30,-10,30,30,30,-10,15,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14372" + }, + { + "remove_head": "true", + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14373", + "bonuses": "0,0,0,-30,-10,40,40,40,-10,20,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14374" + }, + { + "remove_head": "true", + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14375", + "bonuses": "0,0,0,-30,-10,50,50,50,-10,25,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14376" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14377", + "bonuses": "0,0,0,55,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "name": "Staff (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14378" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14379", + "bonuses": "0,0,0,90,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "name": "Staff (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14380" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14381", + "bonuses": "0,0,0,135,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "name": "Staff (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14382" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14383", + "bonuses": "0,0,0,180,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "name": "Staff (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14384" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14385", + "bonuses": "0,0,0,225,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "name": "Staff (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14386" + }, + { + "durability": null, + "name": "Cape", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14387", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Cape", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14389", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14391", + "bonuses": "0,0,0,0,0,10,10,10,10,20,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14392" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14393", + "bonuses": "0,0,0,0,0,20,20,20,20,40,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14394" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14395", + "bonuses": "0,0,0,0,0,30,30,30,30,60,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14396" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14397", + "bonuses": "0,0,0,0,0,40,40,40,40,80,80,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14398" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14399", + "bonuses": "0,0,0,0,0,50,50,50,50,100,100,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14400" + }, + { + "shop_price": "30", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14401", + "bonuses": "0,0,0,0,0,7,7,7,0,15,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14402" + }, + { + "shop_price": "60", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14403", + "bonuses": "0,0,0,0,0,15,15,15,0,30,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14404" + }, + { + "shop_price": "90", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14405", + "bonuses": "0,0,0,0,0,23,23,23,0,45,45,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14406" + }, + { + "shop_price": "120", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14407", + "bonuses": "0,0,0,0,0,30,30,30,0,60,60,0,0,1,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14408" + }, + { + "shop_price": "150", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14409", + "bonuses": "0,0,0,0,0,37,37,37,0,75,75,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14410" + }, + { + "remove_head": "true", + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14411", + "bonuses": "0,0,0,0,0,5,5,5,0,10,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14412" + }, + { + "remove_head": "true", + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14413", + "bonuses": "0,0,0,0,0,10,10,10,0,20,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14414" + }, + { + "remove_head": "true", + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14415", + "bonuses": "0,0,0,0,0,15,15,15,0,30,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14416" + }, + { + "remove_head": "true", + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14417", + "bonuses": "0,0,0,0,0,20,20,20,0,40,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14418" + }, + { + "remove_head": "true", + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14419", + "bonuses": "0,0,0,0,0,25,25,25,0,50,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14420" + }, + { + "shop_price": "30", + "durability": null, + "name": "Clay deposit scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14421", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14422", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14423" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14424", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14425" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14426", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14427" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14428", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14429" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14430", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14431" + }, + { + "durability": null, + "name": "Null sacred clay", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14432", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "5", + "examine": "A vine flower grown through magical means.", + "durability": null, + "name": "Vine flower", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14458", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You caught this broav west of the Hunting Expert's home. You can catch another one with a trap baited with mort Myre Fungus.", + "examine": "Its unconscious, poor thing.", + "durability": null, + "name": "Unconscious broav", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14459", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got these clothes from a washerman who lives near the Khazard battle arena.", + "shop_price": "10", + "examine": "Some dirty clothes that apparently belong to Movario.", + "durability": null, + "name": "Dirty laundry", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14460", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You found this basket in Movario's base.", + "examine": "A receptacle for rubbish.", + "durability": null, + "name": "Waste-paper basket", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14461", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this key attached to the bottom of the bin in Movario's base.", + "examine": "A superbly made key with a fine ruby inserted into it. (While Guthix Sleeps)", + "durability": null, + "name": "Ruby key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14462", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found these notes in Movario's basement.", + "examine": "A collection of notes made by an absent-minded fellow.", + "durability": null, + "name": "Notes on pressure", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14463", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found these notes loosely piled up on ", + "examine": "A loose-leaf collection of research notes, found on Movario's study desk.", + "durability": null, + "name": "Movario's notes (volume 1)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14464", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found these notes in Movario's bedchest, in his base of operations near the Khazard Battlefield.", + "examine": "A loose-leaf collection of research notes, found in Movario's bed chest.", + "durability": null, + "name": "Movario's notes (volume 2)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14465", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A 1kg weight.", + "durability": null, + "name": "Weight (1kg)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14466", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A 2kg weight.", + "durability": null, + "name": "Weight (2kg)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14467", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A 5kg weight.", + "durability": null, + "name": "Weight (5kg)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14468", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can find another under the bed on the top level of Movario's base", + "examine": "The loop half of a strange key.", + "durability": null, + "name": "Strange key loop", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14469", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can find another under the bed on the top level of Movario's base", + "examine": "The teeth half of a strange key.", + "durability": null, + "name": "Strange key teeth", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14470", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fused together two parts of a Dragonkin key which you obtained from Movario's base.", + "examine": "The completed dragonkin key.", + "durability": null, + "name": "Dragonkin key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14471", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "30000", + "examine": "A badly damaged lump of dragon metal.", + "durability": null, + "rare_item": "true", + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "955683", + "name": "Ruined dragon armour lump", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14472", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30000", + "examine": "A badly damaged lump of dragon metal.", + "grand_exchange_price": "955683", + "durability": null, + "name": "Ruined dragon armour lump", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14473" + }, + { + "shop_price": "30000", + "examine": "A badly damaged slice of dragon metal.", + "durability": null, + "rare_item": "true", + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "1761141", + "name": "Ruined dragon armour slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14474", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30000", + "examine": "A badly damaged slice of dragon metal.", + "grand_exchange_price": "1761141", + "durability": null, + "name": "Ruined dragon armour slice", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14475" + }, + { + "shop_price": "30000", + "examine": "A badly damaged shard of dragon metal.", + "durability": null, + "rare_item": "true", + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "1090493", + "name": "Ruined dragon armour shard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14476", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30000", + "examine": "A badly damaged shard of dragon metal.", + "grand_exchange_price": "1090493", + "durability": null, + "name": "Ruined dragon armour shard", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14477" + }, + { + "destroy_message": "Drop", + "examine": "A very powerful Smithing hammer.", + "durability": null, + "name": "Blast fusion hammer", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14478", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "requirements": "{1,60}", + "shop_price": "1760000", + "examine": "Provides excellent protection.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "4453643", + "name": "Dragon platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14479", + "bonuses": "0,0,0,-30,0,109,107,97,-6,106,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1760000", + "examine": "Provides excellent protection.", + "grand_exchange_price": "4453643", + "durability": null, + "name": "Dragon platebody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14480" + }, + { + "requirements": "{1,60}", + "examine": "Provides excellent protection.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "4453643", + "name": "Dragon platebody", + "archery_ticket_price": "0", + "id": "14481", + "bonuses": "0,0,0,-30,0,109,107,97,-6,106,50,0,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "67500", + "examine": "A set of fighting claws.", + "has_special": "true", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "absorb": "0,0,0", + "equip_audio": "1003", + "defence_anim": "397", + "render_anim": "2583", + "equipment_slot": "3", + "attack_anims": "393,393,1067,393", + "destroy_message": "Drop", + "lendable": "true", + "grand_exchange_price": "1472441", + "tradeable": "true", + "name": "Dragon claws", + "archery_ticket_price": "0", + "id": "14484", + "bonuses": "41,57,-4,0,0,13,26,7,0,0,0,56,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "67500", + "examine": "A set of fighting claws.", + "grand_exchange_price": "1472441", + "durability": null, + "name": "Dragon claws", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14485" + }, + { + "requirements": "{0,60}", + "examine": "A set of fighting claws.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "absorb": "0,0,0", + "equip_audio": "1003", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1472441", + "name": "Dragon claws", + "archery_ticket_price": "0", + "id": "14486", + "bonuses": "41,57,-4,0,0,13,26,7,0,0,0,56,0,0,0" + }, + { + "destroy_message": "You grew this herb by planting an enriched snapdragon seed in the special herb patch on top of Falador castle.", + "examine": "An enriched snapdragon herb.", + "durability": null, + "name": "Enriched snapdragon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14487", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You made this serum by mixing an enriched snapdragon into one of Betty's truth serums.", + "examine": "Fluid sloshes innocently in this vial.", + "durability": null, + "name": "Super truth serum", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14488", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You gained this item by having papyrus and charcoal in your inventory while interrogating a spy in Falador castle.", + "examine": "A sketch of the suspect known as Dark Squall.", + "durability": null, + "name": "Suspect sketch", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14489", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "shop_price": "65000", + "examine": "These look pretty heavy, but very elite.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "41559", + "name": "Elite black platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14490", + "bonuses": "0,0,0,-14,-6,52,50,25,-1,49,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "65000", + "examine": "These look pretty heavy, but very elite.", + "grand_exchange_price": "41559", + "durability": null, + "name": "Elite black platelegs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14491" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "examine": "Provides excellent protection, and is elite.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "38275", + "name": "Elite black platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14492", + "bonuses": "0,0,0,-20,-8,80,85,40,-2,80,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "64000", + "examine": "Provides excellent protection, and is elite.", + "grand_exchange_price": "38275", + "durability": null, + "name": "Elite black platebody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14493" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "35200", + "examine": "A full face helmet, and elite.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "30542", + "name": "Elite black full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14494", + "bonuses": "0,0,0,-4,-2,31,33,15,0,30,7,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "35200", + "examine": "A full face helmet, and elite.", + "grand_exchange_price": "30542", + "durability": null, + "name": "Elite black full helm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14495" + }, + { + "destroy_message": "You got this key from the key rack in Dark Squall's base.", + "examine": "Opens the cells beneath the Black Knights' Fortress. (While Guthix Sleeps)", + "durability": null, + "name": "Cell key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14496", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "examine": "A robe worn by members of the Dagon'hai.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "71098", + "name": "Dagon'hai robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14497", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,2,0" + }, + { + "shop_price": "120000", + "examine": "A robe worn by members of the Dagon'hai.", + "grand_exchange_price": "71098", + "durability": null, + "name": "Dagon'hai robe top", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14498" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "examine": "A hat worn by members of the Dagon'hai.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "1,0,0", + "equipment_slot": "0", + "grand_exchange_price": "9580", + "name": "Dagon'hai hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14499", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "shop_price": "15000", + "examine": "A hat worn by members of the Dagon'hai.", + "grand_exchange_price": "9580", + "durability": null, + "name": "Dagon'hai hat", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14500" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "examine": "A robe worn by members of the Dagon'hai.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "2,1,0", + "equipment_slot": "7", + "grand_exchange_price": "45691", + "name": "Dagon'hai robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14501", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,2,0" + }, + { + "shop_price": "80000", + "examine": "A robe worn by members of the Dagon'hai.", + "grand_exchange_price": "45691", + "durability": null, + "name": "Dagon'hai robe bottom", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14502" + }, + { + "shop_price": "1", + "examine": "Elite Black Knight armour adds to his stealthiness.", + "durability": null, + "name": "Silif", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14503", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "Elite Black Knight armour adds to his stealthiness.", + "durability": null, + "name": "Silif", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14504", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Teleorb", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14505", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "destroy_message": "You created this by focusing the light onto a snapdragon seed from a rose tinted lens while in Betty's shop.", + "examine": "An enriched snapdragon seed. The herb that grows from this seed will be extra potent!", + "durability": null, + "name": "Enriched snapdragon seed", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14506", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14507", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14508", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14509", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14510", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14511", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14512", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14513", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14514", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an air-orb on an etched wall section.", + "examine": "An elemental key of air.", + "durability": null, + "name": "Air key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14515", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an earth-orb on an etched wall section.", + "examine": "An elemental key of earth.", + "durability": null, + "name": "Earth key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14516", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of fire.", + "durability": null, + "name": "Fire key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14517", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of water.", + "durability": null, + "name": "Water key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14518", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an air-orb on an etched wall section.", + "examine": "An elemental key of air.", + "durability": null, + "name": "Air key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14519", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an earth-orb on an etched wall section.", + "examine": "An elemental key of earth.", + "durability": null, + "name": "Earth key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14520", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of fire.", + "durability": null, + "name": "Fire key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14521", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of water.", + "durability": null, + "name": "Water key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14522", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a hat, top and bottoms.", + "grand_exchange_price": "193541", + "durability": null, + "name": "Dagon'hai robes set", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14525", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a hat, top and bottoms.", + "grand_exchange_price": "193541", + "durability": null, + "name": "Dagon'hai robes set", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14526" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing an elite black full helm, platebody and legs.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,13", + "destroy_message": "Drop", + "grand_exchange_price": "140536", + "name": "Elite black armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14527", + "bonuses": "0,0,0,-38,-16,163,168,80,-3,159,62,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Grand Exchange set containing an elite black full helm, platebody and legs.", + "grand_exchange_price": "140536", + "durability": null, + "name": "Elite black armour set", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14528" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, legs.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "9,0,19", + "destroy_message": "Drop", + "grand_exchange_price": "10629814", + "name": "Dragon plate armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14529", + "bonuses": "0,0,0,-57,-9,222,221,201,-11,217,82,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, legs.", + "grand_exchange_price": "10629814", + "durability": null, + "name": "Dragon plate armour set (l)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14530" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, skirt.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "9,0,19", + "destroy_message": "Drop", + "grand_exchange_price": "12243786", + "name": "Dragon plate armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14531", + "bonuses": "0,0,0,-57,-9,222,221,201,-11,217,82,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, skirt.", + "grand_exchange_price": "12243786", + "durability": null, + "name": "Dragon plate armour set (sk)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14532" + }, + { + "durability": null, + "name": "Broav", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14533", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You gained this orb from Dark Squall's base. You can probably get another one from visiting the same place.", + "examine": "This orb can used to teleport people...somehow.", + "durability": null, + "name": "Strange teleorb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14534", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will not be able to get the book back if you destroy it.", + "examine": "Notes on the locations of turkeys.", + "durability": null, + "name": "Turkey book", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14536", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will lose all food stored in the Cornucopia. You can get another empty one from Diango in Draynor Village.", + "durability": null, + "name": "Cornucopia", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14537", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will lose all food stored in the Cornucopia. You can get another empty one from Diango in Draynor Village.", + "durability": null, + "name": "Cornucopia", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14538", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "9", + "durability": null, + "name": "Raw turkey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14539", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "4", + "examine": "Mmm, this looks tasty.", + "durability": null, + "name": "Cooked turkey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14540", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "durability": null, + "name": "Burnt turkey", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14541", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "9", + "examine": "I need to cook this first.", + "durability": null, + "name": "Raw turkey drumstick", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14542", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "4", + "examine": "Mmm, this looks tasty.", + "durability": null, + "name": "Cooked turkey drumstick", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14543", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "durability": null, + "name": "Burnt turkey drumstick", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14544", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will lose all food stored in the Cornucopia. You can get another empty one from Diango in Draynor Village.", + "durability": null, + "name": "Cornucopia", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14570", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Not-so-sturdy boots for northern winters.", + "durability": null, + "name": "Fremennik sea boots 1", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14571", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,2,3,4,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You can claim replacement Fremennik sea boots from Yrsa in Rellekka.", + "examine": "Sturdy boots for northern winters.", + "durability": null, + "name": "Fremennik sea boots 2", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14572", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,8,9,10,0,0,8,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Very sturdy boots for northern winters.", + "durability": null, + "name": "Fremennik sea boots 3", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14573", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,10,11,12,0,0,9,1,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14574", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14575", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14576", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will be able to get a replacement shield from Redbeard the Pirate in Port Sarim.", + "shop_price": "100", + "examine": "A buckler shield from Falador.", + "durability": null, + "name": "Falador shield 1", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14577", + "absorb": "0,0,0", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,3,0,0", + "equipment_slot": "5" + }, + { + "destroy_message": "You will be able to get a replacement shield from the chemist in Rimmington.", + "shop_price": "200", + "examine": "A kiteshield from Falador.", + "durability": null, + "name": "Falador shield 2", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14578", + "absorb": "0,0,0", + "bonuses": "0,0,0,-8,-2,18,22,20,-1,20,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "destroy_message": "You will be able to get a replacement shield from Sir Vyvin's squire in the White Knights' Castle.", + "shop_price": "300", + "examine": "A tower shield from Falador.", + "durability": null, + "name": "Falador shield 3", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14579", + "absorb": "0,0,0", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,7,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "1000", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14580", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "5000", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14581", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10000", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14582", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Harvest (turns to ", + "examine": "A white lily seed - plant in a flower patch.", + "durability": null, + "name": "White lily", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14583", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will not be able to replace this voucher - it is a one-time offer only!", + "shop_price": "500000", + "examine": "I can take this to the Herald to get my money crest back for free.", + "durability": null, + "name": "Money crest voucher", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14584", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1250", + "examine": "A white lily seed - plant in a flower patch.", + "durability": null, + "name": "White lily seed", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14589", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1000", + "examine": "This will teleport me to Rellekka when I play it. ", + "durability": null, + "name": "Enchanted lyre(5)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14590", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Drop", + "shop_price": "1000", + "examine": "This will teleport me to Rellekka when I play it. ", + "durability": null, + "name": "Enchanted lyre(6)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14591", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These look pretty heavy, but very elite.", + "grand_exchange_price": "41559", + "durability": null, + "name": "Elite black platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14592", + "absorb": "2,0,4", + "bonuses": "0,0,0,-14,-6,52,50,25,-1,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides excellent protection, and is elite.", + "grand_exchange_price": "38275", + "durability": null, + "name": "Elite black platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14593", + "absorb": "3,0,6", + "bonuses": "0,0,0,-20,-8,80,85,40,-2,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A full face helmet, and elite.", + "grand_exchange_price": "30542", + "durability": null, + "name": "Elite black full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14594", + "absorb": "1,0,3", + "bonuses": "0,0,0,-4,-2,31,33,15,0,30,7,0,0,0,0" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "remove_sleeves": "true", + "examine": "A red and jolly top.", + "durability": null, + "name": "Santa costume top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14595", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "A spikey amulet made of ice crystals. It has been enchanted so it will not melt.", + "durability": null, + "name": "Ice amulet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14596", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "destroy_message": "You can probably get more in the last room of the yeti cave, in the Land of Snow.", + "shop_price": "1", + "durability": null, + "name": "Stones", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14597", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will have to fetch more in the last room of the yeti cave, then get them enchanted by snow imps.", + "shop_price": "1", + "examine": "According to the snow imps, this is enchanted, frozen yeti dung.", + "durability": null, + "name": "Enchanted stones", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14598", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A spikey amulet made of ice crystals. It has been enchanted so it will not melt.", + "durability": null, + "name": "Ice amulet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14599", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "remove_sleeves": "true", + "examine": "A red and jolly top.", + "durability": null, + "name": "Santa costume top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14600", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "remove_sleeves": "true", + "examine": "A red and jolly top.", + "durability": null, + "name": "Santa costume top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14601", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You can get another pair from Diango in Draynor Village.", + "examine": "Some black and jolly gloves.", + "durability": null, + "name": "Santa costume gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14602", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "Some red and jolly legs.", + "durability": null, + "name": "Santa costume legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14603", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "Some red and jolly legs.", + "durability": null, + "name": "Santa costume legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14604", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another pair from Diango in Draynor Village.", + "examine": "Some black and jolly boots.", + "durability": null, + "name": "Santa costume boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14605", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a cinnamon tree.", + "durability": null, + "name": "Cinnamon twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14606", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a sassafras tree.", + "durability": null, + "name": "Sassafras twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14607", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a ailanthus tree.", + "durability": null, + "name": "Ailanthus twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14608", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a cedar tree.", + "durability": null, + "name": "Cedar twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14609", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a mastic tree.", + "durability": null, + "name": "Mastic twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14610", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Cinnamon twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Cinnamon weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14611", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Sassafras twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Sassafras weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14612", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Ailanthus twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Ailanthus weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14613", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Cedar twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Cedar weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14614", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Mastic twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Mastic weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14615", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "100", + "examine": "A feather from a phoenix. Used in Summoning (72).", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "3431", + "name": "Phoenix quill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14616", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A feather from a phoenix. Used in Summoning (72).", + "grand_exchange_price": "3431", + "durability": null, + "name": "Phoenix quill", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14617" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14620", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14621" + }, + { + "requirements": "{23,72}", + "shop_price": "498", + "examine": "A scroll for a phoenix familiar.", + "durability": null, + "name": "Rise from the ashes scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14622", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "4986", + "durability": null, + "name": "Phoenix pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14623", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "4986", + "durability": null, + "name": "Phoenix pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14624" + }, + { + "durability": null, + "name": "Pouch", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14625", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A baby phoenix and it's bad to the bone!", + "durability": null, + "name": "Phoenix eggling", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14626", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A baby phoenix and it's bad to the bone!", + "durability": null, + "name": "Phoenix eggling", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14627", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "I found this egg in the Phoenix's Lair, and clapped at it!", + "durability": null, + "name": "Phoenix egg", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14629", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "I found this egg in the Phoenix's Lair, and kicked it!", + "durability": null, + "name": "Cracked phoenix egg", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14630", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "A player can get a new one by talking to any seer around Seer's village.", + "examine": "A headband with an eye embroidered on it.", + "durability": null, + "name": "Seer's headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14631", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "turn90cw_anim": "821", + "examine": "This used to belong to King Arthur and has since been improved.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "You can retrieve the Enhanced Excalibur from the Lady of the Lake for 500 coins.", + "stand_anim": "808", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "14632", + "stand_turn_anim": "823", + "bonuses": "38,47,-2,0,0,0,3,2,1,0,0,45,0,0,0", + "requirements": "{0,30}", + "shop_price": "200", + "durability": null, + "destroy": "true", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Enhanced excalibur" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14633", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14634", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14635", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "650", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Slayer helmet (e)", + "archery_ticket_price": "0", + "id": "14636", + "bonuses": "0,0,0,0,0,30,32,27,0,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "650", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Slayer helmet (charged)", + "archery_ticket_price": "0", + "id": "14637", + "bonuses": "0,0,0,0,0,30,32,27,0,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "It can be charged at the Fountain of Rune.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14638", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "It can be charged at the Fountain of Rune.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14639" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with one teleport charge.", + "grand_exchange_price": "27000", + "durability": null, + "name": "Ring of wealth(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14640", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with one teleport charge.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14641" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with two teleport charges.", + "grand_exchange_price": "28000", + "durability": null, + "name": "Ring of wealth(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14642", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with two teleport charges.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14643" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with three teleport charges.", + "grand_exchange_price": "30000", + "durability": null, + "name": "Ring of wealth(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14644", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with three teleport charges.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14645" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with four teleport charges.", + "grand_exchange_price": "35000", + "durability": null, + "name": "Ring of wealth(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14646", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with four teleport charges.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14647" + }, + { + "shop_price": "0", + "ge_buy_limit": "0", + "examine": "A totally alive monkey friend for your back!", + "durability": null, + "destroy": "true", + "weight": "0.0", + "equipment_slot": "1", + "grand_exchange_price": "0", + "name": "Jangles the Monkey Backpack", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "14648", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "0", + "examine": "A ring for only the truest of cave goblins. And Logg too.", + "grand_exchange_price": "0", + "durability": null, + "name": "Zanik ring", + "tradeable": "false", + "archery_ticket_price": "0", + "destroy": "true", + "id": "14649", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "0", + "examine": "A standard issue wizard hat.", + "durability": null, + "weight": "0.1", + "destroy": "true", + "equipment_slot": "0", + "grand_exchange_price": "0", + "name": "Wizard hat", + "tradeable": "false", + "archery_ticket_price": "0", + "hat": "true", + "id": "14650", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0" + }, + { + "destroy_message": " WARNING: You will have to reobtain this item the hard way.", + "examine": "Mysterious blueprints written in an alien language.", + "durability": null, + "name": "Ancient Blueprints", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "14651" + }, + { + "destroy_message": "You can get another by bringing the materials along with the blueprint to a Star Sprite.", + "examine": "A stardust-infused dragonstone ring.", + "durability": null, + "name": "Ring of the Star Sprite", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "14652", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "examine": "A chunk of rock.", + "name": "Rock", + "id": "1480" + }, + { + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A staff with a spooky raven head attached.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Staff of the raven", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "14654", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A staff with a spooky raven head attached.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Staff of the raven", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "14655", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A staff with a spooky raven head attached.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Staff of the raven", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "14656", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Item container for C. Ele Minor Drop Table. You should not be able to obtain this item.", + "name": "C. Ele Minor Drop Table", + "id": "799" + }, + { + "examine": "This will unlock something. (Waterfall Quest)", + "name": "A key", + "tradeable": "false", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "293" + }, + { + "examine": "This will unlock something. (Waterfall dungeon)", + "name": "A key", + "tradeable": "false", + "archery_ticket_price": "0", + "weight": "0.01", + "id": "298" + }, + { + "examine": "You should not have this.", + "name": "USDT Slot", + "id": "14422" + }, + { + "examine": "You should not have this.", + "name": "HDT Slot", + "id": "14424" + }, + { + "examine": "You should not have this.", + "name": "GDT Slot", + "id": "14426" + }, + { + "examine": "You should not have this.", + "name": "RSDT Slot", + "id": "14428" + }, + { + "examine": "You should not have this.", + "name": "ASDT Slot", + "id": "14430" + } +] \ No newline at end of file diff --git a/client/plugins/HolidayLoginMusic/plugin.properties b/client/plugins/HolidayLoginMusic/plugin.properties new file mode 100644 index 0000000..d412a40 --- /dev/null +++ b/client/plugins/HolidayLoginMusic/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Zerken' +DESCRIPTION='Plays specific music during holidays and skill release anniversaries at the login screen.' +VERSION=1.0 \ No newline at end of file diff --git a/client/plugins/IdentifyClueScrolls/plugin.properties b/client/plugins/IdentifyClueScrolls/plugin.properties new file mode 100644 index 0000000..78957dc --- /dev/null +++ b/client/plugins/IdentifyClueScrolls/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='bushtail' +DESCRIPTION='Identify clue scrolls easily' +VERSION=1.0 \ No newline at end of file diff --git a/client/plugins/InterfaceDebugPlugin/plugin.properties b/client/plugins/InterfaceDebugPlugin/plugin.properties new file mode 100644 index 0000000..365c76b --- /dev/null +++ b/client/plugins/InterfaceDebugPlugin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Aids in identifying interface components/varps/model IDs.' +VERSION=1.2 \ No newline at end of file diff --git a/client/plugins/KondoKit/plugin.properties b/client/plugins/KondoKit/plugin.properties new file mode 100644 index 0000000..629c117 --- /dev/null +++ b/client/plugins/KondoKit/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='downthecrop' +DESCRIPTION='A plugin that adds a right-side panel with custom widgets and navigation.' +VERSION=2.0 \ No newline at end of file diff --git a/client/plugins/KondoKit/res/item_configs.json b/client/plugins/KondoKit/res/item_configs.json new file mode 100644 index 0000000..c1bff50 --- /dev/null +++ b/client/plugins/KondoKit/res/item_configs.json @@ -0,0 +1,130818 @@ +[ + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "The body of a Dwarf savaged by Goblins.", + "durability": null, + "name": "Dwarf remains", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "two_handed": "true", + "id": "0" + }, + { + "destroy_message": "I got this from Captain Lawgof.", + "shop_price": "1", + "examine": "Good for repairing a broken cannon.", + "durability": null, + "name": "Toolkit", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "Ammo for the Dwarf Cannon.", + "grand_exchange_price": "381", + "durability": null, + "name": "Cannonball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2" + }, + { + "shop_price": "1", + "examine": "Construction notes for Dwarf cannon ammo.", + "durability": null, + "name": "Nulodion's notes", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "3" + }, + { + "requirements": "{13,35}", + "shop_price": "5", + "examine": "Used to make cannon ammunition.", + "name": "Ammo mould", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "4" + }, + { + "shop_price": "20", + "examine": "An old note book.", + "durability": null, + "name": "Instruction manual", + "weight": "0.51", + "archery_ticket_price": "0", + "id": "5" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "The cannon is built on this.", + "grand_exchange_price": "189000", + "durability": null, + "name": "Cannon base", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "6" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "189000", + "durability": null, + "name": "Cannon base", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "The mounting for the multicannon.", + "grand_exchange_price": "185000", + "durability": null, + "name": "Cannon stand", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "8" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "185000", + "durability": null, + "name": "Cannon stand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "The barrels for the multicannon.", + "grand_exchange_price": "187000", + "durability": null, + "name": "Cannon barrels", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "10" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "187000", + "durability": null, + "name": "Cannon barrels", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "This powers the multicannon.", + "grand_exchange_price": "175200", + "durability": null, + "name": "Cannon furnace", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "12" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "175200", + "durability": null, + "name": "Cannon furnace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13" + }, + { + "shop_price": "1", + "examine": "A metal railing replacement.", + "durability": null, + "name": "Railing", + "archery_ticket_price": "0", + "id": "14" + }, + { + "examine": "A cloth given to me by Sir Galahad.", + "durability": null, + "name": "Holy table napkin", + "archery_ticket_price": "0", + "id": "15" + }, + { + "examine": "A small tin whistle.", + "durability": null, + "name": "Magic whistle", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "16" + }, + { + "examine": "I wonder what happens when I ring it?", + "durability": null, + "name": "Grail bell", + "archery_ticket_price": "0", + "id": "17" + }, + { + "examine": "It will point the way for me.", + "durability": null, + "name": "Magic gold feather", + "archery_ticket_price": "0", + "id": "18" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "White cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "20" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "Black cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "21" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "Blue cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "22" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "Red cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "23" + }, + { + "examine": "Doesn't look very tasty.", + "durability": null, + "name": "Rat poison", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "24" + }, + { + "examine": "Wormy.", + "durability": null, + "name": "Red vine worm", + "archery_ticket_price": "0", + "id": "25" + }, + { + "examine": "Hemenster fishing contest trophy.", + "durability": null, + "name": "Fishing trophy", + "archery_ticket_price": "0", + "id": "26" + }, + { + "examine": "Pass to the Hemenster fishing contest.", + "durability": null, + "name": "Fishing pass", + "archery_ticket_price": "0", + "id": "27" + }, + { + "shop_price": "121", + "examine": "Drives away all known 6 legged creatures.", + "durability": null, + "name": "Insect repellent", + "archery_ticket_price": "0", + "id": "28" + }, + { + "examine": "It's a bucket of wax.", + "durability": null, + "name": "Bucket of wax", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "30" + }, + { + "examine": "You shouldn't have this.", + "name": "RDT Slot", + "id": "31" + }, + { + "shop_price": "3", + "examine": "A spooky candle.", + "durability": null, + "name": "Lit black candle", + "archery_ticket_price": "0", + "id": "32" + }, + { + "shop_price": "24", + "examine": "A candle.", + "grand_exchange_price": "104", + "durability": null, + "name": "Lit candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "33" + }, + { + "shop_price": "24", + "examine": "A candle.", + "grand_exchange_price": "104", + "durability": null, + "name": "Lit candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "34" + }, + { + "shop_price": "200", + "examine": "This used to belong to King Arthur.", + "has_special": "true", + "durability": null, + "weight": "2.2", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "attack_audios": "2500,2500,2517,2500", + "name": "Excalibur", + "archery_ticket_price": "0", + "id": "35", + "bonuses": "20,29,-2,0,0,0,3,2,1,0,0,25,0,0,0" + }, + { + "shop_price": "24", + "ge_buy_limit": "100", + "examine": "A candle.", + "grand_exchange_price": "119", + "durability": null, + "name": "Candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "36" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "119", + "durability": null, + "name": "Candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "37" + }, + { + "shop_price": "3", + "examine": "A spooky candle.", + "durability": null, + "name": "Black candle", + "archery_ticket_price": "0", + "id": "38" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "16", + "durability": null, + "name": "Bronze arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "39" + }, + { + "shop_price": "26", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "23", + "durability": null, + "name": "Iron arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "40" + }, + { + "shop_price": "36", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "63", + "durability": null, + "name": "Steel arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "41" + }, + { + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "74", + "durability": null, + "name": "Mithril arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "42" + }, + { + "shop_price": "160", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "185", + "durability": null, + "name": "Adamant arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "43" + }, + { + "shop_price": "460", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "839", + "durability": null, + "name": "Rune arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "44" + }, + { + "ge_buy_limit": "10000", + "examine": "Opal bolt tips.", + "grand_exchange_price": "1", + "durability": null, + "name": "Opal bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "45" + }, + { + "ge_buy_limit": "10000", + "examine": "Pearl bolt tips.", + "grand_exchange_price": "5", + "durability": null, + "name": "Pearl bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "46" + }, + { + "shop_price": "114", + "ge_buy_limit": "10000", + "examine": "I can make bolts with these.", + "grand_exchange_price": "44", + "durability": null, + "name": "Barb bolttips", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "5", + "id": "47" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung longbow; I need a bowstring for this.", + "grand_exchange_price": "14", + "durability": null, + "name": "Longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "48" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "14", + "durability": null, + "name": "Longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "49" + }, + { + "ge_buy_limit": "10000", + "examine": "I need to find a string for this.", + "grand_exchange_price": "5", + "durability": null, + "name": "Shortbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "50" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5", + "durability": null, + "name": "Shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "51" + }, + { + "ge_buy_limit": "20000", + "examine": "A wooden arrow shaft", + "grand_exchange_price": "21", + "durability": null, + "name": "Arrow shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "52" + }, + { + "ge_buy_limit": "20000", + "examine": "A wooden arrow shaft with flights attached.", + "grand_exchange_price": "56", + "durability": null, + "name": "Headless arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "53" + }, + { + "shop_price": "50", + "ge_buy_limit": "10000", + "examine": "An unstrung oak bow; I need a bowstring for this.", + "grand_exchange_price": "7", + "durability": null, + "name": "Oak shortbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "54" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7", + "durability": null, + "name": "Oak shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "55" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung oak longbow; I need a bowstring for this.", + "grand_exchange_price": "20", + "durability": null, + "name": "Oak longbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "56" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "20", + "durability": null, + "name": "Oak longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "57" + }, + { + "shop_price": "64", + "ge_buy_limit": "10000", + "examine": "An unstrung willow longbow; I need a bowstring for this.", + "grand_exchange_price": "46", + "durability": null, + "name": "Willow longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "58" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "46", + "durability": null, + "name": "Willow longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "59" + }, + { + "shop_price": "16", + "ge_buy_limit": "10000", + "examine": "An unstrung willow shortbow; I need a bowstring for this.", + "grand_exchange_price": "20", + "durability": null, + "name": "Willow shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "60" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "20", + "durability": null, + "name": "Willow shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "61" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung maple bow; I need a bowstring for this.", + "grand_exchange_price": "94", + "durability": null, + "name": "Maple longbow (u)", + "tradeable": "true", + "weight": "1.2", + "archery_ticket_price": "0", + "id": "62" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "94", + "durability": null, + "name": "Maple longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "63" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung maple bow; I need a bowstring for this.", + "grand_exchange_price": "56", + "durability": null, + "name": "Maple shortbow (u)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "64" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "56", + "durability": null, + "name": "Maple shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "65" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung yew longbow; I need a bowstring for this.", + "grand_exchange_price": "468", + "durability": null, + "name": "Yew longbow (u)", + "tradeable": "true", + "weight": "1.32", + "archery_ticket_price": "0", + "id": "66" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "468", + "durability": null, + "name": "Yew longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "67" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung yew shortbow; I need a bowstring for this.", + "grand_exchange_price": "158", + "durability": null, + "name": "Yew shortbow (u)", + "tradeable": "true", + "weight": "1.32", + "archery_ticket_price": "0", + "id": "68" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "158", + "durability": null, + "name": "Yew shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "69" + }, + { + "shop_price": "931", + "ge_buy_limit": "10000", + "examine": "An unstrung magic longbow; I need a bowstring for this.", + "grand_exchange_price": "1246", + "durability": null, + "name": "Magic longbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "70" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1246", + "durability": null, + "name": "Magic longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "71" + }, + { + "shop_price": "890", + "ge_buy_limit": "10000", + "examine": "An unstrung magic shortbow; I need a bowstring for this.", + "grand_exchange_price": "745", + "durability": null, + "name": "Magic shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "72" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "745", + "durability": null, + "name": "Magic shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "73" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "A helmet, as worn by the minions of General Khazard.", + "durability": null, + "weight": "2.7", + "destroy": "true", + "equipment_slot": "0", + "destroy_message": "I can borrow another from the armoury near the Fight Arena.", + "name": "Khazard helmet", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "74", + "bonuses": "0,0,0,0,0,4,5,3,0,0,0,0,0,0,0" + }, + { + "shop_price": "12", + "examine": "Armour, as worn by the minions of General Khazard.", + "durability": null, + "weight": "0.5", + "destroy": "true", + "equipment_slot": "4", + "destroy_message": "I can borrow another from the armoury near the Fight Arena.", + "remove_sleeves": "true", + "name": "Khazard armour", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "75", + "bonuses": "0,0,0,0,0,9,11,10,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The lazy guard probably has a spare set...", + "examine": "These keys open the cells at the Khazard Fight Arena. (Fight Arena)", + "durability": null, + "name": "Khazard cell keys", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "76" + }, + { + "destroy_message": "Angor, the Khazard barman, has a stock of Khali brew.", + "shop_price": "5", + "examine": "A bottle of Khazard's worst brew.", + "durability": null, + "name": "Khali brew", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "77" + }, + { + "destroy_message": "Can only be fired from yew, magic, dark or twisted bows.", + "shop_price": "2", + "examine": "Can only be fired from yew, magic, or dark bows.", + "durability": null, + "name": "Ice arrows", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "78", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "The power in this staff causes it to vibrate gently.", + "durability": null, + "name": "Staff of armadyl", + "tradeable": "false", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "84", + "render_anim": "2553" + }, + { + "examine": "It catches the light! (Temple of Ikov)", + "durability": null, + "name": "Shiny key", + "archery_ticket_price": "0", + "id": "85" + }, + { + "examine": "An amulet made by Lucien.", + "durability": null, + "name": "Pendant of lucien", + "archery_ticket_price": "0", + "id": "86", + "equipment_slot": "2" + }, + { + "examine": "Yet another amulet.", + "durability": null, + "name": "Armadyl pendant", + "archery_ticket_price": "0", + "id": "87", + "equipment_slot": "2" + }, + { + "examine": "Magic boots that make you lighter than normal.", + "durability": null, + "name": "Boots of lightness", + "weight": "-4.5", + "archery_ticket_price": "0", + "id": "88", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Magic boots that make you lighter than normal.", + "durability": null, + "name": "Boots of lightness", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "89", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "It's very soft!", + "durability": null, + "name": "Child's blanket", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "90" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this guam potion.", + "grand_exchange_price": "285", + "durability": null, + "name": "Guam potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "91" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "285", + "durability": null, + "name": "Guam potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "92" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this marrentill potion.", + "grand_exchange_price": "43", + "durability": null, + "name": "Marrentill potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "93" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43", + "durability": null, + "name": "Marrentill potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "94" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this tarromin potion.", + "grand_exchange_price": "287", + "durability": null, + "name": "Tarromin potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "95" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "287", + "durability": null, + "name": "Tarromin potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "96" + }, + { + "shop_price": "64", + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this potion.", + "grand_exchange_price": "435", + "durability": null, + "name": "Harralander potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "97" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "435", + "durability": null, + "name": "Harralander potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "98" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this ranarr potion.", + "grand_exchange_price": "4823", + "durability": null, + "name": "Ranarr potion(unf)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "99" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4823", + "durability": null, + "name": "Ranarr potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "100" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this irit potion.", + "grand_exchange_price": "2243", + "durability": null, + "name": "Irit potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "101" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2243", + "durability": null, + "name": "Irit potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "102" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this avantoe potion.", + "grand_exchange_price": "3831", + "durability": null, + "name": "Avantoe potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "103" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3831", + "durability": null, + "name": "Avantoe potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "104" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this kwuarm potion.", + "grand_exchange_price": "1833", + "durability": null, + "name": "Kwuarm potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "105" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1833", + "durability": null, + "name": "Kwuarm potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "106" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this cadantine potion.", + "grand_exchange_price": "1844", + "durability": null, + "name": "Cadantine potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "107" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1844", + "durability": null, + "name": "Cadantine potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "108" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this dwarf weed potion.", + "grand_exchange_price": "6740", + "durability": null, + "name": "Dwarf weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "109" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6740", + "durability": null, + "name": "Dwarf weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "110" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this torstol potion.", + "grand_exchange_price": "14500", + "durability": null, + "name": "Torstol potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "111" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14500", + "durability": null, + "name": "Torstol potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "112" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "4 doses of Strength potion.", + "grand_exchange_price": "1041", + "durability": null, + "name": "Strength potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "113" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1041", + "durability": null, + "name": "Strength potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "114" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "3 doses of Strength potion.", + "grand_exchange_price": "812", + "durability": null, + "name": "Strength potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "115" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "812", + "durability": null, + "name": "Strength potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "116" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "2 doses of Strength potion.", + "grand_exchange_price": "656", + "durability": null, + "name": "Strength potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "117" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "656", + "durability": null, + "name": "Strength potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "118" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "1 dose of Strength potion.", + "grand_exchange_price": "355", + "durability": null, + "name": "Strength potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "119" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "355", + "durability": null, + "name": "Strength potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "120" + }, + { + "shop_price": "560", + "ge_buy_limit": "100", + "examine": "3 doses of Attack potion.", + "grand_exchange_price": "195", + "durability": null, + "name": "Attack potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "121" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Attack potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "122" + }, + { + "shop_price": "560", + "ge_buy_limit": "100", + "examine": "2 doses of Attack potion.", + "grand_exchange_price": "113", + "durability": null, + "name": "Attack potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "123" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "113", + "durability": null, + "name": "Attack potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "124" + }, + { + "shop_price": "560", + "ge_buy_limit": "100", + "examine": "1 dose of Attack potion.", + "grand_exchange_price": "197", + "durability": null, + "name": "Attack potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "125" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "197", + "durability": null, + "name": "Attack potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "126" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "3 doses of restore potion.", + "grand_exchange_price": "59", + "durability": null, + "name": "Restore potion(3)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "127" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "59", + "durability": null, + "name": "Restore potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "128" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "2 doses of restore potion.", + "grand_exchange_price": "35", + "durability": null, + "name": "Restore potion(2)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "129" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35", + "durability": null, + "name": "Restore potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "130" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "1 dose of restore potion.", + "grand_exchange_price": "21", + "durability": null, + "name": "Restore potion(1)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "131" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Restore potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "132" + }, + { + "shop_price": "114", + "ge_buy_limit": "100", + "examine": "3 doses of Defence Potion.", + "grand_exchange_price": "323", + "durability": null, + "name": "Defence potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "133" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "323", + "durability": null, + "name": "Defence potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "134" + }, + { + "shop_price": "114", + "ge_buy_limit": "100", + "examine": "2 doses of Defence Potion.", + "grand_exchange_price": "247", + "durability": null, + "name": "Defence potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "135" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "247", + "durability": null, + "name": "Defence potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "136" + }, + { + "shop_price": "114", + "ge_buy_limit": "100", + "examine": "1 dose of Defence Potion.", + "grand_exchange_price": "148", + "durability": null, + "name": "Defence potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "137" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "148", + "durability": null, + "name": "Defence potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "138" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Prayer restore potion.", + "grand_exchange_price": "4134", + "durability": null, + "name": "Prayer potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "139" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4134", + "durability": null, + "name": "Prayer potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "140" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Prayer restore potion.", + "grand_exchange_price": "2868", + "durability": null, + "name": "Prayer potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "141" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2868", + "durability": null, + "name": "Prayer potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "142" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Prayer restore potion.", + "grand_exchange_price": "1353", + "durability": null, + "name": "Prayer potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "143" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1353", + "durability": null, + "name": "Prayer potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "144" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super Attack potion.", + "grand_exchange_price": "691", + "durability": null, + "name": "Super attack(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "145" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "691", + "durability": null, + "name": "Super attack(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "146" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super Attack potion.", + "grand_exchange_price": "451", + "durability": null, + "name": "Super attack(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "147" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "451", + "durability": null, + "name": "Super attack(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "148" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super Attack potion.", + "grand_exchange_price": "243", + "durability": null, + "name": "Super attack(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "149" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "243", + "durability": null, + "name": "Super attack(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "150" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Fishing potion.", + "grand_exchange_price": "40", + "durability": null, + "name": "Fishing potion(3)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "151" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40", + "durability": null, + "name": "Fishing potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "152" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Fishing potion.", + "grand_exchange_price": "56", + "durability": null, + "name": "Fishing potion(2)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "153" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Fishing potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "154" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Fishing potion.", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing potion(1)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "155" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "156" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super Strength potion.", + "grand_exchange_price": "1679", + "durability": null, + "name": "Super strength(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "157" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1679", + "durability": null, + "name": "Super strength(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "158" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super Strength potion.", + "grand_exchange_price": "1164", + "durability": null, + "name": "Super strength(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "159" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1164", + "durability": null, + "name": "Super strength(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "160" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super Strength potion.", + "grand_exchange_price": "603", + "durability": null, + "name": "Super strength(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "161" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "603", + "durability": null, + "name": "Super strength(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "162" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super Defence potion.", + "grand_exchange_price": "113", + "durability": null, + "name": "Super defence(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "163" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "113", + "durability": null, + "name": "Super defence(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "164" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super Defence potion.", + "grand_exchange_price": "65", + "durability": null, + "name": "Super defence(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "165" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "65", + "durability": null, + "name": "Super defence(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "166" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super Defence potion.", + "grand_exchange_price": "41", + "durability": null, + "name": "Super defence(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "167" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "41", + "durability": null, + "name": "Super defence(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "168" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of ranging potion.", + "grand_exchange_price": "6224", + "durability": null, + "name": "Ranging potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "169" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "6224", + "durability": null, + "name": "Ranging potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "170" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of ranging potion.", + "grand_exchange_price": "4330", + "durability": null, + "name": "Ranging potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "171" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4330", + "durability": null, + "name": "Ranging potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "172" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of ranging potion.", + "grand_exchange_price": "2068", + "durability": null, + "name": "Ranging potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "173" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2068", + "durability": null, + "name": "Ranging potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "174" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "3 doses of antipoison potion.", + "grand_exchange_price": "1239", + "durability": null, + "name": "Antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "175" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1239", + "durability": null, + "name": "Antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "176" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "2 doses of antipoison potion.", + "grand_exchange_price": "822", + "durability": null, + "name": "Antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "177" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "822", + "durability": null, + "name": "Antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "178" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "1 dose of antipoison potion.", + "grand_exchange_price": "460", + "durability": null, + "name": "Antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "179" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "460", + "durability": null, + "name": "Antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "180" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super anti poison potion.", + "grand_exchange_price": "872", + "durability": null, + "name": "Super antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "181" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "872", + "durability": null, + "name": "Super antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "182" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super anti poison potion.", + "grand_exchange_price": "509", + "durability": null, + "name": "Super antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "183" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "509", + "durability": null, + "name": "Super antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "184" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super anti poison potion.", + "grand_exchange_price": "366", + "durability": null, + "name": "Super antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "185" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "durability": null, + "name": "Super antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "186" + }, + { + "ge_buy_limit": "1000", + "examine": "For use on daggers and projectiles.", + "grand_exchange_price": "33", + "durability": null, + "name": "Weapon poison", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "187" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "33", + "durability": null, + "name": "Weapon poison", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "188" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of Zamorak brew.", + "grand_exchange_price": "1818", + "durability": null, + "name": "Zamorak brew(3)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "189" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1818", + "durability": null, + "name": "Zamorak brew(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "190" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of Zamorak brew.", + "grand_exchange_price": "1004", + "durability": null, + "name": "Zamorak brew(2)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "191" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1004", + "durability": null, + "name": "Zamorak brew(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "192" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of Zamorak brew.", + "grand_exchange_price": "1175", + "durability": null, + "name": "Zamorak brew(1)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "193" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1175", + "durability": null, + "name": "Zamorak brew(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "194" + }, + { + "ge_buy_limit": "100", + "examine": "This is meant to be good for spots.", + "grand_exchange_price": "117", + "durability": null, + "name": "Potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "195" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "117", + "durability": null, + "name": "Potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "196" + }, + { + "shop_price": "39", + "ge_buy_limit": "100", + "examine": "Stankers gives out these strange cocktails for free.", + "grand_exchange_price": "124", + "durability": null, + "name": "Poison chalice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "197" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124", + "durability": null, + "name": "Poison chalice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "198" + }, + { + "requirements": "{3,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "150", + "durability": null, + "name": "Grimy guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "199" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "155", + "durability": null, + "name": "Grimy guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "200" + }, + { + "requirements": "{5,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "150", + "durability": null, + "name": "Grimy marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "201" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "26", + "durability": null, + "name": "Grimy marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "202" + }, + { + "requirements": "{11,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "150", + "durability": null, + "name": "Grimy tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "203" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "151", + "durability": null, + "name": "Grimy tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "204" + }, + { + "requirements": "{20,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "300", + "durability": null, + "name": "Grimy harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "205" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "275", + "durability": null, + "name": "Grimy harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "206" + }, + { + "requirements": "{15,25}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Grimy ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "207" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4909", + "durability": null, + "name": "Grimy ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "208" + }, + { + "requirements": "{15,40}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "209" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2034", + "durability": null, + "name": "Grimy irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "210" + }, + { + "requirements": "{15,48}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "500", + "durability": null, + "name": "Grimy avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "211" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3789", + "durability": null, + "name": "Grimy avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "212" + }, + { + "requirements": "{15,54}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "213" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1665", + "durability": null, + "name": "Grimy kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "214" + }, + { + "requirements": "{15,65}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "215" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1582", + "durability": null, + "name": "Grimy cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "216" + }, + { + "requirements": "{15,70}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Grimy dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "217" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6934", + "durability": null, + "name": "Grimy dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "218" + }, + { + "requirements": "{15,75}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "3200", + "durability": null, + "name": "Grimy torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "219" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "35800", + "durability": null, + "name": "Grimy torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "220" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "It seems to be looking at me.", + "grand_exchange_price": "27", + "durability": null, + "name": "Eye of newt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "221" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "27", + "durability": null, + "name": "Eye of newt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "222" + }, + { + "ge_buy_limit": "10000", + "examine": "Ewww!", + "grand_exchange_price": "888", + "durability": null, + "name": "Red spiders' eggs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "223" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "888", + "durability": null, + "name": "Red spiders' eggs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "224" + }, + { + "ge_buy_limit": "10000", + "examine": "The root of a limpwurt plant.", + "grand_exchange_price": "1984", + "durability": null, + "name": "Limpwurt root", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "225" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1984", + "durability": null, + "name": "Limpwurt root", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "226" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "A glass vial containing water.", + "grand_exchange_price": "35", + "durability": null, + "name": "Vial of water", + "tradeable": "true", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "227" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "35", + "durability": null, + "name": "Vial of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "228" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "An empty glass vial.", + "grand_exchange_price": "2", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "229" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "230" + }, + { + "shop_price": "67", + "ge_buy_limit": "10000", + "examine": "Strange spiky grass.", + "grand_exchange_price": "318", + "durability": null, + "name": "Snape grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "231" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "318", + "durability": null, + "name": "Snape grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "232" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "I can grind things for potions in this.", + "grand_exchange_price": "38", + "durability": null, + "name": "Pestle and mortar", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "233" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "38", + "durability": null, + "name": "Pestle and mortar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "234" + }, + { + "ge_buy_limit": "10000", + "examine": "Finely ground horn of Unicorn.", + "grand_exchange_price": "2460", + "durability": null, + "name": "Unicorn horn dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "235" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2460", + "durability": null, + "name": "Unicorn horn dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "236" + }, + { + "ge_buy_limit": "10000", + "examine": "This horn has restorative properties.", + "grand_exchange_price": "2481", + "durability": null, + "name": "Unicorn horn", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "237" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2481", + "durability": null, + "name": "Unicorn horn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "238" + }, + { + "ge_buy_limit": "10000", + "examine": "Sour berries, used in potions.", + "grand_exchange_price": "1438", + "durability": null, + "name": "White berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "239" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1438", + "durability": null, + "name": "White berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "240" + }, + { + "ge_buy_limit": "10000", + "examine": "Finely ground scale of Dragon.", + "grand_exchange_price": "1336", + "durability": null, + "name": "Dragon scale dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "241" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1336", + "durability": null, + "name": "Dragon scale dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "242" + }, + { + "ge_buy_limit": "10000", + "examine": "A large shiny scale.", + "grand_exchange_price": "1244", + "durability": null, + "name": "Blue dragon scale", + "tradeable": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "243" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1244", + "durability": null, + "name": "Blue dragon scale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "244" + }, + { + "ge_buy_limit": "10000", + "examine": "An evil wine that is often found in chaos temples.", + "grand_exchange_price": "2768", + "durability": null, + "name": "Wine of zamorak", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "245" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2768", + "durability": null, + "name": "Wine of zamorak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "246" + }, + { + "ge_buy_limit": "10000", + "examine": "They don't look very ripe.", + "grand_exchange_price": "83", + "durability": null, + "name": "Jangerberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "247" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "83", + "durability": null, + "name": "Jangerberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "248" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "182", + "durability": null, + "name": "Clean guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "249" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "182", + "durability": null, + "name": "Clean guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "250" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "23", + "durability": null, + "name": "Clean marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "251" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "23", + "durability": null, + "name": "Clean marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "252" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "144", + "durability": null, + "name": "Clean tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "253" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "144", + "durability": null, + "name": "Clean tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "254" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "275", + "durability": null, + "name": "Clean harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "255" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "275", + "durability": null, + "name": "Clean harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "256" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "4930", + "durability": null, + "name": "Clean ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "257" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4930", + "durability": null, + "name": "Clean ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "258" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "2072", + "durability": null, + "name": "Clean irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "259" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2072", + "durability": null, + "name": "Clean irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "260" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "3812", + "durability": null, + "name": "Clean avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "261" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3812", + "durability": null, + "name": "Clean avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "262" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "1641", + "durability": null, + "name": "Clean kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "263" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1641", + "durability": null, + "name": "Clean kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "264" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "1585", + "durability": null, + "name": "Clean cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "265" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1585", + "durability": null, + "name": "Clean cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "266" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "6925", + "durability": null, + "name": "Clean dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "267" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6925", + "durability": null, + "name": "Clean dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "268" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "8400", + "durability": null, + "name": "Clean torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "269" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "35900", + "durability": null, + "name": "Clean torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "270" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It looks like part of a machine", + "durability": null, + "name": "Pressure gauge", + "archery_ticket_price": "0", + "id": "271" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box of fish food / Keeps your pet fish strong and healthy.", + "durability": null, + "name": "Fish food", + "archery_ticket_price": "0", + "id": "272", + "equipment_slot": "5" + }, + { + "destroy_message": "You'll have to make more in Draynor Manor.", + "examine": "This isn't good for fish.", + "durability": null, + "name": "Poisoned fish food", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "274" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Key", + "archery_ticket_price": "0", + "id": "275" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's slightly charred.", + "durability": null, + "name": "Rubber tube", + "archery_ticket_price": "0", + "id": "276" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's pretty full.", + "durability": null, + "name": "Oil can", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "277" + }, + { + "examine": "A sharp cattleprod.", + "durability": null, + "name": "Cattleprod", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "278", + "weapon_interface": "5", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0", + "equipment_slot": "3" + }, + { + "examine": "Councillor Halgrive gave me this to kill some sheep.", + "durability": null, + "name": "Sheep feed", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "279" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (1)", + "archery_ticket_price": "0", + "id": "280" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (2)", + "archery_ticket_price": "0", + "id": "281" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (3)", + "archery_ticket_price": "0", + "id": "282" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (4)", + "archery_ticket_price": "0", + "id": "283" + }, + { + "remove_sleeves": "true", + "examine": "This should protect me from the plague, I hope!", + "durability": null, + "name": "Plague jacket", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "284", + "equipment_slot": "4" + }, + { + "examine": "A thick pair of leather trousers. or These should protect me from the plague, I hope!", + "durability": null, + "name": "Plague trousers", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "285", + "equipment_slot": "7" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Orange goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "286", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Blue goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "287", + "equipment_slot": "4" + }, + { + "shop_price": "16", + "ge_buy_limit": "100", + "examine": "Armour designed to fit goblins.", + "grand_exchange_price": "398", + "durability": null, + "name": "Goblin mail", + "tradeable": "true", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "288", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "398", + "durability": null, + "name": "Goblin mail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "289" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This contains some vital research results.", + "durability": null, + "name": "Research package", + "weight": "1", + "archery_ticket_price": "0", + "id": "290" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Notes", + "archery_ticket_price": "0", + "id": "291" + }, + { + "examine": "A book on elven history in northern RuneScape.", + "durability": null, + "name": "Book on baxtorian", + "archery_ticket_price": "0", + "id": "292" + }, + { + "examine": "A small pebble with elven inscription.", + "durability": null, + "name": "Glarial's pebble", + "archery_ticket_price": "0", + "id": "294" + }, + { + "examine": "A bright green gem set in a necklace.", + "durability": null, + "name": "Glarial's amulet", + "archery_ticket_price": "0", + "id": "295", + "equipment_slot": "2" + }, + { + "examine": "An urn containing Glarial's ashes./An empty urn made for Glarial's ashes.", + "durability": null, + "name": "Glarial's urn", + "archery_ticket_price": "0", + "id": "296" + }, + { + "examine": "An urn containing Glarial's ashes./An empty urn made for Glarial's ashes.", + "durability": null, + "name": "Glarial's urn", + "archery_ticket_price": "0", + "id": "297" + }, + { + "shop_price": "300", + "ge_buy_limit": "5000", + "examine": "Magical seeds in a mithril case.", + "grand_exchange_price": "623", + "durability": null, + "name": "Mithril seeds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "299" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A bit of rat.", + "durability": null, + "name": "Rat's tail", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "300" + }, + { + "requirements": "{10,40}", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Useful for catching lobsters.", + "grand_exchange_price": "100", + "durability": null, + "name": "Lobster pot", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "301" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "100", + "durability": null, + "name": "Lobster pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "302" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "Useful for catching small fish.", + "grand_exchange_price": "397", + "durability": null, + "name": "Small fishing net", + "tradeable": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "303" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "397", + "durability": null, + "name": "Small fishing net", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "304" + }, + { + "requirements": "{16,10}", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Useful for catching lots of fish.", + "grand_exchange_price": "329", + "durability": null, + "name": "Big fishing net", + "tradeable": "true", + "weight": "8.1", + "archery_ticket_price": "0", + "id": "305" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "329", + "durability": null, + "name": "Big fishing net", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "306" + }, + { + "requirements": "{5,10}", + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Useful for catching sardine or herring.", + "grand_exchange_price": "74", + "durability": null, + "name": "Fishing rod", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "307" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Fishing rod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "308" + }, + { + "requirements": "{20,10}", + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Useful for catching salmon or trout.In Daemonhiem: Just add feathers.", + "grand_exchange_price": "123", + "durability": null, + "name": "Fly fishing rod", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "309" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "123", + "durability": null, + "name": "Fly fishing rod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "310" + }, + { + "requirements": "{10,35}", + "shop_price": "45", + "ge_buy_limit": "5000", + "examine": "Useful for catching big fish.", + "grand_exchange_price": "235", + "durability": null, + "name": "Harpoon", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "311" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "235", + "durability": null, + "name": "Harpoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "312" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "For use with a fishing rod.", + "grand_exchange_price": "3", + "durability": null, + "name": "Fishing bait", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "313" + }, + { + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Used for fly fishing.", + "grand_exchange_price": "24", + "durability": null, + "name": "Feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "314" + }, + { + "ge_buy_limit": "10000", + "examine": "Some nicely cooked shrimp.", + "grand_exchange_price": "9", + "durability": null, + "name": "Shrimps", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "315" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "9", + "durability": null, + "name": "Shrimps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "316" + }, + { + "shop_price": "6", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "7", + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "317" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "7", + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "318" + }, + { + "ge_buy_limit": "10000", + "examine": "Some nicely cooked anchovies.", + "grand_exchange_price": "26", + "durability": null, + "name": "Anchovies", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "319" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "26", + "durability": null, + "name": "Anchovies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "320" + }, + { + "shop_price": "16", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "11", + "durability": null, + "name": "Raw anchovies", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "321" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "11", + "durability": null, + "name": "Raw anchovies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "322" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "324" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked Sardines.", + "grand_exchange_price": "12", + "durability": null, + "name": "Sardine", + "tradeable": "true", + "weight": "0.12", + "archery_ticket_price": "0", + "id": "325" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "12", + "durability": null, + "name": "Sardine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "326" + }, + { + "shop_price": "7", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "31", + "durability": null, + "name": "Raw sardine", + "tradeable": "true", + "weight": "0.12", + "archery_ticket_price": "0", + "id": "327" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "31", + "durability": null, + "name": "Raw sardine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "328" + }, + { + "shop_price": "88", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked salmon.", + "grand_exchange_price": "278", + "durability": null, + "name": "Salmon", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "329" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "278", + "durability": null, + "name": "Salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "330" + }, + { + "shop_price": "36", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "172", + "durability": null, + "name": "Raw salmon", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "331" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "172", + "durability": null, + "name": "Raw salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "332" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked trout.", + "grand_exchange_price": "172", + "durability": null, + "name": "Trout", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "333" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "172", + "durability": null, + "name": "Trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "334" + }, + { + "shop_price": "7", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "67", + "durability": null, + "name": "Raw trout", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "335" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "67", + "durability": null, + "name": "Raw trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "336" + }, + { + "examine": "Some nicely cooked giant carp.", + "durability": null, + "name": "Giant carp", + "archery_ticket_price": "0", + "id": "337" + }, + { + "examine": "I should try cooking this.", + "durability": null, + "name": "Raw giant carp", + "archery_ticket_price": "0", + "id": "338" + }, + { + "shop_price": "49", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked fish.", + "grand_exchange_price": "19", + "durability": null, + "name": "Cod", + "tradeable": "true", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "339" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "19", + "durability": null, + "name": "Cod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "340" + }, + { + "shop_price": "49", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "29", + "durability": null, + "name": "Raw cod", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "341" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "29", + "durability": null, + "name": "Raw cod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "342" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "344" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "63", + "durability": null, + "name": "Raw herring", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "345" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "63", + "durability": null, + "name": "Raw herring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "346" + }, + { + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked herring.", + "grand_exchange_price": "23", + "durability": null, + "name": "Herring", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "347" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "23", + "durability": null, + "name": "Herring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "348" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "72", + "durability": null, + "name": "Raw pike", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "349" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "72", + "durability": null, + "name": "Raw pike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "350" + }, + { + "ge_buy_limit": "10000", + "examine": "Some nicely cooked pike.", + "grand_exchange_price": "94", + "durability": null, + "name": "Pike", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "351" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "94", + "durability": null, + "name": "Pike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "352" + }, + { + "shop_price": "26", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw mackerel", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "353" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw mackerel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "354" + }, + { + "shop_price": "23", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked fish.", + "grand_exchange_price": "5", + "durability": null, + "name": "Mackerel", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "355" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5", + "durability": null, + "name": "Mackerel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "356" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "358" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "210", + "durability": null, + "name": "Raw tuna", + "tradeable": "true", + "weight": "0.379", + "archery_ticket_price": "0", + "id": "359" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "210", + "durability": null, + "name": "Raw tuna", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "360" + }, + { + "shop_price": "126", + "ge_buy_limit": "10000", + "examine": "Wow, this is a big fish.", + "grand_exchange_price": "281", + "durability": null, + "name": "Tuna", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "361" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "281", + "durability": null, + "name": "Tuna", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "362" + }, + { + "ge_buy_limit": "20000", + "examine": "Wow, this is a big fish.", + "grand_exchange_price": "490", + "durability": null, + "name": "Raw bass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "363" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "490", + "durability": null, + "name": "Raw bass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "364" + }, + { + "shop_price": "270", + "ge_buy_limit": "10000", + "examine": "Wow, this is a big fish.", + "grand_exchange_price": "330", + "durability": null, + "name": "Bass", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "365" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "330", + "durability": null, + "name": "Bass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "366" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "368" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "370" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "513", + "durability": null, + "name": "Raw swordfish", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "371" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "513", + "durability": null, + "name": "Raw swordfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "372" + }, + { + "shop_price": "400", + "ge_buy_limit": "10000", + "examine": "I'd better be careful eating this!", + "grand_exchange_price": "501", + "durability": null, + "name": "Swordfish", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "373" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "501", + "durability": null, + "name": "Swordfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "374" + }, + { + "durability": null, + "name": "Burnt swordfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "376" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "322", + "durability": null, + "name": "Raw lobster", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "377" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "322", + "durability": null, + "name": "Raw lobster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "378" + }, + { + "shop_price": "107", + "ge_buy_limit": "10000", + "examine": "This looks tricky to eat.", + "grand_exchange_price": "334", + "durability": null, + "name": "Lobster", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "379" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "334", + "durability": null, + "name": "Lobster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "380" + }, + { + "durability": null, + "name": "Burnt lobster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "382" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "1615", + "durability": null, + "name": "Raw shark", + "tradeable": "true", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "383" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "1615", + "durability": null, + "name": "Raw shark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "384" + }, + { + "ge_buy_limit": "10000", + "examine": "I'd better be careful eating this.", + "grand_exchange_price": "1682", + "durability": null, + "name": "Shark", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "385" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1682", + "durability": null, + "name": "Shark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "386" + }, + { + "durability": null, + "name": "Burnt shark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "388" + }, + { + "ge_buy_limit": "20000", + "examine": "Tastier when cooked.", + "grand_exchange_price": "2114", + "durability": null, + "name": "Raw manta ray", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "389" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "2114", + "durability": null, + "name": "Raw manta ray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "390" + }, + { + "ge_buy_limit": "10000", + "examine": "Mmmm...this looks tasty!", + "grand_exchange_price": "2552", + "durability": null, + "name": "Manta ray", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "391" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2552", + "durability": null, + "name": "Manta ray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "392" + }, + { + "durability": null, + "name": "Burnt manta ray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "394" + }, + { + "ge_buy_limit": "20000", + "examine": "Looks wrinkly.", + "grand_exchange_price": "2397", + "durability": null, + "name": "Raw sea turtle", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "395" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "2397", + "durability": null, + "name": "Raw sea turtle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "396" + }, + { + "ge_buy_limit": "10000", + "examine": "Tasty!", + "grand_exchange_price": "2486", + "durability": null, + "name": "Sea turtle", + "tradeable": "true", + "weight": "0.35", + "archery_ticket_price": "0", + "id": "397" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2486", + "durability": null, + "name": "Sea turtle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "398" + }, + { + "durability": null, + "name": "Burnt sea turtle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "400" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "Slightly damp seaweed.", + "grand_exchange_price": "780", + "durability": null, + "name": "Seaweed", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "401" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "780", + "durability": null, + "name": "Seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "402" + }, + { + "ge_buy_limit": "10000", + "examine": "Slightly damp seaweed.", + "grand_exchange_price": "291", + "durability": null, + "name": "Edible seaweed", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "403" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "291", + "durability": null, + "name": "Edible seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "404" + }, + { + "ge_buy_limit": "100", + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "4162", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "405" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4162", + "durability": null, + "name": "Casket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "406" + }, + { + "ge_buy_limit": "500", + "examine": "Its a rare oyster.", + "grand_exchange_price": "23", + "durability": null, + "name": "Oyster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "407" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "23", + "durability": null, + "name": "Oyster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "408" + }, + { + "shop_price": "5", + "examine": "Aww, it's empty.", + "durability": null, + "name": "Empty oyster", + "tradeable": "true", + "weight": "0.08", + "archery_ticket_price": "0", + "id": "409" + }, + { + "durability": null, + "name": "Empty oyster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "410" + }, + { + "shop_price": "44", + "ge_buy_limit": "500", + "examine": "I could work wonders with a chisel on this pearl.", + "grand_exchange_price": "18", + "durability": null, + "name": "Oyster pearl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "411", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "18", + "durability": null, + "name": "Oyster pearl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "412" + }, + { + "ge_buy_limit": "500", + "examine": "I could work wonders with a chisel on these pearls.", + "grand_exchange_price": "639", + "durability": null, + "name": "Oyster pearls", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "413", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "639", + "durability": null, + "name": "Oyster pearls", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "414" + }, + { + "examine": "An expensive colourless liquid.", + "durability": null, + "name": "Ethenea", + "archery_ticket_price": "0", + "id": "415" + }, + { + "examine": "This isn't worth much.", + "durability": null, + "name": "Liquid honey", + "archery_ticket_price": "0", + "id": "416" + }, + { + "examine": "It's highly poisonous.", + "durability": null, + "name": "Sulphuric broline", + "weight": "1", + "archery_ticket_price": "0", + "id": "417" + }, + { + "examine": "Probably best I don't keep this too long.", + "durability": null, + "name": "Plague sample", + "archery_ticket_price": "0", + "id": "418" + }, + { + "examine": "A special kind of paper.", + "durability": null, + "name": "Touch paper", + "archery_ticket_price": "0", + "id": "419" + }, + { + "examine": "Apparently it distills.", + "durability": null, + "name": "Distillator", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "420" + }, + { + "examine": "Yup. It's an amulet.", + "durability": null, + "name": "Lathas' amulet", + "archery_ticket_price": "0", + "id": "421", + "equipment_slot": "2" + }, + { + "examine": "Birds love this stuff!", + "durability": null, + "name": "Bird feed", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "422" + }, + { + "examine": "(empty) It's empty... (full) It's full of pigeons.", + "durability": null, + "name": "Pigeon cage", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "424" + }, + { + "examine": "(empty) It's empty... (full) It's full of pigeons.", + "durability": null, + "name": "Pigeon cage", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "425" + }, + { + "ge_buy_limit": "100", + "shop_price": "5", + "examine": "Top half of a priest suit.", + "durability": null, + "weight": "2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "55", + "name": "Priest gown", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "426", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "55", + "durability": null, + "name": "Priest gown", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "427" + }, + { + "ge_buy_limit": "100", + "shop_price": "5", + "examine": "Bottom half of a priest suit.", + "grand_exchange_price": "14", + "durability": null, + "name": "Priest gown", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "428", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,3,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Priest gown", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "429" + }, + { + "remove_sleeves": "true", + "examine": "Medical looking.", + "durability": null, + "name": "Doctors' gown", + "weight": "1", + "archery_ticket_price": "0", + "id": "430", + "equipment_slot": "4" + }, + { + "shop_price": "27", + "examine": "A very strong spirit brewed in Karamja.", + "durability": null, + "name": "Karamjan rum", + "archery_ticket_price": "0", + "id": "431" + }, + { + "examine": "Pirates don't have the best handwriting...", + "durability": null, + "name": "Pirate message", + "weight": "1", + "archery_ticket_price": "0", + "id": "433" + }, + { + "ge_buy_limit": "25000", + "examine": "Some hard dry clay.", + "grand_exchange_price": "150", + "durability": null, + "name": "Clay", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "434" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "406", + "durability": null, + "name": "Clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "435" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "80", + "tokkul_price": "4", + "durability": null, + "name": "Copper ore", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "436" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "58", + "durability": null, + "name": "Copper ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "437" + }, + { + "shop_price": "6", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "80", + "tokkul_price": "4", + "durability": null, + "name": "Tin ore", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "438" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "46", + "durability": null, + "name": "Tin ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "439" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "204", + "tokkul_price": "25", + "durability": null, + "name": "Iron ore", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "440" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "396", + "durability": null, + "name": "Iron ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "441" + }, + { + "shop_price": "82", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "180", + "tokkul_price": "112", + "durability": null, + "name": "Silver ore", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "442" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "205", + "durability": null, + "name": "Silver ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "443" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "311", + "tokkul_price": "225", + "durability": null, + "name": "Gold ore", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "444" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "319", + "durability": null, + "name": "Gold ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "445" + }, + { + "examine": "This needs refining.", + "durability": null, + "name": "'perfect' gold ore", + "archery_ticket_price": "0", + "id": "446" + }, + { + "shop_price": "243", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "420", + "tokkul_price": "243", + "durability": null, + "name": "Mithril ore", + "tradeable": "true", + "weight": "1.75", + "archery_ticket_price": "0", + "id": "447" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "369", + "durability": null, + "name": "Mithril ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "448" + }, + { + "shop_price": "1300", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "1160", + "tokkul_price": "600", + "durability": null, + "name": "Adamantite ore", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "449" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "1622", + "durability": null, + "name": "Adamantite ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "450" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "10300", + "tokkul_price": "4800", + "durability": null, + "name": "Runite ore", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "451" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "10300", + "durability": null, + "name": "Runite ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "452" + }, + { + "ge_buy_limit": "25000", + "examine": "Hmm a non-renewable energy source!", + "grand_exchange_price": "320", + "tokkul_price": "67", + "durability": null, + "name": "Coal", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "453" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "315", + "durability": null, + "name": "Coal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "454" + }, + { + "examine": "The official Alfred Grimhand bar crawl card.", + "durability": null, + "name": "Barcrawl card", + "archery_ticket_price": "0", + "id": "455" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "456" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "457" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "458" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "459" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "460" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "461" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "462" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "463" + }, + { + "ge_buy_limit": "10000", + "examine": "Found on strange plants that grow around Karamja.", + "grand_exchange_price": "403", + "durability": null, + "name": "Strange fruit", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "464" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "403", + "durability": null, + "name": "Strange fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "465" + }, + { + "shop_price": "1", + "examine": "Useless without the head.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Pickaxe handle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "466", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Pickaxe handle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "467" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "468", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "469" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "470", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "471" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "472", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "473" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "474", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "475" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "476", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "477" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "478", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "479" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Bronze pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "480" + }, + { + "durability": null, + "name": "Bronze pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "481" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Iron pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "482" + }, + { + "durability": null, + "name": "Iron pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "483" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Steel pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "484" + }, + { + "durability": null, + "name": "Steel pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "485" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Mithril pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "486" + }, + { + "durability": null, + "name": "Mithril pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "487" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Adamant pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "488" + }, + { + "durability": null, + "name": "Adamant pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "489" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Rune pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "490" + }, + { + "durability": null, + "name": "Rune pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "491" + }, + { + "examine": "Useless without the head.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "492", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "493" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "494", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "495" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "496", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "497" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "498", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "499" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "500", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "501" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "502", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "503" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "504", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "505" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "506", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "507" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "508" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "509" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "510" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "511" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "512" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "513" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "514" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "515" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "516" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "517" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "518" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "519" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "520" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "521" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted beef", + "archery_ticket_price": "0", + "id": "522" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted rat meat", + "archery_ticket_price": "0", + "id": "523" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted bear meat", + "archery_ticket_price": "0", + "id": "524" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted chicken", + "weight": "1", + "archery_ticket_price": "0", + "id": "525" + }, + { + "shop_price": "190", + "ge_buy_limit": "10000", + "grand_exchange_price": "190", + "examine": "Bones are for burying!", + "durability": null, + "name": "Bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "526" + }, + { + "shop_price": "190", + "ge_buy_limit": "10000", + "grand_exchange_price": "190", + "durability": null, + "name": "Bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "527" + }, + { + "ge_buy_limit": "10000", + "examine": "Bones are for burying!", + "grand_exchange_price": "329", + "durability": null, + "name": "Burnt bones", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "528" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "329", + "durability": null, + "name": "Burnt bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "529" + }, + { + "ge_buy_limit": "10000", + "examine": "Ew it's a pile of bones.", + "grand_exchange_price": "354", + "durability": null, + "name": "Bat bones", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "530" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "354", + "durability": null, + "name": "Bat bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "531" + }, + { + "shop_price": "593", + "ge_buy_limit": "10000", + "examine": "Normal: Ew, it's a pile of bones.", + "grand_exchange_price": "593", + "durability": null, + "name": "Big bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "532" + }, + { + "shop_price": "593", + "ge_buy_limit": "10000", + "grand_exchange_price": "593", + "durability": null, + "name": "Big bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "533" + }, + { + "ge_buy_limit": "10000", + "examine": "Ew, it's a pile of bones.", + "grand_exchange_price": "1357", + "durability": null, + "name": "Babydragon bones", + "tradeable": "true", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "534" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1357", + "durability": null, + "name": "Babydragon bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "535" + }, + { + "ge_buy_limit": "10000", + "examine": "These would feed a dog for months.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Dragon bones", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "536" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4065", + "durability": null, + "name": "Dragon bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "537" + }, + { + "ge_buy_limit": "100", + "examine": "Keeps a druid's knees nice and warm.", + "grand_exchange_price": "168", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "538", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "168", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "539" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "I feel closer to the gods when I am wearing this.", + "grand_exchange_price": "328", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "540", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "328", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "541" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "528", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "542", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "528", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "543" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "1495", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "544", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,6,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1495", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "545" + }, + { + "remove_sleeves": "true", + "examine": "I feel closer to the gods when I am wearing this. (Top) If a shade had knees, this would keep them nice and warm. (Bottom)", + "durability": null, + "name": "Shade robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "546", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "4" + }, + { + "examine": "I feel closer to the gods when I am wearing this. (Top) If a shade had knees, this would keep them nice and warm. (Bottom)", + "durability": null, + "name": "Shade robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "548", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,4,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "Issued by RuneScape Council to all new citizens.", + "grand_exchange_price": "123", + "durability": null, + "name": "Newcomer map", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "550" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "123", + "durability": null, + "name": "Newcomer map", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "551" + }, + { + "examine": "It lets me talk to ghosts.", + "durability": null, + "name": "Ghostspeak amulet", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "552", + "equipment_slot": "2" + }, + { + "destroy_message": "If you get rid of the skull you'll have to search for it again.", + "examine": "Ooooh spooky!", + "durability": null, + "name": "Ghost's skull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "553" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "554" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "555" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "556" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "557" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "Used for basic missile spells.", + "grand_exchange_price": "18", + "tokkul_price": "4", + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "558" + }, + { + "shop_price": "16", + "ge_buy_limit": "25000", + "examine": "Used for Curse spells", + "grand_exchange_price": "16", + "tokkul_price": "4", + "durability": null, + "name": "Body rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "559" + }, + { + "shop_price": "310", + "ge_buy_limit": "25000", + "examine": "Used for medium missile spells.", + "grand_exchange_price": "320", + "durability": null, + "tokkul_price": "270", + "name": "Death rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "560" + }, + { + "shop_price": "372", + "ge_buy_limit": "25000", + "examine": "Used for alchemy spells.", + "grand_exchange_price": "380", + "durability": null, + "name": "Nature rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "561" + }, + { + "shop_price": "140", + "ge_buy_limit": "25000", + "examine": "Used for small missile spells.", + "grand_exchange_price": "140", + "durability": null, + "tokkul_price": "135", + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "562" + }, + { + "shop_price": "378", + "ge_buy_limit": "25000", + "examine": "Used for teleport spells.", + "grand_exchange_price": "380", + "durability": null, + "name": "Law rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "563" + }, + { + "shop_price": "232", + "ge_buy_limit": "25000", + "examine": "Used for enchant spells.", + "grand_exchange_price": "240", + "durability": null, + "name": "Cosmic rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "564" + }, + { + "shop_price": "550", + "ge_buy_limit": "25000", + "examine": "Used for large missile spells.", + "grand_exchange_price": "560", + "durability": null, + "name": "Blood rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "565" + }, + { + "shop_price": "400", + "ge_buy_limit": "25000", + "examine": "Used for high level curse spells.", + "grand_exchange_price": "420", + "durability": null, + "name": "Soul rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "566" + }, + { + "ge_buy_limit": "5000", + "examine": "I'd prefer it if it was powered.", + "grand_exchange_price": "561", + "durability": null, + "name": "Unpowered orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "567" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "561", + "durability": null, + "name": "Unpowered orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "568" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2346", + "durability": null, + "name": "Fire orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "569" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2346", + "durability": null, + "name": "Fire orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "570" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2024", + "durability": null, + "name": "Water orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "571" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2024", + "durability": null, + "name": "Water orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "572" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2162", + "durability": null, + "name": "Air orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "573" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2162", + "durability": null, + "name": "Air orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "574" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2208", + "durability": null, + "name": "Earth orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "575" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2208", + "durability": null, + "name": "Earth orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "576" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "I can do magic better in this.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1840", + "name": "Wizard robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "577", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1840", + "durability": null, + "name": "Wizard robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "578" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.45", + "equipment_slot": "0", + "grand_exchange_price": "361", + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "579", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "grand_exchange_price": "361", + "durability": null, + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "580" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "I can do magic better in this.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1364", + "name": "Black robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "581", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1364", + "durability": null, + "name": "Black robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "582" + }, + { + "shop_price": "10", + "examine": "Empty: It's a bailing bucket. Full: It's a bailing bucket full of salty water.", + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "583" + }, + { + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "584" + }, + { + "shop_price": "10", + "examine": "Empty: It's a bailing bucket. Full: It's a bailing bucket full of salty water.", + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "585" + }, + { + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "586" + }, + { + "examine": "A strange glowing green orb.", + "durability": null, + "name": "Orb of protection", + "weight": "1", + "archery_ticket_price": "0", + "id": "587" + }, + { + "examine": "Two strange glowing green orbs.", + "durability": null, + "name": "Orbs of protection", + "archery_ticket_price": "0", + "id": "588" + }, + { + "examine": "It's an amulet of protection given to me by the Gnomes.", + "durability": null, + "name": "Gnome amulet", + "archery_ticket_price": "0", + "id": "589", + "bonuses": "0,0,0,0,0,13,13,13,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "shop_price": "1", + "ge_buy_limit": "5000", + "examine": "Useful for lighting a fire.", + "grand_exchange_price": "118", + "durability": null, + "name": "Tinderbox", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "590" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "118", + "durability": null, + "name": "Tinderbox", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "591" + }, + { + "ge_buy_limit": "10000", + "examine": "A heap of ashes.", + "grand_exchange_price": "368", + "durability": null, + "name": "Ashes", + "tradeable": "true", + "weight": "0.056", + "archery_ticket_price": "0", + "id": "592" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "368", + "durability": null, + "name": "Ashes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "593" + }, + { + "examine": "A lit home-made torch.", + "durability": null, + "name": "Lit torch", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "594" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An unlit home-made torch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Unlit torch", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "596" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Unlit torch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "597" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with bronze heads and oil-soaked cloth. lit: An easy to make, bronze-headed fire arrow.", + "grand_exchange_price": "162", + "durability": null, + "name": "Bronze fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "598", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "100", + "examine": "A book on the history of astronomy in RuneScape.", + "grand_exchange_price": "658", + "durability": null, + "name": "Astronomy book", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "600" + }, + { + "destroy_message": "You'll have to find another, down in the dungeon.", + "examine": "A small key for a large door.", + "durability": null, + "name": "Goblin kitchen key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "601" + }, + { + "destroy_message": "You'll have to get another down in the Dungeon", + "examine": "An unusual clay mould in the shape of a disc.", + "durability": null, + "name": "Lens mould", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "602" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A perfectly circular disc of glass.", + "durability": null, + "name": "Observatory lens", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "603" + }, + { + "shop_price": "160", + "examine": "A slender bone shard given to you by Zadimus.", + "durability": null, + "name": "Bone shard", + "archery_ticket_price": "0", + "id": "604" + }, + { + "shop_price": "100", + "examine": "A key fashioned from a shard of bone. (Shilo Village)", + "durability": null, + "name": "Bone key", + "archery_ticket_price": "0", + "id": "605" + }, + { + "examine": "A stone plaque with carved letters in it.", + "durability": null, + "name": "Stone-plaque", + "archery_ticket_price": "0", + "id": "606" + }, + { + "examine": "An ancient tattered scroll.", + "durability": null, + "name": "Tattered scroll", + "archery_ticket_price": "0", + "id": "607" + }, + { + "shop_price": "100", + "examine": "An ancient crumpled scroll.", + "durability": null, + "name": "Crumpled scroll", + "archery_ticket_price": "0", + "id": "608" + }, + { + "examine": "The remains of the Zombie Queen.", + "durability": null, + "name": "Rashiliyia corpse", + "archery_ticket_price": "0", + "id": "609" + }, + { + "examine": "The remains of Zadimus.", + "durability": null, + "name": "Zadimus corpse", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "610" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "611" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "612" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "613" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "614" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "615" + }, + { + "destroy_message": "You made the beads of the dead during the Shilo Village quest. You can get another from Yanni Salika in Shilo Village for 1200 gold.", + "shop_price": "1200", + "examine": "A curious looking neck ornament.", + "durability": null, + "name": "Beads of the dead", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "616", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,1,0,0", + "equipment_slot": "2" + }, + { + "bankable": "false", + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "archery_ticket_price": "0", + "id": "617" + }, + { + "examine": "Beads carved out of a bone.", + "durability": null, + "name": "Bone beads", + "archery_ticket_price": "0", + "id": "618" + }, + { + "shop_price": "35", + "examine": "Allows you to rest in the luxurious Paramayer[sic] Inn.", + "durability": null, + "name": "Paramaya ticket", + "archery_ticket_price": "0", + "id": "619" + }, + { + "shop_price": "35", + "examine": "Allows you to rest in the luxurious Paramayer[sic] Inn.", + "durability": null, + "name": "Paramaya ticket", + "archery_ticket_price": "0", + "id": "620" + }, + { + "examine": "Sold in Shilo Village for passage on the 'Lady of the Waves'.", + "durability": null, + "name": "Ship ticket", + "archery_ticket_price": "0", + "id": "621" + }, + { + "examine": "An ivory sword pommel.", + "durability": null, + "name": "Sword pommel", + "archery_ticket_price": "0", + "id": "623" + }, + { + "examine": "Notes taken from the tomb of Bervirius.", + "durability": null, + "name": "Bervirius notes", + "archery_ticket_price": "0", + "id": "624" + }, + { + "examine": "A decorated belt used to trade information between distant villages.", + "durability": null, + "name": "Wampum belt", + "archery_ticket_price": "0", + "id": "625" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and pink.", + "grand_exchange_price": "558", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "626", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "558", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "627" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and green.", + "grand_exchange_price": "397", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "628", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "397", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "629" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and blue.", + "grand_exchange_price": "612", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "630", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "612", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "631" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and cream.", + "grand_exchange_price": "496", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "632", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "496", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "633" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and turquoise.", + "grand_exchange_price": "226", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "634", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "226", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "635" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in pink.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "265", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "636", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "265", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "637" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in green.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "235", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "638", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "235", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "639" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in blue.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "447", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "640", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "447", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "641" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in cream.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "396", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "642", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "396", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "643" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in turquoise.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "70", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "644", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "70", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "645" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for pink.", + "grand_exchange_price": "249", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "646", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "249", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "647" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for green.", + "grand_exchange_price": "210", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "648", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "210", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "649" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for blue.", + "grand_exchange_price": "453", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "650", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "453", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "651" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for cream.", + "grand_exchange_price": "348", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "652", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "348", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "653" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for turquoise.", + "grand_exchange_price": "92", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "654", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "655" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "677", + "examine": "A silly, pink pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "656", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "677", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "657" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "480", + "examine": "A silly, green pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "658", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "480", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "659" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "examine": "A silly, blue pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "660", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "661" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1102", + "examine": "A silly, cream pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "662", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1102", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "663" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "295", + "examine": "A silly, turquoise pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "664", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "295", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "665" + }, + { + "examine": "Picture of a posing Paladin.", + "durability": null, + "name": "Portrait", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "666" + }, + { + "turn90cw_anim": "821", + "examine": "A Faladian Knight's sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "attack_speed": "5", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "292", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "809", + "attack_audios": "2500,2500,2517,2500", + "name": "Blurite sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "667", + "stand_turn_anim": "823", + "bonuses": "9,14,-2,0,0,0,3,2,0,0,0,10,0,0,0" + }, + { + "examine": "Definitely blue.", + "durability": null, + "name": "Blurite ore", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "668" + }, + { + "examine": "A receptacle for specimens!", + "durability": null, + "name": "Specimen jar", + "archery_ticket_price": "0", + "id": "669" + }, + { + "examine": "A small brush used to clean rock samples.", + "durability": null, + "name": "Specimen brush", + "archery_ticket_price": "0", + "id": "670" + }, + { + "examine": "A carefully-kept-safe skull sample.", + "durability": null, + "name": "Animal skull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "671" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A special cup.", + "durability": null, + "name": "Special cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "672" + }, + { + "examine": "A lucky mascot.", + "durability": null, + "name": "Teddy", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "673" + }, + { + "examine": "A roughly shaped piece of rock.", + "durability": null, + "name": "Cracked sample", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "674" + }, + { + "examine": "A small pick for digging.", + "durability": null, + "name": "Rock pick", + "archery_ticket_price": "0", + "id": "675", + "equipment_slot": "3" + }, + { + "examine": "Used for digging!", + "durability": null, + "name": "Trowel", + "archery_ticket_price": "0", + "id": "676" + }, + { + "examine": "An empty tray for panning.", + "durability": null, + "name": "Panning tray", + "archery_ticket_price": "0", + "id": "677" + }, + { + "examine": "This tray contains gold nuggets.", + "durability": null, + "name": "Panning tray", + "archery_ticket_price": "0", + "id": "678" + }, + { + "examine": "This tray contains mud.", + "durability": null, + "name": "Panning tray", + "archery_ticket_price": "0", + "id": "679" + }, + { + "examine": "Pure, lovely gold!", + "durability": null, + "name": "Nuggets", + "archery_ticket_price": "0", + "id": "680" + }, + { + "examine": "An unusual symbol as yet unidentified by the archaeological expert.", + "durability": null, + "name": "Ancient talisman", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "681" + }, + { + "examine": "A letter waiting to be stamped.", + "durability": null, + "name": "Unstamped letter", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "682" + }, + { + "examine": "A sealed letter of recommendation.", + "durability": null, + "name": "Sealed letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "683" + }, + { + "examine": "Used to hold up trousers!", + "durability": null, + "name": "Belt buckle", + "weight": "1", + "archery_ticket_price": "0", + "id": "684" + }, + { + "examine": "Phew!", + "durability": null, + "name": "Old boot", + "archery_ticket_price": "0", + "id": "685" + }, + { + "examine": "A decent-enough weapon gone rusty.", + "durability": null, + "name": "Rusty sword", + "weight": "2", + "archery_ticket_price": "0", + "id": "686" + }, + { + "examine": "This must have been shot at high speed.", + "durability": null, + "name": "Broken arrow", + "archery_ticket_price": "0", + "id": "687" + }, + { + "examine": "Not Dick Whittington's helper at all!", + "durability": null, + "name": "Buttons", + "archery_ticket_price": "0", + "id": "688" + }, + { + "examine": "I pity the poor person beaten with this!", + "attack_audios": "2555,0,0,0", + "durability": null, + "name": "Broken staff", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "689" + }, + { + "examine": "Smashed glass.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "690" + }, + { + "examine": "The owner has passed Earth Sciences Level 1 exam.", + "durability": null, + "name": "Level 1 certificate", + "archery_ticket_price": "0", + "id": "691" + }, + { + "examine": "The owner has passed Earth Sciences Level 2 exam.", + "durability": null, + "name": "Level 2 certificate", + "archery_ticket_price": "0", + "id": "692" + }, + { + "examine": "The owner has passed Earth Sciences Level 3 exam.", + "durability": null, + "name": "Level 3 certificate", + "archery_ticket_price": "0", + "id": "693" + }, + { + "examine": "Smashing!", + "durability": null, + "name": "Ceramic remains", + "archery_ticket_price": "0", + "id": "694" + }, + { + "examine": "Now, if I could just find a tooth fairy to sell this to...", + "durability": null, + "name": "Old tooth", + "archery_ticket_price": "0", + "id": "695" + }, + { + "examine": "A letter inviting me to use the private digging shafts.", + "durability": null, + "name": "Invitation letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "696" + }, + { + "examine": "It would be hard to repair this!", + "durability": null, + "name": "Damaged armour", + "weight": "7.75", + "archery_ticket_price": "0", + "id": "697" + }, + { + "examine": "Armour left over from a great fight.", + "durability": null, + "name": "Broken armour", + "weight": "8", + "archery_ticket_price": "0", + "id": "698" + }, + { + "examine": "An old stone slab with writing on it.", + "durability": null, + "name": "Stone tablet", + "archery_ticket_price": "0", + "id": "699" + }, + { + "examine": "An acrid chemical.", + "durability": null, + "name": "Chemical powder", + "archery_ticket_price": "0", + "id": "700" + }, + { + "examine": "An acrid chemical.", + "durability": null, + "name": "Ammonium nitrate", + "archery_ticket_price": "0", + "id": "701" + }, + { + "examine": "A strong chemical.", + "durability": null, + "name": "Unidentified liquid", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "702" + }, + { + "shop_price": "1", + "examine": "A strong chemical.", + "durability": null, + "name": "Nitroglycerin", + "weight": "1", + "archery_ticket_price": "0", + "id": "703" + }, + { + "examine": "Charcoal - crushed to small pieces!", + "durability": null, + "name": "Ground charcoal", + "archery_ticket_price": "0", + "id": "704" + }, + { + "examine": "A mixture of strong chemicals.", + "durability": null, + "name": "Chemical compound", + "weight": "2", + "archery_ticket_price": "0", + "id": "707" + }, + { + "examine": "The root of an arcenia plant.", + "durability": null, + "name": "Arcenia root", + "archery_ticket_price": "0", + "id": "708" + }, + { + "examine": "An unusually shaped vase. You can see something glinting inside.", + "durability": null, + "name": "Vase", + "archery_ticket_price": "0", + "id": "710" + }, + { + "examine": "It's about chemicals, judging from its cover.", + "durability": null, + "name": "Book on chemicals", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "711" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "712" + }, + { + "examine": "Notes given to you by Radimus Erkle, it includes a partially completed map.", + "durability": null, + "name": "Radimus notes", + "archery_ticket_price": "0", + "id": "714" + }, + { + "examine": "Notes given to you by Radimus Erkle, it includes a partially completed map.", + "durability": null, + "name": "Radimus notes", + "archery_ticket_price": "0", + "id": "715" + }, + { + "examine": "It makes a loud but interesting sound when swung in the air.", + "durability": null, + "name": "Bull roarer", + "archery_ticket_price": "0", + "id": "716" + }, + { + "examine": "A scrawled note with spidery writing on it.", + "durability": null, + "name": "Scrawled note", + "archery_ticket_price": "0", + "id": "717" + }, + { + "examine": "A scrawled note with spidery writing on it.", + "durability": null, + "name": "A scribbled note", + "archery_ticket_price": "0", + "id": "718" + }, + { + "examine": "A scrawled note with spidery writing on it.", + "durability": null, + "name": "Scrumpled note", + "archery_ticket_price": "0", + "id": "719" + }, + { + "examine": "A rough sketch of a bowl shaped vessel given to you by Gujuo.", + "durability": null, + "name": "Sketch", + "archery_ticket_price": "0", + "id": "720" + }, + { + "examine": "A specially made bowl constructed out of pure gold.", + "durability": null, + "name": "Gold bowl", + "archery_ticket_price": "0", + "id": "721" + }, + { + "examine": "A specially made bowl constructed out of pure gold and blessed.", + "durability": null, + "name": "Blessed gold bowl", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "722" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "723" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "724" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "725" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "726" + }, + { + "examine": "One of nature's pipes.", + "durability": null, + "name": "Hollow reed", + "weight": "0.012", + "archery_ticket_price": "0", + "id": "727" + }, + { + "examine": "One of nature's pipes.", + "durability": null, + "name": "Hollow reed", + "weight": "0.012", + "archery_ticket_price": "0", + "id": "728" + }, + { + "examine": "It looks like the Shamans personal notes...", + "durability": null, + "name": "Shamans tome", + "archery_ticket_price": "0", + "id": "729" + }, + { + "examine": "An ancient tome on Demonology.", + "durability": null, + "name": "Binding book", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "730" + }, + { + "shop_price": "160", + "examine": "An enchanted empty glass vial.", + "durability": null, + "name": "Enchanted vial", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "731" + }, + { + "examine": "A vial of holy water, good against certain demons.", + "durability": null, + "name": "Holy water", + "archery_ticket_price": "0", + "id": "732", + "weapon_interface": "18", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,24", + "equipment_slot": "3" + }, + { + "examine": "Fragments of a broken container.", + "durability": null, + "name": "Smashed glass", + "archery_ticket_price": "0", + "id": "733" + }, + { + "examine": "These need to be germinated before they can be used. / These are germinated and ready to be planted in fertile soil.", + "durability": null, + "name": "Yommi tree seeds", + "archery_ticket_price": "0", + "id": "735" + }, + { + "examine": "These need to be germinated before they can be used. / These are germinated and ready to be planted in fertile soil.", + "durability": null, + "name": "Yommi tree seeds", + "archery_ticket_price": "0", + "id": "736" + }, + { + "examine": "A Snakeweed mixture, needs another ingredient.", + "durability": null, + "name": "Snakeweed mixture", + "weight": "1", + "archery_ticket_price": "0", + "id": "737" + }, + { + "examine": "It's a mixture of ardrigal and water. Needs another ingredient.", + "durability": null, + "name": "Ardrigal mixture", + "archery_ticket_price": "0", + "id": "738" + }, + { + "examine": "A bravery potion for which Gujuo gave you the details, let's hope it works.", + "durability": null, + "name": "Bravery potion", + "archery_ticket_price": "0", + "id": "739" + }, + { + "shop_price": "160", + "examine": "A silly, blue pointed hat.", + "grand_exchange_price": "472", + "durability": null, + "name": "Blue hat", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "hat": "true", + "id": "740", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "It looks like it's been snapped off of something.", + "durability": null, + "name": "Chunk of crystal", + "archery_ticket_price": "0", + "id": "741" + }, + { + "examine": "It looks like it's been snapped off of something.", + "durability": null, + "name": "Hunk of crystal", + "archery_ticket_price": "0", + "id": "742" + }, + { + "examine": "It looks like it's been snapped off of something.", + "durability": null, + "name": "Lump of crystal", + "archery_ticket_price": "0", + "id": "743" + }, + { + "examine": "A heart shaped crystal.", + "durability": null, + "name": "Heart crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "744" + }, + { + "examine": "A heart shaped crystal.", + "durability": null, + "name": "Heart crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "745" + }, + { + "attack_anims": "400,400,400,400", + "examine": "A black obsidian dagger, it has a strange aura about it.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Dark dagger", + "archery_ticket_price": "0", + "id": "746", + "weapon_interface": "5", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,0,0,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "examine": "A black obsidian dagger, it has a strange aura about it - it seems to be glowing.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "attack_audios": "2517,2517,2500,2517", + "name": "Glowing dagger", + "archery_ticket_price": "0", + "id": "747", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,0,0,0,0" + }, + { + "examine": "A powerful spell for good.", + "durability": null, + "name": "Holy force", + "archery_ticket_price": "0", + "id": "748" + }, + { + "examine": "A well carved totem pole made from the trunk of a Yommi tree.", + "durability": null, + "name": "Yommi totem", + "weight": "3", + "archery_ticket_price": "0", + "id": "749" + }, + { + "examine": "A gilded totem pole from the Kharazi tribe.", + "durability": null, + "name": "Gilded totem", + "archery_ticket_price": "0", + "id": "750" + }, + { + "examine": "A common gnomeball, obtained by playing gnomeball.", + "durability": null, + "name": "Gnomeball", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "751", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Gnomeball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "752" + }, + { + "ge_buy_limit": "100", + "examine": "Poisonous berries.", + "grand_exchange_price": "42", + "durability": null, + "name": "Cadava berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "753" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "42", + "durability": null, + "name": "Cadava berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "754" + }, + { + "shop_price": "1", + "examine": "This potion will most certainly almost kill you.", + "durability": null, + "name": "Cadava potion", + "archery_ticket_price": "0", + "id": "756" + }, + { + "examine": "Phoenix Gang weapon store key.", + "durability": null, + "name": "Weapon store key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "759" + }, + { + "durability": null, + "name": "Weapon store key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "760" + }, + { + "destroy_message": "You'll have to kill Jonny the beard in order to get another one.", + "examine": "An intelligence report.", + "durability": null, + "name": "Intel report", + "destroy": "true", + "archery_ticket_price": "0", + "id": "761" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Half of the Shield of Arrav.", + "durability": null, + "name": "Broken shield", + "destroy": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "763" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Half of the Shield of Arrav.", + "durability": null, + "name": "Broken shield", + "destroy": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "765" + }, + { + "turn90cw_anim": "821", + "examine": "Second-rate crossbow, former property of the Phoenix Gang.", + "walk_anim": "4226", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Phoenix crossbow", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "767", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Phoenix crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "768" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Entrance certificate to the Imperial Guard.", + "durability": null, + "name": "Certificate", + "archery_ticket_price": "0", + "id": "769" + }, + { + "destroy_message": "You can get another branch if you chop the dramen tree underneath Entrana again.", + "examine": "A limb of the fabled Dramen tree.", + "durability": null, + "name": "Dramen branch", + "tradeable": "false", + "destroy": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "771" + }, + { + "turn90cw_anim": "1207", + "examine": "Crafted from a Dramen tree branch.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Dramen staff", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "772", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "examine": "A perfect ruby ring.", + "durability": null, + "name": "'perfect' ring", + "archery_ticket_price": "0", + "id": "773", + "equipment_slot": "12" + }, + { + "examine": "A perfect ruby necklace.", + "durability": null, + "name": "'perfect' necklace", + "archery_ticket_price": "0", + "id": "774", + "equipment_slot": "2" + }, + { + "destroy_message": "You can obtain another set of Cooking gauntlets from Dimintheis.", + "examine": "These gauntlets empower with a greater ability to cook fish.", + "durability": null, + "name": "Cooking gauntlets", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "775", + "bonuses": "2,2,2,0,0,8,9,7,0,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can obtain another set of Goldsmith gauntlets from Dimintheis.", + "examine": "These gauntlets empower the bearer whilst making gold.", + "durability": null, + "name": "Goldsmith gauntlets", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "776", + "bonuses": "2,2,2,0,0,8,9,7,0,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can obtain another set of Chaos gauntlets from Dimintheis.", + "examine": "These gauntlets empower spell casters.", + "durability": null, + "name": "Chaos gauntlets", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "777", + "bonuses": "2,2,2,0,0,8,9,7,0,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "My reward for assisting the Fitzharmon family.", + "durability": null, + "name": "Family gauntlets", + "weight": "1", + "archery_ticket_price": "0", + "id": "778", + "bonuses": "2,2,2,0,0,8,9,7,0,0,0,2,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "A fragment of the Fitzharmon family crest.", + "durability": null, + "name": "Crest part", + "archery_ticket_price": "0", + "id": "779" + }, + { + "examine": "A fragment of the Fitzharmon family crest.", + "durability": null, + "name": "Crest part", + "archery_ticket_price": "0", + "id": "780" + }, + { + "examine": "A fragment of the Fitzharmon family crest.", + "durability": null, + "name": "Crest part", + "archery_ticket_price": "0", + "id": "781" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A sample of the bark from the Grand Tree.", + "durability": null, + "name": "Bark sample", + "archery_ticket_price": "0", + "id": "783" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A book to translate the ancient gnome language into English.", + "durability": null, + "name": "Translation book", + "archery_ticket_price": "0", + "id": "784" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Perhaps I should read it and see what Glough is up to!", + "durability": null, + "name": "Glough's journal", + "archery_ticket_price": "0", + "id": "785" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Hazelmere wrote something down on this scroll.", + "durability": null, + "name": "Hazelmere's scroll", + "archery_ticket_price": "0", + "id": "786" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An order from the Karamja shipyard.", + "durability": null, + "name": "Lumber order", + "archery_ticket_price": "0", + "id": "787" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "The key to Glough's chest.", + "durability": null, + "name": "Glough's key", + "weight": "1", + "archery_ticket_price": "0", + "id": "788" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "789" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "790" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "791" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "792" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An ancient rock with strange magical properties.", + "durability": null, + "name": "Daconia rock", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "793" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "These are plans for an invasion!", + "durability": null, + "name": "Invasion plans", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "794" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A model of a Karamja warship", + "durability": null, + "name": "War ship", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "795" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "3", + "name": "Bronze thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "800", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,5" + }, + { + "shop_price": "13", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "14", + "name": "Iron thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "801", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,5}", + "shop_price": "38", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "60", + "name": "Steel thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "802", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,11" + }, + { + "requirements": "{4,20}", + "shop_price": "105", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "135", + "name": "Mithril thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "803", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,16" + }, + { + "requirements": "{4,30}", + "shop_price": "262", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "138", + "name": "Adamant thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "804", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,23" + }, + { + "requirements": "{4,40}", + "shop_price": "698", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "has_special": "true", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "243", + "name": "Rune thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "805", + "bonuses": "0,0,0,0,26,0,0,0,0,0,0,0,0,0,36" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "53", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "806", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "59", + "attack_audios": "2547,0,0,0", + "name": "Iron dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "807", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "50", + "attack_audios": "2547,0,0,0", + "name": "Steel dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "808", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "68", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "809", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "96", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "810", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "122", + "attack_audios": "2547,0,0,0", + "name": "Rune dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "811", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "66", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "812", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "66", + "attack_audios": "2547,0,0,0", + "name": "Iron dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "813", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "75", + "attack_audios": "2547,0,0,0", + "name": "Steel dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "814", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "65", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "815", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "75", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "816", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "110", + "attack_audios": "2547,0,0,0", + "name": "Rune dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "817", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Poisoned dart(p)", + "archery_ticket_price": "0", + "id": "818", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of bronze - needs feathers for flight.", + "grand_exchange_price": "24", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Bronze dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "819" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of iron - needs feathers for flight.", + "grand_exchange_price": "19", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Iron dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "820" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of steel - needs feathers for flight.", + "grand_exchange_price": "66", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Steel dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "821" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of mithril - needs feathers for flight.", + "grand_exchange_price": "97", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Mithril dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "822" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of adamantite - needs feathers for flight.", + "grand_exchange_price": "212", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Adamant dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "823" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of runite - needs feathers for flight.", + "grand_exchange_price": "498", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Rune dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "824" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "6", + "name": "Bronze javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "825", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "2", + "name": "Iron javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "826", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "19", + "name": "Steel javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "827", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "25", + "name": "Mithril javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "828", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "shop_price": "100", + "ge_buy_limit": "1000", + "examine": "An adamant tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "51", + "name": "Adamant javelin", + "tradeable": "true", + "archery_ticket_price": "100", + "id": "829", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "requirements": "{4,40}", + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "186", + "name": "Rune javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "830", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "19", + "name": "Bronze javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "831", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "19", + "name": "Iron javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "832", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "34", + "name": "Steel javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "833", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "44", + "name": "Mithril javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "834", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "shop_price": "100", + "ge_buy_limit": "1000", + "examine": "An adamant tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "88", + "name": "Adamant javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "835", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "requirements": "{4,40}", + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "256", + "name": "Rune javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "836", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "This fires crossbow bolts.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "276", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "837", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0", + "shop_price": "70", + "durability": null, + "weight": "8", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Crossbow" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "276", + "durability": null, + "name": "Crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "838" + }, + { + "ge_buy_limit": "5000", + "turn90cw_anim": "821", + "examine": "A nice sturdy bow.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "55", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "839", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,0", + "shop_price": "80", + "durability": null, + "weight": "1.8", + "weapon_interface": "16", + "render_anim": "1", + "attack_audios": "2700,0,0,0", + "name": "Longbow" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "55", + "durability": null, + "name": "Longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "840" + }, + { + "ge_buy_limit": "5000", + "turn90cw_anim": "821", + "examine": "A shortbow made of wood.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "79", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "841", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,0", + "shop_price": "50", + "durability": null, + "weight": "1.33", + "weapon_interface": "16", + "render_anim": "1", + "attack_audios": "2700,0,0,0", + "name": "Shortbow" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "79", + "durability": null, + "name": "Shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "842" + }, + { + "requirements": "{4,5}", + "shop_price": "164", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of oak, still effective.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "54", + "attack_audios": "2700,0,0,0", + "name": "Oak shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "843", + "bonuses": "0,0,0,0,14,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "54", + "durability": null, + "name": "Oak shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "844" + }, + { + "requirements": "{4,5}", + "shop_price": "160", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of oak.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "132", + "attack_audios": "2700,0,0,0", + "name": "Oak longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "845", + "bonuses": "0,0,0,0,14,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "132", + "durability": null, + "name": "Oak longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "846" + }, + { + "requirements": "{4,20}", + "shop_price": "320", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of willow.", + "durability": null, + "weight": "1.5", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "132", + "attack_audios": "2700,0,0,0", + "name": "Willow longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "847", + "bonuses": "0,0,0,0,20,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "132", + "durability": null, + "name": "Willow longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "848" + }, + { + "requirements": "{4,20}", + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of willow, still effective.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "106", + "attack_audios": "2700,0,0,0", + "name": "Willow shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "849", + "bonuses": "0,0,0,0,20,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "106", + "durability": null, + "name": "Willow shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "850" + }, + { + "requirements": "{4,30}", + "shop_price": "640", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of maple.", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "320", + "attack_audios": "2700,0,0,0", + "name": "Maple longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "851", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "320", + "durability": null, + "name": "Maple longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "852" + }, + { + "requirements": "{4,30}", + "shop_price": "400", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of maple, still effective.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "290", + "attack_audios": "2700,0,0,0", + "name": "Maple shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "853", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "290", + "durability": null, + "name": "Maple shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "854" + }, + { + "requirements": "{4,40}", + "shop_price": "674", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of yew.", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "706", + "attack_audios": "2700,0,0,0", + "name": "Yew longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "855", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "706", + "durability": null, + "name": "Yew longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "856" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of yew, still effective.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "422", + "attack_audios": "2700,0,0,0", + "name": "Yew shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "857", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "422", + "durability": null, + "name": "Yew shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "858" + }, + { + "requirements": "{4,50}", + "shop_price": "1270", + "ge_buy_limit": "5000", + "examine": "A nice sturdy magical bow.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "1437", + "attack_audios": "2700,0,0,0", + "name": "Magic longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "859", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1437", + "durability": null, + "name": "Magic longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "860" + }, + { + "requirements": "{4,50}", + "shop_price": "5600", + "ge_buy_limit": "5000", + "examine": "Short and magical, but still effective.", + "has_special": "true", + "durability": null, + "weight": "1.3", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "959", + "attack_audios": "2700,0,0,0", + "name": "Magic shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "861", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "959", + "durability": null, + "name": "Magic shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "862" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "87", + "attack_audios": "2704,0,0,0", + "name": "Iron knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "863", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "73", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "864", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "136", + "attack_audios": "2704,0,0,0", + "name": "Steel knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "865", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "201", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "866", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "421", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "867", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1132", + "attack_audios": "2704,0,0,0", + "name": "Rune knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "868", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "95", + "attack_audios": "2704,0,0,0", + "name": "Black knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "869", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "73", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "870", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "88", + "attack_audios": "2704,0,0,0", + "name": "Iron knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "871", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "124", + "attack_audios": "2704,0,0,0", + "name": "Steel knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "872", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "226", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "873", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "69", + "attack_audios": "2704,0,0,0", + "name": "Black knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "874", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "503", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "875", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1374", + "attack_audios": "2704,0,0,0", + "name": "Rune knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "876", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "877", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "38", + "durability": null, + "name": "Bronze bolts(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "878", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "25000", + "examine": "Opal tipped bronze crossbow bolts", + "grand_exchange_price": "5", + "durability": null, + "name": "Opal bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "879", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,14", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "ge_buy_limit": "25000", + "examine": "Pearl tipped Iron crossbow bolts.", + "grand_exchange_price": "32", + "durability": null, + "name": "Pearl bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "880", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,48", + "equipment_slot": "13" + }, + { + "shop_price": "80", + "ge_buy_limit": "10000", + "examine": "Great if you have a crossbow!", + "grand_exchange_price": "42", + "durability": null, + "name": "Barbed bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "881", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,12", + "equipment_slot": "13" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "10", + "durability": null, + "name": "Bronze arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "882", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "39", + "durability": null, + "name": "Bronze arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "883", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "10", + "durability": null, + "name": "Iron arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "884", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "41", + "durability": null, + "name": "Iron arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "885", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "25", + "durability": null, + "name": "Steel arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "886", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "69", + "durability": null, + "name": "Steel arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "887", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "30", + "durability": null, + "name": "Mithril arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "888", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "69", + "durability": null, + "name": "Mithril arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "889", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "111", + "durability": null, + "name": "Adamant arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "890", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "109", + "durability": null, + "name": "Adamant arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "891", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "212", + "durability": null, + "name": "Rune arrow", + "tradeable": "true", + "archery_ticket_price": "40", + "id": "892", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "257", + "durability": null, + "name": "Rune arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "893", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with bronze heads and oil-soaked cloth. lit: An easy to make, bronze-headed fire arrow.", + "grand_exchange_price": "228", + "durability": null, + "name": "Bronze fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "942", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "0", + "examine": "Ugh! It's wriggling!", + "durability": null, + "name": "Worm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "943" + }, + { + "durability": null, + "name": "Worm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "944" + }, + { + "durability": null, + "name": "Throwing rope", + "archery_ticket_price": "0", + "id": "945", + "equipment_slot": "3" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "A dangerous looking knife.", + "grand_exchange_price": "32", + "durability": null, + "name": "Knife", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "946" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "32", + "durability": null, + "name": "Knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "947" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "This would make warm clothing.", + "grand_exchange_price": "9", + "durability": null, + "name": "Bear fur", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "948" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9", + "durability": null, + "name": "Bear fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "949" + }, + { + "shop_price": "21", + "ge_buy_limit": "100", + "examine": "It's a sheet of silk.", + "grand_exchange_price": "27", + "durability": null, + "name": "Silk", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "950" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27", + "durability": null, + "name": "Silk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "951" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A slightly muddy spade. / Popular with farmers and treasure hunters.", + "grand_exchange_price": "117", + "durability": null, + "name": "Spade", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "952" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "117", + "durability": null, + "name": "Spade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "953" + }, + { + "shop_price": "18", + "ge_buy_limit": "100", + "examine": "A coil of rope.", + "grand_exchange_price": "96", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "954" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "96", + "durability": null, + "name": "Rope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "955" + }, + { + "examine": "Get your axes from Bob's Axes.", + "durability": null, + "name": "Flier", + "archery_ticket_price": "0", + "id": "956" + }, + { + "shop_price": "70", + "ge_buy_limit": "100", + "examine": "This would make warm clothing.", + "grand_exchange_price": "34", + "durability": null, + "name": "Grey wolf fur", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "958" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34", + "durability": null, + "name": "Grey wolf fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "959" + }, + { + "shop_price": "100", + "ge_buy_limit": "10000", + "examine": "A plank of wood!", + "grand_exchange_price": "234", + "durability": null, + "name": "Plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "960" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "234", + "durability": null, + "name": "Plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "961" + }, + { + "ge_buy_limit": "2", + "examine": "I need to pull this.", + "grand_exchange_price": "15", + "durability": null, + "name": "Christmas cracker", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "962" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1900000000", + "durability": null, + "name": "Christmas cracker", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "963" + }, + { + "examine": "A fraction of a roof.", + "durability": null, + "name": "Tile", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "966" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "Used for making notes.", + "grand_exchange_price": "153", + "durability": null, + "name": "Papyrus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "970" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "153", + "durability": null, + "name": "Papyrus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "971" + }, + { + "shop_price": "15", + "examine": "Used for making notes.", + "grand_exchange_price": "163", + "durability": null, + "name": "Papyrus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "972" + }, + { + "shop_price": "45", + "ge_buy_limit": "100", + "examine": "A lump of charcoal.", + "grand_exchange_price": "272", + "durability": null, + "name": "Charcoal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "973" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "272", + "durability": null, + "name": "Charcoal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "974" + }, + { + "shop_price": "52", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "grand_exchange_price": "619", + "name": "Machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "975", + "bonuses": "0,6,-2,0,0,0,0,0,0,0,0,5,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "619", + "durability": null, + "name": "Machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "976" + }, + { + "durability": null, + "name": "Cooking pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "978" + }, + { + "shop_price": "10", + "ge_buy_limit": "2", + "examine": "Used to get out of Thordur's blackhole.", + "grand_exchange_price": "298000000", + "durability": null, + "name": "Disk of returning", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "981" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "298000000", + "durability": null, + "name": "Disk of returning", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "982" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "A key found on the floor of Edgeville Dungeon.", + "grand_exchange_price": "547", + "durability": null, + "name": "Brass key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "983" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "547", + "durability": null, + "name": "Brass key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "984" + }, + { + "ge_buy_limit": "100", + "examine": "The tooth end of the mysterious Crystal key. Can you find the other half?", + "grand_exchange_price": "24900", + "durability": null, + "name": "Tooth half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "985" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24900", + "durability": null, + "name": "Tooth half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "986" + }, + { + "ge_buy_limit": "100", + "examine": "The loop end of the mysterious Crystal key. Can you find the other half?", + "grand_exchange_price": "21100", + "durability": null, + "name": "Loop half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "987" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21100", + "durability": null, + "name": "Loop half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "988" + }, + { + "ge_buy_limit": "100", + "examine": "A mysterious key for a mysterious chest.", + "grand_exchange_price": "48700", + "durability": null, + "name": "Crystal key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "989" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48700", + "durability": null, + "name": "Crystal key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "990" + }, + { + "ge_buy_limit": "100", + "examine": "It looks like the key to a chest", + "grand_exchange_price": "4971", + "durability": null, + "name": "Muddy key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "991" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4971", + "durability": null, + "name": "Muddy key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "992" + }, + { + "ge_buy_limit": "100", + "examine": "You get a sense of dread from this key.", + "grand_exchange_price": "54600", + "durability": null, + "name": "Sinister key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "993" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "54600", + "durability": null, + "name": "Sinister key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "994" + }, + { + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "995" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A mostly clean apron.", + "grand_exchange_price": "93", + "durability": null, + "name": "White apron", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "1005", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "White apron", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1006" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A bright red cape.", + "grand_exchange_price": "187", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1007", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1008" + }, + { + "ge_buy_limit": "100", + "examine": "I'd prefer a gold one.", + "grand_exchange_price": "65", + "durability": null, + "name": "Brass necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1009", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65", + "durability": null, + "name": "Brass necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1010" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "Leg covering favored by women and wizards.", + "grand_exchange_price": "208", + "durability": null, + "name": "Blue skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1011", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "208", + "durability": null, + "name": "Blue skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1012" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A ladies skirt.", + "grand_exchange_price": "216", + "durability": null, + "name": "Pink skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1013", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "216", + "durability": null, + "name": "Pink skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1014" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "Clothing favoured by women and dark wizards.", + "grand_exchange_price": "30", + "durability": null, + "name": "Black skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1015", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Black skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1016" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "grand_exchange_price": "280", + "durability": null, + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "1017", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "280", + "durability": null, + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1018" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A warm black cape.", + "grand_exchange_price": "209", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1019", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "209", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1020" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick blue cape.", + "grand_exchange_price": "504", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1021", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "504", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1022" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick yellow cape.", + "grand_exchange_price": "439", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1023", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "439", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1024" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A black piece of cloth on a string.", + "grand_exchange_price": "111", + "durability": null, + "name": "Eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1025", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "durability": null, + "name": "Eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1026" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick green cape.", + "grand_exchange_price": "1061", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1027", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1061", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1028" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick purple cape.", + "grand_exchange_price": "955", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1029", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "955", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1030" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick orange cape.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "1", + "grand_exchange_price": "1656", + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1031", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1656", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1032" + }, + { + "shop_price": "30", + "ge_buy_limit": "2", + "examine": "A robe worn by worshippers of Zamorak.", + "grand_exchange_price": "2481", + "durability": null, + "name": "Zamorak robe", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1033", + "bonuses": "0,0,0,2,0,0,0,0,3,0,0,0,3,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2481", + "durability": null, + "name": "Zamorak robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1034" + }, + { + "shop_price": "40", + "ge_buy_limit": "2", + "examine": "A robe worn by worshippers of Zamorak.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1259", + "name": "Zamorak robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1035", + "bonuses": "0,0,0,2,0,0,0,0,3,0,3,0,3,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1259", + "durability": null, + "name": "Zamorak robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1036" + }, + { + "destroy_message": "You can get a replacement from Diango.", + "shop_price": "1", + "examine": "A rabbit-like adornment.", + "durability": null, + "name": "Bunny ears", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1037", + "equipment_slot": "0" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Red partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1038", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1500000000", + "durability": null, + "name": "Red partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1039" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Yellow partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1040", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000000", + "durability": null, + "name": "Yellow partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1041" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Blue partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1042", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2100000000", + "durability": null, + "name": "Blue partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1043" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Green partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1044", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1300000000", + "durability": null, + "name": "Green partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1045" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Purple partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1046", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1000000000", + "durability": null, + "name": "Purple partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1047" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "White partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1048", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2000000000", + "durability": null, + "name": "White partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1049" + }, + { + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "It's a Santa hat.", + "durability": null, + "weight": "0.1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5", + "name": "Santa hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "1050" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "112600000", + "durability": null, + "name": "Santa hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1051" + }, + { + "shop_price": "450", + "examine": "The cape worn by members of the Legends Guild.", + "durability": null, + "name": "Cape of legends", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "1052", + "bonuses": "0,0,0,0,0,7,7,7,7,7,7,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "shop_price": "15", + "ge_buy_limit": "2", + "examine": "Aaaarrrghhh ... I'm a monster.", + "durability": null, + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "98000000", + "name": "Green h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1053" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "98000000", + "durability": null, + "name": "Green h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1054" + }, + { + "remove_head": "true", + "shop_price": "15", + "ge_buy_limit": "2", + "examine": "Aaaarrrghhh ... I'm a monster.", + "durability": null, + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "115900000", + "name": "Blue h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1055" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "115900000", + "durability": null, + "name": "Blue h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1056" + }, + { + "remove_head": "true", + "shop_price": "15", + "ge_buy_limit": "2", + "examine": "Aaaarrrghhh ... I'm a monster.", + "durability": null, + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "154300000", + "name": "Red h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1057" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "154300000", + "durability": null, + "name": "Red h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1058" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "These will keep my hands warm!", + "grand_exchange_price": "12", + "durability": null, + "name": "Leather gloves", + "tradeable": "true", + "weight": "0.23", + "archery_ticket_price": "0", + "id": "1059", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "12", + "durability": null, + "name": "Leather gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1060" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "Comfortable leather boots.", + "grand_exchange_price": "144", + "durability": null, + "name": "Leather boots", + "tradeable": "true", + "weight": "0.34", + "archery_ticket_price": "0", + "id": "1061", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "144", + "durability": null, + "name": "Leather boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1062" + }, + { + "shop_price": "18", + "ge_buy_limit": "5000", + "examine": "Better than no armour!", + "grand_exchange_price": "13", + "durability": null, + "name": "Leather vambraces", + "tradeable": "true", + "weight": "0.22", + "archery_ticket_price": "0", + "id": "1063", + "bonuses": "0,0,0,0,4,2,2,1,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13", + "durability": null, + "name": "Leather vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1064" + }, + { + "requirements": "{4,40}", + "shop_price": "2500", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "0.28", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "1407", + "name": "Green d'hide vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1065", + "bonuses": "0,0,0,-10,8,3,2,4,2,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1407", + "durability": null, + "name": "Green d'hide vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1066" + }, + { + "shop_price": "280", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "1,0,1", + "equipment_slot": "7", + "grand_exchange_price": "55", + "name": "Iron platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1067", + "bonuses": "0,0,0,-21,-7,11,10,10,-4,10,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "55", + "durability": null, + "name": "Iron platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1068" + }, + { + "requirements": "{1,5}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "1,0,1", + "equipment_slot": "7", + "grand_exchange_price": "426", + "name": "Steel platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1069", + "bonuses": "0,0,0,-21,-7,17,16,15,-4,16,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "426", + "durability": null, + "name": "Steel platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1070" + }, + { + "requirements": "{1,20}", + "shop_price": "2600", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "7.7", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "1391", + "name": "Mithril platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1071", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1391", + "durability": null, + "name": "Mithril platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1072" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "10", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "3649", + "name": "Adamant platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1073", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3649", + "durability": null, + "name": "Adamant platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1074" + }, + { + "shop_price": "80", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "grand_exchange_price": "34", + "durability": null, + "name": "Bronze platelegs", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "1075", + "bonuses": "0,0,0,-21,-7,8,7,6,-4,7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34", + "durability": null, + "name": "Bronze platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1076" + }, + { + "requirements": "{1,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "These look pretty heavy", + "durability": null, + "weight": "9", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "4995", + "name": "Black platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1077", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4995", + "durability": null, + "name": "Black platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1078" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "38500", + "name": "Rune platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1079", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38500", + "durability": null, + "name": "Rune platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1080" + }, + { + "shop_price": "280", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "grand_exchange_price": "86", + "durability": null, + "name": "Iron plateskirt", + "tradeable": "true", + "weight": "8.1", + "archery_ticket_price": "0", + "id": "1081", + "bonuses": "0,0,0,-21,-7,11,10,10,-4,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "86", + "durability": null, + "name": "Iron plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1082" + }, + { + "requirements": "{1,5}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "8.1", + "equipment_slot": "7", + "grand_exchange_price": "514", + "name": "Steel plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1083", + "bonuses": "0,0,0,-21,-7,17,16,15,-4,16,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "514", + "durability": null, + "name": "Steel plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1084" + }, + { + "requirements": "{1,20}", + "shop_price": "2600", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "7.2", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "1339", + "name": "Mithril plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1085", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1339", + "durability": null, + "name": "Mithril plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1086" + }, + { + "shop_price": "80", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "grand_exchange_price": "113", + "durability": null, + "name": "Bronze plateskirt", + "tradeable": "true", + "weight": "8.1", + "archery_ticket_price": "0", + "id": "1087", + "bonuses": "0,0,0,-21,-7,8,7,6,-4,7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "113", + "durability": null, + "name": "Bronze plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1088" + }, + { + "requirements": "{1,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "8", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "2180", + "name": "Black plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1089", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2180", + "durability": null, + "name": "Black plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1090" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "3610", + "name": "Adamant plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1091", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3610", + "durability": null, + "name": "Adamant plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1092" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "8", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "38100", + "name": "Rune plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1093", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38100", + "durability": null, + "name": "Rune plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1094" + }, + { + "shop_price": "23", + "ge_buy_limit": "5000", + "examine": "Better than no armour!", + "grand_exchange_price": "5", + "durability": null, + "name": "Leather chaps", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1095", + "bonuses": "0,0,0,0,4,2,2,1,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5", + "durability": null, + "name": "Leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1096" + }, + { + "requirements": "{4,20}", + "shop_price": "750", + "ge_buy_limit": "1000", + "examine": "Those studs should provide a bit more protection.", + "durability": null, + "weight": "4.5", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "377", + "name": "Studded chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1097", + "bonuses": "0,0,0,-5,6,15,16,17,6,16,5,0,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "377", + "durability": null, + "name": "Studded chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1098" + }, + { + "requirements": "{4,40}", + "shop_price": "3900", + "ge_buy_limit": "5000", + "examine": "100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,4,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2228", + "name": "Green d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1099", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2228", + "durability": null, + "name": "Green d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1100" + }, + { + "shop_price": "210", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "76", + "durability": null, + "name": "Iron chainbody", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "1101", + "bonuses": "0,0,0,-15,0,10,15,19,-3,12,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "76", + "durability": null, + "name": "Iron chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1102" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "37", + "durability": null, + "name": "Bronze chainbody", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "1103", + "bonuses": "0,0,0,-15,0,7,11,13,-3,9,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "37", + "durability": null, + "name": "Bronze chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1104" + }, + { + "requirements": "{1,5}", + "shop_price": "750", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6", + "equipment_slot": "4", + "grand_exchange_price": "265", + "name": "Steel chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1105", + "bonuses": "0,0,0,-15,0,17,25,30,-3,19,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "265", + "durability": null, + "name": "Steel chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1106" + }, + { + "requirements": "{1,10}", + "shop_price": "1440", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6.8", + "absorb": "1,0,2", + "equipment_slot": "4", + "grand_exchange_price": "961", + "name": "Black chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1107", + "bonuses": "0,0,0,-15,0,22,32,39,-3,24,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "961", + "durability": null, + "name": "Black chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1108" + }, + { + "requirements": "{1,20}", + "shop_price": "1950", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "5.8", + "absorb": "1,0,3", + "equipment_slot": "4", + "grand_exchange_price": "963", + "name": "Mithril chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1109", + "bonuses": "0,0,0,-15,0,25,35,42,-3,27,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "963", + "durability": null, + "name": "Mithril chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1110" + }, + { + "requirements": "{1,30}", + "shop_price": "4800", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "7.7", + "absorb": "2,0,4", + "equipment_slot": "4", + "grand_exchange_price": "2731", + "name": "Adamant chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1111", + "bonuses": "0,0,0,-15,0,36,50,61,-3,38,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2731", + "durability": null, + "name": "Adamant chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1112" + }, + { + "requirements": "{1,40}", + "shop_price": "50000", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6.8", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "29800", + "name": "Rune chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1113", + "bonuses": "0,0,0,-15,0,63,72,78,-3,65,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29800", + "durability": null, + "name": "Rune chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1114" + }, + { + "shop_price": "560", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.95", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "434", + "name": "Iron platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1115", + "bonuses": "0,0,0,-30,-10,21,20,12,-6,20,5,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "434", + "durability": null, + "name": "Iron platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1116" + }, + { + "shop_price": "160", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.5", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "36", + "name": "Bronze platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1117", + "bonuses": "0,0,0,-30,-10,15,14,9,-6,14,5,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "36", + "durability": null, + "name": "Bronze platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1118" + }, + { + "requirements": "{1,5}", + "shop_price": "2000", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1077", + "name": "Steel platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1119", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1077", + "durability": null, + "name": "Steel platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1120" + }, + { + "requirements": "{1,20}", + "shop_price": "5200", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "8.6", + "absorb": "1,0,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "2965", + "name": "Mithril platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1121", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,20,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "2965", + "durability": null, + "name": "Mithril platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1122" + }, + { + "requirements": "{1,30}", + "shop_price": "16256", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "11", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "9790", + "name": "Adamant platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1123", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "9790", + "durability": null, + "name": "Adamant platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1124" + }, + { + "requirements": "{1,10}", + "shop_price": "3840", + "ge_buy_limit": "500", + "examine": "Provides Excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "4915", + "name": "Black platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1125", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "4915", + "durability": null, + "name": "Black platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1126" + }, + { + "requirements": "{1,40}", + "shop_price": "65000", + "ge_buy_limit": "100", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "38800", + "name": "Rune platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1127", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38800", + "durability": null, + "name": "Rune platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1128" + }, + { + "shop_price": "20", + "ge_buy_limit": "1000", + "examine": "Better than no armour!", + "grand_exchange_price": "34", + "durability": null, + "name": "Leather body", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "1129", + "bonuses": "0,0,0,-2,2,8,9,10,4,9,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "34", + "durability": null, + "name": "Leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1130" + }, + { + "requirements": "{1,10}", + "shop_price": "170", + "ge_buy_limit": "1000", + "examine": "Harder than normal leather.", + "durability": null, + "weight": "3.6", + "absorb": "0,2,1", + "equipment_slot": "4", + "grand_exchange_price": "43", + "name": "Hardleather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1131", + "bonuses": "0,0,0,-4,8,12,15,18,6,15,10,0,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "43", + "durability": null, + "name": "Hardleather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1132" + }, + { + "requirements": "{1,20}-{4,20}", + "shop_price": "850", + "ge_buy_limit": "1000", + "examine": "These studs should provide a bit more protection.", + "durability": null, + "weight": "5", + "absorb": "0,3,1", + "equipment_slot": "4", + "grand_exchange_price": "414", + "name": "Studded body", + "tradeable": "true", + "archery_ticket_price": "150", + "id": "1133", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "414", + "durability": null, + "name": "Studded body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1134" + }, + { + "requirements": "{1,40}-{4,40}", + "shop_price": "7800", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "4544", + "name": "Green d'hide body", + "tradeable": "true", + "archery_ticket_price": "2400", + "id": "1135", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4544", + "durability": null, + "name": "Green d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1136" + }, + { + "remove_head": "true", + "shop_price": "84", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "22", + "name": "Iron med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1137", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22", + "durability": null, + "name": "Iron med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1138" + }, + { + "remove_head": "true", + "shop_price": "24", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "39", + "name": "Bronze med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1139", + "bonuses": "0,0,0,-3,-1,3,4,2,-1,3,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "39", + "durability": null, + "name": "Bronze med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1140" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "52", + "name": "Steel med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1141", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "52", + "durability": null, + "name": "Steel med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1142" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.3", + "equipment_slot": "0", + "grand_exchange_price": "272", + "name": "Mithril med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1143", + "bonuses": "0,0,0,-3,-1,10,11,9,-1,10,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "272", + "durability": null, + "name": "Mithril med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1144" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "1024", + "name": "Adamant med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1145", + "bonuses": "0,0,0,-3,-1,14,15,13,-1,14,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1024", + "durability": null, + "name": "Adamant med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1146" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "19200", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "11400", + "name": "Rune med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1147", + "bonuses": "0,0,0,-3,-1,22,23,21,-1,22,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11400", + "durability": null, + "name": "Rune med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1148" + }, + { + "remove_head": "true", + "requirements": "{1,60}", + "ge_buy_limit": "100", + "examine": "Makes the wearer pretty intimidating.", + "durability": null, + "weight": "1.3", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "60500", + "name": "Dragon med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1149", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60500", + "durability": null, + "name": "Dragon med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1150" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "shop_price": "530", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "242", + "name": "Black med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1151", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "242", + "durability": null, + "name": "Black med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1152" + }, + { + "remove_head": "true", + "shop_price": "61", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "56", + "name": "Iron full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1153", + "bonuses": "0,0,0,-6,-2,6,7,5,-1,6,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Iron full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1154" + }, + { + "remove_head": "true", + "shop_price": "44", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "67", + "name": "Bronze full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1155", + "bonuses": "0,0,0,-6,-2,4,5,3,-1,4,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "67", + "durability": null, + "name": "Bronze full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1156" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "550", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "195", + "name": "Steel full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1157", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Steel full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1158" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "1430", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "675", + "name": "Mithril full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1159", + "bonuses": "0,0,0,-6,-2,13,14,11,-1,13,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "675", + "durability": null, + "name": "Mithril full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1160" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "shop_price": "3520", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "1911", + "name": "Adamant full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1161", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1911", + "durability": null, + "name": "Adamant full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1162" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "20900", + "name": "Rune full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1163", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20900", + "durability": null, + "name": "Rune full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1164" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "shop_price": "1372", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "731", + "name": "Black full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1165", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "731", + "durability": null, + "name": "Black full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1166" + }, + { + "remove_head": "true", + "shop_price": "24", + "ge_buy_limit": "5000", + "examine": "Better than no armour!", + "durability": null, + "weight": "0.9", + "equipment_slot": "0", + "grand_exchange_price": "9", + "name": "Leather cowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1167", + "bonuses": "0,0,0,0,1,2,3,4,2,3,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "9", + "durability": null, + "name": "Leather cowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1168" + }, + { + "remove_head": "true", + "requirements": "{4,20}", + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "Light weight head protection.", + "durability": null, + "weight": "0.9", + "equipment_slot": "0", + "grand_exchange_price": "56", + "name": "Coif", + "tradeable": "true", + "archery_ticket_price": "100", + "id": "1169", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,5,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "56", + "durability": null, + "name": "Coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1170" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A solid wooden shield.", + "grand_exchange_price": "483", + "durability": null, + "name": "Wooden shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1171", + "bonuses": "0,0,0,0,0,4,5,3,1,4,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "483", + "durability": null, + "name": "Wooden shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1172" + }, + { + "shop_price": "48", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze sq shield", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1173", + "bonuses": "0,0,0,-6,-2,5,6,4,0,5,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1174" + }, + { + "shop_price": "168", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "grand_exchange_price": "39", + "durability": null, + "name": "Iron sq shield", + "tradeable": "true", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "1175", + "bonuses": "0,0,0,-6,-2,8,9,7,0,8,1,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "39", + "durability": null, + "name": "Iron sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1176" + }, + { + "requirements": "{1,5}", + "shop_price": "600", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3", + "equipment_slot": "5", + "grand_exchange_price": "185", + "name": "Steel sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1177", + "bonuses": "0,0,0,-6,-2,12,13,11,0,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "185", + "durability": null, + "name": "Steel sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1178" + }, + { + "requirements": "{1,10}", + "shop_price": "1463", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "511", + "name": "Black sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1179", + "bonuses": "0,0,0,-6,-2,15,16,14,0,15,9,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "511", + "durability": null, + "name": "Black sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1180" + }, + { + "requirements": "{1,20}", + "shop_price": "1560", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3.1", + "absorb": "2,0,4", + "equipment_slot": "5", + "grand_exchange_price": "744", + "name": "Mithril sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1181", + "bonuses": "0,0,0,-6,-2,17,19,15,0,17,18,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "744", + "durability": null, + "name": "Mithril sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1182" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2136", + "name": "Adamant sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1183", + "bonuses": "0,0,0,-6,-2,24,26,22,0,24,25,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2136", + "durability": null, + "name": "Adamant sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1184" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3.64", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "22800", + "name": "Rune sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1185", + "bonuses": "0,0,0,-6,-2,38,40,36,0,38,35,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22800", + "durability": null, + "name": "Rune sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1186" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "An ancient and powerful looking Dragon Square shield.", + "durability": null, + "weight": "3", + "absorb": "5,0,11", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "431900", + "name": "Dragon sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1187", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "431900", + "durability": null, + "name": "Dragon sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1188" + }, + { + "shop_price": "86", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "grand_exchange_price": "18", + "durability": null, + "name": "Bronze kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "1189", + "bonuses": "0,0,0,-8,-2,5,7,6,-1,6,1,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Bronze kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1190" + }, + { + "shop_price": "233", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "grand_exchange_price": "57", + "durability": null, + "name": "Iron kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "1191", + "bonuses": "0,0,0,-8,-2,8,10,9,-1,9,2,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57", + "durability": null, + "name": "Iron kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1192" + }, + { + "requirements": "{1,5}", + "shop_price": "850", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "equipment_slot": "5", + "grand_exchange_price": "354", + "name": "Steel kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1193", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "354", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1194" + }, + { + "requirements": "{1,10}", + "shop_price": "2121", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "3311", + "name": "Black kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1195", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3311", + "durability": null, + "name": "Black kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1196" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "4.5", + "absorb": "2,0,4", + "equipment_slot": "5", + "grand_exchange_price": "1128", + "name": "Mithril kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1197", + "bonuses": "0,0,0,-8,-2,18,22,20,-1,20,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1128", + "durability": null, + "name": "Mithril kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1198" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.8", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3066", + "name": "Adamant kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1199", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3066", + "durability": null, + "name": "Adamant kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1200" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "35600", + "name": "Rune kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1201", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35600", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1202" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "35", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1203", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35", + "durability": null, + "name": "Iron dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1204" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "105", + "attack_audios": "2517,2517,2500,2517", + "name": "Bronze dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1205", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "105", + "durability": null, + "name": "Bronze dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1206" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "17", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1207", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Steel dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1208" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "71", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1209", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "71", + "durability": null, + "name": "Mithril dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1210" + }, + { + "requirements": "{0,30}", + "shop_price": "816", + "ge_buy_limit": "100", + "examine": "Short and deadly.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "300", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1211", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "300", + "durability": null, + "name": "Adamant dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1212" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "lendable": "true", + "grand_exchange_price": "4642", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1213", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4642", + "durability": null, + "name": "Rune dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1214" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "17700", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1215", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "17700", + "durability": null, + "name": "Dragon dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1216" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "79", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1217", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "79", + "durability": null, + "name": "Black dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1218" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "56", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1219", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Iron dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1220" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "86", + "attack_audios": "2517,2517,2500,2517", + "name": "Bronze dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1221", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "86", + "durability": null, + "name": "Bronze dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1222" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "98", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1223", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98", + "durability": null, + "name": "Steel dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1224" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "129", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1225", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "129", + "durability": null, + "name": "Mithril dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1226" + }, + { + "requirements": "{0,30}", + "shop_price": "816", + "ge_buy_limit": "100", + "examine": "Short and deadly.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "365", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1227", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "365", + "durability": null, + "name": "Adamant dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1228" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "lendable": "true", + "grand_exchange_price": "4831", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1229", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4831", + "durability": null, + "name": "Rune dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1230" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "17600", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1231", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "17600", + "durability": null, + "name": "Dragon dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1232" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "67", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1233", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "67", + "durability": null, + "name": "Black dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1234" + }, + { + "durability": null, + "name": "Poisoned dagger(p)", + "archery_ticket_price": "0", + "id": "1235", + "render_anim": "2584" + }, + { + "durability": null, + "name": "Poisoned dagger(p)", + "archery_ticket_price": "0", + "id": "1236" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "858", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1237", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0", + "shop_price": "26", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Bronze spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "858", + "durability": null, + "name": "Bronze spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1238" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "209", + "stand_anim": "813", + "tradeable": "true", + "name": "Iron spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1239", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "209", + "durability": null, + "name": "Iron spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1240" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "340", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1241", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0", + "requirements": "{0,5}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Steel spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "340", + "durability": null, + "name": "Steel spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1242" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "353", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1243", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0", + "requirements": "{0,20}", + "durability": null, + "weight": "1.8", + "weapon_interface": "14", + "render_anim": "28", + "name": "Mithril spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "353", + "durability": null, + "name": "Mithril spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1244" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "1191", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1245", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0", + "requirements": "{0,30}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Adamant spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "durability": null, + "name": "Adamant spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1246" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "12200", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1247", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0", + "requirements": "{0,40}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Rune spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12200", + "durability": null, + "name": "Rune spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1248" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "37200", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1249", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "37200", + "durability": null, + "name": "Dragon spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1250", + "defence_anim": "2079" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "389", + "stand_anim": "813", + "tradeable": "true", + "name": "Bronze spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1251", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "389", + "durability": null, + "name": "Bronze spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1252" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "212", + "stand_anim": "813", + "tradeable": "true", + "name": "Iron spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1253", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "212", + "durability": null, + "name": "Iron spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1254" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "136", + "stand_anim": "813", + "tradeable": "true", + "name": "Steel spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1255", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "136", + "durability": null, + "name": "Steel spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1256" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "350", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1257", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0", + "requirements": "{0,20}", + "durability": null, + "weight": "1.8", + "weapon_interface": "14", + "render_anim": "28", + "name": "Mithril spear(p)" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "350", + "durability": null, + "name": "Mithril spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1258" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "1004", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1259", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0", + "requirements": "{0,30}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Adamant spear(p)" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1004", + "durability": null, + "name": "Adamant spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1260" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "12400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1261", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0", + "requirements": "{0,40}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Rune spear(p)" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12400", + "durability": null, + "name": "Rune spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1262" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "39700", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1263", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear(p)" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "39700", + "durability": null, + "name": "Dragon spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1264" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.25", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "17", + "attack_audios": "2508,2508,2508,2508", + "name": "Bronze pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1265", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Bronze pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1266" + }, + { + "shop_price": "140", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.25", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "200", + "attack_audios": "2508,2508,2508,2508", + "name": "Iron pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1267", + "bonuses": "5,-2,3,0,0,0,1,0,0,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "200", + "durability": null, + "name": "Iron pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1268" + }, + { + "requirements": "{0,5}", + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.25", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "571", + "attack_audios": "2508,2508,2508,2508", + "name": "Steel pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1269", + "bonuses": "8,-2,6,0,0,0,1,0,0,0,0,9,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "571", + "durability": null, + "name": "Steel pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1270" + }, + { + "requirements": "{0,30}-{14,31}", + "shop_price": "3200", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.7", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "1782", + "attack_audios": "2508,2508,2508,2508", + "name": "Adamant pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1271", + "bonuses": "17,-2,15,0,0,0,1,0,0,0,0,19,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1782", + "durability": null, + "name": "Adamant pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1272" + }, + { + "requirements": "{0,20}", + "shop_price": "1300", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "611", + "attack_audios": "2508,2508,2508,2508", + "name": "Mithril pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1273", + "bonuses": "12,-2,10,0,0,0,1,0,0,0,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "611", + "durability": null, + "name": "Mithril pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1274" + }, + { + "requirements": "{0,40}-{14,41}", + "shop_price": "32000", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.2", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "lendable": "true", + "grand_exchange_price": "19500", + "attack_audios": "2508,2508,2508,2508", + "name": "Rune pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1275", + "bonuses": "26,-2,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19500", + "durability": null, + "name": "Rune pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1276" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "13", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1277", + "stand_turn_anim": "823", + "bonuses": "4,3,-2,0,0,0,2,1,0,0,0,5,0,0,0", + "shop_price": "33", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Bronze sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Bronze sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1278" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "17", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1279", + "stand_turn_anim": "823", + "bonuses": "6,4,-2,0,0,0,2,1,0,0,0,7,0,0,0", + "shop_price": "91", + "durability": null, + "weight": "1.8", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Iron sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Iron sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1280" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "79", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1281", + "stand_turn_anim": "823", + "bonuses": "11,8,-2,0,0,0,2,1,0,0,0,12,0,0,0", + "requirements": "{0,5}", + "shop_price": "412", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Steel sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "79", + "durability": null, + "name": "Steel sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1282" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "197", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1283", + "stand_turn_anim": "823", + "bonuses": "14,10,-2,0,0,0,2,1,0,0,0,12,0,0,0", + "requirements": "{0,10}", + "shop_price": "624", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Black sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "197", + "durability": null, + "name": "Black sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1284" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "313", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1285", + "stand_turn_anim": "823", + "bonuses": "16,11,-2,0,0,0,2,1,0,0,0,17,0,0,0", + "requirements": "{0,20}", + "shop_price": "266", + "durability": null, + "weight": "1.5", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Mithril sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "313", + "durability": null, + "name": "Mithril sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1286" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "1046", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1287", + "stand_turn_anim": "823", + "bonuses": "23,18,-2,0,0,0,2,1,0,0,0,24,0,0,0", + "requirements": "{0,30}", + "shop_price": "2080", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Adamant sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1046", + "durability": null, + "name": "Adamant sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1288" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "12300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1289", + "stand_turn_anim": "823", + "bonuses": "38,26,-2,0,0,0,2,1,0,0,0,39,0,0,0", + "requirements": "{0,40}", + "shop_price": "20800", + "durability": null, + "weight": "1.8", + "weapon_interface": "5", + "render_anim": "1381", + "lendable": "true", + "attack_audios": "2500,2500,2517,2500", + "name": "Rune sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12300", + "durability": null, + "name": "Rune sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1290" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "14", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1291", + "stand_turn_anim": "823", + "bonuses": "4,5,-2,0,0,0,3,2,0,0,0,7,0,0,0", + "shop_price": "23", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Bronze longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Bronze longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1292" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "22", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1293", + "stand_turn_anim": "823", + "bonuses": "6,8,-2,0,0,0,3,2,0,0,0,10,0,0,0", + "shop_price": "177", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Iron longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22", + "durability": null, + "name": "Iron longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1294" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "147", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1295", + "stand_turn_anim": "823", + "bonuses": "9,14,-2,0,0,0,3,2,0,0,0,16,0,0,0", + "requirements": "{0,5}", + "shop_price": "500", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Steel longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Steel longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1296" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "384", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1297", + "stand_turn_anim": "823", + "bonuses": "13,18,-2,0,0,0,3,2,0,0,0,16,0,0,0", + "requirements": "{0,10}", + "shop_price": "960", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Black longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "durability": null, + "name": "Black longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1298" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "602", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1299", + "stand_turn_anim": "823", + "bonuses": "15,20,-2,0,0,0,3,2,0,0,0,22,0,0,0", + "requirements": "{0,20}", + "shop_price": "1074", + "durability": null, + "weight": "1.5", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Mithril longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "602", + "durability": null, + "name": "Mithril longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1300" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "1808", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1301", + "stand_turn_anim": "823", + "bonuses": "20,29,-2,0,0,0,3,2,0,0,0,31,0,0,0", + "requirements": "{0,30}", + "shop_price": "3200", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Adamant longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1808", + "durability": null, + "name": "Adamant longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1302" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "19000", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1303", + "stand_turn_anim": "823", + "bonuses": "38,47,-2,0,0,0,3,2,0,0,0,49,0,0,0", + "requirements": "{0,40}", + "shop_price": "32000", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "lendable": "true", + "attack_audios": "2500,2500,2517,2500", + "name": "Rune longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19000", + "durability": null, + "name": "Rune longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1304" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A very powerful sword.", + "walk_anim": "1146", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "60200", + "stand_anim": "809", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1305", + "stand_turn_anim": "823", + "bonuses": "58,69,-2,0,0,0,3,2,0,0,0,71,0,0,0", + "requirements": "{0,60}", + "shop_price": "100000", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1426", + "lendable": "true", + "attack_audios": "2500,2500,2517,2500", + "name": "Dragon longsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "60200", + "durability": null, + "name": "Dragon longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1306" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "89", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1307", + "stand_turn_anim": "7040", + "bonuses": "-4,9,8,-4,0,0,0,0,0,-1,0,10,0,0,0", + "shop_price": "160", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Bronze 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "89", + "durability": null, + "name": "Bronze 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1308" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "32", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1309", + "stand_turn_anim": "7040", + "bonuses": "-4,13,10,-4,0,0,0,0,0,-1,0,14,0,0,0", + "shop_price": "260", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Iron 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "32", + "durability": null, + "name": "Iron 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1310" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "411", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1311", + "stand_turn_anim": "7040", + "bonuses": "-4,21,16,-4,0,0,0,0,0,-1,0,22,0,0,0", + "requirements": "{0,5}", + "shop_price": "1000", + "durability": null, + "weight": "3", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Steel 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "411", + "durability": null, + "name": "Steel 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1312" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "1031", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1313", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,-4,0,0,0,0,0,-1,0,26,0,0,0", + "requirements": "{0,10}", + "shop_price": "2400", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Black 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1031", + "durability": null, + "name": "Black 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1314" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "1396", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1315", + "stand_turn_anim": "7040", + "bonuses": "-4,30,24,-4,0,0,0,0,0,-1,0,31,0,0,0", + "requirements": "{0,20}", + "shop_price": "3000", + "durability": null, + "weight": "3.1", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Mithril 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1396", + "durability": null, + "name": "Mithril 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1316" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "3577", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1317", + "stand_turn_anim": "7040", + "bonuses": "-4,43,30,-4,0,0,0,0,0,-1,0,44,0,0,0", + "requirements": "{0,30}", + "shop_price": "6400", + "durability": null, + "weight": "4", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Adamant 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3577", + "durability": null, + "name": "Adamant 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1318" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "38200", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1319", + "stand_turn_anim": "7040", + "bonuses": "-4,69,50,-4,0,0,0,0,0,-1,0,70,0,0,0", + "requirements": "{0,40}", + "shop_price": "40000", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "2503,0,2504,0", + "name": "Rune 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38200", + "durability": null, + "name": "Rune 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1320" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "13", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1321", + "stand_turn_anim": "823", + "bonuses": "1,7,-2,0,0,0,1,0,0,0,0,6,0,0,0", + "shop_price": "40", + "durability": null, + "weight": "1", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Bronze scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Bronze scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1322" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "30", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1323", + "stand_turn_anim": "823", + "bonuses": "2,10,-2,0,0,0,1,0,0,0,0,9,0,0,0", + "shop_price": "112", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Iron scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Iron scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1324" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "101", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1325", + "stand_turn_anim": "823", + "bonuses": "3,15,-2,0,0,0,1,0,0,0,0,14,0,0,0", + "requirements": "{0,5}", + "shop_price": "400", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Steel scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "101", + "durability": null, + "name": "Steel scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1326" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "4498", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1327", + "stand_turn_anim": "823", + "bonuses": "4,19,-2,0,0,0,1,0,0,0,0,14,0,0,0", + "requirements": "{0,10}", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Black scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4498", + "durability": null, + "name": "Black scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1328" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "469", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1329", + "stand_turn_anim": "823", + "bonuses": "5,21,-2,0,0,0,1,0,0,0,0,20,0,0,0", + "requirements": "{0,20}", + "shop_price": "1040", + "durability": null, + "weight": "1.5", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Mithril scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "469", + "durability": null, + "name": "Mithril scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1330" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A viciously curved sword", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "1525", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1331", + "stand_turn_anim": "823", + "bonuses": "6,29,-2,0,0,0,1,0,0,0,0,28,0,0,0", + "requirements": "{0,30}", + "shop_price": "2304", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Adamant scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1525", + "durability": null, + "name": "Adamant scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1332" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "15200", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1333", + "stand_turn_anim": "823", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0", + "requirements": "{0,40}", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "lendable": "true", + "attack_audios": "2500,0,2517,0", + "name": "Rune scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15200", + "durability": null, + "name": "Rune scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1334" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "20", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1335", + "stand_turn_anim": "823", + "bonuses": "-4,-4,11,-4,0,0,0,0,0,0,0,9,0,0,0", + "shop_price": "224", + "durability": null, + "weight": "1.8", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Iron warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Iron warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1336" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "16", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1337", + "stand_turn_anim": "823", + "bonuses": "-4,-4,10,-4,0,0,0,0,0,0,0,8,0,0,0", + "shop_price": "59", + "durability": null, + "weight": "1", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Bronze warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Bronze warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1338" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "283", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1339", + "stand_turn_anim": "823", + "bonuses": "-4,-4,18,-4,0,0,0,0,0,0,0,16,0,0,0", + "requirements": "{0,5}", + "shop_price": "832", + "durability": null, + "weight": "1", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Steel warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "283", + "durability": null, + "name": "Steel warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1340" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "562", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1341", + "stand_turn_anim": "823", + "bonuses": "-4,-4,22,-4,0,0,0,0,0,0,0,19,0,0,0", + "requirements": "{0,10}", + "shop_price": "1274", + "durability": null, + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Black warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "562", + "durability": null, + "name": "Black warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1342" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "1071", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1343", + "stand_turn_anim": "823", + "bonuses": "-4,-4,25,-4,0,0,0,0,0,0,0,20,0,0,0", + "requirements": "{0,20}", + "shop_price": "2158", + "durability": null, + "weight": "1.5", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Mithril warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1071", + "durability": null, + "name": "Mithril warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1344" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "2996", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1345", + "stand_turn_anim": "823", + "bonuses": "-4,-4,33,-4,0,0,0,0,0,0,0,31,0,0,0", + "requirements": "{0,30}", + "shop_price": "5356", + "durability": null, + "weight": "2", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Adamant warhammer" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2996", + "durability": null, + "name": "Adamant warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1346" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "24600", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1347", + "stand_turn_anim": "823", + "bonuses": "-4,-4,53,-4,0,0,0,0,0,0,0,48,0,0,0", + "requirements": "{0,40}", + "shop_price": "41000", + "durability": null, + "weight": "1.8", + "weapon_interface": "10", + "render_anim": "1430", + "lendable": "true", + "attack_audios": "2504,0,0,0", + "name": "Rune warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24600", + "durability": null, + "name": "Rune warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1348" + }, + { + "shop_price": "56", + "ge_buy_limit": "100", + "examine": "A woodcutter's axe.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "2", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "8", + "attack_audios": "2498,2498,2497,2498", + "name": "Iron axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1349", + "bonuses": "-2,5,3,0,0,0,1,0,0,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Iron axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1350" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A woodcutter's axe.", + "durability": null, + "weight": "1.35", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "44", + "attack_audios": "2498,2498,2497,2498", + "name": "Bronze axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1351", + "bonuses": "-2,4,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44", + "durability": null, + "name": "Bronze axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1352" + }, + { + "requirements": "{0,5}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A woodcutter's axe.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "36", + "attack_audios": "2498,2498,2497,2498", + "name": "Steel axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1353", + "bonuses": "-2,8,6,0,0,0,1,0,0,0,0,9,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "36", + "durability": null, + "name": "Steel axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1354" + }, + { + "requirements": "{0,20}", + "shop_price": "660", + "ge_buy_limit": "100", + "examine": "A powerful axe.", + "durability": null, + "weight": "1.1", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "141", + "attack_audios": "2498,2498,2497,2498", + "name": "Mithril axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1355", + "bonuses": "-2,12,10,0,0,0,1,0,0,0,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "141", + "durability": null, + "name": "Mithril axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1356" + }, + { + "requirements": "{0,30}-{8,31}", + "shop_price": "1625", + "ge_buy_limit": "100", + "examine": "A powerful axe.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "592", + "attack_audios": "2498,2498,2497,2498", + "name": "Adamant axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1357", + "bonuses": "-2,17,15,0,0,0,1,0,0,0,0,19,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "592", + "durability": null, + "name": "Adamant axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1358" + }, + { + "requirements": "{0,40}-{8,41}", + "ge_buy_limit": "100", + "examine": "A powerful axe.", + "durability": null, + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "7495", + "attack_audios": "2498,2498,2497,2498", + "name": "Rune axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1359", + "bonuses": "-2,26,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7495", + "durability": null, + "name": "Rune axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1360" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "examine": "A sinister looking axe.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "335", + "attack_audios": "2498,2498,2497,2498", + "name": "Black axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1361", + "bonuses": "-2,10,8,0,0,0,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "335", + "durability": null, + "name": "Black axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1362" + }, + { + "shop_price": "182", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "21", + "attack_audios": "2498,2498,2497,2498", + "name": "Iron battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1363", + "bonuses": "-2,8,5,0,0,0,0,0,0,-1,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Iron battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1364" + }, + { + "requirements": "{0,5}", + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "208", + "attack_audios": "2498,2498,2497,2498", + "name": "Steel battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1365", + "bonuses": "-2,16,11,0,0,0,0,0,0,-1,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "208", + "durability": null, + "name": "Steel battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1366" + }, + { + "requirements": "{0,10}", + "shop_price": "1248", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "556", + "attack_audios": "2498,2498,2497,2498", + "name": "Black battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1367", + "bonuses": "-2,20,15,0,0,0,0,0,0,-1,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "556", + "durability": null, + "name": "Black battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1368" + }, + { + "requirements": "{0,20}", + "shop_price": "1690", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "809", + "attack_audios": "2498,2498,2497,2498", + "name": "Mithril battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1369", + "bonuses": "-2,22,17,0,0,0,0,0,0,-1,0,29,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "809", + "durability": null, + "name": "Mithril battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1370" + }, + { + "requirements": "{0,30}", + "shop_price": "4160", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "3", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "2311", + "attack_audios": "2498,2498,2497,2498", + "name": "Adamant battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1371", + "bonuses": "-2,31,26,0,0,0,0,0,0,-1,0,41,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2311", + "durability": null, + "name": "Adamant battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1372" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "lendable": "true", + "grand_exchange_price": "24800", + "attack_audios": "2498,2498,2497,2498", + "name": "Rune battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1373", + "bonuses": "-2,48,43,0,0,0,0,0,0,-1,0,64,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24800", + "durability": null, + "name": "Rune battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1374" + }, + { + "shop_price": "52", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "15", + "attack_audios": "2498,2498,2497,2498", + "name": "Bronze battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1375", + "bonuses": "-2,6,3,0,0,0,0,0,0,-1,0,9,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "durability": null, + "name": "Bronze battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1376" + }, + { + "requirements": "{0,60}", + "shop_price": "200000", + "ge_buy_limit": "10", + "examine": "A vicious looking axe.", + "has_special": "true", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "lendable": "true", + "grand_exchange_price": "123200", + "attack_audios": "2498,2498,2497,2498", + "name": "Dragon battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1377", + "bonuses": "-2,70,65,0,0,0,0,0,0,-1,0,85,0,0,0" + }, + { + "requirements": "{0,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "123200", + "durability": null, + "name": "Dragon battleaxe", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "1378", + "defence_anim": "397" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "37", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1379", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0", + "shop_price": "15", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "37", + "durability": null, + "name": "Staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1380" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "784", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1381", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,10,0,2,3,1,10,0,0,3,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of air" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "784", + "durability": null, + "name": "Staff of air", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1382" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "890", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1383", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,10,0,2,3,1,10,0,0,3,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of water" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "890", + "durability": null, + "name": "Staff of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1384" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "879", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1385", + "stand_turn_anim": "1209", + "bonuses": "1,-1,9,10,0,2,3,1,10,0,0,5,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of earth" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "879", + "durability": null, + "name": "Staff of earth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1386" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "1330", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1387", + "stand_turn_anim": "1209", + "bonuses": "3,-1,9,10,0,2,3,1,10,0,0,6,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of fire" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1330", + "durability": null, + "name": "Staff of fire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1388" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "58", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1389", + "stand_turn_anim": "1209", + "bonuses": "2,-1,10,10,0,2,3,1,10,0,0,7,0,0,0", + "shop_price": "200", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Magic staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "58", + "durability": null, + "name": "Magic staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1390" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "7963", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1391", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,12,0,2,3,1,12,0,0,32,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "7000", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7963", + "durability": null, + "name": "Battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1392" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9113", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1393", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "19600", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Fire battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9113", + "durability": null, + "name": "Fire battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1394" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9122", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1395", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Water battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9122", + "durability": null, + "name": "Water battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1396" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "8982", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1397", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "7000", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Air battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8982", + "durability": null, + "name": "Air battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1398" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9041", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1399", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Earth battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9041", + "durability": null, + "name": "Earth battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1400" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "25400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1401", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic fire staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25400", + "durability": null, + "name": "Mystic fire staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1402" + }, + { + "requirements": "{0,40}-{6,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "24800", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "true", + "name": "Mystic water staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1403", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24800", + "durability": null, + "name": "Mystic water staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1404" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "25100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1405", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic air staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25100", + "durability": null, + "name": "Mystic air staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1406" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "25400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1407", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "shop_price": "40000", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic earth staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25400", + "durability": null, + "name": "Mystic earth staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1408" + }, + { + "turn90cw_anim": "1207", + "examine": "An ancient staff, formerly the property of Iban.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Iban's staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1409", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,10,0,2,3,1,10,0,0,50,0,0,0" + }, + { + "examine": "An ancient staff, formerly the property of Iban.", + "attack_audios": "2555,0,0,0", + "durability": null, + "name": "Iban's staff", + "weight": "2.2", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "1410", + "bonuses": "10,-1,40,10,0,2,3,1,10,0,0,50,0,0,0" + }, + { + "durability": null, + "name": "Farmer's fork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1412" + }, + { + "durability": null, + "name": "Halberd", + "archery_ticket_price": "0", + "attack_speed": "7", + "id": "1413" + }, + { + "durability": null, + "name": "Halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1414" + }, + { + "attack_audios": "2504,0,0,0", + "durability": null, + "name": "Warhammer", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "1415" + }, + { + "durability": null, + "name": "Warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1416" + }, + { + "durability": null, + "name": "Javelin", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "1417" + }, + { + "durability": null, + "name": "Javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1418" + }, + { + "turn90cw_anim": "821", + "examine": "It's a Scythe.", + "walk_anim": "819", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "22", + "turn180_anim": "820", + "render_anim": "1383", + "defence_anim": "383", + "equipment_slot": "3", + "attack_anims": "382,382,382,382", + "stand_anim": "847", + "name": "Scythe", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1419", + "stand_turn_anim": "823", + "bonuses": "3,8,3,0,0,0,3,1,0,0,0,10,0,0,0" + }, + { + "shop_price": "80", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "7", + "name": "Iron mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1420", + "bonuses": "4,-2,9,0,0,0,0,0,0,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Iron mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1421" + }, + { + "shop_price": "18", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "12", + "name": "Bronze mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1422", + "bonuses": "1,-2,6,0,0,0,0,0,0,0,0,5,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1423" + }, + { + "requirements": "{0,5}", + "shop_price": "225", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "31", + "name": "Steel mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1424", + "bonuses": "7,-2,13,0,0,0,0,0,0,0,0,11,2,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "31", + "durability": null, + "name": "Steel mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1425" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "954", + "name": "Black mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1426", + "bonuses": "8,-2,16,0,0,0,0,0,0,0,0,13,2,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "954", + "durability": null, + "name": "Black mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1427" + }, + { + "requirements": "{0,20}", + "shop_price": "585", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.5", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "157", + "name": "Mithril mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1428", + "bonuses": "11,-2,18,0,0,0,0,0,0,0,0,16,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "157", + "durability": null, + "name": "Mithril mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1429" + }, + { + "requirements": "{0,30}", + "shop_price": "1440", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "673", + "name": "Adamant mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1430", + "bonuses": "13,-2,25,0,0,0,0,0,0,0,0,23,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "673", + "durability": null, + "name": "Adamant mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1431" + }, + { + "requirements": "{0,40}", + "shop_price": "14400", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "lendable": "true", + "grand_exchange_price": "8380", + "name": "Rune mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1432", + "bonuses": "20,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8380", + "durability": null, + "name": "Rune mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1433" + }, + { + "requirements": "{0,60}", + "shop_price": "50000", + "ge_buy_limit": "10", + "examine": "A spiky mace.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "lendable": "true", + "grand_exchange_price": "29300", + "name": "Dragon mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1434", + "bonuses": "40,-2,60,0,0,0,0,0,0,0,0,55,5,0,0" + }, + { + "requirements": "{0,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "29300", + "durability": null, + "name": "Dragon mace", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "1435" + }, + { + "shop_price": "1", + "ge_buy_limit": "25000", + "examine": "An uncharged Rune Stone.", + "grand_exchange_price": "40", + "durability": null, + "name": "Rune essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1436" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "40", + "durability": null, + "name": "Rune essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1437" + }, + { + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "404", + "durability": null, + "name": "Air talisman", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1438" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "404", + "durability": null, + "name": "Air talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1439" + }, + { + "requirements": "{9,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "785", + "durability": null, + "name": "Earth talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1440" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "785", + "durability": null, + "name": "Earth talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1441" + }, + { + "requirements": "{14,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "4140", + "durability": null, + "name": "Fire talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1442" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "4140", + "durability": null, + "name": "Fire talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1443" + }, + { + "requirements": "{5,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "7975", + "durability": null, + "name": "Water talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1444" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "7975", + "durability": null, + "name": "Water talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1445" + }, + { + "requirements": "{20,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "1373", + "durability": null, + "name": "Body talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1446" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1373", + "durability": null, + "name": "Body talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1447" + }, + { + "requirements": "{2,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "285", + "durability": null, + "name": "Mind talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1448" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "285", + "durability": null, + "name": "Mind talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1449" + }, + { + "requirements": "{20,77}", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "3178", + "durability": null, + "name": "Blood talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1450" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "3178", + "durability": null, + "name": "Blood talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1451" + }, + { + "requirements": "{20,35}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "605", + "durability": null, + "name": "Chaos talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1452" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "605", + "durability": null, + "name": "Chaos talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1453" + }, + { + "requirements": "{20,27}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "785", + "durability": null, + "name": "Cosmic talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1454" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "785", + "durability": null, + "name": "Cosmic talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1455" + }, + { + "requirements": "{20,65}", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "2501", + "durability": null, + "name": "Death talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1456" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "2501", + "durability": null, + "name": "Death talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1457" + }, + { + "requirements": "{20,54}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "1219", + "durability": null, + "name": "Law talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1458" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1219", + "durability": null, + "name": "Law talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1459" + }, + { + "durability": null, + "name": "Soul talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1461" + }, + { + "requirements": "{20,44}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "1596", + "durability": null, + "name": "Nature talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1462" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1596", + "durability": null, + "name": "Nature talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1463" + }, + { + "ge_buy_limit": "5000", + "examine": "I can exchange this for equipment.", + "grand_exchange_price": "9", + "durability": null, + "name": "Archery ticket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1464" + }, + { + "examine": "For use on daggers and projectiles.", + "grand_exchange_price": "36", + "durability": null, + "name": "Weapon poison", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1465" + }, + { + "examine": "Some damp wooden sticks.", + "durability": null, + "name": "Damp sticks", + "archery_ticket_price": "0", + "id": "1467" + }, + { + "examine": "Some dry wooden sticks.", + "durability": null, + "name": "Dry sticks", + "archery_ticket_price": "0", + "id": "1468" + }, + { + "examine": "Smashed glass.", + "durability": null, + "name": "Broken glass", + "archery_ticket_price": "0", + "id": "1469" + }, + { + "ge_buy_limit": "100", + "examine": "A small round red bead.", + "grand_exchange_price": "169", + "durability": null, + "name": "Red bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1470" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "169", + "durability": null, + "name": "Red bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1471" + }, + { + "ge_buy_limit": "100", + "examine": "A small round yellow bead.", + "grand_exchange_price": "249", + "durability": null, + "name": "Yellow bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1472" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "249", + "durability": null, + "name": "Yellow bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1473" + }, + { + "ge_buy_limit": "100", + "examine": "A small round black bead.", + "grand_exchange_price": "229", + "durability": null, + "name": "Black bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1474" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "229", + "durability": null, + "name": "Black bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1475" + }, + { + "ge_buy_limit": "100", + "examine": "A small round white bead.", + "grand_exchange_price": "1530", + "durability": null, + "name": "White bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1476" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1530", + "durability": null, + "name": "White bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1477" + }, + { + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "Wizard Mizgog sells these aim-enhancing amulets.", + "grand_exchange_price": "2870", + "durability": null, + "name": "Amulet of accuracy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1478", + "bonuses": "4,4,4,4,4,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2870", + "durability": null, + "name": "Amulet of accuracy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1479" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1481" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1482" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1483" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1484" + }, + { + "examine": "A damp, wet cloth.", + "durability": null, + "name": "Damp cloth", + "archery_ticket_price": "0", + "id": "1485" + }, + { + "examine": "A broken piece of railing.", + "durability": null, + "name": "Piece of railing", + "weight": "2", + "archery_ticket_price": "0", + "id": "1486" + }, + { + "examine": "This horn has restorative properties.", + "grand_exchange_price": "1159", + "durability": null, + "name": "Unicorn horn", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1487" + }, + { + "examine": "A coat of arms of the Ardougne Paladins.", + "durability": null, + "name": "Paladin's badge", + "archery_ticket_price": "0", + "id": "1488" + }, + { + "examine": "A coat of arms of the Ardougne Paladins.", + "durability": null, + "name": "Paladin's badge", + "archery_ticket_price": "0", + "id": "1489" + }, + { + "examine": "A coat of arms of the Ardougne Paladins.", + "durability": null, + "name": "Paladin's badge", + "archery_ticket_price": "0", + "id": "1490" + }, + { + "examine": "On the ground: Curiosity has yet to kill this one...", + "durability": null, + "name": "Witch's cat", + "weight": "1.2", + "archery_ticket_price": "0", + "id": "1491" + }, + { + "examine": "A simple doll with Iban's likeness.", + "durability": null, + "name": "Doll of iban", + "weight": "1", + "archery_ticket_price": "0", + "id": "1492" + }, + { + "examine": "An account of the last times of someone.", + "durability": null, + "name": "Old journal", + "archery_ticket_price": "0", + "id": "1493" + }, + { + "examine": "The tale of Iban.", + "durability": null, + "name": "History of iban", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1494" + }, + { + "shop_price": "5000", + "examine": "Strong dwarvish gloves.", + "durability": null, + "name": "Klank's gauntlets", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1495", + "bonuses": "2,2,2,0,0,8,9,7,0,0,5,2,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "I thought you only saw these in pairs?", + "durability": null, + "name": "Iban's dove", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1496" + }, + { + "examine": "A mystical demonic amulet.", + "durability": null, + "name": "Amulet of othanian", + "archery_ticket_price": "0", + "id": "1497" + }, + { + "examine": "A mystical demonic amulet.", + "durability": null, + "name": "Amulet of doomion", + "archery_ticket_price": "0", + "id": "1498" + }, + { + "examine": "A mystical demonic amulet.", + "durability": null, + "name": "Amulet of holthion", + "archery_ticket_price": "0", + "id": "1499" + }, + { + "examine": "A strange dark liquid.", + "durability": null, + "name": "Iban's shadow", + "archery_ticket_price": "0", + "id": "1500" + }, + { + "examine": "Smells stronger than most spirits.", + "durability": null, + "name": "Dwarf brew", + "archery_ticket_price": "0", + "id": "1501" + }, + { + "examine": "The burnt remains of Iban.", + "durability": null, + "name": "Iban's ashes", + "weight": "0.056", + "archery_ticket_price": "0", + "id": "1502" + }, + { + "examine": "A search warrant for a house in West Ardougne.", + "durability": null, + "name": "Warrant", + "archery_ticket_price": "0", + "id": "1503" + }, + { + "examine": "It doesn't look very tasty.", + "durability": null, + "name": "Hangover cure", + "weight": "2", + "archery_ticket_price": "0", + "id": "1504" + }, + { + "examine": "Maybe I should read this...", + "durability": null, + "name": "A magic scroll", + "archery_ticket_price": "0", + "id": "1505" + }, + { + "remove_head": "true", + "examine": "Stops me from breathing nasty stuff!", + "durability": null, + "name": "Gas mask", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "1506", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Quite a small key (Plague City).", + "durability": null, + "name": "A small key", + "archery_ticket_price": "0", + "id": "1507" + }, + { + "examine": "It seems to say \"hongorer lure\"...", + "durability": null, + "name": "A scruffy note", + "archery_ticket_price": "0", + "id": "1508" + }, + { + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Picture", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1510" + }, + { + "shop_price": "4", + "ge_buy_limit": "25000", + "examine": "A number of wooden logs.", + "grand_exchange_price": "120", + "durability": null, + "name": "Logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1511" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "279", + "durability": null, + "name": "Logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1512" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a magic tree.", + "grand_exchange_price": "680", + "durability": null, + "name": "Magic logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1513" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "1581", + "durability": null, + "name": "Magic logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1514" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a yew tree.", + "grand_exchange_price": "320", + "durability": null, + "name": "Yew logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1515" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "532", + "durability": null, + "name": "Yew logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1516" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a maple tree.", + "grand_exchange_price": "160", + "durability": null, + "name": "Maple logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1517" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "20", + "durability": null, + "name": "Maple logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1518" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a willow tree.", + "grand_exchange_price": "80", + "durability": null, + "name": "Willow logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1519" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "11", + "durability": null, + "name": "Willow logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1520" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from an Oak Tree.", + "grand_exchange_price": "140", + "durability": null, + "name": "Oak logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1521" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "153", + "durability": null, + "name": "Oak logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1522" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "For picking tough locks.", + "grand_exchange_price": "1311", + "durability": null, + "name": "Lockpick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1523" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1311", + "durability": null, + "name": "Lockpick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1524" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy snake weed", + "archery_ticket_price": "0", + "id": "1525" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean snake weed", + "archery_ticket_price": "0", + "id": "1526" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy ardrigal", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1527" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean ardrigal", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1528" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy sito foil", + "archery_ticket_price": "0", + "id": "1529" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean sito foil", + "archery_ticket_price": "0", + "id": "1530" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy volencia moss", + "archery_ticket_price": "0", + "id": "1531" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean volencia moss", + "archery_ticket_price": "0", + "id": "1532" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy rogue's purse", + "archery_ticket_price": "0", + "id": "1533" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean rogue's purse", + "archery_ticket_price": "0", + "id": "1534" + }, + { + "examine": "A piece of map.", + "durability": null, + "name": "Map part", + "archery_ticket_price": "0", + "id": "1535" + }, + { + "examine": "A piece of map.", + "durability": null, + "name": "Map part", + "archery_ticket_price": "0", + "id": "1536" + }, + { + "examine": "A piece of map.", + "durability": null, + "name": "Map part", + "archery_ticket_price": "0", + "id": "1537" + }, + { + "examine": "A map of the route to Crandor.", + "durability": null, + "name": "Crandor map", + "archery_ticket_price": "0", + "id": "1538" + }, + { + "shop_price": "52", + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "59", + "durability": null, + "name": "Steel nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1539" + }, + { + "ge_buy_limit": "100", + "examine": "This provides partial protection from dragon-breath attacks.", + "grand_exchange_price": "637", + "durability": null, + "name": "Anti-dragon shield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "1540", + "bonuses": "0,0,0,0,0,7,9,8,2,8,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "637", + "durability": null, + "name": "Anti-dragon shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1541" + }, + { + "shop_price": "1", + "examine": "A key to Melzar's Maze.", + "durability": null, + "name": "Maze key", + "archery_ticket_price": "0", + "id": "1542" + }, + { + "destroy_message": "You can get another from Dr Harlow in the Blue Moon Inn of Varrock.", + "examine": "A very pointy stick.", + "durability": null, + "name": "Stake", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1549", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "examine": "Deters vampires.", + "grand_exchange_price": "20", + "durability": null, + "name": "Garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1550" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1551" + }, + { + "examine": "Sardine flavoured with doogle leaves.", + "durability": null, + "name": "Doogle sardine", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1552" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1555" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1556" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1557" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1558" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1559" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1560" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1561" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1562" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1563" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1564" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1565" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1566" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1567" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1568" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1569" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1570" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1571" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1572" + }, + { + "examine": "A tasty herb good for seasoning.", + "durability": null, + "name": "Doogle leaves", + "archery_ticket_price": "0", + "id": "1573" + }, + { + "examine": "For feline training expertise.", + "durability": null, + "name": "Cat training medal", + "archery_ticket_price": "0", + "id": "1575", + "equipment_slot": "2" + }, + { + "examine": "Candlestick used during Heroes' Quest.", + "durability": null, + "name": "Pete's candlestick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1577" + }, + { + "durability": null, + "name": "Pete's candlestick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1578" + }, + { + "examine": "This denotes a Master Thief.", + "durability": null, + "name": "Thieves' armband", + "archery_ticket_price": "0", + "id": "1579" + }, + { + "examine": "These will keep my hands cold!", + "durability": null, + "name": "Ice gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1580", + "bonuses": "0,0,0,0,0,0,3,4,0,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Yuck.", + "durability": null, + "name": "Blamish snail slime", + "weight": "1", + "archery_ticket_price": "0", + "id": "1581" + }, + { + "examine": "Made from the finest snail slime.", + "durability": null, + "name": "Blamish oil", + "archery_ticket_price": "0", + "id": "1582" + }, + { + "examine": "Firebird feather.", + "durability": null, + "name": "Fire feather", + "archery_ticket_price": "0", + "id": "1583" + }, + { + "examine": "Apparently my name is Hartigan", + "durability": null, + "name": "Id papers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1584" + }, + { + "examine": "Useful for catching lava eels.", + "durability": null, + "name": "Oily fishing rod", + "weight": "1", + "archery_ticket_price": "0", + "id": "1585" + }, + { + "examine": "This is of use in completing Heroes' Quest. (Heroes' Quest)", + "durability": null, + "name": "Miscellaneous key", + "tradeable": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "1586" + }, + { + "durability": null, + "name": "Miscellaneous key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1587" + }, + { + "examine": "The key I got from Grip. (Heroes' Quest)", + "durability": null, + "name": "Grips' key ring", + "archery_ticket_price": "0", + "id": "1588" + }, + { + "shop_price": "1", + "examine": "I wonder what this unlocks. (Heroes' Quest)", + "durability": null, + "name": "Dusty key", + "archery_ticket_price": "0", + "id": "1590" + }, + { + "examine": "Key to a cell. (Heroes' Quest)", + "durability": null, + "name": "Jail key", + "archery_ticket_price": "0", + "id": "1591" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold rings.", + "grand_exchange_price": "316", + "durability": null, + "name": "Ring mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1592" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "316", + "durability": null, + "name": "Ring mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1593" + }, + { + "examine": "Used to make unholy symbols.", + "durability": null, + "name": "Unholy mould", + "archery_ticket_price": "0", + "id": "1594" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold amulets.", + "grand_exchange_price": "288", + "durability": null, + "name": "Amulet mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1595" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "288", + "durability": null, + "name": "Amulet mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1596" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold necklaces.", + "grand_exchange_price": "269", + "durability": null, + "name": "Necklace mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1597" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "269", + "durability": null, + "name": "Necklace mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1598" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make holy symbols of Saradomin.", + "grand_exchange_price": "504", + "durability": null, + "name": "Holy mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1599" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "504", + "durability": null, + "name": "Holy mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1600" + }, + { + "ge_buy_limit": "500", + "examine": "This looks valuable.", + "grand_exchange_price": "14800", + "durability": null, + "name": "Diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1601" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "14800", + "durability": null, + "name": "Diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1602" + }, + { + "shop_price": "400", + "ge_buy_limit": "1000", + "examine": "This looks valuable.", + "grand_exchange_price": "1598", + "durability": null, + "name": "Ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1603" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1598", + "durability": null, + "name": "Ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1604" + }, + { + "shop_price": "350", + "ge_buy_limit": "1000", + "examine": "This looks valuable.", + "grand_exchange_price": "853", + "durability": null, + "name": "Emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1605" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "853", + "durability": null, + "name": "Emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1606" + }, + { + "shop_price": "175", + "ge_buy_limit": "1000", + "examine": "This looks valuable.", + "grand_exchange_price": "520", + "durability": null, + "name": "Sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1607" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "520", + "durability": null, + "name": "Sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1608" + }, + { + "ge_buy_limit": "1000", + "shop_price": "100", + "examine": "A semi precious stone.", + "grand_exchange_price": "44", + "durability": null, + "name": "Opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1609" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "41", + "durability": null, + "name": "Opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1610" + }, + { + "ge_buy_limit": "1000", + "shop_price": "150", + "grand_exchange_price": "84", + "examine": "A semi precious stone.", + "durability": null, + "name": "Jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1611" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "83", + "durability": null, + "name": "Jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1612" + }, + { + "ge_buy_limit": "1000", + "shop_price": "200", + "examine": "A semi precious stone.", + "grand_exchange_price": "120", + "durability": null, + "name": "Red topaz", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1613" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "103", + "durability": null, + "name": "Red topaz", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1614" + }, + { + "shop_price": "75000", + "ge_buy_limit": "100", + "examine": "This looks valuable.", + "grand_exchange_price": "27400", + "durability": null, + "name": "Dragonstone", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1615" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27400", + "durability": null, + "name": "Dragonstone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1616" + }, + { + "ge_buy_limit": "500", + "examine": "An uncut diamond.", + "grand_exchange_price": "2160", + "tokkul_price": "300", + "durability": null, + "name": "Uncut diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1617" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "20000", + "durability": null, + "name": "Uncut diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1618" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut ruby.", + "grand_exchange_price": "1140", + "tokkul_price": "150", + "durability": null, + "name": "Uncut ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1619" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4970", + "durability": null, + "name": "Uncut ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1620" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "An uncut emerald.", + "grand_exchange_price": "580", + "tokkul_price": "75", + "durability": null, + "name": "Uncut emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1621" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2621", + "durability": null, + "name": "Uncut emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1622" + }, + { + "shop_price": "25", + "ge_buy_limit": "1000", + "examine": "An uncut sapphire.", + "grand_exchange_price": "420", + "tokkul_price": "37", + "durability": null, + "name": "Uncut sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1623" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1851", + "durability": null, + "name": "Uncut sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1624" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut opal.", + "grand_exchange_price": "65", + "durability": null, + "name": "Uncut opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1625" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "65", + "durability": null, + "name": "Uncut opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1626" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut jade.", + "grand_exchange_price": "138", + "durability": null, + "name": "Uncut jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1627" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "138", + "durability": null, + "name": "Uncut jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1628" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut red topaz.", + "grand_exchange_price": "279", + "durability": null, + "name": "Uncut red topaz", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1629" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "279", + "durability": null, + "name": "Uncut red topaz", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1630" + }, + { + "shop_price": "75000", + "ge_buy_limit": "100", + "examine": "An uncut dragonstone.", + "grand_exchange_price": "31700", + "tokkul_price": "1500", + "durability": null, + "name": "Uncut dragonstone", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1631" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "31700", + "durability": null, + "name": "Uncut dragonstone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1632" + }, + { + "examine": "This gem is crushed and broken.", + "durability": null, + "name": "Crushed gem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1633" + }, + { + "durability": null, + "name": "Crushed gem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1634" + }, + { + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "165", + "durability": null, + "name": "Gold ring", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "id": "1635", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "165", + "durability": null, + "name": "Gold ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1636" + }, + { + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "561", + "durability": null, + "name": "Sapphire ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1637", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "561", + "durability": null, + "name": "Sapphire ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1638" + }, + { + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "884", + "durability": null, + "name": "Emerald ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1639", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "884", + "durability": null, + "name": "Emerald ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1640" + }, + { + "shop_price": "2025", + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "1110", + "durability": null, + "name": "Ruby ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1641", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1110", + "durability": null, + "name": "Ruby ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1642" + }, + { + "shop_price": "3172", + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "4416", + "durability": null, + "name": "Diamond ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1643", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4416", + "durability": null, + "name": "Diamond ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1644" + }, + { + "shop_price": "7750", + "ge_buy_limit": "100", + "examine": "A valuable ring.", + "grand_exchange_price": "26700", + "durability": null, + "name": "Dragonstone ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1645", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26700", + "durability": null, + "name": "Dragonstone ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1646" + }, + { + "examine": "A valuable ring.", + "grand_exchange_price": "547", + "durability": null, + "name": "Sapphire ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1649" + }, + { + "examine": "A valuable ring.", + "grand_exchange_price": "993", + "durability": null, + "name": "Emerald ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1650" + }, + { + "shop_price": "2025", + "examine": "A valuable ring.", + "grand_exchange_price": "1125", + "durability": null, + "name": "Ruby ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1651" + }, + { + "shop_price": "3172", + "examine": "A valuable ring.", + "grand_exchange_price": "3622", + "durability": null, + "name": "Diamond ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1652" + }, + { + "shop_price": "7750", + "examine": "A valuable ring.", + "grand_exchange_price": "19606", + "durability": null, + "name": "Dragonstone ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1653" + }, + { + "shop_price": "450", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "185", + "durability": null, + "name": "Gold necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1654", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "185", + "durability": null, + "name": "Gold necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1655" + }, + { + "shop_price": "945", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "534", + "durability": null, + "name": "Sapphire necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1656", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "534", + "durability": null, + "name": "Sapphire necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1657" + }, + { + "shop_price": "1425", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "781", + "durability": null, + "name": "Emerald necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1658", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "781", + "durability": null, + "name": "Emerald necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1659" + }, + { + "shop_price": "870", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Ruby necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1660", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1276", + "durability": null, + "name": "Ruby necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1661" + }, + { + "shop_price": "3307", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "14300", + "durability": null, + "name": "Diamond necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1662", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "14300", + "durability": null, + "name": "Diamond necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1663" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1664", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1665" + }, + { + "shop_price": "945", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "532", + "durability": null, + "name": "Sapphire necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1668" + }, + { + "shop_price": "1425", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "741", + "durability": null, + "name": "Emerald necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1669" + }, + { + "shop_price": "870", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "1194", + "durability": null, + "name": "Ruby necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1670" + }, + { + "shop_price": "3307", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "9795", + "durability": null, + "name": "Diamond necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1671" + }, + { + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "23010", + "durability": null, + "name": "Dragon necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1672" + }, + { + "shop_price": "350", + "ge_buy_limit": "5000", + "examine": "A plain gold amulet.", + "grand_exchange_price": "172", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1673" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "172", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1674" + }, + { + "shop_price": "810", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "473", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1675" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "473", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1676" + }, + { + "shop_price": "1147", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "695", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1677" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "695", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1678" + }, + { + "shop_price": "2025", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1268", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1679" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1268", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1680" + }, + { + "shop_price": "3307", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "3359", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1681" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3359", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1682" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "26900", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1683" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26900", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1684" + }, + { + "shop_price": "810", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "417", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1687" + }, + { + "shop_price": "1147", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "648", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1688" + }, + { + "shop_price": "2025", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1098", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1689" + }, + { + "shop_price": "3307", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1993", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1690" + }, + { + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "18436", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1691" + }, + { + "shop_price": "350", + "ge_buy_limit": "5000", + "examine": "A plain gold amulet.", + "grand_exchange_price": "137", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1692", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "137", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1693" + }, + { + "shop_price": "810", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "435", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1694", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "435", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1695" + }, + { + "shop_price": "1147", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "659", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1696", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "659", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1697" + }, + { + "shop_price": "2025", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1115", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1698", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1115", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1699" + }, + { + "shop_price": "3307", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "2706", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1700", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2706", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1701" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "27100", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1702", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27100", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1703" + }, + { + "ge_buy_limit": "100", + "examine": "A very powerful dragonstone amulet.", + "grand_exchange_price": "28000", + "durability": null, + "name": "Amulet of glory", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1704", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1705" + }, + { + "examine": "A dragonstone amulet with 1 magic charge.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1706", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1707" + }, + { + "examine": "A dragonstone amulet with 2 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1708", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1709" + }, + { + "examine": "A dragonstone amulet with 3 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1710", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1711" + }, + { + "ge_buy_limit": "100", + "examine": "A dragonstone amulet with 4 magic charges.", + "grand_exchange_price": "29300", + "durability": null, + "name": "Amulet of glory(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1712", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1713" + }, + { + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "It needs a string so I can wear it.", + "grand_exchange_price": "83", + "durability": null, + "name": "Unstrung symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1714" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "83", + "durability": null, + "name": "Unstrung symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1715" + }, + { + "shop_price": "120", + "ge_buy_limit": "5000", + "examine": "A symbol of Saradomin.", + "grand_exchange_price": "29", + "durability": null, + "name": "Unblessed symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1716", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "29", + "durability": null, + "name": "Unblessed symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1717" + }, + { + "shop_price": "300", + "ge_buy_limit": "5000", + "examine": "A blessed holy symbol of Saradomin.", + "grand_exchange_price": "88", + "durability": null, + "name": "Holy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1718", + "bonuses": "0,0,0,0,0,2,2,2,2,2,3,0,8,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "88", + "durability": null, + "name": "Holy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1719" + }, + { + "ge_buy_limit": "5000", + "examine": "It needs a string so I can wear it.", + "grand_exchange_price": "178", + "durability": null, + "name": "Unstrung emblem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1720" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "178", + "durability": null, + "name": "Unstrung emblem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1721" + }, + { + "shop_price": "120", + "ge_buy_limit": "5000", + "examine": "An unholy symbol of Zamorak.", + "grand_exchange_price": "24", + "durability": null, + "name": "Unpowered symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1722", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "24", + "durability": null, + "name": "Unpowered symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1723" + }, + { + "shop_price": "135", + "ge_buy_limit": "5000", + "examine": "An unholy symbol of Zamorak.", + "grand_exchange_price": "57", + "durability": null, + "name": "Unholy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1724", + "bonuses": "2,2,2,2,2,0,0,0,0,0,0,0,8,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "examine": "An enchanted ruby amulet.", + "grand_exchange_price": "1247", + "durability": null, + "name": "Amulet of strength", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1725", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,10,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1247", + "durability": null, + "name": "Amulet of strength", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1726" + }, + { + "shop_price": "900", + "ge_buy_limit": "5000", + "examine": "An enchanted sapphire amulet of magic.", + "grand_exchange_price": "519", + "durability": null, + "name": "Amulet of magic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1727", + "bonuses": "0,0,0,10,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "519", + "durability": null, + "name": "Amulet of magic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1728" + }, + { + "shop_price": "1275", + "ge_buy_limit": "5000", + "examine": "An enchanted emerald amulet of protection.", + "grand_exchange_price": "721", + "durability": null, + "name": "Amulet of defence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1729", + "bonuses": "0,0,0,0,0,7,7,7,7,7,7,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "721", + "durability": null, + "name": "Amulet of defence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1730" + }, + { + "shop_price": "3525", + "ge_buy_limit": "5000", + "examine": "An enchanted diamond amulet of power.", + "grand_exchange_price": "2573", + "durability": null, + "name": "Amulet of power", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1731", + "bonuses": "6,6,6,6,6,6,6,6,6,6,6,6,1,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2573", + "durability": null, + "name": "Amulet of power", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1732" + }, + { + "shop_price": "1", + "ge_buy_limit": "5000", + "examine": "Used with a thread to make clothes.", + "grand_exchange_price": "5", + "durability": null, + "name": "Needle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1733" + }, + { + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Use with a needle to make clothes.", + "grand_exchange_price": "7", + "durability": null, + "name": "Thread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1734" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "For shearing sheep.", + "grand_exchange_price": "76", + "durability": null, + "name": "Shears", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1735" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "76", + "durability": null, + "name": "Shears", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1736" + }, + { + "ge_buy_limit": "5000", + "examine": "I think this came from a sheep.", + "grand_exchange_price": "160", + "durability": null, + "name": "Wool", + "tradeable": "true", + "weight": "0.14", + "archery_ticket_price": "0", + "id": "1737" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "160", + "durability": null, + "name": "Wool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1738" + }, + { + "ge_buy_limit": "10000", + "examine": "I should take this to the tannery.", + "grand_exchange_price": "140", + "durability": null, + "name": "Cowhide", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "1739" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "516", + "durability": null, + "name": "Cowhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1740" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of leather.", + "grand_exchange_price": "638", + "durability": null, + "name": "Leather", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "1741" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "638", + "durability": null, + "name": "Leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1742" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of hard leather.", + "grand_exchange_price": "640", + "durability": null, + "name": "Hard leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1743" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "640", + "durability": null, + "name": "Hard leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1744" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared green dragon hide.", + "grand_exchange_price": "2237", + "durability": null, + "name": "Green d-leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1745" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2237", + "durability": null, + "name": "Green d-leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1746" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a Black Dragon.", + "grand_exchange_price": "5802", + "durability": null, + "name": "Black dragonhide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1747" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5802", + "durability": null, + "name": "Black dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1748" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a red dragon.", + "grand_exchange_price": "3539", + "durability": null, + "name": "Red dragonhide", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1749" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3539", + "durability": null, + "name": "Red dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1750" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a blue dragon.", + "grand_exchange_price": "2473", + "durability": null, + "name": "Blue dragonhide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1751" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2473", + "durability": null, + "name": "Blue dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1752" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a green dragon.", + "grand_exchange_price": "1000", + "durability": null, + "name": "Green dragonhide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1753" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1933", + "durability": null, + "name": "Green dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1754" + }, + { + "shop_price": "14", + "ge_buy_limit": "100", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "20", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1755" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1756" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A mostly clean apron.", + "grand_exchange_price": "74", + "durability": null, + "name": "Brown apron", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "1757", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Brown apron", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1758" + }, + { + "ge_buy_limit": "5000", + "examine": "Spun from sheeps' wool.", + "grand_exchange_price": "115", + "durability": null, + "name": "Ball of wool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1759" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "115", + "durability": null, + "name": "Ball of wool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1760" + }, + { + "ge_buy_limit": "10000", + "examine": "Clay soft enough to mould.", + "grand_exchange_price": "487", + "durability": null, + "name": "Soft clay", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1761" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "487", + "durability": null, + "name": "Soft clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1762" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of red dye.", + "grand_exchange_price": "1374", + "durability": null, + "name": "Red dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1763" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1374", + "durability": null, + "name": "Red dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1764" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of yellow dye.", + "grand_exchange_price": "549", + "durability": null, + "name": "Yellow dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1765" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "549", + "durability": null, + "name": "Yellow dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1766" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of blue dye", + "grand_exchange_price": "642", + "durability": null, + "name": "Blue dye", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1767" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "642", + "durability": null, + "name": "Blue dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1768" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of orange dye.", + "grand_exchange_price": "1258", + "durability": null, + "name": "Orange dye", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1769" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1258", + "durability": null, + "name": "Orange dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1770" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of green dye.", + "grand_exchange_price": "503", + "durability": null, + "name": "Green dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1771" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "503", + "durability": null, + "name": "Green dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1772" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of purple dye.", + "grand_exchange_price": "288", + "durability": null, + "name": "Purple dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1773" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "288", + "durability": null, + "name": "Purple dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1774" + }, + { + "ge_buy_limit": "10000", + "examine": "Hot glass ready to be blown into useful objects.", + "grand_exchange_price": "924", + "durability": null, + "name": "Molten glass", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1775" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "924", + "durability": null, + "name": "Molten glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1776" + }, + { + "ge_buy_limit": "10000", + "examine": "I need a bow stave to attach this to.", + "grand_exchange_price": "240", + "durability": null, + "name": "Bow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1777" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "223", + "durability": null, + "name": "Bow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1778" + }, + { + "shop_price": "73", + "ge_buy_limit": "25000", + "examine": "A plant cultivated for fibres (ground); I should use this with a spinning wheel (item).", + "grand_exchange_price": "73", + "durability": null, + "name": "Flax", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1779" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "73", + "durability": null, + "name": "Flax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1780" + }, + { + "ge_buy_limit": "10000", + "examine": "One of the ingredients for making glass.", + "grand_exchange_price": "575", + "durability": null, + "name": "Soda ash", + "tradeable": "true", + "weight": "0.09", + "archery_ticket_price": "0", + "id": "1781" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "575", + "durability": null, + "name": "Soda ash", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1782" + }, + { + "ge_buy_limit": "10000", + "examine": "One of the ingredients for making glass.", + "grand_exchange_price": "265", + "durability": null, + "name": "Bucket of sand", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "1783" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "265", + "durability": null, + "name": "Bucket of sand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1784" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to form molten glass into useful items.", + "grand_exchange_price": "195", + "durability": null, + "name": "Glassblowing pipe", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1785" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Glassblowing pipe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1786" + }, + { + "ge_buy_limit": "100", + "examine": "I need to put this in a pottery oven.", + "grand_exchange_price": "53", + "durability": null, + "name": "Unfired pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1787" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "53", + "durability": null, + "name": "Unfired pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1788" + }, + { + "ge_buy_limit": "100", + "examine": "I need to put this in a pottery oven.", + "grand_exchange_price": "96", + "durability": null, + "name": "Unfired pie dish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1789" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "96", + "durability": null, + "name": "Unfired pie dish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1790" + }, + { + "shop_price": "32", + "ge_buy_limit": "100", + "examine": "I need to put this in a pottery oven.", + "grand_exchange_price": "194", + "durability": null, + "name": "Unfired bowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1791" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "194", + "durability": null, + "name": "Unfired bowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1792" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A slightly bluish leaf.", + "grand_exchange_price": "57", + "durability": null, + "name": "Woad leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1793" + }, + { + "ge_buy_limit": "100", + "examine": "Useful for crafting items.", + "grand_exchange_price": "249", + "durability": null, + "name": "Bronze wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1794" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "249", + "durability": null, + "name": "Bronze wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1795" + }, + { + "examine": "Anna's shiny silver coated necklace.", + "durability": null, + "name": "Silver necklace", + "weight": "1", + "archery_ticket_price": "0", + "id": "1796", + "equipment_slot": "2" + }, + { + "examine": "Anna's shiny silver coated necklace.", + "durability": null, + "name": "Silver necklace", + "weight": "1", + "archery_ticket_price": "0", + "id": "1797", + "equipment_slot": "2" + }, + { + "examine": "Bob's shiny silver coated tea cup.", + "durability": null, + "name": "Silver cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1798" + }, + { + "examine": "Bob's shiny silver coated tea cup.", + "durability": null, + "name": "Silver cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1799" + }, + { + "examine": "Carol's shiny silver coated bottle.", + "durability": null, + "name": "Silver bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1800" + }, + { + "examine": "Carol's shiny silver coated bottle.", + "durability": null, + "name": "Silver bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1801" + }, + { + "examine": "David's shiny silver coated book.", + "durability": null, + "name": "Silver book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1802" + }, + { + "examine": "David's shiny silver coated book.", + "durability": null, + "name": "Silver book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1803" + }, + { + "examine": "Elizabeth's shiny silver coated needle.", + "durability": null, + "name": "Silver needle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1804" + }, + { + "examine": "Elizabeth's shiny silver coated needle.", + "durability": null, + "name": "Silver needle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1805" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1806" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1807" + }, + { + "examine": "Some (colour) thread found at the murder scene.", + "durability": null, + "name": "Criminal's thread", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1808" + }, + { + "examine": "Some (colour) thread found at the murder scene.", + "durability": null, + "name": "Criminal's thread", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1809" + }, + { + "examine": "Some (colour) thread found at the murder scene.", + "durability": null, + "name": "Criminal's thread", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1810" + }, + { + "examine": "A piece of fly paper. It's sticky.", + "durability": null, + "name": "Flypaper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1811" + }, + { + "examine": "A pot found at the murder scene, with a sickly odour.", + "durability": null, + "name": "Pungent pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1812" + }, + { + "examine": "A flimsy-looking dagger found at the crime scene./A flimsy looking dagger found at the crime scene coated with a thin layer of flour.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Criminal's dagger", + "archery_ticket_price": "0", + "id": "1813" + }, + { + "examine": "A flimsy-looking dagger found at the crime scene./A flimsy looking dagger found at the crime scene coated with a thin layer of flour.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Criminal's dagger", + "archery_ticket_price": "0", + "id": "1814" + }, + { + "examine": "The fingerprints of the murderer.", + "durability": null, + "name": "Killer's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1815" + }, + { + "examine": "An imprint of Anna's fingerprint.", + "durability": null, + "name": "Anna's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1816" + }, + { + "examine": "An imprint of Bob's fingerprint.", + "durability": null, + "name": "Bob's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1817" + }, + { + "examine": "An imprint of Carol's fingerprint.", + "durability": null, + "name": "Carol's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1818" + }, + { + "examine": "An imprint of David's fingerprint.", + "durability": null, + "name": "David's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1819" + }, + { + "examine": "An imprint of Elizabeth's fingerprint.", + "durability": null, + "name": "Elizabeth's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1820" + }, + { + "examine": "An imprint of Frank's fingerprint.", + "durability": null, + "name": "Frank's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1821" + }, + { + "examine": "An unidentified fingerprint taken from the murder weapon.", + "durability": null, + "name": "Unknown print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1822" + }, + { + "shop_price": "30", + "ge_buy_limit": "100", + "examine": "A full waterskin with four portions of water.", + "grand_exchange_price": "184", + "durability": null, + "name": "Waterskin(4)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1823" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "184", + "durability": null, + "name": "Waterskin(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1824" + }, + { + "shop_price": "30", + "examine": "A nearly full waterskin with three portions of water.", + "grand_exchange_price": "4", + "durability": null, + "name": "Waterskin(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1825" + }, + { + "durability": null, + "name": "Waterskin(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1826" + }, + { + "shop_price": "30", + "examine": "A half empty waterskin with two portions of water.", + "grand_exchange_price": "4", + "durability": null, + "name": "Waterskin(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1827" + }, + { + "durability": null, + "name": "Waterskin(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1828" + }, + { + "shop_price": "30", + "examine": "A nearly empty waterskin with one portion of water.", + "grand_exchange_price": "4", + "durability": null, + "name": "Waterskin(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1829" + }, + { + "durability": null, + "name": "Waterskin(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1830" + }, + { + "shop_price": "30", + "ge_buy_limit": "100", + "examine": "A completely empty waterskin - you'll need to fill it up.", + "grand_exchange_price": "93", + "durability": null, + "name": "Waterskin(0)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1831" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "Waterskin(0)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1832" + }, + { + "remove_sleeves": "true", + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool, light desert shirt.", + "grand_exchange_price": "93", + "durability": null, + "name": "Desert shirt", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1833", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "Desert shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1834" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool, light desert robe.", + "grand_exchange_price": "74", + "durability": null, + "name": "Desert robe", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1835", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Desert robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1836" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Comfortable desert shoes.", + "grand_exchange_price": "257", + "durability": null, + "name": "Desert boots", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1837", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "257", + "durability": null, + "name": "Desert boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1838" + }, + { + "examine": "This key is crudely made. It came from the mining camp Mercenary Captain.", + "durability": null, + "name": "Metal key", + "archery_ticket_price": "0", + "id": "1839" + }, + { + "examine": "A metallic key, usually used by prison guards. (Tourist Trap)", + "durability": null, + "name": "Cell door key", + "archery_ticket_price": "0", + "id": "1840" + }, + { + "examine": "An empty barrel/A Splendid barrel.", + "grand_exchange_price": "206", + "durability": null, + "name": "Barrel", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "1841" + }, + { + "examine": "Inventory: A mining barrel with Ana in it.While in the mine cart: It's Ana... in a barrel... in a mine cart.", + "durability": null, + "name": "Ana in a barrel", + "weight": "32", + "archery_ticket_price": "0", + "id": "1842" + }, + { + "examine": "This key unlocks a very sturdy gate. Ana gave me this key. (Tourist Trap)", + "durability": null, + "name": "Wrought iron key", + "archery_ticket_price": "0", + "id": "1843" + }, + { + "remove_sleeves": "true", + "examine": "A filthy, smelly, flea infested shirt.", + "durability": null, + "name": "Slave shirt", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1844", + "equipment_slot": "4" + }, + { + "examine": "A filthy, smelly, flea infested robe.", + "durability": null, + "name": "Slave robe", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1845", + "equipment_slot": "7" + }, + { + "examine": "A set of filthy, smelly, flea infested desert slave boots.", + "durability": null, + "name": "Slave boots", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "1846", + "equipment_slot": "10" + }, + { + "examine": "A piece of paper with barely legible writing - looks like a recipe!", + "durability": null, + "name": "Scrumpled paper", + "archery_ticket_price": "0", + "id": "1847" + }, + { + "shop_price": "5", + "examine": "Very important information.", + "durability": null, + "name": "Shantay disclaimer", + "archery_ticket_price": "0", + "id": "1848" + }, + { + "examine": "A prototype throwing dart.", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Prototype dart", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1849" + }, + { + "examine": "Plans of a technical nature.", + "durability": null, + "name": "Technical plans", + "weight": "1", + "archery_ticket_price": "0", + "id": "1850" + }, + { + "examine": "The most delicious of pineapples.", + "durability": null, + "name": "Tenti pineapple", + "weight": "1", + "archery_ticket_price": "0", + "id": "1851" + }, + { + "examine": "A key to the chest in Captain Siad's room.", + "durability": null, + "name": "Bedabin key", + "archery_ticket_price": "0", + "id": "1852" + }, + { + "examine": "A protoype dart tip - it looks deadly.", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Prototype dart tip", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1853" + }, + { + "shop_price": "5", + "examine": "Allows you to pass through the Shantay pass into the Kharid Desert.", + "durability": null, + "name": "Shantay pass", + "archery_ticket_price": "0", + "id": "1854" + }, + { + "examine": "A Tourist's Guide to Ardougne.", + "durability": null, + "name": "Guide book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1856" + }, + { + "examine": "The Rantuki tribe's totem.", + "durability": null, + "name": "Totem", + "weight": "3", + "archery_ticket_price": "0", + "id": "1857" + }, + { + "examine": "It says 'To Lord Handelmort, Handelmort Mansion'.", + "durability": null, + "name": "Address label", + "archery_ticket_price": "0", + "id": "1858" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to cook this first / Freshly cooked ugthanki meat.", + "grand_exchange_price": "486", + "durability": null, + "name": "Raw ugthanki meat", + "tradeable": "true", + "weight": "0.75", + "archery_ticket_price": "0", + "id": "1859" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "486", + "durability": null, + "name": "Raw ugthanki meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1860" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to cook this first / Freshly cooked ugthanki meat.", + "grand_exchange_price": "687", + "durability": null, + "name": "Ugthanki meat", + "tradeable": "true", + "weight": "0.75", + "archery_ticket_price": "0", + "id": "1861" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "687", + "durability": null, + "name": "Ugthanki meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1862" + }, + { + "shop_price": "9", + "ge_buy_limit": "1000", + "examine": "I need to cook this.", + "grand_exchange_price": "90", + "durability": null, + "name": "Pitta dough", + "tradeable": "true", + "weight": "0.14", + "archery_ticket_price": "0", + "id": "1863" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "90", + "durability": null, + "name": "Pitta dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1864" + }, + { + "ge_buy_limit": "1000", + "examine": "Nicely baked pitta bread. Needs more ingredients to make a kebab.", + "grand_exchange_price": "22", + "durability": null, + "name": "Pitta bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1865" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "22", + "durability": null, + "name": "Pitta bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1866" + }, + { + "durability": null, + "name": "Burnt pitta bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1868" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of tomatoes in a bowl.", + "grand_exchange_price": "90", + "durability": null, + "name": "Chopped tomato", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1869" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "90", + "durability": null, + "name": "Chopped tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1870" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of onions in a bowl.", + "grand_exchange_price": "142", + "durability": null, + "name": "Chopped onion", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1871" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "142", + "durability": null, + "name": "Chopped onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1872" + }, + { + "ge_buy_limit": "1000", + "examine": "Strips of ugthanki meat in a bowl.", + "grand_exchange_price": "348", + "durability": null, + "name": "Chopped ugthanki", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1873" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "348", + "durability": null, + "name": "Chopped ugthanki", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1874" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of chopped onions and tomatoes in a bowl", + "grand_exchange_price": "31", + "durability": null, + "name": "Onion & tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1875" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "31", + "durability": null, + "name": "Onion & tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1876" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "A mixture of chopped onions and ugthanki meat in a bowl.", + "grand_exchange_price": "330", + "durability": null, + "name": "Ugthanki & onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1877" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "330", + "durability": null, + "name": "Ugthanki & onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1878" + }, + { + "ge_buy_limit": "10000", + "examine": "A mixture of chopped tomatoes and ugthanki meat in a bowl.", + "grand_exchange_price": "331", + "durability": null, + "name": "Ugthanki & tomato", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "1879" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "331", + "durability": null, + "name": "Ugthanki & tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1880" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of chopped tomatoes, onions and ugthanki meat in a bowl", + "grand_exchange_price": "412", + "durability": null, + "name": "Kebab mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1881" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "412", + "durability": null, + "name": "Kebab mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1882" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2027", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1883" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2027", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1884" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1499", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1885" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1499", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1886" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Useful for baking cakes.", + "grand_exchange_price": "20", + "durability": null, + "name": "Cake tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1887" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Cake tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1888" + }, + { + "ge_buy_limit": "1000", + "examine": "Now all I need to do is cook it.", + "grand_exchange_price": "559", + "durability": null, + "name": "Uncooked cake", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1889" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "559", + "durability": null, + "name": "Uncooked cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1890" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "A plain sponge cake.", + "grand_exchange_price": "155", + "durability": null, + "name": "Cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1891" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "155", + "durability": null, + "name": "Cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1892" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "A plain sponge cake.", + "grand_exchange_price": "39", + "durability": null, + "name": "2/3 cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1893" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "39", + "durability": null, + "name": "2/3 cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1894" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "A plain sponge cake.", + "grand_exchange_price": "32", + "durability": null, + "name": "Slice of cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1895" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "32", + "durability": null, + "name": "Slice of cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1896" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks very tasty.", + "grand_exchange_price": "416", + "durability": null, + "name": "Chocolate cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1897" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "416", + "durability": null, + "name": "Chocolate cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1898" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks very tasty.", + "grand_exchange_price": "181", + "durability": null, + "name": "2/3 chocolate cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1899" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "181", + "durability": null, + "name": "2/3 chocolate cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1900" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks very tasty.", + "grand_exchange_price": "13", + "durability": null, + "name": "Chocolate slice", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1901" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Chocolate slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1902" + }, + { + "durability": null, + "name": "Burnt cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1904" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "190", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1905" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "190", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1906" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "171", + "durability": null, + "name": "Wizard's mind bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1907" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "171", + "durability": null, + "name": "Wizard's mind bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1908" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "828", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1909" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "828", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1910" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "487", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1911" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "487", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1912" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "212", + "durability": null, + "name": "Dwarven stout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1913" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "212", + "durability": null, + "name": "Dwarven stout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1914" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A murky glass full of your average, everyday pirate slosh.", + "grand_exchange_price": "19", + "durability": null, + "name": "Grog", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1915" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Grog", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1916" + }, + { + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "202", + "durability": null, + "name": "Beer", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1917", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "202", + "durability": null, + "name": "Beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1918" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "I need to fill this with beer.", + "grand_exchange_price": "10", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1919" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1920" + }, + { + "ge_buy_limit": "100", + "examine": "It's a bowl of water.", + "grand_exchange_price": "97", + "durability": null, + "name": "Bowl of water", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1921" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "97", + "durability": null, + "name": "Bowl of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1922" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "Useful for mixing things.", + "grand_exchange_price": "34", + "durability": null, + "name": "Bowl", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1923" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34", + "durability": null, + "name": "Bowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1924" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "It's an empty bucket.", + "grand_exchange_price": "30", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1925" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1926" + }, + { + "shop_price": "12", + "ge_buy_limit": "1000", + "examine": "It's a bucket of milk.", + "grand_exchange_price": "103", + "durability": null, + "name": "Bucket of milk", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "1927" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "103", + "durability": null, + "name": "Bucket of milk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1928" + }, + { + "ge_buy_limit": "100", + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "72", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1929" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "72", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1930" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "This pot is empty.", + "grand_exchange_price": "6", + "durability": null, + "name": "Empty pot", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "1931" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6", + "durability": null, + "name": "Empty pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1932" + }, + { + "shop_price": "14", + "ge_buy_limit": "1000", + "examine": "There is flour in this pot.", + "grand_exchange_price": "172", + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "1933" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "172", + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1934" + }, + { + "shop_price": "1", + "ge_buy_limit": "10000", + "examine": "This jug is empty.", + "grand_exchange_price": "29", + "durability": null, + "name": "Jug", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1935" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "29", + "durability": null, + "name": "Jug", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1936" + }, + { + "shop_price": "1", + "ge_buy_limit": "10000", + "examine": "It's full of water.", + "grand_exchange_price": "87", + "durability": null, + "name": "Jug of water", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1937" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "87", + "durability": null, + "name": "Jug of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1938" + }, + { + "ge_buy_limit": "5000", + "examine": "A foul smelling thick tar like substance.", + "grand_exchange_price": "103", + "durability": null, + "name": "Swamp tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1939" + }, + { + "shop_price": "38", + "ge_buy_limit": "5000", + "examine": "A tar-like substance mixed with flour and warmed.", + "grand_exchange_price": "342", + "durability": null, + "name": "Raw swamp paste", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1940" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "A tar-like substance mixed with flour and warmed.", + "grand_exchange_price": "1", + "durability": null, + "name": "Swamp paste", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1941" + }, + { + "shop_price": "11", + "ge_buy_limit": "500", + "examine": "This could be used to make a good stew.", + "grand_exchange_price": "91", + "durability": null, + "name": "Potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1942" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "91", + "durability": null, + "name": "Potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1943" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "A nice fresh egg.", + "grand_exchange_price": "99", + "durability": null, + "name": "Egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1944" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "99", + "durability": null, + "name": "Egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1945" + }, + { + "shop_price": "14", + "examine": "There is flour in this pot.", + "grand_exchange_price": "162", + "durability": null, + "name": "Flour", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "1946" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "Some wheat heads.", + "grand_exchange_price": "7", + "durability": null, + "name": "Grain", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "1947" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7", + "durability": null, + "name": "Grain", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1948" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "What a silly hat.", + "grand_exchange_price": "233", + "durability": null, + "name": "Chef's hat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1949", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "233", + "durability": null, + "name": "Chef's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1950" + }, + { + "shop_price": "3", + "ge_buy_limit": "1000", + "examine": "Very bright red berries.", + "grand_exchange_price": "337", + "durability": null, + "name": "Redberries", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1951" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "337", + "durability": null, + "name": "Redberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1952" + }, + { + "ge_buy_limit": "1000", + "examine": "Potentially pastry.", + "grand_exchange_price": "433", + "durability": null, + "name": "Pastry dough", + "tradeable": "true", + "weight": "0.16", + "archery_ticket_price": "0", + "id": "1953" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "433", + "durability": null, + "name": "Pastry dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1954" + }, + { + "shop_price": "36", + "ge_buy_limit": "1000", + "examine": "Keeps the doctor away.", + "grand_exchange_price": "353", + "durability": null, + "name": "Cooking apple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1955" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "353", + "durability": null, + "name": "Cooking apple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1956" + }, + { + "shop_price": "12", + "ge_buy_limit": "1000", + "examine": "A strong smelling onion.", + "grand_exchange_price": "8", + "durability": null, + "name": "Onion", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1957" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8", + "durability": null, + "name": "Onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1958" + }, + { + "ge_buy_limit": "2", + "examine": "Happy Halloween.", + "grand_exchange_price": "273600000", + "durability": null, + "name": "Pumpkin", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1959" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "273600000", + "durability": null, + "name": "Pumpkin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1960" + }, + { + "ge_buy_limit": "2", + "examine": "Happy Easter.", + "grand_exchange_price": "80400000", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1961" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "80400000", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1962" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "263", + "durability": null, + "name": "Banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1963", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "263", + "durability": null, + "name": "Banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1964" + }, + { + "ge_buy_limit": "1000", + "examine": "On ground: Cabbage... yuck!In inventory: Yuck, I don't like cabbage.", + "grand_exchange_price": "41", + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1965" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "41", + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1966" + }, + { + "examine": "On ground: Cabbage... yuck!In inventory: Yuck, I don't like cabbage.", + "grand_exchange_price": "55", + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1967" + }, + { + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1968" + }, + { + "shop_price": "1", + "examine": "A home made spinach thing.", + "durability": null, + "name": "Spinach roll", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1969" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "A meaty kebab.", + "grand_exchange_price": "97", + "durability": null, + "name": "Kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1971" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "97", + "durability": null, + "name": "Kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1972" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Mmmmmmm chocolate.", + "grand_exchange_price": "295", + "durability": null, + "name": "Chocolate bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1973", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "295", + "durability": null, + "name": "Chocolate bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1974" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "It's ground-up chocolate.", + "grand_exchange_price": "370", + "durability": null, + "name": "Chocolate dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1975" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "370", + "durability": null, + "name": "Chocolate dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1976" + }, + { + "examine": "Milk with chocolate in it.", + "durability": null, + "name": "Chocolatey milk", + "weight": "2", + "archery_ticket_price": "0", + "id": "1977" + }, + { + "shop_price": "10", + "ge_buy_limit": "1000", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1978" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1979" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An empty cup.", + "grand_exchange_price": "5", + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1980" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1981" + }, + { + "shop_price": "25", + "ge_buy_limit": "10000", + "examine": "This would make good ketchup.", + "grand_exchange_price": "159", + "durability": null, + "name": "Tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1982" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "159", + "durability": null, + "name": "Tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1983" + }, + { + "shop_price": "1", + "examine": "Rotten to the core!", + "durability": null, + "name": "Rotten apple", + "archery_ticket_price": "0", + "id": "1984" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "It's got holes in it.", + "grand_exchange_price": "188", + "durability": null, + "name": "Cheese", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1985" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "188", + "durability": null, + "name": "Cheese", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1986" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "Good grapes for wine making.", + "grand_exchange_price": "1510", + "durability": null, + "name": "Grapes", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1987" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1510", + "durability": null, + "name": "Grapes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1988" + }, + { + "ge_buy_limit": "2", + "examine": "An optimist would say it is half full.", + "grand_exchange_price": "227700000", + "durability": null, + "name": "Half full wine jug", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1989" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "227700000", + "durability": null, + "name": "Half full wine jug", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1990" + }, + { + "examine": "Oh dear, this wine is terrible!", + "durability": null, + "name": "Jug of bad wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1991" + }, + { + "examine": "Oh dear, this wine is terrible!", + "durability": null, + "name": "Jug of bad wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1992" + }, + { + "shop_price": "128", + "ge_buy_limit": "1000", + "examine": "It's full of wine.", + "grand_exchange_price": "36", + "durability": null, + "name": "Jug of wine", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "1993" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "36", + "durability": null, + "name": "Jug of wine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1994" + }, + { + "examine": "This wine needs to ferment before it can be drunk.", + "durability": null, + "name": "Unfermented wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1995" + }, + { + "examine": "This wine needs to ferment before it can be drunk.", + "durability": null, + "name": "Unfermented wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1996" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "177", + "durability": null, + "name": "Incomplete stew", + "archery_ticket_price": "0", + "id": "1997" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "177", + "durability": null, + "name": "Incomplete stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1998" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "210", + "durability": null, + "name": "Incomplete stew", + "archery_ticket_price": "0", + "id": "1999" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "210", + "durability": null, + "name": "Incomplete stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2000" + }, + { + "shop_price": "1", + "ge_buy_limit": "200", + "examine": "I need to cook this.", + "grand_exchange_price": "600", + "durability": null, + "name": "Uncooked stew", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2001" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "600", + "durability": null, + "name": "Uncooked stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2002" + }, + { + "shop_price": "20", + "ge_buy_limit": "200", + "examine": "It's a meat and potato stew.", + "grand_exchange_price": "1133", + "durability": null, + "name": "Stew", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "2003" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1133", + "durability": null, + "name": "Stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2004" + }, + { + "durability": null, + "name": "Burnt stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2006" + }, + { + "shop_price": "230", + "ge_buy_limit": "1000", + "examine": "This could liven up an otherwise bland stew.", + "grand_exchange_price": "277", + "durability": null, + "name": "Spice", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2007" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "277", + "durability": null, + "name": "Spice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2008" + }, + { + "ge_buy_limit": "200", + "examine": "I need to cook this.", + "grand_exchange_price": "1382", + "durability": null, + "name": "Uncooked curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2009" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1382", + "durability": null, + "name": "Uncooked curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2010" + }, + { + "ge_buy_limit": "200", + "examine": "It's a spicy hot curry.", + "grand_exchange_price": "1001", + "durability": null, + "name": "Curry", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "2011" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1001", + "durability": null, + "name": "Curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2012" + }, + { + "durability": null, + "name": "Burnt curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2014" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "An absolutely clear spirit sold by well-stocked bars.", + "grand_exchange_price": "366", + "durability": null, + "name": "Vodka", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2015" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "durability": null, + "name": "Vodka", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2016" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "This Draynor malt is sold by well-stocked bars.", + "grand_exchange_price": "68", + "durability": null, + "name": "Whisky", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2017" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "68", + "durability": null, + "name": "Whisky", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2018" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A strong spirit that tastes of Juniper; sold at well-stocked bars.", + "grand_exchange_price": "184", + "durability": null, + "name": "Gin", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2019" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "184", + "durability": null, + "name": "Gin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2020" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A strong spirit best served in a large glass.", + "grand_exchange_price": "146", + "durability": null, + "name": "Brandy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2021" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "146", + "durability": null, + "name": "Brandy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2022" + }, + { + "shop_price": "5", + "examine": "A book on tree gnome cocktails.", + "durability": null, + "name": "Cocktail guide", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2023" + }, + { + "durability": null, + "name": "Cocktail guide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2024" + }, + { + "shop_price": "2", + "examine": "Used for mixing cocktails.", + "durability": null, + "name": "Cocktail shaker", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2025" + }, + { + "shop_price": "1", + "examine": "For sipping cocktails.", + "durability": null, + "name": "Cocktail glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2026" + }, + { + "durability": null, + "name": "Cocktail glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2027" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Blurberry Special.", + "grand_exchange_price": "70", + "durability": null, + "name": "Premade blurb' sp.", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2028" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "70", + "durability": null, + "name": "Premade blurb' sp.", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2029" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Chocolate Saturday.", + "grand_exchange_price": "13", + "durability": null, + "name": "Premade choc s'dy", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2030" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Premade choc s'dy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2031" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Drunk Dragon.", + "grand_exchange_price": "34", + "durability": null, + "name": "Premade dr' dragon", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2032" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "34", + "durability": null, + "name": "Premade dr' dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2033" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Fruit Blast.", + "grand_exchange_price": "48", + "durability": null, + "name": "Premade fr' blast", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2034" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "48", + "durability": null, + "name": "Premade fr' blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2035" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Pineapple Punch.", + "grand_exchange_price": "40", + "durability": null, + "name": "Premade p' punch", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2036" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "40", + "durability": null, + "name": "Premade p' punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2037" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Short Green Guy.", + "grand_exchange_price": "33", + "durability": null, + "name": "Premade sgg", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2038" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "33", + "durability": null, + "name": "Premade sgg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2039" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A Premade Wizard Blizzard.", + "grand_exchange_price": "26", + "durability": null, + "name": "Premade wiz blz'd", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2040" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "26", + "durability": null, + "name": "Premade wiz blz'd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2041" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2042" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2043" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2044" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2045" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2046" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2047" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A fresh healthy fruit mix.", + "grand_exchange_price": "285", + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2048" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "285", + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2049" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2050" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2051" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2052" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2053" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "774", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2054" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "774", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2055" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2056" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2057" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2058" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2059" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2060" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2061" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2062" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2063" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "Looks good... smells strong.", + "grand_exchange_price": "5468", + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2064" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5468", + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2065" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2066" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2067" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2068" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2069" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2070" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2071" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2072" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2073" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "272", + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2074" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "272", + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2075" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2076" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2077" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2078" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2079" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A Short Green Guy... looks good.", + "grand_exchange_price": "756", + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2080" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "756", + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2081" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2082" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2083" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A cool refreshing fruit mix.", + "grand_exchange_price": "1802", + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2084" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1802", + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2085" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2086" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2087" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2088" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2089" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2090" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2091" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "506", + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2092" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "506", + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2093" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2094" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2095" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2096" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2097" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2098" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2099" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2100" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2101" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A common fruit, popularly used in cocktails.", + "grand_exchange_price": "86", + "durability": null, + "name": "Lemon", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2102" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "86", + "durability": null, + "name": "Lemon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2103" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a lemon!", + "grand_exchange_price": "29", + "durability": null, + "name": "Lemon chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2104" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "29", + "durability": null, + "name": "Lemon chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2105" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a lemon!", + "grand_exchange_price": "16", + "durability": null, + "name": "Lemon slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2106" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "16", + "durability": null, + "name": "Lemon slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2107" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "A common fruit.", + "grand_exchange_price": "930", + "durability": null, + "name": "Orange", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2108" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "930", + "durability": null, + "name": "Orange", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2109" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh chunks of orange.", + "grand_exchange_price": "46", + "durability": null, + "name": "Orange chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2110" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "46", + "durability": null, + "name": "Orange chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2111" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh orange slices.", + "grand_exchange_price": "163", + "durability": null, + "name": "Orange slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2112" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "163", + "durability": null, + "name": "Orange slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2113" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "It can be cut up into something more manageable with a knife.", + "grand_exchange_price": "45", + "durability": null, + "name": "Pineapple", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "2114" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "45", + "durability": null, + "name": "Pineapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2115" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh chunks of pineapple.", + "grand_exchange_price": "86", + "durability": null, + "name": "Pineapple chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2116" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "86", + "durability": null, + "name": "Pineapple chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2117" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a pineapple!", + "grand_exchange_price": "25", + "durability": null, + "name": "Pineapple ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2118" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "25", + "durability": null, + "name": "Pineapple ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2119" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A common fruit, popularly used in cocktails.", + "grand_exchange_price": "78", + "durability": null, + "name": "Lime", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2120" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "78", + "durability": null, + "name": "Lime", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2121" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh chunks of lime.", + "grand_exchange_price": "16", + "durability": null, + "name": "Lime chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2122" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "16", + "durability": null, + "name": "Lime chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2123" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a lime!", + "grand_exchange_price": "25", + "durability": null, + "name": "Lime slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2124" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "25", + "durability": null, + "name": "Lime slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2125" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "Some rather pretty blue berries picked from a dwellberry bush.", + "grand_exchange_price": "144", + "durability": null, + "name": "Dwellberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2126" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "144", + "durability": null, + "name": "Dwellberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2127" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A common ingredient in gnome cuisine.", + "grand_exchange_price": "275", + "durability": null, + "name": "Equa leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2128" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "275", + "durability": null, + "name": "Equa leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2129" + }, + { + "shop_price": "2", + "ge_buy_limit": "10000", + "examine": "Fresh cream.", + "grand_exchange_price": "58", + "durability": null, + "name": "Pot of cream", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2130" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "58", + "durability": null, + "name": "Pot of cream", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2131" + }, + { + "shop_price": "58", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "282", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2132" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "282", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2133" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "85", + "durability": null, + "name": "Raw rat meat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2134" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "85", + "durability": null, + "name": "Raw rat meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2135" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "307", + "durability": null, + "name": "Raw bear meat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2136" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "307", + "durability": null, + "name": "Raw bear meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2137" + }, + { + "shop_price": "60", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "386", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "2138" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "386", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2139" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "70", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2140" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "70", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2141" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "111", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2142" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "111", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2143" + }, + { + "durability": null, + "name": "Burnt chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2145" + }, + { + "examine": "Oh dear, it's totally burnt!", + "durability": null, + "name": "Burnt meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2146" + }, + { + "durability": null, + "name": "Burnt meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2147" + }, + { + "examine": "A very strange eel.", + "durability": null, + "name": "Raw lava eel", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2148" + }, + { + "examine": "Strange, it looks cooler now it's been cooked.", + "durability": null, + "name": "Lava eel", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "2149" + }, + { + "ge_buy_limit": "10000", + "examine": "A slippery little blighter.", + "grand_exchange_price": "750", + "durability": null, + "name": "Swamp toad", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2150" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "750", + "durability": null, + "name": "Swamp toad", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2151" + }, + { + "ge_buy_limit": "1000", + "examine": "They're a gnome delicacy apparently.", + "grand_exchange_price": "661", + "durability": null, + "name": "Toad's legs", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2152" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "661", + "durability": null, + "name": "Toad's legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2153" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2154" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2155" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Spicy toad's legs", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2156" + }, + { + "durability": null, + "name": "Spicy toad's legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2157" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Seasoned legs", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2158" + }, + { + "durability": null, + "name": "Seasoned legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2159" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Spicy worm", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2160" + }, + { + "durability": null, + "name": "Spicy worm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2161" + }, + { + "ge_buy_limit": "100", + "examine": "They're a gnome delicacy apparently.", + "grand_exchange_price": "24", + "durability": null, + "name": "King worm", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2162" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24", + "durability": null, + "name": "King worm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2163" + }, + { + "shop_price": "1", + "examine": "A deep tin used to make gnome battas in.", + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2164" + }, + { + "shop_price": "10", + "examine": "A shallow tray used to make crunchies in.", + "durability": null, + "name": "Crunchy tray", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2165" + }, + { + "shop_price": "10", + "examine": "A large ovenproof bowl.", + "durability": null, + "name": "Gnomebowl mould", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2166" + }, + { + "examine": "Aluft Gianne's favourite dishes.", + "durability": null, + "name": "Gianne's cook book", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2167" + }, + { + "durability": null, + "name": "Gianne's cook book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2168" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "It's Aluft Gianne's secret mix of spices.", + "grand_exchange_price": "28", + "durability": null, + "name": "Gnome spice", + "tradeable": "true", + "weight": "0.14", + "archery_ticket_price": "0", + "id": "2169" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "28", + "durability": null, + "name": "Gnome spice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2170" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "It's made from a secret recipe.", + "grand_exchange_price": "13", + "durability": null, + "name": "Gianne dough", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2171" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Gianne dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2172" + }, + { + "examine": "This gnome bowl doesn't look very appetizing.", + "durability": null, + "name": "Picture", + "weight": "1", + "archery_ticket_price": "0", + "id": "2173" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2174" + }, + { + "durability": null, + "name": "Burnt gnomebowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2176" + }, + { + "examine": "This gnomebowl is in the early stages of preparation.", + "durability": null, + "name": "Half baked bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2177" + }, + { + "examine": "This gnomebowl needs cooking.", + "durability": null, + "name": "Raw gnomebowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2178" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2179" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2180" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2181" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2182" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2183" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2184" + }, + { + "shop_price": "450", + "ge_buy_limit": "1000", + "examine": "Full of creamy, chocolately goodness.", + "grand_exchange_price": "4400", + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2185" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4400", + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2186" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "2321", + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2187" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2321", + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2188" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2189" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2190" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "454", + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2191" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "454", + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2192" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2193" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2194" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks pretty healthy.", + "grand_exchange_price": "481", + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2195" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "481", + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2196" + }, + { + "examine": "These crunchies don't look very appetising.", + "durability": null, + "name": "Odd crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2197" + }, + { + "durability": null, + "name": "Odd crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2198" + }, + { + "durability": null, + "name": "Burnt crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2200" + }, + { + "examine": "This crunchy is in the early stages of preparation.", + "durability": null, + "name": "Half baked crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2201" + }, + { + "ge_buy_limit": "1000", + "examine": "These crunchies need cooking.", + "grand_exchange_price": "163", + "durability": null, + "name": "Raw crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2202" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2203" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2204" + }, + { + "shop_price": "80", + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "255", + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2205" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "255", + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2206" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2207" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2208" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "Yum... smells good.", + "grand_exchange_price": "816", + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2209" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "816", + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2210" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2211" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2212" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "Yum...smells spicy.", + "grand_exchange_price": "101", + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2213" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "101", + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2214" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2215" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2216" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "1228", + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2217" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1228", + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2218" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Worm Batta.", + "grand_exchange_price": "130", + "durability": null, + "name": "Premade w'm batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2219" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "130", + "durability": null, + "name": "Premade w'm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2220" + }, + { + "ge_buy_limit": "1000", + "examine": "A Premade Toad Batta.", + "grand_exchange_price": "127", + "durability": null, + "name": "Premade t'd batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2221" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "127", + "durability": null, + "name": "Premade t'd batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2222" + }, + { + "ge_buy_limit": "1000", + "examine": "A Premade Cheese and Tomato Batta.", + "grand_exchange_price": "137", + "durability": null, + "name": "Premade c+t batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2223" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "137", + "durability": null, + "name": "Premade c+t batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2224" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Fruit Batta.", + "grand_exchange_price": "131", + "durability": null, + "name": "Premade fr't batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2225" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "131", + "durability": null, + "name": "Premade fr't batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2226" + }, + { + "ge_buy_limit": "1000", + "examine": "A Premade Vegetable Batta.", + "grand_exchange_price": "134", + "durability": null, + "name": "Premade veg batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2227" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "134", + "durability": null, + "name": "Premade veg batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2228" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Chocolate Bomb.", + "grand_exchange_price": "1227", + "durability": null, + "name": "Premade choc bomb", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2229" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1227", + "durability": null, + "name": "Premade choc bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2230" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Tangled Toads Legs.", + "grand_exchange_price": "867", + "durability": null, + "name": "Premade ttl", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2231" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "867", + "durability": null, + "name": "Premade ttl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2232" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Worm Hole.", + "grand_exchange_price": "237", + "durability": null, + "name": "Premade worm hole", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2233" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "237", + "durability": null, + "name": "Premade worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2234" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Vegetable Ball.", + "grand_exchange_price": "233", + "durability": null, + "name": "Premade veg ball", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2235" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "233", + "durability": null, + "name": "Premade veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2236" + }, + { + "ge_buy_limit": "1000", + "examine": "Some Premade Worm Crunchies.", + "grand_exchange_price": "76", + "durability": null, + "name": "Premade w'm crun", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2237" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "76", + "durability": null, + "name": "Premade w'm crun", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2238" + }, + { + "ge_buy_limit": "1000", + "examine": "Some Premade chocchip crunchies.", + "grand_exchange_price": "95", + "durability": null, + "name": "Premade ch' crunch", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2239" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "95", + "durability": null, + "name": "Premade ch' crunch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2240" + }, + { + "ge_buy_limit": "1000", + "examine": "Some premade Spicy Crunchies.", + "grand_exchange_price": "103", + "durability": null, + "name": "Premade s'y crunch", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2241" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "103", + "durability": null, + "name": "Premade s'y crunch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2242" + }, + { + "shop_price": "80", + "ge_buy_limit": "1000", + "examine": "Some premade Toad Crunchies.", + "grand_exchange_price": "43", + "durability": null, + "name": "Premade t'd crunch", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2243" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "43", + "durability": null, + "name": "Premade t'd crunch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2244" + }, + { + "examine": "This batta doesn't look very appetising.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2245" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2246" + }, + { + "durability": null, + "name": "Burnt batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2248" + }, + { + "examine": "This gnome batta is in the early stages of preparation.", + "durability": null, + "name": "Half baked batta", + "archery_ticket_price": "0", + "id": "2249" + }, + { + "shop_price": "1", + "examine": "This gnome batta needs cooking.", + "durability": null, + "name": "Raw batta", + "archery_ticket_price": "0", + "id": "2250" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2251" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2252" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "140", + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2253" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "140", + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2254" + }, + { + "shop_price": "78", + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "271", + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2255" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "271", + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2256" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2257" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2258" + }, + { + "ge_buy_limit": "1000", + "examine": "This smells really good.", + "grand_exchange_price": "260", + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2259" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "260", + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2260" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2261" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2262" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2263" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2264" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2265" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2266" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2267" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2268" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2269" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2270" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2271" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2272" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2273" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2274" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2275" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2276" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "303", + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2277" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "303", + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2278" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2279" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2280" + }, + { + "ge_buy_limit": "1000", + "examine": "Well... It looks healthy.", + "grand_exchange_price": "240", + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2281" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "240", + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2282" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "I need to add some tomato next.", + "grand_exchange_price": "418", + "durability": null, + "name": "Pizza base", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2283" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "418", + "durability": null, + "name": "Pizza base", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2284" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to add some cheese next.", + "grand_exchange_price": "366", + "durability": null, + "name": "Incomplete pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2285" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Incomplete pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2286" + }, + { + "ge_buy_limit": "1000", + "examine": "This needs cooking.", + "grand_exchange_price": "1141", + "durability": null, + "name": "Uncooked pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2287" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1141", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2288" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "A cheese and tomato pizza.", + "grand_exchange_price": "1357", + "durability": null, + "name": "Plain pizza", + "tradeable": "true", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "2289" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1357", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Plain pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2290" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "Half of this plain pizza has been eaten.", + "grand_exchange_price": "238", + "durability": null, + "name": "1/2 plain pizza", + "tradeable": "true", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "2291" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "238", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 plain pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2292" + }, + { + "ge_buy_limit": "1000", + "examine": "A pizza with bits of meat on it.", + "grand_exchange_price": "1012", + "durability": null, + "name": "Meat pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2293" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1012", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Meat pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2294" + }, + { + "ge_buy_limit": "1000", + "examine": "Half of this meat pizza has been eaten.", + "grand_exchange_price": "339", + "durability": null, + "name": "1/2 meat pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2295" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "339", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 meat pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2296" + }, + { + "ge_buy_limit": "1000", + "examine": "A pizza with anchovies.", + "grand_exchange_price": "1573", + "durability": null, + "name": "Anchovy pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2297" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1573", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Anchovy pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2298" + }, + { + "ge_buy_limit": "1000", + "examine": "Half of this anchovy pizza has been eaten.", + "grand_exchange_price": "44", + "durability": null, + "name": "1/2 anchovy pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2299" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "44", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 anchovy pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2300" + }, + { + "ge_buy_limit": "1000", + "examine": "A pizza with bits of pineapple on it.", + "grand_exchange_price": "1469", + "durability": null, + "name": "Pineapple pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2301" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1469", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Pineapple pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2302" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "156", + "examine": "Half of this pineapple pizza has been eaten.", + "durability": null, + "name": "1/2 p'apple pizza", + "archery_ticket_price": "0", + "id": "2303" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 p'apple pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2304" + }, + { + "examine": "Oh dear!", + "durability": null, + "name": "Burnt pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2306" + }, + { + "ge_buy_limit": "1000", + "examine": "Some uncooked dough.", + "grand_exchange_price": "158", + "durability": null, + "name": "Bread dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2307" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "158", + "durability": null, + "name": "Bread dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2308" + }, + { + "shop_price": "24", + "ge_buy_limit": "1000", + "examine": "Nice crispy bread.", + "grand_exchange_price": "110", + "durability": null, + "name": "Bread", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2309" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "110", + "durability": null, + "name": "Bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2310" + }, + { + "durability": null, + "name": "Burnt bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2312" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Deceptively pie shaped.", + "grand_exchange_price": "174", + "durability": null, + "name": "Pie dish", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2313" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "174", + "durability": null, + "name": "Pie dish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2314" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to find a filling for this pie.", + "grand_exchange_price": "887", + "durability": null, + "name": "Pie shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2315" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "887", + "durability": null, + "name": "Pie shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2316" + }, + { + "ge_buy_limit": "1000", + "examine": "This would be much tastier cooked.", + "grand_exchange_price": "781", + "durability": null, + "name": "Uncooked apple pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2317" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "781", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked apple pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2318" + }, + { + "ge_buy_limit": "1000", + "examine": "This would be much healthier cooked.", + "grand_exchange_price": "747", + "durability": null, + "name": "Uncooked meat pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2319" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "747", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2320" + }, + { + "ge_buy_limit": "1000", + "examine": "This would be much more appetising cooked.", + "grand_exchange_price": "802", + "durability": null, + "name": "Uncooked berry pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2321" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "802", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked berry pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2322" + }, + { + "shop_price": "140", + "ge_buy_limit": "1000", + "examine": "Mmm Apple pie.", + "grand_exchange_price": "246", + "durability": null, + "name": "Apple pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2323" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "246", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Apple pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2324" + }, + { + "ge_buy_limit": "1000", + "examine": "Looks tasty.", + "grand_exchange_price": "534", + "durability": null, + "name": "Redberry pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2325" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "534", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Redberry pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2326" + }, + { + "shop_price": "16", + "ge_buy_limit": "1000", + "grand_exchange_price": "160", + "examine": "Not for vegetarians.", + "durability": null, + "name": "Meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2327" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2328" + }, + { + "examine": "I think I left it on the stove too long.", + "durability": null, + "name": "Burnt pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2330" + }, + { + "shop_price": "16", + "ge_buy_limit": "1000", + "grand_exchange_price": "174", + "examine": "Half of it is suitable for vegetarians.", + "durability": null, + "name": "Half a meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2331" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "174", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2332" + }, + { + "ge_buy_limit": "1000", + "examine": "So tasty I kept some for later.", + "grand_exchange_price": "248", + "durability": null, + "name": "Half a redberry pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2333" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "248", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a redberry pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2334" + }, + { + "shop_price": "140", + "ge_buy_limit": "1000", + "examine": "Mmm half an apple pie.", + "grand_exchange_price": "146", + "durability": null, + "name": "Half an apple pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2335" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "146", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half an apple pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2336" + }, + { + "ge_buy_limit": "1000", + "examine": "Raw meat from the oomlie bird.", + "grand_exchange_price": "155", + "durability": null, + "name": "Raw oomlie", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2337" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "155", + "durability": null, + "name": "Raw oomlie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2338" + }, + { + "examine": "A thick green palm leaf used by natives to cook meat.", + "durability": null, + "name": "Palm leaf", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2339" + }, + { + "examine": "A thick green palm leaf used by natives to cook meat.", + "durability": null, + "name": "Palm leaf", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2340" + }, + { + "ge_buy_limit": "1000", + "examine": "Oomlie meat in a palm leaf pouch. It just needs to be cooked.", + "grand_exchange_price": "814", + "durability": null, + "name": "Wrapped oomlie", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2341" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "814", + "durability": null, + "name": "Wrapped oomlie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2342" + }, + { + "ge_buy_limit": "1000", + "examine": "Deliciously cooked oomlie meat in a palm leaf pouch.", + "grand_exchange_price": "1126", + "durability": null, + "name": "Cooked oomlie wrap", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2343" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1126", + "durability": null, + "name": "Cooked oomlie wrap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2344" + }, + { + "durability": null, + "name": "Burnt oomlie wrap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2346" + }, + { + "shop_price": "13", + "ge_buy_limit": "1000", + "examine": "Good for hitting things!", + "grand_exchange_price": "37", + "durability": null, + "name": "Hammer", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "2347" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "37", + "durability": null, + "name": "Hammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2348" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "It's a bar of bronze.", + "grand_exchange_price": "268", + "durability": null, + "name": "Bronze bar", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "2349" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "268", + "durability": null, + "name": "Bronze bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2350" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of iron.", + "grand_exchange_price": "493", + "durability": null, + "name": "Iron bar", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "2351" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "493", + "durability": null, + "name": "Iron bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2352" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of steel.", + "grand_exchange_price": "1266", + "durability": null, + "name": "Steel bar", + "tradeable": "true", + "weight": "1.81", + "archery_ticket_price": "0", + "id": "2353" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1266", + "durability": null, + "name": "Steel bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2354" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of silver.", + "grand_exchange_price": "274", + "durability": null, + "name": "Silver bar", + "tradeable": "true", + "weight": "1.81", + "archery_ticket_price": "0", + "id": "2355" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "274", + "durability": null, + "name": "Silver bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2356" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of gold.", + "grand_exchange_price": "107", + "durability": null, + "name": "Gold bar", + "tradeable": "true", + "weight": "1.81", + "archery_ticket_price": "0", + "id": "2357" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "107", + "durability": null, + "name": "Gold bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2358" + }, + { + "shop_price": "120", + "ge_buy_limit": "10000", + "examine": "It's a bar of mithril.", + "grand_exchange_price": "1920", + "durability": null, + "name": "Mithril bar", + "tradeable": "true", + "weight": "1.6", + "archery_ticket_price": "0", + "id": "2359" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1920", + "durability": null, + "name": "Mithril bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2360" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of adamant.", + "grand_exchange_price": "3306", + "durability": null, + "name": "Adamantite bar", + "tradeable": "true", + "weight": "2.04", + "archery_ticket_price": "0", + "id": "2361" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3306", + "durability": null, + "name": "Adamantite bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2362" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of rune.", + "grand_exchange_price": "13300", + "durability": null, + "name": "Runite bar", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2363" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "13300", + "durability": null, + "name": "Runite bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2364" + }, + { + "examine": "It's a 'perfect' golden bar.", + "durability": null, + "name": "'perfect' gold bar", + "weight": "2", + "archery_ticket_price": "0", + "id": "2365" + }, + { + "requirements": "{13,60}", + "ge_buy_limit": "100", + "examine": "The left half of a Dragon Square Shield.", + "grand_exchange_price": "65800", + "durability": null, + "name": "Shield left half", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2366" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65800", + "durability": null, + "name": "Shield left half", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2367" + }, + { + "requirements": "{13,60}", + "shop_price": "750000", + "ge_buy_limit": "100", + "examine": "The right half of a dragon square shield.", + "grand_exchange_price": "743100", + "durability": null, + "name": "Shield right half", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2368" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "743100", + "durability": null, + "name": "Shield right half", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2369" + }, + { + "shop_price": "100", + "ge_buy_limit": "5000", + "examine": "A set of studs for leather armour.", + "grand_exchange_price": "792", + "durability": null, + "name": "Steel studs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2370" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "792", + "durability": null, + "name": "Steel studs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2371" + }, + { + "destroy_message": "This item will likely break if you put it down, and you will have to go looking for another one.", + "examine": "An old statue of an ogre warrior.", + "durability": null, + "name": "Ogre relic", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2372" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Part of an ogre relic.", + "durability": null, + "name": "Relic part 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2373" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Part of an ogre relic.", + "durability": null, + "name": "Relic part 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2374" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Part of an ogre relic.", + "durability": null, + "name": "Relic part 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2375" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "It's a map.", + "durability": null, + "name": "Skavid map", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "2376" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Very tooth-like.", + "durability": null, + "name": "Ogre tooth", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2377" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Formerly the property of the ogre, Toban", + "durability": null, + "name": "Toban's key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2378" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Handy if you want to break all your teeth.", + "durability": null, + "name": "Rock cake", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2379" + }, + { + "destroy_message": "This item will likely break if you put it down here, and you will have to go looking for another.", + "examine": "Eeeeyeeew!", + "durability": null, + "name": "Fingernails", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2384" + }, + { + "examine": "I can't wear this old thing.", + "durability": null, + "name": "Old robe", + "weight": "1", + "archery_ticket_price": "0", + "id": "2385" + }, + { + "examine": "Looks kind of useless.", + "durability": null, + "name": "Unusual armour", + "weight": "4", + "archery_ticket_price": "0", + "id": "2386" + }, + { + "examine": "Pointy.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Damaged dagger", + "archery_ticket_price": "0", + "id": "2387" + }, + { + "examine": "Useless as an eye patch.", + "durability": null, + "name": "Tattered eye patch", + "archery_ticket_price": "0", + "id": "2388" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "An empty glass vial.", + "grand_exchange_price": "1", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2389" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "An empty glass vial.", + "grand_exchange_price": "1", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2390" + }, + { + "ge_buy_limit": "100", + "examine": "Let's see it fly, now!", + "grand_exchange_price": "350", + "durability": null, + "name": "Ground bat bones", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2391" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "350", + "durability": null, + "name": "Ground bat bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2392" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "It's a stolen bar of gold.", + "durability": null, + "name": "Toban's gold", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2393" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This is meant to be good for spots.", + "grand_exchange_price": "157", + "durability": null, + "name": "Potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2394" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A dangerous magical liquid.", + "durability": null, + "name": "Magic ogre potion", + "archery_ticket_price": "0", + "id": "2395", + "equipment_slot": "3" + }, + { + "examine": "A spell is written on this parchment.", + "durability": null, + "name": "Spell scroll", + "archery_ticket_price": "0", + "id": "2396" + }, + { + "examine": "A tattered old robe.", + "durability": null, + "name": "Shaman robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "2397" + }, + { + "examine": "Deadly.", + "durability": null, + "name": "Cave nightshade", + "archery_ticket_price": "0", + "id": "2398" + }, + { + "turn90cw_anim": "821", + "examine": "The magical sword 'Silverlight'. / The magical sword 'Silverlight', stained black with mushroom ink. (during Shadow of the Storm)", + "walk_anim": "819", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "822", + "attack_speed": "5", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "defence_anim": "388", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "808", + "name": "Silverlight", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "2402", + "stand_turn_anim": "823", + "bonuses": "9,14,-2,0,0,0,3,2,1,0,0,12,0,0,0" + }, + { + "examine": "Scroll containing a powerful enchantment of restoration.", + "durability": null, + "name": "Hazeel scroll", + "weight": "1", + "archery_ticket_price": "0", + "id": "2403" + }, + { + "remove_sleeves": "true", + "examine": "Decorative armour; an heirloom of the Carnillean family.", + "durability": null, + "name": "Carnillean armour", + "weight": "9", + "archery_ticket_price": "0", + "id": "2405", + "bonuses": "0,0,0,0,0,20,14,8,0,0,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "A sign of my commitment to Hazeel.", + "durability": null, + "name": "Hazeel's mark", + "archery_ticket_price": "0", + "id": "2406", + "equipment_slot": "2" + }, + { + "examine": "A child's ball.", + "durability": null, + "name": "Ball", + "archery_ticket_price": "0", + "id": "2407" + }, + { + "examine": "A key to the Witch's house's front door. (Witch's House)", + "durability": null, + "name": "Door key", + "archery_ticket_price": "0", + "id": "2409" + }, + { + "examine": "A very attractive magnet.", + "durability": null, + "name": "Magnet", + "archery_ticket_price": "0", + "id": "2410" + }, + { + "examine": "A cape from the almighty god Saradomin.", + "durability": null, + "name": "Saradomin cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2412", + "bonuses": "0,0,0,10,0,1,1,2,10,0,5,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A cape from the almighty god Guthix.", + "durability": null, + "name": "Guthix cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2413", + "bonuses": "0,0,0,10,0,1,1,2,10,0,5,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A cape from the almighty god Zamorak.", + "durability": null, + "name": "Zamorak cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2414", + "bonuses": "0,0,0,10,0,1,1,2,10,0,5,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "80000", + "examine": "A magical staff imbued with the power of Saradomin.", + "durability": null, + "weight": "2.2", + "attack_speed": "4", + "weapon_interface": "1", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "attack_audios": "2555,0,0,0", + "name": "Saradomin staff", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "2415", + "bonuses": "-1,-1,6,6,0,2,3,1,6,0,0,2,0,0,0" + }, + { + "shop_price": "80000", + "examine": "A magical staff imbued with the power of Guthix.", + "durability": null, + "weight": "2", + "attack_speed": "4", + "weapon_interface": "1", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "attack_audios": "2555,0,0,0", + "name": "Guthix staff", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "2416", + "bonuses": "-1,-1,6,6,0,2,3,1,6,0,0,2,0,0,0" + }, + { + "shop_price": "80000", + "turn90cw_anim": "1207", + "examine": "A magical staff imbued with the power of Zamorak.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Zamorak staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "2417", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,6,6,0,2,3,1,6,0,0,2,0,0,0" + }, + { + "examine": "A grey woollen wig.", + "durability": null, + "name": "Wig", + "archery_ticket_price": "0", + "id": "2419" + }, + { + "examine": "A grey woollen wig.", + "durability": null, + "name": "Wig", + "archery_ticket_price": "0", + "id": "2421" + }, + { + "lendable": "true", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "2147483647", + "durability": null, + "name": "Blue partyhat", + "archery_ticket_price": "0", + "id": "2422" + }, + { + "examine": "Imprint of a key in a lump of clay.", + "durability": null, + "name": "Key print", + "archery_ticket_price": "0", + "id": "2423" + }, + { + "examine": "A bottle of skin coloured paste.", + "durability": null, + "name": "Paste", + "archery_ticket_price": "0", + "id": "2424" + }, + { + "attack_audios": "2704,0,0,0", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2425" + }, + { + "durability": null, + "name": "Burnt oomlie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2427" + }, + { + "shop_price": "8002", + "ge_buy_limit": "100", + "examine": "4 doses of Attack potion.", + "grand_exchange_price": "275", + "durability": null, + "name": "Attack potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2428" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "275", + "durability": null, + "name": "Attack potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2429" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "4 doses of restore potion.", + "grand_exchange_price": "101", + "durability": null, + "name": "Restore potion(4)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "2430" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "101", + "durability": null, + "name": "Restore potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2431" + }, + { + "shop_price": "7832", + "ge_buy_limit": "100", + "examine": "4 doses of Defence Potion.", + "grand_exchange_price": "448", + "durability": null, + "name": "Defence potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2432" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "448", + "durability": null, + "name": "Defence potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2433" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Prayer restore potion.", + "grand_exchange_price": "5687", + "durability": null, + "name": "Prayer potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2434" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5687", + "durability": null, + "name": "Prayer potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2435" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "examine": "4 doses of super Attack potion.", + "grand_exchange_price": "898", + "durability": null, + "name": "Super attack(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2436" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "grand_exchange_price": "898", + "durability": null, + "name": "Super attack(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2437" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Fishing potion.", + "grand_exchange_price": "73", + "durability": null, + "name": "Fishing potion(4)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "2438" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "73", + "durability": null, + "name": "Fishing potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2439" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "examine": "4 doses of super Strength potion.", + "grand_exchange_price": "2278", + "durability": null, + "name": "Super strength(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2440" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "grand_exchange_price": "2278", + "durability": null, + "name": "Super strength(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2441" + }, + { + "shop_price": "7000", + "ge_buy_limit": "1000", + "examine": "4 doses of super Defence potion.", + "grand_exchange_price": "153", + "durability": null, + "name": "Super defence(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2442" + }, + { + "shop_price": "7000", + "ge_buy_limit": "1000", + "grand_exchange_price": "153", + "durability": null, + "name": "Super defence(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2443" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of ranging potion.", + "grand_exchange_price": "8317", + "durability": null, + "name": "Ranging potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2444" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8317", + "durability": null, + "name": "Ranging potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2445" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "4 doses of antipoison potion.", + "grand_exchange_price": "1624", + "durability": null, + "name": "Antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2446" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1624", + "durability": null, + "name": "Antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2447" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of super anti poison potion.", + "grand_exchange_price": "1062", + "durability": null, + "name": "Super antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2448" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1062", + "durability": null, + "name": "Super antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2449" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of Zamorak brew.", + "grand_exchange_price": "2838", + "durability": null, + "name": "Zamorak brew(4)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2450" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2838", + "durability": null, + "name": "Zamorak brew(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2451" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of anti-firebreath potion.", + "grand_exchange_price": "4743", + "durability": null, + "name": "Antifire potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2452" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4743", + "durability": null, + "name": "Antifire potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2453" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of anti-firebreath potion.", + "grand_exchange_price": "3518", + "durability": null, + "name": "Antifire potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2454" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3518", + "durability": null, + "name": "Antifire potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2455" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of anti-firebreath potion.", + "grand_exchange_price": "2291", + "durability": null, + "name": "Antifire potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2456" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2291", + "durability": null, + "name": "Antifire potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2457" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of anti-firebreath potion.", + "grand_exchange_price": "1099", + "durability": null, + "name": "Antifire potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2458" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1099", + "durability": null, + "name": "Antifire potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2459" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "704", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2460", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "704", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2461" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "704", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2462", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "704", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2463" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "638", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2464", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "638", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2465" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "629", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2466", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "629", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2467" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "639", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2468", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "639", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2469" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "613", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2470", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "613", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2471" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "711", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2472", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "711", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2473" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "48700", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2474", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48700", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2475" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "5975", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2476", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5975", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2477" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "7274", + "durability": null, + "name": "Clean lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2481" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7274", + "durability": null, + "name": "Clean lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2482" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this lantadyme potion.", + "grand_exchange_price": "6940", + "durability": null, + "name": "Lantadyme potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2483" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6940", + "durability": null, + "name": "Lantadyme potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2484" + }, + { + "requirements": "{15,67}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2485" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7210", + "durability": null, + "name": "Grimy lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2486" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "1705", + "name": "Blue d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2487", + "bonuses": "0,0,0,-10,9,4,3,5,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1705", + "durability": null, + "name": "Blue d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2488" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "5000", + "examine": "Vambraces made from 100% real dragonhide.", + "durability": null, + "weight": "0.25", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "2046", + "name": "Red d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2489", + "bonuses": "0,0,0,-10,10,5,4,6,6,0,5,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2046", + "durability": null, + "name": "Red d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2490" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "5000", + "examine": "Vambraces made from 100% real dragonhide.", + "durability": null, + "weight": "0.25", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "2506", + "name": "Black d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2491", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2506", + "durability": null, + "name": "Black d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2492" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,5,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2504", + "name": "Blue d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2493", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2504", + "durability": null, + "name": "Blue d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2494" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,6,3", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "3142", + "name": "Red d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2495", + "bonuses": "0,0,0,-10,14,28,22,30,20,28,25,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3142", + "durability": null, + "name": "Red d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2496" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,7,3", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "4744", + "name": "Black d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2497", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4744", + "durability": null, + "name": "Black d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2498" + }, + { + "requirements": "{1,40}-{4,50}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "5420", + "name": "Blue d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2499", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5420", + "durability": null, + "name": "Blue d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2500" + }, + { + "requirements": "{1,40}-{4,60}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "6680", + "name": "Red d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2501", + "bonuses": "0,0,0,-15,25,50,42,55,40,50,50,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "6680", + "durability": null, + "name": "Red d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2502" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "8098", + "name": "Black d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2503", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "8098", + "durability": null, + "name": "Black d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2504" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared blue dragonhide.", + "grand_exchange_price": "2888", + "durability": null, + "name": "Blue d-leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "2505" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2888", + "durability": null, + "name": "Blue d-leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2506" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared red dragonhide.", + "grand_exchange_price": "4464", + "durability": null, + "name": "Red dragon leather", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2507" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4464", + "durability": null, + "name": "Red dragon leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2508" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared black dragonhide.", + "grand_exchange_price": "6664", + "durability": null, + "name": "Black d-leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "2509" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6664", + "durability": null, + "name": "Black d-leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2510" + }, + { + "shop_price": "4", + "examine": "A number of wooden logs.", + "grand_exchange_price": "124", + "durability": null, + "name": "Logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2511" + }, + { + "lendable": "true", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "2902937", + "rare_item": "true", + "durability": null, + "name": "Dragon chainbody", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "2513", + "absorb": "4,0,9", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "shop_price": "6", + "examine": "I should try cooking this.", + "grand_exchange_price": "6", + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2514" + }, + { + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2515" + }, + { + "shop_price": "14", + "examine": "There is flour in this pot.", + "grand_exchange_price": "162", + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "2516" + }, + { + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2517" + }, + { + "shop_price": "1", + "examine": "Pretty smelly.", + "durability": null, + "name": "Rotten tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2518" + }, + { + "durability": null, + "name": "Rotten tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2519" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2520" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2521" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2522" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2523" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2524" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2525" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2526" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2527" + }, + { + "bankable": "false", + "examine": "Wonder what happens if I rub it...", + "durability": null, + "name": "Lamp", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2528" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "2529" + }, + { + "shop_price": "140", + "grand_exchange_price": "140", + "durability": null, + "name": "Bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2530" + }, + { + "durability": null, + "name": "Bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2531" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with iron heads and oil-soaked cloth. lit: An easy to make, iron-headed fire arrow.", + "grand_exchange_price": "316", + "durability": null, + "name": "Iron fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2532", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with iron heads and oil-soaked cloth. lit: An easy to make, iron-headed fire arrow.", + "grand_exchange_price": "305", + "durability": null, + "name": "Iron fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2533", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with steel heads and oil-soaked cloth. lit: An easy to make, steel-headed fire arrow.", + "grand_exchange_price": "325", + "durability": null, + "name": "Steel fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2534", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with steel heads and oil-soaked cloth. lit: An easy to make, steel-headed fire arrow.", + "grand_exchange_price": "327", + "durability": null, + "name": "Steel fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2535", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with mithril heads and oil-soaked cloth. lit: An easy to make, mithril-headed fire arrow.", + "grand_exchange_price": "9", + "durability": null, + "name": "Mithril fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2536", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with mithril heads and oil-soaked cloth. lit: An easy to make, mithril-headed fire arrow.", + "grand_exchange_price": "63", + "durability": null, + "name": "Mithril fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2537", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with adamant heads and oil-soaked cloth.lit: An easy-to-make, Adamant-headed fire arrow.", + "grand_exchange_price": "90", + "durability": null, + "name": "Adamant fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2538", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with adamant heads and oil-soaked cloth.lit: An easy-to-make, Adamant-headed fire arrow.", + "grand_exchange_price": "127", + "durability": null, + "name": "Adamant fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2539", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "An easy to make, rune-headed fire arrow.", + "grand_exchange_price": "539", + "durability": null, + "name": "Rune fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2540", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "An easy to make, rune-headed fire arrow.", + "grand_exchange_price": "682", + "durability": null, + "name": "Rune fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2541", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "5000", + "examine": "An enchanted ring.", + "grand_exchange_price": "943", + "durability": null, + "name": "Ring of recoil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2550", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "943", + "durability": null, + "name": "Ring of recoil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2551" + }, + { + "shop_price": "770", + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "1237", + "durability": null, + "name": "Ring of duelling(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2552", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1237", + "durability": null, + "name": "Ring of duelling(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2553" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2554", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2555" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2556", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2557" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2558", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2559" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2560", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2561" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2562", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2563" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2564", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2565" + }, + { + "shop_price": "770", + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "594", + "durability": null, + "name": "Ring of duelling(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2566", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "594", + "durability": null, + "name": "Ring of duelling(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2567" + }, + { + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "1103", + "durability": null, + "name": "Ring of forging", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2568", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1103", + "durability": null, + "name": "Ring of forging", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2569" + }, + { + "shop_price": "3000", + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "4540", + "durability": null, + "name": "Ring of life", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2570", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4540", + "durability": null, + "name": "Ring of life", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2571" + }, + { + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2572", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2573" + }, + { + "examine": "Used by navigators to find their position in RuneScape.", + "durability": null, + "name": "Sextant", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2574" + }, + { + "examine": "A fine looking time piece.", + "durability": null, + "name": "Watch", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2575" + }, + { + "examine": "A navigator's chart of RuneScape.", + "durability": null, + "name": "Chart", + "archery_ticket_price": "0", + "id": "2576" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Lightweight boots ideal for rangers.", + "durability": null, + "weight": "0.2", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "13900000", + "name": "Ranger boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2577", + "bonuses": "0,0,0,-10,8,2,3,4,2,0,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "13900000", + "durability": null, + "name": "Ranger boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2578" + }, + { + "requirements": "{6,20}", + "ge_buy_limit": "2", + "examine": "Slightly magical boots.", + "durability": null, + "weight": "1", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "747300", + "name": "Wizard boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2579", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "747300", + "durability": null, + "name": "Wizard boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2580" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Endorsed by Robin Hood.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "4400000", + "name": "Robin hood hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2581", + "bonuses": "0,0,0,-10,8,4,6,8,4,4,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "4400000", + "durability": null, + "name": "Robin hood hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2582" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "74900", + "name": "Black platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2583", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "74900", + "durability": null, + "name": "Black platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2584" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platelegs with trim.", + "grand_exchange_price": "39900", + "durability": null, + "name": "Black platelegs (t)", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "2585", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "39900", + "durability": null, + "name": "Black platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2586" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "100", + "examine": "Black full helmet with trim.", + "durability": null, + "weight": "2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "82200", + "name": "Black full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2587", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "82200", + "durability": null, + "name": "Black full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2588" + }, + { + "requirements": "{1,10}", + "shop_price": "2072", + "ge_buy_limit": "2", + "examine": "Black kiteshield with trim.", + "durability": null, + "weight": "5", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "73000", + "name": "Black kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2589", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "73000", + "durability": null, + "name": "Black kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2590" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "589000", + "name": "Black platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2591", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "589000", + "durability": null, + "name": "Black platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2592" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platelegs with gold trim.", + "grand_exchange_price": "216700", + "durability": null, + "name": "Black platelegs (g)", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "2593", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "216700", + "durability": null, + "name": "Black platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2594" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "100", + "examine": "Black full helmet with gold trim.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "364800", + "name": "Black full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2595", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "364800", + "durability": null, + "name": "Black full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2596" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black kiteshield with gold trim.", + "durability": null, + "weight": "5", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "355600", + "name": "Black kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2597", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "355600", + "durability": null, + "name": "Black kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2598" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "104000", + "name": "Adam platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2599", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "104000", + "durability": null, + "name": "Adam platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2600" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "2", + "examine": "These look heavy", + "durability": null, + "weight": "10", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "23200", + "name": "Adam platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2601", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "23200", + "durability": null, + "name": "Adam platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2602" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.8", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "49100", + "name": "Adam kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2603", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "49100", + "durability": null, + "name": "Adam kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2604" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant full helm with trim", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "85000", + "name": "Adam full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2605", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "85000", + "durability": null, + "name": "Adam full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2606" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "359500", + "name": "Adam platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2607", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "359500", + "durability": null, + "name": "Adam platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2608" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "2", + "examine": "Adamant platelegs with gold trim.", + "durability": null, + "weight": "10", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "94300", + "name": "Adam platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2609", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "94300", + "durability": null, + "name": "Adam platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2610" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant kiteshield with gold trim.", + "durability": null, + "weight": "6", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "170100", + "name": "Adam kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2611", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "170100", + "durability": null, + "name": "Adam kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2612" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant full helmet with gold trim.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "222400", + "name": "Adam full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2613", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "222400", + "durability": null, + "name": "Adam full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2614" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "426200", + "name": "Rune platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2615", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "426200", + "durability": null, + "name": "Rune platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2616" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "ge_buy_limit": "2", + "examine": "Rune platelegs with gold trim.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "243400", + "name": "Rune platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2617", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "243400", + "durability": null, + "name": "Rune platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2618" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "35000", + "ge_buy_limit": "100", + "examine": "Rune full helmet with gold trim.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "506800", + "name": "Rune full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2619", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "506800", + "durability": null, + "name": "Rune full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2620" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield with gold trim", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "392700", + "name": "Rune kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2621", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "392700", + "durability": null, + "name": "Rune kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2622" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "162700", + "name": "Rune platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2623", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "162700", + "durability": null, + "name": "Rune platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2624" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs with trim!", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "95400", + "name": "Rune platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2625", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "95400", + "durability": null, + "name": "Rune platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2626" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune full helmet with trim.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "216600", + "name": "Rune full helm (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2627", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "216600", + "durability": null, + "name": "Rune full helm (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2628" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A large, metal shield with a nice trim.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "160300", + "name": "Rune kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2629", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "160300", + "durability": null, + "name": "Rune kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2630" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Your money or your life!", + "grand_exchange_price": "83500", + "durability": null, + "name": "Highwayman mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2631", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "83500", + "durability": null, + "name": "Highwayman mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2632" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "34300", + "durability": null, + "name": "Blue beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2633", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "34300", + "durability": null, + "name": "Blue beret", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2634" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Parlez-vous francais?(Do you speak French?)", + "grand_exchange_price": "117500", + "durability": null, + "name": "Black beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2635", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "117500", + "durability": null, + "name": "Black beret", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2636" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "328000", + "durability": null, + "name": "White beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2637", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "328000", + "durability": null, + "name": "White beret", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2638" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "All for one and one for all!", + "grand_exchange_price": "29100", + "durability": null, + "name": "Tan cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2639", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "29100", + "durability": null, + "name": "Tan cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2640" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "All for one and one for all!", + "grand_exchange_price": "23600", + "durability": null, + "name": "Dark cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2641", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "23600", + "durability": null, + "name": "Dark cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2642" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "All for one and one for all!", + "grand_exchange_price": "384500", + "durability": null, + "name": "Black cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2643", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "384500", + "durability": null, + "name": "Black cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2644" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A minimalist's hat.", + "grand_exchange_price": "91300", + "durability": null, + "name": "Red headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2645", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "91300", + "durability": null, + "name": "Red headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2646" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A minimalist's hat.", + "grand_exchange_price": "32900", + "durability": null, + "name": "Black headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2647", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32900", + "durability": null, + "name": "Black headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2648" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A minimalist's hat.", + "grand_exchange_price": "17800", + "durability": null, + "name": "Brown headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2649", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "17800", + "durability": null, + "name": "Brown headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2650" + }, + { + "ge_buy_limit": "2", + "examine": "Shiver me timbers!", + "grand_exchange_price": "82500", + "durability": null, + "name": "Pirate's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2651", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "82500", + "durability": null, + "name": "Pirate's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2652" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "809000", + "name": "Zamorak platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2653", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "809000", + "durability": null, + "name": "Zamorak platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2654" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "281500", + "name": "Zamorak platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2655", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "281500", + "durability": null, + "name": "Zamorak platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2656" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A full helmet in the colours of Zamorak.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "601500", + "name": "Zamorak full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2657", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "601500", + "durability": null, + "name": "Zamorak full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2658" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A Rune kiteshield in the colours of Zamorak.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "499500", + "name": "Zamorak kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2659", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "499500", + "durability": null, + "name": "Zamorak kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2660" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody in the colours of Saradomin.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "1600000", + "name": "Saradomin platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2661", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Saradomin platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2662" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs in the colours of Saradomin.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "444000", + "name": "Saradomin platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2663", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "444000", + "durability": null, + "name": "Saradomin platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2664" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune full helmet in the colours of Saradomin.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1100000", + "name": "Saradomin full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2665", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Saradomin full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2666" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield in the colours of Saradomin.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "795900", + "name": "Saradomin kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2667", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "795900", + "durability": null, + "name": "Saradomin kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2668" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody in the colours of Guthix.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "307900", + "name": "Guthix platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2669", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "307900", + "durability": null, + "name": "Guthix platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2670" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs in the colours of Guthix.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "169900", + "name": "Guthix platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2671", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "169900", + "durability": null, + "name": "Guthix platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2672" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune full helmet in the colours of Guthix.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "323100", + "name": "Guthix full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2673", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,1,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "323100", + "durability": null, + "name": "Guthix full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2674" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield in the colours of Guthix.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "247300", + "name": "Guthix kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2675", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "247300", + "durability": null, + "name": "Guthix kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2676" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2677" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2678" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2679" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2680" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2681" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2682" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2683" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2684" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2685" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2686" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2687" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2688" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2689" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2690" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2691" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2692" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2693" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2694" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2695" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2696" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2697" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2698" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2699" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2700" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2701" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2702" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2703" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2704" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2705" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2706" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2707" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2708" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2709" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2710" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2711" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2712" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2713" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2714" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2715" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2716" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2717" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2718" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2719" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2720" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2721" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2722" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2723" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2724" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2725" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2726" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2727" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2728" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2729" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2730" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2731" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2732" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2733" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2734" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2735" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2736" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2737" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2738" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2739" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2740" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2741" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2742" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2743" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2744" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2745" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2746" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2747" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2748" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2773" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2774" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2775" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2776" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2777" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2778" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2779" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2780" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2781" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2782" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2783" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2784" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2785" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2786" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2787" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2788" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2789" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2790" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2791" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2792" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2793" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2794" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "2795" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2796" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2797" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "2798" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2799" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "2800" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2801" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2802" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2803" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2804" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2805" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2806" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2807" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2808" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2809" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2810" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2811" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2812" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2813" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2814" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2815" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2816" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2817" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2818" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2819" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2820" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2821" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2822" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2823" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2824" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2825" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2826" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2827" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2828" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2829" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2830" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2831" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2833" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2835" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2837" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2839" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2841" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2842" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2843" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2844" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2845" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2846" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2847" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2848" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2849" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2850" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2851" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2852" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2853" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2854" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2855" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2856" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2857" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2858" + }, + { + "ge_buy_limit": "1000", + "examine": "Bones of a recently slain wolf.", + "grand_exchange_price": "1266", + "durability": null, + "name": "Wolf bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2859" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1266", + "durability": null, + "name": "Wolf bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2860" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "I can make an ogre arrow with these.", + "grand_exchange_price": "5", + "durability": null, + "name": "Wolfbone arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2861" + }, + { + "ge_buy_limit": "25000", + "examine": "These logs are longer than normal.", + "grand_exchange_price": "169", + "durability": null, + "name": "Achey tree logs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2862" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "169", + "durability": null, + "name": "Achey tree logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2863" + }, + { + "ge_buy_limit": "1000", + "examine": "A wooden arrow shaft", + "grand_exchange_price": "47", + "durability": null, + "name": "Ogre arrow shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2864" + }, + { + "ge_buy_limit": "1000", + "examine": "An ogre arrow with four flights attached.", + "grand_exchange_price": "172", + "durability": null, + "name": "Flighted ogre arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2865" + }, + { + "requirements": "{4,30}", + "shop_price": "25", + "ge_buy_limit": "1000", + "examine": "A large ogre arrow with a bone tip.", + "grand_exchange_price": "49", + "durability": null, + "name": "Ogre arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2866", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows", + "archery_ticket_price": "0", + "id": "2871", + "equipment_slot": "3" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows (3)", + "archery_ticket_price": "0", + "id": "2872" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows (2)", + "archery_ticket_price": "0", + "id": "2873" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows (1)", + "archery_ticket_price": "0", + "id": "2874" + }, + { + "bankable": "false", + "examine": "An inflated toad.", + "durability": null, + "name": "Bloated toad", + "tradeable": "false", + "destroy": "true", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "2875" + }, + { + "ge_buy_limit": "10000", + "examine": "I need to cook this first.", + "grand_exchange_price": "2145", + "durability": null, + "name": "Raw chompy", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "2876" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2145", + "durability": null, + "name": "Raw chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2877" + }, + { + "shop_price": "130", + "ge_buy_limit": "1000", + "examine": "It might look delicious to an ogre.Roasted chompy bird.", + "grand_exchange_price": "95", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "2878" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "95", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2879" + }, + { + "durability": null, + "name": "Ruined chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2881" + }, + { + "examine": "It has been deliciously seasoned to taste wonderful for ogres.", + "durability": null, + "name": "Seasoned chompy", + "weight": "10", + "archery_ticket_price": "0", + "id": "2882" + }, + { + "requirements": "{4,30}", + "shop_price": "500", + "examine": "More powerful than a normal bow, useful against large game birds.", + "durability": null, + "weight": "1", + "attack_speed": "8", + "two_handed": "true", + "weapon_interface": "16", + "equipment_slot": "3", + "attack_audios": "2700,0,0,0", + "name": "Ogre bow", + "archery_ticket_price": "0", + "id": "2883", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Book of the elemental shield.", + "durability": null, + "name": "Battered book", + "archery_ticket_price": "0", + "id": "2886" + }, + { + "examine": "An old battered key. (Elemental Workshop I)", + "durability": null, + "name": "Battered key", + "archery_ticket_price": "0", + "id": "2887" + }, + { + "examine": "This is an empty stone bowl. / This is a stone bowl full of lava.", + "durability": null, + "name": "A stone bowl", + "archery_ticket_price": "0", + "id": "2888", + "equipment_slot": "3" + }, + { + "examine": "This is an empty stone bowl. / This is a stone bowl full of lava.", + "durability": null, + "name": "A stone bowl", + "archery_ticket_price": "0", + "id": "2889", + "equipment_slot": "3" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A shield made in the Elemental Workshop.", + "grand_exchange_price": "709", + "durability": null, + "name": "Elemental shield", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2890", + "bonuses": "0,0,0,0,0,0,0,0,6,0,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "709", + "durability": null, + "name": "Elemental shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2891" + }, + { + "examine": "This needs refining.", + "durability": null, + "name": "Elemental ore", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "2892" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "1570", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2894", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1570", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2895" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "867", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2896", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "867", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2897" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "741", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2898", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "741", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2899" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "844", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2900", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "844", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2901" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1039", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2902", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1039", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2903" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "1359", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2904", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1359", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2905" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "958", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2906", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "958", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2907" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "474", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2908", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "474", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2909" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "1445", + "tradeable": "true", + "name": "Hat", + "archery_ticket_price": "0", + "hat": "true", + "id": "2910", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1445", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2911" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1254", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2912", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1254", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2913" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "1054", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2914", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1054", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2915" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "789", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2916", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "789", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2917" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "603", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2918", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "603", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2919" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "997", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2920", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "997", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2921" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1221", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2922", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1221", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2923" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "737", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2924", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "737", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2925" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "504", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2926", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "504", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2927" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "637", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2928", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "637", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2929" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "925", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2930", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "925", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2931" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1829", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2932", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1829", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2933" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "988", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2934", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "988", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2935" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "925", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2936", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "925", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2937" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "927", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2938", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "927", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2939" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "1209", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2940", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1209", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2941" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "634", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2942", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "634", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2943" + }, + { + "examine": "A key made from solid gold", + "durability": null, + "name": "Golden key", + "archery_ticket_price": "0", + "id": "2944" + }, + { + "examine": "A key made of solid iron.", + "durability": null, + "name": "Iron key", + "archery_ticket_price": "0", + "id": "2945" + }, + { + "examine": "A replica tinderbox made of solid gold.", + "durability": null, + "name": "Golden tinderbox", + "archery_ticket_price": "0", + "id": "2946" + }, + { + "examine": "A replica candle made of solid gold.", + "durability": null, + "name": "Golden candle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2947" + }, + { + "examine": "A replica pot made of solid gold.", + "durability": null, + "name": "Golden pot", + "archery_ticket_price": "0", + "id": "2948" + }, + { + "examine": "A replica hammer made of solid gold.", + "durability": null, + "name": "Golden hammer", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "2949" + }, + { + "examine": "A replica needle made of solid gold.", + "durability": null, + "name": "Golden needle", + "archery_ticket_price": "0", + "id": "2951" + }, + { + "examine": "A silver dagger that can prevent werewolves changing form.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "attack_audios": "2517,2517,2500,2517", + "name": "Wolfbane", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "2952", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,1,10,5,0,0" + }, + { + "examine": "It's a bucket of water.", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2953" + }, + { + "examine": "It's a bucket of water.", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2954" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "16", + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2955" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2956" + }, + { + "examine": "An empty druid pouch.", + "durability": null, + "name": "Druid pouch", + "archery_ticket_price": "0", + "id": "2957" + }, + { + "examine": "A druid pouch.", + "durability": null, + "name": "Druid pouch", + "archery_ticket_price": "0", + "id": "2958" + }, + { + "examine": "Erhhh! It stinks.", + "durability": null, + "name": "Rotten food", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2959" + }, + { + "durability": null, + "name": "Rotten food", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2960" + }, + { + "ge_buy_limit": "100", + "examine": "It's a silver sickle.", + "durability": null, + "weight": "1.6", + "weapon_interface": "6", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "28", + "name": "Silver sickle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2961", + "bonuses": "0,0,0,0,0,0,1,1,1,1,0,1,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28", + "durability": null, + "name": "Silver sickle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2962" + }, + { + "attack_anims": "390,390,381,390", + "examine": "It's a blessed silver sickle.", + "durability": null, + "name": "Silver sickle(b)", + "weight": "1.5", + "archery_ticket_price": "0", + "weapon_interface": "6", + "id": "2963", + "bonuses": "0,0,0,0,0,0,1,1,1,1,0,1,5,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "shop_price": "1", + "examine": "Used for washing your face, amongst other things.", + "durability": null, + "name": "Washing bowl", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2964" + }, + { + "examine": "A small mirror, probably used for grooming.", + "durability": null, + "name": "Mirror", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2966" + }, + { + "examine": "A druidic spell given to you freely by the spirit of Filliman Tarlock.", + "durability": null, + "name": "Druidic spell", + "archery_ticket_price": "0", + "id": "2968" + }, + { + "examine": "A used druidic spell given to you freely by the spirit of Filliman Tarlock.", + "durability": null, + "name": "A used spell", + "archery_ticket_price": "0", + "id": "2969" + }, + { + "ge_buy_limit": "10000", + "examine": "A mushroom from the swamps of Mort Myre.", + "grand_exchange_price": "915", + "durability": null, + "name": "Mort myre fungus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2970" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "915", + "durability": null, + "name": "Mort myre fungus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2971" + }, + { + "ge_buy_limit": "100", + "examine": "A cutting from a budding branch.", + "grand_exchange_price": "338", + "durability": null, + "name": "Mort myre stem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2972" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "338", + "durability": null, + "name": "Mort myre stem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2973" + }, + { + "ge_buy_limit": "100", + "examine": "A pear picked from a dying bush in Mort Myre.", + "grand_exchange_price": "975", + "durability": null, + "name": "Mort myre pear", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2974" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "975", + "durability": null, + "name": "Mort myre pear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2975" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Used to make sickles.", + "grand_exchange_price": "498", + "durability": null, + "name": "Sickle mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2976" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "498", + "durability": null, + "name": "Sickle mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2977" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2978", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2979", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2980", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2981", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2982", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2983", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2984", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2985", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2986", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2987", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2988", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2989", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2990", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2991", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2992", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2993", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2994", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2995", + "equipment_slot": "0" + }, + { + "examine": "I can exchange these for further experience or items.", + "durability": null, + "name": "Agility arena ticket", + "archery_ticket_price": "0", + "id": "2996" + }, + { + "shop_price": "800", + "ge_buy_limit": "10", + "examine": "You should see the shark...", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Pirate's hook", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2997", + "bonuses": "0,0,0,0,0,1,5,3,0,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "4056", + "durability": null, + "name": "Clean toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2998" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4056", + "durability": null, + "name": "Clean toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2999" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "10500", + "durability": null, + "name": "Clean snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3000" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "10500", + "durability": null, + "name": "Clean snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3001" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this toadflax potion.", + "grand_exchange_price": "3988", + "durability": null, + "name": "Toadflax potion(unf)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3002" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3988", + "durability": null, + "name": "Toadflax potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3003" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this snapdragon potion.", + "grand_exchange_price": "9588", + "durability": null, + "name": "Snapdragon potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3004" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9588", + "durability": null, + "name": "Snapdragon potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3005" + }, + { + "shop_price": "150", + "examine": "Keep out of reach of children and familiars.", + "durability": null, + "name": "Firework", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3006" + }, + { + "durability": null, + "name": "Firework", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3007" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "4 doses of energy potion.", + "grand_exchange_price": "33", + "durability": null, + "name": "Energy potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3008" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "33", + "durability": null, + "name": "Energy potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3009" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "3 doses of energy potion.", + "grand_exchange_price": "18", + "durability": null, + "name": "Energy potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3010" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Energy potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3011" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "2 doses of energy potion.", + "grand_exchange_price": "11", + "durability": null, + "name": "Energy potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3012" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Energy potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3013" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "1 dose of energy potion.", + "grand_exchange_price": "25", + "durability": null, + "name": "Energy potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3014" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Energy potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3015" + }, + { + "shop_price": "4000", + "ge_buy_limit": "1000", + "examine": "4 doses of super energy potion.", + "grand_exchange_price": "3088", + "durability": null, + "name": "Super energy(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3016" + }, + { + "shop_price": "4000", + "ge_buy_limit": "1000", + "grand_exchange_price": "3088", + "durability": null, + "name": "Super energy(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3017" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super energy potion.", + "grand_exchange_price": "2485", + "durability": null, + "name": "Super energy(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3018" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2485", + "durability": null, + "name": "Super energy(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3019" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super energy potion.", + "grand_exchange_price": "1592", + "durability": null, + "name": "Super energy(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3020" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1592", + "durability": null, + "name": "Super energy(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3021" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super energy potion.", + "grand_exchange_price": "1432", + "durability": null, + "name": "Super energy(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3022" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1432", + "durability": null, + "name": "Super energy(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3023" + }, + { + "shop_price": "12000", + "ge_buy_limit": "1000", + "examine": "4 doses of super restore potion.", + "grand_exchange_price": "11500", + "durability": null, + "name": "Super restore(4)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3024" + }, + { + "shop_price": "12000", + "ge_buy_limit": "1000", + "grand_exchange_price": "11500", + "durability": null, + "name": "Super restore(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3025" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super restore potion.", + "grand_exchange_price": "8690", + "durability": null, + "name": "Super restore(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3026" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8690", + "durability": null, + "name": "Super restore(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3027" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super restore potion.", + "grand_exchange_price": "5637", + "durability": null, + "name": "Super restore(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3028" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5637", + "durability": null, + "name": "Super restore(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3029" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super restore potion.", + "grand_exchange_price": "2606", + "durability": null, + "name": "Super restore(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3030" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2606", + "durability": null, + "name": "Super restore(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3031" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Agility potion.", + "grand_exchange_price": "276", + "durability": null, + "name": "Agility potion(4)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3032" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "276", + "durability": null, + "name": "Agility potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3033" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Agility potion.", + "grand_exchange_price": "148", + "durability": null, + "name": "Agility potion(3)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3034" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "148", + "durability": null, + "name": "Agility potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3035" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Agility potion.", + "grand_exchange_price": "115", + "durability": null, + "name": "Agility potion(2)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3036" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "115", + "durability": null, + "name": "Agility potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3037" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Agility potion.", + "grand_exchange_price": "306", + "durability": null, + "name": "Agility potion(1)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3038" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "306", + "durability": null, + "name": "Agility potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3039" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Magic potion.", + "grand_exchange_price": "7214", + "durability": null, + "name": "Magic potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3040" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7214", + "durability": null, + "name": "Magic potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3041" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Magic potion.", + "grand_exchange_price": "5285", + "durability": null, + "name": "Magic potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3042" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5285", + "durability": null, + "name": "Magic potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3043" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Magic potion.", + "grand_exchange_price": "3697", + "durability": null, + "name": "Magic potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3044" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3697", + "durability": null, + "name": "Magic potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3045" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Magic potion.", + "grand_exchange_price": "1826", + "durability": null, + "name": "Magic potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3046" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1826", + "durability": null, + "name": "Magic potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3047" + }, + { + "durability": null, + "name": "Pirate's hook", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3048" + }, + { + "requirements": "{15,30}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "3996", + "durability": null, + "name": "Grimy toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3049" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3996", + "durability": null, + "name": "Grimy toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3050" + }, + { + "requirements": "{15,59}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "10500", + "durability": null, + "name": "Grimy snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3051" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "10500", + "durability": null, + "name": "Grimy snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3052" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9985", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3053", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Lava battlestaff" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "34100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3054", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "shop_price": "160", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic lava staff" + }, + { + "durability": null, + "name": "Lava battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3055" + }, + { + "durability": null, + "name": "Mystic lava staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3056" + }, + { + "examine": "A mime would wear this.", + "durability": null, + "name": "Mime mask", + "archery_ticket_price": "0", + "id": "3057", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime top", + "archery_ticket_price": "0", + "id": "3058", + "equipment_slot": "4" + }, + { + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime legs", + "archery_ticket_price": "0", + "id": "3059", + "equipment_slot": "7" + }, + { + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime gloves", + "archery_ticket_price": "0", + "id": "3060", + "equipment_slot": "9" + }, + { + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime boots", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3061", + "equipment_slot": "10" + }, + { + "examine": "It seems to be humming...", + "durability": null, + "name": "Strange box", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3062" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "628", + "attack_audios": "2547,0,0,0", + "name": "Black dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3093", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "740", + "attack_audios": "2547,0,0,0", + "name": "Black dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3094", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "48", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "702", + "name": "Bronze claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3095", + "bonuses": "3,4,-4,0,0,1,2,1,0,0,0,5,0,0,0" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "13", + "name": "Iron claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3096", + "bonuses": "4,6,-4,0,0,2,3,1,0,0,0,7,0,0,0" + }, + { + "requirements": "{0,5}", + "shop_price": "175", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "20", + "name": "Steel claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3097", + "bonuses": "8,11,-4,0,0,3,6,2,0,0,0,12,0,0,0" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "6", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "940", + "name": "Black claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3098", + "bonuses": "10,14,-4,0,0,4,7,2,0,0,0,14,0,0,0" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "114", + "name": "Mithril claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3099", + "bonuses": "11,16,-4,0,0,4,8,2,0,0,0,17,0,0,0" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "649", + "name": "Adamant claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3100", + "bonuses": "18,23,-4,0,0,6,12,3,0,0,0,24,0,0,0" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "has_special": "true", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "lendable": "true", + "grand_exchange_price": "6939", + "name": "Rune claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3101", + "bonuses": "26,38,-4,0,0,10,19,5,0,0,0,39,0,0,0" + }, + { + "examine": "The combination to Burthorpe Castle's equipment room.", + "durability": null, + "name": "Combination", + "archery_ticket_price": "0", + "id": "3102" + }, + { + "examine": "The guard wrote the IOU on the back of some paper.", + "durability": null, + "name": "Iou", + "archery_ticket_price": "0", + "id": "3103" + }, + { + "examine": "This map shows the secret way up to Death Plateau.", + "durability": null, + "name": "Secret way map", + "archery_ticket_price": "0", + "id": "3104" + }, + { + "shop_price": "1900", + "ge_buy_limit": "100", + "examine": "Boots made for general climbing; rocks a speciality.", + "durability": null, + "destroy": "true", + "weight": "0.3", + "equipment_slot": "10", + "grand_exchange_price": "51400", + "name": "Climbing boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3105", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,2,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "51400", + "durability": null, + "name": "Climbing boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3106" + }, + { + "examine": "Climbing boots with spikes.", + "durability": null, + "name": "Spiked boots", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3107", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,2,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3109" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3110" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3111" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3112" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3113" + }, + { + "examine": "Entrance certificate to the Imperial Guard.", + "durability": null, + "name": "Certificate", + "archery_ticket_price": "0", + "id": "3114" + }, + { + "durability": null, + "name": "Bronze claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3115" + }, + { + "durability": null, + "name": "Iron claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3116" + }, + { + "durability": null, + "name": "Steel claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3117" + }, + { + "durability": null, + "name": "Black claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3118" + }, + { + "durability": null, + "name": "Mithril claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3119" + }, + { + "durability": null, + "name": "Adamant claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3120" + }, + { + "durability": null, + "name": "Rune claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3121" + }, + { + "requirements": "{1,50}-{2,50}", + "ge_buy_limit": "10", + "examine": "A solid stone shield.", + "durability": null, + "weight": "6.8", + "absorb": "5,0,10", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "34800", + "name": "Granite shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3122", + "bonuses": "0,0,0,-12,-8,40,42,38,0,65,50,0,0,0,0" + }, + { + "ge_buy_limit": "10000", + "examine": "Large glistening bones which glow with a pale yellow aura.", + "grand_exchange_price": "1975", + "durability": null, + "name": "Shaikahan bones", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "3123" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1975", + "durability": null, + "name": "Shaikahan bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3124" + }, + { + "ge_buy_limit": "10000", + "examine": "Fairly big bones which smell distinctly of Jogre.", + "grand_exchange_price": "1023", + "durability": null, + "name": "Jogre bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "3125" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1023", + "durability": null, + "name": "Jogre bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3126" + }, + { + "examine": "These blackened Jogre bones have been somehow burnt.", + "durability": null, + "name": "Burnt jogre bones", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "3127" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3128" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3129" + }, + { + "examine": "Burnt Jogre bones marinated in lovely Karambwanji sauce. Perfect./Burnt Jogre bones marinated in lovely Karabwanji sauce. Not quite right.", + "durability": null, + "name": "Marinated j' bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3130" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3131" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3132" + }, + { + "examine": "Burnt Jogre bones marinated in lovely Karambwanji sauce. Perfect./Burnt Jogre bones marinated in lovely Karabwanji sauce. Not quite right.", + "durability": null, + "name": "Marinated j' bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3133" + }, + { + "durability": null, + "name": "Granite shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3134" + }, + { + "shop_price": "1", + "examine": "The key to the troll prison.", + "durability": null, + "name": "Cell key 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3136" + }, + { + "examine": "The key to the troll prison.", + "durability": null, + "name": "Cell key 2", + "weight": "1", + "archery_ticket_price": "0", + "id": "3137" + }, + { + "ge_buy_limit": "10000", + "examine": "How am I supposed to eat that?!", + "grand_exchange_price": "1834", + "durability": null, + "name": "Potato cactus", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3138" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1834", + "durability": null, + "name": "Potato cactus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3139" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "A series of connected metal rings.", + "rare_item": "true", + "durability": null, + "weight": "6.8", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "4300000", + "name": "Dragon chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3140", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "4300000", + "durability": null, + "name": "Dragon chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3141" + }, + { + "shop_price": "440", + "ge_buy_limit": "20000", + "examine": "A raw green octopus.", + "grand_exchange_price": "1775", + "durability": null, + "name": "Raw karambwan", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3142" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "1775", + "durability": null, + "name": "Raw karambwan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3143" + }, + { + "shop_price": "460", + "ge_buy_limit": "10000", + "examine": "Cooked octopus.", + "grand_exchange_price": "1455", + "durability": null, + "name": "Cooked karambwan", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3144" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1455", + "durability": null, + "name": "Cooked karambwan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3145" + }, + { + "examine": "Cooked octopus. It looks poorly cooked and quite dangerous.", + "durability": null, + "name": "Poison karambwan", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3146" + }, + { + "shop_price": "460", + "examine": "Cooked octopus.", + "grand_exchange_price": "906", + "durability": null, + "name": "Cooked karambwan", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3147" + }, + { + "durability": null, + "name": "Burnt karambwan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3149" + }, + { + "examine": "Small brightly coloured tropical fish.", + "durability": null, + "name": "Raw karambwanji", + "archery_ticket_price": "0", + "id": "3150" + }, + { + "examine": "Small brightly coloured tropical fish.", + "durability": null, + "name": "Karambwanji", + "weight": "0.99", + "archery_ticket_price": "0", + "id": "3151" + }, + { + "examine": "Freshly made octopus paste. It smells quite nauseating.", + "durability": null, + "name": "Karambwan paste", + "archery_ticket_price": "0", + "id": "3152" + }, + { + "examine": "Freshly made octopus paste. It smells quite nauseating.", + "durability": null, + "name": "Karambwan paste", + "archery_ticket_price": "0", + "id": "3153" + }, + { + "examine": "Freshly made octopus paste. It smells quite nauseating.", + "durability": null, + "name": "Karambwan paste", + "archery_ticket_price": "0", + "id": "3154" + }, + { + "examine": "This paste smells of raw fish./This paste smells of cooked fish.", + "durability": null, + "name": "Karambwanji paste", + "archery_ticket_price": "0", + "id": "3155" + }, + { + "examine": "This paste smells of raw fish./This paste smells of cooked fish.", + "durability": null, + "name": "Karambwanji paste", + "archery_ticket_price": "0", + "id": "3156" + }, + { + "requirements": "{10,65}", + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A wide bodied and thin necked vessel, encrusted with sea salt. / The Karambwan Vessel is loaded with Karambwanji", + "grand_exchange_price": "221", + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "3157", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "221", + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3158" + }, + { + "requirements": "{10,65}", + "shop_price": "5", + "examine": "A wide bodied and thin necked vessel, encrusted with sea salt. / The Karambwan Vessel is loaded with Karambwanji", + "grand_exchange_price": "240", + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "3159" + }, + { + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3160" + }, + { + "examine": "A set of instructions explaining how to construct a Karambwan vessel", + "durability": null, + "name": "Crafting manual", + "archery_ticket_price": "0", + "id": "3161" + }, + { + "ge_buy_limit": "100", + "examine": "You swear you had more than three slices before.", + "grand_exchange_price": "38", + "durability": null, + "name": "Sliced banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3162" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38", + "durability": null, + "name": "Sliced banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3163" + }, + { + "shop_price": "27", + "examine": "A very strong spirit brewed in Karamja.", + "durability": null, + "name": "Karamjan rum", + "archery_ticket_price": "0", + "id": "3164" + }, + { + "shop_price": "27", + "examine": "A very strong spirit brewed in Karamja.", + "durability": null, + "name": "Karamjan rum", + "archery_ticket_price": "0", + "id": "3165" + }, + { + "examine": "It's the body of a dead monkey.", + "durability": null, + "name": "Monkey corpse", + "weight": "1", + "archery_ticket_price": "0", + "id": "3166" + }, + { + "examine": "It's the skin of a (hopefully) dead monkey.", + "durability": null, + "name": "Monkey skin", + "archery_ticket_price": "0", + "id": "3167" + }, + { + "examine": "A 'Seaweed in Monkey Skin' sandwich. Perfect for statue repair.", + "durability": null, + "name": "Seaweed sandwich", + "archery_ticket_price": "0", + "id": "3168" + }, + { + "examine": "A body of a dead monkey, tastefully stuffed with seaweed.", + "durability": null, + "name": "Stuffed monkey", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3169" + }, + { + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "266", + "stand_anim": "813", + "name": "Bronze spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3170", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "304", + "stand_anim": "813", + "name": "Iron spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3171", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "requirements": "{0,5}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "503", + "stand_anim": "813", + "name": "Steel spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3172", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "requirements": "{0,20}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned mithril tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "368", + "stand_anim": "813", + "name": "Mithril spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3173", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0" + }, + { + "requirements": "{0,30}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned adamant tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "1093", + "stand_anim": "813", + "name": "Adamant spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3174", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0" + }, + { + "requirements": "{0,40}", + "turn90cw_anim": "1207", + "examine": "\tA Karambwan poisoned rune tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "12089", + "stand_anim": "813", + "name": "Rune spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3175", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "requirements": "{0,60}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "37446", + "stand_anim": "813", + "name": "Dragon spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3176", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "3177", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3178" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3179" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3180" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3181" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3182" + }, + { + "ge_buy_limit": "10000", + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "588", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3183" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "588", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3184" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3185" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3186" + }, + { + "shop_price": "140", + "grand_exchange_price": "140", + "durability": null, + "name": "Bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3187" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "A piece of silk which can be used to remove poison from weapons.", + "grand_exchange_price": "286", + "durability": null, + "name": "Cleaning cloth", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3188" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "286", + "durability": null, + "name": "Cleaning cloth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3189" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "522", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3190", + "stand_turn_anim": "1209", + "bonuses": "7,8,0,-4,0,-1,1,2,0,0,0,8,0,0,0", + "shop_price": "104", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "name": "Bronze halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "522", + "durability": null, + "name": "Bronze halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3191" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "124", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3192", + "stand_turn_anim": "1209", + "bonuses": "9,12,0,-4,0,-1,1,2,0,0,0,12,0,0,0", + "shop_price": "364", + "durability": null, + "weight": "3.1", + "weapon_interface": "15", + "render_anim": "28", + "name": "Iron halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124", + "durability": null, + "name": "Iron halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3193" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "726", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3194", + "stand_turn_anim": "1209", + "bonuses": "14,19,0,-4,0,-1,2,3,0,0,0,20,0,0,0", + "requirements": "{0,5}", + "shop_price": "1300", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "name": "Steel halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "726", + "durability": null, + "name": "Steel halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3195" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "4344", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3196", + "stand_turn_anim": "1209", + "bonuses": "19,25,0,-4,0,-1,2,3,0,0,0,20,0,0,0", + "requirements": "{0,5}-{2,10}", + "shop_price": "2496", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "name": "Black halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4344", + "durability": null, + "name": "Black halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3197" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "6995", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3198", + "stand_turn_anim": "1209", + "bonuses": "22,28,0,-4,0,-1,2,4,0,0,0,29,0,0,0", + "requirements": "{0,20}-{2,10}", + "shop_price": "3380", + "durability": null, + "weight": "2.7", + "weapon_interface": "15", + "render_anim": "28", + "name": "Mithril halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6995", + "durability": null, + "name": "Mithril halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3199" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "4690", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3200", + "stand_turn_anim": "1209", + "bonuses": "28,41,0,-4,0,-1,3,4,0,0,0,42,0,0,0", + "requirements": "{0,30}-{2,15}", + "shop_price": "8320", + "durability": null, + "weight": "3.6", + "weapon_interface": "15", + "render_anim": "28", + "name": "Adamant halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4690", + "durability": null, + "name": "Adamant halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3201" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "77100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3202", + "stand_turn_anim": "1209", + "bonuses": "48,67,0,-4,0,-1,4,5,0,0,0,68,0,0,0", + "requirements": "{0,40}-{2,20}", + "shop_price": "128000", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "lendable": "true", + "name": "Rune halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "77100", + "durability": null, + "name": "Rune halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3203" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon halberd.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "201000", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3204", + "stand_turn_anim": "1209", + "bonuses": "70,95,0,-4,0,-1,4,5,0,0,0,89,0,0,0", + "requirements": "{0,60}-{2,30}", + "shop_price": "325000", + "durability": null, + "weight": "3.1", + "weapon_interface": "15", + "render_anim": "28", + "lendable": "true", + "name": "Dragon halberd" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "201000", + "durability": null, + "name": "Dragon halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3205" + }, + { + "examine": "A summons from King Lathas.", + "durability": null, + "name": "King's message", + "archery_ticket_price": "0", + "id": "3206" + }, + { + "examine": "A letter for King Lathas from Lord Iorwerth.", + "durability": null, + "name": "Iorwerths message", + "archery_ticket_price": "0", + "id": "3207" + }, + { + "examine": "Lord Iorwerth's crystal pendant.", + "durability": null, + "name": "Crystal pendant", + "archery_ticket_price": "0", + "id": "3208", + "equipment_slot": "2" + }, + { + "examine": "A piece of chemical formation.", + "durability": null, + "name": "Sulphur", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "3209" + }, + { + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Some limestone.", + "grand_exchange_price": "238", + "durability": null, + "name": "Limestone", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "3211" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "238", + "durability": null, + "name": "Limestone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3212" + }, + { + "examine": "Some quicklime.", + "durability": null, + "name": "Quicklime", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "3213" + }, + { + "examine": "A pot of ground quicklime.", + "durability": null, + "name": "Pot of quicklime", + "archery_ticket_price": "0", + "id": "3214" + }, + { + "shop_price": "160", + "examine": "A pile of ground sulphur.", + "durability": null, + "name": "Ground sulphur", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3215" + }, + { + "ge_buy_limit": "100", + "examine": "An empty barrel/A Splendid barrel.", + "grand_exchange_price": "207", + "durability": null, + "name": "Barrel", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3216" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "207", + "durability": null, + "name": "Barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3217" + }, + { + "examine": "A fused barrel full of fire oil.", + "durability": null, + "name": "Barrel bomb", + "weight": "32", + "archery_ticket_price": "0", + "id": "3218" + }, + { + "examine": "A fused barrel full of fire oil.", + "durability": null, + "name": "Barrel bomb", + "weight": "32", + "archery_ticket_price": "0", + "id": "3219" + }, + { + "examine": "A barrel full of coal-tar.", + "durability": null, + "name": "Barrel of coal-tar", + "weight": "32", + "archery_ticket_price": "0", + "id": "3220" + }, + { + "examine": "A barrel full of naphtha.", + "durability": null, + "name": "Barrel of naphtha", + "weight": "32", + "archery_ticket_price": "0", + "id": "3221" + }, + { + "examine": "A barrel full of naphtha and sulphur./A barrel full of naphtha and quicklime.", + "durability": null, + "name": "Naphtha mix", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3222" + }, + { + "examine": "A barrel full of naphtha and sulphur./A barrel full of naphtha and quicklime.", + "durability": null, + "name": "Naphtha mix", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3223" + }, + { + "examine": "A strip of cloth.", + "durability": null, + "name": "Strip of cloth", + "archery_ticket_price": "0", + "id": "3224" + }, + { + "shop_price": "67", + "ge_buy_limit": "5000", + "examine": "Might taste better cooked.", + "grand_exchange_price": "312", + "durability": null, + "name": "Raw rabbit", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3226" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "312", + "durability": null, + "name": "Raw rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3227" + }, + { + "shop_price": "19", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "35", + "durability": null, + "name": "Cooked rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3228" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "35", + "durability": null, + "name": "Cooked rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3229" + }, + { + "examine": "A book by Mel Achy.", + "durability": null, + "name": "Big book of bangs", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "3230" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3232" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3234" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3236" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3238" + }, + { + "ge_buy_limit": "100", + "examine": "Bark from a hollow tree.", + "grand_exchange_price": "23", + "durability": null, + "name": "Bark", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3239" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23", + "durability": null, + "name": "Bark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3240" + }, + { + "examine": "One of RuneScape's many citizens. In Karamja or South of Falador: One of RuneScape's many citizens, apparently trying to be an explorer. In Lumbridge: One of Lumbridge's many citizens. In a Falador home: One of RuneScape's many citizens. He looks worried ", + "durability": null, + "name": "Man", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3241" + }, + { + "examine": "He grows crops in the area.", + "durability": null, + "name": "Farmer", + "archery_ticket_price": "0", + "id": "3243" + }, + { + "examine": "Rogueish.", + "durability": null, + "name": "Rogue", + "archery_ticket_price": "0", + "id": "3247" + }, + { + "examine": "Varies, refer below.", + "durability": null, + "name": "Guard", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3249" + }, + { + "examine": "A member of Ardougne's militia.", + "durability": null, + "name": "Knight of ardougne", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3251" + }, + { + "examine": "The strong arm of the law.", + "durability": null, + "name": "Watchman", + "archery_ticket_price": "0", + "id": "3253" + }, + { + "examine": "A holy warrior.", + "durability": null, + "name": "Paladin", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3255" + }, + { + "examine": "Heroic!", + "durability": null, + "name": "Hero", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "3259" + }, + { + "examine": "A pale, tough looking herb.", + "durability": null, + "name": "Goutweed", + "archery_ticket_price": "0", + "id": "3261" + }, + { + "examine": "It's tough and spiky.", + "durability": null, + "name": "Troll thistle", + "archery_ticket_price": "0", + "id": "3262" + }, + { + "examine": "It'll be easier to grind now.", + "durability": null, + "name": "Dried thistle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3263" + }, + { + "examine": "It's ready for mixing.", + "durability": null, + "name": "Ground thistle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3264" + }, + { + "examine": "It's part of Eadgar's plan.", + "durability": null, + "name": "Troll potion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3265" + }, + { + "examine": "It's rather drunk.", + "durability": null, + "name": "Drunk parrot", + "archery_ticket_price": "0", + "id": "3266" + }, + { + "examine": "It's dirty and smelly.", + "durability": null, + "name": "Dirty robe", + "archery_ticket_price": "0", + "id": "3267" + }, + { + "examine": "It's good enough to fool a troll.", + "durability": null, + "name": "Fake man", + "archery_ticket_price": "0", + "id": "3268" + }, + { + "examine": "The key to the Trollheim storeroom.", + "durability": null, + "name": "Storeroom key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3269" + }, + { + "examine": "Pineapple chunks dipped in a strong liquor.", + "durability": null, + "name": "Alco-chunks", + "archery_ticket_price": "0", + "id": "3270" + }, + { + "ge_buy_limit": "5000", + "examine": "That used to be a vampyre!", + "grand_exchange_price": "381", + "durability": null, + "name": "Vampire dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3325" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "381", + "durability": null, + "name": "Vampire dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3326" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "An easy-to-make, marshy-coloured, Mort Myre snail shell helmet.", + "grand_exchange_price": "56", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3327", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3328" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Rounded: A red and black snail shell helmet. Pointed: A red and black pointed snail shell helmet.", + "durability": null, + "weight": "2", + "equipment_slot": "0", + "grand_exchange_price": "291", + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3329", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "291", + "durability": null, + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3330" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell helmet.", + "grand_exchange_price": "57", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3331", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3332" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "A moody blue snail shell helmet, mort myre snail shell helm", + "grand_exchange_price": "73", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "weight": "1.9", + "archery_ticket_price": "0", + "id": "3333", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "73", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3334" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "An easy-to-make, orange-and-bark coloured, Mort Myre snail shell helmet.", + "grand_exchange_price": "63", + "durability": null, + "name": "Broken bark snelm", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3335", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "63", + "durability": null, + "name": "Broken bark snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3336" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "An easy-to-make, marshy-coloured, Mort Myre snail shell helmet.", + "grand_exchange_price": "58", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3337", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "58", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3338" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Rounded: A red and black snail shell helmet. Pointed: A red and black pointed snail shell helmet.", + "durability": null, + "weight": "2", + "equipment_slot": "0", + "grand_exchange_price": "147", + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3339", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3340" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell helmet.", + "grand_exchange_price": "54", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3341", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "54", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3342" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "A moody blue snail shell helmet, mort myre snail shell helm", + "grand_exchange_price": "248", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "weight": "1.9", + "archery_ticket_price": "0", + "id": "3343", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "248", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3344" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, 'myre'-coloured, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "155", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3345" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "155", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3346" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, red, Mort myre snail shell; looks protective.", + "grand_exchange_price": "590", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3347" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "590", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3348" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "134", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3349" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "134", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3350" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, blue, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "230", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3351" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "230", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3352" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, bark-coloured, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "195", + "durability": null, + "name": "Blamish bark shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3353" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Blamish bark shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3354" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, 'myre'-coloured, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "145", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3355" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "145", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3356" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, red, Mort myre snail shell; looks protective.", + "grand_exchange_price": "614", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3357" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "614", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3358" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "173", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3359" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "173", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3360" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, blue, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "874", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3361" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "874", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3362" + }, + { + "shop_price": "74", + "ge_buy_limit": "10000", + "examine": "The thin, slimy corpse of a deceased giant snail.", + "grand_exchange_price": "2047", + "durability": null, + "name": "Thin snail", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3363" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2047", + "durability": null, + "name": "Thin snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3364" + }, + { + "ge_buy_limit": "1000", + "examine": "The lean, slimy corspe of a dead snail.", + "grand_exchange_price": "958", + "durability": null, + "name": "Lean snail", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3365" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "958", + "durability": null, + "name": "Lean snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3366" + }, + { + "shop_price": "160", + "ge_buy_limit": "10000", + "examine": "The fat, slimy, corpse of a deceased giant snail.", + "grand_exchange_price": "971", + "durability": null, + "name": "Fat snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3367" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "971", + "durability": null, + "name": "Fat snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3368" + }, + { + "ge_buy_limit": "10000", + "examine": "A succulently slimy piece of sumptuous snail.", + "grand_exchange_price": "833", + "durability": null, + "name": "Thin snail meat", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "3369" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "833", + "durability": null, + "name": "Thin snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3370" + }, + { + "ge_buy_limit": "10000", + "examine": "A succulently slimey slice of sumptuous snail.", + "grand_exchange_price": "251", + "durability": null, + "name": "Lean snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3371" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "251", + "durability": null, + "name": "Lean snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3372" + }, + { + "ge_buy_limit": "10000", + "examine": "A succulently slimy slice of sumptuous snail.", + "grand_exchange_price": "603", + "durability": null, + "name": "Fat snail meat", + "tradeable": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "3373" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "603", + "durability": null, + "name": "Fat snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3374" + }, + { + "durability": null, + "name": "Burnt snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3376" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "An empty sample bottle.", + "grand_exchange_price": "14", + "durability": null, + "name": "Sample bottle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3377" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Sample bottle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3378" + }, + { + "ge_buy_limit": "1000", + "examine": "A slime covered eel - yuck!", + "grand_exchange_price": "358", + "durability": null, + "name": "Slimy eel", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3379" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "358", + "durability": null, + "name": "Slimy eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3380" + }, + { + "ge_buy_limit": "1000", + "examine": "A cooked slimy eel - not delicious, but pretty nutritious.", + "grand_exchange_price": "274", + "durability": null, + "name": "Cooked slimy eel", + "tradeable": "true", + "destroy": "false", + "weight": "2", + "archery_ticket_price": "0", + "id": "3381" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "274", + "durability": null, + "name": "Cooked slimy eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3382" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "A wooden helmet.", + "durability": null, + "weight": "0.9", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5993", + "name": "Splitbark helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3385", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5993", + "durability": null, + "name": "Splitbark helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3386" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Provides good protection.", + "durability": null, + "weight": "4.5", + "absorb": "6,3,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "26700", + "name": "Splitbark body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3387", + "bonuses": "0,0,0,10,-10,36,26,42,15,0,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26700", + "durability": null, + "name": "Splitbark body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3388" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "These should protect my legs.", + "durability": null, + "weight": "3.6", + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "43700", + "name": "Splitbark legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3389", + "bonuses": "0,0,0,7,-7,22,20,25,10,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43700", + "durability": null, + "name": "Splitbark legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3390" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "These should keep my hands safe.", + "durability": null, + "weight": "0.9", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "2786", + "name": "Splitbark gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3391", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2786", + "durability": null, + "name": "Splitbark gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3392" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Wooden foot protection.", + "durability": null, + "weight": "0.9", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "3808", + "name": "Splitbark boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3393", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,9,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3808", + "durability": null, + "name": "Splitbark boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3394" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "18", + "durability": null, + "name": "Loar remains", + "tradeable": "true", + "weight": "1.35", + "archery_ticket_price": "0", + "id": "3396" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "18", + "durability": null, + "name": "Loar remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3397" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "249", + "durability": null, + "name": "Phrin remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3398" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "249", + "durability": null, + "name": "Phrin remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3399" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "138", + "durability": null, + "name": "Riyl remains", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3400" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "138", + "durability": null, + "name": "Riyl remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3401" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "334", + "durability": null, + "name": "Asyn remains", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3402" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "334", + "durability": null, + "name": "Asyn remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3403" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "5264", + "durability": null, + "name": "Fiyr remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3404" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5264", + "durability": null, + "name": "Fiyr remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3405" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this potion.", + "grand_exchange_price": "137", + "durability": null, + "name": "Ash potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3406" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137", + "durability": null, + "name": "Ash potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3407" + }, + { + "examine": "4 doses serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (4)", + "archery_ticket_price": "0", + "id": "3408" + }, + { + "examine": "3 doses serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (3)", + "archery_ticket_price": "0", + "id": "3410" + }, + { + "examine": "2 doses serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (2)", + "archery_ticket_price": "0", + "id": "3412" + }, + { + "examine": "1 dose serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (1)", + "archery_ticket_price": "0", + "id": "3414" + }, + { + "shop_price": "208", + "examine": "3 doses permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (4)", + "archery_ticket_price": "0", + "id": "3416" + }, + { + "shop_price": "208", + "examine": "3 doses permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (3)", + "archery_ticket_price": "0", + "id": "3417" + }, + { + "shop_price": "208", + "examine": "2 doses permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (2)", + "archery_ticket_price": "0", + "id": "3418" + }, + { + "shop_price": "208", + "examine": "1 dose permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (1)", + "archery_ticket_price": "0", + "id": "3419" + }, + { + "shop_price": "21", + "ge_buy_limit": "10000", + "examine": "A well carved limestone brick.", + "grand_exchange_price": "178", + "durability": null, + "name": "Limestone brick", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3420" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "178", + "durability": null, + "name": "Limestone brick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3421" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "4 doses of olive oil.", + "grand_exchange_price": "678", + "durability": null, + "name": "Olive oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3422" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "678", + "durability": null, + "name": "Olive oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3423" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "3 doses of olive oil.", + "grand_exchange_price": "413", + "durability": null, + "name": "Olive oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3424" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "413", + "durability": null, + "name": "Olive oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3425" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "2 doses of olive oil.", + "grand_exchange_price": "173", + "durability": null, + "name": "Olive oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3426" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "173", + "durability": null, + "name": "Olive oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3427" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "1 dose of olive oil.", + "grand_exchange_price": "110", + "durability": null, + "name": "Olive oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3428" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "110", + "durability": null, + "name": "Olive oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3429" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "3587", + "durability": null, + "name": "Sacred oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3430" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3587", + "durability": null, + "name": "Sacred oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3431" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "2596", + "durability": null, + "name": "Sacred oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3432" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2596", + "durability": null, + "name": "Sacred oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3433" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "1713", + "durability": null, + "name": "Sacred oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3434" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1713", + "durability": null, + "name": "Sacred oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3435" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "1846", + "durability": null, + "name": "Sacred oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3436" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1846", + "durability": null, + "name": "Sacred oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3437" + }, + { + "ge_buy_limit": "25000", + "examine": "Funeral logs used for burning loars.", + "grand_exchange_price": "853", + "durability": null, + "name": "Pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3438" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "853", + "durability": null, + "name": "Pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3439" + }, + { + "ge_buy_limit": "1000", + "examine": "Oak logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "1122", + "durability": null, + "name": "Oak pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3440" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1122", + "durability": null, + "name": "Oak pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3441" + }, + { + "ge_buy_limit": "1000", + "examine": "Willow logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "1164", + "durability": null, + "name": "Willow pyre logs", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3442" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1164", + "durability": null, + "name": "Willow pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3443" + }, + { + "ge_buy_limit": "1000", + "examine": "Maple logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "3313", + "durability": null, + "name": "Maple pyre logs", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3444" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3313", + "durability": null, + "name": "Maple pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3445" + }, + { + "ge_buy_limit": "1000", + "examine": "Yew logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "4424", + "durability": null, + "name": "Yew pyre logs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3446" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4424", + "durability": null, + "name": "Yew pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3447" + }, + { + "ge_buy_limit": "1000", + "examine": "Magic logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "5611", + "durability": null, + "name": "Magic pyre logs", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3448" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5611", + "durability": null, + "name": "Magic pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3449" + }, + { + "examine": "A bronze key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key red", + "archery_ticket_price": "0", + "id": "3450" + }, + { + "examine": "A bronze key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key brown", + "archery_ticket_price": "0", + "id": "3451" + }, + { + "examine": "A bronze key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key crimson", + "archery_ticket_price": "0", + "id": "3452" + }, + { + "examine": "A bronze key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key black", + "archery_ticket_price": "0", + "id": "3453" + }, + { + "examine": "A bronze key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key purple", + "archery_ticket_price": "0", + "id": "3454" + }, + { + "examine": "A steel key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key red", + "archery_ticket_price": "0", + "id": "3455" + }, + { + "examine": "A steel key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key brown", + "archery_ticket_price": "0", + "id": "3456" + }, + { + "examine": "A steel key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key crimson", + "archery_ticket_price": "0", + "id": "3457" + }, + { + "examine": "A steel key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key black", + "archery_ticket_price": "0", + "id": "3458" + }, + { + "examine": "A steel key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key purple", + "archery_ticket_price": "0", + "id": "3459" + }, + { + "examine": "A black key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key red", + "archery_ticket_price": "0", + "id": "3460" + }, + { + "examine": "A black key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key brown", + "archery_ticket_price": "0", + "id": "3461" + }, + { + "examine": "A black key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key crimson", + "archery_ticket_price": "0", + "id": "3462" + }, + { + "examine": "A black key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key black", + "archery_ticket_price": "0", + "id": "3463" + }, + { + "examine": "A black key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key purple", + "archery_ticket_price": "0", + "id": "3464" + }, + { + "examine": "A silver key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key red", + "archery_ticket_price": "0", + "id": "3465" + }, + { + "examine": "A silver key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key brown", + "archery_ticket_price": "0", + "id": "3466" + }, + { + "examine": "A silver key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key crimson", + "archery_ticket_price": "0", + "id": "3467" + }, + { + "examine": "A silver key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key black", + "archery_ticket_price": "0", + "id": "3468" + }, + { + "examine": "A silver key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key purple", + "archery_ticket_price": "0", + "id": "3469" + }, + { + "ge_buy_limit": "1000", + "examine": "Amazingly untouched by time.", + "grand_exchange_price": "956", + "durability": null, + "name": "Fine cloth", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3470" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "956", + "durability": null, + "name": "Fine cloth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3471" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black plateskirt with trim.", + "grand_exchange_price": "3077", + "durability": null, + "name": "Black plateskirt (t)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "3472", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black plateskirt with gold trim.", + "grand_exchange_price": "10600", + "durability": null, + "name": "Black plateskirt (g)", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "3473", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant plateskirt with trim.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "4403", + "name": "Adam plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3474", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant plateskirt with gold trim.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "11000", + "name": "Adam plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3475", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt with gold trim.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "42500", + "name": "Rune plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3476", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "shop_price": "81280", + "ge_buy_limit": "2", + "examine": "Rune plateskirt with trim.", + "durability": null, + "weight": "8", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "38300", + "name": "Rune plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3477", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "42000", + "name": "Zamorak plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3478", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt in the colours of Saradomin.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "44000", + "name": "Saradomin plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3479", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt in the colours of Guthix.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "39100", + "name": "Guthix plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3480", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody with complete gold trim & plating.", + "durability": null, + "weight": "10", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "2500000", + "name": "Gilded platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3481", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2500000", + "durability": null, + "name": "Gilded platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3482" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs with gold plate.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2200000", + "name": "Gilded platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3483", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2200000", + "durability": null, + "name": "Gilded platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3484" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt with gold plate.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "162300", + "name": "Gilded plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3485", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune full helmet with gold plate.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "477200", + "name": "Gilded full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3486", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "477200", + "durability": null, + "name": "Gilded full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3487" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield with gold plate.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "515400", + "name": "Gilded kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3488", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "515400", + "durability": null, + "name": "Gilded kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3489" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3490" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3491" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3492" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3493" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3494" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3495" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3496" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3497" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3498" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3499" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3500" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3501" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3502" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3503" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3504" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3505" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3506" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3507" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3508" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3509" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3510" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3511" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3512" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3513" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3514" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3515" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3516" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3517" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3518" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3519" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3520" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3521" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3522" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3523" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3524" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3525" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3526" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3527" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3528" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3529" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3530" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3531" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3532" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3533" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3534" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3535" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3536" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3537" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3538" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3539" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3540" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3541" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3542" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3543" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3544" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3545" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3546" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3547" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3548" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3549" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3550" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3551" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3552" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3553" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3554" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3555" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3556" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3557" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3558" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3559" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3560" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3561" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3562" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3563" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3564" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3565" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3566" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3567" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3568" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3569" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3570" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3571" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3572" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3573" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3574" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3575" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3576" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3577" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3578" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3579" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3580" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3581" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3582" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3583" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3584" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3585" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3586" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3587" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3588" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3589" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3590" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3591" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3592" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3593" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3594" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3595" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3596" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3597" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3598" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3599" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3600" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3601" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3602" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3603" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3604" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3605" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3607" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3609" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3610" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3611" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3612" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3613" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3614" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3615" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3616" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3617" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3618" + }, + { + "durability": null, + "name": "Black plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3668" + }, + { + "durability": null, + "name": "Black plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3669" + }, + { + "durability": null, + "name": "Adam plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3670" + }, + { + "durability": null, + "name": "Adam plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3671" + }, + { + "durability": null, + "name": "Rune plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3672" + }, + { + "durability": null, + "name": "Rune plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3673" + }, + { + "durability": null, + "name": "Zamorak plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3674" + }, + { + "durability": null, + "name": "Saradomin plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3675" + }, + { + "durability": null, + "name": "Guthix plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3676" + }, + { + "durability": null, + "name": "Gilded plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3677" + }, + { + "shop_price": "13000", + "examine": "An exquisitely shaped tool specially designed for fixing temples.", + "durability": null, + "name": "Flamtaer hammer", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3678" + }, + { + "examine": "A sealed letter of recommendation.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3685" + }, + { + "examine": "It's almost a musical instrument.", + "durability": null, + "name": "Unstrung lyre", + "weight": "1", + "archery_ticket_price": "0", + "id": "3688", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Lyre", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "3689", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "3690", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(1)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "3691", + "equipment_slot": "3" + }, + { + "examine": "I can use this to make a lyre.", + "durability": null, + "name": "Branch", + "weight": "1", + "archery_ticket_price": "0", + "id": "3692" + }, + { + "shop_price": "1000", + "examine": "I can spin this into golden wool.", + "durability": null, + "name": "Golden fleece", + "weight": "1", + "archery_ticket_price": "0", + "id": "3693" + }, + { + "examine": "I can use this to make a lyre.", + "durability": null, + "name": "Golden wool", + "weight": "1", + "archery_ticket_price": "0", + "id": "3694" + }, + { + "turn90cw_anim": "6662", + "examine": "The lowest maintenance pet you will ever have.", + "walk_anim": "6658", + "durability": null, + "turn90ccw_anim": "6663", + "turn180_anim": "6659", + "render_anim": "792", + "equipment_slot": "3", + "stand_anim": "6657", + "name": "Pet rock", + "run_anim": "6660", + "archery_ticket_price": "0", + "id": "3695", + "stand_turn_anim": "6661" + }, + { + "examine": "Talisman to bind the Draugen.", + "durability": null, + "name": "Hunters' talisman", + "archery_ticket_price": "0", + "id": "3696" + }, + { + "examine": "Talisman to bind the Draugen.", + "durability": null, + "name": "Hunters' talisman", + "archery_ticket_price": "0", + "id": "3697" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some flowers from a distant land.", + "durability": null, + "name": "Exotic flower", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3698" + }, + { + "examine": "A hauntingly beautiful love ballad.", + "durability": null, + "name": "Fremennik ballad", + "archery_ticket_price": "0", + "id": "3699" + }, + { + "examine": "A pair of sturdy made custom boots.", + "durability": null, + "name": "Sturdy boots", + "archery_ticket_price": "0", + "id": "3700" + }, + { + "examine": "Could probably be a bit clearer?", + "durability": null, + "name": "Tracking map", + "archery_ticket_price": "0", + "id": "3701" + }, + { + "examine": "A finely crafted string for a custom bow", + "durability": null, + "name": "Custom bow string", + "archery_ticket_price": "0", + "id": "3702" + }, + { + "examine": "An extremely odd, non-edible fish.", + "durability": null, + "name": "Unusual fish", + "archery_ticket_price": "0", + "id": "3703" + }, + { + "examine": "Map showing the best fishing spots out at sea.", + "durability": null, + "name": "Sea fishing map", + "archery_ticket_price": "0", + "id": "3704" + }, + { + "examine": "An estimate of expected local weather conditions.", + "durability": null, + "name": "Weather forecast", + "archery_ticket_price": "0", + "id": "3705" + }, + { + "examine": "Shows the wearer is worthy of the Champions table.", + "durability": null, + "name": "Champions token", + "archery_ticket_price": "0", + "id": "3706" + }, + { + "examine": "Probably the greatest cocktail in the world.", + "durability": null, + "name": "Legendary cocktail", + "archery_ticket_price": "0", + "id": "3707" + }, + { + "examine": "A signed statement promising a reduction on sales tax.", + "durability": null, + "name": "Fiscal statement", + "archery_ticket_price": "0", + "id": "3708" + }, + { + "shop_price": "5000", + "examine": "A legally binding contract promising not to enter the longhall.", + "durability": null, + "name": "Promissory note", + "archery_ticket_price": "0", + "id": "3709" + }, + { + "examine": "This employment contract is for a warrior to act as a bodyguard.", + "durability": null, + "name": "Warriors' contract", + "archery_ticket_price": "0", + "id": "3710" + }, + { + "shop_price": "325", + "examine": "A lot of beer in a barrel.", + "grand_exchange_price": "1555", + "durability": null, + "name": "Keg of beer", + "tradeable": "true", + "weight": "20", + "archery_ticket_price": "0", + "id": "3711" + }, + { + "examine": "Suspiciously close to beer, but without the side effects.", + "durability": null, + "name": "Low alcohol keg", + "weight": "20", + "archery_ticket_price": "0", + "id": "3712" + }, + { + "examine": "It's some kind of weird little parcel thing.", + "durability": null, + "name": "Strange object", + "archery_ticket_price": "0", + "id": "3713" + }, + { + "examine": "It's some kind of weird little parcel thing.", + "durability": null, + "name": "Lit strange object", + "archery_ticket_price": "0", + "id": "3714" + }, + { + "examine": "A red coloured disk, apparently made out of wood.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3715" + }, + { + "examine": "A red coloured disk, apparently made out of wood.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3716" + }, + { + "examine": "A very attractive magnet.", + "durability": null, + "name": "Magnet", + "archery_ticket_price": "0", + "id": "3718" + }, + { + "examine": "Some blue thread.", + "durability": null, + "name": "Thread", + "archery_ticket_price": "0", + "id": "3719" + }, + { + "examine": "A small pick for cracking small objects.", + "durability": null, + "name": "Pick", + "archery_ticket_price": "0", + "id": "3720" + }, + { + "examine": "Might be fun to play with in the bath.", + "durability": null, + "name": "Ship toy", + "archery_ticket_price": "0", + "id": "3721" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's a bucket of salty water.", + "durability": null, + "name": "Full bucket", + "archery_ticket_price": "0", + "id": "3722" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is eighty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "4/5ths full bucket", + "archery_ticket_price": "0", + "id": "3723" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is sixty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "3/5ths full bucket", + "archery_ticket_price": "0", + "id": "3724" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is forty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "2/5ths full bucket", + "archery_ticket_price": "0", + "id": "3725" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is twenty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "1/5ths full bucket", + "archery_ticket_price": "0", + "id": "3726" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Empty bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3727" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket of water is frozen solid.", + "durability": null, + "name": "Frozen bucket", + "archery_ticket_price": "0", + "id": "3728" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug is completely full. It has a 3 painted on its side.", + "durability": null, + "name": "Full jug", + "archery_ticket_price": "0", + "id": "3729" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug is two thirds full. It has a 3 painted on its side.", + "durability": null, + "name": "2/3rds full jug", + "archery_ticket_price": "0", + "id": "3730" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug is one third full. It has a 3 painted on its side.", + "durability": null, + "name": "1/3rds full jug", + "archery_ticket_price": "0", + "id": "3731" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "1", + "examine": "This jug is empty.", + "grand_exchange_price": "164", + "durability": null, + "name": "Empty jug", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "3732" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug of water is frozen solid.", + "durability": null, + "name": "Frozen jug", + "archery_ticket_price": "0", + "id": "3733" + }, + { + "examine": "An unusually shaped vase. You can see something glinting inside.", + "durability": null, + "name": "Vase", + "archery_ticket_price": "0", + "id": "3734" + }, + { + "examine": "An unusually shaped vase full of water. You can see something glinting inside.", + "durability": null, + "name": "Vase of water", + "archery_ticket_price": "0", + "id": "3735" + }, + { + "examine": "An unusually shaped vase full of ice. You can see something glinting inside.", + "durability": null, + "name": "Frozen vase", + "archery_ticket_price": "0", + "id": "3736" + }, + { + "examine": "This looks like a lid to some kind of container.", + "durability": null, + "name": "Vase lid", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3737" + }, + { + "examine": "The lid is screwed on tightly. ", + "durability": null, + "name": "Sealed vase", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3738" + }, + { + "examine": "The lid is screwed on tightly. It is full of water.", + "durability": null, + "name": "Sealed vase", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3739" + }, + { + "examine": "The lid is screwed on tightly. It is very cold. ", + "durability": null, + "name": "Sealed vase", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3740" + }, + { + "examine": "A small, cold key.", + "durability": null, + "name": "Frozen key", + "archery_ticket_price": "0", + "id": "3741" + }, + { + "examine": "The colouring on it seems to be some kind of sticky goop.", + "durability": null, + "name": "Red herring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3742" + }, + { + "examine": "A red coloured disk, apparently made out of wood.", + "durability": null, + "name": "Red disk", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3743" + }, + { + "examine": "A simple looking disk made of wood.", + "durability": null, + "name": "Wooden disk", + "archery_ticket_price": "0", + "id": "3744" + }, + { + "shop_price": "27", + "examine": "The key to leave the Seer's house.", + "durability": null, + "name": "Seer's key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3745" + }, + { + "examine": "Yup, it's sticky, it's red and it's goop.", + "durability": null, + "name": "Sticky red goop", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "3746" + }, + { + "durability": null, + "name": "Sticky red goop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3747" + }, + { + "remove_head": "true", + "examine": "A sturdy helm worn only by Fremennik clan members.", + "durability": null, + "name": "Fremennik helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "3748", + "absorb": "1,0,2", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helmet is worn by archers.", + "durability": null, + "weight": "2", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48900", + "name": "Archer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3749", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Archer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3750" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helmet is worn by berserkers.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "60900", + "name": "Berserker helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3751", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Berserker helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3752" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helm is worn by warriors.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "50700", + "name": "Warrior helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3753", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "50700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Warrior helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3754" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helm is worn by farseers.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "47900", + "name": "Farseer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3755", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Farseer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3756" + }, + { + "attack_anims": "390,390,381,390", + "examine": "A sword used only by Fremennik warriors.", + "durability": null, + "name": "Fremennik blade", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "4", + "weapon_interface": "6", + "id": "3757", + "bonuses": "6,29,-2,0,0,0,1,0,0,0,0,28,0,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "examine": "A shield worn by Fremennik warriors.", + "durability": null, + "name": "Fremennik shield", + "destroy": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "3758", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "697", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3759", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "697", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3760" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "54", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3761", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "54", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3762" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "581", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3763", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "581", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3764" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "912", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3765", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "912", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3766" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "100", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3767", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "100", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3768" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "486", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3769", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "486", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3770" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "242", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3771", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "242", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3772" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "500", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3773", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "500", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3774" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "450", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3775", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "450", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3776" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "674", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3777", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "674", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3778" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "809", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3779", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "809", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3780" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "632", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3781", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "632", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3782" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "517", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3783", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "517", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3784" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "398", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3785", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "398", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3786" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "283", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3787", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "283", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3788" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "966", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3789", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "966", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3790" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "205", + "durability": null, + "name": "Fremennik boots", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3791", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "205", + "durability": null, + "name": "Fremennik boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3792" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "The latest fashion of Rellekka.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1191", + "name": "Fremennik robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3793", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "durability": null, + "name": "Fremennik robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3794" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "The latest fashion of Rellekka.", + "grand_exchange_price": "663", + "durability": null, + "name": "Fremennik skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "3795", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "663", + "durability": null, + "name": "Fremennik skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3796" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "grand_exchange_price": "2380", + "durability": null, + "name": "Fremennik hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3797", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2380", + "durability": null, + "name": "Fremennik hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3798" + }, + { + "ge_buy_limit": "10", + "shop_price": "650", + "examine": "These will keep my hands warm!", + "grand_exchange_price": "172", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "3799", + "bonuses": "0,0,0,0,0,0,1,2,0,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "172", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3800" + }, + { + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "A lot of beer in a barrel. Beer in a barrel - a specialty of the Fremennik Province.", + "grand_exchange_price": "1817", + "durability": null, + "name": "Keg of beer", + "tradeable": "true", + "weight": "20", + "archery_ticket_price": "0", + "id": "3801" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1817", + "durability": null, + "name": "Keg of beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3802" + }, + { + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "393", + "durability": null, + "name": "Beer", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3803" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "393", + "durability": null, + "name": "Beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3804" + }, + { + "shop_price": "26", + "examine": "A big cup for a big thirst.", + "durability": null, + "name": "Tankard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3805" + }, + { + "durability": null, + "name": "Tankard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3806" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Saradomin page 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3827" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "686000", + "durability": null, + "name": "Saradomin page 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3828" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "522800", + "durability": null, + "name": "Saradomin page 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3829" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "629500", + "durability": null, + "name": "Saradomin page 4", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3830" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "7100000", + "durability": null, + "name": "Zamorak page 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3831" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "5400000", + "durability": null, + "name": "Zamorak page 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3832" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "4700000", + "durability": null, + "name": "Zamorak page 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3833" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "5900000", + "durability": null, + "name": "Zamorak page 4", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3834" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Guthix page 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3835" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "997100", + "durability": null, + "name": "Guthix page 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3836" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "953100", + "durability": null, + "name": "Guthix page 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3837" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Guthix page 4", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3838" + }, + { + "shop_price": "5000", + "examine": "An incomplete book of Saradomin.", + "durability": null, + "name": "Damaged book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3839", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "5000", + "examine": "The Holy book of Saradomin.", + "durability": null, + "name": "Holy book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3840", + "bonuses": "0,0,0,0,0,8,8,8,8,8,8,0,5,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "5000", + "examine": "An incomplete book of Zamorak.", + "durability": null, + "name": "Damaged book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3841", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "examine": "The unholy book of Zamorak.", + "durability": null, + "name": "Unholy book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3842", + "bonuses": "8,8,8,8,8,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "5000", + "examine": "An incomplete book of Guthix.", + "durability": null, + "name": "Damaged book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3843", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "examine": "The holy book of Guthix.", + "durability": null, + "name": "Book of balance", + "weight": "1", + "archery_ticket_price": "0", + "id": "3844", + "bonuses": "4,4,4,4,4,4,4,4,4,4,4,0,5,0,0", + "equipment_slot": "5" + }, + { + "examine": "Looks like some kind of manual.", + "durability": null, + "name": "Manual", + "tradeable": "false", + "destroy": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3847" + }, + { + "examine": "A key to the front door of the lighthouse. (Horror from the Deep)", + "durability": null, + "name": "Lighthouse key", + "archery_ticket_price": "0", + "id": "3848" + }, + { + "examine": "Looks old and rusty...", + "durability": null, + "name": "Rusty casket", + "tradeable": "false", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3849" + }, + { + "durability": null, + "name": "Unholy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3852" + }, + { + "shop_price": "490", + "ge_buy_limit": "10000", + "examine": "An enchanted necklace.", + "grand_exchange_price": "852", + "durability": null, + "name": "Games necklace(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3853", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "852", + "durability": null, + "name": "Games necklace(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3854" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3855", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3856" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3857", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3858" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3859", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3860" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3861", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3862" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3863", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3864" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3865", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3866" + }, + { + "shop_price": "490", + "ge_buy_limit": "10000", + "examine": "An enchanted necklace.", + "grand_exchange_price": "2093", + "durability": null, + "name": "Games necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3867", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2093", + "durability": null, + "name": "Games necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3868" + }, + { + "durability": null, + "name": "Stool", + "archery_ticket_price": "0", + "id": "3893", + "equipment_slot": "3" + }, + { + "examine": "It's not very good.", + "durability": null, + "name": "Awful anthem", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3894" + }, + { + "examine": "Much better.", + "durability": null, + "name": "Good anthem", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3895" + }, + { + "examine": "Just needs the King's signature.", + "durability": null, + "name": "Treaty", + "archery_ticket_price": "0", + "id": "3896" + }, + { + "examine": "For making a giant pen.", + "durability": null, + "name": "Giant nib", + "archery_ticket_price": "0", + "id": "3897" + }, + { + "examine": "The king should be able to use this.", + "durability": null, + "name": "Giant pen", + "archery_ticket_price": "0", + "id": "3898" + }, + { + "shop_price": "15", + "examine": "Not as good as a pet frog.", + "durability": null, + "name": "Iron sickle", + "weight": "1.6", + "archery_ticket_price": "0", + "id": "3899", + "weapon_interface": "6", + "bonuses": "0,0,0,0,0,0,1,1,1,1,0,1,0,0,0", + "equipment_slot": "3" + }, + { + "examine": "Managing Thine Kingdom for Noobes by A. Ghrim.", + "durability": null, + "name": "Ghrim's book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3901" + }, + { + "examine": "A pile of gout tubers suitable for use in mountainous terrain.", + "durability": null, + "name": "Hardy gout tuber", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4001" + }, + { + "examine": "It looks like some kind of control panel.", + "durability": null, + "name": "Spare controls", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "4002" + }, + { + "examine": "It's the official Gnome Royal Seal, signed by King Narode Shareen.", + "durability": null, + "name": "Gnome royal seal", + "archery_ticket_price": "0", + "id": "4004" + }, + { + "shop_price": "160", + "examine": "Unreadable orders handwritten by King Narnode Shareen.", + "durability": null, + "name": "Narnode's orders", + "archery_ticket_price": "0", + "id": "4005" + }, + { + "shop_price": "10", + "examine": "Magical monkey talking dentures! What more can we say? Ook!", + "durability": null, + "name": "Monkey dentures", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "4006" + }, + { + "examine": "A gold bar with a talkative monkey spirit.", + "durability": null, + "name": "Enchanted bar", + "weight": "2", + "archery_ticket_price": "0", + "id": "4007" + }, + { + "shop_price": "3", + "examine": "It's... the eye of a gnome! Now what on earth could one do with this?", + "durability": null, + "name": "Eye of gnome", + "weight": "1", + "archery_ticket_price": "0", + "id": "4008" + }, + { + "shop_price": "3", + "examine": "It's... the eye of a gnome! Now what on earth could one do with this?", + "durability": null, + "name": "Eye of gnome", + "weight": "1", + "archery_ticket_price": "0", + "id": "4009" + }, + { + "shop_price": "3", + "examine": "They are Monkey Nuts. Yummy.", + "durability": null, + "name": "Monkey nuts", + "archery_ticket_price": "0", + "id": "4012" + }, + { + "shop_price": "50", + "examine": "It's a monkey bar. It looks highly nutritious.", + "durability": null, + "name": "Monkey bar", + "archery_ticket_price": "0", + "id": "4014" + }, + { + "shop_price": "300", + "examine": "It's a bowl full of mushy banana", + "durability": null, + "name": "Banana stew", + "archery_ticket_price": "0", + "id": "4016" + }, + { + "examine": "It's an amulet mould shaped like a monkey head.", + "durability": null, + "name": "M'amulet mould", + "weight": "1", + "archery_ticket_price": "0", + "id": "4020" + }, + { + "examine": "It's an Amulet of Monkey Speak. It makes vague chattering noises.", + "durability": null, + "name": "M'speak amulet", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4021", + "equipment_slot": "2" + }, + { + "examine": "It's an unstrung Amulet of Monkey Speak. It makes vague chattering noises.", + "durability": null, + "name": "M'speak amulet", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4022" + }, + { + "shop_price": "1000", + "examine": "A magic talisman in shape of a monkey head.", + "durability": null, + "name": "Monkey talisman", + "weight": "1.25", + "archery_ticket_price": "0", + "id": "4023" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4024", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4025", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4026", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4027", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4028", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4029", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4030", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4031", + "equipment_slot": "3" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Dummy", + "archery_ticket_price": "0", + "id": "4032" + }, + { + "examine": "It's a very ancient skull from some kind of ape.", + "durability": null, + "name": "Monkey skull", + "archery_ticket_price": "0", + "id": "4034" + }, + { + "examine": "It is the official sigil of the 10th squad of the Royal Guard.", + "durability": null, + "name": "10th squad sigil", + "archery_ticket_price": "0", + "id": "4035", + "equipment_slot": "2" + }, + { + "turn90cw_anim": "1424", + "examine": "The Holy Team Standard", + "walk_anim": "1422", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Saradomin banner", + "tradeable": "false", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "4037", + "stand_turn_anim": "1426" + }, + { + "durability": null, + "name": "Saradomin banner", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4038" + }, + { + "turn90cw_anim": "1424", + "examine": "The Zamorak team's flag.", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Zamorak banner", + "tradeable": "false", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "4039", + "stand_turn_anim": "1426" + }, + { + "durability": null, + "name": "Zamorak banner", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4040" + }, + { + "examine": "The colours of Saradomin/Zamorak.", + "durability": null, + "name": "Hooded cloak", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4041", + "equipment_slot": "1" + }, + { + "examine": "The colours of Saradomin/Zamorak.", + "durability": null, + "name": "Hooded cloak", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4042", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Rock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4044" + }, + { + "examine": "I could use this to destroy things...", + "durability": null, + "name": "Explosive potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4045" + }, + { + "durability": null, + "name": "Explosive potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4046" + }, + { + "examine": "A coil of rope.", + "durability": null, + "name": "Climbing rope", + "archery_ticket_price": "0", + "id": "4047" + }, + { + "durability": null, + "name": "Climbing rope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4048" + }, + { + "examine": "A box of bandages for healing.", + "durability": null, + "name": "Bandages", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4049" + }, + { + "durability": null, + "name": "Bandages", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4050" + }, + { + "examine": "Good for repairing a broken cannon.", + "durability": null, + "name": "Toolkit", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4051" + }, + { + "durability": null, + "name": "Toolkit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4052" + }, + { + "examine": "Handy for hindering the enemy team's movement.", + "durability": null, + "name": "Barricade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4053" + }, + { + "durability": null, + "name": "Barricade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4054" + }, + { + "shop_price": "5", + "examine": "It's a manual for Castle Wars", + "durability": null, + "name": "Castlewars manual", + "weight": "1", + "archery_ticket_price": "0", + "id": "4055" + }, + { + "examine": "I can exchange these for further items.", + "durability": null, + "name": "Castle wars ticket", + "archery_ticket_price": "0", + "id": "4067" + }, + { + "requirements": "{0,5}", + "shop_price": "50", + "turn90cw_anim": "821", + "examine": "A very decorative sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "equipment_slot": "3", + "stand_anim": "808", + "name": "Decorative sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4068", + "stand_turn_anim": "823", + "bonuses": "13,18,-2,0,0,0,3,2,0,0,0,16,0,0,0" + }, + { + "remove_sleeves": "true", + "requirements": "{1,5}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4069", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,5}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4070", + "bonuses": "0,0,0,-21,-7,17,16,15,-4,16,2,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "40", + "examine": "A very decorative helm.", + "durability": null, + "name": "Decorative helm", + "weight": "1", + "archery_ticket_price": "0", + "id": "4071", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,3,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,5}", + "shop_price": "60", + "examine": "A very decorative shield.", + "durability": null, + "name": "Decorative shield", + "archery_ticket_price": "0", + "id": "4072", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Not so useful for lighting a fire.", + "durability": null, + "name": "Damp tinderbox", + "archery_ticket_price": "0", + "id": "4073" + }, + { + "durability": null, + "name": "Damp tinderbox", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4074" + }, + { + "examine": "A bizarre fungus. It glows with a pale blue light.", + "durability": null, + "name": "Glowing fungus", + "archery_ticket_price": "0", + "id": "4075" + }, + { + "examine": "A key I found in the lower levels of the Morytanian mines. (Haunted Mine) / As the 'Innocent-looking key': A shiny key sitting quietly on a crate.", + "durability": null, + "name": "Crystal-mine key", + "archery_ticket_price": "0", + "id": "4077" + }, + { + "examine": "I stole this from a Saradominist I met South of Mort'ton.", + "durability": null, + "name": "Zealot's key", + "archery_ticket_price": "0", + "id": "4078" + }, + { + "examine": "A gift from Santa.", + "durability": null, + "name": "Yo-yo", + "archery_ticket_price": "0", + "id": "4079" + }, + { + "examine": "Increases the wearer's strength and accuracy by 15% when fighting the undead.", + "durability": null, + "name": "Salve amulet", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "4081", + "bonuses": "0,0,0,0,0,3,3,3,0,0,3,0,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "An unstrung crystal imbued with the power of Saradomin.", + "durability": null, + "name": "Salve shard", + "archery_ticket_price": "0", + "id": "4082" + }, + { + "examine": "Unwaxed: It needs waxing before I can use it. Waxed: A waxed sled.", + "durability": null, + "name": "Sled", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4083", + "equipment_slot": "3" + }, + { + "turn90cw_anim": "1468", + "examine": "Unwaxed: It needs waxing before I can use it. Waxed: A waxed sled.", + "walk_anim": "1468", + "durability": null, + "turn90ccw_anim": "1468", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "1468", + "render_anim": "1119", + "equipment_slot": "3", + "stand_anim": "1461", + "name": "Sled", + "run_anim": "1468", + "archery_ticket_price": "0", + "id": "4084", + "stand_turn_anim": "1468" + }, + { + "examine": "I can use this to wax my sled.", + "durability": null, + "name": "Wax", + "archery_ticket_price": "0", + "id": "4085", + "equipment_slot": "5" + }, + { + "examine": "These pale flowers have a pungent odour.", + "durability": null, + "name": "Trollweiss", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "4086", + "weapon_interface": "12", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0", + "equipment_slot": "3" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "Looks pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "190500", + "name": "Dragon platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4087", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "190500", + "durability": null, + "name": "Dragon platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4088" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "13700", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "4089", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13700", + "durability": null, + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4090" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "ge_buy_limit": "100", + "examine": "The upper half of a magical robe.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "72100", + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4091", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "72100", + "durability": null, + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4092" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "ge_buy_limit": "100", + "examine": "The lower half of a magical robe.", + "durability": null, + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "47700", + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4093", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47700", + "durability": null, + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4094" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical gloves.", + "durability": null, + "weight": "0.4", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "5913", + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4095", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5913", + "durability": null, + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4096" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical boots.", + "durability": null, + "weight": "0.4", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "6303", + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4097", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6303", + "durability": null, + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4098" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "Black: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "16700", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "4099", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16700", + "durability": null, + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4100" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "ge_buy_limit": "100", + "examine": "The upper half of a magical robe.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "75100", + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4101", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "75100", + "durability": null, + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4102" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "ge_buy_limit": "100", + "examine": "The lower half of a magical robe.", + "durability": null, + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "50700", + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4103", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "50700", + "durability": null, + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4104" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Dark magical gloves.", + "durability": null, + "weight": "0.4", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "8913", + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4105", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8913", + "durability": null, + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4106" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical boots.", + "durability": null, + "weight": "0.4", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "9303", + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4107", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9303", + "durability": null, + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4108" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "White: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "16700", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "4109", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16700", + "durability": null, + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4110" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "ge_buy_limit": "100", + "examine": "The upper half of a magical robe.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "75100", + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4111", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "75100", + "durability": null, + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4112" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "ge_buy_limit": "100", + "examine": "The lower half of a magical robe.", + "durability": null, + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "50700", + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4113", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "50700", + "durability": null, + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4114" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Bright magical gloves.", + "durability": null, + "weight": "0.4", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "8913", + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4115", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8913", + "durability": null, + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4116" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical boots.", + "durability": null, + "weight": "0.4", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "9303", + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4117", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9303", + "durability": null, + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4118" + }, + { + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "359", + "durability": null, + "name": "Bronze boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4119", + "bonuses": "0,0,0,-3,-1,1,2,3,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "359", + "durability": null, + "name": "Bronze boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4120" + }, + { + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "17000", + "durability": null, + "name": "Iron boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4121", + "bonuses": "0,0,0,-3,-1,2,3,4,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17000", + "durability": null, + "name": "Iron boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4122" + }, + { + "requirements": "{1,5}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "258", + "durability": null, + "name": "Steel boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4123", + "bonuses": "0,0,0,-3,-1,5,6,7,0,0,5,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "258", + "durability": null, + "name": "Steel boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4124" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "317", + "durability": null, + "name": "Black boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4125", + "bonuses": "0,0,0,-3,-1,7,8,9,0,0,7,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "317", + "durability": null, + "name": "Black boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4126" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "580", + "durability": null, + "name": "Mithril boots", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4127", + "bonuses": "0,0,0,-3,-1,8,9,10,0,0,8,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "580", + "durability": null, + "name": "Mithril boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4128" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "1336", + "durability": null, + "name": "Adamant boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4129", + "bonuses": "0,0,0,-3,-1,10,11,12,0,0,9,1,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1336", + "durability": null, + "name": "Adamant boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4130" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "durability": null, + "weight": "1.3", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "7474", + "name": "Rune boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4131", + "bonuses": "0,0,0,-3,-1,12,13,14,0,0,10,2,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7474", + "durability": null, + "name": "Rune boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4132" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4133" + }, + { + "examine": "A spiky crawling critter. (level 23) Not very tasty-looking. (level 138)", + "durability": null, + "name": "Cave crawler", + "archery_ticket_price": "0", + "attack_speed": "3", + "id": "4134" + }, + { + "examine": "A tortured screaming soul.", + "durability": null, + "name": "Banshee", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4135" + }, + { + "examine": "The slime of evil.", + "durability": null, + "name": "Rockslug", + "archery_ticket_price": "0", + "id": "4136" + }, + { + "examine": "The winged reptile.", + "durability": null, + "name": "Cockatrice", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4137" + }, + { + "examine": "A small fire demon.", + "durability": null, + "name": "Pyrefiend", + "archery_ticket_price": "0", + "id": "4138" + }, + { + "examine": "The eyes of evil.", + "durability": null, + "name": "Basilisk", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4139" + }, + { + "examine": "An evil magic user.", + "durability": null, + "name": "Infernal mage", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4140" + }, + { + "examine": "The tongue of evil.", + "durability": null, + "name": "Bloodveld", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4141" + }, + { + "examine": "• Needs cream.....• Wibbly.• Wobbly...• There's always room for jelly.• Doesn't look so tough...• Looks scared to see me.", + "durability": null, + "name": "Jelly", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4142" + }, + { + "durability": null, + "name": "Turoth", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4143" + }, + { + "examine": "A very smelly ghost.", + "durability": null, + "name": "Abberant spectre", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4144" + }, + { + "examine": "The vacuumed face of evil.", + "durability": null, + "name": "Dust devil", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4145" + }, + { + "durability": null, + "name": "Kurask", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4146" + }, + { + "examine": "Flies like a rock.", + "durability": null, + "name": "Gargoyle", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4147" + }, + { + "durability": null, + "name": "Nechryael", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4148" + }, + { + "examine": "A denizen of the Abyss!", + "durability": null, + "name": "Abyssal demon", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4149" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4150", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,28,0,0" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A weapon from the Abyss.", + "walk_anim": "1660", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "1659", + "equipment_slot": "3", + "attack_anims": "1658,1658,1658,1658", + "grand_exchange_price": "413500", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1661", + "archery_ticket_price": "0", + "id": "4151", + "stand_turn_anim": "823", + "bonuses": "0,82,0,0,0,0,0,0,0,0,0,82,0,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "0.45", + "weapon_interface": "11", + "equip_audio": "2249", + "render_anim": "620", + "lendable": "true", + "attack_audios": "2720,0,0,0", + "name": "Abyssal whip" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "413500", + "durability": null, + "name": "Abyssal whip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4152" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1663", + "examine": "Simplicity is the best weapon.", + "walk_anim": "1663", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1663", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1663", + "defence_anim": "1666", + "equipment_slot": "3", + "attack_anims": "1665,1665,1665,1665", + "grand_exchange_price": "29900", + "stand_anim": "1662", + "tradeable": "true", + "run_anim": "1664", + "archery_ticket_price": "0", + "id": "4153", + "stand_turn_anim": "823", + "bonuses": "0,0,81,0,0,0,0,0,0,0,0,79,0,0,0", + "requirements": "{0,50}-{2,50}", + "durability": null, + "weight": "4.5", + "weapon_interface": "10", + "render_anim": "27", + "lendable": "true", + "attack_audios": "2714,0,0,0", + "name": "Granite maul" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "29900", + "durability": null, + "name": "Granite maul", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4154" + }, + { + "shop_price": "1", + "examine": "I can contact the Slayer Masters with this.", + "durability": null, + "name": "Enchanted gem", + "archery_ticket_price": "0", + "id": "4155" + }, + { + "requirements": "{1,20}-{18,25}", + "shop_price": "5000", + "ge_buy_limit": "100", + "examine": "I can just about see things in this shield's reflection.", + "durability": null, + "weight": "2.2", + "equipment_slot": "5", + "grand_exchange_price": "3318", + "name": "Mirror shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4156", + "bonuses": "0,0,0,0,0,10,15,5,5,10,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3318", + "durability": null, + "name": "Mirror shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4157" + }, + { + "requirements": "{0,55}-{18,50}", + "shop_price": "31000", + "turn90cw_anim": "1207", + "examine": "A spear with a leaf-shaped point.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "stand_anim": "813", + "name": "Leaf-bladed spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4158", + "stand_turn_anim": "1209", + "bonuses": "47,42,36,0,0,1,1,0,0,0,0,50,0,0,0" + }, + { + "requirements": "{0,55}-{18,50}", + "shop_price": "31000", + "examine": "A spear with a leaf-shaped point.", + "durability": null, + "name": "Leaf-bladed spear", + "weight": "2", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "4159", + "equipment_slot": "3" + }, + { + "requirements": "{18,55}-{4,50}", + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrow", + "archery_ticket_price": "0", + "id": "4160", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "A bag of salt.", + "grand_exchange_price": "1", + "durability": null, + "name": "Bag of salt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4161" + }, + { + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "I can even smash stone with this.", + "grand_exchange_price": "140", + "durability": null, + "name": "Rock hammer", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "4162", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "140", + "durability": null, + "name": "Rock hammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4163" + }, + { + "requirements": "{18,10}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Stops me breathing in too much dust.", + "grand_exchange_price": "615", + "durability": null, + "name": "Face mask", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4164", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "615", + "durability": null, + "name": "Face mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4165" + }, + { + "requirements": "{18,15}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "These will protect my ears from loud noise.", + "grand_exchange_price": "484", + "durability": null, + "name": "Earmuffs", + "tradeable": "true", + "weight": "2.6", + "archery_ticket_price": "0", + "id": "4166", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "484", + "durability": null, + "name": "Earmuffs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4167" + }, + { + "requirements": "{18,60}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Protects me from any bad smells.", + "grand_exchange_price": "523", + "durability": null, + "name": "Nose peg", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "4168", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "523", + "durability": null, + "name": "Nose peg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4169" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An old and magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "12100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4170", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,12,0,2,3,1,10,0,0,35,0,0,0", + "requirements": "{18,55}-{6,50}", + "shop_price": "21000", + "durability": null, + "weight": "1.8", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Slayer's staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12100", + "durability": null, + "name": "Slayer's staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4171" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4172", + "equipment_slot": "13" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4173", + "equipment_slot": "13" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4174", + "equipment_slot": "13" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4175", + "equipment_slot": "13" + }, + { + "examine": "A weapon from the Abyss.", + "rare_item": "true", + "durability": null, + "weight": "0.45", + "attack_speed": "4", + "render_anim": "620", + "lendable": "true", + "grand_exchange_price": "388392", + "name": "Abyssal whip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4178", + "bonuses": "0,82,0,0,0,0,0,0,0,0,0,82,0,0,0" + }, + { + "examine": "A big, bad troll.", + "durability": null, + "name": "Stick", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "4179" + }, + { + "lendable": "true", + "examine": "Looks pretty heavy.", + "grand_exchange_price": "165900", + "durability": null, + "name": "Dragon platelegs", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "4180", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "durability": null, + "name": "Mouth grip", + "archery_ticket_price": "0", + "id": "4181", + "equipment_slot": "3" + }, + { + "examine": "A pale, tough looking herb.", + "durability": null, + "name": "Goutweed", + "archery_ticket_price": "0", + "id": "4182" + }, + { + "examine": "A six-pointed marble and obsidian amulet", + "durability": null, + "name": "Star amulet", + "archery_ticket_price": "0", + "id": "4183" + }, + { + "examine": "Upon close examination, this seems to be a key.", + "durability": null, + "name": "Cavern key", + "archery_ticket_price": "0", + "id": "4184" + }, + { + "examine": "Upon close examination, this seems to be a key.", + "durability": null, + "name": "Tower key", + "archery_ticket_price": "0", + "id": "4185" + }, + { + "examine": "Upon close examination, this seems to be a key.", + "durability": null, + "name": "Shed key", + "archery_ticket_price": "0", + "id": "4186" + }, + { + "examine": "Triangular in shape, made from marble, and as large as your hand.", + "durability": null, + "name": "Marble amulet", + "archery_ticket_price": "0", + "id": "4187" + }, + { + "examine": "Triangular in shape, made from obsidian, and as large as your hand.", + "durability": null, + "name": "Obsidian amulet", + "archery_ticket_price": "0", + "id": "4188" + }, + { + "examine": "A length of garden cane.", + "durability": null, + "name": "Garden cane", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4189" + }, + { + "examine": "See article", + "durability": null, + "name": "Garden brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4190" + }, + { + "examine": "See article", + "durability": null, + "name": "Extended brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4191" + }, + { + "examine": "See article", + "durability": null, + "name": "Extended brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4192" + }, + { + "examine": "See article", + "durability": null, + "name": "Extended brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4193", + "equipment_slot": "3" + }, + { + "examine": "A pair of limp, dead arms.", + "durability": null, + "name": "Arms", + "weight": "2", + "archery_ticket_price": "0", + "id": "4195" + }, + { + "examine": "A pair of lifeless, rotting legs.", + "durability": null, + "name": "Legs", + "archery_ticket_price": "0", + "id": "4196" + }, + { + "examine": "No brain: A gruesome, decapitated head, whose brain has rotted away. Brain: A gruesome, decapitated head - its eyes stare lifelessly at nothing.", + "durability": null, + "name": "Decapitated head", + "weight": "3", + "archery_ticket_price": "0", + "id": "4197" + }, + { + "examine": "No brain: A gruesome, decapitated head, whose brain has rotted away. Brain: A gruesome, decapitated head - its eyes stare lifelessly at nothing.", + "durability": null, + "name": "Decapitated head", + "weight": "3", + "archery_ticket_price": "0", + "id": "4198" + }, + { + "shop_price": "50", + "examine": "A pickled brain, submerged inside a jar of vinegar.", + "durability": null, + "name": "Pickled brain", + "archery_ticket_price": "0", + "id": "4199" + }, + { + "examine": "A mould for making silver lightning conductors.", + "durability": null, + "name": "Conductor mould", + "archery_ticket_price": "0", + "id": "4200" + }, + { + "examine": "A silver lightning conductor.", + "durability": null, + "name": "Conductor", + "weight": "4", + "archery_ticket_price": "0", + "id": "4201" + }, + { + "destroy_message": "Another can be received from pickpocketing Dr. Fenkenstrain in the tower.", + "examine": "Unactivated: The Ring of charos.Activated: The power within this ring has been activated.", + "durability": null, + "name": "Ring of charos", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4202", + "equipment_slot": "12" + }, + { + "examine": "This consecration seed looks grey and dead.", + "durability": null, + "name": "Consecration seed", + "archery_ticket_price": "0", + "id": "4205" + }, + { + "examine": "This consecration seed looks grey and dead.", + "durability": null, + "name": "Consecration seed", + "archery_ticket_price": "0", + "id": "4206" + }, + { + "ge_buy_limit": "10", + "examine": "This crystal seed looks grey and dead.", + "grand_exchange_price": "92600", + "durability": null, + "name": "Crystal seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4207" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "92600", + "durability": null, + "name": "Crystal seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4208" + }, + { + "examine": "A book on Cadarn clan history.", + "durability": null, + "name": "Cadarn lineage", + "archery_ticket_price": "0", + "id": "4209" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "ge_buy_limit": "10", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "905300", + "attack_audios": "2700,0,0,0", + "name": "New crystal bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4212", + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "905300", + "durability": null, + "name": "New crystal bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4213" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow full", + "archery_ticket_price": "0", + "id": "4214", + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 9/10", + "archery_ticket_price": "0", + "id": "4215", + "bonuses": "0,0,0,0,96,0,0,0,0,0,0,0,0,0,68" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 8/10", + "archery_ticket_price": "0", + "id": "4216", + "bonuses": "0,0,0,0,92,0,0,0,0,0,0,0,0,0,66" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 7/10", + "archery_ticket_price": "0", + "id": "4217", + "bonuses": "0,0,0,0,88,0,0,0,0,0,0,0,0,0,64" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 6/10", + "archery_ticket_price": "0", + "id": "4218", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,62" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 5/10", + "archery_ticket_price": "0", + "id": "4219", + "bonuses": "0,0,0,0,80,0,0,0,0,0,0,0,0,0,60" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 4/10", + "archery_ticket_price": "0", + "id": "4220", + "bonuses": "0,0,0,0,76,0,0,0,0,0,0,0,0,0,58" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 3/10", + "archery_ticket_price": "0", + "id": "4221", + "bonuses": "0,0,0,0,72,0,0,0,0,0,0,0,0,0,56" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 2/10", + "archery_ticket_price": "0", + "id": "4222", + "bonuses": "0,0,0,0,68,0,0,0,0,0,0,0,0,0,54" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 1/10", + "archery_ticket_price": "0", + "id": "4223", + "bonuses": "0,0,0,0,64,0,0,0,0,0,0,0,0,0,52" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "ge_buy_limit": "10", + "examine": "A nice sturdy crystal shield.", + "durability": null, + "weight": "2", + "absorb": "6,0,12", + "equipment_slot": "5", + "grand_exchange_price": "756900", + "name": "New crystal shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4224", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield full", + "weight": "2", + "archery_ticket_price": "0", + "id": "4225", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 9/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4226", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,49,52,51,0,78,68,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 8/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4227", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,47,50,49,0,76,66,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 7/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4228", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,45,48,47,0,74,65,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 6/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4229", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,43,46,45,0,72,63,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 5/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4230", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,41,44,43,0,70,61,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 4/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4231", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,39,42,41,0,68,59,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 3/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4232", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,37,40,39,0,66,58,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 2/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4233", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,35,38,37,0,64,56,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 1/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4234", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,33,36,35,0,62,54,0,0,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "New crystal shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4235" + }, + { + "requirements": "{4,5}", + "examine": "This bow has been signed by Robin, Master Bowman.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "equipment_slot": "3", + "name": "Signed oak bow", + "archery_ticket_price": "0", + "id": "4236", + "bonuses": "0,0,0,0,14,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "It's a bowl of water, with some nettles in it.", + "durability": null, + "name": "Nettle-water", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4237" + }, + { + "examine": "It's a bowl of (milky) nettle tea.", + "durability": null, + "name": "Nettle tea", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4239" + }, + { + "examine": "It's a bowl of (milky) nettle tea.", + "durability": null, + "name": "Nettle tea", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4240" + }, + { + "examine": "(In inventory) A handful of nettles (In ground) I better not get stung/I wouldn't like to get stung/I wish I could sting other people/Dock leaves at the ready/These may hurt/nettles sting my leggies(Draynor Village nettles)", + "durability": null, + "name": "Nettles", + "archery_ticket_price": "0", + "id": "4241" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4242" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4243" + }, + { + "examine": "A porcelain cup.", + "durability": null, + "name": "Porcelain cup", + "archery_ticket_price": "0", + "id": "4244" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4245" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4246" + }, + { + "examine": "The Robes of Necrovarus.", + "durability": null, + "name": "Mystical robes", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "4247" + }, + { + "examine": "The Book of Haricanto.", + "durability": null, + "name": "Book of haricanto", + "weight": "2", + "archery_ticket_price": "0", + "id": "4248" + }, + { + "shop_price": "32", + "examine": "A translation manual.", + "durability": null, + "name": "Translation manual", + "weight": "1", + "archery_ticket_price": "0", + "id": "4249" + }, + { + "examine": "The amulet of ghostspeak glows green from the crone's enchantment.", + "durability": null, + "name": "Ghostspeak amulet", + "archery_ticket_price": "0", + "id": "4250", + "equipment_slot": "2" + }, + { + "destroy_message": "The Ectophial will smash if you drop it. Velorina can replace it.", + "examine": "The Ectophial.", + "durability": null, + "name": "Ectophial", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4251" + }, + { + "destroy_message": "The Ectophial will smash if you drop it. Velorina can replace it.", + "examine": "The Ectophial.", + "durability": null, + "name": "Ectophial", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4252" + }, + { + "examine": "A small wooden ship. / A small wooden ship with a silk flag.", + "durability": null, + "name": "Model ship", + "archery_ticket_price": "0", + "id": "4253" + }, + { + "examine": "A small wooden ship. / A small wooden ship with a silk flag.", + "durability": null, + "name": "Model ship", + "archery_ticket_price": "0", + "id": "4254" + }, + { + "examine": "A pot of crushed bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4255" + }, + { + "examine": "A pot of crushed bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4256" + }, + { + "examine": "A pot of crushed wolf bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4257" + }, + { + "examine": "A pot of crushed burnt bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4258" + }, + { + "examine": "A pot of crushed monkey bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4259" + }, + { + "examine": "A pot of crushed monkey bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4260" + }, + { + "examine": "A pot of crushed bat bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4261" + }, + { + "examine": "A pot of crushed big bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4262" + }, + { + "examine": "A pot of crushed jogre bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4263" + }, + { + "examine": "A pot of crushed zogre bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4264" + }, + { + "examine": "A pot of crushed shaikahan bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4265" + }, + { + "examine": "A pot of crushed baby dragon bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4266" + }, + { + "examine": "A pot of crushed wyvern bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4267" + }, + { + "examine": "A pot of crushed dragon bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4268" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4269" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4270" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4271" + }, + { + "shop_price": "100", + "examine": "A key fashioned from a shard of bone. (Shilo Village)", + "durability": null, + "name": "Bone key", + "archery_ticket_price": "0", + "id": "4272" + }, + { + "examine": "A section from some kind of map.", + "durability": null, + "name": "Map scrap", + "archery_ticket_price": "0", + "id": "4274" + }, + { + "examine": "A section from some kind of map.", + "durability": null, + "name": "Map scrap", + "archery_ticket_price": "0", + "id": "4275" + }, + { + "examine": "A section from some kind of map.", + "durability": null, + "name": "Map scrap", + "archery_ticket_price": "0", + "id": "4276" + }, + { + "examine": "A complete treasure map.", + "durability": null, + "name": "Treasure map", + "archery_ticket_price": "0", + "id": "4277" + }, + { + "examine": "A token with ectoplasm on it.", + "durability": null, + "name": "Ecto-token", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4278" + }, + { + "examine": "A scroll of paper containing signatures.", + "durability": null, + "name": "Petition form", + "archery_ticket_price": "0", + "id": "4283" + }, + { + "examine": "Before Ectofuntus: It's a bedsheet.After Ectofuntus: It's an ectoplasm-covered bedsheet.", + "durability": null, + "name": "Bedsheet", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "4284", + "equipment_slot": "0" + }, + { + "examine": "Before Ectofuntus: It's a bedsheet.After Ectofuntus: It's an ectoplasm-covered bedsheet.", + "durability": null, + "name": "Bedsheet", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "4285", + "equipment_slot": "0" + }, + { + "examine": "It's a bucket of ectoplasm.", + "durability": null, + "name": "Bucket of slime", + "weight": "3", + "archery_ticket_price": "0", + "id": "4286" + }, + { + "shop_price": "58", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "440", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "4287" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "440", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4288" + }, + { + "shop_price": "60", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "263", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "4289" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "263", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4290" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "59", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4291" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "59", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4292" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "74", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "4293" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "74", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4294" + }, + { + "examine": "A member of the 'Humans Against Monsters' group.", + "durability": null, + "name": "Female h.a.m.", + "archery_ticket_price": "0", + "id": "4295" + }, + { + "examine": "A member of the 'Humans Against Monsters' group.", + "durability": null, + "name": "Male h.a.m.", + "archery_ticket_price": "0", + "id": "4297" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "The label says 'Vivid Crimson', but it looks like pink to me!", + "grand_exchange_price": "19", + "durability": null, + "name": "Ham shirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4298", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Ham shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4299" + }, + { + "ge_buy_limit": "100", + "examine": "The label says 'Vivid Crimson', but it looks like pink to me!", + "grand_exchange_price": "11", + "durability": null, + "name": "Ham robe", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4300", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Ham robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4301" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Light-weight head protection and eye shield.", + "grand_exchange_price": "400", + "durability": null, + "name": "Ham hood", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4302", + "bonuses": "0,0,0,0,0,0,1,2,0,1,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "400", + "durability": null, + "name": "Ham hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4303" + }, + { + "ge_buy_limit": "100", + "examine": "A HAM cape.", + "grand_exchange_price": "25", + "durability": null, + "name": "Ham cloak", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4304", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Ham cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4305" + }, + { + "ge_buy_limit": "100", + "examine": "A badge for the HAM cult.", + "grand_exchange_price": "63", + "durability": null, + "name": "H.a.m logo", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.5", + "id": "4306", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "63", + "durability": null, + "name": "H.a.m logo", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4307" + }, + { + "ge_buy_limit": "10", + "examine": "Gloves worn by the Humans Against Monsters group.", + "grand_exchange_price": "59", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4308", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "59", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4309" + }, + { + "ge_buy_limit": "100", + "examine": "Boots worn by the Humans Against Monsters group.", + "grand_exchange_price": "323", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4310", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "323", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4311" + }, + { + "examine": "A book on elven crystal.", + "durability": null, + "name": "Crystal of seren", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4313" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "2342", + "durability": null, + "name": "Team-1 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4315", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2342", + "durability": null, + "name": "Team-1 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4316" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1145", + "durability": null, + "name": "Team-2 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4317", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1145", + "durability": null, + "name": "Team-2 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4318" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "141", + "durability": null, + "name": "Team-3 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4319", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "141", + "durability": null, + "name": "Team-3 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4320" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "973", + "durability": null, + "name": "Team-4 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4321", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "973", + "durability": null, + "name": "Team-4 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4322" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1294", + "durability": null, + "name": "Team-5 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4323", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1294", + "durability": null, + "name": "Team-5 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4324" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "124", + "durability": null, + "name": "Team-6 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4325", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124", + "durability": null, + "name": "Team-6 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4326" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1264", + "durability": null, + "name": "Team-7 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4327", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1264", + "durability": null, + "name": "Team-7 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4328" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1824", + "durability": null, + "name": "Team-8 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4329", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1824", + "durability": null, + "name": "Team-8 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4330" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "841", + "durability": null, + "name": "Team-9 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4331", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "841", + "durability": null, + "name": "Team-9 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4332" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1127", + "durability": null, + "name": "Team-10 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4333", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1127", + "durability": null, + "name": "Team-10 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4334" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "2011", + "durability": null, + "name": "Team-11 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4335", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2011", + "durability": null, + "name": "Team-11 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4336" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1591", + "durability": null, + "name": "Team-12 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4337", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1591", + "durability": null, + "name": "Team-12 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4338" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "308", + "durability": null, + "name": "Team-13 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4339", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "308", + "durability": null, + "name": "Team-13 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4340" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1504", + "durability": null, + "name": "Team-14 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4341", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1504", + "durability": null, + "name": "Team-14 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4342" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1462", + "durability": null, + "name": "Team-15 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4343", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1462", + "durability": null, + "name": "Team-15 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4344" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "313", + "durability": null, + "name": "Team-16 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4345", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "313", + "durability": null, + "name": "Team-16 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4346" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1231", + "durability": null, + "name": "Team-17 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4347", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1231", + "durability": null, + "name": "Team-17 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4348" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1678", + "durability": null, + "name": "Team-18 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4349", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1678", + "durability": null, + "name": "Team-18 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4350" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1041", + "durability": null, + "name": "Team-19 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4351", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1041", + "durability": null, + "name": "Team-19 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4352" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "703", + "durability": null, + "name": "Team-20 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4353", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "703", + "durability": null, + "name": "Team-20 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4354" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1292", + "durability": null, + "name": "Team-21 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4355", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1292", + "durability": null, + "name": "Team-21 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4356" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1368", + "durability": null, + "name": "Team-22 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4357", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1368", + "durability": null, + "name": "Team-22 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4358" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "280", + "durability": null, + "name": "Team-23 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4359", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "280", + "durability": null, + "name": "Team-23 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4360" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1512", + "durability": null, + "name": "Team-24 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4361", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1512", + "durability": null, + "name": "Team-24 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4362" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1395", + "durability": null, + "name": "Team-25 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4363", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1395", + "durability": null, + "name": "Team-25 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4364" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "191", + "durability": null, + "name": "Team-26 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4365", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "191", + "durability": null, + "name": "Team-26 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4366" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1420", + "durability": null, + "name": "Team-27 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4367", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1420", + "durability": null, + "name": "Team-27 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4368" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1920", + "durability": null, + "name": "Team-28 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4369", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1920", + "durability": null, + "name": "Team-28 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4370" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1175", + "durability": null, + "name": "Team-29 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4371", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1175", + "durability": null, + "name": "Team-29 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4372" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "552", + "durability": null, + "name": "Team-30 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4373", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "552", + "durability": null, + "name": "Team-30 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4374" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1385", + "durability": null, + "name": "Team-31 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4375", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1385", + "durability": null, + "name": "Team-31 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4376" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1168", + "durability": null, + "name": "Team-32 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4377", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1168", + "durability": null, + "name": "Team-32 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4378" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "211", + "durability": null, + "name": "Team-33 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4379", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "211", + "durability": null, + "name": "Team-33 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4380" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1128", + "durability": null, + "name": "Team-34 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4381", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1128", + "durability": null, + "name": "Team-34 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4382" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1140", + "durability": null, + "name": "Team-35 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4383", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1140", + "durability": null, + "name": "Team-35 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4384" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "84", + "durability": null, + "name": "Team-36 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4385", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "84", + "durability": null, + "name": "Team-36 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4386" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1010", + "durability": null, + "name": "Team-37 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4387", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1010", + "durability": null, + "name": "Team-37 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4388" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1833", + "durability": null, + "name": "Team-38 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4389", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1833", + "durability": null, + "name": "Team-38 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4390" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "914", + "durability": null, + "name": "Team-39 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4391", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "914", + "durability": null, + "name": "Team-39 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4392" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "582", + "durability": null, + "name": "Team-40 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4393", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "582", + "durability": null, + "name": "Team-40 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4394" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1471", + "durability": null, + "name": "Team-41 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4395", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1471", + "durability": null, + "name": "Team-41 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4396" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1072", + "durability": null, + "name": "Team-42 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4397", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1072", + "durability": null, + "name": "Team-42 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4398" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "298", + "durability": null, + "name": "Team-43 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4399", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "298", + "durability": null, + "name": "Team-43 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4400" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1268", + "durability": null, + "name": "Team-44 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4401", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1268", + "durability": null, + "name": "Team-44 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4402" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1371", + "durability": null, + "name": "Team-45 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4403", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1371", + "durability": null, + "name": "Team-45 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4404" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "140", + "durability": null, + "name": "Team-46 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4405", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "140", + "durability": null, + "name": "Team-46 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4406" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1233", + "durability": null, + "name": "Team-47 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4407", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1233", + "durability": null, + "name": "Team-47 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4408" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1836", + "durability": null, + "name": "Team-48 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4409", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1836", + "durability": null, + "name": "Team-48 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4410" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1185", + "durability": null, + "name": "Team-49 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4411", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1185", + "durability": null, + "name": "Team-49 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4412" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "708", + "durability": null, + "name": "Team-50 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4413", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "708", + "durability": null, + "name": "Team-50 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4414" + }, + { + "examine": "A jungle forester's blunt axe.", + "durability": null, + "name": "Blunt axe", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4415" + }, + { + "examine": "A strong medicinal brew for heavy chests.", + "durability": null, + "name": "Herbal tincture", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4416" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "223", + "durability": null, + "name": "Guthix rest(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4417" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "223", + "durability": null, + "name": "Guthix rest(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4418" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "134", + "durability": null, + "name": "Guthix rest(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4419" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "134", + "durability": null, + "name": "Guthix rest(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4420" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "83", + "durability": null, + "name": "Guthix rest(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4421" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "durability": null, + "name": "Guthix rest(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4422" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "44", + "durability": null, + "name": "Guthix rest(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4423" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44", + "durability": null, + "name": "Guthix rest(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4424" + }, + { + "examine": "A half-filled feather mattress.", + "durability": null, + "name": "Stodgy mattress", + "weight": "10", + "archery_ticket_price": "0", + "id": "4425" + }, + { + "examine": "A comfy-looking feather mattress.", + "durability": null, + "name": "Comfy mattress", + "weight": "15", + "archery_ticket_price": "0", + "id": "4426" + }, + { + "examine": "Looks like a bunch of rust to me.", + "durability": null, + "name": "Iron oxide", + "weight": "1", + "archery_ticket_price": "0", + "id": "4427" + }, + { + "examine": "An animate rock spell is written on this parchment.", + "durability": null, + "name": "Animate rock scroll", + "archery_ticket_price": "0", + "id": "4428" + }, + { + "examine": "The weathervane directions should now work.", + "durability": null, + "name": "Directionals", + "archery_ticket_price": "0", + "id": "4430" + }, + { + "examine": "A fixed weathervane ornament.", + "durability": null, + "name": "Ornament", + "archery_ticket_price": "0", + "id": "4432" + }, + { + "examine": "A fixed weathervane rotating pillar.", + "durability": null, + "name": "Weathervane pillar", + "archery_ticket_price": "0", + "id": "4434" + }, + { + "examine": "Clear skies ahead, with some chance of showers, thunderstorms, ice and hail.", + "durability": null, + "name": "Weather report", + "archery_ticket_price": "0", + "id": "4435" + }, + { + "ge_buy_limit": "100", + "examine": "This is pretty well sealed.", + "grand_exchange_price": "245", + "durability": null, + "name": "Airtight pot", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "4436" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "245", + "durability": null, + "name": "Airtight pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4437" + }, + { + "ge_buy_limit": "100", + "examine": "This needs firing, then it should fit on a normal-sized pot.", + "grand_exchange_price": "16", + "durability": null, + "name": "Unfired pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4438" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Unfired pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4439" + }, + { + "ge_buy_limit": "100", + "examine": "This should fit on a normal-sized pot.", + "grand_exchange_price": "5", + "durability": null, + "name": "Pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4440" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4441" + }, + { + "examine": "An airtight pot with something inside, most likely breathing salts.", + "durability": null, + "name": "Breathing salts", + "archery_ticket_price": "0", + "id": "4442" + }, + { + "examine": "A large cage for transporting chickens.", + "durability": null, + "name": "Chicken cage", + "weight": "1", + "archery_ticket_price": "0", + "id": "4443" + }, + { + "examine": "A jungle forester's super sharp axe.", + "durability": null, + "name": "Sharpened axe", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4444" + }, + { + "examine": "Some mahogany logs which have been professionally cured.", + "durability": null, + "name": "Red mahogany log", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4445" + }, + { + "destroy_message": "You can get another key ring from Yanni Salika in Shilo Village.", + "shop_price": "500", + "examine": "I can store my keys here.", + "durability": null, + "name": "Steel key ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4446" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4447" + }, + { + "ge_buy_limit": "100", + "examine": "It's a bowl of hot water.", + "grand_exchange_price": "111", + "durability": null, + "name": "Bowl of hot water", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4456" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "durability": null, + "name": "Bowl of hot water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4457" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of water.", + "grand_exchange_price": "36", + "durability": null, + "name": "Cup of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4458" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "36", + "durability": null, + "name": "Cup of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4459" + }, + { + "ge_buy_limit": "100", + "examine": "It's hot!", + "grand_exchange_price": "102", + "durability": null, + "name": "Cup of hot water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4460" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "102", + "durability": null, + "name": "Cup of hot water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4461" + }, + { + "examine": "A ruined herb tea.", + "durability": null, + "name": "Ruined herb tea", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4462" + }, + { + "durability": null, + "name": "Ruined herb tea", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4463" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4464" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4465" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4466" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4467" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4468" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4469" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4470" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4471" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "17", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4472" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4473" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4474" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4475" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4476" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4477" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "46", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4478" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "46", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4479" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "41", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4480" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "41", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4481" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "43", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4482" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4483" + }, + { + "shop_price": "160", + "examine": "The strange characters supposedly grant Svidi safe passage into Rellekka.", + "durability": null, + "name": "Safety guarantee", + "archery_ticket_price": "0", + "id": "4484" + }, + { + "examine": "This fruit is known as White Pearl. Should taste good.", + "durability": null, + "name": "White pearl", + "weight": "1", + "archery_ticket_price": "0", + "id": "4485" + }, + { + "examine": "You can grow this seed even in cold mountain ranges!", + "durability": null, + "name": "White pearl seed", + "archery_ticket_price": "0", + "id": "4486" + }, + { + "examine": "It's a piece of the Ancient Rock of the mountain people. It's still just a stone.", + "durability": null, + "name": "Half a rock", + "weight": "1", + "archery_ticket_price": "0", + "id": "4487" + }, + { + "examine": "The corpse of a woman who died long ago.", + "durability": null, + "name": "Corpse of woman", + "weight": "1", + "archery_ticket_price": "0", + "id": "4488" + }, + { + "examine": "This used to belong to Asleif, daughter of the mountain camp chieftain.", + "durability": null, + "name": "Asleif's necklace", + "archery_ticket_price": "0", + "id": "4489" + }, + { + "examine": "Marginally better than egg on your face.", + "durability": null, + "name": "Mud", + "archery_ticket_price": "0", + "id": "4490" + }, + { + "examine": "A muddy rock.", + "durability": null, + "name": "Muddy rock", + "weight": "1", + "archery_ticket_price": "0", + "id": "4492" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4494" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4495" + }, + { + "examine": "Splintered into pieces, it has become completely useless to you.", + "durability": null, + "name": "Broken pole", + "archery_ticket_price": "0", + "id": "4496" + }, + { + "shop_price": "18", + "examine": "A coil of rope.", + "grand_exchange_price": "101", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4498", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Rope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4499" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4500", + "equipment_slot": "3" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4501", + "equipment_slot": "3" + }, + { + "remove_head": "true", + "shop_price": "3000", + "examine": "Quite ferocious looking.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "0", + "destroy_message": "Hamal, the Chieftain of the Mountain Camp, can replace this.", + "name": "Bearhead", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4502", + "bonuses": "0,0,0,-3,-3,12,14,10,7,9,0,0,0,0,0" + }, + { + "requirements": "{0,20}", + "shop_price": "50", + "turn90cw_anim": "821", + "examine": "A very decorative sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "808", + "name": "Decorative sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4503", + "stand_turn_anim": "823", + "bonuses": "15,20,-2,0,0,0,3,2,0,0,0,22,0,0,0" + }, + { + "remove_sleeves": "true", + "requirements": "{1,20}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4504", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,20,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,20}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4505", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "40", + "examine": "A very decorative helm.", + "durability": null, + "name": "Decorative helm", + "weight": "1", + "archery_ticket_price": "0", + "id": "4506", + "bonuses": "0,0,0,-3,-1,10,11,9,-1,10,5,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,20}", + "shop_price": "60", + "examine": "A very decorative shield.", + "durability": null, + "name": "Decorative shield", + "archery_ticket_price": "0", + "id": "4507", + "bonuses": "0,0,0,-8,-2,18,22,20,-1,20,20,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{0,30}", + "shop_price": "50", + "turn90cw_anim": "821", + "examine": "A very decorative sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "808", + "name": "Decorative sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4508", + "stand_turn_anim": "823", + "bonuses": "20,29,-2,0,0,0,3,2,0,0,0,31,0,0,0" + }, + { + "remove_sleeves": "true", + "requirements": "{1,30}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4509", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,30}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4510", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "shop_price": "40", + "examine": "A very decorative helm.", + "durability": null, + "name": "Decorative helm", + "weight": "1", + "archery_ticket_price": "0", + "id": "4511", + "bonuses": "0,0,0,-3,-1,14,15,13,-1,14,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,30}", + "shop_price": "60", + "examine": "A very decorative shield.", + "durability": null, + "name": "Decorative shield", + "archery_ticket_price": "0", + "id": "4512", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0", + "equipment_slot": "5" + }, + { + "remove_head": "true", + "durability": null, + "name": "Castlewars hood", + "archery_ticket_price": "0", + "id": "4513", + "bonuses": "0,0,0,0,0,0,1,2,0,1,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Castlewars cloak", + "archery_ticket_price": "0", + "id": "4514", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "durability": null, + "name": "Castlewars hood", + "archery_ticket_price": "0", + "id": "4515", + "bonuses": "0,0,0,0,0,0,1,2,0,1,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Castlewars cloak", + "archery_ticket_price": "0", + "id": "4516", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "examine": "This could feed a family of gnomes for a week!", + "grand_exchange_price": "970", + "durability": null, + "name": "Giant frog legs", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4517" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "970", + "durability": null, + "name": "Giant frog legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4518" + }, + { + "requirements": "{12,11}", + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Empty: An oil lamp with no oil in it.Filled: Not the genie sort.", + "grand_exchange_price": "1575", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4522" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1575", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4523" + }, + { + "shop_price": "10", + "examine": "Empty: An oil lamp with no oil in it.Filled: Not the genie sort.", + "grand_exchange_price": "2", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4524" + }, + { + "requirements": "{12,11}", + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Empty: An oil lamp with no oil in it.Filled: Not the genie sort.", + "grand_exchange_price": "2", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4525" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4526" + }, + { + "requirements": "{4,11}", + "ge_buy_limit": "100", + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "39", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4527" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "39", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4528" + }, + { + "requirements": "{4,11}", + "ge_buy_limit": "100", + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "431", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4529" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "431", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4530" + }, + { + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "1", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4531" + }, + { + "requirements": "{4,11}", + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "1", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4532" + }, + { + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4533" + }, + { + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "1", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4534" + }, + { + "requirements": "{11,26}", + "ge_buy_limit": "100", + "examine": "Unfuelled: Put oil in to complete it. Unlit: An unlit oil lantern. Lit: It lights your way through the dark places of the earth.", + "grand_exchange_price": "12", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4535" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4536" + }, + { + "requirements": "{11,26}", + "ge_buy_limit": "100", + "examine": "Unfuelled: Put oil in to complete it. Unlit: An unlit oil lantern. Lit: It lights your way through the dark places of the earth.", + "grand_exchange_price": "218", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4537" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "218", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4538" + }, + { + "examine": "Unfuelled: Put oil in to complete it. Unlit: An unlit oil lantern. Lit: It lights your way through the dark places of the earth.", + "grand_exchange_price": "198", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4539" + }, + { + "shop_price": "43", + "ge_buy_limit": "100", + "examine": "Add the glass to complete.", + "grand_exchange_price": "8", + "durability": null, + "name": "Oil lantern frame", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4540" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Oil lantern frame", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4541" + }, + { + "shop_price": "88", + "ge_buy_limit": "100", + "examine": "A roughly circular disc of glass.", + "grand_exchange_price": "1", + "durability": null, + "name": "Lantern lens", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4542" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Lantern lens", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4543" + }, + { + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "You need to add a lens before you can use it.", + "grand_exchange_price": "88", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4544" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "88", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4545" + }, + { + "requirements": "{11,49}", + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "You need to add lamp oil before you can use it.", + "grand_exchange_price": "158", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4546" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "158", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4547" + }, + { + "requirements": "{11,49}", + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "A sturdy steel lantern.", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4548" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4549" + }, + { + "shop_price": "400", + "examine": "A sturdy steel lantern casting a bright beam.", + "grand_exchange_price": "1235", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "4550" + }, + { + "remove_head": "true", + "requirements": "{1,5}-{18,35}", + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "weight": "2.2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "774", + "name": "Spiny helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4551", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "774", + "durability": null, + "name": "Spiny helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4552" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Blue sweets", + "archery_ticket_price": "0", + "id": "4558" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Deep blue sweets", + "archery_ticket_price": "0", + "id": "4559" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "White sweets", + "archery_ticket_price": "0", + "id": "4560" + }, + { + "examine": "Remember to brush after eating!", + "grand_exchange_price": "10037", + "durability": null, + "name": "Purple sweets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4561" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Red sweets", + "archery_ticket_price": "0", + "id": "4562" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Green sweets", + "archery_ticket_price": "0", + "id": "4563" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Pink sweets", + "archery_ticket_price": "0", + "id": "4564" + }, + { + "bankable": "true", + "turn90cw_anim": "821", + "examine": "Hand them out to spread the Easter happiness.", + "walk_anim": "1836", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "822", + "weapon_interface": "12", + "turn180_anim": "820", + "render_anim": "594", + "equipment_slot": "3", + "fun_weapon": "true", + "stand_anim": "1837", + "name": "Basket of eggs", + "tradeable": "false", + "run_anim": "1836", + "archery_ticket_price": "0", + "id": "4565", + "stand_turn_anim": "823" + }, + { + "examine": "Perhaps not the most powerful weapon in RuneScape.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "1834", + "equipment_slot": "3", + "attack_anims": "1833,1833,1833,1833", + "fun_weapon": "true", + "name": "Rubber chicken", + "archery_ticket_price": "0", + "id": "4566", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "remove_head": "true", + "examine": "Made of gold and white gold.", + "durability": null, + "name": "Gold helmet", + "weight": "31.7", + "archery_ticket_price": "0", + "id": "4567", + "bonuses": "0,0,0,0,0,0,10,20,0,10,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "This book is almost falling apart, you'll have to handle it quite carefully.", + "durability": null, + "name": "Dwarven lore", + "archery_ticket_price": "0", + "id": "4568" + }, + { + "examine": "A missing page from Rolad's book! It seems to be the first one.", + "durability": null, + "name": "Book page 1", + "archery_ticket_price": "0", + "id": "4569" + }, + { + "examine": "A missing page from Rolad's book! It seems to be the second one.", + "durability": null, + "name": "Book page 2", + "archery_ticket_price": "0", + "id": "4570" + }, + { + "examine": "A missing page from Rolad's book! It seems to be the third one.", + "durability": null, + "name": "Book page 3", + "archery_ticket_price": "0", + "id": "4571" + }, + { + "examine": "A collection of missing pages from Rolad's book!", + "durability": null, + "name": "Pages", + "archery_ticket_price": "0", + "id": "4572" + }, + { + "examine": "A collection of missing pages from Rolad's book!", + "durability": null, + "name": "Pages", + "archery_ticket_price": "0", + "id": "4573" + }, + { + "examine": "These are the base schematics of a dwarven multicannon.", + "durability": null, + "name": "Base schematics", + "archery_ticket_price": "0", + "id": "4574" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "536", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4580", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "536", + "durability": null, + "name": "Black spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4581" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "2808", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4582", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2808", + "durability": null, + "name": "Black spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4583" + }, + { + "requirements": "{0,10}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "309", + "stand_anim": "813", + "name": "Black spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4584", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "This looks pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "161000", + "name": "Dragon plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4585", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "161000", + "durability": null, + "name": "Dragon plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4586" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "65400", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4587", + "stand_turn_anim": "823", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0", + "requirements": "{0,60}", + "shop_price": "100000", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "lendable": "true", + "attack_audios": "2500,0,2517,0", + "name": "Dragon scimitar" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "65400", + "durability": null, + "name": "Dragon scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4588" + }, + { + "examine": "Keys to the Mayor's house. (The Feud)", + "durability": null, + "name": "Keys", + "archery_ticket_price": "0", + "id": "4589" + }, + { + "examine": "The Mayor of Pollnivneach's wife's jewels.", + "durability": null, + "name": "Jewels", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4590" + }, + { + "shop_price": "1", + "examine": "Wear it on your head.", + "durability": null, + "name": "Karidian headpiece", + "archery_ticket_price": "0", + "id": "4591" + }, + { + "shop_price": "1", + "examine": "Makes me itch.", + "durability": null, + "name": "Fake beard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4593" + }, + { + "shop_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4597" + }, + { + "shop_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4598" + }, + { + "shop_price": "1", + "examine": "A handy little club made out of oak.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "10", + "defence_anim": "425", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "name": "Oak-blackjack", + "archery_ticket_price": "0", + "id": "4599", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,2,0,0,0" + }, + { + "shop_price": "600", + "ge_buy_limit": "100", + "examine": "A handy little club made out of willow.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "defence_anim": "425", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "321", + "name": "Willow-blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4600", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,8,0,0,0" + }, + { + "examine": "Dung of the Camelus Horribleus variety.", + "durability": null, + "name": "Ugthanki dung", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4601" + }, + { + "examine": "Dung of the Camelus Horribleus variety.", + "durability": null, + "name": "Ugthanki dung", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4602" + }, + { + "shop_price": "2", + "examine": "A receipt for one 'Camelus Horribleus", + "durability": null, + "name": "Receipt", + "archery_ticket_price": "0", + "id": "4603" + }, + { + "examine": "A red viscous liquid in a vial.", + "durability": null, + "name": "Hag's poison", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4604" + }, + { + "examine": "Makes a hissing sound.", + "durability": null, + "name": "Snake charm", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4605", + "equipment_slot": "3" + }, + { + "examine": "This is used to hold snakes.", + "durability": null, + "name": "Snake basket", + "archery_ticket_price": "0", + "id": "4606" + }, + { + "examine": "This basket contains a snake.", + "durability": null, + "name": "Snake basket full", + "weight": "1", + "archery_ticket_price": "0", + "id": "4607" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "A meaty and very hot kebab.", + "grand_exchange_price": "403", + "durability": null, + "name": "Super kebab", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "4608" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "403", + "durability": null, + "name": "Super kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4609" + }, + { + "examine": "The bottle feels warm.", + "durability": null, + "name": "Red hot sauce", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4610" + }, + { + "remove_head": "true", + "examine": "A disguise suitable for the desert.", + "durability": null, + "name": "Desert disguise", + "archery_ticket_price": "0", + "id": "4611", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Willow-blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4612" + }, + { + "shop_price": "75", + "examine": "It has a picture of a dragon on it.", + "durability": null, + "name": "Spinning plate", + "archery_ticket_price": "0", + "id": "4613" + }, + { + "examine": "Alas...", + "durability": null, + "name": "Broken plate", + "archery_ticket_price": "0", + "id": "4614" + }, + { + "examine": "An archaeologist's notes.", + "durability": null, + "name": "Varmen's notes", + "archery_ticket_price": "0", + "id": "4616" + }, + { + "examine": "The museum curator's key (The Golem).", + "durability": null, + "name": "Display cabinet key", + "archery_ticket_price": "0", + "id": "4617" + }, + { + "examine": "It's pretty, but you wish you knew what it was.", + "durability": null, + "name": "Strange implement", + "archery_ticket_price": "0", + "id": "4619" + }, + { + "examine": "It looks horrible.On ground: Not good for eating.", + "durability": null, + "name": "Black mushroom", + "weight": "1", + "archery_ticket_price": "0", + "id": "4620" + }, + { + "examine": "A long feather patterned like a flame.", + "durability": null, + "name": "Phoenix feather", + "archery_ticket_price": "0", + "id": "4621" + }, + { + "examine": "Black ink made out of mushrooms.", + "durability": null, + "name": "Black mushroom ink", + "weight": "1", + "archery_ticket_price": "0", + "id": "4622" + }, + { + "examine": "A phoenix feather dipped in ink.", + "durability": null, + "name": "Phoenix quill pen", + "archery_ticket_price": "0", + "id": "4623" + }, + { + "examine": "It reads 'YOUR TASK IS DONE'.", + "durability": null, + "name": "Golem program", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4624" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A cheeky little lager from the Bandit Camp.", + "grand_exchange_price": "1133", + "durability": null, + "name": "Bandit's brew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4627" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1133", + "durability": null, + "name": "Bandit's brew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4628" + }, + { + "examine": "A copy of the engravings found on a mysterious stone tablet.", + "durability": null, + "name": "Etchings", + "archery_ticket_price": "0", + "id": "4654" + }, + { + "examine": "A rough translation made from archaeological etchings.", + "durability": null, + "name": "Translation", + "weight": "1", + "archery_ticket_price": "0", + "id": "4655" + }, + { + "examine": "This key is unusally warm to the touch.", + "durability": null, + "name": "Warm key", + "archery_ticket_price": "0", + "id": "4656" + }, + { + "examine": "A ring that allows you to see things that are normally invisible.", + "durability": null, + "name": "Ring of visibility", + "archery_ticket_price": "0", + "id": "4657", + "equipment_slot": "12" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4658" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4659" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4660" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4661" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4662" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4663" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4664" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4665" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4666" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4667" + }, + { + "examine": "Finely ground garlic powder.", + "durability": null, + "name": "Garlic powder", + "archery_ticket_price": "0", + "id": "4668" + }, + { + "examine": "The Diamond of Blood.", + "durability": null, + "name": "Blood diamond", + "archery_ticket_price": "0", + "id": "4670" + }, + { + "examine": "The Diamond of Ice.", + "durability": null, + "name": "Ice diamond", + "archery_ticket_price": "0", + "id": "4671" + }, + { + "examine": "The Diamond of Smoke.", + "durability": null, + "name": "Smoke diamond", + "weight": "1", + "archery_ticket_price": "0", + "id": "4672" + }, + { + "examine": "The Diamond of Shadow.", + "durability": null, + "name": "Shadow diamond", + "weight": "1", + "archery_ticket_price": "0", + "id": "4673" + }, + { + "examine": "An old and strangely shaped metal cross.", + "durability": null, + "name": "Gilded cross", + "archery_ticket_price": "0", + "id": "4674" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A magical staff of ancient origin...", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "59300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4675", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,15,0,2,3,1,15,0,0,50,-1,0,0", + "requirements": "{0,50}-{6,50}", + "shop_price": "80000", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2555,0,0,0", + "name": "Ancient staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "59300", + "durability": null, + "name": "Ancient staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4676" + }, + { + "examine": "It's an amulet of cat speak. It makes vague purring noises.", + "durability": null, + "name": "Catspeak amulet", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4677", + "equipment_slot": "2" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4678" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4679" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4680" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4681" + }, + { + "shop_price": "300", + "examine": "A blessed holy symbol of Saradomin.", + "grand_exchange_price": "112", + "durability": null, + "name": "Holy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4682", + "bonuses": "0,0,0,0,0,2,2,2,2,2,3,0,0,8,0" + }, + { + "shop_price": "135", + "examine": "An unholy symbol of Zamorak.", + "grand_exchange_price": "52", + "durability": null, + "name": "Unholy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4683", + "bonuses": "2,2,2,2,2,0,0,0,0,0,0,0,0,8,0" + }, + { + "shop_price": "30", + "examine": "One sheet of mummy wrap.", + "durability": null, + "name": "Linen", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4684" + }, + { + "examine": "Little book of embalming by Bod E. Wrapper.", + "durability": null, + "name": "Embalming manual", + "archery_ticket_price": "0", + "id": "4686" + }, + { + "examine": "It's a bucket of sap.", + "durability": null, + "name": "Bucket of sap", + "weight": "2", + "archery_ticket_price": "0", + "id": "4687" + }, + { + "examine": "A little heap of salt.", + "durability": null, + "name": "Pile of salt", + "archery_ticket_price": "0", + "id": "4689" + }, + { + "examine": "Miniature golden statue of a sphinx.", + "durability": null, + "name": "Sphinx's token", + "archery_ticket_price": "0", + "id": "4691" + }, + { + "shop_price": "130000", + "examine": "A very delicate sheet of gold.", + "grand_exchange_price": "132580", + "durability": null, + "name": "Gold leaf", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4692" + }, + { + "examine": "It's a bucket of salty water.", + "durability": null, + "name": "Full bucket", + "archery_ticket_price": "0", + "id": "4693" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Water and Fire Rune.", + "grand_exchange_price": "48", + "durability": null, + "name": "Steam rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4694" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined air and water rune.", + "grand_exchange_price": "249", + "durability": null, + "name": "Mist rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4695" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Air and Earth Rune.", + "grand_exchange_price": "20", + "durability": null, + "name": "Dust rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4696" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Air and Fire Rune.", + "grand_exchange_price": "148", + "durability": null, + "name": "Smoke rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4697" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Earth and Water rune.", + "grand_exchange_price": "657", + "durability": null, + "name": "Mud rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4698" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined earth and fire rune.", + "grand_exchange_price": "49", + "durability": null, + "name": "Lava rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4699" + }, + { + "examine": "You need to add lamp oil before you can use it.", + "durability": null, + "name": "Sapphire lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4700" + }, + { + "examine": "A bullseye lantern with a sapphire for a lens.", + "durability": null, + "name": "Sapphire lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4701" + }, + { + "examine": "A lantern casting a bright blue beam.", + "durability": null, + "name": "Sapphire lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4702" + }, + { + "shop_price": "975000", + "examine": "A magic stone to make high-level furniture.", + "grand_exchange_price": "977755", + "durability": null, + "name": "Magic stone", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4703" + }, + { + "turn90cw_anim": "821", + "examine": "A magic stone bowl for catching the tears of Guthix.", + "walk_anim": "819", + "durability": null, + "destroy": "true", + "weight": "1.8", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "1", + "equipment_slot": "3", + "stand_anim": "808", + "name": "Stone bowl", + "tradeable": "false", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4704", + "stand_turn_anim": "823" + }, + { + "examine": "This book must be really old!", + "durability": null, + "name": "Crumbling tome", + "archery_ticket_price": "0", + "id": "4707" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's leather hood.", + "durability": null, + "rare_item": "true", + "weight": "0.9", + "absorb": "5,2,0", + "equipment_slot": "0", + "grand_exchange_price": "94300", + "name": "Ahrim's hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4708", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "94300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4709" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "69500", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4710", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0", + "requirements": "{0,70}-{6,70}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "69500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4711" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe top.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "10,5,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1000000", + "name": "Ahrim's robetop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4712", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1000000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's robetop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4713" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "durability": null, + "rare_item": "true", + "weight": "12", + "absorb": "7,3,0", + "equipment_slot": "7", + "grand_exchange_price": "1700000", + "name": "Ahrim's robeskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4714", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1700000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's robeskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4715" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's helm.", + "durability": "1", + "rare_item": "true", + "weight": "1", + "absorb": "2,0,5", + "equipment_slot": "0", + "grand_exchange_price": "1300000", + "name": "Dharok's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4716", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1300000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4717" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "rare_item": "true", + "turn90ccw_anim": "822", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "516900", + "stand_anim": "2065", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4718", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0", + "requirements": "{0,70}-{2,70}", + "durability": null, + "weight": "13", + "weapon_interface": "2", + "render_anim": "134", + "name": "Dharok's greataxe" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "516900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's greataxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4719" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's platebody armour.", + "durability": null, + "rare_item": "true", + "weight": "9.9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "511400", + "name": "Dharok's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4720", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "511400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4721" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's plate leg armour.", + "durability": null, + "rare_item": "true", + "weight": "10", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "748800", + "name": "Dharok's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4722", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "748800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4723" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's helm", + "durability": null, + "rare_item": "true", + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "396300", + "name": "Guthan's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4724", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "396300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4725" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "588400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4726", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Guthan's warspear" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "588400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's warspear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4727" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's platebody armour.", + "durability": null, + "rare_item": "true", + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "316800", + "name": "Guthan's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4728", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "316800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4729" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's chainskirt.", + "durability": null, + "rare_item": "true", + "weight": "8", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "315600", + "name": "Guthan's chainskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4730", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "315600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's chainskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4731" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's coif.", + "durability": null, + "rare_item": "true", + "absorb": "0,5,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "38900", + "name": "Karil's coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4732", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "38900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4733" + }, + { + "ge_buy_limit": "1", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "rare_item": "true", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "2076", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "188000", + "stand_anim": "2074", + "tradeable": "true", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4734", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,70}", + "durability": null, + "weight": "2", + "weapon_interface": "17", + "render_anim": "372", + "attack_audios": "2700,0,0,0", + "name": "Karil's crossbow" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "188000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4735" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "10000", + "examine": "Karil the Tainted's leather body armour.", + "durability": null, + "rare_item": "true", + "weight": "6", + "absorb": "0,10,5", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1800000", + "name": "Karil's leathertop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4736", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1800000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's leathertop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4737" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "10000", + "examine": "Karil the Tainted's leather skirt.", + "durability": null, + "rare_item": "true", + "weight": "2", + "absorb": "0,7,3", + "equipment_slot": "7", + "grand_exchange_price": "217000", + "name": "Karil's leatherskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4738", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "217000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's leatherskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4739" + }, + { + "requirements": "{4,70}", + "shop_price": "420", + "ge_buy_limit": "10000", + "examine": "Must need a special type of crossbow to use this.", + "grand_exchange_price": "238", + "durability": null, + "name": "Bolt rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4740", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,55", + "equipment_slot": "13" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "139000", + "name": "Torag's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4745", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "139000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4746" + }, + { + "requirements": "{0,70}-{2,70}", + "ge_buy_limit": "1000", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "rare_item": "true", + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "111600", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4747", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "111600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's hammers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4748" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's platebody armour.", + "durability": null, + "rare_item": "true", + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "346200", + "name": "Torag's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4749", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "346200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4750" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's plate leg armour.", + "durability": null, + "rare_item": "true", + "weight": "9", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "427200", + "name": "Torag's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4751", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "427200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4752" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's helm.", + "durability": null, + "rare_item": "true", + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "687200", + "name": "Verac's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4753", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "687200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4754" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "rare_item": "true", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "2060", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "135500", + "stand_anim": "1832", + "tradeable": "true", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4755", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "2", + "weapon_interface": "8", + "render_anim": "1426", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "135500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's flail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4756" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's brassard.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "270000", + "name": "Verac's brassard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4757", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "270000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's brassard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4758" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's plate skirt.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "411400", + "name": "Verac's plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4759", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "411400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4760" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt bronze arrow...ouch", + "grand_exchange_price": "39", + "durability": null, + "name": "Bronze brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4773", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,11", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt iron arrow...ouch", + "grand_exchange_price": "14", + "durability": null, + "name": "Iron brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4778", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,13", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt steel arrow...ouch", + "grand_exchange_price": "20", + "durability": null, + "name": "Steel brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4783", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,19", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt black arrow...ouch", + "grand_exchange_price": "63", + "durability": null, + "name": "Black brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4788", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "20", + "ge_buy_limit": "1000", + "examine": "Blunt mithril arrow...ouch", + "grand_exchange_price": "80", + "durability": null, + "name": "Mithril brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4793", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,34", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt adamant arrow...ouch", + "grand_exchange_price": "154", + "durability": null, + "name": "Adamant brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4798", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,45", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "180", + "ge_buy_limit": "1000", + "examine": "Blunt rune arrow...ouch", + "grand_exchange_price": "188", + "durability": null, + "name": "Rune brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4803", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "examine": "A very black prism.", + "durability": null, + "name": "Black prism", + "archery_ticket_price": "0", + "id": "4808" + }, + { + "examine": "A half torn necromantic page.", + "durability": null, + "name": "Torn page", + "archery_ticket_price": "0", + "id": "4809" + }, + { + "examine": "It's about to fall apart.", + "durability": null, + "name": "Ruined backpack", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4810" + }, + { + "examine": "A white ceramic mug with a dragon insignia.", + "durability": null, + "name": "Dragon inn tankard", + "archery_ticket_price": "0", + "id": "4811" + }, + { + "ge_buy_limit": "10000", + "examine": "A pile of Zombie Ogre bones.", + "grand_exchange_price": "1167", + "durability": null, + "name": "Zogre bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4812" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1167", + "durability": null, + "name": "Zogre bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4813" + }, + { + "examine": "A classic realist charcoal portrait of Sithik.", + "durability": null, + "name": "Sithik portrait", + "archery_ticket_price": "0", + "id": "4814" + }, + { + "examine": "A classic realist charcoal portrait of Sithik.", + "durability": null, + "name": "Sithik portrait", + "archery_ticket_price": "0", + "id": "4815" + }, + { + "examine": "A signed classic realist charcoal portrait of Sithik.", + "durability": null, + "name": "Signed portrait", + "archery_ticket_price": "0", + "id": "4816" + }, + { + "examine": "A book explaining the art of portraiture.", + "durability": null, + "name": "Book of portraiture", + "weight": "1", + "archery_ticket_price": "0", + "id": "4817", + "equipment_slot": "5" + }, + { + "examine": "An ancient ogre artefact-resembling a large heavy helm.", + "durability": null, + "name": "Ogre artefact", + "archery_ticket_price": "0", + "id": "4818" + }, + { + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "16", + "durability": null, + "name": "Bronze nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4819" + }, + { + "shop_price": "33", + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "16", + "durability": null, + "name": "Iron nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4820" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "13", + "durability": null, + "name": "Black nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4821" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "35", + "durability": null, + "name": "Mithril nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4822" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "87", + "durability": null, + "name": "Adamantite nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4823" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "114", + "durability": null, + "name": "Rune nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4824" + }, + { + "ge_buy_limit": "100", + "examine": "An unstrung composite ogre bow.", + "grand_exchange_price": "447", + "durability": null, + "name": "Unstrung comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4825" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "447", + "durability": null, + "name": "Unstrung comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4826" + }, + { + "requirements": "{4,30}", + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "A composite ogre bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "225", + "attack_audios": "2700,0,0,0", + "name": "Comp ogre bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4827", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "225", + "durability": null, + "name": "Comp ogre bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4828" + }, + { + "examine": "A book of H.A.M. affiliation", + "durability": null, + "name": "Book of 'h.a.m", + "archery_ticket_price": "0", + "id": "4829", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "examine": "Ancient ogre bones from the ogre burial tomb.", + "grand_exchange_price": "5931", + "durability": null, + "name": "Fayrg bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4830" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5931", + "durability": null, + "name": "Fayrg bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4831" + }, + { + "ge_buy_limit": "10000", + "examine": "Ancient ogre bones from the ogre burial tomb.", + "grand_exchange_price": "7093", + "durability": null, + "name": "Raurg bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4832" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7093", + "durability": null, + "name": "Raurg bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4833" + }, + { + "ge_buy_limit": "10000", + "examine": "Ancient ogre bones from the burial tomb.", + "grand_exchange_price": "16300", + "durability": null, + "name": "Ourg bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4834" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "16300", + "durability": null, + "name": "Ourg bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4835" + }, + { + "examine": "Some strange liquid given to you by Zavistic Rarve.", + "durability": null, + "name": "Strange potion", + "archery_ticket_price": "0", + "id": "4836" + }, + { + "examine": "A book of necromantic spells.", + "durability": null, + "name": "Necromancy book", + "archery_ticket_price": "0", + "id": "4837", + "equipment_slot": "5" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4838" + }, + { + "examine": "A key to some sort of special tomb area.", + "durability": null, + "name": "Ogre gate key", + "archery_ticket_price": "0", + "id": "4839" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this rogue's purse potion.", + "grand_exchange_price": "2194", + "durability": null, + "name": "Rogue's purse potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4840" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2194", + "durability": null, + "name": "Rogue's purse potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4841" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "4 doses of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "1430", + "durability": null, + "name": "Relicym's balm(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4842" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1430", + "durability": null, + "name": "Relicym's balm(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4843" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "3 doses of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "654", + "durability": null, + "name": "Relicym's balm(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4844" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "654", + "durability": null, + "name": "Relicym's balm(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4845" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "2 doses of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "325", + "durability": null, + "name": "Relicym's balm(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4846" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "325", + "durability": null, + "name": "Relicym's balm(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4847" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "1 dose of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "204", + "durability": null, + "name": "Relicym's balm(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4848" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "204", + "durability": null, + "name": "Relicym's balm(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4849" + }, + { + "ge_buy_limit": "100", + "examine": "A key which opens a coffin!", + "grand_exchange_price": "1963", + "durability": null, + "name": "Ogre coffin key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4850" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1963", + "durability": null, + "name": "Ogre coffin key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4851" + }, + { + "examine": "A pot of crushed fayrg bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4852" + }, + { + "examine": "A pot of crushed raurg bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4853" + }, + { + "examine": "A pot of crushed ourg bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4854" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4855" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 100", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4856", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 75", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4857", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 50", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4858", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 25", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4859", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's leather hood.", + "durability": null, + "weight": "0.9", + "absorb": "5,2,0", + "equipment_slot": "0", + "grand_exchange_price": "51700", + "name": "Ahrim's hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4860" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "51700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4861" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 100", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4862", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 75", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4863", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 50", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4864", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 25", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4865", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "50600", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 0", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4866", + "stand_turn_anim": "1209" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "50600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's staff 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4867" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 100", + "weight": "5", + "archery_ticket_price": "0", + "id": "4868", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 75", + "weight": "5", + "archery_ticket_price": "0", + "id": "4869", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 50", + "weight": "5", + "archery_ticket_price": "0", + "id": "4870", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 25", + "weight": "5", + "archery_ticket_price": "0", + "id": "4871", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe top.", + "durability": null, + "weight": "5", + "absorb": "10,5,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1100000", + "name": "Ahrim's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4872" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1100000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4873" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 100", + "weight": "12", + "archery_ticket_price": "0", + "id": "4874", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 75", + "weight": "12", + "archery_ticket_price": "0", + "id": "4875", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 50", + "weight": "12", + "archery_ticket_price": "0", + "id": "4876", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 25", + "weight": "12", + "archery_ticket_price": "0", + "id": "4877", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Ahrim's skirt 0", + "tradeable": "true", + "weight": "12", + "archery_ticket_price": "0", + "id": "4878", + "absorb": "7,3,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1500000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4879" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 100", + "weight": "1", + "archery_ticket_price": "0", + "id": "4880", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 75", + "weight": "1", + "archery_ticket_price": "0", + "id": "4881", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 50", + "weight": "1", + "archery_ticket_price": "0", + "id": "4882", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 25", + "weight": "1", + "archery_ticket_price": "0", + "id": "4883", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "equipment_slot": "0", + "grand_exchange_price": "1300000", + "name": "Dharok's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4884" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1300000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4885" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 100", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4886", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 75", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4887", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 50", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4888", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 25", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4889", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "render_anim": "134", + "equipment_slot": "3", + "grand_exchange_price": "442600", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "tradeable": "true", + "name": "Dharok's axe 0", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4890", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "442600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's axe 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4891" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 100", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4892", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 75", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4893", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 50", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4894", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 25", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4895", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's platebody armour.", + "durability": null, + "weight": "9.9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "438200", + "name": "Dharok's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4896" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "438200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4897" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 100", + "weight": "10", + "archery_ticket_price": "0", + "id": "4898", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 75", + "weight": "10", + "archery_ticket_price": "0", + "id": "4899", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 50", + "weight": "10", + "archery_ticket_price": "0", + "id": "4900", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 25", + "weight": "10", + "archery_ticket_price": "0", + "id": "4901", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "676000", + "durability": null, + "name": "Dharok's legs 0", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "4902", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "676000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's legs 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4903" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 100", + "archery_ticket_price": "0", + "id": "4904", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 75", + "archery_ticket_price": "0", + "id": "4905", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 50", + "archery_ticket_price": "0", + "id": "4906", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 25", + "archery_ticket_price": "0", + "id": "4907", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "368200", + "name": "Guthan's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4908" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "368200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4909" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 100", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4910", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 75", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4911", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 50", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4912", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 25", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4913", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "379500", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "tradeable": "true", + "name": "Guthan's spear 0", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4914", + "stand_turn_anim": "1209" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "379500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's spear 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4915" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 100", + "weight": "9", + "archery_ticket_price": "0", + "id": "4916", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 75", + "weight": "9", + "archery_ticket_price": "0", + "id": "4917", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 50", + "weight": "9", + "archery_ticket_price": "0", + "id": "4918", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 25", + "weight": "9", + "archery_ticket_price": "0", + "id": "4919", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's platebody armour.", + "durability": null, + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "245900", + "name": "Guthan's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4920" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "245900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4921" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 100", + "weight": "8", + "archery_ticket_price": "0", + "id": "4922", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 75", + "weight": "8", + "archery_ticket_price": "0", + "id": "4923", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 50", + "weight": "8", + "archery_ticket_price": "0", + "id": "4924", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 25", + "weight": "8", + "archery_ticket_price": "0", + "id": "4925", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "240900", + "durability": null, + "name": "Guthan's skirt 0", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "4926", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "240900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4927" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 100", + "archery_ticket_price": "0", + "id": "4928", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 75", + "archery_ticket_price": "0", + "id": "4929", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 50", + "archery_ticket_price": "0", + "id": "4930", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 25", + "archery_ticket_price": "0", + "id": "4931", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's coif.", + "durability": null, + "absorb": "0,5,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "7557", + "name": "Karil's coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4932" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "7557", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4933" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 100", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4934", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 75", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4935", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 50", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4936", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 25", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4937", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "render_anim": "372", + "equipment_slot": "3", + "grand_exchange_price": "106300", + "stand_anim": "2074", + "name": "Karil's x-bow 0", + "tradeable": "true", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4938", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "106300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's x-bow 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4939" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 100", + "weight": "6", + "archery_ticket_price": "0", + "id": "4940", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 75", + "weight": "6", + "archery_ticket_price": "0", + "id": "4941", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 50", + "weight": "6", + "archery_ticket_price": "0", + "id": "4942", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 25", + "weight": "6", + "archery_ticket_price": "0", + "id": "4943", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's leather body armour.", + "durability": null, + "weight": "6", + "absorb": "0,10,5", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1500000", + "name": "Karil's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4944" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "1500000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4945" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 100", + "weight": "2", + "archery_ticket_price": "0", + "id": "4946", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 75", + "weight": "2", + "archery_ticket_price": "0", + "id": "4947", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 50", + "weight": "2", + "archery_ticket_price": "0", + "id": "4948", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 25", + "weight": "2", + "archery_ticket_price": "0", + "id": "4949", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "153100", + "durability": null, + "name": "Karil's skirt 0", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "4950", + "absorb": "0,7,3", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "153100", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4951" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 100", + "archery_ticket_price": "0", + "id": "4952", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 75", + "archery_ticket_price": "0", + "id": "4953", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 50", + "archery_ticket_price": "0", + "id": "4954", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 25", + "archery_ticket_price": "0", + "id": "4955", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "78200", + "name": "Torag's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4956" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "78200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4957" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 100", + "archery_ticket_price": "0", + "id": "4958", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 75", + "archery_ticket_price": "0", + "id": "4959", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 50", + "archery_ticket_price": "0", + "id": "4960", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 25", + "archery_ticket_price": "0", + "id": "4961", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "95600", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4962" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's hammer 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4963" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 100", + "weight": "9", + "archery_ticket_price": "0", + "id": "4964", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 75", + "weight": "9", + "archery_ticket_price": "0", + "id": "4965", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 50", + "weight": "9", + "archery_ticket_price": "0", + "id": "4966", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 25", + "weight": "9", + "archery_ticket_price": "0", + "id": "4967", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's platebody armour.", + "durability": null, + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "271600", + "name": "Torag's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4968" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "271600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4969" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 100", + "weight": "9", + "archery_ticket_price": "0", + "id": "4970", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 75", + "weight": "9", + "archery_ticket_price": "0", + "id": "4971", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 50", + "weight": "9", + "archery_ticket_price": "0", + "id": "4972", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 25", + "weight": "9", + "archery_ticket_price": "0", + "id": "4973", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "371300", + "durability": null, + "name": "Torag's legs 0", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "4974", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "371300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's legs 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4975" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 100", + "archery_ticket_price": "0", + "id": "4976", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 75", + "archery_ticket_price": "0", + "id": "4977", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 50", + "archery_ticket_price": "0", + "id": "4978", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 25", + "archery_ticket_price": "0", + "id": "4979", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "648900", + "name": "Verac's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4980" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "648900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4981" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 100", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4982", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 75", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4983", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 50", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4984", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 25", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4985", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "render_anim": "1426", + "equipment_slot": "3", + "grand_exchange_price": "95500", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "tradeable": "true", + "name": "Verac's flail 0", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4986", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's flail 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4987" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 100", + "weight": "5", + "archery_ticket_price": "0", + "id": "4988", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 75", + "weight": "5", + "archery_ticket_price": "0", + "id": "4989", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 50", + "weight": "5", + "archery_ticket_price": "0", + "id": "4990", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 25", + "weight": "5", + "archery_ticket_price": "0", + "id": "4991", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's brassard.", + "durability": null, + "weight": "5", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "174000", + "name": "Verac's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4992" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "174000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4993" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 100", + "weight": "5", + "archery_ticket_price": "0", + "id": "4994", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 75", + "weight": "5", + "archery_ticket_price": "0", + "id": "4995", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 50", + "weight": "5", + "archery_ticket_price": "0", + "id": "4996", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 25", + "weight": "5", + "archery_ticket_price": "0", + "id": "4997", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "321600", + "durability": null, + "name": "Verac's skirt 0", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "4998", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "321600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4999" + }, + { + "ge_buy_limit": "1000", + "examine": "It's incredibly slimy.", + "grand_exchange_price": "373", + "durability": null, + "name": "Raw cave eel", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5001" + }, + { + "ge_buy_limit": "1000", + "examine": "It's a bit slimy.", + "grand_exchange_price": "164", + "durability": null, + "name": "Cave eel", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5003" + }, + { + "examine": "That's disgusting!", + "durability": null, + "name": "Frog spawn", + "archery_ticket_price": "0", + "id": "5004" + }, + { + "durability": null, + "name": "Raw cave eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5005" + }, + { + "durability": null, + "name": "Burnt cave eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5006" + }, + { + "durability": null, + "name": "Cave eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5007" + }, + { + "examine": "A book about the ancient goblin tribes.", + "durability": null, + "name": "Goblin symbol book", + "weight": "1", + "archery_ticket_price": "0", + "id": "5009" + }, + { + "examine": "You found the Lumbridge silverware in the HAM cave.", + "durability": null, + "name": "Silverware", + "archery_ticket_price": "0", + "id": "5011" + }, + { + "examine": "A peace treaty between Lumbridge and the Cave Goblins.", + "durability": null, + "name": "Peace treaty", + "archery_ticket_price": "0", + "id": "5012" + }, + { + "shop_price": "900", + "examine": "A helmet with a lamp on it.", + "grand_exchange_price": "380", + "durability": null, + "name": "Mining helmet", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5013", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{11,65}", + "shop_price": "900", + "ge_buy_limit": "100", + "examine": "A helmet with an unlit lamp on it.", + "durability": null, + "weight": "1", + "equipment_slot": "0", + "grand_exchange_price": "342", + "name": "Mining helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5014", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "342", + "durability": null, + "name": "Mining helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5015" + }, + { + "ge_buy_limit": "100", + "shop_price": "600", + "turn90cw_anim": "1207", + "examine": "Basic but brutal!", + "walk_anim": "1205", + "durability": null, + "weight": "1.3", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "two_handed": "false", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "219", + "stand_anim": "813", + "tradeable": "true", + "name": "Bone spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5016", + "stand_turn_anim": "1209", + "bonuses": "11,11,11,0,0,1,1,0,0,0,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5017" + }, + { + "shop_price": "600", + "ge_buy_limit": "100", + "examine": "Basic but brutal!", + "durability": null, + "weight": "0.9", + "attack_speed": "6", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "384", + "name": "Bone club", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5018", + "bonuses": "-4,-4,16,-4,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone club", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5019" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5020" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5021" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5022" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5023" + }, + { + "remove_sleeves": "true", + "shop_price": "812", + "ge_buy_limit": "100", + "examine": "Far too small to wear.", + "grand_exchange_price": "710", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5024", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "710", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5025" + }, + { + "remove_sleeves": "true", + "shop_price": "812", + "ge_buy_limit": "100", + "examine": "Yellow top, too small for me.", + "grand_exchange_price": "908", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5026", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "908", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5027" + }, + { + "remove_sleeves": "true", + "shop_price": "812", + "ge_buy_limit": "100", + "examine": "Blue top, very tiny.", + "grand_exchange_price": "1357", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5028", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1357", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5029" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "867", + "examine": "Tiny!", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5030", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "867", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5031" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "1023", + "examine": "Tiny!", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5032", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1023", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5033" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "1282", + "examine": "Tiny!", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5034", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1282", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5035" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "746", + "examine": "A pair of long dwarven trousers... long for dwarves, of course.", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5036", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "746", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5037" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "378", + "examine": "A pair of long dwarven trousers... long for dwarves, of course.", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5038", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "378", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5039" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "442", + "examine": "A pair of long dwarven trousers... long for dwarves, of course.", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5040", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "442", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5041" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "examine": "These look great, on dwarves!", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5042", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5043" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1229", + "examine": "Yellow shorts. Far too small for you.", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5044", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1229", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5045" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2582", + "examine": "Blue shorts, these would look great on dwarves!", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5046", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2582", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5047" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "681", + "examine": "A brown skirt. Size small!", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5048", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "681", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5049" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1151", + "examine": "A blue skirt.", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5050", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1151", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5051" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "803", + "examine": "Lilac skirt.", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5052", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "803", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5053" + }, + { + "examine": "A short angry guy.", + "durability": null, + "name": "Dwarf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5054" + }, + { + "durability": null, + "name": "Dwarf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5055" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5056" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5057" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5058" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5059" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5060", + "equipment_slot": "3" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5061", + "equipment_slot": "3" + }, + { + "examine": "One of a pair I assume.", + "durability": null, + "name": "Left boot", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5062" + }, + { + "examine": "A good looking boot, for the right foot. Literally.", + "durability": null, + "name": "Right boot", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5063" + }, + { + "examine": "A lovely pair of boots.", + "durability": null, + "name": "Exquisite boots", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5064" + }, + { + "examine": "An old library book. It bears the title 'Scholars to Dwarven Costumes'.", + "durability": null, + "name": "Book on costumes", + "archery_ticket_price": "0", + "id": "5065" + }, + { + "examine": "These notes are from a meeting of the Keldagrim Consortium.", + "durability": null, + "name": "Meeting notes", + "archery_ticket_price": "0", + "id": "5066" + }, + { + "examine": "Clothes for the sculptor's model.", + "durability": null, + "name": "Exquisite clothes", + "archery_ticket_price": "0", + "id": "5067" + }, + { + "examine": "A master at farming.", + "durability": null, + "name": "Master farmer", + "archery_ticket_price": "0", + "id": "5068" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5070" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5071" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5072" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5073" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5074" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5075" + }, + { + "examine": "A red bird's egg.", + "durability": null, + "name": "Bird's egg", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5076" + }, + { + "examine": "A blue bird's egg.", + "durability": null, + "name": "Bird's egg", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5077" + }, + { + "examine": "A green bird's egg.", + "durability": null, + "name": "Bird's egg", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5078" + }, + { + "requirements": "{2,19}", + "shop_price": "84", + "ge_buy_limit": "100", + "examine": "A marigold seed - plant in flower patch.", + "grand_exchange_price": "8", + "durability": null, + "name": "Marigold seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5096" + }, + { + "requirements": "{11,19}", + "shop_price": "98", + "ge_buy_limit": "100", + "examine": "A rosemary seed - plant in flower patch.", + "grand_exchange_price": "3", + "durability": null, + "name": "Rosemary seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5097" + }, + { + "requirements": "{24,19}", + "shop_price": "14", + "ge_buy_limit": "100", + "examine": "A nasturtium seed - plant in flower patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Nasturtium seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5098" + }, + { + "requirements": "{19,25}", + "ge_buy_limit": "100", + "examine": "A woad seed - plant in flower patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Woad seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5099" + }, + { + "requirements": "{19,26}", + "shop_price": "70", + "ge_buy_limit": "100", + "examine": "A limpwurt seed - plant in flower patch.", + "grand_exchange_price": "273", + "durability": null, + "name": "Limpwurt seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5100" + }, + { + "requirements": "{10,19}", + "ge_buy_limit": "100", + "examine": "A redberry seed - Plant in a bush patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Redberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5101" + }, + { + "requirements": "{22,19}", + "ge_buy_limit": "100", + "examine": "A cadavaberry seed - Plant in a bush patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Cadavaberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5102" + }, + { + "requirements": "{19,36}", + "ge_buy_limit": "100", + "examine": "A dwellberry seed - Plant in a bush patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Dwellberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5103" + }, + { + "requirements": "{19,48}", + "shop_price": "22", + "ge_buy_limit": "100", + "examine": "A jangerberry bush seed - plant in a bush patch.", + "grand_exchange_price": "2", + "durability": null, + "name": "Jangerberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5104" + }, + { + "requirements": "{19,59}", + "ge_buy_limit": "100", + "examine": "A whiteberry bush seed - plant in a bush patch.", + "grand_exchange_price": "8", + "durability": null, + "name": "Whiteberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5105" + }, + { + "requirements": "{19,70}", + "ge_buy_limit": "100", + "examine": "A poison ivy bush seed - plant in a bush patch.", + "grand_exchange_price": "38", + "durability": null, + "name": "Poison ivy seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5106" + }, + { + "requirements": "{19,55}", + "shop_price": "29", + "ge_buy_limit": "100", + "examine": "A Cactus seed - plant in a cactus patch.", + "grand_exchange_price": "10", + "durability": null, + "name": "Cactus seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5280" + }, + { + "requirements": "{19,63}", + "ge_buy_limit": "100", + "examine": "Also known as Deadly Nightshade - plant in a belladonna patch.", + "grand_exchange_price": "24", + "durability": null, + "name": "Belladonna seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5281" + }, + { + "requirements": "{19,53}", + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Mushroom spore", + "archery_ticket_price": "0", + "id": "5282" + }, + { + "requirements": "{19,27}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "4", + "durability": null, + "name": "Apple tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5283" + }, + { + "requirements": "{19,33}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "5", + "durability": null, + "name": "Banana tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5284" + }, + { + "requirements": "{19,39}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "30", + "durability": null, + "name": "Orange tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5285" + }, + { + "requirements": "{19,42}", + "ge_buy_limit": "100", + "examine": "Plant this in a plant pot of soil to grow a sapling.", + "grand_exchange_price": "265", + "durability": null, + "name": "Curry tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5286" + }, + { + "requirements": "{19,51}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "13700", + "durability": null, + "name": "Pineapple seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5287" + }, + { + "requirements": "{19,57}", + "ge_buy_limit": "100", + "examine": "Plant this in a plant pot of soil to grow a sapling.", + "grand_exchange_price": "41200", + "durability": null, + "name": "Papaya tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5288" + }, + { + "requirements": "{19,68}", + "shop_price": "35000", + "ge_buy_limit": "100", + "examine": "Plant in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "105100", + "durability": null, + "name": "Palm tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5289" + }, + { + "requirements": "{19,72}", + "shop_price": "35000", + "ge_buy_limit": "100", + "examine": "Plant in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "32000", + "durability": null, + "name": "Calquat tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5290" + }, + { + "requirements": "{9,19}", + "ge_buy_limit": "100", + "examine": "A guam seed - plant in a herb patch.", + "grand_exchange_price": "5", + "durability": null, + "name": "Guam seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5291" + }, + { + "requirements": "{14,19}", + "ge_buy_limit": "100", + "examine": "A marrentill seed - plant in a herb patch.", + "grand_exchange_price": "5", + "durability": null, + "name": "Marrentill seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5292" + }, + { + "requirements": "{19,19}", + "ge_buy_limit": "100", + "examine": "A tarromin seed - plant in a herb patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Tarromin seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5293" + }, + { + "requirements": "{19,26}", + "ge_buy_limit": "100", + "examine": "A harralander seed - plant in a herb patch.", + "grand_exchange_price": "4", + "durability": null, + "name": "Harralander seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5294" + }, + { + "requirements": "{19,32}", + "shop_price": "4000", + "ge_buy_limit": "100", + "examine": "A Ranarr seed - plant in a herb patch.", + "grand_exchange_price": "9489", + "durability": null, + "name": "Ranarr seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5295" + }, + { + "requirements": "{19,38}", + "ge_buy_limit": "100", + "examine": "A toadflax seed - plant in a herb patch.", + "grand_exchange_price": "2980", + "durability": null, + "name": "Toadflax seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5296" + }, + { + "requirements": "{19,44}", + "ge_buy_limit": "100", + "examine": "An irit seed - plant in a herb patch.", + "grand_exchange_price": "181", + "durability": null, + "name": "Irit seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5297" + }, + { + "requirements": "{19,50}", + "ge_buy_limit": "100", + "examine": "An avantoe seed - plant in a herb patch.", + "grand_exchange_price": "2492", + "durability": null, + "name": "Avantoe seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5298" + }, + { + "requirements": "{19,56}", + "ge_buy_limit": "100", + "examine": "A kwuarm seed - plant in a herb patch.", + "grand_exchange_price": "537", + "durability": null, + "name": "Kwuarm seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5299" + }, + { + "requirements": "{19,62}", + "ge_buy_limit": "100", + "examine": "A snapdragon seed - plant in a herb patch.", + "grand_exchange_price": "47800", + "durability": null, + "name": "Snapdragon seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5300" + }, + { + "requirements": "{19,67}", + "ge_buy_limit": "100", + "examine": "A cadantine seed - plant in a herb patch.", + "grand_exchange_price": "1253", + "durability": null, + "name": "Cadantine seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5301" + }, + { + "requirements": "{19,73}", + "ge_buy_limit": "100", + "examine": "A lantadyme seed - plant in a herb patch.", + "grand_exchange_price": "37100", + "durability": null, + "name": "Lantadyme seed", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5302" + }, + { + "requirements": "{19,79}", + "ge_buy_limit": "100", + "examine": "A dwarf weed seed - plant in a herb patch.", + "grand_exchange_price": "41900", + "durability": null, + "name": "Dwarf weed seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5303" + }, + { + "requirements": "{19,85}", + "ge_buy_limit": "100", + "examine": "A Torstol seed - plant in a herb patch.", + "grand_exchange_price": "302300", + "durability": null, + "name": "Torstol seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5304" + }, + { + "requirements": "{3,19}", + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "A barley seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Barley seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5305" + }, + { + "requirements": "{13,19}", + "shop_price": "86", + "ge_buy_limit": "100", + "examine": "A jute seed - plant in a hops patch.", + "grand_exchange_price": "2", + "durability": null, + "name": "Jute seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5306" + }, + { + "requirements": "{4,19}", + "shop_price": "52", + "ge_buy_limit": "100", + "examine": "A hammerstone hop seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Hammerstone seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5307" + }, + { + "requirements": "{8,19}", + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "An Asgarnian hop seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Asgarnian seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5308" + }, + { + "requirements": "{16,19}", + "shop_price": "210", + "ge_buy_limit": "100", + "examine": "A yanillian hop seed - plant in a hops patch.", + "grand_exchange_price": "11", + "durability": null, + "name": "Yanillian seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5309" + }, + { + "requirements": "{21,19}", + "shop_price": "8", + "ge_buy_limit": "100", + "examine": "A krandorian hop seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Krandorian seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5310" + }, + { + "requirements": "{19,28}", + "shop_price": "14", + "ge_buy_limit": "100", + "examine": "A wildblood hop seed - plant in a hops patch.", + "grand_exchange_price": "12", + "durability": null, + "name": "Wildblood seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5311" + }, + { + "requirements": "{15,19}", + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "22", + "durability": null, + "name": "Acorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5312" + }, + { + "requirements": "{19,30}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "945", + "durability": null, + "name": "Willow seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5313" + }, + { + "requirements": "{19,45}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "35400", + "durability": null, + "name": "Maple seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5314" + }, + { + "requirements": "{19,60}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "81900", + "durability": null, + "name": "Yew seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5315" + }, + { + "requirements": "{19,75}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "276900", + "durability": null, + "name": "Magic seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5316" + }, + { + "requirements": "{19,83}", + "shop_price": "55000", + "examine": "Plant this in a plant pot of soil to grow a sapling.", + "durability": null, + "name": "Spirit seed", + "archery_ticket_price": "0", + "id": "5317" + }, + { + "shop_price": "8", + "ge_buy_limit": "500", + "examine": "A potato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Potato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5318" + }, + { + "requirements": "{5,19}", + "shop_price": "10", + "ge_buy_limit": "500", + "examine": "An onion seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Onion seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5319" + }, + { + "requirements": "{20,19}", + "ge_buy_limit": "500", + "examine": "A sweetcorn seed - plant in an allotment.", + "grand_exchange_price": "2", + "durability": null, + "name": "Sweetcorn seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5320" + }, + { + "requirements": "{19,47}", + "shop_price": "56", + "ge_buy_limit": "500", + "examine": "A watermelon seed - plant in an allotment.", + "grand_exchange_price": "2491", + "durability": null, + "name": "Watermelon seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5321" + }, + { + "requirements": "{12,19}", + "shop_price": "10", + "ge_buy_limit": "500", + "examine": "A tomato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Tomato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5322" + }, + { + "requirements": "{19,31}", + "ge_buy_limit": "500", + "examine": "A strawberry seed - plant in an allotment.", + "grand_exchange_price": "240", + "durability": null, + "name": "Strawberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5323" + }, + { + "requirements": "{7,19}", + "shop_price": "25", + "ge_buy_limit": "500", + "examine": "A cabbage seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Cabbage seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5324" + }, + { + "shop_price": "12", + "ge_buy_limit": "100", + "examine": "Not suitable for archaeological digs.", + "grand_exchange_price": "106", + "durability": null, + "name": "Gardening trowel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5325" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "106", + "durability": null, + "name": "Gardening trowel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5326" + }, + { + "examine": "I need to attach this to its head.", + "durability": null, + "name": "Spade handle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5327" + }, + { + "examine": "I need to attach this to its handle.", + "durability": null, + "name": "Spade head", + "archery_ticket_price": "0", + "id": "5328" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Good for pruning away diseased leaves.", + "grand_exchange_price": "204", + "durability": null, + "name": "Secateurs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5329", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "204", + "durability": null, + "name": "Secateurs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5330" + }, + { + "shop_price": "8", + "ge_buy_limit": "100", + "examine": "This watering can is empty.", + "grand_exchange_price": "298", + "durability": null, + "name": "Watering can", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5331" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "298", + "durability": null, + "name": "Watering can", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5332" + }, + { + "shop_price": "8", + "examine": " This watering can is almost empty.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(1)", + "archery_ticket_price": "0", + "weight": "0.2", + "id": "5333" + }, + { + "shop_price": "8", + "examine": "This watering can is three-quarters empty.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(2)", + "archery_ticket_price": "0", + "weight": "0.3", + "id": "5334" + }, + { + "shop_price": "8", + "examine": "This watering can is just under half-full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(3)", + "archery_ticket_price": "0", + "weight": "0.4", + "id": "5335" + }, + { + "shop_price": "8", + "examine": " Some would say this watering can is half-full, others half-empty.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(4)", + "archery_ticket_price": "0", + "weight": "0.5", + "id": "5336" + }, + { + "shop_price": "8", + "examine": "This watering can is just over half-full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(5)", + "archery_ticket_price": "0", + "weight": "0.6", + "id": "5337" + }, + { + "shop_price": "8", + "examine": " This watering can is three quarters full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(6)", + "archery_ticket_price": "0", + "weight": "0.7", + "id": "5338" + }, + { + "shop_price": "8", + "examine": " This watering can is almost completely full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(7)", + "archery_ticket_price": "0", + "weight": "0.8", + "id": "5339" + }, + { + "shop_price": "8", + "examine": " This watering can is completely full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(8)", + "archery_ticket_price": "0", + "weight": "0.9", + "id": "5340" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Use this to clear weeds.", + "grand_exchange_price": "99", + "durability": null, + "name": "Rake", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "5341" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "99", + "durability": null, + "name": "Rake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5342" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Use this to plant seeds with.", + "grand_exchange_price": "117", + "durability": null, + "name": "Seed dibber", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5343" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "117", + "durability": null, + "name": "Seed dibber", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5344" + }, + { + "ge_buy_limit": "100", + "examine": "A pair of gardening boots.", + "grand_exchange_price": "3186", + "durability": null, + "name": "Gardening boots", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5345", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3186", + "durability": null, + "name": "Gardening boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5346" + }, + { + "examine": "I need to reattach this to its head.", + "durability": null, + "name": "Rake handle", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5347" + }, + { + "examine": "I need to reattach this to its handle.", + "durability": null, + "name": "Rake head", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5348" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An empty plant pot.", + "grand_exchange_price": "20", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5350" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5351" + }, + { + "shop_price": "9", + "ge_buy_limit": "100", + "examine": "An unfired plant pot.", + "grand_exchange_price": "7", + "durability": null, + "name": "Unfired plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5352" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Unfired plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5353" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "A plant pot filled with soil.", + "grand_exchange_price": "340", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5354" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "340", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5355" + }, + { + "shop_price": "1", + "examine": "A plant pot filled with soil.", + "grand_exchange_price": "243", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5356" + }, + { + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5357" + }, + { + "shop_price": "200", + "examine": "An acorn has been sown and watered in this plant pot.", + "durability": null, + "name": "Oak seedling", + "archery_ticket_price": "0", + "id": "5358" + }, + { + "examine": "A willow tree seed has been sown and watered in this plant pot", + "durability": null, + "name": "Willow seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5359" + }, + { + "examine": "A maple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Maple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5360" + }, + { + "examine": "A yew seed has been sown in the plant pot", + "durability": null, + "name": "Yew seedling", + "weight": "1", + "archery_ticket_price": "0", + "id": "5361" + }, + { + "examine": "A magic tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Magic seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5362" + }, + { + "examine": "A spirit seedling is growing in this pot. It has been sown and watered.", + "durability": null, + "name": "Spirit seedling", + "archery_ticket_price": "0", + "id": "5363" + }, + { + "shop_price": "200", + "examine": "An acorn has been sown and watered in this plant pot.", + "durability": null, + "name": "Oak seedling", + "archery_ticket_price": "0", + "id": "5364" + }, + { + "examine": "A willow tree seed has been sown and watered in this plant pot", + "durability": null, + "name": "Willow seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5365" + }, + { + "examine": "A maple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Maple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5366" + }, + { + "examine": "A yew seed has been sown in the plant pot", + "durability": null, + "name": "Yew seedling", + "weight": "1", + "archery_ticket_price": "0", + "id": "5367" + }, + { + "examine": "A magic tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Magic seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5368" + }, + { + "examine": "A spirit seedling is growing in this pot. It has been sown and watered.", + "durability": null, + "name": "Spirit seedling", + "archery_ticket_price": "0", + "id": "5369" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Oak sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5370" + }, + { + "examine": "This sapling is ready to be replanted in a tree patch.", + "durability": null, + "name": "Willow sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5371" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Maple sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5372" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Yew sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5373" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Magic sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5374" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Spirit sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5375" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "An empty fruit basket.", + "grand_exchange_price": "1", + "durability": null, + "name": "Basket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5376" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Basket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5377" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5378" + }, + { + "durability": null, + "name": "Apples(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5379" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5380" + }, + { + "durability": null, + "name": "Apples(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5381" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5382" + }, + { + "durability": null, + "name": "Apples(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5383" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(4)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5384" + }, + { + "durability": null, + "name": "Apples(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5385" + }, + { + "ge_buy_limit": "1000", + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "2448", + "durability": null, + "name": "Apples(5)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5386" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2448", + "durability": null, + "name": "Apples(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5387" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5388" + }, + { + "durability": null, + "name": "Oranges(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5389" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5390" + }, + { + "durability": null, + "name": "Oranges(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5391" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5392" + }, + { + "durability": null, + "name": "Oranges(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5393" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5394" + }, + { + "durability": null, + "name": "Oranges(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5395" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "A common fruit.", + "grand_exchange_price": "5649", + "durability": null, + "name": "Oranges(5)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5396" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5649", + "durability": null, + "name": "Oranges(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5397" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(1)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5398" + }, + { + "durability": null, + "name": "Strawberries(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5399" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(2)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5400" + }, + { + "durability": null, + "name": "Strawberries(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5401" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(3)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5402" + }, + { + "durability": null, + "name": "Strawberries(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5403" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(4)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5404" + }, + { + "durability": null, + "name": "Strawberries(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5405" + }, + { + "ge_buy_limit": "10000", + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "406", + "durability": null, + "name": "Strawberries(5)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5406" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "406", + "durability": null, + "name": "Strawberries(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5407" + }, + { + "examine": "A fruit basket filled with bananas.", + "grand_exchange_price": "1064", + "durability": null, + "name": "Bananas(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5408" + }, + { + "durability": null, + "name": "Bananas(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5409" + }, + { + "examine": "A fruit basket filled with bananas.", + "grand_exchange_price": "1064", + "durability": null, + "name": "Bananas(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5410" + }, + { + "durability": null, + "name": "Bananas(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5411" + }, + { + "examine": "A fruit basket filled with bananas.", + "grand_exchange_price": "1064", + "durability": null, + "name": "Bananas(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5412" + }, + { + "durability": null, + "name": "Bananas(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5413" + }, + { + "shop_price": "2", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "171", + "durability": null, + "name": "Bananas(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5414" + }, + { + "durability": null, + "name": "Bananas(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5415" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "1637", + "durability": null, + "name": "Bananas(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5416" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1637", + "durability": null, + "name": "Bananas(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5417" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An empty sack.", + "grand_exchange_price": "45", + "durability": null, + "name": "Empty sack", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5418" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "45", + "durability": null, + "name": "Empty sack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5419" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(1)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5420" + }, + { + "durability": null, + "name": "Potatoes(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5421" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(2)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5422" + }, + { + "durability": null, + "name": "Potatoes(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5423" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(3)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5424" + }, + { + "durability": null, + "name": "Potatoes(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5425" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(4)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5426" + }, + { + "durability": null, + "name": "Potatoes(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5427" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(5)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5428" + }, + { + "durability": null, + "name": "Potatoes(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5429" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(6)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5430" + }, + { + "durability": null, + "name": "Potatoes(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5431" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(7)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5432" + }, + { + "durability": null, + "name": "Potatoes(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5433" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(8)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5434" + }, + { + "durability": null, + "name": "Potatoes(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5435" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(9)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5436" + }, + { + "durability": null, + "name": "Potatoes(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5437" + }, + { + "ge_buy_limit": "1000", + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1052", + "durability": null, + "name": "Potatoes(10)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5438" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1052", + "durability": null, + "name": "Potatoes(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5439" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(1)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5440" + }, + { + "durability": null, + "name": "Onions(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5441" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(2)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5442" + }, + { + "durability": null, + "name": "Onions(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5443" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(3)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5444" + }, + { + "durability": null, + "name": "Onions(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5445" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(4)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5446" + }, + { + "durability": null, + "name": "Onions(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5447" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(5)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5448" + }, + { + "durability": null, + "name": "Onions(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5449" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(6)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5450" + }, + { + "durability": null, + "name": "Onions(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5451" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(7)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5452" + }, + { + "durability": null, + "name": "Onions(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5453" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(8)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5454" + }, + { + "durability": null, + "name": "Onions(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5455" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(9)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5456" + }, + { + "durability": null, + "name": "Onions(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5457" + }, + { + "ge_buy_limit": "1000", + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "489", + "durability": null, + "name": "Onions(10)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5458" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "489", + "durability": null, + "name": "Onions(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5459" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5460" + }, + { + "durability": null, + "name": "Cabbages(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5461" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5462" + }, + { + "durability": null, + "name": "Cabbages(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5463" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5464" + }, + { + "durability": null, + "name": "Cabbages(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5465" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5466" + }, + { + "durability": null, + "name": "Cabbages(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5467" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5468" + }, + { + "durability": null, + "name": "Cabbages(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5469" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5470" + }, + { + "durability": null, + "name": "Cabbages(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5471" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5472" + }, + { + "durability": null, + "name": "Cabbages(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5473" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5474" + }, + { + "durability": null, + "name": "Cabbages(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5475" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5476" + }, + { + "durability": null, + "name": "Cabbages(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5477" + }, + { + "ge_buy_limit": "1000", + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "917", + "durability": null, + "name": "Cabbages(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5478" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "917", + "durability": null, + "name": "Cabbages(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5479" + }, + { + "examine": "An apple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Apple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5480" + }, + { + "examine": "A banana tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Banana seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5481" + }, + { + "examine": "An orange tree seed has been sown (and watered)in this plant pot.", + "durability": null, + "name": "Orange seedling", + "archery_ticket_price": "0", + "id": "5482" + }, + { + "examine": "A curry seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Curry seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5483" + }, + { + "examine": "A pineapple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Pineapple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5484" + }, + { + "examine": "This needs watering before it will grow.", + "durability": null, + "name": "Papaya seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5485" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Palm seedling", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "5486" + }, + { + "examine": "A calquat tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Calquat seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5487" + }, + { + "examine": "An apple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Apple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5488" + }, + { + "examine": "A banana tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Banana seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5489" + }, + { + "examine": "An orange tree seed has been sown (and watered)in this plant pot.", + "durability": null, + "name": "Orange seedling", + "archery_ticket_price": "0", + "id": "5490" + }, + { + "examine": "A curry seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Curry seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5491" + }, + { + "examine": "A pineapple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Pineapple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5492" + }, + { + "examine": "This needs watering before it will grow.", + "durability": null, + "name": "Papaya seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5493" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Palm seedling", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "5494" + }, + { + "examine": "A calquat tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Calquat seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5495" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Apple sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5496" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Banana sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5497" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Orange sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5498" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Curry sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5499" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Pineapple sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5500" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Papaya sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5501" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Palm sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5502" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Calquat sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5503" + }, + { + "ge_buy_limit": "10000", + "examine": "A freshly picked strawberry.", + "grand_exchange_price": "23", + "durability": null, + "name": "Strawberry", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5504" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "23", + "durability": null, + "name": "Strawberry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5505" + }, + { + "examine": "The Wise Old Man of Draynor Village asked you to take this to someone.", + "durability": null, + "name": "Old man's message", + "archery_ticket_price": "0", + "id": "5506" + }, + { + "examine": "A tatty old book belonging to the Wise Old Man of Draynor Village.", + "durability": null, + "name": "Strange book", + "archery_ticket_price": "0", + "id": "5507" + }, + { + "examine": "A tatty old book belonging to the Wise Old Man of Draynor Village.", + "durability": null, + "name": "Book of folklore", + "archery_ticket_price": "0", + "id": "5508" + }, + { + "examine": "A small pouch used for storing essence.", + "durability": null, + "name": "Small pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5509" + }, + { + "examine": "A medium-sized pouch used for storing essence.", + "durability": null, + "name": "Medium pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5510" + }, + { + "examine": "A medium-sized pouch used for storing essence.", + "durability": null, + "name": "Medium pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5511" + }, + { + "shop_price": "25000", + "examine": "A large pouch used for storing essence.", + "durability": null, + "name": "Large pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5512" + }, + { + "shop_price": "25000", + "examine": "A large pouch used for storing essence.", + "durability": null, + "name": "Large pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5513" + }, + { + "shop_price": "50000", + "examine": "A giant-sized pouch used for storing essence.", + "durability": null, + "name": "Giant pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5514" + }, + { + "shop_price": "50000", + "examine": "A giant-sized pouch used for storing essence.", + "durability": null, + "name": "Giant pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5515" + }, + { + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "186900", + "durability": null, + "name": "Elemental talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5516" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "186900", + "durability": null, + "name": "Elemental talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5517" + }, + { + "examine": "When empty:", + "durability": null, + "name": "Scrying orb", + "weight": "1", + "archery_ticket_price": "0", + "id": "5518" + }, + { + "examine": "When empty:", + "durability": null, + "name": "Scrying orb", + "weight": "1", + "archery_ticket_price": "0", + "id": "5519" + }, + { + "examine": "Some research notes on abyssal space.", + "durability": null, + "name": "Abyssal book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5520" + }, + { + "ge_buy_limit": "100", + "examine": "A necklace embedded with mystical power.", + "grand_exchange_price": "720", + "durability": null, + "name": "Binding necklace", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5521", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "720", + "durability": null, + "name": "Binding necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5522" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A mould for tiaras.", + "grand_exchange_price": "315", + "durability": null, + "name": "Tiara mould", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5523" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "315", + "durability": null, + "name": "Tiara mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5524" + }, + { + "ge_buy_limit": "1000", + "examine": "Makes me feel like a Princess.", + "grand_exchange_price": "13", + "durability": null, + "name": "Tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5525", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5526" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of air.", + "grand_exchange_price": "5", + "durability": null, + "name": "Air tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5527", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Air tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5528" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the mind.", + "grand_exchange_price": "10", + "durability": null, + "name": "Mind tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5529", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Mind tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5530" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of water.", + "grand_exchange_price": "1351", + "durability": null, + "name": "Water tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5531", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1351", + "durability": null, + "name": "Water tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5532" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the body.", + "grand_exchange_price": "5", + "durability": null, + "name": "Body tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5533", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Body tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5534" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the earth.", + "grand_exchange_price": "4", + "durability": null, + "name": "Earth tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5535", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4", + "durability": null, + "name": "Earth tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5536" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of fire.", + "grand_exchange_price": "8", + "durability": null, + "name": "Fire tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5537", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Fire tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5538" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the cosmos.", + "grand_exchange_price": "8", + "durability": null, + "name": "Cosmic tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5539", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Cosmic tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5540" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of nature.", + "grand_exchange_price": "10", + "durability": null, + "name": "Nature tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5541", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Nature tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5542" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of chaos.", + "grand_exchange_price": "10", + "durability": null, + "name": "Chaos tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5543", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Chaos tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5544" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of law.", + "grand_exchange_price": "11", + "durability": null, + "name": "Law tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5545", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Law tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5546" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of death.", + "grand_exchange_price": "65", + "durability": null, + "name": "Death tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5547", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65", + "durability": null, + "name": "Death tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5548" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of Blood.", + "grand_exchange_price": "1058", + "durability": null, + "name": "Blood tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5549", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1058", + "durability": null, + "name": "Blood tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5550" + }, + { + "ge_buy_limit": "100", + "examine": " A tiara infused with the properties of the soul.", + "durability": null, + "name": "Soul tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "5551", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Soul tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5552" + }, + { + "remove_sleeves": "true", + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue top", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5553", + "bonuses": "0,0,0,0,0,10,10,10,10,10,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue mask", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5554", + "bonuses": "0,0,0,0,0,5,5,5,5,5,0,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue trousers", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5555", + "bonuses": "0,0,0,0,0,7,7,7,7,7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "examine": "Black banded leather gloves, a rogue's dream!", + "durability": null, + "name": "Rogue gloves", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5556", + "bonuses": "0,0,0,0,0,2,2,2,2,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Black banded leather boots, a rogue's dream!", + "durability": null, + "name": "Rogue boots", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5557", + "bonuses": "0,0,0,0,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "35", + "examine": "It can do almost anything!", + "durability": null, + "name": "Rogue kit", + "archery_ticket_price": "0", + "id": "5558" + }, + { + "examine": "A small satchel of bright powder!", + "durability": null, + "name": "Flash powder", + "weight": "1", + "archery_ticket_price": "0", + "id": "5559" + }, + { + "shop_price": "10", + "examine": "A useful hearing aid.", + "durability": null, + "name": "Stethoscope", + "archery_ticket_price": "0", + "id": "5560", + "equipment_slot": "5" + }, + { + "examine": "I can escape the Maze with this!", + "durability": null, + "name": "Mystic jewel", + "archery_ticket_price": "0", + "id": "5561" + }, + { + "examine": "A fraction of a roof.", + "durability": null, + "name": "Picture", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "5568" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "6000", + "ge_buy_limit": "100", + "examine": "An initiate Temple Knight's helm.", + "durability": null, + "weight": "2.2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "3512", + "name": "Initiate sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5574", + "bonuses": "0,0,0,-6,-2,13,14,11,-1,13,5,0,3,0,0" + }, + { + "requirements": "{1,20}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "An initiate Temple Knight's Armour.", + "durability": null, + "weight": "8", + "absorb": "1,0,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "5776", + "name": "Initiate hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5575", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,20,0,6,0,0" + }, + { + "requirements": "{1,20}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "An initiate Temple Knight's leg armour.", + "durability": null, + "weight": "7", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "4574", + "name": "Initiate cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5576", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,5,0,0" + }, + { + "examine": "A vial of something labelled 'Cupric Sulfate'.", + "durability": null, + "name": "Cupric sulphate", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5577" + }, + { + "examine": "A vial of something labelled 'Acetic Acid'.", + "durability": null, + "name": "Acetic acid", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5578" + }, + { + "examine": "A vial of something labelled 'Gypsum'.", + "durability": null, + "name": "Gypsum", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5579" + }, + { + "examine": "A vial of something labelled 'Sodium Chloride'.", + "durability": null, + "name": "Sodium chloride", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5580" + }, + { + "examine": "A vial of something labelled 'Nitrous Oxide'.", + "durability": null, + "name": "Nitrous oxide", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5581" + }, + { + "examine": "A vial of something labelled Dihydrogen Monoxide.", + "durability": null, + "name": "Vial of liquid", + "archery_ticket_price": "0", + "id": "5582" + }, + { + "examine": "A vial of something labelled 'Powdered Tin Ore'.", + "durability": null, + "name": "Tin ore powder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5583" + }, + { + "examine": "A vial of something labelled 'Powdered Cupric Ore'.", + "durability": null, + "name": "Cupric ore powder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5584" + }, + { + "examine": "It's a metal spade without a handle.", + "durability": null, + "name": "Metal spade", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "5586" + }, + { + "examine": "It's a metal spade without a handle.", + "durability": null, + "name": "Metal spade", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "5587" + }, + { + "examine": "Looks like a pretty boring read.", + "durability": null, + "name": "Alchemical notes", + "archery_ticket_price": "0", + "id": "5588" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5592" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5593" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5594" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5595" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5596" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5597" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5598" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5599" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5600" + }, + { + "shop_price": "14", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "33", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5601" + }, + { + "examine": "Useful for crafting items.", + "grand_exchange_price": "237", + "durability": null, + "name": "Bronze wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5602" + }, + { + "shop_price": "1", + "examine": "For shearing sheep.", + "grand_exchange_price": "41", + "durability": null, + "name": "Shears", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5603" + }, + { + "examine": "A very attractive magnet.", + "durability": null, + "name": "Magnet", + "archery_ticket_price": "0", + "id": "5604" + }, + { + "shop_price": "25", + "examine": "A dangerous looking knife.", + "grand_exchange_price": "102", + "durability": null, + "name": "Knife", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5605" + }, + { + "examine": "I can exchange this for one free makeover with the makeover mage.", + "durability": null, + "name": "Makeover voucher", + "weight": "1", + "archery_ticket_price": "0", + "id": "5606" + }, + { + "shop_price": "2", + "examine": "Some wheat heads.", + "grand_exchange_price": "20", + "durability": null, + "name": "Grain", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "5607", + "equipment_slot": "1" + }, + { + "examine": "A cunning animal.", + "durability": null, + "name": "Fox", + "archery_ticket_price": "0", + "id": "5608", + "equipment_slot": "3" + }, + { + "examine": "Normal: Yep. Definitely a chicken.", + "durability": null, + "name": "Chicken", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "5609", + "equipment_slot": "5" + }, + { + "examine": "There's not much sand left in the top half...", + "durability": null, + "name": "Hourglass", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5610" + }, + { + "durability": null, + "name": "Initiate sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5611" + }, + { + "durability": null, + "name": "Initiate hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5612" + }, + { + "durability": null, + "name": "Initiate cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5613" + }, + { + "turn90cw_anim": "330", + "walk_anim": "330", + "durability": null, + "turn90ccw_anim": "330", + "turn180_anim": "330", + "render_anim": "191", + "equipment_slot": "3", + "stand_anim": "330", + "name": "Magic carpet", + "run_anim": "330", + "archery_ticket_price": "0", + "id": "5614", + "stand_turn_anim": "330" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "5615" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "127", + "durability": null, + "name": "Bronze arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5616", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "138", + "durability": null, + "name": "Iron arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5617", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "159", + "durability": null, + "name": "Steel arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5618", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "176", + "durability": null, + "name": "Mithril arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5619", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "211", + "durability": null, + "name": "Adamant arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5620", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "415", + "durability": null, + "name": "Rune arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5621", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "1076", + "durability": null, + "name": "Bronze arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5622", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "1037", + "durability": null, + "name": "Iron arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5623", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "1038", + "durability": null, + "name": "Steel arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5624", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "718", + "durability": null, + "name": "Mithril arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5625", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "101", + "durability": null, + "name": "Adamant arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5626", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Rune arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5627", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "162", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5628", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "164", + "attack_audios": "2547,0,0,0", + "name": "Iron dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5629", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "173", + "attack_audios": "2547,0,0,0", + "name": "Steel dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5630", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "822", + "attack_audios": "2547,0,0,0", + "name": "Black dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5631", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "196", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5632", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "244", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5633", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "370", + "attack_audios": "2547,0,0,0", + "name": "Rune dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5634", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1733", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5635", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1687", + "attack_audios": "2547,0,0,0", + "name": "Iron dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5636", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1654", + "attack_audios": "2547,0,0,0", + "name": "Steel dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5637", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "2422", + "attack_audios": "2547,0,0,0", + "name": "Black dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5638", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1660", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5639", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1352", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5640", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1109", + "attack_audios": "2547,0,0,0", + "name": "Rune dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5641", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "115", + "name": "Bronze javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5642", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "112", + "name": "Iron javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5643", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "128", + "name": "Steel javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5644", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "141", + "name": "Mithril javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5645", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "100", + "shop_price": "100", + "examine": "An adamant tipped javelin.", + "durability": null, + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "179", + "name": "Adamant javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5646", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "302", + "name": "Rune javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5647", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1755", + "name": "Bronze jav'n(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5648", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1756", + "name": "Iron javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5649", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1769", + "name": "Steel javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5650", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1736", + "name": "Mithril javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5651", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "100", + "shop_price": "100", + "examine": "An adamant tipped javelin.", + "durability": null, + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1514", + "name": "Adamant javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5652", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "requirements": "{4,40}", + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1521", + "name": "Rune javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5653", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "164", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5654", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "170", + "attack_audios": "2704,0,0,0", + "name": "Iron knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5655", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "212", + "attack_audios": "2704,0,0,0", + "name": "Steel knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5656", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "330", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5657", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "66", + "attack_audios": "2704,0,0,0", + "name": "Black knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5658", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "609", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5659", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1511", + "attack_audios": "2704,0,0,0", + "name": "Rune knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5660", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1514", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5661", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1212", + "attack_audios": "2704,0,0,0", + "name": "Iron knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5662", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1579", + "attack_audios": "2704,0,0,0", + "name": "Steel knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5663", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1368", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5664", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "103", + "attack_audios": "2704,0,0,0", + "name": "Black knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5665", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1505", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5666", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "2207", + "attack_audios": "2704,0,0,0", + "name": "Rune knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5667", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "483", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5668", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "483", + "durability": null, + "name": "Iron dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5669" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "350", + "attack_audios": "2517,2517,2500,2517", + "name": "Bronze dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5670", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "350", + "durability": null, + "name": "Bronze dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5671" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "575", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5672", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "575", + "durability": null, + "name": "Steel dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5673" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "538", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5674", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "538", + "durability": null, + "name": "Mithril dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5675" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "durability": null, + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "800", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5676", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "800", + "durability": null, + "name": "Adamant dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5677" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "4538", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5678", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4538", + "durability": null, + "name": "Rune dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5679" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "16800", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5680", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "attack_anims": "396,396,395,396", + "ge_buy_limit": "10", + "grand_exchange_price": "16800", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Dragon dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5681", + "defence_anim": "397" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "664", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5682", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "664", + "durability": null, + "name": "Black dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5683" + }, + { + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Poison dagger(p+)", + "archery_ticket_price": "0", + "id": "5684", + "weapon_interface": "5", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0", + "render_anim": "2584", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Poison dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5685" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4128", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5686", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4128", + "durability": null, + "name": "Iron dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5687" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "5088", + "attack_audios": "2517,2517,2500,2517", + "name": "Br'ze dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5688", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5088", + "durability": null, + "name": "Br'ze dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5689" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4729", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5690", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4729", + "durability": null, + "name": "Steel dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5691" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "3476", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5692", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3476", + "durability": null, + "name": "Mithril dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5693" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "durability": null, + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4612", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5694", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4612", + "durability": null, + "name": "Adamant dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5695" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "5061", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5696", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5061", + "durability": null, + "name": "Rune dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5697" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "20300", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5698", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "attack_anims": "396,396,395,396", + "ge_buy_limit": "10", + "grand_exchange_price": "20300", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Dragon dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5699", + "defence_anim": "397" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4921", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5700", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4921", + "durability": null, + "name": "Black dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5701" + }, + { + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Poison dagger(p++)", + "archery_ticket_price": "0", + "id": "5702", + "weapon_interface": "5", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0", + "render_anim": "2584", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Poison dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5703" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "861", + "stand_anim": "813", + "name": "Bronze spear(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5704", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "861", + "durability": null, + "name": "Bronze spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5705" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "676", + "stand_anim": "813", + "name": "Iron spear(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5706", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "676", + "durability": null, + "name": "Iron spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5707" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "596", + "stand_anim": "813", + "tradeable": "true", + "name": "Steel spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5708", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "596", + "durability": null, + "name": "Steel spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5709" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "802", + "stand_anim": "813", + "tradeable": "true", + "name": "Mithril spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5710", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "802", + "durability": null, + "name": "Mithril spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5711" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1394", + "stand_anim": "813", + "tradeable": "true", + "name": "Adamant spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5712", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1394", + "durability": null, + "name": "Adamant spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5713" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "12500", + "stand_anim": "813", + "tradeable": "true", + "name": "Rune spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5714", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12500", + "durability": null, + "name": "Rune spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5715" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "41800", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5716", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear(p+)" + }, + { + "attack_anims": "2080,2081,2082,2080", + "ge_buy_limit": "10", + "grand_exchange_price": "41800", + "durability": null, + "name": "Dragon spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5717", + "defence_anim": "2079" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "7557", + "stand_anim": "813", + "name": "Bronze spear(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5718", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7557", + "durability": null, + "name": "Bronze spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5719" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8394", + "stand_anim": "813", + "name": "Iron spear(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5720", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8394", + "durability": null, + "name": "Iron spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5721" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8336", + "stand_anim": "813", + "tradeable": "true", + "name": "Steel spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5722", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8336", + "durability": null, + "name": "Steel spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5723" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "7035", + "stand_anim": "813", + "tradeable": "true", + "name": "Mithril spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5724", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7035", + "durability": null, + "name": "Mithril spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5725" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "7530", + "stand_anim": "813", + "name": "Adamant spear(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5726", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7530", + "durability": null, + "name": "Adamant spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5727" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "17700", + "stand_anim": "813", + "tradeable": "true", + "name": "Rune spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5728", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17700", + "durability": null, + "name": "Rune spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5729" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "37800", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5730", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear(p++)" + }, + { + "attack_anims": "2080,2081,2082,2080", + "ge_buy_limit": "10", + "grand_exchange_price": "37800", + "durability": null, + "name": "Dragon spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5731", + "defence_anim": "2079" + }, + { + "durability": null, + "name": "Stool", + "archery_ticket_price": "0", + "id": "5732", + "equipment_slot": "5" + }, + { + "examine": "Yuk!", + "durability": null, + "name": "Rotten potato", + "archery_ticket_price": "0", + "id": "5733" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "3351", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5734", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3351", + "durability": null, + "name": "Black spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5735" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "9065", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5736", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9065", + "durability": null, + "name": "Black spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5737" + }, + { + "shop_price": "15", + "examine": "A slightly bluish leaf.", + "grand_exchange_price": "19", + "durability": null, + "name": "Woad leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5738" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "459", + "durability": null, + "name": "Asgarnian ale(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5739" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "459", + "durability": null, + "name": "Asgarnian ale(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5740" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "1193", + "durability": null, + "name": "Mature wmb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5741" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1193", + "durability": null, + "name": "Mature wmb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5742" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "65400", + "durability": null, + "name": "Greenman's ale(m)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5743" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65400", + "durability": null, + "name": "Greenman's ale(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5744" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "2458", + "durability": null, + "name": "Dragon bitter(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5745" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2458", + "durability": null, + "name": "Dragon bitter(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5746" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "56400", + "durability": null, + "name": "Dwarven stout(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5747" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56400", + "durability": null, + "name": "Dwarven stout(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5748" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "19", + "durability": null, + "name": "Moonlight mead(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5749" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Moonlight mead(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5750" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "890", + "durability": null, + "name": "Axeman's folly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5751" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "890", + "durability": null, + "name": "Axeman's folly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5752" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Axeman's folly(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5753" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26000", + "durability": null, + "name": "Axeman's folly(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5754" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "3694", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5755" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3694", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5756" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "42800", + "durability": null, + "name": "Chef's delight(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5757" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "42800", + "durability": null, + "name": "Chef's delight(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5758" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "7", + "durability": null, + "name": "Slayer's respite", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5759" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Slayer's respite", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5760" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "1748", + "durability": null, + "name": "Slayer's respite(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5761" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1748", + "durability": null, + "name": "Slayer's respite(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5762" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "1279", + "durability": null, + "name": "Cider", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5763" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1279", + "durability": null, + "name": "Cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5764" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "3614", + "durability": null, + "name": "Mature cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5765" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3614", + "durability": null, + "name": "Mature cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5766" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A pot filled with ale yeast.", + "grand_exchange_price": "59", + "durability": null, + "name": "Ale yeast", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "5767" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "59", + "durability": null, + "name": "Ale yeast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5768" + }, + { + "ge_buy_limit": "100", + "examine": "Sliced and hollowed out to form a keg.", + "grand_exchange_price": "8", + "durability": null, + "name": "Calquat keg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5769" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Calquat keg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5770" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "1934", + "durability": null, + "name": "Dwarven stout(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5771" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1934", + "durability": null, + "name": "Dwarven stout(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5772" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "3214", + "durability": null, + "name": "Dwarven stout(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5773" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3214", + "durability": null, + "name": "Dwarven stout(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5774" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "4886", + "durability": null, + "name": "Dwarven stout(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5775" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4886", + "durability": null, + "name": "Dwarven stout(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5776" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "5159", + "durability": null, + "name": "Dwarven stout(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5777" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5159", + "durability": null, + "name": "Dwarven stout(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5778" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "3344", + "durability": null, + "name": "Asgarnian ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5779" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3344", + "durability": null, + "name": "Asgarnian ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5780" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "6103", + "durability": null, + "name": "Asgarnian ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5781" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6103", + "durability": null, + "name": "Asgarnian ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5782" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "9230", + "durability": null, + "name": "Asgarnian ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5783" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9230", + "durability": null, + "name": "Asgarnian ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5784" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "12900", + "durability": null, + "name": "Asgarnian ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5785" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12900", + "durability": null, + "name": "Asgarnian ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5786" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "3441", + "durability": null, + "name": "Greenmans ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5787" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3441", + "durability": null, + "name": "Greenmans ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5788" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "4670", + "durability": null, + "name": "Greenmans ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5789" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4670", + "durability": null, + "name": "Greenmans ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5790" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "7654", + "durability": null, + "name": "Greenmans ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5791" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7654", + "durability": null, + "name": "Greenmans ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5792" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "6317", + "durability": null, + "name": "Greenmans ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5793" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6317", + "durability": null, + "name": "Greenmans ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5794" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "1495", + "durability": null, + "name": "Mind bomb(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5795" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1495", + "durability": null, + "name": "Mind bomb(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5796" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "2721", + "durability": null, + "name": "Mind bomb(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5797" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2721", + "durability": null, + "name": "Mind bomb(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5798" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "4038", + "durability": null, + "name": "Mind bomb(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5799" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4038", + "durability": null, + "name": "Mind bomb(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5800" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "5166", + "durability": null, + "name": "Mind bomb(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5801" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5166", + "durability": null, + "name": "Mind bomb(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5802" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "1673", + "durability": null, + "name": "Dragon bitter(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5803" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1673", + "durability": null, + "name": "Dragon bitter(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5804" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "3259", + "durability": null, + "name": "Dragon bitter(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5805" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3259", + "durability": null, + "name": "Dragon bitter(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5806" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "4845", + "durability": null, + "name": "Dragon bitter(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5807" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4845", + "durability": null, + "name": "Dragon bitter(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5808" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "5924", + "durability": null, + "name": "Dragon bitter(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5809" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5924", + "durability": null, + "name": "Dragon bitter(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5810" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "1298", + "durability": null, + "name": "Moonlight mead(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5811" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1298", + "durability": null, + "name": "Moonlight mead(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5812" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "2510", + "durability": null, + "name": "Moonlight mead(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5813" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2510", + "durability": null, + "name": "Moonlight mead(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5814" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "3721", + "durability": null, + "name": "Moonlight mead(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5815" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3721", + "durability": null, + "name": "Moonlight mead(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5816" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "4883", + "durability": null, + "name": "Moonlight mead(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5817" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4883", + "durability": null, + "name": "Moonlight mead(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5818" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "3333", + "durability": null, + "name": "Axeman's folly(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5819" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3333", + "durability": null, + "name": "Axeman's folly(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5820" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "6093", + "durability": null, + "name": "Axeman's folly(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5821" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6093", + "durability": null, + "name": "Axeman's folly(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5822" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "8978", + "durability": null, + "name": "Axeman's folly(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5823" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8978", + "durability": null, + "name": "Axeman's folly(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5824" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "9212", + "durability": null, + "name": "Axeman's folly(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5825" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9212", + "durability": null, + "name": "Axeman's folly(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5826" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "3851", + "durability": null, + "name": "Chef's delight(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5827" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3851", + "durability": null, + "name": "Chef's delight(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5828" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "6589", + "durability": null, + "name": "Chef's delight(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5829" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6589", + "durability": null, + "name": "Chef's delight(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5830" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "9536", + "durability": null, + "name": "Chef's delight(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5831" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9536", + "durability": null, + "name": "Chef's delight(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5832" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "13200", + "durability": null, + "name": "Chef's delight(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5833" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13200", + "durability": null, + "name": "Chef's delight(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5834" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "1127", + "durability": null, + "name": "Slayer's respite(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5835" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1127", + "durability": null, + "name": "Slayer's respite(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5836" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "2168", + "durability": null, + "name": "Slayer's respite(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5837" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2168", + "durability": null, + "name": "Slayer's respite(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5838" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "3209", + "durability": null, + "name": "Slayer's respite(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5839" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3209", + "durability": null, + "name": "Slayer's respite(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5840" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "3582", + "durability": null, + "name": "Slayer's respite(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5841" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3582", + "durability": null, + "name": "Slayer's respite(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5842" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "6040", + "durability": null, + "name": "Cider(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5843" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6040", + "durability": null, + "name": "Cider(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5844" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "11000", + "durability": null, + "name": "Cider(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5845" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11000", + "durability": null, + "name": "Cider(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5846" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "15400", + "durability": null, + "name": "Cider(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5847" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15400", + "durability": null, + "name": "Cider(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5848" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "18900", + "durability": null, + "name": "Cider(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5849" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18900", + "durability": null, + "name": "Cider(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5850" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "44600", + "durability": null, + "name": "Dwarven stout(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5851" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44600", + "durability": null, + "name": "Dwarven stout(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5852" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "68900", + "durability": null, + "name": "Dwarven stout(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5853" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "68900", + "durability": null, + "name": "Dwarven stout(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5854" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "98800", + "durability": null, + "name": "Dwarven stout(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5855" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98800", + "durability": null, + "name": "Dwarven stout(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5856" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "237400", + "durability": null, + "name": "Dwarven stout(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5857" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "237400", + "durability": null, + "name": "Dwarven stout(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5858" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "1697", + "durability": null, + "name": "Asgarnian ale(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5859" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1697", + "durability": null, + "name": "Asgarnian ale(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5860" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "3307", + "durability": null, + "name": "Asgarnian ale(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5861" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3307", + "durability": null, + "name": "Asgarnian ale(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5862" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "4917", + "durability": null, + "name": "Asgarnian ale(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5863" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4917", + "durability": null, + "name": "Asgarnian ale(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5864" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "6778", + "durability": null, + "name": "Asgarnian ale(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5865" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6778", + "durability": null, + "name": "Asgarnian ale(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5866" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "57600", + "durability": null, + "name": "Greenmans ale(m1)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5867" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57600", + "durability": null, + "name": "Greenmans ale(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5868" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "92000", + "durability": null, + "name": "Greenmans ale(m2)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5869" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92000", + "durability": null, + "name": "Greenmans ale(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5870" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "136700", + "durability": null, + "name": "Greenmans ale(m3)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5871" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "136700", + "durability": null, + "name": "Greenmans ale(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5872" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "231700", + "durability": null, + "name": "Greenmans ale(m4)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5873" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "231700", + "durability": null, + "name": "Greenmans ale(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5874" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "3032", + "durability": null, + "name": "Mind bomb(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5875" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3032", + "durability": null, + "name": "Mind bomb(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5876" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "5977", + "durability": null, + "name": "Mind bomb(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5877" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5977", + "durability": null, + "name": "Mind bomb(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5878" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "8922", + "durability": null, + "name": "Mind bomb(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5879" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8922", + "durability": null, + "name": "Mind bomb(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5880" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "12700", + "durability": null, + "name": "Mind bomb(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5881" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12700", + "durability": null, + "name": "Mind bomb(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5882" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "2125", + "durability": null, + "name": "Dragon bitter(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5883" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2125", + "durability": null, + "name": "Dragon bitter(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5884" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "4163", + "durability": null, + "name": "Dragon bitter(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5885" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4163", + "durability": null, + "name": "Dragon bitter(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5886" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "6201", + "durability": null, + "name": "Dragon bitter(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5887" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6201", + "durability": null, + "name": "Dragon bitter(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5888" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "8834", + "durability": null, + "name": "Dragon bitter(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5889" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8834", + "durability": null, + "name": "Dragon bitter(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5890" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "1315", + "durability": null, + "name": "M'light mead(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5891" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1315", + "durability": null, + "name": "M'light mead(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5892" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "2543", + "durability": null, + "name": "M'light mead(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5893" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2543", + "durability": null, + "name": "M'light mead(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5894" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "3771", + "durability": null, + "name": "M'light mead(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5895" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3771", + "durability": null, + "name": "M'light mead(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5896" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "5000", + "durability": null, + "name": "M'light mead(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5897" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5000", + "durability": null, + "name": "M'light mead(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5898" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "13500", + "durability": null, + "name": "Axeman's folly(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5899" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13500", + "durability": null, + "name": "Axeman's folly(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5900" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "24800", + "durability": null, + "name": "Axeman's folly(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5901" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24800", + "durability": null, + "name": "Axeman's folly(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5902" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "37300", + "durability": null, + "name": "Axeman's folly(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5903" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "37300", + "durability": null, + "name": "Axeman's folly(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5904" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "60700", + "durability": null, + "name": "Axeman's folly(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5905" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60700", + "durability": null, + "name": "Axeman's folly(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5906" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "18000", + "durability": null, + "name": "Chef's delight(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5907" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18000", + "durability": null, + "name": "Chef's delight(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5908" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "34300", + "durability": null, + "name": "Chef's delight(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5909" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34300", + "durability": null, + "name": "Chef's delight(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5910" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "51000", + "durability": null, + "name": "Chef's delight(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5911" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "51000", + "durability": null, + "name": "Chef's delight(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5912" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "98600", + "durability": null, + "name": "Chef's delight(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5913" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98600", + "durability": null, + "name": "Chef's delight(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5914" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "3672", + "durability": null, + "name": "Slayer respite(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5915" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3672", + "durability": null, + "name": "Slayer respite(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5916" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "7258", + "durability": null, + "name": "Slayer respite(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5917" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7258", + "durability": null, + "name": "Slayer respite(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5918" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "10800", + "durability": null, + "name": "Slayer respite(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5919" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10800", + "durability": null, + "name": "Slayer respite(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5920" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "15300", + "durability": null, + "name": "Slayer respite(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5921" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15300", + "durability": null, + "name": "Slayer respite(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5922" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "2966", + "durability": null, + "name": "Cider(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5923" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2966", + "durability": null, + "name": "Cider(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5924" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "5845", + "durability": null, + "name": "Cider(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5925" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5845", + "durability": null, + "name": "Cider(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5926" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "8724", + "durability": null, + "name": "Cider(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5927" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8724", + "durability": null, + "name": "Cider(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5928" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "11900", + "durability": null, + "name": "Cider(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5929" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11900", + "durability": null, + "name": "Cider(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5930" + }, + { + "ge_buy_limit": "5000", + "examine": "I can weave this to make sacks.", + "grand_exchange_price": "532", + "durability": null, + "name": "Jute fibre", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "5931" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "532", + "durability": null, + "name": "Jute fibre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5932" + }, + { + "ge_buy_limit": "200", + "examine": "A branch from a willow tree.", + "grand_exchange_price": "1255", + "durability": null, + "name": "Willow branch", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5933" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1255", + "durability": null, + "name": "Willow branch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5934" + }, + { + "ge_buy_limit": "10000", + "examine": "A vial filled with coconut milk.", + "grand_exchange_price": "1307", + "durability": null, + "name": "Coconut milk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5935" + }, + { + "ge_buy_limit": "1000", + "examine": "A vial of extra-strong weapon poison, for spears and daggers.", + "grand_exchange_price": "605", + "durability": null, + "name": "Weapon poison+", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5937" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "605", + "durability": null, + "name": "Weapon poison+", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5938" + }, + { + "ge_buy_limit": "1000", + "examine": "A vial of super strong weapon poison, for spears and daggers.", + "grand_exchange_price": "4817", + "durability": null, + "name": "Weapon poison++", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5940" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4817", + "durability": null, + "name": "Weapon poison++", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5941" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1032", + "durability": null, + "name": "Antipoison+(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5943" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1032", + "durability": null, + "name": "Antipoison+(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5944" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1499", + "durability": null, + "name": "Antipoison+(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5945" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1499", + "durability": null, + "name": "Antipoison+(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5946" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1316", + "durability": null, + "name": "Antipoison+(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5947" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1316", + "durability": null, + "name": "Antipoison+(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5948" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1599", + "durability": null, + "name": "Antipoison+(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5949" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1599", + "durability": null, + "name": "Antipoison+(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5950" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of a super-strong antipoison potion.", + "grand_exchange_price": "1138", + "durability": null, + "name": "Antipoison++(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5952" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1138", + "durability": null, + "name": "Antipoison++(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5953" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of a super-strong antipoison potion.", + "grand_exchange_price": "1071", + "durability": null, + "name": "Antipoison++(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5954" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1071", + "durability": null, + "name": "Antipoison++(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5955" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of a super-strong antipoison potion.", + "grand_exchange_price": "632", + "durability": null, + "name": "Antipoison++(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5956" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "632", + "durability": null, + "name": "Antipoison++(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5957" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of a super-strong antipoison potion.", + "grand_exchange_price": "821", + "durability": null, + "name": "Antipoison++(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5958" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "821", + "durability": null, + "name": "Antipoison++(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5959" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5960" + }, + { + "durability": null, + "name": "Tomatoes(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5961" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5962" + }, + { + "durability": null, + "name": "Tomatoes(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5963" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5964" + }, + { + "durability": null, + "name": "Tomatoes(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5965" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5966" + }, + { + "durability": null, + "name": "Tomatoes(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5967" + }, + { + "ge_buy_limit": "10000", + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "335", + "durability": null, + "name": "Tomatoes(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5968" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "335", + "durability": null, + "name": "Tomatoes(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5969" + }, + { + "ge_buy_limit": "5000", + "examine": "I could make a spicy curry with this.", + "grand_exchange_price": "318", + "durability": null, + "name": "Curry leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5970" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "318", + "durability": null, + "name": "Curry leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5971" + }, + { + "ge_buy_limit": "5000", + "examine": "Looks delicious.", + "grand_exchange_price": "2074", + "durability": null, + "name": "Papaya fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5972" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2074", + "durability": null, + "name": "Papaya fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5973" + }, + { + "ge_buy_limit": "5000", + "examine": "It's a coconut.", + "grand_exchange_price": "2568", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5974" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2568", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5975" + }, + { + "ge_buy_limit": "5000", + "examine": "It's a coconut.", + "grand_exchange_price": "1258", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5976" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1258", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5977" + }, + { + "ge_buy_limit": "10000", + "examine": "All the milk has been removed.", + "grand_exchange_price": "54", + "durability": null, + "name": "Coconut shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5978" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "54", + "durability": null, + "name": "Coconut shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5979" + }, + { + "ge_buy_limit": "100", + "examine": "This is the largest fruit I've ever seen.", + "grand_exchange_price": "43", + "durability": null, + "name": "Calquat fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5980" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43", + "durability": null, + "name": "Calquat fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5981" + }, + { + "shop_price": "48", + "ge_buy_limit": "10000", + "examine": "A juicy watermelon.", + "grand_exchange_price": "41", + "durability": null, + "name": "Watermelon", + "tradeable": "true", + "weight": "0.111", + "archery_ticket_price": "0", + "id": "5982" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "41", + "durability": null, + "name": "Watermelon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5983" + }, + { + "ge_buy_limit": "1000", + "examine": "A slice of watermelon.", + "grand_exchange_price": "40", + "durability": null, + "name": "Watermelon slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5984" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "40", + "durability": null, + "name": "Watermelon slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5985" + }, + { + "ge_buy_limit": "10000", + "examine": "Raw sweetcorn.", + "grand_exchange_price": "19", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5986" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "19", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5987" + }, + { + "ge_buy_limit": "10000", + "examine": "Delicious cooked sweetcorn.", + "grand_exchange_price": "15", + "durability": null, + "name": "Cooked sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5988" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "15", + "durability": null, + "name": "Cooked sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5989" + }, + { + "durability": null, + "name": "Burnt sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5991" + }, + { + "ge_buy_limit": "100", + "examine": "A bucket of apple mush.", + "grand_exchange_price": "425", + "durability": null, + "name": "Apple mush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5992" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "425", + "durability": null, + "name": "Apple mush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5993" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Hammerstone hops.", + "grand_exchange_price": "14", + "durability": null, + "name": "Hammerstone hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5994" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "14", + "durability": null, + "name": "Hammerstone hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5995" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Asgarnian hops.", + "grand_exchange_price": "2", + "durability": null, + "name": "Asgarnian hops", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5996" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2", + "durability": null, + "name": "Asgarnian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5997" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Yanillian hops.", + "grand_exchange_price": "1", + "durability": null, + "name": "Yanillian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5998" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Yanillian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5999" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "A handful of Krandorian hops.", + "grand_exchange_price": "2", + "durability": null, + "name": "Krandorian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6000" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2", + "durability": null, + "name": "Krandorian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6001" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of wildblood hops.", + "grand_exchange_price": "66", + "durability": null, + "name": "Wildblood hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6002" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "66", + "durability": null, + "name": "Wildblood hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6003" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "examine": "A Bittercap Mushroom", + "durability": null, + "name": "Mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6004" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "durability": null, + "name": "Mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6005" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Barley.", + "grand_exchange_price": "211", + "durability": null, + "name": "Barley", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6006" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "211", + "durability": null, + "name": "Barley", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6007" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of barley malt.", + "grand_exchange_price": "410", + "durability": null, + "name": "Barley malt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6008" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "410", + "durability": null, + "name": "Barley malt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6009" + }, + { + "ge_buy_limit": "1000", + "examine": "A bunch of marigolds.", + "grand_exchange_price": "3326", + "durability": null, + "name": "Marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6010" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3326", + "durability": null, + "name": "Marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6011" + }, + { + "ge_buy_limit": "1000", + "examine": "A bunch of nasturtiums.", + "grand_exchange_price": "52", + "durability": null, + "name": "Nasturtiums", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6012" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "52", + "durability": null, + "name": "Nasturtiums", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6013" + }, + { + "ge_buy_limit": "1000", + "examine": "Some rosemary.", + "grand_exchange_price": "29", + "durability": null, + "name": "Rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6014" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "29", + "durability": null, + "name": "Rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6015" + }, + { + "ge_buy_limit": "10000", + "examine": "Don't prick yourself with this.", + "grand_exchange_price": "6990", + "durability": null, + "name": "Cactus spine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6016" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6990", + "durability": null, + "name": "Cactus spine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6017" + }, + { + "ge_buy_limit": "10000", + "examine": "They look sweet and juicy, but only a fool would eat them.", + "grand_exchange_price": "399", + "durability": null, + "name": "Poison ivy berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6018" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "399", + "durability": null, + "name": "Poison ivy berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6019" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "152", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6020" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "152", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6021" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "27", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6022" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6023" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "21", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6024" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6025" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "7", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6026" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6027" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "11", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6028" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6029" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "4", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6030" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6031" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Good for plants, helps them grow.", + "grand_exchange_price": "97", + "durability": null, + "name": "Compost", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6032" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "97", + "durability": null, + "name": "Compost", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6033" + }, + { + "ge_buy_limit": "10000", + "examine": "Super-good for the smallest or largest of plants.", + "grand_exchange_price": "909", + "durability": null, + "name": "Supercompost", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6034" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "909", + "durability": null, + "name": "Supercompost", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6035" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "Use this on plants to cure disease.", + "grand_exchange_price": "170", + "durability": null, + "name": "Plant cure", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6036" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "170", + "durability": null, + "name": "Plant cure", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6037" + }, + { + "ge_buy_limit": "100", + "examine": "I could use this to make jewellery.", + "grand_exchange_price": "1078", + "durability": null, + "name": "Magic string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6038" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1078", + "durability": null, + "name": "Magic string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6039" + }, + { + "destroy_message": "You will need to create a new amulet if you destroy this one.", + "examine": "An Amulet of Nature.", + "durability": null, + "name": "Amulet of nature", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6040", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "examine": "Strung with the root of a Magic Tree. If I enchant this it will become an amulet of nature.", + "grand_exchange_price": "1996", + "durability": null, + "name": "Pre-nature amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6041", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1996", + "durability": null, + "name": "Pre-nature amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6042" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of the Oak tree.", + "grand_exchange_price": "60", + "durability": null, + "name": "Oak roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6043" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60", + "durability": null, + "name": "Oak roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6044" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of the Willow tree.", + "grand_exchange_price": "41", + "durability": null, + "name": "Willow roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6045" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "41", + "durability": null, + "name": "Willow roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6046" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of the Maple tree.", + "grand_exchange_price": "40", + "durability": null, + "name": "Maple roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6047" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40", + "durability": null, + "name": "Maple roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6048" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of a yew tree", + "grand_exchange_price": "570", + "durability": null, + "name": "Yew roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6049" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "570", + "durability": null, + "name": "Yew roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6050" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of a magic tree.", + "grand_exchange_price": "5853", + "durability": null, + "name": "Magic roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6051" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5853", + "durability": null, + "name": "Magic roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6052" + }, + { + "durability": null, + "name": "Spirit roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6054" + }, + { + "shop_price": "1", + "examine": "A handful of weeds.", + "durability": null, + "name": "Weeds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6055" + }, + { + "durability": null, + "name": "Weeds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6056" + }, + { + "examine": "A sack filled with hay. / This sack of hay has a bronze spear sticking through it.", + "durability": null, + "name": "Hay sack", + "archery_ticket_price": "0", + "id": "6057" + }, + { + "examine": "A sack filled with hay. / This sack of hay has a bronze spear sticking through it.", + "durability": null, + "name": "Hay sack", + "archery_ticket_price": "0", + "id": "6058" + }, + { + "examine": "This should scare the birds.", + "durability": null, + "name": "Scarecrow", + "archery_ticket_price": "0", + "id": "6059" + }, + { + "durability": null, + "name": "Stool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6060" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "134", + "durability": null, + "name": "Bronze bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6061", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "1162", + "durability": null, + "name": "Bronze bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6062", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "examine": "How do I wash blood stains out?", + "durability": null, + "name": "Bloody mourner top", + "weight": "2.72", + "archery_ticket_price": "0", + "id": "6064" + }, + { + "remove_sleeves": "true", + "examine": "A thick heavy leather top.", + "durability": null, + "name": "Mourner top", + "archery_ticket_price": "0", + "id": "6065", + "equipment_slot": "4" + }, + { + "examine": "Damaged: These are in need of a good tailor.Repaired: A pair of mourner trousers.", + "durability": null, + "name": "Mourner trousers", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "6066" + }, + { + "examine": "Damaged: These are in need of a good tailor.Repaired: A pair of mourner trousers.", + "durability": null, + "name": "Mourner trousers", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "6067", + "equipment_slot": "7" + }, + { + "shop_price": "160", + "examine": "These will keep my hands warm.", + "durability": null, + "name": "Mourner gloves", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6068", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "160", + "examine": "Comfortable leather boots.", + "durability": null, + "name": "Mourner boots", + "weight": "1.36", + "archery_ticket_price": "0", + "id": "6069", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "A dull brown cape.", + "durability": null, + "name": "Mourner cloak", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "6070", + "equipment_slot": "1" + }, + { + "shop_price": "160", + "examine": "A letter of recommendation.", + "durability": null, + "name": "Mourner letter", + "archery_ticket_price": "0", + "id": "6071" + }, + { + "examine": "A bar of soap taken from Tegid.", + "durability": null, + "name": "Tegid's soap", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6072" + }, + { + "examine": "A book on the history of Prifddinas.", + "durability": null, + "name": "Prifddinas' history", + "archery_ticket_price": "0", + "id": "6073" + }, + { + "examine": "A book on the exploration of the eastern realm.", + "durability": null, + "name": "Eastern discovery", + "archery_ticket_price": "0", + "id": "6075" + }, + { + "examine": "A book on the settlement of the eastern realm.", + "durability": null, + "name": "Eastern settlement", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6077" + }, + { + "examine": "A book about the great divide.", + "durability": null, + "name": "The great divide", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6079" + }, + { + "examine": "A strange broken device of gnomic design.", + "durability": null, + "name": "Broken device", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6081" + }, + { + "turn90cw_anim": "2319", + "examine": "A device for firing dye.", + "walk_anim": "2317", + "durability": null, + "weight": "4", + "turn90ccw_anim": "2320", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "20", + "turn180_anim": "2318", + "render_anim": "284", + "equipment_slot": "3", + "stand_anim": "2316", + "name": "Fixed device", + "run_anim": "2322", + "archery_ticket_price": "0", + "id": "6082", + "stand_turn_anim": "2321" + }, + { + "examine": "This key has seen a lot of use. (Mourning's Ends Part I)", + "durability": null, + "name": "Tarnished key", + "archery_ticket_price": "0", + "id": "6083" + }, + { + "examine": "A large pair of ogre bellows filled with red dye.", + "durability": null, + "name": "Red dye bellows", + "archery_ticket_price": "0", + "id": "6085" + }, + { + "examine": "A large pair of ogre bellows filled with blue dye.", + "durability": null, + "name": "Blue dye bellows", + "archery_ticket_price": "0", + "id": "6086" + }, + { + "examine": "A large pair of ogre bellows filled with yellow dye.", + "durability": null, + "name": "Yellow dye bellows", + "archery_ticket_price": "0", + "id": "6087" + }, + { + "examine": "A large pair of ogre bellows filled with green dye.", + "durability": null, + "name": "Green dye bellows", + "archery_ticket_price": "0", + "id": "6088" + }, + { + "examine": "A blue dye filled toad.", + "durability": null, + "name": "Blue toad", + "weight": "1", + "archery_ticket_price": "0", + "id": "6089" + }, + { + "examine": "A red dye filled toad.", + "durability": null, + "name": "Red toad", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "6090" + }, + { + "examine": "A yellow dye filled toad.", + "durability": null, + "name": "Yellow toad", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "6091" + }, + { + "examine": "A green dye filled toad.", + "durability": null, + "name": "Green toad", + "weight": "1", + "archery_ticket_price": "0", + "id": "6092" + }, + { + "examine": "A barrel full of rotten apples.", + "durability": null, + "name": "Rotten apples", + "weight": "17", + "archery_ticket_price": "0", + "id": "6093" + }, + { + "examine": "A barrel full of mushed apples.", + "durability": null, + "name": "Apple barrel", + "archery_ticket_price": "0", + "id": "6094" + }, + { + "examine": "A barrel full of rotten apples and naptha.", + "durability": null, + "name": "Naphtha apple mix", + "archery_ticket_price": "0", + "id": "6095" + }, + { + "examine": "A barrel full of toxic naphtha.", + "durability": null, + "name": "Toxic naphtha", + "weight": "32", + "archery_ticket_price": "0", + "id": "6096" + }, + { + "examine": "It's a sieve.", + "durability": null, + "name": "Sieve", + "archery_ticket_price": "0", + "id": "6097" + }, + { + "examine": "A pile of toxic powder.", + "durability": null, + "name": "Toxic powder", + "archery_ticket_price": "0", + "id": "6098" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (4)", + "archery_ticket_price": "0", + "id": "6099" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (3)", + "archery_ticket_price": "0", + "id": "6100" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (2)", + "archery_ticket_price": "0", + "id": "6101" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (1)", + "archery_ticket_price": "0", + "id": "6102" + }, + { + "examine": "A tiny Elf crystal, I need to have this re-enchanted", + "durability": null, + "name": "Tiny elf crystal", + "archery_ticket_price": "0", + "id": "6103" + }, + { + "examine": "This key is newly cut. (Mourning's Ends Part II)", + "durability": null, + "name": "New key", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "6104" + }, + { + "examine": "They seem to be not quite of this world...", + "durability": null, + "name": "Ghostly boots", + "archery_ticket_price": "0", + "id": "6106", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "remove_sleeves": "true", + "examine": "Varies", + "durability": null, + "name": "Ghostly robe", + "archery_ticket_price": "0", + "id": "6107", + "bonuses": "0,0,0,5,0,0,0,0,5,0,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "Varies", + "durability": null, + "name": "Ghostly robe", + "archery_ticket_price": "0", + "id": "6108", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "A ghostly hood, fit for a ghostly head.", + "durability": null, + "name": "Ghostly hood", + "archery_ticket_price": "0", + "id": "6109", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "They seem to fade in and out of existence...", + "durability": null, + "name": "Ghostly gloves", + "archery_ticket_price": "0", + "id": "6110", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Made of a strange, ghostly material...", + "durability": null, + "name": "Ghostly cloak", + "archery_ticket_price": "0", + "id": "6111", + "bonuses": "0,0,0,5,0,0,0,0,5,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "destroy_message": "Return to the drunken dwarf's drunken relative to get your seeds back.", + "examine": "Kelda hop seeds can only be grown underground!", + "durability": null, + "name": "Kelda seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6112" + }, + { + "destroy_message": "Return to the Keldagrim palace gardener to get your hops back.", + "examine": "A handful of Kelda Hops.", + "durability": null, + "name": "Kelda hops", + "tradeable": "false", + "destroy": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "6113" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pint of bluish beer.", + "durability": null, + "name": "Kelda stout", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6118" + }, + { + "examine": "There is a strange [green/yellow] marking on this stone.", + "durability": null, + "name": "Square stone", + "weight": "1", + "archery_ticket_price": "0", + "id": "6119" + }, + { + "examine": "There is a strange [green/yellow] marking on this stone.", + "durability": null, + "name": "Square stone", + "weight": "1", + "archery_ticket_price": "0", + "id": "6120" + }, + { + "durability": null, + "name": "A chair", + "archery_ticket_price": "0", + "id": "6122", + "equipment_slot": "5" + }, + { + "shop_price": "1", + "examine": "I need to fill this with beer.", + "grand_exchange_price": "25", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "6123", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Coconut milk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6124" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(2)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6125", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(3)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6126", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(4)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6127", + "equipment_slot": "3" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "Protective headwear made from crabs. Better than it sounds.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21000", + "name": "Rock-shell helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6128", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,6,0,0,0,0" + }, + { + "lendable": "true", + "requirements": "{1,40}", + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "40600", + "durability": null, + "name": "Rock-shell plate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6129", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,30,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "Some tough leggings made from rock crab parts.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "39400", + "name": "Rock-shell legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6130", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,10,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "A helm fit for any Fremennik ranger.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "35800", + "name": "Spined helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6131", + "bonuses": "-6,-6,-6,-6,6,6,6,6,6,0,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35800", + "durability": null, + "name": "Spined helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6132" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "A constant reminder that I'm above a Dagannoth in the food chain.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "4386", + "name": "Spined body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6133", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4386", + "durability": null, + "name": "Spined body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6134" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "Stylish leg armour for rangers with a lingering smell of raw fish...", + "durability": null, + "weight": "5", + "absorb": "0,4,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2132", + "name": "Spined chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6135", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2132", + "durability": null, + "name": "Spined chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6136" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Make your foes cower by wearing a skull as a helmet!", + "durability": null, + "weight": "1.3", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "29500", + "name": "Skeletal helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6137", + "bonuses": "0,0,0,2,-2,10,9,11,3,0,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29500", + "durability": null, + "name": "Skeletal helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6138" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "The bones in this armour seems to vibrate with a magic quality...", + "durability": null, + "weight": "4.9", + "absorb": "6,3,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "27800", + "name": "Skeletal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6139", + "bonuses": "0,0,0,8,-10,35,25,42,15,0,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27800", + "durability": null, + "name": "Skeletal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6140" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "A superior set of strengthened slacks for any self respecting seer.", + "durability": null, + "weight": "4", + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "23600", + "name": "Skeletal bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6141", + "bonuses": "0,0,0,6,-7,22,20,24,10,0,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23600", + "durability": null, + "name": "Skeletal bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6142" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Some finely crafted Fremennik boots, made from spined dagannoth hide.", + "grand_exchange_price": "1671", + "durability": null, + "name": "Spined boots", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6143", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1671", + "durability": null, + "name": "Spined boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6144" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Some Fremennik boots, made from the shards of a rock crab's shell.", + "grand_exchange_price": "756", + "durability": null, + "name": "Rock-shell boots", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6145", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "756", + "durability": null, + "name": "Rock-shell boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6146" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Some finely crafted Fremennik boots, made from the bones of a Wallasalki.", + "grand_exchange_price": "4958", + "durability": null, + "name": "Skeletal boots", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6147", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4958", + "durability": null, + "name": "Skeletal boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6148" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Fremennik gloves stitched together from spined dagannoth hide.", + "grand_exchange_price": "955", + "durability": null, + "name": "Spined gloves", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6149", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "955", + "durability": null, + "name": "Spined gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6150" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Fremennik gloves stitched together from rock crab shell shards.", + "grand_exchange_price": "951", + "durability": null, + "name": "Rock-shell gloves", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6151", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "951", + "durability": null, + "name": "Rock-shell gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6152" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Fremennik gloves stitched together from wallasalki bones fragments.", + "grand_exchange_price": "21800", + "durability": null, + "name": "Skeletal gloves", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6153", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21800", + "durability": null, + "name": "Skeletal gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6154" + }, + { + "ge_buy_limit": "500", + "examine": "A sturdy piece of dagannoth hide.", + "grand_exchange_price": "3978", + "durability": null, + "name": "Dagannoth hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6155" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "3978", + "durability": null, + "name": "Dagannoth hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6156" + }, + { + "ge_buy_limit": "100", + "examine": "A spherical chunk of rock-shell.", + "grand_exchange_price": "7371", + "durability": null, + "name": "Rock-shell chunk", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6157" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7371", + "durability": null, + "name": "Rock-shell chunk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6158" + }, + { + "ge_buy_limit": "100", + "examine": "A curved piece of rock-shell.", + "grand_exchange_price": "11300", + "durability": null, + "name": "Rock-shell shard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6159" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11300", + "durability": null, + "name": "Rock-shell shard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6160" + }, + { + "ge_buy_limit": "100", + "examine": "A slim piece of rock-shell.", + "grand_exchange_price": "16100", + "durability": null, + "name": "Rock-shell splinter", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6161" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16100", + "durability": null, + "name": "Rock-shell splinter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6162" + }, + { + "ge_buy_limit": "100", + "examine": "A fearsome looking skull.", + "grand_exchange_price": "9859", + "durability": null, + "name": "Skull piece", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6163" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9859", + "durability": null, + "name": "Skull piece", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6164" + }, + { + "ge_buy_limit": "100", + "examine": "A slightly damaged ribcage.", + "grand_exchange_price": "11300", + "durability": null, + "name": "Ribcage piece", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6165" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11300", + "durability": null, + "name": "Ribcage piece", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6166" + }, + { + "ge_buy_limit": "100", + "examine": "An interesting looking bone shard.", + "grand_exchange_price": "10300", + "durability": null, + "name": "Fibula piece", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6167" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10300", + "durability": null, + "name": "Fibula piece", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6168" + }, + { + "ge_buy_limit": "100", + "examine": "A toughened chunk of dagannoth hide.", + "grand_exchange_price": "23400", + "durability": null, + "name": "Circular hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6169" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23400", + "durability": null, + "name": "Circular hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6170" + }, + { + "ge_buy_limit": "100", + "examine": "A tattered chunk of dagannoth hide.", + "grand_exchange_price": "502", + "durability": null, + "name": "Flattened hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6171" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "502", + "durability": null, + "name": "Flattened hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6172" + }, + { + "ge_buy_limit": "100", + "examine": "A weathered chunk of dagannoth hide.", + "grand_exchange_price": "398", + "durability": null, + "name": "Stretched hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6173" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "398", + "durability": null, + "name": "Stretched hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6174" + }, + { + "durability": null, + "name": "Rock-shell helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6175" + }, + { + "examine": "A sturdy body armour made from rock crab pieces.", + "durability": null, + "name": "Rock-shell plate", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "9", + "id": "6176" + }, + { + "durability": null, + "name": "Rock-shell legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6177" + }, + { + "examine": "I need to cook this first.", + "durability": null, + "name": "Raw pheasant", + "weight": "10", + "archery_ticket_price": "0", + "id": "6178" + }, + { + "examine": "I need to cook this first.", + "durability": null, + "name": "Raw pheasant", + "weight": "10", + "archery_ticket_price": "0", + "id": "6179" + }, + { + "remove_sleeves": "true", + "examine": "A leather strapped top.", + "durability": null, + "name": "Lederhosen top", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6180", + "equipment_slot": "4" + }, + { + "examine": "Brown leather shorts with bright white socks?", + "durability": null, + "name": "Lederhosen shorts", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6181", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "A hat with a goat's hair attached.", + "durability": null, + "name": "Lederhosen hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "6182", + "equipment_slot": "0" + }, + { + "examine": "I can use this at the Varrock clothes shop.", + "durability": null, + "name": "Frog token", + "archery_ticket_price": "0", + "id": "6183" + }, + { + "remove_sleeves": "true", + "examine": "Very posh!", + "durability": null, + "name": "Prince tunic", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "6184", + "equipment_slot": "4" + }, + { + "examine": "Very posh!", + "durability": null, + "name": "Prince leggings", + "weight": "2", + "archery_ticket_price": "0", + "id": "6185", + "equipment_slot": "7" + }, + { + "remove_sleeves": "true", + "examine": "Very posh!", + "durability": null, + "name": "Princess blouse", + "weight": "2", + "archery_ticket_price": "0", + "id": "6186", + "equipment_slot": "4" + }, + { + "examine": "Very posh!", + "durability": null, + "name": "Princess skirt", + "weight": "2", + "archery_ticket_price": "0", + "id": "6187", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "Now that's just silly.", + "durability": null, + "name": "Frog mask", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6188", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Could there be something valuable in here?", + "durability": null, + "name": "Mystery box", + "weight": "1", + "archery_ticket_price": "0", + "id": "6199", + "point_price": "2" + }, + { + "destroy_message": "A ghastly fish", + "examine": "A raw...fish? Is this a fish??", + "durability": null, + "name": "Raw fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6200" + }, + { + "examine": "Fish-tastic!", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "6201" + }, + { + "destroy_message": "A ghastly fish", + "examine": "It's a fish-like thing that appears to already be cooked. It looks disgusting.", + "durability": null, + "name": "Fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6202" + }, + { + "destroy_message": "A ghastly fish", + "examine": "A raw...fish? Is this a fish??", + "durability": null, + "name": "Raw fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6204" + }, + { + "destroy_message": "A ghastly fish", + "examine": "It's a fish-like thing that appears to already be cooked. It looks disgusting.", + "durability": null, + "name": "Fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6206" + }, + { + "examine": "It's an amulet of Man speak. It makes vague grunting noises.", + "durability": null, + "name": "Man speak amulet", + "archery_ticket_price": "0", + "id": "6208", + "equipment_slot": "2" + }, + { + "shop_price": "40", + "examine": "Useful for catching small fish.", + "grand_exchange_price": "433", + "durability": null, + "name": "Small fishing net", + "tradeable": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "6209" + }, + { + "ge_buy_limit": "1000", + "examine": "Teak logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "3365", + "durability": null, + "name": "Teak pyre logs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6211" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3365", + "durability": null, + "name": "Teak pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6212" + }, + { + "ge_buy_limit": "1000", + "examine": "Mahogany logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "3574", + "durability": null, + "name": "Mahogany pyre log", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "6213" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3574", + "durability": null, + "name": "Mahogany pyre log", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6214" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2007", + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6215", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2007", + "durability": null, + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6216" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6217", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6218" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6219", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6220" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6221", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6222" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6223", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6224" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6225", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6226" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6227", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6228" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6229", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6230" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6231", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6232" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6233", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6234" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2572", + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6235", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2572", + "durability": null, + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6236" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2200", + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6237", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2200", + "durability": null, + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6238" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6239", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6240" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6241", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6242" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6243", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6244" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6245", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6246" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6247", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6248" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6249", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6250" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6251", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6252" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6253", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6254" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6255", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6256" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2731", + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6257", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2731", + "durability": null, + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6258" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "1494", + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6259", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "attack_anims": "7060", + "ge_buy_limit": "100", + "grand_exchange_price": "1494", + "durability": null, + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6260" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6261", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6262" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6263", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6264" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6265", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6266" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6267", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6268" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6269", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6270" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6271", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6272" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6273", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6274" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6275", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6276" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6277", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6278" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2957", + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6279", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2957", + "durability": null, + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6280" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden pole for use in primitive construction.", + "grand_exchange_price": "1", + "durability": null, + "name": "Thatch spar light", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6281", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Thatch spar light", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6282" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden pole for use in primitive construction.", + "grand_exchange_price": "2", + "durability": null, + "name": "Thatch spar med", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6283", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Thatch spar med", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6284" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden pole for use in primitive construction.", + "grand_exchange_price": "3", + "durability": null, + "name": "Thatch spar dense", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6285", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3", + "durability": null, + "name": "Thatch spar dense", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6286" + }, + { + "ge_buy_limit": "10000", + "examine": "Scaly but not slimy!", + "grand_exchange_price": "2084", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6287" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2084", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6288" + }, + { + "ge_buy_limit": "10000", + "examine": "Scaley but not slimy!", + "grand_exchange_price": "2019", + "durability": null, + "name": "Snakeskin", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6289" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2019", + "durability": null, + "name": "Snakeskin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6290" + }, + { + "ge_buy_limit": "1000", + "examine": "Its creeping days are over!", + "grand_exchange_price": "1949", + "durability": null, + "name": "Spider carcass", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "6291" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1949", + "durability": null, + "name": "Spider carcass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6292" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "Raw: A raw spider threaded onto a skewer stick.Cooked: A nicely roasted spider threaded onto a skewer stick.", + "grand_exchange_price": "207", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "6293" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "207", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6294" + }, + { + "shop_price": "40", + "ge_buy_limit": "1000", + "examine": "A raw spider threaded onto an arrow shaft. (Raw) A nicely roasted spider threaded onto an arrow shaft. (Cooked) A badly burnt spider threaded onto a charred arrow shaft. (Burnt)", + "grand_exchange_price": "106", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6295" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "106", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6296" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "Raw: A raw spider threaded onto a skewer stick.Cooked: A nicely roasted spider threaded onto a skewer stick.", + "grand_exchange_price": "54", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "6297" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "54", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6298" + }, + { + "shop_price": "40", + "ge_buy_limit": "1000", + "examine": "A raw spider threaded onto an arrow shaft. (Raw) A nicely roasted spider threaded onto an arrow shaft. (Cooked) A badly burnt spider threaded onto a charred arrow shaft. (Burnt)", + "grand_exchange_price": "78", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6299" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "78", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6300" + }, + { + "durability": null, + "name": "Burnt spider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6302" + }, + { + "shop_price": "40", + "examine": "A raw spider threaded onto an arrow shaft. (Raw) A nicely roasted spider threaded onto an arrow shaft. (Cooked) A badly burnt spider threaded onto a charred arrow shaft. (Burnt)", + "grand_exchange_price": "106", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6303" + }, + { + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6304" + }, + { + "ge_buy_limit": "1000", + "examine": "A sharp pointed stick, quite resistant to fire.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skewer stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6305" + }, + { + "ge_buy_limit": "10000", + "examine": "Karamja currency.", + "grand_exchange_price": "2", + "durability": null, + "name": "Trading sticks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6306" + }, + { + "ge_buy_limit": "100", + "examine": "Plant this in a herb patch to grow Goutweed.", + "grand_exchange_price": "6991", + "durability": null, + "name": "Gout tuber", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "6311" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6991", + "durability": null, + "name": "Gout tuber", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6312" + }, + { + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weight": "1.35", + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "grand_exchange_price": "179", + "name": "Opal machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6313", + "bonuses": "0,8,-2,0,0,0,1,1,0,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "179", + "durability": null, + "name": "Opal machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6314" + }, + { + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "grand_exchange_price": "4473", + "name": "Jade machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6315", + "bonuses": "0,11,-2,0,0,0,1,1,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4473", + "durability": null, + "name": "Jade machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6316" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weight": "1.3", + "attack_speed": "4", + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "8774", + "name": "Red topaz machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6317", + "bonuses": "0,16,-2,0,0,0,1,1,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8774", + "durability": null, + "name": "Red topaz machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6318" + }, + { + "ge_buy_limit": "100", + "examine": "A giant mosquito's proboscis: aerodynamic, sharp and pointy!", + "grand_exchange_price": "9733", + "durability": null, + "name": "Proboscis", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6319" + }, + { + "requirements": "{1,30}-{4,30}", + "shop_price": "1588", + "ge_buy_limit": "100", + "examine": "Made from 100% real snakeskin.", + "durability": null, + "weight": "10", + "absorb": "0,4,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "23100", + "name": "Snakeskin body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6322", + "bonuses": "0,0,0,-5,12,25,28,32,15,35,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23100", + "durability": null, + "name": "Snakeskin body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6323" + }, + { + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "100", + "examine": "Made from 100% real snake.", + "durability": null, + "weight": "3.6", + "absorb": "0,3,1", + "equipment_slot": "7", + "grand_exchange_price": "702", + "name": "Snakeskin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6324", + "bonuses": "0,0,0,-5,6,8,8,10,4,10,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "702", + "durability": null, + "name": "Snakeskin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6325" + }, + { + "remove_head": "true", + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "100", + "examine": "Lightweight head protection.", + "durability": null, + "weight": "0.9", + "absorb": "0,2,1", + "equipment_slot": "0", + "grand_exchange_price": "871", + "name": "Snakeskin bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6326", + "bonuses": "0,0,0,-5,4,2,4,4,2,2,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "871", + "durability": null, + "name": "Snakeskin bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6327" + }, + { + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "100", + "examine": "Made from snakes.", + "grand_exchange_price": "10800", + "durability": null, + "name": "Snakeskin boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "6328", + "bonuses": "0,0,0,-10,3,1,1,2,1,0,9,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10800", + "durability": null, + "name": "Snakeskin boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6329" + }, + { + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "10000", + "examine": "Made from 100% real snake.", + "grand_exchange_price": "914", + "durability": null, + "name": "Snakeskin v'brace", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6330", + "bonuses": "0,0,0,-5,6,2,2,2,1,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "914", + "durability": null, + "name": "Snakeskin v'brace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6331" + }, + { + "ge_buy_limit": "25000", + "examine": "Some well-cut mahogany logs.", + "grand_exchange_price": "503", + "durability": null, + "name": "Mahogany logs", + "tradeable": "true", + "weight": "1.33", + "archery_ticket_price": "0", + "id": "6332" + }, + { + "ge_buy_limit": "25000", + "examine": "Some well-cut teak logs.", + "grand_exchange_price": "92", + "durability": null, + "name": "Teak logs", + "tradeable": "true", + "weight": "1.35", + "archery_ticket_price": "0", + "id": "6333" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "92", + "durability": null, + "name": "Teak logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6334" + }, + { + "ge_buy_limit": "100", + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1306", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6335", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1306", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6336" + }, + { + "ge_buy_limit": "100", + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "997", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6337", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "997", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6338" + }, + { + "ge_buy_limit": "100", + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1018", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6339", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1018", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6340" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "3331", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6341", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3331", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6342" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "1382", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6343", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1382", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6344" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "2337", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6345", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2337", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6346" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "734", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6347", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "734", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6348" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "2793", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6349", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2793", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6350" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "3171", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6351", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3171", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6352" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "1416", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6353", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1416", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6354" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "2785", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6355", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2785", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6356" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "944", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6357", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "944", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6358" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "672", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6359", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "672", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6360" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "2484", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6361", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2484", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6362" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "499", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6363", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "499", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6364" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "2440", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6365", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2440", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6366" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "1479", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6367", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1479", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6368" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "823", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6369", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "823", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6370" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "2683", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6371", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2683", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6372" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "331", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6373", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "331", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6374" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "3010", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6375", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3010", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6376" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "2310", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6377", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2310", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6378" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "1697", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6379", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1697", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6380" + }, + { + "shop_price": "24", + "ge_buy_limit": "100", + "examine": "A fez hat. Juss like that.", + "grand_exchange_price": "690", + "durability": null, + "name": "Fez", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "6382", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "690", + "durability": null, + "name": "Fez", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6383" + }, + { + "remove_sleeves": "true", + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A bit itchy.", + "grand_exchange_price": "649", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6384", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "649", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6385" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "Has a coarse hard wearing texture.", + "grand_exchange_price": "533", + "durability": null, + "name": "Desert robes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6386", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "533", + "durability": null, + "name": "Desert robes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6387" + }, + { + "remove_sleeves": "true", + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A bit itchy.", + "grand_exchange_price": "1016", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6388", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1016", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6389" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "Better than factor 50 sun cream.", + "grand_exchange_price": "515", + "durability": null, + "name": "Desert legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6390", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "515", + "durability": null, + "name": "Desert legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6391" + }, + { + "remove_head": "true", + "shop_price": "35", + "ge_buy_limit": "100", + "examine": "Good for keeping the sun off my neck.", + "grand_exchange_price": "531", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6392", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "531", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6393" + }, + { + "remove_sleeves": "true", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Colourful.", + "grand_exchange_price": "650", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6394", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "650", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6395" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool light Menaphite robe.", + "grand_exchange_price": "440", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6396", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "440", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6397" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Look at those nobbily knees.", + "grand_exchange_price": "246", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6398", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "246", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6399" + }, + { + "remove_head": "true", + "shop_price": "35", + "ge_buy_limit": "100", + "examine": "Good for keeping the sun off my neck.", + "grand_exchange_price": "484", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6400", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "484", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6401" + }, + { + "remove_sleeves": "true", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Colourful.", + "grand_exchange_price": "557", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6402", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "557", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6403" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool light Menaphite robe.", + "grand_exchange_price": "449", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6404", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "449", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6405" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Look at those nobbily knees.", + "grand_exchange_price": "236", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6406", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "236", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6407" + }, + { + "requirements": "{17,10}-{0,10}", + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "An offensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "852", + "name": "Oak blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6408", + "bonuses": "0,0,4,0,0,0,0,0,0,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "852", + "durability": null, + "name": "Oak blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6409" + }, + { + "requirements": "{17,10}-{1,10}", + "ge_buy_limit": "100", + "examine": "An defensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "818", + "name": "Oak blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6410", + "bonuses": "0,0,0,0,0,0,0,4,0,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "818", + "durability": null, + "name": "Oak blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6411" + }, + { + "requirements": "{17,20}-{0,20}", + "ge_buy_limit": "100", + "examine": "An offensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "1418", + "name": "Willow blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6412", + "bonuses": "0,0,8,0,0,0,0,0,0,0,0,8,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1418", + "durability": null, + "name": "Willow blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6413" + }, + { + "requirements": "{17,20}-{1,20}", + "ge_buy_limit": "100", + "examine": "A defensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "1285", + "name": "Willow blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6414", + "bonuses": "0,0,0,0,0,0,0,8,0,0,0,8,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1285", + "durability": null, + "name": "Willow blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6415" + }, + { + "requirements": "{17,30}", + "shop_price": "1200", + "ge_buy_limit": "100", + "examine": "A solid bit of maple.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "10", + "defence_anim": "425", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "1432", + "name": "Maple blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6416", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1432", + "durability": null, + "name": "Maple blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6417" + }, + { + "requirements": "{17,30}-{0,30}", + "shop_price": "1600", + "ge_buy_limit": "100", + "examine": "An offensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "2079", + "name": "Maple blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6418", + "bonuses": "0,0,24,0,0,0,0,0,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2079", + "durability": null, + "name": "Maple blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6419" + }, + { + "requirements": "{17,30}-{1,30}", + "shop_price": "952", + "ge_buy_limit": "100", + "examine": "A defensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "2407", + "name": "Maple blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6420", + "bonuses": "0,0,0,0,0,0,0,24,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2407", + "durability": null, + "name": "Maple blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6421" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "9", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6422" + }, + { + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6423" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6424" + }, + { + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6425" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "7", + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6426" + }, + { + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6427" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "16", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6428" + }, + { + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6429" + }, + { + "shop_price": "140", + "examine": "Used for small missile spells.", + "grand_exchange_price": "65", + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6430" + }, + { + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6431" + }, + { + "shop_price": "310", + "examine": "Used for medium missile spells.", + "grand_exchange_price": "399", + "durability": null, + "name": "Death rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6432" + }, + { + "durability": null, + "name": "Death rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6433" + }, + { + "shop_price": "378", + "examine": "Used for teleport spells.", + "grand_exchange_price": "277", + "durability": null, + "name": "Law rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6434" + }, + { + "durability": null, + "name": "Law rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6435" + }, + { + "shop_price": "17", + "examine": "Used for basic missile spells.", + "grand_exchange_price": "6", + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6436" + }, + { + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6437" + }, + { + "shop_price": "16", + "examine": "Used for Curse spells", + "grand_exchange_price": "6", + "durability": null, + "name": "Body rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6438" + }, + { + "durability": null, + "name": "Body rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6439" + }, + { + "examine": "A spadeful of refined coal.", + "durability": null, + "name": "Spadeful of coke", + "weight": "2", + "archery_ticket_price": "0", + "id": "6448" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A white rosebush seed.", + "durability": null, + "name": "White rose seed", + "tradeable": "false", + "destroy": "true", + "weight": "28.928", + "archery_ticket_price": "0", + "id": "6453" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A red rosebush seed.", + "durability": null, + "name": "Red rose seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6454" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pink rosebush seed.", + "durability": null, + "name": "Pink rose seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6455" + }, + { + "destroy_message": "You can get some more Burthorpe vine seeds from Berald in Taverly.", + "examine": "A grapevine seed.", + "durability": null, + "name": "Vine seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6456" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A delphinium seed.", + "durability": null, + "name": "Delphinium seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6457" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A snowdrop seed.", + "durability": null, + "name": "Snowdrop seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6460" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Shoot: A shoot that has been cut from a dying White Tree.Plant pot: A young White Tree sapling.Plant pot after watering: This shoot from a White Tree has been watered and will soon grow.", + "durability": null, + "name": "White tree shoot", + "archery_ticket_price": "0", + "id": "6461" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Shoot: A shoot that has been cut from a dying White Tree.Plant pot: A young White Tree sapling.Plant pot after watering: This shoot from a White Tree has been watered and will soon grow.", + "durability": null, + "name": "White tree shoot", + "archery_ticket_price": "0", + "id": "6462" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Shoot: A shoot that has been cut from a dying White Tree.Plant pot: A young White Tree sapling.Plant pot after watering: This shoot from a White Tree has been watered and will soon grow.", + "durability": null, + "name": "White tree shoot", + "archery_ticket_price": "0", + "id": "6463" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A young White Tree sapling", + "durability": null, + "name": "White tree sapling", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "6464" + }, + { + "destroy_message": "Another can be received from pickpocketing Dr. Fenkenstrain in the tower.", + "examine": "Unactivated: The Ring of charos.Activated: The power within this ring has been activated.", + "durability": null, + "name": "Ring of charos(a)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6465", + "equipment_slot": "12" + }, + { + "examine": "A rune essence chip that has been broken into shards.", + "durability": null, + "name": "Rune shards", + "archery_ticket_price": "0", + "id": "6466" + }, + { + "examine": "Crushed rune essence.", + "durability": null, + "name": "Rune dust", + "archery_ticket_price": "0", + "id": "6467" + }, + { + "shop_price": "25", + "examine": "Use this on plants to cure disease.", + "grand_exchange_price": "199", + "durability": null, + "name": "Plant cure", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6468" + }, + { + "examine": "Looks delicious.", + "durability": null, + "name": "White tree fruit", + "archery_ticket_price": "0", + "id": "6469" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "11500", + "durability": null, + "name": "Compost potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6470" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11500", + "durability": null, + "name": "Compost potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6471" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "6804", + "durability": null, + "name": "Compost potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6472" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6804", + "durability": null, + "name": "Compost potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6473" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "3338", + "durability": null, + "name": "Compost potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6474" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3338", + "durability": null, + "name": "Compost potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6475" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "1734", + "durability": null, + "name": "Compost potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6476" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1734", + "durability": null, + "name": "Compost potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6477" + }, + { + "destroy_message": "You can get another one from Queen Ellamaria", + "examine": "I can use this to move heavy objects. (or) An empty trolley.", + "durability": null, + "name": "Trolley", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6478" + }, + { + "destroy_message": "You can get another list from Queen Ellamaria in Varrock", + "examine": "A list of things that I must collect for Queen Ellamaria.", + "durability": null, + "name": "List", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6479" + }, + { + "requirements": "{4,60}", + "shop_price": "375", + "ge_buy_limit": "100", + "examine": "A razor sharp ring of obsidian.", + "durability": null, + "tokkul_price": "375", + "attack_speed": "4", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2614,2614,2614,2614", + "grand_exchange_price": "340", + "name": "Toktz-xil-ul", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6522", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,49" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A razor sharp sword of obsidian.", + "durability": null, + "tokkul_price": "60000", + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "5", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "30200", + "name": "Toktz-xil-ak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6523", + "bonuses": "47,38,-2,0,0,2,3,0,0,0,0,49,0,0,0" + }, + { + "requirements": "{1,60}", + "shop_price": "67500", + "ge_buy_limit": "10", + "examine": "A spiked shield of Obsidian.", + "durability": null, + "tokkul_price": "67500", + "weight": "3.6", + "absorb": "5,0,11", + "equipment_slot": "5", + "grand_exchange_price": "34700", + "name": "Toktz-ket-xil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6524", + "bonuses": "0,0,0,-12,-8,40,42,38,0,65,60,5,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "37500", + "ge_buy_limit": "10", + "examine": "A large knife of Obsidian.", + "durability": null, + "tokkul_price": "37500", + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "6", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "16900", + "name": "Toktz-xil-ek", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6525", + "bonuses": "16,48,0,0,0,0,0,0,0,0,0,39,0,0,0" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A staff of obsidian.", + "walk_anim": "1205", + "tokkul_price": "52500", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "26300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6526", + "stand_turn_anim": "1209", + "bonuses": "15,-1,55,15,0,10,15,5,15,0,0,55,5,0,0", + "requirements": "{0,60}-{6,60}", + "shop_price": "52500", + "durability": null, + "weight": "1", + "weapon_interface": "1", + "render_anim": "28", + "name": "Toktz-mej-tal" + }, + { + "requirements": "{0,60}", + "shop_price": "45000", + "ge_buy_limit": "10", + "examine": "A mace of obsidian.", + "durability": null, + "tokkul_price": "45000", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "10", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "22600", + "name": "Tzhaar-ket-em", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6527", + "bonuses": "-4,-4,62,0,0,0,0,0,0,0,0,56,0,0,0" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1663", + "examine": "A maul of obsidian.", + "walk_anim": "1663", + "tokkul_price": "75000", + "turn90ccw_anim": "1663", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1663", + "defence_anim": "1666", + "equipment_slot": "3", + "attack_anims": "2661,2661,2661,2661", + "grand_exchange_price": "31000", + "stand_anim": "1662", + "tradeable": "true", + "run_anim": "1664", + "archery_ticket_price": "0", + "id": "6528", + "stand_turn_anim": "823", + "bonuses": "0,0,80,-4,0,0,0,0,0,0,0,85,0,0,0", + "requirements": "{2,60}", + "shop_price": "75000", + "durability": null, + "weight": "3.6", + "weapon_interface": "10", + "render_anim": "27", + "attack_audios": "2520,0,0,0", + "name": "Tzhaar-ket-om" + }, + { + "examine": "It's a Token of some kind made from Obsidian.", + "durability": null, + "name": "Tokkul", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "6529" + }, + { + "durability": null, + "name": "Toktz-xil-ak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6535" + }, + { + "durability": null, + "name": "Toktz-ket-xil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6536" + }, + { + "durability": null, + "name": "Toktz-xil-ek", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6537" + }, + { + "durability": null, + "name": "Toktz-mej-tal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6538" + }, + { + "durability": null, + "name": "Tzhaar-ket-em", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6539" + }, + { + "durability": null, + "name": "Tzhaar-ket-om", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6540" + }, + { + "destroy_message": "You can get a replacement mouse toy by speaking to Bob, the Jagex cat.", + "examine": "An Advanced Combat Training Device.", + "durability": null, + "name": "Mouse toy", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6541", + "weapon_interface": "12", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You will not get a replacement for the present. Open it for your reward.", + "examine": "Thanks for all your help! Love, Bob & Neite.", + "durability": null, + "name": "Present", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6542" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6543" + }, + { + "destroy_message": "You can get another Amulet of Catspeak from the Sphinx in Sophanem.", + "examine": "It's an amulet of cat speak. It makes vague purring noises.", + "durability": null, + "name": "Catspeak amulet(e)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6544", + "equipment_slot": "2" + }, + { + "destroy_message": "You have completed the chores; you can safely destroy the list.", + "examine": "A list of chores that Bob gave you to do.", + "durability": null, + "name": "Chores", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6545" + }, + { + "destroy_message": "You found the recipe in Unferth's bookcase, which is in his Burthorpe house, you will be able to get a replacement.", + "examine": "It says on the back 'My favourite recipe.", + "durability": null, + "name": "Recipe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6546" + }, + { + "destroy_message": "You can get another Doctor's hat from the Apothecary in Varrock.", + "examine": "A mirror helps reflect light on the subject.", + "durability": null, + "name": "Doctors hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6547", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another Nurse's hat from the Apothecary in Varrock.", + "examine": "A nurse's hat, but does it have healing powers?", + "durability": null, + "name": "Nurse hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6548", + "equipment_slot": "0" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6549" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6550" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6551" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6552" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6553" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6554" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6555" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6556" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6557" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6558" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6559" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6560" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "368700", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6562", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mud battlestaff" + }, + { + "requirements": "{0,40}-{6,40}", + "ge_buy_limit": "10", + "shop_price": "40000", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "423100", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "true", + "name": "Mystic mud staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6563", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0" + }, + { + "examine": "A valuable ring.", + "grand_exchange_price": "6609743", + "durability": null, + "name": "Onyx ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6564" + }, + { + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "4501000", + "durability": null, + "name": "Onyx necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6565" + }, + { + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "9058124", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6566" + }, + { + "shop_price": "90000", + "ge_buy_limit": "100", + "examine": "A cape woven of obsidian plates.", + "durability": null, + "tokkul_price": "90000", + "weight": "1.8", + "equipment_slot": "1", + "lendable": "true", + "grand_exchange_price": "42000", + "name": "Obsidian cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6568", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "42000", + "durability": null, + "name": "Obsidian cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6569" + }, + { + "examine": "A cape of fire.", + "durability": null, + "name": "Fire cape", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6570", + "bonuses": "1,1,1,1,1,11,11,11,11,11,11,4,2,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "2700000", + "ge_buy_limit": "100", + "examine": "An uncut onyx.", + "grand_exchange_price": "10700000", + "tokkul_price": "300000", + "durability": null, + "name": "Uncut onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6571" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10700000", + "durability": null, + "name": "Uncut onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6572" + }, + { + "ge_buy_limit": "100", + "examine": "This looks valuable.", + "grand_exchange_price": "10700000", + "durability": null, + "name": "Onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6573" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10700000", + "durability": null, + "name": "Onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6574" + }, + { + "ge_buy_limit": "100", + "examine": "A valuable ring.", + "grand_exchange_price": "11900000", + "durability": null, + "name": "Onyx ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6575", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11900000", + "durability": null, + "name": "Onyx ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6576" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "4500000", + "durability": null, + "name": "Onyx necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6577", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4500000", + "durability": null, + "name": "Onyx necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6578" + }, + { + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "9058124", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6579" + }, + { + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6580" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "10900000", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6581", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10900000", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6582" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring.", + "grand_exchange_price": "803700", + "durability": null, + "name": "Ring of stone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6583", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "803700", + "durability": null, + "name": "Ring of stone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6584" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "A very powerful onyx amulet.", + "grand_exchange_price": "9200000", + "durability": null, + "name": "Amulet of fury", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6585", + "bonuses": "10,10,10,10,10,15,15,15,15,15,15,8,5,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9200000", + "durability": null, + "name": "Amulet of fury", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6586" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "360", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "1013", + "name": "White claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6587", + "bonuses": "10,14,-4,0,0,4,7,2,0,0,0,14,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1013", + "durability": null, + "name": "White claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6588" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "1248", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "1459", + "attack_audios": "2498,2498,2497,2498", + "name": "White battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6589", + "bonuses": "-2,20,15,0,0,0,0,0,0,-1,0,24,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1459", + "durability": null, + "name": "White battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6590" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "479", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6591", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "479", + "durability": null, + "name": "White dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6592" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "497", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6593", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "497", + "durability": null, + "name": "White dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6594" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "982", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6595", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "982", + "durability": null, + "name": "White dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6596" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "8422", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6597", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8422", + "durability": null, + "name": "White dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6598" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A white halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "1834", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6599", + "stand_turn_anim": "1209", + "bonuses": "19,25,0,-4,0,-1,2,3,0,0,0,20,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "1920", + "durability": null, + "weight": "3.1", + "weapon_interface": "15", + "render_anim": "28", + "name": "White halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1834", + "durability": null, + "name": "White halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6600" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "432", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "481", + "name": "White mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6601", + "bonuses": "8,-2,16,0,0,0,0,0,0,0,0,13,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "481", + "durability": null, + "name": "White mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6602" + }, + { + "requirements": "{0,10}-{5,10}", + "ge_buy_limit": "100", + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "650", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "true", + "name": "White magic staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6603", + "stand_turn_anim": "1209", + "bonuses": "2,-1,10,10,0,2,3,1,10,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "650", + "durability": null, + "name": "White magic staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6604" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "grand_exchange_price": "1187", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "6605", + "stand_turn_anim": "823", + "bonuses": "14,10,-2,0,0,0,2,1,0,0,0,12,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "624", + "durability": null, + "weight": "1.8", + "weapon_interface": "5", + "render_anim": "1381", + "name": "White sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1187", + "durability": null, + "name": "White sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6606" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "2060", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "6607", + "stand_turn_anim": "823", + "bonuses": "13,18,-2,0,0,0,3,2,0,0,0,16,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "960", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "name": "White longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2060", + "durability": null, + "name": "White longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6608" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "4029", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "6609", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,-4,0,0,0,0,0,-1,0,26,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "1920", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "White 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4029", + "durability": null, + "name": "White 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6610" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "1404", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "6611", + "stand_turn_anim": "823", + "bonuses": "4,19,-2,0,0,0,1,0,0,0,0,14,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "768", + "durability": null, + "weight": "1", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "White scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1404", + "durability": null, + "name": "White scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6612" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "980", + "ge_buy_limit": "100", + "examine": "I don't think it's intended for joinery.", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "weapon_interface": "10", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "1178", + "attack_audios": "2504,0,0,0", + "name": "White warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6613", + "bonuses": "-4,-4,22,-4,0,0,0,0,0,0,0,19,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1178", + "durability": null, + "name": "White warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6614" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1440", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6.8", + "absorb": "1,0,2", + "equipment_slot": "4", + "grand_exchange_price": "788", + "name": "White chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6615", + "bonuses": "0,0,0,-15,0,22,32,39,-3,24,10,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "788", + "durability": null, + "name": "White chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6616" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "3840", + "ge_buy_limit": "100", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "5837", + "name": "White platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6617", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5837", + "durability": null, + "name": "White platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6618" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "576", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "durability": null, + "weight": "1.3", + "equipment_slot": "10", + "grand_exchange_price": "1016", + "name": "White boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6619", + "bonuses": "0,0,0,-3,-1,7,8,9,0,0,7,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1016", + "durability": null, + "name": "White boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6620" + }, + { + "remove_head": "true", + "requirements": "{1,10}-{5,10}", + "shop_price": "576", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.9", + "equipment_slot": "0", + "grand_exchange_price": "853", + "name": "White med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6621", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,4,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "853", + "durability": null, + "name": "White med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6622" + }, + { + "remove_head": "true", + "requirements": "{1,10}-{5,10}", + "shop_price": "1056", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "2624", + "name": "White full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6623", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2624", + "durability": null, + "name": "White full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6624" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "Big, white and heavy looking.", + "durability": null, + "weight": "9", + "equipment_slot": "7", + "grand_exchange_price": "2115", + "name": "White platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6625", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2115", + "durability": null, + "name": "White platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6626" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "Big, white, and heavy looking.", + "durability": null, + "weight": "8.1", + "equipment_slot": "7", + "grand_exchange_price": "2000", + "name": "White plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6627", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2000", + "durability": null, + "name": "White plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6628" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "These will keep my hands warm!", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "2036", + "name": "White gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6629", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2036", + "durability": null, + "name": "White gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6630" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1152", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3.6", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "1360", + "name": "White sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6631", + "bonuses": "0,0,0,-6,-2,15,16,14,0,15,9,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1360", + "durability": null, + "name": "White sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6632" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1632", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "2390", + "name": "White kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6633", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2390", + "durability": null, + "name": "White kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6634" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A Temple Knight Communication Orb. Top Secret! / Use this to stay in touch with Korasi and Jessika. (A Void Dance version) / Tyr's commorb, given to him by Sir Tiffy. (Tyr's commorb)", + "durability": null, + "name": "Commorb", + "weight": "1", + "archery_ticket_price": "0", + "id": "6635" + }, + { + "examine": "Proof that I have defeated the evil mage Solus.", + "durability": null, + "name": "Solus's hat", + "archery_ticket_price": "0", + "id": "6636" + }, + { + "examine": "From a darker dimension.", + "durability": null, + "name": "Dark beast", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "6637" + }, + { + "examine": "A key to the nature of light itself. (Mourning's Ends Part II)", + "durability": null, + "name": "Colour wheel", + "archery_ticket_price": "0", + "id": "6638" + }, + { + "destroy_message": "Resetting the light maze will generate a new mirror.", + "examine": "A small hand mirror.", + "durability": null, + "name": "Hand mirror", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6639" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A yellow crystal.", + "durability": null, + "name": "Yellow crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6641" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A cyan crystal.", + "durability": null, + "name": "Cyan crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6643" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A blue crystal.", + "durability": null, + "name": "Blue crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6644" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A fractured crystal, one of the edges is clear.", + "durability": null, + "name": "Fractured crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6646" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A fractured crystal, one of the edges is clear.", + "durability": null, + "name": "Fractured crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6647" + }, + { + "destroy_message": "You can obtain another list from Thorgel.", + "examine": "It's a list of items I need to collect.", + "durability": null, + "name": "Item list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6648" + }, + { + "examine": "The journal of Nissyen Edern.", + "durability": null, + "name": "Edern's journal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6649" + }, + { + "examine": "A blackened crystal sample.", + "durability": null, + "name": "Blackened crystal", + "archery_ticket_price": "0", + "id": "6650" + }, + { + "examine": "A newly formed crystal / A warm energy radiates from this crystal.", + "durability": null, + "name": "Newly made crystal", + "archery_ticket_price": "0", + "id": "6651" + }, + { + "examine": "A newly formed crystal / A warm energy radiates from this crystal.", + "durability": null, + "name": "Newly made crystal", + "archery_ticket_price": "0", + "id": "6652" + }, + { + "destroy_message": "You can get another Crystal trinket from Arianwyn in Lletya.", + "examine": "A small Crystal trinket.", + "durability": null, + "name": "Crystal trinket", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6653" + }, + { + "remove_sleeves": "true", + "examine": "Examine what?", + "durability": null, + "name": "Camo top", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "6654", + "equipment_slot": "4" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo bottoms", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6655", + "equipment_slot": "7" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo helmet", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6656", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "Examine what?", + "durability": null, + "name": "Camo top", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "6657", + "equipment_slot": "4" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo bottoms", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6658", + "equipment_slot": "7" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo helmet", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6659", + "equipment_slot": "0" + }, + { + "shop_price": "60", + "examine": "The jar keeps shaking... I'm scared.", + "durability": null, + "name": "Fishing explosive", + "archery_ticket_price": "0", + "id": "6660" + }, + { + "examine": "An angry Ogre in a funny hat.", + "durability": null, + "name": "Mogre", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "6661" + }, + { + "examine": "This fishing rod seems to have been bitten in half.", + "durability": null, + "name": "Broken fishing rod", + "archery_ticket_price": "0", + "id": "6662" + }, + { + "examine": "It seems someone vacated this boot in a hurry.", + "durability": null, + "name": "Forlorn boot", + "archery_ticket_price": "0", + "id": "6663" + }, + { + "requirements": "{18,32}", + "shop_price": "60", + "examine": "The jar keeps shaking... I'm scared.", + "durability": null, + "name": "Fishing explosive", + "archery_ticket_price": "0", + "id": "6664" + }, + { + "examine": "Fishy, damp and smelly.", + "durability": null, + "name": "Mudskipper hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "6665", + "equipment_slot": "0" + }, + { + "examine": "Strangely uncomfortable flippers.", + "durability": null, + "name": "Flippers", + "weight": "2", + "archery_ticket_price": "0", + "id": "6666", + "bonuses": "-2,-2,-2,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "10000", + "examine": "An empty fishbowl.", + "grand_exchange_price": "431", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "6667" + }, + { + "examine": "A fishless fishbowl.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6668" + }, + { + "examine": "A fishless fishbowl with some seaweed.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6669" + }, + { + "examine": "A fishbowl with a Tiny Bluefish in it.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6670" + }, + { + "examine": "A fishbowl with a Tiny Greenfish in it.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6671" + }, + { + "examine": "A fishbowl with a Tiny Spinefish in it.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6672" + }, + { + "examine": "An empty fishbowl in a net.", + "durability": null, + "name": "Fishbowl and net", + "weight": "2", + "archery_ticket_price": "0", + "id": "6673" + }, + { + "shop_price": "10", + "examine": "A tiny net for grabbing tiny fish.", + "durability": null, + "name": "Tiny net", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6674" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.", + "durability": null, + "name": "An empty box", + "archery_ticket_price": "0", + "id": "6675" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Guam Leaf...", + "durability": null, + "name": "Guam in a box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6677" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Guam Leaf...", + "durability": null, + "name": "Guam in a box?", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6678" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Seaweed...", + "durability": null, + "name": "Seaweed in a box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6679" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Seaweed...", + "durability": null, + "name": "Seaweed in a box?", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6680" + }, + { + "ge_buy_limit": "100", + "examine": "One of the ingredients for making fish food.", + "grand_exchange_price": "1", + "durability": null, + "name": "Ground guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6681" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Ground guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6682" + }, + { + "ge_buy_limit": "100", + "examine": "One of the ingredients for making fish food.", + "grand_exchange_price": "14", + "durability": null, + "name": "Ground seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6683" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Ground seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6684" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "15300", + "durability": null, + "name": "Saradomin brew(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6685" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "15300", + "durability": null, + "name": "Saradomin brew(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6686" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "11400", + "durability": null, + "name": "Saradomin brew(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6687" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "11400", + "durability": null, + "name": "Saradomin brew(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6688" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "7566", + "durability": null, + "name": "Saradomin brew(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6689" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7566", + "durability": null, + "name": "Saradomin brew(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6690" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "3783", + "durability": null, + "name": "Saradomin brew(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6691" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3783", + "durability": null, + "name": "Saradomin brew(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6692" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a crushed bird's nest.", + "grand_exchange_price": "10500", + "durability": null, + "name": "Crushed nest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6693" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "10500", + "durability": null, + "name": "Crushed nest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6694" + }, + { + "examine": "\"A cold-blooded creature, partial to warmth.", + "durability": null, + "name": "Desert lizard", + "archery_ticket_price": "0", + "id": "6695" + }, + { + "requirements": "{22,18}", + "shop_price": "1", + "examine": "Contains ice-cold water.", + "durability": null, + "name": "Ice cooler", + "archery_ticket_price": "0", + "id": "6696" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "A pat of freshly churned butter.", + "grand_exchange_price": "405", + "durability": null, + "name": "Pat of butter", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "6697" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "405", + "durability": null, + "name": "Pat of butter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6698" + }, + { + "durability": null, + "name": "Burnt potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6700" + }, + { + "ge_buy_limit": "1000", + "examine": "It'd taste even better with some toppings.", + "grand_exchange_price": "326", + "durability": null, + "name": "Baked potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6701" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "326", + "durability": null, + "name": "Baked potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6702" + }, + { + "ge_buy_limit": "1000", + "examine": "A baked potato with butter.", + "grand_exchange_price": "745", + "durability": null, + "name": "Potato with butter", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6703" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "745", + "durability": null, + "name": "Potato with butter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6704" + }, + { + "shop_price": "350", + "ge_buy_limit": "10000", + "examine": "A baked potato with butter and cheese.", + "grand_exchange_price": "604", + "durability": null, + "name": "Potato with cheese", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6705" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "604", + "durability": null, + "name": "Potato with cheese", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6706" + }, + { + "examine": "An amulet of Camel-speak. It makes vague braying noises.", + "durability": null, + "name": "Camulet", + "archery_ticket_price": "0", + "id": "6707", + "equipment_slot": "2" + }, + { + "shop_price": "200", + "examine": "Especially good against diseased arachnids.", + "durability": null, + "name": "Slayer gloves", + "archery_ticket_price": "0", + "id": "6708", + "bonuses": "0,0,0,0,0,4,5,3,0,0,1,0,0,0,0" + }, + { + "examine": "A bunch of legs, eyes and teeth.", + "durability": null, + "name": "Fever spider", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "6709" + }, + { + "examine": "A blindweed seed - plant in a Blindweed patch.", + "durability": null, + "name": "Blindweed seed", + "archery_ticket_price": "0", + "id": "6710" + }, + { + "examine": "An inedible, foul smelling herb.", + "durability": null, + "name": "Blindweed", + "archery_ticket_price": "0", + "id": "6711" + }, + { + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6712" + }, + { + "examine": "A heavy metal wrench.", + "durability": null, + "name": "Wrench", + "archery_ticket_price": "0", + "id": "6713" + }, + { + "examine": "A shining paragon of wrenchly virtue.", + "durability": null, + "name": "Holy wrench", + "archery_ticket_price": "0", + "id": "6714" + }, + { + "examine": "They look at you balefully. 'Feed us...", + "durability": null, + "name": "Sluglings", + "archery_ticket_price": "0", + "id": "6715" + }, + { + "examine": "A sinister looking squid.", + "durability": null, + "name": "Karamthulhu", + "archery_ticket_price": "0", + "id": "6716" + }, + { + "examine": "A sinister looking squid.", + "durability": null, + "name": "Karamthulhu", + "archery_ticket_price": "0", + "id": "6717" + }, + { + "examine": "A diseased deceased Fever Spider. Handle with care.", + "durability": null, + "name": "Fever spider body", + "archery_ticket_price": "0", + "id": "6718" + }, + { + "examine": "Sorry, I mean a bucket of 'rum'.", + "durability": null, + "name": "Unsanitary swill", + "archery_ticket_price": "0", + "id": "6719" + }, + { + "requirements": "{18,42}", + "shop_price": "200", + "examine": "Especially good against diseased arachnids.", + "durability": null, + "name": "Slayer gloves", + "archery_ticket_price": "0", + "id": "6720", + "bonuses": "0,0,0,0,0,4,5,3,0,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "A decent enough weapon gone rusty.", + "attack_audios": "2500,0,2517,0", + "durability": null, + "name": "Rusty scimitar", + "weight": "2", + "archery_ticket_price": "0", + "id": "6721" + }, + { + "examine": "Alas...I hardly knew him.", + "durability": null, + "name": "Zombie head", + "archery_ticket_price": "0", + "id": "6722" + }, + { + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6723" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "100", + "examine": "An ancient Fremennik bow that was once used to battle the Moon Clan.", + "has_special": "true", + "durability": null, + "rare_item": "true", + "weight": "1", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "12200", + "name": "Seercull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6724", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12200", + "durability": null, + "name": "Seercull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6725" + }, + { + "durability": null, + "name": "Mud battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6726" + }, + { + "durability": null, + "name": "Mystic mud staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6727" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "6728" + }, + { + "ge_buy_limit": "10000", + "examine": "These would feed a dogfish for months!", + "grand_exchange_price": "9616", + "durability": null, + "name": "Dagannoth bones", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "6729" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "9616", + "durability": null, + "name": "Dagannoth bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6730" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A mysterious ring that can fill the wearer with magical power...", + "grand_exchange_price": "478800", + "rare_item": "true", + "durability": null, + "name": "Seers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6731", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "478800", + "durability": null, + "name": "Seers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6732" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A fabled ring that improves the wearer's skill with a bow...", + "grand_exchange_price": "1400000", + "rare_item": "true", + "durability": null, + "name": "Archers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6733", + "bonuses": "0,0,0,0,4,0,0,0,0,4,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Archers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6734" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A legendary ring once worn by Fremennik warriors.", + "grand_exchange_price": "178100", + "rare_item": "true", + "durability": null, + "name": "Warrior ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6735", + "bonuses": "0,4,0,0,0,0,4,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "178100", + "durability": null, + "name": "Warrior ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6736" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A ring reputed to bring out a berserk fury in its wearer.", + "grand_exchange_price": "2700000", + "rare_item": "true", + "durability": null, + "name": "Berserker ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6737", + "bonuses": "0,0,0,0,0,0,0,4,0,0,0,4,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "2700000", + "durability": null, + "name": "Berserker ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6738" + }, + { + "requirements": "{0,60}", + "ge_buy_limit": "10", + "examine": "A very powerful axe.", + "has_special": "true", + "rare_item": "true", + "durability": null, + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "813100", + "attack_audios": "2498,2498,2497,2498", + "name": "Dragon axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6739", + "bonuses": "-2,38,32,0,0,0,1,0,0,0,0,42,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "813100", + "durability": null, + "name": "Dragon axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6740" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "6741", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6742" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6744" + }, + { + "examine": "The magical sword 'Silverlight'. / The magical sword 'Silverlight', stained black with mushroom ink. (during Shadow of the Storm)", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "name": "Silverlight", + "archery_ticket_price": "0", + "id": "6745", + "bonuses": "9,14,-2,0,0,0,3,2,1,0,0,12,0,0,0" + }, + { + "examine": "The magical sword Silverlight, enhanced with the blood of Agrith-Naar.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "name": "Darklight", + "archery_ticket_price": "0", + "id": "6746", + "bonuses": "10,16,-2,0,0,0,3,2,2,0,0,13,0,0,0" + }, + { + "examine": "Used to make the sigil of the demon Agrith-Naar.", + "durability": null, + "name": "Demonic sigil mould", + "archery_ticket_price": "0", + "id": "6747" + }, + { + "examine": "A sigil used for the summoning of the demon Agrith-Naar.", + "durability": null, + "name": "Demonic sigil", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6748" + }, + { + "examine": "Will this book help in summoning Agrith-Naar?", + "durability": null, + "name": "Demonic tome", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6749" + }, + { + "remove_sleeves": "true", + "examine": "A desert shirt stained black with mushroom ink.", + "durability": null, + "name": "Black desert shirt", + "archery_ticket_price": "0", + "id": "6750", + "equipment_slot": "4" + }, + { + "examine": "A desert robe stained black with mushroom ink.", + "durability": null, + "name": "Black desert robe", + "archery_ticket_price": "0", + "id": "6752", + "equipment_slot": "7" + }, + { + "destroy_message": "Hopefully Erin has a copy!", + "examine": "It changes temperature as I walk. (Meeting History)", + "durability": null, + "name": "Enchanted key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6754", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Guthix Mjolnir.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "You can reclaim this item from the place you found it.", + "grand_exchange_price": "2875", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6760", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0", + "shop_price": "250", + "durability": null, + "weight": "2", + "weapon_interface": "3", + "render_anim": "28", + "name": "Guthix mjolnir" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2875", + "durability": null, + "name": "Guthix mjolnir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6761" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Saradomin Mjolnir.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "You can reclaim this item from the place you found it.", + "grand_exchange_price": "17200", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6762", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0", + "shop_price": "250", + "durability": null, + "weight": "2", + "weapon_interface": "3", + "render_anim": "28", + "name": "Saradomin mjolnir" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17200", + "durability": null, + "name": "Saradomin mjolnir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6763" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Zamorak mjolnir.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "You can reclaim this item from the place you found it.", + "grand_exchange_price": "4115", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6764", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0", + "durability": null, + "weight": "2", + "weapon_interface": "3", + "render_anim": "28", + "name": "Zamorak mjolnir" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4115", + "durability": null, + "name": "Zamorak mjolnir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6765" + }, + { + "examine": "Antipoison for Pox.", + "durability": null, + "name": "Cat antipoison", + "archery_ticket_price": "0", + "id": "6766" + }, + { + "examine": "A little more smelly than usual.", + "durability": null, + "name": "Poisoned cheese", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "6768" + }, + { + "destroy_message": "You can obtain another sheet of music by talking to the snakecharmer of Pollnivneach.", + "examine": "Charming.", + "durability": null, + "name": "Music scroll", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6769" + }, + { + "destroy_message": "You can obtain another set of directions to the party by talking to Jimmy Dazzler.", + "examine": "Jimmy Dazzler's directions.", + "durability": null, + "name": "Directions", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6770" + }, + { + "examine": "Contains garden weeds.", + "durability": null, + "name": "Pot of weeds", + "archery_ticket_price": "0", + "id": "6771" + }, + { + "examine": "Contains slowly burning garden weeds.", + "durability": null, + "name": "Smouldering pot", + "archery_ticket_price": "0", + "id": "6772" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole for putting rats on.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6773", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with one rat on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6774", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with two rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6775", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with three rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6776", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with four rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6777", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with five rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6778", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with six rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6779", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "examine": "Menaphite thug.", + "durability": null, + "name": "Menaphite thug", + "archery_ticket_price": "0", + "id": "6780" + }, + { + "remove_sleeves": "true", + "examine": "This looks quite old.", + "durability": null, + "name": "Robe of elidinis", + "archery_ticket_price": "0", + "id": "6786", + "equipment_slot": "4" + }, + { + "examine": "This looks quite old.", + "durability": null, + "name": "Robe of elidinis", + "archery_ticket_price": "0", + "id": "6787", + "equipment_slot": "7" + }, + { + "examine": "This robe is too torn to wear.", + "durability": null, + "name": "Torn robe", + "weight": "1", + "archery_ticket_price": "0", + "id": "6788" + }, + { + "examine": "This robe is too torn to wear.", + "durability": null, + "name": "Torn robe", + "weight": "1", + "archery_ticket_price": "0", + "id": "6789" + }, + { + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "id": "6790", + "equipment_slot": "10" + }, + { + "examine": "Awusah's Sole.", + "durability": null, + "name": "Sole", + "weight": "1", + "archery_ticket_price": "0", + "id": "6791" + }, + { + "examine": "An ancient key from the shrine in Nardah. (Spirits of the Elid)", + "durability": null, + "name": "Ancestral key", + "archery_ticket_price": "0", + "id": "6792" + }, + { + "examine": "The Ballad of Jaresh.", + "durability": null, + "name": "Ballad", + "archery_ticket_price": "0", + "id": "6793" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A tasty treat from Nardah - better eat this before it melts.", + "grand_exchange_price": "210", + "durability": null, + "name": "Choc-ice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6794" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "210", + "durability": null, + "name": "Choc-ice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6795" + }, + { + "bankable": "false", + "examine": "Wonder what happens if I rub it...", + "durability": null, + "name": "Lamp", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6796" + }, + { + "shop_price": "8", + "examine": "See article", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can", + "archery_ticket_price": "0", + "id": "6797" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6798" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6799" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6800" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6801" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6802" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6803" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6804" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6805" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6806" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6807" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6808" + }, + { + "requirements": "{1,50}-{2,50}", + "ge_buy_limit": "10", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "15", + "absorb": "2,0,5", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "39400", + "name": "Granite legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6809", + "bonuses": "0,0,0,-31,-18,43,45,41,-4,68,20,0,0,0,0" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "6810" + }, + { + "examine": "A very dangerous pile of animated Wyvern bones.", + "durability": null, + "name": "Skeletal wyvern", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "6811" + }, + { + "ge_buy_limit": "1000", + "examine": "Bones of a huge flying creature.", + "grand_exchange_price": "4845", + "durability": null, + "name": "Wyvern bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6812" + }, + { + "durability": null, + "name": "Granite legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6813" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "This would make warm clothing.", + "grand_exchange_price": "90", + "durability": null, + "name": "Fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6814" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "90", + "durability": null, + "name": "Fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6815" + }, + { + "durability": null, + "name": "Wyvern bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6816" + }, + { + "turn90cw_anim": "7044", + "examine": "A slender two-handed sword.", + "walk_anim": "7046", + "durability": null, + "destroy": "true", + "weight": "3", + "turn90ccw_anim": "7043", + "two_handed": "true", + "turn180_anim": "7045", + "render_anim": "124", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "7047", + "name": "Slender blade", + "tradeable": "false", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "6817", + "stand_turn_anim": "7040" + }, + { + "turn90cw_anim": "1207", + "examine": "A sharp sword that can also fire arrows.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "3", + "turn90ccw_anim": "1208", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can make a replacement.", + "stand_anim": "813", + "name": "Bow-sword", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6818", + "stand_turn_anim": "1209" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "25000", + "examine": "A large pouch used for storing essence.", + "durability": null, + "name": "Large pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "6819" + }, + { + "destroy_message": "I can get another from the assassin beside the winch that leads down into Senntisten temple.", + "examine": "It seems to have pieces missing. After Temple at Senntisten quest: The assassin's plunder from the church on Entrana.", + "durability": null, + "name": "Relic", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6820" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This looks valuable.", + "durability": null, + "name": "Orb", + "archery_ticket_price": "0", + "id": "6821" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6822" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6823" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6824" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6825" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6826" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6827" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6828" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6829" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6830" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6831" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6832" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6833" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6834" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6835" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6836" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6837" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6838" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6839" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6840" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6841" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6842" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6843" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6844" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6845" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6846" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6847" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6848" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6849" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6850" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6851" + }, + { + "examine": "A box for storing completed puppets.", + "durability": null, + "name": "Puppet box", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6852" + }, + { + "examine": "A box for storing painted baubles.", + "durability": null, + "name": "Bauble box", + "archery_ticket_price": "0", + "id": "6853" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box for storing completed puppets.", + "durability": null, + "name": "Puppet box", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6854" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box for storing painted baubles.", + "durability": null, + "name": "Bauble box", + "archery_ticket_price": "0", + "id": "6855" + }, + { + "destroy_message": "You can obtain another hat from Diango in the Draynor Market.", + "examine": "A woolly bobble hat.", + "durability": null, + "name": "Bobble hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6856", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A woolly scarf.", + "durability": null, + "name": "Bobble scarf", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6857", + "equipment_slot": "2" + }, + { + "destroy_message": "You can obtain another hat from Diango in the Draynor Market.", + "shop_price": "160", + "examine": "A woolly Jester hat.", + "durability": null, + "name": "Jester hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6858", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another Jester scarf from Diango.", + "examine": "A woolly jester scarf.", + "durability": null, + "name": "Jester scarf", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6859", + "equipment_slot": "2" + }, + { + "destroy_message": "You may get another from Diango in Draynor Village.", + "examine": "A woolly triple bobble jester hat.", + "durability": null, + "name": "Tri-jester hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6860", + "equipment_slot": "0" + }, + { + "destroy_message": "You can obtain another jester scarf from Diango in the Draynor Market.", + "examine": "A woolly jester scarf.", + "durability": null, + "name": "Tri-jester scarf", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6861", + "equipment_slot": "2" + }, + { + "destroy_message": "You can obtain another hat from Diango in the Draynor Market.", + "examine": "A woolly tobogganing hat.", + "durability": null, + "name": "Woolly hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6862", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A woolly tobogganing scarf.", + "durability": null, + "name": "Woolly scarf", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6863", + "equipment_slot": "2" + }, + { + "examine": "The controlling part of a marionette.", + "durability": null, + "name": "Marionette handle", + "archery_ticket_price": "0", + "id": "6864", + "equipment_slot": "3" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6865" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6866" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6867" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6868" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6869" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6870" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6871" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6872" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6873" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6874" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6875" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6876" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6877" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6878" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6879" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6880" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6881" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6882" + }, + { + "examine": "A tasty fruit.", + "durability": null, + "name": "Peach", + "archery_ticket_price": "0", + "id": "6883" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A magic training arena progress hat", + "durability": null, + "name": "Progress hat", + "archery_ticket_price": "0", + "id": "6885", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A magic training arena progress hat", + "durability": null, + "name": "Progress hat", + "archery_ticket_price": "0", + "id": "6886", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A magic training arena progress hat", + "durability": null, + "name": "Progress hat", + "archery_ticket_price": "0", + "id": "6887", + "equipment_slot": "0" + }, + { + "bankable": "false", + "examine": "A guardian of the arena.", + "durability": null, + "name": "Guardian statue", + "archery_ticket_price": "0", + "id": "6888" + }, + { + "requirements": "{6,60}", + "ge_buy_limit": "10", + "examine": "The magical book of the Mage.", + "grand_exchange_price": "3800000", + "durability": null, + "name": "Mage's book", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6889", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3800000", + "durability": null, + "name": "Mage's book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6890" + }, + { + "shop_price": "200", + "examine": "A book about the Training Arena.", + "durability": null, + "name": "Arena book", + "weight": "1", + "archery_ticket_price": "0", + "id": "6891" + }, + { + "bankable": "false", + "shop_price": "6", + "examine": "Comfortable leather boots.", + "grand_exchange_price": "189", + "durability": null, + "name": "Leather boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "6893", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0" + }, + { + "bankable": "false", + "examine": "A large metal shield.", + "grand_exchange_price": "3084", + "durability": null, + "name": "Adamant kiteshield", + "tradeable": "true", + "weight": "5.8", + "archery_ticket_price": "0", + "id": "6894", + "absorb": "3,0,6", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "bankable": "false", + "examine": "A medium sized helmet.", + "grand_exchange_price": "1049", + "durability": null, + "name": "Adamant med helm", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6895", + "absorb": "1,0,2", + "bonuses": "0,0,0,-3,-1,14,15,13,-1,14,6,0,0,0,0" + }, + { + "bankable": "false", + "shop_price": "350", + "examine": "This looks valuable.", + "grand_exchange_price": "644", + "durability": null, + "name": "Emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6896" + }, + { + "bankable": "false", + "shop_price": "32000", + "examine": "A razor sharp longsword", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "lendable": "true", + "grand_exchange_price": "18938", + "attack_audios": "2500,2500,2517,2500", + "name": "Rune longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6897", + "bonuses": "38,47,-2,0,0,0,3,2,0,0,0,49,0,0,0" + }, + { + "bankable": "false", + "examine": "A green cylinder", + "durability": null, + "name": "Cylinder", + "archery_ticket_price": "0", + "id": "6898" + }, + { + "bankable": "false", + "examine": "A yellow cube", + "durability": null, + "name": "Cube", + "archery_ticket_price": "0", + "id": "6899" + }, + { + "bankable": "false", + "examine": "A blue icosahedron.", + "durability": null, + "name": "Icosahedron", + "archery_ticket_price": "0", + "id": "6900" + }, + { + "bankable": "false", + "examine": "A red pentamid.", + "durability": null, + "name": "Pentamid", + "archery_ticket_price": "0", + "id": "6901" + }, + { + "bankable": "false", + "examine": "This looks valuable.", + "durability": null, + "name": "Orb", + "archery_ticket_price": "0", + "id": "6902" + }, + { + "bankable": "false", + "examine": "This looks valuable.", + "durability": null, + "name": "Dragonstone", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "6903" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6904" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6905" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6906" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6907" + }, + { + "requirements": "{6,45}", + "shop_price": "303030030", + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A beginner level wand", + "walk_anim": "1146", + "durability": null, + "weight": "0.2", + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "render_anim": "1426", + "equipment_slot": "3", + "grand_exchange_price": "11500", + "stand_anim": "809", + "name": "Beginner wand", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6908", + "stand_turn_anim": "823", + "bonuses": "0,0,0,5,0,0,0,0,5,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "11500", + "durability": null, + "name": "Beginner wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6909" + }, + { + "requirements": "{6,50}", + "ge_buy_limit": "10", + "shop_price": "606060060", + "turn90cw_anim": "821", + "examine": "An apprentice level wand.", + "walk_anim": "1146", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "defence_anim": "420", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "82000", + "stand_anim": "809", + "tradeable": "true", + "name": "Apprentice wand", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6910", + "stand_turn_anim": "823", + "bonuses": "0,0,0,10,0,0,0,0,10,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "82000", + "durability": null, + "name": "Apprentice wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6911" + }, + { + "requirements": "{6,55}", + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A teacher level wand.", + "walk_anim": "1146", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "render_anim": "1426", + "equipment_slot": "3", + "grand_exchange_price": "944100", + "stand_anim": "809", + "name": "Teacher wand", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6912", + "stand_turn_anim": "823", + "bonuses": "0,0,0,15,0,0,0,0,15,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "944100", + "durability": null, + "name": "Teacher wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6913" + }, + { + "requirements": "{6,60}", + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A master level wand.", + "walk_anim": "1146", + "durability": null, + "weight": "0.1", + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "defence_anim": "420", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "1700000", + "stand_anim": "8980", + "tradeable": "true", + "name": "Master wand", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6914", + "stand_turn_anim": "823", + "bonuses": "0,0,0,20,0,0,0,0,20,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Master wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6915" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical robes.", + "durability": null, + "weight": "2.2", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "3300000", + "name": "Infinity top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6916", + "bonuses": "0,0,0,22,0,0,0,0,22,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3300000", + "durability": null, + "name": "Infinity top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6917" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "A mystic hat.", + "durability": null, + "weight": "0.4", + "absorb": "1,0,0", + "equipment_slot": "0", + "grand_exchange_price": "1800000", + "name": "Infinity hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "6918", + "bonuses": "0,0,0,6,0,0,0,0,6,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1800000", + "durability": null, + "name": "Infinity hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6919" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical boots.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "10", + "grand_exchange_price": "1200000", + "name": "Infinity boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6920", + "bonuses": "0,0,0,5,0,0,0,0,5,0,5,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Infinity boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6921" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical gloves.", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Infinity gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6922", + "bonuses": "0,0,0,5,0,0,0,0,5,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Infinity gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6923" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical robes.", + "durability": null, + "weight": "1.8", + "absorb": "2,1,0", + "equipment_slot": "7", + "grand_exchange_price": "2500000", + "name": "Infinity bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6924", + "bonuses": "0,0,0,17,0,0,0,0,17,0,17,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "2500000", + "durability": null, + "name": "Infinity bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6925" + }, + { + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "983", + "durability": null, + "name": "Bones to peaches", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6926" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A severed hand covered with sand.", + "durability": null, + "name": "Sandy hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6945" + }, + { + "destroy_message": "Speak to the Guard Captain in Yanille to get another beer soaked hand.", + "examine": "A severed hand dripping with beer.", + "durability": null, + "name": "Beer-soaked hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6946" + }, + { + "destroy_message": "Speak to Bert to replace this Rota.", + "examine": "A copy of a work rota.", + "durability": null, + "name": "Bert's rota", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6947" + }, + { + "destroy_message": "Search Sandy's office in Brimhaven for another Rota.", + "examine": "An original work rota.", + "durability": null, + "name": "Sandy's rota", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6948" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Maybe I should read this...", + "durability": null, + "name": "A magic scroll", + "archery_ticket_price": "0", + "id": "6949" + }, + { + "destroy_message": "Speak to Zavistic Rarve to replace your magical orb.", + "examine": "An ordinary looking scrying orb.", + "durability": null, + "name": "Magical orb", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6950" + }, + { + "destroy_message": "Speak to Zavistic Rarve to replace your magical orb.", + "examine": "This magical scrying orb pulsates as it stores information.", + "durability": null, + "name": "Magical orb (a)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6951" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle of truth serum.", + "examine": "Fluid sloshes innocently in this vial.", + "durability": null, + "name": "Truth serum", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6952" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle.", + "examine": "A bottle of water.", + "durability": null, + "name": "Bottled water", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6953" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle to make some more red berry juice.", + "examine": "Redberry juice sloshes around in this vial, waiting for white berries to be added.", + "durability": null, + "name": "Redberry juice", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6954" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to make more pink dye.", + "shop_price": "20", + "examine": "A vial of pink dye.", + "durability": null, + "name": "Pink dye", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6955" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle to make the lens again.", + "examine": "This lens has a pinkish tinge to it.", + "durability": null, + "name": "Rose-tinted lens", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6956", + "equipment_slot": "3" + }, + { + "destroy_message": "Speak to Mazion near the sandpit on Entrana to find the Wizard Head again.", + "examine": "A decapitated, sand-covered head.", + "durability": null, + "name": "Wizard's head", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6957" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A handful of sand from Sandy's pocket.", + "durability": null, + "name": "Sand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6958" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Use pink dye on a cape and this is what you get!", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "1", + "grand_exchange_price": "919", + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6959", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "919", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6960" + }, + { + "examine": "A freshly baked baguette.", + "durability": null, + "name": "Baguette", + "archery_ticket_price": "0", + "id": "6961" + }, + { + "ge_buy_limit": "1000", + "examine": "A freshly made triangle sandwich.", + "grand_exchange_price": "110", + "durability": null, + "name": "Triangle sandwich", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6962" + }, + { + "examine": "A freshly made roll.", + "durability": null, + "name": "Roll", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6963" + }, + { + "bankable": "false", + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "archery_ticket_price": "0", + "id": "6964" + }, + { + "examine": "A freshly made square sandwich.", + "durability": null, + "name": "Square sandwich", + "archery_ticket_price": "0", + "id": "6965" + }, + { + "lendable": "true", + "examine": "Makes the wearer pretty intimidating.", + "grand_exchange_price": "61200", + "durability": null, + "name": "Dragon med helm", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "6967", + "absorb": "2,0,4", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "durability": null, + "name": "Triangle sandwich", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6968" + }, + { + "examine": "I'd better be careful eating this.", + "grand_exchange_price": "694", + "durability": null, + "name": "Shark", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6969" + }, + { + "examine": "It's a solid gold pyramid!", + "durability": null, + "name": "Pyramid top", + "weight": "11", + "archery_ticket_price": "0", + "id": "6970" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "4", + "durability": null, + "name": "Sandstone (1kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6971" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4", + "durability": null, + "name": "Sandstone (1kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6972" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "27", + "durability": null, + "name": "Sandstone (2kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6973" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27", + "durability": null, + "name": "Sandstone (2kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6974" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "30", + "durability": null, + "name": "Sandstone (5kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6975" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Sandstone (5kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6976" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "120", + "durability": null, + "name": "Sandstone (10kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6977" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "120", + "durability": null, + "name": "Sandstone (10kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6978" + }, + { + "ge_buy_limit": "10000", + "examine": "See article", + "grand_exchange_price": "304", + "durability": null, + "name": "Granite (500g)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6979" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "304", + "durability": null, + "name": "Granite (500g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6980" + }, + { + "ge_buy_limit": "10000", + "examine": "See article", + "grand_exchange_price": "845", + "durability": null, + "name": "Granite (2kg)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6981" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "845", + "durability": null, + "name": "Granite (2kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6982" + }, + { + "ge_buy_limit": "10000", + "examine": "See article", + "grand_exchange_price": "2153", + "durability": null, + "name": "Granite (5kg)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6983", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2153", + "durability": null, + "name": "Granite (5kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6984" + }, + { + "destroy_message": "You can make another 20 kg block by giving enough stone to Lazim.", + "examine": "A huge twenty-kilo block of sandstone.", + "durability": null, + "name": "Sandstone (20kg)", + "destroy": "true", + "weight": "20", + "archery_ticket_price": "0", + "id": "6985" + }, + { + "destroy_message": "You can make another 32 kg sandstone block by giving enough stone to Lazim.", + "examine": "A huge thirty-two-kilo block of sandstone.", + "durability": null, + "name": "Sandstone (32kg)", + "destroy": "true", + "weight": "32", + "archery_ticket_price": "0", + "id": "6986" + }, + { + "destroy_message": "You can make another statue body by giving Lazim 20 kg of stone and then crafting it.", + "examine": "The body of a sandstone statue.", + "durability": null, + "name": "Sandstone body", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6987" + }, + { + "destroy_message": "You can make another statue base by giving Lazim 32 kg of stone and then crafting it.", + "examine": "The base and legs of a sandstone statue.", + "durability": null, + "name": "Sandstone base", + "destroy": "true", + "weight": "32", + "archery_ticket_price": "0", + "id": "6988" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of a Z.", + "durability": null, + "name": "Z sigil", + "archery_ticket_price": "0", + "id": "6993" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of an M.", + "durability": null, + "name": "M sigil", + "archery_ticket_price": "0", + "id": "6994" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of an R.", + "durability": null, + "name": "R sigil", + "archery_ticket_price": "0", + "id": "6995" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of a K.", + "durability": null, + "name": "K sigil", + "archery_ticket_price": "0", + "id": "6996" + }, + { + "destroy_message": "You can get the statue's left arm back from Lazim.", + "examine": "The left arm of a large stone statue.", + "durability": null, + "name": "Stone left arm", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "6997" + }, + { + "destroy_message": "You can get the statue's right arm back from Lazim.", + "examine": "The right arm of a large stone statue.", + "durability": null, + "name": "Stone right arm", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "6998" + }, + { + "destroy_message": "You can get the statue's left leg back from Lazim.", + "examine": "The left leg of a large stone statue.", + "durability": null, + "name": "Stone left leg", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "6999" + }, + { + "destroy_message": "You can get the statue's right leg back from Lazim.", + "examine": "The right leg of a large stone statue.", + "durability": null, + "name": "Stone right leg", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "7000" + }, + { + "destroy_message": "You can make another positive mould by using soft clay on the pedestal in Enakhra's temple.", + "examine": "A positive clay mould of a camel's head.", + "durability": null, + "name": "Camel mould (p)", + "tradeable": "false", + "destroy": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7001" + }, + { + "remove_head": "true", + "examine": "Blend in in the desert.", + "durability": null, + "name": "Camel mask", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7003", + "equipment_slot": "0" + }, + { + "shop_price": "14", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "33", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7004", + "equipment_slot": "3" + }, + { + "requirements": "{18,33}-{11,33}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A lantern to aid attacking Harpie bugs.", + "grand_exchange_price": "466", + "durability": null, + "name": "Unlit bug lantern", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "7051", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "466", + "durability": null, + "name": "Unlit bug lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7052" + }, + { + "requirements": "{18,33}", + "shop_price": "130", + "examine": "A lantern to aid attacking Harpie bugs.", + "durability": null, + "name": "Lit bug lantern", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "7053", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with chilli con carne", + "grand_exchange_price": "415", + "durability": null, + "name": "Chilli potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7054" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "415", + "durability": null, + "name": "Chilli potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7055" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with egg and tomato.", + "grand_exchange_price": "441", + "durability": null, + "name": "Egg potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7056" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "441", + "durability": null, + "name": "Egg potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7057" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with mushroom and onions.", + "grand_exchange_price": "1165", + "durability": null, + "name": "Mushroom potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7058" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1165", + "durability": null, + "name": "Mushroom potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7059" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with tuna and sweetcorn.", + "grand_exchange_price": "2134", + "durability": null, + "name": "Tuna potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7060" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2134", + "durability": null, + "name": "Tuna potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7061" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of meat in chilli-con-carne sauce.", + "grand_exchange_price": "215", + "durability": null, + "name": "Chilli con carne", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7062" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "215", + "durability": null, + "name": "Chilli con carne", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7063" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of scrambled eggs and tomato", + "grand_exchange_price": "126", + "durability": null, + "name": "Egg and tomato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7064" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "126", + "durability": null, + "name": "Egg and tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7065" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of fried mushroom and onions.", + "grand_exchange_price": "368", + "durability": null, + "name": "Mushroom & onion", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7066" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "368", + "durability": null, + "name": "Mushroom & onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7067" + }, + { + "ge_buy_limit": "10000", + "examine": "A bowl of cooked tuna and sweetcorn.", + "grand_exchange_price": "514", + "durability": null, + "name": "Tuna and corn", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7068" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "514", + "durability": null, + "name": "Tuna and corn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7069" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of finely minced meat.", + "grand_exchange_price": "22", + "durability": null, + "name": "Minced meat", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7070" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "22", + "durability": null, + "name": "Minced meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7071" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of spicy sauce.", + "grand_exchange_price": "70", + "durability": null, + "name": "Spicy sauce", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7072" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "70", + "durability": null, + "name": "Spicy sauce", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7073" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of chopped garlic.", + "grand_exchange_price": "39", + "durability": null, + "name": "Chopped garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7074" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "39", + "durability": null, + "name": "Chopped garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7075" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of uncooked egg.", + "grand_exchange_price": "34", + "durability": null, + "name": "Uncooked egg", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7076" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "34", + "durability": null, + "name": "Uncooked egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7077" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of scrambled egg.", + "grand_exchange_price": "24", + "durability": null, + "name": "Scrambled egg", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7078" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "24", + "durability": null, + "name": "Scrambled egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7079" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of sliced Bittercap mushrooms.", + "grand_exchange_price": "149", + "durability": null, + "name": "Sliced mushrooms", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7080" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "149", + "durability": null, + "name": "Sliced mushrooms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7081" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of fried Bittercap mushrooms.", + "grand_exchange_price": "189", + "durability": null, + "name": "Fried mushrooms", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7082" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "189", + "durability": null, + "name": "Fried mushrooms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7083" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of sliced, fried onions.", + "grand_exchange_price": "40", + "durability": null, + "name": "Fried onions", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7084" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "40", + "durability": null, + "name": "Fried onions", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7085" + }, + { + "ge_buy_limit": "10000", + "examine": "A bowl of finely chopped tuna.", + "grand_exchange_price": "233", + "durability": null, + "name": "Chopped tuna", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7086" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "233", + "durability": null, + "name": "Chopped tuna", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7087" + }, + { + "ge_buy_limit": "10000", + "examine": "Raw sweetcorn.", + "grand_exchange_price": "110", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7088" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "110", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7089" + }, + { + "durability": null, + "name": "Burnt egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7091" + }, + { + "durability": null, + "name": "Burnt onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7093" + }, + { + "durability": null, + "name": "Burnt mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7095" + }, + { + "examine": "Best keep this away from naked flames.", + "durability": null, + "name": "Gunpowder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7108" + }, + { + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7109" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "48", + "examine": "A seaworthy grey shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7110", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7111" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "714", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7112", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "714", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7113" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "Not for land lubbers.", + "grand_exchange_price": "2530", + "durability": null, + "name": "Pirate boots", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "7114", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2530", + "durability": null, + "name": "Pirate boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7115" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "77", + "examine": "Well, okay, they're beige, but they're part of the white pirate clothing set, so...", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7116", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "77", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7117" + }, + { + "examine": "A cannister holding shrapnel.", + "durability": null, + "name": "Canister", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7118" + }, + { + "examine": "For cleaning and packing the cannon.", + "durability": null, + "name": "Ramrod", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "7120" + }, + { + "examine": "A plank of wood to repair the hull with.", + "durability": null, + "name": "Repair plank", + "archery_ticket_price": "0", + "id": "7121" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "904", + "examine": "A sea worthy shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7122", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "904", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7123" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "340", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7124", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "340", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7125" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "examine": "A sea worthy pair of trousers.", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7126", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7127" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "744", + "examine": "A sea worthy shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7128", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "744", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7129" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "154", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7130", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "154", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7131" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "253", + "examine": "A sea worthy pair of trousers.", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7132", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "253", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7133" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "examine": "A sea worthy shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7134", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7135" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "469", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7136", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "469", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7137" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "examine": "A sea worthy pair of trousers.", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7138", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7139" + }, + { + "shop_price": "2560", + "examine": "Feels quite lucky.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "6", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "attack_audios": "2500,2500,2517,2500", + "name": "Lucky cutlass", + "archery_ticket_price": "0", + "id": "7140", + "bonuses": "5,20,0,-5,0,6,6,6,0,0,0,25,0,0,0" + }, + { + "shop_price": "1040", + "examine": "I hope he doesn't want it back.", + "durability": null, + "name": "Harry's cutlass", + "weight": "1", + "archery_ticket_price": "0", + "attack_speed": "4", + "weapon_interface": "6", + "id": "7141", + "bonuses": "3,14,0,-5,0,4,4,4,0,0,0,22,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "25600", + "examine": "The very butcher of a silk button.", + "durability": null, + "name": "Rapier", + "weight": "1", + "archery_ticket_price": "0", + "attack_speed": "4", + "weapon_interface": "5", + "id": "7142", + "bonuses": "45,7,-2,0,0,0,1,0,0,0,0,44,0,0,0", + "render_anim": "2622", + "equipment_slot": "3" + }, + { + "examine": "Looks valuable.", + "durability": null, + "name": "Plunder", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7143" + }, + { + "examine": "By Cap'n Hook-Hand Morrisane.", + "durability": null, + "name": "Book o' piracy", + "archery_ticket_price": "0", + "id": "7144" + }, + { + "examine": "A working cannon barrel.", + "durability": null, + "name": "Cannon barrel", + "weight": "32", + "archery_ticket_price": "0", + "id": "7145" + }, + { + "examine": "Not likely to work again.", + "durability": null, + "name": "Broken cannon", + "weight": "32", + "archery_ticket_price": "0", + "id": "7146" + }, + { + "examine": "A plank of wood to repair the hull with.", + "durability": null, + "name": "Repair plank", + "archery_ticket_price": "0", + "id": "7148" + }, + { + "examine": "A cannister holding shrapnel.", + "durability": null, + "name": "Canister", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7149" + }, + { + "examine": "Useful for pinning up paintings.", + "durability": null, + "name": "Tacks", + "archery_ticket_price": "0", + "id": "7150" + }, + { + "shop_price": "18", + "examine": "A coil of rope.", + "grand_exchange_price": "101", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "7155" + }, + { + "shop_price": "1", + "examine": "Useful for lighting a fire.", + "grand_exchange_price": "121", + "durability": null, + "name": "Tinderbox", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "7156" + }, + { + "shop_price": "30", + "examine": "I think it is eating through the bottle.", + "durability": null, + "name": "Braindeath 'rum", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7157" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7044", + "examine": "A two-handed dragon sword.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "1000000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "7158", + "stand_turn_anim": "7040", + "bonuses": "-4,92,80,-4,0,0,0,0,0,-1,0,93,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "3", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "2503,0,2504,0", + "name": "Dragon 2h sword" + }, + { + "requirements": "{18,37}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "They're heavily insulated wellies.", + "durability": null, + "weight": "1.3", + "equipment_slot": "10", + "grand_exchange_price": "269", + "name": "Insulated boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7159", + "bonuses": "0,0,0,0,0,1,1,0,0,1,0,0,0,0,0" + }, + { + "examine": "Before being attacked: A ball of Electrical energy.", + "durability": null, + "name": "Killerwatt", + "archery_ticket_price": "0", + "attack_speed": "2", + "id": "7160" + }, + { + "durability": null, + "name": "Insulated boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7161" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Lots of pie recipes for me to try.", + "grand_exchange_price": "62", + "durability": null, + "name": "Pie recipe book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7162" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "62", + "durability": null, + "name": "Pie recipe book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7163" + }, + { + "shop_price": "54", + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "77", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7164" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "77", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7165" + }, + { + "shop_price": "54", + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "284", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7166" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "284", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7167" + }, + { + "ge_buy_limit": "1000", + "examine": "Needs to be baked before I can use it.", + "grand_exchange_price": "1625", + "durability": null, + "name": "Raw mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7168" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1625", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7169" + }, + { + "shop_price": "54", + "ge_buy_limit": "1000", + "turn90cw_anim": "821", + "examine": "All the good of the earth.", + "walk_anim": "819", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "13", + "turn180_anim": "820", + "render_anim": "1", + "equipment_slot": "3", + "grand_exchange_price": "2024", + "stand_anim": "808", + "name": "Mud pie", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7170", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2024", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7171" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "94", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7172" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "94", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7173" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "150", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7174" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "150", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7175" + }, + { + "ge_buy_limit": "1000", + "examine": "Needs cooking before I eat it.", + "grand_exchange_price": "1052", + "durability": null, + "name": "Raw garden pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7176" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1052", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7177" + }, + { + "ge_buy_limit": "1000", + "examine": "What I wouldn't give for a good steak about now...", + "grand_exchange_price": "1667", + "durability": null, + "name": "Garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7178" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1667", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7179" + }, + { + "ge_buy_limit": "1000", + "examine": "What I wouldn't give for a good steak about now...", + "grand_exchange_price": "442", + "durability": null, + "name": "Half a garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7180" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "442", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7181" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "51", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7182" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "51", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7183" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "691", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7184" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "691", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7185" + }, + { + "ge_buy_limit": "1000", + "examine": "Raw fish is risky, better cook it.", + "grand_exchange_price": "1198", + "durability": null, + "name": "Raw fish pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7186" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1198", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7187" + }, + { + "ge_buy_limit": "1000", + "examine": "Bounty of the sea.", + "grand_exchange_price": "121", + "durability": null, + "name": "Fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7188" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "121", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7189" + }, + { + "ge_buy_limit": "1000", + "examine": "Bounty of the sea.", + "grand_exchange_price": "56", + "durability": null, + "name": "Half a fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7190" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "56", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7191" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients. ", + "grand_exchange_price": "159", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7192" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "159", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7193" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "537", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7194" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "537", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7195" + }, + { + "ge_buy_limit": "1000", + "examine": "This would taste a lot better cooked.", + "grand_exchange_price": "1813", + "durability": null, + "name": "Raw admiral pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7196" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1813", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7197" + }, + { + "ge_buy_limit": "1000", + "examine": "Much tastier than a normal fish pie.", + "grand_exchange_price": "532", + "durability": null, + "name": "Admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7198" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "532", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7199" + }, + { + "ge_buy_limit": "1000", + "examine": "Much tastier than a normal fish pie.", + "grand_exchange_price": "184", + "durability": null, + "name": "Half an admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7200" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "184", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half an admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7201" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "126", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7202" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "126", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7203" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "1116", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7204" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1116", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7205" + }, + { + "ge_buy_limit": "1000", + "examine": "Good as it looks, I'd better cook it.", + "grand_exchange_price": "3787", + "durability": null, + "name": "Raw wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7206" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3787", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7207" + }, + { + "ge_buy_limit": "1000", + "examine": "A triumph of man over nature.", + "grand_exchange_price": "1322", + "durability": null, + "name": "Wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7208" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1322", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7209" + }, + { + "ge_buy_limit": "1000", + "examine": "A triumph of man over nature.", + "grand_exchange_price": "112", + "durability": null, + "name": "Half a wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7210" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "112", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7211" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "495", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7212" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "495", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7213" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "980", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7214" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "980", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7215" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh fruit may be good for you, but I should really cook this.", + "grand_exchange_price": "2577", + "durability": null, + "name": "Raw summer pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7216" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2577", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7217" + }, + { + "ge_buy_limit": "1000", + "examine": "All the fruits of a very small forest.", + "grand_exchange_price": "1288", + "durability": null, + "name": "Summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7218" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1288", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7219" + }, + { + "ge_buy_limit": "1000", + "examine": "All the fruits of a very small forest.", + "grand_exchange_price": "430", + "durability": null, + "name": "Half a summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7220" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "430", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7221" + }, + { + "shop_price": "19", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "32", + "durability": null, + "name": "Burnt rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7222" + }, + { + "shop_price": "25", + "ge_buy_limit": "1000", + "examine": "A delicious looking piece of roast rabbit.", + "grand_exchange_price": "37", + "durability": null, + "name": "Roast rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7223" + }, + { + "shop_price": "67", + "ge_buy_limit": "1000", + "examine": "Might taste better cooked.", + "grand_exchange_price": "112", + "durability": null, + "name": "Skewered rabbit", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7224" + }, + { + "shop_price": "81", + "ge_buy_limit": "100", + "examine": "An iron spit.", + "grand_exchange_price": "18", + "durability": null, + "name": "Iron spit", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7225" + }, + { + "durability": null, + "name": "Burnt chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7227" + }, + { + "shop_price": "130", + "ge_buy_limit": "1000", + "examine": "It might look delicious to an ogre.Roasted chompy bird.", + "grand_exchange_price": "164", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7228" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "164", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7229" + }, + { + "ge_buy_limit": "1000", + "examine": "A skewered chompy bird.", + "grand_exchange_price": "294", + "durability": null, + "name": "Skewered chompy", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7230" + }, + { + "durability": null, + "name": "Burnt rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7231" + }, + { + "durability": null, + "name": "Roast rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7232" + }, + { + "durability": null, + "name": "Skewered rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7233" + }, + { + "durability": null, + "name": "Iron spit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7234" + }, + { + "durability": null, + "name": "Skewered chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7235" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7236" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7237" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7238" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7239" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7240" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7241" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7242" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7243" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7244" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7245" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7246" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7247" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7248" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7249" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7250" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7251" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7252" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7253" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7254" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7255" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7256" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7257" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7258" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7259" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7260" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7261" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7262" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7263" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7264" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7265" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7266" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7267" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7268" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7269" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7270" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7271" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7272" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7273" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7274" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7275" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7276" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7277" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7278" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7279" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7280" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7281" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7282" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7283" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7284" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7285" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7286" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7287" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7288" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7289" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7290" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7291" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7292" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7293" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7294" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7295" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7296" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7298" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7300" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7301" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7303" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7304" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7305" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7306" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7307" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7308" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7309" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7310" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7311" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7312" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7313" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7314" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7315" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7316" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7317" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7318" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "36600", + "durability": null, + "name": "Red boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7319", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36600", + "durability": null, + "name": "Red boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7320" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "16600", + "durability": null, + "name": "Orange boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7321", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "16600", + "durability": null, + "name": "Orange boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7322" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "43000", + "durability": null, + "name": "Green boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7323", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "43000", + "durability": null, + "name": "Green boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7324" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "37600", + "durability": null, + "name": "Blue boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7325", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "37600", + "durability": null, + "name": "Blue boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7326" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "41700", + "durability": null, + "name": "Black boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7327", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "41700", + "durability": null, + "name": "Black boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7328" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "93", + "durability": null, + "name": "Red firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7329" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "94", + "durability": null, + "name": "Green firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7330" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "113", + "durability": null, + "name": "Blue firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7331" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black kitesheild with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "14300", + "name": "Black shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7332", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14300", + "durability": null, + "name": "Black shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7333" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "16400", + "name": "Adamant shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7334", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "16400", + "durability": null, + "name": "Adamant shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7335" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "34200", + "name": "Rune shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7336", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "34200", + "durability": null, + "name": "Rune shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7337" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black kiteshield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "9797", + "name": "Black shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7338", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "9797", + "durability": null, + "name": "Black shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7339" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3248", + "name": "Adamant shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7340", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3248", + "durability": null, + "name": "Adamant shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7341" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32400", + "name": "Rune shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7342", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32400", + "durability": null, + "name": "Rune shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7343" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black shield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "7405", + "name": "Black shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7344", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7405", + "durability": null, + "name": "Black shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7345" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "5271", + "name": "Adamant shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7346", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5271", + "durability": null, + "name": "Adamant shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7347" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32700", + "name": "Rune shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7348", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32700", + "durability": null, + "name": "Rune shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7349" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black shield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "5572", + "name": "Black shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7350", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5572", + "durability": null, + "name": "Black shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7351" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3366", + "name": "Adamant shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7352", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3366", + "durability": null, + "name": "Adamant shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7353" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32500", + "name": "Rune shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7354", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32500", + "durability": null, + "name": "Rune shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7355" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black shield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "7159", + "name": "Black shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7356", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7159", + "durability": null, + "name": "Black shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7357" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "6328", + "name": "Adamant shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7358", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "6328", + "durability": null, + "name": "Adamant shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7359" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32400", + "name": "Rune shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7360", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "requirements": "", + "ge_buy_limit": "2", + "grand_exchange_price": "32400", + "durability": null, + "name": "Rune shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7361" + }, + { + "requirements": "{1,20}-{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "durability": null, + "weight": "5.4", + "absorb": "0,3,1", + "equipment_slot": "4", + "grand_exchange_price": "101600", + "name": "Studded body (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7362", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "101600", + "durability": null, + "name": "Studded body (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7363" + }, + { + "requirements": "{1,20}-{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "durability": null, + "weight": "5.4", + "absorb": "0,3,1", + "equipment_slot": "4", + "grand_exchange_price": "27300", + "name": "Studded body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7364", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "27300", + "durability": null, + "name": "Studded body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7365" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "durability": null, + "weight": "4.5", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "114600", + "name": "Studded chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7366", + "bonuses": "0,0,0,-5,6,15,16,17,6,16,5,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "114600", + "durability": null, + "name": "Studded chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7367" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim, too!", + "durability": null, + "weight": "4.5", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "36800", + "name": "Studded chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7368", + "bonuses": "0,0,0,-5,6,15,16,17,6,16,5,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36800", + "durability": null, + "name": "Studded chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7369" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide. With colourful trim!", + "grand_exchange_price": "212400", + "durability": null, + "name": "D'hide body(g)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7370", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "212400", + "durability": null, + "name": "D'hide body(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7371" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide. With colourful trim!", + "grand_exchange_price": "38800", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7372", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "38800", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7373" + }, + { + "requirements": "{1,50}-{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "6883", + "durability": null, + "name": "D'hide body (g)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7374", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "6883", + "durability": null, + "name": "D'hide body (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7375" + }, + { + "requirements": "{1,50}-{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "5268", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7376", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5268", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7377" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "1300000", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7378", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1300000", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7379" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "304300", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7380", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "304300", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7381" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "21300", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7382", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "21300", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7383" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "2554", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7384", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2554", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7385" + }, + { + "ge_buy_limit": "2", + "examine": "Leg covering favoured by women and wizards. With a colourful trim!", + "grand_exchange_price": "298900", + "durability": null, + "name": "Blue skirt (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7386", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "298900", + "durability": null, + "name": "Blue skirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7387" + }, + { + "ge_buy_limit": "2", + "examine": "Leg covering favoured by women and wizards. With a colourful trim!", + "grand_exchange_price": "126800", + "durability": null, + "name": "Blue skirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7388", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "126800", + "durability": null, + "name": "Blue skirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7389" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "I can practise magic better in this.", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Wizard robe (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7390", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Wizard robe (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7391" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "I can do magic better in this.", + "grand_exchange_price": "244600", + "durability": null, + "name": "Wizard robe (t)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7392", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "244600", + "durability": null, + "name": "Wizard robe (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7393" + }, + { + "ge_buy_limit": "2", + "examine": "A silly pointed hat with colourful trim.", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Wizard hat (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "hat": "true", + "id": "7394", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Wizard hat (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7395" + }, + { + "ge_buy_limit": "2", + "examine": "A silly pointed hat, with colourful trim.", + "grand_exchange_price": "352700", + "durability": null, + "name": "Wizard hat (t)", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "hat": "true", + "id": "7396", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "352700", + "durability": null, + "name": "Wizard hat (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7397" + }, + { + "requirements": "{1,40}-{6,20}", + "ge_buy_limit": "2", + "examine": "Enchanted Wizards robes.", + "durability": null, + "weight": "1.8", + "absorb": "2,1,0", + "equipment_slot": "7", + "grand_exchange_price": "50000", + "name": "Enchanted robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7398", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,40}", + "ge_buy_limit": "2", + "examine": "Enchanted Wizards robes.", + "durability": null, + "weight": "1", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "75100", + "name": "Enchanted top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7399", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{6,20}", + "ge_buy_limit": "2", + "examine": "A three pointed hat of magic.", + "grand_exchange_price": "8845", + "durability": null, + "name": "Enchanted hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7400", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Enchanted robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7401" + }, + { + "durability": null, + "name": "Enchanted top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7402" + }, + { + "durability": null, + "name": "Enchanted hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7403" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Red logs", + "archery_ticket_price": "0", + "id": "7404" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Green logs", + "weight": "2", + "archery_ticket_price": "0", + "id": "7405" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Blue logs", + "weight": "2", + "archery_ticket_price": "0", + "id": "7406" + }, + { + "durability": null, + "name": "Dragon 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7407" + }, + { + "destroy_message": "I found this in a grave at Draynor Manor.", + "examine": "I shouldn't joke; this is a grave matter.", + "durability": null, + "name": "Draynor skull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7408" + }, + { + "shop_price": "40000", + "examine": "The only way to kill a Tanglefoot.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "attack_speed": "5", + "weapon_interface": "5", + "equipment_slot": "3", + "destroy_message": "I'll chat to Malignius Mortifer if I want another pair.", + "name": "Magic secateurs", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "7409", + "bonuses": "7,9,-5,1,0,0,1,0,1,0,0,1,0,0,0" + }, + { + "destroy_message": "I can always find another Tanglefoot if I need more.", + "examine": "Contains the Fairy Queen's magical essence.", + "durability": null, + "name": "Queen's secateurs", + "archery_ticket_price": "0", + "id": "7410", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A list of the Fairy Queen's symptoms.", + "durability": null, + "name": "Symptoms list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7411" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "archery_ticket_price": "0", + "id": "7413" + }, + { + "durability": null, + "name": "Paddle", + "archery_ticket_price": "0", + "id": "7414", + "weapon_interface": "1", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Paddle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7415" + }, + { + "ge_buy_limit": "5000", + "examine": "A mole claw.", + "grand_exchange_price": "11800", + "durability": null, + "name": "Mole claw", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7416" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "11800", + "durability": null, + "name": "Mole claw", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7417" + }, + { + "ge_buy_limit": "5000", + "examine": "The skin of a large mole.", + "grand_exchange_price": "12000", + "durability": null, + "name": "Mole skin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7418" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "12000", + "durability": null, + "name": "Mole skin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7419" + }, + { + "examine": "A fun guy. No wait, that's awful. Plus it doesn't even make sense. (As Fungi) A bouncy fungus. (Level 74) A fun guy. No wait, that's awful.. (Level 86)", + "durability": null, + "name": "Mutated zygomite", + "archery_ticket_price": "0", + "id": "7420" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 10", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7421", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 9", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7422", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 8", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7423", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 7", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7424", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 6", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7425", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 5", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7426", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 4", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7427", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 3", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7428", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 2", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7429", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 1", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7430", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 0", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7431", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "10", + "examine": "Does exactly what it says on the tin. (Kills Fungi.)", + "durability": null, + "name": "Fungicide", + "archery_ticket_price": "0", + "id": "7432" + }, + { + "shop_price": "35", + "ge_buy_limit": "100", + "examine": "Spoooooon!", + "durability": null, + "weight": "0.4", + "attack_speed": "5", + "weapon_interface": "6", + "equipment_slot": "3", + "grand_exchange_price": "44", + "name": "Wooden spoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7433", + "bonuses": "4,5,-2,0,0,0,3,2,0,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44", + "durability": null, + "name": "Wooden spoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7434" + }, + { + "shop_price": "45", + "ge_buy_limit": "100", + "examine": "A large whisk of death.", + "durability": null, + "attack_speed": "4", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "11", + "name": "Egg whisk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7435", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Egg whisk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7436" + }, + { + "requirements": "{0,10}", + "shop_price": "292", + "ge_buy_limit": "100", + "examine": "Use the spork.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "196", + "name": "Spork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7437", + "bonuses": "11,8,-2,0,0,0,2,1,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "196", + "durability": null, + "name": "Spork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7438" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "shop_price": "1728", + "turn90cw_anim": "7044", + "examine": "A large spatula... of doom!", + "walk_anim": "7046", + "durability": null, + "weight": "3.6", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "turn180_anim": "7045", + "render_anim": "124", + "equipment_slot": "3", + "grand_exchange_price": "953", + "stand_anim": "7047", + "tradeable": "true", + "name": "Spatula", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "7439", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,-4,0,0,0,0,0,-1,0,22,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "953", + "durability": null, + "name": "Spatula", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7440" + }, + { + "requirements": "{0,20}", + "shop_price": "1494", + "ge_buy_limit": "100", + "examine": "Looks like it's non-stick too!", + "durability": null, + "weight": "1.5", + "attack_speed": "6", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "836", + "name": "Frying pan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7441", + "bonuses": "-4,-4,25,-4,0,0,0,0,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "836", + "durability": null, + "name": "Frying pan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7442" + }, + { + "requirements": "{0,30}", + "shop_price": "2880", + "ge_buy_limit": "100", + "examine": "Generally used for impaling fresh meat.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "6", + "equipment_slot": "3", + "grand_exchange_price": "1712", + "name": "Skewer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7443", + "bonuses": "20,29,-2,0,0,0,3,2,0,0,0,31,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1712", + "durability": null, + "name": "Skewer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7444" + }, + { + "requirements": "{0,40}", + "shop_price": "12960", + "ge_buy_limit": "100", + "examine": "That's how I roll!", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "8445", + "name": "Rolling pin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7445", + "bonuses": "20,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8445", + "durability": null, + "name": "Rolling pin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7446" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A sharp, dependable knife, for filleting meat.", + "durability": null, + "attack_speed": "4", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "4686", + "attack_audios": "2704,0,0,0", + "name": "Kitchen knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7447", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4686", + "durability": null, + "name": "Kitchen knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7448" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "Often used to soften tough meat up.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "1666", + "equipment_slot": "3", + "attack_anims": "2067,2066,2068", + "grand_exchange_price": "24700", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7449", + "stand_turn_anim": "823", + "bonuses": "-4,-4,53,-4,0,0,0,0,0,0,0,48,0,0,0", + "requirements": "{0,40}", + "shop_price": "41500", + "durability": null, + "weight": "1", + "weapon_interface": "10", + "render_anim": "1", + "name": "Meat tenderiser" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24700", + "durability": null, + "name": "Meat tenderiser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7450" + }, + { + "requirements": "{0,40}", + "shop_price": "24040", + "ge_buy_limit": "100", + "examine": "An effective tool for chopping tough meat.", + "durability": null, + "weight": "0.5", + "attack_speed": "4", + "weapon_interface": "6", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "15000", + "attack_audios": "2500,0,2517,0", + "name": "Cleaver", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7451", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15000", + "durability": null, + "name": "Cleaver", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7452" + }, + { + "shop_price": "50", + "examine": "A pair of plain gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7453", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "100", + "examine": "A pair of bronze-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7454", + "bonuses": "2,2,2,1,2,2,2,2,1,2,1,2,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "325", + "examine": "A pair of iron-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7455", + "bonuses": "3,3,3,2,3,3,3,3,2,3,2,3,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "500", + "examine": "A pair of steel-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7456", + "bonuses": "4,4,4,2,4,4,4,4,2,4,2,4,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "1000", + "examine": "A pair of black-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7457", + "bonuses": "5,5,5,3,5,5,5,5,3,5,3,5,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "1500", + "examine": "A pair of mithril-coloured gloves.", + "durability": null, + "name": "Gloves", + "archery_ticket_price": "0", + "id": "7458", + "bonuses": "6,6,6,3,6,6,6,6,3,6,3,6,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "2500", + "examine": "A pair of adamant-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7459", + "bonuses": "7,7,7,4,7,7,7,7,4,7,4,7,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,13}", + "shop_price": "5000", + "examine": "A pair of rune-coloured gloves.", + "durability": null, + "name": "Gloves", + "archery_ticket_price": "0", + "id": "7460", + "bonuses": "8,8,8,4,8,8,8,8,4,8,4,8,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,41}", + "shop_price": "100000", + "examine": "A pair of dragon-coloured gloves.", + "durability": null, + "name": "Gloves", + "archery_ticket_price": "0", + "id": "7461", + "bonuses": "9,9,9,5,9,9,9,9,5,9,5,9,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,41}", + "shop_price": "100000", + "examine": "A pair of Barrows-themed gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7462", + "bonuses": "12,12,12,6,12,12,12,12,6,12,6,12,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "It's cornflour in a pot.", + "durability": null, + "name": "Cornflour", + "weight": "1", + "archery_ticket_price": "0", + "id": "7463" + }, + { + "examine": "A tatty old book belonging to the Wise Old Man of Draynor Village.", + "durability": null, + "name": "Book on chickens", + "archery_ticket_price": "0", + "id": "7464" + }, + { + "examine": "Surprise, it looks like a vanilla pod.", + "durability": null, + "name": "Vanilla pod", + "archery_ticket_price": "0", + "id": "7465" + }, + { + "examine": "It's cornflour in a pot.", + "durability": null, + "name": "Cornflour", + "weight": "1", + "archery_ticket_price": "0", + "id": "7466" + }, + { + "examine": "It's cornflour in a pot.", + "durability": null, + "name": "Pot of cornflour", + "weight": "1", + "archery_ticket_price": "0", + "id": "7468" + }, + { + "destroy_message": "I'll have to get all the ingredients again.", + "examine": "A mixture of milk, cream and cornflour.", + "durability": null, + "name": "Cornflour mixture", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7470" + }, + { + "destroy_message": "I'll have to get all the ingredients again.", + "examine": "It's a bucket of milk and cream.", + "durability": null, + "name": "Milky mixture", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7471" + }, + { + "examine": "Some cinnamon sticks.", + "durability": null, + "name": "Cinnamon", + "archery_ticket_price": "0", + "id": "7472" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pot of brulee supreme.", + "durability": null, + "name": "Brulee supreme", + "archery_ticket_price": "0", + "id": "7476" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "What came first, the chicken or...", + "durability": null, + "name": "Evil chicken's egg", + "archery_ticket_price": "0", + "id": "7477" + }, + { + "destroy_message": "I got this by killing a Black Dragon. It might be hard to get another one.", + "examine": "It's got a dragon on it.", + "durability": null, + "name": "Dragon token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7478" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's a meat and potato stew with fancy seasoning.", + "durability": null, + "name": "Spicy stew", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7479" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (4)", + "archery_ticket_price": "0", + "id": "7480" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (3)", + "archery_ticket_price": "0", + "id": "7481" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (2)", + "archery_ticket_price": "0", + "id": "7482" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (1)", + "archery_ticket_price": "0", + "id": "7483" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (4)", + "archery_ticket_price": "0", + "id": "7484" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (3)", + "archery_ticket_price": "0", + "id": "7485" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (2)", + "archery_ticket_price": "0", + "id": "7486" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (1)", + "archery_ticket_price": "0", + "id": "7487" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (4)", + "archery_ticket_price": "0", + "id": "7488" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (3)", + "archery_ticket_price": "0", + "id": "7489" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (2)", + "archery_ticket_price": "0", + "id": "7490" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (1)", + "archery_ticket_price": "0", + "id": "7491" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (4)", + "archery_ticket_price": "0", + "id": "7492" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (3)", + "archery_ticket_price": "0", + "id": "7493" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (2)", + "archery_ticket_price": "0", + "id": "7494" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (1)", + "archery_ticket_price": "0", + "id": "7495" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Empty spice shaker", + "archery_ticket_price": "0", + "id": "7496" + }, + { + "examine": "A cool refreshing fruit mix. With ash in for some reason.", + "durability": null, + "name": "Dirty blast", + "archery_ticket_price": "0", + "id": "7497" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7498" + }, + { + "examine": "He seems to like wearing black.", + "durability": null, + "name": "Evil dave", + "archery_ticket_price": "0", + "id": "7499" + }, + { + "examine": "A short angry guy.", + "durability": null, + "name": "Dwarf", + "archery_ticket_price": "0", + "id": "7500" + }, + { + "examine": "He provides new players with useful information.", + "durability": null, + "name": "Lumbridge guide", + "archery_ticket_price": "0", + "id": "7502" + }, + { + "examine": "He looks a little shifty.", + "durability": null, + "name": "Osman", + "archery_ticket_price": "0", + "id": "7504" + }, + { + "examine": "A shifty-looking character.", + "durability": null, + "name": "Pirate pete", + "archery_ticket_price": "0", + "id": "7505" + }, + { + "examine": "Leader of the White Knights.", + "durability": null, + "name": "Sir amik varze", + "archery_ticket_price": "0", + "id": "7506" + }, + { + "examine": "He's been frozen in time.", + "durability": null, + "name": "Skrach", + "archery_ticket_price": "0", + "id": "7507" + }, + { + "shop_price": "4", + "examine": "There appears to be a coin in the bottom. Liked by dwarves.", + "durability": null, + "name": "Asgoldian ale", + "archery_ticket_price": "0", + "id": "7508" + }, + { + "examine": "Red hot and glowing, ouch! Only for dwarf consumption.", + "durability": null, + "name": "Dwarven rock cake", + "weight": "8.5", + "archery_ticket_price": "0", + "id": "7509" + }, + { + "examine": "Cool and heavy as a brick. Only for dwarf consumption.", + "durability": null, + "name": "Dwarven rock cake", + "weight": "8.5", + "archery_ticket_price": "0", + "id": "7510" + }, + { + "examine": "Two out of two goblin generals prefer it!", + "durability": null, + "name": "Slop of compromise", + "archery_ticket_price": "0", + "id": "7511" + }, + { + "examine": "Previously a nice crispy loaf of bread. Now just kind of icky.", + "durability": null, + "name": "Soggy bread", + "archery_ticket_price": "0", + "id": "7512" + }, + { + "examine": "They clearly taste so much better this way!", + "durability": null, + "name": "Spicy maggots", + "archery_ticket_price": "0", + "id": "7513" + }, + { + "examine": "Orange slices which have been dyed, but it looks more like they died.", + "durability": null, + "name": "Dyed orange", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7514" + }, + { + "examine": "Glad these aren't in my bed.", + "durability": null, + "name": "Breadcrumbs", + "archery_ticket_price": "0", + "id": "7515" + }, + { + "examine": "Those leaves look useful!", + "durability": null, + "name": "Kelp", + "archery_ticket_price": "0", + "id": "7516" + }, + { + "examine": "Kelp flakes. Smells of the sea.", + "durability": null, + "name": "Ground kelp", + "weight": "2", + "archery_ticket_price": "0", + "id": "7517" + }, + { + "examine": "A smelly meat.", + "durability": null, + "name": "Crab meat", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7518" + }, + { + "examine": "A smelly meat.", + "durability": null, + "name": "Crab meat", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7519" + }, + { + "ge_buy_limit": "100", + "examine": "Nice and Tasty!", + "grand_exchange_price": "219", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7521" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7522" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7523" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7524" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7525" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7526" + }, + { + "examine": "A smelly paste.", + "durability": null, + "name": "Ground crab meat", + "archery_ticket_price": "0", + "id": "7527" + }, + { + "examine": "A smelly paste.", + "durability": null, + "name": "Ground cod", + "archery_ticket_price": "0", + "id": "7528" + }, + { + "examine": "Would taste nicer if I cooked it.", + "durability": null, + "name": "Raw fishcake", + "archery_ticket_price": "0", + "id": "7529" + }, + { + "examine": "Mmmm, reminds me of the seaside.", + "durability": null, + "name": "Cooked fishcake", + "archery_ticket_price": "0", + "id": "7530" + }, + { + "examine": "Hmmm, what can I use this for?", + "durability": null, + "name": "Mudskipper hide", + "weight": "1", + "archery_ticket_price": "0", + "id": "7532" + }, + { + "remove_head": "true", + "examine": "You'll look daft, but at least you won't drown!", + "durability": null, + "name": "Fishbowl helmet", + "weight": "5", + "archery_ticket_price": "0", + "id": "7534", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "I'll need a helmet to make this work.", + "durability": null, + "name": "Diving apparatus", + "weight": "10", + "archery_ticket_price": "0", + "id": "7535", + "equipment_slot": "1" + }, + { + "examine": "Fresh off the crab itself.", + "durability": null, + "name": "Fresh crab claw", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7536" + }, + { + "examine": "If it is good enough for crabs, it's good enough for me.", + "durability": null, + "name": "Crab claw", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7537", + "bonuses": "0,0,0,0,0,3,4,2,0,0,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Fresh off the crab itself.", + "durability": null, + "name": "Fresh crab shell", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7538" + }, + { + "remove_head": "true", + "examine": "If it's good enough for crabs, it's good enough for me!", + "durability": null, + "name": "Crab helmet", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7539", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "Darn, it's useless now.", + "durability": null, + "name": "Broken crab claw", + "archery_ticket_price": "0", + "id": "7540" + }, + { + "examine": "Darn, it's useless now.", + "durability": null, + "name": "Broken crab shell", + "archery_ticket_price": "0", + "id": "7541" + }, + { + "destroy_message": "Maybe Traiborn will have another.", + "examine": "Imbued with knowledge itself.", + "durability": null, + "name": "Cake of guidance", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7542" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Now all I need to do is cook it.", + "durability": null, + "name": "Raw guide cake", + "archery_ticket_price": "0", + "id": "7543" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Egg containing knowledge.", + "durability": null, + "name": "Enchanted egg", + "archery_ticket_price": "0", + "id": "7544" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Guiding milk.", + "durability": null, + "name": "Enchanted milk", + "weight": "2", + "archery_ticket_price": "0", + "id": "7545" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pot of special flour.", + "durability": null, + "name": "Enchanted flour", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7546" + }, + { + "examine": "A druid pouch.", + "durability": null, + "name": "Druid pouch", + "archery_ticket_price": "0", + "id": "7547" + }, + { + "shop_price": "8", + "examine": "A potato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Potato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7548" + }, + { + "durability": null, + "name": "Potato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7549" + }, + { + "shop_price": "10", + "examine": "An onion seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Onion seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7550" + }, + { + "durability": null, + "name": "Onion seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7551" + }, + { + "shop_price": "76", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "24", + "durability": null, + "name": "Mithril arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7552", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,22,0,0" + }, + { + "durability": null, + "name": "Mithril arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7553" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "16", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7554" + }, + { + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7555" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7556" + }, + { + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7557" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "9", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7558" + }, + { + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7559" + }, + { + "shop_price": "140", + "examine": "Used for small missile spells.", + "grand_exchange_price": "65", + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7560" + }, + { + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7561" + }, + { + "shop_price": "10", + "examine": "A tomato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Tomato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7562" + }, + { + "durability": null, + "name": "Tomato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7563" + }, + { + "examine": "An inflated toad tied to a rock like a balloon.", + "durability": null, + "name": "Balloon toad", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7564" + }, + { + "examine": "An inflated toad tied to a rock like a balloon.", + "durability": null, + "name": "Balloon toad", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7565" + }, + { + "ge_buy_limit": "100", + "examine": "The uncooked meat of a Jubbly bird.", + "grand_exchange_price": "422", + "durability": null, + "name": "Raw jubbly", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7566" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "422", + "durability": null, + "name": "Raw jubbly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7567" + }, + { + "ge_buy_limit": "100", + "examine": "Lovely jubbly!", + "grand_exchange_price": "944", + "durability": null, + "name": "Cooked jubbly", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7568" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "944", + "durability": null, + "name": "Cooked jubbly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7569" + }, + { + "durability": null, + "name": "Burnt jubbly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7571" + }, + { + "examine": "Like a banana only redder.", + "durability": null, + "name": "Red banana", + "archery_ticket_price": "0", + "id": "7572", + "equipment_slot": "5" + }, + { + "examine": "Like monkey nuts only tchikier.", + "durability": null, + "name": "Tchiki monkey nuts", + "archery_ticket_price": "0", + "id": "7573" + }, + { + "examine": "Perfect for stuffing snakes.", + "durability": null, + "name": "Sliced red banana", + "archery_ticket_price": "0", + "id": "7574" + }, + { + "examine": "Mixing this with jam would just be wrong.", + "durability": null, + "name": "Tchiki nut paste", + "archery_ticket_price": "0", + "id": "7575" + }, + { + "examine": "Like a snake only not alive.", + "durability": null, + "name": "Snake corpse", + "weight": "3", + "archery_ticket_price": "0", + "id": "7576" + }, + { + "examine": "This snake is stuffed right up.", + "durability": null, + "name": "Raw stuffed snake", + "weight": "3", + "archery_ticket_price": "0", + "id": "7577" + }, + { + "examine": "Is this really what you wanted to do?", + "durability": null, + "name": "Odd stuffed snake", + "archery_ticket_price": "0", + "id": "7578" + }, + { + "examine": "Fit for a Monkey King. (cooked)", + "durability": null, + "name": "Stuffed snake", + "weight": "3", + "archery_ticket_price": "0", + "id": "7579" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Overgrown hellcat", + "archery_ticket_price": "0", + "id": "7581" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Hell cat", + "archery_ticket_price": "0", + "id": "7582" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Hell-kitten", + "archery_ticket_price": "0", + "id": "7583" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Wily hellcat", + "archery_ticket_price": "0", + "id": "7585" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Dummy", + "archery_ticket_price": "0", + "id": "7586" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7587" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7588" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7589" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7590" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7591" + }, + { + "examine": "Aside from the braaaains on the lapel, it's still quite good.", + "durability": null, + "name": "Zombie shirt", + "archery_ticket_price": "0", + "id": "7592", + "equipment_slot": "4" + }, + { + "examine": "Good for a shamble about town.", + "durability": null, + "name": "Zombie trousers", + "archery_ticket_price": "0", + "id": "7593", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "I look 40,000 years old in this...", + "durability": null, + "name": "Zombie mask", + "archery_ticket_price": "0", + "id": "7594", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Smells pretty funky.", + "durability": null, + "name": "Zombie gloves", + "archery_ticket_price": "0", + "id": "7595", + "equipment_slot": "9" + }, + { + "shop_price": "160", + "examine": "Thrilling.", + "durability": null, + "name": "Zombie boots", + "archery_ticket_price": "0", + "id": "7596", + "equipment_slot": "10" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7597" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7598" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7599" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7600" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7601" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7602" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7603" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7604" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7605" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7606" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7607" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7608" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7609" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7610" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7611" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7612" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7613" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7614" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7615" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7616" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7617" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7618" + }, + { + "examine": "A silvery rod of mithril and silver with sapphire on top.", + "durability": null, + "name": "Silvthrill rod", + "archery_ticket_price": "0", + "id": "7620" + }, + { + "examine": "A bucket partially filled with rubble. / A bucket totally filled with rubble.", + "durability": null, + "name": "Bucket of rubble", + "weight": "2", + "archery_ticket_price": "0", + "id": "7622" + }, + { + "examine": "A bucket partially filled with rubble. / A bucket totally filled with rubble.", + "durability": null, + "name": "Bucket of rubble", + "weight": "2", + "archery_ticket_price": "0", + "id": "7624" + }, + { + "examine": "A bucket partially filled with rubble. / A bucket totally filled with rubble.", + "durability": null, + "name": "Bucket of rubble", + "weight": "2", + "archery_ticket_price": "0", + "id": "7626" + }, + { + "destroy_message": "You can get another plaster fragment by exploring near the Inn in Burgh de Rott.", + "examine": "A fragment of plaster with some impressions on it.", + "durability": null, + "name": "Plaster fragment", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7628" + }, + { + "destroy_message": "You can get another scroll by exploring near the Inn in Burgh de Rott.", + "examine": "An ancient tattered scroll.", + "durability": null, + "name": "Dusty scroll", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7629" + }, + { + "destroy_message": "You can get another temple key by talking to Drezel.", + "examine": "A key for the Temple Library. (In Aid of the Myreque)", + "durability": null, + "name": "Temple library key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7632" + }, + { + "destroy_message": "You can get another Ancient Book by searching the library in the temple on the Salve.", + "shop_price": "5000", + "examine": "The unholy book of a forgotten god.", + "durability": null, + "name": "Ancient book", + "weight": "1", + "archery_ticket_price": "0", + "id": "7633", + "bonuses": "4,4,4,6,0,4,4,4,6,0,2,0,0,5,0" + }, + { + "destroy_message": "You can get another Crumbling tome by searching the library in the temple on the Salve.", + "examine": "An ancient history book.", + "durability": null, + "name": "Battered tome", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7634" + }, + { + "destroy_message": "You can get another Leather book by searching the library in the temple on the Salve.", + "examine": "An ancient leather-bound tome.", + "durability": null, + "name": "Leather book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7635" + }, + { + "examine": "Rod of Ivandis dust.", + "durability": null, + "name": "Rod dust", + "archery_ticket_price": "0", + "id": "7636" + }, + { + "examine": "A silvery rod of mithril and silver with sapphire on top.", + "durability": null, + "name": "Silvthrill rod", + "archery_ticket_price": "0", + "id": "7637", + "equipment_slot": "3" + }, + { + "examine": "A silvery rod of mithril and silver with sapphire on top.", + "durability": null, + "name": "Silvthrill rod", + "archery_ticket_price": "0", + "id": "7638" + }, + { + "turn90cw_anim": "1207", + "examine": "A fully charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(10)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7639", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(9)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7640", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(8)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7641", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(7)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7642", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(6)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7643", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(5)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7644", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(4)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7645", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(3)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7646", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "2! 2 charges left! Ha Ha Ha.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(2)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7647", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(1)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7648", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "destroy_message": "You can make another one of these by using clay on Ivandis' coffin.", + "examine": "A mould of the Rod of Ivandis.", + "durability": null, + "name": "Rod clay mould", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7649" + }, + { + "ge_buy_limit": "1000", + "examine": "It's ground up silver.", + "grand_exchange_price": "316", + "durability": null, + "name": "Silver dust", + "tradeable": "true", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "7650" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "316", + "durability": null, + "name": "Silver dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7651" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "96", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7652" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "96", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7653" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "77", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7654" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "77", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7655" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "58", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7656" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "58", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7657" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "30", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7658" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "30", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7659" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "140", + "durability": null, + "name": "Guthix balance(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7660" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "140", + "durability": null, + "name": "Guthix balance(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7661" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "168", + "durability": null, + "name": "Guthix balance(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7662" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "168", + "durability": null, + "name": "Guthix balance(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7663" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "132", + "durability": null, + "name": "Guthix balance(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7664" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "132", + "durability": null, + "name": "Guthix balance(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7665" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "66", + "durability": null, + "name": "Guthix balance(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7666" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "66", + "durability": null, + "name": "Guthix balance(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7667" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1663", + "examine": "A specially crafted hammer with strange markings on it.", + "walk_anim": "1663", + "turn90ccw_anim": "1663", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1663", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "1615", + "stand_anim": "1662", + "tradeable": "true", + "run_anim": "1664", + "archery_ticket_price": "0", + "id": "7668", + "stand_turn_anim": "823", + "bonuses": "-4,-4,35,-4,0,0,0,0,0,0,0,35,0,0,0", + "shop_price": "3000", + "durability": null, + "weight": "1.8", + "weapon_interface": "10", + "render_anim": "27", + "name": "Gadderhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1615", + "durability": null, + "name": "Gadderhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7669" + }, + { + "turn90cw_anim": "3680", + "examine": "I think they look a bit silly.", + "walk_anim": "3680", + "durability": null, + "weight": "0.4", + "turn90ccw_anim": "3680", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "turn180_anim": "3680", + "render_anim": "1386", + "equipment_slot": "3", + "stand_anim": "3677", + "name": "Boxing gloves", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7671", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "turn90cw_anim": "3680", + "examine": "I think they look a bit silly.", + "walk_anim": "3680", + "durability": null, + "weight": "0.4", + "turn90ccw_anim": "3680", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "turn180_anim": "3680", + "render_anim": "1386", + "equipment_slot": "3", + "stand_anim": "3677", + "name": "Boxing gloves", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7673", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "examine": "A less-than razor sharp sword.", + "durability": null, + "name": "Wooden sword", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "7675", + "weapon_interface": "5", + "bonuses": "4,3,-2,0,0,0,2,1,0,0,0,5,0,0,0", + "render_anim": "2584", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Wooden shield", + "archery_ticket_price": "0", + "id": "7676", + "equipment_slot": "5" + }, + { + "examine": "It knows where the treasure is.", + "durability": null, + "name": "Treasure stone", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "7677" + }, + { + "shop_price": "160", + "examine": "You can use this to open the prize chest!", + "durability": null, + "name": "Prize key", + "weight": "1", + "archery_ticket_price": "0", + "id": "7678" + }, + { + "examine": "A good tool for bashing someone.", + "durability": null, + "name": "Pugel", + "archery_ticket_price": "0", + "two_handed": "true", + "id": "7679", + "weapon_interface": "14", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Pugel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7680" + }, + { + "examine": "Party Pete's Bumper Book Of Games", + "durability": null, + "name": "Game book", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7681" + }, + { + "durability": null, + "name": "Hoop", + "archery_ticket_price": "0", + "id": "7682", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Hoop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7683" + }, + { + "durability": null, + "name": "Dart", + "archery_ticket_price": "0", + "attack_speed": "3", + "id": "7684", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7685" + }, + { + "durability": null, + "name": "Bow and arrow", + "archery_ticket_price": "0", + "id": "7686", + "weapon_interface": "1", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Bow and arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7687" + }, + { + "examine": "The kettle is empty.", + "durability": null, + "name": "Kettle", + "archery_ticket_price": "0", + "id": "7688" + }, + { + "durability": null, + "name": "Kettle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7689" + }, + { + "examine": "It's full of cold water.", + "durability": null, + "name": "Full kettle", + "archery_ticket_price": "0", + "id": "7690" + }, + { + "examine": "It's full of boiling water.", + "durability": null, + "name": "Hot kettle", + "archery_ticket_price": "0", + "id": "7691" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7692" + }, + { + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7693" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7694" + }, + { + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7695" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7696" + }, + { + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7697" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7698" + }, + { + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7699" + }, + { + "examine": "Add boiling water to make a tea.", + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7700" + }, + { + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7701" + }, + { + "examine": "This teapot is empty.", + "durability": null, + "name": "Teapot", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7702" + }, + { + "durability": null, + "name": "Teapot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7703" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7704" + }, + { + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7705" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7706" + }, + { + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7707" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7708" + }, + { + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7709" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7710" + }, + { + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7711" + }, + { + "examine": "Add boiling water to make a tea.", + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7712" + }, + { + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7713" + }, + { + "examine": "This teapot is empty.", + "durability": null, + "name": "Teapot", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7714" + }, + { + "durability": null, + "name": "Teapot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7715" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7716" + }, + { + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7717" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7718" + }, + { + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7719" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7720" + }, + { + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7721" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7722" + }, + { + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7723" + }, + { + "examine": "Add boiling water to make a tea.", + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7724" + }, + { + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7725" + }, + { + "examine": "This teapot is empty.", + "durability": null, + "name": "Teapot", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7726" + }, + { + "durability": null, + "name": "Teapot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7727" + }, + { + "shop_price": "1", + "examine": "An empty cup.", + "grand_exchange_price": "7", + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7728" + }, + { + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7729" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7730" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7731" + }, + { + "examine": "A porcelain cup.", + "durability": null, + "name": "Porcelain cup", + "archery_ticket_price": "0", + "id": "7732" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7733" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7734" + }, + { + "examine": "A porcelain cup.", + "durability": null, + "name": "Porcelain cup", + "archery_ticket_price": "0", + "id": "7735" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7736" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7737" + }, + { + "examine": "Mmm, how about a nice cup of tea?", + "durability": null, + "name": "Tea leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7738" + }, + { + "durability": null, + "name": "Tea leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7739" + }, + { + "examine": "A glass of frothy ale.", + "grand_exchange_price": "151", + "durability": null, + "name": "Beer", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7740" + }, + { + "durability": null, + "name": "Beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7741" + }, + { + "shop_price": "1", + "examine": "I need to fill this with beer.", + "grand_exchange_price": "25", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "7742" + }, + { + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7743" + }, + { + "shop_price": "3", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "131", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7744" + }, + { + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7745" + }, + { + "shop_price": "2", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "569", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7746" + }, + { + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7747" + }, + { + "shop_price": "2", + "examine": "A glass of bitter.", + "grand_exchange_price": "523", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7748" + }, + { + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7749" + }, + { + "shop_price": "5", + "examine": "A foul smelling brew.", + "grand_exchange_price": "14", + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7750" + }, + { + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7751" + }, + { + "shop_price": "2", + "examine": "A glass of Cider", + "grand_exchange_price": "1539", + "durability": null, + "name": "Cider", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7752" + }, + { + "durability": null, + "name": "Cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7753" + }, + { + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "2371", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7754" + }, + { + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7755" + }, + { + "durability": null, + "name": "Paintbrush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7756", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Paintbrush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7757" + }, + { + "examine": "A decent-enough weapon gone rusty.", + "durability": null, + "name": "Rusty sword", + "weight": "2", + "archery_ticket_price": "0", + "id": "7758", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "examine": "Nice bit of crafting.", + "grand_exchange_price": "3140", + "durability": null, + "name": "Toy soldier", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7759" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3140", + "durability": null, + "name": "Toy soldier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7760" + }, + { + "examine": "Nice bit of crafting.", + "grand_exchange_price": "3123", + "durability": null, + "name": "Toy soldier (wound)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7761" + }, + { + "durability": null, + "name": "Toy soldier (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7762" + }, + { + "ge_buy_limit": "100", + "examine": "In inventory: Nice bit of crafting! When released: Nice bit of crafting that...", + "grand_exchange_price": "3236", + "durability": null, + "name": "Toy doll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7763" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3236", + "durability": null, + "name": "Toy doll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7764" + }, + { + "examine": "In inventory: Nice bit of crafting! When released: Nice bit of crafting that...", + "grand_exchange_price": "3289", + "durability": null, + "name": "Toy doll (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7765" + }, + { + "durability": null, + "name": "Toy doll (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7766" + }, + { + "shop_price": "1705", + "ge_buy_limit": "100", + "examine": "Nice bit of crafting!", + "grand_exchange_price": "3384", + "durability": null, + "name": "Toy mouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7767" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3384", + "durability": null, + "name": "Toy mouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7768" + }, + { + "shop_price": "1705", + "examine": "Nice bit of crafting!", + "grand_exchange_price": "3484", + "durability": null, + "name": "Toy mouse (wound)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7769" + }, + { + "durability": null, + "name": "Toy mouse (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7770" + }, + { + "ge_buy_limit": "100", + "examine": "Inventory: Nice bit of crafting!As a follower: An amazing piece of crafting.", + "grand_exchange_price": "2930", + "durability": null, + "name": "Clockwork cat", + "tradeable": "true", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7771" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2930", + "durability": null, + "name": "Clockwork cat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7772" + }, + { + "examine": "I can use this to make a lyre.", + "durability": null, + "name": "Branch", + "weight": "1", + "archery_ticket_price": "0", + "id": "7773", + "equipment_slot": "3" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7774" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7775" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7776" + }, + { + "examine": "A long section of vine made up of lots of shorter sections.", + "durability": null, + "name": "Long vine", + "archery_ticket_price": "0", + "id": "7777" + }, + { + "examine": "A short section of vines.", + "durability": null, + "name": "Short vine", + "archery_ticket_price": "0", + "id": "7778" + }, + { + "examine": "A tome of learning that focuses on the Fishing skill.", + "durability": null, + "name": "Fishing tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7779" + }, + { + "examine": "A tome of learning that focuses on the Fishing skill.", + "durability": null, + "name": "Fishing tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7780" + }, + { + "examine": "A tome of learning that focuses on the Fishing skill.", + "durability": null, + "name": "Fishing tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7781" + }, + { + "examine": "A tome of learning that focuses on Agility.", + "durability": null, + "name": "Agility tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7782" + }, + { + "examine": "A tome of learning that focuses on Agility.", + "durability": null, + "name": "Agility tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7783" + }, + { + "examine": "A tome of learning that focuses on Agility.", + "durability": null, + "name": "Agility tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7784" + }, + { + "examine": "A tome of learning that focuses on the Thieving skill.", + "durability": null, + "name": "Thieving tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7785" + }, + { + "examine": "A tome of learning that focuses on the Thieving skill.", + "durability": null, + "name": "Thieving tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7786" + }, + { + "examine": "A tome of learning that focuses on the Thieving skill.", + "durability": null, + "name": "Thieving tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7787" + }, + { + "examine": "A tome of learning which focuses on the Slayer skill.", + "durability": null, + "name": "Slayer tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7788" + }, + { + "examine": "A tome of learning which focuses on the Slayer skill.", + "durability": null, + "name": "Slayer tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7789" + }, + { + "examine": "A tome of learning which focuses on the Slayer skill.", + "durability": null, + "name": "Slayer tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7790" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Mining skill.", + "durability": null, + "name": "Mining tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7791" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Mining skill.", + "durability": null, + "name": "Mining tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7792" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Mining skill.", + "durability": null, + "name": "Mining tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7793" + }, + { + "examine": "A tome of learning that focuses on Firemaking.", + "durability": null, + "name": "Firemaking tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7794" + }, + { + "examine": "A tome of learning that focuses on Firemaking.", + "durability": null, + "name": "Firemaking tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7795" + }, + { + "examine": "A tome of learning that focuses on Firemaking.", + "durability": null, + "name": "Firemaking tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7796" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Woodcutting skill.", + "durability": null, + "name": "Woodcutting tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7797" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Woodcutting skill.", + "durability": null, + "name": "Woodcutting tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7798" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Woodcutting skill.", + "durability": null, + "name": "Woodcutting tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7799" + }, + { + "examine": "A shell from a giant snail.", + "durability": null, + "name": "Snail shell", + "weight": "7", + "archery_ticket_price": "0", + "id": "7800" + }, + { + "ge_buy_limit": "10000", + "examine": "Scaly but not slimy!", + "grand_exchange_price": "1618", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7801" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1618", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7802" + }, + { + "shop_price": "100", + "examine": "A non-magical copy of the make-over mage's amulet.", + "durability": null, + "name": "Yin yang amulet", + "archery_ticket_price": "0", + "id": "7803", + "equipment_slot": "2" + }, + { + "turn90cw_anim": "1207", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Picture", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7804", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7805" + }, + { + "attack_anims": "381,390,390,390", + "examine": "A heavy duty sword.", + "durability": null, + "name": "Anger sword", + "archery_ticket_price": "0", + "attack_speed": "3", + "id": "7806", + "weapon_interface": "5", + "bonuses": "20,20,20,0,0,0,2,1,0,0,0,5,0,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "attack_anims": "395,395,401,395", + "examine": "A heavy duty axe.", + "durability": null, + "attack_audios": "2498,2498,2497,2498", + "name": "Anger battleaxe", + "archery_ticket_price": "0", + "id": "7807", + "weapon_interface": "2", + "bonuses": "20,20,20,0,0,0,0,0,0,-1,0,13,0,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "attack_anims": "390,390,381,390", + "examine": "A heavy duty mace.", + "durability": null, + "name": "Anger mace", + "archery_ticket_price": "0", + "id": "7808", + "weapon_interface": "8", + "bonuses": "20,20,20,0,0,0,0,0,0,0,0,5,1,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "turn90cw_anim": "1207", + "examine": "A heavy duty spear.", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "stand_anim": "813", + "name": "Anger spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7809", + "stand_turn_anim": "1209", + "bonuses": "20,20,20,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "shop_price": "1", + "examine": "This wine clearly did not age well.", + "durability": null, + "name": "Jug of vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7810" + }, + { + "examine": "Well, this pot is certainly full of vinegar and no mistake.", + "durability": null, + "name": "Pot of vinegar", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "7811" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Goblin skull", + "archery_ticket_price": "0", + "id": "7812" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7813" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Goblin skull", + "archery_ticket_price": "0", + "id": "7814" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bear ribs", + "archery_ticket_price": "0", + "id": "7815" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7816" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bear ribs", + "archery_ticket_price": "0", + "id": "7817" + }, + { + "examine": "Unpolished: This needs a good polish.", + "durability": null, + "name": "Ram skull", + "archery_ticket_price": "0", + "id": "7818" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7819" + }, + { + "examine": "Unpolished: This needs a good polish.", + "durability": null, + "name": "Ram skull", + "archery_ticket_price": "0", + "id": "7820" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Unicorn bone", + "archery_ticket_price": "0", + "id": "7821" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7822" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Unicorn bone", + "archery_ticket_price": "0", + "id": "7823" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant rat bone", + "archery_ticket_price": "0", + "id": "7824" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7825" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant rat bone", + "archery_ticket_price": "0", + "id": "7826" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7827" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7828" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7829" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Wolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7830" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7831" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Wolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7832" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7833" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7834" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7835" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rat bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7836" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7837" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rat bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7838" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Baby dragon bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7839" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7840" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Baby dragon bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7841" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ogre ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7842" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7843" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ogre ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7844" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7845" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7846" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7847" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7848" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7849" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7850" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Mogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7851" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7852" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Mogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7853" + }, + { + "examine": "This needs a good polish./ This belongs in a museum!", + "durability": null, + "name": "Monkey paw", + "archery_ticket_price": "0", + "id": "7854" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7855" + }, + { + "examine": "This needs a good polish./ This belongs in a museum!", + "durability": null, + "name": "Monkey paw", + "archery_ticket_price": "0", + "id": "7856" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Dagannoth ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7857" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7858" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Dagannoth ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7859" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Snake spine", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7860" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7861" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Snake spine", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7862" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zombie bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7863" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7864" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zombie bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7865" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Werewolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7866" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7867" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Werewolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7868" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Moss giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7869" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7870" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Moss giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7871" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Fire giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7872" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7873" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Fire giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7874" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ice giant ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7875" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7876" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ice giant ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7877" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Terrorbird wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7878" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7879" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Terrorbird wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7880" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ghoul bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7881" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7882" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ghoul bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7883" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Troll bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7884" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7885" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Troll bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7886" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Seagull wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7887" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7888" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Seagull wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7889" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Undead cow ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7890" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7891" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Undead cow ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7892" + }, + { + "shop_price": "160", + "examine": "Unpolished: This needs a good polish. Polished: This bone belongs in a museum!", + "durability": null, + "name": "Experiment bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7893" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7894" + }, + { + "shop_price": "160", + "examine": "Unpolished: This needs a good polish. Polished: This bone belongs in a museum!", + "durability": null, + "name": "Experiment bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7895" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rabbit bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7896" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7897" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rabbit bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7898" + }, + { + "examine": "Dirty:This bone needs a good polish.", + "durability": null, + "name": "Basilisk bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7899" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7900" + }, + { + "examine": "Dirty:This bone needs a good polish.", + "durability": null, + "name": "Basilisk bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7901" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Desert lizard bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7902" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7903" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Desert lizard bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7904" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Cave goblin skull", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7905" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7906" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Cave goblin skull", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7907" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Big frog leg", + "weight": "1", + "archery_ticket_price": "0", + "id": "7908" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7909" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Big frog leg", + "weight": "1", + "archery_ticket_price": "0", + "id": "7910" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Vulture wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7911" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7912" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Vulture wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7913" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jackal bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7914" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7915" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jackal bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7916" + }, + { + "destroy_message": "The ram skull helm looks like it will fall apart if you drop it. You would have to go to the Odd Old Man for a replacement.", + "examine": "Makes me feel baaad to the bone.", + "durability": null, + "name": "Ram skull helm", + "weight": "3", + "archery_ticket_price": "0", + "id": "7917", + "bonuses": "0,0,0,0,-2,19,21,16,0,19,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "The bonesack looks like it will fall apart if you drop it. You would have to go to the Odd Old Man for a replacement.", + "examine": "The Bonesack is a little old item that protects like leather.", + "durability": null, + "name": "Bonesack", + "weight": "9", + "archery_ticket_price": "0", + "id": "7918", + "bonuses": "0,0,0,0,0,4,4,4,4,4,4,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "500", + "examine": "A very good vintage.", + "durability": null, + "name": "Bottle of wine", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7919" + }, + { + "durability": null, + "name": "Bottle of wine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7920" + }, + { + "examine": "This one has clearly been taken down and passed around.", + "durability": null, + "name": "Empty wine bottle", + "weight": "1", + "archery_ticket_price": "0", + "id": "7921" + }, + { + "examine": "The money off voucher has expired.", + "durability": null, + "name": "Al kharid flyer", + "archery_ticket_price": "0", + "id": "7922" + }, + { + "examine": "A ring given to you by the Easter Bunny.", + "durability": null, + "name": "Easter ring", + "archery_ticket_price": "0", + "id": "7927" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7928" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7929" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7930" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7931" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7932" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7933" + }, + { + "shop_price": "390", + "ge_buy_limit": "100", + "examine": "A field ration to help your wounds go away.", + "grand_exchange_price": "171", + "durability": null, + "name": "Field ration", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7934" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "171", + "durability": null, + "name": "Field ration", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7935" + }, + { + "shop_price": "1", + "ge_buy_limit": "25000", + "examine": "An uncharged Rune Stone of extra capability.", + "grand_exchange_price": "180", + "durability": null, + "name": "Pure essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7936" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "109", + "durability": null, + "name": "Pure essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7937" + }, + { + "ge_buy_limit": "5000", + "examine": "A word in your shell-like.", + "grand_exchange_price": "13600", + "durability": null, + "name": "Tortoise shell", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "7939" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13600", + "durability": null, + "name": "Tortoise shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7940" + }, + { + "examine": "A sturdy sheet of iron.", + "durability": null, + "name": "Iron sheet", + "weight": "1.75", + "archery_ticket_price": "0", + "id": "7941" + }, + { + "examine": "Perfect for storing. Not so good for eating.", + "durability": null, + "name": "Fresh monkfish", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "7942" + }, + { + "examine": "Perfect for storing. Not so good for eating.", + "durability": null, + "name": "Fresh monkfish", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "7943" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this./Freshly caught. Needs cooking. (Fresh Monkfish)", + "grand_exchange_price": "618", + "durability": null, + "name": "Raw monkfish", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7944" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "618", + "durability": null, + "name": "Raw monkfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7945" + }, + { + "ge_buy_limit": "10000", + "examine": "A tasty fish.", + "grand_exchange_price": "617", + "durability": null, + "name": "Monkfish", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7946" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "617", + "durability": null, + "name": "Monkfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7947" + }, + { + "durability": null, + "name": "Burnt monkfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7949" + }, + { + "examine": "A highly portable army of skeletal magic.", + "durability": null, + "name": "Bone seeds", + "archery_ticket_price": "0", + "id": "7950" + }, + { + "shop_price": "160", + "examine": "A book taken from the desk of Herman Caranos.", + "durability": null, + "name": "Herman's book", + "tradeable": "false", + "destroy": "true", + "weight": "0.09", + "archery_ticket_price": "0", + "id": "7951" + }, + { + "examine": "Useless without the head.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7952", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7953" + }, + { + "durability": null, + "name": "Burnt shrimp", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7955" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7956" + }, + { + "shop_price": "2", + "examine": "A mostly clean apron.", + "grand_exchange_price": "169", + "durability": null, + "name": "White apron", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "7957" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A prop for holding up a tunnel roof.", + "durability": null, + "name": "Mining prop", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7958" + }, + { + "destroy_message": "You can get your box back by talking to the guard by the dungeon entrance in Etceteria.", + "examine": "A box full of stolen Etceterian items.", + "durability": null, + "name": "Heavy box", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7959" + }, + { + "examine": "It says 'To the dungeons' on the side.", + "durability": null, + "name": "Empty box", + "archery_ticket_price": "0", + "id": "7960" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7961" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7962" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7963" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7964" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7965" + }, + { + "examine": "A dwarf-made coal engine. It looks very sturdy.", + "durability": null, + "name": "Engine", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7967" + }, + { + "examine": "A beam with a pulley attached.", + "durability": null, + "name": "Pulley beam", + "archery_ticket_price": "0", + "id": "7969" + }, + { + "examine": "A long beam with a pulley attached.", + "durability": null, + "name": "Long pulley beam", + "archery_ticket_price": "0", + "id": "7970" + }, + { + "examine": "A very long beam with a pulley attached.", + "durability": null, + "name": "Longer pulley beam", + "archery_ticket_price": "0", + "id": "7971" + }, + { + "examine": "The manual for an AMCE Lift-In-A-Box.", + "durability": null, + "name": "Lift manual", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7972" + }, + { + "examine": "A wooden beam.", + "durability": null, + "name": "Beam", + "archery_ticket_price": "0", + "id": "7973" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "7975" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Cockatrice head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7976" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Basilisk head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7977" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kurask head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7978" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Abyssal head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7979" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kbd heads", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7980" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kq head", + "archery_ticket_price": "0", + "id": "7981" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "7982" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Cockatrice head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7983" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Basilisk head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7984" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kurask head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7985" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Abyssal head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7986" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kbd heads", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7987" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kq head", + "archery_ticket_price": "0", + "id": "7988" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big bass", + "weight": "6", + "archery_ticket_price": "0", + "id": "7989" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big bass", + "weight": "6", + "archery_ticket_price": "0", + "id": "7990" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big swordfish", + "archery_ticket_price": "0", + "id": "7991" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big swordfish", + "archery_ticket_price": "0", + "id": "7992" + }, + { + "examine": "Its a monster! I should get this stuffed!", + "durability": null, + "name": "Big shark", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "7993" + }, + { + "examine": "Its a monster! I should get this stuffed!", + "durability": null, + "name": "Big shark", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "7994" + }, + { + "examine": "A portrait of King Arthur.", + "durability": null, + "name": "Arthur portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7995" + }, + { + "shop_price": "1000", + "examine": "A portrait of Elena.", + "durability": null, + "name": "Elena portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7996" + }, + { + "examine": "A painting of the staute of King Alvis of Keldagrim", + "durability": null, + "name": "Keldagrim portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7997" + }, + { + "examine": "A portrait of Prince Brand and Princess Astrid of Miscellania.", + "durability": null, + "name": "Misc. portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7998" + }, + { + "shop_price": "2000", + "examine": "The exotic land of the Elves.", + "durability": null, + "name": "Isafdar painting", + "archery_ticket_price": "0", + "id": "8000" + }, + { + "shop_price": "2000", + "examine": "The tropical coast of karamja.", + "durability": null, + "name": "Karamja painting", + "archery_ticket_price": "0", + "id": "8001" + }, + { + "shop_price": "2000", + "examine": "Oxtable's famous painting of the Lumbridge water mill.", + "durability": null, + "name": "Lumbridge painting", + "weight": "1", + "archery_ticket_price": "0", + "id": "8002" + }, + { + "shop_price": "2000", + "examine": "A painting of the spooky forests of morytania.", + "durability": null, + "name": "Morytania painting", + "weight": "1", + "archery_ticket_price": "0", + "id": "8003" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1341", + "durability": null, + "name": "Varrock teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8007" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1371", + "durability": null, + "name": "Lumbridge teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8008" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1414", + "durability": null, + "name": "Falador teleport", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8009" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1369", + "durability": null, + "name": "Camelot teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8010" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1511", + "durability": null, + "name": "Ardougne teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8011" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1025", + "durability": null, + "name": "Watchtower t'port", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8012" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1426", + "durability": null, + "name": "Teleport to house", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8013" + }, + { + "ge_buy_limit": "200", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "360", + "durability": null, + "name": "Bones to bananas", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8014" + }, + { + "ge_buy_limit": "200", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "620", + "durability": null, + "name": "Bones to peaches", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8015" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "343", + "durability": null, + "name": "Enchant sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8016" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "409", + "durability": null, + "name": "Enchant emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8017" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "207", + "durability": null, + "name": "Enchant ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8018" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "326", + "durability": null, + "name": "Enchant diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8019" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "250", + "durability": null, + "name": "Enchant dragonstn.", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8020" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "31", + "durability": null, + "name": "Enchant onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8021" + }, + { + "grand_exchange_price": "1918", + "durability": null, + "name": "Wooden bed", + "archery_ticket_price": "0", + "id": "8031" + }, + { + "grand_exchange_price": "1631", + "durability": null, + "name": "Oak bed", + "archery_ticket_price": "0", + "id": "8032" + }, + { + "grand_exchange_price": "1388", + "durability": null, + "name": "Large oak bed", + "archery_ticket_price": "0", + "id": "8033" + }, + { + "grand_exchange_price": "1376", + "durability": null, + "name": "Teak bed", + "archery_ticket_price": "0", + "id": "8034" + }, + { + "grand_exchange_price": "1996", + "durability": null, + "name": "Large teak bed", + "archery_ticket_price": "0", + "id": "8035" + }, + { + "grand_exchange_price": "1314", + "durability": null, + "name": "4-poster", + "archery_ticket_price": "0", + "id": "8036" + }, + { + "grand_exchange_price": "274779", + "durability": null, + "name": "Gilded 4-poster", + "archery_ticket_price": "0", + "id": "8037" + }, + { + "grand_exchange_price": "18", + "durability": null, + "name": "Shoe box", + "archery_ticket_price": "0", + "id": "8038" + }, + { + "grand_exchange_price": "42", + "durability": null, + "name": "Oak drawers", + "archery_ticket_price": "0", + "id": "8039" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak wardrobe", + "archery_ticket_price": "0", + "id": "8040" + }, + { + "grand_exchange_price": "126", + "durability": null, + "name": "Teak drawers", + "archery_ticket_price": "0", + "id": "8041" + }, + { + "grand_exchange_price": "12", + "durability": null, + "name": "Teak wardrobe", + "archery_ticket_price": "0", + "id": "8042" + }, + { + "grand_exchange_price": "102", + "durability": null, + "name": "Mahogany 'drobe", + "archery_ticket_price": "0", + "id": "8043" + }, + { + "grand_exchange_price": "139452", + "durability": null, + "name": "Gilded wardrobe", + "archery_ticket_price": "0", + "id": "8044" + }, + { + "grand_exchange_price": "510", + "durability": null, + "name": "Shaving stand", + "archery_ticket_price": "0", + "id": "8045" + }, + { + "grand_exchange_price": "449", + "durability": null, + "name": "Oak shaving stand", + "archery_ticket_price": "0", + "id": "8046" + }, + { + "grand_exchange_price": "147", + "durability": null, + "name": "Oak dresser", + "archery_ticket_price": "0", + "id": "8047" + }, + { + "grand_exchange_price": "478", + "durability": null, + "name": "Teak dresser", + "archery_ticket_price": "0", + "id": "8048" + }, + { + "grand_exchange_price": "456", + "durability": null, + "name": "Fancy teak dresser", + "archery_ticket_price": "0", + "id": "8049" + }, + { + "grand_exchange_price": "404", + "durability": null, + "name": "Mahogany dresser", + "archery_ticket_price": "0", + "id": "8050" + }, + { + "grand_exchange_price": "140594", + "durability": null, + "name": "Gilded dresser", + "archery_ticket_price": "0", + "id": "8051" + }, + { + "grand_exchange_price": "367", + "durability": null, + "name": "Oak clock", + "archery_ticket_price": "0", + "id": "8052" + }, + { + "grand_exchange_price": "552", + "durability": null, + "name": "Teak clock", + "archery_ticket_price": "0", + "id": "8053" + }, + { + "grand_exchange_price": "154310", + "durability": null, + "name": "Gilded clock", + "archery_ticket_price": "0", + "id": "8054" + }, + { + "examine": "When unanimated: A dusty old suit of armour. When animated: Aaargh, it's alive!", + "durability": null, + "name": "Suit of armour", + "archery_ticket_price": "0", + "id": "8085" + }, + { + "grand_exchange_price": "13", + "durability": null, + "name": "Wooden bench", + "archery_ticket_price": "0", + "id": "8108" + }, + { + "grand_exchange_price": "131", + "durability": null, + "name": "Oak bench", + "archery_ticket_price": "0", + "id": "8109" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak bench", + "archery_ticket_price": "0", + "id": "8110" + }, + { + "grand_exchange_price": "17", + "durability": null, + "name": "Teak dining bench", + "archery_ticket_price": "0", + "id": "8111" + }, + { + "grand_exchange_price": "2", + "durability": null, + "name": "Carved teak bench", + "archery_ticket_price": "0", + "id": "8112" + }, + { + "grand_exchange_price": "145", + "durability": null, + "name": "Mahogany bench", + "archery_ticket_price": "0", + "id": "8113" + }, + { + "grand_exchange_price": "531526", + "durability": null, + "name": "Gilded bench", + "archery_ticket_price": "0", + "id": "8114" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Wood dining table", + "archery_ticket_price": "0", + "id": "8115" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak dining table", + "archery_ticket_price": "0", + "id": "8116" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak table", + "archery_ticket_price": "0", + "id": "8117" + }, + { + "grand_exchange_price": "2", + "durability": null, + "name": "Teak table", + "archery_ticket_price": "0", + "id": "8118" + }, + { + "grand_exchange_price": "249", + "durability": null, + "name": "Carved teak table", + "archery_ticket_price": "0", + "id": "8119" + }, + { + "grand_exchange_price": "497", + "durability": null, + "name": "Mahogany table", + "archery_ticket_price": "0", + "id": "8120" + }, + { + "grand_exchange_price": "394177", + "durability": null, + "name": "Opulent table", + "archery_ticket_price": "0", + "id": "8121" + }, + { + "shop_price": "24", + "examine": "A candle.", + "grand_exchange_price": "104", + "durability": null, + "name": "Candles", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8128" + }, + { + "durability": null, + "name": "Skeleton guard", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8131" + }, + { + "examine": "He doesn't seem pleased to see me./Beware of the dog! (Construction)", + "durability": null, + "name": "Guard dog", + "archery_ticket_price": "0", + "id": "8132" + }, + { + "examine": "He doesn't look very welcoming.", + "durability": null, + "name": "Hobgoblin guard", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8133" + }, + { + "examine": "Young but still dangerous.", + "durability": null, + "name": "Baby red dragon", + "archery_ticket_price": "0", + "id": "8134" + }, + { + "examine": "No spider could grow that big! It's unrealistic!", + "durability": null, + "name": "Huge spider", + "archery_ticket_price": "0", + "id": "8135" + }, + { + "examine": "(Level 122)", + "durability": null, + "name": "Hellhound", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8137" + }, + { + "examine": "I don't think insect repellent will work...", + "durability": null, + "name": "Kalphite soldier", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8139" + }, + { + "examine": "The Tok-Xil fires deadly spines out of its arm, projected by its own heat.", + "durability": null, + "name": "Tok-xil", + "archery_ticket_price": "0", + "id": "8140" + }, + { + "examine": "Its scales seem to be made of steel.", + "durability": null, + "name": "Steel dragon", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8142" + }, + { + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Thorny hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8203" + }, + { + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Nice hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8204" + }, + { + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Small box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8205" + }, + { + "shop_price": "20000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Topiary hedge", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8206" + }, + { + "shop_price": "25000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Fancy hedge", + "weight": "10", + "archery_ticket_price": "0", + "id": "8207" + }, + { + "shop_price": "50000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Tall fancy hedge", + "archery_ticket_price": "0", + "id": "8208" + }, + { + "examine": "Some rosemary.", + "grand_exchange_price": "20", + "durability": null, + "name": "Rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8210" + }, + { + "examine": "A bunch of marigolds.", + "grand_exchange_price": "3862", + "durability": null, + "name": "Marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8214" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Beer barrel", + "archery_ticket_price": "0", + "id": "8239" + }, + { + "grand_exchange_price": "16860", + "durability": null, + "name": "Cider barrel", + "archery_ticket_price": "0", + "id": "8240" + }, + { + "shop_price": "3", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "131", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8241" + }, + { + "shop_price": "2", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "569", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8242" + }, + { + "shop_price": "2", + "examine": "A glass of bitter.", + "grand_exchange_price": "523", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8243" + }, + { + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "2371", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8244" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Wood kitchen table", + "archery_ticket_price": "0", + "id": "8246" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak kitchen table", + "archery_ticket_price": "0", + "id": "8247" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Teak kitchen table", + "archery_ticket_price": "0", + "id": "8248" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8260" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Cockatrice head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8261" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Basilisk head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8262" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kurask head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8263" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Abyssal head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8264" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kbd heads", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8265" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kq head", + "archery_ticket_price": "0", + "id": "8266" + }, + { + "durability": null, + "name": "Runite armour", + "archery_ticket_price": "0", + "id": "8272", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "examine": "The magical sword 'Silverlight'. / The magical sword 'Silverlight', stained black with mushroom ink. (during Shadow of the Storm)", + "durability": null, + "name": "Silverlight", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "8279", + "bonuses": "9,14,-2,0,0,0,3,2,1,0,0,12,0,0,0" + }, + { + "examine": "This used to belong to King Arthur.", + "durability": null, + "name": "Excalibur", + "weight": "2.2", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "8280", + "bonuses": "20,29,-2,0,0,0,3,2,1,0,0,25,0,0,0" + }, + { + "examine": "The magical sword Silverlight, enhanced with the blood of Agrith-Naar.", + "durability": null, + "name": "Darklight", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "8281", + "bonuses": "10,16,-2,0,0,0,3,2,2,0,0,13,0,0,0" + }, + { + "examine": "This provides partial protection from dragon-breath attacks.", + "grand_exchange_price": "305", + "durability": null, + "name": "Anti-dragon shield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8282", + "bonuses": "0,0,0,0,0,7,9,8,2,8,0,0,0,0,0" + }, + { + "examine": "A very powerful dragonstone amulet.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8283", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,0,3,0" + }, + { + "shop_price": "450", + "examine": "The cape worn by members of the Legends Guild.", + "durability": null, + "name": "Cape of legends", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "8284", + "bonuses": "0,0,0,0,0,7,7,7,7,7,7,0,0,0,0" + }, + { + "examine": "Legendary King of the Britons.", + "durability": null, + "name": "King arthur", + "archery_ticket_price": "0", + "id": "8285" + }, + { + "examine": "She looks concerned.", + "durability": null, + "name": "Elena", + "archery_ticket_price": "0", + "id": "8286" + }, + { + "examine": "It's full of pent-up aggression.", + "durability": null, + "name": "Rocnar", + "archery_ticket_price": "0", + "id": "8305" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Crude wooden chair", + "archery_ticket_price": "0", + "id": "8309" + }, + { + "grand_exchange_price": "50", + "durability": null, + "name": "Wooden chair", + "archery_ticket_price": "0", + "id": "8310" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Rocking chair", + "archery_ticket_price": "0", + "id": "8311" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak chair", + "archery_ticket_price": "0", + "id": "8312" + }, + { + "grand_exchange_price": "2", + "durability": null, + "name": "Oak armchair", + "archery_ticket_price": "0", + "id": "8313" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Teak armchair", + "archery_ticket_price": "0", + "id": "8314" + }, + { + "grand_exchange_price": "8", + "durability": null, + "name": "Mahogany armchair", + "archery_ticket_price": "0", + "id": "8315" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden bookcase", + "archery_ticket_price": "0", + "id": "8319" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak bookcase", + "archery_ticket_price": "0", + "id": "8320" + }, + { + "grand_exchange_price": "52", + "durability": null, + "name": "Mahogany b'kcase", + "archery_ticket_price": "0", + "id": "8321" + }, + { + "requirements": "{5,22}", + "shop_price": "1000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged dead tree", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8417" + }, + { + "durability": null, + "name": "Bagged dead tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8418" + }, + { + "requirements": "{10,22}", + "shop_price": "2000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged nice tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8419" + }, + { + "durability": null, + "name": "Bagged nice tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8420" + }, + { + "requirements": "{15,22}", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged oak tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8421" + }, + { + "durability": null, + "name": "Bagged oak tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8422" + }, + { + "requirements": "{22,30}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged willow tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8423" + }, + { + "durability": null, + "name": "Bagged willow tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8424" + }, + { + "requirements": "{22,45}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged maple tree", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8425" + }, + { + "durability": null, + "name": "Bagged maple tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8426" + }, + { + "requirements": "{22,60}", + "shop_price": "20000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged yew tree", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8427" + }, + { + "durability": null, + "name": "Bagged yew tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8428" + }, + { + "requirements": "{22,75}", + "shop_price": "50000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged magic tree", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8429" + }, + { + "durability": null, + "name": "Bagged magic tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8430" + }, + { + "shop_price": "1000", + "ge_buy_limit": "5000", + "examine": "You can plant this in your garden.", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bagged plant 1", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8431" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bagged plant 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8432" + }, + { + "requirements": "{6,22}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged plant 2", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8433" + }, + { + "durability": null, + "name": "Bagged plant 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8434" + }, + { + "requirements": "{12,22}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged plant 3", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8435" + }, + { + "durability": null, + "name": "Bagged plant 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8436" + }, + { + "requirements": "{22,56}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Thorny hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8437" + }, + { + "durability": null, + "name": "Thorny hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8438" + }, + { + "requirements": "{22,60}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Nice hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8439" + }, + { + "durability": null, + "name": "Nice hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8440" + }, + { + "requirements": "{22,64}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Small box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8441" + }, + { + "durability": null, + "name": "Small box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8442" + }, + { + "requirements": "{22,68}", + "shop_price": "20000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Topiary hedge", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8443" + }, + { + "durability": null, + "name": "Topiary hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8444" + }, + { + "requirements": "{22,72}", + "shop_price": "25000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Fancy hedge", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8445" + }, + { + "durability": null, + "name": "Fancy hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8446" + }, + { + "requirements": "{22,76}", + "shop_price": "50000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Tall fancy hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8447" + }, + { + "durability": null, + "name": "Tall fancy hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8448" + }, + { + "requirements": "{22,80}", + "shop_price": "100000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Tall box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8449" + }, + { + "durability": null, + "name": "Tall box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8450" + }, + { + "requirements": "{22,66}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8451" + }, + { + "durability": null, + "name": "Bagged rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8452" + }, + { + "requirements": "{22,71}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged daffodils", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8453" + }, + { + "durability": null, + "name": "Bagged daffodils", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8454" + }, + { + "requirements": "{22,76}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged bluebells", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8455" + }, + { + "durability": null, + "name": "Bagged bluebells", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8456" + }, + { + "requirements": "{22,66}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged sunflower", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8457" + }, + { + "durability": null, + "name": "Bagged sunflower", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8458" + }, + { + "requirements": "{22,71}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8459" + }, + { + "durability": null, + "name": "Bagged marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8460" + }, + { + "requirements": "{22,76}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged roses", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8461" + }, + { + "durability": null, + "name": "Bagged roses", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8462" + }, + { + "shop_price": "160", + "examine": "How to build a house.", + "durability": null, + "name": "Construction guide", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8463" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8464", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8466", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8468", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8470", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8472", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8474", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8476", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8478", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8480", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8482", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8484", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8486", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8488", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8490", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8492", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8494", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble crude chair.", + "durability": null, + "name": "Crude wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8496" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Crude wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8497" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "53", + "examine": "A ready-to-assemble wooden chair.", + "durability": null, + "name": "Wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8498" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "53", + "durability": null, + "name": "Wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8499" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble rocking chair.", + "durability": null, + "name": "Rocking chair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8500" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Rocking chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8501" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "examine": "A ready-to-assemble oak chair.", + "durability": null, + "name": "Oak chair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8502" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Oak chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8503" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak armchair.", + "durability": null, + "name": "Oak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8504" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8505" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble teak armchair.", + "durability": null, + "name": "Teak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8506" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Teak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8507" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "examine": "A ready-to-assemble mahogany armchair.", + "durability": null, + "name": "Mahogany armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8508" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Mahogany armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8509" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble wooden bookcase.", + "durability": null, + "name": "Wooden bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8510" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8511" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak bookcase.", + "durability": null, + "name": "Oak bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8512" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8513" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "46", + "examine": "A ready-to-assemble mahogany bookcase.", + "durability": null, + "name": "Mahogany b'kcase", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8514" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "46", + "durability": null, + "name": "Mahogany b'kcase", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8515" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble beer barrel.", + "durability": null, + "name": "Beer barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8516" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Beer barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8517" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16900", + "examine": "A ready-to-assemble cider barrel.", + "durability": null, + "name": "Cider barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8518" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16900", + "durability": null, + "name": "Cider barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8519" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Asgarnian Ale.", + "grand_exchange_price": "4586", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8520" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4586", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8521" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Greenman's Ale.", + "grand_exchange_price": "8875", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8522" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8875", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8523" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Dragon Bitter.", + "grand_exchange_price": "10300", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8524" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10300", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8525" + }, + { + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Chef's Delight.", + "grand_exchange_price": "48800", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8526" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48800", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8527" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble wooden kitchen table.", + "durability": null, + "name": "Wood kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8528" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Wood kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8529" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak kitchen table.", + "durability": null, + "name": "Oak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8530" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8531" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble teak kitchen table.", + "durability": null, + "name": "Teak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8532" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Teak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8533" + }, + { + "durability": null, + "name": "Oak lectern", + "archery_ticket_price": "0", + "id": "8535" + }, + { + "durability": null, + "name": "Eagle lectern", + "archery_ticket_price": "0", + "id": "8537" + }, + { + "durability": null, + "name": "Demon lectern", + "archery_ticket_price": "0", + "id": "8539" + }, + { + "durability": null, + "name": "Teak eagle lectern", + "archery_ticket_price": "0", + "id": "8541" + }, + { + "durability": null, + "name": "Teak demon lectern", + "archery_ticket_price": "0", + "id": "8543" + }, + { + "durability": null, + "name": "Mahogany eagle", + "archery_ticket_price": "0", + "id": "8545" + }, + { + "durability": null, + "name": "Mahogany demon", + "archery_ticket_price": "0", + "id": "8547" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble wooden dining table.", + "durability": null, + "name": "Wood dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8548" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Wood dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8549" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak dining table.", + "durability": null, + "name": "Oak dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8550" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8551" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble carved oak dining table.", + "durability": null, + "name": "Carved oak table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8552" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8553" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "examine": "A ready-to-assemble teak dining table.", + "durability": null, + "name": "Teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8554" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8555" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "245", + "examine": "A ready-to-assemble carved teak dining table.", + "durability": null, + "name": "Carved teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8556" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "245", + "durability": null, + "name": "Carved teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8557" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "575", + "examine": "A ready-to-assemble mahogany dining table.", + "durability": null, + "name": "Mahogany table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8558" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "575", + "durability": null, + "name": "Mahogany table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8559" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "379100", + "examine": "A ready-to-assemble opulent dining table.", + "durability": null, + "name": "Opulent table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8560" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "379100", + "durability": null, + "name": "Opulent table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8561" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "examine": "A ready-to-assemble wooden dining bench.", + "durability": null, + "name": "Wooden bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8562" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "durability": null, + "name": "Wooden bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8563" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137", + "examine": "A ready-to-assemble oak dining bench.", + "durability": null, + "name": "Oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8564" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137", + "durability": null, + "name": "Oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8565" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble carved oak dining bench.", + "durability": null, + "name": "Carved oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8566" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8567" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "examine": "A ready-to-assemble teak dining bench.", + "durability": null, + "name": "Teak dining bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8568" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Teak dining bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8569" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "examine": "A ready-to-assemble carved teak dining bench.", + "durability": null, + "name": "Carved teak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8570" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Carved teak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8571" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "126", + "examine": "A ready-to-assemble mahogany dining bench.", + "durability": null, + "name": "Mahogany bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8572" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "126", + "durability": null, + "name": "Mahogany bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8573" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "517600", + "examine": "A ready-to-assemble gilded mahogany dining bench.", + "durability": null, + "name": "Gilded bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8574" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "517600", + "durability": null, + "name": "Gilded bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8575" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1974", + "examine": "A ready-to-assemble wooden bed.", + "durability": null, + "name": "Wooden bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8576" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1974", + "durability": null, + "name": "Wooden bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8577" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1775", + "examine": "A ready-to-assemble oak bed.", + "durability": null, + "name": "Oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8578" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1775", + "durability": null, + "name": "Oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8579" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1433", + "examine": "A ready-to-assemble large oak bed.", + "durability": null, + "name": "Large oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8580" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1433", + "durability": null, + "name": "Large oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8581" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1442", + "examine": "A ready-to-assemble teak bed.", + "durability": null, + "name": "Teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8582" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1442", + "durability": null, + "name": "Teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8583" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2030", + "examine": "A ready-to-assemble large teak bed.", + "durability": null, + "name": "Large teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8584" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2030", + "durability": null, + "name": "Large teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8585" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1401", + "examine": "A ready-to-assemble four-poster bed.", + "durability": null, + "name": "4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8586" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1401", + "durability": null, + "name": "4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8587" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "286700", + "examine": "A ready-to-assemble gilded four-poster bed.", + "durability": null, + "name": "Gilded 4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8588" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "286700", + "durability": null, + "name": "Gilded 4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8589" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "examine": "A ready-to-assemble oak clock.", + "durability": null, + "name": "Oak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8590" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "durability": null, + "name": "Oak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8591" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "595", + "examine": "A ready-to-assemble teak clock.", + "durability": null, + "name": "Teak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8592" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "595", + "durability": null, + "name": "Teak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8593" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156100", + "examine": "A ready-to-assemble gilded mahogany clock.", + "durability": null, + "name": "Gilded clock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8594" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156100", + "durability": null, + "name": "Gilded clock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8595" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "510", + "examine": "A ready-to-assemble shaving stand.", + "durability": null, + "name": "Shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8596" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "510", + "durability": null, + "name": "Shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8597" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "examine": "A ready-to-assemble oak shaving stand.", + "durability": null, + "name": "Oak shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8598" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "durability": null, + "name": "Oak shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8599" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "examine": "A ready-to-assemble oak dresser.", + "durability": null, + "name": "Oak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8600" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Oak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8601" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "478", + "examine": "A ready-to-assemble teak dresser.", + "durability": null, + "name": "Teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8602" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "478", + "durability": null, + "name": "Teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8603" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "examine": "A ready-to-assemble fancy teak dresser.", + "durability": null, + "name": "Fancy teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8604" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "durability": null, + "name": "Fancy teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8605" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "399", + "examine": "A ready-to-assemble mahogany dresser.", + "durability": null, + "name": "Mahogany dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8606" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "399", + "durability": null, + "name": "Mahogany dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8607" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "138800", + "examine": "A ready-to-assemble gilded dresser.", + "durability": null, + "name": "Gilded dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8608" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "138800", + "durability": null, + "name": "Gilded dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8609" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "examine": "A ready-to-assemble shoe box.", + "durability": null, + "name": "Shoe box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8610" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Shoe box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8611" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47", + "examine": "A ready-to-assemble oak chest of drawers.", + "durability": null, + "name": "Oak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8612" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47", + "durability": null, + "name": "Oak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8613" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak bedroom wardrobe.", + "durability": null, + "name": "Oak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8614" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8615" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "132", + "examine": "A ready-to-assemble teak chest of drawers.", + "durability": null, + "name": "Teak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8616" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "132", + "durability": null, + "name": "Teak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8617" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "examine": "A ready-to-assemble teak bedroom wardrobe.", + "durability": null, + "name": "Teak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8618" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Teak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8619" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98", + "examine": "A ready-to-assemble mahogany bedroom wardrobe.", + "durability": null, + "name": "Mahogany 'drobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8620" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98", + "durability": null, + "name": "Mahogany 'drobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8621" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137700", + "examine": "A ready-to-assemble gilded mahogany bedroom wardrobe.", + "durability": null, + "name": "Gilded wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8622" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137700", + "durability": null, + "name": "Gilded wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8623" + }, + { + "durability": null, + "name": "Crystal ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8625" + }, + { + "durability": null, + "name": "Elemental sphere", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8627" + }, + { + "durability": null, + "name": "Crystal of power", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8629" + }, + { + "durability": null, + "name": "Globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8631" + }, + { + "durability": null, + "name": "Ornamental globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8633" + }, + { + "durability": null, + "name": "Lunar globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8635" + }, + { + "durability": null, + "name": "Celestial globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8637" + }, + { + "durability": null, + "name": "Armillary sphere", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8639" + }, + { + "durability": null, + "name": "Small orrery", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8641" + }, + { + "durability": null, + "name": "Large orrery", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8643" + }, + { + "durability": null, + "name": "Wooden telescope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8645" + }, + { + "durability": null, + "name": "Teak telescope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8647" + }, + { + "durability": null, + "name": "Mahogany 'scope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8649" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8650", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8652", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8654", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8656", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8658", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8660", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8662", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8664", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8666", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8668", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8670", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8672", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8674", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8676", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8678", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8680", + "stand_turn_anim": "1426" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8682", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8684", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8686", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8688", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8690", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8692", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8694", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8696", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8698", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8700", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8702", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8704", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8706", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8708", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8710", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8712", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8714", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8716", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8718", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8720", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8722", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8724", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8726", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8728", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8730", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8732", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8734", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8736", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8738", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8740", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8742", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8744", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8746", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8748", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8750", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8752", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8754", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8756", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8758", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8760", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8762", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8764", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8766", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8768", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8770", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8772", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8774", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8776", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "examine": "A plank of sturdy oak.", + "grand_exchange_price": "660", + "durability": null, + "name": "Oak plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "8778" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "660", + "durability": null, + "name": "Oak plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8779" + }, + { + "shop_price": "500", + "ge_buy_limit": "10000", + "examine": "A plank of fine teak.", + "grand_exchange_price": "959", + "durability": null, + "name": "Teak plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "8780" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "959", + "durability": null, + "name": "Teak plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8781" + }, + { + "shop_price": "1500", + "ge_buy_limit": "10000", + "examine": "A plank of expensive mahogany.", + "grand_exchange_price": "2286", + "durability": null, + "name": "Mahogany plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "8782" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2286", + "durability": null, + "name": "Mahogany plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8783" + }, + { + "shop_price": "130000", + "ge_buy_limit": "100", + "examine": "A very delicate sheet of gold.", + "grand_exchange_price": "133800", + "durability": null, + "name": "Gold leaf", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8784" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "133800", + "durability": null, + "name": "Gold leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8785" + }, + { + "shop_price": "325000", + "ge_buy_limit": "100", + "examine": "A beautifully carved marble block.", + "grand_exchange_price": "324800", + "durability": null, + "name": "Marble block", + "tradeable": "true", + "weight": "13.6", + "archery_ticket_price": "0", + "id": "8786" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "324800", + "durability": null, + "name": "Marble block", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8787" + }, + { + "shop_price": "975000", + "ge_buy_limit": "100", + "examine": "A magic stone to make high-level furniture.", + "grand_exchange_price": "980300", + "durability": null, + "name": "Magic stone", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8788" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "980300", + "durability": null, + "name": "Magic stone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8789" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A bolt of ordinary cloth.", + "grand_exchange_price": "1090", + "durability": null, + "name": "Bolt of cloth", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8790" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1090", + "durability": null, + "name": "Bolt of cloth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8791" + }, + { + "ge_buy_limit": "5000", + "examine": "A clockwork mechanism.", + "grand_exchange_price": "1630", + "durability": null, + "name": "Clockwork", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8792" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1630", + "durability": null, + "name": "Clockwork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8793" + }, + { + "shop_price": "13", + "ge_buy_limit": "100", + "examine": "Good for cutting wood.", + "grand_exchange_price": "64", + "durability": null, + "name": "Saw", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8794", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "64", + "durability": null, + "name": "Saw", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8795" + }, + { + "durability": null, + "name": "Mahogany logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8836" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "A hefty beam of timber, perfect for building temples.", + "grand_exchange_price": "29", + "durability": null, + "name": "Timber beam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8837" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "29", + "durability": null, + "name": "Timber beam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8838" + }, + { + "remove_sleeves": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "Torso armour from the order of the Void Knights.", + "durability": null, + "name": "Void knight top", + "tradeable": "false", + "weight": "6.5", + "archery_ticket_price": "0", + "id": "8839", + "bonuses": "0,0,0,0,0,45,45,45,45,45,45,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "Leg armour of the order of the Void Knights.", + "durability": null, + "name": "Void knight robe", + "tradeable": "false", + "weight": "8", + "archery_ticket_price": "0", + "id": "8840", + "bonuses": "0,0,0,0,0,30,30,30,30,30,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "A mace used by the order of the Void Knights.", + "durability": null, + "weight": "1", + "attack_speed": "5", + "weapon_interface": "1", + "render_anim": "2553", + "equipment_slot": "3", + "attack_anims": "401,401,401,401", + "name": "Void knight mace", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "8841", + "bonuses": "22,0,41,8,0,2,2,2,2,2,0,38,6,0,0" + }, + { + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "150", + "examine": "Gloves as used by the order of the Void Knights.", + "durability": null, + "name": "Void knight gloves", + "tradeable": "false", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "8842", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "A defensive weapon.", + "durability": null, + "name": "Bronze defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8844", + "bonuses": "3,2,1,-3,-2,3,2,1,-3,-2,1,0,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "examine": "A defensive weapon.", + "durability": null, + "name": "Iron defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8845", + "bonuses": "5,4,3,-3,-2,5,4,3,-3,-2,2,0,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,5}-{1,5}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Steel defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8846", + "bonuses": "7,6,5,-3,-2,7,6,5,-3,-2,3,1,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,10}-{1,10}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Black defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8847", + "bonuses": "9,8,7,-3,-2,9,8,7,-3,-2,4,2,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,20}-{1,20}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Mithril defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8848", + "bonuses": "10,9,8,-3,-2,10,9,8,-3,-2,5,3,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,30}-{1,30}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Adamant defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8849", + "bonuses": "13,12,11,-3,-2,13,12,11,-3,-2,6,4,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,40}-{1,40}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Rune defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8850", + "bonuses": "20,19,18,-3,-2,20,19,18,-3,-2,8,5,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "examine": "Warrior Guild Token.", + "durability": null, + "name": "Warrior guild token", + "archery_ticket_price": "0", + "id": "8851" + }, + { + "examine": "Large, round, heavy shield.", + "durability": null, + "name": "Defensive shield", + "weight": "3.6", + "archery_ticket_price": "0", + "two_handed": "false", + "id": "8856", + "bonuses": "0,0,0,-6,-2,8,9,7,0,8,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Just landed 18lb shot.", + "durability": null, + "name": "18lb shot", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8858" + }, + { + "examine": "Just landed 22lb shot.", + "durability": null, + "name": "22lb shot", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8859" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "One barrel", + "destroy": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "8860", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Two barrels", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "8861", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Three barrels", + "destroy": "true", + "weight": "13.5", + "archery_ticket_price": "0", + "id": "8862", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Four barrels", + "destroy": "true", + "weight": "18.1", + "archery_ticket_price": "0", + "id": "8863", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Five barrels", + "destroy": "true", + "weight": "22.6", + "archery_ticket_price": "0", + "id": "8864", + "equipment_slot": "0" + }, + { + "examine": "A heap of finely ground ashes.", + "durability": null, + "name": "Ground ashes", + "archery_ticket_price": "0", + "id": "8865" + }, + { + "examine": "A key made of solid iron.", + "durability": null, + "name": "Iron key", + "archery_ticket_price": "0", + "id": "8869" + }, + { + "examine": "See article", + "durability": null, + "name": "Zanik", + "archery_ticket_price": "0", + "id": "8870" + }, + { + "turn90cw_anim": "4194", + "examine": "It's got Zanik in it.", + "walk_anim": "4194", + "durability": null, + "destroy": "true", + "weight": "32", + "turn90ccw_anim": "4194", + "turn180_anim": "4194", + "render_anim": "822", + "equipment_slot": "3", + "stand_anim": "4193", + "name": "Crate with zanik", + "tradeable": "false", + "run_anim": "4194", + "archery_ticket_price": "0", + "id": "8871", + "stand_turn_anim": "4194" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "2855", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8872", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2855", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8873" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "3033", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8874", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3033", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8875" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "3523", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger (p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8876", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3523", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger (p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8877" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "8337", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger (p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8878", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8337", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger (p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8879" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "This fires crossbow bolts.", + "walk_anim": "4226", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "1159", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "8880", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,42,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,28}", + "shop_price": "2000", + "durability": null, + "weight": "2.2", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Dorgeshuun c'bow" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1159", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dorgeshuun c'bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8881" + }, + { + "requirements": "{4,28}", + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Good if you have a bone crossbow!", + "grand_exchange_price": "12", + "durability": null, + "name": "Bone bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8882", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "examine": "See article", + "durability": null, + "name": "Zanik", + "archery_ticket_price": "0", + "id": "8887" + }, + { + "bankable": "false", + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "archery_ticket_price": "0", + "id": "8890" + }, + { + "examine": "A horrible, emaciated ape like creature with beady red eyes.", + "durability": null, + "name": "Cave horror", + "archery_ticket_price": "0", + "id": "8900" + }, + { + "requirements": "{1,20}-{2,10}", + "ge_buy_limit": "10", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "989400", + "durability": null, + "name": "Black mask (10)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8901", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "989400", + "durability": null, + "name": "Black mask (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8902" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (9)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8903", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8904" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (8)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8905", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8906" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (7)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8907", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8908" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (6)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8909", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8910" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (5)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8911", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8912" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (4)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8913", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8914" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (3)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8915", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8916" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (2)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8917", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8918" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (1)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8919", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8920" + }, + { + "requirements": "{1,20}-{2,10}", + "ge_buy_limit": "10", + "examine": "An inert-seeming cave horror mask.", + "grand_exchange_price": "956100", + "durability": null, + "name": "Black mask", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8921", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "956100", + "durability": null, + "name": "Black mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8922" + }, + { + "requirements": "{18,35}", + "shop_price": "900", + "examine": "A stick on a string... pure style.", + "durability": null, + "name": "Witchwood icon", + "archery_ticket_price": "0", + "id": "8923", + "bonuses": "0,0,0,1,0,0,0,0,0,0,0,0,1,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "examine": "A white bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8924", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A red bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8925", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A blue bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8926", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A brown bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8927", + "equipment_slot": "0" + }, + { + "examine": "A pirate hat and a patch for the right eye.", + "durability": null, + "name": "Hat and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8928", + "equipment_slot": "0" + }, + { + "shop_price": "800", + "examine": "Tied together so they don't come apart.", + "durability": null, + "name": "Crabclaw and hook", + "weight": "1", + "archery_ticket_price": "0", + "id": "8929", + "bonuses": "0,0,0,0,0,3,5,3,0,0,0,1,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Crude wooden pipe section.", + "durability": null, + "name": "Pipe section", + "weight": "1", + "archery_ticket_price": "0", + "id": "8930" + }, + { + "durability": null, + "name": "Pipe section", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8931" + }, + { + "examine": "Repairs made with this will be patchy at best.", + "durability": null, + "name": "Lumber patch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8932" + }, + { + "durability": null, + "name": "Lumber patch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8933" + }, + { + "examine": "Slimy logs from the scrapey tree.", + "durability": null, + "name": "Scrapey tree logs", + "archery_ticket_price": "0", + "id": "8934" + }, + { + "durability": null, + "name": "Scrapey tree logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8935" + }, + { + "examine": "Very blue.", + "durability": null, + "name": "Blue flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8936" + }, + { + "durability": null, + "name": "Blue flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8937" + }, + { + "examine": "Very red.", + "durability": null, + "name": "Red flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8938" + }, + { + "durability": null, + "name": "Red flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8939" + }, + { + "examine": "Bluuuuuuuue Monkeeeeeeey!", + "durability": null, + "name": "Blue monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8943" + }, + { + "examine": "Bluuuuuuuue Monkeeeeeeey!", + "durability": null, + "name": "Blue monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8944" + }, + { + "examine": "Bluuuuuuuue Monkeeeeeeey!", + "durability": null, + "name": "Blue monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8945" + }, + { + "examine": "A well red monkey.", + "durability": null, + "name": "Red monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8946" + }, + { + "examine": "A well red monkey.", + "durability": null, + "name": "Red monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8947" + }, + { + "examine": "A well red monkey.", + "durability": null, + "name": "Red monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8948" + }, + { + "remove_head": "true", + "examine": "Essential pirate wear.", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8949", + "equipment_slot": "0" + }, + { + "examine": "Shiver me timbers!", + "grand_exchange_price": "83200", + "durability": null, + "name": "Pirate hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8950", + "equipment_slot": "0" + }, + { + "examine": "Piratical currency.", + "durability": null, + "name": "Pieces of eight", + "archery_ticket_price": "0", + "id": "8951" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Blue naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8952", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Green naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8953", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Red naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8954", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Brown naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8955", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Black naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8956", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Purple naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8957", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Grey naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8958", + "equipment_slot": "4" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Blue tricorn hat", + "archery_ticket_price": "0", + "id": "8959", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Green tricorn hat", + "archery_ticket_price": "0", + "id": "8960", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Red tricorn hat", + "archery_ticket_price": "0", + "id": "8961", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Brown tricorn hat", + "archery_ticket_price": "0", + "id": "8962", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Black tricorn hat", + "archery_ticket_price": "0", + "id": "8963", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Purple tricorn hat", + "archery_ticket_price": "0", + "id": "8964", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Grey tricorn hat", + "archery_ticket_price": "0", + "id": "8965", + "equipment_slot": "0" + }, + { + "shop_price": "200", + "turn90cw_anim": "1424", + "examine": "The flag of The Cutthroat.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Cutthroat flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8966", + "stand_turn_anim": "1426" + }, + { + "shop_price": "200", + "turn90cw_anim": "1424", + "examine": "The flag of The Guilded Smile.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "attack_speed": "2", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Guilded smile flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8967", + "stand_turn_anim": "1426" + }, + { + "shop_price": "300", + "turn90cw_anim": "1424", + "examine": "The flag of The Bronze Fist.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Bronze fist flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8968", + "stand_turn_anim": "1426" + }, + { + "shop_price": "400", + "turn90cw_anim": "1424", + "examine": "The flag of The Lucky Shot.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Lucky shot flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8969", + "stand_turn_anim": "1426" + }, + { + "shop_price": "500", + "turn90cw_anim": "1424", + "examine": "The flag of The Treasure Trove.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Treasure flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8970", + "stand_turn_anim": "1426" + }, + { + "shop_price": "600", + "turn90cw_anim": "1424", + "examine": "The flag of The Phasmatys Pride.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Phasmatys flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8971", + "stand_turn_anim": "1426" + }, + { + "examine": "A Bowl of red water.", + "durability": null, + "name": "Bowl of red water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8972" + }, + { + "durability": null, + "name": "Bowl of red water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8973" + }, + { + "examine": "A Bowl of blue water.", + "durability": null, + "name": "Bowl of blue water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8974" + }, + { + "durability": null, + "name": "Bowl of blue water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8975" + }, + { + "examine": "Monkeys seem to like throwing these.", + "durability": null, + "name": "Bitternut", + "archery_ticket_price": "0", + "id": "8976" + }, + { + "examine": "Greasy bark from the scrapey tree.", + "durability": null, + "name": "Scrapey bark", + "weight": "1.1", + "archery_ticket_price": "0", + "id": "8977" + }, + { + "durability": null, + "name": "Scrapey bark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8978" + }, + { + "examine": "Caution; not for use over troubled water.", + "durability": null, + "name": "Bridge section", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8979" + }, + { + "durability": null, + "name": "Bridge section", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8980" + }, + { + "examine": "Better than sea slugs.", + "durability": null, + "name": "Sweetgrubs", + "archery_ticket_price": "0", + "id": "8981" + }, + { + "durability": null, + "name": "Sweetgrubs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8982" + }, + { + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8986" + }, + { + "durability": null, + "name": "Torch", + "archery_ticket_price": "0", + "id": "8987", + "equipment_slot": "3" + }, + { + "shop_price": "5", + "examine": "Apparently good for brewing.", + "durability": null, + "name": "The stuff", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "8988" + }, + { + "examine": "A how-to of brewing and arson.", + "durability": null, + "name": "Brewin' guide", + "archery_ticket_price": "0", + "id": "8989" + }, + { + "examine": "A how-to of brewing and arson.", + "durability": null, + "name": "Brewin' guide", + "archery_ticket_price": "0", + "id": "8990" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Blue navy slacks", + "archery_ticket_price": "0", + "id": "8991", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Green navy slacks", + "archery_ticket_price": "0", + "id": "8992", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Red navy slacks", + "archery_ticket_price": "0", + "id": "8993", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Brown navy slacks", + "archery_ticket_price": "0", + "id": "8994", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Black navy slacks", + "archery_ticket_price": "0", + "id": "8995", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Purple navy slacks", + "archery_ticket_price": "0", + "id": "8996", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Grey navy slacks", + "archery_ticket_price": "0", + "id": "8997", + "equipment_slot": "7" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8998" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8999" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9000" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9001" + }, + { + "durability": null, + "name": "Hat and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9002" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "WARNING: Contains information which could make your account secure!", + "grand_exchange_price": "100", + "durability": null, + "name": "Security book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9003" + }, + { + "ge_buy_limit": "100", + "examine": "Information regarding the Stronghold of Security.", + "grand_exchange_price": "16", + "durability": null, + "name": "Stronghold notes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9004" + }, + { + "destroy_message": "You can get another pair of Fancy Boots from the Stronghold of Security", + "examine": "Very nice boots from the Stronghold of Security.", + "durability": null, + "name": "Fancy boots", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9005", + "bonuses": "0,0,0,-3,-1,1,2,3,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You can get another pair of Fighting Boots from the Stronghold of Security.", + "examine": "Very nice boots from the Stronghold of Security.", + "durability": null, + "name": "Fighting boots", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9006", + "bonuses": "0,0,0,-3,-1,1,2,3,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Ooooh spooky!", + "durability": null, + "name": "Right skull half", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "9007" + }, + { + "examine": "Ooooh spooky!", + "durability": null, + "name": "Left skull half", + "tradeable": "false", + "destroy": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "9008" + }, + { + "examine": "Seems to be for use with a staff or sceptre of some sort.", + "durability": null, + "name": "Strange skull", + "tradeable": "false", + "weight": "1.2", + "archery_ticket_price": "0", + "id": "9009" + }, + { + "examine": "Top half of a broken sceptre.", + "durability": null, + "name": "Top of sceptre", + "tradeable": "false", + "weight": "2", + "archery_ticket_price": "0", + "id": "9010" + }, + { + "examine": "Bottom half of a broken sceptre.", + "durability": null, + "name": "Bottom of sceptre", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "9011" + }, + { + "examine": "Sceptre with runes on it, seems to be missing something.", + "durability": null, + "name": "Runed sceptre", + "tradeable": "false", + "weight": "3.5", + "archery_ticket_price": "0", + "id": "9012" + }, + { + "turn90cw_anim": "1207", + "examine": "A fragile magical Sceptre.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can obtain another Sceptre by collecting all four pieces from the Stronghold of Security.", + "stand_anim": "813", + "name": "Skull sceptre", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9013", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "durability": null, + "name": "Security book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9014" + }, + { + "durability": null, + "name": "Stronghold notes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9015" + }, + { + "examine": "Oversized nail clippings.", + "durability": null, + "name": "Gorak claws", + "archery_ticket_price": "0", + "id": "9016" + }, + { + "examine": "A flower with magical properties.", + "durability": null, + "name": "Star flower", + "archery_ticket_price": "0", + "id": "9017" + }, + { + "examine": "Ground-down gorak claws.", + "durability": null, + "name": "Gorak claw powder", + "weight": "1", + "archery_ticket_price": "0", + "id": "9018" + }, + { + "examine": "Contains the Fairy Queen's magical essence.", + "durability": null, + "name": "Queen's secateurs", + "archery_ticket_price": "0", + "id": "9020", + "equipment_slot": "3" + }, + { + "destroy_message": "Maybe I can find another in Fairy Nuff's grotto.", + "examine": "A scroll that says she's a healer, that's Fairy Nuff.", + "durability": null, + "name": "Nuff's certificate", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9025" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Pyramid will give me 50 coins for this.", + "grand_exchange_price": "187", + "durability": null, + "name": "Ivory comb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9026" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "durability": null, + "name": "Ivory comb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9027" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Pyramid will give me 1000 coins for this.", + "grand_exchange_price": "513", + "durability": null, + "name": "Golden scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9028" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "513", + "durability": null, + "name": "Golden scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9029" + }, + { + "ge_buy_limit": "100", + "examine": "Little ornament in the shape of a scarab.", + "grand_exchange_price": "168", + "durability": null, + "name": "Stone scarab", + "tradeable": "true", + "weight": "0.07", + "archery_ticket_price": "0", + "id": "9030" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "168", + "durability": null, + "name": "Stone scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9031" + }, + { + "ge_buy_limit": "100", + "examine": "A small pottery scarab.", + "grand_exchange_price": "74", + "durability": null, + "name": "Pottery scarab", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9032" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Pottery scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9033" + }, + { + "ge_buy_limit": "100", + "examine": "A small golden statuette.", + "grand_exchange_price": "740", + "durability": null, + "name": "Golden statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9034" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "740", + "durability": null, + "name": "Golden statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9035" + }, + { + "ge_buy_limit": "100", + "examine": "A small pottery statuette.", + "grand_exchange_price": "97", + "durability": null, + "name": "Pottery statuette", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9036" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "97", + "durability": null, + "name": "Pottery statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9037" + }, + { + "ge_buy_limit": "100", + "examine": "A small stone statuette.", + "grand_exchange_price": "193", + "durability": null, + "name": "Stone statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9038" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "193", + "durability": null, + "name": "Stone statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9039" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Arena will give me 750 coins for this.", + "grand_exchange_price": "379", + "durability": null, + "name": "Gold seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9040" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "379", + "durability": null, + "name": "Gold seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9041" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Pyramid will give me 150 coins for this.", + "grand_exchange_price": "147", + "durability": null, + "name": "Stone seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9042" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Stone seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9043" + }, + { + "requirements": "{0,30}-{6,30}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "This sceptre is fully charged.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1000000", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9044", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9045" + }, + { + "requirements": "{0,30}-{6,30}", + "turn90cw_anim": "1207", + "examine": "This sceptre has two charges left.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "27", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9046", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9047" + }, + { + "requirements": "{0,30}-{6,30}", + "turn90cw_anim": "1207", + "examine": "This sceptre has one charge left.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "27", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9048", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9049" + }, + { + "requirements": "{0,30}-{6,30}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "This sceptre has no charges left.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "985800", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9050", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "985800", + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9051" + }, + { + "ge_buy_limit": "1000", + "examine": "Delicious and nutritious. Well, nutritious anyway.", + "grand_exchange_price": "68", + "durability": null, + "name": "Locust meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9052" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "68", + "durability": null, + "name": "Locust meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9053" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Red goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9054", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Black goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9055", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Yellow goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9056", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Green goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9057", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Purple goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9058", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Pink goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9059", + "equipment_slot": "4" + }, + { + "examine": "A mystical lantern casting a green beam.", + "durability": null, + "name": "Emerald lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "9064" + }, + { + "examine": "A mystical lantern casting a green beam.", + "durability": null, + "name": "Emerald lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "9065", + "equipment_slot": "5" + }, + { + "examine": "A roughly circular disc of glass.", + "durability": null, + "name": "Emerald lens", + "archery_ticket_price": "0", + "id": "9066" + }, + { + "examine": "A log of my thoughts...", + "durability": null, + "name": "Dream log", + "weight": "1", + "archery_ticket_price": "0", + "id": "9067" + }, + { + "shop_price": "1000", + "examine": "Mystical headgear.", + "durability": null, + "name": "Moonclan helm", + "archery_ticket_price": "0", + "id": "9068", + "bonuses": "0,0,0,3,-5,3,3,3,3,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "1000", + "examine": "A mystical hat.", + "durability": null, + "name": "Moonclan hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "9069", + "bonuses": "0,0,0,3,-5,3,3,3,3,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "shop_price": "1000", + "examine": "Provides good protection.", + "durability": null, + "name": "Moonclan armour", + "weight": "4", + "archery_ticket_price": "0", + "id": "9070", + "bonuses": "0,0,0,5,-10,5,5,5,5,-10,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "1000", + "examine": "This should protect my legs.", + "durability": null, + "name": "Moonclan skirt", + "weight": "3", + "archery_ticket_price": "0", + "id": "9071", + "bonuses": "0,0,0,5,-7,5,5,5,5,-7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "900", + "examine": "These should keep my hands safe.", + "durability": null, + "name": "Moonclan gloves", + "archery_ticket_price": "0", + "id": "9072", + "bonuses": "0,0,0,2,-5,2,2,2,2,-5,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "900", + "examine": "Groovy foot protection.", + "durability": null, + "name": "Moonclan boots", + "archery_ticket_price": "0", + "id": "9073", + "bonuses": "0,0,0,2,-5,2,2,2,2,-5,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "200", + "examine": "A mystical cape.", + "durability": null, + "name": "Moonclan cape", + "archery_ticket_price": "0", + "id": "9074", + "bonuses": "0,0,0,2,-2,0,1,1,2,-2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "220", + "ge_buy_limit": "25000", + "examine": "Used for Lunar Spells", + "grand_exchange_price": "231", + "durability": null, + "name": "Astral rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9075" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This needs refining", + "durability": null, + "name": "Lunar ore", + "weight": "7", + "archery_ticket_price": "0", + "id": "9076" + }, + { + "destroy_message": "You'll have to mine another lunar ore and smelt it.", + "examine": "It's a bar of magic metal.", + "durability": null, + "name": "Lunar bar", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9077" + }, + { + "examine": "A book of Moonclan history.", + "durability": null, + "name": "Moonclan manual", + "weight": "1", + "archery_ticket_price": "0", + "id": "9078" + }, + { + "examine": "The tooth, the whole tooth, and nothing but the tooth.", + "durability": null, + "name": "Suqah tooth", + "archery_ticket_price": "0", + "id": "9079" + }, + { + "examine": "An untanned piece of suqah hide.", + "durability": null, + "name": "Suqah hide", + "archery_ticket_price": "0", + "id": "9080" + }, + { + "examine": "A piece of Suqah hide that has been expertly tanned into leather.", + "durability": null, + "name": "Suqah leather", + "weight": "3", + "archery_ticket_price": "0", + "id": "9081" + }, + { + "examine": "A ground Suqah tooth.", + "durability": null, + "name": "Ground tooth", + "archery_ticket_price": "0", + "id": "9082" + }, + { + "destroy_message": "Brundt the Chieftain will probably have another lying around somewhere anyway...", + "examine": "A seal of passage issued by Brundt the Chieftain of the Fremennik.", + "durability": null, + "name": "Seal of passage", + "tradeable": "false", + "destroy": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "9083", + "equipment_slot": "2" + }, + { + "requirements": "{6,65}", + "shop_price": "30000", + "turn90cw_anim": "1207", + "examine": "A Moonclan staff.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9084", + "stand_turn_anim": "1209", + "bonuses": "3,2,16,13,0,2,3,2,13,1,0,15,3,0,0" + }, + { + "destroy_message": "You'll have to get another from the Oneiromancer.", + "examine": "A vessel for holding liquid.", + "durability": null, + "name": "Empty vial", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9085" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "10", + "examine": "A glass vial containing water.", + "grand_exchange_price": "21", + "durability": null, + "name": "Vial of water", + "tradeable": "true", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "9086" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel for dreaming while awake!", + "durability": null, + "name": "Waking sleep vial", + "archery_ticket_price": "0", + "id": "9087" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel with water and Guam inside.", + "durability": null, + "name": "Guam vial", + "archery_ticket_price": "0", + "id": "9088" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel with water and Marrentill inside.", + "durability": null, + "name": "Marr vial", + "archery_ticket_price": "0", + "id": "9089" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel with water, guam and marrentill inside.", + "durability": null, + "name": "Guam-marr vial", + "archery_ticket_price": "0", + "id": "9090" + }, + { + "requirements": "{6,65}", + "turn90cw_anim": "1207", + "examine": "A staff enchanted by air.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff - pt1", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9091", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "requirements": "{6,65}", + "turn90cw_anim": "1207", + "examine": "A staff enchanted by air and fire.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff - pt2", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9092", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "requirements": "{6,65}", + "turn90cw_anim": "1207", + "examine": "A staff enchanted by air, fire and water.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff - pt3", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9093", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "examine": "Small bits of wood from the first magic tree!", + "durability": null, + "name": "Kindling", + "archery_ticket_price": "0", + "id": "9094" + }, + { + "examine": "Magic wood soaked with a potion of waking sleep. Groovy.", + "durability": null, + "name": "Soaked kindling", + "archery_ticket_price": "0", + "id": "9095" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{6,65}", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9096", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,7,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "120000", + "examine": "Provides good protection.", + "durability": null, + "destroy": "true", + "weight": "4.5", + "absorb": "6,3,0", + "equipment_slot": "4", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "remove_sleeves": "true", + "name": "Lunar torso", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9097", + "bonuses": "0,0,0,10,-10,34,22,40,12,0,35,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "80000", + "examine": "These should protect my legs.", + "durability": null, + "destroy": "true", + "weight": "3.65", + "absorb": "4,2,0", + "equipment_slot": "7", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar legs", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9098", + "bonuses": "0,0,0,7,-7,20,19,23,9,0,20,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "10000", + "examine": "These should keep my hands safe.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "equipment_slot": "9", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar gloves", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9099", + "bonuses": "0,0,0,4,-1,2,1,1,2,0,1,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "10000", + "examine": "Mystical foot protection.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "equipment_slot": "10", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar boots", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9100", + "bonuses": "0,0,0,2,-1,1,2,2,2,0,2,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "12000", + "examine": "Oooo pretty!", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "1", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar cape", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9101", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0" + }, + { + "destroy_message": "The Oneiromancer might be able to help you get another.", + "requirements": "{1,40}-{6,65}", + "shop_price": "4000", + "examine": "Awesome.", + "durability": null, + "name": "Lunar amulet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9102", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "destroy_message": "The Oneiromancer might be able to help you get another.", + "examine": "I'll be the talk of the town with this... maybe.", + "durability": null, + "name": "A special tiara", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9103" + }, + { + "destroy_message": "The Oneiromancer might be able to help you get another.", + "requirements": "{1,40}-{6,65}", + "shop_price": "2000", + "examine": "A mysterious ring that can fill the wearer with magical power.", + "durability": null, + "name": "Lunar ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9104", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Astral tiara", + "archery_ticket_price": "0", + "id": "9106", + "equipment_slot": "0" + }, + { + "requirements": "{4,16}", + "examine": "Blurite crossbow bolts.", + "durability": null, + "name": "Blurite bolts", + "archery_ticket_price": "0", + "id": "9139", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "41", + "durability": null, + "name": "Iron bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9140", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "shop_price": "150", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "90", + "durability": null, + "name": "Steel bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9141", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "108", + "durability": null, + "name": "Mithril bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9142", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "shop_price": "23", + "ge_buy_limit": "10000", + "examine": "Adamantite crossbow bolts.", + "grand_exchange_price": "210", + "durability": null, + "name": "Adamant bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9143", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "627", + "durability": null, + "name": "Rune bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9144", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "8", + "durability": null, + "name": "Silver bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9145", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A bronze crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "29", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9174", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,0", + "shop_price": "92", + "durability": null, + "weight": "4", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Bronze crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "29", + "durability": null, + "name": "Bronze crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9175" + }, + { + "requirements": "{4,16}", + "turn90cw_anim": "821", + "examine": "A blurite crossbow.", + "walk_anim": "4226", + "durability": null, + "weight": "4", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Blurite crossbow", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9176", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,30,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "An iron crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "20", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9177", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,42,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,26}", + "shop_price": "157", + "durability": null, + "weight": "4", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Iron crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "20", + "durability": null, + "name": "Iron crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9178" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A steel crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "99", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9179", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,54,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,31}", + "durability": null, + "weight": "5", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Steel crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "99", + "durability": null, + "name": "Steel crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9180" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A mithril crossbow", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "355", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9181", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,66,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,36}", + "durability": null, + "weight": "6", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Mith crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "355", + "durability": null, + "name": "Mith crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9182" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "An adamantite crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "905", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9183", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,78,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,46}", + "shop_price": "2244", + "durability": null, + "weight": "6", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Adamant crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "905", + "durability": null, + "name": "Adamant crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9184" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A runite crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "9706", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9185", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,90,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,61}", + "shop_price": "16200", + "durability": null, + "weight": "6", + "weapon_interface": "17", + "render_anim": "175", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Rune crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "9706", + "durability": null, + "name": "Rune crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9186" + }, + { + "ge_buy_limit": "10000", + "examine": "Jade bolt tips.", + "grand_exchange_price": "2", + "durability": null, + "name": "Jade bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9187" + }, + { + "ge_buy_limit": "10000", + "examine": "Red Topaz bolt tips.", + "grand_exchange_price": "2", + "durability": null, + "name": "Topaz bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9188" + }, + { + "ge_buy_limit": "10000", + "examine": "Sapphire bolt tips.", + "grand_exchange_price": "4", + "durability": null, + "name": "Sapphire bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9189" + }, + { + "ge_buy_limit": "10000", + "examine": "Emerald bolt tips.", + "grand_exchange_price": "84", + "durability": null, + "name": "Emerald bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9190" + }, + { + "ge_buy_limit": "10000", + "examine": "Ruby bolt tips.", + "grand_exchange_price": "159", + "durability": null, + "name": "Ruby bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9191" + }, + { + "ge_buy_limit": "10000", + "examine": "Diamond bolt tips.", + "grand_exchange_price": "1289", + "durability": null, + "name": "Diamond bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9192" + }, + { + "ge_buy_limit": "10000", + "examine": "Dragonstone bolt tips.", + "grand_exchange_price": "2477", + "durability": null, + "name": "Dragon bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9193" + }, + { + "shop_price": "13500", + "ge_buy_limit": "10000", + "examine": "Onyx bolt tips.", + "grand_exchange_price": "8096", + "tokkul_price": "1500", + "durability": null, + "name": "Onyx bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9194" + }, + { + "ge_buy_limit": "25000", + "examine": "Enchanted Opal tipped Bronze Crossbow Bolts.", + "grand_exchange_price": "10", + "durability": null, + "name": "Opal bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9236", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,14", + "equipment_slot": "13" + }, + { + "requirements": "{4,15}", + "examine": "Enchanted Jade tipped Blurite Crossbow Bolts.", + "durability": null, + "name": "Jade bolts (e)", + "archery_ticket_price": "0", + "id": "9237", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "ge_buy_limit": "25000", + "examine": "Enchanted Pearl tipped Iron Crossbow Bolts.", + "grand_exchange_price": "36", + "durability": null, + "name": "Pearl bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9238", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,48", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "25000", + "examine": "Enchanted Red Topaz tipped Steel Crossbow Bolts.", + "grand_exchange_price": "44", + "durability": null, + "name": "Topaz bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9239", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,66", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "103", + "ge_buy_limit": "25000", + "examine": "Enchanted Sapphire tipped Mithril Crossbow Bolts.", + "grand_exchange_price": "95", + "durability": null, + "name": "Sapphire bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9240", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,83", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "ge_buy_limit": "25000", + "examine": "Enchanted Emerald tipped Mithril Crossbow Bolts.", + "grand_exchange_price": "304", + "durability": null, + "name": "Emerald bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9241", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,85", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Enchanted Ruby tipped Adamantite Crossbow Bolts.", + "grand_exchange_price": "450", + "durability": null, + "name": "Ruby bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9242", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,103", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Enchanted Diamond tipped Adamantite Crossbow Bolts.", + "grand_exchange_price": "1631", + "durability": null, + "name": "Diamond bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9243", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,105", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Enchanted Dragonstone tipped Runite Crossbow Bolts.", + "grand_exchange_price": "3217", + "durability": null, + "name": "Dragon bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9244", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,117", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Enchanted Onyx tipped runite Crossbow Bolts.", + "grand_exchange_price": "8870", + "durability": null, + "name": "Onyx bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9245", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,120", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "durability": null, + "name": "Blurite bolts(p)", + "archery_ticket_price": "0", + "id": "9286", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "88", + "durability": null, + "name": "Iron bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9287", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "132", + "durability": null, + "name": "Steel bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9288", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "146", + "durability": null, + "name": "Mithril bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9289", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "shop_price": "23", + "ge_buy_limit": "10000", + "examine": "Adamantite crossbow bolts.", + "grand_exchange_price": "302", + "durability": null, + "name": "Adamant bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9290", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "734", + "durability": null, + "name": "Runite bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9291", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "34", + "durability": null, + "name": "Silver bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9292", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "durability": null, + "name": "Blurite bolts(p+)", + "archery_ticket_price": "0", + "id": "9293", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "185", + "durability": null, + "name": "Iron bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9294", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "215", + "durability": null, + "name": "Steel bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9295", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "296", + "durability": null, + "name": "Mithril bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9296", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "10000", + "grand_exchange_price": "472", + "durability": null, + "name": "Adamant bolts(p+)", + "archery_ticket_price": "0", + "id": "9297", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "1130", + "durability": null, + "name": "Runite bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9298", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "129", + "durability": null, + "name": "Silver bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9299", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "durability": null, + "name": "Blurite bolts(p++)", + "archery_ticket_price": "0", + "id": "9300", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "1136", + "durability": null, + "name": "Iron bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9301", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "1088", + "durability": null, + "name": "Steel bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9302", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "903", + "durability": null, + "name": "Mithril bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9303", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "10000", + "grand_exchange_price": "1043", + "durability": null, + "name": "Adamant bolts(p++)", + "archery_ticket_price": "0", + "id": "9304", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "1581", + "durability": null, + "name": "Runite bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9305", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "1211", + "durability": null, + "name": "Silver bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9306", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "examine": "Jade tipped blurite bolts.", + "durability": null, + "name": "Jade bolts", + "archery_ticket_price": "0", + "id": "9335", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "shop_price": "62", + "ge_buy_limit": "25000", + "examine": "Red Topaz tipped Steel Crossbow Bolts.", + "grand_exchange_price": "60", + "durability": null, + "name": "Topaz bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9336", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,66", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "ge_buy_limit": "25000", + "examine": "Sapphire tipped Mithril crossbow bolts.", + "grand_exchange_price": "89", + "durability": null, + "name": "Sapphire bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9337", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,83", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "ge_buy_limit": "25000", + "examine": "Emerald tipped Mithril crossbow bolts.", + "grand_exchange_price": "177", + "durability": null, + "name": "Emerald bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9338", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,85", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Ruby tipped Adamantite crossbow bolts.", + "grand_exchange_price": "408", + "durability": null, + "name": "Ruby bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9339", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,103", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Diamond tipped Adamantite crossbow bolts.", + "grand_exchange_price": "1545", + "durability": null, + "name": "Diamond bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9340", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,105", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Dragonstone tipped Runite crossbow bolts.", + "grand_exchange_price": "3201", + "durability": null, + "name": "Dragon bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9341", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,117", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Onyx tipped Runite crossbow bolts.", + "grand_exchange_price": "8752", + "durability": null, + "name": "Onyx bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9342", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,120", + "equipment_slot": "13" + }, + { + "shop_price": "1", + "ge_buy_limit": "10000", + "examine": "Unfeathered bronze crossbow bolts.", + "grand_exchange_price": "3", + "durability": null, + "name": "Bronze bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9375" + }, + { + "examine": "Unfeathered blurite crossbow bolts.", + "durability": null, + "name": "Blurite bolts (unf)", + "archery_ticket_price": "0", + "id": "9376" + }, + { + "shop_price": "2", + "ge_buy_limit": "10000", + "examine": "Unfeathered iron crossbow bolts.", + "grand_exchange_price": "14", + "durability": null, + "name": "Iron bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9377" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered steel crossbow bolts.", + "grand_exchange_price": "61", + "durability": null, + "name": "Steel bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9378" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered mithril crossbow bolts.", + "grand_exchange_price": "115", + "durability": null, + "name": "Mithril bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9379" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered adamantite crossbow bolts.", + "grand_exchange_price": "266", + "durability": null, + "name": "Adamant bolts(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9380" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered runite crossbow bolts", + "grand_exchange_price": "1235", + "durability": null, + "name": "Runite bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9381" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered silver crossbow bolts.", + "grand_exchange_price": "2", + "durability": null, + "name": "Silver bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9382" + }, + { + "examine": "A mithril grapple tipped bolt with a rope.", + "grand_exchange_price": "1447", + "durability": null, + "name": "Grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9415" + }, + { + "ge_buy_limit": "100", + "examine": "A mithril grapple tip.", + "grand_exchange_price": "461", + "durability": null, + "name": "Mith grapple tip", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9416" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "461", + "durability": null, + "name": "Mith grapple tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9417" + }, + { + "ge_buy_limit": "1000", + "examine": "A mithril grapple tipped bolt with a rope.", + "grand_exchange_price": "858", + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9418" + }, + { + "ge_buy_limit": "1000", + "examine": "A mithril grapple tipped bolt with a rope.", + "grand_exchange_price": "1470", + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9419", + "equipment_slot": "13" + }, + { + "requirements": "{9,9}", + "shop_price": "20", + "ge_buy_limit": "5000", + "examine": "A pair of bronze crossbow limbs.", + "grand_exchange_price": "49", + "durability": null, + "name": "Bronze limbs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9420", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "49", + "durability": null, + "name": "Bronze limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9421" + }, + { + "requirements": "{24,9}", + "examine": "A pair of blurite crossbow limbs.", + "durability": null, + "name": "Blurite limbs", + "weight": "1", + "archery_ticket_price": "0", + "id": "9422", + "equipment_slot": "5" + }, + { + "requirements": "{9,39}", + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "A pair of iron crossbow limbs.", + "grand_exchange_price": "34", + "durability": null, + "name": "Iron limbs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9423", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "34", + "durability": null, + "name": "Iron limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9424" + }, + { + "requirements": "{9,46}", + "shop_price": "900", + "ge_buy_limit": "5000", + "examine": "A pair of steel crossbow limbs.", + "grand_exchange_price": "97", + "durability": null, + "name": "Steel limbs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9425", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "durability": null, + "name": "Steel limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9426" + }, + { + "requirements": "{9,54}", + "shop_price": "650", + "ge_buy_limit": "5000", + "examine": "A pair of mithril crossbow limbs.", + "grand_exchange_price": "347", + "durability": null, + "name": "Mithril limbs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9427", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "347", + "durability": null, + "name": "Mithril limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9428" + }, + { + "requirements": "{9,61}", + "shop_price": "4800", + "ge_buy_limit": "5000", + "examine": "A pair of adamantite crossbow limbs.", + "grand_exchange_price": "1434", + "durability": null, + "name": "Adamantite limbs", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9429", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1434", + "durability": null, + "name": "Adamantite limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9430" + }, + { + "requirements": "{9,69}", + "ge_buy_limit": "5000", + "examine": "A pair of runite crossbow limbs.", + "grand_exchange_price": "9441", + "durability": null, + "name": "Runite limbs", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9431", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "9441", + "durability": null, + "name": "Runite limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9432" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "1500", + "examine": "A pouch for storing crossbow bolts.", + "durability": null, + "name": "Bolt pouch", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9433" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "A mould for creating silver crossbow bolts.", + "grand_exchange_price": "409", + "durability": null, + "name": "Bolt mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9434" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "409", + "durability": null, + "name": "Bolt mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9435" + }, + { + "ge_buy_limit": "1000", + "examine": "I can use this to make a crossbow string.", + "grand_exchange_price": "196", + "durability": null, + "name": "Sinew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9436" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "196", + "durability": null, + "name": "Sinew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9437" + }, + { + "ge_buy_limit": "1000", + "examine": "A string for a crossbow.", + "grand_exchange_price": "203", + "durability": null, + "name": "Crossbow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9438" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "203", + "durability": null, + "name": "Crossbow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9439" + }, + { + "requirements": "{9,9}", + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "A wooden crossbow stock", + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9440", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9441" + }, + { + "requirements": "{24,9}", + "ge_buy_limit": "1000", + "examine": "An oak crossbow stock.", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak stock", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9442", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9443" + }, + { + "requirements": "{9,39}", + "shop_price": "21", + "ge_buy_limit": "1000", + "examine": "A willow crossbow stock.", + "grand_exchange_price": "3", + "durability": null, + "name": "Willow stock", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9444", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3", + "durability": null, + "name": "Willow stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9445" + }, + { + "requirements": "{9,46}", + "shop_price": "231", + "ge_buy_limit": "1000", + "examine": "A teak crossbow stock.", + "grand_exchange_price": "6", + "durability": null, + "name": "Teak stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9446", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "6", + "durability": null, + "name": "Teak stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9447" + }, + { + "requirements": "{9,54}", + "ge_buy_limit": "1000", + "examine": "A maple crossbow stock.", + "grand_exchange_price": "7", + "durability": null, + "name": "Maple stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9448", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7", + "durability": null, + "name": "Maple stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9449" + }, + { + "requirements": "{9,61}", + "ge_buy_limit": "1000", + "examine": "A Mahogany crossbow stock.", + "grand_exchange_price": "23", + "durability": null, + "name": "Mahogany stock", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9450", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "23", + "durability": null, + "name": "Mahogany stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9451" + }, + { + "requirements": "{9,69}", + "ge_buy_limit": "1000", + "examine": "A yew crossbow stock.", + "grand_exchange_price": "37", + "durability": null, + "name": "Yew stock", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9452", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "37", + "durability": null, + "name": "Yew stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9453" + }, + { + "shop_price": "27", + "ge_buy_limit": "500", + "examine": "An unstrung bronze crossbow.", + "grand_exchange_price": "25", + "durability": null, + "name": "Bronze c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9454" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "25", + "durability": null, + "name": "Bronze c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9455" + }, + { + "shop_price": "27", + "examine": "An unstrung blurite crossbow.", + "durability": null, + "name": "Blurite c'bow (u)", + "weight": "8", + "archery_ticket_price": "0", + "id": "9456" + }, + { + "ge_buy_limit": "500", + "examine": "An unstrung iron crossbow.", + "grand_exchange_price": "26", + "durability": null, + "name": "Iron c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9457" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "26", + "durability": null, + "name": "Iron c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9458" + }, + { + "shop_price": "27", + "ge_buy_limit": "500", + "examine": "An unstrung steel crossbow.", + "grand_exchange_price": "114", + "durability": null, + "name": "Steel c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9459" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "114", + "durability": null, + "name": "Steel c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9460" + }, + { + "shop_price": "27", + "ge_buy_limit": "500", + "examine": "An unstrung mithril crossbow.", + "grand_exchange_price": "330", + "durability": null, + "name": "Mithril c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9461" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "330", + "durability": null, + "name": "Mithril c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9462" + }, + { + "shop_price": "693", + "ge_buy_limit": "500", + "examine": "An unstrung adamantite crossbow.", + "grand_exchange_price": "1007", + "durability": null, + "name": "Adamant c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9463" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1007", + "durability": null, + "name": "Adamant c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9464" + }, + { + "shop_price": "4000", + "ge_buy_limit": "500", + "examine": "An unstrung runite crossbow.", + "grand_exchange_price": "9493", + "durability": null, + "name": "Runite c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9465" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "9493", + "durability": null, + "name": "Runite c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9466" + }, + { + "examine": "It's a bar of blurite.", + "durability": null, + "name": "Blurite bar", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "9467" + }, + { + "examine": "What is left over when a log is made into a plank.", + "durability": null, + "name": "Sawdust", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "9468" + }, + { + "ge_buy_limit": "100", + "examine": "A seed pod of the Grand Tree.", + "grand_exchange_price": "16200", + "durability": null, + "name": "Grand seed pod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9469" + }, + { + "ge_buy_limit": "10", + "examine": "A scarf. You feel your upper lip stiffening.", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Gnome scarf", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9470", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Gnome scarf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9471" + }, + { + "ge_buy_limit": "10", + "examine": "Tally Ho!", + "grand_exchange_price": "95800", + "durability": null, + "name": "Gnome goggles", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9472", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95800", + "durability": null, + "name": "Gnome goggles", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9473" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9474" + }, + { + "ge_buy_limit": "100", + "examine": "It looks very minty.", + "grand_exchange_price": "675", + "durability": null, + "name": "Mint cake", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9475" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "675", + "durability": null, + "name": "Mint cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9476" + }, + { + "examine": "You can check on your delivery details here", + "durability": null, + "name": "Aluft aloft box", + "archery_ticket_price": "0", + "id": "9477" + }, + { + "shop_price": "1", + "examine": "This cheese & tomato batta needs baking (and garnishing with equa leaves).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9478" + }, + { + "shop_price": "1", + "examine": "This cheese & tomato batta needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9479" + }, + { + "shop_price": "1", + "examine": "This fruit batta needs baking (and garnishing with gnome spices).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9480" + }, + { + "shop_price": "1", + "examine": "This fruit batta needs garnishing with gnome spices.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9481" + }, + { + "shop_price": "1", + "examine": "This toad batta needs baking.", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9482" + }, + { + "shop_price": "1", + "examine": "This veggie batta needs baking (and garnishing with equa leaves).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9483" + }, + { + "shop_price": "1", + "examine": "This veggie batta needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9484" + }, + { + "shop_price": "1", + "examine": "This worm batta needs baking (and garnishing with equa leaves).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9485" + }, + { + "shop_price": "1", + "examine": "This worm batta needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9486" + }, + { + "shop_price": "28", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "740", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9487" + }, + { + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9488" + }, + { + "shop_price": "28", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "740", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9489" + }, + { + "shop_price": "28", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "740", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9508" + }, + { + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9509" + }, + { + "shop_price": "28", + "examine": "A Short Green Guy... looks good.", + "grand_exchange_price": "954", + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9510" + }, + { + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9511" + }, + { + "shop_price": "28", + "examine": "A fresh healthy fruit mix.", + "grand_exchange_price": "287", + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9512" + }, + { + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9513" + }, + { + "shop_price": "28", + "examine": "A cool refreshing fruit mix.", + "grand_exchange_price": "2276", + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9514" + }, + { + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9515" + }, + { + "shop_price": "28", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "577", + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9516" + }, + { + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9517" + }, + { + "shop_price": "28", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "281", + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9518" + }, + { + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9519" + }, + { + "shop_price": "30", + "examine": "Looks good... smells strong.", + "grand_exchange_price": "27", + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9520" + }, + { + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9521" + }, + { + "shop_price": "1", + "examine": "A deep tin used to make gnome battas in.", + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9522" + }, + { + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9523" + }, + { + "shop_price": "1", + "examine": "A deep tin used to make gnome battas in.", + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9524" + }, + { + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9525" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "310", + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9527" + }, + { + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9528" + }, + { + "shop_price": "78", + "examine": "It actually smells quite good.", + "grand_exchange_price": "280", + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9529" + }, + { + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9530" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "148", + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9531" + }, + { + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9532" + }, + { + "examine": "Well... It looks healthy.", + "grand_exchange_price": "240", + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9533" + }, + { + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9534" + }, + { + "examine": "This smells really good.", + "grand_exchange_price": "266", + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9535" + }, + { + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9536" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "2606", + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9538" + }, + { + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9539" + }, + { + "shop_price": "70", + "examine": "Yum...smells spicy.", + "grand_exchange_price": "99", + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9540" + }, + { + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9541" + }, + { + "shop_price": "80", + "examine": "It actually smells quite good.", + "grand_exchange_price": "255", + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9542" + }, + { + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9543" + }, + { + "shop_price": "70", + "examine": "Yum... smells good.", + "grand_exchange_price": "889", + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9544" + }, + { + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9545" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "475", + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9547" + }, + { + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9548" + }, + { + "examine": "This looks pretty healthy.", + "grand_exchange_price": "514", + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9549" + }, + { + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9550" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "2650", + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "9551" + }, + { + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9552" + }, + { + "shop_price": "450", + "examine": "Full of creamy, chocolately goodness.", + "grand_exchange_price": "4704", + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "9553" + }, + { + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9554" + }, + { + "examine": "This unfinished choco bomb needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9558" + }, + { + "examine": "This unfinished tangled toad legs bowl needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9559" + }, + { + "examine": "This unfinished choc bomb needs cream and chocolate dust.", + "durability": null, + "name": "Unfinished bowl", + "archery_ticket_price": "0", + "id": "9560" + }, + { + "examine": "This unfinished veggie ball needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9561" + }, + { + "examine": "This unfinished veggie ball needs equa leaves.", + "durability": null, + "name": "Unfinished bowl", + "archery_ticket_price": "0", + "id": "9562" + }, + { + "examine": "This unfinished worm hole needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9563" + }, + { + "examine": "This unfinished worm hole needs equa leaves.", + "durability": null, + "name": "Unfinished bowl", + "archery_ticket_price": "0", + "id": "9564" + }, + { + "durability": null, + "name": "Cocktail shaker", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9565" + }, + { + "examine": "This wizzard blizzard needs pouring, a lime slice, and pineapple chunks.", + "durability": null, + "name": "Mixed blizzard", + "archery_ticket_price": "0", + "id": "9566" + }, + { + "examine": "This short green guy cocktail needs pouring, a lime slice and equa leaves.", + "durability": null, + "name": "Mixed sgg", + "archery_ticket_price": "0", + "id": "9567" + }, + { + "examine": "This fruit blast cocktail needs pouring and a lemon slice.", + "durability": null, + "name": "Mixed blast", + "archery_ticket_price": "0", + "id": "9568" + }, + { + "examine": "This pineapple punch needs pouring, lime and pineapple chunks, and a orange slice.", + "durability": null, + "name": "Mixed punch", + "archery_ticket_price": "0", + "id": "9569" + }, + { + "examine": "This blurberry special needs pouring, orange and lemon chunks, a lime slice and equa leaves.", + "durability": null, + "name": "Mixed blurberry special", + "archery_ticket_price": "0", + "id": "9570" + }, + { + "examine": "This choco chip crunchy needs baking and garnishing with chocolate dust.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9577" + }, + { + "examine": "This choco chip crunchy needs garnishing with chocolate dust.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9578" + }, + { + "examine": "This spicy crunchy needs baking and garnishing with gnome spices.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9579" + }, + { + "examine": "This spicy crunchy needs garnishing with gnome spices.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9580" + }, + { + "examine": "This toad crunchy needs baking and garnishing with equa leaves.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9581" + }, + { + "examine": "This toad crunchy needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9582" + }, + { + "examine": "This worm crunchy needs baking and garnishing with gnome spices.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9583" + }, + { + "examine": "This worm crunchy needs garnishing with gnome spices.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9584" + }, + { + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9585" + }, + { + "durability": null, + "name": "Crunchy tray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9586" + }, + { + "durability": null, + "name": "Gnomebowl mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9587" + }, + { + "durability": null, + "name": "Raw crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9588" + }, + { + "destroy_message": "Speak to Sir Amik Varze at the beginning of the Black Knight's Fortress Quest.", + "examine": "A dossier containing info on the Black Knight plot.", + "durability": null, + "name": "Dossier", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9589" + }, + { + "examine": "A dossier containing info on the Black Knight plot.", + "durability": null, + "name": "Dossier", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9590" + }, + { + "examine": "Glue made from tree sap and ground mud runes.", + "durability": null, + "name": "Magic glue", + "weight": "3", + "archery_ticket_price": "0", + "id": "9592" + }, + { + "examine": "This doesn't look like it will do anything interesting.", + "durability": null, + "name": "Weird gloop", + "tradeable": "false", + "destroy": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "9593" + }, + { + "examine": "Mud runes ground into a powder.", + "durability": null, + "name": "Ground mud runes", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9594" + }, + { + "examine": "A red circular crystalline disc.", + "durability": null, + "name": "Red circle", + "archery_ticket_price": "0", + "id": "9597" + }, + { + "examine": "A red triangular crystalline disc.", + "durability": null, + "name": "Red triangle", + "archery_ticket_price": "0", + "id": "9598" + }, + { + "examine": "A red square-shaped crystalline disc.", + "durability": null, + "name": "Red square", + "archery_ticket_price": "0", + "id": "9599" + }, + { + "examine": "A red pentagon shaped crystalline disc.", + "durability": null, + "name": "Red pentagon", + "archery_ticket_price": "0", + "id": "9600" + }, + { + "examine": "An orange circular crystalline disc.", + "durability": null, + "name": "Orange circle", + "archery_ticket_price": "0", + "id": "9601" + }, + { + "examine": "An orange triangular crystalline disc.", + "durability": null, + "name": "Orange triangle", + "archery_ticket_price": "0", + "id": "9602" + }, + { + "examine": "An orange square-shaped crystalline disc.", + "durability": null, + "name": "Orange square", + "archery_ticket_price": "0", + "id": "9603" + }, + { + "examine": "An orange pentagon shaped crystalline disc.", + "durability": null, + "name": "Orange pentagon", + "archery_ticket_price": "0", + "id": "9604" + }, + { + "examine": "A yellow circular crystalline disc.", + "durability": null, + "name": "Yellow circle", + "archery_ticket_price": "0", + "id": "9605" + }, + { + "examine": "A yellow triangular crystalline disc.", + "durability": null, + "name": "Yellow triangle", + "archery_ticket_price": "0", + "id": "9606" + }, + { + "examine": "A yellow square-shaped crystalline disc.", + "durability": null, + "name": "Yellow square", + "archery_ticket_price": "0", + "id": "9607" + }, + { + "examine": "A yellow pentagon shaped crystalline disc.", + "durability": null, + "name": "Yellow pentagon", + "archery_ticket_price": "0", + "id": "9608" + }, + { + "examine": "A green circular crystalline disc.", + "durability": null, + "name": "Green circle", + "archery_ticket_price": "0", + "id": "9609" + }, + { + "examine": "A green triangular crystalline disc.", + "durability": null, + "name": "Green triangle", + "archery_ticket_price": "0", + "id": "9610" + }, + { + "examine": "A green square shaped crystalline disc.", + "durability": null, + "name": "Green square", + "archery_ticket_price": "0", + "id": "9611" + }, + { + "examine": "A green pentagon shaped crystalline disc.", + "durability": null, + "name": "Green pentagon", + "archery_ticket_price": "0", + "id": "9612" + }, + { + "examine": "A blue circular crystalline disc.", + "durability": null, + "name": "Blue circle", + "archery_ticket_price": "0", + "id": "9613" + }, + { + "examine": "A blue triangular crystalline disc.", + "durability": null, + "name": "Blue triangle", + "archery_ticket_price": "0", + "id": "9614" + }, + { + "examine": "A blue square shaped crystalline disc.", + "durability": null, + "name": "Blue square", + "archery_ticket_price": "0", + "id": "9615" + }, + { + "examine": "A blue pentagon shaped crystalline disc.", + "durability": null, + "name": "Blue pentagon", + "archery_ticket_price": "0", + "id": "9616" + }, + { + "examine": "An indigo circular crystalline disc.", + "durability": null, + "name": "Indigo circle", + "archery_ticket_price": "0", + "id": "9617" + }, + { + "examine": "An indigo triangular crystalline disc.", + "durability": null, + "name": "Indigo triangle", + "archery_ticket_price": "0", + "id": "9618" + }, + { + "examine": "An indigo square shaped crystalline disc.", + "durability": null, + "name": "Indigo square", + "archery_ticket_price": "0", + "id": "9619" + }, + { + "examine": "An indigo pentagon shaped crystalline disc.", + "durability": null, + "name": "Indigo pentagon", + "archery_ticket_price": "0", + "id": "9620" + }, + { + "examine": "A violet circular crystalline disc.", + "durability": null, + "name": "Violet circle", + "archery_ticket_price": "0", + "id": "9621" + }, + { + "examine": "A violet triangular crystalline disc.", + "durability": null, + "name": "Violet triangle", + "archery_ticket_price": "0", + "id": "9622" + }, + { + "examine": "A violet square-shaped crystalline disc.", + "durability": null, + "name": "Violet square", + "archery_ticket_price": "0", + "id": "9623" + }, + { + "examine": "A violet pentagon shaped crystalline disc.", + "durability": null, + "name": "Violet pentagon", + "archery_ticket_price": "0", + "id": "9624" + }, + { + "destroy_message": "Maybe Brimstail will have another...", + "examine": "A magical saw.", + "durability": null, + "name": "Crystal saw", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9625", + "equipment_slot": "3" + }, + { + "destroy_message": "Maybe Brimstail will have another...", + "examine": "This small crystal seed looks grey and dead.", + "durability": null, + "name": "Small crystal seed", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9626" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "1265", + "ge_buy_limit": "100", + "examine": "As used by King Tyras personal guard.", + "durability": null, + "weight": "0.9", + "equipment_slot": "0", + "grand_exchange_price": "1406", + "name": "Tyras helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9629", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1406", + "durability": null, + "name": "Tyras helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9630" + }, + { + "examine": "This needs refining.", + "durability": null, + "name": "Daeyalt ore", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9632" + }, + { + "shop_price": "635", + "ge_buy_limit": "100", + "examine": "Dressing like the Vyrewatch could be a useful disguise in the ghetto of Meiyerditch.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "2160", + "name": "Vyrewatch top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9634", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2160", + "durability": null, + "name": "Vyrewatch top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9635" + }, + { + "shop_price": "635", + "ge_buy_limit": "100", + "examine": "Dress like a powerful Vyrewatch!", + "grand_exchange_price": "1204", + "durability": null, + "name": "Vyrewatch legs", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9636", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1204", + "durability": null, + "name": "Vyrewatch legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9637" + }, + { + "shop_price": "635", + "ge_buy_limit": "100", + "examine": "Dress like a powerful Vyrewatch!", + "grand_exchange_price": "2874", + "durability": null, + "name": "Vyrewatch shoes", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9638", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2874", + "durability": null, + "name": "Vyrewatch shoes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9639" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Could be used as a disguise in the ghetto of Meiyerditch.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "588", + "name": "Citizen top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9640", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "588", + "durability": null, + "name": "Citizen top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9641" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Could be used as a disguise in the ghetto of Meiyerditch.", + "grand_exchange_price": "491", + "durability": null, + "name": "Citizen trousers", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9642", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "491", + "durability": null, + "name": "Citizen trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9643" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Could be used as a disguise in the ghetto of Meiyerditch.", + "grand_exchange_price": "458", + "durability": null, + "name": "Citizen shoes", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9644", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "458", + "durability": null, + "name": "Citizen shoes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9645" + }, + { + "destroy_message": "You can get another sketch by using charcoal with papyrus, when on the wall near Castle Drakyn.", + "examine": "Northern approach of the castle.", + "durability": null, + "name": "Castle sketch 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9646" + }, + { + "destroy_message": "You can get another sketch by using charcoal with papyrus, when on the wall near Castle Drakyn.", + "examine": "Western approach of the castle.", + "durability": null, + "name": "Castle sketch 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9647" + }, + { + "destroy_message": "You can get another sketch by using charcoal with papyrus, when on the wall near Castle Drakyn.", + "examine": "Southern approach of the castle.", + "durability": null, + "name": "Castle sketch 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9648" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A key to some large, strange door.", + "durability": null, + "name": "Large ornate key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9651" + }, + { + "destroy_message": "Unknown You can reclaim this item from the place you found it.", + "examine": "A book called Haemalchemy Volume 1.", + "durability": null, + "name": "Haemalchemy", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9652" + }, + { + "destroy_message": "Safalaan gave you this message; he would probably write out another one for you.", + "examine": "A sealed message from Safalaan to Valiaf.", + "durability": null, + "name": "Sealed message", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9653" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A key to the Witch's house's front door. (Witch's House)", + "durability": null, + "name": "Door key", + "archery_ticket_price": "0", + "id": "9654" + }, + { + "destroy_message": "You found this ladder top on a wall section in the north of Meiyerditch; you can get another one there.", + "examine": "The top part of a ladder.", + "durability": null, + "name": "Ladder top", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9655" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A tome of experience that awards 2000 XP per chapter.", + "durability": null, + "name": "Tome of xp (3)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9656" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A tome of experience that awards 2000 XP per chapter.", + "durability": null, + "name": "Tome of xp (2)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9657" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A tome of experience that awards 2000 XP per chapter.", + "durability": null, + "name": "Tome of xp (1)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9658" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9659" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9660" + }, + { + "destroy_message": "Safalaan gave you this key as a reward for helping out in Meiyerditch, you can get another key from him.", + "examine": "A key allowing a shortcut into the Sanguinesti region. (Darkness of Hallowvale)", + "durability": null, + "name": "Shortcut key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9662" + }, + { + "durability": null, + "name": "Torch", + "archery_ticket_price": "0", + "id": "9665", + "equipment_slot": "3" + }, + { + "shop_price": "25000", + "ge_buy_limit": "100", + "examine": "Unknown edit", + "grand_exchange_price": "27500", + "durability": null, + "name": "Pros'yte harness m", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "9666" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27500", + "durability": null, + "name": "Pros'yte harness m", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9667" + }, + { + "shop_price": "20000", + "ge_buy_limit": "100", + "examine": "Unknown edit", + "grand_exchange_price": "22700", + "durability": null, + "name": "Initiate harness m", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "9668" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22700", + "durability": null, + "name": "Initiate harness m", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9669" + }, + { + "shop_price": "25000", + "ge_buy_limit": "100", + "examine": "Unknown edit", + "grand_exchange_price": "27900", + "durability": null, + "name": "Pros'yte harness f", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "9670" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27900", + "durability": null, + "name": "Pros'yte harness f", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9671" + }, + { + "remove_head": "true", + "requirements": "{1,30}-{5,20}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's helm.", + "durability": null, + "weight": "2", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "4619", + "name": "Proselyte sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9672", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,4,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4619", + "durability": null, + "name": "Proselyte sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9673" + }, + { + "requirements": "{1,30}-{5,20}", + "shop_price": "12000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's armour.", + "durability": null, + "weight": "8.6", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "7076", + "name": "Proselyte hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9674", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,8,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7076", + "durability": null, + "name": "Proselyte hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9675" + }, + { + "requirements": "{1,30}-{5,20}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's leg armour", + "durability": null, + "weight": "7.7", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "5923", + "name": "Proselyte cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9676", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5923", + "durability": null, + "name": "Proselyte cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9677" + }, + { + "requirements": "{1,30}-{5,20}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's leg armour.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "5730", + "name": "Proselyte tasset", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9678", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5730", + "durability": null, + "name": "Proselyte tasset", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9679" + }, + { + "examine": "A rendered down baby sea slug.", + "durability": null, + "name": "Sea slug glue", + "archery_ticket_price": "0", + "id": "9680" + }, + { + "destroy_message": "As a security precaution, your CommOrb will automatically self", + "examine": "A Temple Knight Communication Orb. Top Secret!", + "durability": null, + "name": "Commorb v2", + "archery_ticket_price": "0", + "id": "9681" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A copy of the mysterious glyphs.", + "durability": null, + "name": "Door transcription", + "archery_ticket_price": "0", + "id": "9682" + }, + { + "examine": "Dead sea slug, very sticky.", + "durability": null, + "name": "Dead sea slug", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9683" + }, + { + "destroy_message": "You can get this page from Mayor Hobb's Desk.", + "examine": "A page from Maledict's holy book.", + "durability": null, + "name": "Page 1", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9684" + }, + { + "destroy_message": "You can get this page from Ezekial Lovecraft.", + "examine": "A page from Maledict's holy book.", + "durability": null, + "name": "Page 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9685" + }, + { + "destroy_message": "You will have to get the torn page from Col. O' Niall.", + "examine": "A page from Maledict's holy book.", + "durability": null, + "name": "Page 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9686" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A piece of torn page.", + "durability": null, + "name": "Fragment 1", + "archery_ticket_price": "0", + "id": "9687" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A piece of torn page.", + "durability": null, + "name": "Fragment 2", + "archery_ticket_price": "0", + "id": "9688" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A piece of torn page.", + "durability": null, + "name": "Fragment 3", + "archery_ticket_price": "0", + "id": "9689" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank water rune.", + "durability": null, + "name": "Blank water rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9690" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9691" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank air rune.", + "durability": null, + "name": "Blank air rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9692" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "9", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9693" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank earth rune.", + "durability": null, + "name": "Blank earth rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9694" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "7", + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9695" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank mind rune.", + "durability": null, + "name": "Blank mind rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9696" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "Used for basic missile spells.", + "grand_exchange_price": "6", + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9697" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank fire rune.", + "durability": null, + "name": "Blank fire rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9698" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "16", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9699" + }, + { + "durability": null, + "name": "Torch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9701" + }, + { + "examine": "A big, bad troll.", + "durability": null, + "name": "Stick", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "9702", + "weapon_interface": "5", + "equipment_slot": "3" + }, + { + "shop_price": "35", + "examine": "Basic training sword.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "attack_audios": "2500,2500,2517,2500", + "name": "Training sword", + "archery_ticket_price": "0", + "id": "9703", + "bonuses": "4,3,-2,0,0,0,2,1,0,0,0,5,0,0,0" + }, + { + "examine": "Made of flimsy painted wood.", + "durability": null, + "name": "Training shield", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "9704", + "bonuses": "0,0,0,0,0,4,5,3,1,4,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Light and flexible, good for a beginner.", + "durability": null, + "destroy": "true", + "weight": "1.3", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "attack_audios": "2700,0,0,0", + "name": "Training bow", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9705", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Standard training arrows.", + "durability": null, + "name": "Training arrows", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9706", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "examine": "Book of the elemental shield.", + "durability": null, + "name": "Slashed book", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9715" + }, + { + "examine": "Book of the elemental helm.", + "durability": null, + "name": "Beaten book", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9717" + }, + { + "examine": "On the subject of lava dippers.", + "durability": null, + "name": "Crane schematic", + "archery_ticket_price": "0", + "id": "9718" + }, + { + "examine": "A scroll with a lever schematic drawn on it.", + "durability": null, + "name": "Lever schematic", + "archery_ticket_price": "0", + "id": "9719" + }, + { + "examine": "A crane claw.", + "durability": null, + "name": "Crane claw", + "weight": "1", + "archery_ticket_price": "0", + "id": "9720" + }, + { + "examine": "A pipe that belongs in a cannon stand.", + "durability": null, + "name": "Pipe", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9723" + }, + { + "examine": "A large cog.", + "durability": null, + "name": "Large cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "9724" + }, + { + "examine": "A medium cog.", + "durability": null, + "name": "Medium cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "9725" + }, + { + "examine": "A small cog.", + "durability": null, + "name": "Small cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "9726" + }, + { + "examine": "A primed elemental ingot.", + "durability": null, + "name": "Primed bar", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "9727" + }, + { + "examine": "An elemental mind ingot.", + "durability": null, + "name": "Elemental mind bar", + "weight": "1", + "archery_ticket_price": "0", + "id": "9728" + }, + { + "ge_buy_limit": "100", + "examine": "A helmet made in the Elemental Workshop.", + "grand_exchange_price": "196", + "durability": null, + "name": "Elemental helmet", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9729", + "bonuses": "0,0,0,0,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "196", + "durability": null, + "name": "Elemental helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9730" + }, + { + "ge_buy_limit": "100", + "examine": "A shield made in the Elemental Workshop.", + "grand_exchange_price": "8351", + "durability": null, + "name": "Mind shield", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9731", + "bonuses": "0,0,0,0,0,0,0,0,9,0,25,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8351", + "durability": null, + "name": "Mind shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9732" + }, + { + "shop_price": "1200", + "ge_buy_limit": "100", + "examine": "A helmet made in the Elemental Workshop.", + "grand_exchange_price": "1589", + "durability": null, + "name": "Mind helmet", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9733", + "bonuses": "0,0,0,0,0,0,0,0,6,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1589", + "durability": null, + "name": "Mind helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9734" + }, + { + "ge_buy_limit": "10000", + "examine": "Not much good for blowing.", + "grand_exchange_price": "902", + "durability": null, + "name": "Desert goat horn", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9735" + }, + { + "ge_buy_limit": "10000", + "examine": "Finely ground desert goat horn.", + "grand_exchange_price": "1082", + "durability": null, + "name": "Goat horn dust", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9736" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1082", + "durability": null, + "name": "Goat horn dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9737" + }, + { + "durability": null, + "name": "Desert goat horn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9738" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "4 doses of combat potion.", + "grand_exchange_price": "45", + "durability": null, + "name": "Combat potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9739" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "45", + "durability": null, + "name": "Combat potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9740" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "3 doses of combat potion.", + "grand_exchange_price": "25", + "durability": null, + "name": "Combat potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9741" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Combat potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9742" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "2 doses of combat potion.", + "grand_exchange_price": "19", + "durability": null, + "name": "Combat potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9743" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Combat potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9744" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "1 dose of combat potion.", + "grand_exchange_price": "72", + "durability": null, + "name": "Combat potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9745" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "72", + "durability": null, + "name": "Combat potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9746" + }, + { + "requirements": "{0,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of attack.", + "durability": null, + "name": "Attack cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9747", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{0,99}", + "durability": null, + "name": "Attack cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9748", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{0,99}", + "shop_price": "99000", + "examine": "Attack skillcape hood.", + "durability": null, + "name": "Attack hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9749", + "equipment_slot": "0" + }, + { + "requirements": "{2,99}", + "shop_price": "99000", + "examine": "The cape only worn by the strongest people.", + "durability": null, + "name": "Strength cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9750", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{2,99}", + "durability": null, + "name": "Strength cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9751", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{2,99}", + "shop_price": "99000", + "examine": "Strength skillcape hood.", + "durability": null, + "name": "Strength hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9752", + "equipment_slot": "0" + }, + { + "requirements": "{1,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of the art of Defence.", + "durability": null, + "name": "Defence cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9753", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{1,99}", + "durability": null, + "name": "Defence cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9754", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{1,99}", + "shop_price": "99000", + "examine": "Defence skillcape hood.", + "durability": null, + "name": "Defence hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9755", + "equipment_slot": "0" + }, + { + "requirements": "{4,99}", + "shop_price": "99000", + "examine": "The cape worn by master archers.", + "durability": null, + "name": "Ranging cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9756", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{4,99}", + "durability": null, + "name": "Ranging cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9757", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{4,99}", + "shop_price": "99000", + "examine": "Range skillcape hood.", + "durability": null, + "name": "Ranging hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9758", + "equipment_slot": "0" + }, + { + "requirements": "{5,99}", + "shop_price": "99000", + "examine": "The cape worn by the most pious of heroes.", + "durability": null, + "name": "Prayer cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9759", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{5,99}", + "durability": null, + "name": "Prayer cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9760", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{5,99}", + "shop_price": "99000", + "examine": "Prayer skillcape hood.", + "durability": null, + "name": "Prayer hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9761", + "equipment_slot": "0" + }, + { + "requirements": "{6,99}", + "shop_price": "99000", + "examine": "The cape worn by the most powerful mages.", + "durability": null, + "name": "Magic cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9762", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{6,99}", + "durability": null, + "name": "Magic cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9763", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{6,99}", + "shop_price": "99000", + "examine": "Magic skillcape hood.", + "durability": null, + "name": "Magic hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9764", + "equipment_slot": "0" + }, + { + "requirements": "{20,99}", + "shop_price": "99000", + "examine": "The cape worn by master runecrafters.", + "durability": null, + "name": "Runecraft cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9765", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{20,99}", + "durability": null, + "name": "Runecraft cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9766", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{20,99}", + "shop_price": "99000", + "examine": "Runecrafting skillcape hood.", + "durability": null, + "name": "Runecrafting hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9767", + "equipment_slot": "0" + }, + { + "requirements": "{3,99}", + "shop_price": "99000", + "examine": "The cape worn by well-constituted adventurers.", + "durability": null, + "name": "Hitpoints cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9768", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{3,99}", + "durability": null, + "name": "Hitpoints cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9769", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{3,99}", + "shop_price": "99000", + "examine": "Constitution skillcape hood.", + "durability": null, + "name": "Hitpoints hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9770", + "equipment_slot": "0" + }, + { + "requirements": "{16,99}", + "shop_price": "99000", + "examine": "The cape worn by the most agile of heroes.", + "durability": null, + "name": "Agility cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9771", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{16,99}", + "durability": null, + "name": "Agility cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9772", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{16,99}", + "shop_price": "99000", + "examine": "Agility skillcape hood.", + "durability": null, + "name": "Agility hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9773", + "equipment_slot": "0" + }, + { + "requirements": "{15,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled at the art of herblore.", + "durability": null, + "name": "Herblore cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9774", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{15,99}", + "durability": null, + "name": "Herblore cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9775", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{15,99}", + "shop_price": "99000", + "examine": "Herblore skillcape hood.", + "durability": null, + "name": "Herblore hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9776", + "equipment_slot": "0" + }, + { + "requirements": "{17,99}", + "shop_price": "99000", + "examine": "The cape worn by master thieves.", + "durability": null, + "name": "Thieving cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9777", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{17,99}", + "durability": null, + "name": "Thieving cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9778", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{17,99}", + "shop_price": "99000", + "examine": "Thieving skillcape hood.", + "durability": null, + "name": "Thieving hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9779", + "equipment_slot": "0" + }, + { + "requirements": "{12,99}", + "shop_price": "99000", + "examine": "The cape worn by master craftworkers.", + "durability": null, + "name": "Crafting cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9780", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{12,99}", + "durability": null, + "name": "Crafting cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9781", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{12,99}", + "shop_price": "99000", + "examine": "Crafting skillcape hood.", + "durability": null, + "name": "Crafting hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9782", + "equipment_slot": "0" + }, + { + "requirements": "{9,99}", + "shop_price": "99000", + "examine": "The cape worn by the best of fletchers.", + "durability": null, + "name": "Fletching cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9783", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{9,99}", + "durability": null, + "name": "Fletching cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9784", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{9,99}", + "shop_price": "99000", + "examine": "Fletching skillcape hood.", + "durability": null, + "name": "Fletching hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9785", + "equipment_slot": "0" + }, + { + "requirements": "{18,99}", + "shop_price": "99000", + "examine": "The cape worn by slayer masters.", + "durability": null, + "name": "Slayer cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9786", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{18,99}", + "durability": null, + "name": "Slayer cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9787", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{18,99}", + "shop_price": "99000", + "examine": "Slayer skillcape hood.", + "durability": null, + "name": "Slayer hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9788", + "equipment_slot": "0" + }, + { + "requirements": "{22,99}", + "shop_price": "99000", + "examine": "The cape worn by master builders.", + "durability": null, + "name": "Construct. cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9789", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{22,99}", + "durability": null, + "name": "Construct. cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9790", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{22,99}", + "shop_price": "99000", + "examine": "Construction skillcape hood.", + "durability": null, + "name": "Construct. hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9791", + "equipment_slot": "0" + }, + { + "requirements": "{14,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled miners.", + "durability": null, + "name": "Mining cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9792", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{14,99}", + "durability": null, + "name": "Mining cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9793", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{14,99}", + "shop_price": "99000", + "examine": "Mining skillcape hood.", + "durability": null, + "name": "Mining hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9794", + "equipment_slot": "0" + }, + { + "requirements": "{13,99}", + "shop_price": "99000", + "examine": "The cape worn by master smiths.", + "durability": null, + "name": "Smithing cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9795", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{13,99}", + "durability": null, + "name": "Smithing cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9796", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{13,99}", + "shop_price": "99000", + "examine": "Smithing skillcape hood.", + "durability": null, + "name": "Smithing hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9797", + "equipment_slot": "0" + }, + { + "requirements": "{10,99}", + "shop_price": "99000", + "examine": "The cape worn by the best fishermen.", + "durability": null, + "name": "Fishing cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9798", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{10,99}", + "durability": null, + "name": "Fishing cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9799", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{10,99}", + "shop_price": "99000", + "examine": "Fishing skillcape hood.", + "durability": null, + "name": "Fishing hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9800", + "equipment_slot": "0" + }, + { + "requirements": "{7,99}", + "shop_price": "99000", + "examine": "The cape worn by the world's best chefs.", + "durability": null, + "name": "Cooking cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9801", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{7,99}", + "durability": null, + "name": "Cooking cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9802", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{7,99}", + "shop_price": "99000", + "examine": "Cooking skillcape hood.", + "durability": null, + "name": "Cooking hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9803", + "equipment_slot": "0" + }, + { + "requirements": "{11,99}", + "shop_price": "99000", + "examine": "The cape worn by master firelighters.", + "durability": null, + "name": "Firemaking cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9804", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{11,99}", + "durability": null, + "name": "Firemaking cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9805", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{11,99}", + "shop_price": "99000", + "examine": "Firemaking skillcape hood.", + "durability": null, + "name": "Firemaking hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9806", + "equipment_slot": "0" + }, + { + "requirements": "{8,99}", + "shop_price": "99000", + "examine": "The cape worn by master woodcutters (Obtaining level 99 skill)", + "durability": null, + "name": "Woodcutting cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9807", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{8,99}", + "durability": null, + "name": "Woodcut. cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9808", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{8,99}", + "shop_price": "99000", + "examine": "Woodcutting skillcape hood.", + "durability": null, + "name": "Woodcutting hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9809", + "equipment_slot": "0" + }, + { + "requirements": "{19,99}", + "shop_price": "99000", + "examine": "The cape worn by master farmers.", + "durability": null, + "name": "Farming cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9810", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{19,99}", + "durability": null, + "name": "Farming cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9811", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{19,99}", + "shop_price": "99000", + "examine": "Farming skillcape hood.", + "durability": null, + "name": "Farming hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9812", + "equipment_slot": "0" + }, + { + "shop_price": "99000", + "examine": "The cape worn by only the most experienced adventurers.", + "durability": null, + "name": "Quest point cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9813", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "shop_price": "99000", + "examine": "Quest skillcape hood.", + "durability": null, + "name": "Quest point hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9814", + "equipment_slot": "0" + }, + { + "examine": "A woolly bobble hat.", + "durability": null, + "name": "Bobble hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "9815", + "equipment_slot": "0" + }, + { + "examine": "A woolly scarf.", + "durability": null, + "name": "Bobble scarf", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "9816", + "equipment_slot": "2" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak cape rack", + "archery_ticket_price": "0", + "id": "9817" + }, + { + "grand_exchange_price": "88", + "durability": null, + "name": "Teak cape rack", + "archery_ticket_price": "0", + "id": "9818" + }, + { + "grand_exchange_price": "120", + "durability": null, + "name": "M'gany cape rack", + "archery_ticket_price": "0", + "id": "9819" + }, + { + "grand_exchange_price": "136025", + "durability": null, + "name": "Gilded cape rack", + "archery_ticket_price": "0", + "id": "9820" + }, + { + "grand_exchange_price": "328598", + "durability": null, + "name": "Marble cape rack", + "archery_ticket_price": "0", + "id": "9821" + }, + { + "grand_exchange_price": "979747", + "durability": null, + "name": "Magical cape rack", + "archery_ticket_price": "0", + "id": "9822" + }, + { + "grand_exchange_price": "59", + "durability": null, + "name": "Oak costume box", + "archery_ticket_price": "0", + "id": "9823" + }, + { + "grand_exchange_price": "122", + "durability": null, + "name": "Teak costume box", + "archery_ticket_price": "0", + "id": "9824" + }, + { + "grand_exchange_price": "59", + "durability": null, + "name": "Mahogany cos box", + "archery_ticket_price": "0", + "id": "9825" + }, + { + "grand_exchange_price": "15", + "durability": null, + "name": "Oak armour case", + "archery_ticket_price": "0", + "id": "9826" + }, + { + "grand_exchange_price": "27", + "durability": null, + "name": "Teak armour case", + "archery_ticket_price": "0", + "id": "9827" + }, + { + "grand_exchange_price": "90", + "durability": null, + "name": "M'gany arm'r case", + "archery_ticket_price": "0", + "id": "9828" + }, + { + "grand_exchange_price": "103", + "durability": null, + "name": "Oak magic wardrobe", + "archery_ticket_price": "0", + "id": "9829" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak magic wardrobe", + "archery_ticket_price": "0", + "id": "9830" + }, + { + "grand_exchange_price": "127", + "durability": null, + "name": "Teak magic wardrobe", + "archery_ticket_price": "0", + "id": "9831" + }, + { + "grand_exchange_price": "13", + "durability": null, + "name": "Carved teak magic wardrobe", + "archery_ticket_price": "0", + "id": "9832" + }, + { + "grand_exchange_price": "135", + "durability": null, + "name": "Mahogany magic wardrobe", + "archery_ticket_price": "0", + "id": "9833" + }, + { + "grand_exchange_price": "137267", + "durability": null, + "name": "Gilded magic wardrobe", + "archery_ticket_price": "0", + "id": "9834" + }, + { + "grand_exchange_price": "341567", + "durability": null, + "name": "Marble magic wardrobe", + "archery_ticket_price": "0", + "id": "9835" + }, + { + "grand_exchange_price": "21", + "durability": null, + "name": "Oak toy box", + "archery_ticket_price": "0", + "id": "9836" + }, + { + "grand_exchange_price": "151", + "durability": null, + "name": "Teak toy box", + "archery_ticket_price": "0", + "id": "9837" + }, + { + "grand_exchange_price": "20", + "durability": null, + "name": "Mahogany toy box", + "archery_ticket_price": "0", + "id": "9838" + }, + { + "grand_exchange_price": "21", + "durability": null, + "name": "Oak treasure chest", + "archery_ticket_price": "0", + "id": "9839" + }, + { + "grand_exchange_price": "157", + "durability": null, + "name": "Teak treas' chest", + "archery_ticket_price": "0", + "id": "9840" + }, + { + "grand_exchange_price": "39", + "durability": null, + "name": "M'gany treas' chest", + "archery_ticket_price": "0", + "id": "9841" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3", + "examine": "A ready-to-assemble oak cape rack.", + "durability": null, + "name": "Oak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9843" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92", + "examine": "A ready-to-assemble teak cape rack..", + "durability": null, + "name": "Teak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9844" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "examine": "A ready-to-assemble mahogany cape rack.", + "durability": null, + "name": "M'gany cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9845" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "130900", + "examine": "A ready-to-assemble gilded mahogany rack.", + "durability": null, + "name": "Gilded cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9846" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "329500", + "examine": "A ready-to-assemble marble cape rack.", + "durability": null, + "name": "Marble cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9847" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1000000", + "examine": "A ready-to-assemble magic cape rack.", + "durability": null, + "name": "Magical cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9848" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "examine": "A ready-to-assemble oak toy box.", + "durability": null, + "name": "Oak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9849" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "165", + "examine": "A ready-to-assemble teak toy box.", + "durability": null, + "name": "Teak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9850" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "examine": "A ready-to-assemble mahogany toy box.", + "durability": null, + "name": "Mahogany toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9851" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "examine": "A ready-to-assemble oak magic wardrobe.", + "durability": null, + "name": "Oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9852" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak magic wardrobe.", + "durability": null, + "name": "Carved oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9853" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "133", + "examine": "A ready-to-assemble teak magic wardrobe.", + "durability": null, + "name": "Teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9854" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "examine": "A ready-to-assemble carved teak magic wardrobe.", + "durability": null, + "name": "Carved teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9855" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "129", + "examine": "A ready-to-assemble mahogany magic wardrobe.", + "durability": null, + "name": "Mahogany magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9856" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137700", + "examine": "A ready-to-assemble gilded mahogany magic wardrobe.", + "durability": null, + "name": "Gilded magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9857" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "335800", + "examine": "A ready-to-assemble marble magic wardrobe.", + "durability": null, + "name": "Marble magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9858" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "examine": "A ready-to-assemble oak armour case.", + "durability": null, + "name": "Oak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9859" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29", + "examine": "A ready-to-assemble teak armour case.", + "durability": null, + "name": "Teak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9860" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "88", + "examine": "A ready-to-assemble mahogany armour case.", + "durability": null, + "name": "M'gany arm'r case", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9861" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24", + "examine": "A ready-to-assemble oak treasure chest.", + "durability": null, + "name": "Oak treasure chest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9862" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "164", + "examine": "A ready-to-assemble teak treasure chest.", + "durability": null, + "name": "Teak treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9863" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "41", + "examine": "A ready-to-assemble mahogany treasure chest.", + "durability": null, + "name": "M'gany treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9864" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "62", + "durability": null, + "name": "Oak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9865" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "135", + "durability": null, + "name": "Teak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9866" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60", + "durability": null, + "name": "Mahogany cos box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9867" + }, + { + "durability": null, + "name": "Oak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9868" + }, + { + "durability": null, + "name": "Teak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9869" + }, + { + "durability": null, + "name": "M'gany cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9870" + }, + { + "durability": null, + "name": "Gilded cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9871" + }, + { + "durability": null, + "name": "Marble cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9872" + }, + { + "durability": null, + "name": "Magical cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9873" + }, + { + "durability": null, + "name": "Oak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9874" + }, + { + "durability": null, + "name": "Teak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9875" + }, + { + "durability": null, + "name": "Mahogany toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9876" + }, + { + "durability": null, + "name": "Oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9877" + }, + { + "durability": null, + "name": "Carved oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9878" + }, + { + "durability": null, + "name": "Teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9879" + }, + { + "durability": null, + "name": "Carved teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9880" + }, + { + "durability": null, + "name": "Mahogany magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9881" + }, + { + "durability": null, + "name": "Gilded magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9882" + }, + { + "durability": null, + "name": "Marble magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9883" + }, + { + "durability": null, + "name": "Oak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9884" + }, + { + "durability": null, + "name": "Teak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9885" + }, + { + "durability": null, + "name": "M'gany arm'r case", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9886" + }, + { + "durability": null, + "name": "Oak treasure chest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9887" + }, + { + "durability": null, + "name": "Teak treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9888" + }, + { + "durability": null, + "name": "M'gany treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9889" + }, + { + "durability": null, + "name": "Oak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9890" + }, + { + "durability": null, + "name": "Teak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9891" + }, + { + "durability": null, + "name": "Mahogany cos box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9892" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A lump that at some point might have been a gout tuber.", + "durability": null, + "name": "Goutweedy lump", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9901" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pile of gout tubers suitable for use in mountainous terrain.", + "durability": null, + "name": "Hardy gout tubers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9902" + }, + { + "destroy_message": "My Arm will probably have a spare copy.", + "examine": "Farmer Gricoller's Farming Manual.", + "durability": null, + "name": "Farming manual", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9903" + }, + { + "examine": "A book for sailors.", + "durability": null, + "name": "Sailing book", + "archery_ticket_price": "0", + "id": "9904" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9906", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9907", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9908", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9909", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9910", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9911", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9912", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A white destabiliser for use in a ghost buster.", + "durability": null, + "name": "White destabiliser", + "archery_ticket_price": "0", + "id": "9913", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A red destabiliser for use in a ghost buster.", + "durability": null, + "name": "Red destabiliser", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9914", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A blue destabiliser for use in a ghost buster.", + "durability": null, + "name": "Blue destabiliser", + "archery_ticket_price": "0", + "id": "9915", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A green destabiliser for use in a ghost buster.", + "durability": null, + "name": "Green destabiliser", + "archery_ticket_price": "0", + "id": "9916", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A yellow destabiliser for use in a ghost buster.", + "durability": null, + "name": "Yellow destabiliser", + "archery_ticket_price": "0", + "id": "9917", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A black destabiliser for use in a ghost buster.", + "durability": null, + "name": "Black destabiliser", + "archery_ticket_price": "0", + "id": "9918", + "equipment_slot": "5" + }, + { + "examine": "An angry-looking tree root.", + "durability": null, + "name": "Evil root", + "archery_ticket_price": "0", + "id": "9919" + }, + { + "remove_head": "true", + "destroy_message": "Players may get another from Diango in Draynor Village.", + "examine": "Better not light it!", + "durability": null, + "name": "Jack lantern mask", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9920", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Skeleton feet.", + "durability": null, + "name": "Skeleton boots", + "weight": "2", + "archery_ticket_price": "0", + "id": "9921", + "equipment_slot": "10" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some skeletal gloves.", + "durability": null, + "name": "Skeleton gloves", + "weight": "2", + "archery_ticket_price": "0", + "id": "9922", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Does my pelvis look big in this?", + "durability": null, + "name": "Skeleton leggings", + "weight": "2", + "archery_ticket_price": "0", + "id": "9923", + "equipment_slot": "7" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "remove_sleeves": "true", + "examine": "The shirt of a fully body skeleton costume.", + "durability": null, + "name": "Skeleton shirt", + "weight": "2", + "archery_ticket_price": "0", + "id": "9924", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scary skeleton mask.", + "durability": null, + "name": "Skeleton mask", + "weight": "2", + "archery_ticket_price": "0", + "id": "9925", + "equipment_slot": "0" + }, + { + "destroy_message": "You'll have to buy another one from Auguste on Entrana.", + "shop_price": "30000", + "examine": "This sapling is ready to be replanted in a tree patch.", + "durability": null, + "name": "Auguste's sapling", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9932" + }, + { + "examine": "An incomplete origami balloon.", + "durability": null, + "name": "Balloon structure", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9933" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Origami balloon", + "archery_ticket_price": "0", + "id": "9934" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Yellow balloon", + "archery_ticket_price": "0", + "id": "9935" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Blue balloon", + "archery_ticket_price": "0", + "id": "9936" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Red balloon", + "archery_ticket_price": "0", + "id": "9937" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Orange balloon", + "archery_ticket_price": "0", + "id": "9938" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Green balloon", + "archery_ticket_price": "0", + "id": "9939" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Purple balloon", + "archery_ticket_price": "0", + "id": "9940" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Pink balloon", + "archery_ticket_price": "0", + "id": "9941" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Black balloon", + "archery_ticket_price": "0", + "id": "9942" + }, + { + "examine": "A bag full of sand.", + "durability": null, + "name": "Sandbag", + "weight": "1", + "archery_ticket_price": "0", + "id": "9943", + "equipment_slot": "3" + }, + { + "destroy_message": "You'll have to visit Auguste on Entrana to get a new jacket.", + "remove_sleeves": "true", + "examine": "For all your flying needs.", + "durability": null, + "name": "Bomber jacket", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9944", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You'll have to visit Auguste on Entrana to get a new cap.", + "examine": "The red baron would be jealous.", + "durability": null, + "name": "Bomber cap", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9945", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "For better flying vision.", + "durability": null, + "name": "Cap and goggles", + "archery_ticket_price": "0", + "id": "9946", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A red coloured disk that's seen better days.", + "durability": null, + "name": "Old red disk", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9947" + }, + { + "requirements": "{21,99}", + "shop_price": "99000", + "examine": "The cape worn by master hunters.", + "durability": null, + "name": "Hunter cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9948", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,99}", + "durability": null, + "name": "Hunter cape(t)", + "archery_ticket_price": "0", + "id": "9949", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{21,99}", + "shop_price": "99000", + "examine": "Hunter skillcape hood.", + "durability": null, + "name": "Hunter hood", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9950", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Imp", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "9952" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9953" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9954" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9955" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9956" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9957" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9958" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9959" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9960" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9961" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9962" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9963" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9964" + }, + { + "examine": "It appears to be protecting the nest.", + "durability": null, + "name": "Giant eagle", + "archery_ticket_price": "0", + "id": "9974" + }, + { + "examine": "Aww, how cute. ", + "durability": null, + "name": "Rabbit", + "archery_ticket_price": "0", + "id": "9975" + }, + { + "examine": "Even more volatile than its vegetarian counterpart.", + "grand_exchange_price": "796", + "durability": null, + "name": "Red chinchompa", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "9977", + "bonuses": "0,0,0,0,70,0,0,0,0,0,0,0,15,0,0" + }, + { + "shop_price": "63", + "ge_buy_limit": "10000", + "examine": "This certainly needs cooking!", + "grand_exchange_price": "204", + "durability": null, + "name": "Raw bird meat", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "9978" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "204", + "durability": null, + "name": "Raw bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9979" + }, + { + "ge_buy_limit": "1000", + "examine": "A nicely roasted bird.", + "grand_exchange_price": "18", + "durability": null, + "name": "Roast bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9980" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "18", + "durability": null, + "name": "Roast bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9981" + }, + { + "durability": null, + "name": "Burnt bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9983" + }, + { + "shop_price": "63", + "ge_buy_limit": "1000", + "examine": "This certainly needs cooking!", + "grand_exchange_price": "130", + "durability": null, + "name": "Skewered bird meat", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "9984" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "130", + "durability": null, + "name": "Skewered bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9985" + }, + { + "ge_buy_limit": "1000", + "examine": "A slab of raw beast meat.", + "grand_exchange_price": "16", + "durability": null, + "name": "Raw beast meat", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9986" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "16", + "durability": null, + "name": "Raw beast meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9987" + }, + { + "ge_buy_limit": "1000", + "examine": "A delicious looking slab of roast beast.", + "grand_exchange_price": "42", + "durability": null, + "name": "Roast beast meat", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9988" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "42", + "durability": null, + "name": "Roast beast meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9989" + }, + { + "durability": null, + "name": "Burnt beast meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9991" + }, + { + "ge_buy_limit": "1000", + "examine": "Beast meat on a spit.", + "grand_exchange_price": "97", + "durability": null, + "name": "Skewered beast", + "tradeable": "true", + "weight": "3.5", + "archery_ticket_price": "0", + "id": "9992" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "97", + "durability": null, + "name": "Skewered beast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9993" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of chopped tomatoes with an extra kick.", + "grand_exchange_price": "324", + "durability": null, + "name": "Spicy tomato", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9994" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "324", + "durability": null, + "name": "Spicy tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9995" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of chopped beef with an extra kick.", + "grand_exchange_price": "263", + "durability": null, + "name": "Spicy minced meat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9996" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "263", + "durability": null, + "name": "Spicy minced meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9997" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of hunter potion.", + "grand_exchange_price": "566", + "durability": null, + "name": "Hunter potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9998" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "566", + "durability": null, + "name": "Hunter potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9999" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of hunter potion.", + "grand_exchange_price": "229", + "durability": null, + "name": "Hunter potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10000" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "229", + "durability": null, + "name": "Hunter potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10001" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of hunter potion.", + "grand_exchange_price": "159", + "durability": null, + "name": "Hunter potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10002" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "159", + "durability": null, + "name": "Hunter potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10003" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of hunter potion.", + "grand_exchange_price": "148", + "durability": null, + "name": "Hunter potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10004" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "148", + "durability": null, + "name": "Hunter potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10005" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A simple bird catcher./There's something caught in it.", + "grand_exchange_price": "2", + "durability": null, + "name": "Bird snare", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10006" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Bird snare", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10007" + }, + { + "requirements": "{21,27}", + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "If a creature goes inside, then the box should slam shut.", + "grand_exchange_price": "308", + "durability": null, + "name": "Box trap", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10008" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "308", + "durability": null, + "name": "Box trap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10009" + }, + { + "requirements": "{21,15}", + "shop_price": "24", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "For catching butterflies...", + "walk_anim": "1205", + "durability": null, + "weight": "0.2", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "weapon_interface": "10", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1", + "stand_anim": "813", + "name": "Butterfly net", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10010", + "stand_turn_anim": "1209" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Butterfly net", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10011" + }, + { + "requirements": "{21,15}", + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "It's got little holes at the top.", + "grand_exchange_price": "156", + "durability": null, + "name": "Butterfly jar", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10012" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156", + "durability": null, + "name": "Butterfly jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10013" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "143", + "examine": "There's a black warlock butterfly in here.", + "durability": null, + "name": "Black warlock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10014" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "143", + "durability": null, + "name": "Black warlock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10015" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "227", + "examine": "There's a snowy knight butterfly in here.", + "durability": null, + "name": "Snowy knight", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10016" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "227", + "durability": null, + "name": "Snowy knight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10017" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "180", + "examine": "There's a sapphire glacialis butterfly in here.", + "durability": null, + "name": "Sapphire glacialis", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10018" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "180", + "durability": null, + "name": "Sapphire glacialis", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10019" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1270", + "examine": "There's a ruby harvest butterfly in here.", + "durability": null, + "name": "Ruby harvest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10020" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1270", + "durability": null, + "name": "Ruby harvest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10021" + }, + { + "shop_price": "500", + "examine": "A very large, single leather glove", + "durability": null, + "name": "Falconer's glove", + "tradeable": "false", + "destroy": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "10023", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "500", + "turn90cw_anim": "5166", + "examine": "A very large, single leather glove", + "walk_anim": "5164", + "durability": null, + "destroy": "true", + "weight": "1.8", + "turn90ccw_anim": "5167", + "attack_speed": "4", + "turn180_anim": "5165", + "render_anim": "1283", + "equipment_slot": "3", + "stand_anim": "5160", + "name": "Falconer's glove", + "tradeable": "false", + "run_anim": "5168", + "archery_ticket_price": "0", + "id": "10024", + "stand_turn_anim": "5161", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0" + }, + { + "requirements": "{21,71}", + "shop_price": "720", + "ge_buy_limit": "100", + "examine": "A magical catching box.", + "grand_exchange_price": "784", + "durability": null, + "name": "Magic box", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10025" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "784", + "durability": null, + "name": "Magic box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10026" + }, + { + "shop_price": "720", + "examine": "A magical catching box.", + "grand_exchange_price": "743", + "durability": null, + "name": "Imp-in-a-box(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10027" + }, + { + "shop_price": "720", + "examine": "A magical catching box.", + "grand_exchange_price": "743", + "durability": null, + "name": "Imp-in-a-box(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10028" + }, + { + "requirements": "{21,31}", + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "Reduces the risk of hand severage when poking large, vicious carnivores.", + "durability": null, + "weight": "1", + "weapon_interface": "6", + "equipment_slot": "3", + "grand_exchange_price": "1", + "name": "Teasing stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10029", + "bonuses": "7,8,0,-4,0,-1,1,2,0,0,0,8,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Teasing stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10030" + }, + { + "requirements": "{21,27}", + "shop_price": "18", + "ge_buy_limit": "100", + "examine": "The snare will tighten around animals passing through.", + "grand_exchange_price": "1", + "durability": null, + "name": "Rabbit snare", + "tradeable": "true", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "10031" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Rabbit snare", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10032" + }, + { + "requirements": "{4,45}", + "ge_buy_limit": "20000", + "turn90cw_anim": "3177", + "walk_anim": "3177", + "durability": null, + "turn90ccw_anim": "3177", + "attack_speed": "4", + "weapon_interface": "19", + "turn180_anim": "3177", + "render_anim": "234", + "equipment_slot": "3", + "grand_exchange_price": "973", + "stand_anim": "3175", + "name": "Chinchompa", + "run_anim": "3178", + "archery_ticket_price": "0", + "id": "10033", + "stand_turn_anim": "3177", + "bonuses": "0,0,0,0,45,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,55}", + "ge_buy_limit": "20000", + "turn90cw_anim": "3177", + "examine": "Even more volatile than its vegetarian counterpart.", + "walk_anim": "3177", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "3177", + "attack_speed": "4", + "weapon_interface": "19", + "turn180_anim": "3177", + "render_anim": "234", + "equipment_slot": "3", + "grand_exchange_price": "1382", + "stand_anim": "3175", + "name": "Red chinchompa", + "tradeable": "true", + "run_anim": "3178", + "archery_ticket_price": "0", + "id": "10034", + "stand_turn_anim": "3177", + "bonuses": "0,0,0,0,70,0,0,0,0,0,0,0,0,0,15" + }, + { + "requirements": "{21,52}", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in polar areas.", + "grand_exchange_price": "449", + "durability": null, + "name": "Kyatt legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10035", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,10,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "449", + "durability": null, + "name": "Kyatt legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10036" + }, + { + "requirements": "{21,52}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in polar areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "272", + "name": "Kyatt top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10037", + "bonuses": "0,0,0,0,0,10,15,19,0,12,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "272", + "durability": null, + "name": "Kyatt top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10038" + }, + { + "remove_head": "true", + "requirements": "{21,52}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in polar areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "grand_exchange_price": "8338", + "name": "Kyatt hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10039", + "bonuses": "0,0,0,0,-1,4,5,3,0,4,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8338", + "durability": null, + "name": "Kyatt hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10040" + }, + { + "requirements": "{21,28}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "grand_exchange_price": "2889", + "durability": null, + "name": "Larupia legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10041", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,5,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2889", + "durability": null, + "name": "Larupia legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10042" + }, + { + "requirements": "{21,28}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "3232", + "name": "Larupia top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10043", + "bonuses": "0,0,0,0,0,10,15,19,0,12,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3232", + "durability": null, + "name": "Larupia top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10044" + }, + { + "remove_head": "true", + "requirements": "{21,28}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "grand_exchange_price": "7237", + "name": "Larupia hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10045", + "bonuses": "0,0,0,0,-1,4,5,3,0,4,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7237", + "durability": null, + "name": "Larupia hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10046" + }, + { + "requirements": "{21,38}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "7", + "grand_exchange_price": "266", + "name": "Graahk legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10047", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "266", + "durability": null, + "name": "Graahk legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10048" + }, + { + "requirements": "{21,38}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "252", + "name": "Graahk top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10049", + "bonuses": "0,0,0,0,0,10,15,19,0,12,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "252", + "durability": null, + "name": "Graahk top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10050" + }, + { + "remove_head": "true", + "requirements": "{21,38}", + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "grand_exchange_price": "8445", + "name": "Graahk headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10051", + "bonuses": "0,0,0,0,-1,4,5,3,0,4,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8445", + "durability": null, + "name": "Graahk headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10052" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in wooded areas.", + "grand_exchange_price": "3527", + "durability": null, + "name": "Wood camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10053", + "bonuses": "0,0,0,0,0,10,15,19,0,12,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3527", + "durability": null, + "name": "Wood camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10054" + }, + { + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in wooded areas.", + "grand_exchange_price": "3228", + "durability": null, + "name": "Wood camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10055", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3228", + "durability": null, + "name": "Wood camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10056" + }, + { + "requirements": "{21,4}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in jungle areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "315", + "name": "Jungle camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10057", + "bonuses": "0,0,0,0,0,10,15,19,0,12,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "315", + "durability": null, + "name": "Jungle camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10058" + }, + { + "requirements": "{21,4}", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in jungle areas.", + "grand_exchange_price": "462", + "durability": null, + "name": "Jungle camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10059", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "462", + "durability": null, + "name": "Jungle camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10060" + }, + { + "requirements": "{21,10}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "541", + "name": "Desert camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10061", + "bonuses": "0,0,0,0,0,10,15,19,0,12,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "541", + "durability": null, + "name": "Desert camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10062" + }, + { + "requirements": "{21,10}", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in desert areas.", + "grand_exchange_price": "910", + "durability": null, + "name": "Desert camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10063", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "910", + "durability": null, + "name": "Desert camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10064" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in polar areas.", + "grand_exchange_price": "7990", + "durability": null, + "name": "Polar camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10065", + "bonuses": "0,0,0,0,0,10,15,19,0,12,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7990", + "durability": null, + "name": "Polar camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10066" + }, + { + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in polar areas", + "grand_exchange_price": "8389", + "durability": null, + "name": "Polar camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10067", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8389", + "durability": null, + "name": "Polar camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10068" + }, + { + "requirements": "{21,40}", + "ge_buy_limit": "100", + "examine": "A surprisingly aerodynamic cape.", + "grand_exchange_price": "1140", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "weight": "-2.2", + "archery_ticket_price": "0", + "id": "10069", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1140", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10070" + }, + { + "requirements": "{21,66}", + "ge_buy_limit": "100", + "examine": "A really surprisingly aerodynamic cape.", + "grand_exchange_price": "1262", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "weight": "-4.5", + "archery_ticket_price": "0", + "id": "10071", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1262", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10072" + }, + { + "requirements": "{21,40}", + "examine": "A surprisingly aerodynamic cape.", + "grand_exchange_price": "951", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10073", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,66}", + "examine": "A really surprisingly aerodynamic cape.", + "grand_exchange_price": "881", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10074", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,54}", + "ge_buy_limit": "100", + "examine": "Made from dark kebbit fur, these are perfect for tasks of a stealthier nature.", + "grand_exchange_price": "1063", + "durability": null, + "name": "Gloves of silence", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10075", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1063", + "durability": null, + "name": "Gloves of silence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10076" + }, + { + "ge_buy_limit": "100", + "examine": "Attack at your own risk.", + "grand_exchange_price": "80", + "durability": null, + "name": "Spiky vambraces", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10077", + "bonuses": "0,0,0,0,4,2,2,1,0,0,1,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "80", + "durability": null, + "name": "Spiky vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10078" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "100", + "examine": "Made from 100% real dragonhide. Now with added spikiness.", + "grand_exchange_price": "1353", + "durability": null, + "name": "Green spiky vambs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10079", + "bonuses": "0,0,0,-10,8,3,2,4,2,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1353", + "durability": null, + "name": "Green spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10080" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "100", + "examine": "Made from 100% real dragonhide. Now with added spikiness.", + "grand_exchange_price": "1773", + "durability": null, + "name": "Blue spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10081", + "bonuses": "0,0,0,-10,9,4,3,5,4,0,4,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1773", + "durability": null, + "name": "Blue spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10082" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "100", + "examine": "Vambraces made from 100% real dragonhide. Now with added spikes.", + "grand_exchange_price": "1978", + "durability": null, + "name": "Red spiky vambs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10083", + "bonuses": "0,0,0,-10,10,5,4,6,6,0,5,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1978", + "durability": null, + "name": "Red spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10084" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "100", + "examine": "Vambraces made from 100% real dragonhide. Now with added spikiness.", + "grand_exchange_price": "2727", + "durability": null, + "name": "Black spiky vambs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10085", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2727", + "durability": null, + "name": "Black spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10086" + }, + { + "ge_buy_limit": "5000", + "examine": "Attractive to other birds and hunters alike.", + "grand_exchange_price": "20", + "durability": null, + "name": "Stripy feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10087" + }, + { + "shop_price": "3", + "ge_buy_limit": "5000", + "examine": "A vivid red feather.", + "grand_exchange_price": "23", + "durability": null, + "name": "Red feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10088" + }, + { + "ge_buy_limit": "5000", + "examine": "A cool blue feather.", + "grand_exchange_price": "27", + "durability": null, + "name": "Blue feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10089" + }, + { + "ge_buy_limit": "5000", + "examine": "A bright yellow feather.", + "grand_exchange_price": "36", + "durability": null, + "name": "Yellow feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10090" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "A fairly plain feather.", + "grand_exchange_price": "25", + "durability": null, + "name": "Orange feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10091" + }, + { + "ge_buy_limit": "100", + "examine": "It's a shabby-looking larupia fur.", + "grand_exchange_price": "1195", + "durability": null, + "name": "Tatty larupia fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10093" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1195", + "durability": null, + "name": "Tatty larupia fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10094" + }, + { + "ge_buy_limit": "100", + "examine": "It's a perfect-looking larupia fur.", + "grand_exchange_price": "4986", + "durability": null, + "name": "Larupia fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10095" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4986", + "durability": null, + "name": "Larupia fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10096" + }, + { + "ge_buy_limit": "100", + "examine": "It's a shabby-looking graahk fur.", + "grand_exchange_price": "28", + "durability": null, + "name": "Tatty graahk fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10097" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28", + "durability": null, + "name": "Tatty graahk fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10098" + }, + { + "ge_buy_limit": "100", + "examine": "It's a perfect-looking graahk fur.", + "grand_exchange_price": "7574", + "durability": null, + "name": "Graahk fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10099" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7574", + "durability": null, + "name": "Graahk fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10100" + }, + { + "ge_buy_limit": "100", + "examine": "It's a shabby-looking kyatt fur.", + "grand_exchange_price": "23", + "durability": null, + "name": "Tatty kyatt fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10101" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23", + "durability": null, + "name": "Tatty kyatt fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10102" + }, + { + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "It's a perfect-looking kyatt fur.", + "grand_exchange_price": "11100", + "durability": null, + "name": "Kyatt fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10103" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11100", + "durability": null, + "name": "Kyatt fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10104" + }, + { + "ge_buy_limit": "5000", + "examine": "These bone spikes are both very tough and very sharp.", + "grand_exchange_price": "154", + "durability": null, + "name": "Kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10105" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "154", + "durability": null, + "name": "Kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10106" + }, + { + "ge_buy_limit": "5000", + "examine": "These bone spikes are both very tough and very sharp.", + "grand_exchange_price": "1619", + "durability": null, + "name": "Long kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10107" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1619", + "durability": null, + "name": "Long kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10108" + }, + { + "ge_buy_limit": "5000", + "examine": "A kebbit-sized set of dentures.", + "grand_exchange_price": "894", + "durability": null, + "name": "Kebbit teeth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10109" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "894", + "durability": null, + "name": "Kebbit teeth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10110" + }, + { + "ge_buy_limit": "5000", + "examine": "Previously a kebbit-sized set of dentures.", + "grand_exchange_price": "947", + "durability": null, + "name": "Kebbit teeth dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10111" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "947", + "durability": null, + "name": "Kebbit teeth dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10112" + }, + { + "ge_buy_limit": "5000", + "examine": "More menacing when attached to the owner.", + "grand_exchange_price": "55", + "durability": null, + "name": "Kebbit claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10113" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "55", + "durability": null, + "name": "Kebbit claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10114" + }, + { + "ge_buy_limit": "100", + "examine": "Sleek, silent, and furry.", + "grand_exchange_price": "92", + "durability": null, + "name": "Dark kebbit fur", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10115" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92", + "durability": null, + "name": "Dark kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10116" + }, + { + "shop_price": "12", + "ge_buy_limit": "175", + "examine": "A thick fur for a cold climate.", + "grand_exchange_price": "3862", + "durability": null, + "name": "Polar kebbit fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10117" + }, + { + "ge_buy_limit": "175", + "grand_exchange_price": "3862", + "durability": null, + "name": "Polar kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10118" + }, + { + "ge_buy_limit": "100", + "examine": "Not actually from a weasel, but it is, at least, furry.", + "grand_exchange_price": "3", + "durability": null, + "name": "Feldip weasel fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10119" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3", + "durability": null, + "name": "Feldip weasel fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10120" + }, + { + "ge_buy_limit": "100", + "examine": "Common fur from a common kebbit.", + "grand_exchange_price": "1555", + "durability": null, + "name": "Common kebbit fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10121" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1555", + "durability": null, + "name": "Common kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10122" + }, + { + "ge_buy_limit": "100", + "examine": "Sandy coloured kebbit fur.", + "grand_exchange_price": "95", + "durability": null, + "name": "Desert devil fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10123" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "95", + "durability": null, + "name": "Desert devil fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10124" + }, + { + "ge_buy_limit": "100", + "examine": "Maybe this is why people think furry dice make you go faster.", + "grand_exchange_price": "8", + "durability": null, + "name": "Spotted kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10125" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Spotted kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10126" + }, + { + "ge_buy_limit": "100", + "examine": "Nature's equivalent of go-faster stripes.", + "grand_exchange_price": "69", + "durability": null, + "name": "Dashing kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10127" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "69", + "durability": null, + "name": "Dashing kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10128" + }, + { + "requirements": "{10,35}", + "ge_buy_limit": "100", + "examine": "A mighty Hunter weapon. One previous owner.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "19", + "name": "Barb-tail harpoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10129", + "bonuses": "9,4,-4,0,0,0,0,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Barb-tail harpoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10130" + }, + { + "requirements": "{21,24}", + "ge_buy_limit": "100", + "examine": "Not so lucky for the rabbit.", + "grand_exchange_price": "789", + "durability": null, + "name": "Strung rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10132", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "789", + "durability": null, + "name": "Strung rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10133" + }, + { + "ge_buy_limit": "100", + "examine": "This could be put on a string and worn for luck.", + "grand_exchange_price": "543", + "durability": null, + "name": "Rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10134" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "543", + "durability": null, + "name": "Rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10135" + }, + { + "shop_price": "48", + "ge_buy_limit": "10000", + "examine": "Well, this would certainly add some colour to a meal.", + "grand_exchange_price": "99", + "durability": null, + "name": "Rainbow fish", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10136" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "99", + "durability": null, + "name": "Rainbow fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10137" + }, + { + "ge_buy_limit": "20000", + "examine": "A colourful fish, attracted to colourful flies.", + "grand_exchange_price": "236", + "durability": null, + "name": "Raw rainbow fish", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10138" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "236", + "durability": null, + "name": "Raw rainbow fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10139" + }, + { + "durability": null, + "name": "Burnt rainbow fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10141" + }, + { + "requirements": "{0,30}-{4,30}-{6,30}", + "ge_buy_limit": "10000", + "examine": "A thick, foul-smelling, tar-like substance with a green tinge", + "grand_exchange_price": "28", + "durability": null, + "name": "Guam tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10142", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{0,50}-{4,50}-{6,50}", + "ge_buy_limit": "10000", + "examine": "A thick, foul-smelling, tar-like substance with an orange tinge.", + "grand_exchange_price": "12", + "durability": null, + "name": "Marrentill tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10143", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{0,60}-{4,60}-{6,60}", + "ge_buy_limit": "10000", + "examine": "A thick, foul-smelling, tar-like substance with a red tinge.", + "grand_exchange_price": "28", + "durability": null, + "name": "Tarromin tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10144", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{0,70}-{4,70}-{6,70}", + "ge_buy_limit": "10000", + "examine": "A dark, thick, foul-smelling, tar-like substance.", + "grand_exchange_price": "47", + "durability": null, + "name": "Harralander tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10145", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "5245", + "examine": "Slightly slimy, but kind of cute.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "6", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10146", + "stand_turn_anim": "823", + "bonuses": "0,19,0,0,29,0,0,0,0,0,0,31,0,0,0", + "requirements": "{0,50}-{4,50}-{6,50}", + "shop_price": "127", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Orange salamander" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "5245", + "examine": "Slightly slimy but certainly striking.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "27", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10147", + "stand_turn_anim": "823", + "bonuses": "0,37,0,0,47,0,0,0,0,0,0,49,0,0,0", + "requirements": "{0,60}-{4,60}-{6,60}", + "shop_price": "190", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Red salamander" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "5245", + "examine": "Slightly slimy and somewhat menacing.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "124", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10148", + "stand_turn_anim": "823", + "bonuses": "0,59,0,0,69,0,0,0,0,0,0,71,0,0,0", + "requirements": "{0,70}-{4,70}-{6,70}", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Black salamander" + }, + { + "ge_buy_limit": "2000", + "turn90cw_anim": "5245", + "examine": "A very slimy and generally disgusting green lizard.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "1802", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10149", + "stand_turn_anim": "823", + "bonuses": "0,10,0,0,20,0,0,0,0,0,0,22,0,0,0", + "requirements": "{0,30}-{4,30}-{6,30}", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Swamp lizard" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A noose on a stick.", + "walk_anim": "5250", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "5251", + "render_anim": "1279", + "equipment_slot": "3", + "grand_exchange_price": "1", + "stand_anim": "5254", + "name": "Noose wand", + "tradeable": "true", + "run_anim": "5253", + "archery_ticket_price": "0", + "id": "10150", + "stand_turn_anim": "5252" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Noose wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10151" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "100", + "shop_price": "1300", + "turn90cw_anim": "821", + "examine": "A weapon made of bone and wood.", + "walk_anim": "4226", + "durability": null, + "weight": "5", + "turn90ccw_anim": "822", + "attack_speed": "4", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "grand_exchange_price": "2496", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "tradeable": "true", + "name": "Hunters' crossbow", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "10156", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,55,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2496", + "durability": null, + "name": "Hunters' crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10157" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "1000", + "examine": "Bolts made from the spikes of a prickly kebbit.", + "grand_exchange_price": "28", + "durability": null, + "name": "Kebbit bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10158", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "1000", + "examine": "Bolts made from the spikes of a razor-backed kebbit.", + "grand_exchange_price": "352", + "durability": null, + "name": "Long kebbit bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10159", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,38", + "equipment_slot": "13" + }, + { + "durability": null, + "name": "Orange salamander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10160" + }, + { + "durability": null, + "name": "Red salamander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10161" + }, + { + "durability": null, + "name": "Black salamander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10162" + }, + { + "durability": null, + "name": "Swamp lizard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10163" + }, + { + "examine": "Probably a bit too big for fly fishing.", + "durability": null, + "name": "Eagle feather", + "archery_ticket_price": "0", + "id": "10167" + }, + { + "examine": "A cape made from giant eagle feathers.", + "durability": null, + "name": "Eagle cape", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10171", + "equipment_slot": "1" + }, + { + "examine": "A cheaply made fake beak.", + "durability": null, + "name": "Fake beak", + "archery_ticket_price": "0", + "id": "10172", + "equipment_slot": "0" + }, + { + "examine": "The title reads 'William Oddity's Guide to the Avian.", + "durability": null, + "name": "Bird book", + "archery_ticket_price": "0", + "id": "10173" + }, + { + "destroy_message": "You can obtain another metal feather from the camp", + "examine": "A small feather made out of some sort of metal. The detail is exquisite.", + "durability": null, + "name": "Metal feather", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10174" + }, + { + "destroy_message": "You can get another by inspecting the opening", + "examine": "An intricate feather crafted from a silver-coloured metal of some sort.", + "durability": null, + "name": "Silver feather", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10176" + }, + { + "destroy_message": "You can get another by taking from pedestal.", + "examine": "An intricate feather crafted from a bronze-coloured metal of some sort.", + "durability": null, + "name": "Bronze feather", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10177" + }, + { + "examine": "\"It looks like bird seed, but it's not quite right somehow.", + "durability": null, + "name": "Odd bird seed", + "archery_ticket_price": "0", + "id": "10178" + }, + { + "examine": "There's a feather glued to the front. \"Property of Arthur Artimus\".", + "durability": null, + "name": "Feathered journal", + "archery_ticket_price": "0", + "id": "10179" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10180" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10181" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10182" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10183" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10184" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10185" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10186" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10187" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10188" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10189" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10190" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10191" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10192" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10193" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10194" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10195" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10196" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10197" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10198" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10199" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10200" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10201" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10202" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10203" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10204" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10205" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10206" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10207" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10208" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10209" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10210" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10211" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10212" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10213" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10214" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10215" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10216" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10217" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10218" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10219" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10220" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10221" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10222" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10223" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10224" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10225" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10226" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10227" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10228" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10229" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10230" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10231" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10232" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10233" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10234" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10235" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10236" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10237" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10238" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10239" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10240" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10241" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10242" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10243" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10244" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10245" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10246" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10247" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10248" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10249" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10250" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10251" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10252" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10253" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10254" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10255" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10256" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10257" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10258" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10259" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10260" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10261" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10262" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10263" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10264" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10265" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10266" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10267" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10268" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10269" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10270" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10271" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10272" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10273" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10274" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10275" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10276" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10277" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10278" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10279" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A powerful bow made from willow.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "equipment_slot": "3", + "grand_exchange_price": "136", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10280", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,22,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,20}", + "durability": null, + "weight": "1.8", + "weapon_interface": "16", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Willow comp bow" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "136", + "durability": null, + "name": "Willow comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10281" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A powerful bow made from yew wood.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "equipment_slot": "3", + "grand_exchange_price": "876", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10282", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,49,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,40}", + "durability": null, + "weight": "1.8", + "weapon_interface": "16", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Yew comp bow" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "876", + "durability": null, + "name": "Yew comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10283" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A powerful bow made from magic wood.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "equipment_slot": "3", + "grand_exchange_price": "1268", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10284", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,71,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,50}", + "durability": null, + "weight": "1.3", + "weapon_interface": "16", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Magic comp bow" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1268", + "durability": null, + "name": "Magic comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10285" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "23600", + "name": "Rune helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10286", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "23600", + "durability": null, + "name": "Rune helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10287" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "20800", + "name": "Rune helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10288", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20800", + "durability": null, + "name": "Rune helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10289" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "20800", + "name": "Rune helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10290", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20800", + "durability": null, + "name": "Rune helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10291" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "21100", + "name": "Rune helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10292", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "21100", + "durability": null, + "name": "Rune helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10293" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "24900", + "name": "Rune helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10294", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "24900", + "durability": null, + "name": "Rune helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10295" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "31500", + "name": "Adamant helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10296", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "31500", + "durability": null, + "name": "Adamant helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10297" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "10100", + "name": "Adamant helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10298", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10100", + "durability": null, + "name": "Adamant helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10299" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "8797", + "name": "Adamant helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10300", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8797", + "durability": null, + "name": "Adamant helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10301" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An Adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "10900", + "name": "Adamant helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10302", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10900", + "durability": null, + "name": "Adamant helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10303" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "17100", + "name": "Adamant helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10304", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "17100", + "durability": null, + "name": "Adamant helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10305" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "20400", + "name": "Black helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10306", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20400", + "durability": null, + "name": "Black helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10307" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "7033", + "name": "Black helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10308", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7033", + "durability": null, + "name": "Black helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10309" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "7574", + "name": "Black helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10310", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7574", + "durability": null, + "name": "Black helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10311" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "10100", + "name": "Black helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10312", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10100", + "durability": null, + "name": "Black helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10313" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "10400", + "name": "Black helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10314", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10400", + "durability": null, + "name": "Black helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10315" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "8196", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10316", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8196", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10317" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "14700", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10318", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14700", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10319" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "8403", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10320", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8403", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10321" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "9230", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10322", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "9230", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10323" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "8197", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10324", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8197", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10325" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "112", + "durability": null, + "name": "Purple firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10326" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "167", + "durability": null, + "name": "White firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10327" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "White logs", + "archery_ticket_price": "0", + "id": "10328" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Purple logs", + "archery_ticket_price": "0", + "id": "10329" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "4", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "33900000", + "name": "3rd age range top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10330", + "bonuses": "0,0,0,-15,30,55,47,60,60,55,52,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "33900000", + "durability": null, + "name": "3rd age range top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10331" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "6", + "absorb": "0,4,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "20800000", + "name": "3rd age range legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10332", + "bonuses": "0,0,0,-10,17,31,25,33,30,31,25,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20800000", + "durability": null, + "name": "3rd age range legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10333" + }, + { + "remove_head": "true", + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "5000", + "examine": "Ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "6100000", + "name": "3rd age range coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10334", + "bonuses": "0,0,0,-2,9,4,7,10,5,8,12,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "6100000", + "durability": null, + "name": "3rd age range coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10335" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "1", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "7100000", + "name": "3rd age vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10336", + "bonuses": "0,0,0,-10,11,6,5,7,9,0,5,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7100000", + "durability": null, + "name": "3rd age vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10337" + }, + { + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "durability": null, + "weight": "2.5", + "absorb": "4,2,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "66500000", + "name": "3rd age robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10338", + "bonuses": "0,0,0,24,0,0,0,0,24,0,24,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "66500000", + "durability": null, + "name": "3rd age robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10339" + }, + { + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "durability": null, + "weight": "1", + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "31500000", + "name": "3rd age robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10340", + "bonuses": "0,0,0,19,0,0,0,0,19,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "31500000", + "durability": null, + "name": "3rd age robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10341" + }, + { + "remove_head": "true", + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "durability": null, + "absorb": "2,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21000000", + "name": "3rd age mage hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10342", + "bonuses": "0,0,0,8,0,0,0,0,8,0,12,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "21000000", + "durability": null, + "name": "3rd age mage hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10343" + }, + { + "lendable": "true", + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "20100000", + "durability": null, + "name": "3rd age amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10344", + "bonuses": "0,0,0,15,0,0,0,0,10,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20100000", + "durability": null, + "name": "3rd age amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10345" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "2", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "92800000", + "name": "3rd age platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10346", + "bonuses": "0,0,0,-25,-2,78,76,83,-5,75,25,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "92800000", + "durability": null, + "name": "3rd age platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10347" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "9", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "86200000", + "name": "3rd age platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10348", + "bonuses": "0,0,0,-20,0,96,108,113,-4,97,52,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "86200000", + "durability": null, + "name": "3rd age platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10349" + }, + { + "remove_head": "true", + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "1", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "41600000", + "name": "3rd age full helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10350", + "bonuses": "0,0,0,-5,-2,47,49,43,-3,48,12,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "41600000", + "durability": null, + "name": "3rd age full helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10351" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "2", + "absorb": "5,0,11", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "65100000", + "name": "3rd age kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10352", + "bonuses": "0,0,0,-10,-4,63,65,61,-3,63,60,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "65100000", + "durability": null, + "name": "3rd age kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10353" + }, + { + "ge_buy_limit": "100", + "examine": "A dragonstone amulet with 4 magic charges.", + "grand_exchange_price": "233100", + "durability": null, + "name": "Amulet of glory(t4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10354", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "233100", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10355" + }, + { + "examine": "A dragonstone amulet with 3 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10356", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10357" + }, + { + "examine": "A dragonstone amulet with 2 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10358", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10359" + }, + { + "examine": "A dragonstone amulet with 1 magic charge.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10360", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10361" + }, + { + "ge_buy_limit": "100", + "examine": "A very powerful dragonstone amulet with a nice trim.", + "grand_exchange_price": "223000", + "durability": null, + "name": "Amulet of glory(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10362", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "223000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10363" + }, + { + "ge_buy_limit": "2", + "examine": "An enchanted ruby amulet with a nice trim.", + "grand_exchange_price": "819400", + "durability": null, + "name": "Strength amulet(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10364", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,10,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "819400", + "durability": null, + "name": "Strength amulet(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10365" + }, + { + "ge_buy_limit": "5000", + "examine": "An enchanted sapphire amulet of magic.", + "grand_exchange_price": "128700", + "durability": null, + "name": "Amulet of magic(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10366", + "bonuses": "0,0,0,10,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "128700", + "durability": null, + "name": "Amulet of magic(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10367" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide vambraces.", + "grand_exchange_price": "116200", + "durability": null, + "name": "Zamorak bracers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10368", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "116200", + "durability": null, + "name": "Zamorak bracers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10369" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide body armour.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "155200", + "name": "Zamorak d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10370", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "155200", + "durability": null, + "name": "Zamorak d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10371" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide chaps.", + "durability": null, + "weight": "5", + "absorb": "0,4,2", + "equipment_slot": "7", + "grand_exchange_price": "35100", + "name": "Zamorak chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10372", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "35100", + "durability": null, + "name": "Zamorak chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10373" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide coif.", + "durability": null, + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "35900", + "name": "Zamorak coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10374", + "bonuses": "0,0,0,-1,7,4,7,10,4,8,8,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "35900", + "durability": null, + "name": "Zamorak coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10375" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide vambraces.", + "grand_exchange_price": "3181", + "durability": null, + "name": "Guthix bracers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10376", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3181", + "durability": null, + "name": "Guthix bracers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10377" + }, + { + "requirements": "{1,40}-{4,70}", + "shop_price": "13", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide body armour.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "39800", + "name": "Guthix dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10378", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "39800", + "durability": null, + "name": "Guthix dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10379" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide chaps.", + "durability": null, + "weight": "5", + "absorb": "0,4,2", + "equipment_slot": "7", + "grand_exchange_price": "7346", + "name": "Guthix chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10380", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7346", + "durability": null, + "name": "Guthix chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10381" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide coif.", + "durability": null, + "weight": "0.85", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "27500", + "name": "Guthix coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10382", + "bonuses": "0,0,0,-1,7,4,7,10,4,8,8,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "27500", + "durability": null, + "name": "Guthix coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10383" + }, + { + "requirements": "{1,70}-{4,40}", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide vambraces.", + "grand_exchange_price": "70800", + "durability": null, + "name": "Saradomin bracers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10384", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "70800", + "durability": null, + "name": "Saradomin bracers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10385" + }, + { + "requirements": "{1,40}-{4,70}", + "shop_price": "13000", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide body armour.", + "durability": null, + "destroy": "true", + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "164100", + "name": "Saradomin d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10386", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "164100", + "durability": null, + "name": "Saradomin d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10387" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide chaps.", + "grand_exchange_price": "36600", + "durability": null, + "name": "Saradomin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10388", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36600", + "durability": null, + "name": "Saradomin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10389" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide coif.", + "durability": null, + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "28000", + "name": "Saradomin coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10390", + "bonuses": "0,0,0,-1,7,4,7,10,4,8,8,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "28000", + "durability": null, + "name": "Saradomin coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10391" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A big 'do about nothing.", + "grand_exchange_price": "45400", + "durability": null, + "name": "A powdered wig", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10392", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "45400", + "durability": null, + "name": "A powdered wig", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10393" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "These'll help me stay alive.", + "grand_exchange_price": "448900", + "durability": null, + "name": "Flared trousers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10394", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "448900", + "durability": null, + "name": "Flared trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10395" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Alas, someone has slashed my pantaloons.", + "grand_exchange_price": "9863", + "durability": null, + "name": "Pantaloons", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10396", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "9863", + "durability": null, + "name": "Pantaloons", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10397" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A cap for wearing whil...zzzzzzzzz", + "grand_exchange_price": "276400", + "durability": null, + "name": "Sleeping cap", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10398", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "276400", + "durability": null, + "name": "Sleeping cap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10399" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant mans' black shirt.", + "grand_exchange_price": "921500", + "durability": null, + "name": "Black ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10400", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "921500", + "durability": null, + "name": "Black ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10401" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant black pair of pantaloons.", + "grand_exchange_price": "270700", + "durability": null, + "name": "Black ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10402", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "270700", + "durability": null, + "name": "Black ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10403" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant men's red shirt.", + "grand_exchange_price": "118600", + "durability": null, + "name": "Red ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10404", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "118600", + "durability": null, + "name": "Red ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10405" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant red pair of pantaloons.", + "grand_exchange_price": "39400", + "durability": null, + "name": "Red ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10406", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "39400", + "durability": null, + "name": "Red ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10407" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant mans' blue shirt.", + "grand_exchange_price": "134700", + "durability": null, + "name": "Blue ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10408", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "134700", + "durability": null, + "name": "Blue ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10409" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant pair of men's blue pantaloons", + "grand_exchange_price": "80700", + "durability": null, + "name": "Blue ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10410", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "80700", + "durability": null, + "name": "Blue ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10411" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant men's green shirt.", + "grand_exchange_price": "162600", + "durability": null, + "name": "Green ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10412", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "162600", + "durability": null, + "name": "Green ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10413" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant green pair of men's pantaloons.", + "grand_exchange_price": "36100", + "durability": null, + "name": "Green ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10414", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36100", + "durability": null, + "name": "Green ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10415" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant men's purple shirt.", + "grand_exchange_price": "116200", + "durability": null, + "name": "Purple ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10416", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "116200", + "durability": null, + "name": "Purple ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10417" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant purple pair of pantaloons.", + "grand_exchange_price": "73400", + "durability": null, + "name": "Purple ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10418", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "73400", + "durability": null, + "name": "Purple ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10419" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made ladies' elegant white blouse.", + "grand_exchange_price": "571500", + "durability": null, + "name": "White ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10420", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "571500", + "durability": null, + "name": "White ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10421" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant white skirt.", + "grand_exchange_price": "56600", + "durability": null, + "name": "White ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10422", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "56600", + "durability": null, + "name": "White ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10423" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant ladies' red blouse.", + "grand_exchange_price": "15000", + "durability": null, + "name": "Red ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10424", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "15000", + "durability": null, + "name": "Red ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10425" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant Red skirt.", + "grand_exchange_price": "7132", + "durability": null, + "name": "Red ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10426", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7132", + "durability": null, + "name": "Red ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10427" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made ladies' elegant blue blouse.", + "grand_exchange_price": "22200", + "durability": null, + "name": "Blue ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10428", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "22200", + "durability": null, + "name": "Blue ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10429" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant blue skirt.", + "grand_exchange_price": "12200", + "durability": null, + "name": "Blue ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10430", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "12200", + "durability": null, + "name": "Blue ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10431" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made ladies' elegant green blouse.", + "grand_exchange_price": "12300", + "durability": null, + "name": "Green ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10432", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "12300", + "durability": null, + "name": "Green ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10433" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant green skirt.", + "grand_exchange_price": "10300", + "durability": null, + "name": "Green ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10434", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10300", + "durability": null, + "name": "Green ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10435" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant ladies' purple blouse.", + "grand_exchange_price": "22800", + "durability": null, + "name": "Purple ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10436", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "22800", + "durability": null, + "name": "Purple ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10437" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant purple skirt.", + "grand_exchange_price": "16700", + "durability": null, + "name": "Purple ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10438", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "16700", + "durability": null, + "name": "Purple ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10439" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A Saradomin crozier.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "8611", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10440", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,6,0,0", + "requirements": "{5,60}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Saradomin crozier" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8611", + "durability": null, + "name": "Saradomin crozier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10441" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A Guthix crozier.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "2925", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10442", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,6,0,0", + "requirements": "{5,60}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Guthix crozier" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2925", + "durability": null, + "name": "Guthix crozier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10443" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A Zamorak crozier.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "2794", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10444", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,6,0,0", + "requirements": "{5,60}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Zamorak crozier" + }, + { + "attack_anims": "", + "ge_buy_limit": "2", + "grand_exchange_price": "2794", + "durability": null, + "name": "Zamorak crozier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10445" + }, + { + "requirements": "{5,40}", + "ge_buy_limit": "2", + "examine": "A Saradomin cloak.", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Saradomin cloak", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10446", + "bonuses": "0,0,0,1,0,3,3,3,3,3,3,0,3,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Saradomin cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10447" + }, + { + "requirements": "{5,40}", + "ge_buy_limit": "2", + "examine": "A Guthix cloak.", + "grand_exchange_price": "391000", + "durability": null, + "name": "Guthix cloak", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10448", + "bonuses": "0,0,0,1,0,3,3,3,3,3,3,0,3,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "391000", + "durability": null, + "name": "Guthix cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10449" + }, + { + "requirements": "{5,40}", + "ge_buy_limit": "2", + "examine": "A Zamorak cloak.", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Zamorak cloak", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10450", + "bonuses": "0,0,0,1,0,3,3,3,3,3,3,0,3,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Zamorak cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10451" + }, + { + "remove_head": "true", + "requirements": "{5,40}-{6,40}", + "ge_buy_limit": "2", + "examine": "A Saradomin mitre.", + "grand_exchange_price": "299200", + "durability": null, + "name": "Saradomin mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10452", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,5,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "299200", + "durability": null, + "name": "Saradomin mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10453" + }, + { + "remove_head": "true", + "requirements": "{5,40}-{6,40}", + "ge_buy_limit": "2", + "examine": "A Guthix mitre.", + "grand_exchange_price": "130300", + "durability": null, + "name": "Guthix mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10454", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,5,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "130300", + "durability": null, + "name": "Guthix mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10455" + }, + { + "remove_head": "true", + "requirements": "{5,40}-{6,40}", + "ge_buy_limit": "2", + "examine": "A Zamorak mitre.", + "durability": null, + "weight": "0.3", + "equipment_slot": "0", + "grand_exchange_price": "346500", + "name": "Zamorak mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10456", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,5,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "346500", + "durability": null, + "name": "Zamorak mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10457" + }, + { + "requirements": "{5,20}", + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "Blessed vestments of Saradomin.", + "grand_exchange_price": "121400", + "durability": null, + "name": "Saradomin robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10458", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "121400", + "durability": null, + "name": "Saradomin robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10459" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Zamorak Vestments.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "154700", + "name": "Zamorak robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10460", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "154700", + "durability": null, + "name": "Zamorak robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10461" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Blessed vestments of Guthix.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "75200", + "name": "Guthix robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10462", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "75200", + "durability": null, + "name": "Guthix robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10463" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Leggings from the Saradomin Vestments.", + "grand_exchange_price": "56300", + "durability": null, + "name": "Saradomin robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10464", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "56300", + "durability": null, + "name": "Saradomin robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10465" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Leggings from the Guthix Vestments.", + "grand_exchange_price": "56900", + "durability": null, + "name": "Guthix robe legs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10466", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "56900", + "durability": null, + "name": "Guthix robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10467" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Legs of the Zamorak Vestments.", + "grand_exchange_price": "79400", + "durability": null, + "name": "Zamorak robe legs", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "10468", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "79400", + "durability": null, + "name": "Zamorak robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10469" + }, + { + "requirements": "{5,60}", + "ge_buy_limit": "2", + "examine": "A Saradomin stole.", + "grand_exchange_price": "14000", + "durability": null, + "name": "Saradomin stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10470", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,10,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14000", + "durability": null, + "name": "Saradomin stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10471" + }, + { + "requirements": "{5,60}", + "ge_buy_limit": "2", + "examine": "A blessed stole.", + "grand_exchange_price": "3849", + "durability": null, + "name": "Guthix stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10472", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,10,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3849", + "durability": null, + "name": "Guthix stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10473" + }, + { + "requirements": "{5,60}", + "ge_buy_limit": "2", + "examine": "A Zamorak stole.", + "grand_exchange_price": "13700", + "durability": null, + "name": "Zamorak stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10474", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,10,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "13700", + "durability": null, + "name": "Zamorak stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10475" + }, + { + "ge_buy_limit": "1000", + "examine": "Remember to brush after eating!", + "grand_exchange_price": "22700", + "durability": null, + "name": "Purple sweets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10476" + }, + { + "durability": null, + "name": "Scroll", + "archery_ticket_price": "0", + "id": "10485", + "equipment_slot": "3" + }, + { + "shop_price": "1", + "examine": "An empty sack.", + "grand_exchange_price": "30", + "durability": null, + "name": "Empty sack", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10486" + }, + { + "turn90cw_anim": "821", + "examine": "Yup, definitely a chicken...an undead chicken.", + "walk_anim": "5364", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "12", + "turn180_anim": "5438", + "equip_audio": "3277", + "render_anim": "1171", + "equipment_slot": "3", + "stand_anim": "5363", + "name": "Undead chicken", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10487", + "stand_turn_anim": "823", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "destroy_message": "The Witch in Draynor supplies these bars.", + "examine": "An iron bar supplied by an insane old crone.", + "durability": null, + "name": "Selected iron", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10488", + "equipment_slot": "3" + }, + { + "destroy_message": "I can make another magnet using special bars. The Witch in Draynor supplies these bars.", + "examine": "A magnet designed for undead chicken use.", + "durability": null, + "name": "Bar magnet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10489" + }, + { + "destroy_message": "I can chop more wood from undead trees using my blessed axe.", + "examine": "Were they trying to escape just then?", + "durability": null, + "name": "Undead twigs", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10490" + }, + { + "examine": "It radiates purity but can still lop off heads.", + "durability": null, + "destroy": "true", + "weight": "1.1", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "equipment_slot": "3", + "destroy_message": "I can obtain a replacement axe from the Burthorpe Slayer Master.", + "name": "Blessed axe", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10491", + "bonuses": "-2,12,10,0,0,0,1,0,0,0,0,13,2,0,0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "These make no sense at all.", + "durability": null, + "name": "Research notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10492" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "They still make no sense, but look more meaningful now.", + "durability": null, + "name": "Translated notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10493" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Attach tab A to button B then fold along line C...", + "durability": null, + "name": "A pattern", + "archery_ticket_price": "0", + "id": "10494" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A desirable residence for discerning, undead chickens.", + "durability": null, + "name": "A container", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10495" + }, + { + "examine": "Shiny!", + "durability": null, + "name": "Polished buttons", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10496" + }, + { + "shop_price": "999", + "examine": "A bagged chicken ready to serve you, magnet in claw.", + "durability": null, + "destroy": "true", + "weight": "4.5", + "equip_audio": "3284", + "equipment_slot": "1", + "destroy_message": "I can buy a replacement from Ava in Draynor Manor; she will charge me 999 coins for this service.", + "name": "Ava's attractor", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10498", + "bonuses": "0,0,0,0,2,0,0,0,2,0,0,0,0,0,0" + }, + { + "shop_price": "999", + "examine": "A superior bagged chicken ready to serve you, magnet in claw.", + "durability": null, + "destroy": "true", + "weight": "4.5", + "equip_audio": "3284", + "equipment_slot": "1", + "destroy_message": "I can obtain a replacement for this from Ava in Draynor Manor. She will need 999 coins to buy the lower", + "name": "Ava's accumulator", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10499", + "bonuses": "0,0,0,0,4,0,1,0,4,0,0,0,0,0,0" + }, + { + "destroy_message": "I can obtain a replacement for this from the crone who lives west of the Port Phasmatys farm.", + "examine": "Allows the ghost farmer to talk to Alice - a breakthrough!", + "durability": null, + "name": "Crone-made amulet", + "tradeable": "false", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10500", + "equipment_slot": "2" + }, + { + "examine": "Made from snow. / It's a ball of snow! Uncanny. / How did this not melt in the box?", + "durability": null, + "name": "Snowball", + "archery_ticket_price": "0", + "id": "10501", + "weapon_interface": "18", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,1", + "equipment_slot": "3" + }, + { + "examine": "A gublinch frozen and crumbled into shards.", + "durability": null, + "name": "Gublinch shards", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "10506" + }, + { + "remove_head": "true", + "destroy_message": "You can reclaim this item from the place you found it. this item", + "examine": "A reindeer hat and a matching flashing nose.", + "durability": null, + "name": "Reindeer hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10507", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A wintumber tree for your player-owned house.", + "durability": null, + "name": "Wintumber tree", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "10508" + }, + { + "examine": "Made from snow. / It's a ball of snow! Uncanny. / How did this not melt in the box?", + "durability": null, + "name": "Snowball", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10509" + }, + { + "durability": null, + "name": "Snowball", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10510" + }, + { + "examine": "They're going to sing to you!", + "durability": null, + "name": "Zanaris choir", + "archery_ticket_price": "0", + "id": "10511" + }, + { + "destroy_message": "Unknown You can reclaim this item from the place you found it.", + "examine": "Some dry crackers.", + "durability": null, + "name": "Crackers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10513" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A block of tofu.", + "durability": null, + "name": "Tofu", + "archery_ticket_price": "0", + "id": "10514" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some meaty worms.", + "durability": null, + "name": "Worms", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10515" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10516" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10517" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10518" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10519" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10520" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10521" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10522" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10523" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10524" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10525" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10526" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10527" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10528" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10529" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10530" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Used to poison your enemies!", + "durability": null, + "name": "Green egg", + "archery_ticket_price": "0", + "id": "10531" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Will explode when fired.", + "durability": null, + "name": "Red egg", + "archery_ticket_price": "0", + "id": "10532" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Stun your foes!", + "durability": null, + "name": "Blue egg", + "archery_ticket_price": "0", + "id": "10533" + }, + { + "examine": "A yellow egg; it needs passing to the Healer to be poisoned!", + "durability": null, + "name": "Yellow egg", + "archery_ticket_price": "0", + "id": "10534" + }, + { + "examine": "A poisoned yellow egg; pass it to the Attacker for spikes to be added!", + "durability": null, + "name": "Poisoned egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10535" + }, + { + "examine": "A poisoned, spiky egg; pass to the defender for heating!", + "durability": null, + "name": "Spiked/pois. egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10536" + }, + { + "examine": "A heated, poisoned, spiky egg; pass to the Collector for loading.", + "durability": null, + "name": "Omega egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10537" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Defender horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10538" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some poisoned tofu.", + "durability": null, + "name": "Poisoned tofu", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10539" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some poisoned worms.", + "durability": null, + "name": "Poisoned worms", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10540" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A poisoned leg of meat.", + "durability": null, + "name": "Poisoned meat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10541" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(4)", + "archery_ticket_price": "0", + "id": "10542" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(3)", + "archery_ticket_price": "0", + "id": "10543" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(2)", + "archery_ticket_price": "0", + "id": "10544" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(1)", + "archery_ticket_price": "0", + "id": "10545" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A full healing vial.", + "durability": null, + "name": "Healing vial", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10546" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance Healer hat.", + "durability": null, + "name": "Healer hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "10547", + "absorb": "3,1,0", + "bonuses": "-5,-5,-5,7,-5,6,8,10,8,0,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance Fighter hat.", + "durability": null, + "name": "Fighter hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "10548", + "absorb": "1,0,3", + "bonuses": "5,5,5,-7,-7,30,32,28,-3,28,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance Runner hat.", + "durability": null, + "name": "Runner hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "10549", + "absorb": "1,0,3", + "bonuses": "0,0,0,0,0,30,32,27,1,30,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance ranger hat.", + "durability": null, + "name": "Ranger hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "10550", + "absorb": "0,3,1", + "bonuses": "-5,-5,-5,-5,7,7,10,11,5,9,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,40}", + "shop_price": "375", + "examine": "Penance Fighter torso armour.", + "durability": null, + "destroy": "true", + "weight": "4", + "absorb": "3,0,6", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Fighter torso", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10551", + "bonuses": "0,0,0,-30,0,66,85,62,-6,67,40,4,0,0,0" + }, + { + "requirements": "{1,40}", + "shop_price": "100", + "examine": "Boots made from a Penance Runner.", + "durability": null, + "name": "Runner boots", + "archery_ticket_price": "0", + "id": "10552", + "bonuses": "0,0,0,-3,-1,12,13,14,0,0,10,2,0,0,0", + "equipment_slot": "10" + }, + { + "requirements": "{1,40}", + "shop_price": "150", + "examine": "These gloves seem unbelievably light!", + "durability": null, + "name": "Penance gloves", + "weight": "-7", + "archery_ticket_price": "0", + "id": "10553", + "bonuses": "0,0,0,0,0,0,3,4,0,2,2,4,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,40}", + "shop_price": "150", + "examine": "These gloves seem unbelievably light!", + "durability": null, + "name": "Penance gloves", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "10554", + "bonuses": "0,0,0,0,0,0,3,4,0,2,2,4,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,40}", + "shop_price": "375", + "examine": "A skirt made from the skin of a Penance Ranger.", + "durability": null, + "name": "Penance skirt", + "weight": "3", + "archery_ticket_price": "0", + "id": "10555", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,16,26,21,28,19,27,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10556", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10557", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10558", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10559", + "equipment_slot": "1" + }, + { + "examine": "A horn for communication with your team members.", + "durability": null, + "name": "Collector horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10560" + }, + { + "destroy_message": "You will have to ask Captain Cain for another.", + "shop_price": "160", + "examine": "A book about the Barbarian Assault Queen.", + "durability": null, + "name": "Queen help book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10562" + }, + { + "requirements": "{1,50}-{2,50}", + "shop_price": "95000", + "ge_buy_limit": "10", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "22.6", + "absorb": "4,0,8", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "126800", + "name": "Granite body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10564", + "bonuses": "0,0,0,-22,-5,87,84,79,-6,97,45,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "126800", + "durability": null, + "name": "Granite body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10565" + }, + { + "examine": "A cape of fire.", + "durability": null, + "name": "Fire cape", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10566", + "bonuses": "1,1,1,1,1,11,11,11,11,11,11,4,2,0,0", + "equipment_slot": "1" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10567", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10568" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10569", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10570" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10571", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10572" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10573", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10574" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10575", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10576" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10577", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10578" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10579", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10580" + }, + { + "examine": "(Normal) A mystical-feeling dagger. (Poisoned) The twisted blade is covered with a nasty poison.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "name": "Keris", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10581", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0" + }, + { + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "durability": null, + "name": "Keris(p)", + "archery_ticket_price": "0", + "id": "10582", + "weapon_interface": "5", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "durability": null, + "name": "Keris(p+)", + "archery_ticket_price": "0", + "id": "10583", + "weapon_interface": "5", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "durability": null, + "name": "Keris(p++)", + "archery_ticket_price": "0", + "id": "10584", + "weapon_interface": "5", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "destroy_message": "You can obtain a replacement lamp from the high priest in Sophanem.", + "examine": "A mystical lamp, engraved with scenes of carnage.", + "durability": null, + "name": "Combat lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10586" + }, + { + "destroy_message": "I got this diary in Tarn's Lair, perhaps I can get another one there.", + "examine": "Tarn Razorlor's diary.", + "durability": null, + "name": "Tarn's diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10587" + }, + { + "examine": "Increases the wearer's Strength and Attack by 20% when fighting the undead.", + "durability": null, + "name": "Salve amulet(e)", + "weight": "1", + "archery_ticket_price": "0", + "id": "10588", + "bonuses": "0,0,0,0,0,3,3,3,0,0,3,0,3,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "requirements": "{1,50}-{2,50}", + "ge_buy_limit": "10", + "examine": "A stone helmet.", + "durability": null, + "weight": "4", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "28000", + "name": "Granite helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10589", + "bonuses": "0,0,0,-9,-7,31,33,29,-1,39,9,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "28000", + "durability": null, + "name": "Granite helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10590" + }, + { + "examine": "A terrifying dog beast.", + "durability": null, + "name": "Terror dog", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "10591" + }, + { + "destroy_message": "You can make another with tanned leather and a mahogany plank.", + "examine": "Small drums.", + "durability": null, + "name": "Penguin bongos", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10592" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Every song needs a cowbell.", + "durability": null, + "name": "Cowbells", + "weight": "2", + "archery_ticket_price": "0", + "id": "10593" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A book about clockwork mechanisms.", + "durability": null, + "name": "Clockwork book", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10594" + }, + { + "destroy_message": "You'll have to make another one at your house. Speak to Larry to learn how to make one.", + "examine": "A clockwork penguin suit.", + "durability": null, + "name": "Clockwork suit", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10595" + }, + { + "destroy_message": "You'll have to make another one at your house. Speak to Larry to learn how to make one.", + "examine": "A clockwork penguin suit.", + "durability": null, + "name": "Clockwork suit", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10596" + }, + { + "destroy_message": "You will need to speak to Noodle to get another.", + "examine": "So you can be a penguin too!", + "durability": null, + "name": "Kgp id card", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10600" + }, + { + "shop_price": "15000", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10601", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "shop_price": "15000", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10602", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "shop_price": "15000", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10603", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Make your foes cower by wearing a skull as a helmet!", + "durability": null, + "weight": "1.3", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "25569", + "name": "Skeletal helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10604", + "bonuses": "0,0,0,2,-2,10,9,11,3,0,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "examine": "Mystical robes.", + "grand_exchange_price": "3932123", + "durability": null, + "name": "Infinity top", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "10605", + "absorb": "3,1,0", + "bonuses": "0,0,0,22,0,0,0,0,22,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "lendable": "true", + "examine": "A wooden helmet.", + "grand_exchange_price": "5623", + "durability": null, + "name": "Splitbark helm", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10606", + "absorb": "3,1,0", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "They seem to be not quite of this world...", + "durability": null, + "name": "Ghostly boots", + "archery_ticket_price": "0", + "id": "10607", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "1000", + "examine": "A mystical hat.", + "durability": null, + "name": "Moonclan hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "10608", + "bonuses": "0,0,0,3,-5,3,3,3,3,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10609", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "10610", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "Torso armour from the order of the Void Knights.", + "durability": null, + "name": "Void knight top", + "tradeable": "false", + "weight": "6.5", + "archery_ticket_price": "0", + "id": "10611", + "bonuses": "0,0,0,0,0,40,40,40,40,40,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue mask", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "10612", + "bonuses": "0,0,0,0,0,5,5,5,5,5,0,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Protective headwear made from crabs. Better than it sounds.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "24661", + "name": "Rock-shell helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10613", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A helm fit for any Fremennik ranger.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "35640", + "name": "Spined helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10614", + "bonuses": "-6,-6,-6,-6,6,6,6,6,6,0,0,0,0,0,0" + }, + { + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1021", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10615", + "equipment_slot": "0" + }, + { + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1021", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10616", + "equipment_slot": "0" + }, + { + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1021", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10617", + "equipment_slot": "0" + }, + { + "shop_price": "3840", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "4595", + "name": "White platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10618", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,0,0,1,0,0" + }, + { + "shop_price": "10000", + "examine": "An initiate Temple Knight's Armour.", + "durability": null, + "weight": "8", + "absorb": "1,0,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "5821", + "name": "Initiate hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10619", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,0,0,6,0,0" + }, + { + "shop_price": "12000", + "examine": "A Proselyte Temple Knight's armour.", + "durability": null, + "weight": "8.6", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "6960", + "name": "Proselyte hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10620", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,0,0,8,0,0" + }, + { + "remove_sleeves": "true", + "examine": "A thick heavy leather top.", + "durability": null, + "name": "Mourner top", + "archery_ticket_price": "0", + "id": "10621", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in polar areas.", + "grand_exchange_price": "216", + "durability": null, + "name": "Kyatt top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10622", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "grand_exchange_price": "1793", + "durability": null, + "name": "Larupia top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10623", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "examine": "This should make me harder to spot in desert areas.", + "grand_exchange_price": "246", + "durability": null, + "name": "Graahk top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10624", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in wooded areas.", + "grand_exchange_price": "3883", + "durability": null, + "name": "Wood camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10625", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in jungle areas.", + "grand_exchange_price": "325", + "durability": null, + "name": "Jungle camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10626", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in desert areas.", + "grand_exchange_price": "606", + "durability": null, + "name": "Desert camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10627", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in polar areas.", + "grand_exchange_price": "5614", + "durability": null, + "name": "Polar camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10628", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "A mime would wear this.", + "durability": null, + "name": "Mime mask", + "archery_ticket_price": "0", + "id": "10629", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "Very posh!", + "durability": null, + "name": "Princess blouse", + "weight": "2", + "archery_ticket_price": "0", + "id": "10630", + "equipment_slot": "4" + }, + { + "examine": "Aside from the braaaains on the lapel, it's still quite good.", + "durability": null, + "name": "Zombie shirt", + "archery_ticket_price": "0", + "id": "10631", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Examine what?", + "durability": null, + "name": "Camo top", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "10632", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "A leather strapped top.", + "durability": null, + "name": "Lederhosen top", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "10633", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "I feel closer to the gods when I am wearing this. (Top) If a shade had knees, this would keep them nice and warm. (Bottom)", + "durability": null, + "name": "Shade robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "10634", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "450", + "examine": "The cape worn by members of the Legends Guild.", + "durability": null, + "name": "Cape of legends", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10635", + "bonuses": "0,0,0,0,0,7,7,7,7,7,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "lendable": "true", + "shop_price": "90000", + "examine": "A cape woven of obsidian plates.", + "grand_exchange_price": "38500", + "durability": null, + "name": "Obsidian cape", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10636", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A cape of fire.", + "durability": null, + "name": "Fire cape", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10637", + "bonuses": "1,1,1,1,1,11,11,11,11,11,0,4,2,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "50", + "examine": "Ooohhh look at the pretty colours...", + "durability": null, + "name": "Team-1 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10638", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{0,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of attack.", + "durability": null, + "name": "Attack cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10639", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{2,99}", + "shop_price": "99000", + "examine": "The cape only worn by the strongest people.", + "durability": null, + "name": "Strength cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10640", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{1,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of the art of Defence.", + "durability": null, + "name": "Defence cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10641", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{4,99}", + "shop_price": "99000", + "examine": "The cape worn by master archers.", + "durability": null, + "name": "Ranging cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10642", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{5,99}", + "shop_price": "99000", + "examine": "The cape worn by the most pious of heroes.", + "durability": null, + "name": "Prayer cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10643", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{6,99}", + "shop_price": "99000", + "examine": "The cape worn by the most powerful mages.", + "durability": null, + "name": "Magic cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10644", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{20,99}", + "shop_price": "99000", + "examine": "The cape worn by master runecrafters.", + "durability": null, + "name": "Runecraft cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10645", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,99}", + "shop_price": "99000", + "examine": "The cape worn by master hunters.", + "durability": null, + "name": "Hunter cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10646", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{3,99}", + "shop_price": "99000", + "examine": "The cape worn by well-constituted adventurers.", + "durability": null, + "name": "Hitpoints cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10647", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{16,99}", + "shop_price": "99000", + "examine": "The cape worn by the most agile of heroes.", + "durability": null, + "name": "Agility cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10648", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{15,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled at the art of herblore.", + "durability": null, + "name": "Herblore cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10649", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{17,99}", + "shop_price": "99000", + "examine": "The cape worn by master thieves.", + "durability": null, + "name": "Thieving cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10650", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{12,99}", + "shop_price": "99000", + "examine": "The cape worn by master craftworkers.", + "durability": null, + "name": "Crafting cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10651", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{9,99}", + "shop_price": "99000", + "examine": "The cape worn by the best of fletchers.", + "durability": null, + "name": "Fletching cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10652", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{18,99}", + "shop_price": "99000", + "examine": "The cape worn by slayer masters.", + "durability": null, + "name": "Slayer cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10653", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{22,99}", + "shop_price": "99000", + "examine": "The cape worn by master builders.", + "durability": null, + "name": "Construct. cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10654", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{14,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled miners.", + "durability": null, + "name": "Mining cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10655", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{13,99}", + "shop_price": "99000", + "examine": "The cape worn by master smiths.", + "durability": null, + "name": "Smithing cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10656", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{10,99}", + "shop_price": "99000", + "examine": "The cape worn by the best fishermen.", + "durability": null, + "name": "Fishing cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10657", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{7,99}", + "shop_price": "99000", + "examine": "The cape worn by the world's best chefs.", + "durability": null, + "name": "Cooking cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10658", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{11,99}", + "shop_price": "99000", + "examine": "The cape worn by master firelighters.", + "durability": null, + "name": "Firemaking cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10659", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{8,99}", + "shop_price": "99000", + "examine": "The cape worn by master woodcutters (Obtaining level 99 skill)", + "durability": null, + "name": "Woodcutting cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10660", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{19,99}", + "shop_price": "99000", + "examine": "The cape worn by master farmers.", + "durability": null, + "name": "Farming cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10661", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "99000", + "examine": "The cape worn by only the most experienced adventurers.", + "durability": null, + "name": "Quest point cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10662", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A surprisingly aerodynamic cape.", + "grand_exchange_price": "951", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10663", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A really surprisingly aerodynamic cape.", + "grand_exchange_price": "881", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10664", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{1,10}", + "examine": "A black kitesheild with a heraldic design.", + "grand_exchange_price": "15249", + "durability": null, + "name": "Black shield(h1)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10665", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "16339", + "name": "Adamant shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10666", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "35300", + "durability": null, + "name": "Rune shield(h1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10667", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black kiteshield with a heraldic design.", + "grand_exchange_price": "9751", + "durability": null, + "name": "Black shield(h2)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10668", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3353", + "name": "Adamant shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10669", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "31903", + "durability": null, + "name": "Rune shield(h2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10670", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black shield with a heraldic design.", + "grand_exchange_price": "6791", + "durability": null, + "name": "Black shield(h3)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10671", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "5566", + "name": "Adamant shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10672", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "32082", + "durability": null, + "name": "Rune shield(h3)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10673", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black shield with a heraldic design.", + "grand_exchange_price": "5159", + "durability": null, + "name": "Black shield(h4)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10674", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3219", + "name": "Adamant shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10675", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "32351", + "durability": null, + "name": "Rune shield(h4)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10676", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black shield with a heraldic design.", + "grand_exchange_price": "8451", + "durability": null, + "name": "Black shield(h5)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10677", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "5905", + "name": "Adamant shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10678", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "35200", + "durability": null, + "name": "Rune shield(h5)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10679", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "grand_exchange_price": "67430", + "durability": null, + "name": "Studded body (g)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10680", + "absorb": "0,3,1", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "grand_exchange_price": "22400", + "durability": null, + "name": "Studded body (t)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10681", + "absorb": "0,3,1", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body(g)", + "archery_ticket_price": "0", + "id": "10682", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body (t)", + "archery_ticket_price": "0", + "id": "10683", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body (g)", + "archery_ticket_price": "0", + "id": "10684", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body (t)", + "archery_ticket_price": "0", + "id": "10685", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "I can practise magic better in this.", + "durability": null, + "name": "Wizard robe (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10686", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "I can do magic better in this.", + "durability": null, + "name": "Wizard robe (t)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10687", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,20}-{6,40}", + "examine": "Enchanted Wizards robes.", + "durability": null, + "weight": "1", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "72800", + "name": "Enchanted top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10688", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "examine": "Slightly magical boots.", + "grand_exchange_price": "763602", + "durability": null, + "name": "Wizard boots", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10689", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "requirements": "{1,10}", + "examine": "Black platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "90744", + "name": "Black platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10690", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,0,0,0,0,0" + }, + { + "requirements": "{1,10}", + "examine": "Black platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "230800", + "name": "Black platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10691", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,0,0,0,0,0" + }, + { + "lendable": "true", + "examine": "Your money or your life!", + "grand_exchange_price": "92519", + "durability": null, + "name": "Highwayman mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10692", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "64066", + "durability": null, + "name": "Blue beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "10693", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Parlez-vous francais?(Do you speak French?)", + "grand_exchange_price": "158274", + "durability": null, + "name": "Black beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "10694", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "281900", + "durability": null, + "name": "White beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "10695", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Lightweight boots ideal for rangers.", + "grand_exchange_price": "11781186", + "durability": null, + "name": "Ranger boots", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10696", + "bonuses": "0,0,0,-10,8,2,3,4,2,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "79300", + "name": "Adam platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10697", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,0,0,0,0,0" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "207912", + "name": "Adam platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10698", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "22022", + "durability": null, + "name": "Black helm (h1)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10699", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "11700", + "durability": null, + "name": "Black helm (h2)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10700", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "10424", + "durability": null, + "name": "Black helm (h3)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10701", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "12717", + "durability": null, + "name": "Black helm (h4)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10702", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "17852", + "durability": null, + "name": "Black helm (h5)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10703", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "30298", + "durability": null, + "name": "Rune helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10704", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "26127", + "durability": null, + "name": "Rune helm (h2)", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10705", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "37333", + "durability": null, + "name": "Rune helm (h3)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10706", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "29600", + "durability": null, + "name": "Rune helm (h4)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10707", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "41325", + "durability": null, + "name": "Rune helm (h5)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10708", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "28407", + "name": "Adamant helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10709", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "9839", + "name": "Adamant helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10710", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "8485", + "name": "Adamant helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10711", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An Adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "10774", + "name": "Adamant helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10712", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "17390", + "name": "Adamant helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10713", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10714", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10715", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10716", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10717", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10718", + "equipment_slot": "4" + }, + { + "examine": "A very powerful dragonstone amulet.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10719", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "A cape from the almighty god Guthix.", + "durability": null, + "name": "Guthix cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10720", + "bonuses": "0,0,0,10,0,1,1,2,10,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "examine": "Now that's just silly.", + "durability": null, + "name": "Frog mask", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10721", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A reindeer hat and a matching flashing nose.", + "durability": null, + "name": "Reindeer hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10722" + }, + { + "remove_head": "true", + "destroy_message": "You may get another from Diango in Draynor Village.", + "examine": "Better not light it!", + "durability": null, + "name": "Jack lantern mask", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10723", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Skeleton feet.", + "durability": null, + "name": "Skeleton boots", + "weight": "2", + "archery_ticket_price": "0", + "id": "10724", + "equipment_slot": "10" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some skeletal gloves.", + "durability": null, + "name": "Skeleton gloves", + "weight": "2", + "archery_ticket_price": "0", + "id": "10725", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Does my pelvis look big in this?", + "durability": null, + "name": "Skeleton leggings", + "weight": "2", + "archery_ticket_price": "0", + "id": "10726", + "equipment_slot": "7" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "remove_sleeves": "true", + "examine": "The shirt of a fully body skeleton costume.", + "durability": null, + "name": "Skeleton shirt", + "weight": "2", + "archery_ticket_price": "0", + "id": "10727", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scary skeleton mask.", + "durability": null, + "name": "Skeleton mask", + "weight": "2", + "archery_ticket_price": "0", + "id": "10728", + "equipment_slot": "0" + }, + { + "examine": "A ring given to you by the Easter Bunny.", + "durability": null, + "name": "Easter ring", + "archery_ticket_price": "0", + "id": "10729" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10730" + }, + { + "examine": "Alas...I hardly knew him.", + "durability": null, + "name": "Zombie head", + "archery_ticket_price": "0", + "id": "10731" + }, + { + "turn90cw_anim": "821", + "examine": "Perhaps not the most powerful weapon in RuneScape.", + "walk_anim": "1830", + "durability": null, + "weight": "0.4", + "turn90ccw_anim": "822", + "attack_speed": "4", + "weapon_interface": "12", + "turn180_anim": "1830", + "render_anim": "182", + "equipment_slot": "3", + "fun_weapon": "true", + "stand_anim": "1832", + "name": "Rubber chicken", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10732", + "stand_turn_anim": "823", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "examine": "A gift from Santa.", + "durability": null, + "name": "Yo-yo", + "archery_ticket_price": "0", + "id": "10733" + }, + { + "examine": "A rabbit-like adornment.", + "durability": null, + "name": "Bunny ears", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10734", + "equipment_slot": "0" + }, + { + "turn90cw_anim": "821", + "examine": "It's a Scythe.", + "walk_anim": "819", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "820", + "render_anim": "1383", + "equipment_slot": "3", + "stand_anim": "847", + "name": "Scythe", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10735", + "stand_turn_anim": "823", + "bonuses": "3,8,3,0,0,0,3,1,0,0,0,10,0,0,0" + }, + { + "examine": "An enchanted ruby amulet with a nice trim.", + "grand_exchange_price": "443800", + "durability": null, + "name": "Strength amulet(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10736", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,10,0,0,0", + "equipment_slot": "2" + }, + { + "examine": "An enchanted sapphire amulet of magic.", + "grand_exchange_price": "67158", + "durability": null, + "name": "Amulet of magic(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10738", + "bonuses": "0,0,0,10,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "A big 'do about nothing.", + "grand_exchange_price": "36879", + "durability": null, + "name": "A powdered wig", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10740", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "These'll help me stay alive.", + "grand_exchange_price": "559284", + "durability": null, + "name": "Flared trousers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10742", + "equipment_slot": "7" + }, + { + "lendable": "true", + "examine": "Alas, someone has slashed my pantaloons.", + "grand_exchange_price": "12022", + "durability": null, + "name": "Pantaloons", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10744", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "A cap for wearing whil...zzzzzzzzz", + "grand_exchange_price": "376084", + "durability": null, + "name": "Sleeping cap", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10746", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10748", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10750", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10752", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10754", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10756", + "equipment_slot": "4" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "56600", + "durability": null, + "name": "Red boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10758", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "20300", + "durability": null, + "name": "Orange boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10760", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "59940", + "durability": null, + "name": "Green boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10762", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "54236", + "durability": null, + "name": "Blue boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10764", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "56495", + "durability": null, + "name": "Black boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10766", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A minimalist's hat.", + "grand_exchange_price": "114319", + "durability": null, + "name": "Red headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10768", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A minimalist's hat.", + "grand_exchange_price": "41778", + "durability": null, + "name": "Black headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10770", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A minimalist's hat.", + "grand_exchange_price": "21764", + "durability": null, + "name": "Brown headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10772", + "equipment_slot": "0" + }, + { + "examine": "Shiver me timbers!", + "grand_exchange_price": "83200", + "durability": null, + "name": "Pirate's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10774", + "equipment_slot": "0" + }, + { + "examine": "Rune platebody in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "647800", + "name": "Zamorak platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10776", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody in the colours of Saradomin.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "1097689", + "name": "Saradomin plate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10778", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody in the colours of Guthix.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "241600", + "name": "Guthix platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10780", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody with complete gold trim & plating.", + "durability": null, + "weight": "10", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "1653821", + "name": "Gilded platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10782", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "examine": "Blessed vestments of Saradomin.", + "grand_exchange_price": "106389", + "durability": null, + "name": "Saradomin robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10784", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Zamorak Vestments.", + "grand_exchange_price": "151000", + "durability": null, + "name": "Zamorak robe top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10786", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blessed vestments of Guthix.", + "grand_exchange_price": "80181", + "durability": null, + "name": "Guthix robe top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10788", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Zamorak blessed dragonhide body armour.", + "grand_exchange_price": "84966", + "durability": null, + "name": "Zamorak d'hide", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "10790", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "13000", + "examine": "Saradomin blessed dragonhide body armour.", + "durability": null, + "destroy": "true", + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "92762", + "name": "Saradomin d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10792", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,0,0,0,0,0" + }, + { + "shop_price": "13", + "examine": "Guthix blessed dragonhide body armour.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "22384", + "name": "Guthix dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10794", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,0,0,0,0,0" + }, + { + "lendable": "true", + "examine": "Endorsed by Robin Hood.", + "grand_exchange_price": "3070557", + "durability": null, + "name": "Robin hood hat", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10796", + "bonuses": "0,0,0,-10,8,4,6,8,4,4,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "Rune platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "231400", + "name": "Rune platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10798", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "61100", + "name": "Rune platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10800", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "lendable": "true", + "examine": "All for one and one for all!", + "grand_exchange_price": "56677", + "durability": null, + "name": "Tan cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10802", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "All for one and one for all!", + "grand_exchange_price": "18942", + "durability": null, + "name": "Dark cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10804", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "All for one and one for all!", + "grand_exchange_price": "421305", + "durability": null, + "name": "Black cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10806", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "1000", + "examine": "Arctic Pine logs prepared with sacred oil for a funeral pyre", + "grand_exchange_price": "3453", + "durability": null, + "name": "Arctic pyre logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10808" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3453", + "durability": null, + "name": "Arctic pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10809" + }, + { + "ge_buy_limit": "25000", + "examine": "Log cut from an arctic pine.", + "grand_exchange_price": "90", + "durability": null, + "name": "Arctic pine logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10810", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "90", + "durability": null, + "name": "Arctic pine logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10811" + }, + { + "ge_buy_limit": "1000", + "examine": "Used to repair bridges.", + "grand_exchange_price": "18", + "durability": null, + "name": "Split log", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10812" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "18", + "durability": null, + "name": "Split log", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10813" + }, + { + "shop_price": "120", + "ge_buy_limit": "1000", + "examine": "I can spin this into rope.", + "grand_exchange_price": "113", + "durability": null, + "name": "Hair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10814" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "113", + "durability": null, + "name": "Hair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10815" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "I need to cook this.", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw yak meat", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10816" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw yak meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10817" + }, + { + "shop_price": "50", + "ge_buy_limit": "5000", + "examine": "Thakkrad, of Neitiznot, can cure this.", + "grand_exchange_price": "301", + "durability": null, + "name": "Yak-hide", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10818" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "301", + "durability": null, + "name": "Yak-hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10819" + }, + { + "ge_buy_limit": "5000", + "examine": "Ready to be cut and sewn into armour.", + "grand_exchange_price": "396", + "durability": null, + "name": "Cured yak-hide", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10820" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "396", + "durability": null, + "name": "Cured yak-hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10821" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "examine": "Smelly yak body armour.", + "durability": null, + "weight": "3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "122", + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10822", + "bonuses": "0,0,0,-5,0,25,20,15,-2,25,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "122", + "durability": null, + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10823" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "examine": "Leg protection, made from smelly yak-hide.", + "durability": null, + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "2", + "id": "10824", + "bonuses": "0,0,0,-5,10,25,20,15,-2,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "durability": null, + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10825" + }, + { + "requirements": "{1,25}", + "ge_buy_limit": "100", + "examine": "A wooden shield with a rope rim.", + "durability": null, + "destroy": "true", + "weight": "3", + "equipment_slot": "5", + "grand_exchange_price": "402", + "name": "Fremennik round shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10826", + "bonuses": "0,0,0,-10,-10,17,17,31,-4,33,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "402", + "durability": null, + "name": "Fremennik round shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10827" + }, + { + "remove_head": "true", + "requirements": "{1,55}", + "shop_price": "50000", + "ge_buy_limit": "100", + "examine": "A gift from Neitiznot's Burgher.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "equipment_slot": "0", + "grand_exchange_price": "44800", + "name": "Helm of neitiznot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10828", + "bonuses": "0,0,0,0,0,31,29,34,3,30,8,3,3,0,0" + }, + { + "destroy_message": "King Sorvott of Jatizso will give you another one, grudgingly.", + "examine": "The document is stamped with King Gjuki Sorvott IV's royal seal.", + "durability": null, + "name": "Royal decree", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10830" + }, + { + "destroy_message": "Are you sure? You can replace it by talking to King Sorvott.", + "examine": "An empty tax bag.", + "durability": null, + "name": "Empty tax bag", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10831" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "examine": "A silly hat with bells.", + "durability": null, + "name": "Silly jester hat", + "tradeable": "false", + "destroy": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "10836", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "remove_sleeves": "true", + "examine": "A jester's jangly top.", + "durability": null, + "name": "Silly jester top", + "tradeable": "false", + "destroy": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "10837", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "examine": "Silly jester tights.", + "durability": null, + "name": "Silly jester tights", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10838", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "examine": "Silly jester boots.", + "durability": null, + "name": "Silly jester boots", + "tradeable": "false", + "destroy": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "10839", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "durability": null, + "name": "A jester stick", + "archery_ticket_price": "0", + "id": "10840", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "No brain: A gruesome, decapitated head, whose brain has rotted away. Brain: A gruesome, decapitated head - its eyes stare lifelessly at nothing.", + "durability": null, + "name": "Decapitated head", + "weight": "3", + "archery_ticket_price": "0", + "id": "10842" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Helm of neitiznot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10843" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Spring sq'irk", + "archery_ticket_price": "0", + "id": "10844" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Summer sq'irk", + "archery_ticket_price": "0", + "id": "10845" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Autumn sq'irk", + "archery_ticket_price": "0", + "id": "10846" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Winter sq'irk", + "archery_ticket_price": "0", + "id": "10847" + }, + { + "examine": "Made from 4 spring sq'irks.", + "durability": null, + "name": "Spring sq'irkjuice", + "weight": "1", + "archery_ticket_price": "0", + "id": "10848" + }, + { + "examine": "Made from 2 summer sq'irks.", + "durability": null, + "name": "Summer sq'irkjuice", + "weight": "1", + "archery_ticket_price": "0", + "id": "10849" + }, + { + "examine": "Made from 3 autumn sq'irks.", + "durability": null, + "name": "Autumn sq'irkjuice", + "weight": "1", + "archery_ticket_price": "0", + "id": "10850" + }, + { + "examine": "Made from 5 winter sq'irks.", + "durability": null, + "name": "Winter sq'irkjuice", + "archery_ticket_price": "0", + "id": "10851" + }, + { + "destroy_message": "You will need to speak to Sin Seer in Seers' Village to get another one.", + "shop_price": "40", + "examine": "Her writing is too scrawled to make out what it says.", + "durability": null, + "name": "Sin seer's note", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10856" + }, + { + "destroy_message": "You will need to speak to General Khazard, near the Fremennik Province, to get another.", + "examine": "A severed human leg.", + "durability": null, + "name": "Severed leg", + "tradeable": "false", + "destroy": "true", + "weight": "12", + "archery_ticket_price": "0", + "id": "10857" + }, + { + "turn90cw_anim": "7044", + "examine": "A shadow sword.", + "walk_anim": "7046", + "durability": null, + "destroy": "true", + "weight": "3.6", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "turn180_anim": "7045", + "render_anim": "124", + "equipment_slot": "3", + "destroy_message": "You can get another one by visiting the cave near the Fishing guild. A friendly ghost will replace it for you. You must be wearing a Ring of visibility, or you cannot get it back.", + "stand_anim": "7047", + "name": "Shadow sword", + "tradeable": "false", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "10858", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,4,0,0,0,0,4,-1,0,26,0,0,0" + }, + { + "examine": "You can put nice, hot tea in it.", + "durability": null, + "name": "Tea flask", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10859" + }, + { + "examine": "You can put nice, hot tea in it.", + "durability": null, + "name": "Tea flask", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10860" + }, + { + "examine": "You can put nice, hot tea in it.", + "durability": null, + "name": "Tea flask", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10861" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "Can't get any safer than this.", + "durability": null, + "name": "Hard hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10862", + "equipment_slot": "0" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "remove_sleeves": "true", + "examine": "Very fetching.", + "durability": null, + "name": "Builder's shirt", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10863", + "equipment_slot": "4" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "Slightly tatty in my opinion.", + "durability": null, + "name": "Builder's trousers", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10864", + "equipment_slot": "7" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "They'll offer good protection for my toes.", + "durability": null, + "name": "Builder's boots", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10865", + "equipment_slot": "10" + }, + { + "examine": "Used to bolt things together.", + "durability": null, + "name": "Rivets", + "archery_ticket_price": "0", + "id": "10866" + }, + { + "examine": "Some magical fluid to bind surfaces.", + "durability": null, + "name": "Binding fluid", + "archery_ticket_price": "0", + "id": "10870" + }, + { + "examine": "A pipe that belongs in a cannon stand.", + "durability": null, + "name": "Pipe", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10871" + }, + { + "examine": "A ring used to join two pipes together.", + "durability": null, + "name": "Pipe ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10872" + }, + { + "examine": "A sheet of metal.", + "durability": null, + "name": "Metal sheet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10873" + }, + { + "examine": "Bound to have some use.", + "durability": null, + "name": "Coloured ball", + "archery_ticket_price": "0", + "id": "10874" + }, + { + "examine": "A wheel used to control valves.", + "durability": null, + "name": "Valve wheel", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10875" + }, + { + "examine": "Some unknown metal substance.", + "durability": null, + "name": "Metal bar", + "archery_ticket_price": "0", + "id": "10876" + }, + { + "shop_price": "128", + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Plain satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10877", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Green satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10878", + "equipment_slot": "5" + }, + { + "shop_price": "128", + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Red satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10879", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Black satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10880", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Gold satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10881", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Rune satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10882", + "equipment_slot": "5" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "Can't get any safer than this.", + "durability": null, + "name": "Hard hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10883", + "equipment_slot": "0" + }, + { + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10884" + }, + { + "examine": "A small keg of gunpowder.", + "durability": null, + "name": "Keg", + "weight": "12", + "archery_ticket_price": "0", + "id": "10885" + }, + { + "examine": "Used to cure poison through prayer.", + "durability": null, + "name": "Prayer book", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10886" + }, + { + "turn90cw_anim": "5867", + "examine": "This is likely to put my back out... (when fixed) OR It's broken. I should see if a pirate smith can fix it. (when broken)", + "walk_anim": "5867", + "has_special": "true", + "durability": null, + "weight": "30", + "turn90ccw_anim": "5867", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "5867", + "defence_anim": "5866", + "render_anim": "985", + "equipment_slot": "3", + "attack_anims": "5865,5865,5865,5865", + "destroy_message": "If you drop the Anchor it will be destroyed, and you will need to get a new one from Brother Tranquillity, then pay Smith to re", + "stand_anim": "5869", + "name": "Barrelchest anchor", + "run_anim": "5868", + "archery_ticket_price": "0", + "id": "10887", + "stand_turn_anim": "823", + "bonuses": "-2,10,92,0,0,0,0,0,0,0,0,100,0,0,0" + }, + { + "examine": "This is likely to put my back out... (when fixed) OR It's broken. I should see if a pirate smith can fix it. (when broken)", + "durability": null, + "name": "Barrelchest anchor", + "weight": "30", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "10888", + "bonuses": "-2,10,92,0,0,0,0,0,0,0,0,100,0,0,0" + }, + { + "destroy_message": "If you drop this lamp it will be destroyed, and you will need to see Brother Tranquility for another.", + "examine": "This will answer my prayers.", + "durability": null, + "name": "Blessed lamp", + "archery_ticket_price": "0", + "id": "10889" + }, + { + "destroy_message": "This book is old and delicate. You can reclaim this item from the place you found it.ping it here will destroy it and you will have to search the Edgeville Monastery bookcase for another.", + "examine": "Used to cure poison through prayer.", + "durability": null, + "name": "Prayer book", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10890" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden cat toy.", + "grand_exchange_price": "922", + "durability": null, + "name": "Wooden cat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10891" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "922", + "durability": null, + "name": "Wooden cat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10892" + }, + { + "examine": "A cranial clamp.", + "durability": null, + "name": "Cranial clamp", + "archery_ticket_price": "0", + "id": "10893" + }, + { + "examine": "Some tongs for use with brains.", + "durability": null, + "name": "Brain tongs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10894" + }, + { + "examine": "A bell jar for covering things.", + "durability": null, + "name": "Bell jar", + "weight": "1", + "archery_ticket_price": "0", + "id": "10895" + }, + { + "examine": "A silver whistle.", + "durability": null, + "name": "Wolf whistle", + "archery_ticket_price": "0", + "id": "10896" + }, + { + "examine": "A shipping order list.", + "durability": null, + "name": "Shipping order", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10897" + }, + { + "examine": "A small keg of gunpowder.", + "durability": null, + "name": "Keg", + "weight": "12", + "archery_ticket_price": "0", + "id": "10898" + }, + { + "examine": "Part of a crate.", + "durability": null, + "name": "Crate part", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10899" + }, + { + "examine": "One skull staple.", + "durability": null, + "name": "Skull staple", + "archery_ticket_price": "0", + "id": "10904" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "8420", + "durability": null, + "name": "Mixture - step 1(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10909" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8420", + "durability": null, + "name": "Mixture - step 1(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10910" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "6543", + "durability": null, + "name": "Mixture - step 1(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10911" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6543", + "durability": null, + "name": "Mixture - step 1(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10912" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 1(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10913" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 1(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10914" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 1(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10915" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 1(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10916" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "8665", + "durability": null, + "name": "Mixture - step 2(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10917" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8665", + "durability": null, + "name": "Mixture - step 2(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10918" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "6695", + "durability": null, + "name": "Mixture - step 2(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10919" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6695", + "durability": null, + "name": "Mixture - step 2(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10920" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 2(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10921" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 2(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10922" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 2(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10923" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 2(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10924" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "15900", + "durability": null, + "name": "Sanfew serum(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10925" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15900", + "durability": null, + "name": "Sanfew serum(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10926" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "12000", + "durability": null, + "name": "Sanfew serum(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10927" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12000", + "durability": null, + "name": "Sanfew serum(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10928" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "10200", + "durability": null, + "name": "Sanfew serum(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10929" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10200", + "durability": null, + "name": "Sanfew serum(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10930" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "6114", + "durability": null, + "name": "Sanfew serum(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10931" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6114", + "durability": null, + "name": "Sanfew serum(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10932" + }, + { + "examine": "You certainly will be alright wearing these.", + "durability": null, + "name": "Lumberjack boots", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10933", + "equipment_slot": "10" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10934" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10935" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10936" + }, + { + "ge_buy_limit": "100", + "examine": "The claws from a nail beast", + "grand_exchange_price": "203", + "durability": null, + "name": "Nail beast nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10937" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "203", + "durability": null, + "name": "Nail beast nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10938" + }, + { + "remove_sleeves": "true", + "examine": "You certainly will be alright wearing this.", + "durability": null, + "name": "Lumberjack top", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "10939", + "equipment_slot": "4" + }, + { + "examine": "You certainly will be alright wearing these.", + "durability": null, + "name": "Lumberjack legs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10940", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "You certainly will be alright wearing this.", + "durability": null, + "name": "Lumberjack hat", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10941", + "equipment_slot": "0" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10942" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10943" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10944" + }, + { + "remove_sleeves": "true", + "examine": "You certainly will be alright wearing this.", + "durability": null, + "name": "Lumberjack top", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "10945", + "equipment_slot": "4" + }, + { + "examine": "One skull staple.", + "durability": null, + "name": "Skull staples", + "archery_ticket_price": "0", + "id": "10950" + }, + { + "examine": "One skull staple.", + "durability": null, + "name": "Skull staples", + "archery_ticket_price": "0", + "id": "10951" + }, + { + "requirements": "{18,39}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "Don't make anyone jump when you ring this!", + "grand_exchange_price": "57", + "durability": null, + "name": "Slayer bell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10952" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57", + "durability": null, + "name": "Slayer bell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10953" + }, + { + "requirements": "{1,25}-{4,25}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "Armour made out of Frog hide.", + "durability": null, + "weight": "3", + "absorb": "0,3,1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1797", + "name": "Frog-leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10954", + "bonuses": "0,0,0,-5,10,23,26,30,15,32,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1797", + "durability": null, + "name": "Frog-leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10955" + }, + { + "requirements": "{1,25}-{4,25}", + "shop_price": "900", + "ge_buy_limit": "100", + "examine": "Chaps made out of Frog hide.", + "durability": null, + "weight": "3", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "361", + "name": "Frog-leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10956", + "bonuses": "0,0,0,-5,2,7,7,9,4,9,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "361", + "durability": null, + "name": "Frog-leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10957" + }, + { + "requirements": "{1,25}-{4,25}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Boots made out of Frog hide.", + "durability": null, + "weight": "1", + "equipment_slot": "10", + "grand_exchange_price": "1156", + "name": "Frog-leather boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10958", + "bonuses": "0,0,0,-8,2,1,1,1,0,1,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1156", + "durability": null, + "name": "Frog-leather boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10959" + }, + { + "shop_price": "10", + "examine": "Thick and tasty soup.", + "durability": null, + "name": "Green gloop soup", + "archery_ticket_price": "0", + "id": "10960" + }, + { + "shop_price": "10", + "examine": "A big bowl of frogspawn gumbo.", + "durability": null, + "name": "Frogspawn gumbo", + "archery_ticket_price": "0", + "id": "10961" + }, + { + "shop_price": "10", + "examine": "A juicy frogburger.", + "durability": null, + "name": "Frogburger", + "weight": "1", + "archery_ticket_price": "0", + "id": "10962" + }, + { + "examine": "Nice and crunchy.", + "durability": null, + "name": "Coated frogs' legs", + "archery_ticket_price": "0", + "id": "10963" + }, + { + "shop_price": "10", + "examine": "Bat shish kebab.", + "durability": null, + "name": "Bat shish", + "archery_ticket_price": "0", + "id": "10964" + }, + { + "shop_price": "10", + "examine": "Wall beast fingers in a white fern sauce.", + "durability": null, + "name": "Fingers", + "archery_ticket_price": "0", + "id": "10965" + }, + { + "examine": "A whole roasted frog.", + "durability": null, + "name": "Roast frog", + "weight": "1", + "archery_ticket_price": "0", + "id": "10967" + }, + { + "examine": "Tasty saut??ed mushrooms.", + "durability": null, + "name": "Mushrooms", + "archery_ticket_price": "0", + "id": "10968" + }, + { + "examine": "Chunky cave-crawler fillets.", + "durability": null, + "name": "Fillets", + "archery_ticket_price": "0", + "id": "10969" + }, + { + "examine": "Steamed cave pond loach.", + "durability": null, + "name": "Loach", + "weight": "1", + "archery_ticket_price": "0", + "id": "10970" + }, + { + "examine": "Cave-eel sushi.", + "durability": null, + "name": "Eel sushi", + "archery_ticket_price": "0", + "id": "10971" + }, + { + "shop_price": "2", + "examine": "Oldak's Marvellous Moving-Over-Distance Sphere.", + "durability": null, + "name": "Dorgesh-kaan sphere", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "10972" + }, + { + "requirements": "{11,52}", + "ge_buy_limit": "1000", + "examine": "A component of cave goblin Magic.", + "grand_exchange_price": "90", + "durability": null, + "name": "Light orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10973" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "90", + "durability": null, + "name": "Light orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10974" + }, + { + "examine": "A goblin wrench.", + "durability": null, + "name": "Spanner", + "weight": "1", + "archery_ticket_price": "0", + "id": "10975" + }, + { + "shop_price": "1000", + "examine": "A Construction bone.", + "durability": null, + "name": "Long bone", + "weight": "1", + "archery_ticket_price": "0", + "id": "10976" + }, + { + "shop_price": "2000", + "examine": "A curved Construction bone.", + "durability": null, + "name": "Curved bone", + "weight": "1", + "archery_ticket_price": "0", + "id": "10977" + }, + { + "ge_buy_limit": "500", + "examine": "Swamp weed found in the caves near Dorgesh-Kaan.", + "grand_exchange_price": "292", + "durability": null, + "name": "Swamp weed", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10978" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "292", + "durability": null, + "name": "Swamp weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10979" + }, + { + "examine": "Add a wire to complete it.", + "durability": null, + "name": "Empty light orb", + "archery_ticket_price": "0", + "id": "10980" + }, + { + "ge_buy_limit": "1000", + "examine": "Wire found in Dorgesh-Kaan.", + "grand_exchange_price": "988", + "durability": null, + "name": "Cave goblin wire", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10981" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "988", + "durability": null, + "name": "Cave goblin wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10982" + }, + { + "destroy_message": "You can get another cog from the old power station.", + "shop_price": "160", + "examine": "A cog. Broken: A broken cog.", + "durability": null, + "name": "Cog", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10983" + }, + { + "destroy_message": "You can get another cog from the old power station.", + "shop_price": "160", + "examine": "A cog. Broken: A broken cog.", + "durability": null, + "name": "Cog", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10984" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10985" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10986" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A meter.", + "durability": null, + "name": "Meter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10987" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A meter.", + "durability": null, + "name": "Meter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10988" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A capacitor.", + "durability": null, + "name": "Capacitor", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10989" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A capacitor.", + "durability": null, + "name": "Capacitor", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10990" + }, + { + "destroy_message": "You can get another power box from the old power station.", + "examine": "A powerbox. Broken: A broken powerbox.", + "durability": null, + "name": "Powerbox", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10993" + }, + { + "destroy_message": "You can get another power box from the old power station.", + "examine": "A powerbox. Broken: A broken powerbox.", + "durability": null, + "name": "Powerbox", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10994" + }, + { + "examine": "A perfect example of a tortoise shell.", + "durability": null, + "name": "Perfect shell", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "10995" + }, + { + "examine": "A perfect example of a snail shell.", + "durability": null, + "name": "Perfect snail shell", + "weight": "7", + "archery_ticket_price": "0", + "id": "10996" + }, + { + "examine": "On wall: That white dot looks like an eye! Off wall: A strange mole-like being.", + "durability": null, + "name": "Molanisk", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "10997" + }, + { + "examine": "One of the many citizens of Dorgesh-Kaan.", + "durability": null, + "name": "Cave goblin", + "archery_ticket_price": "0", + "id": "10998" + }, + { + "examine": "A tattered goblin holy book.", + "durability": null, + "name": "Goblin book", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10999" + }, + { + "destroy_message": "You will need to get another copy from the Varrock Palace Library if you destroy this one.", + "examine": "The History of Dagon'hai.", + "durability": null, + "name": "Dagon'hai history", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11001" + }, + { + "destroy_message": "You will need to get another copy from the Varrock Palace Library if you destroy this one.", + "examine": "The diary of Sin'keth Magis.", + "durability": null, + "name": "Sin'keth's diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11002" + }, + { + "destroy_message": "You will need to ask Rat for another empty folder if you destroy this one.", + "examine": "A folder for Rat's papers.", + "durability": null, + "name": "An empty folder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11003" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A folder for rat's papers. It needs more pages.", + "durability": null, + "name": "Used folder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11006" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A full folder. You should take this back to Rat.", + "durability": null, + "name": "Full folder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11007" + }, + { + "destroy_message": "You will need to find more papers about the outlaws if you destroy this.", + "examine": "A page of Rat's document.", + "durability": null, + "name": "Rat's paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11008" + }, + { + "destroy_message": "You will need to get another copy of the letter from Rat if you destroy this.", + "shop_price": "160", + "examine": "A letter in a strange language.", + "durability": null, + "name": "Rat's letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11009" + }, + { + "destroy_message": "You will need to ask Surok for another letter to Rat if you destroy this.", + "shop_price": "27", + "examine": "A letter.", + "durability": null, + "name": "Surok's letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11010" + }, + { + "examine": "Instructions for the beacon ring.", + "durability": null, + "name": "Zaff's instructions", + "archery_ticket_price": "0", + "id": "11011" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A wand.", + "durability": null, + "name": "Wand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11012", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This wand is glowing with chaos magic.", + "durability": null, + "name": "Infused wand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11013", + "equipment_slot": "3" + }, + { + "destroy_message": "You will need to get another ring from Zaff if you destroy this one.", + "examine": "A magical ring.", + "durability": null, + "name": "Beacon ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11014", + "bonuses": "0,0,0,2,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "remove_head": "true", + "examine": "Cock-a-doodle-do!", + "durability": null, + "name": "Chicken head", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11015", + "equipment_slot": "0" + }, + { + "examine": "Perfect for crossing the road.", + "durability": null, + "name": "Chicken feet", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11016", + "equipment_slot": "10" + }, + { + "remove_sleeves": "true", + "examine": "I look fowl in this.", + "durability": null, + "name": "Chicken wings", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11017", + "equipment_slot": "4" + }, + { + "examine": "What's the matter, are you chicken?", + "durability": null, + "name": "Chicken legs", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11018", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to Diango to get another pair of chicken feet.", + "examine": "Perfect for crossing the road.", + "durability": null, + "name": "Chicken feet", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11019", + "equipment_slot": "10" + }, + { + "destroy_message": "You will need to speak to Diango to get another set of chicken wings.", + "remove_sleeves": "true", + "examine": "I look fowl in this.", + "durability": null, + "name": "Chicken wings", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11020", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You will need to speak to Diango to get another chicken head.", + "examine": "Cock-a-doodle-do!", + "durability": null, + "name": "Chicken head", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11021", + "equipment_slot": "0" + }, + { + "destroy_message": "You will need to speak to Diango to get another set of chicken legs.", + "examine": "What's the matter, are you chicken?", + "durability": null, + "name": "Chicken legs", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11022", + "equipment_slot": "7" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Let's see how far the rabbit hole goes.", + "durability": null, + "name": "Magic egg", + "archery_ticket_price": "0", + "id": "11023" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Used for making chocolate rabbits.", + "durability": null, + "name": "Rabbit mould", + "archery_ticket_price": "0", + "id": "11024" + }, + { + "examine": "Some chocolate chunks.", + "durability": null, + "name": "Chocolate chunks", + "archery_ticket_price": "0", + "id": "11025" + }, + { + "examine": "Chocolatey kebbit goodness.", + "durability": null, + "name": "Chocolate kebbit", + "archery_ticket_price": "0", + "id": "11026" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11027", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11028", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11029", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11030", + "equipment_slot": "3" + }, + { + "destroy_message": "These logs will be destroyed if you drop them and you will need to see Olaf Hradson to get some more.", + "examine": "A number of dripping, waterlogged planks.", + "durability": null, + "name": "Damp planks", + "archery_ticket_price": "0", + "id": "11031" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A log with some squiggles carved into it.", + "durability": null, + "name": "Crude carving", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11032" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Another log with some sort of bird hacked into it.", + "durability": null, + "name": "Cruder carving", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11033" + }, + { + "destroy_message": "This map will be destroyed if you drop it and you will need to see Olaf Hradson to get another.", + "examine": "A faded map marking a cross next to a section of the landscape.", + "durability": null, + "name": "Sven's last map", + "archery_ticket_price": "0", + "id": "11034" + }, + { + "destroy_message": "These logs will be destroyed if you drop them and you will need to chop more from the windswept tree.", + "examine": "Logs taken from the exotic-looking windswept tree.", + "durability": null, + "name": "Windswept logs", + "archery_ticket_price": "0", + "id": "11035" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "examine": "A salty sword.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "6", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "120200", + "name": "Brine sabre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11037", + "bonuses": "7,47,-2,0,0,0,0,0,0,0,0,46,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "120200", + "durability": null, + "name": "Brine sabre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11038" + }, + { + "examine": "Looks like it might still float.", + "durability": null, + "name": "Rotten barrel", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11044" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Looks like it might still float.", + "durability": null, + "name": "Rotten barrel", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11045" + }, + { + "shop_price": "18", + "examine": "A coil of rope.", + "grand_exchange_price": "101", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "11046" + }, + { + "examine": "Eww, a bald rat!", + "durability": null, + "name": "Brine rat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "11047" + }, + { + "examine": "A piece of ancient goblin armour.", + "durability": null, + "name": "Armour shard", + "archery_ticket_price": "0", + "id": "11048" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11049" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Axe head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11050" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11051" + }, + { + "examine": "A piece of ancient goblin helmet.", + "durability": null, + "name": "Helmet fragment", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11052" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11053" + }, + { + "examine": "A piece of an ancient goblin shield.", + "durability": null, + "name": "Shield fragment", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11054" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11055" + }, + { + "examine": "A piece of an ancient goblin sword.", + "durability": null, + "name": "Sword fragment", + "archery_ticket_price": "0", + "id": "11056" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11057" + }, + { + "durability": null, + "name": "Mace", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "11058" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11059" + }, + { + "shop_price": "2", + "examine": "Oldak's marvellous Moving-over-distance Sphere", + "durability": null, + "name": "Goblin village sphere", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "11060" + }, + { + "requirements": "{0,25}-{5,15}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "It has ancient goblin symbols on it.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "4093", + "name": "Ancient mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11061", + "bonuses": "10,-2,16,0,0,0,0,0,0,0,0,14,3,0,0" + }, + { + "durability": null, + "name": "Ancient mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11064" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold bracelets.", + "grand_exchange_price": "456", + "durability": null, + "name": "Bracelet mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "11065" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "456", + "durability": null, + "name": "Bracelet mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11066" + }, + { + "shop_price": "165", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "223", + "durability": null, + "name": "Gold bracelet", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11069", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "223", + "durability": null, + "name": "Gold bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11070" + }, + { + "shop_price": "1035", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "578", + "durability": null, + "name": "Sapphire bracelet", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11072", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "578", + "durability": null, + "name": "Sapphire bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11073" + }, + { + "shop_price": "506", + "ge_buy_limit": "5000", + "examine": "Now I can become a potter.", + "grand_exchange_price": "644", + "durability": null, + "name": "Bracelet of clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11074", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "644", + "durability": null, + "name": "Bracelet of clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11075" + }, + { + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "786", + "durability": null, + "name": "Emerald bracelet", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11076", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "786", + "durability": null, + "name": "Emerald bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11077" + }, + { + "ge_buy_limit": "34464", + "examine": "Must be worn as you enter the game to receive the bonus for that game.", + "grand_exchange_price": "926", + "durability": null, + "name": "Castlewar brace(3)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11079", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "926", + "durability": null, + "name": "Castlewar brace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11080" + }, + { + "examine": "Must be worn as you enter the game to receive the bonus for that game.", + "grand_exchange_price": "3", + "durability": null, + "name": "Castlewar brace(2)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11081", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Castlewar brace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11082" + }, + { + "ge_buy_limit": "5000", + "examine": "Must be worn as you enter the game to receive the bonus for that game.", + "grand_exchange_price": "3484", + "durability": null, + "name": "Castlewar brace(1)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11083", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3484", + "durability": null, + "name": "Castlewar brace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11084" + }, + { + "shop_price": "2325", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "1271", + "durability": null, + "name": "Ruby bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11085", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1271", + "durability": null, + "name": "Ruby bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11086" + }, + { + "ge_buy_limit": "5000", + "examine": "It eases diseases!", + "grand_exchange_price": "1376", + "durability": null, + "name": "Inoculation brace", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11088", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1376", + "durability": null, + "name": "Inoculation brace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11089" + }, + { + "ge_buy_limit": "5000", + "examine": "In case of emergency, wear necklace.", + "grand_exchange_price": "15400", + "durability": null, + "name": "Phoenix necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11090", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "15400", + "durability": null, + "name": "Phoenix necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11091" + }, + { + "shop_price": "3422", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "12100", + "durability": null, + "name": "Diamond bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11092", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "12100", + "durability": null, + "name": "Diamond bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11093" + }, + { + "ge_buy_limit": "5000", + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "15200", + "durability": null, + "name": "Forinthry brace(5)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11095", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "15200", + "durability": null, + "name": "Forinthry brace(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11096" + }, + { + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "5", + "durability": null, + "name": "Forinthry brace(4)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11097", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Forinthry brace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11098" + }, + { + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "5", + "durability": null, + "name": "Forinthry brace(3)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11099", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Forinthry brace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11100" + }, + { + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "5", + "durability": null, + "name": "Forinthry brace(2)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11101", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Forinthry brace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11102" + }, + { + "ge_buy_limit": "5000", + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "2537", + "durability": null, + "name": "Forinthry brace(1)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11103", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2537", + "durability": null, + "name": "Forinthry brace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11104" + }, + { + "ge_buy_limit": "100", + "examine": "This will help me travel.", + "grand_exchange_price": "30400", + "durability": null, + "name": "Skills necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11105", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30400", + "durability": null, + "name": "Skills necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11106" + }, + { + "examine": "This will help me travel.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skills necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11107", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Skills necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11108" + }, + { + "examine": "This will help me travel.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skills necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11109", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Skills necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11110" + }, + { + "examine": "This will help me travel.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skills necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11111", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Skills necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11112" + }, + { + "ge_buy_limit": "100", + "examine": "This will help me travel.", + "grand_exchange_price": "28400", + "durability": null, + "name": "Skills necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11113", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28400", + "durability": null, + "name": "Skills necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11114" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon bracelet", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11115", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11116" + }, + { + "ge_buy_limit": "100", + "examine": "A handy way to get around.", + "grand_exchange_price": "29700", + "durability": null, + "name": "Combat bracelet(4)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11118", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11119" + }, + { + "examine": "A handy way to get around.", + "grand_exchange_price": "1", + "durability": null, + "name": "Combat bracelet(3)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11120", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11121" + }, + { + "examine": "A handy way to get around.", + "grand_exchange_price": "1", + "durability": null, + "name": "Combat bracelet(2)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11122", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11123" + }, + { + "examine": "A handy way to get around.", + "grand_exchange_price": "1", + "durability": null, + "name": "Combat bracelet(1)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11124", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11125" + }, + { + "ge_buy_limit": "100", + "examine": "You will need to recharge the bracelet at the Legends Guild.", + "grand_exchange_price": "29000", + "durability": null, + "name": "Combat bracelet", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11126", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11127" + }, + { + "ge_buy_limit": "100", + "examine": "Makes obsidian weapons even stronger!", + "grand_exchange_price": "2400000", + "durability": null, + "name": "Berserker necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11128", + "bonuses": "-10,-10,-10,0,0,-20,-20,-20,-20,-20,-20,7,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2400000", + "durability": null, + "name": "Berserker necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11129" + }, + { + "shop_price": "80400", + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "941200", + "durability": null, + "name": "Onyx bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11130", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "941200", + "durability": null, + "name": "Onyx bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11131" + }, + { + "ge_buy_limit": "100", + "examine": "Helps to restore your life points.", + "grand_exchange_price": "124200", + "durability": null, + "name": "Regen bracelet", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11133", + "bonuses": "8,8,8,3,7,6,6,6,3,6,5,7,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124200", + "durability": null, + "name": "Regen bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11134" + }, + { + "remove_sleeves": "true", + "examine": "For all your flying needs.", + "durability": null, + "name": "Bomber jacket", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11135", + "equipment_slot": "4" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pair of pale green Karamja gloves.", + "durability": null, + "name": "Karamja gloves 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11136", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11137" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pair of green Karamja gloves.", + "durability": null, + "name": "Karamja gloves 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11138", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11139" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pair of dark green Karamja gloves.", + "durability": null, + "name": "Karamja gloves 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11140", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11141" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "When empty: A vessel for holding liquid. Filled with water: A vessel containing water. Filled with Goutweed: A vessel containing water and goutweed.", + "durability": null, + "name": "Dream vial (empty)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11151" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "When empty: A vessel for holding liquid. Filled with water: A vessel containing water. Filled with Goutweed: A vessel containing water and goutweed.", + "durability": null, + "name": "Dream vial (water)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11152" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "When empty: A vessel for holding liquid. Filled with water: A vessel containing water. Filled with Goutweed: A vessel containing water and goutweed.", + "durability": null, + "name": "Dream vial (herb)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11153" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Potion of Shared Dreaming. One dream for two!", + "durability": null, + "name": "Dream potion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11154" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A ground astral rune.", + "durability": null, + "name": "Ground astral rune", + "archery_ticket_price": "0", + "id": "11155" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An astral rune that has been broken into shards.", + "durability": null, + "name": "Astral rune shards", + "archery_ticket_price": "0", + "id": "11156" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A lunar-styled lamp. I wonder what's inside?", + "durability": null, + "name": "Dreamy lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11157" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Perfect for storing heavy things.", + "durability": null, + "name": "Cyrisus's chest", + "tradeable": "false", + "destroy": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "11158" + }, + { + "destroy_message": "You will have to create another using the Lunar Spellbook.", + "ge_buy_limit": "100", + "examine": "A box of Hunter goodies.", + "grand_exchange_price": "3", + "durability": null, + "name": "Hunter kit", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "11159" + }, + { + "destroy_message": "You'll need to get it back from Captain Rovin.", + "examine": "Complete Shield of Arrav.", + "durability": null, + "name": "Restored shield", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "11164" + }, + { + "turn90cw_anim": "821", + "examine": "Second-rate crossbow, former property of the Phoenix Gang.", + "walk_anim": "4226", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Phoenix crossbow", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "11165", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Phoenix crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11166" + }, + { + "turn90cw_anim": "821", + "examine": "Second-rate crossbow, former property of the Phoenix Gang.", + "walk_anim": "4226", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Phoenix crossbow", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "11167", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Phoenix crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11168" + }, + { + "shop_price": "50", + "examine": "A collection of written news on paper!", + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11169" + }, + { + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11170" + }, + { + "shop_price": "50", + "examine": "A collection of written news on paper!", + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11171" + }, + { + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11172" + }, + { + "destroy_message": "Instead of destroying this I should get a friend to help me retrieve the other half.", + "examine": "I can use this to claim a reward from the King, if I get the other half.", + "durability": null, + "name": "Half certificate", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11173" + }, + { + "destroy_message": "Instead of destroying this I should get a friend to help me retrieve the other half.", + "examine": "I can use this to claim a reward from the King, if I get the other half.", + "durability": null, + "name": "Half certificate", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11174" + }, + { + "destroy_message": "You can get another find from the pile in the cleaning area of Varrock Museum.", + "examine": "A roughly-prepared archaeological find ready for cleaning.", + "durability": null, + "name": "Uncleaned find", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11175" + }, + { + "examine": "An old looking coin.", + "durability": null, + "name": "Old coin", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11179" + }, + { + "examine": "A cracked and rusty looking coin.", + "durability": null, + "name": "Ancient coin", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11180" + }, + { + "examine": "A very old symbol of Saradomin.", + "durability": null, + "name": "Ancient symbol", + "archery_ticket_price": "0", + "id": "11181" + }, + { + "examine": "An old symbol of Saradomin.", + "durability": null, + "name": "Old symbol", + "archery_ticket_price": "0", + "id": "11182" + }, + { + "examine": "An old vase with Saradominist markings - it has been chipped.", + "durability": null, + "name": "Old chipped vase", + "archery_ticket_price": "0", + "id": "11183" + }, + { + "examine": "A map of Varrock Museum.", + "durability": null, + "name": "Museum map", + "archery_ticket_price": "0", + "id": "11184" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11185" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11186" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11187" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11188" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11189" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (1)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11190", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (2)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11191", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (3)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11192", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (4)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11193", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (5)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11194", + "equipment_slot": "2" + }, + { + "examine": "A recently-cleaned necklace.", + "durability": null, + "name": "Clean necklace", + "archery_ticket_price": "0", + "id": "11195", + "equipment_slot": "2" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "One of Grimgnash's feathers.", + "durability": null, + "name": "Griffin feather", + "archery_ticket_price": "0", + "id": "11196" + }, + { + "destroy_message": "You will need to try and find another pendant in the mouse hole if you destroy this.", + "examine": "The pendant belonging to Miazrqa.", + "durability": null, + "name": "Miazrqa's pendant", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11197" + }, + { + "destroy_message": "You will need to find another sheet of music in the witch's basement if you destroy this.", + "examine": "A sheet of music.", + "durability": null, + "name": "Music sheet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11198" + }, + { + "destroy_message": "You will need to obtain another helmet from Rupert the Beard if you destroy this", + "shop_price": "60000", + "examine": "A sturdy helmet that belonged to Rupert the beard.", + "durability": null, + "name": "Rupert's helmet", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11199" + }, + { + "remove_head": "true", + "requirements": "{1,50}", + "shop_price": "60000", + "ge_buy_limit": "100", + "examine": "A sturdy helmet that belonged to Rupert the beard.", + "durability": null, + "weight": "1.9", + "equipment_slot": "0", + "grand_exchange_price": "35800", + "name": "Dwarven helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11200", + "bonuses": "0,0,6,-2,-2,27,28,31,5,24,8,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35800", + "durability": null, + "name": "Dwarven helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11201" + }, + { + "destroy_message": "You will need to find another copy in the witch's basement if you destroy this.", + "examine": "A recipe for a shrinking potion.", + "durability": null, + "name": "Shrinking recipe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11202" + }, + { + "destroy_message": "You will need to find another copy in the witch's basement if you destroy this.", + "examine": "A list of tasks for the day.", + "durability": null, + "name": "To-do list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11203" + }, + { + "destroy_message": "You will need to make another shrinking potion if you destroy this.", + "examine": "Apparently it shrinks you. Very fast.", + "durability": null, + "name": "Shrink-me-quick", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11204", + "equipment_slot": "3" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "A shrunk ogleroot! How odd...", + "grand_exchange_price": "35", + "durability": null, + "name": "Shrunk ogleroot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11205" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A shiny golden goblin. Strange!", + "durability": null, + "name": "Golden goblin", + "tradeable": "false", + "destroy": "true", + "weight": "30", + "archery_ticket_price": "0", + "id": "11210" + }, + { + "destroy_message": "You will need to get another bag of beans from Sylas if you destroy this one.", + "examine": "A bag of magic beans.", + "durability": null, + "name": "Magic beans", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11211" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "2674", + "durability": null, + "name": "Dragon arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11212", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with dragon heads and oil-soaked cloth.lit: Dragon-headed fire arrow.", + "grand_exchange_price": "3988", + "durability": null, + "name": "Dragon fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11217", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with dragon heads and oil-soaked cloth.lit: Dragon-headed fire arrow.", + "grand_exchange_price": "3834", + "durability": null, + "name": "Dragon fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11222", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "3141", + "durability": null, + "name": "Dragon arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11227", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "2866", + "durability": null, + "name": "Dragon arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11228", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "3766", + "durability": null, + "name": "Dragon arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11229", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "315", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11230", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "445", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11231", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dragon dart tip - needs feathers for flight.", + "grand_exchange_price": "746", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Dragon dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11232" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "516", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11233", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "1248", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11234", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A bow from a darker dimension.", + "walk_anim": "819", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "822", + "attack_speed": "9", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "143400", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "11235", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,95,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,60}", + "durability": null, + "weight": "1.9", + "weapon_interface": "16", + "equip_audio": "3738", + "render_anim": "1", + "lendable": "true", + "attack_audios": "3731,0,0,0", + "name": "Dark bow" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "143400", + "durability": null, + "name": "Dark bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11236" + }, + { + "ge_buy_limit": "10000", + "examine": "Dragon talons, usable as arrowheads.", + "grand_exchange_price": "3391", + "durability": null, + "name": "Dragon arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11237" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "A baby impling in a jar. That's a bit cruel.", + "grand_exchange_price": "529", + "durability": null, + "name": "Baby impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11238" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "529", + "durability": null, + "name": "Baby impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11239" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "A young impling in a jar. Don't trap me, man.", + "grand_exchange_price": "514", + "durability": null, + "name": "Young impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11240" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "514", + "durability": null, + "name": "Young impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11241" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "A gourmet impling in a jar.", + "grand_exchange_price": "677", + "durability": null, + "name": "Gourm' impling jar", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11242" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "677", + "durability": null, + "name": "Gourm' impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11243" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Earth impling in a jar.", + "grand_exchange_price": "1343", + "durability": null, + "name": "Earth impling jar", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11244" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1343", + "durability": null, + "name": "Earth impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11245" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Essence impling in a jar.", + "grand_exchange_price": "1266", + "durability": null, + "name": "Ess' impling jar", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11246" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1266", + "durability": null, + "name": "Ess' impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11247" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Eclectic impling in a jar.", + "grand_exchange_price": "2943", + "durability": null, + "name": "Eclectic impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11248" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2943", + "durability": null, + "name": "Eclectic impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11249" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Nature impling in a jar.", + "grand_exchange_price": "8593", + "durability": null, + "name": "Nature impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11250" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8593", + "durability": null, + "name": "Nature impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11251" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Magpie impling in a jar.", + "grand_exchange_price": "22900", + "durability": null, + "name": "Magpie impling jar", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11252" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "22900", + "durability": null, + "name": "Magpie impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11253" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Ninja impling in a jar.", + "grand_exchange_price": "21800", + "durability": null, + "name": "Ninja impling jar", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11254" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "21800", + "durability": null, + "name": "Ninja impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11255" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "500", + "examine": "Dragon impling in a jar.", + "grand_exchange_price": "423600", + "durability": null, + "name": "Dragon impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11256" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "423600", + "durability": null, + "name": "Dragon impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11257" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Creates butterfly and impling jars.", + "durability": null, + "name": "Jar generator", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11258" + }, + { + "requirements": "{21,17}", + "shop_price": "3", + "turn90cw_anim": "6610", + "examine": "For catching butterflies.", + "walk_anim": "6607", + "durability": null, + "destroy": "true", + "weight": "0.2", + "turn90ccw_anim": "6609", + "attack_speed": "4", + "two_handed": "", + "weapon_interface": "14", + "turn180_anim": "6608", + "render_anim": "1426", + "equipment_slot": "3", + "destroy_message": "You will have to trade with Elnock to get a new magic butterfly net.", + "stand_anim": "6604", + "name": "Magic butterfly net", + "tradeable": "false", + "run_anim": "6603", + "archery_ticket_price": "0", + "id": "11259", + "stand_turn_anim": "6611" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "It's got little holes in the top.", + "grand_exchange_price": "248", + "durability": null, + "name": "Impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11260" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "248", + "durability": null, + "name": "Impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11261" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Imps seem to hate this stuff. Can't say I blame them.", + "grand_exchange_price": "1016", + "durability": null, + "name": "Imp repellent", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11262" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1016", + "durability": null, + "name": "Imp repellent", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11263" + }, + { + "ge_buy_limit": "100", + "examine": "Omega 3 oil. Good for the brain, not so for the nose.", + "grand_exchange_price": "601", + "durability": null, + "name": "Anchovy oil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11264" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "601", + "durability": null, + "name": "Anchovy oil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11265" + }, + { + "ge_buy_limit": "100", + "examine": "Fish paste. Urk.", + "grand_exchange_price": "57", + "durability": null, + "name": "Anchovy paste", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11266" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11267" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11268" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11269" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11270" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11271" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11272" + }, + { + "destroy_message": "You will have to ask Elnock for another one of these.", + "examine": "Lets you easily identify your prey.", + "durability": null, + "name": "Impling scroll", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11273" + }, + { + "remove_sleeves": "true", + "examine": "The label says 'Vivid Crimson', but it looks like pink to me!", + "grand_exchange_price": "27", + "durability": null, + "name": "Ham shirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "11274", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11275" + }, + { + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11276" + }, + { + "lendable": "true", + "examine": "I hope I don't meet any roundheads...", + "durability": null, + "name": "Cavalier mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11277", + "equipment_slot": "8" + }, + { + "examine": "Essential mime wear.", + "durability": null, + "name": "Beret mask", + "weight": "1", + "archery_ticket_price": "0", + "id": "11278", + "equipment_slot": "0" + }, + { + "destroy_message": "You can complete the quest by speaking to Oziach even if you do not have the head.", + "examine": "The severed head of the great dragon Elvarg!", + "durability": null, + "name": "Elvarg's head", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11279", + "equipment_slot": "3" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "I hope I don't meet any roundheads...", + "durability": null, + "name": "Cavalier and mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11280", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Cavalier and mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11281" + }, + { + "remove_head": "true", + "examine": "Essential mime wear.", + "durability": null, + "name": "Beret and mask", + "weight": "1", + "archery_ticket_price": "0", + "id": "11282", + "equipment_slot": "0" + }, + { + "requirements": "{1,75}", + "examine": "A heavy shield with a snarling, draconic visage.", + "grand_exchange_price": "5653008", + "rare_item": "true", + "durability": null, + "name": "Dragonfire shield", + "weight": "7.2", + "archery_ticket_price": "0", + "id": "11283", + "bonuses": "0,0,0,-10,-5,20,25,22,10,22,17,7,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,75}", + "ge_buy_limit": "10", + "examine": "A heavy shield with a snarling, draconic visage.", + "rare_item": "true", + "durability": null, + "weight": "7.2", + "equipment_slot": "5", + "grand_exchange_price": "7700000", + "name": "Dragonfire shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11284", + "bonuses": "0,0,0,-10,-5,20,25,22,10,22,17,7,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "7700000", + "durability": null, + "name": "Dragonfire shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11285" + }, + { + "ge_buy_limit": "10", + "examine": "It looks like this could be attached to a shield somehow.", + "grand_exchange_price": "8000000", + "rare_item": "true", + "durability": null, + "name": "Draconic visage", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "11286" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "8000000", + "durability": null, + "name": "Draconic visage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11287" + }, + { + "examine": "A heavy barbarian Fishing rod.", + "durability": null, + "name": "Barbarian rod", + "weight": "1", + "archery_ticket_price": "0", + "id": "11323" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "Roe, or cheap fishy eggs.", + "grand_exchange_price": "17", + "durability": null, + "name": "Roe", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "11324" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "17", + "durability": null, + "name": "Roe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11325" + }, + { + "ge_buy_limit": "5000", + "examine": "Caviar, or expensive fishy eggs.", + "grand_exchange_price": "370", + "durability": null, + "name": "Caviar", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "11326" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "370", + "durability": null, + "name": "Caviar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11327" + }, + { + "shop_price": "11", + "ge_buy_limit": "5000", + "examine": "A sad-looking trout.", + "grand_exchange_price": "9", + "durability": null, + "name": "Leaping trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11328" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "9", + "durability": null, + "name": "Leaping trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11329" + }, + { + "ge_buy_limit": "5000", + "examine": "Some non-tasty salmon.", + "grand_exchange_price": "19", + "durability": null, + "name": "Leaping salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11330" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "19", + "durability": null, + "name": "Leaping salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11331" + }, + { + "ge_buy_limit": "5000", + "examine": "A bloated sturgeon.", + "grand_exchange_price": "151", + "durability": null, + "name": "Leaping sturgeon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11332" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "151", + "durability": null, + "name": "Leaping sturgeon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11333" + }, + { + "ge_buy_limit": "100", + "examine": "Slices of inedible fish.", + "grand_exchange_price": "2", + "durability": null, + "name": "Fish offcuts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11334" + }, + { + "remove_head": "true", + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "Protects your head and looks impressive too.", + "rare_item": "true", + "durability": null, + "weight": "2", + "absorb": "2,0,4", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "51600000", + "name": "Dragon full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11335", + "bonuses": "0,0,0,-6,-2,45,48,41,-1,46,12,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "51600000", + "durability": null, + "name": "Dragon full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11336" + }, + { + "destroy_message": "I can gather more from the caverns below the Baxtorian Lake.", + "examine": "The bones of a barbarian warrior, slain by his fellow adventurers.", + "durability": null, + "name": "Mangled bones", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11337" + }, + { + "destroy_message": "I can gather more from the caverns below the Baxtorian Lake.", + "examine": "The bones of a barbarian warrior, slain by vile dragons.", + "durability": null, + "name": "Chewed bones", + "destroy": "true", + "weight": "9.6", + "archery_ticket_price": "0", + "id": "11338" + }, + { + "destroy_message": "I can obtain another from Otto.", + "examine": "Records from my discoveries beneath the lake.", + "durability": null, + "name": "My notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11339" + }, + { + "destroy_message": "I can obtain another from Otto.", + "examine": "A record of Otto's instructions to me.", + "durability": null, + "name": "Barbarian skills", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11340" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11341" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11342" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11343" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11344" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11345" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11346" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11347" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11348" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11349" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11350" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11351" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11352" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11353" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11354" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11355" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11356" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11357" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11358" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11359" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11360" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11361" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11362" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11363" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11364" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11365" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11366" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "204", + "stand_anim": "813", + "name": "Bronze hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11367", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "204", + "durability": null, + "name": "Bronze hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11368" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "25", + "stand_anim": "813", + "name": "Iron hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11369", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Iron hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11370" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "93", + "stand_anim": "813", + "name": "Steel hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11371", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "Steel hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11372" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "357", + "stand_anim": "813", + "name": "Mithril hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11373", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "357", + "durability": null, + "name": "Mithril hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11374" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1095", + "stand_anim": "813", + "name": "Adamant hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11375", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1095", + "durability": null, + "name": "Adamant hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11376" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "12300", + "stand_anim": "813", + "name": "Rune hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11377", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12300", + "durability": null, + "name": "Rune hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11378" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "290", + "stand_anim": "813", + "name": "Bronze hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11379", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "290", + "durability": null, + "name": "Bronze hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11380" + }, + { + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed bronze hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Bronze hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11381", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "775", + "stand_anim": "813", + "name": "Bronze hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11382", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "775", + "durability": null, + "name": "Bronze hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11383" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8974", + "stand_anim": "813", + "name": "Bronze hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11384", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8974", + "durability": null, + "name": "Bronze hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11385" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "99", + "stand_anim": "813", + "name": "Iron hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11386", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "99", + "durability": null, + "name": "Iron hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11387" + }, + { + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed iron hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Iron hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11388", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "584", + "stand_anim": "813", + "name": "Iron hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11389", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "584", + "durability": null, + "name": "Iron hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11390" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8783", + "stand_anim": "813", + "name": "Iron hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11391", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8783", + "durability": null, + "name": "Iron hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11392" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "151", + "stand_anim": "813", + "name": "Steel hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11393", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "151", + "durability": null, + "name": "Steel hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11394" + }, + { + "requirements": "{0,5}", + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed steel hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Steel hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11395", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "636", + "stand_anim": "813", + "name": "Steel hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11396", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "636", + "durability": null, + "name": "Steel hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11397" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8835", + "stand_anim": "813", + "name": "Steel hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11398", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8835", + "durability": null, + "name": "Steel hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11399" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "440", + "stand_anim": "813", + "name": "Mithril hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11400", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "440", + "durability": null, + "name": "Mithril hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11401" + }, + { + "requirements": "{0,20}", + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed mithril hasta", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "353", + "stand_anim": "813", + "name": "Mithril hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11402", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "925", + "stand_anim": "813", + "name": "Mithril hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11403", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "925", + "durability": null, + "name": "Mithril hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11404" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8711", + "stand_anim": "813", + "name": "Mithril hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11405", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8711", + "durability": null, + "name": "Mithril hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11406" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1154", + "stand_anim": "813", + "name": "Adamant hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11407", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1154", + "durability": null, + "name": "Adamant hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11408" + }, + { + "requirements": "{0,30}", + "turn90cw_anim": "1207", + "examine": "\tA karambwan poison-tipped, one-handed adamantite hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Adamant hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11409", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1639", + "stand_anim": "813", + "name": "Adamant hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11410", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1639", + "durability": null, + "name": "Adamant hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11411" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "9388", + "stand_anim": "813", + "name": "Adamant hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11412", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9388", + "durability": null, + "name": "Adamant hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11413" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "12300", + "stand_anim": "813", + "name": "Rune hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11414", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12300", + "durability": null, + "name": "Rune hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11415" + }, + { + "requirements": "{0,40}", + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed rune hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Rune hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11416", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "12200", + "stand_anim": "813", + "name": "Rune hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11417", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12200", + "durability": null, + "name": "Rune hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11418" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "15500", + "stand_anim": "813", + "name": "Rune hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11419", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15500", + "durability": null, + "name": "Rune hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11420" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy attack potion", + "grand_exchange_price": "20", + "durability": null, + "name": "Attack mix(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "11429" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "20", + "durability": null, + "name": "Attack mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11430" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy attack potion", + "grand_exchange_price": "19", + "durability": null, + "name": "Attack mix(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "11431" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "19", + "durability": null, + "name": "Attack mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11432" + }, + { + "ge_buy_limit": "1000", + "examine": "Two doses of fishy antipoison potion.", + "grand_exchange_price": "455", + "durability": null, + "name": "Antipoison mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11433" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "455", + "durability": null, + "name": "Antipoison mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11434" + }, + { + "ge_buy_limit": "1000", + "examine": "Two doses of fishy antipoison potion.", + "grand_exchange_price": "608", + "durability": null, + "name": "Antipoison mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11435" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "608", + "durability": null, + "name": "Antipoison mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11436" + }, + { + "ge_buy_limit": "1000", + "examine": "2 dose: Two doses of fishy Relicym's balm.", + "grand_exchange_price": "264", + "durability": null, + "name": "Relicym's mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11437" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "264", + "durability": null, + "name": "Relicym's mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11438" + }, + { + "ge_buy_limit": "1000", + "examine": "2 dose: Two doses of fishy Relicym's balm.", + "grand_exchange_price": "131", + "durability": null, + "name": "Relicym's mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11439" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "131", + "durability": null, + "name": "Relicym's mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11440" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy strength potion.", + "grand_exchange_price": "159", + "durability": null, + "name": "Strength mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11441" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "159", + "durability": null, + "name": "Strength mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11442" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy strength potion.", + "grand_exchange_price": "164", + "durability": null, + "name": "Strength mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11443" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "164", + "durability": null, + "name": "Strength mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11444" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy Combat potion", + "grand_exchange_price": "366", + "durability": null, + "name": "Combat mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11445" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "durability": null, + "name": "Combat mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11446" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy Combat potion", + "grand_exchange_price": "328", + "durability": null, + "name": "Combat mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11447" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "328", + "durability": null, + "name": "Combat mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11448" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of fishy restore potion.", + "grand_exchange_price": "17", + "durability": null, + "name": "Restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11449" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "17", + "durability": null, + "name": "Restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11450" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of fishy restore potion.", + "grand_exchange_price": "24", + "durability": null, + "name": "Restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11451" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "24", + "durability": null, + "name": "Restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11452" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy energy potion.", + "grand_exchange_price": "248", + "durability": null, + "name": "Energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11453" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "248", + "durability": null, + "name": "Energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11454" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy energy potion.", + "grand_exchange_price": "212", + "durability": null, + "name": "Energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11455" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "212", + "durability": null, + "name": "Energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11456" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy defence potion", + "grand_exchange_price": "887", + "durability": null, + "name": "Defence mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11457" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "887", + "durability": null, + "name": "Defence mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11458" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy defence potion", + "grand_exchange_price": "780", + "durability": null, + "name": "Defence mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11459" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "780", + "durability": null, + "name": "Defence mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11460" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of a fishy agility potion", + "grand_exchange_price": "388", + "durability": null, + "name": "Agility mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11461" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "388", + "durability": null, + "name": "Agility mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11462" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of a fishy agility potion", + "grand_exchange_price": "459", + "durability": null, + "name": "Agility mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11463" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "459", + "durability": null, + "name": "Agility mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11464" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of a fishy Prayer potion.", + "grand_exchange_price": "2761", + "durability": null, + "name": "Prayer mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11465" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2761", + "durability": null, + "name": "Prayer mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11466" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of a fishy Prayer potion.", + "grand_exchange_price": "1857", + "durability": null, + "name": "Prayer mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11467" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1857", + "durability": null, + "name": "Prayer mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11468" + }, + { + "ge_buy_limit": "1000", + "examine": "one/two doses of fishy super attack potion", + "grand_exchange_price": "375", + "durability": null, + "name": "Superattack mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11469" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "375", + "durability": null, + "name": "Superattack mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11470" + }, + { + "ge_buy_limit": "1000", + "examine": "one/two doses of fishy super attack potion", + "grand_exchange_price": "516", + "durability": null, + "name": "Superattack mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11471" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "516", + "durability": null, + "name": "Superattack mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11472" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy super antipoison potion.", + "grand_exchange_price": "613", + "durability": null, + "name": "Anti-p supermix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11473" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "613", + "durability": null, + "name": "Anti-p supermix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11474" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy super antipoison potion.", + "grand_exchange_price": "1119", + "durability": null, + "name": "Anti-p supermix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11475" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1119", + "durability": null, + "name": "Anti-p supermix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11476" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two Doses of fishy fishing potion.", + "grand_exchange_price": "123", + "durability": null, + "name": "Fishing mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11477" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "123", + "durability": null, + "name": "Fishing mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11478" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two Doses of fishy fishing potion.", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11479" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11480" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super energy potion.", + "grand_exchange_price": "1062", + "durability": null, + "name": "Sup. energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11481" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1062", + "durability": null, + "name": "Sup. energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11482" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super energy potion.", + "grand_exchange_price": "562", + "durability": null, + "name": "Sup. energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11483" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "562", + "durability": null, + "name": "Sup. energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11484" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Super strength potion.", + "grand_exchange_price": "955", + "durability": null, + "name": "Sup. str. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11485" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "955", + "durability": null, + "name": "Sup. str. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11486" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Super strength potion.", + "grand_exchange_price": "1040", + "durability": null, + "name": "Sup. str. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11487" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1040", + "durability": null, + "name": "Sup. str. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11488" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Magic essence potion.", + "grand_exchange_price": "808", + "durability": null, + "name": "Magic ess. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11489" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "808", + "durability": null, + "name": "Magic ess. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11490" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Magic essence potion.", + "grand_exchange_price": "447", + "durability": null, + "name": "Magic ess. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11491" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "447", + "durability": null, + "name": "Magic ess. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11492" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super restore potion.", + "grand_exchange_price": "3670", + "durability": null, + "name": "Sup. restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11493" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3670", + "durability": null, + "name": "Sup. restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11494" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super restore potion.", + "grand_exchange_price": "3104", + "durability": null, + "name": "Sup. restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11495" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3104", + "durability": null, + "name": "Sup. restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11496" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy super defence potion", + "grand_exchange_price": "38", + "durability": null, + "name": "Sup. def. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11497" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "38", + "durability": null, + "name": "Sup. def. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11498" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy super defence potion", + "grand_exchange_price": "66", + "durability": null, + "name": "Sup. def. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11499" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "66", + "durability": null, + "name": "Sup. def. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11500" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy extra strength antidote potion.", + "grand_exchange_price": "1909", + "durability": null, + "name": "Antidote+ mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11501" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1909", + "durability": null, + "name": "Antidote+ mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11502" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy extra strength antidote potion.", + "grand_exchange_price": "1330", + "durability": null, + "name": "Antidote+ mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11503" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1330", + "durability": null, + "name": "Antidote+ mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11504" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy anti-fire breath potion.", + "grand_exchange_price": "2048", + "durability": null, + "name": "Antifire mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11505" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2048", + "durability": null, + "name": "Antifire mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11506" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy anti-fire breath potion.", + "grand_exchange_price": "1444", + "durability": null, + "name": "Antifire mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11507" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1444", + "durability": null, + "name": "Antifire mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11508" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy ranging potion.", + "grand_exchange_price": "2879", + "durability": null, + "name": "Ranging mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11509" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2879", + "durability": null, + "name": "Ranging mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11510" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy ranging potion.", + "grand_exchange_price": "1880", + "durability": null, + "name": "Ranging mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11511" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1880", + "durability": null, + "name": "Ranging mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11512" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy magic potion.", + "grand_exchange_price": "1022", + "durability": null, + "name": "Magic mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11513" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1022", + "durability": null, + "name": "Magic mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11514" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy magic potion.", + "grand_exchange_price": "1323", + "durability": null, + "name": "Magic mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11515" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1323", + "durability": null, + "name": "Magic mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11516" + }, + { + "ge_buy_limit": "1000", + "examine": "Doses of fishy hunting potion", + "grand_exchange_price": "146", + "durability": null, + "name": "Hunting mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11517" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "146", + "durability": null, + "name": "Hunting mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11518" + }, + { + "ge_buy_limit": "1000", + "examine": "Doses of fishy hunting potion", + "grand_exchange_price": "87", + "durability": null, + "name": "Hunting mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11519" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "87", + "durability": null, + "name": "Hunting mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11520" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Zamorak potion.", + "grand_exchange_price": "665", + "durability": null, + "name": "Zamorak mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11521" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "665", + "durability": null, + "name": "Zamorak mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11522" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Zamorak potion.", + "grand_exchange_price": "339", + "durability": null, + "name": "Zamorak mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11523" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "339", + "durability": null, + "name": "Zamorak mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11524" + }, + { + "ge_buy_limit": "5000", + "examine": "More fluff than feather.", + "grand_exchange_price": "325", + "durability": null, + "name": "Wimpy feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11525" + }, + { + "destroy_message": "If you drop this book it will be destroyed. You cannot replace it.", + "examine": "Educate yourself.", + "durability": null, + "name": "Book of knowledge", + "weight": "1", + "archery_ticket_price": "0", + "id": "11640" + }, + { + "durability": null, + "name": "Astronomy book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11655" + }, + { + "ge_buy_limit": "100", + "examine": "A book that explains the art of crafting items from glass.", + "grand_exchange_price": "278", + "durability": null, + "name": "Glassblowing book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11656" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "278", + "durability": null, + "name": "Glassblowing book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11657" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A mage helm from the order of the Void Knights.", + "durability": null, + "name": "Void mage helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11663", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A ranger helm from the order of the Void Knights", + "durability": null, + "name": "Void ranger helm", + "tradeable": "false", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "11664", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A melee helm from the order of the Void Knights.", + "durability": null, + "name": "Void melee helm", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "11665", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Void seal(8)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11666", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(7)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11667", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(6)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11668", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(5)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11669", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(4)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11670", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(3)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11671", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(2)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11672", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(1)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11673", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A mage helm from the order of the Void Knights.", + "durability": null, + "name": "Void mage helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11674", + "bonuses": "0,0,0,0,0,6,6,6,6,6,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A ranger helm from the order of the Void Knights", + "durability": null, + "name": "Void ranger helm", + "tradeable": "false", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "11675", + "bonuses": "0,0,0,0,0,6,6,6,6,6,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A melee helm from the order of the Void Knights.", + "durability": null, + "name": "Void melee helm", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "11676", + "bonuses": "0,0,0,0,0,6,6,6,6,6,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "I can find another book in the Keldagrim library.", + "examine": "\"Beyond Trollheim\" by Nestor Peregrine.", + "durability": null, + "name": "Explorer's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11677" + }, + { + "destroy_message": "You'll need to visit the Sinclair Mansion to get another one.", + "examine": "A black helm, too small for your head", + "durability": null, + "name": "Black knight helm", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "11678" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11679" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A change of address form.", + "durability": null, + "name": "Address form", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11680" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It has something written on it.", + "durability": null, + "name": "Scrap paper", + "archery_ticket_price": "0", + "id": "11681" + }, + { + "examine": "I could use this to pick the lock.", + "durability": null, + "name": "Hair clip", + "archery_ticket_price": "0", + "id": "11682" + }, + { + "ge_buy_limit": "10", + "examine": "Godsword shards 1 and 2.Godsword shards 2 and 3.Godsword shards 1 and 3.", + "grand_exchange_price": "331300", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11686" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "331300", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11687" + }, + { + "ge_buy_limit": "10", + "examine": "Godsword shards 1 and 2.Godsword shards 2 and 3.Godsword shards 1 and 3.", + "grand_exchange_price": "342100", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11688" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "342100", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11689" + }, + { + "ge_buy_limit": "10", + "examine": "The blade for the ultimate weapon.", + "grand_exchange_price": "466800", + "durability": null, + "name": "Godsword blade", + "tradeable": "true", + "weight": "7.5", + "archery_ticket_price": "0", + "id": "11690" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "466800", + "durability": null, + "name": "Godsword blade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11691" + }, + { + "ge_buy_limit": "10", + "examine": "Godsword shards 1 and 2.Godsword shards 2 and 3.Godsword shards 1 and 3.", + "grand_exchange_price": "348500", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11692" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "348500", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11693" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A beautiful, heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "28000000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11694", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Armadyl godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "28000000", + "durability": null, + "name": "Armadyl godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11695" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A brutally heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "3700000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11696", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Bandos godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3700000", + "durability": null, + "name": "Bandos godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11697" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A gracious, heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "22000000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11698", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Saradomin godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "22000000", + "durability": null, + "name": "Saradomin godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11699" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A terrifying, heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "6100000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11700", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Zamorak godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "6100000", + "durability": null, + "name": "Zamorak godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11701" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "30600000", + "rare_item": "true", + "durability": null, + "name": "Armadyl hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11702" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "30600000", + "durability": null, + "name": "Armadyl hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11703" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "3300000", + "rare_item": "true", + "durability": null, + "name": "Bandos hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11704" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3300000", + "durability": null, + "name": "Bandos hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11705" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "24900000", + "rare_item": "true", + "durability": null, + "name": "Saradomin hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11706" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "24900000", + "durability": null, + "name": "Saradomin hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11707" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "6100000", + "rare_item": "true", + "durability": null, + "name": "Zamorak hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11708" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "6100000", + "durability": null, + "name": "Zamorak hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11709" + }, + { + "ge_buy_limit": "10", + "examine": "Part of the Godsword blade.", + "grand_exchange_price": "150200", + "durability": null, + "rare_item": "true", + "name": "Godsword shard 1", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11710" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "150200", + "durability": null, + "name": "Godsword shard 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11711" + }, + { + "ge_buy_limit": "10", + "examine": "Part of the Godsword blade.", + "grand_exchange_price": "149100", + "durability": null, + "rare_item": "true", + "name": "Godsword shard 2", + "tradeable": "true", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11712" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "149100", + "durability": null, + "name": "Godsword shard 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11713" + }, + { + "ge_buy_limit": "10", + "examine": "Part of the Godsword blade.", + "grand_exchange_price": "149800", + "durability": null, + "rare_item": "true", + "name": "Godsword shard 3", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11714" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "149800", + "durability": null, + "name": "Godsword shard 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11715" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "An evil spear.", + "walk_anim": "1205", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "5400000", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11716", + "stand_turn_anim": "1209", + "bonuses": "85,65,65,0,0,13,13,12,0,13,0,75,2,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "3", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Zamorakian spear" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "5400000", + "durability": null, + "name": "Zamorakian spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11717" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "A helmet of great craftmanship.", + "rare_item": "true", + "durability": null, + "weight": "0.5", + "absorb": "0,5,2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "4100000", + "name": "Armadyl helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11718", + "bonuses": "-5,-5,-5,-5,10,6,8,10,10,8,12,0,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "4100000", + "durability": null, + "name": "Armadyl helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11719" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "A chestplate of great craftsmanship", + "rare_item": "true", + "durability": null, + "weight": "4", + "absorb": "0,10,5", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "14800000", + "name": "Armadyl chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11720", + "bonuses": "-7,-7,-7,-15,33,56,48,61,70,57,52,0,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "14800000", + "durability": null, + "name": "Armadyl chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11721" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "2", + "examine": "A rune plateskirt in the colours of Armadyl.", + "rare_item": "true", + "durability": null, + "weight": "8", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "14800000", + "name": "Armadyl plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11722", + "bonuses": "-6,-6,-6,-10,20,32,26,34,40,33,25,0,1,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14800000", + "durability": null, + "name": "Armadyl plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11723" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "1", + "examine": "A sturdy chestplate.", + "rare_item": "true", + "durability": null, + "weight": "12", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "14700000", + "name": "Bandos chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11724", + "bonuses": "0,0,0,-15,-10,98,93,105,-6,133,52,4,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "14700000", + "durability": null, + "name": "Bandos chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11725" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "1", + "examine": "A sturdy pair of tassets.", + "rare_item": "true", + "durability": null, + "weight": "8", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "15200000", + "name": "Bandos tassets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11726", + "bonuses": "0,0,0,-21,-7,71,63,66,-4,93,25,2,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "15200000", + "durability": null, + "name": "Bandos tassets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11727" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "1", + "examine": "Some sturdy boots", + "rare_item": "true", + "durability": null, + "weight": "6", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "111700", + "name": "Bandos boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11728", + "bonuses": "0,0,0,-5,-3,17,18,19,0,0,15,0,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "111700", + "durability": null, + "name": "Bandos boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11729" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "The incredible blade of an Icyene.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7044", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "5300000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11730", + "stand_turn_anim": "7040", + "bonuses": "0,82,60,0,0,0,0,0,0,0,0,82,2,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "3", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Saradomin sword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "5300000", + "durability": null, + "name": "Saradomin sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11731" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "These will protect my feet.", + "durability": null, + "rare_item": "true", + "weight": "1", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "95400", + "name": "Dragon boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11732", + "bonuses": "0,0,0,-3,-1,16,17,18,0,0,15,4,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95400", + "durability": null, + "name": "Dragon boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11733" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scroll for Sir Tiffy. The wax seal is broken. / Before reading the scroll: A scroll for Sir Tiffy. It is sealed with a wax insignia.", + "durability": null, + "name": "Knight's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11734" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scroll for Sir Tiffy. The wax seal is broken. / Before reading the scroll: A scroll for Sir Tiffy. It is sealed with a wax insignia.", + "durability": null, + "name": "Knight's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11735" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "231300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11736", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Steam battlestaff" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "231300", + "durability": null, + "name": "Steam battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11737" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "267600", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11738", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic steam staff" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "267600", + "durability": null, + "name": "Mystic steam staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11739" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11741" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11743" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11745" + }, + { + "destroy_message": "There may be another in the chest where you found this.", + "examine": "This probably opens a chest in Golrie's caves. (Path of Glophrie)", + "durability": null, + "name": "A key to a chest", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11747" + }, + { + "destroy_message": "There may be another in the chest where you found this.", + "examine": "This opens the door into Golrie's strongroom. (Path of Glophrie)", + "durability": null, + "name": "Strongroom key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11748" + }, + { + "destroy_message": "Maybe Brimstail will have another crystal seed you could grow into a chime.", + "examine": "It makes a sound.", + "durability": null, + "name": "Crystal chime", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11749", + "equipment_slot": "3" + }, + { + "destroy_message": "There may be another in the chest where you found this.", + "examine": "Notes written by Yewnock while copying Oaknock's machine.", + "durability": null, + "name": "Yewnock's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11750" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11753" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11754" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11755" + }, + { + "destroy_message": "You will need to get a new set of armour from Rat Burgiss if you destroy this one.", + "remove_sleeves": "true", + "examine": "Varrock Smithing armour.", + "durability": null, + "name": "Varrock armour 1", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11756", + "bonuses": "0,0,0,-30,-10,15,14,9,-6,14,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You will need to get a new set of armour from Reldo if you destroy this one.", + "remove_sleeves": "true", + "examine": "Varrock smithing armour.", + "durability": null, + "name": "Varrock armour 2", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11757", + "bonuses": "0,0,0,-30,-10,21,20,12,-6,20,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You will need to get a new set of armour from Vannaka if you destroy this one.", + "remove_sleeves": "true", + "examine": "Varrock smithing armour.", + "durability": null, + "name": "Varrock armour 3", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11758", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "4", + "examine": "A number of wooden logs.", + "grand_exchange_price": "124", + "durability": null, + "name": "Logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11760" + }, + { + "destroy_message": "You can get the diary again from Sandy's desk.", + "examine": "A locked/unlocked diary.", + "durability": null, + "name": "Locked diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11761" + }, + { + "destroy_message": "You can get the diary again from Sandy's desk.", + "examine": "A locked/unlocked diary.", + "durability": null, + "name": "Unlocked diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11762" + }, + { + "destroy_message": "You can get the foot again from the creatures in the Jade Vine.", + "examine": "A wizard's severed foot. You can tell by the robes.", + "durability": null, + "name": "Foot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11764" + }, + { + "destroy_message": "You can get the arm again from the creatures in the Jade Vine.", + "examine": "\"A wizard's severed arm. You can tell by the robes.", + "durability": null, + "name": "Left arm", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11766" + }, + { + "destroy_message": "You can get the arm again from the creatures in the Jade Vine.", + "examine": "A wizard's severed arm. You can tell by the robes.", + "durability": null, + "name": "Right arm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11767" + }, + { + "destroy_message": "You can get the leg again from the creatures in the Jade Vine.", + "examine": "A wizard's severed leg. You can tell by the robes.", + "durability": null, + "name": "Left leg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11768" + }, + { + "destroy_message": "You can get the leg again from the creatures in the Jade Vine.", + "examine": "A wizard's severed leg. You can tell by the robes.", + "durability": null, + "name": "Right leg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11769" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11770" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11771" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11772" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11773" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11774" + }, + { + "examine": "A floppy root cutting. Quite dead.", + "durability": null, + "name": "Wilted cutting", + "archery_ticket_price": "0", + "id": "11775" + }, + { + "examine": "A potted root.", + "durability": null, + "name": "Potted root", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11776" + }, + { + "destroy_message": "You can get the sealed pot back by visiting Garth, the farmer on Karamja.", + "examine": "This sealed pot contains your vine cutting - hopefully still alive.", + "durability": null, + "name": "Sealed pot", + "tradeable": "false", + "destroy": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11777" + }, + { + "examine": "A large seed.", + "durability": null, + "name": "Jade vine seed", + "archery_ticket_price": "0", + "id": "11778" + }, + { + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "Surely this holds many a dark tale...", + "durability": null, + "name": "The grim reaper's diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11780" + }, + { + "bankable": "false", + "destroy_message": "Another can be found in the Grim Reaper's house.", + "examine": "Some of the Grim Reaper's garb.", + "durability": null, + "name": "Grim's robe", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11781" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "Someone's Last Will and Testament.", + "durability": null, + "name": "Last will and testament", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11782" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "A tasty treat for Muncher.", + "durability": null, + "name": "Human bones", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11783" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "Ooooh spooky!", + "durability": null, + "name": "Servant's skull", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11784" + }, + { + "bankable": "false", + "destroy_message": "You can get a replacement from Diango in Draynor Village.", + "examine": "There's not much sand left in the top half...", + "durability": null, + "name": "Hourglass", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11785" + }, + { + "bankable": "false", + "destroy_message": "Another can be found in the Grim Reaper's house.", + "examine": "Used to sharpen the blade of a scythe.", + "durability": null, + "name": "Scythe sharpener", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11786" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "That's gross. Why am I carrying it around?", + "durability": null, + "name": "Human eye", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11787" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "A 'Voice of Doom' potion, used to deepen your voice.", + "durability": null, + "name": "'voice of doom' potion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11788" + }, + { + "remove_head": "true", + "destroy_message": "You should be able to get another from Diango in Draynor Village.", + "examine": "Allows me to imitate the harbinger of doom, the stealer of souls, the eternal end...", + "durability": null, + "name": "Grim reaper hood", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11789", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "destroy_message": "You should be able to get another from Diango in Draynor Village.", + "examine": "Allows me to imitate the harbinger of doom, the stealer of souls, the eternal end...", + "durability": null, + "name": "Grim reaper hood", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11790", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "White goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "11791", + "equipment_slot": "4" + }, + { + "examine": "Smaller than the average goblin. After The Chosen Commander: Oldak's new assistant.", + "durability": null, + "name": "Grubfoot", + "archery_ticket_price": "0", + "id": "11792" + }, + { + "examine": "See article", + "durability": null, + "name": "Zanik", + "archery_ticket_price": "0", + "id": "11793" + }, + { + "shop_price": "32", + "examine": "Oldak's Marvellous Moving-Over-Distance Sphere", + "durability": null, + "name": "Plain of mud sphere", + "archery_ticket_price": "0", + "id": "11794" + }, + { + "destroy_message": "The Ekeleshuun priest probably has a spare.", + "examine": "The key you stole from the Ekeleshuun priest.", + "durability": null, + "name": "Ekeleshuun key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11795" + }, + { + "destroy_message": "The Narogoshuun priest probably has a spare.", + "examine": "The key you stole from the Narogoshuun priest.", + "durability": null, + "name": "Narogoshuun key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11796" + }, + { + "destroy_message": "The Huzamogaarb priest probably has a spare.", + "examine": "The key you stole from the Huzamogaarb priest.", + "durability": null, + "name": "Huzamogaarb key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11797" + }, + { + "destroy_message": "The Saragorgak priest probably has a spare.", + "examine": "The key you stole from the Saragorgak priest.", + "durability": null, + "name": "Saragorgak key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11798" + }, + { + "destroy_message": "The Horogothgar priest probably has a spare.", + "examine": "The key you stole from the Horogothgar priest.", + "durability": null, + "name": "Horogothgar key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11799" + }, + { + "destroy_message": "The Yurkolgokh priest probably has a spare.", + "examine": "The key you stole from the Yurkolgokh priest.", + "durability": null, + "name": "Yurkolgokh key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11800" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Snothead's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11802" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Snailfeet's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11803" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Mosschin's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11804" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Redeyes's bone", + "archery_ticket_price": "0", + "id": "11805" + }, + { + "examine": "An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Strongbones's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11806" + }, + { + "examine": "You can combine these with a toadflax to make a goblin transformation potion.", + "durability": null, + "name": "Pharmakos berries", + "archery_ticket_price": "0", + "id": "11807" + }, + { + "examine": "An ugly albino fish.", + "durability": null, + "name": "Whitefish", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11808" + }, + { + "examine": "4 doses of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (4)", + "archery_ticket_price": "0", + "id": "11809", + "equipment_slot": "5" + }, + { + "examine": "3 doses of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (3)", + "archery_ticket_price": "0", + "id": "11810" + }, + { + "examine": "2 doses of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (2)", + "archery_ticket_price": "0", + "id": "11811" + }, + { + "examine": "1 dose of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (1)", + "archery_ticket_price": "0", + "id": "11812" + }, + { + "shop_price": "177", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing bronze full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "614", + "durability": null, + "name": "Bronze armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11814" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "614", + "durability": null, + "name": "Bronze armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11815" + }, + { + "shop_price": "177", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing bronze full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "938", + "durability": null, + "name": "Bronze armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11816", + "bonuses": "0,0,0,-59,-19,27,26,18,-11,25,5,0,0,1,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "938", + "durability": null, + "name": "Bronze armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11817" + }, + { + "shop_price": "1022", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing iron full helm, platebody, legs, and kiteshield.", + "grand_exchange_price": "1830", + "durability": null, + "name": "Iron armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11818", + "bonuses": "0,0,0,-65,-21,46,44,33,-12,45,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1830", + "durability": null, + "name": "Iron armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11819" + }, + { + "shop_price": "1022", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing iron full helm, platebody, skirt, and kiteshield.", + "grand_exchange_price": "1711", + "durability": null, + "name": "Iron armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11820", + "bonuses": "0,0,0,-65,-21,46,44,33,-12,45,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1711", + "durability": null, + "name": "Iron armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11821" + }, + { + "requirements": "{5,1}", + "shop_price": "2365", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing steel full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "3646", + "durability": null, + "name": "Steel armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11822", + "bonuses": "0,0,0,-65,-21,71,72,60,-12,70,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3646", + "durability": null, + "name": "Steel armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11823" + }, + { + "requirements": "{5,1}", + "shop_price": "2365", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing steel full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "3796", + "durability": null, + "name": "Steel armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11824", + "bonuses": "0,0,0,-65,-21,71,72,60,-12,70,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3796", + "durability": null, + "name": "Steel armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11825" + }, + { + "requirements": "{10,1}", + "shop_price": "11286", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing Black full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "18900", + "durability": null, + "name": "Black armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11826" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18900", + "durability": null, + "name": "Black armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11827" + }, + { + "requirements": "{10,1}", + "shop_price": "11286", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a black full helm, platebody, skirt and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "grand_exchange_price": "14600", + "name": "Black armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11828", + "bonuses": "0,0,0,-65,-21,91,92,78,-12,90,27,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14600", + "durability": null, + "name": "Black armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11829" + }, + { + "requirements": "{20,1}", + "shop_price": "15232", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a mithril full helm, platebody, legs and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,6", + "grand_exchange_price": "8764", + "name": "Mithril armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11830", + "bonuses": "0,0,0,-65,-21,101,102,89,-12,97,52,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8764", + "durability": null, + "name": "Mithril armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11831" + }, + { + "requirements": "{20,1}", + "shop_price": "15232", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a mithril full helm, platebody, skirt and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,5", + "grand_exchange_price": "7829", + "name": "Mithril armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11832", + "bonuses": "0,0,0,-65,-21,101,102,89,-12,99,50,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7829", + "durability": null, + "name": "Mithril armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11833" + }, + { + "requirements": "{1,30}", + "shop_price": "28276", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing an adamant full helm, platebody, legs and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "7,0,15", + "grand_exchange_price": "20600", + "name": "Adamant armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11834", + "bonuses": "0,0,0,-65,-21,144,146,129,-12,142,76,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20600", + "durability": null, + "name": "Adamant armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11835" + }, + { + "requirements": "{1,30}", + "shop_price": "28276", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing an adamant full helm, platebody, skirt and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "7,0,15", + "grand_exchange_price": "21500", + "name": "Adamant armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11836", + "bonuses": "0,0,0,-65,-21,144,146,129,-12,142,76,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21500", + "durability": null, + "name": "Adamant armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11837" + }, + { + "requirements": "{1,40}", + "shop_price": "136112", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a rune full helm, platebody, legs and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "9,0,20", + "grand_exchange_price": "136300", + "name": "Rune armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11838", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "136300", + "durability": null, + "name": "Rune armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11839" + }, + { + "requirements": "{1,40}", + "shop_price": "136112", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a rune full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "140300", + "durability": null, + "name": "Rune armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11840" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "140300", + "durability": null, + "name": "Rune armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11841" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "4800000", + "examine": "Grand Exchange set containing a dragon helm, chainbody, legs.", + "durability": null, + "name": "Dragon chain armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "2.2", + "id": "11842" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "4800000", + "durability": null, + "name": "Dragon chain armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11843" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "4600000", + "examine": "Grand Exchange set containing a dragon helm, chainbody, skirt.", + "durability": null, + "name": "Dragon chain armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "2.2", + "id": "11844" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "4600000", + "durability": null, + "name": "Dragon chain armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11845" + }, + { + "requirements": "{0,70}-{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Ahrim's robetop, robeskirt, hood, and staff.", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - ahrim's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11846" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - ahrim's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11847" + }, + { + "requirements": "{0,70}-{1,70}-{2,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Dharok's helm, body, legs and greataxe.", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - dharok's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11848" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - dharok's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11849" + }, + { + "requirements": "{0,70}-{1,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Guthan's helm, platebody, chainskirt and warspear.", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Barrows - guthan's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11850" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Barrows - guthan's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11851" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "10", + "examine": "A Grand Exchange set containing Karil's coif, crossbow, leather body, and leather skirt.", + "grand_exchange_price": "2200000", + "durability": null, + "name": "Barrows - karil's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11852" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "2200000", + "durability": null, + "name": "Barrows - karil's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11853" + }, + { + "requirements": "{0,70}-{1,70}-{2,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Torag's helm, body, legs and hammers.", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Barrows - torag's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11854" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Barrows - torag's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11855" + }, + { + "requirements": "{0,70}-{1,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Verac's helm, brassard, plateskirt and flail.", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Barrows - verac's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11856" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Barrows - verac's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11857" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a helm, body, legs and shield", + "grand_exchange_price": "388700000", + "durability": null, + "name": "Third age melee set", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11858" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "388700000", + "durability": null, + "name": "Third age melee set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11859" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing coif, body, chaps and vambraces.", + "grand_exchange_price": "87500000", + "durability": null, + "name": "Third age ranger set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11860" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "87500000", + "durability": null, + "name": "Third age ranger set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11861" + }, + { + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a body, legs, amulet and hat", + "grand_exchange_price": "163100000", + "durability": null, + "name": "Third age mage set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11862" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "163100000", + "durability": null, + "name": "Third age mage set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11863" + }, + { + "requirements": "{1,40}-{4,40}", + "shop_price": "9000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "durability": null, + "weight": "2.2", + "absorb": "0,10,5", + "grand_exchange_price": "8932", + "name": "Green dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11864", + "bonuses": "0,0,0,-40,31,65,50,73,30,62,58,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8932", + "durability": null, + "name": "Green dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11865" + }, + { + "requirements": "{1,40}-{4,50}", + "shop_price": "12000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "grand_exchange_price": "9062", + "durability": null, + "name": "Blue dragonhide set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11866" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9062", + "durability": null, + "name": "Blue dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11867" + }, + { + "requirements": "{1,40}-{4,60}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "grand_exchange_price": "12800", + "durability": null, + "name": "Red dragonhide set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11868" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12800", + "durability": null, + "name": "Red dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11869" + }, + { + "requirements": "{1,40}-{4,70}", + "shop_price": "40000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "grand_exchange_price": "17600", + "durability": null, + "name": "Black dragonhide set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11870" + }, + { + "durability": null, + "name": "Black dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11871" + }, + { + "requirements": "{20,1}-{6,40}", + "shop_price": "169143", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing mystic hat, top, bottoms, gloves, and boots.", + "grand_exchange_price": "163300", + "durability": null, + "name": "Mystic robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11872" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "163300", + "durability": null, + "name": "Mystic robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11873" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing hat, top, bottoms, gloves, and boots", + "grand_exchange_price": "11000000", + "durability": null, + "name": "Infinity robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11874" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "11000000", + "durability": null, + "name": "Infinity robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11875" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a helm, body, boots, gauntlets and legs.", + "grand_exchange_price": "107400", + "durability": null, + "name": "Splitbark armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11876", + "absorb": "13,6,0", + "bonuses": "0,0,0,24,-21,74,59,86,32,0,74,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "107400", + "durability": null, + "name": "Splitbark armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11877" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "341200", + "durability": null, + "name": "Black trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11878", + "absorb": "2,0,4", + "bonuses": "0,0,0,-65,-21,91,92,77,-12,90,23,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "341200", + "durability": null, + "name": "Black trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11879" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "331600", + "durability": null, + "name": "Black trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11880", + "absorb": "2,0,4", + "bonuses": "0,0,0,-65,-21,91,92,77,-12,90,23,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "331600", + "durability": null, + "name": "Black trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11881" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Black gold-trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11882" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Black gold-trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11883" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "1300000", + "durability": null, + "name": "Black gold-trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11884" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1300000", + "durability": null, + "name": "Black gold-trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11885" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "318100", + "durability": null, + "name": "Adamant trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11886" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "318100", + "durability": null, + "name": "Adamant trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11887" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "293700", + "durability": null, + "name": "Adamant trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11888" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "293700", + "durability": null, + "name": "Adamant trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11889" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "949400", + "durability": null, + "name": "Adamant gold-trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11890" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "949400", + "durability": null, + "name": "Adamant gold-trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11891" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "880500", + "durability": null, + "name": "Adamant gold-trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11892" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "880500", + "durability": null, + "name": "Adamant gold-trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11893" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "702500", + "durability": null, + "name": "Rune trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11894", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "702500", + "durability": null, + "name": "Rune trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11895" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "675400", + "durability": null, + "name": "Rune trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11896", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "675400", + "durability": null, + "name": "Rune trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11897" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Rune gold-trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11898", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Rune gold-trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11899" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Rune gold-trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11900", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Rune gold-trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11901" + }, + { + "requirements": "{20,1}-{6,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing hat, robetops and bottoms", + "grand_exchange_price": "207200", + "durability": null, + "name": "Enchanted set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11902" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "207200", + "durability": null, + "name": "Enchanted set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11903" + }, + { + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing hat, robetops and bottoms", + "grand_exchange_price": "877900", + "durability": null, + "name": "Trimmed blue wizard set", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11904" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "877900", + "durability": null, + "name": "Trimmed blue wizard set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11905" + }, + { + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing hat, robe top and bottom", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Gold-trimmed blue wizard set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11906" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Gold-trimmed blue wizard set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11907" + }, + { + "requirements": "{20,4}", + "ge_buy_limit": "10000", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "85100", + "durability": null, + "name": "Trimmed leather armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11908" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "85100", + "durability": null, + "name": "Trimmed leather armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11909" + }, + { + "requirements": "{20,4}", + "ge_buy_limit": "10000", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "217200", + "durability": null, + "name": "Gold-trimmed leather armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11910" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "217200", + "durability": null, + "name": "Gold-trimmed leather armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11911" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "371600", + "durability": null, + "name": "Green d'hide trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11912", + "absorb": "0,10,5", + "bonuses": "0,0,0,-40,31,65,50,73,30,62,58,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "371600", + "durability": null, + "name": "Green d'hide trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11913" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Green d'hide gold-trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11914", + "absorb": "0,10,5", + "bonuses": "0,0,0,-40,31,65,50,73,30,62,58,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Green d'hide gold-trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11915" + }, + { + "requirements": "{1,40}-{4,50}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "38300", + "durability": null, + "name": "Blue d'hide trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11916" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "38300", + "durability": null, + "name": "Blue d'hide trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11917" + }, + { + "requirements": "{1,40}-{4,50}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps.", + "grand_exchange_price": "50000", + "durability": null, + "name": "Blue d'hide gold-trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11918" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "50000", + "durability": null, + "name": "Blue d'hide gold-trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11919" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body, chaps, bracers and coif.", + "grand_exchange_price": "179500", + "durability": null, + "name": "Green d'hide blessed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11920" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "179500", + "durability": null, + "name": "Green d'hide blessed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11921" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body, chaps, bracers and coif.", + "grand_exchange_price": "477500", + "durability": null, + "name": "Blue d'hide blessed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11922" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "477500", + "durability": null, + "name": "Blue d'hide blessed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11923" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body, chaps, bracers and coif.", + "grand_exchange_price": "585300", + "durability": null, + "name": "Red d'hide blessed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11924" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "585300", + "durability": null, + "name": "Red d'hide blessed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11925" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and shield.", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Guthix armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11926", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Guthix armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11927" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield", + "grand_exchange_price": "4000000", + "durability": null, + "name": "Saradomin armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11928", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "4000000", + "durability": null, + "name": "Saradomin armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11929" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield", + "grand_exchange_price": "2300000", + "durability": null, + "name": "Zamorak armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11930", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2300000", + "durability": null, + "name": "Zamorak armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11931" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Guthix armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11932", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Guthix armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11933" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield", + "grand_exchange_price": "3600000", + "durability": null, + "name": "Saradomin armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11934", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3600000", + "durability": null, + "name": "Saradomin armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11935" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield", + "grand_exchange_price": "2000000", + "durability": null, + "name": "Zamorak armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11936", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2000000", + "durability": null, + "name": "Zamorak armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11937" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "5900000", + "durability": null, + "name": "Gilded armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11938" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5900000", + "durability": null, + "name": "Gilded armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11939" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "4300000", + "durability": null, + "name": "Gilded armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11940" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "4300000", + "durability": null, + "name": "Gilded armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11941" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing helm, platebody, legs, boots and gloves", + "grand_exchange_price": "145000", + "durability": null, + "name": "Rockshell armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11942" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "145000", + "durability": null, + "name": "Rockshell armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11943" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing helm, body, chaps, boots and gloves", + "grand_exchange_price": "94500", + "durability": null, + "name": "Spined armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11944", + "absorb": "0,13,6", + "bonuses": "-6,-6,-6,-31,29,68,56,78,34,62,47,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "94500", + "durability": null, + "name": "Spined armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11945" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing helm, top, bottoms, boots and gloves", + "grand_exchange_price": "145200", + "durability": null, + "name": "Skeletal armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11946" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "145200", + "durability": null, + "name": "Skeletal armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11947" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A tiny model of Lumbridge Castle inside a glass dome.", + "durability": null, + "name": "Snow globe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11949", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A tiny model of Lumbridge Castle inside a glass dome.", + "durability": null, + "name": "Snow globe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11950", + "equipment_slot": "3" + }, + { + "attack_anims": "5063", + "examine": "Made from snow. / It's a ball of snow! Uncanny. / How did this not melt in the box?", + "durability": null, + "name": "Snowball", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "11951", + "weapon_interface": "18", + "equipment_slot": "3" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a snow warrior.", + "durability": null, + "name": "Ice sword", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11952" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a snow mage.", + "attack_audios": "2555,0,0,0", + "durability": null, + "name": "Winter staff", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11953" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a snow ranger.", + "durability": null, + "name": "Holly bow", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11954" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a barbarian snowman.", + "durability": null, + "name": "Barbarian snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11955" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "It's actually made of cardboard, but it looks like a dragon full helm.", + "durability": null, + "name": "Dragon snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11956" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Use this to make your snowman look like a dwarf.", + "durability": null, + "name": "Dwarf snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11957" + }, + { + "bankable": "false", + "destroy_message": "Talk to a snow imp to get another.", + "examine": "Arr! Shiver me snowman!", + "durability": null, + "name": "Pirate snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11958" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "The most traditional snowman hat.", + "durability": null, + "name": "Snowman top hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11959" + }, + { + "requirements": "{20,1}-{6,40}", + "shop_price": "215431", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing hat, top, bottoms, gloves, and boots", + "grand_exchange_price": "487300", + "durability": null, + "name": "Light mystic robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11960" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "487300", + "durability": null, + "name": "Light mystic robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11961" + }, + { + "requirements": "{20,1}-{6,40}", + "shop_price": "228541", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing hat, top, bottoms, gloves, and boots", + "grand_exchange_price": "294000", + "durability": null, + "name": "Dark mystic robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11962" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "294000", + "durability": null, + "name": "Dark mystic robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11963" + }, + { + "examine": "I can hatch this in an incubator.", + "durability": null, + "name": "Raven egg", + "archery_ticket_price": "0", + "id": "11964" + }, + { + "examine": "I can hatch this in an incubator.", + "durability": null, + "name": "Vulture egg", + "archery_ticket_price": "0", + "id": "11965" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "archery_ticket_price": "0", + "id": "11966" + }, + { + "shop_price": "750000", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing cannon base, stand, barrels and furnace.", + "grand_exchange_price": "718900", + "durability": null, + "name": "Dwarf cannon set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11967" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "718900", + "durability": null, + "name": "Dwarf cannon set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11968" + }, + { + "destroy_message": "If I destroy this it will disintegrate into its component parts and drop to the floor.", + "examine": "A water tiara infused with water runes. Protects from the hot desert sun.", + "durability": null, + "name": "Enchanted water tiara", + "weight": "1", + "archery_ticket_price": "0", + "id": "11969", + "bonuses": "0,0,0,2,0,5,5,5,3,3,0,0,2,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "I can obtain and fill another one from the archaeologist near Sophanem.", + "examine": "A crate full of distressed gear.", + "durability": null, + "name": "Smelly crate", + "tradeable": "false", + "destroy": "true", + "weight": "30", + "archery_ticket_price": "0", + "id": "11970" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An empty crate, ready for bronze gear.", + "durability": null, + "name": "Empty crate", + "archery_ticket_price": "0", + "id": "11972" + }, + { + "destroy_message": "I can obtain another one from the archaeologist near Sophanem.", + "examine": "A book of research on Scabarite history.", + "durability": null, + "name": "Scabaras research", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11973" + }, + { + "destroy_message": "I can obtain another one from Simon Templeton.", + "examine": "Issued by Simon Templeton.", + "durability": null, + "name": "Artefact receipt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11974" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11975" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11976" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11977" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11978" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11979" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11980" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11981" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11982" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11983" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11984" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11985" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11986" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11987" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11988" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11989" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11990" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11991" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11992" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11993" + }, + { + "destroy_message": "I can obtain another one from the archaeologists near Sophanem.", + "examine": "Newly made, but to an ancient pattern. (Dealing with Scabaras)", + "durability": null, + "name": "Scabarite key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11994" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze dagger.", + "examine": "It has been oxidised.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Oxidised dagger", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11995" + }, + { + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised medium helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11996" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze sword.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised sword", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11997" + }, + { + "turn90cw_anim": "821", + "examine": "It has been oxidised.", + "walk_anim": "819", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "1", + "destroy_message": "I can make another one by using camel dung on a bronze scimitar.", + "stand_anim": "808", + "attack_audios": "2500,0,2517,0", + "name": "Oxidised scimitar", + "tradeable": "false", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "11998", + "stand_turn_anim": "823" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze longsword.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised longsword", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11999" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze full helmet.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised full helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12000" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze square shield.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised square shield", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12001" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze chainbody.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised chainbody", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12002" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze kiteshield.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised kiteshield", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12003" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze two", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised two-handed sword", + "tradeable": "false", + "destroy": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "12004" + }, + { + "destroy_message": "I can make another one by using camel dung on some bronze platelegs.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised platelegs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12005" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze plateskirt.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised plateskirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12006" + }, + { + "requirements": "{23,52}", + "ge_buy_limit": "5000", + "grand_exchange_price": "330", + "examine": "I can summon a spirit terrorbird familiar with this.", + "durability": null, + "name": "Spirit terrorbird pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12007" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "330", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit terrorbird pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12008" + }, + { + "requirements": "{16,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "239", + "examine": "I can summon a granite crab familiar with this.", + "durability": null, + "name": "Granite crab pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12009" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "239", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Granite crab pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12010" + }, + { + "requirements": "{23,75}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2918", + "examine": "I can summon a praying mantis familiar with this.", + "durability": null, + "name": "Praying mantis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12011" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2918", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Praying mantis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12012" + }, + { + "requirements": "{23,78}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2167", + "examine": "I can summon a giant ent familiar with this.", + "durability": null, + "name": "Giant ent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12013" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2167", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Giant ent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12014" + }, + { + "requirements": "{23,63}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2018", + "examine": "I can summon a spirit cobra familiar with this.", + "durability": null, + "name": "Spirit cobra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12015" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2018", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit cobra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12016" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "121", + "examine": "I can summon a spirit dagannoth familiar with this.", + "durability": null, + "name": "Spirit dagannoth pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12017" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "121", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit dagannoth pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12018" + }, + { + "requirements": "{13,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "248", + "examine": "I can summon a thorny snail familiar with this.", + "durability": null, + "name": "Thorny snail pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12019" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "248", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Thorny snail pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12020" + }, + { + "requirements": "{23,33}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1268", + "examine": "I can summon a beaver familiar with this.", + "durability": null, + "name": "Beaver pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12021" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1268", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Beaver pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12022" + }, + { + "requirements": "{23,58}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "I can summon a karamthulhu overlord familiar with this.", + "durability": null, + "name": "Karam. overlord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12023" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karam. overlord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12024" + }, + { + "requirements": "{23,80}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2235", + "examine": "I can summon a hydra familiar with this.", + "durability": null, + "name": "Hydra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12025" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2235", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hydra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12026" + }, + { + "requirements": "{23,55}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2641", + "examine": "I can summon a spirit jelly familiar with this.", + "durability": null, + "name": "Spirit jelly pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12027" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2641", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit jelly pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12028" + }, + { + "requirements": "{23,68}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3506", + "examine": "I can summon a bunyip familiar with this.", + "durability": null, + "name": "Bunyip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12029" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3506", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bunyip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12030" + }, + { + "requirements": "{23,67}", + "ge_buy_limit": "5000", + "grand_exchange_price": "13200", + "examine": "I can summon a war tortoise familiar with this.", + "durability": null, + "name": "War tortoise pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12031" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "War tortoise pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12032" + }, + { + "requirements": "{23,69}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2269", + "examine": "I can summon a fruit bat familiar with this.", + "durability": null, + "name": "Fruit bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12033" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2269", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Fruit bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12034" + }, + { + "requirements": "{23,54}", + "ge_buy_limit": "5000", + "grand_exchange_price": "4004", + "examine": "I can summon an abyssal parasite familiar with this.", + "durability": null, + "name": "Abyssal parasite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12035" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4004", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Abyssal parasite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12036" + }, + { + "requirements": "{23,62}", + "ge_buy_limit": "5000", + "grand_exchange_price": "5660", + "examine": "I can summon an abyssal lurker familiar with this.", + "durability": null, + "name": "Abyssal lurker pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12037" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5660", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Abyssal lurker pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12038" + }, + { + "requirements": "{23,88}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2439", + "examine": "I can summon a unicorn stallion familiar with this.", + "durability": null, + "name": "Unicorn stallion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12039" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2439", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Unicorn stallion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12040" + }, + { + "requirements": "{23,47}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1559", + "examine": "I can summon a magpie familiar with this.", + "durability": null, + "name": "Magpie pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12041" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1559", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Magpie pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12042" + }, + { + "requirements": "{4,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "258", + "examine": "I can summon a dreadfowl familiar with this.", + "durability": null, + "name": "Dreadfowl pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12043" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "258", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dreadfowl pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12044" + }, + { + "requirements": "{23,64}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "I can summon a stranger plant familiar with this.", + "durability": null, + "name": "Stranger plant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12045" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Stranger plant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12046" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "301", + "examine": "I can summon a spirit wolf familiar with this.", + "durability": null, + "name": "Spirit wolf pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12047" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "301", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit wolf pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12048" + }, + { + "requirements": "{18,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "808", + "examine": "I can summon a desert wyrm familiar with this.", + "durability": null, + "name": "Desert wyrm pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12049" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "808", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Desert wyrm pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12050" + }, + { + "requirements": "{23,42}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1812", + "examine": "I can summon an evil turnip familiar with this.", + "durability": null, + "name": "Evil turnip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12051" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1812", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Evil turnip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12052" + }, + { + "requirements": "{23,31}", + "ge_buy_limit": "10000", + "grand_exchange_price": "1416", + "examine": "I can summon a vampire bat familiar with this.", + "durability": null, + "name": "Vampire bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12053" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1416", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Vampire bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12054" + }, + { + "requirements": "{19,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "992", + "examine": "I can summon a spirit scorpion familiar with this.", + "durability": null, + "name": "Spirit scorpion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12055" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "992", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit scorpion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12056" + }, + { + "requirements": "{23,71}", + "ge_buy_limit": "5000", + "grand_exchange_price": "332", + "examine": "I can summon an arctic bear familiar with this.", + "durability": null, + "name": "Arctic bear pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12057" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "332", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Arctic bear pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12058" + }, + { + "requirements": "{10,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2225", + "examine": "I can summon a spirit spider familiar with this.", + "durability": null, + "name": "Spirit spider pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12059" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2225", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit spider pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12060" + }, + { + "requirements": "{23,49}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2045", + "examine": "I can summon a bloated leech familiar with this.", + "durability": null, + "name": "Bloated leech pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12061" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2045", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bloated leech pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12062" + }, + { + "requirements": "{23,25}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3746", + "examine": "I can summon a spirit kalphite familiar with this.", + "durability": null, + "name": "Spirit kalphite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12063" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3746", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit kalphite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12064" + }, + { + "requirements": "{23,32}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1470", + "examine": "I can summon a honey badger familiar with this.", + "durability": null, + "name": "Honey badger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12065" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1470", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Honey badger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12066" + }, + { + "requirements": "{23,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1578", + "examine": "I can summon an albino rat familiar with this.", + "durability": null, + "name": "Albino rat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12067" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1578", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Albino rat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12068" + }, + { + "requirements": "{23,74}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2924", + "examine": "I can summon a granite lobster familiar with this.", + "durability": null, + "name": "Granite lobster pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12069" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2924", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Granite lobster pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12070" + }, + { + "requirements": "{23,41}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1375", + "examine": "I can summon a macaw familiar with this.", + "durability": null, + "name": "Macaw pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12071" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1375", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Macaw pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12072" + }, + { + "requirements": "{23,36}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1804", + "examine": "I can summon a bronze minotaur familiar with this.", + "durability": null, + "name": "Bronze minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12073" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1804", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bronze minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12074" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "I can summon an iron minotaur familiar with this.", + "durability": null, + "name": "Iron minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12075" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Iron minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12076" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2529", + "examine": "I can summon a steel minotaur familiar with this", + "durability": null, + "name": "Steel minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12077" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2529", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Steel minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12078" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2666", + "examine": "I can summon a mithril minotaur with this.", + "durability": null, + "name": "Mithril minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12079" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2666", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Mithril minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12080" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "I can summon an adamant minotaur familiar with this.", + "durability": null, + "name": "Adamant minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12081" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Adamant minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12082" + }, + { + "requirements": "{23,86}", + "ge_buy_limit": "5000", + "grand_exchange_price": "373", + "examine": "I can summon a rune minotaur with this.", + "durability": null, + "name": "Rune minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12083" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "373", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Rune minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12084" + }, + { + "requirements": "{23,61}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2468", + "examine": "I can summon a smoke devil familiar with this.", + "durability": null, + "name": "Smoke devil pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12085" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2468", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Smoke devil pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12086" + }, + { + "requirements": "{23,40}", + "ge_buy_limit": "5000", + "grand_exchange_price": "319", + "examine": "I can summon a bull ant familiar with this.", + "durability": null, + "name": "Bull ant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12087" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "319", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bull ant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12088" + }, + { + "requirements": "{23,92}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3625", + "examine": "I can summon a wolpertinger familiar with this.", + "durability": null, + "name": "Wolpertinger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12089" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3625", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Wolpertinger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12090" + }, + { + "requirements": "{23,28}", + "ge_buy_limit": "5000", + "grand_exchange_price": "906", + "examine": "I can summon a compost mound familiar with this.", + "durability": null, + "name": "Compost mound pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12091" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "906", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Compost mound pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12092" + }, + { + "requirements": "{23,96}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3696", + "examine": "I can summon a pack yak familiar with this.", + "durability": null, + "name": "Pack yak pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12093" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3696", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Pack yak pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12094" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1514", + "examine": "I can summon a spirit cockatrice familiar with this.", + "durability": null, + "name": "Sp. cockatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12095" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1514", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. cockatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12096" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1523", + "examine": "I can summon a spirit guthatrice familiar with this.", + "durability": null, + "name": "Sp. guthatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12097" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1523", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. guthatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12098" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1492", + "examine": "I can summon a spirit saratrice familiar with this.", + "durability": null, + "name": "Sp. saratrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12099" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1492", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. saratrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12100" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1515", + "examine": "I can summon a spirit zamatrice familiar with this.", + "durability": null, + "name": "Sp. zamatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12101" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1515", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. zamatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12102" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1531", + "examine": "I can summon a spirit pengatrice familiar with this.", + "durability": null, + "name": "Sp. pengatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12103" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1531", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. pengatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12104" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3085", + "examine": "I can summon a spirit coraxatrice familiar with this.", + "durability": null, + "name": "Sp. coraxatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12105" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3085", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. coraxatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12106" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3881", + "examine": "I can summon a spirit vulatrice familiar with this.", + "durability": null, + "name": "Sp. vulatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12107" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3881", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. vulatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12108" + }, + { + "ge_buy_limit": "10000", + "examine": "A stripy brown egg.", + "grand_exchange_price": "1053", + "durability": null, + "name": "Cockatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12109" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1053", + "durability": null, + "name": "Cockatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12110" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy green egg.", + "grand_exchange_price": "1171", + "durability": null, + "name": "Guthatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12111" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1171", + "durability": null, + "name": "Guthatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12112" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy blue egg.", + "grand_exchange_price": "1080", + "durability": null, + "name": "Saratrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12113" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1080", + "durability": null, + "name": "Saratrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12114" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy red egg.", + "grand_exchange_price": "1154", + "durability": null, + "name": "Zamatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12115" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1154", + "durability": null, + "name": "Zamatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12116" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy grey egg.", + "grand_exchange_price": "2676", + "durability": null, + "name": "Pengatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12117" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2676", + "durability": null, + "name": "Pengatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12118" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy black egg.", + "grand_exchange_price": "2865", + "durability": null, + "name": "Coraxatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12119" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2865", + "durability": null, + "name": "Coraxatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12120" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy pink egg.", + "grand_exchange_price": "18900", + "durability": null, + "name": "Vulatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12121" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "18900", + "durability": null, + "name": "Vulatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12122" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "293", + "examine": "I can summon a barker toad familiar with this.", + "durability": null, + "name": "Barker toad pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12123" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "293", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Barker toad pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12124" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "A swarm of little flies.", + "grand_exchange_price": "97", + "durability": null, + "name": "Flies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12125" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "97", + "durability": null, + "name": "Flies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12126" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Some beetle bits.", + "grand_exchange_price": "176", + "durability": null, + "name": "Beetle bits", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12127" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "176", + "durability": null, + "name": "Beetle bits", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12128" + }, + { + "ge_buy_limit": "100", + "examine": "Good for feeding birds.", + "grand_exchange_price": "1", + "durability": null, + "name": "Ground fishing bait", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12129" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Mmmm...nuts.", + "grand_exchange_price": "673", + "durability": null, + "name": "Nuts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12130" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "673", + "durability": null, + "name": "Nuts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12131" + }, + { + "examine": "Makes me want to do a truffle shuffle.", + "durability": null, + "name": "Truffle", + "tradeable": "false", + "destroy": "true", + "weight": "28.928", + "archery_ticket_price": "0", + "id": "12132" + }, + { + "durability": null, + "name": "Truffle", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12133", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "5000", + "examine": "An evil turnip.", + "grand_exchange_price": "6750", + "durability": null, + "name": "Evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12134" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "6750", + "durability": null, + "name": "Evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12135" + }, + { + "ge_buy_limit": "5000", + "examine": "An evil turnip.", + "grand_exchange_price": "133", + "durability": null, + "name": "2/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12136" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "133", + "durability": null, + "name": "2/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12137" + }, + { + "ge_buy_limit": "5000", + "examine": "An evil turnip.", + "grand_exchange_price": "20", + "durability": null, + "name": "1/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12138" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "20", + "durability": null, + "name": "1/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12139" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Summoning potion.", + "grand_exchange_price": "4489", + "durability": null, + "name": "Summoning potion(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12140" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4489", + "durability": null, + "name": "Summoning potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12141" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Summoning potion.", + "grand_exchange_price": "3320", + "durability": null, + "name": "Summoning potion(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12142" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3320", + "durability": null, + "name": "Summoning potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12143" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Summoning potion.", + "grand_exchange_price": "1671", + "durability": null, + "name": "Summoning potion(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12144" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1671", + "durability": null, + "name": "Summoning potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12145" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Summoning potion.", + "grand_exchange_price": "1576", + "durability": null, + "name": "Summoning potion(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12146" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1576", + "durability": null, + "name": "Summoning potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12147" + }, + { + "ge_buy_limit": "100", + "examine": "Grows into the root-vegetable of all evil.", + "grand_exchange_price": "68", + "durability": null, + "name": "Evil turnip seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12148" + }, + { + "ge_buy_limit": "5000", + "examine": "Utterly terrifying!", + "grand_exchange_price": "7101", + "durability": null, + "name": "Carved evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12153" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7101", + "durability": null, + "name": "Carved evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12154" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3", + "examine": "Can be used to create Summoning pouches.", + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12155" + }, + { + "ge_buy_limit": "5000", + "examine": "This is what bees craft.", + "grand_exchange_price": "393", + "durability": null, + "name": "Honeycomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12156" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "393", + "durability": null, + "name": "Honeycomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12157" + }, + { + "shop_price": "1", + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Gold charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12158" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Green charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12159" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Crimson charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12160" + }, + { + "examine": "A charm used to summon familiars", + "durability": null, + "name": "Abyssal charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12161" + }, + { + "examine": "A charm used to summon talon beasts.", + "durability": null, + "name": "Talon beast charm", + "archery_ticket_price": "0", + "id": "12162" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Blue charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12163" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void ravager.", + "durability": null, + "name": "Ravager charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12164" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void shifter.", + "durability": null, + "name": "Shifter charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12165" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void Spinner.", + "durability": null, + "name": "Spinner charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12166" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void torcher.", + "durability": null, + "name": "Torcher charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12167" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Obsidian charm", + "archery_ticket_price": "0", + "id": "12168" + }, + { + "requirements": "{23,99}", + "shop_price": "99000", + "examine": "The cape worn by master summoners.", + "durability": null, + "name": "Summoning cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12169", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{23,99}", + "durability": null, + "name": "Summoning cape(t)", + "archery_ticket_price": "0", + "id": "12170", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{23,99}", + "shop_price": "99000", + "examine": "Summoning skillcape hood.", + "durability": null, + "name": "Summoning hood", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12171", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "3597", + "durability": null, + "name": "Clean spirit weed", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12172" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3597", + "durability": null, + "name": "Clean spirit weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12173" + }, + { + "requirements": "{15,35}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "3634", + "durability": null, + "name": "Grimy spirit weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12174" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3634", + "durability": null, + "name": "Grimy spirit weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12175" + }, + { + "requirements": "{19,36}", + "ge_buy_limit": "100", + "examine": "A seed for spirit weed.", + "grand_exchange_price": "698", + "durability": null, + "name": "Spirit weed seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12176" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this spirit weed potion.", + "grand_exchange_price": "2963", + "durability": null, + "name": "Spirit weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12181" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2963", + "durability": null, + "name": "Spirit weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12182" + }, + { + "shop_price": "25", + "ge_buy_limit": "10000", + "examine": "Shards of an obelisk.", + "grand_exchange_price": "24", + "durability": null, + "name": "Spirit shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12183" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12184" + }, + { + "examine": "A fantastic saradomin owl.", + "durability": null, + "name": "Saradomin owl", + "archery_ticket_price": "0", + "id": "12185" + }, + { + "examine": "A stately zamorak hawk.", + "durability": null, + "name": "Zamorak hawk", + "archery_ticket_price": "0", + "id": "12186" + }, + { + "examine": "An impressive Guthix raptor.", + "durability": null, + "name": "Guthix raptor", + "archery_ticket_price": "0", + "id": "12187" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12190" + }, + { + "examine": "It's lively and energetic.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12191" + }, + { + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12192" + }, + { + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12193" + }, + { + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12194" + }, + { + "examine": "This little puppy is very quiet. (Puppy)Come by! Come by! (Adult)", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12195" + }, + { + "examine": "One proud little puppy. (Puppy)Looks like it's chewing a wasp. (Adult)", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12196" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Dragon hatchling", + "archery_ticket_price": "0", + "id": "12197" + }, + { + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12198" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12199" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12200" + }, + { + "examine": "It's a colour-coordinated lizard!", + "durability": null, + "name": "Chameleon", + "archery_ticket_price": "0", + "id": "12203" + }, + { + "remove_head": "true", + "requirements": "{23,10}", + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "Doors could be a problem, wearing these...", + "durability": null, + "weight": "1", + "equipment_slot": "0", + "grand_exchange_price": "40", + "name": "Antlers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12204", + "bonuses": "0,0,0,0,0,0,0,0,0,0,8,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40", + "durability": null, + "name": "Antlers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12205" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "Doors could be a problem, wearing these...", + "grand_exchange_price": "50", + "durability": null, + "name": "Antlers (charged)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12206", + "bonuses": "0,0,0,0,0,0,0,0,0,0,8,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{23,30}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "It's a little smelly in there.", + "durability": null, + "weight": "3", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "254", + "name": "Lizard skull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12207", + "bonuses": "0,0,0,0,1,2,3,4,2,3,12,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "254", + "durability": null, + "name": "Lizard skull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12208" + }, + { + "remove_head": "true", + "shop_price": "200", + "examine": "It's a little smelly in there.", + "durability": null, + "weight": "3", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "211", + "name": "Lizard skull (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12209", + "bonuses": "0,0,0,0,1,2,3,4,2,3,12,0,0,0,0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "234", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12210", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "234", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12211" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12212", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "662", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12213", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "662", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12214" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12215", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "90", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12216", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "90", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12217" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12218", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12219", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12220" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12221", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "211", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12222", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "211", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12223" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12224", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12294" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12296" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12298" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12300" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12302" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12304" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12306" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12308" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12310" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12312" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12314" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12316" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12318" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12320" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12322" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12324" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12326" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12328" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12330" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12332" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12334" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12336" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12338" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12340" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12342" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12344" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12346" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12348" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12350" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12352" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12354" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12356" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12358" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12360" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12362" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12364" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12366" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12368" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12370" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12372" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12374" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12376" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12378" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12380" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12382" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12384" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12386" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12388" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12390" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12392" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12394" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12396" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12398" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12400" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12402" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12404" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12406" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12408" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12410" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12412" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12414" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12416" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12418" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12420" + }, + { + "requirements": "{23,41}", + "ge_buy_limit": "5000", + "grand_exchange_price": "96", + "examine": "A scroll for a macaw familiar.", + "durability": null, + "name": "Herbcall scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12422" + }, + { + "requirements": "{23,69}", + "ge_buy_limit": "5000", + "grand_exchange_price": "258", + "examine": "A scroll for a fruit bat familiar.", + "durability": null, + "name": "Fruitfall scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12423" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "146", + "examine": "A scroll for an ibis familiar.", + "durability": null, + "name": "Fish rain scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12424" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7", + "examine": "A scroll for a spirit wolf familiar.", + "durability": null, + "name": "Howl scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12425" + }, + { + "requirements": "{23,47}", + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "examine": "A scroll for a magpie familiar.", + "durability": null, + "name": "Thieving fingers scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12426" + }, + { + "requirements": "{23,62}", + "ge_buy_limit": "5000", + "grand_exchange_price": "533", + "examine": "A scroll for an abyssal lurker familiar.", + "durability": null, + "name": "Abyssal stealth scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12427" + }, + { + "requirements": "{23,10}", + "ge_buy_limit": "5000", + "grand_exchange_price": "237", + "examine": "A scroll for a spirit spider familiar.", + "durability": null, + "name": "Egg spawn scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12428" + }, + { + "requirements": "{23,33}", + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "examine": "A scroll for a beaver familiar.", + "durability": null, + "name": "Multichop scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12429" + }, + { + "requirements": "{23,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "121", + "examine": "A scroll for an albino rat familiar.", + "durability": null, + "name": "Cheese feast scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12430" + }, + { + "requirements": "{23,40}", + "ge_buy_limit": "5000", + "grand_exchange_price": "39", + "examine": "A scroll for a bull ant familiar.", + "durability": null, + "name": "Unburden scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12431" + }, + { + "requirements": "{23,19}", + "ge_buy_limit": "5000", + "grand_exchange_price": "72", + "examine": "A scroll for a spirit scorpion familiar.", + "durability": null, + "name": "Venom shot scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12432" + }, + { + "requirements": "{23,32}", + "ge_buy_limit": "5000", + "grand_exchange_price": "99", + "examine": "A scroll for a honey badger familiar.", + "durability": null, + "name": "Insane ferocity scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12433" + }, + { + "requirements": "{23,88}", + "ge_buy_limit": "5000", + "grand_exchange_price": "299", + "examine": "A scroll for a unicorn stallion familiar.", + "durability": null, + "name": "Healing aura scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12434" + }, + { + "requirements": "{23,96}", + "ge_buy_limit": "5000", + "grand_exchange_price": "428", + "examine": "A scroll for a pack yak familiar.", + "durability": null, + "name": "Winter storage scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12435" + }, + { + "requirements": "{23,63}", + "ge_buy_limit": "5000", + "grand_exchange_price": "223", + "examine": "A scroll for a spirit cobra familiar.", + "durability": null, + "name": "Oph. incubation scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12436" + }, + { + "requirements": "{23,92}", + "ge_buy_limit": "5000", + "grand_exchange_price": "419", + "examine": "A scroll for a wolpertinger familiar.", + "durability": null, + "name": "Magic focus scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12437" + }, + { + "requirements": "{23,68}", + "ge_buy_limit": "5000", + "grand_exchange_price": "220", + "examine": "A scroll for a bunyip familiar.", + "durability": null, + "name": "Swallow whole scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12438" + }, + { + "requirements": "{23,67}", + "ge_buy_limit": "5000", + "grand_exchange_price": "269", + "examine": "A scroll for a war tortoise familiar.", + "durability": null, + "name": "Testudo scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12439" + }, + { + "requirements": "{23,28}", + "ge_buy_limit": "5000", + "grand_exchange_price": "47", + "examine": "A scroll for a compost mound familiar.", + "durability": null, + "name": "Generate compost scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12440" + }, + { + "requirements": "{23,52}", + "ge_buy_limit": "5000", + "grand_exchange_price": "35", + "examine": "A scroll for a spirit terrorbird familiar.", + "durability": null, + "name": "Tireless run scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12441" + }, + { + "requirements": "{23,80}", + "ge_buy_limit": "5000", + "grand_exchange_price": "174", + "examine": "A scroll for a hydra familiar.", + "durability": null, + "name": "Regrowth scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12442" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1118", + "examine": "A scroll for a Pest Control familiar.", + "durability": null, + "name": "Call to arms scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12443" + }, + { + "requirements": "{23,49}", + "ge_buy_limit": "5000", + "grand_exchange_price": "148", + "examine": "A scroll for a bloated leech familiar.", + "durability": null, + "name": "Blood drain scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12444" + }, + { + "requirements": "{23,4}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7", + "examine": "A scroll for a dreadfowl familiar.", + "durability": null, + "name": "Dreadfowl strike scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12445" + }, + { + "requirements": "{23,25}", + "ge_buy_limit": "5000", + "grand_exchange_price": "122", + "examine": "A scroll for a spirit kalphite familiar.", + "durability": null, + "name": "Sandstorm scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12446" + }, + { + "requirements": "{23,31}", + "ge_buy_limit": "1000", + "grand_exchange_price": "98", + "examine": "A scroll for a vampire bat familiar.", + "durability": null, + "name": "Vampire touch scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12447" + }, + { + "requirements": "{23,42}", + "ge_buy_limit": "5000", + "grand_exchange_price": "123", + "examine": "A scroll for an evil turnip familiar.", + "durability": null, + "name": "Evil flames scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12448" + }, + { + "requirements": "{23,74}", + "ge_buy_limit": "5000", + "grand_exchange_price": "219", + "examine": "A scroll for a granite lobster familiar.", + "durability": null, + "name": "Crushing claw scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12449" + }, + { + "requirements": "{23,75}", + "ge_buy_limit": "5000", + "grand_exchange_price": "221", + "examine": "A scroll for a praying mantis familiar.", + "durability": null, + "name": "Mantis strike scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12450" + }, + { + "requirements": "{23,71}", + "ge_buy_limit": "5000", + "grand_exchange_price": "12", + "examine": "A scroll for an arctic bear familiar.", + "durability": null, + "name": "Arctic blast scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12451" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "10", + "examine": "A scroll for a barker toad familiar.", + "durability": null, + "name": "Toad bark scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12452" + }, + { + "requirements": "{23,55}", + "ge_buy_limit": "5000", + "grand_exchange_price": "202", + "examine": "A scroll for a spirit jelly familiar.", + "durability": null, + "name": "Dissolve scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12453" + }, + { + "requirements": "{23,54}", + "ge_buy_limit": "5000", + "grand_exchange_price": "163", + "examine": "A scroll for an abyssal parasite familiar.", + "durability": null, + "name": "Abyssal drain scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12454" + }, + { + "requirements": "{23,58}", + "ge_buy_limit": "5000", + "grand_exchange_price": "198", + "examine": "A scroll for a karamthulhu overlord familiar.", + "durability": null, + "name": "Doomsphere scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12455" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "9", + "examine": "A scroll for a spirit dagannoth familiar.", + "durability": null, + "name": "Spike shot scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12456" + }, + { + "requirements": "{23,78}", + "ge_buy_limit": "5000", + "grand_exchange_price": "146", + "examine": "A scroll for a giant ent familiar.", + "durability": null, + "name": "Acorn missile scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12457" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "examine": "A scroll for a cockatrice variant familiar.", + "durability": null, + "name": "Petrifying gaze scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12458" + }, + { + "requirements": "{23,13}", + "ge_buy_limit": "5000", + "grand_exchange_price": "10", + "examine": "A scroll for a thorny snail familiar.", + "durability": null, + "name": "Slime spray scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12459" + }, + { + "requirements": "{23,18}", + "ge_buy_limit": "5000", + "grand_exchange_price": "47", + "examine": "A scroll for a desert wyrm familiar.", + "durability": null, + "name": "Electric lash scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12460" + }, + { + "requirements": "{23,36}", + "ge_buy_limit": "5000", + "grand_exchange_price": "135", + "examine": "A scroll for a bronze minotaur familiar.", + "durability": null, + "name": "Bronze bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12461" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "180", + "examine": "A scroll for an iron minotaur familiar.", + "durability": null, + "name": "Iron bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12462" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "182", + "examine": "A scroll for a steel minotaur familiar.", + "durability": null, + "name": "Steel bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12463" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "198", + "examine": "A scroll for a mithril minotaur familiar.", + "durability": null, + "name": "Mith bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12464" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "203", + "examine": "A scroll for an adamant minotaur familiar.", + "durability": null, + "name": "Addy bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12465" + }, + { + "requirements": "{23,86}", + "ge_buy_limit": "5000", + "grand_exchange_price": "67", + "examine": "A scroll for a rune minotaur familiar.", + "durability": null, + "name": "Rune bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12466" + }, + { + "requirements": "{23,64}", + "ge_buy_limit": "5000", + "grand_exchange_price": "171", + "examine": "A scroll for a stranger plant familiar.", + "durability": null, + "name": "Poisonous blast scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12467" + }, + { + "requirements": "{23,61}", + "ge_buy_limit": "5000", + "grand_exchange_price": "170", + "examine": "A scroll for a smoke devil familiar.", + "durability": null, + "name": "Dust cloud scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12468" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12469" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12471" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12473" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12475" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Red dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12477" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Blue dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12478" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Green dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12479" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Black dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12480" + }, + { + "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.", + "durability": null, + "name": "Baby penguin", + "archery_ticket_price": "0", + "id": "12481" + }, + { + "examine": "I can hatch this in an Incubator.", + "durability": null, + "name": "Penguin egg", + "archery_ticket_price": "0", + "id": "12483" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12484" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12485" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12486" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Raccoon", + "archery_ticket_price": "0", + "id": "12487" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12488" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12489" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12490" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12491" + }, + { + "examine": "It's a colour-coordinated lizard!", + "durability": null, + "name": "Baby chameleon", + "archery_ticket_price": "0", + "id": "12492" + }, + { + "examine": "It's a colour-coordinated lizard!", + "durability": null, + "name": "Chameleon", + "archery_ticket_price": "0", + "id": "12493" + }, + { + "examine": "A lizard's egg.", + "durability": null, + "name": "Chameleon egg", + "weight": "1", + "archery_ticket_price": "0", + "id": "12494" + }, + { + "examine": "A lizard's egg.", + "durability": null, + "name": "Chameleon egg", + "weight": "1", + "archery_ticket_price": "0", + "id": "12495" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12496" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12498" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12499" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12500" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12501" + }, + { + "examine": "Apparently, this token is worth one baby giant crab to someone called Nung.", + "durability": null, + "name": "Crunchy claw token", + "archery_ticket_price": "0", + "id": "12502" + }, + { + "examine": "A fluffy chick.", + "durability": null, + "name": "Saradomin chick", + "archery_ticket_price": "0", + "id": "12503" + }, + { + "examine": "Lovely blue plumage.", + "durability": null, + "name": "Saradomin bird", + "archery_ticket_price": "0", + "id": "12504" + }, + { + "examine": "A fantastic saradomin owl.", + "durability": null, + "name": "Saradomin owl", + "archery_ticket_price": "0", + "id": "12505" + }, + { + "examine": "A fluffy chick.", + "durability": null, + "name": "Zamorak chick", + "archery_ticket_price": "0", + "id": "12506" + }, + { + "examine": "Lovely red plumage.", + "durability": null, + "name": "Zamorak bird", + "archery_ticket_price": "0", + "id": "12507" + }, + { + "examine": "A stately zamorak hawk.", + "durability": null, + "name": "Zamorak hawk", + "archery_ticket_price": "0", + "id": "12508" + }, + { + "examine": "A fluffy chick.", + "durability": null, + "name": "Guthix chick", + "archery_ticket_price": "0", + "id": "12509" + }, + { + "examine": "Lovely green plumage.", + "durability": null, + "name": "Guthix bird", + "archery_ticket_price": "0", + "id": "12510" + }, + { + "examine": "An impressive Guthix raptor.", + "durability": null, + "name": "Guthix raptor", + "archery_ticket_price": "0", + "id": "12511" + }, + { + "requirements": "{4,23}", + "examine": "It's lively and energetic.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12512" + }, + { + "requirements": "{4,23}", + "examine": "It's lively and energetic.", + "durability": null, + "name": "Terrier", + "archery_ticket_price": "0", + "id": "12513" + }, + { + "requirements": "{4,23}", + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12514" + }, + { + "requirements": "{4,23}", + "examine": "An aerodynamic doggy.", + "durability": null, + "name": "Greyhound", + "archery_ticket_price": "0", + "id": "12515" + }, + { + "requirements": "{4,23}", + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12516" + }, + { + "requirements": "{4,23}", + "examine": "My most faithful friend.", + "durability": null, + "name": "Labrador", + "archery_ticket_price": "0", + "id": "12517" + }, + { + "requirements": "{4,23}", + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12518" + }, + { + "requirements": "{4,23}", + "examine": "A purebred doggy.", + "durability": null, + "name": "Dalmatian", + "archery_ticket_price": "0", + "id": "12519" + }, + { + "requirements": "{4,23}", + "examine": "This little puppy is very quiet.", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12520" + }, + { + "requirements": "{4,23}", + "examine": "Come by! Come by!", + "durability": null, + "name": "Sheepdog", + "archery_ticket_price": "0", + "id": "12521" + }, + { + "requirements": "{4,23}", + "examine": "One proud little puppy.", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12522" + }, + { + "requirements": "{4,23}", + "examine": "Looks like it's chewing a wasp.", + "durability": null, + "name": "Bulldog", + "archery_ticket_price": "0", + "id": "12523" + }, + { + "requirements": "{23,99}", + "shop_price": "99000", + "examine": "The cape worn by master summoners.", + "durability": null, + "name": "Summoning cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12524", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "1", + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Gold charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12527" + }, + { + "examine": "A key to Pikkupstix's trapdoor.", + "durability": null, + "name": "Trapdoor key", + "archery_ticket_price": "0", + "id": "12528" + }, + { + "shop_price": "25", + "examine": "Shards of an obelisk.", + "grand_exchange_price": "24", + "durability": null, + "name": "Spirit shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12530" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1914", + "examine": "I can summon an ibis familiar with this.", + "durability": null, + "name": "Ibis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12531" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1914", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ibis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12532" + }, + { + "requirements": "{23,16}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7", + "examine": "A scroll for a granite crab familiar.", + "durability": null, + "name": "Stony shell scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12533" + }, + { + "ge_buy_limit": "1000", + "examine": "Meat from a creature that can be hunted in Isafdar.", + "grand_exchange_price": "7968", + "durability": null, + "name": "Raw pawya meat", + "tradeable": "true", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "12535" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7968", + "durability": null, + "name": "Raw pawya meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12536" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12538" + }, + { + "ge_buy_limit": "5000", + "examine": "Spikes from a grenwall.", + "grand_exchange_price": "1704", + "durability": null, + "name": "Grenwall spikes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12539" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12545" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12547" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12548" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12549" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12550" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Baby platypus", + "archery_ticket_price": "0", + "id": "12551" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Baby platypus", + "archery_ticket_price": "0", + "id": "12552" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Baby platypus", + "archery_ticket_price": "0", + "id": "12553" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Patrick", + "archery_ticket_price": "0", + "id": "12554" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Penelope", + "archery_ticket_price": "0", + "id": "12555" + }, + { + "examine": "I bet he can't wait until it's cooked.", + "durability": null, + "name": "Peter", + "archery_ticket_price": "0", + "id": "12556" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Peanut", + "archery_ticket_price": "0", + "id": "12557" + }, + { + "examine": "Marginally better than egg on your face.", + "durability": null, + "name": "Mud", + "archery_ticket_price": "0", + "id": "12558", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "The height of style?", + "grand_exchange_price": "1004", + "durability": null, + "name": "Ogre wig", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12559", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1004", + "durability": null, + "name": "Ogre wig", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12560" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "It's a little big on me.", + "grand_exchange_price": "197", + "durability": null, + "name": "Ogre kilt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12561", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "197", + "durability": null, + "name": "Ogre kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12562" + }, + { + "remove_sleeves": "true", + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "It's a little big on me.", + "grand_exchange_price": "536", + "durability": null, + "name": "Ogre top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12563", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "536", + "durability": null, + "name": "Ogre top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12564" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "Good for stomping.", + "grand_exchange_price": "420", + "durability": null, + "name": "Ogre boots", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "12565", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "420", + "durability": null, + "name": "Ogre boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12566" + }, + { + "ge_buy_limit": "100", + "examine": "It's a slightly sickly-looking fur.", + "grand_exchange_price": "1468", + "durability": null, + "name": "Diseased kebbit fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12567" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "A furry hat with an unnerving tail.", + "grand_exchange_price": "3656", + "durability": null, + "name": "Davy kebbit hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12568", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3656", + "durability": null, + "name": "Davy kebbit hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12569" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "8684", + "examine": "A big piece of tree.", + "walk_anim": "8684", + "durability": null, + "weight": "10", + "turn90ccw_anim": "8684", + "attack_speed": "7", + "weapon_interface": "10", + "turn180_anim": "8684", + "render_anim": "1157", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,401,401", + "grand_exchange_price": "77", + "stand_anim": "8683", + "name": "Ogre club", + "tradeable": "true", + "run_anim": "8685", + "archery_ticket_price": "0", + "id": "12570", + "stand_turn_anim": "823", + "bonuses": "-6,-2,15,0,0,0,0,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "77", + "durability": null, + "name": "Ogre club", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12571" + }, + { + "ge_buy_limit": "100", + "examine": "A delicate, sweet-smelling flower.", + "grand_exchange_price": "20", + "durability": null, + "name": "Lavender", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12572" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Lavender", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12573" + }, + { + "ge_buy_limit": "100", + "examine": "A stiff, pungent grass.", + "grand_exchange_price": "31", + "durability": null, + "name": "Fever grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12574" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "31", + "durability": null, + "name": "Fever grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12575" + }, + { + "ge_buy_limit": "100", + "examine": "A cheerful, aromatic flower.", + "grand_exchange_price": "12", + "durability": null, + "name": "Tansymum", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12576" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Tansymum", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12577" + }, + { + "turn90cw_anim": "8681", + "examine": "A stiff, pungent grass.", + "walk_anim": "8681", + "durability": null, + "turn90ccw_anim": "8681", + "turn180_anim": "8681", + "render_anim": "294", + "equipment_slot": "3", + "grand_exchange_price": "41", + "stand_anim": "8682", + "name": "Smouldering fever grass", + "tradeable": "true", + "run_anim": "8690", + "archery_ticket_price": "0", + "id": "12578", + "stand_turn_anim": "8682" + }, + { + "turn90cw_anim": "8681", + "examine": "A delicate, sweet-smelling flower.", + "walk_anim": "8681", + "durability": null, + "turn90ccw_anim": "8681", + "turn180_anim": "8681", + "render_anim": "294", + "equipment_slot": "3", + "grand_exchange_price": "29", + "stand_anim": "8682", + "name": "Smouldering lavender", + "tradeable": "true", + "run_anim": "8690", + "archery_ticket_price": "0", + "id": "12579", + "stand_turn_anim": "8682" + }, + { + "turn90cw_anim": "8681", + "examine": "A cheerful, aromatic flower.", + "walk_anim": "8681", + "durability": null, + "turn90ccw_anim": "8681", + "turn180_anim": "8681", + "render_anim": "294", + "equipment_slot": "3", + "grand_exchange_price": "18", + "stand_anim": "8682", + "name": "Smouldering tansymum", + "tradeable": "true", + "run_anim": "8690", + "archery_ticket_price": "0", + "id": "12580", + "stand_turn_anim": "8682" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a eucalyptus tree.", + "grand_exchange_price": "507", + "durability": null, + "name": "Eucalyptus logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12581", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "507", + "durability": null, + "name": "Eucalyptus logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12582" + }, + { + "ge_buy_limit": "1000", + "examine": "Logs cut from a eucalyptus tree.", + "grand_exchange_price": "3609", + "durability": null, + "name": "Eucalyptus pyre logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12583" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3609", + "durability": null, + "name": "Eucalyptus pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12584" + }, + { + "ge_buy_limit": "100", + "examine": "A modest and mild plant.", + "grand_exchange_price": "20", + "durability": null, + "name": "Primweed", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12588" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Primweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12589" + }, + { + "ge_buy_limit": "100", + "examine": "A pretty but putrid flower.", + "grand_exchange_price": "16", + "durability": null, + "name": "Stinkbloom", + "tradeable": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "12590" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Stinkbloom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12591" + }, + { + "durability": null, + "name": "Diseased kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12592" + }, + { + "destroy_message": "If you need to, you can get another from the Tyras Camp catapult engineer.", + "examine": "The plans for repairing the Tyras Camp catapult.", + "durability": null, + "name": "Catapult schematics", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12593" + }, + { + "destroy_message": "If you need to, you can get another from General Hining in the Tyras Camp.", + "examine": "General Hining wants me to deliver this to the Catapult Engineer.", + "durability": null, + "name": "Engineer's letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12594" + }, + { + "destroy_message": "You can always get another from the drunken sailor in Port Sarim.", + "examine": "Taken from a drunken sailor in Port Sarim.", + "durability": null, + "name": "Sailor's hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "12595", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another set from Thaki the delivery dwarf in Port Sarim.", + "examine": "Dwarf-made parts for repairing the Tyras Camp catapult.", + "durability": null, + "name": "Metal catapult parts", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12596" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12597" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12598" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12599" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12600" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12601" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12602" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12603" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12604" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12605" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12606" + }, + { + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12607", + "equipment_slot": "5" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "An amulet of Farming with 1 charge.", + "grand_exchange_price": "271", + "durability": null, + "name": "Amulet of farming(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12608", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "271", + "durability": null, + "name": "Amulet of farming(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12609" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 2 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12610", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12611" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 3 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12612", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12613" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 4 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12614", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12615" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 5 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12616", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12617" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 6 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12618", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12619" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 7 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12620", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12621" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "An amulet of Farming with 8 charges.", + "grand_exchange_price": "210", + "durability": null, + "name": "Amulet of farming(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12622", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "210", + "durability": null, + "name": "Amulet of farming(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12623" + }, + { + "shop_price": "10", + "examine": "An ogleroot. How odd.", + "durability": null, + "name": "Ogleroot", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0", + "id": "12624" + }, + { + "destroy_message": "You will need to obtain more flags from Mrs. Winkin or Farmer Blinkin if you have lost all of the flags you have.", + "shop_price": "500", + "examine": "A flag to put in the ground.", + "durability": null, + "name": "Flag", + "tradeable": "false", + "destroy": "true", + "weight": "0", + "archery_ticket_price": "0", + "id": "12625" + }, + { + "destroy_message": "You will need to get another exam paper from Professor Henry", + "examine": "Player Safety test", + "durability": null, + "name": "Test paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12626" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12627" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12628" + }, + { + "destroy_message": "You can get another pair of gloves from the chest in the Stronghold of Player Safety.", + "examine": "Gloves from the Stronghold of Player Safety.", + "durability": null, + "name": "Safety gloves", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12629", + "bonuses": "0,0,0,0,0,1,2,2,1,2,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Rubium is very unstable", + "shop_price": "10", + "examine": "Be careful with this near water.", + "durability": null, + "name": "Rubium", + "weight": "1", + "archery_ticket_price": "0", + "id": "12630" + }, + { + "destroy_message": "The train is tiny", + "examine": "(While on the ground) Kennith's lost toy. (While in your inventory) A wooden toy train.", + "durability": null, + "name": "Toy train", + "archery_ticket_price": "0", + "id": "12631" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12632" + }, + { + "examine": "The jar is shaking violently!", + "durability": null, + "name": "Super fishing explosive", + "archery_ticket_price": "0", + "id": "12633" + }, + { + "destroy_message": "You can get another chocatrice cape from Diango in Draynor Village.", + "examine": "A thick, orange cape.", + "durability": null, + "name": "Chocatrice cape", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12634", + "equipment_slot": "1" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12635" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12636" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12637" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12638" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12639" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12640" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12641" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12642" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12643" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12644" + }, + { + "destroy_message": "You can get another chocatrice cape from Diango in Draynor Village.", + "examine": "A thick, orange cape.", + "durability": null, + "name": "Chocatrice cape", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12645", + "equipment_slot": "1" + }, + { + "examine": "A chocolate egg wrapped in coloured foil.", + "durability": null, + "name": "Chocolate egg", + "archery_ticket_price": "0", + "id": "12646" + }, + { + "examine": "A chocolate egg wrapped in coloured foil.", + "durability": null, + "name": "Chocolate egg", + "archery_ticket_price": "0", + "id": "12647" + }, + { + "examine": "A chocolate egg wrapped in coloured foil.", + "durability": null, + "name": "Chocolate egg", + "archery_ticket_price": "0", + "id": "12648" + }, + { + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12649" + }, + { + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "12650" + }, + { + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "12651" + }, + { + "examine": "It's a bucket of coal from the Easter Bunny's warren.", + "durability": null, + "name": "Bucket of coal", + "weight": "3", + "archery_ticket_price": "0", + "id": "12652" + }, + { + "examine": "It's a bucket of coal from the Easter Bunny's warren.", + "durability": null, + "name": "Bucket of coal", + "weight": "3", + "archery_ticket_price": "0", + "id": "12653" + }, + { + "destroy_message": "Are you sure you want to destroy this object?
You can get another in the Easter Bunny's warren.", + "examine": "A stripy brown egg.", + "grand_exchange_price": "1255", + "durability": null, + "name": "Cockatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12654" + }, + { + "destroy_message": "Are you sure you want to destroy this object?
You can make another at the Easter Bunny's warren.", + "examine": "A cockatrice egg that has been dipped in molten chocolate.", + "durability": null, + "name": "Chocatrice egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12655", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some chocolate chunks.", + "durability": null, + "name": "Chocolate chunks", + "archery_ticket_price": "0", + "id": "12657" + }, + { + "remove_head": "true", + "shop_price": "3520", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "1913", + "name": "Adamant full helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12658", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "3520", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "1913", + "name": "Adamant full helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12659", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Lightweight head protection.", + "grand_exchange_price": "1040", + "durability": null, + "name": "Snakeskin bandana (e)", + "tradeable": "false", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "12660", + "absorb": "0,2,1", + "bonuses": "0,0,0,-5,4,2,4,4,2,2,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Lightweight head protection.", + "grand_exchange_price": "1040", + "durability": null, + "name": "Snakeskin bandana (charged)", + "tradeable": "false", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "12661", + "absorb": "0,2,1", + "bonuses": "0,0,0,-5,4,2,4,4,2,2,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A wooden helmet.", + "durability": null, + "weight": "0.9", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5623", + "name": "Splitbark helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12662", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A wooden helmet.", + "durability": null, + "weight": "0.9", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5623", + "name": "Splitbark helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12663", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21200", + "name": "Rune full helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12664", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21200", + "name": "Rune full helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12665", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Makes the wearer pretty intimidating.", + "durability": null, + "weight": "1.3", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "61200", + "name": "Dragon med helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12666", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Makes the wearer pretty intimidating.", + "durability": null, + "weight": "1.3", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "61200", + "name": "Dragon med helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12667", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm (e)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12668", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm (charged)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12669", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A helmet of great craftmanship.", + "durability": null, + "weight": "0.5", + "absorb": "0,5,2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "3932989", + "name": "Armadyl helmet (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12670", + "bonuses": "-5,-5,-5,-5,10,6,8,10,10,8,12,0,1,0,0" + }, + { + "remove_head": "true", + "examine": "A helmet of great craftmanship.", + "durability": null, + "weight": "0.5", + "absorb": "0,5,2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "3932989", + "name": "Armadyl helmet (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12671", + "bonuses": "-5,-5,-5,-5,10,6,8,10,10,8,12,0,1,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by archers.", + "durability": null, + "weight": "2", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "41000", + "name": "Archer helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12672", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by archers.", + "durability": null, + "weight": "2", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "41000", + "name": "Archer helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12673", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by berserkers.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48800", + "name": "Berserker helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12674", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by berserkers.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48800", + "name": "Berserker helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12675", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by warriors.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48200", + "name": "Warrior helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12676", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by warriors.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48200", + "name": "Warrior helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12677", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by farseers.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "46400", + "name": "Farseer helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12678", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by farseers.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "46400", + "name": "Farseer helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12679", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "50000", + "examine": "A gift from Neitiznot's Burgher.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "equipment_slot": "0", + "grand_exchange_price": "44831", + "name": "Helm of neitiznot (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12680", + "bonuses": "0,0,0,0,0,31,29,34,3,30,8,3,3,0,0" + }, + { + "remove_head": "true", + "shop_price": "50000", + "examine": "A gift from Neitiznot's Burgher.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "equipment_slot": "0", + "grand_exchange_price": "44831", + "name": "Helm of neitiznot (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12681", + "bonuses": "0,0,0,0,0,31,29,34,3,30,8,3,3,0,0" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12682" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12684" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12686" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12688" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12690" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12692" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12694" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12696" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12698" + }, + { + "requirements": "{4,23}", + "examine": "A hyperactive little pup.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12700" + }, + { + "requirements": "{4,23}", + "examine": "A hyperactive little pup.", + "durability": null, + "name": "Terrier", + "archery_ticket_price": "0", + "id": "12701" + }, + { + "requirements": "{4,23}", + "examine": "Such a brave doggy.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12702" + }, + { + "requirements": "{4,23}", + "examine": "Such a brave doggy.", + "durability": null, + "name": "Terrier", + "archery_ticket_price": "0", + "id": "12703" + }, + { + "requirements": "{4,23}", + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12704" + }, + { + "requirements": "{4,23}", + "examine": "An aerodynamic doggy.", + "durability": null, + "name": "Greyhound", + "archery_ticket_price": "0", + "id": "12705" + }, + { + "requirements": "{4,23}", + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12706" + }, + { + "requirements": "{4,23}", + "examine": "An aerodynamic doggy.", + "durability": null, + "name": "Greyhound", + "archery_ticket_price": "0", + "id": "12707" + }, + { + "requirements": "{4,23}", + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12708" + }, + { + "requirements": "{4,23}", + "examine": "My most faithful friend.", + "durability": null, + "name": "Labrador", + "archery_ticket_price": "0", + "id": "12709" + }, + { + "requirements": "{4,23}", + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12710" + }, + { + "requirements": "{4,23}", + "examine": "My most faithful friend.", + "durability": null, + "name": "Labrador", + "archery_ticket_price": "0", + "id": "12711" + }, + { + "requirements": "{4,23}", + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12712" + }, + { + "requirements": "{4,23}", + "examine": "A purebred doggy.", + "durability": null, + "name": "Dalmatian", + "archery_ticket_price": "0", + "id": "12713" + }, + { + "requirements": "{4,23}", + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12714" + }, + { + "requirements": "{4,23}", + "examine": "A purebred doggy.", + "durability": null, + "name": "Dalmatian", + "archery_ticket_price": "0", + "id": "12715" + }, + { + "requirements": "{4,23}", + "examine": "This little puppy is very quiet.", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12716" + }, + { + "requirements": "{4,23}", + "examine": "Come by! Come by!", + "durability": null, + "name": "Sheepdog", + "archery_ticket_price": "0", + "id": "12717" + }, + { + "requirements": "{4,23}", + "examine": "This little puppy is very quiet.", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12718" + }, + { + "requirements": "{4,23}", + "examine": "Come by! Come by!", + "durability": null, + "name": "Sheepdog", + "archery_ticket_price": "0", + "id": "12719" + }, + { + "requirements": "{4,23}", + "examine": "One proud little puppy.", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12720" + }, + { + "requirements": "{4,23}", + "examine": "Looks like it's chewing a wasp.", + "durability": null, + "name": "Bulldog", + "archery_ticket_price": "0", + "id": "12721" + }, + { + "requirements": "{4,23}", + "examine": "One proud little puppy.", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12722" + }, + { + "requirements": "{4,23}", + "examine": "Looks like it's chewing a wasp.", + "durability": null, + "name": "Bulldog", + "archery_ticket_price": "0", + "id": "12723" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12724" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12725" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12726" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12727" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12728" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12729" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12730" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12731" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12732" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12733" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12734" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Raccoon", + "archery_ticket_price": "0", + "id": "12735" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12736" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Raccoon", + "archery_ticket_price": "0", + "id": "12737" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12738" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12739" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12740" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12741" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12742" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12743" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12744" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12745" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12746" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12747" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12748" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12749" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12750" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12751" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12752" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12753" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12754" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12755" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12756" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12757" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12758" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12759" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12760" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12761" + }, + { + "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.", + "durability": null, + "name": "Baby penguin", + "archery_ticket_price": "0", + "id": "12763" + }, + { + "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.", + "durability": null, + "name": "Baby penguin", + "archery_ticket_price": "0", + "id": "12765" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12766" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12767" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12768" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12769" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12770" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12771" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12772" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12773" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12774" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12775" + }, + { + "requirements": "{23,85}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2613", + "examine": "I can summon a swamp titan familiar with this.", + "durability": null, + "name": "Swamp titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12776" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2613", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Swamp titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12777" + }, + { + "requirements": "{17,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "130", + "examine": "I can summon a spirit mosquito familiar with this.", + "durability": null, + "name": "Spirit mosquito pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12778" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "130", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit mosquito pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12779" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "16100", + "examine": "I can summon a void spinner familiar with this.", + "durability": null, + "name": "Void spinner pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12780" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "16100", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void spinner pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12781" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2458", + "examine": "I can summon a forge regent familiar with this.", + "durability": null, + "name": "Forge regent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12782" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2458", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Forge regent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12783" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "4097", + "examine": "I can summon a spirit larupia familiar with this.", + "durability": null, + "name": "Spirit larupia pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12784" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4097", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit larupia pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12785" + }, + { + "requirements": "{23,89}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3856", + "examine": "I can summon a geyser titan familiar with this.", + "durability": null, + "name": "Geyser titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12786" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3856", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Geyser titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12787" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3840", + "examine": "I can summon a lava titan familiar with this.", + "durability": null, + "name": "Lava titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12788" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3840", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Lava titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12789" + }, + { + "requirements": "{23,99}", + "ge_buy_limit": "5000", + "grand_exchange_price": "5800", + "examine": "I can summon a steel titan familiar with this.", + "durability": null, + "name": "Steel titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12790" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Steel titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12791" + }, + { + "requirements": "{23,73}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3436", + "examine": "I can summon an obsidian golem familiar with this.", + "durability": null, + "name": "Obsidian golem pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12792" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3436", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Obsidian golem pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12793" + }, + { + "requirements": "{23,77}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3017", + "examine": "I can summon a talon beast familiar with this.", + "durability": null, + "name": "Talon beast pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12794" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3017", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Talon beast pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12795" + }, + { + "requirements": "{23,93}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2991", + "examine": "I can summon an abyssal titan familiar with this.", + "durability": null, + "name": "Abyssal titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12796" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2991", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Abyssal titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12797" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "18300", + "examine": "I can summon a void torcher familiar with this.", + "durability": null, + "name": "Void torcher pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12798" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "18300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void torcher pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12799" + }, + { + "requirements": "{23,29}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1513", + "examine": "I can summon a giant chinchompa familiar with this.", + "durability": null, + "name": "Giant chinchompa pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12800" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1513", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Giant chinchompa pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12801" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3567", + "examine": "I can summon a fire titan familiar with this.", + "durability": null, + "name": "Fire titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12802" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3567", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Fire titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12803" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3548", + "examine": "I can summon a moss titan familiar with this.", + "durability": null, + "name": "Moss titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12804" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3548", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Moss titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12805" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7184", + "examine": "I can summon an ice titan familiar with this.", + "durability": null, + "name": "Ice titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12806" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7184", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ice titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12807" + }, + { + "requirements": "{22,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1116", + "examine": "I can summon a spirit Tz-Kih familiar with this.", + "durability": null, + "name": "Spirit tz-kih pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12808" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1116", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit tz-kih pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12809" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7919", + "examine": "I can summon a spirit graahk familiar with this.", + "durability": null, + "name": "Spirit graahk pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12810" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7919", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit graahk pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12811" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "13300", + "examine": "I can summon a spirit kyatt familiar with this.", + "durability": null, + "name": "Spirit kyatt pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12812" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit kyatt pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12813" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "18600", + "examine": "I can summon a void shifter familiar with this.", + "durability": null, + "name": "Void shifter pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12814" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "18600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void shifter pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12815" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1951", + "examine": "I can summon a pyrelord familiar with this.", + "durability": null, + "name": "Pyrelord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12816" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1951", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Pyrelord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12817" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "10700", + "examine": "I can summon a void ravager familiar with this.", + "durability": null, + "name": "Void ravager pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12818" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "10700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void ravager pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12819" + }, + { + "requirements": "{23,70}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1382", + "examine": "I can summon a ravenous locust familiar with this.", + "durability": null, + "name": "Ravenous locust pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12820" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1382", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ravenous locust pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12821" + }, + { + "requirements": "{23,95}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3470", + "examine": "I can summon an iron titan familiar with this.", + "durability": null, + "name": "Iron titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12822" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3470", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Iron titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12823" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "380", + "examine": "A scroll for an elemental titan familiar.", + "durability": null, + "name": "Titan's con. scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12824" + }, + { + "requirements": "{23,99}", + "ge_buy_limit": "5000", + "grand_exchange_price": "646", + "examine": "A scroll for a steel titan familiar.", + "durability": null, + "name": "Steel of legends scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12825" + }, + { + "requirements": "{23,73}", + "ge_buy_limit": "5000", + "grand_exchange_price": "271", + "examine": "A scroll for an obsidian golem familiar.", + "durability": null, + "name": "Volcanic str. scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12826" + }, + { + "requirements": "{23,93}", + "ge_buy_limit": "5000", + "grand_exchange_price": "310", + "examine": "A scroll for an abyssal titan familiar.", + "durability": null, + "name": "Essence shipment scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12827" + }, + { + "requirements": "{23,95}", + "ge_buy_limit": "5000", + "grand_exchange_price": "389", + "examine": "A scroll for an iron titan familiar.", + "durability": null, + "name": "Iron within scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12828" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "146", + "examine": "A scroll for a pyrelord familiar.", + "durability": null, + "name": "Immense heat scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12829" + }, + { + "requirements": "{23,70}", + "ge_buy_limit": "5000", + "grand_exchange_price": "149", + "examine": "A scroll for a ravenous locust familiar.", + "durability": null, + "name": "Famine scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12830" + }, + { + "requirements": "{23,77}", + "ge_buy_limit": "5000", + "grand_exchange_price": "245", + "examine": "A scroll for a talon beast familiar.", + "durability": null, + "name": "Deadly claw scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12831" + }, + { + "requirements": "{23,85}", + "ge_buy_limit": "5000", + "grand_exchange_price": "192", + "examine": "A scroll for a swamp titan familiar.", + "durability": null, + "name": "Swamp plague scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12832" + }, + { + "requirements": "{23,89}", + "ge_buy_limit": "5000", + "grand_exchange_price": "294", + "examine": "A scroll for a geyser titan familiar.", + "durability": null, + "name": "Boil scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12833" + }, + { + "requirements": "{23,29}", + "ge_buy_limit": "5000", + "grand_exchange_price": "103", + "examine": "A scroll for a giant chinchompa familiar.", + "durability": null, + "name": "Explode scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12834" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "250", + "examine": "A scroll for a spirit graahk familiar.", + "durability": null, + "name": "Goad scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12835" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1428", + "examine": "A scroll for a spirit kyatt familiar.", + "durability": null, + "name": "Ambush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12836" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "300", + "examine": "A scroll for a lava titan familiar.", + "durability": null, + "name": "Ebon thunder scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12837" + }, + { + "requirements": "{23,17}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1", + "examine": "A scroll for a spirit mosquito familiar.", + "durability": null, + "name": "Pester scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12838" + }, + { + "requirements": "{23,22}", + "ge_buy_limit": "5000", + "grand_exchange_price": "78", + "examine": "A scroll for a spirit Tz-Kih familiar.", + "durability": null, + "name": "Fireball assault scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12839" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "196", + "examine": "A scroll for a spirit larupia familiar.", + "durability": null, + "name": "Rending scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12840" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "173", + "examine": "A scroll for a forge regent familiar.", + "durability": null, + "name": "Inferno scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12841" + }, + { + "turn90cw_anim": "8963", + "stand_anim": "8964", + "walk_anim": "8961", + "durability": null, + "name": "Gnomecopter", + "run_anim": "8963", + "archery_ticket_price": "0", + "turn90ccw_anim": "8963", + "id": "12842", + "stand_turn_anim": "8963", + "turn180_anim": "8963", + "equipment_slot": "1" + }, + { + "destroy_message": "This is for use with the gnomecopters, north of Lumbridge. Sasquine Huburns will give you another one.", + "examine": "It tells gnomecopters where you wish to go.", + "durability": null, + "name": "Gnomecopter ticket", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12843" + }, + { + "shop_price": "100", + "turn90cw_anim": "8983", + "examine": "A kite with a dragon on it.", + "walk_anim": "8982", + "durability": null, + "turn90ccw_anim": "8984", + "attack_speed": "4", + "turn180_anim": "8985", + "render_anim": "593", + "equipment_slot": "3", + "stand_anim": "8981", + "name": "Toy kite", + "run_anim": "8986", + "archery_ticket_price": "0", + "id": "12844", + "stand_turn_anim": "8987" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12845", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12846", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12847", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12848", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12849", + "stand_turn_anim": "9000" + }, + { + "examine": "A generic elemental rune", + "durability": null, + "name": "Elemental rune", + "archery_ticket_price": "0", + "id": "12850" + }, + { + "examine": "A generic non-elemental rune", + "durability": null, + "name": "Catalytic rune", + "archery_ticket_price": "0", + "id": "12851" + }, + { + "examine": "A token awarded for taking part in the Fist of Guthix minigame.", + "durability": null, + "name": "Fist of guthix token", + "archery_ticket_price": "0", + "id": "12852" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box of bandages for healing.", + "durability": null, + "name": "Bandages", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12853" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Teleports you to the centre of the arena.", + "durability": null, + "name": "Tele-orb", + "archery_ticket_price": "0", + "id": "12855" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Irit gloves", + "archery_ticket_price": "0", + "id": "12856", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "100", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Avantoe gloves", + "archery_ticket_price": "0", + "id": "12857", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Kwuarm gloves", + "archery_ticket_price": "0", + "id": "12858", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Cadantine gloves", + "archery_ticket_price": "0", + "id": "12859", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Swordfish gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "12860", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves", + "durability": null, + "name": "Shark gloves", + "weight": "1", + "archery_ticket_price": "0", + "id": "12861", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Dragon slayer gloves", + "archery_ticket_price": "0", + "id": "12862", + "equipment_slot": "9" + }, + { + "destroy_message": "You can buy a new pair from the druids at the Fist of Guthix activity.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Air runecrafting gloves", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12863", + "equipment_slot": "9" + }, + { + "destroy_message": "You can buy a new pair from the druids at the Fist of Guthix activity.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Water runecrafting gloves", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12864", + "equipment_slot": "9" + }, + { + "destroy_message": "You can buy a new pair from the druids at the Fist of Guthix minigame.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Earth runecrafting gloves", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12865", + "equipment_slot": "9" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12866", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12867", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12868", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12869", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12870", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "ge_buy_limit": "10", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "78900", + "name": "Battle hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12871", + "bonuses": "0,0,0,2,0,3,2,3,2,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "78900", + "durability": null, + "name": "Battle hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12872" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12873", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12874", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12875", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12876", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12877", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "ge_buy_limit": "10", + "examine": "Its arcane power is waning.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "431400", + "name": "Battle robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12878", + "bonuses": "0,0,0,7,0,4,4,5,7,0,8,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "431400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Battle robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12879" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12880", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12881", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12882", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12883", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12884", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "ge_buy_limit": "10", + "examine": "Its arcane power is waning.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "538000", + "name": "Battle robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12885", + "bonuses": "0,0,0,6,0,4,3,4,6,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "538000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Battle robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12886" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12887", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12888", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12889", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12890", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12891", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "ge_buy_limit": "10", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "8504", + "name": "Druidic mage hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12892", + "bonuses": "0,0,0,1,0,0,0,0,1,0,1,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "8504", + "durability": null, + "name": "Druidic mage hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12893" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12894", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12895", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12896", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12897", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12898", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "ge_buy_limit": "10", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "76300", + "name": "Druidic mage top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12899", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "76300", + "durability": null, + "name": "Druidic mage top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12900" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12901", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12902", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12903", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12904", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12905", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "ge_buy_limit": "10", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "60800", + "name": "Druidic mage bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12906", + "bonuses": "0,0,0,2,0,0,0,0,2,0,2,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "60800", + "durability": null, + "name": "Druidic mage bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12907" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12908", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12909", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12910", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12911", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12912", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Not so spiky anymore.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2718", + "name": "Adamant spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12913", + "bonuses": "0,0,0,-6,-2,11,12,10,0,11,4,1,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "Not so spiky anymore!", + "grand_exchange_price": "2718", + "durability": null, + "name": "Adamant spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12914" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12915", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12916", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12917", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12918", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12919", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "ge_buy_limit": "10", + "examine": "Not so spiky anymore!", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "23700", + "name": "Adamant berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12920", + "bonuses": "0,0,0,-8,-2,12,14,13,-1,8,4,1,0,0,0" + }, + { + "ge_buy_limit": "10", + "examine": "Not so spiky anymore!", + "grand_exchange_price": "23700", + "durability": null, + "name": "Adamant berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12921" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12922", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0", + "point_price": "35" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12923", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12924", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12925", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12926", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "50500", + "name": "Rune spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12927", + "bonuses": "0,0,0,-6,-2,14,15,13,0,14,8,2,0,0,0" + }, + { + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "grand_exchange_price": "50500", + "durability": null, + "name": "Rune spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12928" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12929", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0", + "point_price": "35" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12930", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12931", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12932", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12933", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "135300", + "name": "Rune berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12934", + "bonuses": "0,0,0,-8,-2,16,18,17,-1,17,9,2,0,0,0" + }, + { + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "grand_exchange_price": "135300", + "durability": null, + "name": "Rune berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12935" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12936", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12937", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12938", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12939", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12940", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A worn out coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "92700", + "name": "Green d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12941", + "bonuses": "0,0,0,-1,1,1,2,2,1,2,1,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A worn out coif made of green dragonhide.", + "grand_exchange_price": "92700", + "durability": null, + "name": "Green d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12942" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12943", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12944", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "Fully charged: A coif made of blue dragonhide. Fully degraded: A worn out coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12945", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12946", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12947", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A worn out coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "131900", + "name": "Blue d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12948", + "bonuses": "0,0,0,-1,1,1,2,2,1,2,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A worn out coif made of blue dragonhide.", + "grand_exchange_price": "131900", + "durability": null, + "name": "Blue d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12949" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12950", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12951", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "Fully charged: A coif made of red dragonhide.Fully degraded: A worn out coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12952", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12953", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12954", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A worn out coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "156600", + "name": "Red d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12955", + "bonuses": "0,0,0,-1,2,1,2,3,1,2,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A worn out coif made of red dragonhide.", + "grand_exchange_price": "156600", + "durability": null, + "name": "Red d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12956" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12957", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12958", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12959", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12960", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "Fully charged: A coif made of black dragonhide. Fully degraded: A worn out coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12961", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "229000", + "name": "Black d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12962", + "bonuses": "0,0,0,-1,3,1,3,3,1,2,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A coif made of black dragonhide.", + "grand_exchange_price": "229000", + "durability": null, + "name": "Black d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12963" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12964", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12965", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12966", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12967", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12968", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "ge_buy_limit": "10", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "6511", + "name": "Combat hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12969", + "bonuses": "0,0,0,1,0,0,0,0,1,0,2,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "6511", + "durability": null, + "name": "Combat hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12970" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12971", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12972", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12973", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12974", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12975", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "ge_buy_limit": "10", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "61500", + "name": "Combat robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12976", + "bonuses": "0,0,0,3,0,0,0,0,3,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "61500", + "durability": null, + "name": "Combat robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12977" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12978", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12979", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12980", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12981", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12982", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "ge_buy_limit": "10", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "47800", + "name": "Combat robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12983", + "bonuses": "0,0,0,2,0,0,0,0,2,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "47800", + "durability": null, + "name": "Combat robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12984" + }, + { + "shop_price": "15", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "3694", + "durability": null, + "name": "Bronze gauntlets", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12985", + "bonuses": "0,0,0,-1,-1,2,3,3,-1,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "3275", + "durability": null, + "name": "Worn-out bronze gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12986", + "bonuses": "0,0,0,-1,-1,0,1,1,-1,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3275", + "durability": null, + "name": "Worn-out bronze gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12987" + }, + { + "shop_price": "30", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "17339", + "durability": null, + "name": "Iron gauntlets", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12988", + "bonuses": "0,0,0,-1,-1,3,4,4,-1,3,3,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "30", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "16000", + "durability": null, + "name": "Worn-out iron gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12989", + "bonuses": "0,0,0,-1,-1,0,1,1,-1,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16000", + "durability": null, + "name": "Worn-out iron gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12990" + }, + { + "requirements": "{1,5}", + "shop_price": "50", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "29844", + "durability": null, + "name": "Steel gauntlets", + "tradeable": "false", + "weight": "10", + "archery_ticket_price": "0", + "id": "12991", + "bonuses": "0,0,0,-1,-1,4,5,5,-1,4,4,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,5}", + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "durability": null, + "weight": "10", + "equipment_slot": "9", + "grand_exchange_price": "27000", + "name": "Worn-out steel gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12992", + "bonuses": "0,0,0,-1,-1,1,1,1,-1,1,1,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27000", + "durability": null, + "name": "Worn-out steel gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12993" + }, + { + "requirements": "{1,10}", + "shop_price": "75", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "50808", + "durability": null, + "name": "Black gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "12994", + "bonuses": "0,0,0,-1,-1,5,6,6,-1,5,5,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,10}", + "shop_price": "75", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "40100", + "name": "Worn-out black gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12995", + "bonuses": "0,0,0,-1,-1,1,2,2,-1,1,1,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40100", + "durability": null, + "name": "Worn-out black gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12996" + }, + { + "requirements": "{1,20}", + "shop_price": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "60064", + "durability": null, + "name": "Mithril gauntlets", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12997", + "bonuses": "0,0,0,-1,-1,6,7,7,-1,6,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,20}", + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "54200", + "durability": null, + "name": "Worn-out mithril gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12998", + "bonuses": "0,0,0,-1,-1,2,2,2,-1,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "54200", + "durability": null, + "name": "Worn-out mithril gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12999" + }, + { + "requirements": "{1,30}", + "shop_price": "150", + "examine": "I have to keep my hands safe! Uncharged: A bit worse for wear.", + "grand_exchange_price": "74526", + "durability": null, + "name": "Adamant gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "13000", + "bonuses": "0,0,0,-1,-1,8,9,9,-1,8,8,1,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,30}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe! Uncharged: A bit worse for wear.", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "71500", + "name": "Worn-out adamant gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13001", + "bonuses": "0,0,0,-1,-1,2,3,3,-1,2,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "71500", + "durability": null, + "name": "Worn-out adamant gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13002" + }, + { + "requirements": "{1,40}", + "shop_price": "200", + "examine": "Fully charged: I have to keep my hands safe! Worn-Out: A bit worse for wear.", + "grand_exchange_price": "95700", + "durability": null, + "name": "Rune gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "13003", + "bonuses": "0,0,0,-1,-1,10,11,11,-1,10,10,2,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,40}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Fully charged: I have to keep my hands safe! Worn-Out: A bit worse for wear.", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "99900", + "name": "Worn-out rune gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13004", + "bonuses": "0,0,0,-1,-1,3,4,4,-1,3,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "99900", + "durability": null, + "name": "Worn-out rune gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13005" + }, + { + "requirements": "{1,60}", + "shop_price": "300", + "examine": "Uncharged: A bit worse for wear. Charged: I have to keep my hands safe!", + "grand_exchange_price": "214700", + "durability": null, + "name": "Dragon gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "13006", + "bonuses": "0,0,0,-1,-1,14,15,15,-1,14,14,3,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,60}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Uncharged: A bit worse for wear. Charged: I have to keep my hands safe!", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "166200", + "name": "Worn-out dragon gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13007", + "bonuses": "0,0,0,-1,-1,4,5,5,-1,4,4,1,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "166200", + "durability": null, + "name": "Worn-out dragon gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13008" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13010" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13011" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13012" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13013" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13014" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13015" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13016" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13017" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13018" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13019" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13020" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13021" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13022" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13023" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13024" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13025" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13026" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13027" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13028" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13029" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13030" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13031" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13032" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13033" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13034" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13035" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13036" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13037" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13038" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13039" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13040" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13041" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13042" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13043" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13044" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13045" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13046" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13047" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13048" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13049" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13050" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13051" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13052" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13053" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13054" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13055" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13056" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13057" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13058" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13059" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13060" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13061" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13062" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13063" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13064" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13065" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13066" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13067" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13068" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13069" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13070" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13071" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13072" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13074" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13075" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13076" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13077" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13078" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13079" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13080" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A black crossbow.", + "walk_anim": "4226", + "durability": null, + "weight": "5", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "grand_exchange_price": "261", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "tradeable": "true", + "name": "Black crossbow", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "13081", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,60,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "261", + "durability": null, + "name": "Black crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13082" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "55", + "durability": null, + "name": "Black bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13083", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "141", + "durability": null, + "name": "Black bolts(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13084", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "233", + "durability": null, + "name": "Black bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13085", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "1690", + "durability": null, + "name": "Black bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13086", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{0,8}", + "ge_buy_limit": "2", + "examine": "A sapphire-topped cane.", + "durability": null, + "weight": "0.5", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "77000", + "name": "Black cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13095", + "bonuses": "0,-2,16,0,0,0,0,0,0,0,0,13,2,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "77000", + "durability": null, + "name": "Black cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13096" + }, + { + "requirements": "{0,28}", + "ge_buy_limit": "2", + "examine": "A ruby-topped cane.", + "durability": null, + "weight": "0.5", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "19100", + "name": "Adamant cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13097", + "bonuses": "0,-2,25,0,0,0,0,0,0,0,0,23,3,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "19100", + "durability": null, + "name": "Adamant cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13098" + }, + { + "requirements": "{0,38}", + "ge_buy_limit": "2", + "examine": "A diamond-topped cane.", + "durability": null, + "weight": "0.5", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "14500", + "name": "Rune cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13099", + "bonuses": "0,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14500", + "durability": null, + "name": "Rune cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13100" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Comes with a free rabbit!", + "grand_exchange_price": "160400", + "durability": null, + "name": "Top hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13101", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "160400", + "durability": null, + "name": "Top hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13102" + }, + { + "ge_buy_limit": "2", + "examine": "Official explorer headgear!", + "grand_exchange_price": "85400", + "durability": null, + "name": "Pith helmet", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "13103", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "85400", + "durability": null, + "name": "Pith helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13104" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "ge_buy_limit": "2", + "examine": "Spikier than normal.", + "durability": null, + "weight": "10", + "equipment_slot": "0", + "grand_exchange_price": "38300", + "name": "Spiked helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13105", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "38300", + "durability": null, + "name": "Spiked helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13106" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Shear elegance.", + "grand_exchange_price": "296700", + "durability": null, + "name": "Sheep mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13107", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "296700", + "durability": null, + "name": "Sheep mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13108" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "I can get the look right, but can I do the waddle too?", + "grand_exchange_price": "633600", + "durability": null, + "name": "Penguin mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13109", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "633600", + "durability": null, + "name": "Penguin mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13110" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "The bats have left the belltower.", + "grand_exchange_price": "399000", + "durability": null, + "name": "Bat mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13111", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "399000", + "durability": null, + "name": "Bat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13112" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "It's the year of the cat!", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Cat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13113", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Cat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13114" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "I'm hungry like the wolf.", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Wolf mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13115", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Wolf mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13116" + }, + { + "turn90cw_anim": "9053", + "examine": "A fully charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "defence_anim": "9048", + "equipment_slot": "3", + "attack_anims": "9097,9097,9097,9097", + "stand_anim": "9049", + "name": "Ivandis flail (30)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13117", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (29)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13118", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "9054", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail(28)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13119", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (27)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13120", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (26)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13121", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (25)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13122", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (24)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13123", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (23)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13124", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (22)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13125", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (21)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13126", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (20)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13127", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (19)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13128", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (18)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13129", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (17)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13130", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (16)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13131", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (15)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13132", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (14)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13133", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (13)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13134", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (12)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13135", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (11)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13136", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (10)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13137", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (9)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13138", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (8)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13139", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (7)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13140", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (6)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13141", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (5)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13142", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (4)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13143", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (3)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13144", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (2)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13145", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - one last charge left.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (1)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13146", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "examine": "Flail of Ivandis dust.", + "durability": null, + "name": "Flail dust", + "archery_ticket_price": "0", + "id": "13147" + }, + { + "destroy_message": "You found this page in the top floor of Paterdomus temple on an old table.", + "examine": "A page ripped from a book; it looks like a map of some kind.", + "durability": null, + "name": "Book page", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13149" + }, + { + "destroy_message": "You got this book from a bunk bed in Sanguinesti Myreque base.", + "examine": "A big book of combat techniques.", + "durability": null, + "name": "Combat book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13151" + }, + { + "examine": "Used to make a metal chain.", + "durability": null, + "name": "Chain link mould", + "weight": "1", + "archery_ticket_price": "0", + "id": "13153" + }, + { + "examine": "A chain made from mithril and silver.", + "durability": null, + "name": "Silvthril chain", + "weight": "3", + "archery_ticket_price": "0", + "id": "13154" + }, + { + "examine": "A blessed sickle with an emerald recessed into it.", + "durability": null, + "name": "Silver sickle emerald(b)", + "weight": "1", + "archery_ticket_price": "0", + "id": "13155", + "equipment_slot": "3" + }, + { + "examine": "A blessed and enchanted silver sickle with an emerald recessed into it.", + "durability": null, + "name": "Enchanted sickle emerald(b)", + "weight": "1", + "archery_ticket_price": "0", + "id": "13156", + "equipment_slot": "3" + }, + { + "examine": "A Vyrewatch corpse. Just a husk, really.", + "durability": null, + "name": "Vyre corpse", + "weight": "5", + "archery_ticket_price": "0", + "id": "13157" + }, + { + "examine": "An ornate key: precise workmanship and an ethereal glow. (Legacy of Seergaze)", + "durability": null, + "name": "Columbarium key", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13158" + }, + { + "destroy_message": "You got this key by cremating a Vyrewatch in the Paterdomus Columbarium.", + "examine": "An ornate key: precise workmanship and an ethereal glow. (Legacy of Seergaze)", + "durability": null, + "name": "Ornate tomb key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13159" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A Tome of Experience (2nd Edition) that awards 2500 XP per chapter.", + "durability": null, + "name": "Tome of xp 2nd ed (3)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13160" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A Tome of Experience (2nd Edition) that awards 2500 XP per chapter.", + "durability": null, + "name": "Tome of xp 2nd ed (2)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13161" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A Tome of Experience (2nd Edition) that awards 2500 XP per chapter.", + "durability": null, + "name": "Tome of xp 2nd ed (1)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13162" + }, + { + "examine": "A sapphire-topped cane.", + "grand_exchange_price": "115390", + "durability": null, + "name": "Black cane", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "attack_speed": "5", + "weapon_interface": "10", + "id": "13163", + "bonuses": "0,-2,16,0,0,0,0,0,0,0,0,13,2,0,0", + "equipment_slot": "3" + }, + { + "examine": "A ruby-topped cane.", + "grand_exchange_price": "18514", + "durability": null, + "name": "Adamant cane", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "weapon_interface": "10", + "id": "13164", + "bonuses": "0,-2,25,0,0,0,0,0,0,0,0,23,3,0,0", + "equipment_slot": "3" + }, + { + "examine": "A diamond-topped cane.", + "durability": null, + "weight": "0.5", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "15023", + "name": "Rune cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13165", + "bonuses": "0,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "lendable": "true", + "examine": "Comes with a free rabbit!", + "grand_exchange_price": "425919", + "durability": null, + "name": "Top hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13166", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Official explorer headgear!", + "grand_exchange_price": "99682", + "durability": null, + "name": "Pith helmet", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "13167", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Spikier than normal.", + "grand_exchange_price": "39643", + "durability": null, + "name": "Spiked helmet", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "13168", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "Shear elegance.", + "grand_exchange_price": "313558", + "durability": null, + "name": "Sheep mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13169", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "I can get the look right, but can I do the waddle too?", + "grand_exchange_price": "609515", + "durability": null, + "name": "Penguin mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13170", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "The bats have left the belltower.", + "grand_exchange_price": "371616", + "durability": null, + "name": "Bat mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13171", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "It's the year of the cat!", + "grand_exchange_price": "1066648", + "durability": null, + "name": "Cat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13172", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "I'm hungry like the wolf.", + "grand_exchange_price": "1303443", + "durability": null, + "name": "Wolf mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13173", + "equipment_slot": "0" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Blue navy slacks", + "archery_ticket_price": "0", + "id": "13174", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Green navy slacks", + "archery_ticket_price": "0", + "id": "13175", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Red navy slacks", + "archery_ticket_price": "0", + "id": "13176", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Brown navy slacks", + "archery_ticket_price": "0", + "id": "13177", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Black navy slacks", + "archery_ticket_price": "0", + "id": "13178", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Purple navy slacks", + "archery_ticket_price": "0", + "id": "13179", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Grey navy slacks", + "archery_ticket_price": "0", + "id": "13180", + "equipment_slot": "7" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Blue naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13181", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Green naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13182", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Red naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13183", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Brown naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13184", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Black naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13185", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Purple naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13186", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Grey naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13187", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Blue tricorn hat", + "archery_ticket_price": "0", + "id": "13188", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Green tricorn hat", + "archery_ticket_price": "0", + "id": "13189", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Red tricorn hat", + "archery_ticket_price": "0", + "id": "13190", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Brown tricorn hat", + "archery_ticket_price": "0", + "id": "13191", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Black tricorn hat", + "archery_ticket_price": "0", + "id": "13192", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Purple tricorn hat", + "archery_ticket_price": "0", + "id": "13193", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Grey tricorn hat", + "archery_ticket_price": "0", + "id": "13194", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this lamp, it will be destroyed. You can obtain another from Dunstan.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Mysterious lamp", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13227" + }, + { + "destroy_message": "You can get another net from Professor Arblenap on Ice Mountain.", + "examine": "Professor Arblenap gave you this net to catch the baby icefiends on Ice Mountain.", + "durability": null, + "name": "Icefiend net", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13230", + "equipment_slot": "3" + }, + { + "examine": "You should give this to Professor Arblenap.", + "durability": null, + "name": "Baby icefiend", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13231", + "equipment_slot": "3" + }, + { + "destroy_message": "It will reappear near the bottom of Ice Mountain.", + "examine": "The remains of the Oracle's tent on Ice Mountain.", + "durability": null, + "name": "Tent", + "tradeable": "false", + "destroy": "true", + "weight": "30", + "archery_ticket_price": "0", + "id": "13232" + }, + { + "destroy_message": "You can get it back by pickpocketing Drorkar again.", + "examine": "You took this key from Drorkar's pocket in the power station. (Perils of Ice Mountain)", + "durability": null, + "name": "Dwarven key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13234" + }, + { + "examine": "A plank of oak that has been treated to resist fire.", + "durability": null, + "name": "Treated oak plank", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "13238" + }, + { + "shop_price": "14", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "33", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "13239" + }, + { + "durability": null, + "name": ".", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13240", + "equipment_slot": "5" + }, + { + "examine": "A plank of oak that has been treated to resist fire.", + "durability": null, + "name": "Treated plank", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "13241" + }, + { + "durability": null, + "name": ".", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13242" + }, + { + "examine": "An old stone slab with writing on it.", + "durability": null, + "name": "Stone tablet", + "archery_ticket_price": "0", + "id": "13243" + }, + { + "examine": "A book for those who want to visit the TzHaar city.", + "durability": null, + "name": "Tzhaar tourist guide", + "archery_ticket_price": "0", + "id": "13244" + }, + { + "destroy_message": "You can mine more stone slabs in the TzHaar mine.", + "examine": "A flawed block of obsidian from the Karamja volcano.", + "durability": null, + "name": "Stone slab", + "tradeable": "false", + "destroy": "true", + "weight": "32", + "archery_ticket_price": "0", + "id": "13245" + }, + { + "destroy_message": "You can get more pillars by crafting stone slabs from the TzHaar mine.", + "examine": "A support pillar.", + "durability": null, + "name": "Pillar", + "tradeable": "false", + "destroy": "true", + "weight": "25", + "archery_ticket_price": "0", + "id": "13246" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13247", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13248", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13249", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13250", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can obtain another from the mummy guardian in the undead slayer's tomb.", + "examine": "A key obtained in Catolax's tomb.", + "durability": null, + "name": "Ranged path key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13259", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can obtain another from the mummy guardian in the undead slayer's tomb.", + "examine": "A key obtained in Catolax's tomb.", + "durability": null, + "name": "Magic path key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13260", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "shop_price": "650", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Slayer helmet", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13263", + "bonuses": "0,0,0,0,0,30,32,27,0,30,7,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "The remains of a banshee's scream.", + "durability": null, + "name": "Banshee voice", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13276", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "400", + "examine": "More of that crazy Slayer headgear.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Masked earmuffs", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13277", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "For use against turoth and kurasks.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "89", + "name": "Broad arrow heads", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13278", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "For use against turoth and kurasks.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "17", + "name": "Unfinished broad bolts", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13279", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "For use against turoth and kurasks.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "grand_exchange_price": "34", + "name": "Broad-tipped bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13280", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(8)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13281", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(7)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13282", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(6)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13283", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(5)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13284", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(4)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13285", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(3)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13286", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(2)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13287", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(1)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13288", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "turn90cw_anim": "1207", + "examine": "A razor-sharp sword.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "43082", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13290", + "stand_turn_anim": "823", + "bonuses": "67,62,0,0,0,0,0,0,0,0,0,50,0,0,0", + "requirements": "{0,50}-{18,55}", + "shop_price": "68000", + "durability": null, + "destroy": "false", + "weapon_interface": "5", + "attack_audios": "2517,2517,2500,2517", + "name": "Leaf-bladed sword" + }, + { + "shop_price": "68000", + "examine": "A razor-sharp sword.", + "grand_exchange_price": "43082", + "durability": null, + "name": "Leaf-bladed sword", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13291" + }, + { + "durability": null, + "name": "Letter", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13292", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Plans", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13293", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these plans, they will be lost and you will need to see Captain Donnie for a replacement.", + "examine": "A charcoal rubbing taken from 50% Luke.", + "durability": null, + "name": "Charcoal rubbing", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13294", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Frank's mark, you will need to see him to get another.", + "examine": "Signature from Frank.", + "durability": null, + "name": "Frank's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13295", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these lockpicks, you will need to look under the mattress to get another set.", + "examine": "A device for opening locked doors.", + "durability": null, + "name": "Crude lockpick", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13296", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "The top of a Custom Officer's uniform.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "If you drop this shirt you will need to kill another Customs officer for a replacement.", + "remove_sleeves": "true", + "name": "Customs shirt", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13297", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these trousers you will need to kill another Customs officer for a replacement.", + "examine": "The trousers of a Custom Officer's uniform.", + "durability": null, + "name": "Customs trousers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13298", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "If you drop this hat you will need to kill another Customs officer for a replacement.", + "examine": "The hat of a Custom Officer's uniform.", + "durability": null, + "name": "Customs hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13299", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13300", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13301", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Brooch", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13302", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Izzy's No-Beard's mark, you will need to see him to get another.", + "examine": "Signature from Izzy No-Beard.", + "durability": null, + "name": "Izzy's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13303", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Key", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13304", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this crowbar, you will need to get another from the chest on the sunken ship.", + "examine": "This could be useful.", + "durability": null, + "name": "Crowbar", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13305", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the idol, you will need to go diving to get another replacement.", + "examine": "An idol. It has many heads.", + "durability": null, + "name": "Idol of many heads", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13307", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Bill Teach's mark, you will need to see him to get another.", + "examine": "Signature from Bill Teach.", + "durability": null, + "name": "Bill teach's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13308", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this paper, you will need to call to the guards for a replacement. ", + "examine": "This is generally used for writing on.", + "durability": null, + "name": "Paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13309", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this note, you'll need to call the guards for replacement paper.", + "examine": "A written confession.", + "durability": null, + "name": "Confession", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13310", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13311", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this ink, you will need to call to the guards for a replacement.", + "examine": "An empty ink bottle./This is full of ink.", + "durability": null, + "name": "Ink bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13312", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this paper you will need to call to the guards to replace it and the ink.", + "examine": "It's got ink all over it.", + "durability": null, + "name": "Inky paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13313", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this ink, you will need to call to the guards for a replacement.", + "examine": "An empty ink bottle./This is full of ink.", + "durability": null, + "name": "Ink bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13314", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this bottle, you will need to call to the guards for a replacement.", + "examine": "It's smashed. I should mind my fingers.", + "durability": null, + "name": "Smashed bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13315", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "The top part of a prisoner's uniform.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "If you drop this top, then you will need to speak to the guards to get it replaced.", + "remove_sleeves": "true", + "name": "Prison uniform top", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13316", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these trousers, then you will need to speak to the guards to get it replaced.", + "examine": "The bottom part of a prisoner's uniform.", + "durability": null, + "name": "Prison uniform trousers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13317", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "examine": "It's covered in fish slop.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "If you drop this top, you will need to speak to the guards to get it replaced, then find a way to get stew on it again.", + "remove_sleeves": "true", + "name": "Fishy prison uniform top", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13318", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this cup it will be destroyed and you will have to pick up another.", + "examine": "A standard prison-issue tin cup.", + "durability": null, + "name": "Tin cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13319", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "If you drop this cup it will be destroyed and you will have to pick up another.", + "examine": "A standard prison-issue tin cup.", + "durability": null, + "name": "Tin cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13320", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Destroy", + "examine": "A pipe that belongs in a cannon stand.", + "durability": null, + "name": "Pipe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13321", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, it will be destroyed and you will have to get another.", + "durability": null, + "name": "Accordion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13322", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, it will be destroyed and you will have to get another.", + "durability": null, + "name": "Accordion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13323", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, it will be destroyed and you will have to get another.", + "durability": null, + "name": "Accordion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13324", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, pipe and inky paper, it will all be destroyed and you will need to get all the items back again.", + "examine": "A very crude vacuum pump.", + "durability": null, + "name": "Vacuum pump", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13325", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this, you will lose all the items you put in it, as well as the seagull.", + "examine": "It sounds like a law firm.", + "durability": null, + "name": "Vacuum pump and gull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13326", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "If you drop this quill, you will need to talk to the guard for a replacement.", + "examine": "From a bird - can be used for writing.", + "durability": null, + "name": "Quill", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13327", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "From a bird - can be used for writing. It has some ink on the tip.", + "durability": null, + "name": "Inky quill", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13328", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13329", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13330", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this dead parrot, there is a chance that bad, bad things will happen to you - unless you see 50 Ships Mufassah for a replacement.", + "examine": "A very dead rotten parrot.", + "durability": null, + "name": "Ex-parrot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13331", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this cage, you will need to see Bill Teach for a replacement.", + "examine": "It feels very cold to the touch.", + "durability": null, + "name": "Magical cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13332", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this dead parrot in a cage (and who wouldn't) then you will need to see ", + "examine": "A very dead rotten parrot in a magical cage.", + "durability": null, + "name": "Ex-parrot in a magic cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13333", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the cage, the ex-ex-parrot will escape.", + "examine": "A very alive rotten parrot in a magic cage.", + "durability": null, + "name": "Ex-ex-parrot in a magic cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13334", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Ex-ex-parrot", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13335", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Ex-ex-parrot", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13336", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "A pirate impling in a jar.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "grand_exchange_price": "7346", + "name": "Pirate impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13337", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "shop_price": "50", + "grand_exchange_price": "7346", + "durability": null, + "name": "Pirate impling jar", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13338" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A white bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13339", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A white bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13340", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A red bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13341", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A red bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13342", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A blue bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13343", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A blue bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13344", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A brown bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13345", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A brown bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13346", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13347", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13348", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13349", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13350", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A orange bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13351", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A orange bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13352", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "100", + "examine": "It's dark, and I'm wearing two patches. Hit it!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Double eyepatches", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13353", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "Two patches and a hat.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Pirate hat and eyepatches", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13354", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "100", + "examine": "A patch for the left eye.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "23485", + "name": "Left eyepatch", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13355", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A patch for the left eye.", + "grand_exchange_price": "23485", + "durability": null, + "name": "Left eyepatch", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13356" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A hat and a patch.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Pirate hat and eyepatch", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13357", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A seaworthy grey shirt.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13358", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13359" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A seaworthy purple shirt.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13360", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13361" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A seaworthy orange shirt.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13362", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13363" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "A seaworthy pair of grey trousers.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "7", + "grand_exchange_price": "1", + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13364", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "350", + "grand_exchange_price": "1", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13365" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "A seaworthy pair of purple trousers.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "7", + "grand_exchange_price": "1", + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13366", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "350", + "grand_exchange_price": "1", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13367" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "A seaworthy pair of orange trousers.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "7", + "grand_exchange_price": "1", + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13368", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "350", + "grand_exchange_price": "1", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13369" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13370", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "durability": null, + "name": "Bandana", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13371" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13372", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "durability": null, + "name": "Bandana", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13373" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "An orange bandana.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13374", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "durability": null, + "name": "Bandana", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13375" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13376", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A orange bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13377", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13378", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Destroy", + "examine": "Some rock fragments.", + "durability": null, + "name": "Rock fragments", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13379", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the letter, it will be destroyed and you'll need to see Bill Teach for another.", + "examine": "Note from Teach to Brass Hand Harry.", + "durability": null, + "name": "Introduction letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13380", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13381", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13382", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13383", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13384", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13385", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Wall beast fingers in a white fern sauce.", + "durability": null, + "name": "Fingers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13386", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "This hand part is small and delicate, and dropping it here will lose it. If you lose it, you will need to see Brass Hand Harry for a replacement.", + "examine": "A brass thumb.", + "durability": null, + "name": "Thumb", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13387", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13388", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "This hand part is small and delicate, and dropping it here will lose it. If you lose it, you will need to see Brass Hand Harry for a replacement.", + "examine": "A brass wrist.", + "durability": null, + "name": "Wrist", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13389", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "This hand part is small and delicate, and dropping it here will lose it. If you lose it, you will need to see Brass Hand Harry for a replacement.", + "examine": "A brass brace.", + "durability": null, + "name": "Brace", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13390", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this hand, you will destroy it and you will have to remake it from parts that Brass Hand Harry has.", + "examine": "A completed brass hand.", + "durability": null, + "name": "Brass hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13391", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this ink pad, you will lose it and will need to see Brass Hand Harry for a replacement.", + "examine": "It's soaked with ink.", + "durability": null, + "name": "Ink pad", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13392", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this hand, you will destroy it and you will have to remake it from parts that Brass Hand Harry has.", + "examine": "An inky brass hand.", + "durability": null, + "name": "Inky hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13393", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this paper, you will need to call to the guards for a replacement. ", + "examine": "This is generally used for writing on.", + "durability": null, + "name": "Paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13394", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Brass Hand Harry's mark, it will be destroyed and you need to see him to get another.", + "examine": "Handprint from Brass Hand Harry.", + "durability": null, + "name": "Brass hand harry's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13395", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Makes me itch.", + "durability": null, + "name": "Fake beard", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13396", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "examine": "It looks like someone has sneezed in it.", + "durability": null, + "name": "Fake moustache and nose", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13397", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "examine": "Why is the monocle nailed to it?", + "durability": null, + "name": "Fake monocle, moustache and nose", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13398", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "You can barely see where it connected to the mop handle.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "name": "Curly wig", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13399", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "It looks like it is part-dog, part-mould.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "name": "Straight wig", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13400", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this order for 'rum' you will need to speak to the Rusty Anchor barman to get another.", + "examine": "An order simply for 'rum'.", + "durability": null, + "name": "Order", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13401", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Captain Braindeath's mark, you will need to speak to him to get another.", + "examine": "Signature of Captain Braindeath.", + "durability": null, + "name": "Braindeath's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13402", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "300", + "examine": "A replica tinderbox made of solid gold.", + "durability": null, + "name": "Golden tinderbox", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13403", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A bow from a darker dimension.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "9", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equip_audio": "3738", + "render_anim": "303", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "86850", + "attack_audios": "3731,0,0,0", + "name": "Dark bow", + "archery_ticket_price": "0", + "id": "13405", + "bonuses": "0,0,0,0,95,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "59171", + "name": "Ancient staff", + "archery_ticket_price": "0", + "id": "13406", + "bonuses": "10,-1,40,15,0,2,3,1,15,0,5,50,0,-1,10" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helmet is worn by archers.", + "grand_exchange_price": "46334", + "durability": null, + "name": "Archer helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13407", + "absorb": "0,3,1", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helmet is worn by berserkers.", + "grand_exchange_price": "45978", + "durability": null, + "name": "Berserker helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13408", + "absorb": "1,0,3", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helm is worn by warriors.", + "grand_exchange_price": "45664", + "durability": null, + "name": "Warrior helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13409", + "absorb": "1,0,3", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helm is worn by farseers.", + "grand_exchange_price": "45989", + "durability": null, + "name": "Farseer helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13410", + "absorb": "3,1,0", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Protective headwear made from crabs. Better than it sounds.", + "grand_exchange_price": "20378", + "durability": null, + "name": "Rock-shell helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13411", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,6,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A sturdy body armour made from rock crab pieces.", + "grand_exchange_price": "41788", + "durability": null, + "name": "Rock-shell plate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13412", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Some tough leggings made from rock crab parts.", + "grand_exchange_price": "37139", + "durability": null, + "name": "Rock-shell legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13413", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A helm fit for any Fremennik ranger.", + "grand_exchange_price": "37724", + "durability": null, + "name": "Spined helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13414", + "absorb": "0,3,1", + "bonuses": "0,-6,-6,-6,6,6,6,6,6,0,6,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A constant reminder that I'm above a Dagannoth in the food chain.", + "grand_exchange_price": "5773", + "durability": null, + "name": "Spined body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13415", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,30,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Stylish leg armour for rangers with a lingering smell of raw fish...", + "grand_exchange_price": "2696", + "durability": null, + "name": "Spined chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13416", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Make your foes cower by wearing a skull as a helmet!", + "grand_exchange_price": "39060", + "durability": null, + "name": "Skeletal helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13417", + "absorb": "3,1,0", + "bonuses": "0,0,0,2,-2,10,9,11,3,0,6,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The bones in this armour seems to vibrate with a magic quality...", + "grand_exchange_price": "26289", + "durability": null, + "name": "Skeletal top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13418", + "absorb": "6,3,0", + "bonuses": "0,0,0,8,-10,35,25,42,15,0,30,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A superior set of strengthened slacks for any self respecting seer.", + "grand_exchange_price": "24591", + "durability": null, + "name": "Skeletal bottoms", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13419", + "absorb": "4,2,0", + "bonuses": "0,0,0,6,-7,22,20,24,10,0,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Some finely crafted Fremennik boots, made from spined dagannoth hide.", + "grand_exchange_price": "158181", + "durability": null, + "name": "Spined boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13420", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,1,1,0,0,0,1,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Some Fremennik boots, made from the shards of a rock crab's shell.", + "grand_exchange_price": "1358", + "durability": null, + "name": "Rock-shell boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13421", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Some finely crafted Fremennik boots, made from the bones of a Wallasalki.", + "grand_exchange_price": "7788", + "durability": null, + "name": "Skeletal boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13422", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fremennik gloves stitched together from spined dagannoth hide.", + "grand_exchange_price": "3027", + "durability": null, + "name": "Spined gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13423", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,1,2,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Fremennik gloves stitched together from rock crab shell shards.", + "grand_exchange_price": "12839", + "durability": null, + "name": "Rock-shell gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13424", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fremennik gloves stitched together from wallasalki bones fragments.", + "grand_exchange_price": "25838", + "durability": null, + "name": "Skeletal gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13425", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A mysterious ring that can fill the wearer with magical power...", + "grand_exchange_price": "799703", + "durability": null, + "name": "Seers ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13426", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A fabled ring that improves the wearer's skill with a bow...", + "grand_exchange_price": "483521", + "durability": null, + "name": "Archers ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13427", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,4,0,0,0,0,4,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A legendary ring once worn by Fremennik warriors.", + "grand_exchange_price": "361302", + "durability": null, + "name": "Warrior ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13428", + "absorb": "0,0,0", + "bonuses": "0,4,0,0,0,0,4,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A ring reputed to bring out a berserk fury in its wearer.", + "grand_exchange_price": "963418", + "durability": null, + "name": "Berserker ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13429", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,4,0,0,0,4,0,0,0" + }, + { + "examine": "A two-handed dragon sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "124", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1024000", + "name": "Dragon 2h sword", + "archery_ticket_price": "0", + "id": "13430", + "bonuses": "-4,92,80,-4,0,0,0,0,0,-1,0,93,0,0,0" + }, + { + "shop_price": "20", + "examine": "Useful for catching crayfish.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "25", + "name": "Crayfish cage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13431", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Swap this note at any bank for the equivalent item.", + "grand_exchange_price": "25", + "durability": null, + "name": "Crayfish cage", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13432" + }, + { + "shop_price": "5", + "examine": "Some cooked crayfish. Eat it to heal.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "32", + "name": "Crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13433", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "5", + "examine": "Swap this note at any bank for the equivalent item.", + "grand_exchange_price": "32", + "durability": null, + "name": "Crayfish", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13434" + }, + { + "shop_price": "5", + "examine": "I should try cooking this. Used in Cooking (1).", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "41", + "name": "Raw crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13435", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "5", + "examine": "Swap this note at any bank for the equivalent item.", + "grand_exchange_price": "41", + "durability": null, + "name": "Raw crayfish", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13436" + }, + { + "shop_price": "1", + "durability": null, + "name": "Burnt crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "destroy": "false", + "attack_speed": "4", + "id": "13437", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Burnt crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "destroy": "false", + "attack_speed": "4", + "id": "13438" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13439", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "This is a bag of runes for Sir Vant.", + "durability": null, + "name": "Bag of runes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13440", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A very powerful onyx amulet.", + "grand_exchange_price": "2285210", + "durability": null, + "name": "Amulet of fury", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13442", + "absorb": "0,0,0", + "bonuses": "10,10,10,10,10,15,15,15,15,15,15,8,0,5,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A cape woven of obsidian plates.", + "grand_exchange_price": "56575", + "durability": null, + "name": "Obsidian cape", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13443", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0" + }, + { + "examine": "A weapon from the Abyss.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "11", + "absorb": "0,0,0", + "render_anim": "1578", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "114775", + "name": "Abyssal whip", + "archery_ticket_price": "0", + "id": "13444", + "bonuses": "0,82,0,0,0,0,0,0,0,0,0,82,0,0,0" + }, + { + "examine": "Simplicity is the best weapon.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "10", + "absorb": "0,0,0", + "render_anim": "27", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "29584", + "name": "Granite maul", + "archery_ticket_price": "0", + "id": "13445", + "bonuses": "0,0,81,0,0,0,0,0,0,0,0,79,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13446", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13447", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13448", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Protects your head and looks impressive too.", + "grand_exchange_price": "5756658", + "durability": null, + "name": "Dragon full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13449", + "absorb": "2,0,4", + "bonuses": "0,0,0,-6,-2,45,48,41,-1,46,12,0,0,0,0" + }, + { + "examine": "A beautiful, heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "7767458", + "name": "Armadyl godsword", + "archery_ticket_price": "0", + "id": "13450", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "A brutally heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1504919", + "name": "Bandos godsword", + "archery_ticket_price": "0", + "id": "13451", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "A gracious, heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "34966317", + "name": "Saradomin godsword", + "archery_ticket_price": "0", + "id": "13452", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "A terrifying, heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "2132037", + "name": "Zamorak godsword", + "archery_ticket_price": "0", + "id": "13453", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "An evil spear.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "1581", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "2070507", + "name": "Zamorakian spear", + "archery_ticket_price": "0", + "id": "13454", + "bonuses": "85,65,65,0,0,13,13,12,0,13,0,75,0,2,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A helmet of great craftmanship.", + "grand_exchange_price": "3732060", + "durability": null, + "name": "Armadyl helmet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13455", + "absorb": "0,5,2", + "bonuses": "-5,-5,-5,-5,10,6,6,10,10,8,12,0,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A chestplate of great craftsmanship", + "grand_exchange_price": "9628666", + "durability": null, + "name": "Armadyl chestplate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13456", + "absorb": "0,10,5", + "bonuses": "-7,-7,-7,-15,33,56,48,61,70,57,52,0,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A chainskirt of great craftsmanship.", + "grand_exchange_price": "9754868", + "durability": null, + "name": "Armadyl plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13457", + "absorb": "0,7,3", + "bonuses": "-6,-6,-6,-10,20,32,26,34,40,33,25,0,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A sturdy chestplate.", + "grand_exchange_price": "6460055", + "durability": null, + "name": "Bandos chestplate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13458", + "absorb": "4,0,9", + "bonuses": "0,0,0,-15,-10,98,93,105,-6,133,52,4,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A sturdy pair of tassets.", + "grand_exchange_price": "4228256", + "durability": null, + "name": "Bandos tassets", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13459", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,71,63,66,-4,93,25,2,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Some sturdy boots.", + "grand_exchange_price": "1259091", + "durability": null, + "name": "Bandos boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13460", + "absorb": "0,0,0", + "bonuses": "0,0,0,-5,-3,17,18,19,0,0,15,0,0,1,0" + }, + { + "examine": "The incredible blade of an Icyene.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "850151", + "name": "Saradomin sword", + "archery_ticket_price": "0", + "id": "13461", + "bonuses": "0,82,60,0,0,0,0,0,0,0,0,82,0,2,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These will protect my feet.", + "grand_exchange_price": "17336", + "durability": null, + "name": "Dragon boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13462", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,16,17,18,0,0,15,4,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13463", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another by talking about jobs with citizens and tutors around Lumbridge.", + "examine": "This reminds me of my current job and who set me to the task.", + "durability": null, + "name": "Task list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13464", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "16744", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger", + "archery_ticket_price": "0", + "id": "13465", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p)", + "archery_ticket_price": "0", + "id": "13466", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p+)", + "archery_ticket_price": "0", + "id": "13467", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p++)", + "archery_ticket_price": "0", + "id": "13468", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "examine": "A powerful axe.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "2", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "7263", + "name": "Rune axe", + "archery_ticket_price": "0", + "id": "13469", + "bonuses": "-2,26,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "examine": "A very powerful axe.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "2", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "3794577", + "name": "Dragon axe", + "archery_ticket_price": "0", + "id": "13470", + "bonuses": "-2,38,32,0,0,0,1,0,0,0,0,42,0,0,0" + }, + { + "examine": "A vicious looking axe.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "23993", + "name": "Rune battleaxe", + "archery_ticket_price": "0", + "id": "13471", + "bonuses": "-2,48,43,0,0,0,0,0,0,-1,0,64,0,0,0" + }, + { + "requirements": "{0,60}", + "examine": "A vicious looking axe.", + "has_special": "true", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "2586", + "defence_anim": "397", + "attack_anims": "395,395,401,395", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "123019", + "attack_audios": "2498,2498,2497,2498", + "name": "Dragon battleaxe", + "archery_ticket_price": "0", + "id": "13472", + "bonuses": "-2,70,65,0,0,0,0,0,0,-1,0,85,0,0,0" + }, + { + "examine": "I don't think it's intended for joinery.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "render_anim": "1430", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "24357", + "name": "Rune warhammer", + "archery_ticket_price": "0", + "id": "13473", + "bonuses": "-4,-4,53,-4,0,0,0,0,0,0,0,48,0,0,0" + }, + { + "examine": "A razor-sharp longsword", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "18420", + "name": "Rune longsword", + "archery_ticket_price": "0", + "id": "13474", + "bonuses": "38,47,-2,0,0,0,3,2,0,0,0,49,0,0,0" + }, + { + "examine": "A very powerful sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "58355", + "name": "Dragon longsword", + "archery_ticket_price": "0", + "id": "13475", + "bonuses": "58,69,-2,0,0,0,3,2,0,0,0,71,0,0,0" + }, + { + "examine": "A vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1582", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "14690", + "name": "Rune scimitar", + "archery_ticket_price": "0", + "id": "13476", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0" + }, + { + "examine": "A vicious, curved sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1928", + "attack_anims": "390,390,381,390", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "60405", + "name": "Dragon scimitar", + "archery_ticket_price": "0", + "id": "13477", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0" + }, + { + "examine": "A dragon halberd.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "15", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "200189", + "name": "Dragon halberd", + "archery_ticket_price": "0", + "id": "13478", + "bonuses": "70,95,0,-4,0,-1,4,5,0,0,0,89,0,0,0" + }, + { + "requirements": "{0,60}", + "examine": "A spiky mace.", + "has_special": "true", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "390,390,381,390", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "28817", + "name": "Dragon mace", + "archery_ticket_price": "0", + "id": "13479", + "bonuses": "40,-2,60,0,0,0,0,0,0,0,0,55,0,5,0" + }, + { + "examine": "Used for mining.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "18546", + "name": "Rune pickaxe", + "archery_ticket_price": "0", + "id": "13480", + "bonuses": "26,-2,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "2280904", + "durability": null, + "name": "Dragon chainbody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13481", + "absorb": "4,0,9", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides excellent protection.", + "grand_exchange_price": "38062", + "durability": null, + "name": "Rune platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13482", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "4373", + "durability": null, + "name": "Green d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13483", + "absorb": "0,6,3", + "bonuses": "0,0,0,-20,15,40,32,45,20,40,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "5266", + "durability": null, + "name": "Blue d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13484", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "6276", + "durability": null, + "name": "Red d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13485", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,25,50,42,55,40,50,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "7619", + "durability": null, + "name": "Black d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13486", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These look pretty heavy.", + "grand_exchange_price": "37355", + "durability": null, + "name": "Rune platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13487", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Looks pretty heavy.", + "grand_exchange_price": "160755", + "durability": null, + "name": "Dragon platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13488", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Designer leg protection.", + "grand_exchange_price": "37248", + "durability": null, + "name": "Rune plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13489", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This looks pretty heavy.", + "grand_exchange_price": "161006", + "durability": null, + "name": "Dragon plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13490", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "100% real dragonhide.", + "grand_exchange_price": "2037", + "durability": null, + "name": "Green d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13491", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "2352", + "durability": null, + "name": "Blue d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13492", + "absorb": "0,5,2", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "2761", + "durability": null, + "name": "Red d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13493", + "absorb": "0,6,3", + "bonuses": "0,0,0,-10,14,28,22,30,20,28,25,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "3377", + "durability": null, + "name": "Black d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13494", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Makes the wearer pretty intimidating.", + "grand_exchange_price": "59676", + "durability": null, + "name": "Dragon med helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13495", + "absorb": "2,0,4", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A full face helmet.", + "grand_exchange_price": "20388", + "durability": null, + "name": "Rune full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13496", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "1208", + "durability": null, + "name": "Green d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13497", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,8,3,2,4,2,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "1488", + "durability": null, + "name": "Blue d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13498", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,9,4,3,5,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Vambraces made from 100% real dragonhide.", + "grand_exchange_price": "1714", + "durability": null, + "name": "Red d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13499", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,10,5,4,6,6,0,5,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Vambraces made from 100% real dragonhide.", + "grand_exchange_price": "2208", + "durability": null, + "name": "Black d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13500", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A wooden helmet.", + "grand_exchange_price": "5210", + "durability": null, + "name": "Splitbark helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13501", + "absorb": "3,1,0", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides good protection.", + "grand_exchange_price": "27106", + "durability": null, + "name": "Splitbark body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13502", + "absorb": "6,3,0", + "bonuses": "0,0,0,10,-10,36,26,42,15,0,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These should protect my legs.", + "grand_exchange_price": "56050", + "durability": null, + "name": "Splitbark legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13503", + "absorb": "4,2,0", + "bonuses": "0,0,0,7,-7,22,20,25,10,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These should keep my hands safe.", + "grand_exchange_price": "2442", + "durability": null, + "name": "Splitbark gauntlets", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13504", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Wooden foot protection.", + "grand_exchange_price": "6845", + "durability": null, + "name": "Splitbark boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13505", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,9,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "An ancient and powerful looking Dragon Square shield.", + "grand_exchange_price": "328356", + "durability": null, + "name": "Dragon sq shield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13506", + "absorb": "5,0,11", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A large metal shield.", + "grand_exchange_price": "31885", + "durability": null, + "name": "Rune kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13507", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Blue: A magical hat. ", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13508", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The upper half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13509", + "absorb": "3,1,0", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The lower half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13510", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Bright/Dark magical gloves.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13511", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Magical boots.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13512", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Blue: A magical hat. ", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13513", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The upper half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13514", + "absorb": "3,1,0", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The lower half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13515", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Bright/Dark magical gloves.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13516", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Magical boots.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13517", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Blue: A magical hat. ", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13518", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The upper half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13519", + "absorb": "3,1,0", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The lower half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13520", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Bright/Dark magical gloves.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13521", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Magical boots.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13522", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "examine": "A nice sturdy bow made out of maple.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "193", + "name": "Maple longbow", + "archery_ticket_price": "0", + "id": "13523", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A shortbow made out of maple, still effective.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "111", + "name": "Maple shortbow", + "archery_ticket_price": "0", + "id": "13524", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A nice sturdy bow made out of yew.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "486", + "name": "Yew longbow", + "archery_ticket_price": "0", + "id": "13525", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A shortbow made out of yew, still effective.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "253", + "name": "Yew shortbow", + "archery_ticket_price": "0", + "id": "13526", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A nice sturdy magical bow.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1211", + "name": "Magic longbow", + "archery_ticket_price": "0", + "id": "13527", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Short and magical, but still effective.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "655", + "name": "Magic shortbow", + "archery_ticket_price": "0", + "id": "13528", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "An ancient Fremennik bow that was once used to battle the Moon Clan.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "21698", + "name": "Seercull", + "archery_ticket_price": "0", + "id": "13529", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A runite crossbow.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "17", + "absorb": "0,0,0", + "render_anim": "175", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "8890", + "name": "Rune crossbow", + "archery_ticket_price": "0", + "id": "13530", + "bonuses": "0,0,0,0,90,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1696744720", + "durability": null, + "name": "Red partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13531", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1314730495", + "durability": null, + "name": "Yellow partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13532", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "2147483647", + "durability": null, + "name": "Blue partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13533", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1481913809", + "durability": null, + "name": "Green partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13534", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1248900588", + "durability": null, + "name": "Purple partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13535", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "2147473360", + "durability": null, + "name": "White partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13536", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "It's a Santa hat.", + "grand_exchange_price": "130433327", + "durability": null, + "name": "Santa hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13537", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Aaaarrrghhh ... I'm a monster.", + "grand_exchange_price": "104671288", + "durability": null, + "name": "Green h'ween mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13538", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Aaaarrrghhh ... I'm a monster.", + "grand_exchange_price": "127720943", + "durability": null, + "name": "Blue h'ween mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13539", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Aaaarrrghhh ... I'm a monster.", + "grand_exchange_price": "171640098", + "durability": null, + "name": "Red h'ween mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13540", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful bow made from willow.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "2606", + "name": "Willow comp bow", + "archery_ticket_price": "0", + "id": "13541", + "bonuses": "0,0,0,0,22,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful bow made from yew wood.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "588", + "name": "Yew comp bow", + "archery_ticket_price": "0", + "id": "13542", + "bonuses": "0,0,0,0,49,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful bow made from magic wood.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1345", + "name": "Magic comp bow", + "archery_ticket_price": "0", + "id": "13543", + "bonuses": "0,0,0,0,71,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "74503559", + "durability": null, + "name": "3rd age range top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13544", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,30,55,47,60,60,55,52,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "47837515", + "durability": null, + "name": "3rd age range legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13545", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,17,31,25,33,30,31,25,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "9746895", + "durability": null, + "name": "3rd age range coif", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13546", + "absorb": "0,3,1", + "bonuses": "0,0,0,-2,9,4,7,10,5,8,12,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "6826420", + "durability": null, + "name": "3rd age vambraces", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13547", + "absorb": "0,0,0", + "bonuses": "0,0,0,-11,11,6,5,7,9,0,5,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "138719269", + "durability": null, + "name": "3rd age robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13548", + "absorb": "4,2,0", + "bonuses": "0,0,0,24,0,0,0,0,24,0,24,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "89961678", + "durability": null, + "name": "3rd age robe", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13549", + "absorb": "4,2,0", + "bonuses": "0,0,0,19,0,0,0,0,19,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "14976830", + "durability": null, + "name": "3rd age mage hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13550", + "absorb": "2,1,0", + "bonuses": "0,0,0,8,0,0,0,0,8,0,12,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "35019596", + "durability": null, + "name": "3rd age amulet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13551", + "absorb": "0,0,0", + "bonuses": "0,0,0,15,0,0,0,0,10,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "244180930", + "durability": null, + "name": "3rd age platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13552", + "absorb": "3,0,6", + "bonuses": "0,0,0,-25,-2,78,76,83,-5,75,25,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "266509014", + "durability": null, + "name": "3rd age platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13553", + "absorb": "4,0,9", + "bonuses": "0,0,0,-20,0,96,108,113,-4,97,52,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "50697678", + "durability": null, + "name": "3rd age full helmet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13554", + "absorb": "2,0,4", + "bonuses": "0,0,0,-5,-2,47,49,43,-3,48,12,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "91262203", + "durability": null, + "name": "3rd age kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13555", + "absorb": "5,0,11", + "bonuses": "0,0,0,-10,-4,63,65,61,-3,63,60,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Lightweight boots ideal for rangers.", + "grand_exchange_price": "6253527", + "durability": null, + "name": "Ranger boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13556", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,8,2,3,4,2,0,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Slightly magical boots.", + "grand_exchange_price": "388955", + "durability": null, + "name": "Wizard boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13557", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Endorsed by Robin Hood.", + "grand_exchange_price": "1962571", + "durability": null, + "name": "Robin hood hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13558", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,8,4,6,8,4,4,7,0,0,0,0" + }, + { + "destroy_message": "You will have talk to Explorer Jack in Lumbridge if you destroy this one.", + "shop_price": "350", + "examine": "A Lumbridge explorer's ring.", + "durability": null, + "name": "Explorer's ring 1", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13560", + "absorb": "0,0,0", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,1,0,0", + "equipment_slot": "12" + }, + { + "destroy_message": "You will have talk to ", + "shop_price": "350", + "examine": "A Lumbridge explorer's ring.", + "durability": null, + "name": "Explorer's ring 2", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13561", + "absorb": "0,0,0", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,1,0,0", + "equipment_slot": "12" + }, + { + "destroy_message": "You will need to obtain a new ring from Ned in Draynor if you destroy this one.", + "shop_price": "350", + "examine": "A Lumbridge explorer's ring.", + "durability": null, + "name": "Explorer's ring 3", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13562", + "absorb": "0,0,0", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,1,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "38", + "examine": "An occasionally edible mushroom.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "100", + "name": "Button mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13563", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "38", + "examine": "An occasionally edible mushroom.", + "grand_exchange_price": "100", + "durability": null, + "name": "Button mushroom", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13564" + }, + { + "durability": null, + "name": "Doll", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13565", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You may be able to find a new ring near where Summer stood outside the wilderness wall.", + "examine": "This magical ring once belonged to Summer's mother.", + "durability": null, + "name": "Jennica's ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13566", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "destroy_message": "Drop", + "examine": "Logs cut from a cursed magic tree.", + "durability": null, + "name": "Cursed magic logs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13567", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Logs cut from a cursed magic tree.", + "durability": null, + "name": "Cursed magic logs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13568" + }, + { + "destroy_message": "Hopefully, Jorral will be able to return them.", + "examine": "Notes on how to use the enchanted key.", + "durability": null, + "name": "Enchanted key notes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13569", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Useful for mixing things.", + "grand_exchange_price": "106", + "durability": null, + "name": "Bowl", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13570", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "It's a bucket of milk.", + "grand_exchange_price": "177", + "durability": null, + "name": "Bucket of milk", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13571", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A fresh herb.", + "grand_exchange_price": "595", + "durability": null, + "name": "Clean guam", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13572", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to start again from stratch.", + "examine": "A bowlful of bees' precious product.", + "durability": null, + "name": "Bowl of honey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13573", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to start again from stratch.", + "examine": "A bowlful of milk and honey.", + "durability": null, + "name": "Bowl of milk and honey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13574", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to start again from stratch.", + "examine": "A bowl full of milk, honey and guam.", + "durability": null, + "name": "Bowl of milk, honey and guam", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13575", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Hopefully, the family has more papyrus and charcoal.", + "examine": "Your best impression of a map of RuneScape.", + "durability": null, + "name": "Map of runescape", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13576", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Used for making notes.", + "grand_exchange_price": "290", + "durability": null, + "name": "Papyrus", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13577", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A lump of charcoal.", + "grand_exchange_price": "296", + "durability": null, + "name": "Charcoal", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13578", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A slightly muddy spade. ", + "grand_exchange_price": "130", + "durability": null, + "name": "Spade", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13579", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A plant pot filled with soil.", + "durability": null, + "name": "Plant pot", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13580", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Pear tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13581", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Mango tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13582", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Quince tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13583", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Lemon tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13584", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Avocado tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13585", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Plum tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13586", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "4", + "examine": "I can grind things for potions in this.", + "grand_exchange_price": "169", + "durability": null, + "name": "Pestle and mortar", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13587", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "One of the ingredients for making fish food.", + "grand_exchange_price": "5", + "durability": null, + "name": "Ground guam", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13588", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2", + "examine": "It's an empty bucket. ", + "grand_exchange_price": "39", + "durability": null, + "name": "Bucket", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13589", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "It seems to change temperature as I walk. (Making History)", + "durability": null, + "name": "Enchanted key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13591", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Hopefully, you can find another.", + "examine": "Some ladies jewellery.", + "durability": null, + "name": "A brooch", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13592", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will not get another chance to read the book!", + "examine": "It's falling apart, but full of knowledge.", + "durability": null, + "name": "Old tome", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13593", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Runecrafting guild teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13598", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Air altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13599", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Mind altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13600", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Water altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13601", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Earth altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13602", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Fire altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13603", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Body altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13604", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Cosmic altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13605", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Chaos altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13606", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Nature altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13607", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Law altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13608", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Death altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13609", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Blood altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13610", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Astral altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13611", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13612", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13613", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "75", + "examine": "Heavy duty wizard robes.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Runecrafter robe", + "archery_ticket_price": "0", + "id": "13614", + "bonuses": "0,0,0,5,0,5,5,5,5,5,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13615", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13616", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "A heavy-duty wizard robe.", + "durability": null, + "name": "Runecrafter skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13617", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,4,4,4,4,4,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Essence can be rough on the hands", + "durability": null, + "name": "Runecrafter gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13618", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "75", + "examine": "Heavy duty wizard robes.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Runecrafter robe", + "archery_ticket_price": "0", + "id": "13619", + "bonuses": "0,0,0,5,0,5,5,5,5,5,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13620", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13621", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "A heavy-duty wizard robe.", + "durability": null, + "name": "Runecrafter skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13622", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,4,4,4,4,4,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Essence can be rough on the hands", + "durability": null, + "name": "Runecrafter gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13623", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "75", + "examine": "Heavy duty wizard robes.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Runecrafter robe", + "archery_ticket_price": "0", + "id": "13624", + "bonuses": "0,0,0,5,0,5,5,5,5,5,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13625", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13626", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "A heavy-duty wizard robe.", + "durability": null, + "name": "Runecrafter skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13627", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,4,4,4,4,4,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Essence can be rough on the hands", + "durability": null, + "name": "Runecrafter gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13628", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Drop", + "shop_price": "15", + "examine": "Staff with a holder for a talisman on top.", + "durability": null, + "name": "Runecrafting staff", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "13629", + "absorb": "0,0,0", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0", + "render_anim": "28" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Air talisman staff", + "archery_ticket_price": "0", + "id": "13630", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Mind talisman staff", + "archery_ticket_price": "0", + "id": "13631", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Water talisman staff", + "archery_ticket_price": "0", + "id": "13632", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Earth talisman staff", + "archery_ticket_price": "0", + "id": "13633", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Fire talisman staff", + "archery_ticket_price": "0", + "id": "13634", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Body talisman staff", + "archery_ticket_price": "0", + "id": "13635", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Cosmic talisman staff", + "archery_ticket_price": "0", + "id": "13636", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Chaos talisman staff", + "archery_ticket_price": "0", + "id": "13637", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "No", + "name": "Nature talisman staff", + "archery_ticket_price": "0", + "id": "13638", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Law talisman staff", + "archery_ticket_price": "0", + "id": "13639", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Death talisman staff", + "archery_ticket_price": "0", + "id": "13640", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Blood talisman staff", + "archery_ticket_price": "0", + "id": "13641", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You will have to speak to Wizard Elriss to get another omni-talisman.", + "name": "Omni-talisman staff", + "archery_ticket_price": "0", + "id": "13642", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "20", + "examine": "Attracts Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Yellow attractor", + "archery_ticket_price": "0", + "id": "13643", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Repels Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Yellow repeller", + "archery_ticket_price": "0", + "id": "13644", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Attracts Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Green attractor", + "archery_ticket_price": "0", + "id": "13645", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Repels Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Green repeller", + "archery_ticket_price": "0", + "id": "13646", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "It creates barriers.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Green barrier generator", + "archery_ticket_price": "0", + "id": "13647", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "It creates barriers.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Yellow barrier generator", + "archery_ticket_price": "0", + "id": "13648", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will have to speak to ", + "shop_price": "4", + "examine": "Many mysterious powers emanate from the talisman.", + "durability": null, + "name": "Omni-talisman", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13649", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13650", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13651", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13652", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13653", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13654", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will have to speak to Wizard Elriss to get another omni-talisman.", + "shop_price": "100", + "examine": "A tiara infused with the properties of all talismans.", + "durability": null, + "name": "Omni-tiara", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13655", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13656", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13657", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13658", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "100", + "examine": "It burns, burns, burns...", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "12", + "destroy_message": "To get another Ring of Fire, you need to keep six beacons alight simultaneously and then talk to King Roald.", + "name": "Ring of fire", + "archery_ticket_price": "0", + "id": "13659", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "point_price": "50" + }, + { + "destroy_message": "To get another pair of Flame Gloves, you need to keep ten beacons alight simultaneously and then talk to King Roald.", + "shop_price": "200", + "examine": "The hottest gloves in town.", + "durability": null, + "name": "Flame gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13660", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "300", + "examine": "Danger: risk of fire.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "1096", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "destroy_message": "To get another Inferno Adze, you need to keep all fourteen beacons alight simultaneously and then talk to King Roald.", + "name": "Inferno adze", + "archery_ticket_price": "0", + "id": "13661", + "bonuses": "10,9,7,0,0,0,1,0,0,0,0,11,0,0,0", + "point_price": "75" + }, + { + "durability": null, + "name": "Fire beacon", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13662", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The ticket says: Tearing this ticket will make you leave the circus. Choose wisely.", + "shop_price": "10", + "examine": "Tear ticket to exit the circus.", + "durability": null, + "name": "Circus ticket", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13663", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "10", + "examine": "Let's give them a big hand!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "326", + "equipment_slot": "3", + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "name": "Giant's hand", + "archery_ticket_price": "0", + "id": "13666", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "A clown hat!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Clown hat", + "archery_ticket_price": "0", + "id": "13667", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10", + "examine": "Buttoning this up is tricky.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "remove_sleeves": "true", + "name": "Clown shirt", + "archery_ticket_price": "0", + "id": "13668", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "These are my funny pants.", + "durability": null, + "name": "Clown leggings", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13669", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "For helping clowns stay upright.", + "durability": null, + "name": "Clown shoes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13670", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "examine": "For making a happy noise.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "8", + "absorb": "0,0,0", + "render_anim": "327", + "equipment_slot": "3", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Tambourine", + "archery_ticket_price": "0", + "id": "13671", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "shop_price": "10", + "examine": "Very stylish.", + "durability": null, + "name": "Ringmaster hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13672", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "10", + "examine": "Fits nicely.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "remove_sleeves": "true", + "name": "Ringmaster shirt", + "archery_ticket_price": "0", + "id": "13673", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "shop_price": "10", + "examine": "Very stylish.", + "durability": null, + "name": "Ringmaster pants", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13674", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "shop_price": "10", + "examine": "Shiny.", + "durability": null, + "name": "Ringmaster boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13675", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "examine": "For shouting at people.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "8", + "absorb": "0,0,0", + "render_anim": "328", + "equipment_slot": "3", + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "name": "Mega-phonus", + "archery_ticket_price": "0", + "id": "13676", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10", + "examine": "Stretchy.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "remove_sleeves": "true", + "name": "Acrobat shirt", + "archery_ticket_price": "0", + "id": "13677", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very tight fitting.", + "durability": null, + "name": "Acrobat pants", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13678", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "These keep your feet off the floor.", + "durability": null, + "name": "Acrobat shoes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13679", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Oh no, I'm bald! Just kidding.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Acrobat hood", + "archery_ticket_price": "0", + "id": "13680", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10", + "examine": "Stretchy.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "remove_sleeves": "true", + "name": "Acrobat shirt", + "archery_ticket_price": "0", + "id": "13681", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very tight fitting.", + "durability": null, + "name": "Acrobat pants", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13682", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "These keep your feet off the floor.", + "durability": null, + "name": "Acrobat shoes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13683", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Oh no, I'm bald! Just kidding.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Acrobat hood", + "archery_ticket_price": "0", + "id": "13684", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "name": "A stylish hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13685", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "name": "A stylish hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13686", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "name": "A stylish hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13687", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "A stylish hat", + "archery_ticket_price": "0", + "id": "13688", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "A stylish hat", + "archery_ticket_price": "0", + "id": "13689", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "A stylish hat", + "archery_ticket_price": "0", + "id": "13690", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13691", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13692", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13693", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13694", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13695", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13696", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "10", + "durability": null, + "name": "Leggings", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13697", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Leggings", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13698", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Leggings", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13699", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Skirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13700", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Skirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13701", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Skirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13702", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13703", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13704", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13705", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13706", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You can get another Tightrope 101 by speaking to the Agility assistant.", + "examine": "Shows you the moves you need to succeed!", + "durability": null, + "name": "Tightrope 101", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13707", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another Tightrope 101 by speaking to the Agility assistant.", + "examine": "Shows you the moves you need to succeed!", + "durability": null, + "name": "Tightrope 101", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13708" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 10 is advised when juggling these.", + "durability": null, + "name": "Balls (level 10 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13709", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 20 is advised when juggling these.", + "durability": null, + "name": "Plates (level 20 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13710", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 30 is advised when juggling these.", + "durability": null, + "name": "Eggs (level 30 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13711", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 40 is advised when juggling these.", + "durability": null, + "name": "Knives (level 40 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13712", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 50 is advised when juggling these.", + "durability": null, + "name": "Spades (level 50 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13713", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 60 is advised when juggling these.", + "durability": null, + "name": "Tuna (level 60 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13714", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 70 is advised when juggling these.", + "durability": null, + "name": "Soap (level 70 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13715", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 80 is advised when juggling these.", + "durability": null, + "name": "Cannon balls (level 80 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13716", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 90 is advised when juggling these.", + "durability": null, + "name": "Torches (level 90 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13717", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 99 is advised when juggling these.", + "durability": null, + "name": "Chinchompas (level 99 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13718", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "50", + "examine": "Short, but effective.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "176", + "equipment_slot": "3", + "destroy_message": "You can get another one from the equipment box for this performance.", + "name": "Performance shortbow", + "archery_ticket_price": "0", + "id": "13719", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "14", + "examine": "A finely balanced throwing knife.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "You can get another one from the equipment box for this performance.", + "name": "Performance knife", + "archery_ticket_price": "0", + "id": "13720", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "4", + "examine": "A finely balanced throwing axe.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "You can get another one from the equipment box for this performance.", + "name": "Performance throwing axe", + "archery_ticket_price": "0", + "id": "13721", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "7", + "examine": "Arrows with bronze heads.", + "durability": null, + "name": "Performance arrow", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13722", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "13" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Teleport spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13723", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Levitation spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13724", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Alchemy spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13725", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Elemental spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13726", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can mine more if you find another crashed star.", + "shop_price": "50", + "examine": "Small, shiny bits of rock.", + "durability": null, + "name": "Stardust", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13727", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak with Larry/Chuck at Ardougne Zoo to get another.", + "examine": "Notes on the locations of penguin spies.", + "durability": null, + "name": "Spy notebook", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13732", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,40}-{5,55}", + "shop_price": "70000", + "examine": "An ethereal shield.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "39982", + "name": "Spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13734", + "bonuses": "0,0,0,0,0,39,41,50,1,45,40,0,1,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "70000", + "examine": "An ethereal shield.", + "grand_exchange_price": "39982", + "durability": null, + "name": "Spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13735" + }, + { + "requirements": "{1,70}-{5,60}", + "shop_price": "1400000", + "examine": "An ethereal shield that has been blessed with holy powers.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "936814", + "name": "Blessed spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13736", + "bonuses": "0,0,0,0,0,53,55,73,2,52,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1400000", + "examine": "An ethereal shield that has been blessed with holy powers.", + "grand_exchange_price": "936814", + "durability": null, + "name": "Blessed spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13737" + }, + { + "requirements": "{1,75}-{6,65}-{5,70}", + "shop_price": "2000000", + "examine": "An ethereal shield with an arcane sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "15076199", + "name": "Arcane spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13738", + "bonuses": "0,0,0,20,0,53,55,73,2,52,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with an arcane sigil attached to it.", + "grand_exchange_price": "15076199", + "durability": null, + "name": "Arcane spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13739" + }, + { + "requirements": "{1,75}-{5,75}", + "shop_price": "2000000", + "examine": "An ethereal shield with a divine sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "40003587", + "name": "Divine spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13740", + "bonuses": "0,0,0,0,0,63,65,75,2,57,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with a divine sigil attached to it.", + "grand_exchange_price": "40003587", + "durability": null, + "name": "Divine spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13741" + }, + { + "requirements": "{1,75}-{5,75}", + "shop_price": "2000000", + "examine": "An ethereal shield with an elysian sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "28420591", + "name": "Elysian spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13742", + "bonuses": "0,0,0,0,0,63,65,75,2,57,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with an elysian sigil attached to it.", + "grand_exchange_price": "28420591", + "durability": null, + "name": "Elysian spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13743" + }, + { + "requirements": "{1,75}-{5,70}-{6,65}", + "shop_price": "2000000", + "examine": "An ethereal shield with a spectral sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "3616112", + "name": "Spectral spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13744", + "bonuses": "0,0,0,0,0,53,55,73,30,52,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with a spectral sigil attached to it.", + "grand_exchange_price": "3616112", + "durability": null, + "name": "Spectral spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13745" + }, + { + "shop_price": "750000", + "examine": "A sigil in the shape of an arcane rune.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "19508553", + "name": "Arcane sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13746", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil in the shape of an arcane rune.", + "grand_exchange_price": "19508553", + "durability": null, + "name": "Arcane sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13747" + }, + { + "shop_price": "750000", + "examine": "A sigil in the shape of a divine symbol.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "53026134", + "name": "Divine sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13748", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil in the shape of a divine symbol.", + "grand_exchange_price": "53026134", + "durability": null, + "name": "Divine sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13749" + }, + { + "shop_price": "750000", + "examine": "A sigil marked with elysian signs.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "36159098", + "name": "Elysian sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13750", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil marked with elysian signs.", + "grand_exchange_price": "36159098", + "durability": null, + "name": "Elysian sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13751" + }, + { + "shop_price": "750000", + "examine": "A sigil tempered with spectral powers.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "3116720", + "name": "Spectral sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13752", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil tempered with spectral powers.", + "grand_exchange_price": "3116720", + "durability": null, + "name": "Spectral sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13753" + }, + { + "shop_price": "750000", + "examine": "A bottle of holy elixir.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "950904", + "name": "Holy elixir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13754", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A bottle of holy elixir.", + "grand_exchange_price": "950904", + "durability": null, + "name": "Holy elixir", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13755" + }, + { + "destroy_message": "Drop", + "shop_price": "40", + "examine": "Logs cut from cursed willow roots.", + "durability": null, + "name": "Cursed willow logs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13756", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "A loyal scout of Varrock.", + "durability": null, + "name": "Hartwin", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13757", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to keep searching trees near the zombie trails until you find another.", + "examine": "A key that was found while tracking zombies. (Defender of Varrock)", + "durability": null, + "name": "Grubby key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13758", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to speak to Thurgo to find another.", + "shop_price": "1", + "examine": "The location of ", + "durability": null, + "name": "Scrap of paper", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13759", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Bottle", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13760", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A bottle of red mist.", + "durability": null, + "name": "Bottle of mist", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13761", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another from ", + "examine": "This lists each of the founding members of the ", + "durability": null, + "name": "List of elders", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13762", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "I hope I don't meet any roundheads...", + "durability": null, + "name": "Cavalier and mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13763", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A right hand fighting claw.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "absorb": "0,0,0", + "equip_audio": "1003", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "6535", + "name": "Rune claws", + "archery_ticket_price": "0", + "id": "13764", + "bonuses": "26,38,-4,0,0,10,19,5,0,0,0,39,0,0,0" + }, + { + "examine": "A powerful dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "4381", + "name": "Rune dagger", + "archery_ticket_price": "0", + "id": "13765", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Rune dagger(p)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13766", + "absorb": "0,0,0", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Rune dagger(p+)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13767", + "absorb": "0,0,0", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Rune dagger(p++)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13768", + "absorb": "0,0,0", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "examine": "A rune tipped spear.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "11317", + "name": "Rune spear", + "archery_ticket_price": "0", + "id": "13769", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "examine": "A dragon tipped spear.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "36774", + "name": "Dragon spear", + "archery_ticket_price": "0", + "id": "13770", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "destroy_message": "Drop", + "name": "Rune spear(p)", + "archery_ticket_price": "0", + "id": "13771", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "name": "Dragon spear(p)", + "archery_ticket_price": "0", + "id": "13772", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "destroy_message": "Drop", + "name": "Rune spear(p+)", + "archery_ticket_price": "0", + "id": "13773", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "name": "Dragon spear(p+)", + "archery_ticket_price": "0", + "id": "13774", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "destroy_message": "Drop", + "name": "Rune spear(p++)", + "archery_ticket_price": "0", + "id": "13775", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "name": "Dragon spear(p++)", + "archery_ticket_price": "0", + "id": "13776", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "examine": "A razor-sharp sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1381", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "11849", + "name": "Rune sword", + "archery_ticket_price": "0", + "id": "13777", + "bonuses": "38,26,-2,0,0,0,2,1,0,0,0,39,0,0,0" + }, + { + "examine": "A two handed sword.", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "124", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "37511", + "name": "Rune 2h sword", + "archery_ticket_price": "0", + "id": "13778", + "bonuses": "-4,69,50,-4,0,0,0,0,0,-1,0,70,0,0,0" + }, + { + "examine": "A rune halberd.", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "15", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "74298", + "name": "Rune halberd", + "archery_ticket_price": "0", + "id": "13779", + "bonuses": "48,67,0,-4,0,-1,4,5,0,0,0,68,0,0,0" + }, + { + "examine": "A spiky mace.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "7917", + "name": "Rune mace", + "archery_ticket_price": "0", + "id": "13780", + "bonuses": "20,-2,39,0,0,0,0,0,0,0,0,36,0,4,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "29145", + "durability": null, + "name": "Rune chainbody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13781", + "absorb": "3,0,6", + "bonuses": "0,0,0,-15,0,63,72,78,-3,65,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These will protect my feet.", + "grand_exchange_price": "7036", + "durability": null, + "name": "Rune boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13782", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,12,13,14,0,0,10,2,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A medium sized helmet.", + "grand_exchange_price": "10678", + "durability": null, + "name": "Rune med helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13783", + "absorb": "1,0,3", + "bonuses": "0,0,0,-3,-1,22,23,21,-1,22,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A stone helmet.", + "grand_exchange_price": "26576", + "durability": null, + "name": "Granite helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13784", + "absorb": "2,0,4", + "bonuses": "0,0,0,-9,-7,31,33,29,-1,39,9,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides excellent protection.", + "grand_exchange_price": "136414", + "durability": null, + "name": "Granite body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13785", + "absorb": "4,0,8", + "bonuses": "0,0,0,-22,-5,87,84,79,-6,97,45,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These look pretty heavy.", + "grand_exchange_price": "72213", + "durability": null, + "name": "Granite legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13786", + "absorb": "2,0,5", + "bonuses": "0,0,0,-31,-18,43,45,41,-4,68,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A medium square shield.", + "grand_exchange_price": "22225", + "durability": null, + "name": "Rune sq shield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13787", + "absorb": "3,0,7", + "bonuses": "0,0,0,-6,-2,38,40,36,0,38,35,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A solid stone shield.", + "grand_exchange_price": "32512", + "durability": null, + "name": "Granite shield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13788", + "absorb": "5,0,10", + "bonuses": "0,0,0,-12,-8,40,42,38,0,65,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A big 'do about nothing.", + "grand_exchange_price": "42991", + "durability": null, + "name": "A powdered wig", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13789", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These'll help me stay alive.", + "grand_exchange_price": "811293", + "durability": null, + "name": "Flared trousers", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13790", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Alas, someone has slashed my pantaloons.", + "grand_exchange_price": "19286", + "durability": null, + "name": "Pantaloons", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13791", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A cap for wearing whil...zzzzzzzzz", + "grand_exchange_price": "75357", + "durability": null, + "name": "Sleeping cap", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13792", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A diamond-topped cane.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "76692", + "name": "Rune cane", + "archery_ticket_price": "0", + "id": "13793", + "bonuses": "0,-2,39,0,0,0,0,0,0,0,0,36,0,4,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Comes with a free rabbit!", + "grand_exchange_price": "333537", + "durability": null, + "name": "Top hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13794", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Shear elegance.", + "grand_exchange_price": "582969", + "durability": null, + "name": "Sheep mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13795", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "I can get the look right, but can I do the waddle too?", + "grand_exchange_price": "1159807", + "durability": null, + "name": "Penguin mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13796", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The bats have left the belltower.", + "grand_exchange_price": "681595", + "durability": null, + "name": "Bat mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13797", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "It's the year of the cat!", + "grand_exchange_price": "2512014", + "durability": null, + "name": "Cat mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13798", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "I'm hungry like the wolf.", + "grand_exchange_price": "3240770", + "durability": null, + "name": "Wolf mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13799", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody with gold trim.", + "grand_exchange_price": "343688", + "durability": null, + "name": "Rune platebody (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13800", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "drop", + "examine": "Rune platelegs with gold trim.", + "grand_exchange_price": "238139", + "durability": null, + "name": "Rune platelegs (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13801", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt with gold trim.", + "grand_exchange_price": "37616", + "durability": null, + "name": "Rune plateskirt (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13802", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet with gold trim.", + "grand_exchange_price": "247877", + "durability": null, + "name": "Rune full helm(g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13803", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield with gold trim", + "grand_exchange_price": "118205", + "durability": null, + "name": "Rune kiteshield (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13804", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody with trim.", + "grand_exchange_price": "100586", + "durability": null, + "name": "Rune platebody (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13805", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs with trim!", + "grand_exchange_price": "81577", + "durability": null, + "name": "Rune platelegs (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13806", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt with trim.", + "grand_exchange_price": "37701", + "durability": null, + "name": "Rune plateskirt (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13807", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet with trim.", + "grand_exchange_price": "95809", + "durability": null, + "name": "Rune full helm (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13808", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A large, metal shield with a nice trim.", + "grand_exchange_price": "46469", + "durability": null, + "name": "Rune kiteshield (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13809", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Your money or your life!", + "grand_exchange_price": "252995", + "durability": null, + "name": "Highwayman mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13810", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Parlez-vous francais?", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "135411", + "name": "Blue beret", + "archery_ticket_price": "0", + "hat": true, + "id": "13811", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Parlez-vous francais?", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "451371", + "name": "Black beret", + "archery_ticket_price": "0", + "hat": true, + "id": "13812", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Parlez-vous Francais?", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "704147", + "name": "White beret", + "archery_ticket_price": "0", + "hat": true, + "id": "13813", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "All for one and one for all!", + "grand_exchange_price": "42014", + "durability": null, + "name": "Tan cavalier", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13814", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "All for one and one for all!", + "grand_exchange_price": "61518", + "durability": null, + "name": "Dark cavalier", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13815", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "All for one and one for all!", + "grand_exchange_price": "338530", + "durability": null, + "name": "Black cavalier", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13816", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A minimalist's hat.", + "grand_exchange_price": "159694", + "durability": null, + "name": "Red headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13817", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A minimalist's hat.", + "grand_exchange_price": "83543", + "durability": null, + "name": "Black headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13818", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A minimalist's hat.", + "grand_exchange_price": "26474", + "durability": null, + "name": "Brown headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13819", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody in the colours of Zamorak.", + "grand_exchange_price": "868398", + "durability": null, + "name": "Zamorak platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13820", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs in the colours of Zamorak.", + "grand_exchange_price": "316989", + "durability": null, + "name": "Zamorak platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13821", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt in the colours of Zamorak.", + "grand_exchange_price": "38597", + "durability": null, + "name": "Zamorak plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13822", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A full helmet in the colours of Zamorak.", + "grand_exchange_price": "618480", + "durability": null, + "name": "Zamorak full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13823", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A Rune kiteshield in the colours of Zamorak.", + "grand_exchange_price": "225574", + "durability": null, + "name": "Zamorak kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13824", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody in the colours of Saradomin.", + "grand_exchange_price": "1555099", + "durability": null, + "name": "Saradomin platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13825", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs in the colours of Saradomin.", + "grand_exchange_price": "376849", + "durability": null, + "name": "Saradomin platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13826", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt in the colours of Saradomin.", + "grand_exchange_price": "53048", + "durability": null, + "name": "Saradomin plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13827", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet in the colours of Saradomin.", + "grand_exchange_price": "1025974", + "durability": null, + "name": "Saradomin full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13828", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield in the colours of Saradomin.", + "grand_exchange_price": "353916", + "durability": null, + "name": "Saradomin kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13829", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody in the colours of Guthix.", + "grand_exchange_price": "406762", + "durability": null, + "name": "Guthix platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13830", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs in the colours of Guthix.", + "grand_exchange_price": "181471", + "durability": null, + "name": "Guthix platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13831", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt in the colours of Guthix.", + "grand_exchange_price": "38388", + "durability": null, + "name": "Guthix plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13832", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A rune full helmet in the colours of Guthix.", + "grand_exchange_price": "399963", + "durability": null, + "name": "Guthix full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13833", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield in the colours of Guthix.", + "grand_exchange_price": "185266", + "durability": null, + "name": "Guthix kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13834", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody with complete gold trim & plating.", + "grand_exchange_price": "2034838", + "durability": null, + "name": "Gilded platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13835", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs with gold plate.", + "grand_exchange_price": "1299758", + "durability": null, + "name": "Gilded platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13836", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt with gold plate.", + "grand_exchange_price": "84191", + "durability": null, + "name": "Gilded plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13837", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet with gold plate.", + "grand_exchange_price": "1057068", + "durability": null, + "name": "Gilded full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13838", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield with gold plate.", + "grand_exchange_price": "506093", + "durability": null, + "name": "Gilded kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13839", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,45,0,0,0,0" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Atk, Def, Str and LP xp.", + "durability": null, + "name": "Brawling gloves (melee)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13845", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Ranged xp.", + "durability": null, + "name": "Brawling gloves (ranged)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13846", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Magic xp.", + "durability": null, + "name": "Brawling gloves (magic)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13847", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Prayer xp.", + "durability": null, + "name": "Brawling gloves (prayer)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13848", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Agility xp.", + "durability": null, + "name": "Brawling gloves (agility)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13849", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Woodcutting xp.", + "durability": null, + "name": "Brawling gloves (wc)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13850", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Firemaking xp.", + "durability": null, + "name": "Brawling gloves (fm)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13851", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Mining xp.", + "durability": null, + "name": "Brawling gloves (mining)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13852", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Hunting xp.", + "durability": null, + "name": "Brawling gloves (hunter)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13853", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Thieving xp.", + "durability": null, + "name": "Brawling gloves (thieving)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13854", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Smithing xp.", + "durability": null, + "name": "Brawling gloves (smithing)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13855", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Fishing xp.", + "durability": null, + "name": "Brawling gloves (fishing)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13856", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Cooking xp.", + "durability": null, + "name": "Brawling gloves (cooking)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13857", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1412812", + "name": "Zuriel's robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13858", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1412812", + "durability": null, + "name": "Zuriel's robe top", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13859" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1412812", + "name": "Zuriel's robe top (deg)", + "archery_ticket_price": "0", + "id": "13860", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "986668", + "name": "Zuriel's robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13861", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "986668", + "durability": null, + "name": "Zuriel's robe bottom", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13862" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "986668", + "name": "Zuriel's robe bottom (deg)", + "archery_ticket_price": "0", + "id": "13863", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "361542", + "name": "Zuriel's hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13864", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "361542", + "durability": null, + "name": "Zuriel's hood", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13865" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "150000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "361542", + "name": "Zuriel's hood (deg)", + "archery_ticket_price": "0", + "id": "13866", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "destroy_message": "Drop", + "grand_exchange_price": "2116989", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13867", + "stand_turn_anim": "1209", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10", + "requirements": "{6,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Zuriel's staff" + }, + { + "destroy_message": "Drop", + "requirements": "{6,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "2116989", + "durability": null, + "name": "Zuriel's staff", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13868" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "destroy_message": "Drop", + "grand_exchange_price": "2116989", + "stand_anim": "813", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13869", + "stand_turn_anim": "1209", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10", + "shop_price": "300000", + "durability": null, + "destroy": "true", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Zuriel's staff (deg)" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "926341", + "name": "Morrigan's leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13870", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "926341", + "durability": null, + "name": "Morrigan's leather body", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13871" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "926341", + "name": "Morrigan's leather body (deg)", + "archery_ticket_price": "0", + "id": "13872", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop, Destroy after degrading.", + "grand_exchange_price": "510395", + "name": "Morrigan's leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13873", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "destroy_message": "Drop, Destroy after degrading.", + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "510395", + "durability": null, + "name": "Morrigan's leather chaps", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13874" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop, Destroy after degrading.", + "grand_exchange_price": "510395", + "name": "Morrigan's leather chaps (deg)", + "archery_ticket_price": "0", + "id": "13875", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "236411", + "name": "Morrigan's coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13876", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "236411", + "durability": null, + "name": "Morrigan's coif", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13877" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "150000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "236411", + "name": "Morrigan's coif (deg)", + "archery_ticket_price": "0", + "id": "13878", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "requirements": "{4,78}", + "shop_price": "4000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13879", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13880", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13881", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13882", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "4000", + "examine": "A vicious throwing axe.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "5", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "9994", + "name": "Morrigan's throwing axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13883", + "bonuses": "0,0,0,0,93,0,0,0,0,0,0,0,0,0,117" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1619096", + "name": "Statius's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13884", + "bonuses": "5,5,7,-30,-10,154,145,121,-6,157,60,5,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1619096", + "durability": null, + "name": "Statius's platebody", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13885" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1619096", + "name": "Statius's platebody (deg)", + "archery_ticket_price": "0", + "id": "13886", + "bonuses": "5,5,7,-30,-10,154,145,121,-6,157,60,5,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop, Destroy once it has been degraded.", + "remove_sleeves": "true", + "grand_exchange_price": "2154168", + "name": "Vesta's chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13887", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "destroy_message": "Drop, Destroy once it has been degraded.", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "2154168", + "durability": null, + "name": "Vesta's chainbody", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13888" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop, Destroy once it has been degraded.", + "remove_sleeves": "true", + "grand_exchange_price": "2154168", + "name": "Vesta's chainbody (deg)", + "archery_ticket_price": "0", + "id": "13889", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1735029", + "name": "Statius's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13890", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1735029", + "durability": null, + "name": "Statius's platelegs", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13891" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1735029", + "name": "Statius's platelegs (deg)", + "archery_ticket_price": "0", + "id": "13892", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1860767", + "name": "Vesta's plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13893", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1860767", + "durability": null, + "name": "Vesta's plateskirt", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13894" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1860767", + "name": "Vesta's plateskirt (deg)", + "archery_ticket_price": "0", + "id": "13895", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1301986", + "name": "Statius's full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13896", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1301986", + "durability": null, + "name": "Statius's full helm", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13897" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "150000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1301986", + "name": "Statius' full helm (deg)", + "archery_ticket_price": "0", + "id": "13898", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "10464249", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13899", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weapon_interface": "5", + "render_anim": "1426", + "attack_audios": "2500,2500,2517,2500", + "name": "Vesta's longsword" + }, + { + "destroy_message": "Drop", + "requirements": "{0,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "10464249", + "durability": null, + "name": "Vesta's longsword", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13900" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "10464249", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13901", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "true", + "weapon_interface": "5", + "render_anim": "1426", + "attack_audios": "2500,2500,2517,2500", + "name": "Vesta's longsword (deg)" + }, + { + "turn90cw_anim": "821", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "destroy_message": "Drop, Destroy once it has been degraded.", + "grand_exchange_price": "7424450", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13902", + "stand_turn_anim": "823", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,114,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weapon_interface": "10", + "attack_audios": "2504,0,0,0", + "name": "Statius's warhammer" + }, + { + "destroy_message": "Drop, Destroy once it has been degraded.", + "requirements": "{0,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "7424450", + "durability": null, + "name": "Statius's warhammer", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13903" + }, + { + "turn90cw_anim": "821", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "destroy_message": "Drop, Destroy once it has been degraded.", + "grand_exchange_price": "7424450", + "stand_anim": "808", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13904", + "stand_turn_anim": "823", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,114,0,0,0", + "shop_price": "300000", + "durability": null, + "destroy": "true", + "weapon_interface": "10", + "render_anim": "1426", + "attack_audios": "2504,0,0,0", + "name": "Statius' warhammer (deg)" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "5264612", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13905", + "stand_turn_anim": "1209", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,122,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weight": "4.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Vesta's spear" + }, + { + "requirements": "{0,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "two_handed": "true", + "destroy_message": "Drop", + "grand_exchange_price": "5264612", + "name": "Vesta's spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13906" + }, + { + "requirements": "{0,78}", + "shop_price": "180000", + "examine": "This item degrades in combat, and will turn to dust.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "5264612", + "name": "Vesta's spear (deg)", + "archery_ticket_price": "0", + "id": "13907", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,122,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1897306", + "name": "Corrupt statius's platebody", + "archery_ticket_price": "0", + "id": "13908", + "bonuses": "5,5,7,-10,-30,154,145,121,-6,157,60,5,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1897306", + "durability": null, + "name": "Corrupt statius's platebody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13909" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1897306", + "name": "Corrupt statius's platebody (deg)", + "archery_ticket_price": "0", + "id": "13910", + "bonuses": "5,5,7,-10,-30,154,145,121,-6,157,60,5,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "2546175", + "name": "Corrupt vesta's chainbody", + "archery_ticket_price": "0", + "id": "13911", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "2546175", + "durability": null, + "name": "Corrupt vesta's chainbody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13912" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "2546175", + "name": "Corrupt vesta's chainbody (deg)", + "archery_ticket_price": "0", + "id": "13913", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1734527", + "name": "Corrupt statius's platelegs", + "archery_ticket_price": "0", + "id": "13914", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1734527", + "durability": null, + "name": "Corrupt statius's platelegs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13915" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1734527", + "name": "Corrupt statius's platelegs (deg)", + "archery_ticket_price": "0", + "id": "13916", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1942627", + "name": "Corrupt vesta's plateskirt", + "archery_ticket_price": "0", + "id": "13917", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1942627", + "durability": null, + "name": "Corrupt vesta's plateskirt", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13918" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1942627", + "name": "Corrupt vesta's plateskirt (deg)", + "archery_ticket_price": "0", + "id": "13919", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1062835", + "name": "Corrupt statius's full helm", + "archery_ticket_price": "0", + "id": "13920", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1062835", + "durability": null, + "name": "Corrupt statius's full helm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13921" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1062835", + "name": "Corrupt statius' full helm (deg)", + "archery_ticket_price": "0", + "id": "13922", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "turn90cw_anim": "1207", + "examine": "This item degrades while worn, and will turn to dust.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "3739998", + "name": "Corrupt vesta's longsword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13923", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "turn90cw_anim": "1207", + "examine": "This item degrades while worn, and will turn to dust.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "render_anim": "1426", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "3739998", + "name": "Corrupt vesta's longsword", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13924", + "stand_turn_anim": "823" + }, + { + "requirements": "{0,78}", + "shop_price": "75000", + "turn90cw_anim": "1207", + "examine": "This item degrades while worn, and will turn to dust.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "render_anim": "1426", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "3739998", + "name": "C. vesta's longsword (deg)", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13925", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "3033516", + "attack_audios": "395,395,395,395", + "name": "Corrupt statius's warhammer", + "archery_ticket_price": "0", + "id": "13926", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,114,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "3033516", + "durability": null, + "name": "Corrupt statius's warhammer", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13927" + }, + { + "requirements": "{0,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "8", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "3033516", + "name": "C. statius's warhammer (deg)", + "archery_ticket_price": "0", + "id": "13928", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "343474", + "name": "Corrupt vesta's spear", + "archery_ticket_price": "0", + "id": "13929", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,0,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "destroy_message": "Drop", + "grand_exchange_price": "343474", + "name": "Corrupt vesta's spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13930" + }, + { + "requirements": "{0,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "343474", + "name": "Corrupt vesta's spear (deg)", + "archery_ticket_price": "0", + "id": "13931", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "253230", + "name": "Corrupt zuriel's robe top", + "archery_ticket_price": "0", + "id": "13932", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "253230", + "durability": null, + "name": "Corrupt zuriel's robe top", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13933" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "253230", + "name": "Corrupt zuriel's robe top (deg)", + "archery_ticket_price": "0", + "id": "13934", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "121290", + "name": "Corrupt zuriel's robe bottom", + "archery_ticket_price": "0", + "id": "13935", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "121290", + "durability": null, + "name": "Corrupt zuriel's robe bottom", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13936" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "121290", + "name": "Corrupt zuriel's robe bottom (deg)", + "archery_ticket_price": "0", + "id": "13937", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "43778", + "name": "Corrupt zuriel's hood", + "archery_ticket_price": "0", + "id": "13938", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "43778", + "durability": null, + "name": "Corrupt zuriel's hood", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13939" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "43778", + "name": "Corrupt zuriel's hood (deg)", + "archery_ticket_price": "0", + "id": "13940", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "requirements": "{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2555,0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "219418", + "attack_audios": "2555,0,0,0", + "name": "Corrupt zuriel's staff", + "archery_ticket_price": "0", + "id": "13941", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10" + }, + { + "destroy_message": "Drop", + "requirements": "{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "219418", + "durability": null, + "name": "Corrupt zuriel's staff", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13942" + }, + { + "requirements": "{6,78}", + "shop_price": "70000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "219418", + "name": "Corrupt zuriel's staff (deg)", + "archery_ticket_price": "0", + "id": "13943", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "387212", + "name": "Corrupt morrigan's leather body", + "archery_ticket_price": "0", + "id": "13944", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "387212", + "durability": null, + "name": "Corrupt morrigan's leather body", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13945" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "387212", + "name": "Corrupt morrigan's leather body (deg)", + "archery_ticket_price": "0", + "id": "13946", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "84592", + "name": "Corrupt morrigan's leather chaps", + "archery_ticket_price": "0", + "id": "13947", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "84592", + "durability": null, + "name": "Corrupt morrigan's leather chaps", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13948" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "84592", + "name": "Corrupt morrigan's leather chaps (deg)", + "archery_ticket_price": "0", + "id": "13949", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "63502", + "name": "Corrupt morrigan's coif", + "archery_ticket_price": "0", + "id": "13950", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "63502", + "durability": null, + "name": "Corrupt morrigan's coif", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13951" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "63502", + "name": "Corrupt morrigan's coif (deg)", + "archery_ticket_price": "0", + "id": "13952", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "requirements": "{4,78}", + "shop_price": "1000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "Corrupt morrigan's javelin", + "archery_ticket_price": "0", + "id": "13953", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "C. morrigan's javelin (p)", + "archery_ticket_price": "0", + "id": "13954", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "C. morrigan's javelin (p+)", + "archery_ticket_price": "0", + "id": "13955", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "C. morrigan's javelin (p++)", + "archery_ticket_price": "0", + "id": "13956", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "1000", + "examine": "A vicious throwing axe.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "5388", + "name": "C. morrigan's throwing axe", + "archery_ticket_price": "0", + "id": "13957", + "bonuses": "0,0,0,0,93,0,0,0,0,0,0,0,0,0,117" + }, + { + "requirements": "{0,78}-{4,78}", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "168278", + "name": "Corrupt dragon chainbody", + "archery_ticket_price": "0", + "id": "13958", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "168278", + "durability": null, + "name": "Corrupt dragon chainbody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13959" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "168278", + "name": "Corrupt dragon chainbody (deg)", + "archery_ticket_price": "0", + "id": "13960", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "2,0,4", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "121835", + "name": "Corrupt dragon med helm", + "archery_ticket_price": "0", + "id": "13961", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "121835", + "durability": null, + "name": "Corrupt dragon med helm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13962" + }, + { + "remove_head": "true", + "shop_price": "36000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "2,0,4", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "121835", + "name": "Corrupt dragon med helm (deg)", + "archery_ticket_price": "0", + "id": "13963", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "5,0,11", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "79703", + "name": "Corrupt dragon sq shield", + "archery_ticket_price": "0", + "id": "13964", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "79703", + "durability": null, + "name": "Corrupt dragon sq shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13965" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "5,0,11", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "79703", + "name": "Corrupt dragon sq shield (deg)", + "archery_ticket_price": "0", + "id": "13966", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Destroy", + "grand_exchange_price": "71066", + "name": "Corrupt dragon plateskirt", + "archery_ticket_price": "0", + "id": "13967", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "destroy_message": "Destroy", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "71066", + "durability": null, + "name": "Corrupt dragon plateskirt", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13968" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Destroy", + "grand_exchange_price": "71066", + "name": "Corrupt dragon plateskirt (deg)", + "archery_ticket_price": "0", + "id": "13969", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "87957", + "name": "Corrupt dragon platelegs", + "archery_ticket_price": "0", + "id": "13970", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "87957", + "durability": null, + "name": "Corrupt dragon platelegs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13971" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "87957", + "name": "Corrupt dragon platelegs (deg)", + "archery_ticket_price": "0", + "id": "13972", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "destroy_message": "Drop", + "grand_exchange_price": "332229", + "attack_audios": "2498,2498,2497,2498", + "name": "Corrupt dragon battleaxe", + "archery_ticket_price": "0", + "id": "13973", + "bonuses": "-2,70,65,0,0,0,0,0,-1,-1,0,85,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "4", + "render_anim": "2586", + "defence_anim": "397", + "attack_anims": "395,395,401,395", + "destroy_message": "Drop", + "grand_exchange_price": "332229", + "attack_audios": "2498,2498,2497,2498", + "name": "Corrupt dragon battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13974", + "bonuses": "-2,70,65,0,0,0,0,0,0,-1,0,85,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "destroy_message": "Drop", + "grand_exchange_price": "332229", + "attack_audios": "2498,2498,2497,2498", + "name": "C. dragon battleaxe (deg)", + "archery_ticket_price": "0", + "id": "13975", + "bonuses": "-2,70,65,0,0,0,0,0,-1,-1,0,85,0,0,0" + }, + { + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "grand_exchange_price": "33358", + "attack_audios": "2517,2517,2500,2517", + "name": "Corrupt dragon dagger", + "archery_ticket_price": "0", + "id": "13976", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "grand_exchange_price": "33358", + "attack_audios": "2517,2517,2500,2517", + "name": "Corrupt dragon dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13977" + }, + { + "shop_price": "18000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "grand_exchange_price": "33358", + "attack_audios": "2517,2517,2500,2517", + "name": "C. dragon dagger (deg)", + "archery_ticket_price": "0", + "id": "13978", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "100000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1928", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "338644", + "attack_audios": "2500,0,2517,0", + "name": "Corrupt dragon scimitar", + "archery_ticket_price": "0", + "id": "13979", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "338644", + "durability": null, + "name": "Corrupt dragon scimitar", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13980" + }, + { + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1928", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "338644", + "name": "C. dragon scimitar (deg)", + "archery_ticket_price": "0", + "id": "13981", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "100000", + "ge_buy_limit": "10", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "207053", + "attack_audios": "2500,2500,2517,2500", + "name": "Corrupt dragon longsword", + "archery_ticket_price": "0", + "id": "13982", + "bonuses": "58,69,-2,0,0,0,3,2,1,0,0,71,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "207053", + "durability": null, + "name": "Corrupt dragon longsword", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13983" + }, + { + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "207053", + "name": "C. dragon longsword (deg)", + "archery_ticket_price": "0", + "id": "13984", + "bonuses": "58,69,-2,0,0,0,3,2,1,0,0,71,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "50096", + "name": "Corrupt dragon mace", + "archery_ticket_price": "0", + "id": "13985", + "bonuses": "40,-2,60,1,0,0,0,0,0,0,0,55,0,5,0" + }, + { + "requirements": "{0,60}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "4", + "defence_anim": "397", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "50096", + "name": "Corrupt dragon mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13986" + }, + { + "requirements": "{0,60}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "50096", + "name": "Corrupt dragon mace (deg)", + "archery_ticket_price": "0", + "id": "13987", + "bonuses": "40,-2,60,1,0,0,0,0,0,0,0,55,0,5,0" + }, + { + "shop_price": "40000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "920922", + "name": "Corrupt dragon spear", + "archery_ticket_price": "0", + "id": "13988", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "40000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "920922", + "name": "Corrupt dragon spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13989" + }, + { + "shop_price": "24000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "920922", + "name": "Corrupt dragon spear (deg)", + "archery_ticket_price": "0", + "id": "13990", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "destroy_message": "You can get another copy by searching bookshelves around RuneScape.", + "shop_price": "5", + "examine": "A book about the Wilderness.", + "durability": null, + "name": "Pvp worlds manual", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14056", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "25", + "examine": "A threat to dusty corners everywhere.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "8", + "absorb": "0,0,0", + "render_anim": "1072", + "equipment_slot": "3", + "destroy_message": "You can obtain another by talking to Maggie the witch.", + "name": "Broomstick", + "archery_ticket_price": "0", + "id": "14057", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the goulash, it will be destroyed. You can get some more by dipping a bowl into Maggie's cauldron.", + "shop_price": "2", + "examine": "What a curious and ghoulish smell!", + "durability": null, + "name": "Goulash", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14058", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another flask of magic unguent from the chest in Betty's basement.", + "shop_price": "2", + "examine": "Purple and pungent.", + "durability": null, + "name": "Magic unguent", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14061", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another flask of broom ointment from Hetty in Rimmington.", + "shop_price": "2", + "examine": "To be used on brooms.", + "durability": null, + "name": "Broom ointment", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14062", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you release this newt, you can get another from the crate in Hetty's basement in Rimmington.", + "shop_price": "5", + "examine": "A newt from Hetty's basement.", + "durability": null, + "name": "Newt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14064", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another newt label from Gus in Hetty's basement in Rimmington.", + "shop_price": "1", + "examine": "A label for a shipping crate.", + "durability": null, + "name": "Newt label", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14065", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another toad label from Gus in Hetty's basement in Rimmington.", + "shop_price": "1", + "examine": "A label for a shipping crate.", + "durability": null, + "name": "Toad label", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14066", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another newt-and-toad label from Gus in Hetty's basement in Rimmington.", + "shop_price": "1", + "examine": "A label for a shipping crate.", + "durability": null, + "name": "Newts and toads label", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14067", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can obtain another wand from the chest in Betty's basement.", + "shop_price": "15", + "examine": "Warm to the touch.", + "durability": null, + "name": "Betty's wand", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14068", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you destroy this item, you can get another from Lottie in Betty's basement.", + "shop_price": "2", + "examine": "What a view!", + "durability": null, + "name": "Magic slate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14069", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you release this creature, you will have to restart the puzzle in Betty's basement.", + "shop_price": "1", + "examine": "Desert dweller.", + "durability": null, + "name": "Reptile", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14070", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you release this creature, you will have to restart the puzzle in Betty's basement.", + "shop_price": "1", + "examine": "Bleak and beaky.", + "durability": null, + "name": "Blackbird", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14071", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "An annoying flappy thing.", + "durability": null, + "name": "Bat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14072", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "It's an extremely small brown spider, probably very poisonous.", + "durability": null, + "name": "Spider", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14073", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "A popular dwarven delicacy.", + "durability": null, + "name": "Rat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14074", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "durability": null, + "name": "Snail", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14075", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "15", + "examine": "The height of warlock fashion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You can get another warlock top from Diango in Draynor Village.", + "remove_sleeves": "true", + "name": "Warlock top", + "archery_ticket_price": "0", + "id": "14076", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another set of warlock legs from Diango in Draynor Village.", + "shop_price": "15", + "examine": "Tattered but trendy.", + "durability": null, + "name": "Warlock legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14077", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "15", + "examine": "The height of witchly fashion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You can get another witch top from Diango in Draynor.", + "remove_sleeves": "true", + "name": "Witch top", + "archery_ticket_price": "0", + "id": "14078", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another witch top from Diango in Draynor.", + "shop_price": "15", + "examine": "Tattered but trendy.", + "durability": null, + "name": "Witch skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14079", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another witch cloak from Diango in Draynor.", + "shop_price": "15", + "examine": "Ragged but rugged.", + "durability": null, + "name": "Witch cloak", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14080", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "destroy_message": "You can get another warlock cloak from Diango in Draynor Village.", + "shop_price": "15", + "examine": "Ragged but rugged.", + "durability": null, + "name": "Warlock cloak", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14081", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A sticky orb of popped corn.", + "durability": null, + "name": "Popcorn ball", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14082", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "Chocolatey goodness.", + "durability": null, + "name": "Chocolate drop", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14083", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "Sugary bliss.", + "durability": null, + "name": "Wrapped candy", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14084", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "An urgent communiqu?? revealing important information.", + "durability": null, + "name": "Armadyl communiqu?", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14085", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "15", + "examine": "The height of witchly fashion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You can get another witch top from Diango in Draynor.", + "remove_sleeves": "true", + "name": "Witch top", + "archery_ticket_price": "0", + "id": "14086", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another witch top from Diango in Draynor.", + "shop_price": "15", + "examine": "Tattered but trendy.", + "durability": null, + "name": "Witch skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14087", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another witch cloak from Diango in Draynor.", + "shop_price": "15", + "examine": "Ragged but rugged.", + "durability": null, + "name": "Witch cloak", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14088", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14089", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14090", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14091", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14092", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14093", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "43333", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Sacred clay platebody", + "archery_ticket_price": "0", + "id": "14094", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "42667", + "examine": "The sacred clay bottom has transformed into spiked, platemail legs.", + "durability": null, + "name": "Sacred clay platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14095", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "shop_price": "23467", + "examine": "The sacred clay hat has transformed into a spined helm.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "1,0,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Sacred clay helm", + "archery_ticket_price": "0", + "id": "14096", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "shop_price": "17066", + "examine": "The sacred clay weapon has transformed into a sharp scimitar.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay scimitar", + "archery_ticket_price": "0", + "id": "14097", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "This can turn into a variety of tools.", + "durability": null, + "name": "Volatile clay tool", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14098", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your volatile tool wants to mine some rocks.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Volatile clay pickaxe", + "archery_ticket_price": "0", + "id": "14099", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your volatile tool wants to cut some wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Volatile clay hatchet", + "archery_ticket_price": "0", + "id": "14100", + "bonuses": "-2,26,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to spear some big fish.", + "durability": null, + "name": "Volatile clay harpoon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14101", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "21333", + "examine": "Your volatile tool wants to catch some butterflies.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Volatile clay butterfly net", + "archery_ticket_price": "0", + "id": "14102", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to make some bows or arrows.", + "durability": null, + "name": "Volatile clay fletching knife", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14103", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to work metal or build furniture.", + "durability": null, + "name": "Volatile clay hammer", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14104", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to make some leather armour.", + "durability": null, + "name": "Volatile clay needle", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14105", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "This can turn into a variety of tools.", + "durability": null, + "name": "Proto-tool", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14106", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a pickaxe.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay pickaxe", + "archery_ticket_price": "0", + "id": "14107", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a hatchet.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay hatchet", + "archery_ticket_price": "0", + "id": "14108", + "bonuses": "-2,4,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a harpoon.", + "durability": null, + "name": "Sacred clay harpoon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14109", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "1", + "examine": "Your sacred clay tool has transformed into a butterfly net.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay butterfly net", + "archery_ticket_price": "0", + "id": "14110", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "The sacred clay has transformed into a knife.", + "durability": null, + "name": "Sacred clay fletching knife", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14111", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a hammer.", + "durability": null, + "name": "Sacred clay hammer", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14112", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "The sacred clay has transformed into a needle.", + "durability": null, + "name": "Sacred clay needle", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14113", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "43333", + "examine": "The sacred clay top has transformed into a heavy, magical robe.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Sacred clay robe top", + "archery_ticket_price": "0", + "id": "14114", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "42667", + "examine": "The sacred clay bottom has transformed into a heavy, magical robe.", + "durability": null, + "name": "Sacred clay robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14115", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "23467", + "examine": "The sacred clay hat has transformed into a wizard hat.", + "durability": null, + "name": "Sacred clay hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14116", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "17066", + "examine": "The sacred clay weapon has transformed into a magical staff.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay staff", + "archery_ticket_price": "0", + "id": "14117", + "bonuses": "10,-1,40,10,0,2,3,1,10,0,0,50,0,0,0" + }, + { + "shop_price": "43333", + "examine": "The sacred clay top has transformed into a leather body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Sacred clay body", + "archery_ticket_price": "0", + "id": "14118", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "42667", + "examine": "The sacred clay bottom has been transformed into a set of chaps.", + "durability": null, + "name": "Sacred clay chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14119", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "shop_price": "23467", + "examine": "The sacred clay hat has transformed into a coif.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,3,1", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Sacred clay coif", + "archery_ticket_price": "0", + "id": "14120", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,5,0,0,0,0" + }, + { + "shop_price": "17066", + "examine": "The sacred clay weapon has transformed into a bow.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay bow", + "archery_ticket_price": "0", + "id": "14121", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14122", + "bonuses": "10,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14123" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14124", + "bonuses": "15,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14125" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14126", + "bonuses": "20,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14127" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14128", + "bonuses": "25,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14129" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14130", + "bonuses": "30,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14131" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14132", + "bonuses": "0,10,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14133" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14134", + "bonuses": "0,15,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14135" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14136", + "bonuses": "0,20,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14137" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14138", + "bonuses": "0,25,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14139" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14140", + "bonuses": "0,30,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14141" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14142", + "bonuses": "10,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14143" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14144", + "bonuses": "15,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14145" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14146", + "bonuses": "20,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14147" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14148", + "bonuses": "25,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14149" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14150", + "bonuses": "30,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14151" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14152", + "bonuses": "0,0,10,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14153" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14154", + "bonuses": "0,0,15,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14155" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14156", + "bonuses": "0,0,20,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14157" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14158", + "bonuses": "0,0,25,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14159" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14160", + "bonuses": "0,0,30,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14161" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14162", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14163" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14164", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14165" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14166", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14167" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14168", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14169" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14170", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14171" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14172", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14173" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14174", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14175" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14176", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14177" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14178", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14179" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14180", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14181" + }, + { + "destroy_message": "Drop", + "shop_price": "15", + "examine": "Very low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14182", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "15", + "examine": "Very low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14183" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "Low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14184", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "Low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14185" + }, + { + "destroy_message": "Drop", + "shop_price": "45", + "examine": "Medium quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14186", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "45", + "examine": "Medium quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14187" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "High quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14188", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "High quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14189" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Very high quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14190", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Very high quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14191" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14192", + "bonuses": "0,0,0,0,55,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14193" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14194", + "bonuses": "0,0,0,0,90,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14195" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14196", + "bonuses": "0,0,0,0,135,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14197" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14198", + "bonuses": "0,0,0,0,180,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14199" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14200", + "bonuses": "0,0,0,0,225,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14201" + }, + { + "shop_price": "2", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14202", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,15" + }, + { + "shop_price": "4", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14203", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30" + }, + { + "shop_price": "6", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14204", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,45" + }, + { + "shop_price": "8", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14205", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60" + }, + { + "shop_price": "10", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14206", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75" + }, + { + "shop_price": "150", + "examine": "3 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14207", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "3 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14208" + }, + { + "shop_price": "120", + "examine": "4 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14210" + }, + { + "shop_price": "90", + "examine": "3 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14211", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14212" + }, + { + "shop_price": "60", + "examine": "2 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14213", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14214" + }, + { + "shop_price": "30", + "examine": "1 dose of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14215", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14216" + }, + { + "shop_price": "150", + "examine": "4 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14217", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "4 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14218" + }, + { + "shop_price": "120", + "examine": "4 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14219", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14220" + }, + { + "shop_price": "90", + "examine": "3 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14221", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14222" + }, + { + "shop_price": "60", + "examine": "2 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14223", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14224" + }, + { + "shop_price": "30", + "examine": "1 dose of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14225", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14226" + }, + { + "shop_price": "150", + "examine": "5 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14227", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14228" + }, + { + "shop_price": "120", + "examine": "4 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14229", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14230" + }, + { + "shop_price": "90", + "examine": "3 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14231", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14232" + }, + { + "shop_price": "60", + "examine": "2 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14233", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14234" + }, + { + "shop_price": "30", + "examine": "1 dose of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14235", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14236" + }, + { + "shop_price": "150", + "examine": "5 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14237", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14238" + }, + { + "shop_price": "120", + "examine": "4 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14239", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14240" + }, + { + "shop_price": "90", + "examine": "3 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14241", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14242" + }, + { + "shop_price": "60", + "examine": "2 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14243", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14244" + }, + { + "shop_price": "30", + "examine": "1 dose of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14245", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14246" + }, + { + "shop_price": "150", + "examine": "4 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14247", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14248" + }, + { + "shop_price": "120", + "examine": "4 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14249", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14250" + }, + { + "shop_price": "90", + "examine": "3 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14251", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14252" + }, + { + "shop_price": "60", + "examine": "2 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14253", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14254" + }, + { + "shop_price": "30", + "examine": "1 dose of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14255", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14256" + }, + { + "shop_price": "150", + "examine": "3 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14257", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "3 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14258" + }, + { + "shop_price": "120", + "examine": "4 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14259", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14260" + }, + { + "shop_price": "90", + "examine": "3 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14261", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14262" + }, + { + "shop_price": "60", + "examine": "2 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14263", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14264" + }, + { + "shop_price": "30", + "examine": "1 dose of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14265", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14266" + }, + { + "shop_price": "150", + "examine": "4 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14267", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14268" + }, + { + "shop_price": "120", + "examine": "4 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14269", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14270" + }, + { + "shop_price": "90", + "examine": "3 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14271", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14272" + }, + { + "shop_price": "60", + "examine": "2 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14273", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14274" + }, + { + "shop_price": "30", + "examine": "1 dose of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14275", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14276" + }, + { + "shop_price": "150", + "examine": "3 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14277", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "3 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14278" + }, + { + "shop_price": "120", + "examine": "4 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14279", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14280" + }, + { + "shop_price": "90", + "examine": "3 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14281", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14282" + }, + { + "shop_price": "60", + "examine": "2 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14283", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14284" + }, + { + "shop_price": "30", + "examine": "1 dose of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14285", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14286" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14287", + "bonuses": "0,55,0,0,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14288" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14289", + "bonuses": "0,90,0,0,0,0,0,0,0,0,0,30,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14290" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14291", + "bonuses": "0,145,0,0,0,0,0,0,0,0,0,45,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14292" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14293", + "bonuses": "0,180,0,0,0,0,0,0,0,0,0,60,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14294" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14295", + "bonuses": "0,225,0,0,0,0,0,0,0,0,0,75,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14296" + }, + { + "shop_price": "30", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14297", + "bonuses": "41,0,0,0,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14298" + }, + { + "shop_price": "60", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14299", + "bonuses": "68,0,0,0,0,0,0,0,0,0,0,30,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14300" + }, + { + "shop_price": "90", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14301", + "bonuses": "101,0,0,0,0,0,0,0,0,0,0,45,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14302" + }, + { + "shop_price": "120", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14303", + "bonuses": "135,0,0,0,0,0,0,0,0,0,0,60,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14304" + }, + { + "shop_price": "150", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14305", + "bonuses": "168,0,0,0,0,0,0,0,0,0,0,75,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14306" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14307", + "bonuses": "0,0,83,0,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14308" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14309", + "bonuses": "0,0,135,0,0,0,0,0,0,0,0,30,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14310" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14311", + "bonuses": "0,0,202,0,0,0,0,0,0,0,0,45,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14312" + }, + { + "shop_price": "120", + "examine": "The Sacred Clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14313", + "bonuses": "0,0,270,0,0,0,0,0,0,0,0,60,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The Sacred Clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14314" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14315", + "bonuses": "0,0,338,0,0,0,0,0,0,0,0,75,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14316" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14317", + "bonuses": "0,0,0,0,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe top (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14318" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14319", + "bonuses": "0,0,0,0,0,0,0,0,40,0,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14320" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14321", + "bonuses": "0,0,0,0,0,0,0,0,60,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14322" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14323", + "bonuses": "0,0,0,0,0,0,0,0,80,0,80,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14324" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14325", + "bonuses": "0,0,0,0,0,0,0,0,100,0,100,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14326" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14327", + "bonuses": "0,0,0,0,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14328" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14329", + "bonuses": "0,0,0,0,0,0,0,0,30,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14330" + }, + { + "shop_price": "90", + "examine": "The sacred clay transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14331", + "bonuses": "0,0,0,0,0,0,0,0,45,0,45,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14332" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14333", + "bonuses": "0,0,0,0,0,0,0,0,60,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14334" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14335", + "bonuses": "0,0,0,0,0,0,0,0,75,0,75,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14336" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14337", + "bonuses": "0,0,0,0,0,0,0,0,10,0,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14338" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14339", + "bonuses": "0,0,0,0,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14340" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14341", + "bonuses": "0,0,0,0,0,0,0,0,30,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14342" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14343", + "bonuses": "0,0,0,0,0,0,0,0,40,0,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14344" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14345", + "bonuses": "0,0,0,0,0,0,0,0,50,0,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14346" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14347", + "bonuses": "0,0,0,-30,-10,20,20,20,-10,10,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platebody (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14348" + }, + { + "shop_price": "60", + "examine": "The sacred clay transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14349", + "bonuses": "0,0,0,-30,-10,40,40,40,-10,20,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay transformed into a hard, metallic substance.", + "durability": null, + "name": "Platebody (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14350" + }, + { + "shop_price": "90", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14351", + "bonuses": "0,0,0,-30,-10,60,60,60,-10,30,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "name": "Platebody (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14352" + }, + { + "shop_price": "120", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14353", + "bonuses": "0,0,0,-30,-10,80,80,80,-10,40,80,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "name": "Platebody (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14354" + }, + { + "shop_price": "150", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14355", + "bonuses": "0,0,0,-30,-10,100,100,100,-10,50,100,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "name": "Platebody (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14356" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14357", + "bonuses": "0,0,0,-30,-10,15,15,15,-10,7,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14358" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14359", + "bonuses": "0,0,0,-30,-10,30,30,30,-10,15,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14360" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14361", + "bonuses": "0,0,0,-30,-10,45,45,45,-10,23,45,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14362" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14363", + "bonuses": "0,0,0,-30,-10,60,60,60,-10,30,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14364" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14365", + "bonuses": "0,0,0,-30,-10,75,75,75,-10,37,75,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14366" + }, + { + "remove_head": "true", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14367", + "bonuses": "0,0,0,-30,-10,10,10,10,-10,5,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14368" + }, + { + "remove_head": "true", + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14369", + "bonuses": "0,0,0,-30,-10,20,20,20,-10,10,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14370" + }, + { + "remove_head": "true", + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14371", + "bonuses": "0,0,0,-30,-10,30,30,30,-10,15,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14372" + }, + { + "remove_head": "true", + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14373", + "bonuses": "0,0,0,-30,-10,40,40,40,-10,20,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14374" + }, + { + "remove_head": "true", + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14375", + "bonuses": "0,0,0,-30,-10,50,50,50,-10,25,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14376" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14377", + "bonuses": "0,0,0,55,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "name": "Staff (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14378" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14379", + "bonuses": "0,0,0,90,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "name": "Staff (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14380" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14381", + "bonuses": "0,0,0,135,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "name": "Staff (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14382" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14383", + "bonuses": "0,0,0,180,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "name": "Staff (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14384" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14385", + "bonuses": "0,0,0,225,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "name": "Staff (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14386" + }, + { + "durability": null, + "name": "Cape", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14387", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Cape", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14389", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14391", + "bonuses": "0,0,0,0,0,10,10,10,10,20,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14392" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14393", + "bonuses": "0,0,0,0,0,20,20,20,20,40,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14394" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14395", + "bonuses": "0,0,0,0,0,30,30,30,30,60,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14396" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14397", + "bonuses": "0,0,0,0,0,40,40,40,40,80,80,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14398" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14399", + "bonuses": "0,0,0,0,0,50,50,50,50,100,100,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14400" + }, + { + "shop_price": "30", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14401", + "bonuses": "0,0,0,0,0,7,7,7,0,15,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14402" + }, + { + "shop_price": "60", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14403", + "bonuses": "0,0,0,0,0,15,15,15,0,30,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14404" + }, + { + "shop_price": "90", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14405", + "bonuses": "0,0,0,0,0,23,23,23,0,45,45,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14406" + }, + { + "shop_price": "120", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14407", + "bonuses": "0,0,0,0,0,30,30,30,0,60,60,0,0,1,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14408" + }, + { + "shop_price": "150", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14409", + "bonuses": "0,0,0,0,0,37,37,37,0,75,75,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14410" + }, + { + "remove_head": "true", + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14411", + "bonuses": "0,0,0,0,0,5,5,5,0,10,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14412" + }, + { + "remove_head": "true", + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14413", + "bonuses": "0,0,0,0,0,10,10,10,0,20,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14414" + }, + { + "remove_head": "true", + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14415", + "bonuses": "0,0,0,0,0,15,15,15,0,30,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14416" + }, + { + "remove_head": "true", + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14417", + "bonuses": "0,0,0,0,0,20,20,20,0,40,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14418" + }, + { + "remove_head": "true", + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14419", + "bonuses": "0,0,0,0,0,25,25,25,0,50,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14420" + }, + { + "shop_price": "30", + "durability": null, + "name": "Clay deposit scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14421", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14422", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14423" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14424", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14425" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14426", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14427" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14428", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14429" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14430", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14431" + }, + { + "durability": null, + "name": "Null sacred clay", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14432", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "5", + "examine": "A vine flower grown through magical means.", + "durability": null, + "name": "Vine flower", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14458", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You caught this broav west of the Hunting Expert's home. You can catch another one with a trap baited with mort Myre Fungus.", + "examine": "Its unconscious, poor thing.", + "durability": null, + "name": "Unconscious broav", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14459", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got these clothes from a washerman who lives near the Khazard battle arena.", + "shop_price": "10", + "examine": "Some dirty clothes that apparently belong to Movario.", + "durability": null, + "name": "Dirty laundry", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14460", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You found this basket in Movario's base.", + "examine": "A receptacle for rubbish.", + "durability": null, + "name": "Waste-paper basket", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14461", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this key attached to the bottom of the bin in Movario's base.", + "examine": "A superbly made key with a fine ruby inserted into it. (While Guthix Sleeps)", + "durability": null, + "name": "Ruby key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14462", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found these notes in Movario's basement.", + "examine": "A collection of notes made by an absent-minded fellow.", + "durability": null, + "name": "Notes on pressure", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14463", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found these notes loosely piled up on ", + "examine": "A loose-leaf collection of research notes, found on Movario's study desk.", + "durability": null, + "name": "Movario's notes (volume 1)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14464", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found these notes in Movario's bedchest, in his base of operations near the Khazard Battlefield.", + "examine": "A loose-leaf collection of research notes, found in Movario's bed chest.", + "durability": null, + "name": "Movario's notes (volume 2)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14465", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A 1kg weight.", + "durability": null, + "name": "Weight (1kg)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14466", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A 2kg weight.", + "durability": null, + "name": "Weight (2kg)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14467", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A 5kg weight.", + "durability": null, + "name": "Weight (5kg)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14468", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can find another under the bed on the top level of Movario's base", + "examine": "The loop half of a strange key.", + "durability": null, + "name": "Strange key loop", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14469", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can find another under the bed on the top level of Movario's base", + "examine": "The teeth half of a strange key.", + "durability": null, + "name": "Strange key teeth", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14470", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fused together two parts of a Dragonkin key which you obtained from Movario's base.", + "examine": "The completed dragonkin key.", + "durability": null, + "name": "Dragonkin key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14471", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "30000", + "examine": "A badly damaged lump of dragon metal.", + "durability": null, + "rare_item": "true", + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "955683", + "name": "Ruined dragon armour lump", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14472", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30000", + "examine": "A badly damaged lump of dragon metal.", + "grand_exchange_price": "955683", + "durability": null, + "name": "Ruined dragon armour lump", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14473" + }, + { + "shop_price": "30000", + "examine": "A badly damaged slice of dragon metal.", + "durability": null, + "rare_item": "true", + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "1761141", + "name": "Ruined dragon armour slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14474", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30000", + "examine": "A badly damaged slice of dragon metal.", + "grand_exchange_price": "1761141", + "durability": null, + "name": "Ruined dragon armour slice", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14475" + }, + { + "shop_price": "30000", + "examine": "A badly damaged shard of dragon metal.", + "durability": null, + "rare_item": "true", + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "1090493", + "name": "Ruined dragon armour shard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14476", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30000", + "examine": "A badly damaged shard of dragon metal.", + "grand_exchange_price": "1090493", + "durability": null, + "name": "Ruined dragon armour shard", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14477" + }, + { + "destroy_message": "Drop", + "examine": "A very powerful Smithing hammer.", + "durability": null, + "name": "Blast fusion hammer", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14478", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "requirements": "{1,60}", + "shop_price": "1760000", + "examine": "Provides excellent protection.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "4453643", + "name": "Dragon platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14479", + "bonuses": "0,0,0,-30,0,109,107,97,-6,106,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1760000", + "examine": "Provides excellent protection.", + "grand_exchange_price": "4453643", + "durability": null, + "name": "Dragon platebody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14480" + }, + { + "requirements": "{1,60}", + "examine": "Provides excellent protection.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "4453643", + "name": "Dragon platebody", + "archery_ticket_price": "0", + "id": "14481", + "bonuses": "0,0,0,-30,0,109,107,97,-6,106,50,0,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "67500", + "examine": "A set of fighting claws.", + "has_special": "true", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "absorb": "0,0,0", + "equip_audio": "1003", + "defence_anim": "397", + "render_anim": "2583", + "equipment_slot": "3", + "attack_anims": "393,393,1067,393", + "destroy_message": "Drop", + "lendable": "true", + "grand_exchange_price": "1472441", + "tradeable": "true", + "name": "Dragon claws", + "archery_ticket_price": "0", + "id": "14484", + "bonuses": "41,57,-4,0,0,13,26,7,0,0,0,56,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "67500", + "examine": "A set of fighting claws.", + "grand_exchange_price": "1472441", + "durability": null, + "name": "Dragon claws", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14485" + }, + { + "requirements": "{0,60}", + "examine": "A set of fighting claws.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "absorb": "0,0,0", + "equip_audio": "1003", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1472441", + "name": "Dragon claws", + "archery_ticket_price": "0", + "id": "14486", + "bonuses": "41,57,-4,0,0,13,26,7,0,0,0,56,0,0,0" + }, + { + "destroy_message": "You grew this herb by planting an enriched snapdragon seed in the special herb patch on top of Falador castle.", + "examine": "An enriched snapdragon herb.", + "durability": null, + "name": "Enriched snapdragon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14487", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You made this serum by mixing an enriched snapdragon into one of Betty's truth serums.", + "examine": "Fluid sloshes innocently in this vial.", + "durability": null, + "name": "Super truth serum", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14488", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You gained this item by having papyrus and charcoal in your inventory while interrogating a spy in Falador castle.", + "examine": "A sketch of the suspect known as Dark Squall.", + "durability": null, + "name": "Suspect sketch", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14489", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "shop_price": "65000", + "examine": "These look pretty heavy, but very elite.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "41559", + "name": "Elite black platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14490", + "bonuses": "0,0,0,-14,-6,52,50,25,-1,49,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "65000", + "examine": "These look pretty heavy, but very elite.", + "grand_exchange_price": "41559", + "durability": null, + "name": "Elite black platelegs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14491" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "examine": "Provides excellent protection, and is elite.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "38275", + "name": "Elite black platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14492", + "bonuses": "0,0,0,-20,-8,80,85,40,-2,80,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "64000", + "examine": "Provides excellent protection, and is elite.", + "grand_exchange_price": "38275", + "durability": null, + "name": "Elite black platebody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14493" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "35200", + "examine": "A full face helmet, and elite.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "30542", + "name": "Elite black full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14494", + "bonuses": "0,0,0,-4,-2,31,33,15,0,30,7,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "35200", + "examine": "A full face helmet, and elite.", + "grand_exchange_price": "30542", + "durability": null, + "name": "Elite black full helm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14495" + }, + { + "destroy_message": "You got this key from the key rack in Dark Squall's base.", + "examine": "Opens the cells beneath the Black Knights' Fortress. (While Guthix Sleeps)", + "durability": null, + "name": "Cell key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14496", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "examine": "A robe worn by members of the Dagon'hai.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "71098", + "name": "Dagon'hai robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14497", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,2,0" + }, + { + "shop_price": "120000", + "examine": "A robe worn by members of the Dagon'hai.", + "grand_exchange_price": "71098", + "durability": null, + "name": "Dagon'hai robe top", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14498" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "examine": "A hat worn by members of the Dagon'hai.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "1,0,0", + "equipment_slot": "0", + "grand_exchange_price": "9580", + "name": "Dagon'hai hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14499", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "shop_price": "15000", + "examine": "A hat worn by members of the Dagon'hai.", + "grand_exchange_price": "9580", + "durability": null, + "name": "Dagon'hai hat", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14500" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "examine": "A robe worn by members of the Dagon'hai.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "2,1,0", + "equipment_slot": "7", + "grand_exchange_price": "45691", + "name": "Dagon'hai robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14501", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,2,0" + }, + { + "shop_price": "80000", + "examine": "A robe worn by members of the Dagon'hai.", + "grand_exchange_price": "45691", + "durability": null, + "name": "Dagon'hai robe bottom", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14502" + }, + { + "shop_price": "1", + "examine": "Elite Black Knight armour adds to his stealthiness.", + "durability": null, + "name": "Silif", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14503", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "Elite Black Knight armour adds to his stealthiness.", + "durability": null, + "name": "Silif", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14504", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Teleorb", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14505", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "destroy_message": "You created this by focusing the light onto a snapdragon seed from a rose tinted lens while in Betty's shop.", + "examine": "An enriched snapdragon seed. The herb that grows from this seed will be extra potent!", + "durability": null, + "name": "Enriched snapdragon seed", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14506", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14507", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14508", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14509", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14510", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14511", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14512", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14513", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14514", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an air-orb on an etched wall section.", + "examine": "An elemental key of air.", + "durability": null, + "name": "Air key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14515", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an earth-orb on an etched wall section.", + "examine": "An elemental key of earth.", + "durability": null, + "name": "Earth key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14516", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of fire.", + "durability": null, + "name": "Fire key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14517", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of water.", + "durability": null, + "name": "Water key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14518", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an air-orb on an etched wall section.", + "examine": "An elemental key of air.", + "durability": null, + "name": "Air key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14519", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an earth-orb on an etched wall section.", + "examine": "An elemental key of earth.", + "durability": null, + "name": "Earth key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14520", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of fire.", + "durability": null, + "name": "Fire key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14521", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of water.", + "durability": null, + "name": "Water key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14522", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a hat, top and bottoms.", + "grand_exchange_price": "193541", + "durability": null, + "name": "Dagon'hai robes set", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14525", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a hat, top and bottoms.", + "grand_exchange_price": "193541", + "durability": null, + "name": "Dagon'hai robes set", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14526" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing an elite black full helm, platebody and legs.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,13", + "destroy_message": "Drop", + "grand_exchange_price": "140536", + "name": "Elite black armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14527", + "bonuses": "0,0,0,-38,-16,163,168,80,-3,159,62,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Grand Exchange set containing an elite black full helm, platebody and legs.", + "grand_exchange_price": "140536", + "durability": null, + "name": "Elite black armour set", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14528" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, legs.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "9,0,19", + "destroy_message": "Drop", + "grand_exchange_price": "10629814", + "name": "Dragon plate armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14529", + "bonuses": "0,0,0,-57,-9,222,221,201,-11,217,82,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, legs.", + "grand_exchange_price": "10629814", + "durability": null, + "name": "Dragon plate armour set (l)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14530" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, skirt.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "9,0,19", + "destroy_message": "Drop", + "grand_exchange_price": "12243786", + "name": "Dragon plate armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14531", + "bonuses": "0,0,0,-57,-9,222,221,201,-11,217,82,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, skirt.", + "grand_exchange_price": "12243786", + "durability": null, + "name": "Dragon plate armour set (sk)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14532" + }, + { + "durability": null, + "name": "Broav", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14533", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You gained this orb from Dark Squall's base. You can probably get another one from visiting the same place.", + "examine": "This orb can used to teleport people...somehow.", + "durability": null, + "name": "Strange teleorb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14534", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will not be able to get the book back if you destroy it.", + "examine": "Notes on the locations of turkeys.", + "durability": null, + "name": "Turkey book", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14536", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will lose all food stored in the Cornucopia. You can get another empty one from Diango in Draynor Village.", + "durability": null, + "name": "Cornucopia", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14537", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will lose all food stored in the Cornucopia. You can get another empty one from Diango in Draynor Village.", + "durability": null, + "name": "Cornucopia", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14538", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "9", + "durability": null, + "name": "Raw turkey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14539", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "4", + "examine": "Mmm, this looks tasty.", + "durability": null, + "name": "Cooked turkey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14540", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "durability": null, + "name": "Burnt turkey", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14541", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "9", + "examine": "I need to cook this first.", + "durability": null, + "name": "Raw turkey drumstick", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14542", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "4", + "examine": "Mmm, this looks tasty.", + "durability": null, + "name": "Cooked turkey drumstick", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14543", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "durability": null, + "name": "Burnt turkey drumstick", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14544", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will lose all food stored in the Cornucopia. You can get another empty one from Diango in Draynor Village.", + "durability": null, + "name": "Cornucopia", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14570", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Not-so-sturdy boots for northern winters.", + "durability": null, + "name": "Fremennik sea boots 1", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14571", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,2,3,4,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You can claim replacement Fremennik sea boots from Yrsa in Rellekka.", + "examine": "Sturdy boots for northern winters.", + "durability": null, + "name": "Fremennik sea boots 2", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14572", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,8,9,10,0,0,8,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Very sturdy boots for northern winters.", + "durability": null, + "name": "Fremennik sea boots 3", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14573", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,10,11,12,0,0,9,1,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14574", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14575", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14576", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will be able to get a replacement shield from Redbeard the Pirate in Port Sarim.", + "shop_price": "100", + "examine": "A buckler shield from Falador.", + "durability": null, + "name": "Falador shield 1", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14577", + "absorb": "0,0,0", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,3,0,0", + "equipment_slot": "5" + }, + { + "destroy_message": "You will be able to get a replacement shield from the chemist in Rimmington.", + "shop_price": "200", + "examine": "A kiteshield from Falador.", + "durability": null, + "name": "Falador shield 2", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14578", + "absorb": "0,0,0", + "bonuses": "0,0,0,-8,-2,18,22,20,-1,20,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "destroy_message": "You will be able to get a replacement shield from Sir Vyvin's squire in the White Knights' Castle.", + "shop_price": "300", + "examine": "A tower shield from Falador.", + "durability": null, + "name": "Falador shield 3", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14579", + "absorb": "0,0,0", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,7,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "1000", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14580", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "5000", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14581", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10000", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14582", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Harvest (turns to ", + "examine": "A white lily seed - plant in a flower patch.", + "durability": null, + "name": "White lily", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14583", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will not be able to replace this voucher - it is a one-time offer only!", + "shop_price": "500000", + "examine": "I can take this to the Herald to get my money crest back for free.", + "durability": null, + "name": "Money crest voucher", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14584", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1250", + "examine": "A white lily seed - plant in a flower patch.", + "durability": null, + "name": "White lily seed", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14589", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1000", + "examine": "This will teleport me to Rellekka when I play it. ", + "durability": null, + "name": "Enchanted lyre(5)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14590", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Drop", + "shop_price": "1000", + "examine": "This will teleport me to Rellekka when I play it. ", + "durability": null, + "name": "Enchanted lyre(6)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14591", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These look pretty heavy, but very elite.", + "grand_exchange_price": "41559", + "durability": null, + "name": "Elite black platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14592", + "absorb": "2,0,4", + "bonuses": "0,0,0,-14,-6,52,50,25,-1,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides excellent protection, and is elite.", + "grand_exchange_price": "38275", + "durability": null, + "name": "Elite black platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14593", + "absorb": "3,0,6", + "bonuses": "0,0,0,-20,-8,80,85,40,-2,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A full face helmet, and elite.", + "grand_exchange_price": "30542", + "durability": null, + "name": "Elite black full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14594", + "absorb": "1,0,3", + "bonuses": "0,0,0,-4,-2,31,33,15,0,30,7,0,0,0,0" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "remove_sleeves": "true", + "examine": "A red and jolly top.", + "durability": null, + "name": "Santa costume top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14595", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "A spikey amulet made of ice crystals. It has been enchanted so it will not melt.", + "durability": null, + "name": "Ice amulet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14596", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "destroy_message": "You can probably get more in the last room of the yeti cave, in the Land of Snow.", + "shop_price": "1", + "durability": null, + "name": "Stones", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14597", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will have to fetch more in the last room of the yeti cave, then get them enchanted by snow imps.", + "shop_price": "1", + "examine": "According to the snow imps, this is enchanted, frozen yeti dung.", + "durability": null, + "name": "Enchanted stones", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14598", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A spikey amulet made of ice crystals. It has been enchanted so it will not melt.", + "durability": null, + "name": "Ice amulet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14599", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "remove_sleeves": "true", + "examine": "A red and jolly top.", + "durability": null, + "name": "Santa costume top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14600", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "remove_sleeves": "true", + "examine": "A red and jolly top.", + "durability": null, + "name": "Santa costume top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14601", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You can get another pair from Diango in Draynor Village.", + "examine": "Some black and jolly gloves.", + "durability": null, + "name": "Santa costume gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14602", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "Some red and jolly legs.", + "durability": null, + "name": "Santa costume legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14603", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "Some red and jolly legs.", + "durability": null, + "name": "Santa costume legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14604", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another pair from Diango in Draynor Village.", + "examine": "Some black and jolly boots.", + "durability": null, + "name": "Santa costume boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14605", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a cinnamon tree.", + "durability": null, + "name": "Cinnamon twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14606", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a sassafras tree.", + "durability": null, + "name": "Sassafras twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14607", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a ailanthus tree.", + "durability": null, + "name": "Ailanthus twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14608", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a cedar tree.", + "durability": null, + "name": "Cedar twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14609", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a mastic tree.", + "durability": null, + "name": "Mastic twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14610", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Cinnamon twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Cinnamon weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14611", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Sassafras twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Sassafras weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14612", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Ailanthus twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Ailanthus weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14613", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Cedar twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Cedar weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14614", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Mastic twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Mastic weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14615", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "100", + "examine": "A feather from a phoenix. Used in Summoning (72).", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "3431", + "name": "Phoenix quill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14616", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A feather from a phoenix. Used in Summoning (72).", + "grand_exchange_price": "3431", + "durability": null, + "name": "Phoenix quill", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14617" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14620", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14621" + }, + { + "requirements": "{23,72}", + "shop_price": "498", + "examine": "A scroll for a phoenix familiar.", + "durability": null, + "name": "Rise from the ashes scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14622", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "4986", + "durability": null, + "name": "Phoenix pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14623", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "4986", + "durability": null, + "name": "Phoenix pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14624" + }, + { + "durability": null, + "name": "Pouch", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14625", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A baby phoenix and it's bad to the bone!", + "durability": null, + "name": "Phoenix eggling", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14626", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A baby phoenix and it's bad to the bone!", + "durability": null, + "name": "Phoenix eggling", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14627", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "I found this egg in the Phoenix's Lair, and clapped at it!", + "durability": null, + "name": "Phoenix egg", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14629", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "I found this egg in the Phoenix's Lair, and kicked it!", + "durability": null, + "name": "Cracked phoenix egg", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14630", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "A player can get a new one by talking to any seer around Seer's village.", + "examine": "A headband with an eye embroidered on it.", + "durability": null, + "name": "Seer's headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14631", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "turn90cw_anim": "821", + "examine": "This used to belong to King Arthur and has since been improved.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "You can retrieve the Enhanced Excalibur from the Lady of the Lake for 500 coins.", + "stand_anim": "808", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "14632", + "stand_turn_anim": "823", + "bonuses": "38,47,-2,0,0,0,3,2,1,0,0,45,0,0,0", + "requirements": "{0,30}", + "shop_price": "200", + "durability": null, + "destroy": "true", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Enhanced excalibur" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14633", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14634", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14635", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "650", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Slayer helmet (e)", + "archery_ticket_price": "0", + "id": "14636", + "bonuses": "0,0,0,0,0,30,32,27,0,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "650", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Slayer helmet (charged)", + "archery_ticket_price": "0", + "id": "14637", + "bonuses": "0,0,0,0,0,30,32,27,0,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "It can be charged at the Fountain of Rune.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14638", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "It can be charged at the Fountain of Rune.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14639" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with one teleport charge.", + "grand_exchange_price": "27000", + "durability": null, + "name": "Ring of wealth(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14640", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with one teleport charge.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14641" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with two teleport charges.", + "grand_exchange_price": "28000", + "durability": null, + "name": "Ring of wealth(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14642", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with two teleport charges.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14643" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with three teleport charges.", + "grand_exchange_price": "30000", + "durability": null, + "name": "Ring of wealth(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14644", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with three teleport charges.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14645" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with four teleport charges.", + "grand_exchange_price": "35000", + "durability": null, + "name": "Ring of wealth(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14646", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with four teleport charges.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14647" + }, + { + "shop_price": "0", + "ge_buy_limit": "0", + "examine": "A totally alive monkey friend for your back!", + "durability": null, + "destroy": "true", + "weight": "0.0", + "equipment_slot": "1", + "grand_exchange_price": "0", + "name": "Jangles the Monkey Backpack", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "14648", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "0", + "examine": "A ring for only the truest of cave goblins. And Logg too.", + "grand_exchange_price": "0", + "durability": null, + "name": "Zanik ring", + "tradeable": "false", + "archery_ticket_price": "0", + "destroy": "true", + "id": "14649", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "0", + "examine": "A standard issue wizard hat.", + "durability": null, + "weight": "0.1", + "destroy": "true", + "equipment_slot": "0", + "grand_exchange_price": "0", + "name": "Wizard hat", + "tradeable": "false", + "archery_ticket_price": "0", + "hat": "true", + "id": "14650", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0" + }, + { + "destroy_message": " WARNING: You will have to reobtain this item the hard way.", + "examine": "Mysterious blueprints written in an alien language.", + "durability": null, + "name": "Ancient Blueprints", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "14651" + }, + { + "destroy_message": "You can get another by bringing the materials along with the blueprint to a Star Sprite.", + "examine": "A stardust-infused dragonstone ring.", + "durability": null, + "name": "Ring of the Star Sprite", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "14652", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "examine": "A chunk of rock.", + "name": "Rock", + "id": "1480" + }, + { + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A staff with a spooky raven head attached.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Staff of the raven", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "14654", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A staff with a spooky raven head attached.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Staff of the raven", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "14655", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A staff with a spooky raven head attached.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Staff of the raven", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "14656", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Item container for C. Ele Minor Drop Table. You should not be able to obtain this item.", + "name": "C. Ele Minor Drop Table", + "id": "799" + }, + { + "examine": "This will unlock something. (Waterfall Quest)", + "name": "A key", + "tradeable": "false", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "293" + }, + { + "examine": "This will unlock something. (Waterfall dungeon)", + "name": "A key", + "tradeable": "false", + "archery_ticket_price": "0", + "weight": "0.01", + "id": "298" + }, + { + "examine": "You should not have this.", + "name": "USDT Slot", + "id": "14422" + }, + { + "examine": "You should not have this.", + "name": "HDT Slot", + "id": "14424" + }, + { + "examine": "You should not have this.", + "name": "GDT Slot", + "id": "14426" + }, + { + "examine": "You should not have this.", + "name": "RSDT Slot", + "id": "14428" + }, + { + "examine": "You should not have this.", + "name": "ASDT Slot", + "id": "14430" + } +] \ No newline at end of file diff --git a/client/plugins/KondoKit/res/npc_hitpoints_map.json b/client/plugins/KondoKit/res/npc_hitpoints_map.json new file mode 100644 index 0000000..c94be2f --- /dev/null +++ b/client/plugins/KondoKit/res/npc_hitpoints_map.json @@ -0,0 +1 @@ +{"0": 12, "1": 10, "2": 10, "3": 10, "4": 10, "5": 10, "6": 4, "7": 7, "8": 14, "9": 18, "10": 10, "11": 10, "12": 10, "13": 14, "14": 30, "15": 20, "16": 4, "18": 19, "19": 35, "20": 66, "21": 82, "22": 17, "23": 52, "24": 4, "25": 4, "26": 52, "27": 50, "28": 10, "29": 10, "30": 10, "31": 10, "32": 22, "33": 10, "34": 22, "35": 22, "36": 10, "37": 10, "38": 10, "39": 10, "40": 10, "41": 3, "42": 10, "43": 10, "44": 10, "45": 10, "46": 1, "47": 2, "48": 40, "49": 116, "50": 240, "51": 160, "52": 50, "53": 140, "54": 190, "55": 105, "56": 10, "57": 10, "58": 55, "59": 5, "60": 32, "61": 1, "62": 50, "63": 35, "64": 65, "65": 10, "66": 3, "67": 3, "68": 3, "69": 10, "71": 10, "72": 10, "73": 22, "74": 24, "75": 30, "76": 30, "77": 22, "78": 32, "79": 80, "80": 10, "81": 8, "82": 79, "83": 89, "84": 157, "85": 10, "86": 5, "87": 10, "88": 12, "89": 19, "95": 69, "96": 34, "97": 44, "98": 10, "99": 49, "100": 5, "101": 10, "102": 10, "103": 25, "104": 25, "105": 27, "106": 25, "107": 17, "108": 23, "109": 57, "110": 111, "111": 70, "112": 60, "113": 50, "114": 60, "115": 60, "116": 75, "117": 35, "118": 10, "119": 61, "120": 26, "121": 10, "122": 29, "123": 29, "124": 54, "125": 59, "126": 64, "127": 44, "128": 6, "131": 8, "132": 6, "133": 29, "134": 64, "137": 10, "138": 34, "139": 34, "140": 47, "141": 44, "142": 69, "143": 90, "144": 40, "145": 59, "146": 10, "147": 10, "148": 10, "153": 10, "154": 10, "158": 67, "159": 1, "160": 21, "161": 1, "162": 10, "163": 54, "164": 54, "168": 42, "169": 42, "170": 4, "172": 24, "173": 42, "174": 12, "175": 15, "176": 31, "178": 42, "179": 42, "180": 13, "181": 20, "182": 20, "183": 20, "184": 23, "185": 10, "186": 18, "188": 20, "189": 10, "190": 40, "191": 39, "192": 10, "193": 20, "194": 40, "196": 28, "198": 10, "199": 41, "201": 47, "202": 40, "1631": 30, "1632": 30, "203": 40, "204": 40, "205": 70, "206": 17, "208": 10, "210": 10, "212": 10, "214": 10, "216": 10, "219": 10, "220": 10, "221": 142, "222": 14, "223": 10, "224": 11, "230": 10, "231": 10, "233": 10, "237": 42, "238": 142, "246": 10, "247": 50, "251": 10, "253": 31, "254": 31, "255": 31, "256": 31, "257": 31, "258": 170, "259": 10, "262": 10, "264": 10, "265": 10, "266": 10, "267": 10, "268": 10, "269": 116, "270": 65, "271": 51, "272": 17, "274": 42, "275": 42, "277": 59, "278": 10, "279": 10, "280": 10, "281": 5, "282": 21, "283": 25, "284": 10, "285": 10, "288": 3, "289": 10, "290": 10, "291": 10, "296": 35, "297": 35, "298": 35, "299": 35, "307": 10, "308": 10, "336": 10, "338": 10, "339": 10, "340": 10, "341": 10, "342": 10, "344": 10, "345": 10, "346": 10, "347": 34, "348": 34, "351": 7, "352": 7, "353": 7, "354": 7, "355": 10, "358": 10, "359": 7, "360": 7, "361": 7, "362": 7, "363": 7, "364": 10, "365": 10, "367": 10, "368": 10, "369": 34, "373": 10, "374": 60, "375": 10, "380": 10, "382": 10, "384": 10, "385": 10, "386": 10, "387": 10, "388": 10, "390": 1, "392": 35, "397": 8, "398": 10, "401": 10, "402": 10, "411": 10, "412": 8, "419": 14, "420": 14, "421": 30, "422": 79, "423": 120, "424": 159, "425": 8, "426": 17, "427": 28, "428": 42, "429": 170, "430": 100, "435": 10, "437": 10, "438": 25, "439": 40, "440": 60, "441": 86, "442": 120, "443": 170, "444": 10, "445": 10, "446": 5, "447": 32, "448": 32, "449": 32, "452": 10, "453": 29, "456": 10, "457": 10, "458": 10, "460": 10, "461": 10, "462": 10, "469": 10, "470": 10, "475": 45, "476": 11, "477": 54, "478": 50, "479": 45, "481": 10, "482": 10, "483": 10, "485": 10, "487": 10, "489": 28, "490": 10, "491": 20, "492": 10, "493": 10, "494": 10, "495": 10, "498": 10, "499": 10, "502": 45, "503": 47, "504": 45, "505": 47, "507": 100, "508": 75, "509": 110, "518": 10, "519": 10, "520": 10, "521": 10, "522": 10, "523": 10, "524": 10, "525": 10, "526": 10, "527": 10, "530": 10, "531": 10, "532": 285, "533": 285, "534": 10, "535": 10, "539": 10, "540": 10, "542": 10, "551": 10, "552": 10, "554": 10, "555": 10, "561": 10, "562": 10, "567": 10, "569": 10, "570": 10, "571": 10, "572": 10, "573": 10, "574": 10, "579": 10, "582": 10, "595": 10, "596": 10, "598": 10, "599": 10, "606": 10, "609": 37, "610": 10, "611": 10, "613": 10, "614": 10, "615": 10, "616": 10, "617": 10, "618": 10, "619": 10, "620": 10, "621": 10, "633": 10, "635": 10, "638": 10, "640": 10, "641": 10, "643": 42, "645": 2, "646": 10, "648": 10, "649": 10, "650": 10, "651": 10, "652": 10, "655": 64, "656": 10, "657": 10, "658": 10, "659": 10, "660": 10, "663": 10, "665": 10, "667": 60, "670": 10, "674": 28, "677": 157, "678": 10, "679": 10, "680": 10, "681": 10, "682": 10, "683": 10, "684": 10, "688": 14, "689": 28, "690": 42, "691": 57, "692": 10, "694": 10, "705": 10, "706": 10, "708": 8, "709": 8, "713": 10, "714": 10, "716": 10, "720": 10, "726": 10, "727": 10, "728": 10, "729": 10, "730": 10, "731": 10, "732": 10, "735": 10, "737": 10, "738": 10, "739": 10, "741": 10, "742": 80, "745": 1, "749": 108, "750": 108, "751": 108, "752": 190, "753": 40, "757": 4, "758": 10, "767": 88, "778": 66, "785": 10, "786": 10, "787": 10, "790": 10, "793": 10, "794": 10, "795": 157, "798": 10, "799": 42, "800": 10, "801": 10, "802": 10, "803": 17, "804": 10, "805": 10, "806": 10, "812": 10, "813": 10, "820": 10, "821": 10, "825": 10, "827": 7, "830": 28, "831": 10, "833": 10, "834": 10, "837": 15, "838": 10, "839": 15, "840": 46, "841": 10, "842": 400, "843": 10, "847": 10, "850": 10, "851": 10, "852": 60, "856": 81, "858": 10, "859": 10, "862": 331, "863": 10, "864": 10, "870": 331, "872": 10, "873": 10, "874": 10, "875": 10, "877": 97, "878": 71, "879": 7, "884": 10, "885": 10, "887": 10, "893": 25, "894": 28, "895": 10, "897": 21, "898": 31, "899": 41, "900": 51, "904": 10, "905": 10, "907": 3, "908": 65, "909": 65, "910": 78, "911": 107, "912": 120, "913": 120, "914": 120, "916": 10, "917": 32, "923": 10, "925": 10, "931": 62, "934": 150, "938": 130, "939": 10, "941": 75, "942": 10, "943": 10, "944": 10, "945": 10, "946": 10, "947": 10, "948": 10, "949": 10, "950": 5, "951": 3, "954": 10, "955": 8, "956": 10, "961": 10, "977": 42, "978": 17, "979": 10, "980": 10, "981": 10, "982": 10, "983": 10, "984": 10, "985": 10, "986": 10, "987": 10, "988": 57, "989": 57, "990": 57, "991": 10, "993": 10, "997": 91, "998": 90, "999": 90, "1000": 90, "1001": 10, "1002": 45, "1004": 2, "1005": 32, "1007": 73, "1009": 64, "1013": 10, "1015": 10, "1017": 3, "1018": 2, "1019": 45, "1020": 35, "1021": 45, "1022": 45, "1023": 50, "1044": 20, "1045": 10, "1046": 25, "1052": 10, "1053": 45, "1055": 10, "1057": 10, "1058": 10, "1059": 10, "1060": 10, "1061": 10, "1062": 10, "1063": 10, "1064": 10, "1065": 55, "1066": 10, "1067": 10, "1068": 10, "1069": 10, "1072": 10, "1073": 55, "1074": 55, "1076": 44, "1077": 44, "1081": 10, "1084": 10, "1085": 10, "1086": 10, "1087": 10, "1088": 10, "1089": 10, "1092": 38, "1095": 140, "1096": 135, "1097": 120, "1098": 120, "1099": 10, "1100": 10, "1101": 95, "1102": 95, "1103": 95, "1104": 95, "1105": 95, "1106": 90, "1107": 90, "1108": 90, "1109": 90, "1110": 90, "1111": 90, "1112": 90, "1115": 92, "1116": 92, "1117": 92, "1118": 67, "1119": 67, "1120": 67, "1121": 67, "1122": 67, "1123": 67, "1124": 67, "1125": 120, "1126": 90, "1127": 90, "1128": 90, "1129": 90, "1130": 95, "1131": 95, "1132": 95, "1133": 95, "1134": 95, "1135": 10, "1136": 10, "1137": 10, "1138": 90, "1139": 10, "1140": 10, "1141": 10, "1142": 10, "1143": 10, "1144": 10, "1145": 10, "1146": 10, "1147": 10, "1148": 10, "1149": 10, "1150": 10, "1151": 10, "1152": 10, "1153": 40, "1154": 90, "1155": 170, "1156": 40, "1157": 170, "1158": 255, "1160": 255, "1161": 10, "1172": 100, "1183": 91, "1184": 85, "1185": 10, "1192": 1, "1193": 5, "1194": 5, "1195": 35, "1196": 30, "1197": 35, "1198": 47, "1199": 10, "1200": 60, "1201": 105, "1203": 110, "1204": 112, "1208": 10, "1211": 10, "1216": 10, "1217": 5, "1218": 50, "1219": 60, "1220": 50, "1223": 50, "1225": 50, "1227": 8, "1228": 13, "1229": 10, "1230": 12, "1231": 22, "1232": 8, "1233": 13, "1234": 10, "1235": 12, "1239": 42, "1240": 38, "1241": 38, "1243": 56, "1244": 56, "1245": 76, "1246": 76, "1247": 90, "1248": 90, "1249": 110, "1250": 110, "1257": 61, "1258": 62, "1261": 64, "1262": 65, "1263": 10, "1264": 120, "1265": 50, "1266": 50, "1267": 50, "1268": 50, "1269": 50, "1270": 10, "1271": 10, "1272": 10, "1273": 10, "1274": 10, "1275": 10, "1276": 10, "1277": 10, "1278": 10, "1279": 57, "1281": 10, "1282": 10, "1283": 10, "1286": 10, "1287": 10, "1288": 10, "1289": 10, "1290": 14, "1291": 14, "1292": 14, "1293": 14, "1294": 10, "1296": 10, "1297": 10, "1298": 10, "1300": 10, "1301": 10, "1302": 10, "1303": 10, "1304": 10, "1305": 50, "1306": 50, "1307": 50, "1308": 51, "1309": 51, "1313": 10, "1314": 10, "1315": 10, "1316": 10, "1317": 40, "1318": 40, "1319": 45, "1320": 1, "1321": 5, "1326": 11, "1327": 20, "1328": 15, "1329": 25, "1330": 69, "1338": 70, "1339": 70, "1340": 70, "1341": 120, "1342": 120, "1343": 120, "1344": 10, "1345": 10, "1346": 10, "1347": 10, "1351": 128, "1352": 100, "1353": 100, "1354": 100, "1355": 100, "1356": 100, "1360": 10, "1367": 1, "1368": 1, "1369": 10, "1370": 10, "1374": 10, "1377": 10, "1378": 10, "1381": 1, "1385": 10, "1386": 1, "1388": 1, "1389": 1, "1390": 1, "1391": 1, "1392": 1, "1393": 10, "1394": 10, "1395": 10, "1396": 10, "1397": 10, "1398": 10, "1401": 3, "1402": 3, "1403": 5, "1404": 5, "1419": 10, "1427": 10, "1442": 130, "1443": 130, "1444": 130, "1445": 130, "1446": 130, "1447": 133, "1451": 10, "1452": 10, "1453": 10, "1454": 10, "1455": 94, "1456": 82, "1457": 50, "1458": 50, "1459": 130, "1460": 90, "1461": 10, "1463": 10, "1464": 10, "1465": 60, "1466": 90, "1467": 60, "1469": 10, "1472": 428, "1473": 2, "1475": 7, "1476": 7, "1477": 10, "1478": 90, "1479": 10, "1480": 10, "1481": 10, "1483": 10, "1484": 10, "1485": 10, "1486": 10, "1487": 10, "1521": 550, "1524": 100, "1528": 10, "1531": 8, "1532": 50, "1533": 50, "1534": 50, "1535": 50, "1536": 40, "1537": 10, "1538": 10, "1539": 50, "1540": 100, "1541": 10, "1549": 30, "1550": 10, "1551": 10, "1553": 10, "1556": 150, "1557": 10, "1558": 72, "1560": 85, "1561": 85, "1562": 85, "1563": 85, "1564": 85, "1565": 85, "1566": 85, "1567": 10, "1582": 111, "1583": 111, "1584": 111, "1585": 111, "1586": 111, "1587": 60, "1588": 60, "1589": 50, "1590": 122, "1591": 165, "1592": 210, "1593": 62, "1594": 62, "1600": 23, "1601": 23, "1602": 23, "1603": 23, "1604": 90, "1605": 90, "1606": 90, "1607": 90, "1608": 97, "1609": 97, "1610": 105, "1611": 105, "1612": 22, "1613": 105, "1614": 60, "1615": 150, "1616": 75, "1617": 75, "1618": 120, "1619": 120, "1620": 37, "1621": 37, "1622": 78, "1623": 81, "1624": 105, "1625": 87, "1626": 79, "1627": 77, "1628": 76, "1629": 80, "1630": 80, "1633": 45, "1634": 45, "1635": 45, "1636": 45, "1637": 75, "1638": 70, "1639": 70, "1640": 140, "1641": 75, "1642": 75, "1643": 60, "1644": 60, "1645": 60, "1646": 60, "1647": 60, "1648": 16, "1649": 5, "1650": 5, "1651": 5, "1652": 5, "1653": 18, "1654": 18, "1655": 18, "1656": 18, "1657": 18, "1658": 10, "1660": 10, "1661": 10, "1662": 10, "1663": 10, "1665": 100, "1675": 10, "1681": 120, "1686": 10, "1688": 10, "1691": 8, "1692": 3, "1693": 128, "1695": 10, "1696": 10, "1697": 10, "1698": 51, "1699": 10, "1700": 10, "1701": 10, "1702": 10, "1703": 10, "1704": 10, "1705": 10, "1706": 10, "1707": 10, "1708": 10, "1710": 31, "1711": 31, "1712": 31, "1713": 10, "1714": 10, "1715": 10, "1716": 10, "1717": 10, "1718": 10, "1739": 10, "1740": 10, "1741": 10, "1742": 10, "1743": 10, "1744": 10, "1745": 10, "1746": 10, "1747": 10, "1748": 10, "1751": 34, "1752": 37, "1754": 10, "1757": 7, "1758": 7, "1759": 10, "1760": 7, "1761": 10, "1763": 10, "1766": 6, "1767": 8, "1768": 6, "1769": 5, "1770": 5, "1771": 5, "1772": 5, "1773": 5, "1774": 5, "1775": 5, "1776": 5, "1794": 10, "1795": 35, "1796": 35, "1797": 35, "1802": 60, "1803": 10, "1805": 10, "1806": 10, "1807": 10, "1812": 85, "1813": 50, "1814": 15, "1815": 15, "1816": 15, "1817": 15, "1818": 15, "1819": 10, "1820": 10, "1822": 1, "1823": 1, "1824": 1, "1825": 1, "1827": 105, "1828": 100, "1829": 37, "1831": 25, "1832": 5, "1833": 10, "1834": 10, "1840": 10, "1842": 10, "1843": 10, "1844": 10, "1846": 10, "1850": 114, "1851": 110, "1852": 70, "1853": 114, "1854": 110, "1855": 70, "1856": 114, "1857": 110, "1858": 70, "1859": 10, "1866": 10, "1861": 10, "1863": 10, "1864": 10, "1865": 10, "1867": 10, "1868": 10, "1871": 10, "1872": 10, "1873": 10, "1874": 8, "1875": 10, "1885": 55, "1886": 10, "1902": 10, "1904": 60, "1905": 60, "1906": 114, "1911": 10, "1913": 50, "1914": 200, "1915": 200, "1917": 10, "1918": 10, "1919": 82, "1921": 10, "1926": 65, "1931": 65, "1935": 10, "1936": 91, "1937": 91, "1938": 91, "1939": 91, "1940": 91, "1941": 91, "1942": 91, "1951": 72, "1952": 72, "1953": 72, "1954": 72, "1955": 72, "1956": 72, "1958": 78, "1961": 78, "1962": 78, "1963": 78, "1964": 78, "1965": 78, "1967": 78, "1969": 88, "1972": 10, "1973": 85, "1976": 68, "1977": 130, "1978": 10, "1979": 10, "1980": 10, "1981": 10, "1988": 10, "1991": 57, "1993": 63, "1994": 27, "1995": 34, "1997": 42, "1998": 10, "1999": 10, "2001": 900, "2015": 71, "2016": 71, "2017": 71, "2018": 71, "2019": 71, "2021": 10, "2024": 10, "2025": 100, "2026": 100, "2027": 100, "2028": 100, "2029": 100, "2030": 100, "2031": 45, "2032": 35, "2033": 70, "2034": 45, "2035": 80, "2044": 71, "2045": 71, "2046": 71, "2047": 71, "2048": 71, "2049": 71, "2050": 71, "2051": 71, "2052": 71, "2053": 71, "2054": 71, "2055": 71, "2056": 71, "2057": 71, "2058": 60, "2060": 103, "2067": 10, "2069": 7, "2070": 7, "2071": 7, "2072": 7, "2073": 21, "2074": 21, "2075": 10, "2076": 10, "2077": 10, "2078": 10, "2082": 10, "2091": 10, "2092": 10, "2093": 10, "2094": 10, "2095": 10, "2096": 10, "2097": 10, "2098": 10, "2100": 10, "2101": 10, "2102": 10, "2103": 10, "2104": 10, "2105": 10, "2106": 10, "2109": 10, "2110": 10, "2111": 10, "2112": 10, "2113": 10, "2114": 10, "2115": 10, "2116": 10, "2117": 10, "2118": 10, "2119": 10, "2120": 10, "2121": 10, "2122": 10, "2127": 10, "2130": 48, "2131": 48, "2132": 48, "2133": 48, "2134": 54, "2135": 54, "2136": 54, "2138": 10, "2139": 10, "2140": 10, "2141": 10, "2154": 10, "2160": 10, "2163": 10, "2164": 10, "2165": 10, "2167": 10, "2168": 10, "2170": 10, "2171": 10, "2172": 10, "2173": 10, "2174": 10, "2175": 10, "2178": 10, "2180": 10, "2181": 10, "2182": 10, "2183": 10, "2184": 10, "2185": 10, "2186": 10, "2187": 10, "2190": 10, "2191": 10, "2192": 10, "2193": 10, "2195": 10, "2198": 10, "2201": 10, "2202": 10, "2203": 10, "2205": 10, "2206": 10, "2207": 10, "2232": 10, "2234": 10, "2235": 10, "2236": 42, "2237": 10, "2240": 10, "2241": 10, "2242": 10, "2244": 10, "2245": 22, "2246": 45, "2247": 3, "2248": 3, "2256": 66, "2262": 10, "2263": 74, "2264": 50, "2265": 95, "2267": 10, "2269": 10, "2271": 10, "2272": 10, "2274": 5, "2275": 5, "2276": 5, "2277": 5, "2278": 5, "2279": 5, "2280": 5, "2281": 5, "2285": 21, "2288": 10, "2289": 10, "2291": 10, "2292": 10, "2293": 10, "2294": 10, "2301": 10, "2310": 6, "2311": 10, "2312": 10, "2313": 3, "2314": 3, "2315": 3, "2316": 10, "2317": 10, "2318": 10, "2319": 10, "2320": 10, "2321": 10, "2329": 10, "2333": 10, "2336": 10, "2342": 10, "2354": 10, "2355": 476, "2359": 85, "2360": 85, "2361": 91, "2362": 91, "2372": 10, "2373": 87, "2397": 10, "2398": 10, "2399": 10, "2400": 10, "2401": 10, "2402": 10, "2423": 10, "2436": 10, "2439": 10, "2443": 0, "2452": 180, "2453": 240, "2454": 67, "2455": 120, "2456": 70, "2457": 120, "2459": 5, "2460": 5, "2461": 5, "2462": 5, "2463": 19, "2464": 40, "2465": 60, "2466": 80, "2467": 105, "2468": 120, "2476": 10, "2477": 10, "2479": 10, "2481": 10, "2482": 32, "2489": 87, "2490": 25, "2491": 50, "2492": 50, "2493": 90, "2494": 94, "2495": 97, "2496": 40, "2497": 39, "2499": 64, "2501": 61, "2503": 100, "2539": 10, "2547": 20, "2549": 10, "2553": 10, "2571": 23, "2574": 10, "2588": 10, "2591": 100, "2592": 100, "2593": 100, "2594": 100, "2595": 100, "2596": 100, "2597": 100, "2598": 80, "2599": 80, "2600": 80, "2601": 80, "2602": 80, "2603": 80, "2604": 120, "2605": 120, "2606": 120, "2607": 120, "2608": 120, "2609": 120, "2610": 140, "2611": 140, "2612": 140, "2613": 140, "2614": 140, "2615": 140, "2616": 140, "2627": 10, "2628": 10, "2629": 20, "2630": 20, "2631": 114, "2634": 10, "2641": 10, "2674": 14, "2675": 10, "2677": 13, "2678": 5, "2679": 5, "2680": 5, "2681": 5, "2682": 2, "2683": 10, "2684": 10, "2685": 29, "2686": 29, "2687": 29, "2688": 29, "2689": 10, "2690": 10, "2691": 10, "2693": 1, "2694": 1, "2695": 20, "2696": 15, "2697": 15, "2698": 42, "2699": 18, "2700": 18, "2701": 18, "2702": 18, "2703": 18, "2704": 10, "2705": 10, "2706": 10, "2707": 10, "2709": 25, "2710": 20, "2711": 22, "2712": 17, "2714": 40, "2716": 10, "2718": 10, "2725": 10, "2728": 10, "2729": 10, "2731": 10, "2732": 10, "2733": 10, "2734": 10, "2735": 10, "2736": 20, "2737": 20, "2738": 10, "2739": 40, "2740": 40, "2741": 80, "2742": 80, "2743": 160, "2744": 160, "2745": 250, "2746": 40, "2759": 10, "2776": 10, "2779": 20, "2782": 100, "2783": 220, "2785": 10, "2786": 10, "2787": 10, "2790": 10, "2792": 10, "2801": 48, "2802": 10, "2803": 40, "2804": 25, "2805": 25, "2806": 25, "2807": 15, "2808": 15, "2809": 10, "2810": 10, "2811": 10, "2812": 10, "2815": 10, "2825": 10, "2826": 10, "2827": 10, "2828": 10, "2830": 10, "2831": 10, "2832": 10, "2833": 10, "2834": 10, "2835": 10, "2836": 10, "2837": 51, "2838": 51, "2839": 51, "2840": 51, "2841": 51, "2842": 51, "2843": 48, "2844": 48, "2845": 48, "2846": 48, "2847": 48, "2848": 48, "2849": 57, "2850": 40, "2851": 10, "2852": 10, "2853": 10, "2854": 10, "2855": 10, "2856": 10, "2857": 10, "2858": 10, "2863": 40, "2866": 40, "2869": 40, "2878": 40, "2880": 74, "2881": 255, "2882": 255, "2883": 255, "2885": 180, "2886": 240, "2887": 85, "2888": 70, "2889": 150, "2890": 150, "2892": 75, "2894": 75, "2896": 75, "2919": 95, "2931": 10, "2941": 10, "2945": 10, "2948": 10, "2949": 10, "2950": 10, "2952": 10, "2958": 10, "2962": 10, "2963": 10, "2964": 10, "2965": 10, "2966": 10, "2967": 10, "2968": 10, "2969": 10, "2970": 10, "2971": 10, "2972": 10, "2973": 10, "2980": 5, "2981": 5, "2982": 10, "2984": 10, "2986": 10, "2988": 10, "2990": 10, "2997": 10, "2998": 10, "3001": 10, "3002": 10, "3003": 10, "3004": 10, "3005": 10, "3006": 10, "3007": 5, "3008": 5, "3009": 5, "3010": 5, "3011": 5, "3012": 5, "3013": 5, "3014": 5, "3015": 5, "3016": 5, "3017": 5, "3018": 5, "3021": 10, "3022": 10, "3026": 78, "3027": 78, "3028": 78, "3029": 10, "3030": 10, "3040": 10, "3042": 22, "3043": 22, "3044": 10, "3046": 10, "3051": 10, "3052": 10, "3053": 10, "3054": 10, "3055": 10, "3056": 10, "3057": 108, "3058": 70, "3059": 100, "3060": 32, "3061": 58, "3062": 40, "3063": 120, "3064": 148, "3065": 58, "3066": 37, "3067": 123, "3068": 200, "3069": 200, "3070": 200, "3071": 200, "3072": 70, "3073": 59, "3074": 10, "3075": 10, "3079": 10, "3080": 10, "3089": 10, "3090": 24, "3091": 10, "3094": 10, "3097": 10, "3098": 10, "3099": 10, "3100": 10, "3101": 10, "3102": 10, "3103": 10, "3104": 10, "3105": 10, "3106": 10, "3109": 10, "3121": 10, "3122": 10, "3123": 12, "3135": 0, "3150": 10, "3153": 25, "3155": 10, "3167": 10, "3168": 10, "3169": 10, "3170": 10, "3171": 10, "3172": 10, "3173": 10, "3174": 10, "3175": 10, "3176": 10, "3177": 10, "3178": 10, "3179": 10, "3180": 10, "3181": 10, "3182": 10, "3183": 10, "3184": 10, "3185": 10, "3186": 10, "3187": 52, "3188": 45, "3189": 45, "3190": 45, "3191": 45, "3192": 45, "3193": 45, "3194": 45, "3195": 45, "3196": 52, "3198": 10, "3199": 10, "3200": 250, "3201": 51, "3202": 51, "3203": 10, "3204": 10, "3216": 10, "3219": 40, "3220": 45, "3221": 40, "3223": 4, "3224": 10, "3225": 4, "3226": 9, "3227": 10, "3228": 18, "3229": 18, "3230": 18, "3231": 18, "3232": 18, "3233": 18, "3234": 5, "3235": 10, "3236": 10, "3237": 7, "3239": 7, "3240": 7, "3241": 22, "3242": 30, "3243": 38, "3244": 22, "3245": 22, "3246": 31, "3247": 18, "3248": 31, "3249": 31, "3250": 31, "3251": 31, "3252": 31, "3253": 31, "3255": 31, "3256": 31, "3257": 31, "3258": 31, "3259": 31, "3260": 28, "3261": 28, "3262": 28, "3263": 20, "3264": 10, "3265": 10, "3266": 10, "3267": 10, "3268": 14, "3269": 14, "3270": 14, "3271": 14, "3272": 14, "3273": 14, "3274": 14, "3275": 14, "3276": 42, "3277": 42, "3278": 42, "3279": 42, "3280": 10, "3282": 10, "3283": 10, "3286": 10, "3288": 10, "3293": 10, "3294": 10, "3295": 10, "3296": 10, "3298": 10, "3299": 10, "3302": 10, "3304": 10, "3307": 10, "3309": 8, "3313": 102, "3319": 58, "3320": 58, "3327": 10, "3331": 10, "3334": 1000, "3340": 200, "3341": 10, "3344": 65, "3345": 75, "3346": 60, "3347": 75, "3348": 53, "3349": 53, "3350": 53, "3366": 10, "3367": 10, "3368": 10, "3369": 10, "3370": 10, "3371": 10, "3375": 117, "3376": 50, "3378": 10, "3382": 10, "3389": 10, "3390": 10, "3391": 10, "3392": 10, "3393": 10, "3394": 10, "3404": 10, "3406": 171, "3407": 35, "3408": 35, "3409": 185, "3410": 185, "3411": 185, "3412": 185, "3413": 10, "3414": 10, "3415": 10, "3416": 10, "3418": 10, "3419": 60, "3420": 10, "3421": 31, "3422": 20, "3423": 20, "3424": 18, "3425": 10, "3426": 10, "3427": 10, "3431": 10, "3432": 10, "3433": 10, "3434": 10, "3435": 10, "3436": 10, "3437": 10, "3438": 10, "3439": 10, "3443": 10, "3444": 10, "3445": 10, "3449": 60, "3450": 60, "3451": 60, "3463": 10, "3476": 11, "3478": 328, "3484": 65, "3491": 140, "3493": 200, "3494": 210, "3495": 240, "3496": 140, "3497": 139, "3498": 240, "3499": 240, "3500": 240, "3501": 240, "3502": 240, "3509": 10, "3514": 10, "3521": 64, "3522": 85, "3523": 85, "3524": 85, "3525": 85, "3526": 65, "3527": 64, "3531": 57, "3532": 57, "3533": 60, "3534": 57, "3577": 65, "3579": 10, "3582": 10, "3583": 29, "3585": 122, "3586": 116, "3587": 60, "3588": 50, "3589": 90, "3590": 210, "3591": 10, "3593": 107, "3599": 121, "3600": 121, "3601": 121, "3602": 121, "3603": 10, "3604": 10, "3605": 10, "3618": 171, "3619": 171, "3620": 150, "3622": 40, "3634": 10, "3645": 35, "3646": 50, "3647": 35, "3648": 35, "3649": 25, "3650": 40, "3655": 35, "3661": 50, "3662": 50, "3663": 50, "3664": 10, "3665": 57, "3666": 64, "3667": 71, "3672": 8, "3673": 8, "3675": 10, "3676": 10, "3680": 10, "3706": 60, "3707": 50, "3709": 10, "3711": 32, "3715": 22, "3726": 10, "3727": 13, "3728": 23, "3729": 23, "3730": 23, "3731": 23, "3732": 23, "3733": 23, "3734": 38, "3735": 38, "3736": 53, "3737": 53, "3738": 68, "3739": 68, "3740": 83, "3741": 83, "3742": 23, "3743": 38, "3744": 53, "3745": 53, "3746": 53, "3747": 33, "3748": 50, "3749": 67, "3750": 101, "3751": 84, "3752": 18, "3753": 18, "3754": 30, "3755": 30, "3756": 42, "3757": 42, "3758": 51, "3759": 51, "3760": 62, "3761": 62, "3762": 27, "3763": 27, "3764": 45, "3765": 45, "3766": 62, "3767": 62, "3768": 78, "3769": 78, "3770": 97, "3771": 97, "3772": 53, "3773": 83, "3774": 113, "3775": 143, "3776": 173, "3777": 10, "3782": 200, "3783": 78, "3784": 200, "3785": 200, "3786": 10, "3788": 10, "3790": 10, "3791": 10, "3792": 10, "3793": 10, "3794": 10, "3795": 10, "3796": 10, "3797": 10, "3798": 10, "3799": 10, "3800": 10, "3801": 10, "3802": 10, "3805": 10, "3806": 10, "3807": 10, "3808": 51, "3809": 10, "3810": 10, "3811": 10, "3812": 10, "3814": 42, "3815": 47, "3816": 48, "3818": 10, "3819": 51, "3835": 255, "3836": 255, "3840": 64, "3843": 85, "3847": 428, "3849": 10, "3915": 7, "3916": 10, "3917": 10, "3939": 128, "3940": 100, "3941": 10, "3942": 10, "3943": 385, "4227": 10, "4228": 10, "4229": 97, "4230": 150, "4243": 10, "4245": 10, "4246": 10, "4247": 10, "4248": 10, "4250": 10, "4251": 10, "4252": 10, "4257": 10, "4258": 17, "4259": 10, "4260": 10, "4261": 10, "4262": 10, "4263": 10, "4264": 10, "4265": 10, "4266": 10, "4267": 10, "4268": 10, "4269": 10, "4270": 10, "4271": 10, "4272": 10, "4273": 10, "4274": 10, "4275": 10, "4276": 10, "4278": 10, "4279": 20, "4280": 40, "4281": 60, "4282": 80, "4283": 99, "4284": 120, "4291": 75, "4292": 100, "4300": 10, "4301": 10, "4302": 10, "4303": 10, "4304": 10, "4305": 10, "4306": 10, "4307": 37, "4308": 22, "4309": 22, "4310": 22, "4311": 22, "4316": 10, "4318": 10, "4320": 10, "4329": 10, "4336": 22, "4343": 10, "4344": 12, "4345": 44, "4347": 90, "4348": 45, "4349": 45, "4350": 45, "4351": 45, "4352": 45, "4353": 55, "4354": 55, "4355": 55, "4356": 55, "4357": 55, "4359": 10, "4361": 10, "4362": 10, "4363": 10, "4371": 10, "4372": 10, "4373": 10, "4375": 10, "4381": 60, "4382": 66, "4383": 66, "4387": 36, "4388": 42, "4389": 25, "4390": 25, "4391": 25, "4392": 23, "4393": 18, "4394": 40, "4395": 26, "4396": 2, "4397": 50, "4398": 70, "4399": 50, "4400": 50, "4401": 22, "4402": 55, "4403": 37, "4404": 10, "4405": 10, "4406": 22, "4407": 10, "4408": 10, "4409": 10, "4410": 10, "4411": 10, "4412": 10, "4413": 15, "4414": 10, "4415": 2, "4418": 112, "4419": 10, "4438": 10, "4439": 10, "4440": 19, "4441": 10, "4455": 10, "4457": 10, "4458": 10, "4459": 10, "4470": 12, "4474": 15, "4476": 10, "4479": 10, "4480": 10, "4481": 10, "4482": 10, "4483": 10, "4484": 10, "4485": 10, "4486": 10, "4487": 10, "4488": 10, "4489": 10, "4490": 10, "4491": 10, "4492": 10, "4494": 10, "4499": 10, "4501": 10, "4502": 10, "4503": 10, "4504": 10, "4505": 10, "4506": 10, "4507": 10, "4509": 171, "4510": 171, "4511": 10, "4512": 10, "4521": 10, "4524": 10, "4529": 105, "4530": 105, "4531": 105, "4533": 105, "4534": 85, "4537": 10, "4539": 10, "4540": 214, "4541": 10, "4542": 10, "4543": 10, "4545": 10, "4546": 50, "4547": 10, "4548": 50, "4549": 10, "4550": 10, "4551": 10, "4554": 10, "4555": 10, "4556": 10, "4557": 10, "4564": 10, "4565": 10, "4566": 10, "4567": 10, "4568": 10, "4579": 10, "4580": 10, "4581": 10, "4582": 10, "4589": 10, "4590": 10, "4593": 10, "4594": 10, "4595": 10, "4600": 10, "4603": 37, "4604": 37, "4605": 37, "4606": 37, "4607": 10, "4608": 10, "4611": 10, "4615": 0, "4633": 10, "4634": 10, "4635": 10, "4636": 10, "4637": 10, "4638": 10, "4639": 10, "4640": 10, "4641": 10, "4642": 10, "4643": 10, "4645": 10, "4650": 10, "4651": 10, "4652": 10, "4653": 10, "4654": 10, "4655": 10, "4656": 10, "4659": 12, "4660": 24, "4661": 30, "4665": 50, "4666": 50, "4667": 50, "4668": 50, "4669": 140, "4670": 140, "4671": 140, "4672": 140, "4673": 190, "4674": 190, "4675": 190, "4676": 190, "4677": 75, "4678": 75, "4679": 75, "4680": 75, "4681": 105, "4682": 105, "4683": 105, "4684": 105, "4685": 70, "4686": 70, "4687": 70, "4688": 60, "4689": 35, "4690": 35, "4691": 35, "4692": 35, "4693": 35, "4694": 79, "4695": 79, "4696": 79, "4697": 79, "4698": 87, "4699": 87, "4700": 87, "4701": 87, "4702": 157, "4703": 157, "4704": 157, "4705": 157, "4706": 85, "4707": 10, "4708": 10, "4716": 10, "4717": 10, "4718": 10, "4719": 10, "4720": 10, "4721": 10, "4722": 10, "4723": 10, "4724": 10, "4725": 10, "4726": 10, "4733": 28, "4734": 10, "4735": 10, "4736": 10, "4737": 10, "4738": 10, "4739": 10, "4740": 10, "4741": 10, "4746": 10, "4747": 10, "4748": 10, "4749": 10, "4750": 10, "4751": 10, "4752": 10, "4753": 10, "4754": 10, "4755": 10, "4756": 10, "4757": 10, "4759": 10, "4765": 10, "4766": 10, "4768": 10, "4772": 10, "4773": 10, "4774": 57, "4775": 57, "4776": 62, "4777": 62, "4778": 57, "4779": 57, "4780": 62, "4789": 60, "4793": 155, "4796": 28, "4805": 71, "4806": 74, "4807": 77, "4808": 80, "4810": 100, "4811": 100, "4812": 100, "4813": 71, "4814": 74, "4815": 77, "4816": 80, "4817": 71, "4818": 74, "4819": 77, "4820": 80, "4821": 100, "4822": 100, "4823": 100, "4824": 100, "4825": 71, "4826": 74, "4827": 77, "4828": 80, "4829": 95, "4830": 105, "4831": 120, "4832": 130, "4833": 95, "4834": 105, "4835": 120, "4836": 130, "4837": 95, "4838": 105, "4839": 120, "4840": 130, "4841": 95, "4842": 105, "4843": 120, "4844": 130, "4845": 100, "4847": 95, "4848": 95, "4849": 105, "4850": 95, "4851": 95, "4852": 105, "4868": 28, "4870": 28, "4890": 105, "4893": 82, "4894": 10, "4898": 29, "4899": 10, "4900": 10, "4901": 10, "4902": 10, "4903": 10, "4904": 10, "4906": 10, "4907": 10, "4909": 10, "4910": 35, "4911": 10, "4920": 70, "4921": 70, "4922": 7, "4923": 7, "4924": 7, "4925": 10, "4926": 10, "4927": 10, "4928": 18, "4929": 18, "4930": 7, "4931": 7, "4932": 15, "4933": 21, "4934": 21, "4935": 28, "4936": 11, "4937": 11, "4938": 10, "4939": 10, "4940": 35, "4941": 17, "4942": 5, "4943": 5, "4944": 26, "4945": 26, "4947": 10, "4962": 10, "4965": 10, "4971": 100, "4972": 285, "4975": 10, "4977": 10, "4989": 35, "4990": 35, "4991": 35, "4992": 35, "4993": 35, "4994": 35, "4995": 35, "4996": 35, "4997": 35, "4998": 35, "4999": 10, "5000": 10, "5001": 10, "5002": 10, "5026": 10, "5027": 10, "5028": 10, "5029": 10, "5030": 10, "5031": 10, "5032": 10, "5033": 10, "5034": 10, "5035": 10, "5036": 10, "5037": 10, "5038": 10, "5039": 10, "5040": 10, "5041": 10, "5042": 10, "5043": 10, "5048": 22, "5067": 10, "5072": 10, "5073": 10, "5074": 10, "5075": 10, "5076": 10, "5079": 1, "5080": 10, "5081": 10, "5082": 10, "5083": 10, "5084": 10, "5085": 10, "5086": 10, "5087": 10, "5088": 10, "5089": 10, "5097": 22, "5098": 10, "5099": 10, "5100": 10, "5103": 10, "5104": 10, "5105": 10, "5106": 10, "5112": 10, "5113": 10, "5114": 10, "5115": 10, "5116": 10, "5117": 10, "5120": 10, "5130": 10, "5131": 10, "5132": 10, "5133": 10, "5137": 40, "5140": 10, "5144": 85, "5145": 120, "5146": 10, "5147": 10, "5162": 10, "5163": 10, "5166": 10, "5167": 10, "5168": 8, "5169": 8, "5170": 8, "5171": 10, "5172": 10, "5173": 10, "5176": 371, "5178": 105, "5181": 371, "5184": 371, "5187": 371, "5188": 165, "5190": 1, "5193": 1, "5195": 10, "5196": 10, "5197": 10, "5204": 22, "5211": 8, "5229": 10, "5237": 10, "5247": 71, "5248": 450, "5249": 10, "5250": 77, "5251": 77, "5252": 77, "5253": 571, "5254": 50, "5258": 10, "5260": 10, "5270": 10, "5274": 10, "5277": 10, "5285": 22, "5293": 22, "5294": 22, "5295": 22, "5296": 22, "5297": 22, "5298": 22, "5299": 22, "5300": 22, "5301": 22, "5302": 22, "5303": 22, "5304": 22, "5305": 18, "5306": 22, "5307": 18, "5308": 24, "5309": 40, "5310": 24, "5311": 24, "5312": 24, "5313": 24, "5314": 30, "5315": 30, "5316": 30, "5317": 30, "5318": 30, "5319": 40, "5320": 40, "5321": 40, "5322": 30, "5323": 30, "5324": 30, "5325": 30, "5326": 30, "5327": 30, "5328": 30, "5329": 30, "5330": 30, "5331": 30, "5342": 25, "5343": 25, "5344": 25, "5345": 25, "5346": 25, "5347": 25, "5348": 25, "5349": 25, "5350": 25, "5351": 25, "5352": 25, "5353": 45, "5354": 47, "5355": 45, "5356": 45, "5357": 47, "5358": 47, "5359": 85, "5361": 128, "5362": 175, "5363": 254, "5364": 175, "5369": 36, "5370": 36, "5371": 36, "5372": 36, "5373": 36, "5374": 36, "5375": 23, "5376": 23, "5377": 30, "5378": 30, "5379": 40, "5380": 40, "5382": 40, "5384": 100, "5393": 56, "5394": 40, "5395": 40, "5396": 40, "5397": 40, "5398": 40, "5399": 40, "5400": 40, "5401": 40, "5402": 40, "5403": 40, "5404": 92, "5405": 40, "5406": 40, "5407": 40, "5408": 40, "5409": 40, "5410": 40, "5413": 78, "5414": 74, "5417": 134, "5418": 82, "5420": 65, "5421": 325, "5439": 10, "5442": 10, "5447": 10, "5448": 10, "5452": 42, "5453": 42, "5454": 42, "5455": 42, "5472": 185, "5473": 60, "5474": 80, "5475": 80, "5476": 80, "5478": 10, "5480": 10, "5488": 10, "5489": 10, "5490": 10, "5491": 10, "5492": 10, "5497": 10, "5514": 10, "5516": 10, "5517": 10, "5521": 60, "5522": 80, "5523": 80, "5525": 60, "5526": 80, "5527": 80, "5529": 50, "5531": 10, "5532": 10, "5533": 10, "5539": 10, "5547": 10, "5553": 10, "5561": 157, "5571": 10, "5572": 10, "5581": 10, "5584": 85, "5589": 10, "5590": 10, "5591": 10, "5593": 70, "5594": 35, "5595": 64, "5596": 60, "5597": 57, "5603": 58, "5608": 10, "5609": 10, "5610": 10, "5611": 10, "5614": 10, "5619": 10, "5620": 10, "5621": 10, "5622": 10, "5627": 50, "5628": 50, "5629": 50, "5630": 52, "5631": 50, "5632": 52, "5633": 50, "5634": 50, "5635": 50, "5636": 52, "5637": 50, "5638": 50, "5639": 50, "5640": 50, "5641": 50, "5642": 50, "5643": 50, "5644": 50, "5645": 50, "5646": 50, "5647": 50, "5648": 50, "5649": 52, "5650": 50, "5651": 52, "5652": 50, "5653": 52, "5654": 50, "5655": 52, "5656": 50, "5657": 52, "5658": 50, "5659": 50, "5660": 52, "5661": 50, "5662": 52, "5663": 50, "5664": 52, "5665": 50, "5666": 285, "5680": 100, "5750": 93, "5751": 52, "5752": 10, "5753": 10, "5754": 10, "5755": 10, "5756": 10, "5757": 10, "5758": 10, "5759": 10, "5760": 10, "5761": 10, "5762": 10, "5763": 10, "5764": 10, "5765": 10, "5766": 10, "5767": 10, "5768": 10, "5769": 10, "5776": 10, "5777": 10, "5783": 10, "5784": 10, "5785": 10, "5786": 10, "5800": 60, "5801": 60, "5803": 10, "5805": 10, "5807": 10, "5808": 10, "5809": 10, "5810": 10, "5811": 10, "5812": 10, "5813": 10, "5814": 10, "5815": 10, "5816": 10, "5817": 10, "5818": 10, "5819": 10, "5820": 10, "5821": 10, "5822": 10, "5823": 10, "5824": 10, "5827": 10, "5829": 5, "5833": 10, "5842": 32, "5843": 32, "5844": 32, "5845": 32, "5846": 32, "5847": 32, "5848": 32, "5849": 32, "5850": 32, "5851": 32, "5852": 85, "5854": 10, "5855": 10, "5856": 10, "5859": 57, "5860": 57, "5861": 71, "5864": 10, "5865": 10, "5866": 10, "5867": 10, "5873": 10, "5874": 10, "5875": 10, "5876": 10, "5877": 10, "5878": 10, "5879": 10, "5880": 10, "5881": 10, "5882": 10, "5883": 10, "5884": 10, "5885": 10, "5886": 10, "5902": 100, "5903": 191, "5904": 100, "5905": 90, "5906": 78, "5908": 142, "5909": 28, "5910": 10, "5911": 10, "5914": 10, "5916": 10, "5917": 10, "5919": 25, "5920": 25, "5921": 10, "5922": 10, "5923": 4, "5924": 4, "5926": 25, "5927": 25, "5928": 24, "5929": 24, "5930": 10, "5931": 10, "5938": 10, "5944": 10, "5945": 10, "5947": 10, "5952": 10, "5954": 10, "5956": 10, "5958": 10, "5959": 10, "5960": 10, "5961": 10, "5962": 10, "5963": 10, "5966": 10, "5971": 10, "5972": 10, "5973": 10, "5974": 10, "5975": 10, "5976": 10, "5977": 10, "5978": 34, "5979": 10, "5980": 10, "5981": 10, "5982": 10, "5986": 34, "5990": 10, "5992": 10, "5993": 131, "5994": 62, "5996": 160, "5999": 10, "6001": 10, "6006": 87, "6007": 87, "6008": 87, "6009": 87, "6010": 87, "6011": 87, "6012": 87, "6013": 87, "6014": 87, "6015": 64, "6016": 64, "6017": 64, "6018": 64, "6019": 100, "6020": 64, "6021": 64, "6022": 100, "6023": 100, "6024": 100, "6025": 100, "6026": 60, "6027": 60, "6028": 60, "6029": 60, "6030": 60, "6031": 60, "6032": 60, "6033": 60, "6034": 60, "6035": 60, "6036": 60, "6037": 60, "6038": 60, "6039": 60, "6040": 60, "6041": 60, "6042": 60, "6043": 60, "6044": 60, "6045": 60, "6046": 74, "6047": 69, "6048": 157, "6049": 100, "6050": 55, "6051": 55, "6052": 70, "6054": 10, "6064": 10, "6072": 10, "6073": 10, "6074": 10, "6078": 75, "6079": 100, "6080": 75, "6081": 100, "6088": 2, "6089": 2, "6090": 2, "6094": 25, "6095": 25, "6096": 25, "6097": 25, "6098": 25, "6099": 30, "6100": 30, "6101": 79, "6102": 85, "6108": 1, "6109": 54, "6110": 55, "6111": 55, "6112": 10, "6113": 3, "6115": 5, "6116": 5, "6117": 10, "6118": 10, "6122": 10, "6123": 10, "6124": 10, "6125": 10, "6126": 10, "6127": 10, "6128": 10, "6129": 10, "6131": 40, "6132": 10, "6133": 10, "6134": 10, "6135": 10, "6140": 10, "6141": 10, "6142": 200, "6143": 200, "6144": 200, "6145": 200, "6146": 200, "6147": 200, "6148": 200, "6149": 200, "6150": 250, "6151": 250, "6152": 250, "6153": 250, "6154": 250, "6155": 250, "6156": 250, "6157": 250, "6159": 114, "6169": 10, "6170": 118, "6183": 10, "6184": 10, "6188": 10, "6189": 42, "6190": 10, "6198": 85, "6200": 10, "6201": 10, "6203": 255, "6204": 142, "6205": 10, "6206": 150, "6207": 10, "6208": 161, "6209": 10, "6210": 116, "6211": 10, "6212": 100, "6213": 100, "6214": 60, "6215": 120, "6216": 48, "6217": 15, "6218": 112, "6219": 102, "6220": 120, "6221": 75, "6222": 255, "6223": 121, "6224": 10, "6225": 132, "6226": 10, "6227": 133, "6228": 10, "6229": 98, "6230": 89, "6231": 75, "6232": 70, "6233": 83, "6234": 86, "6235": 86, "6236": 95, "6237": 98, "6238": 124, "6239": 139, "6240": 63, "6241": 65, "6242": 83, "6243": 69, "6244": 75, "6245": 98, "6246": 73, "6247": 255, "6248": 160, "6249": 10, "6250": 146, "6251": 10, "6252": 162, "6253": 10, "6254": 89, "6255": 100, "6256": 106, "6257": 85, "6258": 135, "6259": 108, "6260": 255, "6261": 128, "6262": 10, "6263": 127, "6264": 10, "6265": 146, "6266": 10, "6267": 60, "6268": 70, "6269": 110, "6270": 110, "6271": 110, "6272": 110, "6273": 110, "6274": 110, "6275": 52, "6276": 130, "6277": 131, "6278": 106, "6279": 20, "6280": 15, "6281": 15, "6282": 18, "6283": 16, "6285": 168, "6286": 168, "6287": 168, "6288": 168, "6289": 168, "6290": 154, "6291": 168, "6292": 168, "6293": 154, "6294": 308, "6295": 308, "6296": 148, "6297": 87, "6306": 0, "6314": 10, "6315": 10, "6322": 154, "6323": 154, "6324": 154, "6325": 154, "6326": 154, "6327": 154, "6328": 154, "6329": 154, "6330": 154, "6331": 154, "6332": 154, "6334": 10, "6335": 10, "6336": 10, "6337": 10, "6338": 10, "6339": 10, "6344": 92, "6346": 20, "6347": 20, "6348": 20, "6349": 20, "6350": 20, "6351": 23, "6352": 23, "6353": 23, "6354": 23, "6355": 23, "6356": 23, "6358": 1428, "6363": 62, "6364": 67, "6365": 65, "6366": 65, "6367": 70, "6368": 70, "6369": 67, "6370": 10, "6371": 27, "6372": 25, "6374": 10, "6376": 25, "6377": 25, "6378": 85, "6379": 50, "6380": 71, "6381": 85, "6382": 64, "6383": 37, "6385": 10, "6389": 105, "6390": 10, "6402": 10, "6403": 10, "6404": 10, "6405": 10, "6406": 10, "6407": 10, "6408": 10, "6409": 10, "6410": 10, "6411": 10, "6412": 10, "6413": 10, "6414": 10, "6415": 10, "6416": 10, "6417": 10, "6418": 10, "6419": 10, "6420": 10, "6421": 10, "6422": 10, "6423": 10, "6424": 10, "6425": 10, "6426": 10, "6427": 10, "6428": 10, "6429": 10, "6430": 10, "6431": 10, "6432": 10, "6433": 10, "6434": 10, "6435": 10, "6436": 10, "6437": 10, "6438": 10, "6439": 10, "6440": 10, "6441": 10, "6442": 10, "6443": 10, "6444": 10, "6445": 10, "6446": 10, "6447": 10, "6448": 10, "6449": 10, "6450": 10, "6451": 10, "6452": 10, "6453": 10, "6454": 10, "6455": 10, "6456": 10, "6457": 10, "6458": 10, "6459": 10, "6460": 10, "6461": 10, "6462": 10, "6463": 10, "6464": 10, "6465": 10, "6466": 10, "6467": 10, "6469": 20, "6470": 25, "6471": 31, "6472": 37, "6473": 37, "6482": 10, "6488": 10, "6490": 10, "6491": 10, "6492": 10, "6493": 10, "6494": 10, "6495": 10, "6496": 10, "6497": 10, "6498": 10, "6499": 10, "6500": 10, "6501": 10, "6502": 10, "6503": 10, "6504": 10, "6507": 10, "6508": 10, "6509": 10, "6510": 10, "6512": 10, "6514": 1, "6516": 10, "6518": 10, "6521": 10, "6523": 10, "6524": 10, "6525": 10, "6526": 10, "6527": 10, "6536": 10, "6543": 10, "6544": 10, "6558": 10, "6560": 254, "6604": 20, "6605": 24, "6606": 40, "6607": 65, "6608": 72, "6609": 65, "6610": 105, "6611": 143, "6612": 24, "6613": 60, "6614": 65, "6615": 105, "6616": 24, "6617": 65, "6618": 105, "6619": 143, "6620": 24, "6621": 40, "6622": 48, "6623": 60, "6624": 105, "6625": 65, "6626": 105, "6627": 143, "6628": 40, "6629": 105, "6630": 143, "6631": 48, "6632": 65, "6633": 105, "6634": 143, "6635": 20, "6636": 24, "6637": 24, "6638": 24, "6639": 24, "6640": 40, "6641": 48, "6642": 72, "6643": 60, "6644": 65, "6645": 110, "6646": 80, "6647": 80, "6648": 105, "6649": 140, "6650": 143, "6651": 24, "6652": 60, "6653": 105, "6654": 143, "6655": 20, "6656": 24, "6657": 34, "6658": 24, "6659": 40, "6660": 48, "6661": 72, "6662": 60, "6663": 65, "6664": 105, "6665": 143, "6666": 20, "6667": 24, "6668": 48, "6669": 60, "6670": 105, "6671": 60, "6672": 105, "6673": 143, "6674": 60, "6675": 65, "6676": 143, "6677": 20, "6678": 24, "6679": 24, "6680": 24, "6681": 24, "6682": 40, "6683": 48, "6684": 72, "6685": 60, "6686": 65, "6687": 110, "6688": 80, "6689": 80, "6690": 105, "6691": 140, "6692": 143, "6693": 24, "6694": 40, "6695": 60, "6696": 105, "6697": 20, "6698": 24, "6699": 24, "6700": 60, "6701": 65, "6702": 105, "6703": 20, "6704": 24, "6705": 24, "6706": 24, "6707": 24, "6708": 40, "6709": 48, "6710": 72, "6711": 60, "6712": 65, "6713": 105, "6714": 143, "6715": 20, "6716": 24, "6717": 24, "6718": 24, "6719": 24, "6720": 40, "6721": 48, "6722": 72, "6723": 60, "6724": 65, "6725": 105, "6726": 143, "6727": 72, "6728": 65, "6729": 105, "6730": 143, "6731": 10, "6739": 10, "6740": 10, "6743": 20, "6745": 20, "6747": 30, "6748": 20, "6749": 20, "6761": 68, "6762": 68, "6763": 68, "6769": 10, "6770": 285, "6772": 25, "6773": 157, "6774": 78, "6776": 78, "6777": 78, "6778": 78, "6779": 72, "6780": 78, "6781": 70, "6785": 10, "6786": 10, "6787": 10, "6788": 10, "6789": 94, "6790": 94, "6794": 74, "6795": 74, "6796": 39, "6797": 39, "6798": 10, "6799": 107, "6800": 10, "6801": 111, "6802": 10, "6803": 90, "6804": 10, "6805": 115, "6806": 28, "6807": 28, "6809": 10, "6810": 82, "6811": 10, "6812": 10, "6813": 40, "6814": 40, "6815": 348, "6816": 95, "6817": 10, "6818": 10, "6819": 77, "6820": 10, "6821": 88, "6822": 100, "6823": 100, "6824": 16, "6825": 16, "6826": 16, "6827": 10, "6828": 91, "6829": 15, "6830": 15, "6831": 47, "6832": 25, "6834": 60, "6835": 20, "6836": 44, "6837": 67, "6838": 27, "6839": 10, "6840": 101, "6841": 18, "6842": 18, "6843": 10, "6844": 70, "6845": 10, "6846": 45, "6847": 68, "6848": 68, "6849": 10, "6850": 105, "6851": 10, "6852": 10, "6853": 133, "6854": 133, "6855": 193, "6856": 193, "6857": 260, "6858": 260, "6859": 340, "6860": 340, "6861": 441, "6862": 441, "6863": 570, "6864": 570, "6865": 10, "6866": 87, "6867": 10, "6868": 57, "6869": 619, "6870": 619, "6871": 96, "6872": 40, "6873": 710, "6874": 710, "6875": 10, "6876": 61, "6877": 10, "6878": 61, "6879": 10, "6880": 61, "6881": 10, "6882": 61, "6883": 10, "6884": 61, "6885": 10, "6886": 61, "6887": 10, "6888": 61, "6889": 10, "6890": 94, "6891": 10, "6892": 10, "6893": 10, "6896": 10, "6897": 10, "6900": 10, "6901": 10, "6902": 10, "6903": 10, "6904": 10, "6905": 10, "6906": 10, "6907": 10, "6917": 10, "6921": 10, "6942": 10, "6943": 10, "6944": 10, "6969": 651, "6972": 30, "6973": 30, "6974": 30, "6975": 30, "6976": 30, "6977": 30, "6978": 30, "6979": 30, "6980": 30, "6981": 30, "6982": 30, "6983": 30, "6984": 30, "6985": 30, "6986": 30, "6987": 30, "6992": 10, "6993": 78, "6994": 77, "6995": 35, "6997": 10, "6998": 155, "6999": 155, "7003": 111, "7004": 111, "7005": 21, "7010": 10, "7011": 10, "7012": 10, "7013": 10, "7014": 10, "7021": 10, "7024": 10, "7031": 10, "7039": 10, "7049": 10, "7051": 10, "7078": 68, "7079": 64, "7080": 64, "7081": 60, "7082": 60, "7084": 145, "7085": 142, "7086": 162, "7105": 20, "7106": 18, "7107": 18, "7108": 18, "7109": 18, "7110": 18, "7111": 18, "7112": 18, "7113": 18, "7114": 18, "7115": 10, "7120": 10, "7125": 10, "7128": 10, "7130": 10, "7132": 10, "7133": 300, "7134": 300, "7135": 100, "7137": 70, "7138": 88, "7139": 88, "7140": 88, "7141": 4, "7142": 10, "7144": 10, "7145": 10, "7146": 10, "7147": 10, "7148": 10, "7149": 10, "7150": 10, "7152": 10, "7156": 10, "7157": 10, "7158": 4, "7159": 31, "7160": 97, "7161": 8, "7162": 8, "7202": 5, "7204": 5, "7206": 10, "7207": 10, "7209": 10, "7210": 10, "7211": 10, "7212": 10, "7213": 10, "7214": 10, "7215": 10, "7216": 10, "7217": 10, "7218": 10, "7219": 10, "7220": 10, "7221": 10, "7222": 10, "7223": 10, "7224": 10, "7225": 10, "7226": 10, "7227": 10, "7228": 10, "7229": 10, "7230": 10, "7231": 10, "7232": 10, "7233": 10, "7234": 10, "7235": 10, "7236": 10, "7275": 10, "7285": 10, "7329": 556, "7330": 117, "7331": 43, "7332": 43, "7334": 48, "7335": 10, "7336": 108, "7337": 10, "7338": 81, "7339": 620, "7340": 620, "7341": 528, "7342": 115, "7343": 750, "7344": 750, "7345": 10, "7346": 104, "7347": 10, "7348": 110, "7349": 667, "7350": 125, "7352": 48, "7353": 1, "7354": 41, "7355": 476, "7356": 476, "7357": 476, "7358": 476, "7359": 476, "7360": 476, "7361": 62, "7362": 31, "7363": 10, "7364": 81, "7365": 10, "7366": 81, "7368": 48, "7371": 48, "7373": 100, "7374": 10, "7375": 694, "7376": 694, "7378": 65, "7379": 120, "7380": 120, "7381": 75, "7382": 75, "7398": 7, "7417": 2, "7425": 10, "7426": 10, "7438": 10, "7439": 10, "7440": 10, "7441": 10, "7443": 11, "7459": 75, "7460": 75, "7461": 5, "7462": 120, "7463": 120, "7475": 42, "7476": 50, "7477": 50, "7479": 60, "7480": 70, "7481": 42, "7482": 42, "7483": 42, "7484": 42, "7485": 42, "7486": 42, "7487": 42, "7488": 42, "7492": 42, "7493": 42, "7494": 42, "7495": 42, "7496": 42, "7497": 38, "7500": 42, "7501": 42, "7502": 42, "7503": 42, "7504": 10, "7505": 10, "7506": 10, "7507": 10, "7508": 10, "7510": 10, "7511": 10, "7512": 10, "7513": 10, "7514": 10, "7515": 10, "7518": 10, "7519": 10, "7520": 10, "7528": 22, "7532": 10, "7551": 250, "7552": 250, "7553": 250, "7554": 250, "7555": 250, "7556": 250, "7557": 250, "7558": 250, "7559": 10, "7560": 10, "7561": 10, "7562": 10, "7563": 10, "7564": 10, "7565": 10, "7566": 10, "7569": 10, "7570": 10, "7571": 10, "7572": 10, "7573": 10, "7580": 10, "7582": 10, "7583": 10, "7585": 10, "7586": 10, "7593": 10, "7605": 10, "7606": 95, "7607": 105, "7608": 120, "7609": 130, "7614": 95, "7615": 105, "7616": 120, "7617": 130, "7618": 95, "7619": 105, "7620": 120, "7621": 130, "7626": 95, "7627": 105, "7628": 120, "7629": 130, "7631": 95, "7632": 120, "7634": 95, "7635": 120, "7640": 90, "7641": 90, "7642": 112, "7643": 116, "7644": 88, "7645": 88, "7646": 88, "7647": 88, "7648": 88, "7649": 88, "7650": 88, "7651": 88, "7654": 65, "7655": 65, "7656": 65, "7657": 65, "7658": 65, "7659": 65, "7660": 65, "7661": 65, "7682": 105, "7683": 105, "7691": 95, "7692": 105, "7693": 120, "7694": 120, "7695": 95, "7696": 105, "7697": 120, "7698": 120, "7699": 95, "7700": 105, "7701": 120, "7702": 130, "7703": 95, "7704": 105, "7705": 120, "7706": 130, "7711": 34, "7713": 50, "7714": 35, "7715": 35, "7716": 35, "7727": 17, "7736": 50, "7740": 10, "7741": 5, "7747": 10, "7752": 10, "7756": 10, "7767": 80, "7768": 80, "7769": 80, "7772": 54, "7773": 54, "7823": 105, "7891": 15, "7958": 10, "7959": 10, "7969": 10, "8133": 2000, "8149": 62, "8150": 62, "8151": 62, "8349": 326, "8350": 326, "8351": 326, "8352": 326, "8353": 326, "8354": 326, "8355": 326, "8356": 326, "8357": 326, "8358": 326, "8359": 326, "8360": 326, "8361": 326, "8362": 326, "8363": 326, "8364": 326, "8365": 326, "8366": 326, "696": 10, "698": 10, "4856": 10, "4872": 10, "4874": 10, "4878": 10, "4883": 10, "4885": 10, "4887": 10, "4895": 10, "7168": 10, "5479": 10, "5483": 10, "5484": 10, "5485": 10, "5486": 10, "5487": 10, "5493": 10, "5494": 10, "5495": 10, "5496": 10, "5499": 10, "5500": 10, "5501": 10, "7126": 10, "7129": 10, "90": 29, "91": 24, "92": 17, "93": 59, "187": 10, "459": 14, "1471": 77, "2036": 51, "2037": 51, "2715": 10, "2717": 10, "3151": 10, "3222": 5, "3291": 11, "3581": 29, "3697": 24, "3698": 25, "3699": 25, "3700": 28, "3701": 28, "3702": 35, "3703": 31, "3704": 31, "3705": 10, "4384": 68, "4385": 48, "4386": 85, "4532": 105, "5332": 29, "5333": 29, "5334": 29, "5335": 24, "5336": 24, "5337": 17, "5338": 17, "5339": 17, "5340": 17, "5341": 60, "5365": 48, "5366": 60, "5367": 85, "5368": 85, "5381": 88, "5385": 81, "5386": 78, "5387": 78, "5388": 71, "5389": 72, "5390": 420, "5391": 78, "5392": 74, "5411": 78, "5412": 81, "5422": 90, "6091": 22, "6092": 22, "6093": 12, "6103": 75, "6104": 90, "6105": 92, "6106": 91, "6107": 87, "6764": 97, "6765": 108, "6766": 120, "6767": 115, "6768": 140, "7127": 10, "2177": 10, "3322": 10, "4527": 105, "4528": 105, "5524": 80, "2250": 2, "2249": 3, "391": 20, "393": 48, "394": 85, "395": 120, "396": 170, "413": 25, "414": 40, "415": 60, "416": 86, "417": 120, "418": 166, "1677": 100, "1676": 40, "1678": 100, "3851": 80, "408": 100, "6742": 20, "6744": 20, "7151": 10, "7153": 10, "7154": 10, "7155": 10} \ No newline at end of file diff --git a/client/plugins/KondoKit/res/runescape_small.ttf b/client/plugins/KondoKit/res/runescape_small.ttf new file mode 100644 index 0000000..4f3d764 Binary files /dev/null and b/client/plugins/KondoKit/res/runescape_small.ttf differ diff --git a/client/plugins/LoginTimer/plugin.properties b/client/plugins/LoginTimer/plugin.properties new file mode 100644 index 0000000..1f9beaa --- /dev/null +++ b/client/plugins/LoginTimer/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Woahscam, Ceikry' +DESCRIPTION='Displays the session time played, system time, or no time over the "Report Abuse" button.' +VERSION=1.1 \ No newline at end of file diff --git a/client/plugins/MiniMenuQOL/plugin.properties b/client/plugins/MiniMenuQOL/plugin.properties new file mode 100644 index 0000000..91bfb7c --- /dev/null +++ b/client/plugins/MiniMenuQOL/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Provides debug and some basic QOL for the MiniMenu' +VERSION=1.0 \ No newline at end of file diff --git a/client/plugins/OverheadDebugPlugin/plugin.properties b/client/plugins/OverheadDebugPlugin/plugin.properties new file mode 100644 index 0000000..e8b0c4f --- /dev/null +++ b/client/plugins/OverheadDebugPlugin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Draws helpful overhead debug information.' +VERSION=1.3 \ No newline at end of file diff --git a/client/plugins/RememberMyLogin/plugin.properties b/client/plugins/RememberMyLogin/plugin.properties new file mode 100644 index 0000000..c010f1b --- /dev/null +++ b/client/plugins/RememberMyLogin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Stores your last used login for automatic reuse, per server' +VERSION=1.1 \ No newline at end of file diff --git a/client/plugins/SlayerTrackerPlugin/plugin.properties b/client/plugins/SlayerTrackerPlugin/plugin.properties new file mode 100644 index 0000000..ca7efb5 --- /dev/null +++ b/client/plugins/SlayerTrackerPlugin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry, Greg' +DESCRIPTION='Draws a simple slayer task tracker onto the screen if one is active.' +VERSION=1.1 \ No newline at end of file diff --git a/client/plugins/TabReply/plugin.properties b/client/plugins/TabReply/plugin.properties new file mode 100644 index 0000000..bf77a72 --- /dev/null +++ b/client/plugins/TabReply/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Allows you to press tab to reply to DMs.' +VERSION=1.0 \ No newline at end of file diff --git a/client/plugins/TakeScreenshot/plugin.properties b/client/plugins/TakeScreenshot/plugin.properties new file mode 100644 index 0000000..51234cb --- /dev/null +++ b/client/plugins/TakeScreenshot/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='ipkpjersi' +DESCRIPTION='Allows you to use CRTL + PRINTSCREEN to take a screenshot.' +VERSION=1.0 \ No newline at end of file diff --git a/client/plugins/ToggleResizableSD/plugin.properties b/client/plugins/ToggleResizableSD/plugin.properties new file mode 100644 index 0000000..54fa4cc --- /dev/null +++ b/client/plugins/ToggleResizableSD/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='ipkpjersi' +DESCRIPTION='Allows you to use F12 to toggle resizable SD.' +VERSION=1.1 \ No newline at end of file diff --git a/client/plugins/ValUAdd/plugin.properties b/client/plugins/ValUAdd/plugin.properties new file mode 100644 index 0000000..6a3f2e0 --- /dev/null +++ b/client/plugins/ValUAdd/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='bushtail' +DESCRIPTION='Quickly tally the value of your inventory with a command.' +VERSION=1.0 \ No newline at end of file diff --git a/client/plugins/VarpLogPlugin/plugin.properties b/client/plugins/VarpLogPlugin/plugin.properties new file mode 100644 index 0000000..29a8e09 --- /dev/null +++ b/client/plugins/VarpLogPlugin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Adds a simple log of varp changes drawn directly to the screen.' +VERSION=1.0 \ No newline at end of file diff --git a/client/plugins/XPDropPlugin/plugin.properties b/client/plugins/XPDropPlugin/plugin.properties new file mode 100644 index 0000000..53b820f --- /dev/null +++ b/client/plugins/XPDropPlugin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Draws nice and clean experience drops onto the screen.' +VERSION=1.3 diff --git a/client/plugins/XPDropPlugin/res/rl-lvls.png b/client/plugins/XPDropPlugin/res/rl-lvls.png new file mode 100644 index 0000000..c840a49 Binary files /dev/null and b/client/plugins/XPDropPlugin/res/rl-lvls.png differ diff --git a/client/plugins/XPDropPlugin/res/xpIco.png b/client/plugins/XPDropPlugin/res/xpIco.png new file mode 100644 index 0000000..c68a872 Binary files /dev/null and b/client/plugins/XPDropPlugin/res/xpIco.png differ diff --git a/client/plugins/XPGlobesPlugin/plugin.properties b/client/plugins/XPGlobesPlugin/plugin.properties new file mode 100644 index 0000000..d5a64b8 --- /dev/null +++ b/client/plugins/XPGlobesPlugin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Pyrethus' +DESCRIPTION='Draws experience globes (level progress) on experience gains.' +VERSION=0.9 diff --git a/client/src/main/java/plugin/Plugin.java b/client/src/main/java/plugin/Plugin.java new file mode 100644 index 0000000..e8e3641 --- /dev/null +++ b/client/src/main/java/plugin/Plugin.java @@ -0,0 +1,147 @@ +package plugin; + +import plugin.api.MiniMenuEntry; +import rt4.Component; +import rt4.Npc; +import rt4.Player; +import rt4.Tile; + +/** + * The base plugin class which is meant to be extended by plugins. + * Contains callbacks to many parts of the internal client code. + * @author ceikry + */ +public abstract class Plugin { + long timeOfLastDraw; + long timeOfLastLateDraw; + + void _init() { + Init(); + } + + void _draw() { + long nowTime = System.currentTimeMillis(); + Draw(nowTime - timeOfLastDraw); + timeOfLastDraw = nowTime; + } + + void _lateDraw() { + long nowTime = System.currentTimeMillis(); + LateDraw(nowTime - timeOfLastLateDraw); + timeOfLastLateDraw = nowTime; + } + + /** + * Draw() is called by the client rendering loop so that plugins can draw information onto the screen. + * This will be called once per frame, meaning it is framerate bound. + * @param timeDelta the time (ms) elapsed since the last draw call. + */ + public void Draw(long timeDelta) {} + + + /** + * LateDraw() is called at the end of a finalized frame + * This will be called once per frame, meaning it is framerate bound. + * @param timeDelta the time (ms) elapsed since the last draw call. + */ + public void LateDraw(long timeDelta) {} + + /** + * Init() is called when the plugin is first loaded + */ + public void Init() {} + + /** + * OnXPUpdate() is called when the client receives an XP update packet. This includes at login. + * @param skill - the skill ID being updated + * @param xp - the new total XP for the skill. + */ + public void OnXPUpdate(int skill, int xp) {} + + /** + * Update() is called once every 1000 client loops. + * This should be used for things that do need to update occasionally during runtime, + * but don't need to update super often. + */ + public void Update() {} + + /** + * PlayerOverheadDraw() is called once per frame, for every player on the screen. :) Expensive. + * @param screenX the X coordinate on the screen for overhead drawing + * @param screenY the Y coordinate on the screen for overhead drawing + */ + public void PlayerOverheadDraw(Player player, int screenX, int screenY) {} + + /** + * NPCOverheadDraw() is called once per frame, for every NPC on the screen. :) Expensive. + * @param screenX the X coordinate on the screen for overhead drawing + * @param screenY the Y coordinate on the screen for overhead drawing + */ + public void NPCOverheadDraw(Npc npc, int screenX, int screenY) {} + + /** + * ProcessCommand is called when a user types and sends a message prefixed with :: + * @param commandStr the command the user used - should include :: in comparisons, eg
commandStr.equals("::command")
+ * @param args any other tokens included with the initial message. Tokens are determined by spaces. + */ + public void ProcessCommand(String commandStr, String[] args) {} + + /** + * ComponentDraw is called when an interface component is being rendered by the client. + * @param componentIndex the index of the component in its parent interface. + * @param component the component itself + * @param screenX the screen X coordinate of this component + * @param screenY the screen Y coordinate of this component + */ + public void ComponentDraw(int componentIndex, Component component, int screenX, int screenY) {} + + /** + * OnVarpUpdate is called when varps are updated by the server sending packets. + * @param id the ID of the varp + * @param value the value the varp is being set to. + */ + public void OnVarpUpdate(int id, int value) {} + + /** + * OnLogin is called when the client processes a login. + */ + public void OnLogin() {} + + + /** + * Called when an NPC is killed. + * + * @param npcID the unique identifier of the NPC + * @param x the x-coordinate where the NPC died + * @param z the z-coordinate where the NPC died + */ + public void OnKillingBlowNPC(int npcID, int x, int z) {} + + /** + * OnLogout is called when the client logs out. This should be used to clear player-relevant plugin state. + */ + public void OnLogout() {} + + /** + * Called when the client attempts to reload plugins. + * Implement this method to control the behavior of the plugin during a reload. + * + * @return {@code false} to allow the plugin to be reloaded. + * {@code true} to prevent the plugin from being reloaded and stay loaded, + */ + public boolean OnPluginsReloaded() { + return false; + } + + /** + * DrawMiniMenu is called when a MiniMenu entry has been created. + * @param entry the entry + */ + public void DrawMiniMenu(MiniMenuEntry entry) {} + + /** + * Called by the client code when we generate the MiniMenu + * @param currentEntries + */ + public void OnMiniMenuCreate(MiniMenuEntry[] currentEntries) {} +} diff --git a/client/src/main/java/plugin/PluginInfo.java b/client/src/main/java/plugin/PluginInfo.java new file mode 100644 index 0000000..1550394 --- /dev/null +++ b/client/src/main/java/plugin/PluginInfo.java @@ -0,0 +1,73 @@ +package plugin; + +import plugin.annotations.PluginMeta; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.Objects; +import java.util.Properties; + +/** + * A data class for storing information about plugins. + * @author ceikry + */ +public class PluginInfo { + public double version; + public String author; + public String description; + + public PluginInfo(String author, String description, double version) { + this.version = version; + this.author = author; + this.description = description; + } + + public static PluginInfo loadFromFile(File file) { + Properties prop = new Properties(); + + try { + prop.load(new FileReader(file)); + } catch (FileNotFoundException e) { + System.err.println("File does not exist! - " + file.getAbsolutePath()); + return new PluginInfo("", "", 0.0); + } catch (IOException e) { + e.printStackTrace(); + return new PluginInfo("", "", 0.0); + } + + return new PluginInfo( + prop.get("AUTHOR").toString(), + prop.get("DESCRIPTION").toString(), + Double.parseDouble(prop.get("VERSION").toString()) + ); + } + + public static PluginInfo loadFromClass(Class clazz) { + PluginMeta info = clazz.getAnnotation(PluginMeta.class); + + if (info == null) { + return null; + } + + return new PluginInfo( + info.author(), + info.description(), + info.version() + ); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PluginInfo that = (PluginInfo) o; + return Double.compare(that.version, version) == 0 && Objects.equals(author, that.author) && Objects.equals(description, that.description); + } + + @Override + public int hashCode() { + return Objects.hash(version, author, description); + } +} diff --git a/client/src/main/java/plugin/PluginRepository.java b/client/src/main/java/plugin/PluginRepository.java new file mode 100644 index 0000000..55faf80 --- /dev/null +++ b/client/src/main/java/plugin/PluginRepository.java @@ -0,0 +1,227 @@ +package plugin; + +import plugin.api.API; +import plugin.api.MiniMenuEntry; +import plugin.api.MiniMenuType; +import rt4.*; + +import java.awt.event.KeyAdapter; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseListener; +import java.awt.event.MouseWheelListener; +import java.io.*; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Responsible for loading and broadcasting methods to all plugins. + * @author ceikry + */ +public class PluginRepository { + static HashMap loadedPlugins = new HashMap<>(); + public static HashMap pluginStorage = new HashMap<>(); + + public static void registerPlugin(PluginInfo info, Plugin plugin) { + loadedPlugins.put(info, plugin); + } + + public static int lastMiniMenu; + + public static void reloadPlugins() { + for (KeyAdapter k : API.registeredKeyListeners) { + GameShell.canvas.removeKeyListener(k); + } + for (MouseAdapter m : API.registeredMouseListeners) { + GameShell.canvas.removeMouseListener(m); + GameShell.canvas.removeMouseMotionListener(m); + } + for (MouseWheelListener mw : API.registeredWheelListeners) { + GameShell.canvas.removeMouseWheelListener(mw); + } + API.registeredWheelListeners.clear(); + API.registeredMouseListeners.clear(); + API.registeredKeyListeners.clear(); + + HashMap pluginsToKeep = new HashMap<>(); + + // Check and store plugins with OnPluginsReloaded method + loadedPlugins.forEach((info, plugin) -> { + try { + boolean keep = plugin.OnPluginsReloaded(); + if (keep) { + pluginsToKeep.put(info, plugin); + } + } catch (Exception e) { + e.printStackTrace(); + } + }); + + loadedPlugins.clear(); + loadedPlugins.putAll(pluginsToKeep); + SaveStorage(); + Init(); + } + + public static void Init() { + if (GlobalJsonConfig.instance == null) + return; + File pluginsDirectory = new File(GlobalJsonConfig.instance.pluginsFolder); + + if (!pluginsDirectory.exists()) { + System.out.println("Skipping plugin initialization - " + pluginsDirectory.getAbsolutePath() + " does not exist."); + return; + } + + File pluginStorage = new File(GlobalJsonConfig.instance.pluginsFolder + File.separator + "plsto"); + if (pluginStorage.exists()) { + try (FileInputStream fis = new FileInputStream(pluginStorage)) { + ObjectInputStream ois = new ObjectInputStream(fis); + PluginRepository.pluginStorage = (HashMap) ois.readObject(); + ois.close(); + } catch (Exception e) {e.printStackTrace();} + } + + Runtime.getRuntime().addShutdownHook(new Thread(PluginRepository::SaveStorage)); + + try { + URL[] classPath = {pluginsDirectory.toURI().toURL()}; + URLClassLoader loader = new URLClassLoader(classPath); + + for(File file : Objects.requireNonNull(pluginsDirectory.listFiles())) { + if(!file.isDirectory()) continue; + if(file.getName().equals("META-INF")) continue; + + File infoFile = new File(file.getAbsoluteFile() + File.separator + "plugin.properties"); + File pluginRoot = new File(file.getAbsoluteFile() + File.separator + "plugin.class"); + + if (!pluginRoot.exists()) { + System.err.println("Unable to load plugin " + file.getName() + " because plugin.class is absent!"); + continue; + } + + Class clazz = loader.loadClass(file.getName() + ".plugin"); + + PluginInfo info = null; + try { + if (infoFile.exists()) + info = PluginInfo.loadFromFile(infoFile); + else + info = PluginInfo.loadFromClass(clazz); + } catch (Exception e) { + System.err.println("Unable to load plugin " + file.getName() + " because there were issues parsing its info: "); + e.printStackTrace(); + } + + if (info == null) { + System.err.println("Unable to load plugin " + file.getName() + " because it contains no information about author, version, etc!"); + continue; + } + + if (loadedPlugins.containsKey(info)) { + System.out.println("Skipping reloading of plugin " + file.getName() + " as it already exists and has OnPluginsReloaded."); + continue; + } + + try { + Plugin thisPlugin = (Plugin) clazz.newInstance(); + thisPlugin._init(); + registerPlugin(info, thisPlugin); + } catch (Exception e) { + System.err.println("Error loading plugin " + file.getName() + ":"); + e.printStackTrace(); + return; + } + + List otherClasses = Arrays.stream(Objects.requireNonNull(file.listFiles())) + .filter((f) -> + !f.getName().equals("plugin.class") && f.getName().contains(".class")) + .collect(Collectors.toList()); + + for (File f : otherClasses) { + loader.loadClass(file.getName() + "." + f.getName().replace(".class","")); + } + + System.out.println("Successfully loaded plugin " + file.getName() + ", version " + info.version); + } + } catch (Exception e) { + System.err.println("Unexpected exception during plugin initialization:"); + e.printStackTrace(); + } + } + + public static void Update() { + loadedPlugins.values().forEach(Plugin::Update); + } + + public static void Draw() { + List pluginsSnapshot = new ArrayList<>(loadedPlugins.values()); + pluginsSnapshot.forEach(Plugin::_draw); + } + + public static void LateDraw() { + List pluginsSnapshot = new ArrayList<>(loadedPlugins.values()); + pluginsSnapshot.forEach(Plugin::_lateDraw); + } + + public static void NPCOverheadDraw(Npc npc, int screenX, int screenY) { + loadedPlugins.values().forEach((plugin) -> plugin.NPCOverheadDraw(npc, screenX, screenY)); + } + + public static void PlayerOverheadDraw(Player player, int screenX, int screenY) { + loadedPlugins.values().forEach((plugin) -> plugin.PlayerOverheadDraw(player, screenX, screenY)); + } + + public static void ProcessCommand(JagString commandStr) { + String[] tokens = commandStr.toString().split(" "); + String[] args = Arrays.copyOfRange(tokens, 1, tokens.length); + List pluginsSnapshot = new ArrayList<>(loadedPlugins.values()); + pluginsSnapshot.forEach((plugin) -> plugin.ProcessCommand(tokens[0], args)); + } + + public static void ComponentDraw(int componentIndex, Component component, int screenX, int screenY) { + loadedPlugins.values().forEach((plugin) -> plugin.ComponentDraw(componentIndex, component, screenX, screenY)); + } + + public static void OnVarpUpdate(int id, int value) { + loadedPlugins.values().forEach((plugin) -> plugin.OnVarpUpdate(id, value)); + } + + public static void OnXPUpdate(int skill, int xp) { + loadedPlugins.values().forEach((plugin) -> plugin.OnXPUpdate(skill, xp)); + } + + public static void OnLogout() { + List pluginsSnapshot = new ArrayList<>(loadedPlugins.values()); + pluginsSnapshot.forEach(Plugin::OnLogout); + } + + public static void DrawMiniMenu(MiniMenuEntry entry) { + loadedPlugins.values().forEach((plugin) -> plugin.DrawMiniMenu(entry)); + } + + public static void OnMiniMenuCreate() { + API.customMiniMenuIndex = 0; + loadedPlugins.values().forEach((plugin) -> plugin.OnMiniMenuCreate(API.GetMiniMenuEntries())); + } + + public static void OnLogin() { + loadedPlugins.values().forEach((plugin) -> plugin.OnLogin()); + } + + public static void OnKillingBlowNPC(int npcId, int x, int z) { + loadedPlugins.values().forEach((plugin) -> plugin.OnKillingBlowNPC(npcId, x, z)); + } + + public static void SaveStorage() { + if (pluginStorage.containsKey("_keystoreDirty")) { + pluginStorage.remove("_keystoreDirty"); + try(FileOutputStream fos = new FileOutputStream(GlobalJsonConfig.instance.pluginsFolder + File.separator + "plsto")) { + ObjectOutputStream oos = new ObjectOutputStream(fos); + oos.writeObject(PluginRepository.pluginStorage); + oos.close(); + } catch (Exception e) {e.printStackTrace();} + } + } +} diff --git a/client/src/main/java/plugin/annotations/PluginMeta.java b/client/src/main/java/plugin/annotations/PluginMeta.java new file mode 100644 index 0000000..cd84f12 --- /dev/null +++ b/client/src/main/java/plugin/annotations/PluginMeta.java @@ -0,0 +1,11 @@ +package plugin.annotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface PluginMeta { + String author(); + String description(); + double version(); +} diff --git a/client/src/main/java/plugin/api/API.java b/client/src/main/java/plugin/api/API.java new file mode 100644 index 0000000..78ec7b3 --- /dev/null +++ b/client/src/main/java/plugin/api/API.java @@ -0,0 +1,405 @@ +package plugin.api; + +import plugin.PluginRepository; +import rt4.*; +import rt4.DisplayMode; +import rt4.Font; + +import java.awt.*; +import java.awt.event.*; +import java.awt.image.BufferedImage; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; + +import static rt4.MathUtils.clamp; +import static rt4.Player.plane; + +/** + * API used for writing plugins, so dozens of plugins don't break when we rename shit :) + * @author ceikry + */ +public class API { + public static Runnable[] miniMenuCustomActions = new Runnable[10]; + public static int customMiniMenuIndex = 0; + public static ArrayList registeredKeyListeners = new ArrayList<>(); + public static ArrayList registeredMouseListeners = new ArrayList<>(); + public static ArrayList registeredWheelListeners = new ArrayList<>(); + + public static void DrawText(FontType fontType, FontColor color, TextModifier mod, String text, int screenX, int screenY) { + JagString js = JagString.of(text); + + Font font; + switch (fontType) { + case SMALL: + font = Fonts.p11Full; + break; + case LARGE: + font = Fonts.p12Full; + break; + default: + return; + } + + switch (mod) { + case CENTER: + font.renderCenter(js, screenX, screenY, color.colorCode, -1); + break; + case LEFT: + font.renderLeft(js, screenX, screenY, color.colorCode, -1); + break; + case RIGHT: + font.renderRight(js, screenX, screenY, color.colorCode, -1); + break; + case SHAKE: + font.renderShake(js, screenX, screenY, color.colorCode, -1, 100); + break; + case WAVE: + font.renderWave(js, screenX, screenY, color.colorCode, -1); + break; + case WAVE_2: + font.renderWave2(js, screenX, screenY, color.colorCode, -1); + break; + } + } + + public static boolean PlayerHasPrivilege(Privileges privilege) { + return LoginManager.staffModLevel >= privilege.ordinal(); + } + + public static EnumType GetDataMap(int id) { + return EnumTypeList.get(id); + } + + public static boolean IsHD() { + return GlRenderer.enabled; + } + + public static Sprite GetSprite(int spriteId) { + Sprite rawSprite = null; + + if (client.js5Archive8.isFileReady(spriteId)) { + rawSprite = SpriteLoader.loadSprites(spriteId, client.js5Archive8); + } + + return rawSprite; + } + + public static Sprite GetObjSprite(int objId, int qty, boolean drawText, int outlineType, int shadowIntensity) { + return Inv.getObjectSprite(outlineType, objId, drawText, qty, shadowIntensity); + } + + public static Sprite GetSpriteFromPNG(BufferedImage image) { + return SpritePNGLoader.getImageIndexedSprite(image); + } + + public static WindowMode GetWindowMode() { + int mode = DisplayMode.getWindowMode(); + switch(mode) { + case 2: + return WindowMode.RESIZABLE; + case 3: + return WindowMode.FULLSCREEN; + default: + return WindowMode.FIXED; + } + } + + public static Dimension GetWindowDimensions() { + return new Dimension(GameShell.canvasWidth, GameShell.canvasHeight); + } + + public static void FillRect(int x, int y, int width, int height, int color, int alpha) { + if (IsHD()) { + if (alpha != 0) + GlRaster.fillRectAlpha(x,y,width,height,color,alpha); + else + GlRaster.fillRect(x,y,width,height,color); + } else { + if (alpha != 0) + SoftwareRaster.fillRectAlpha(x,y,width,height,color,alpha); + else + SoftwareRaster.fillRect(x,y,width,height,color); + } + } + + public static void DrawRect(int x, int y, int width, int height, int color) { + if (IsHD()) { + GlRaster.drawRect(x, y, width, height, color); + } else { + SoftwareRaster.drawRect(x, y, width, height, color); + } + } + + public static void ClipRect(int x, int y, int width, int height) { + if (IsHD()) { + GlRaster.setClip(x,y,width,height); + } else { + SoftwareRaster.setClip(x,y,width,height); + } + } + + public static void AddMouseListener(MouseAdapter m) { + GameShell.canvas.addMouseListener(m); + GameShell.canvas.addMouseMotionListener(m); + registeredMouseListeners.add(m); + } + + public static void AddMouseWheelListener(MouseWheelListener mw) { + GameShell.canvas.addMouseWheelListener(mw); + registeredWheelListeners.add(mw); + } + + public static void AddKeyboardListener(KeyAdapter k) { + GameShell.canvas.addKeyListener(k); + registeredKeyListeners.add(k); + } + + public static void SetCameraYaw(double targetYaw) { + Camera.yawTarget = targetYaw; + Camera.clampCameraAngle(); + } + + public static void UpdateCameraYaw(double yawDiff) { + Camera.yawTarget += yawDiff; + Camera.clampCameraAngle(); + } + + public static double GetCameraYaw() { + return Camera.yawTarget; + } + + public static void SetCameraPitch(double targetPitch) { + Camera.pitchTarget = targetPitch; + Camera.clampCameraAngle(); + } + + public static void UpdateCameraPitch(double pitchDiff) { + Camera.pitchTarget += pitchDiff; + Camera.clampCameraAngle(); + } + + public static double GetCameraPitch() { + return Camera.pitchTarget; + } + + public static void UpdateCameraZoom(int zoomDiff) { + Camera.ZOOM = clamp(1, 2000, Camera.ZOOM + (zoomDiff >= 0 ? 50 : -50)); + } + + public static void SetCameraZoom(int zoomTarget) { + Camera.ZOOM = clamp(1, 2000, zoomTarget); + } + + public static int GetCameraZoom() { + return Camera.ZOOM; + } + + public static int GetMouseWheelRotation() { + return ((JavaMouseWheel) client.mouseWheel).currentRotation; + } + + public static int GetPreviousMouseWheelRotation() { + return ((JavaMouseWheel) client.mouseWheel).previousRotation; + } + + public static int GetMouseX() { + return Mouse.currentMouseX; + } + + public static int GetMouseY() { + return Mouse.currentMouseY; + } + + /** + * Very simple wrapper around the already rename Keyboard checks. + * @param keycode the keycode to use. Keyboard class has named constants for these + */ + public static boolean IsKeyPressed(int keycode) { + return Keyboard.pressedKeys[keycode]; + } + + public static MiniMenuEntry[] GetMiniMenuEntries() { + ArrayList entries = new ArrayList<>(); + for (int i = 0; i < MiniMenu.size; i++) { + if (MiniMenu.opBases[i] == null) continue; + entries.add(new MiniMenuEntry(i)); + } + return entries.toArray(new MiniMenuEntry[]{}); + } + + public static MiniMenuEntry InsertMiniMenuEntry(String verb, String subject, Runnable onClick) { + if (customMiniMenuIndex == 10) { + return null; + } + + MiniMenuEntry entry = new MiniMenuEntry(MiniMenu.size); + entry.setVerb(verb); + entry.setSubject(subject); + MiniMenu.actions[MiniMenu.size] = (short) (9990 + customMiniMenuIndex); + miniMenuCustomActions[customMiniMenuIndex++] = onClick; + MiniMenu.size++; + return entry; + } + + public static boolean IsLoggedIn() { + return client.gameState == 30; + } + + public static void StoreData(String key, Object value) { + PluginRepository.pluginStorage.put(key, value); + PluginRepository.pluginStorage.put("_keystoreDirty", true); + } + + public static Object GetData(String key) { + return PluginRepository.pluginStorage.get(key); + } + + public static void SetVarcStr(int varcId, String str) { + VarcDomain.varcstrs[varcId] = JagString.of(str); + VarcDomain.updatedVarcstrs[VarcDomain.updatedVarcstrsWriterIndex++] = varcId; + } + + public static void SetVarc(int varcId, int value) { + VarcDomain.varcs[varcId] = value; + VarcDomain.updatedVarcs[VarcDomain.updatedVarcsWriterIndex++] = varcId; + } + + public static void SetVarp(int varpId, int value) { + VarpDomain.setVarbit(varpId, value); + } + + public static void SetVarbit(int varbitId, int value) { + VarpDomain.setVarbitClient(varbitId, value); + } + + public static void DispatchCommand(String command) { + Cheat.sendCheatPacket(JagString.of(command)); + } + + public static void Screenshot(String... subfolders) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd-HH_mm_ss"); + String dateTime = dateFormat.format(new Date()); + String username = PlayerList.self != null && PlayerList.self.username != null && !PlayerList.self.username.toString().isEmpty() ? PlayerList.self.username.toString() : "2009Scape"; + client.instance.saveScreenshot( username + "_" + dateTime + ".png", subfolders); + } + + public static void PlaySound(int volume, int trackId, int delay) { + SoundPlayer.play(volume, trackId, delay); + } + + public static void PlayMusic(int volume, int trackId) { + MidiPlayer.playFadeOut(trackId, client.js5Archive6, volume); + } + + public static void SetLoginScreenMusicOnLoad(String song) { + client.TITLE_SONG = JagString.parse(song); + } + + /** + * Calculates the 2D screen position for a position in the SceneGraph. + * + * @param entityX The x-coordinate of the entity in the scene graph. + * @param entityZ The z-coordinate of the entity in the scene graph. + * @param yOffset The vertical displacement for positioning the entity. + * @return An array containing the calculated screen coordinates [x, y] or [-1, -1] if entity is not visible. + */ + public static int[] CalculateSceneGraphScreenPosition(int entityX, int entityZ, int yOffset) { + final int HALF_FIXED_WIDTH = 256; + final int HALF_FIXED_HEIGHT = 167; + final int RESIZABLE_SD_OFFSET = 500; + + int elevation = SceneGraph.getTileHeight(plane, entityX, entityZ) - yOffset; + entityX -= SceneGraph.cameraX; + elevation -= SceneGraph.cameraY; + entityZ -= SceneGraph.cameraZ; + + int sinPitch = MathUtils.sin[Camera.cameraPitch]; + int cosPitch = MathUtils.cos[Camera.cameraPitch]; + int sinYaw = MathUtils.sin[Camera.cameraYaw]; + int cosYaw = MathUtils.cos[Camera.cameraYaw]; + + int rotatedX = (entityZ * sinYaw + entityX * cosYaw) >> 16; + entityZ = (entityZ * cosYaw - entityX * sinYaw) >> 16; + entityX = rotatedX; + + int rotatedY = (elevation * cosPitch - entityZ * sinPitch) >> 16; + entityZ = (elevation * sinPitch + entityZ * cosPitch) >> 16; + elevation = rotatedY; + + int[] screenPos = new int[2]; // X,Y + + if (entityZ >= 50) { + if (GetWindowMode() == WindowMode.FIXED) { + screenPos[0] = HALF_FIXED_WIDTH + ((entityX << 9) / entityZ); + screenPos[1] = HALF_FIXED_HEIGHT + ((elevation << 9) / entityZ); + } else { + Dimension canvas = GetWindowDimensions(); + double newViewDistH; + double newViewDistV; + + if (API.IsHD()) { + newViewDistH = (canvas.width / 2) / Math.tan(Math.toRadians(GlRenderer.hFOV) / 2); + newViewDistV = (canvas.height / 2) / Math.tan(Math.toRadians(GlRenderer.vFOV) / 2); + } else { + double aspectRatio = (double) canvas.width / canvas.height; + double vFOV = 2 * Math.toDegrees(Math.atan((double) canvas.height / (2 * RESIZABLE_SD_OFFSET))); + double hFOV = 2 * Math.toDegrees(Math.atan(Math.tan(Math.toRadians(vFOV / 2)) * aspectRatio)); + + newViewDistH = (canvas.width / 2) / Math.tan(Math.toRadians(hFOV) / 2); + newViewDistV = (canvas.height / 2) / Math.tan(Math.toRadians(vFOV) / 2); + } + screenPos[0] = canvas.width / 2 + (int) ((entityX * newViewDistH) / entityZ); + screenPos[1] = canvas.height / 2 + (int) ((elevation * newViewDistV) / entityZ); + } + } else { + screenPos[0] = -1; + screenPos[1] = -1; + } + return screenPos; + } + + public static void PlayJingle(int jingleId) { + MusicPlayer.playJingle(-1, jingleId); + } + + public static void SetMusicVolume(int volume) { + Preferences.musicVolume = volume; + } + + public static int GetMusicVolume() { + return Preferences.musicVolume; + } + + public static void SetSoundVolume(int volume) { + Preferences.soundEffectVolume = volume; + } + + public static int GetSoundVolume() { + return Preferences.soundEffectVolume; + } + + public static void SetAmbientVolume(int volume) { + Preferences.ambientSoundsVolume = volume; + } + + public static int GetAmbientVolume() { + return Preferences.ambientSoundsVolume; + } + + public static boolean IsMusicPlaying() { + return MidiPlayer.isPlaying(); + } + + public static boolean IsSoundPlaying() { + return SoundPlayer.size != 0; + } + + public static void SendMessage(String message) { + Chat.add(JagString.EMPTY, 0, JagString.of(message)); + } + + public static void RequestNewSong() { + SoundPlayer.sendTrackEndPacket(); + } +} diff --git a/client/src/main/java/plugin/api/FontColor.java b/client/src/main/java/plugin/api/FontColor.java new file mode 100644 index 0000000..a7e43e7 --- /dev/null +++ b/client/src/main/java/plugin/api/FontColor.java @@ -0,0 +1,17 @@ +package plugin.api; + +import java.awt.*; + +public class FontColor { + public static FontColor YELLOW = new FontColor(16776960); + + public final int colorCode; + + public FontColor(int colorCode) { + this.colorCode = colorCode; + } + + public static FontColor fromColor(Color color) { + return new FontColor((color.getRed() << 16) + (color.getGreen() << 8) + color.getBlue()); + } +} diff --git a/client/src/main/java/plugin/api/FontType.java b/client/src/main/java/plugin/api/FontType.java new file mode 100644 index 0000000..f03ab16 --- /dev/null +++ b/client/src/main/java/plugin/api/FontType.java @@ -0,0 +1,6 @@ +package plugin.api; + +public enum FontType { + SMALL, + LARGE +} diff --git a/client/src/main/java/plugin/api/MiniMenuAction.java b/client/src/main/java/plugin/api/MiniMenuAction.java new file mode 100644 index 0000000..276feee --- /dev/null +++ b/client/src/main/java/plugin/api/MiniMenuAction.java @@ -0,0 +1,61 @@ +package plugin.api; + +import java.util.HashMap; + +public enum MiniMenuAction { + WALK_HERE(60), + NPC_1(17), + NPC_2(16), + NPC_3(4), + NPC_4(19), + NPC_5(2), + NPC_EXAMINE(1007), + PLAYER_1(30), + PLAYER_BLOCK(34), + PLAYER_TRADE(29), + PLAYER_REQ_ASSIST(37), + PLAYER_FOLLOW(31), + PLAYER_5(57), + OBJ_1(47), + OBJ_EQUIP(5), + OBJ_4(35), + OBJ_OPERATE(23), + OBJ_5(58), + OBJ_EXAMINE(1002), + OBJSTACK_1(18), + OBJSTACK_2(20), + LOC_1(42), + LOC_2(50), + LOC_3(49), + LOC_4(46), + LOC_5(1001), + LOC_EXAMINE(1004), + CUSTOM_1(9990), + CUSTOM_2(9991), + CUSTOM_3(9992), + CUSTOM_4(9993), + CUSTOM_5(9994), + CUSTOM_6(9995), + CUSTOM_7(9996), + CUSTOM_8(9997), + CUSTOM_9(9998), + CUSTOM_10(9999), + ; + + public final short actionCode; + public static HashMap actionCodeMap = new HashMap<>(); + + MiniMenuAction(int actionCode) { + this.actionCode = (short) actionCode; + } + + static { + for (MiniMenuAction a : values()) { + actionCodeMap.put((int) a.actionCode, a); + } + } + + public static MiniMenuAction forActionCode(short actionCode) { + return actionCodeMap.get((int) actionCode); + } +} diff --git a/client/src/main/java/plugin/api/MiniMenuEntry.java b/client/src/main/java/plugin/api/MiniMenuEntry.java new file mode 100644 index 0000000..8210ac6 --- /dev/null +++ b/client/src/main/java/plugin/api/MiniMenuEntry.java @@ -0,0 +1,81 @@ +package plugin.api; + +import rt4.JagString; +import rt4.MiniMenu; + +/** + * Convenience wrapper for mini menu entries + * @author ceikry + */ +public class MiniMenuEntry { + int index; + public MiniMenuEntry(int index) { + this.index = index; + } + + public String getSubject() { + return MiniMenu.opBases[index].toString(); + } + + public void setSubject(String name) { + MiniMenu.opBases[index] = JagString.of(name); + } + + public long getSubjectIndex() { + return MiniMenu.keys[index]; + } + + public MiniMenuType getType() { + if (getSubject().length() < 11) return MiniMenuType.TILE; + + String color = getSubject().substring(5,11); + if (color.equals("00ffff")) return MiniMenuType.LOCATION; + if (color.equals("ffff00")) return MiniMenuType.NPC; + if (color.equals("ffffff")) return MiniMenuType.PLAYER; + if (color.equals("ff9040")) return MiniMenuType.OBJ; + else return MiniMenuType.CUSTOM; + } + + public String getVerb() { + return MiniMenu.ops[index].toString(); + } + + public void setVerb(String verb) { + MiniMenu.ops[index] = JagString.of(verb); + } + + public int getIntArg1() { + return MiniMenu.intArgs1[index]; + } + + public int getIntArg2() { + return MiniMenu.intArgs2[index]; + } + + public int getCursor() { + return MiniMenu.cursors[index]; + } + + public MiniMenuAction getAction() { + int actionCode = MiniMenu.actions[index]; + if (isStrictlySecondary()) actionCode -= 2000; + return MiniMenuAction.forActionCode((short) actionCode); + } + + public short getActionCode() { + return MiniMenu.actions[index]; + } + + public void setAction(MiniMenuAction action) { + MiniMenu.actions[index] = action.actionCode; + } + + public void toggleStrictlySecondary() { + if (isStrictlySecondary()) MiniMenu.actions[index] -= 2000; + else MiniMenu.actions[index] += 2000; + } + + public boolean isStrictlySecondary() { + return MiniMenu.actions[index] >= 2000; + } +} diff --git a/client/src/main/java/plugin/api/MiniMenuType.java b/client/src/main/java/plugin/api/MiniMenuType.java new file mode 100644 index 0000000..f2f3076 --- /dev/null +++ b/client/src/main/java/plugin/api/MiniMenuType.java @@ -0,0 +1,11 @@ +package plugin.api; + +public enum MiniMenuType { + NPC, + PLAYER, + LOCATION, + TILE, + OBJ, + OBJSTACK, + CUSTOM +} diff --git a/client/src/main/java/plugin/api/Privileges.java b/client/src/main/java/plugin/api/Privileges.java new file mode 100644 index 0000000..75216b6 --- /dev/null +++ b/client/src/main/java/plugin/api/Privileges.java @@ -0,0 +1,7 @@ +package plugin.api; + +public enum Privileges { + NONE, + PMOD, + JMOD +} diff --git a/client/src/main/java/plugin/api/SpritePNGLoader.java b/client/src/main/java/plugin/api/SpritePNGLoader.java new file mode 100644 index 0000000..c937a2c --- /dev/null +++ b/client/src/main/java/plugin/api/SpritePNGLoader.java @@ -0,0 +1,106 @@ +package plugin.api; + +import rt4.GlAlphaSprite; +import rt4.SoftwareAlphaSprite; +import rt4.Sprite; + +import java.awt.image.BufferedImage; +import java.awt.image.DirectColorModel; +import java.awt.image.PixelGrabber; +import java.util.ArrayList; +import java.util.List; + +public class SpritePNGLoader { + + /** + * Converts the buffered image into a sprite image and returns it + * + * @param image The image to be converted + * @return The buffered image as a sprite image + */ + public static SpritePixels getImageSpritePixels(BufferedImage image) { + int[] pixels = new int[image.getWidth() * image.getHeight()]; + + try { + PixelGrabber g = new PixelGrabber(image, 0, 0, image.getWidth(), image.getHeight(), pixels, 0, image.getWidth()); + g.setColorModel(new DirectColorModel(32, 0xff0000, 0xff00, 0xff, 0xff000000)); + g.grabPixels(); + + // Make any fully transparent pixels fully black, because the sprite draw routines + // check for == 0, not actual transparency + for (int i = 0; i < pixels.length; i++) { + if ((pixels[i] & 0xFF000000) == 0) { + pixels[i] = 0; + } + } + } catch (InterruptedException ex) { + System.err.println("PixelGrabber was interrupted: " + ex); + } + + return new SpritePixels(pixels, image.getWidth(), image.getHeight()); + } + + /** + * Converts an image into an {@code IndexedSprite} instance. + *

+ * The passed in image can only have at max 255 different colors. + * + * @param image The image to be converted + * @return The image as an {@code IndexedSprite} + */ + public static Sprite getImageIndexedSprite(BufferedImage image) { + final byte[] pixels = new byte[image.getWidth() * image.getHeight()]; + final List palette = new ArrayList<>(); + /* + When drawing the indexed sprite, palette idx 0 is seen as fully transparent, + so pad the palette out so that our colors start at idx 1. + */ + palette.add(0); + + final int[] sourcePixels = image.getRGB(0, 0, + image.getWidth(), image.getHeight(), + null, 0, image.getWidth()); + + /* + Build a color palette and assign the pixels to positions in the palette. + */ + for (int j = 0; j < sourcePixels.length; j++) { + final int argb = sourcePixels[j]; + final int a = (argb >> 24) & 0xFF; + final int rgb = argb & 0xFF_FF_FF; + + // Default to not drawing the pixel. + int paletteIdx = 0; + + // If the pixel is fully opaque, draw it. + if (a == 0xFF) { + paletteIdx = palette.indexOf(rgb); + + if (paletteIdx == -1) { + paletteIdx = palette.size(); + palette.add(rgb); + } + } + + pixels[j] = (byte) paletteIdx; + } + + if (palette.size() > 256) { + throw new RuntimeException("Passed in image had " + (palette.size() - 1) + + " different colors, exceeding the max of 255."); + } + + //int[] imgPalette = palette.stream().mapToInt(i -> i).toArray(); + + Sprite sprites; + //IndexedSprite sprite; + if (API.IsHD()) { //width, height, xOffsets[local16], yOffsets[local16], innerWidths[local16], innerHeights[local16], local38 + sprites = new GlAlphaSprite(image.getWidth(), image.getHeight(), 0, 0, image.getWidth(), image.getHeight(), sourcePixels); + // sprite = new GlIndexedSprite(image.getWidth(), image.getHeight(), 0, 0, image.getWidth(), image.getHeight(), pixels, imgPalette); + } else { + sprites = new SoftwareAlphaSprite(image.getWidth(), image.getHeight(), 0, 0, image.getWidth(), image.getHeight(), sourcePixels); + // sprite = new SoftwareIndexedSprite(image.getWidth(), image.getHeight(), 0, 0, image.getWidth(), image.getHeight(), pixels, imgPalette); + } + return sprites; + } +} \ No newline at end of file diff --git a/client/src/main/java/plugin/api/SpritePixels.java b/client/src/main/java/plugin/api/SpritePixels.java new file mode 100644 index 0000000..203fdcb --- /dev/null +++ b/client/src/main/java/plugin/api/SpritePixels.java @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2018, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package plugin.api; + +import java.awt.image.BufferedImage; + +class SpritePixels { + public int[] pixels; + public int width; + public int height; + public int offsetX; + int offsetY; + + public SpritePixels(int[] var1, int var2, int var3) { + this.pixels = var1; + this.width = var2; + this.height = var3; + this.offsetY = 0; + this.offsetX = 0; + } + + public SpritePixels(int var1, int var2) { + this(new int[var2 * var1], var1, var2); + } + + public void drawBorder(int color) { + int[] newPixels = new int[this.width * this.height]; + int pixelIndex = 0; + + for (int y = 0; y < this.height; ++y) { + for (int x = 0; x < this.width; ++x) { + int pixel = this.pixels[pixelIndex]; + if (pixel == 0) { + // W + if (x > 0 && this.pixels[pixelIndex - 1] != 0) { + pixel = color; + } + // N + else if (y > 0 && this.pixels[pixelIndex - this.width] != 0) { + pixel = color; + } + // E + else if (x < this.width - 1 && this.pixels[pixelIndex + 1] != 0) { + pixel = color; + } + // S + else if (y < this.height - 1 && this.pixels[pixelIndex + this.width] != 0) { + pixel = color; + } + } + + newPixels[pixelIndex++] = pixel; + } + } + + this.pixels = newPixels; + } + + + public void drawShadow(int color) { + for (int y = this.height - 1; y > 0; --y) { + int rowOffset = y * this.width; + + for (int x = this.width - 1; x > 0; --x) { + // if *this* pixel is black/unset AND the pixel to the NW isn't black/unset + if (this.pixels[x + rowOffset] == 0 && this.pixels[x + rowOffset - 1 - this.width] != 0) { + this.pixels[x + rowOffset] = color; + } + } + } + + } + + static void method5843(int[] rasterizerPixels, int[] spritePixels, int var2, int var3, int pixelIndex, int width, int height, int var7, int var8) { + int var9 = -(width >> 2); + width = -(width & 3); + + for (int var10 = -height; var10 < 0; ++var10) { + for (int i = var9 * 4; i < 0; ++i) { + var2 = spritePixels[var3++]; + if (var2 != 0) { + rasterizerPixels[pixelIndex++] = var2; + } else { + ++pixelIndex; + } + } + + for (int i = width; i < 0; ++i) { + var2 = spritePixels[var3++]; + if (var2 != 0) { + rasterizerPixels[pixelIndex++] = var2; + } else { + ++pixelIndex; + } + } + + pixelIndex += var7; + var3 += var8; + } + + } + + public BufferedImage toBufferedImage() { + int[] transPixels = new int[pixels.length]; + BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + + for (int i = 0; i < pixels.length; i++) { + if (pixels[i] != 0) { + transPixels[i] = pixels[i] | 0xff000000; + } + } + + img.setRGB(0, 0, width, height, transPixels, 0, width); + return img; + } + +} \ No newline at end of file diff --git a/client/src/main/java/plugin/api/TextModifier.java b/client/src/main/java/plugin/api/TextModifier.java new file mode 100644 index 0000000..6fd88ed --- /dev/null +++ b/client/src/main/java/plugin/api/TextModifier.java @@ -0,0 +1,10 @@ +package plugin.api; + +public enum TextModifier { + CENTER, + LEFT, + RIGHT, + SHAKE, + WAVE, + WAVE_2 +} diff --git a/client/src/main/java/plugin/api/WindowMode.java b/client/src/main/java/plugin/api/WindowMode.java new file mode 100644 index 0000000..f4b2a1b --- /dev/null +++ b/client/src/main/java/plugin/api/WindowMode.java @@ -0,0 +1,7 @@ +package plugin.api; + +public enum WindowMode { + FIXED, + RESIZABLE, + FULLSCREEN +} diff --git a/client/src/main/java/rt4/AbstractWorld.java b/client/src/main/java/rt4/AbstractWorld.java new file mode 100644 index 0000000..8db55e6 --- /dev/null +++ b/client/src/main/java/rt4/AbstractWorld.java @@ -0,0 +1,37 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!gj") +public abstract class AbstractWorld { + + @OriginalMember(owner = "client!gj", name = "j", descriptor = "I") + public int country; + + @OriginalMember(owner = "client!gj", name = "l", descriptor = "I") + public int players; + + @OriginalMember(owner = "client!gj", name = "o", descriptor = "I") + public int flags; + + @OriginalMember(owner = "client!gj", name = "a", descriptor = "(I)Z") + public final boolean isMembers() { + return (this.flags & 0x1) != 0; + } + + @OriginalMember(owner = "client!gj", name = "a", descriptor = "(Z)Z") + public final boolean isPvp() { + return (this.flags & 0x4) != 0; + } + + @OriginalMember(owner = "client!gj", name = "c", descriptor = "(I)Z") + public final boolean isLootShare() { + return (this.flags & 0x8) != 0; + } + + @OriginalMember(owner = "client!gj", name = "d", descriptor = "(I)Z") + public final boolean isQuickChat() { + return (this.flags & 0x2) != 0; + } +} diff --git a/client/src/main/java/rt4/AnimBase.java b/client/src/main/java/rt4/AnimBase.java new file mode 100644 index 0000000..f8f7244 --- /dev/null +++ b/client/src/main/java/rt4/AnimBase.java @@ -0,0 +1,57 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!jm") +public final class AnimBase extends Node { + + @OriginalMember(owner = "client!jm", name = "p", descriptor = "I") + public final int id; + + @OriginalMember(owner = "client!jm", name = "x", descriptor = "I") + public final int transforms; + + @OriginalMember(owner = "client!jm", name = "v", descriptor = "[[I") + public final int[][] bones; + + @OriginalMember(owner = "client!jm", name = "B", descriptor = "[I") + public final int[] types; + + @OriginalMember(owner = "client!jm", name = "y", descriptor = "[Z") + public final boolean[] shadow; + + @OriginalMember(owner = "client!jm", name = "q", descriptor = "[I") + public final int[] parts; + + @OriginalMember(owner = "client!jm", name = "", descriptor = "(I[B)V") + public AnimBase(@OriginalArg(0) int id, @OriginalArg(1) byte[] bytes) { + this.id = id; + @Pc(9) Buffer buffer = new Buffer(bytes); + this.transforms = buffer.g1(); + this.bones = new int[this.transforms][]; + this.types = new int[this.transforms]; + this.shadow = new boolean[this.transforms]; + this.parts = new int[this.transforms]; + @Pc(36) int i; + for (i = 0; i < this.transforms; i++) { + this.types[i] = buffer.g1(); + } + for (i = 0; i < this.transforms; i++) { + this.shadow[i] = buffer.g1() == 1; + } + for (i = 0; i < this.transforms; i++) { + this.parts[i] = buffer.g2(); + } + for (i = 0; i < this.transforms; i++) { + this.bones[i] = new int[buffer.g1()]; + } + for (i = 0; i < this.transforms; i++) { + for (@Pc(118) int j = 0; j < this.bones[i].length; j++) { + this.bones[i][j] = buffer.g1(); + } + } + } +} diff --git a/client/src/main/java/rt4/AnimFrame.java b/client/src/main/java/rt4/AnimFrame.java new file mode 100644 index 0000000..51b23de --- /dev/null +++ b/client/src/main/java/rt4/AnimFrame.java @@ -0,0 +1,140 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ne") +public final class AnimFrame { + + @OriginalMember(owner = "client!ne", name = "p", descriptor = "[S") + public static final short[] tempIndices = new short[500]; + + @OriginalMember(owner = "client!ne", name = "m", descriptor = "[S") + public static final short[] tempX = new short[500]; + + @OriginalMember(owner = "client!ne", name = "j", descriptor = "[S") + public static final short[] tempY = new short[500]; + + @OriginalMember(owner = "client!ne", name = "i", descriptor = "[S") + public static final short[] tempZ = new short[500]; + + @OriginalMember(owner = "client!ne", name = "h", descriptor = "[B") + public static final byte[] tempFlags = new byte[500]; + + @OriginalMember(owner = "client!ne", name = "k", descriptor = "[S") + public static final short[] tempPrevOriginIndices = new short[500]; + + @OriginalMember(owner = "client!ne", name = "c", descriptor = "Lclient!jm;") + public AnimBase base = null; + + @OriginalMember(owner = "client!ne", name = "b", descriptor = "I") + public int length = -1; + + @OriginalMember(owner = "client!ne", name = "e", descriptor = "Z") + public boolean transformsAlpha = false; + + @OriginalMember(owner = "client!ne", name = "a", descriptor = "Z") + public boolean transformsColor = false; + + @OriginalMember(owner = "client!ne", name = "d", descriptor = "[S") + public final short[] indices; + + @OriginalMember(owner = "client!ne", name = "g", descriptor = "[S") + public final short[] x; + + @OriginalMember(owner = "client!ne", name = "o", descriptor = "[S") + public final short[] y; + + @OriginalMember(owner = "client!ne", name = "n", descriptor = "[S") + public final short[] z; + + @OriginalMember(owner = "client!ne", name = "f", descriptor = "[S") + public final short[] prevOriginIndices; + + @OriginalMember(owner = "client!ne", name = "l", descriptor = "[B") + public final byte[] flags; + + @OriginalMember(owner = "client!ne", name = "", descriptor = "([BLclient!jm;)V") + public AnimFrame(@OriginalArg(0) byte[] bytes, @OriginalArg(1) AnimBase base) { + this.base = base; + @Pc(21) Buffer headerBuffer = new Buffer(bytes); + @Pc(26) Buffer buffer = new Buffer(bytes); + headerBuffer.offset = 2; + @Pc(33) int headerLen = headerBuffer.g1(); + @Pc(35) int len = 0; + @Pc(37) int prevOriginIndex = -1; + @Pc(39) int prevUsedOriginIndex = -1; + buffer.offset = headerBuffer.offset + headerLen; + @Pc(47) int i; + for (i = 0; i < headerLen; i++) { + @Pc(56) int type = this.base.types[i]; + if (type == 0) { + prevOriginIndex = i; + } + @Pc(64) int attributes = headerBuffer.g1(); + if (attributes > 0) { + if (type == 0) { + prevUsedOriginIndex = i; + } + tempIndices[len] = (short) i; + @Pc(77) short defaultValue = 0; + if (type == 3) { + defaultValue = 128; + } + if ((attributes & 0x1) == 0) { + tempX[len] = defaultValue; + } else { + tempX[len] = (short) buffer.gsmart(); + } + if ((attributes & 0x2) == 0) { + tempY[len] = defaultValue; + } else { + tempY[len] = (short) buffer.gsmart(); + } + if ((attributes & 0x4) == 0) { + tempZ[len] = defaultValue; + } else { + tempZ[len] = (short) buffer.gsmart(); + } + tempFlags[len] = (byte) (attributes >>> 3 & 0x3); + if (type == 2) { + tempX[len] = (short) (((tempX[len] & 0xFF) << 3) + (tempX[len] >> 8 & 0x7)); + tempY[len] = (short) (((tempY[len] & 0xFF) << 3) + (tempY[len] >> 8 & 0x7)); + tempZ[len] = (short) (((tempZ[len] & 0xFF) << 3) + (tempZ[len] >> 8 & 0x7)); + } + tempPrevOriginIndices[len] = -1; + if (type == 1 || type == 2 || type == 3) { + if (prevOriginIndex > prevUsedOriginIndex) { + tempPrevOriginIndices[len] = (short) prevOriginIndex; + prevUsedOriginIndex = prevOriginIndex; + } + } else if (type == 5) { + this.transformsAlpha = true; + } else if (type == 7) { + this.transformsColor = true; + } + len++; + } + } + if (buffer.offset != bytes.length) { + throw new RuntimeException(); + } + this.length = len; + this.indices = new short[len]; + this.x = new short[len]; + this.y = new short[len]; + this.z = new short[len]; + this.prevOriginIndices = new short[len]; + this.flags = new byte[len]; + for (i = 0; i < len; i++) { + this.indices[i] = tempIndices[i]; + this.x[i] = tempX[i]; + this.y[i] = tempY[i]; + this.z[i] = tempZ[i]; + this.prevOriginIndices[i] = tempPrevOriginIndices[i]; + this.flags[i] = tempFlags[i]; + } + } +} diff --git a/client/src/main/java/rt4/AnimFrameset.java b/client/src/main/java/rt4/AnimFrameset.java new file mode 100644 index 0000000..417825d --- /dev/null +++ b/client/src/main/java/rt4/AnimFrameset.java @@ -0,0 +1,77 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!cl") +public final class AnimFrameset extends SecondaryNode { + + @OriginalMember(owner = "client!cl", name = "W", descriptor = "[Lclient!ne;") + public final AnimFrame[] frames; + + @OriginalMember(owner = "client!cl", name = "", descriptor = "(Lclient!ve;Lclient!ve;IZ)V") + public AnimFrameset(@OriginalArg(0) Js5 animsArchive, @OriginalArg(1) Js5 basesArchive, @OriginalArg(2) int id, @OriginalArg(3) boolean arg3) { + @Pc(5) LinkedList bases = new LinkedList(); + @Pc(10) int capacity = animsArchive.getGroupCapacity(id); + this.frames = new AnimFrame[capacity]; + @Pc(19) int[] fileIds = animsArchive.getFileIds(id); + for (@Pc(21) int i = 0; i < fileIds.length; i++) { + @Pc(37) byte[] bytes = animsArchive.fetchFile(id, fileIds[i]); + @Pc(51) int baseId = bytes[1] & 0xFF | (bytes[0] & 0xFF) << 8; + @Pc(56) AnimBase b = (AnimBase) bases.head(); + @Pc(58) AnimBase base = null; + while (b != null) { + if (b.id == baseId) { + base = b; + break; + } + b = (AnimBase) bases.next(); + } + if (base == null) { + @Pc(85) byte[] baseBytes = basesArchive.fetchFileNoDiscard(0, baseId); + base = new AnimBase(baseId, baseBytes); + bases.addTail(base); + } + this.frames[fileIds[i]] = new AnimFrame(bytes, base); + } + } + + @OriginalMember(owner = "client!gn", name = "a", descriptor = "(Lclient!ve;ZLclient!ve;BI)Lclient!cl;") + public static AnimFrameset create(@OriginalArg(0) Js5 animsArchive, @OriginalArg(2) Js5 basesArchive, @OriginalArg(4) int id) { + @Pc(5) boolean ready = true; + @Pc(16) int[] fileIds = animsArchive.getFileIds(id); + for (@Pc(18) int i = 0; i < fileIds.length; i++) { + @Pc(30) byte[] bytes = animsArchive.fetchFileNoDiscard(fileIds[i], id); + if (bytes == null) { + ready = false; + } else { + @Pc(49) int baseId = (bytes[0] & 0xFF) << 8 | bytes[1] & 0xFF; + @Pc(57) byte[] baseBytes = basesArchive.fetchFileNoDiscard(0, baseId); + if (baseBytes == null) { + ready = false; + } + } + } + if (!ready) { + return null; + } + try { + return new AnimFrameset(animsArchive, basesArchive, id, false); + } catch (@Pc(84) Exception ex) { + ex.printStackTrace(); + return null; + } + } + + @OriginalMember(owner = "client!cl", name = "c", descriptor = "(II)Z") + public final boolean isAlphaTransformed(@OriginalArg(1) int frame) { + return this.frames[frame].transformsAlpha; + } + + @OriginalMember(owner = "client!cl", name = "a", descriptor = "(IB)Z") + public final boolean isColorTransformed(@OriginalArg(0) int frame) { + return this.frames[frame].transformsColor; + } +} diff --git a/client/src/main/java/rt4/AreaSound.java b/client/src/main/java/rt4/AreaSound.java new file mode 100644 index 0000000..59d6dbe --- /dev/null +++ b/client/src/main/java/rt4/AreaSound.java @@ -0,0 +1,105 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!fl") +public final class AreaSound extends Node { + + @OriginalMember(owner = "client!fl", name = "p", descriptor = "I") + public int maxZFine; + + @OriginalMember(owner = "client!fl", name = "q", descriptor = "I") + public int minZFine; + + @OriginalMember(owner = "client!fl", name = "t", descriptor = "I") + public int minInterval; + + @OriginalMember(owner = "client!fl", name = "v", descriptor = "Lclient!b;") + public SoundPcmStream primaryStream; + + @OriginalMember(owner = "client!fl", name = "x", descriptor = "I") + public int level; + + @OriginalMember(owner = "client!fl", name = "y", descriptor = "Lclient!b;") + public SoundPcmStream secondaryStream; + + @OriginalMember(owner = "client!fl", name = "z", descriptor = "I") + public int remainingLoops; + + @OriginalMember(owner = "client!fl", name = "E", descriptor = "Lclient!pb;") + public LocType locType; + + @OriginalMember(owner = "client!fl", name = "F", descriptor = "I") + public int maxXFine; + + @OriginalMember(owner = "client!fl", name = "I", descriptor = "Lclient!km;") + public Npc npc; + + @OriginalMember(owner = "client!fl", name = "K", descriptor = "I") + public int maxInterval; + + @OriginalMember(owner = "client!fl", name = "L", descriptor = "I") + public int minXFine; + + @OriginalMember(owner = "client!fl", name = "M", descriptor = "Lclient!e;") + public Player player; + + @OriginalMember(owner = "client!fl", name = "N", descriptor = "I") + public int radius; + + @OriginalMember(owner = "client!fl", name = "O", descriptor = "Z") + public boolean multiLocOrNpc; + + @OriginalMember(owner = "client!fl", name = "R", descriptor = "I") + public int sound; + + @OriginalMember(owner = "client!fl", name = "T", descriptor = "[I") + public int[] sounds; + + @OriginalMember(owner = "client!fl", name = "G", descriptor = "I") + public int movementSpeed = 0; + + @OriginalMember(owner = "client!fl", name = "c", descriptor = "(I)V") + public final void update() { + @Pc(8) int prevSound = this.sound; + if (this.locType != null) { + @Pc(17) LocType locType = this.locType.getMultiLoc(); + if (locType == null) { + this.sound = -1; + this.sounds = null; + this.maxInterval = 0; + this.radius = 0; + this.minInterval = 0; + } else { + this.maxInterval = locType.bgsoundmax; + this.sound = locType.bgsound; + this.minInterval = locType.bgsoundmin; + this.radius = locType.bgsoundrange * 128; + this.sounds = locType.bgsounds; + } + } else if (this.npc != null) { + @Pc(92) int sound = Npc.getSound(this.npc); + if (prevSound != sound) { + @Pc(100) NpcType npcType = this.npc.type; + this.sound = sound; + if (npcType.multiNpcs != null) { + npcType = npcType.getMultiNpc(); + } + if (npcType == null) { + this.radius = 0; + } else { + this.radius = npcType.soundRadius * 128; + } + } + } else if (this.player != null) { + this.sound = Player.getSound(this.player); + this.radius = this.player.soundRadius * 128; + } + if (this.sound != prevSound && this.primaryStream != null) { + client.soundStream.removeSubStream(this.primaryStream); + this.primaryStream = null; + } + } +} diff --git a/client/src/main/java/rt4/AreaSoundManager.java b/client/src/main/java/rt4/AreaSoundManager.java new file mode 100644 index 0000000..d029292 --- /dev/null +++ b/client/src/main/java/rt4/AreaSoundManager.java @@ -0,0 +1,290 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class AreaSoundManager { + @OriginalMember(owner = "client!he", name = "ab", descriptor = "Lclient!sc;") + public static final HashTable playerSounds = new HashTable(16); + + @OriginalMember(owner = "client!ab", name = "n", descriptor = "Lclient!ih;") + public static final LinkedList locSounds = new LinkedList(); + + @OriginalMember(owner = "client!ma", name = "x", descriptor = "Lclient!ih;") + public static final LinkedList npcSounds = new LinkedList(); + + @OriginalMember(owner = "client!wc", name = "a", descriptor = "(Lclient!e;I)V") + public static void remove(@OriginalArg(0) Player player) { + @Pc(10) AreaSound areaSound = (AreaSound) playerSounds.get(player.username.encode37()); + if (areaSound == null) { + return; + } + if (areaSound.primaryStream != null) { + client.soundStream.removeSubStream(areaSound.primaryStream); + areaSound.primaryStream = null; + } + areaSound.unlink(); + } + + @OriginalMember(owner = "client!jh", name = "a", descriptor = "(IZLclient!pb;ILclient!km;IILclient!e;)V") + public static void add(@OriginalArg(0) int z, @OriginalArg(2) LocType loc, @OriginalArg(3) int arg2, @OriginalArg(4) Npc npc, @OriginalArg(5) int x, @OriginalArg(6) int level, @OriginalArg(7) Player player) { + @Pc(13) AreaSound sound = new AreaSound(); + sound.minZFine = z * 128; + sound.minXFine = x * 128; + sound.level = level; + if (loc != null) { + sound.sounds = loc.bgsounds; + sound.radius = loc.bgsoundrange * 128; + sound.maxInterval = loc.bgsoundmax; + sound.locType = loc; + sound.sound = loc.bgsound; + sound.minInterval = loc.bgsoundmin; + @Pc(57) int local57 = loc.width; + @Pc(60) int local60 = loc.length; + if (arg2 == 1 || arg2 == 3) { + local57 = loc.length; + local60 = loc.width; + } + sound.maxZFine = (local60 + z) * 128; + sound.maxXFine = (x + local57) * 128; + if (loc.multiLocs != null) { + sound.multiLocOrNpc = true; + sound.update(); + } + if (sound.sounds != null) { + sound.remainingLoops = sound.minInterval + (int) (Math.random() * (double) (sound.maxInterval - sound.minInterval)); + } + locSounds.addTail(sound); + } else if (npc != null) { + sound.npc = npc; + @Pc(138) NpcType npcType = npc.type; + if (npcType.multiNpcs != null) { + sound.multiLocOrNpc = true; + npcType = npcType.getMultiNpc(); + } + if (npcType != null) { + sound.maxZFine = (npcType.size + z) * 128; + sound.maxXFine = (npcType.size + x) * 128; + sound.sound = Npc.getSound(npc); + sound.radius = npcType.soundRadius * 128; + } + npcSounds.addTail(sound); + } else if (player != null) { + sound.player = player; + sound.maxXFine = (player.getSize() + x) * 128; + sound.maxZFine = (player.getSize() + z) * 128; + sound.sound = Player.getSound(player); + sound.radius = player.soundRadius * 128; + playerSounds.put(sound, player.username.encode37()); + } + } + + @OriginalMember(owner = "client!hc", name = "a", descriptor = "(Lclient!km;Z)V") + public static void remove(@OriginalArg(0) Npc npc) { + for (@Pc(13) AreaSound areaSound = (AreaSound) npcSounds.head(); areaSound != null; areaSound = (AreaSound) npcSounds.next()) { + if (npc == areaSound.npc) { + if (areaSound.primaryStream != null) { + client.soundStream.removeSubStream(areaSound.primaryStream); + areaSound.primaryStream = null; + } + areaSound.unlink(); + return; + } + } + } + + @OriginalMember(owner = "client!ih", name = "a", descriptor = "(IIIII)V") + public static void redraw(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(6) AreaSound areaSound; + for (areaSound = (AreaSound) locSounds.head(); areaSound != null; areaSound = (AreaSound) locSounds.next()) { + redraw(arg1, areaSound, arg3, arg0, arg2); + } + @Pc(37) byte movementSpeed; + @Pc(42) BasType basType; + @Pc(141) int sound; + for (areaSound = (AreaSound) npcSounds.head(); areaSound != null; areaSound = (AreaSound) npcSounds.next()) { + movementSpeed = 1; + basType = areaSound.npc.getBasType(); + if (basType.idleAnimationId == areaSound.npc.movementSeqId) { + movementSpeed = 0; + } else if (basType.runAnimationId == areaSound.npc.movementSeqId || basType.runFullTurnAnimationId == areaSound.npc.movementSeqId || basType.runCWTurnAnimationId == areaSound.npc.movementSeqId || basType.runCCWTurnAnimationId == areaSound.npc.movementSeqId) { + movementSpeed = 2; + } else if (basType.slowWalkAnimationId == areaSound.npc.movementSeqId || basType.slowWalkFullTurnAnimationId == areaSound.npc.movementSeqId || areaSound.npc.movementSeqId == basType.slowWalkCWTurnAnimationId || basType.slowWalkCCWTurnAnimationId == areaSound.npc.movementSeqId) { + movementSpeed = 3; + } + if (areaSound.movementSpeed != movementSpeed) { + sound = Npc.getSound(areaSound.npc); + if (sound != areaSound.sound) { + if (areaSound.primaryStream != null) { + client.soundStream.removeSubStream(areaSound.primaryStream); + areaSound.primaryStream = null; + } + areaSound.sound = sound; + } + areaSound.movementSpeed = movementSpeed; + } + areaSound.minXFine = areaSound.npc.xFine; + areaSound.maxXFine = areaSound.npc.xFine + areaSound.npc.getSize() * 64; + areaSound.minZFine = areaSound.npc.zFine; + areaSound.maxZFine = areaSound.npc.zFine + areaSound.npc.getSize() * 64; + redraw(arg1, areaSound, arg3, arg0, arg2); + } + for (areaSound = (AreaSound) playerSounds.head(); areaSound != null; areaSound = (AreaSound) playerSounds.next()) { + movementSpeed = 1; + basType = areaSound.player.getBasType(); + if (areaSound.player.movementSeqId == basType.idleAnimationId) { + movementSpeed = 0; + } else if (areaSound.player.movementSeqId == basType.runAnimationId || areaSound.player.movementSeqId == basType.runFullTurnAnimationId || areaSound.player.movementSeqId == basType.runCWTurnAnimationId || basType.runCCWTurnAnimationId == areaSound.player.movementSeqId) { + movementSpeed = 2; + } else if (basType.slowWalkAnimationId == areaSound.player.movementSeqId || areaSound.player.movementSeqId == basType.slowWalkFullTurnAnimationId || areaSound.player.movementSeqId == basType.slowWalkCWTurnAnimationId || areaSound.player.movementSeqId == basType.slowWalkCCWTurnAnimationId) { + movementSpeed = 3; + } + if (areaSound.movementSpeed != movementSpeed) { + sound = Player.getSound(areaSound.player); + if (areaSound.sound != sound) { + if (areaSound.primaryStream != null) { + client.soundStream.removeSubStream(areaSound.primaryStream); + areaSound.primaryStream = null; + } + areaSound.sound = sound; + } + areaSound.movementSpeed = movementSpeed; + } + areaSound.minXFine = areaSound.player.xFine; + areaSound.maxXFine = areaSound.player.xFine + areaSound.player.getSize() * 64; + areaSound.minZFine = areaSound.player.zFine; + areaSound.maxZFine = areaSound.player.zFine + areaSound.player.getSize() * 64; + redraw(arg1, areaSound, arg3, arg0, arg2); + } + } + + @OriginalMember(owner = "client!je", name = "k", descriptor = "(I)V") + public static void updateMulti() { + @Pc(6) AreaSound areaSound; + for (areaSound = (AreaSound) locSounds.head(); areaSound != null; areaSound = (AreaSound) locSounds.next()) { + if (areaSound.multiLocOrNpc) { + areaSound.update(); + } + } + for (areaSound = (AreaSound) npcSounds.head(); areaSound != null; areaSound = (AreaSound) npcSounds.next()) { + if (areaSound.multiLocOrNpc) { + areaSound.update(); + } + } + } + + @OriginalMember(owner = "client!ra", name = "a", descriptor = "(ILclient!pb;BII)V") + public static void remove(@OriginalArg(0) int x, @OriginalArg(1) LocType locType, @OriginalArg(3) int z, @OriginalArg(4) int level) { + for (@Pc(10) AreaSound areaSound = (AreaSound) locSounds.head(); areaSound != null; areaSound = (AreaSound) locSounds.next()) { + if (level == areaSound.level && areaSound.minXFine == x * 128 && areaSound.minZFine == z * 128 && locType.id == areaSound.locType.id) { + if (areaSound.primaryStream != null) { + client.soundStream.removeSubStream(areaSound.primaryStream); + areaSound.primaryStream = null; + } + if (areaSound.secondaryStream != null) { + client.soundStream.removeSubStream(areaSound.secondaryStream); + areaSound.secondaryStream = null; + } + areaSound.unlink(); + return; + } + } + } + + @OriginalMember(owner = "client!vd", name = "a", descriptor = "(BZ)V") + public static void clear(@OriginalArg(1) boolean pathingEntities) { + @Pc(14) AreaSound areaSound; + for (areaSound = (AreaSound) locSounds.head(); areaSound != null; areaSound = (AreaSound) locSounds.next()) { + if (areaSound.primaryStream != null) { + client.soundStream.removeSubStream(areaSound.primaryStream); + areaSound.primaryStream = null; + } + if (areaSound.secondaryStream != null) { + client.soundStream.removeSubStream(areaSound.secondaryStream); + areaSound.secondaryStream = null; + } + areaSound.unlink(); + } + if (!pathingEntities) { + return; + } + for (areaSound = (AreaSound) npcSounds.head(); areaSound != null; areaSound = (AreaSound) npcSounds.next()) { + if (areaSound.primaryStream != null) { + client.soundStream.removeSubStream(areaSound.primaryStream); + areaSound.primaryStream = null; + } + areaSound.unlink(); + } + for (areaSound = (AreaSound) playerSounds.head(); areaSound != null; areaSound = (AreaSound) playerSounds.next()) { + if (areaSound.primaryStream != null) { + client.soundStream.removeSubStream(areaSound.primaryStream); + areaSound.primaryStream = null; + } + areaSound.unlink(); + } + } + + @OriginalMember(owner = "client!lk", name = "a", descriptor = "(ILclient!fl;IIII)V") + public static void redraw(@OriginalArg(0) int x, @OriginalArg(1) AreaSound areaSound, @OriginalArg(2) int level, @OriginalArg(3) int loops, @OriginalArg(4) int z) { + if (areaSound.sound == -1 && areaSound.sounds == null) { + return; + } + @Pc(20) int distance = 0; + if (areaSound.maxXFine < x) { + distance = x - areaSound.maxXFine; + } else if (areaSound.minXFine > x) { + distance = areaSound.minXFine - x; + } + if (areaSound.maxZFine < z) { + distance += z - areaSound.maxZFine; + } else if (z < areaSound.minZFine) { + distance += areaSound.minZFine - z; + } + if (areaSound.radius == 0 || areaSound.radius < distance - 64 || Preferences.ambientSoundsVolume == 0 || level != areaSound.level) { + if (areaSound.primaryStream != null) { + client.soundStream.removeSubStream(areaSound.primaryStream); + areaSound.primaryStream = null; + } + if (areaSound.secondaryStream != null) { + client.soundStream.removeSubStream(areaSound.secondaryStream); + areaSound.secondaryStream = null; + } + return; + } + distance -= 64; + if (distance < 0) { + distance = 0; + } + @Pc(134) int volume = (areaSound.radius - distance) * Preferences.ambientSoundsVolume / areaSound.radius; + if (areaSound.primaryStream != null) { + areaSound.primaryStream.setVolume(volume); + } else if (areaSound.sound >= 0) { + @Pc(150) SynthSound synthSound = SynthSound.create(client.js5Archive4, areaSound.sound, 0); + if (synthSound != null) { + @Pc(158) PcmSound pcmSound = synthSound.toPcmSound().resample(client.resampler); + @Pc(163) SoundPcmStream stream = SoundPcmStream.create(pcmSound, volume); + stream.setLoops(-1); + client.soundStream.addSubStream(stream); + areaSound.primaryStream = stream; + } + } + if (areaSound.secondaryStream != null) { + areaSound.secondaryStream.setVolume(volume); + if (!areaSound.secondaryStream.isLinked()) { + areaSound.secondaryStream = null; + } + } else if (areaSound.sounds != null && (areaSound.remainingLoops -= loops) <= 0) { + @Pc(219) int index = (int) ((double) areaSound.sounds.length * Math.random()); + @Pc(227) SynthSound synthSound = SynthSound.create(client.js5Archive4, areaSound.sounds[index], 0); + if (synthSound != null) { + @Pc(236) PcmSound pcmSound = synthSound.toPcmSound().resample(client.resampler); + @Pc(241) SoundPcmStream stream = SoundPcmStream.create(pcmSound, volume); + stream.setLoops(0); + client.soundStream.addSubStream(stream); + areaSound.remainingLoops = (int) ((double) (areaSound.maxInterval - areaSound.minInterval) * Math.random()) + areaSound.minInterval; + areaSound.secondaryStream = stream; + } + } + } +} diff --git a/client/src/main/java/rt4/ArrayUtils.java b/client/src/main/java/rt4/ArrayUtils.java new file mode 100644 index 0000000..f1dade1 --- /dev/null +++ b/client/src/main/java/rt4/ArrayUtils.java @@ -0,0 +1,457 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public final class ArrayUtils { + + @OriginalMember(owner = "client!kg", name = "a", descriptor = "([JI[JII)V") + public static void copy(@OriginalArg(0) long[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) long[] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + @Pc(15) int local15; + if (arg0 == arg2) { + if (arg1 == arg3) { + return; + } + if (arg3 > arg1 && arg3 < arg1 + arg4) { + local15 = arg4 - 1; + @Pc(19) int local19 = arg1 + local15; + @Pc(23) int local23 = arg3 + local15; + local15 = local19 - local15; + local15 += 3; + while (local19 >= local15) { + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + } + local15 -= 3; + while (local19 >= local15) { + arg2[local23--] = arg0[local19--]; + } + return; + } + } + local15 = arg4 + arg1; + @Pc(83) int local83 = local15 - 3; + while (arg1 < local83) { + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + } + local15 = local83 + 3; + while (arg1 < local15) { + arg2[arg3++] = arg0[arg1++]; + } + } + + @OriginalMember(owner = "client!kg", name = "a", descriptor = "([II[III)V") + public static void copy(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int[] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + @Pc(15) int local15; + if (arg0 == arg2) { + if (arg1 == arg3) { + return; + } + if (arg3 > arg1 && arg3 < arg1 + arg4) { + local15 = arg4 - 1; + @Pc(19) int local19 = arg1 + local15; + @Pc(23) int local23 = arg3 + local15; + local15 = local19 - local15; + local15 += 7; + while (local19 >= local15) { + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + } + local15 -= 7; + while (local19 >= local15) { + arg2[local23--] = arg0[local19--]; + } + return; + } + } + local15 = arg4 + arg1; + @Pc(115) int local115 = local15 - 7; + while (arg1 < local115) { + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + } + local15 = local115 + 7; + while (arg1 < local15) { + arg2[arg3++] = arg0[arg1++]; + } + } + + @OriginalMember(owner = "client!kg", name = "a", descriptor = "([IIII)V") + public static void fill(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(5) int local5 = arg1 + arg2 - 7; + while (arg1 < local5) { + arg0[arg1++] = arg3; + arg0[arg1++] = arg3; + arg0[arg1++] = arg3; + arg0[arg1++] = arg3; + arg0[arg1++] = arg3; + arg0[arg1++] = arg3; + arg0[arg1++] = arg3; + arg0[arg1++] = arg3; + } + local5 += 7; + while (arg1 < local5) { + arg0[arg1++] = arg3; + } + } + + @OriginalMember(owner = "client!kg", name = "a", descriptor = "([FI[FII)V") + public static void copy(@OriginalArg(0) float[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) float[] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (arg0 == arg2) { + return; + } + @Pc(114) int local114 = arg4; + @Pc(115) int local115 = local114 - 7; + while (arg1 < local115) { + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + } + local114 = local115 + 7; + while (arg1 < local114) { + arg2[arg3++] = arg0[arg1++]; + } + } + + @OriginalMember(owner = "client!kg", name = "a", descriptor = "([SI[SII)V") + public static void copy(@OriginalArg(0) short[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) short[] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + @Pc(15) int local15; + if (arg0 == arg2) { + if (arg1 == arg3) { + return; + } + if (arg3 > arg1 && arg3 < arg1 + arg4) { + local15 = arg4 - 1; + @Pc(19) int local19 = arg1 + local15; + @Pc(23) int local23 = arg3 + local15; + local15 = local19 - local15; + local15 += 7; + while (local19 >= local15) { + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + } + local15 -= 7; + while (local19 >= local15) { + arg2[local23--] = arg0[local19--]; + } + return; + } + } + local15 = arg4 + arg1; + @Pc(115) int local115 = local15 - 7; + while (arg1 < local115) { + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + } + local15 = local115 + 7; + while (arg1 < local15) { + arg2[arg3++] = arg0[arg1++]; + } + } + + @OriginalMember(owner = "client!kg", name = "a", descriptor = "([Ljava/lang/Object;I[Ljava/lang/Object;II)V") + public static void copy(@OriginalArg(0) Object[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) Object[] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + @Pc(15) int local15; + if (arg0 == arg2) { + if (arg1 == arg3) { + return; + } + if (arg3 > arg1 && arg3 < arg1 + arg4) { + local15 = arg4 - 1; + @Pc(19) int local19 = arg1 + local15; + @Pc(23) int local23 = arg3 + local15; + local15 = local19 - local15; + local15 += 7; + while (local19 >= local15) { + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + } + local15 -= 7; + while (local19 >= local15) { + arg2[local23--] = arg0[local19--]; + } + return; + } + } + local15 = arg4 + arg1; + @Pc(115) int local115 = local15 - 7; + while (arg1 < local115) { + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + } + local15 = local115 + 7; + while (arg1 < local15) { + arg2[arg3++] = arg0[arg1++]; + } + } + + @OriginalMember(owner = "client!kg", name = "a", descriptor = "([III)V") + public static void clear(@OriginalArg(0) int[] dest, @OriginalArg(1) int off, @OriginalArg(2) int length) { + @Pc(5) int len = length - 7; + while (off < len) { + dest[off++] = 0; + dest[off++] = 0; + dest[off++] = 0; + dest[off++] = 0; + dest[off++] = 0; + dest[off++] = 0; + dest[off++] = 0; + dest[off++] = 0; + } + len += 7; + while (off < len) { + dest[off++] = 0; + } + } + + @OriginalMember(owner = "client!nk", name = "a", descriptor = "(Z[J[I)V") + public static void sort(@OriginalArg(1) long[] arg0, @OriginalArg(2) int[] arg1) { + sort(arg0, 0, arg0.length - 1, arg1); + } + + @OriginalMember(owner = "client!gj", name = "a", descriptor = "([JII[II)V") + public static void sort(@OriginalArg(0) long[] keys, @OriginalArg(1) int lo, @OriginalArg(2) int hi, @OriginalArg(3) int[] values) { + if (lo >= hi) { + return; + } + @Pc(20) int i = lo; + @Pc(26) int mid = (hi + lo) / 2; + @Pc(30) long pivotKey = keys[mid]; + keys[mid] = keys[hi]; + keys[hi] = pivotKey; + @Pc(44) int pivotValue = values[mid]; + values[mid] = values[hi]; + values[hi] = pivotValue; + for (@Pc(56) int j = lo; j < hi; j++) { + if (keys[j] < pivotKey + (long) (j & 0x1)) { + @Pc(76) long key = keys[j]; + keys[j] = keys[i]; + keys[i] = key; + @Pc(90) int value = values[j]; + values[j] = values[i]; + values[i++] = value; + } + } + keys[hi] = keys[i]; + keys[i] = pivotKey; + values[hi] = values[i]; + values[i] = pivotValue; + sort(keys, lo, i - 1, values); + sort(keys, i + 1, hi, values); + } + + @OriginalMember(owner = "client!ja", name = "a", descriptor = "([II)[I") + public static int[] copyOfNullable(@OriginalArg(0) int[] arg0) { + if (arg0 == null) { + return null; + } else { + @Pc(18) int[] local18 = new int[arg0.length]; + copy(arg0, 0, local18, 0, arg0.length); + return local18; + } + } + + @OriginalMember(owner = "client!vg", name = "a", descriptor = "(I[S)[S") + public static short[] copyOfNullable(@OriginalArg(1) short[] arg0) { + if (arg0 == null) { + return null; + } else { + @Pc(19) short[] local19 = new short[arg0.length]; + copy(arg0, 0, local19, 0, arg0.length); + return local19; + } + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "([SI)[S") + public static short[] copyOf(@OriginalArg(0) short[] arg0, @OriginalArg(1) int arg1) { + @Pc(2) short[] local2 = new short[arg1]; + copy(arg0, 0, local2, 0, arg1); + return local2; + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "([FI)[F") + public static float[] copyOf(@OriginalArg(0) float[] arg0, @OriginalArg(1) int arg1) { + @Pc(2) float[] local2 = new float[arg1]; + copy(arg0, 0, local2, 0, arg1); + return local2; + } + + @OriginalMember(owner = "client!kd", name = "a", descriptor = "([IIIII)V") + public static void fillRange(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + arg1--; + @Pc(14) int local14 = arg2 - 1; + @Pc(17) int local17 = local14 - 7; + while (local17 > arg1) { + @Pc(22) int local22 = arg1 + 1; + arg0[local22] = arg3; + @Pc(27) int local27 = local22 + 1; + arg0[local27] = arg3; + @Pc(32) int local32 = local27 + 1; + arg0[local32] = arg3; + @Pc(37) int local37 = local32 + 1; + arg0[local37] = arg3; + @Pc(42) int local42 = local37 + 1; + arg0[local42] = arg3; + @Pc(47) int local47 = local42 + 1; + arg0[local47] = arg3; + @Pc(52) int local52 = local47 + 1; + arg0[local52] = arg3; + arg1 = local52 + 1; + arg0[arg1] = arg3; + } + while (local14 > arg1) { + arg1++; + arg0[arg1] = arg3; + } + } + + @OriginalMember(owner = "client!ec", name = "a", descriptor = "([Ljava/lang/Object;I[III)V") + public static void sort(@OriginalArg(0) Object[] values, @OriginalArg(1) int hi, @OriginalArg(2) int[] keys, @OriginalArg(4) int lo) { + if (lo >= hi) { + return; + } + @Pc(11) int mid = (lo + hi) / 2; + @Pc(15) int pivotKey = keys[mid]; + @Pc(17) int i = lo; + keys[mid] = keys[hi]; + keys[hi] = pivotKey; + @Pc(31) Object pivotValue = values[mid]; + values[mid] = values[hi]; + values[hi] = pivotValue; + for (@Pc(43) int j = lo; j < hi; j++) { + if ((j & 0x1) + pivotKey > keys[j]) { + @Pc(67) int key = keys[j]; + keys[j] = keys[i]; + keys[i] = key; + @Pc(81) Object value = values[j]; + values[j] = values[i]; + values[i++] = value; + } + } + keys[hi] = keys[i]; + keys[i] = pivotKey; + values[hi] = values[i]; + values[i] = pivotValue; + sort(values, i - 1, keys, lo); + sort(values, hi, keys, i + 1); + } + + @OriginalMember(owner = "client!oi", name = "a", descriptor = "(I[I[Ljava/lang/Object;)V") + public static void sort(@OriginalArg(1) int[] arg0, @OriginalArg(2) Object[] arg1) { + sort(arg1, arg0.length - 1, arg0, 0); + } + + @OriginalMember(owner = "client!nj", name = "a", descriptor = "(IIZ[I[I)V") + public static void sort(@OriginalArg(0) int lo, @OriginalArg(1) int hi, @OriginalArg(3) int[] keys, @OriginalArg(4) int[] values) { + if (lo >= hi) { + return; + } + @Pc(22) int mid = (hi + lo) / 2; + @Pc(24) int i = lo; + @Pc(28) int pivotKey = keys[mid]; + keys[mid] = keys[hi]; + keys[hi] = pivotKey; + @Pc(42) int pivotValue = values[mid]; + values[mid] = values[hi]; + values[hi] = pivotValue; + for (@Pc(54) int j = lo; j < hi; j++) { + if (keys[j] > (j & 0x1) + pivotKey) { + @Pc(79) int key = keys[j]; + keys[j] = keys[i]; + keys[i] = key; + @Pc(93) int value = values[j]; + values[j] = values[i]; + values[i++] = value; + } + } + keys[hi] = keys[i]; + keys[i] = pivotKey; + values[hi] = values[i]; + values[i] = pivotValue; + sort(lo, i - 1, keys, values); + sort(i + 1, hi, keys, values); + } + + @OriginalMember(owner = "client!sh", name = "a", descriptor = "(I[JII[Ljava/lang/Object;)V") + public static void sort(@OriginalArg(0) int hi, @OriginalArg(1) long[] keys, @OriginalArg(3) int lo, @OriginalArg(4) Object[] values) { + if (lo >= hi) { + return; + } + @Pc(16) int i = lo; + @Pc(23) int mid = (lo + hi) / 2; + @Pc(27) long pivotKey = keys[mid]; + keys[mid] = keys[hi]; + keys[hi] = pivotKey; + @Pc(41) Object pivotValue = values[mid]; + values[mid] = values[hi]; + values[hi] = pivotValue; + for (@Pc(53) int j = lo; j < hi; j++) { + if (pivotKey + (long) (j & 0x1) > keys[j]) { + @Pc(72) long key = keys[j]; + keys[j] = keys[i]; + keys[i] = key; + @Pc(86) Object value = values[j]; + values[j] = values[i]; + values[i++] = value; + } + } + keys[hi] = keys[i]; + keys[i] = pivotKey; + values[hi] = values[i]; + values[i] = pivotValue; + sort(i - 1, keys, lo, values); + sort(hi, keys, i + 1, values); + } + + @OriginalMember(owner = "client!ac", name = "a", descriptor = "([J[Ljava/lang/Object;I)V") + public static void sort(@OriginalArg(0) long[] arg0, @OriginalArg(1) Object[] arg1) { + sort(arg0.length - 1, arg0, 0, arg1); + } +} diff --git a/client/src/main/java/rt4/AttachLocRequest.java b/client/src/main/java/rt4/AttachLocRequest.java new file mode 100644 index 0000000..df6f4a8 --- /dev/null +++ b/client/src/main/java/rt4/AttachLocRequest.java @@ -0,0 +1,161 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!cn") +public final class AttachLocRequest extends Node { + + @OriginalMember(owner = "client!ka", name = "q", descriptor = "Lclient!ih;") + public static final LinkedList queue = new LinkedList(); + + @OriginalMember(owner = "client!cn", name = "p", descriptor = "I") + public int setLoops; + + @OriginalMember(owner = "client!cn", name = "r", descriptor = "I") + public int x0Delta; + + @OriginalMember(owner = "client!cn", name = "t", descriptor = "I") + public int locId; + + @OriginalMember(owner = "client!cn", name = "u", descriptor = "I") + public int x; + + @OriginalMember(owner = "client!cn", name = "v", descriptor = "I") + public int x1Delta; + + @OriginalMember(owner = "client!cn", name = "w", descriptor = "I") + public int entityId; + + @OriginalMember(owner = "client!cn", name = "D", descriptor = "I") + public int z0Delta; + + @OriginalMember(owner = "client!cn", name = "E", descriptor = "I") + public int shape; + + @OriginalMember(owner = "client!cn", name = "H", descriptor = "I") + public int z1Delta; + + @OriginalMember(owner = "client!cn", name = "M", descriptor = "I") + public int z; + + @OriginalMember(owner = "client!cn", name = "N", descriptor = "I") + public int resetLoops; + + @OriginalMember(owner = "client!cn", name = "O", descriptor = "I") + public int angle; + + @OriginalMember(owner = "client!ph", name = "a", descriptor = "(B)V") + public static void loop() { + while (true) { + @Pc(17) AttachLocRequest request = (AttachLocRequest) queue.removeHead(); + if (request == null) { + return; + } + @Pc(40) PathingEntity entity; + @Pc(29) int playerId; + if (request.entityId < 0) { + playerId = -request.entityId - 1; + if (playerId == PlayerList.selfId) { + entity = PlayerList.self; + } else { + entity = PlayerList.players[playerId]; + } + } else { + playerId = request.entityId - 1; + entity = NpcList.npcs[playerId]; + } + if (entity != null) { + @Pc(63) LocType type = LocTypeList.get(request.locId); + if (Player.plane < 3) { + } + @Pc(86) int width; + @Pc(83) int length; + if (request.angle == 1 || request.angle == 3) { + length = type.width; + width = type.length; + } else { + width = type.width; + length = type.length; + } + @Pc(103) int centerX1 = (width + 1 >> 1) + request.x; + @Pc(110) int centerX0 = (width >> 1) + request.x; + @Pc(117) int centerZ0 = (length >> 1) + request.z; + @Pc(126) int centerZ1 = (length + 1 >> 1) + request.z; + @Pc(130) int[][] tileHeights = SceneGraph.tileHeights[Player.plane]; + @Pc(157) int y = tileHeights[centerX1][centerZ1] + tileHeights[centerX0][centerZ1] + tileHeights[centerX0][centerZ0] + tileHeights[centerX1][centerZ0] >> 2; + @Pc(159) Entity attachment = null; + @Pc(164) int layer = Loc.LAYERS[request.shape]; + if (layer == 0) { + @Pc(176) Wall wall = SceneGraph.getWall(Player.plane, request.x, request.z); + if (wall != null) { + attachment = wall.primary; + } + } else if (layer == 1) { + @Pc(231) WallDecor wallDecor = SceneGraph.getWallDecor(Player.plane, request.x, request.z); + if (wallDecor != null) { + attachment = wallDecor.primary; + } + } else if (layer == 2) { + @Pc(198) Scenery scenery = SceneGraph.getScenery(Player.plane, request.x, request.z); + if (scenery != null) { + attachment = scenery.entity; + } + } else if (layer == 3) { + @Pc(216) GroundDecor groundDecor = SceneGraph.getGroundDecor(Player.plane, request.x, request.z); + if (groundDecor != null) { + attachment = groundDecor.entity; + } + } + if (attachment != null) { + ChangeLocRequest.push(Player.plane, request.z, 0, request.x, request.resetLoops + 1, -1, layer, 0, request.setLoops + 1); + entity.attachmentResetAt = request.resetLoops + client.loop; + entity.attachmentZFine = length * 64 + request.z * 128; + entity.attachmentXFine = width * 64 + request.x * 128; + entity.attachment = attachment; + @Pc(292) int x0Delta = request.x0Delta; + entity.attachmentY = y; + entity.attachmentSetAt = client.loop + request.setLoops; + @Pc(304) int x1Delta = request.x1Delta; + @Pc(307) int z0Delta = request.z0Delta; + @Pc(310) int z1Delta = request.z1Delta; + @Pc(316) int temp; + if (x0Delta > x1Delta) { + temp = x0Delta; + x0Delta = x1Delta; + x1Delta = temp; + } + entity.attachmentX1 = request.x + x1Delta; + if (z0Delta > z1Delta) { + temp = z0Delta; + z0Delta = z1Delta; + z1Delta = temp; + } + entity.attachmentZ0 = request.z + z0Delta; + entity.attachmentZ1 = z1Delta + request.z; + entity.atachmentX0 = request.x + x0Delta; + } + } + } + } + + @OriginalMember(owner = "client!nh", name = "a", descriptor = "(IIIIIIIIIIIII)V") + public static void push(@OriginalArg(0) int x1Delta, @OriginalArg(1) int setLoops, @OriginalArg(2) int entityId, @OriginalArg(3) int resetLoops, @OriginalArg(4) int z, @OriginalArg(5) int z1Delta, @OriginalArg(6) int angle, @OriginalArg(7) int x0Delta, @OriginalArg(8) int x, @OriginalArg(9) int shape, @OriginalArg(11) int z0Delta, @OriginalArg(12) int locId) { + @Pc(7) AttachLocRequest req = new AttachLocRequest(); + req.angle = angle; + req.resetLoops = resetLoops; + req.setLoops = setLoops; + req.z1Delta = z1Delta; + req.entityId = entityId; + req.x = x; + req.z0Delta = z0Delta; + req.z = z; + req.locId = locId; + req.x0Delta = x0Delta; + req.x1Delta = x1Delta; + req.shape = shape; + queue.addTail(req); + } +} diff --git a/client/src/main/java/rt4/AudioChannel.java b/client/src/main/java/rt4/AudioChannel.java new file mode 100644 index 0000000..3e49448 --- /dev/null +++ b/client/src/main/java/rt4/AudioChannel.java @@ -0,0 +1,412 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.Component; + +@OriginalClass("client!vh") +public class AudioChannel { + + @OriginalMember(owner = "client!na", name = "w", descriptor = "Z") + public static boolean stereo; + @OriginalMember(owner = "client!va", name = "O", descriptor = "I") + public static int threadPriority; + @OriginalMember(owner = "client!em", name = "x", descriptor = "Lclient!cj;") + public static AudioThread thread; + @OriginalMember(owner = "client!dh", name = "h", descriptor = "I") + public static int sampleRate; + + @OriginalMember(owner = "client!vh", name = "h", descriptor = "Lclient!qb;") + private PcmStream stream; + + @OriginalMember(owner = "client!vh", name = "n", descriptor = "[I") + public int[] samples; + + @OriginalMember(owner = "client!vh", name = "D", descriptor = "I") + private int anInt4637; + + @OriginalMember(owner = "client!vh", name = "H", descriptor = "I") + public int sampleRate2; + + @OriginalMember(owner = "client!vh", name = "K", descriptor = "I") + public int bufferCapacity; + + @OriginalMember(owner = "client!vh", name = "a", descriptor = "I") + private final int anInt4621 = 32; + + @OriginalMember(owner = "client!vh", name = "f", descriptor = "J") + private long time = MonotonicClock.currentTimeMillis(); + + @OriginalMember(owner = "client!vh", name = "w", descriptor = "[Lclient!qb;") + private final PcmStream[] aClass3_Sub3Array5 = new PcmStream[8]; + + @OriginalMember(owner = "client!vh", name = "x", descriptor = "I") + private int consumedSamples = 0; + + @OriginalMember(owner = "client!vh", name = "v", descriptor = "J") + private long calculateConsumptionAt = 0L; + + @OriginalMember(owner = "client!vh", name = "E", descriptor = "I") + private int anInt4638 = 0; + + @OriginalMember(owner = "client!vh", name = "A", descriptor = "Z") + private boolean skipConsumptionCheck = true; + + @OriginalMember(owner = "client!vh", name = "z", descriptor = "[Lclient!qb;") + private final PcmStream[] aClass3_Sub3Array6 = new PcmStream[8]; + + @OriginalMember(owner = "client!vh", name = "y", descriptor = "J") + private long closeUntil = 0L; + + @OriginalMember(owner = "client!vh", name = "G", descriptor = "I") + private int prevConsumedSamples = 0; + + @OriginalMember(owner = "client!vh", name = "C", descriptor = "I") + private int prevBufferSize = 0; + + @OriginalMember(owner = "client!dc", name = "a", descriptor = "(IIIZ)V") + public static void init(@OriginalArg(3) boolean stereo) { + threadPriority = 2; + AudioChannel.stereo = stereo; + sampleRate = GlobalConfig.AUDIO_SAMPLE_RATE; + } + + @OriginalMember(owner = "client!id", name = "a", descriptor = "(ILsignlink!ll;Ljava/awt/Component;II)Lclient!vh;") + public static AudioChannel create(@OriginalArg(0) int arg0, @OriginalArg(1) SignLink arg1, @OriginalArg(2) Component arg2, @OriginalArg(3) int arg3) { + if (sampleRate == 0) { + throw new IllegalStateException(); + } + try { + @Pc(33) AudioChannel audioChannel = new JavaAudioChannel(); + audioChannel.sampleRate2 = arg0; + audioChannel.samples = new int[(stereo ? 2 : 1) * 256]; + audioChannel.init(arg2); + audioChannel.bufferCapacity = (arg0 & -1024) + 1024; + if (audioChannel.bufferCapacity > 16384) { + audioChannel.bufferCapacity = 16384; + } + audioChannel.open(audioChannel.bufferCapacity); + if (threadPriority > 0 && thread == null) { + thread = new AudioThread(); + thread.signLink = arg1; + arg1.startThread(threadPriority, thread); + } + if (thread != null) { + if (thread.channels[arg3] != null) { + throw new IllegalArgumentException(); + } + thread.channels[arg3] = audioChannel; + } + return audioChannel; + } catch (@Pc(109) Throwable ex1) { + ex1.printStackTrace(); + try { + @Pc(120) SignLinkAudioChannel local120 = new SignLinkAudioChannel(arg1, arg3); + local120.samples = new int[(stereo ? 2 : 1) * 256]; + local120.sampleRate2 = arg0; + local120.init(arg2); + local120.bufferCapacity = 16384; + local120.open(local120.bufferCapacity); + if (threadPriority > 0 && thread == null) { + thread = new AudioThread(); + thread.signLink = arg1; + arg1.startThread(threadPriority, thread); + } + if (thread != null) { + if (thread.channels[arg3] != null) { + throw new IllegalArgumentException(); + } + thread.channels[arg3] = local120; + } + return local120; + } catch (@Pc(186) Throwable ex2) { + ex2.printStackTrace(); + return new AudioChannel(); + } + } + } + + @OriginalMember(owner = "client!nd", name = "a", descriptor = "(ZLclient!qb;)V") + public static void setInactive(@OriginalArg(1) PcmStream arg0) { + if (arg0.sound != null) { + arg0.sound.position = 0; + } + arg0.active = false; + for (@Pc(14) PcmStream local14 = arg0.firstSubStream(); local14 != null; local14 = arg0.nextSubStream()) { + setInactive(local14); + } + } + + @OriginalMember(owner = "client!vh", name = "a", descriptor = "()V") + protected void write() throws Exception { + } + + @OriginalMember(owner = "client!vh", name = "a", descriptor = "(I)V") + public void open(@OriginalArg(0) int arg0) throws Exception { + } + + @OriginalMember(owner = "client!vh", name = "b", descriptor = "()V") + protected void close() throws Exception { + } + + @OriginalMember(owner = "client!vh", name = "a", descriptor = "([II)V") + private void read(@OriginalArg(0) int[] arg0) { + @Pc(1) short local1 = 256; + if (stereo) { + local1 = 512; + } + ArrayUtils.clear(arg0, 0, local1); + this.anInt4638 -= 256; + if (this.stream != null && this.anInt4638 <= 0) { + this.anInt4638 += sampleRate >> 4; + setInactive(this.stream); + this.method3567(this.stream, this.stream.method4407()); + @Pc(45) int local45 = 0; + @Pc(47) int local47 = 255; + @Pc(49) int local49 = 7; + label106: + while (local47 != 0) { + @Pc(57) int local57; + @Pc(62) int local62; + if (local49 < 0) { + local57 = local49 & 0x3; + local62 = -(local49 >> 2); + } else { + local57 = local49; + local62 = 0; + } + for (@Pc(73) int local73 = local47 >>> local57 & 0x11111111; local73 != 0; local73 >>>= 0x4) { + if ((local73 & 0x1) != 0) { + local47 &= ~(0x1 << local57); + @Pc(91) PcmStream local91 = null; + @Pc(96) PcmStream local96 = this.aClass3_Sub3Array5[local57]; + label100: + while (true) { + while (true) { + if (local96 == null) { + break label100; + } + @Pc(101) Sound local101 = local96.sound; + if (local101 == null || local101.position <= local62) { + local96.active = true; + @Pc(125) int local125 = local96.method4404(); + local45 += local125; + if (local101 != null) { + local101.position += local125; + } + if (local45 >= this.anInt4621) { + break label106; + } + @Pc(145) PcmStream local145 = local96.firstSubStream(); + if (local145 != null) { + @Pc(150) int local150 = local96.anInt5626; + while (local145 != null) { + this.method3567(local145, local150 * local145.method4407() >> 8); + local145 = local96.nextSubStream(); + } + } + @Pc(169) PcmStream local169 = local96.aClass3_Sub3_8; + local96.aClass3_Sub3_8 = null; + if (local91 == null) { + this.aClass3_Sub3Array5[local57] = local169; + } else { + local91.aClass3_Sub3_8 = local169; + } + if (local169 == null) { + this.aClass3_Sub3Array6[local57] = local91; + } + local96 = local169; + } else { + local47 |= 0x1 << local57; + local91 = local96; + local96 = local96.aClass3_Sub3_8; + } + } + } + } + local57 += 4; + local62++; + } + local49--; + } + for (local49 = 0; local49 < 8; local49++) { + @Pc(212) PcmStream local212 = this.aClass3_Sub3Array5[local49]; + this.aClass3_Sub3Array5[local49] = this.aClass3_Sub3Array6[local49] = null; + while (local212 != null) { + @Pc(227) PcmStream local227 = local212.aClass3_Sub3_8; + local212.aClass3_Sub3_8 = null; + local212 = local227; + } + } + } + if (this.anInt4638 < 0) { + this.anInt4638 = 0; + } + if (this.stream != null) { + this.stream.read(arg0, 0, 256); + } + this.time = MonotonicClock.currentTimeMillis(); + } + + @OriginalMember(owner = "client!vh", name = "a", descriptor = "(B)V") + public final synchronized void loop() { + if (this.samples == null) { + return; + } + @Pc(14) long now = MonotonicClock.currentTimeMillis(); + try { + if (this.closeUntil != 0L) { + if (now < this.closeUntil) { + return; + } + this.open(this.bufferCapacity); + this.skipConsumptionCheck = true; + this.closeUntil = 0L; + } + @Pc(38) int local38 = this.getBufferSize(); + if (this.consumedSamples < this.prevBufferSize - local38) { + this.consumedSamples = this.prevBufferSize - local38; + } + @Pc(65) int local65 = this.sampleRate2 + this.anInt4637; + if (local65 + 256 > 16384) { + local65 = 16128; + } + if (this.bufferCapacity < local65 + 256) { + this.bufferCapacity += 1024; + if (this.bufferCapacity > 16384) { + this.bufferCapacity = 16384; + } + this.flush(); + local38 = 0; + this.open(this.bufferCapacity); + if (this.bufferCapacity < local65 + 256) { + local65 = this.bufferCapacity - 256; + this.anInt4637 = local65 - this.sampleRate2; + } + this.skipConsumptionCheck = true; + } + while (local65 > local38) { + local38 += 256; + this.read(this.samples); + this.write(); + } + if (now > this.calculateConsumptionAt) { + if (this.skipConsumptionCheck) { + this.skipConsumptionCheck = false; + } else if (this.consumedSamples == 0 && this.prevConsumedSamples == 0) { + this.flush(); + this.closeUntil = now + 2000L; + return; + } else { + this.anInt4637 = Math.min(this.prevConsumedSamples, this.consumedSamples); + this.prevConsumedSamples = this.consumedSamples; + } + this.calculateConsumptionAt = now + 2000L; + this.consumedSamples = 0; + } + this.prevBufferSize = local38; + } catch (@Pc(202) Exception ex) { + ex.printStackTrace(); + this.flush(); + this.closeUntil = now + 2000L; + } + try { + if (now > this.time + 500000L) { + now = this.time; + } + while (now > this.time + 5000L) { + this.skip(); + this.time += 256000 / sampleRate; + } + } catch (@Pc(247) Exception ex) { + ex.printStackTrace(); + this.time = now; + } + } + + @OriginalMember(owner = "client!vh", name = "a", descriptor = "(ILclient!qb;)V") + public final synchronized void setStream(@OriginalArg(1) PcmStream arg0) { + this.stream = arg0; + } + + @OriginalMember(owner = "client!vh", name = "a", descriptor = "(Lclient!qb;IB)V") + private void method3567(@OriginalArg(0) PcmStream arg0, @OriginalArg(1) int arg1) { + @Pc(16) int local16 = arg1 >> 5; + @Pc(21) PcmStream local21 = this.aClass3_Sub3Array6[local16]; + if (local21 == null) { + this.aClass3_Sub3Array5[local16] = arg0; + } else { + local21.aClass3_Sub3_8 = arg0; + } + this.aClass3_Sub3Array6[local16] = arg0; + arg0.anInt5626 = arg1; + } + + @OriginalMember(owner = "client!vh", name = "c", descriptor = "()I") + protected int getBufferSize() throws Exception { + return this.bufferCapacity; + } + + @OriginalMember(owner = "client!vh", name = "b", descriptor = "(B)V") + public final synchronized void method3570() { + this.skipConsumptionCheck = true; + try { + this.close(); + } catch (@Pc(10) Exception ex) { + ex.printStackTrace(); + this.flush(); + this.closeUntil = MonotonicClock.currentTimeMillis() + 2000L; + } + } + + @OriginalMember(owner = "client!vh", name = "b", descriptor = "(I)V") + public final void method3571() { + this.skipConsumptionCheck = true; + } + + @OriginalMember(owner = "client!vh", name = "d", descriptor = "()V") + protected void flush() { + } + + @OriginalMember(owner = "client!vh", name = "a", descriptor = "(II)V") + private void skip() { + this.anInt4638 -= 256; + if (this.anInt4638 < 0) { + this.anInt4638 = 0; + } + if (this.stream != null) { + this.stream.skip(256); + } + } + + @OriginalMember(owner = "client!vh", name = "a", descriptor = "(Z)V") + public final synchronized void quit() { + if (thread != null) { + @Pc(6) boolean local6 = true; + for (@Pc(8) int local8 = 0; local8 < 2; local8++) { + if (thread.channels[local8] == this) { + thread.channels[local8] = null; + } + if (thread.channels[local8] != null) { + local6 = false; + } + } + if (local6) { + thread.stop = true; + while (thread.running) { + ThreadUtils.sleep(50L); + } + thread = null; + } + } + this.flush(); + this.samples = null; + } + + @OriginalMember(owner = "client!vh", name = "a", descriptor = "(Ljava/awt/Component;)V") + public void init(@OriginalArg(0) Component arg0) throws Exception { + } +} diff --git a/client/src/main/java/rt4/AudioThread.java b/client/src/main/java/rt4/AudioThread.java new file mode 100644 index 0000000..349eaba --- /dev/null +++ b/client/src/main/java/rt4/AudioThread.java @@ -0,0 +1,44 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!cj") +public final class AudioThread implements Runnable { + + @OriginalMember(owner = "client!cj", name = "m", descriptor = "Lsignlink!ll;") + public SignLink signLink; + + @OriginalMember(owner = "client!cj", name = "p", descriptor = "[Lclient!vh;") + public final AudioChannel[] channels = new AudioChannel[2]; + + @OriginalMember(owner = "client!cj", name = "g", descriptor = "Z") + public volatile boolean stop = false; + + @OriginalMember(owner = "client!cj", name = "t", descriptor = "Z") + public volatile boolean running = false; + + @OriginalMember(owner = "client!cj", name = "run", descriptor = "()V") + @Override + public final void run() { + this.running = true; + try { + while (!this.stop) { + for (@Pc(9) int i = 0; i < 2; i++) { + @Pc(19) AudioChannel channel = this.channels[i]; + if (channel != null) { + channel.loop(); + } + } + ThreadUtils.sleep(10L); + GameShell.flush(this.signLink, null); + } + } catch (@Pc(43) Exception ex) { + ex.printStackTrace(); + TracingException.report(null, ex); + } finally { + this.running = false; + } + } +} diff --git a/client/src/main/java/rt4/BasType.java b/client/src/main/java/rt4/BasType.java new file mode 100644 index 0000000..1b22734 --- /dev/null +++ b/client/src/main/java/rt4/BasType.java @@ -0,0 +1,193 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ck") +public final class BasType { + + @OriginalMember(owner = "client!ac", name = "l", descriptor = "Lclient!ck;") + public static final BasType DEFAULT = new BasType(); + + @OriginalMember(owner = "client!ck", name = "g", descriptor = "[[I") + public int[][] modelRotateTranslate; + + @OriginalMember(owner = "client!ck", name = "p", descriptor = "I") + public int standingCCWTurn = -1; + + @OriginalMember(owner = "client!ck", name = "q", descriptor = "I") + public int idleAnimationId = -1; + + @OriginalMember(owner = "client!ck", name = "w", descriptor = "I") + public int runCCWTurnAnimationId = -1; + + @OriginalMember(owner = "client!ck", name = "u", descriptor = "I") + public int pitchTargetAngle = 0; + + @OriginalMember(owner = "client!ck", name = "v", descriptor = "I") + public int slowWalkFullTurnAnimationId = -1; + + @OriginalMember(owner = "client!ck", name = "e", descriptor = "I") + public int yawMaxSpeed = 0; + + @OriginalMember(owner = "client!ck", name = "G", descriptor = "I") + public int anInt1050 = 0; + + @OriginalMember(owner = "client!ck", name = "E", descriptor = "I") + public int slowWalkCWTurnAnimationId = -1; + + @OriginalMember(owner = "client!ck", name = "M", descriptor = "I") + public int runFullTurnAnimationId = -1; + + @OriginalMember(owner = "client!ck", name = "N", descriptor = "I") + public int rollAcceleration = 0; + + @OriginalMember(owner = "client!ck", name = "m", descriptor = "I") + public int walkCWTurnAnimationId = -1; + + @OriginalMember(owner = "client!ck", name = "P", descriptor = "I") + public int walkFullTurnAnimationId = -1; + + @OriginalMember(owner = "client!ck", name = "h", descriptor = "I") + public int movementAcceleration = -1; + + @OriginalMember(owner = "client!ck", name = "H", descriptor = "I") + public int walkAnimation = -1; + + @OriginalMember(owner = "client!ck", name = "W", descriptor = "I") + public int anInt1059 = 0; + + @OriginalMember(owner = "client!ck", name = "z", descriptor = "I") + public int runCWTurnAnimationId = -1; + + @OriginalMember(owner = "client!ck", name = "r", descriptor = "I") + public int yawAcceleration = 0; + + @OriginalMember(owner = "client!ck", name = "fb", descriptor = "I") + public int pitchAcceleration = 0; + + @OriginalMember(owner = "client!ck", name = "ab", descriptor = "I") + public int slowWalkAnimationId = -1; + + @OriginalMember(owner = "client!ck", name = "t", descriptor = "I") + public int rollMaxSpeed = 0; + + @OriginalMember(owner = "client!ck", name = "U", descriptor = "I") + public int runAnimationId = -1; + + @OriginalMember(owner = "client!ck", name = "ib", descriptor = "I") + public int slowWalkCCWTurnAnimationId = -1; + + @OriginalMember(owner = "client!ck", name = "bb", descriptor = "I") + public int pitchMaxSpeed = 0; + + @OriginalMember(owner = "client!ck", name = "R", descriptor = "I") + public int walkCCWTurnAnimationId = -1; + + @OriginalMember(owner = "client!ck", name = "jb", descriptor = "I") + public int standingCWTurn = -1; + + @OriginalMember(owner = "client!ck", name = "cb", descriptor = "I") + public int rollTargetAngle = 0; + + @OriginalMember(owner = "client!ck", name = "a", descriptor = "(I)V") + public final void method878() { + } + + @OriginalMember(owner = "client!ck", name = "a", descriptor = "(ILclient!wa;)V") + public final void decode(@OriginalArg(1) Buffer buffer) { + while (true) { + @Pc(16) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(opcode, buffer); + } + } + + @OriginalMember(owner = "client!ck", name = "a", descriptor = "(IBLclient!wa;)V") + private void decode(@OriginalArg(0) int opcode, @OriginalArg(2) Buffer buffer) { + if (opcode == 1) { + this.idleAnimationId = buffer.g2(); + this.walkAnimation = buffer.g2(); + if (this.walkAnimation == 65535) { + this.walkAnimation = -1; + } + if (this.idleAnimationId == 65535) { + this.idleAnimationId = -1; + } + } else if (opcode == 2) { + this.slowWalkAnimationId = buffer.g2(); + } else if (opcode == 3) { + this.slowWalkFullTurnAnimationId = buffer.g2(); + } else if (opcode == 4) { + this.slowWalkCCWTurnAnimationId = buffer.g2(); + } else if (opcode == 5) { + this.slowWalkCWTurnAnimationId = buffer.g2(); + } else if (opcode == 6) { + this.runAnimationId = buffer.g2(); + } else if (opcode == 7) { + this.runFullTurnAnimationId = buffer.g2(); + } else if (opcode == 8) { + this.runCCWTurnAnimationId = buffer.g2(); + } else if (opcode == 9) { + this.runCWTurnAnimationId = buffer.g2(); + } else if (opcode == 26) { + this.anInt1059 = (short) (buffer.g1() * 4); + this.anInt1050 = (short) (buffer.g1() * 4); + } else if (opcode == 27) { + if (this.modelRotateTranslate == null) { + this.modelRotateTranslate = new int[12][]; + } + @Pc(306) int bodyId = buffer.g1(); + this.modelRotateTranslate[bodyId] = new int[6]; + for (@Pc(314) int type = 0; type < 6; type++) { + /* + * 0 -Rotate X + * 1 - Rotate Y + * 2 - Rotate Z + * 3 - Translate X + * 4 - Translate Y + * 5 - Translate Z + */ + this.modelRotateTranslate[bodyId][type] = buffer.g2b(); + } + } else if (opcode == 29) { + this.yawAcceleration = buffer.g1(); + } else if (opcode == 30) { + this.yawMaxSpeed = buffer.g2(); + } else if (opcode == 31) { + this.rollAcceleration = buffer.g1(); + } else if (opcode == 32) { + this.rollMaxSpeed = buffer.g2(); + } else if (opcode == 33) { + this.rollTargetAngle = buffer.g2b(); + } else if (opcode == 34) { + this.pitchAcceleration = buffer.g1(); + } else if (opcode == 35) { + this.pitchMaxSpeed = buffer.g2(); + } else if (opcode == 36) { + this.pitchTargetAngle = buffer.g2b(); + } else if (opcode == 37) { + this.movementAcceleration = buffer.g1(); + } else if (opcode == 38) { + this.standingCCWTurn = buffer.g2(); + } else if (opcode == 39) { + this.standingCWTurn = buffer.g2(); + } else if (opcode == 40) { + this.walkFullTurnAnimationId = buffer.g2(); + } else if (opcode == 41) { + this.walkCCWTurnAnimationId = buffer.g2(); + } else if (opcode == 42) { + this.walkCWTurnAnimationId = buffer.g2(); + } else if (opcode == 43) { + buffer.g2(); + } else if (opcode == 44) { + buffer.g2(); + } else if (opcode == 45) { + buffer.g2(); + } + } +} diff --git a/client/src/main/java/rt4/BasTypeList.java b/client/src/main/java/rt4/BasTypeList.java new file mode 100644 index 0000000..79ac3d1 --- /dev/null +++ b/client/src/main/java/rt4/BasTypeList.java @@ -0,0 +1,48 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class BasTypeList { + @OriginalMember(owner = "client!vf", name = "a", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + @OriginalMember(owner = "client!nd", name = "p", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!ge", name = "a", descriptor = "(BLclient!ve;)V") + public static void init(@OriginalArg(1) Js5 arg0) { + archive = arg0; + } + + @OriginalMember(owner = "client!hb", name = "a", descriptor = "(ZI)Lclient!ck;") + public static BasType get(@OriginalArg(1) int arg0) { + @Pc(10) BasType local10 = (BasType) types.get(arg0); + if (local10 != null) { + return local10; + } + @Pc(21) byte[] local21 = archive.fetchFile(32, arg0); + local10 = new BasType(); + if (local21 != null) { + local10.decode(new Buffer(local21)); + } + local10.method878(); + types.put(local10, arg0); + return local10; + } + + @OriginalMember(owner = "client!jk", name = "e", descriptor = "(B)V") + public static void clear() { + types.clear(); + } + + @OriginalMember(owner = "client!bi", name = "c", descriptor = "(II)V") + public static void clean() { + types.clean(5); + } + + @OriginalMember(owner = "client!di", name = "d", descriptor = "(I)V") + public static void removeSoft() { + types.removeSoft(); + } +} diff --git a/client/src/main/java/rt4/Base37.java b/client/src/main/java/rt4/Base37.java new file mode 100644 index 0000000..71f1513 --- /dev/null +++ b/client/src/main/java/rt4/Base37.java @@ -0,0 +1,37 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class Base37 { + @OriginalMember(owner = "client!ch", name = "v", descriptor = "[B") + public static final byte[] aByteArray12 = new byte[]{95, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57}; + + @OriginalMember(owner = "client!ge", name = "a", descriptor = "(IJ)Lclient!na;") + public static JagString decode37(@OriginalArg(1) long arg0) { + if (arg0 <= 0L || arg0 >= 6582952005840035281L) { + return null; + } else if (arg0 % 37L == 0L) { + return null; + } else { + @Pc(32) int local32 = 0; + @Pc(34) long local34 = arg0; + while (local34 != 0L) { + local34 /= 37L; + local32++; + } + @Pc(48) byte[] local48 = new byte[local32]; + while (arg0 != 0L) { + @Pc(65) long local65 = arg0; + arg0 /= 37L; + local32--; + local48[local32] = aByteArray12[(int) (local65 - arg0 * 37L)]; + } + @Pc(88) JagString local88 = new JagString(); + local88.chars = local48; + local88.length = local48.length; + return local88; + } + } +} diff --git a/client/src/main/java/rt4/BrokenInputStream.java b/client/src/main/java/rt4/BrokenInputStream.java new file mode 100644 index 0000000..03ff4c0 --- /dev/null +++ b/client/src/main/java/rt4/BrokenInputStream.java @@ -0,0 +1,17 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +import java.io.InputStream; + +@OriginalClass("client!qk") +public final class BrokenInputStream extends InputStream { + + @OriginalMember(owner = "client!qk", name = "read", descriptor = "()I") + @Override + public final int read() { + ThreadUtils.sleep(30000L); + return -1; + } +} diff --git a/client/src/main/java/rt4/BrokenOutputStream.java b/client/src/main/java/rt4/BrokenOutputStream.java new file mode 100644 index 0000000..61c0622 --- /dev/null +++ b/client/src/main/java/rt4/BrokenOutputStream.java @@ -0,0 +1,18 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +import java.io.IOException; +import java.io.OutputStream; + +@OriginalClass("client!vg") +public final class BrokenOutputStream extends OutputStream { + + @OriginalMember(owner = "client!vg", name = "write", descriptor = "(I)V") + @Override + public final void write(@OriginalArg(0) int arg0) throws IOException { + throw new IOException(); + } +} diff --git a/client/src/main/java/rt4/BrowserControl.java b/client/src/main/java/rt4/BrowserControl.java new file mode 100644 index 0000000..bc7ce94 --- /dev/null +++ b/client/src/main/java/rt4/BrowserControl.java @@ -0,0 +1,24 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; + +import java.applet.Applet; + +public final class BrowserControl { + + @OriginalMember(owner = "client!gh", name = "a", descriptor = "(Ljava/lang/String;BLjava/applet/Applet;)Ljava/lang/Object;") + public static Object call(@OriginalArg(0) String arg0, @OriginalArg(2) Applet arg1) throws Throwable { + return null; // JSObject.getWindow(arg1).call(arg0, (Object[]) null); + } + + @OriginalMember(owner = "client!gh", name = "a", descriptor = "(Ljava/applet/Applet;Ljava/lang/String;[Ljava/lang/Object;B)Ljava/lang/Object;") + public static Object call(@OriginalArg(0) Applet arg0, @OriginalArg(1) String arg1, @OriginalArg(2) Object[] arg2) throws Throwable { + return null; // JSObject.getWindow(arg0).call(arg1, arg2); + } + + @OriginalMember(owner = "client!gh", name = "a", descriptor = "(Ljava/applet/Applet;ZLjava/lang/String;)V") + public static void eval(@OriginalArg(0) Applet arg0, @OriginalArg(2) String arg1) throws Throwable { + // JSObject.getWindow(arg0).eval(arg1); + } +} diff --git a/client/src/main/java/rt4/Buffer.java b/client/src/main/java/rt4/Buffer.java new file mode 100644 index 0000000..de12877 --- /dev/null +++ b/client/src/main/java/rt4/Buffer.java @@ -0,0 +1,609 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.math.BigInteger; + +// Buffer access nomenclature: +// Endianness (optional) +// (none) - big (DCBA) +// i - "inverse" (little) (ABCD) +// m - "middle" (CDAB) - not an authentic name, no clue on original +// im - "inverse-middle" (reverse) (BADC) - not an authentic name, jagex may call this "_alt3" +// Operation +// g - get +// p - put +// rsadec - Decrypt RSA +// tinydec - Decrypt XTEA +// Type +// # of bytes or special type i.e. 8, VarLong, Float, jstr, ... +// Signedness (optional) +// (none) - unsigned +// b / s - "byte" / signed (both allow overflow) - jagex mixed usage i.e. gsmarts and g1b... +// Transformation (optional) +// (none) - no change +// add - add 128 to the lowest byte +// sub - subtract lowest byte from 128 +// neg - negate, only used on bytes + +@OriginalClass("client!wa") +public class Buffer extends Node { + + @OriginalMember(owner = "client!wi", name = "X", descriptor = "[[B") + public static final byte[][] allocatedMin = new byte[1000][]; + + @OriginalMember(owner = "client!bb", name = "t", descriptor = "[[B") + public static final byte[][] allocatedMid = new byte[250][]; + + @OriginalMember(owner = "client!dc", name = "db", descriptor = "[[B") + public static final byte[][] allocatedMax = new byte[50][]; + + @OriginalMember(owner = "client!fi", name = "c", descriptor = "[I") + public static final int[] CRC32_TABLE = new int[256]; + + @OriginalMember(owner = "client!qj", name = "a", descriptor = "[J") + public static final long[] CRC64_TABLE = new long[256]; + + @OriginalMember(owner = "client!ja", name = "j", descriptor = "I") + public static int allocatedMinCount = 0; + + @OriginalMember(owner = "client!ug", name = "r", descriptor = "I") + public static int allocatedMidCount = 0; + + @OriginalMember(owner = "client!sd", name = "T", descriptor = "I") + public static int allocatedMaxCount = 0; + + @OriginalMember(owner = "client!wa", name = "y", descriptor = "[B") + public byte[] data; + + @OriginalMember(owner = "client!wa", name = "T", descriptor = "I") + public int offset; + + static { + for (@Pc(4) int i = 0; i < 256; i++) { + @Pc(9) int temp = i; + for (@Pc(11) int j = 0; j < 8; j++) { + if ((temp & 0x1) == 1) { + temp = temp >>> 1 ^ 0xEDB88320; + } else { + temp >>>= 0x1; + } + } + CRC32_TABLE[i] = temp; + } + + for (@Pc(4) int local4 = 0; local4 < 256; local4++) { + @Pc(10) long local10 = local4; + for (@Pc(12) int local12 = 0; local12 < 8; local12++) { + if ((local10 & 0x1L) == 1L) { + local10 = local10 >>> 1 ^ 0xC96C5795D7870F42L; + } else { + local10 >>>= 0x1; + } + } + CRC64_TABLE[local4] = local10; + } + } + + @OriginalMember(owner = "client!wa", name = "", descriptor = "(I)V") + public Buffer(@OriginalArg(0) int size) { + this.data = allocate(size); + this.offset = 0; + } + + @OriginalMember(owner = "client!wa", name = "", descriptor = "([B)V") + public Buffer(@OriginalArg(0) byte[] src) { + this.offset = 0; + this.data = src; + } + + @OriginalMember(owner = "client!sh", name = "a", descriptor = "(II)[B") + public static synchronized byte[] allocate(@OriginalArg(1) int length) { + @Pc(22) byte[] data; + if (length == 100 && allocatedMinCount > 0) { + data = allocatedMin[--allocatedMinCount]; + allocatedMin[allocatedMinCount] = null; + return data; + } else if (length == 5000 && allocatedMidCount > 0) { + data = allocatedMid[--allocatedMidCount]; + allocatedMid[allocatedMidCount] = null; + return data; + } else if (length == 30000 && allocatedMaxCount > 0) { + data = allocatedMax[--allocatedMaxCount]; + allocatedMax[allocatedMaxCount] = null; + return data; + } else { + return new byte[length]; + } + } + + + @OriginalMember(owner = "client!nf", name = "a", descriptor = "(II[BB)I") + public static int crc32(@OriginalArg(0) int offset, @OriginalArg(1) int size, @OriginalArg(2) byte[] src) { + @Pc(5) int crc = -1; + for (@Pc(15) int i = offset; i < size; i++) { + crc = crc >>> 8 ^ CRC32_TABLE[(crc ^ src[i]) & 0xFF]; + } + return ~crc; + } + + @OriginalMember(owner = "client!fk", name = "a", descriptor = "([BIZ)I") + public static int crc32(@OriginalArg(0) byte[] src, @OriginalArg(1) int size) { + return crc32(0, size, src); + } + + @OriginalMember(owner = "client!wa", name = "c", descriptor = "(BI)I") + public final int addcrc(@OriginalArg(1) int off) { + @Pc(16) int checksum = crc32(off, this.offset, this.data); + this.p4(checksum); + return checksum; + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "([IIII)V") + public final void tinydec(@OriginalArg(0) int[] key, @OriginalArg(3) int len) { + @Pc(6) int start = this.offset; + this.offset = 5; + @Pc(16) int blocks = (len - 5) / 8; + for (@Pc(18) int i = 0; i < blocks; i++) { + @Pc(23) int sum = 0xc6ef3720; + @Pc(27) int v0 = this.g4(); + @Pc(31) int v1 = this.g4(); + @Pc(33) int rounds = 32; + while (rounds-- > 0) { + v1 -= key[sum >>> 11 & 0x3] + sum ^ v0 + (v0 >>> 5 ^ v0 << 4); + sum -= 0x9e3779b9; + v0 -= (v1 >>> 5 ^ v1 << 4) + v1 ^ key[sum & 0x3] + sum; + } + this.offset -= 8; + this.p4(v0); + this.p4(v1); + } + this.offset = start; + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(Ljava/math/BigInteger;Ljava/math/BigInteger;I)V") + public final void rsaenc(@OriginalArg(0) BigInteger exp, @OriginalArg(1) BigInteger mod) { + @Pc(2) int len = this.offset; + this.offset = 0; + @Pc(8) byte[] plaintextBytes = new byte[len]; + this.gdata(len, plaintextBytes); + @Pc(23) BigInteger plaintext = new BigInteger(plaintextBytes); + @Pc(28) BigInteger ciphertext = plaintext.modPow(exp, mod); + @Pc(38) byte[] ciphertextBytes = ciphertext.toByteArray(); + this.offset = 0; + this.p1(ciphertextBytes.length); + this.pdata(ciphertextBytes, ciphertextBytes.length); + } + + // get (read) methods + + @OriginalMember(owner = "client!wa", name = "p", descriptor = "(B)I") + public final int g1() { + return this.data[this.offset++] & 0xFF; + } + + @OriginalMember(owner = "client!wa", name = "g", descriptor = "(B)I") + public final int g1add() { + return this.data[this.offset++] - 128 & 0xFF; + } + + @OriginalMember(owner = "client!wa", name = "g", descriptor = "(Z)I") + public final int g1neg() { + return -this.data[this.offset++] & 0xFF; + } + + @OriginalMember(owner = "client!wa", name = "d", descriptor = "(Z)B") + public final byte g1b() { + return this.data[this.offset++]; + } + + @OriginalMember(owner = "client!wa", name = "c", descriptor = "(Z)I") + public final int g1sub() { + return 128 - this.data[this.offset++] & 0xFF; + } + + @OriginalMember(owner = "client!wa", name = "n", descriptor = "(I)B") + public final byte g1badd() { + return (byte) (this.data[this.offset++] - 128); + } + + @OriginalMember(owner = "client!wa", name = "i", descriptor = "(B)B") + public final byte g1bneg() { + return (byte) -this.data[this.offset++]; + } + + @OriginalMember(owner = "client!wa", name = "b", descriptor = "(Z)B") + public final byte g1bsub() { + return (byte) (128 - this.data[this.offset++]); + } + + @OriginalMember(owner = "client!wa", name = "c", descriptor = "(I)I") + public final int g2() { + this.offset += 2; + return ((this.data[this.offset - 2] & 0xFF) << 8) + (this.data[this.offset - 1] & 0xFF); + } + + @OriginalMember(owner = "client!wa", name = "g", descriptor = "(I)I") + public final int g2add() { + this.offset += 2; + return ((this.data[this.offset - 2] & 0xFF) << 8) + (this.data[this.offset - 1] - 128 & 0xFF); + } + + @OriginalMember(owner = "client!wa", name = "l", descriptor = "(B)I") + public final int g2b() { + this.offset += 2; + @Pc(27) int value = ((this.data[this.offset - 2] & 0xFF) << 8) + (this.data[this.offset - 1] & 0xFF); + if (value > 32767) { + value -= 0x10000; + } + return value; + } + + @OriginalMember(owner = "client!wa", name = "d", descriptor = "(I)I") + public final int g2badd() { + this.offset += 2; + @Pc(34) int value = ((this.data[this.offset - 2] & 0xFF) << 8) + (this.data[this.offset - 1] - 128 & 0xFF); + if (value > 32767) { + value -= 0x10000; + } + return value; + } + + @OriginalMember(owner = "client!wa", name = "i", descriptor = "(I)I") + public final int ig2() { + this.offset += 2; + return ((this.data[this.offset - 1] & 0xFF) << 8) + (this.data[this.offset - 2] & 0xFF); + } + + @OriginalMember(owner = "client!wa", name = "m", descriptor = "(B)I") + public final int ig2b() { + this.offset += 2; + @Pc(38) int value = (this.data[this.offset - 2] & 0xFF) + ((this.data[this.offset - 1] & 0xFF) << 8); + if (value > 32767) { + value -= 0x10000; + } + return value; + } + + @OriginalMember(owner = "client!wa", name = "k", descriptor = "(B)I") + public final int ig2add() { + this.offset += 2; + return ((this.data[this.offset - 1] & 0xFF) << 8) + (this.data[this.offset - 2] - 128 & 0xFF); + } + + @OriginalMember(owner = "client!wa", name = "m", descriptor = "(I)I") + public final int ig2badd() { + this.offset += 2; + @Pc(34) int value = ((this.data[this.offset - 1] & 0xFF) << 8) + (this.data[this.offset - 2] - 128 & 0xFF); + if (value > 32767) { + value -= 0x10000; + } + return value; + } + + @OriginalMember(owner = "client!wa", name = "n", descriptor = "(B)I") + public final int g3() { + this.offset += 3; + return ((this.data[this.offset - 3] & 0xFF) << 16) + ((this.data[this.offset - 2] << 8 & 0xFF00) + (this.data[this.offset - 1] & 0xFF)); + } + + @OriginalMember(owner = "client!wa", name = "h", descriptor = "(B)I") + public final int ig3() { + this.offset += 3; + return (((this.data[this.offset - 1] & 0xFF) << 16) + (this.data[this.offset - 2] & 0xFF) << 8) + (this.data[this.offset - 3] & 0xFF); + } + + @OriginalMember(owner = "client!wa", name = "e", descriptor = "(I)I") + public final int g4() { + this.offset += 4; + return ((this.data[this.offset - 4] & 0xFF) << 24) + ((this.data[this.offset - 3] & 0xFF) << 16) + ((this.data[this.offset - 2] & 0xFF) << 8) + (this.data[this.offset - 1] & 0xFF); + } + + @OriginalMember(owner = "client!wa", name = "l", descriptor = "(I)I") + public final int ig4() { + this.offset += 4; + return ((this.data[this.offset - 1] & 0xFF) << 24) + ((this.data[this.offset - 2] & 0xFF) << 16) + ((this.data[this.offset - 3] & 0xFF) << 8) + (this.data[this.offset - 4] & 0xFF); + } + + @OriginalMember(owner = "client!wa", name = "o", descriptor = "(B)I") + public final int mg4() { + this.offset += 4; + return ((this.data[this.offset - 3] & 0xFF) << 24) + ((this.data[this.offset - 4] & 0xFF) << 16) + ((this.data[this.offset - 1] & 0xFF) << 8) + (this.data[this.offset - 2] & 0xFF); + } + + @OriginalMember(owner = "client!wa", name = "k", descriptor = "(I)I") + public final int img4() { + this.offset += 4; + return ((this.data[this.offset - 2] & 0xFF) << 24) + ((this.data[this.offset - 1] & 0xFF) << 16) + ((this.data[this.offset - 4] & 0xFF) << 8) + (this.data[this.offset - 3] & 0xFF); + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(FB)V") + public final void gFloat(@OriginalArg(0) float value) { + @Pc(2) int valueInt = Float.floatToRawIntBits(value); + this.data[this.offset++] = (byte) valueInt; + this.data[this.offset++] = (byte) (valueInt >> 8); + this.data[this.offset++] = (byte) (valueInt >> 16); + this.data[this.offset++] = (byte) (valueInt >> 24); + } + + @OriginalMember(owner = "client!wa", name = "f", descriptor = "(I)J") + public final long g8() { + @Pc(11) long low = (long) this.g4() & 0xFFFFFFFFL; + @Pc(18) long high = (long) this.g4() & 0xFFFFFFFFL; + return high + (low << 32); + } + + // range: -16384 to 16383 + @OriginalMember(owner = "client!wa", name = "p", descriptor = "(I)I") + public final int gsmart() { + @Pc(11) int value = this.data[this.offset] & 0xFF; + return value < 128 ? this.g1() - 64 : this.g2() - 0xc000; + } + + @OriginalMember(owner = "client!wa", name = "f", descriptor = "(Z)I") + public final int gsmarts() { + @Pc(17) int value = this.data[this.offset] & 0xFF; + return value >= 128 ? this.g2() - 0x8000 : this.g1(); + } + + @OriginalMember(owner = "client!wa", name = "j", descriptor = "(B)I") + public final int gVarSmart() { + @Pc(14) int value = this.gsmarts(); + @Pc(16) int value2 = 0; + while (value == 32767) { + value = this.gsmarts(); + value2 += 32767; + } + return value2 + value; + } + + @OriginalMember(owner = "client!wa", name = "d", descriptor = "(B)I") + public final int gVarInt() { + @Pc(12) byte b = this.data[this.offset++]; + @Pc(24) int value = 0; + while (b < 0) { + value = (b & 0x7F | value) << 7; + b = this.data[this.offset++]; + } + return b | value; + } + + @OriginalMember(owner = "client!wa", name = "i", descriptor = "(II)J") + public final long gVarLong(@OriginalArg(0) int len) { + @Pc(2) int bytes = len - 1; + if (bytes < 0 || bytes > 7) { + throw new IllegalArgumentException(); + } + @Pc(21) long value = 0L; + for (@Pc(25) int shift = bytes * 8; shift >= 0; shift -= 8) { + value |= ((long) this.data[this.offset++] & 0xFFL) << shift; + } + return value; + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(II[BB)V") + public final void gdata(@OriginalArg(1) int len, @OriginalArg(2) byte[] dest) { + for (@Pc(8) int i = 0; i < len; i++) { + dest[i] = this.data[this.offset++]; + } + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(II[BI)V") + public final void igdata(@OriginalArg(1) int offset, @OriginalArg(2) byte[] dest) { + for (@Pc(12) int i = offset - 1; i >= 0; i--) { + dest[i] = this.data[this.offset++]; + } + } + + @OriginalMember(owner = "client!wa", name = "e", descriptor = "(Z)Lclient!na;") + public final JagString gjstr() { + @Pc(12) int start = this.offset; + while (this.data[this.offset++] != 0) ; + return JagString.decodeString(this.data, this.offset - start - 1, start); + } + + @OriginalMember(owner = "client!wa", name = "h", descriptor = "(I)Lclient!na;") + public final JagString gjstr2() { + @Pc(10) byte version = this.data[this.offset++]; + if (version != 0) { + throw new IllegalStateException("Bad version number in gjstr2"); + } + @Pc(32) int off = this.offset; + while (this.data[this.offset++] != 0) ; + return JagString.decodeString(this.data, this.offset - off - 1, off); + } + + @OriginalMember(owner = "client!wa", name = "f", descriptor = "(B)Lclient!na;") + public final JagString fastgjstr() { + if (this.data[this.offset] == 0) { + this.offset++; + return null; + } else { + return this.gjstr(); + } + } + + @OriginalMember(owner = "client!si", name = "a", descriptor = "(BLclient!na;)I") + public static int gjstrlen(@OriginalArg(1) JagString str) { + return str.length() + 1; + } + + // put (write) methods + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(BI)V") + public final void p1(@OriginalArg(1) int value) { + this.data[this.offset++] = (byte) value; + } + + @OriginalMember(owner = "client!wa", name = "m", descriptor = "(II)V") + public final void p1add(@OriginalArg(0) int value) { + this.data[this.offset++] = (byte) (value + 128); + } + + @OriginalMember(owner = "client!wa", name = "d", descriptor = "(II)V") + public final void p1sub(@OriginalArg(1) int value) { + this.data[this.offset++] = (byte) (128 - value); + } + + @OriginalMember(owner = "client!wa", name = "b", descriptor = "(BI)V") + public final void psize1(@OriginalArg(1) int length) { + this.data[this.offset - length - 1] = (byte) length; + } + + @OriginalMember(owner = "client!wa", name = "o", descriptor = "(II)V") + public final void p2(@OriginalArg(1) int value) { + this.data[this.offset++] = (byte) (value >> 8); + this.data[this.offset++] = (byte) value; + } + + @OriginalMember(owner = "client!wa", name = "l", descriptor = "(II)V") + public final void p2add(@OriginalArg(0) int value) { + this.data[this.offset++] = (byte) (value >> 8); + this.data[this.offset++] = (byte) (value + 128); + } + + @OriginalMember(owner = "client!wa", name = "n", descriptor = "(II)V") + public final void ip2(@OriginalArg(1) int value) { + this.data[this.offset++] = (byte) value; + this.data[this.offset++] = (byte) (value >> 8); + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(IB)V") + public final void ip2add(@OriginalArg(0) int value) { + this.data[this.offset++] = (byte) (value + 128); + this.data[this.offset++] = (byte) (value >> 8); + } + + @OriginalMember(owner = "client!wa", name = "k", descriptor = "(II)V") + public final void p3(@OriginalArg(0) int value) { + this.data[this.offset++] = (byte) (value >> 16); + this.data[this.offset++] = (byte) (value >> 8); + this.data[this.offset++] = (byte) value; + } + + @OriginalMember(owner = "client!wa", name = "b", descriptor = "(II)V") + public final void p4(@OriginalArg(1) int value) { + this.data[this.offset++] = (byte) (value >> 24); + this.data[this.offset++] = (byte) (value >> 16); + this.data[this.offset++] = (byte) (value >> 8); + this.data[this.offset++] = (byte) value; + } + + @OriginalMember(owner = "client!wa", name = "e", descriptor = "(II)V") + public final void ip4(@OriginalArg(0) int value) { + this.data[this.offset++] = (byte) value; + this.data[this.offset++] = (byte) (value >> 8); + this.data[this.offset++] = (byte) (value >> 16); + this.data[this.offset++] = (byte) (value >> 24); + } + + // duplicate function: +// @OriginalMember(owner = "client!wa", name = "b", descriptor = "(IB)V") +// public final void ip4(@OriginalArg(0) int value) { +// this.data[this.offset++] = (byte) value; +// this.data[this.offset++] = (byte) (value >> 8); +// this.data[this.offset++] = (byte) (value >> 16); +// this.data[this.offset++] = (byte) (value >> 24); +// } + + @OriginalMember(owner = "client!wa", name = "f", descriptor = "(II)V") + public final void mp4(@OriginalArg(1) int value) { + this.data[this.offset++] = (byte) (value >> 16); + this.data[this.offset++] = (byte) (value >> 24); + this.data[this.offset++] = (byte) value; + this.data[this.offset++] = (byte) (value >> 8); + } + + @OriginalMember(owner = "client!wa", name = "j", descriptor = "(II)V") + public final void imp4(@OriginalArg(0) int value) { + this.data[this.offset++] = (byte) (value >> 8); + this.data[this.offset++] = (byte) value; + this.data[this.offset++] = (byte) (value >> 24); + this.data[this.offset++] = (byte) (value >> 16); + } + + @OriginalMember(owner = "client!wa", name = "c", descriptor = "(II)V") + public final void psize4(@OriginalArg(1) int len) { + this.data[this.offset - len - 4] = (byte) (len >> 24); + this.data[this.offset - len - 3] = (byte) (len >> 16); + this.data[this.offset - len - 2] = (byte) (len >> 8); + this.data[this.offset - len - 1] = (byte) len; + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(IF)V") + public final void pFloat(@OriginalArg(1) float value) { + @Pc(6) int floatInt = Float.floatToRawIntBits(value); + this.data[this.offset++] = (byte) (floatInt >> 24); + this.data[this.offset++] = (byte) (floatInt >> 16); + this.data[this.offset++] = (byte) (floatInt >> 8); + this.data[this.offset++] = (byte) floatInt; + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(JI)V") + public final void p8(@OriginalArg(0) long value) { + this.data[this.offset++] = (byte) (value >> 56); + this.data[this.offset++] = (byte) (value >> 48); + this.data[this.offset++] = (byte) (value >> 40); + this.data[this.offset++] = (byte) (value >> 32); + this.data[this.offset++] = (byte) (value >> 24); + this.data[this.offset++] = (byte) (value >> 16); + this.data[this.offset++] = (byte) (value >> 8); + this.data[this.offset++] = (byte) value; + } + + @OriginalMember(owner = "client!wa", name = "h", descriptor = "(II)V") + public final void pVarInt(@OriginalArg(1) int value) { + if ((value & 0xffffff80) != 0) { + if ((value & 0xffffc000) != 0) { + if ((value & 0xFFE00000) != 0) { + if ((value & 0xF0000000) != 0) { + this.p1(value >>> 28 | 0x80); + } + this.p1(value >>> 21 | 0x80); + } + this.p1(value >>> 14 | 0x80); + } + this.p1(value >>> 7 | 0x80); + } + this.p1(value & 0x7F); + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(IIJ)V") + public final void pVarLong(@OriginalArg(1) int size, @OriginalArg(2) long value) { + @Pc(2) int bytes = size - 1; + if (bytes < 0 || bytes > 7) { + throw new IllegalArgumentException(); + } + for (@Pc(27) int shift = bytes * 8; shift >= 0; shift -= 8) { + this.data[this.offset++] = (byte) (value >> shift); + } + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(ILclient!na;)V") + public final void pjstr(@OriginalArg(1) JagString value) { + this.offset += value.encodeString(this.data, this.offset, value.length()); + this.data[this.offset++] = 0; + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "([BIII)V") + public final void pdata(@OriginalArg(0) byte[] src, @OriginalArg(2) int len) { + for (@Pc(7) int i = 0; i < len; i++) { + this.data[this.offset++] = src[i]; + } + } + + @OriginalMember(owner = "client!wa", name = "g", descriptor = "(II)V") + public final void psmarts(@OriginalArg(1) int value) { + if (value >= 0 && value < 128) { + this.p1(value); + } else if (value >= 0 && value < 0x8000) { + this.p2(value + 0x8000); + } else { + throw new IllegalArgumentException("psmarts out of range: " + value); + } + } + +} diff --git a/client/src/main/java/rt4/BufferedFile.java b/client/src/main/java/rt4/BufferedFile.java new file mode 100644 index 0000000..5c95361 --- /dev/null +++ b/client/src/main/java/rt4/BufferedFile.java @@ -0,0 +1,294 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.io.EOFException; +import java.io.File; +import java.io.IOException; + +@OriginalClass("client!en") +public final class BufferedFile { + + @OriginalMember(owner = "client!en", name = "m", descriptor = "J") + private long physicalPosition; + + @OriginalMember(owner = "client!en", name = "v", descriptor = "I") + private int readLen; + + @OriginalMember(owner = "client!en", name = "p", descriptor = "J") + private long writePosition = -1L; + + @OriginalMember(owner = "client!en", name = "g", descriptor = "I") + private int writeLen = 0; + + @OriginalMember(owner = "client!en", name = "w", descriptor = "J") + private long readPosition = -1L; + + @OriginalMember(owner = "client!en", name = "s", descriptor = "Lsignlink!qm;") + private final FileOnDisk file; + + @OriginalMember(owner = "client!en", name = "a", descriptor = "J") + private long physicalLength; + + @OriginalMember(owner = "client!en", name = "j", descriptor = "J") + private long virtualLength; + + @OriginalMember(owner = "client!en", name = "q", descriptor = "[B") + private final byte[] writeBuffer; + + @OriginalMember(owner = "client!en", name = "b", descriptor = "[B") + private final byte[] readBuffer; + + @OriginalMember(owner = "client!en", name = "k", descriptor = "J") + private long virtualPosition; + + @OriginalMember(owner = "client!en", name = "", descriptor = "(Lsignlink!qm;II)V") + public BufferedFile(@OriginalArg(0) FileOnDisk file, @OriginalArg(1) int readBufferSize, @OriginalArg(2) int writeBufferSize) throws IOException { + this.file = file; + this.virtualLength = this.physicalLength = file.length(); + this.writeBuffer = new byte[writeBufferSize]; + this.readBuffer = new byte[readBufferSize]; + this.virtualPosition = 0L; + } + + @OriginalMember(owner = "client!en", name = "a", descriptor = "(B)V") + private void flush() throws IOException { + if (this.writePosition == -1L) { + return; + } + if (this.writePosition != this.physicalPosition) { + this.file.seek(this.writePosition); + this.physicalPosition = this.writePosition; + } + this.file.write(this.writeBuffer, this.writeLen, 0); + @Pc(45) long start = -1L; + if (this.readPosition <= this.writePosition && this.readPosition + (long) this.readLen > this.writePosition) { + start = this.writePosition; + } else if (this.writePosition <= this.readPosition && this.readPosition < this.writePosition + (long) this.writeLen) { + start = this.readPosition; + } + this.physicalPosition += this.writeLen; + if (this.physicalLength < this.physicalPosition) { + this.physicalLength = this.physicalPosition; + } + @Pc(118) long end = -1L; + if (this.readPosition < this.writePosition + (long) this.writeLen && (long) this.readLen + this.readPosition >= (long) this.writeLen + this.writePosition) { + end = this.writePosition + (long) this.writeLen; + } else if (this.readPosition + (long) this.readLen > this.writePosition && (long) this.writeLen + this.writePosition >= (long) this.readLen + this.readPosition) { + end = (long) this.readLen + this.readPosition; + } + if (start > -1L && end > start) { + @Pc(208) int copyLen = (int) (end - start); + JagString.copy(this.writeBuffer, (int) (start - this.writePosition), this.readBuffer, (int) (start - this.readPosition), copyLen); + } + this.writeLen = 0; + this.writePosition = -1L; + } + + @OriginalMember(owner = "client!en", name = "a", descriptor = "(I)J") + public final long length() { + return this.virtualLength; + } + + @OriginalMember(owner = "client!en", name = "b", descriptor = "(I)Ljava/io/File;") + private File getFile() { + return this.file.getFile(); + } + + @OriginalMember(owner = "client!en", name = "a", descriptor = "(I[BII)V") + public final void read(@OriginalArg(0) int off, @OriginalArg(1) byte[] b, @OriginalArg(2) int len) throws IOException { + try { + if (len > b.length) { + throw new ArrayIndexOutOfBoundsException(len - b.length); + } + if (this.writePosition != -1L && this.virtualPosition >= this.writePosition && (long) this.writeLen + this.writePosition >= (long) len + this.virtualPosition) { + JagString.copy(this.writeBuffer, (int) (this.virtualPosition - this.writePosition), b, 0, len); + this.virtualPosition += len; + return; + } + @Pc(71) long originalPosition = this.virtualPosition; + @Pc(75) int originalLen = len; + @Pc(102) int n; + if (this.readPosition <= this.virtualPosition && this.readPosition + (long) this.readLen > this.virtualPosition) { + n = (int) ((long) this.readLen + this.readPosition - this.virtualPosition); + if (n > len) { + n = len; + } + JagString.copy(this.readBuffer, (int) (this.virtualPosition - this.readPosition), b, 0, n); + off = n; + len -= n; + this.virtualPosition += n; + } + if (this.readBuffer.length < len) { + this.file.seek(this.virtualPosition); + this.physicalPosition = this.virtualPosition; + while (len > 0) { + n = this.file.read(off, len, b); + if (n == -1) { + break; + } + this.physicalPosition += n; + len -= n; + off += n; + this.virtualPosition += n; + } + } else if (len > 0) { + this.fill(); + n = len; + if (len > this.readLen) { + n = this.readLen; + } + JagString.copy(this.readBuffer, 0, b, off, n); + len -= n; + off += n; + this.virtualPosition += n; + } + if (this.writePosition != -1L) { + if (this.virtualPosition < this.writePosition && len > 0) { + n = (int) (this.writePosition - this.virtualPosition) + off; + if (off + len < n) { + n = off + len; + } + while (off < n) { + b[off++] = 0; + this.virtualPosition++; + len--; + } + } + @Pc(298) long end = -1L; + @Pc(300) long start = -1L; + if ((long) this.writeLen + this.writePosition > originalPosition && (long) originalLen + originalPosition >= (long) this.writeLen + this.writePosition) { + start = (long) this.writeLen + this.writePosition; + } else if (this.writePosition < (long) originalLen + originalPosition && (long) this.writeLen + this.writePosition >= (long) originalLen + originalPosition) { + start = (long) originalLen + originalPosition; + } + if (originalPosition <= this.writePosition && originalPosition + (long) originalLen > this.writePosition) { + end = this.writePosition; + } else if (originalPosition >= this.writePosition && originalPosition < (long) this.writeLen + this.writePosition) { + end = originalPosition; + } + if (end > -1L && start > end) { + @Pc(426) int copyLen = (int) (start - end); + JagString.copy(this.writeBuffer, (int) (end - this.writePosition), b, (int) (end - originalPosition), copyLen); + if (this.virtualPosition < start) { + len = (int) ((long) len + this.virtualPosition - start); + this.virtualPosition = start; + } + } + } + } catch (@Pc(464) IOException ex) { + ex.printStackTrace(); + this.physicalPosition = -1L; + throw ex; + } + if (len > 0) { + throw new EOFException(); + } + } + + @OriginalMember(owner = "client!en", name = "b", descriptor = "(Z)V") + public final void method1455() throws IOException { + this.flush(); + this.file.close(); + } + + @OriginalMember(owner = "client!en", name = "c", descriptor = "(I)V") + private void fill() throws IOException { + this.readLen = 0; + if (this.physicalPosition != this.virtualPosition) { + this.file.seek(this.virtualPosition); + this.physicalPosition = this.virtualPosition; + } + this.readPosition = this.virtualPosition; + while (this.readBuffer.length > this.readLen) { + @Pc(49) int len = this.readBuffer.length - this.readLen; + if (len > 200000000) { + len = 200000000; + } + @Pc(66) int n = this.file.read(this.readLen, len, this.readBuffer); + if (n == -1) { + break; + } + this.physicalPosition += n; + this.readLen += n; + } + } + + @OriginalMember(owner = "client!en", name = "a", descriptor = "(Z[B)V") + public final void read(@OriginalArg(1) byte[] b) throws IOException { + this.read(0, b, b.length); + } + + @OriginalMember(owner = "client!en", name = "a", descriptor = "([BIII)V") + public final void write(@OriginalArg(0) byte[] b, @OriginalArg(1) int off, @OriginalArg(3) int len) throws IOException { + try { + if (this.virtualLength < (long) len + this.virtualPosition) { + this.virtualLength = (long) len + this.virtualPosition; + } + if (this.writePosition != -1L && (this.writePosition > this.virtualPosition || this.virtualPosition > (long) this.writeLen + this.writePosition)) { + this.flush(); + } + if (this.writePosition != -1L && (long) this.writeBuffer.length + this.writePosition < (long) len + this.virtualPosition) { + @Pc(90) int n = (int) ((long) this.writeBuffer.length + this.writePosition - this.virtualPosition); + len -= n; + JagString.copy(b, off, this.writeBuffer, (int) (this.virtualPosition - this.writePosition), n); + this.virtualPosition += n; + this.writeLen = this.writeBuffer.length; + this.flush(); + off += n; + } + if (this.writeBuffer.length < len) { + if (this.virtualPosition != this.physicalPosition) { + this.file.seek(this.virtualPosition); + this.physicalPosition = this.virtualPosition; + } + this.file.write(b, len, off); + @Pc(165) long start = -1L; + if (this.readPosition <= this.virtualPosition && (long) this.readLen + this.readPosition > this.virtualPosition) { + start = this.virtualPosition; + } else if (this.virtualPosition <= this.readPosition && (long) len + this.virtualPosition > this.readPosition) { + start = this.readPosition; + } + this.physicalPosition += len; + @Pc(226) long end = -1L; + if (this.physicalLength < this.physicalPosition) { + this.physicalLength = this.physicalPosition; + } + if (this.virtualPosition + (long) len > this.readPosition && this.virtualPosition + (long) len <= this.readPosition - -((long) this.readLen)) { + end = (long) len + this.virtualPosition; + } else if (this.readPosition + (long) this.readLen > this.virtualPosition && this.virtualPosition + (long) len >= (long) this.readLen + this.readPosition) { + end = (long) this.readLen + this.readPosition; + } + if (start > -1L && end > start) { + @Pc(324) int copyLen = (int) (end - start); + JagString.copy(b, (int) (start + (long) off - this.virtualPosition), this.readBuffer, (int) (start - this.readPosition), copyLen); + } + this.virtualPosition += len; + } else if (len > 0) { + if (this.writePosition == -1L) { + this.writePosition = this.virtualPosition; + } + JagString.copy(b, off, this.writeBuffer, (int) (this.virtualPosition - this.writePosition), len); + this.virtualPosition += len; + if ((long) this.writeLen < this.virtualPosition - this.writePosition) { + this.writeLen = (int) (this.virtualPosition - this.writePosition); + } + } + } catch (@Pc(414) IOException ex) { + ex.printStackTrace(); + this.physicalPosition = -1L; + throw ex; + } + } + + @OriginalMember(owner = "client!en", name = "a", descriptor = "(IJ)V") + public final void seek(@OriginalArg(1) long offset) throws IOException { + if (offset < 0L) { + throw new IOException("Invalid seek to " + offset + " in file " + this.getFile()); + } + this.virtualPosition = offset; + } +} diff --git a/client/src/main/java/rt4/BufferedImageFrameBuffer.java b/client/src/main/java/rt4/BufferedImageFrameBuffer.java new file mode 100644 index 0000000..c4024c8 --- /dev/null +++ b/client/src/main/java/rt4/BufferedImageFrameBuffer.java @@ -0,0 +1,47 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.Component; +import java.awt.*; +import java.awt.image.*; +import java.util.Hashtable; + +@OriginalClass("client!ti") +public final class BufferedImageFrameBuffer extends FrameBuffer { + + @OriginalMember(owner = "client!ti", name = "p", descriptor = "Ljava/awt/Component;") + private Component component; + + @OriginalMember(owner = "client!ti", name = "a", descriptor = "(IILjava/awt/Graphics;I)V") + @Override + public final void draw(@OriginalArg(2) Graphics graphics) { + graphics.drawImage(this.image, 0, 0, this.component); + } + + @OriginalMember(owner = "client!ti", name = "a", descriptor = "(IZILjava/awt/Component;)V") + @Override + public final void init(@OriginalArg(0) int height, @OriginalArg(2) int width, @OriginalArg(3) Component component) { + this.pixels = new int[width * height + 1]; + this.height = height; + this.width = width; + @Pc(22) DataBufferInt buffer = new DataBufferInt(this.pixels, this.pixels.length); + @Pc(30) DirectColorModel model = new DirectColorModel(32, 16711680, 65280, 255); + @Pc(40) WritableRaster raster = Raster.createWritableRaster(model.createCompatibleSampleModel(this.width, this.height), buffer, null); + this.image = new BufferedImage(model, raster, false, new Hashtable()); + this.component = component; + this.makeTarget(); + } + + @OriginalMember(owner = "client!ti", name = "a", descriptor = "(IIIILjava/awt/Graphics;I)V") + @Override + public final void drawAt(@OriginalArg(0) int width, @OriginalArg(1) int x, @OriginalArg(3) int height, @OriginalArg(4) Graphics graphics, @OriginalArg(5) int y) { + @Pc(2) Shape clip = graphics.getClip(); + graphics.clipRect(x, y, width, height); + graphics.drawImage(this.image, 0, 0, this.component); + graphics.setClip(clip); + } +} diff --git a/client/src/main/java/rt4/BufferedSocket.java b/client/src/main/java/rt4/BufferedSocket.java new file mode 100644 index 0000000..1a30b52 --- /dev/null +++ b/client/src/main/java/rt4/BufferedSocket.java @@ -0,0 +1,219 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.Socket; + +@OriginalClass("client!ma") +public final class BufferedSocket implements Runnable { + + @OriginalMember(owner = "client!ma", name = "h", descriptor = "[B") + private byte[] buffer; + + @OriginalMember(owner = "client!ma", name = "n", descriptor = "Lsignlink!im;") + private PrivilegedRequest thread; + + @OriginalMember(owner = "client!ma", name = "l", descriptor = "I") + private int readPointer = 0; + + @OriginalMember(owner = "client!ma", name = "b", descriptor = "I") + private int writePointer = 0; + + @OriginalMember(owner = "client!ma", name = "v", descriptor = "Z") + private boolean closed = false; + + @OriginalMember(owner = "client!ma", name = "y", descriptor = "Z") + private boolean error = false; + + @OriginalMember(owner = "client!ma", name = "r", descriptor = "Lsignlink!ll;") + private final SignLink signLink; + + @OriginalMember(owner = "client!ma", name = "k", descriptor = "Ljava/net/Socket;") + private final Socket socket; + + @OriginalMember(owner = "client!ma", name = "e", descriptor = "Ljava/io/InputStream;") + private InputStream in; + + @OriginalMember(owner = "client!ma", name = "c", descriptor = "Ljava/io/OutputStream;") + private OutputStream out; + + @OriginalMember(owner = "client!ma", name = "", descriptor = "(Ljava/net/Socket;Lsignlink!ll;)V") + public BufferedSocket(@OriginalArg(0) Socket socket, @OriginalArg(1) SignLink signLink) throws IOException { + this.signLink = signLink; + this.socket = socket; + this.socket.setSoTimeout(30000); + this.socket.setTcpNoDelay(true); + this.in = this.socket.getInputStream(); + this.out = this.socket.getOutputStream(); + } + + @OriginalMember(owner = "client!ma", name = "run", descriptor = "()V") + @Override + public final void run() { + try { + while (true) { + @Pc(39) int len; + @Pc(24) int off; + ready: + { + synchronized (this) { + close: + { + if (this.writePointer == this.readPointer) { + if (this.closed) { + break close; + } + try { + this.wait(); + } catch (@Pc(21) InterruptedException ex) { + } + } + off = this.readPointer; + if (this.readPointer > this.writePointer) { + len = 5000 - this.readPointer; + } else { + len = this.writePointer - this.readPointer; + } + break ready; + } + } + try { + if (this.in != null) { + this.in.close(); + } + if (this.out != null) { + this.out.close(); + } + if (this.socket != null) { + this.socket.close(); + } + } catch (@Pc(119) IOException ex) { + } + this.buffer = null; + break; + } + if (len > 0) { + try { + this.out.write(this.buffer, off, len); + } catch (@Pc(67) IOException ex) { + this.error = true; + } + this.readPointer = (len + this.readPointer) % 5000; + try { + if (this.writePointer == this.readPointer) { + this.out.flush(); + } + } catch (@Pc(92) IOException ex) { + this.error = true; + } + } + } + } catch (@Pc(124) Exception ex) { + TracingException.report(null, ex); + } + } + + @OriginalMember(owner = "client!ma", name = "a", descriptor = "(III[B)V") + public final void read(@OriginalArg(0) int off, @OriginalArg(1) int len, @OriginalArg(3) byte[] b) throws IOException { + if (this.closed) { + return; + } + while (len > 0) { + @Pc(23) int n = this.in.read(b, off, len); + if (n <= 0) { + throw new EOFException(); + } + off += n; + len -= n; + } + } + + @OriginalMember(owner = "client!ma", name = "a", descriptor = "(I)I") + public final int read() throws IOException { + return this.closed ? 0 : this.in.read(); + } + + @OriginalMember(owner = "client!ma", name = "a", descriptor = "(ZI[BI)V") + public final void write(@OriginalArg(2) byte[] src, @OriginalArg(3) int len) throws IOException { + if (this.closed) { + return; + } + if (this.error) { + this.error = false; + throw new IOException(); + } + if (this.buffer == null) { + this.buffer = new byte[5000]; + } + synchronized (this) { + for (@Pc(34) int i = 0; i < len; i++) { + this.buffer[this.writePointer] = src[i]; + this.writePointer = (this.writePointer + 1) % 5000; + if (this.writePointer == (this.readPointer + 4900) % 5000) { + throw new IOException(); + } + } + if (this.thread == null) { + this.thread = this.signLink.startThread(3, this); + } + this.notifyAll(); + } + } + + @OriginalMember(owner = "client!ma", name = "finalize", descriptor = "()V") + @Override + public final void finalize() { + this.close(); + } + + @OriginalMember(owner = "client!ma", name = "c", descriptor = "(I)I") + public final int available() throws IOException { + return this.closed ? 0 : this.in.available(); + } + + @OriginalMember(owner = "client!ma", name = "d", descriptor = "(I)V") + public final void checkError() throws IOException { + if (!this.closed && this.error) { + this.error = false; + throw new IOException(); + } + } + + @OriginalMember(owner = "client!ma", name = "a", descriptor = "(Z)V") + public final void breakConnection() { + if (!this.closed) { + this.in = new BrokenInputStream(); + this.out = new BrokenOutputStream(); + } + } + + @OriginalMember(owner = "client!ma", name = "e", descriptor = "(I)V") + public final void close() { + if (this.closed) { + return; + } + synchronized (this) { + this.closed = true; + this.notifyAll(); + } + if (this.thread != null) { + while (this.thread.status == 0) { + ThreadUtils.sleep(1L); + } + if (this.thread.status == 1) { + try { + ((Thread) this.thread.result).join(); + } catch (@Pc(59) InterruptedException ex) { + } + } + } + this.thread = null; + } +} diff --git a/client/src/main/java/rt4/ByteArray.java b/client/src/main/java/rt4/ByteArray.java new file mode 100644 index 0000000..c5dfdda --- /dev/null +++ b/client/src/main/java/rt4/ByteArray.java @@ -0,0 +1,59 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!u") +public abstract class ByteArray { + + @OriginalMember(owner = "client!gk", name = "g", descriptor = "Z") + public static boolean directBuffersUnsupported = false; + + @OriginalMember(owner = "client!km", name = "a", descriptor = "(ILjava/lang/Object;Z)[B") + public static byte[] unwrap(@OriginalArg(1) Object in, @OriginalArg(2) boolean copy) { + if (in == null) { + return null; + } else if (in instanceof byte[]) { + @Pc(14) byte[] bytes = (byte[]) in; + return copy ? copy(bytes) : bytes; + } else if (in instanceof ByteArray) { + @Pc(34) ByteArray array = (ByteArray) in; + return array.get(); + } else { + throw new IllegalArgumentException(); + } + } + + @OriginalMember(owner = "client!bm", name = "a", descriptor = "(B[B)[B") + public static byte[] copy(@OriginalArg(1) byte[] in) { + @Pc(6) int len = in.length; + @Pc(9) byte[] out = new byte[len]; + JagString.copy(in, 0, out, 0, len); + return out; + } + + @OriginalMember(owner = "client!cj", name = "a", descriptor = "(ZI[B)Ljava/lang/Object;") + public static Object wrap(@OriginalArg(2) byte[] bytes) { + if (bytes == null) { + return null; + } + if (bytes.length > 136 && !directBuffersUnsupported) { + try { + @Pc(27) ByteArray array = new DirectByteArray(); + array.set(bytes); + return array; + } catch (@Pc(34) Throwable ex) { + directBuffersUnsupported = true; + } + } + return bytes; + } + + @OriginalMember(owner = "client!u", name = "a", descriptor = "(I)[B") + public abstract byte[] get(); + + @OriginalMember(owner = "client!u", name = "a", descriptor = "(I[B)V") + public abstract void set(@OriginalArg(1) byte[] bytes); +} diff --git a/client/src/main/java/rt4/ByteArrayNode.java b/client/src/main/java/rt4/ByteArrayNode.java new file mode 100644 index 0000000..686406d --- /dev/null +++ b/client/src/main/java/rt4/ByteArrayNode.java @@ -0,0 +1,17 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!ea") +public final class ByteArrayNode extends Node { + + @OriginalMember(owner = "client!ea", name = "t", descriptor = "[B") + public final byte[] value; + + @OriginalMember(owner = "client!ea", name = "", descriptor = "([B)V") + public ByteArrayNode(@OriginalArg(0) byte[] value) { + this.value = value; + } +} diff --git a/client/src/main/java/rt4/ByteArrayNodeSecondary.java b/client/src/main/java/rt4/ByteArrayNodeSecondary.java new file mode 100644 index 0000000..57b9e5a --- /dev/null +++ b/client/src/main/java/rt4/ByteArrayNodeSecondary.java @@ -0,0 +1,17 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!hc") +public final class ByteArrayNodeSecondary extends SecondaryNode { + + @OriginalMember(owner = "client!hc", name = "Q", descriptor = "[B") + public final byte[] value; + + @OriginalMember(owner = "client!hc", name = "", descriptor = "([B)V") + public ByteArrayNodeSecondary(@OriginalArg(0) byte[] value) { + this.value = value; + } +} diff --git a/client/src/main/java/rt4/Bzip2DState.java b/client/src/main/java/rt4/Bzip2DState.java new file mode 100644 index 0000000..7cc0f6f --- /dev/null +++ b/client/src/main/java/rt4/Bzip2DState.java @@ -0,0 +1,104 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!bb") +public final class Bzip2DState { + + @OriginalMember(owner = "client!bb", name = "e", descriptor = "B") + public byte stateOutCh; + + @OriginalMember(owner = "client!bb", name = "k", descriptor = "[B") + public byte[] strmNextOut; + + @OriginalMember(owner = "client!bb", name = "o", descriptor = "I") + public int saveNblock; + + @OriginalMember(owner = "client!bb", name = "u", descriptor = "I") + public int strmAvailOut; + + @OriginalMember(owner = "client!bb", name = "v", descriptor = "[B") + public byte[] strmNextIn; + + @OriginalMember(owner = "client!bb", name = "w", descriptor = "I") + public int bsLive; + + @OriginalMember(owner = "client!bb", name = "x", descriptor = "I") + public int k0; + + @OriginalMember(owner = "client!bb", name = "z", descriptor = "I") + public int nblockused; + + @OriginalMember(owner = "client!bb", name = "B", descriptor = "I") + public int tPos; + + @OriginalMember(owner = "client!bb", name = "D", descriptor = "I") + public int origPtr; + + @OriginalMember(owner = "client!bb", name = "F", descriptor = "I") + public int nInUse; + + @OriginalMember(owner = "client!bb", name = "I", descriptor = "I") + public int bsBuff; + + @OriginalMember(owner = "client!bb", name = "J", descriptor = "I") + public int strmTotalOutLo32; + + @OriginalMember(owner = "client!bb", name = "K", descriptor = "I") + public int blockSize100k; + + @OriginalMember(owner = "client!bb", name = "L", descriptor = "I") + public int stateOutLen; + + @OriginalMember(owner = "client!bb", name = "P", descriptor = "I") + public int strmTotalInLo32; + + @OriginalMember(owner = "client!bb", name = "b", descriptor = "[B") + public final byte[] mfta = new byte[4096]; + + @OriginalMember(owner = "client!bb", name = "f", descriptor = "[Z") + public final boolean[] inUse = new boolean[256]; + + @OriginalMember(owner = "client!bb", name = "d", descriptor = "[[I") + public final int[][] perm = new int[6][258]; + + @OriginalMember(owner = "client!bb", name = "h", descriptor = "[B") + public final byte[] seqToUnseq = new byte[256]; + + @OriginalMember(owner = "client!bb", name = "a", descriptor = "[[I") + public final int[][] base = new int[6][258]; + + @OriginalMember(owner = "client!bb", name = "l", descriptor = "I") + public int strmNextOutPtr = 0; + + @OriginalMember(owner = "client!bb", name = "i", descriptor = "[[I") + public final int[][] limit = new int[6][258]; + + @OriginalMember(owner = "client!bb", name = "j", descriptor = "I") + public int strmNextInPtr = 0; + + @OriginalMember(owner = "client!bb", name = "C", descriptor = "[I") + public final int[] unfztab = new int[256]; + + @OriginalMember(owner = "client!bb", name = "p", descriptor = "[I") + public final int[] cftab = new int[257]; + + @OriginalMember(owner = "client!bb", name = "y", descriptor = "[B") + public final byte[] selector = new byte[18002]; + + @OriginalMember(owner = "client!bb", name = "r", descriptor = "[Z") + public final boolean[] inUse16 = new boolean[16]; + + @OriginalMember(owner = "client!bb", name = "q", descriptor = "[I") + public final int[] mtfbase = new int[16]; + + @OriginalMember(owner = "client!bb", name = "H", descriptor = "[B") + public final byte[] selectorMtf = new byte[18002]; + + @OriginalMember(owner = "client!bb", name = "G", descriptor = "[I") + public final int[] minLens = new int[6]; + + @OriginalMember(owner = "client!bb", name = "O", descriptor = "[[B") + public final byte[][] len = new byte[6][258]; +} diff --git a/client/src/main/java/rt4/Bzip2Decompressor.java b/client/src/main/java/rt4/Bzip2Decompressor.java new file mode 100644 index 0000000..40c1399 --- /dev/null +++ b/client/src/main/java/rt4/Bzip2Decompressor.java @@ -0,0 +1,508 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public final class Bzip2Decompressor { + + @OriginalMember(owner = "client!oc", name = "a", descriptor = "Lclient!bb;") + private static final Bzip2DState state = new Bzip2DState(); + + @OriginalMember(owner = "client!s", name = "a", descriptor = "[I") + public static int[] tt; + + @OriginalMember(owner = "client!oc", name = "a", descriptor = "(ILclient!bb;)I") + private static int getBits(@OriginalArg(0) int arg0, @OriginalArg(1) Bzip2DState arg1) { + while (arg1.bsLive < arg0) { + arg1.bsBuff = arg1.bsBuff << 8 | arg1.strmNextIn[arg1.strmNextInPtr] & 0xFF; + arg1.bsLive += 8; + arg1.strmNextInPtr++; + arg1.strmTotalInLo32++; + if (arg1.strmTotalInLo32 == 0) { + } + } + @Pc(17) int local17 = arg1.bsBuff >> arg1.bsLive - arg0 & (0x1 << arg0) - 1; + arg1.bsLive -= arg0; + return local17; + } + + @OriginalMember(owner = "client!oc", name = "a", descriptor = "(Lclient!bb;)V") + private static void unRleObufToOutputFast(@OriginalArg(0) Bzip2DState arg0) { + @Pc(2) byte local2 = arg0.stateOutCh; + @Pc(5) int local5 = arg0.stateOutLen; + @Pc(8) int local8 = arg0.nblockused; + @Pc(11) int local11 = arg0.k0; + @Pc(13) int[] local13 = tt; + @Pc(16) int local16 = arg0.tPos; + @Pc(19) byte[] local19 = arg0.strmNextOut; + @Pc(22) int local22 = arg0.strmNextOutPtr; + @Pc(25) int local25 = arg0.strmAvailOut; + @Pc(27) int local27 = local25; + @Pc(32) int local32 = arg0.saveNblock + 1; + returnNotr: + while (true) { + if (local5 > 0) { + while (true) { + if (local25 == 0) { + break returnNotr; + } + if (local5 == 1) { + if (local25 == 0) { + local5 = 1; + break returnNotr; + } + local19[local22] = local2; + local22++; + local25--; + break; + } + local19[local22] = local2; + local5--; + local22++; + local25--; + } + } + @Pc(62) boolean local62 = true; + @Pc(84) byte local84; + while (local62) { + local62 = false; + if (local8 == local32) { + local5 = 0; + break returnNotr; + } + local2 = (byte) local11; + local16 = local13[local16]; + local84 = (byte) (local16 & 0xFF); + local16 >>= 0x8; + local8++; + if (local84 != local11) { + local11 = local84; + if (local25 == 0) { + local5 = 1; + break returnNotr; + } + local19[local22] = local2; + local22++; + local25--; + local62 = true; + } else if (local8 == local32) { + if (local25 == 0) { + local5 = 1; + break returnNotr; + } + local19[local22] = local2; + local22++; + local25--; + local62 = true; + } + } + local5 = 2; + local16 = local13[local16]; + local84 = (byte) (local16 & 0xFF); + local16 >>= 0x8; + local8++; + if (local8 != local32) { + if (local84 == local11) { + local5 = 3; + local16 = local13[local16]; + local84 = (byte) (local16 & 0xFF); + local16 >>= 0x8; + local8++; + if (local8 != local32) { + if (local84 == local11) { + local16 = local13[local16]; + local84 = (byte) (local16 & 0xFF); + local16 >>= 0x8; + local8++; + local5 = (local84 & 0xFF) + 4; + local16 = local13[local16]; + local11 = (byte) (local16 & 0xFF); + local16 >>= 0x8; + local8++; + } else { + local11 = local84; + } + } + } else { + local11 = local84; + } + } + } + @Pc(215) int local215 = arg0.strmTotalOutLo32; + arg0.strmTotalOutLo32 += local27 - local25; + if (arg0.strmTotalOutLo32 < local215) { + } + arg0.stateOutCh = local2; + arg0.stateOutLen = local5; + arg0.nblockused = local8; + arg0.k0 = local11; + tt = local13; + arg0.tPos = local16; + arg0.strmNextOut = local19; + arg0.strmNextOutPtr = local22; + arg0.strmAvailOut = local25; + } + + @OriginalMember(owner = "client!oc", name = "a", descriptor = "([I[I[I[BIII)V") + private static void hbCreateDecodeTables(@OriginalArg(0) int[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int[] arg2, @OriginalArg(3) byte[] arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6) { + @Pc(1) int local1 = 0; + @Pc(3) int local3; + for (local3 = arg4; local3 <= arg5; local3++) { + for (@Pc(8) int local8 = 0; local8 < arg6; local8++) { + if (arg3[local8] == local3) { + arg2[local1] = local8; + local1++; + } + } + } + for (local3 = 0; local3 < 23; local3++) { + arg1[local3] = 0; + } + for (local3 = 0; local3 < arg6; local3++) { + arg1[arg3[local3] + 1]++; + } + for (local3 = 1; local3 < 23; local3++) { + arg1[local3] += arg1[local3 - 1]; + } + for (local3 = 0; local3 < 23; local3++) { + arg0[local3] = 0; + } + @Pc(85) int local85 = 0; + for (local3 = arg4; local3 <= arg5; local3++) { + local85 += arg1[local3 + 1] - arg1[local3]; + arg0[local3] = local85 - 1; + local85 <<= 0x1; + } + for (local3 = arg4 + 1; local3 <= arg5; local3++) { + arg1[local3] = (arg0[local3 - 1] + 1 << 1) - arg1[local3]; + } + } + + @OriginalMember(owner = "client!oc", name = "b", descriptor = "(Lclient!bb;)V") + private static void makeMapsD(@OriginalArg(0) Bzip2DState arg0) { + arg0.nInUse = 0; + for (@Pc(4) int local4 = 0; local4 < 256; local4++) { + if (arg0.inUse[local4]) { + arg0.seqToUnseq[arg0.nInUse] = (byte) local4; + arg0.nInUse++; + } + } + } + + @OriginalMember(owner = "client!oc", name = "c", descriptor = "(Lclient!bb;)B") + private static byte getUchar(@OriginalArg(0) Bzip2DState arg0) { + return (byte) getBits(8, arg0); + } + + @OriginalMember(owner = "client!oc", name = "d", descriptor = "(Lclient!bb;)V") + private static void decompress(@OriginalArg(0) Bzip2DState arg0) { + arg0.blockSize100k = 1; + if (tt == null) { + tt = new int[arg0.blockSize100k * 100000]; + } + @Pc(56) boolean local56 = true; + while (true) { + while (local56) { + @Pc(61) byte local61 = getUchar(arg0); + if (local61 == 23) { + return; + } + local61 = getUchar(arg0); + local61 = getUchar(arg0); + local61 = getUchar(arg0); + local61 = getUchar(arg0); + local61 = getUchar(arg0); + local61 = getUchar(arg0); + local61 = getUchar(arg0); + local61 = getUchar(arg0); + local61 = getUchar(arg0); + local61 = getBit(arg0); + if (local61 != 0) { + } + arg0.origPtr = 0; + local61 = getUchar(arg0); + arg0.origPtr = arg0.origPtr << 8 | local61 & 0xFF; + local61 = getUchar(arg0); + arg0.origPtr = arg0.origPtr << 8 | local61 & 0xFF; + local61 = getUchar(arg0); + arg0.origPtr = arg0.origPtr << 8 | local61 & 0xFF; + @Pc(141) int local141; + for (local141 = 0; local141 < 16; local141++) { + local61 = getBit(arg0); + arg0.inUse16[local141] = local61 == 1; + } + for (local141 = 0; local141 < 256; local141++) { + arg0.inUse[local141] = false; + } + @Pc(187) int local187; + for (local141 = 0; local141 < 16; local141++) { + if (arg0.inUse16[local141]) { + for (local187 = 0; local187 < 16; local187++) { + local61 = getBit(arg0); + if (local61 == 1) { + arg0.inUse[local141 * 16 + local187] = true; + } + } + } + } + makeMapsD(arg0); + @Pc(216) int local216 = arg0.nInUse + 2; + @Pc(220) int local220 = getBits(3, arg0); + @Pc(224) int local224 = getBits(15, arg0); + for (local141 = 0; local141 < local224; local141++) { + local187 = 0; + while (true) { + local61 = getBit(arg0); + if (local61 == 0) { + arg0.selectorMtf[local141] = (byte) local187; + break; + } + local187++; + } + } + @Pc(250) byte[] local250 = new byte[6]; + @Pc(252) byte local252 = 0; + while (local252 < local220) { + local250[local252] = local252++; + } + for (local141 = 0; local141 < local224; local141++) { + local252 = arg0.selectorMtf[local141]; + @Pc(279) byte local279 = local250[local252]; + while (local252 > 0) { + local250[local252] = local250[local252 - 1]; + local252--; + } + local250[0] = local279; + arg0.selector[local141] = local279; + } + @Pc(308) int local308; + for (local308 = 0; local308 < local220; local308++) { + @Pc(315) int local315 = getBits(5, arg0); + for (local141 = 0; local141 < local216; local141++) { + while (true) { + local61 = getBit(arg0); + if (local61 == 0) { + arg0.len[local308][local141] = (byte) local315; + break; + } + local61 = getBit(arg0); + if (local61 == 0) { + local315++; + } else { + local315--; + } + } + } + } + for (local308 = 0; local308 < local220; local308++) { + @Pc(354) byte local354 = 32; + @Pc(356) byte local356 = 0; + for (local141 = 0; local141 < local216; local141++) { + if (arg0.len[local308][local141] > local356) { + local356 = arg0.len[local308][local141]; + } + if (arg0.len[local308][local141] < local354) { + local354 = arg0.len[local308][local141]; + } + } + hbCreateDecodeTables(arg0.limit[local308], arg0.base[local308], arg0.perm[local308], arg0.len[local308], local354, local356, local216); + arg0.minLens[local308] = local354; + } + @Pc(425) int local425 = arg0.nInUse + 1; + @Pc(427) byte local427 = -1; + for (local141 = 0; local141 <= 255; local141++) { + arg0.unfztab[local141] = 0; + } + @Pc(443) int local443 = 4095; + @Pc(445) int local445; + @Pc(449) int local449; + for (local445 = 15; local445 >= 0; local445--) { + for (local449 = 15; local449 >= 0; local449--) { + arg0.mfta[local443] = (byte) (local445 * 16 + local449); + local443--; + } + arg0.mtfbase[local445] = local443 + 1; + } + @Pc(475) int local475 = 0; + @Pc(478) int local478 = local427 + 1; + @Pc(480) byte local480 = 50; + @Pc(485) byte local485 = arg0.selector[0]; + @Pc(490) int local490 = arg0.minLens[local485]; + @Pc(495) int[] local495 = arg0.limit[local485]; + @Pc(500) int[] local500 = arg0.perm[local485]; + @Pc(505) int[] local505 = arg0.base[local485]; + @Pc(506) int local506 = local480 - 1; + @Pc(508) int local508 = local490; + @Pc(512) int local512; + @Pc(522) byte local522; + for (local512 = getBits(local490, arg0); local512 > local495[local508]; local512 = local512 << 1 | local522) { + local508++; + local522 = getBit(arg0); + } + @Pc(537) int local537 = local500[local512 - local505[local508]]; + while (true) { + while (local537 != local425) { + if (local537 == 0 || local537 == 1) { + @Pc(548) int local548 = -1; + @Pc(550) int local550 = 1; + do { + if (local537 == 0) { + local548 += local550; + } else if (local537 == 1) { + local548 += local550 * 2; + } + local550 *= 2; + if (local506 == 0) { + local478++; + local506 = 50; + local485 = arg0.selector[local478]; + local490 = arg0.minLens[local485]; + local495 = arg0.limit[local485]; + local500 = arg0.perm[local485]; + local505 = arg0.base[local485]; + } + local506--; + local508 = local490; + for (local512 = getBits(local490, arg0); local512 > local495[local508]; local512 = local512 << 1 | local522) { + local508++; + local522 = getBit(arg0); + } + local537 = local500[local512 - local505[local508]]; + } while (local537 == 0 || local537 == 1); + local548++; + local61 = arg0.seqToUnseq[arg0.mfta[arg0.mtfbase[0]] & 0xFF]; + arg0.unfztab[local61 & 0xFF] += local548; + while (local548 > 0) { + tt[local475] = local61 & 0xFF; + local475++; + local548--; + } + } else { + @Pc(678) int local678 = local537 - 1; + @Pc(686) int local686; + if (local678 < 16) { + local686 = arg0.mtfbase[0]; + local61 = arg0.mfta[local686 + local678]; + while (local678 > 3) { + @Pc(700) int local700 = local686 + local678; + arg0.mfta[local700] = arg0.mfta[local700 - 1]; + arg0.mfta[local700 - 1] = arg0.mfta[local700 - 2]; + arg0.mfta[local700 - 2] = arg0.mfta[local700 - 3]; + arg0.mfta[local700 - 3] = arg0.mfta[local700 - 4]; + local678 -= 4; + } + while (local678 > 0) { + arg0.mfta[local686 + local678] = arg0.mfta[local686 + local678 - 1]; + local678--; + } + arg0.mfta[local686] = local61; + } else { + @Pc(776) int local776 = local678 / 16; + @Pc(780) int local780 = local678 % 16; + local686 = arg0.mtfbase[local776] + local780; + local61 = arg0.mfta[local686]; + while (local686 > arg0.mtfbase[local776]) { + arg0.mfta[local686] = arg0.mfta[local686 - 1]; + local686--; + } + @Pc(815) int local815 = arg0.mtfbase[local776]++; + while (local776 > 0) { + local815 = arg0.mtfbase[local776]--; + arg0.mfta[arg0.mtfbase[local776]] = arg0.mfta[arg0.mtfbase[local776 - 1] + 16 - 1]; + local776--; + } + local815 = arg0.mtfbase[0]--; + arg0.mfta[arg0.mtfbase[0]] = local61; + if (arg0.mtfbase[0] == 0) { + local443 = 4095; + for (local445 = 15; local445 >= 0; local445--) { + for (local449 = 15; local449 >= 0; local449--) { + arg0.mfta[local443] = arg0.mfta[arg0.mtfbase[local445] + local449]; + local443--; + } + arg0.mtfbase[local445] = local443 + 1; + } + } + } + arg0.unfztab[arg0.seqToUnseq[local61 & 0xFF] & 0xFF]++; + tt[local475] = arg0.seqToUnseq[local61 & 0xFF] & 0xFF; + local475++; + if (local506 == 0) { + local478++; + local506 = 50; + local485 = arg0.selector[local478]; + local490 = arg0.minLens[local485]; + local495 = arg0.limit[local485]; + local500 = arg0.perm[local485]; + local505 = arg0.base[local485]; + } + local506--; + local508 = local490; + for (local512 = getBits(local490, arg0); local512 > local495[local508]; local512 = local512 << 1 | local522) { + local508++; + local522 = getBit(arg0); + } + local537 = local500[local512 - local505[local508]]; + } + } + arg0.stateOutLen = 0; + arg0.stateOutCh = 0; + arg0.cftab[0] = 0; + for (local141 = 1; local141 <= 256; local141++) { + arg0.cftab[local141] = arg0.unfztab[local141 - 1]; + } + for (local141 = 1; local141 <= 256; local141++) { + arg0.cftab[local141] += arg0.cftab[local141 - 1]; + } + for (local141 = 0; local141 < local475; local141++) { + local61 = (byte) (tt[local141] & 0xFF); + tt[arg0.cftab[local61 & 0xFF]] |= local141 << 8; + arg0.cftab[local61 & 0xFF]++; + } + arg0.tPos = tt[arg0.origPtr] >> 8; + arg0.nblockused = 0; + arg0.tPos = tt[arg0.tPos]; + arg0.k0 = (byte) (arg0.tPos & 0xFF); + arg0.tPos >>= 0x8; + arg0.nblockused++; + arg0.saveNblock = local475; + unRleObufToOutputFast(arg0); + if (arg0.nblockused == arg0.saveNblock + 1 && arg0.stateOutLen == 0) { + local56 = true; + break; + } + local56 = false; + break; + } + } + return; + } + } + + @OriginalMember(owner = "client!oc", name = "e", descriptor = "(Lclient!bb;)B") + private static byte getBit(@OriginalArg(0) Bzip2DState arg0) { + return (byte) getBits(1, arg0); + } + + @OriginalMember(owner = "client!oc", name = "a", descriptor = "([BI[BII)I") + public static int bunzip2(@OriginalArg(0) byte[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) byte[] arg2, @OriginalArg(3) int arg3) { + @Pc(2) Bzip2DState local2 = state; + synchronized (state) { + state.strmNextIn = arg2; + state.strmNextInPtr = 9; + state.strmNextOut = arg0; + state.strmNextOutPtr = 0; + state.strmAvailOut = arg1; + state.bsLive = 0; + state.bsBuff = 0; + state.strmTotalInLo32 = 0; + state.strmTotalOutLo32 = 0; + decompress(state); + @Pc(37) int local37 = arg1 - state.strmAvailOut; + state.strmNextIn = null; + state.strmNextOut = null; + return local37; + } + } +} diff --git a/client/src/main/java/rt4/Cache.java b/client/src/main/java/rt4/Cache.java new file mode 100644 index 0000000..3f5b020 --- /dev/null +++ b/client/src/main/java/rt4/Cache.java @@ -0,0 +1,224 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.io.EOFException; +import java.io.IOException; + +@OriginalClass("client!ge") +public final class Cache { + + @OriginalMember(owner = "client!wc", name = "i", descriptor = "[B") + public static final byte[] buffer = new byte[520]; + + @OriginalMember(owner = "client!ge", name = "a", descriptor = "Lclient!en;") + private BufferedFile data = null; + + @OriginalMember(owner = "client!ge", name = "f", descriptor = "Lclient!en;") + private BufferedFile index = null; + + @OriginalMember(owner = "client!ge", name = "l", descriptor = "I") + private int maxLen = 65000; + + @OriginalMember(owner = "client!ge", name = "c", descriptor = "I") + private final int archive; + + @OriginalMember(owner = "client!ge", name = "", descriptor = "(ILclient!en;Lclient!en;I)V") + public Cache(@OriginalArg(0) int arg0, @OriginalArg(1) BufferedFile arg1, @OriginalArg(2) BufferedFile arg2, @OriginalArg(3) int arg3) { + this.maxLen = arg3; + this.index = arg2; + this.archive = arg0; + this.data = arg1; + } + + @OriginalMember(owner = "client!ge", name = "toString", descriptor = "()Ljava/lang/String;") + @Override + public final String toString() { + return "Cache:" + this.archive; + } + + @OriginalMember(owner = "client!ge", name = "a", descriptor = "(II[BB)Z") + public final boolean write(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) byte[] arg2) { + @Pc(7) BufferedFile local7 = this.data; + synchronized (this.data) { + if (arg1 < 0 || arg1 > this.maxLen) { + throw new IllegalArgumentException(); + } + @Pc(35) boolean local35 = this.write(arg1, arg0, arg2, true); + if (!local35) { + local35 = this.write(arg1, arg0, arg2, false); + } + return local35; + } + } + + @OriginalMember(owner = "client!ge", name = "a", descriptor = "(IB)[B") + public final byte[] read(@OriginalArg(0) int group) { + @Pc(9) BufferedFile local9 = this.data; + synchronized (this.data) { + try { + @Pc(27) Object local27; + if (this.index.length() < (long) (group * 6 + 6)) { + local27 = null; + return (byte[]) local27; + } + this.index.seek(group * 6); + this.index.read(0, buffer, 6); + @Pc(69) int local69 = ((buffer[3] & 0xFF) << 16) - (-((buffer[4] & 0xFF) << 8) - (buffer[5] & 0xFF)); + @Pc(99) int local99 = (buffer[2] & 0xFF) + ((buffer[1] & 0xFF) << 8) + ((buffer[0] & 0xFF) << 16); + if (local99 < 0 || this.maxLen < local99) { + local27 = null; + return (byte[]) local27; + } else if (local69 <= 0 || (long) local69 > this.data.length() / 520L) { + local27 = null; + return (byte[]) local27; + } else { + @Pc(134) byte[] local134 = new byte[local99]; + @Pc(136) int local136 = 0; + @Pc(138) int local138 = 0; + while (local136 < local99) { + if (local69 == 0) { + local27 = null; + return (byte[]) local27; + } + @Pc(157) int local157 = local99 - local136; + this.data.seek(local69 * 520); + if (local157 > 512) { + local157 = 512; + } + this.data.read(0, buffer, local157 + 8); + @Pc(197) int local197 = ((buffer[0] & 0xFF) << 8) + (buffer[1] & 0xFF); + @Pc(211) int local211 = (buffer[3] & 0xFF) + ((buffer[2] & 0xFF) << 8); + @Pc(217) int local217 = buffer[7] & 0xFF; + @Pc(239) int local239 = (buffer[6] & 0xFF) + ((buffer[5] & 0xFF) << 8) + ((buffer[4] & 0xFF) << 16); + if (group != local197 || local138 != local211 || this.archive != local217) { + local27 = null; + return (byte[]) local27; + } + if (local239 < 0 || (long) local239 > this.data.length() / 520L) { + local27 = null; + return (byte[]) local27; + } + for (@Pc(272) int local272 = 0; local272 < local157; local272++) { + local134[local136++] = buffer[local272 + 8]; + } + local138++; + local69 = local239; + } + @Pc(297) byte[] local297 = local134; + return local297; + } + } catch (@Pc(301) IOException ex) { + ex.printStackTrace(); + return null; + } + } + } + + @OriginalMember(owner = "client!ge", name = "a", descriptor = "(BII[BZ)Z") + private boolean write(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) byte[] arg2, @OriginalArg(4) boolean arg3) { + @Pc(9) BufferedFile local9 = this.data; + synchronized (this.data) { + try { + @Pc(67) int local67; + @Pc(27) boolean local27; + if (arg3) { + if (this.index.length() < (long) (arg1 * 6 + 6)) { + local27 = false; + return local27; + } + this.index.seek(arg1 * 6); + this.index.read(0, buffer, 6); + local67 = ((buffer[3] & 0xFF) << 16) + (buffer[4] << 8 & 0xFF00) + (buffer[5] & 0xFF); + if (local67 <= 0 || this.data.length() / 520L < (long) local67) { + local27 = false; + return local27; + } + } else { + local67 = (int) ((this.data.length() + 519L) / 520L); + if (local67 == 0) { + local67 = 1; + } + } + buffer[0] = (byte) (arg0 >> 16); + buffer[4] = (byte) (local67 >> 8); + @Pc(125) int local125 = 0; + buffer[5] = (byte) local67; + buffer[2] = (byte) arg0; + buffer[3] = (byte) (local67 >> 16); + @Pc(156) int local156 = 0; + buffer[1] = (byte) (arg0 >> 8); + this.index.seek(arg1 * 6); + this.index.write(buffer, 0, 6); + while (true) { + if (local125 < arg0) { + label134: + { + @Pc(189) int local189 = 0; + @Pc(248) int local248; + if (arg3) { + this.data.seek(local67 * 520); + try { + this.data.read(0, buffer, 8); + } catch (@Pc(209) EOFException local209) { + break label134; + } + local189 = ((buffer[4] & 0xFF) << 16) + ((buffer[5] & 0xFF) << 8) + (buffer[6] & 0xFF); + local248 = (buffer[1] & 0xFF) + ((buffer[0] & 0xFF) << 8); + @Pc(254) int local254 = buffer[7] & 0xFF; + @Pc(268) int local268 = (buffer[3] & 0xFF) + ((buffer[2] & 0xFF) << 8); + if (local248 != arg1 || local156 != local268 || this.archive != local254) { + local27 = false; + return local27; + } + if (local189 < 0 || (long) local189 > this.data.length() / 520L) { + local27 = false; + return local27; + } + } + local248 = arg0 - local125; + if (local189 == 0) { + arg3 = false; + local189 = (int) ((this.data.length() + 519L) / 520L); + if (local189 == 0) { + local189++; + } + if (local189 == local67) { + local189++; + } + } + buffer[7] = (byte) this.archive; + buffer[0] = (byte) (arg1 >> 8); + if (arg0 - local125 <= 512) { + local189 = 0; + } + buffer[4] = (byte) (local189 >> 16); + if (local248 > 512) { + local248 = 512; + } + buffer[1] = (byte) arg1; + buffer[6] = (byte) local189; + buffer[2] = (byte) (local156 >> 8); + buffer[3] = (byte) local156; + local156++; + buffer[5] = (byte) (local189 >> 8); + this.data.seek(local67 * 520); + local67 = local189; + this.data.write(buffer, 0, 8); + this.data.write(arg2, local125, local248); + local125 += local248; + continue; + } + } + local27 = true; + return local27; + } + } catch (@Pc(453) IOException local453) { + return false; + } + } + } +} diff --git a/client/src/main/java/rt4/Camera.java b/client/src/main/java/rt4/Camera.java new file mode 100644 index 0000000..c4ba543 --- /dev/null +++ b/client/src/main/java/rt4/Camera.java @@ -0,0 +1,432 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class Camera { + @OriginalMember(owner = "client!id", name = "d", descriptor = "[[[I") + public static final int[][][] anIntArrayArrayArray9 = new int[2][][]; + @OriginalMember(owner = "client!sa", name = "Q", descriptor = "[I") + public static final int[] cameraJitter = new int[5]; + @OriginalMember(owner = "client!wh", name = "m", descriptor = "[I") + public static final int[] cameraAmplitude = new int[5]; + @OriginalMember(owner = "client!qg", name = "Y", descriptor = "[I") + public static final int[] cameraFrequency = new int[5]; + @OriginalMember(owner = "client!ob", name = "a", descriptor = "[Z") + public static final boolean[] customCameraActive = new boolean[5]; + @OriginalMember(owner = "client!fl", name = "s", descriptor = "I") + public static double pitchTarget = 128; + + @OriginalMember(owner = "client!eg", name = "d", descriptor = "I") + public static double yawTarget = 0; + + @OriginalMember(owner = "client!ef", name = "i", descriptor = "I") + public static double pitchAccel = 0; + + @OriginalMember(owner = "client!ii", name = "a", descriptor = "I") + public static int cameraZ; + @OriginalMember(owner = "client!gg", name = "bb", descriptor = "I") + public static int cameraX; + @OriginalMember(owner = "client!tg", name = "b", descriptor = "I") + public static int cameraPitch; + @OriginalMember(owner = "client!ol", name = "ib", descriptor = "I") + public static int cameraYaw; + @OriginalMember(owner = "client!sg", name = "o", descriptor = "I") + public static int cameraType; + @OriginalMember(owner = "client!g", name = "d", descriptor = "I") + public static int anInt2119 = 0; + @OriginalMember(owner = "client!eb", name = "t", descriptor = "I") + public static int anInt1694 = -1; + @OriginalMember(owner = "client!j", name = "K", descriptor = "I") + public static int anInt5843 = 0; + @OriginalMember(owner = "client!sh", name = "c", descriptor = "I") + public static int anInt5101 = 0; + @OriginalMember(owner = "client!t", name = "z", descriptor = "I") + public static int anInt5224 = 0; + @OriginalMember(owner = "client!k", name = "i", descriptor = "I") + public static int anInt3125 = 0; + @OriginalMember(owner = "client!me", name = "k", descriptor = "I") + public static int anInt3718 = -1; + @OriginalMember(owner = "client!lc", name = "n", descriptor = "I") + public static int originZ; + @OriginalMember(owner = "client!se", name = "a", descriptor = "I") + public static int originX; + @OriginalMember(owner = "client!bc", name = "I", descriptor = "Z") + public static boolean aBoolean16 = false; + @OriginalMember(owner = "client!km", name = "Pc", descriptor = "I") + public static int renderX; + @OriginalMember(owner = "client!kh", name = "f", descriptor = "I") + public static int renderZ; + @OriginalMember(owner = "client!uc", name = "f", descriptor = "I") + public static int anInt4232; + @OriginalMember(owner = "client!ug", name = "h", descriptor = "I") + public static int anInt5449; + @OriginalMember(owner = "client!vj", name = "d", descriptor = "I") + public static int anInt5765; + @OriginalMember(owner = "client!tm", name = "g", descriptor = "I") + public static int anInt5375; + @OriginalMember(owner = "client!pa", name = "K", descriptor = "Z") + public static boolean aBoolean205 = false; + @OriginalMember(owner = "client!gk", name = "d", descriptor = "F") + public static float aFloat10; + public static int ZOOM = 600; + @OriginalMember(owner = "client!il", name = "O", descriptor = "I") + public static int anInt4612; + @OriginalMember(owner = "client!eg", name = "a", descriptor = "I") + public static int anInt1744; + @OriginalMember(owner = "client!kf", name = "f", descriptor = "I") + public static int anInt5230; + @OriginalMember(owner = "client!ke", name = "U", descriptor = "I") + public static int anInt3291 = 0; + @OriginalMember(owner = "client!uc", name = "a", descriptor = "I") + public static int anInt4229 = 2; + @OriginalMember(owner = "client!ta", name = "B", descriptor = "I") + public static int anInt5245 = 0; + @OriginalMember(owner = "client!qk", name = "h", descriptor = "I") + public static int anInt4774 = 0; + @OriginalMember(owner = "client!sj", name = "H", descriptor = "I") + public static int anInt5161 = 0; + @OriginalMember(owner = "client!af", name = "d", descriptor = "I") + public static int anInt40; + @OriginalMember(owner = "client!lg", name = "d", descriptor = "F") + public static float aFloat15; + @OriginalMember(owner = "client!sk", name = "jb", descriptor = "I") + public static int anInt5203; + @OriginalMember(owner = "client!t", name = "o", descriptor = "I") + public static int anInt5217; + @OriginalMember(owner = "client!t", name = "A", descriptor = "I") + public static int anInt5225; + + public static double mod(double a, double b) { + return ((a % b) + b) % b; + } + + @OriginalMember(owner = "client!gn", name = "b", descriptor = "(B)V") + public static void clampCameraAngle() { + if (pitchTarget < 128) { + pitchTarget = 128; + } + if (pitchTarget > 383) { + pitchTarget = 383; + } + yawTarget = mod(yawTarget, 2047.0d); + @Pc(33) int local33 = cameraX >> 7; + @Pc(37) int local37 = cameraZ >> 7; + @Pc(43) int local43 = SceneGraph.getTileHeight(Player.plane, cameraX, cameraZ); + @Pc(45) int local45 = 0; + @Pc(64) int local64; + if (local33 > 3 && local37 > 3 && local33 < 100 && local37 < 100) { + for (local64 = local33 - 4; local64 <= local33 + 4; local64++) { + for (@Pc(73) int local73 = local37 - 4; local73 <= local37 + 4; local73++) { + @Pc(80) int local80 = Player.plane; + if (local80 < 3 && (SceneGraph.renderFlags[1][local64][local73] & 0x2) == 2) { + local80++; + } + @Pc(117) int local117 = (SceneGraph.aByteArrayArrayArray13[local80][local64][local73] & 0xFF) * 8 + local43 - SceneGraph.tileHeights[local80][local64][local73]; + if (local117 > local45) { + local45 = local117; + } + } + } + } + local64 = local45 * 192; + if (local64 > 98048) { + local64 = 98048; + } + if (local64 < 32768) { + local64 = 32768; + } + if (anInt5245 < local64) { + anInt5245 += (local64 - anInt5245) / 24; + } else if (local64 < anInt5245) { + anInt5245 += (local64 - anInt5245) / 80; + } + } + + @OriginalMember(owner = "client!jl", name = "c", descriptor = "(I)V") + public static void updateLockedCamera() { + @Pc(9) int local9 = anInt4232 * 128 + 64; + @Pc(15) int local15 = anInt5375 * 128 + 64; + @Pc(23) int local23 = SceneGraph.getTileHeight(Player.plane, local15, local9) - anInt5203; + if (anInt4612 >= 100) { + renderX = anInt5375 * 128 + 64; + renderZ = anInt4232 * 128 + 64; + anInt40 = SceneGraph.getTileHeight(Player.plane, renderX, renderZ) - anInt5203; + } else { + if (renderX < local15) { + renderX += anInt5225 + anInt4612 * (local15 - renderX) / 1000; + if (renderX > local15) { + renderX = local15; + } + } + if (anInt40 < local23) { + anInt40 += (local23 - anInt40) * anInt4612 / 1000 + anInt5225; + if (anInt40 > local23) { + anInt40 = local23; + } + } + if (renderX > local15) { + renderX -= anInt5225 + (renderX - local15) * anInt4612 / 1000; + if (renderX < local15) { + renderX = local15; + } + } + if (renderZ < local9) { + renderZ += anInt5225 + anInt4612 * (local9 - renderZ) / 1000; + if (local9 < renderZ) { + renderZ = local9; + } + } + if (local23 < anInt40) { + anInt40 -= (anInt40 - local23) * anInt4612 / 1000 + anInt5225; + if (local23 > anInt40) { + anInt40 = local23; + } + } + if (renderZ > local9) { + renderZ -= anInt5225 + (renderZ - local9) * anInt4612 / 1000; + if (local9 > renderZ) { + renderZ = local9; + } + } + } + local9 = anInt5765 * 128 + 64; + local15 = anInt5449 * 128 + 64; + local23 = SceneGraph.getTileHeight(Player.plane, local15, local9) - anInt1744; + @Pc(236) int local236 = local23 - anInt40; + @Pc(241) int local241 = local9 - renderZ; + @Pc(246) int local246 = local15 - renderX; + @Pc(257) int local257 = (int) Math.sqrt(local246 * local246 + local241 * local241); + @Pc(268) int local268 = (int) (Math.atan2(local236, local257) * 325.949D) & 0x7FF; + if (local268 < 128) { + local268 = 128; + } + if (local268 > 383) { + local268 = 383; + } + @Pc(292) int local292 = (int) (-325.949D * Math.atan2(local246, local241)) & 0x7FF; + if (cameraPitch < local268) { + cameraPitch += anInt5230 + anInt5217 * (local268 - cameraPitch) / 1000; + if (cameraPitch > local268) { + cameraPitch = local268; + } + } + if (cameraPitch > local268) { + cameraPitch -= (cameraPitch - local268) * anInt5217 / 1000 + anInt5230; + if (cameraPitch < local268) { + cameraPitch = local268; + } + } + @Pc(350) int local350 = local292 - cameraYaw; + if (local350 > 1024) { + local350 -= 2048; + } + if (local350 < -1024) { + local350 += 2048; + } + if (local350 > 0) { + cameraYaw += local350 * anInt5217 / 1000 + anInt5230; + cameraYaw &= 0x7FF; + } + if (local350 < 0) { + cameraYaw -= anInt5217 * -local350 / 1000 + anInt5230; + cameraYaw &= 0x7FF; + } + @Pc(404) int local404 = local292 - cameraYaw; + if (local404 > 1024) { + local404 -= 2048; + } + if (local404 < -1024) { + local404 += 2048; + } + if (local404 < 0 && local350 > 0 || local404 > 0 && local350 < 0) { + cameraYaw = local292; + } + } + + @OriginalMember(owner = "client!da", name = "d", descriptor = "(I)V") + public static void updateLoginScreenCamera() { + if (anInt3718 == -1 || anInt1694 == -1) { + return; + } + @Pc(27) int local27 = (anInt5224 * (anInt5843 - anInt5101) >> 16) + anInt5101; + @Pc(30) float[] renderCoordinates = new float[3]; + anInt5224 += local27; + if (anInt5224 >= 65535) { + anInt5224 = 65535; + aBoolean16 = !aBoolean205; + aBoolean205 = true; + } else { + aBoolean205 = false; + aBoolean16 = false; + } + @Pc(66) float local66 = (float) anInt5224 / 65535.0F; + @Pc(70) int local70 = anInt3125 * 2; + @Pc(141) int local141; + @Pc(131) int local131; + @Pc(111) int local111; + @Pc(119) int local119; + @Pc(146) int local146; + @Pc(155) int local155; + @Pc(173) int local173; + for (@Pc(72) int local72 = 0; local72 < 3; local72++) { + local111 = (anIntArrayArrayArray9[anInt3718][local70 + 2][local72] + anIntArrayArrayArray9[anInt3718][local70 + 2][local72] - anIntArrayArrayArray9[anInt3718][local70 + 3][local72]) * 3; + local119 = anIntArrayArrayArray9[anInt3718][local70][local72]; + local131 = anIntArrayArrayArray9[anInt3718][local70 + 1][local72] * 3; + local141 = anIntArrayArrayArray9[anInt3718][local70][local72] * 3; + local146 = local131 - local141; + local155 = local111 + local141 - local131 * 2; + local173 = anIntArrayArrayArray9[anInt3718][local70 + 2][local72] + local131 - local119 - local111; + renderCoordinates[local72] = (float) local119 + (((float) local173 * local66 + (float) local155) * local66 + (float) local146) * local66; + } + anInt40 = (int) renderCoordinates[1] * -1; + renderX = (int) renderCoordinates[0] - originX * 128; + renderZ = (int) renderCoordinates[2] - originZ * 128; + @Pc(226) float[] local226 = new float[3]; + local141 = anInt2119 * 2; + for (local131 = 0; local131 < 3; local131++) { + local111 = anIntArrayArrayArray9[anInt1694][local141][local131] * 3; + local146 = (anIntArrayArrayArray9[anInt1694][local141 + 2][local131] + anIntArrayArrayArray9[anInt1694][local141 + 2][local131] - anIntArrayArrayArray9[anInt1694][local141 + 3][local131]) * 3; + local155 = anIntArrayArrayArray9[anInt1694][local141][local131]; + local119 = anIntArrayArrayArray9[anInt1694][local141 + 1][local131] * 3; + local173 = local119 - local111; + @Pc(313) int local313 = local146 + local111 - local119 * 2; + @Pc(331) int local331 = anIntArrayArrayArray9[anInt1694][local141 + 2][local131] + local119 - local146 - local155; + local226[local131] = (float) local155 + local66 * (local66 * (local66 * (float) local331 + (float) local313) + (float) local173); + } + @Pc(363) float local363 = local226[0] - renderCoordinates[0]; + @Pc(371) float local371 = local226[2] - renderCoordinates[2]; + @Pc(382) float local382 = (local226[1] - renderCoordinates[1]) * -1.0F; + @Pc(392) double local392 = Math.sqrt(local371 * local371 + local363 * local363); + aFloat15 = (float) Math.atan2(local382, local392); + aFloat10 = -((float) Math.atan2(local363, local371)); + cameraPitch = (int) ((double) aFloat15 * 325.949D) & 0x7FF; + cameraYaw = (int) ((double) aFloat10 * 325.949D) & 0x7FF; + } + + @OriginalMember(owner = "client!vd", name = "a", descriptor = "(IIIIBI)V") + public static void method3849(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(5) int arg4) { + anInt5230 = arg2; + anInt5765 = arg1; + anInt5217 = arg4; + anInt5449 = arg3; + anInt1744 = arg0; + if (anInt5217 >= 100) { + @Pc(30) int local30 = anInt5449 * 128 + 64; + @Pc(36) int local36 = anInt5765 * 128 + 64; + @Pc(44) int local44 = SceneGraph.getTileHeight(Player.plane, local30, local36) - anInt1744; + @Pc(49) int local49 = local44 - anInt40; + @Pc(54) int local54 = local30 - renderX; + @Pc(59) int local59 = local36 - renderZ; + @Pc(70) int local70 = (int) Math.sqrt(local59 * local59 + local54 * local54); + cameraPitch = (int) (Math.atan2(local49, local70) * 325.949D) & 0x7FF; + cameraYaw = (int) (Math.atan2(local54, local59) * -325.949D) & 0x7FF; + if (cameraPitch < 128) { + cameraPitch = 128; + } + if (cameraPitch > 383) { + cameraPitch = 383; + } + } + cameraType = 2; + } + + @OriginalMember(owner = "client!lb", name = "a", descriptor = "(ZIIIBII)V") + public static void method2722(@OriginalArg(0) boolean arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5) { + anInt4612 = arg3; + anInt5203 = arg2; + anInt5375 = arg5; + anInt5225 = arg1; + anInt4232 = arg4; + if (arg0 && anInt4612 >= 100) { + renderX = anInt5375 * 128 + 64; + renderZ = anInt4232 * 128 + 64; + anInt40 = SceneGraph.getTileHeight(Player.plane, renderX, renderZ) - anInt5203; + } + cameraType = 2; + } + + @OriginalMember(owner = "client!cl", name = "e", descriptor = "(I)V") + public static void resetCameraEffects() { + for (@Pc(3) int local3 = 0; local3 < 5; local3++) { + customCameraActive[local3] = false; + } + anInt5230 = 0; + anInt5217 = 0; + anInt3718 = -1; + anInt1694 = -1; + cameraType = 1; + } + + @OriginalMember(owner = "client!uf", name = "a", descriptor = "(B)V") + public static void method4273() { + @Pc(14) int playerX = PlayerList.self.xFine + anInt3291; + @Pc(20) int playerZ = PlayerList.self.zFine + anInt4774; + if (cameraX - playerX < -500 || cameraX - playerX > 500 || cameraZ - playerZ < -500 || cameraZ - playerZ > 500) { + cameraX = playerX; + cameraZ = playerZ; + } + if (cameraZ != playerZ) { + cameraZ += (playerZ - cameraZ) / 16; + } + if (cameraX != playerX) { + cameraX += (playerX - cameraX) / 16; + } + if (Preferences.aBoolean63) { + for (@Pc(93) int local93 = 0; local93 < InterfaceList.keyQueueSize; local93++) { + @Pc(104) int code = InterfaceList.keyCodes[local93]; + if (code == Keyboard.KEY_UP) { + pitchTarget += 47; + } else if (code == Keyboard.KEY_DOWN) { + pitchTarget -= 17; + } else if (code == Keyboard.KEY_LEFT) { + yawTarget -= 65; + } else if (code == Keyboard.KEY_RIGHT) { + yawTarget += 191; + } + } + clampCameraAngle(); + } + } + + @OriginalMember(owner = "client!bh", name = "a", descriptor = "(IIIIIIII)V") + public static void method555(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6) { + @Pc(5) int local5; + @Pc(29) int local29; + if (GlRenderer.enabled) { + local5 = arg1 - 334; + if (local5 < 0) { + local5 = 0; + } else if (local5 > 100) { + local5 = 100; + } + local29 = local5 * (ScriptRunner.aShort27 - ScriptRunner.aShort30) / 100 + ScriptRunner.aShort30; + arg3 = local29 * arg3 >> 8; + } + local5 = 2048 - arg6 & 0x7FF; + local29 = 2048 - arg4 & 0x7FF; + @Pc(55) int local55 = 0; + @Pc(57) int local57 = arg3; + @Pc(59) int local59 = 0; + @Pc(72) int local72; + @Pc(68) int local68; + if (local5 != 0) { + local68 = MathUtils.cos[local5]; + local72 = MathUtils.sin[local5]; + local59 = local72 * -arg3 >> 16; + local57 = local68 * arg3 >> 16; + } + if (local29 != 0) { + local72 = MathUtils.sin[local29]; + local68 = MathUtils.cos[local29]; + local55 = local72 * local57 >> 16; + local57 = local57 * local68 >> 16; + } + cameraPitch = arg6; + cameraYaw = arg4; + renderZ = arg5 - local57; + renderX = arg0 - local55; + anInt40 = arg2 - local59; + } +} diff --git a/client/src/main/java/rt4/ChangeLocRequest.java b/client/src/main/java/rt4/ChangeLocRequest.java new file mode 100644 index 0000000..0fd5671 --- /dev/null +++ b/client/src/main/java/rt4/ChangeLocRequest.java @@ -0,0 +1,152 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!cd") +public final class ChangeLocRequest extends Node { + + @OriginalMember(owner = "client!ca", name = "X", descriptor = "Lclient!ih;") + public static LinkedList queue = new LinkedList(); + + @OriginalMember(owner = "client!cd", name = "r", descriptor = "I") + public int z; + + @OriginalMember(owner = "client!cd", name = "t", descriptor = "I") + public int level; + + @OriginalMember(owner = "client!cd", name = "w", descriptor = "I") + public int originalShape; + + @OriginalMember(owner = "client!cd", name = "x", descriptor = "I") + public int originalId; + + @OriginalMember(owner = "client!cd", name = "z", descriptor = "I") + public int anInt922; + + @OriginalMember(owner = "client!cd", name = "A", descriptor = "I") + public int originalAngle; + + @OriginalMember(owner = "client!cd", name = "F", descriptor = "I") + public int anInt926; + + @OriginalMember(owner = "client!cd", name = "G", descriptor = "I") + public int layer; + + @OriginalMember(owner = "client!cd", name = "H", descriptor = "I") + public int x; + + @OriginalMember(owner = "client!cd", name = "I", descriptor = "I") + public int anInt929; + + @OriginalMember(owner = "client!cd", name = "C", descriptor = "I") + public int resetLoops = -1; + + @OriginalMember(owner = "client!cd", name = "E", descriptor = "I") + public int setLoops = 0; + + @OriginalMember(owner = "client!ug", name = "a", descriptor = "(B)V") + public static void loop() { + for (@Pc(10) ChangeLocRequest local10 = (ChangeLocRequest) queue.head(); local10 != null; local10 = (ChangeLocRequest) queue.next()) { + if (local10.resetLoops > 0) { + local10.resetLoops--; + } + if (local10.resetLoops != 0) { + if (local10.setLoops > 0) { + local10.setLoops--; + } + if (local10.setLoops == 0 && local10.x >= 1 && local10.z >= 1 && local10.x <= 102 && local10.z <= 102 && (local10.anInt929 < 0 || method3557(local10.anInt929, local10.anInt926))) { + SceneGraph.method1698(local10.anInt929, local10.x, local10.level, local10.anInt922, local10.z, local10.anInt926, local10.layer); + local10.setLoops = -1; + if (local10.originalId == local10.anInt929 && local10.originalId == -1) { + local10.unlink(); + } else if (local10.anInt929 == local10.originalId && local10.anInt922 == local10.originalAngle && local10.originalShape == local10.anInt926) { + local10.unlink(); + } + } + } else if (local10.originalId < 0 || method3557(local10.originalId, local10.originalShape)) { + SceneGraph.method1698(local10.originalId, local10.x, local10.level, local10.originalAngle, local10.z, local10.originalShape, local10.layer); + local10.unlink(); + } + } + } + + @OriginalMember(owner = "client!ce", name = "a", descriptor = "(IIIIIIIIII)V") + public static void push(@OriginalArg(0) int level, @OriginalArg(1) int z, @OriginalArg(3) int arg2, @OriginalArg(4) int x, @OriginalArg(5) int resetLoops, @OriginalArg(6) int arg5, @OriginalArg(7) int layer, @OriginalArg(8) int arg7, @OriginalArg(9) int setLoops) { + @Pc(9) ChangeLocRequest loc = null; + for (@Pc(14) ChangeLocRequest l = (ChangeLocRequest) queue.head(); l != null; l = (ChangeLocRequest) queue.next()) { + if (l.level == level && x == l.x && l.z == z && layer == l.layer) { + loc = l; + break; + } + } + if (loc == null) { + loc = new ChangeLocRequest(); + loc.x = x; + loc.z = z; + loc.level = level; + loc.layer = layer; + init(loc); + queue.addTail(loc); + } + loc.anInt926 = arg7; + loc.setLoops = setLoops; + loc.resetLoops = resetLoops; + loc.anInt929 = arg5; + loc.anInt922 = arg2; + } + + @OriginalMember(owner = "client!sf", name = "a", descriptor = "(ILclient!cd;)V") + public static void init(@OriginalArg(1) ChangeLocRequest loc) { + @Pc(5) long key = 0L; + @Pc(7) int originalId = -1; + @Pc(14) int originalShape = 0; + if (loc.layer == 0) { + key = SceneGraph.getWallKey(loc.level, loc.x, loc.z); + } + @Pc(31) int originalAngle = 0; + if (loc.layer == 1) { + key = SceneGraph.getWallDecorKey(loc.level, loc.x, loc.z); + } + if (loc.layer == 2) { + key = SceneGraph.getSceneryKey(loc.level, loc.x, loc.z); + } + if (loc.layer == 3) { + key = SceneGraph.getGroundDecorKey(loc.level, loc.x, loc.z); + } + if (key != 0L) { + originalId = Integer.MAX_VALUE & (int) (key >>> 32); + originalAngle = (int) key >> 20 & 0x3; + originalShape = (int) key >> 14 & 0x1F; + } + loc.originalId = originalId; + loc.originalShape = originalShape; + loc.originalAngle = originalAngle; + } + + @OriginalMember(owner = "client!rl", name = "i", descriptor = "(I)V") + public static void flush() { + for (@Pc(10) ChangeLocRequest loc = (ChangeLocRequest) queue.head(); loc != null; loc = (ChangeLocRequest) queue.next()) { + if (loc.resetLoops == -1) { + loc.setLoops = 0; + init(loc); + } else { + loc.unlink(); + } + } + } + + @OriginalMember(owner = "client!il", name = "a", descriptor = "(BII)Z") + public static boolean method3557(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + if (arg1 == 11) { + arg1 = 10; + } + if (arg1 >= 5 && arg1 <= 8) { + arg1 = 4; + } + @Pc(30) LocType local30 = LocTypeList.get(arg0); + return local30.isReady(arg1); + } +} diff --git a/client/src/main/java/rt4/CharUtils.java b/client/src/main/java/rt4/CharUtils.java new file mode 100644 index 0000000..f3328e2 --- /dev/null +++ b/client/src/main/java/rt4/CharUtils.java @@ -0,0 +1,64 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; + +public class CharUtils { + @OriginalMember(owner = "client!va", name = "a", descriptor = "(IB)Z") + public static boolean isLetter(@OriginalArg(0) int c) { + return c >= 97 && c <= 122 || c >= 65 && c <= 90; + } + + @OriginalMember(owner = "client!bn", name = "d", descriptor = "(II)Z") + public static boolean isDigit(@OriginalArg(1) int c) { + return c >= 48 && c <= 57; + } + + @OriginalMember(owner = "client!gj", name = "a", descriptor = "(II)Z") + public static boolean isLetterOrDigit(@OriginalArg(0) int c) { + if (c >= 97 && c <= 122) { + return true; + } else if (c >= 65 && c <= 90) { + return true; + } else { + return c >= 48 && c <= 57; + } + } + + @OriginalMember(owner = "client!we", name = "b", descriptor = "(II)Z") + public static boolean isValidChar(@OriginalArg(1) int c) { + if (c >= 32 && c <= 126) { + return true; + } else if (c >= 160 && c <= 255) { + return true; + } else { + return c == 128 || c == 140 || c == 151 || c == 156 || c == 159; + } + } + + @OriginalMember(owner = "client!ld", name = "a", descriptor = "(IB)I") + public static int toUpperCase(@OriginalArg(0) int c) { + if (c >= 97 && c <= 122 || c >= 224 && c <= 254 && c != 247) { + return c - 32; + } else if (c == 255) { + return 159; + } else if (c == 156) { + return 140; + } else { + return c; + } + } + + @OriginalMember(owner = "client!sk", name = "c", descriptor = "(II)I") + public static int toLowerCase(@OriginalArg(1) int c) { + if (c >= 65 && c <= 90 || c >= 192 && c <= 222 && c != 215) { + return c + 32; + } else if (c == 159) { + return 255; + } else if (c == 140) { + return 156; + } else { + return c; + } + } +} diff --git a/client/src/main/java/rt4/Chat.java b/client/src/main/java/rt4/Chat.java new file mode 100644 index 0000000..cdb3b32 --- /dev/null +++ b/client/src/main/java/rt4/Chat.java @@ -0,0 +1,60 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class Chat { + @OriginalMember(owner = "client!ca", name = "eb", descriptor = "[I") + public static final int[] types = new int[100]; + @OriginalMember(owner = "client!fb", name = "l", descriptor = "[Lclient!na;") + public static final JagString[] clans = new JagString[100]; + @OriginalMember(owner = "client!sj", name = "q", descriptor = "[Lclient!na;") + public static final JagString[] messages = new JagString[100]; + @OriginalMember(owner = "client!th", name = "l", descriptor = "[I") + public static final int[] phraseIds = new int[100]; + @OriginalMember(owner = "client!mc", name = "Y", descriptor = "[Lclient!na;") + public static final JagString[] names = new JagString[100]; + @OriginalMember(owner = "client!t", name = "w", descriptor = "[J") + public static final long[] recentMessages = new long[100]; + @OriginalMember(owner = "client!dm", name = "u", descriptor = "I") + public static int transmitAt = 0; + @OriginalMember(owner = "client!f", name = "Z", descriptor = "I") + public static int size = 0; + @OriginalMember(owner = "client!gk", name = "i", descriptor = "I") + public static int tradeFilter = 0; + @OriginalMember(owner = "client!dm", name = "m", descriptor = "I") + public static int privateFilter = 0; + @OriginalMember(owner = "client!ej", name = "U", descriptor = "I") + public static int publicFilter = 0; + @OriginalMember(owner = "client!ug", name = "e", descriptor = "I") + public static int messageCounter = 0; + + @OriginalMember(owner = "client!md", name = "a", descriptor = "(IILclient!na;Lclient!na;BLclient!na;)V") + public static void add(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) JagString arg2, @OriginalArg(3) JagString arg3, @OriginalArg(5) JagString arg4) { + for (@Pc(14) int local14 = 99; local14 > 0; local14--) { + types[local14] = types[local14 - 1]; + names[local14] = names[local14 - 1]; + messages[local14] = messages[local14 - 1]; + clans[local14] = clans[local14 - 1]; + phraseIds[local14] = phraseIds[local14 - 1]; + } + size++; + types[0] = arg1; + names[0] = arg4; + transmitAt = InterfaceList.transmitTimer; + phraseIds[0] = arg0; + messages[0] = arg2; + clans[0] = arg3; + } + + @OriginalMember(owner = "client!i", name = "a", descriptor = "(Lclient!na;ILclient!na;I)V") + public static void add(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) JagString arg2) { + add(-1, arg1, arg2, null, arg0); + } + + @OriginalMember(owner = "client!fm", name = "a", descriptor = "(ILclient!na;Lclient!na;Lclient!na;I)V") + public static void method1598(@OriginalArg(1) JagString arg0, @OriginalArg(2) JagString arg1, @OriginalArg(3) JagString arg2) { + add(-1, 9, arg0, arg2, arg1); + } +} diff --git a/client/src/main/java/rt4/Cheat.java b/client/src/main/java/rt4/Cheat.java new file mode 100644 index 0000000..97affb5 --- /dev/null +++ b/client/src/main/java/rt4/Cheat.java @@ -0,0 +1,248 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; +import plugin.PluginRepository; + +public class Cheat { + @OriginalMember(owner = "client!p", name = "f", descriptor = "Lclient!na;") + public static final JagString JS5DROP = JagString.parse("::serverjs5drop"); + @OriginalMember(owner = "client!v", name = "d", descriptor = "Lclient!na;") + public static final JagString CLIENTDROP = JagString.parse("::clientdrop"); + @OriginalMember(owner = "client!dg", name = "b", descriptor = "Lclient!na;") + public static final JagString aClass100_333 = JagString.parse("Shift)2click ENABLED(Q"); + @OriginalMember(owner = "client!nh", name = "hb", descriptor = "Lclient!na;") + public static final JagString COMMAND_FPS = JagString.parse("::fps "); + @OriginalMember(owner = "client!nb", name = "e", descriptor = "Lclient!na;") + public static final JagString BREAKCON = JagString.parse("::breakcon"); + @OriginalMember(owner = "client!wf", name = "s", descriptor = "Lclient!na;") + public static final JagString aClass100_943 = JagString.parse("Forced tweening disabled)3"); + @OriginalMember(owner = "client!wd", name = "f", descriptor = "Lclient!na;") + public static final JagString ERROR_TEST = JagString.parse("::errortest"); + @OriginalMember(owner = "client!wb", name = "j", descriptor = "Lclient!na;") + public static final JagString aClass100_1093 = JagString.parse("Memory after cleanup="); + @OriginalMember(owner = "client!th", name = "h", descriptor = "Lclient!na;") + public static final JagString PARTICLES = JagString.parse("::setparticles"); + @OriginalMember(owner = "client!rc", name = "K", descriptor = "Lclient!na;") + public static final JagString RECT_DEBUG = JagString.parse("::rect_debug"); + @OriginalMember(owner = "client!hh", name = "b", descriptor = "Lclient!na;") + public static final JagString aClass100_521 = JagString.parse("::tele "); + @OriginalMember(owner = "client!hh", name = "k", descriptor = "Lclient!na;") + public static final JagString WM0 = JagString.parse("::wm0"); + @OriginalMember(owner = "client!tg", name = "i", descriptor = "Lclient!na;") + public static final JagString PCACHESIZE = JagString.parse("::pcachesize"); + @OriginalMember(owner = "client!fh", name = "ab", descriptor = "Lclient!na;") + public static final JagString NOCLIP = JagString.parse("::noclip"); + @OriginalMember(owner = "client!en", name = "e", descriptor = "Lclient!na;") + public static final JagString FPSOFF = JagString.parse("::fpsoff"); + @OriginalMember(owner = "client!ja", name = "k", descriptor = "Lclient!na;") + public static final JagString DEBUG_FPS = JagString.parse("FPS: "); + @OriginalMember(owner = "client!qh", name = "i", descriptor = "Lclient!na;") + public static final JagString DEBUG_MEMORY = JagString.parse("RAM: "); + @OriginalMember(owner = "client!bi", name = "W", descriptor = "Lclient!na;") + public static final JagString DEBUG_MEMORY_UNIT = JagString.parse(" MB"); + @OriginalMember(owner = "client!dg", name = "d", descriptor = "Lclient!na;") + public static final JagString DEBUG_CAHE = JagString.parse("Cache: "); + @OriginalMember(owner = "client!hm", name = "Y", descriptor = "Lclient!na;") + public static final JagString DEBUG_FPS2 = JagString.parse("FPS: "); + @OriginalMember(owner = "client!c", name = "Y", descriptor = "Lclient!na;") + public static final JagString DEBUG_MEM = JagString.parse("RAM: "); + @OriginalMember(owner = "client!bg", name = "z", descriptor = "Lclient!na;") + public static final JagString DEBUG_MEM_UNIT = JagString.parse(" MB"); + @OriginalMember(owner = "client!q", name = "h", descriptor = "Lclient!na;") + public static final JagString DEBUG_CARD = JagString.parse("GPU: "); + @OriginalMember(owner = "client!oi", name = "b", descriptor = "Lclient!na;") + public static final JagString QA_OP_TEST = JagString.parse("::qa_op_test"); + @OriginalMember(owner = "client!jk", name = "F", descriptor = "Lclient!na;") + public static final JagString TWEENING = JagString.parse("::tween"); + @OriginalMember(owner = "client!j", name = "z", descriptor = "Lclient!na;") + public static final JagString SHIFTCLICK = JagString.parse("::shiftclick"); + @OriginalMember(owner = "client!qf", name = "N", descriptor = "Lclient!na;") + public static final JagString CARDMEM = JagString.parse("::cardmem"); + @OriginalMember(owner = "client!e", name = "Ac", descriptor = "Lclient!na;") + public static final JagString aClass100_362 = JagString.parse("Forced tweening ENABLED(Q"); + @OriginalMember(owner = "client!md", name = "T", descriptor = "Lclient!na;") + public static final JagString aClass100_736 = JagString.parse("Shift)2click disabled)3"); + @OriginalMember(owner = "client!wh", name = "o", descriptor = "Lclient!na;") + public static final JagString RECT_DEBUG_EQUALS = JagString.parse("rect_debug="); + @OriginalMember(owner = "client!dh", name = "e", descriptor = "Lclient!na;") + public static final JagString aClass100_335 = JagString.parse("Number of player models in cache:"); + @OriginalMember(owner = "client!qh", name = "c", descriptor = "Lclient!na;") + public static final JagString aClass100_893 = JagString.parse("Memory before cleanup="); + @OriginalMember(owner = "client!qg", name = "Z", descriptor = "Lclient!na;") + public static final JagString aClass100_892 = JagString.parse("mem="); + @OriginalMember(owner = "client!gg", name = "Y", descriptor = "Lclient!na;") + public static final JagString aClass100_476 = JagString.parse("::gc"); + @OriginalMember(owner = "client!wk", name = "u", descriptor = "Lclient!na;") + public static final JagString CLIENTJS5DROP = JagString.parse("::clientjs5drop"); + @OriginalMember(owner = "client!id", name = "c", descriptor = "Lclient!na;") + public static final JagString FPSON = JagString.parse("::fpson"); + @OriginalMember(owner = "client!md", name = "Q", descriptor = "Lclient!na;") + public static final JagString MM = JagString.parse("::mm"); + @OriginalMember(owner = "client!j", name = "M", descriptor = "Lclient!na;") + public static final JagString REPLACECANVAS = JagString.parse("::replacecanvas"); + @OriginalMember(owner = "client!li", name = "p", descriptor = "Lclient!na;") + public static final JagString REBUILD = JagString.parse("::rebuild"); + @OriginalMember(owner = "client!oi", name = "j", descriptor = "Lclient!na;") + public static final JagString WM1 = JagString.parse("::wm1"); + @OriginalMember(owner = "client!ql", name = "i", descriptor = "Lclient!na;") + public static final JagString WM2 = JagString.parse("::wm2"); + @OriginalMember(owner = "client!hk", name = "db", descriptor = "Lclient!na;") + public static final JagString WM3 = JagString.parse("::wm3"); + @OriginalMember(owner = "client!dg", name = "f", descriptor = "Z") + public static boolean displayFps = false; + @OriginalMember(owner = "client!nj", name = "a", descriptor = "Z") + public static boolean shiftClick = GlobalConfig.USE_SHIFT_CLICK; + @OriginalMember(owner = "client!qc", name = "U", descriptor = "I") + public static int rectDebug = 0; + @OriginalMember(owner = "client!jg", name = "e", descriptor = "Z") + public static boolean qaOpTest = false; + public static final JagString RELOADPLUGINS = JagString.parse("::reloadplugins"); + + @OriginalMember(owner = "client!en", name = "a", descriptor = "(IIIB)V") + public static void teleport(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(66) JagString local66 = JagString.concatenate(new JagString[]{aClass100_521, JagString.parseInt(arg2), JagString.aClass100_760, JagString.parseInt(arg0 >> 6), JagString.aClass100_760, JagString.parseInt(arg1 >> 6), JagString.aClass100_760, JagString.parseInt(arg0 & 0x3F), JagString.aClass100_760, JagString.parseInt(arg1 & 0x3F)}); + local66.print(); + execute(local66); + } + + @OriginalMember(owner = "client!k", name = "a", descriptor = "(Lclient!na;Z)V") + public static void execute(@OriginalArg(0) JagString arg0) { + PluginRepository.ProcessCommand(arg0); + // if (LoginManager.staffModLevel >= 2) { + @Pc(18) int local18; + @Pc(38) int local38; + @Pc(29) Runtime local29; + if (arg0.equalsIgnoreCase(aClass100_476)) { + client.unloadSoft(); + for (local18 = 0; local18 < 10; local18++) { + System.gc(); + } + local29 = Runtime.getRuntime(); + local38 = (int) ((local29.totalMemory() - local29.freeMemory()) / 1024L); + Chat.add(null, 0, JagString.concatenate(new JagString[]{aClass100_892, JagString.parseInt(local38), DEBUG_MEM_UNIT})); + } + @Pc(117) int local117; + if (arg0.equalsIgnoreCase(MM)) { + client.unloadSoft(); + for (local18 = 0; local18 < 10; local18++) { + System.gc(); + } + local29 = Runtime.getRuntime(); + local38 = (int) ((local29.totalMemory() - local29.freeMemory()) / 1024L); + Chat.add(null, 0, JagString.concatenate(new JagString[]{aClass100_893, JagString.parseInt(local38), DEBUG_MEM_UNIT})); + Player.method501(); + client.unloadSoft(); + for (local117 = 0; local117 < 10; local117++) { + System.gc(); + } + local38 = (int) ((local29.totalMemory() - local29.freeMemory()) / 1024L); + Chat.add(null, 0, JagString.concatenate(new JagString[]{aClass100_1093, JagString.parseInt(local38), DEBUG_MEM_UNIT})); + } + if (arg0.equalsIgnoreCase(PCACHESIZE)) { + Chat.add(null, 0, JagString.concatenate(new JagString[]{aClass100_335, JagString.parseInt(PlayerAppearance.getModelCacheSize())})); + } + if (GlRenderer.enabled && arg0.equalsIgnoreCase(CARDMEM)) { + System.out.println("oncard_geometry:" + GlCleaner.onCardGeometry); + System.out.println("oncard_2d:" + GlCleaner.onCard2d); + System.out.println("oncard_texture:" + GlCleaner.onCardTexture); + } + if (arg0.equalsIgnoreCase(CLIENTDROP)) { + Protocol.method3279(); + } + if (arg0.equalsIgnoreCase(CLIENTJS5DROP)) { + client.js5NetQueue.quit(); + } + if (arg0.equalsIgnoreCase(JS5DROP)) { + client.js5NetQueue.drop(); + } + if (arg0.equalsIgnoreCase(BREAKCON)) { + GameShell.signLink.breakConnection(); + Protocol.socket.breakConnection(); + client.js5NetQueue.breakConnection(); + } + if (arg0.equalsIgnoreCase(REPLACECANVAS)) { + GameShell.replaceCanvas = true; + } + if (arg0.equalsIgnoreCase(REBUILD)) { + client.setGameState(25); + } + if (arg0.equalsIgnoreCase(FPSON)) { + displayFps = true; + } + if (arg0.equalsIgnoreCase(FPSOFF)) { + displayFps = false; + } + if (arg0.equalsIgnoreCase(WM0)) { + DisplayMode.setWindowMode(false, 0, -1, -1); + } + if (arg0.equalsIgnoreCase(WM1)) { + DisplayMode.setWindowMode(false, 1, -1, -1); + } + if (arg0.equalsIgnoreCase(WM2)) { + DisplayMode.setWindowMode(false, 2, -1, -1); + } + if (arg0.equalsIgnoreCase(WM3)) { + DisplayMode.setWindowMode(false, 3, 1024, 768); + } + if (arg0.equalsIgnoreCase(NOCLIP)) { + for (local18 = 0; local18 < 4; local18++) { + for (local38 = 1; local38 < 103; local38++) { + for (local117 = 1; local117 < 103; local117++) { + PathFinder.collisionMaps[local18].flags[local38][local117] = 0; + } + } + } + } + if (arg0.startsWith(PARTICLES)) { + Preferences.setParticles(arg0.substring(15).parseInt()); + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + } + if (arg0.startsWith(COMMAND_FPS) && client.modeWhere != 0) { + GameShell.setFpsTarget(arg0.substring(6).parseInt()); + } + if (arg0.equalsIgnoreCase(ERROR_TEST)) { + throw new RuntimeException(); + } + if (arg0.startsWith(RECT_DEBUG)) { + rectDebug = arg0.substring(12).trim().parseInt(); + Chat.add(null, 0, JagString.concatenate(new JagString[]{RECT_DEBUG_EQUALS, JagString.parseInt(rectDebug)})); + } + if (arg0.equalsIgnoreCase(QA_OP_TEST)) { + qaOpTest = true; + } + if (arg0.equalsIgnoreCase(TWEENING)) { + if (SeqType.applyTweening) { + SeqType.applyTweening = false; + Chat.add(null, 0, aClass100_943); + } else { + SeqType.applyTweening = true; + Chat.add(null, 0, aClass100_362); + } + } + if (arg0.equalsIgnoreCase(SHIFTCLICK)) { + if (shiftClick) { + aClass100_736.print(); + shiftClick = false; + } else { + aClass100_333.print(); + shiftClick = true; + } + } + + if (arg0.equalsIgnoreCase(RELOADPLUGINS)) { + PluginRepository.reloadPlugins(); + } + //} + sendCheatPacket(arg0); + } + + public static void sendCheatPacket(JagString commandLine) { + Protocol.outboundBuffer.p1isaac(ClientProt.CLIENT_CHEAT); + Protocol.outboundBuffer.p1(commandLine.length() - 1); + Protocol.outboundBuffer.pjstr(commandLine.substring(2)); + } + +} diff --git a/client/src/main/java/rt4/ClanChat.java b/client/src/main/java/rt4/ClanChat.java new file mode 100644 index 0000000..c0e8d85 --- /dev/null +++ b/client/src/main/java/rt4/ClanChat.java @@ -0,0 +1,55 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class ClanChat { + @OriginalMember(owner = "client!wj", name = "l", descriptor = "I") + public static int transmitAt = 0; + @OriginalMember(owner = "client!mj", name = "u", descriptor = "B") + public static byte rank; + @OriginalMember(owner = "client!e", name = "rc", descriptor = "B") + public static byte minKick; + @OriginalMember(owner = "client!wb", name = "m", descriptor = "Lclient!na;") + public static JagString owner = null; + @OriginalMember(owner = "client!be", name = "ac", descriptor = "Lclient!na;") + public static JagString name = null; + @OriginalMember(owner = "client!rg", name = "y", descriptor = "I") + public static int size; + @OriginalMember(owner = "client!qc", name = "bb", descriptor = "[Lclient!kl;") + public static ClanMember[] members; + + @OriginalMember(owner = "client!kh", name = "b", descriptor = "(I)V") + public static void leave() { + Protocol.outboundBuffer.p1isaac(ClientProt.CLAN_JOINCHAT_LEAVECHAT); + Protocol.outboundBuffer.p8(0L); + } + + @OriginalMember(owner = "client!mf", name = "a", descriptor = "(JI)V") + public static void join(@OriginalArg(0) long arg0) { + if ((long) 0 != arg0) { + Protocol.outboundBuffer.p1isaac(ClientProt.CLAN_JOINCHAT_LEAVECHAT); + Protocol.outboundBuffer.p8(arg0); + } + } + + @OriginalMember(owner = "client!od", name = "a", descriptor = "(ILclient!na;)V") + public static void kick(@OriginalArg(1) JagString arg0) { + if (members == null) { + return; + } + @Pc(22) long local22 = arg0.encode37(); + @Pc(24) int local24 = 0; + if (local22 == 0L) { + return; + } + while (members.length > local24 && members[local24].key != local22) { + local24++; + } + if (local24 < members.length && members[local24] != null) { + Protocol.outboundBuffer.p1isaac(ClientProt.CLAN_KICKUSER); + Protocol.outboundBuffer.p8(members[local24].key); + } + } +} diff --git a/client/src/main/java/rt4/ClanMember.java b/client/src/main/java/rt4/ClanMember.java new file mode 100644 index 0000000..76bfa11 --- /dev/null +++ b/client/src/main/java/rt4/ClanMember.java @@ -0,0 +1,20 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!kl") +public final class ClanMember extends Node { + + @OriginalMember(owner = "client!kl", name = "p", descriptor = "B") + public byte rank; + + @OriginalMember(owner = "client!kl", name = "q", descriptor = "Lclient!na;") + public JagString worldName; + + @OriginalMember(owner = "client!kl", name = "t", descriptor = "Lclient!na;") + public JagString username; + + @OriginalMember(owner = "client!kl", name = "x", descriptor = "I") + public int world; +} diff --git a/client/src/main/java/rt4/ClientProt.java b/client/src/main/java/rt4/ClientProt.java new file mode 100644 index 0000000..4aaf548 --- /dev/null +++ b/client/src/main/java/rt4/ClientProt.java @@ -0,0 +1,221 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.io.IOException; + +public class ClientProt { + + public static final int CLIENT_CHEAT = 44; + public static final int CLAN_JOINCHAT_LEAVECHAT = 104; + public static final int CLAN_KICKUSER = 162; // or CLANCHANNEL_KICKUSER + public static final int FRIENDLIST_ADD = 120; + public static final int FRIENDLIST_DEL = 57; + public static final int FRIEND_SETRANK = 188; + public static final int IGNORELIST_ADD = 34; + public static final int IGNORELIST_DEL = 213; + public static final int WINDOW_STATUS = 243; // assumed + public static final int TRANSMITVAR_VERIFYID = 177; + public static final int EVENT_MOUSE_MOVE = 123; + public static final int EVENT_MOUSE_CLICK = 75; + public static final int EVENT_CAMERA_POSITION = 21; + public static final int EVENT_APPLET_FOCUS = 22; + public static final int RESUME_P_COUNTDIALOG = 23; + public static final int RESUME_P_NAMEDIALOG = 244; + public static final int RESUME_P_STRINGDIALOG = 65; + public static final int SET_CHATFILTERSETTINGS = 157; + public static final int BUG_REPORT = 99; + public static final int SOUND_SONGEND = 137; + public static final int MOVE_GAMECLICK = 215; + public static final int MOVE_MINIMAPCLICK = 39; + public static final int CLOSE_MODAL = 184; + public static final int NO_TIMEOUT = 93; // assumed + + @OriginalMember(owner = "client!vg", name = "a", descriptor = "(Lclient!na;IIBI)V") + public static void method4512(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3) { + @Pc(8) Component local8 = InterfaceList.method1418(arg3, arg1); + if (local8 == null) { + return; + } + if (local8.onOptionClick != null) { + @Pc(19) HookRequest local19 = new HookRequest(); + local19.arguments = local8.onOptionClick; + local19.source = local8; + local19.opBase = arg0; + local19.op = arg2; + ScriptRunner.run(local19); + } + @Pc(37) boolean local37 = true; + if (local8.clientCode > 0) { + local37 = MiniMenu.method4265(local8); + } + if (!local37 || !InterfaceList.getServerActiveProperties(local8).isButtonEnabled(arg2 - 1)) { + return; + } + if (arg2 == 1) { + Protocol.outboundBuffer.p1isaac(155); + Protocol.outboundBuffer.p4(arg3); + Protocol.outboundBuffer.p2(arg1); + } + if (arg2 == 2) { + Protocol.outboundBuffer.p1isaac(196); + Protocol.outboundBuffer.p4(arg3); + Protocol.outboundBuffer.p2(arg1); + } + if (arg2 == 3) { + Protocol.outboundBuffer.p1isaac(124); + Protocol.outboundBuffer.p4(arg3); + Protocol.outboundBuffer.p2(arg1); + } + if (arg2 == 4) { + Protocol.outboundBuffer.p1isaac(199); + Protocol.outboundBuffer.p4(arg3); + Protocol.outboundBuffer.p2(arg1); + } + if (arg2 == 5) { + Protocol.outboundBuffer.p1isaac(234); + Protocol.outboundBuffer.p4(arg3); + Protocol.outboundBuffer.p2(arg1); + } + if (arg2 == 6) { + Protocol.outboundBuffer.p1isaac(168); + Protocol.outboundBuffer.p4(arg3); + Protocol.outboundBuffer.p2(arg1); + } + if (arg2 == 7) { + Protocol.outboundBuffer.p1isaac(166); + Protocol.outboundBuffer.p4(arg3); + Protocol.outboundBuffer.p2(arg1); + } + if (arg2 == 8) { + Protocol.outboundBuffer.p1isaac(64); + Protocol.outboundBuffer.p4(arg3); + Protocol.outboundBuffer.p2(arg1); + } + if (arg2 == 9) { + Protocol.outboundBuffer.p1isaac(53); + Protocol.outboundBuffer.p4(arg3); + Protocol.outboundBuffer.p2(arg1); + } + if (arg2 == 10) { + Protocol.outboundBuffer.p1isaac(9); + Protocol.outboundBuffer.p4(arg3); + Protocol.outboundBuffer.p2(arg1); + } + } + + @OriginalMember(owner = "client!pi", name = "c", descriptor = "(III)V") + public static void method3502(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + @Pc(13) int local13 = arg0; + if (arg0 > 25) { + local13 = 25; + } + arg0--; + @Pc(23) int local23 = PathFinder.queueX[arg0]; + @Pc(27) int local27 = PathFinder.queueZ[arg0]; + if (arg1 == 0) { + Protocol.outboundBuffer.p1isaac(ClientProt.MOVE_GAMECLICK); + Protocol.outboundBuffer.p1(local13 + local13 + 3); + } + if (arg1 == 1) { + Protocol.outboundBuffer.p1isaac(ClientProt.MOVE_MINIMAPCLICK); + Protocol.outboundBuffer.p1(local13 + local13 + 3 + 14); + } + if (arg1 == 2) { + Protocol.outboundBuffer.p1isaac(77); + Protocol.outboundBuffer.p1(local13 + local13 + 3); + } + Protocol.outboundBuffer.p1add(Keyboard.pressedKeys[Keyboard.KEY_CTRL] ? 1 : 0); + Protocol.outboundBuffer.p2(Camera.originX + local23); + Protocol.outboundBuffer.p2add(Camera.originZ + local27); + LoginManager.mapFlagZ = PathFinder.queueZ[0]; + LoginManager.mapFlagX = PathFinder.queueX[0]; + for (@Pc(126) int local126 = 1; local126 < local13; local126++) { + arg0--; + Protocol.outboundBuffer.p1add(PathFinder.queueX[arg0] - local23); + Protocol.outboundBuffer.p1sub(PathFinder.queueZ[arg0] - local27); + } + } + + @OriginalMember(owner = "client!mc", name = "f", descriptor = "(B)V") + public static void closeWidget() { + Protocol.outboundBuffer.p1isaac(ClientProt.CLOSE_MODAL); + for (@Pc(18) ComponentPointer local18 = (ComponentPointer) InterfaceList.openInterfaces.head(); local18 != null; local18 = (ComponentPointer) InterfaceList.openInterfaces.next()) { + if (local18.anInt5879 == 0) { + InterfaceList.closeInterface(true, local18); + } + } + if (Cs1ScriptRunner.aClass13_10 != null) { + InterfaceList.redraw(Cs1ScriptRunner.aClass13_10); + Cs1ScriptRunner.aClass13_10 = null; + } + } + + @OriginalMember(owner = "client!wh", name = "a", descriptor = "(IILclient!na;)V") + public static void clickPlayerOption(@OriginalArg(0) int arg0, @OriginalArg(2) JagString arg1) { + @Pc(7) JagString local7 = arg1.method3159().toTitleCase(); + @Pc(13) boolean local13 = false; + for (@Pc(15) int local15 = 0; local15 < PlayerList.size; local15++) { + @Pc(28) Player local28 = PlayerList.players[PlayerList.ids[local15]]; + if (local28 != null && local28.username != null && local28.username.equalsIgnoreCase(local7)) { + local13 = true; + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local28.movementQueueX[0], 1, 0, 2, local28.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + if (arg0 == 1) { + Protocol.outboundBuffer.p1isaac(68); + Protocol.outboundBuffer.ip2add(PlayerList.ids[local15]); + } else if (arg0 == 4) { + Protocol.outboundBuffer.p1isaac(180); + Protocol.outboundBuffer.ip2add(PlayerList.ids[local15]); + } else if (arg0 == 5) { + Protocol.outboundBuffer.p1isaac(4); + Protocol.outboundBuffer.ip2(PlayerList.ids[local15]); + } else if (arg0 == 6) { + Protocol.outboundBuffer.p1isaac(133); + Protocol.outboundBuffer.ip2(PlayerList.ids[local15]); + } else if (arg0 == 7) { + Protocol.outboundBuffer.p1isaac(114); + Protocol.outboundBuffer.ip2add(PlayerList.ids[local15]); + } + break; + } + } + if (!local13) { + Chat.add(JagString.EMPTY, 0, JagString.concatenate(new JagString[]{LocalizedText.UNABLETOFIND, local7})); + } + } + + @OriginalMember(owner = "client!ej", name = "i", descriptor = "(I)V") + public static void sendWindowDetails() { + Protocol.outboundBuffer.p1isaac(ClientProt.WINDOW_STATUS); + Protocol.outboundBuffer.p1(DisplayMode.getWindowMode()); + Protocol.outboundBuffer.p2(GameShell.canvasWidth); + Protocol.outboundBuffer.p2(GameShell.canvasHeight); + Protocol.outboundBuffer.p1(Preferences.antiAliasingMode); + } + + @OriginalMember(owner = "client!ah", name = "a", descriptor = "(BZ)V") + public static void ping(@OriginalArg(1) boolean arg0) { + client.audioLoop(); + if (client.gameState != 30 && client.gameState != 25) { + return; + } + Protocol.anInt3251++; + if (Protocol.anInt3251 < 50 && !arg0) { + return; + } + Protocol.anInt3251 = 0; + if (!LoginManager.aBoolean247 && Protocol.socket != null) { + Protocol.outboundBuffer.p1isaac(ClientProt.NO_TIMEOUT); + try { + Protocol.socket.write(Protocol.outboundBuffer.data, Protocol.outboundBuffer.offset); + Protocol.outboundBuffer.offset = 0; + } catch (@Pc(53) IOException local53) { + LoginManager.aBoolean247 = true; + } + } + client.audioLoop(); + } + +} diff --git a/client/src/main/java/rt4/ClientScript.java b/client/src/main/java/rt4/ClientScript.java new file mode 100644 index 0000000..b88d6c4 --- /dev/null +++ b/client/src/main/java/rt4/ClientScript.java @@ -0,0 +1,35 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!qc") +public final class ClientScript extends SecondaryNode { + + @OriginalMember(owner = "client!qc", name = "I", descriptor = "I") + public int intArgs; + + @OriginalMember(owner = "client!qc", name = "L", descriptor = "I") + public int intLocals; + + @OriginalMember(owner = "client!qc", name = "N", descriptor = "I") + public int stringArgs; + + @OriginalMember(owner = "client!qc", name = "O", descriptor = "[I") + public int[] opcodes; + + @OriginalMember(owner = "client!qc", name = "Q", descriptor = "[Lclient!sc;") + public HashTable[] switchTables; + + @OriginalMember(owner = "client!qc", name = "R", descriptor = "Lclient!na;") + public JagString name; + + @OriginalMember(owner = "client!qc", name = "S", descriptor = "I") + public int stringLocals; + + @OriginalMember(owner = "client!qc", name = "T", descriptor = "[Lclient!na;") + public JagString[] stringOperands; + + @OriginalMember(owner = "client!qc", name = "W", descriptor = "[I") + public int[] intOperands; +} diff --git a/client/src/main/java/rt4/ClientScriptList.java b/client/src/main/java/rt4/ClientScriptList.java new file mode 100644 index 0000000..19d8554 --- /dev/null +++ b/client/src/main/java/rt4/ClientScriptList.java @@ -0,0 +1,66 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class ClientScriptList { + @OriginalMember(owner = "client!ib", name = "d", descriptor = "Lclient!gn;") + public static final LruHashTable scripts = new LruHashTable(128); + + @OriginalMember(owner = "client!hc", name = "a", descriptor = "(IB)Lclient!qc;") + public static ClientScript get(@OriginalArg(0) int id) { + @Pc(12) ClientScript script = (ClientScript) scripts.get(id); + if (script != null) { + return script; + } + @Pc(22) byte[] bytes = client.js5Archive12.fetchFile(id, 0); + if (bytes == null) { + return null; + } + script = new ClientScript(); + @Pc(42) Buffer buffer = new Buffer(bytes); + buffer.offset = buffer.data.length - 2; + @Pc(53) int trailerLen = buffer.g2(); + @Pc(63) int trailerPos = buffer.data.length - trailerLen - 12 - 2; + buffer.offset = trailerPos; + @Pc(70) int instructions = buffer.g4(); + script.intLocals = buffer.g2(); + script.stringLocals = buffer.g2(); + script.intArgs = buffer.g2(); + script.stringArgs = buffer.g2(); + @Pc(98) int switches = buffer.g1(); + if (switches > 0) { + script.switchTables = new HashTable[switches]; + for (int i = 0; i < switches; i++) { + int cases = buffer.g2(); + @Pc(121) HashTable table = new HashTable(IntUtils.clp2(cases)); + script.switchTables[i] = table; + while (cases-- > 0) { + @Pc(136) int value = buffer.g4(); + @Pc(140) int offset = buffer.g4(); + table.put(new IntNode(offset), value); + } + } + } + buffer.offset = 0; + script.name = buffer.fastgjstr(); + script.opcodes = new int[instructions]; + script.stringOperands = new JagString[instructions]; + int i = 0; + script.intOperands = new int[instructions]; + while (trailerPos > buffer.offset) { + int cases = buffer.g2(); + if (cases == 3) { + script.stringOperands[i] = buffer.gjstr(); + } else if (cases >= 100 || cases == 21 || cases == 38 || cases == 39) { + script.intOperands[i] = buffer.g1(); + } else { + script.intOperands[i] = buffer.g4(); + } + script.opcodes[i++] = cases; + } + scripts.put(script, id); + return script; + } +} diff --git a/client/src/main/java/rt4/CollisionMap.java b/client/src/main/java/rt4/CollisionMap.java new file mode 100644 index 0000000..5481a65 --- /dev/null +++ b/client/src/main/java/rt4/CollisionMap.java @@ -0,0 +1,928 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!mj") +public final class CollisionMap { + + @OriginalMember(owner = "client!mj", name = "k", descriptor = "I") + private final int length; + + @OriginalMember(owner = "client!mj", name = "p", descriptor = "I") + private final int zOffset; + + @OriginalMember(owner = "client!mj", name = "v", descriptor = "I") + private final int xOffset; + + @OriginalMember(owner = "client!mj", name = "e", descriptor = "I") + private final int width; + + @OriginalMember(owner = "client!mj", name = "m", descriptor = "[[I") + public final int[][] flags; + + @OriginalMember(owner = "client!mj", name = "", descriptor = "(II)V") + public CollisionMap(@OriginalArg(0) int width, @OriginalArg(1) int length) { + this.length = length; + this.zOffset = 0; + this.xOffset = 0; + this.width = width; + this.flags = new int[this.width][this.length]; + this.clear(); + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(IZIIII)V") + public final void unflagWall(@OriginalArg(0) int angle, @OriginalArg(1) boolean blockProjectiles, @OriginalArg(3) int startZ, @OriginalArg(4) int shape, @OriginalArg(5) int startX) { + @Pc(4) int x = startX - this.xOffset; + @Pc(23) int z = startZ - this.zOffset; + if (shape == 0) { + if (angle == 0) { + this.unflag(z, x, 128); + this.unflag(z, x - 1, 8); + } + if (angle == 1) { + this.unflag(z, x, 2); + this.unflag(z + 1, x, 32); + } + if (angle == 2) { + this.unflag(z, x, 8); + this.unflag(z, x + 1, 128); + } + if (angle == 3) { + this.unflag(z, x, 32); + this.unflag(z - 1, x, 2); + } + } + if (shape == 1 || shape == 3) { + if (angle == 0) { + this.unflag(z, x, 1); + this.unflag(z + 1, x + -1, 16); + } + if (angle == 1) { + this.unflag(z, x, 4); + this.unflag(z + 1, x + 1, 64); + } + if (angle == 2) { + this.unflag(z, x, 16); + this.unflag(z - 1, x - -1, 1); + } + if (angle == 3) { + this.unflag(z, x, 64); + this.unflag(z - 1, x + -1, 4); + } + } + if (shape == 2) { + if (angle == 0) { + this.unflag(z, x, 130); + this.unflag(z, x - 1, 8); + this.unflag(z + 1, x, 32); + } + if (angle == 1) { + this.unflag(z, x, 10); + this.unflag(z + 1, x, 32); + this.unflag(z, x + 1, 128); + } + if (angle == 2) { + this.unflag(z, x, 40); + this.unflag(z, x + 1, 128); + this.unflag(z - 1, x, 2); + } + if (angle == 3) { + this.unflag(z, x, 160); + this.unflag(z - 1, x, 2); + this.unflag(z, x - 1, 8); + } + } + + if (blockProjectiles) { + if (shape == 0) { + if (angle == 0) { + this.unflag(z, x, 65536); + this.unflag(z, x - 1, 4096); + } + if (angle == 1) { + this.unflag(z, x, 1024); + this.unflag(z + 1, x, 16384); + } + if (angle == 2) { + this.unflag(z, x, 4096); + this.unflag(z, x + 1, 65536); + } + if (angle == 3) { + this.unflag(z, x, 16384); + this.unflag(z - 1, x, 1024); + } + } + if (shape == 1 || shape == 3) { + if (angle == 0) { + this.unflag(z, x, 512); + this.unflag(z + 1, x + -1, 8192); + } + if (angle == 1) { + this.unflag(z, x, 2048); + this.unflag(z + 1, x - -1, 32768); + } + if (angle == 2) { + this.unflag(z, x, 8192); + this.unflag(z - 1, x + 1, 512); + } + if (angle == 3) { + this.unflag(z, x, 32768); + this.unflag(z - 1, x + -1, 2048); + } + } + if (shape == 2) { + if (angle == 0) { + this.unflag(z, x, 66560); + this.unflag(z, x - 1, 4096); + this.unflag(z + 1, x, 16384); + } + if (angle == 1) { + this.unflag(z, x, 5120); + this.unflag(z + 1, x, 16384); + this.unflag(z, x + 1, 65536); + } + if (angle == 2) { + this.unflag(z, x, 20480); + this.unflag(z, x + 1, 65536); + this.unflag(z - 1, x, 1024); + } + if (angle == 3) { + this.unflag(z, x, 81920); + this.unflag(z - 1, x, 1024); + this.unflag(z, x - 1, 4096); + } + } + } + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(IIIZII)V") + public final void flagWall(@OriginalArg(0) int angle, @OriginalArg(2) int shape, @OriginalArg(3) boolean blocksProjectiles, @OriginalArg(4) int startZ, @OriginalArg(5) int startX) { + @Pc(4) int x = startX - this.xOffset; + @Pc(13) int z = startZ - this.zOffset; + if (shape == 0) { + if (angle == 0) { + this.flag(128, x, z); + this.flag(8, x - 1, z); + } + if (angle == 1) { + this.flag(2, x, z); + this.flag(32, x, z + 1); + } + if (angle == 2) { + this.flag(8, x, z); + this.flag(128, x + 1, z); + } + if (angle == 3) { + this.flag(32, x, z); + this.flag(2, x, z - 1); + } + } + if (shape == 1 || shape == 3) { + if (angle == 0) { + this.flag(1, x, z); + this.flag(16, x - 1, z + 1); + } + if (angle == 1) { + this.flag(4, x, z); + this.flag(64, x + 1, z + 1); + } + if (angle == 2) { + this.flag(16, x, z); + this.flag(1, x + 1, z + -1); + } + if (angle == 3) { + this.flag(64, x, z); + this.flag(4, x - 1, z + -1); + } + } + if (shape == 2) { + if (angle == 0) { + this.flag(130, x, z); + this.flag(8, x - 1, z); + this.flag(32, x, z + 1); + } + if (angle == 1) { + this.flag(10, x, z); + this.flag(32, x, z + 1); + this.flag(128, x + 1, z); + } + if (angle == 2) { + this.flag(40, x, z); + this.flag(128, x + 1, z); + this.flag(2, x, z - 1); + } + if (angle == 3) { + this.flag(160, x, z); + this.flag(2, x, z - 1); + this.flag(8, x - 1, z); + } + } + if (blocksProjectiles) { + if (shape == 0) { + if (angle == 0) { + this.flag(65536, x, z); + this.flag(4096, x - 1, z); + } + if (angle == 1) { + this.flag(1024, x, z); + this.flag(16384, x, z + 1); + } + if (angle == 2) { + this.flag(4096, x, z); + this.flag(65536, x + 1, z); + } + if (angle == 3) { + this.flag(16384, x, z); + this.flag(1024, x, z - 1); + } + } + if (shape == 1 || shape == 3) { + if (angle == 0) { + this.flag(512, x, z); + this.flag(8192, x - 1, z + 1); + } + if (angle == 1) { + this.flag(2048, x, z); + this.flag(32768, x + 1, z + 1); + } + if (angle == 2) { + this.flag(8192, x, z); + this.flag(512, x + 1, z + -1); + } + if (angle == 3) { + this.flag(32768, x, z); + this.flag(2048, x - 1, z - 1); + } + } + if (shape == 2) { + if (angle == 0) { + this.flag(66560, x, z); + this.flag(4096, x - 1, z); + this.flag(16384, x, z + 1); + } + if (angle == 1) { + this.flag(5120, x, z); + this.flag(16384, x, z + 1); + this.flag(65536, x + 1, z); + } + if (angle == 2) { + this.flag(20480, x, z); + this.flag(65536, x + 1, z); + this.flag(1024, x, z - 1); + } + if (angle == 3) { + this.flag(81920, x, z); + this.flag(1024, x, z - 1); + this.flag(4096, x - 1, z); + } + } + } + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(IIIIIIIIB)Z") + private boolean isInsideRect(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7) { + if (arg1 + arg2 > arg7 && arg2 < arg0 + arg7) { + return arg3 + arg5 > arg4 && arg6 + arg4 > arg5; + } else { + return false; + } + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(IIZIIIII)Z") + public final boolean isAtWall(@OriginalArg(0) int srcZ, @OriginalArg(1) int destX, @OriginalArg(3) int destZ, @OriginalArg(4) int srcX, @OriginalArg(5) int destType, @OriginalArg(6) int size, @OriginalArg(7) int destAngle) { + if (size == 1) { + if (destX == srcX && destZ == srcZ) { + return true; + } + } else if (destX <= srcX && destX + size - 1 >= srcX && srcZ <= size + srcZ - 1) { + return true; + } + @Pc(49) int endZ = destZ - this.zOffset; + @Pc(54) int startX = srcX - this.xOffset; + @Pc(59) int startZ = srcZ - this.zOffset; + @Pc(64) int endX = destX - this.xOffset; + if (size == 1) { + if (destType == 0) { + if (destAngle == 0) { + if (endX == startX - 1 && endZ == startZ) { + return true; + } + if (endX == startX && startZ + 1 == endZ && (this.flags[endX][endZ] & 0x12C0120) == 0) { + return true; + } + if (startX == endX && startZ - 1 == endZ && (this.flags[endX][endZ] & 0x12C0102) == 0) { + return true; + } + } else if (destAngle == 1) { + if (startX == endX && endZ == startZ + 1) { + return true; + } + if (startX - 1 == endX && startZ == endZ && (this.flags[endX][endZ] & 0x12C0108) == 0) { + return true; + } + if (endX == startX + 1 && endZ == startZ && (this.flags[endX][endZ] & 0x12C0180) == 0) { + return true; + } + } else if (destAngle == 2) { + if (startX + 1 == endX && endZ == startZ) { + return true; + } + if (startX == endX && endZ == startZ + 1 && (this.flags[endX][endZ] & 0x12C0120) == 0) { + return true; + } + if (startX == endX && startZ - 1 == endZ && (this.flags[endX][endZ] & 0x12C0102) == 0) { + return true; + } + } else if (destAngle == 3) { + if (endX == startX && startZ - 1 == endZ) { + return true; + } + if (startX - 1 == endX && startZ == endZ && (this.flags[endX][endZ] & 0x12C0108) == 0) { + return true; + } + if (startX + 1 == endX && endZ == startZ && (this.flags[endX][endZ] & 0x12C0180) == 0) { + return true; + } + } + } + if (destType == 2) { + if (destAngle == 0) { + if (endX == startX - 1 && startZ == endZ) { + return true; + } + if (endX == startX && endZ == startZ + 1) { + return true; + } + if (endX == startX + 1 && endZ == startZ && (this.flags[endX][endZ] & 0x12C0180) == 0) { + return true; + } + if (startX == endX && endZ == startZ - 1 && (this.flags[endX][endZ] & 0x12C0102) == 0) { + return true; + } + } else if (destAngle == 1) { + if (endX == startX - 1 && startZ == endZ && (this.flags[endX][endZ] & 0x12C0108) == 0) { + return true; + } + if (startX == endX && startZ + 1 == endZ) { + return true; + } + if (endX == startX + 1 && startZ == endZ) { + return true; + } + if (startX == endX && endZ == startZ - 1 && (this.flags[endX][endZ] & 0x12C0102) == 0) { + return true; + } + } else if (destAngle == 2) { + if (endX == startX - 1 && startZ == endZ && (this.flags[endX][endZ] & 0x12C0108) == 0) { + return true; + } + if (startX == endX && endZ == startZ + 1 && (this.flags[endX][endZ] & 0x12C0120) == 0) { + return true; + } + if (startX + 1 == endX && startZ == endZ) { + return true; + } + if (endX == startX && startZ - 1 == endZ) { + return true; + } + } else if (destAngle == 3) { + if (endX == startX - 1 && startZ == endZ) { + return true; + } + if (endX == startX && startZ + 1 == endZ && (this.flags[endX][endZ] & 0x12C0120) == 0) { + return true; + } + if (endX == startX + 1 && startZ == endZ && (this.flags[endX][endZ] & 0x12C0180) == 0) { + return true; + } + if (endX == startX && endZ == startZ - 1) { + return true; + } + } + } + if (destType == 9) { + if (endX == startX && startZ + 1 == endZ && (this.flags[endX][endZ] & 0x20) == 0) { + return true; + } + if (endX == startX && endZ == startZ - 1 && (this.flags[endX][endZ] & 0x2) == 0) { + return true; + } + if (endX == startX - 1 && endZ == startZ && (this.flags[endX][endZ] & 0x8) == 0) { + return true; + } + return startX + 1 == endX && startZ == endZ && (this.flags[endX][endZ] & 0x80) == 0; + } + } else { + @Pc(785) int x1 = size + endX - 1; + @Pc(792) int z1 = endZ + size - 1; + if (destType == 0) { + if (destAngle == 0) { + if (endX == startX - size && endZ <= startZ && startZ <= z1) { + return true; + } + if (endX <= startX && x1 >= startX && startZ + 1 == endZ && (this.flags[startX][endZ] & 0x12C0120) == 0) { + return true; + } + if (endX <= startX && x1 >= startX && startZ - size == endZ && (this.flags[startX][z1] & 0x12C0102) == 0) { + return true; + } + } else if (destAngle == 1) { + if (startX >= endX && startX <= x1 && startZ + 1 == endZ) { + return true; + } + if (endX == startX - size && endZ <= startZ && z1 >= startZ && (this.flags[x1][startZ] & 0x12C0108) == 0) { + return true; + } + if (endX == startX + 1 && endZ <= startZ && z1 >= startZ && (this.flags[endX][startZ] & 0x12C0180) == 0) { + return true; + } + } else if (destAngle == 2) { + if (startX + 1 == endX && endZ <= startZ && startZ <= z1) { + return true; + } + if (startX >= endX && x1 >= startX && endZ == startZ + 1 && (this.flags[startX][endZ] & 0x12C0120) == 0) { + return true; + } + if (startX >= endX && x1 >= startX && startZ - size == endZ && (this.flags[startX][z1] & 0x12C0102) == 0) { + return true; + } + } else if (destAngle == 3) { + if (endX <= startX && x1 >= startX && startZ - size == endZ) { + return true; + } + if (endX == startX - size && startZ >= endZ && z1 >= startZ && (this.flags[x1][startZ] & 0x12C0108) == 0) { + return true; + } + if (startX + 1 == endX && endZ <= startZ && startZ <= z1 && (this.flags[endX][startZ] & 0x12C0180) == 0) { + return true; + } + } + } + if (destType == 2) { + if (destAngle == 0) { + if (endX == startX - size && startZ >= endZ && startZ <= z1) { + return true; + } + if (endX <= startX && x1 >= startX && endZ == startZ + 1) { + return true; + } + if (startX + 1 == endX && startZ >= endZ && startZ <= z1 && (this.flags[endX][startZ] & 0x12C0180) == 0) { + return true; + } + if (startX >= endX && x1 >= startX && startZ - size == endZ && (this.flags[startX][z1] & 0x12C0102) == 0) { + return true; + } + } else if (destAngle == 1) { + if (endX == startX - size && startZ >= endZ && startZ <= z1 && (this.flags[x1][startZ] & 0x12C0108) == 0) { + return true; + } + if (endX <= startX && x1 >= startX && endZ == startZ + 1) { + return true; + } + if (startX + 1 == endX && startZ >= endZ && startZ <= z1) { + return true; + } + if (startX >= endX && startX <= x1 && endZ == startZ - size && (this.flags[startX][z1] & 0x12C0102) == 0) { + return true; + } + } else if (destAngle == 2) { + if (startX - size == endX && endZ <= startZ && z1 >= startZ && (this.flags[x1][startZ] & 0x12C0108) == 0) { + return true; + } + if (endX <= startX && startX <= x1 && endZ == startZ + 1 && (this.flags[startX][endZ] & 0x12C0120) == 0) { + return true; + } + if (endX == startX + 1 && endZ <= startZ && startZ <= z1) { + return true; + } + if (endX <= startX && x1 >= startX && startZ - size == endZ) { + return true; + } + } else if (destAngle == 3) { + if (startX - size == endX && startZ >= endZ && startZ <= z1) { + return true; + } + if (endX <= startX && startX <= x1 && startZ + 1 == endZ && (this.flags[startX][endZ] & 0x12C0120) == 0) { + return true; + } + if (endX == startX + 1 && startZ >= endZ && startZ <= z1 && (this.flags[endX][startZ] & 0x12C0180) == 0) { + return true; + } + if (endX <= startX && x1 >= startX && startZ - size == endZ) { + return true; + } + } + } + if (destType == 9) { + if (endX <= startX && startX <= x1 && endZ == startZ + 1 && (this.flags[startX][endZ] & 0x12C0120) == 0) { + return true; + } + if (startX >= endX && startX <= x1 && endZ == startZ - size && (this.flags[startX][z1] & 0x12C0102) == 0) { + return true; + } + if (startX - size == endX && startZ >= endZ && startZ <= z1 && (this.flags[x1][startZ] & 0x12C0108) == 0) { + return true; + } + return endX == startX + 1 && startZ >= endZ && z1 >= startZ && (this.flags[endX][startZ] & 0x12C0180) == 0; + } + } + return false; + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(IZBIII)V") + public final void flagScenery(@OriginalArg(0) int startX, @OriginalArg(1) boolean blocksProjectiles, @OriginalArg(3) int startZ, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + @Pc(6) int z = startZ - this.zOffset; + @Pc(11) int x = startX - this.xOffset; + @Pc(17) int flags = 256; + if (blocksProjectiles) { + flags = 131328; + } + for (@Pc(25) int x0 = x; x0 < x + arg3; x0++) { + if (x0 >= 0 && x0 < this.width) { + for (@Pc(47) int z0 = z; z0 < arg4 + z; z0++) { + if (z0 >= 0 && this.length > z0) { + this.flag(flags, x0, z0); + } + } + } + } + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(IBII)V") + private void flag(@OriginalArg(0) int flags, @OriginalArg(2) int x, @OriginalArg(3) int z) { + this.flags[x][z] |= flags; + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(IIIIIIII)Z") + public final boolean isAtWallDecor(@OriginalArg(0) int srcZ, @OriginalArg(1) int destType, @OriginalArg(2) int srcX, @OriginalArg(3) int destZ, @OriginalArg(4) int size, @OriginalArg(5) int destAngle, @OriginalArg(6) int destX) { + if (size == 1) { + if (srcX == destX && srcZ == destZ) { + return true; + } + } else if (destX <= srcX && size + destX - 1 >= srcX && srcZ + size - 1 >= srcZ) { + return true; + } + @Pc(62) int endX = destX - this.xOffset; + @Pc(67) int startZ = srcZ - this.zOffset; + @Pc(72) int startX = srcX - this.xOffset; + @Pc(77) int endZ = destZ - this.zOffset; + if (size == 1) { + if (destType == 6 || destType == 7) { + if (destType == 7) { + destAngle = destAngle + 2 & 0x3; + } + if (destAngle == 0) { + if (endX == startX + 1 && startZ == endZ && (this.flags[endX][endZ] & 0x80) == 0) { + return true; + } + if (startX == endX && endZ == startZ - 1 && (this.flags[endX][endZ] & 0x2) == 0) { + return true; + } + } else if (destAngle == 1) { + if (endX == startX - 1 && startZ == endZ && (this.flags[endX][endZ] & 0x8) == 0) { + return true; + } + if (startX == endX && endZ == startZ - 1 && (this.flags[endX][endZ] & 0x2) == 0) { + return true; + } + } else if (destAngle == 2) { + if (endX == startX - 1 && endZ == startZ && (this.flags[endX][endZ] & 0x8) == 0) { + return true; + } + if (startX == endX && startZ + 1 == endZ && (this.flags[endX][endZ] & 0x20) == 0) { + return true; + } + } else if (destAngle == 3) { + if (endX == startX + 1 && endZ == startZ && (this.flags[endX][endZ] & 0x80) == 0) { + return true; + } + if (startX == endX && endZ == startZ + 1 && (this.flags[endX][endZ] & 0x20) == 0) { + return true; + } + } + } + if (destType == 8) { + if (endX == startX && startZ + 1 == endZ && (this.flags[endX][endZ] & 0x20) == 0) { + return true; + } + if (endX == startX && startZ - 1 == endZ && (this.flags[endX][endZ] & 0x2) == 0) { + return true; + } + if (startX - 1 == endX && endZ == startZ && (this.flags[endX][endZ] & 0x8) == 0) { + return true; + } + return endX == startX + 1 && startZ == endZ && (this.flags[endX][endZ] & 0x80) == 0; + } + } else { + @Pc(414) int x1 = endX + size - 1; + @Pc(420) int z1 = endZ + size - 1; + if (destType == 6 || destType == 7) { + if (destType == 7) { + destAngle = destAngle + 2 & 0x3; + } + if (destAngle == 0) { + if (startX + 1 == endX && endZ <= startZ && startZ <= z1 && (this.flags[endX][startZ] & 0x80) == 0) { + return true; + } + if (startX >= endX && x1 >= startX && startZ - size == endZ && (this.flags[startX][z1] & 0x2) == 0) { + return true; + } + } else if (destAngle == 1) { + if (startX - size == endX && startZ >= endZ && z1 >= startZ && (this.flags[x1][startZ] & 0x8) == 0) { + return true; + } + if (startX >= endX && x1 >= startX && startZ - size == endZ && (this.flags[startX][z1] & 0x2) == 0) { + return true; + } + } else if (destAngle == 2) { + if (endX == startX - size && startZ >= endZ && startZ <= z1 && (this.flags[x1][startZ] & 0x8) == 0) { + return true; + } + if (endX <= startX && startX <= x1 && endZ == startZ + 1 && (this.flags[startX][endZ] & 0x20) == 0) { + return true; + } + } else if (destAngle == 3) { + if (startX + 1 == endX && endZ <= startZ && startZ <= z1 && (this.flags[endX][startZ] & 0x80) == 0) { + return true; + } + if (startX >= endX && startX <= x1 && endZ == startZ + 1 && (this.flags[startX][endZ] & 0x20) == 0) { + return true; + } + } + } + if (destType == 8) { + if (endX <= startX && x1 >= startX && endZ == startZ + 1 && (this.flags[startX][endZ] & 0x20) == 0) { + return true; + } + if (startX >= endX && x1 >= startX && endZ == startZ - size && (this.flags[startX][z1] & 0x2) == 0) { + return true; + } + if (endX == startX - size && endZ <= startZ && z1 >= startZ && (this.flags[x1][startZ] & 0x8) == 0) { + return true; + } + return endX == startX + 1 && startZ >= endZ && startZ <= z1 && (this.flags[endX][startZ] & 0x80) == 0; + } + } + return false; + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(IIIIZIIIII)Z") + private boolean isOutsideRect(@OriginalArg(0) int arg0, @OriginalArg(1) int z1, @OriginalArg(2) int arg2, @OriginalArg(3) int destBlockedSides, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int destZ, @OriginalArg(8) int arg7, @OriginalArg(9) int destLength) { + @Pc(9) int local9 = arg5 + arg7; + @Pc(13) int destZ1 = destZ + destLength; + @Pc(22) int local22 = arg2 + arg0; + @Pc(27) int local27 = z1 + arg4; + @Pc(45) int z0; + @Pc(52) int local52; + if (arg5 >= arg0 && arg5 < local22) { + if (destZ1 == z1 && (destBlockedSides & 0x4) == 0) { + z0 = arg5; + local52 = local22 >= local9 ? local9 : local22; + while (local52 > z0) { + if ((this.flags[z0 - this.xOffset][destZ1 - this.zOffset - 1] & 0x2) == 0) { + return true; + } + z0++; + } + } else if (local27 == destZ && (destBlockedSides & 0x1) == 0) { + z0 = arg5; + local52 = local9 > local22 ? local22 : local9; + while (local52 > z0) { + if ((this.flags[z0 - this.xOffset][destZ - this.zOffset] & 0x20) == 0) { + return true; + } + z0++; + } + } + } else if (local9 > arg0 && local9 <= local22) { + if (z1 == destZ1 && (destBlockedSides & 0x4) == 0) { + for (z0 = arg0; z0 < local9; z0++) { + if ((this.flags[z0 - this.xOffset][destZ1 - this.zOffset - 1] & 0x2) == 0) { + return true; + } + } + } else if (destZ == local27 && (destBlockedSides & 0x1) == 0) { + for (z0 = arg0; z0 < local9; z0++) { + if ((this.flags[z0 - this.xOffset][destZ - this.zOffset] & 0x20) == 0) { + return true; + } + } + } + } else if (destZ >= z1 && local27 > destZ) { + if (local9 == arg0 && (destBlockedSides & 0x8) == 0) { + z0 = destZ; + local52 = local27 >= destZ1 ? destZ1 : local27; + while (z0 < local52) { + if ((this.flags[local9 - this.xOffset - 1][z0 - this.zOffset] & 0x8) == 0) { + return true; + } + z0++; + } + } else if (arg5 == local22 && (destBlockedSides & 0x2) == 0) { + z0 = destZ; + local52 = local27 < destZ1 ? local27 : destZ1; + while (z0 < local52) { + if ((this.flags[arg5 - this.xOffset][z0 - this.zOffset] & 0x80) == 0) { + return true; + } + z0++; + } + } + } else if (z1 < destZ1 && local27 >= destZ1) { + if (local9 == arg0 && (destBlockedSides & 0x8) == 0) { + for (z0 = z1; z0 < destZ1; z0++) { + if ((this.flags[local9 - this.xOffset - 1][z0 - this.zOffset] & 0x8) == 0) { + return true; + } + } + } else if (local22 == arg5 && (destBlockedSides & 0x2) == 0) { + for (z0 = z1; z0 < destZ1; z0++) { + if ((this.flags[arg5 - this.xOffset][z0 - this.zOffset] & 0x80) == 0) { + return true; + } + } + } + } + return false; + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(I)V") + public final void clear() { + for (@Pc(3) int local3 = 0; local3 < this.width; local3++) { + for (@Pc(13) int local13 = 0; local13 < this.length; local13++) { + if (local3 == 0 || local13 == 0 || local3 >= this.width - 5 || this.length - 5 <= local13) { + this.flags[local3][local13] = 16777215; + } else { + this.flags[local3][local13] = 16777216; + } + } + } + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(III)V") + public final void flagTile(@OriginalArg(0) int startZ, @OriginalArg(2) int startX) { + @Pc(12) int z = startZ - this.zOffset; + @Pc(17) int x = startX - this.xOffset; + this.flags[x][z] |= 0x200000; + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(ZIIIIIIII)Z") + public final boolean isInsideOrOutsideRect(@OriginalArg(1) int destX, @OriginalArg(2) int z, @OriginalArg(3) int x, @OriginalArg(4) int size, @OriginalArg(5) int destWidth, @OriginalArg(6) int destBlockedSides, @OriginalArg(7) int destZ, @OriginalArg(8) int destLength) { + if (size > 1) { + return this.isInsideRect(size, destWidth, destX, destLength, z, destZ, size, x) || this.isOutsideRect(destX, destZ, destWidth, destBlockedSides, destLength, x, z, size, size); + } + + @Pc(41) int destX1 = destWidth + destX - 1; + @Pc(47) int destZ1 = destZ + destLength - 1; + if (destX <= x && destX1 >= x && destZ <= z && z <= destZ1) { + return true; + } else if (destX - 1 == x && z >= destZ && z <= destZ1 && (this.flags[x - this.xOffset][z - this.zOffset] & 0x8) == 0 && (destBlockedSides & 0x8) == 0) { + return true; + } else if (x == destX1 + 1 && destZ <= z && destZ1 >= z && (this.flags[x - this.xOffset][z - this.zOffset] & 0x80) == 0 && (destBlockedSides & 0x2) == 0) { + return true; + } else if (z == destZ - 1 && destX <= x && destX1 >= x && (this.flags[x - this.xOffset][z - this.zOffset] & 0x2) == 0 && (destBlockedSides & 0x4) == 0) { + return true; + } else { + return z == destZ1 + 1 && x >= destX && destX1 >= x && (this.flags[x - this.xOffset][z - this.zOffset] & 0x20) == 0 && (destBlockedSides & 0x1) == 0; + } + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(IBI)V") + public final void unflagGroundDecor(@OriginalArg(0) int startZ, @OriginalArg(2) int startX) { + @Pc(4) int x = startX - this.xOffset; + @Pc(9) int z = startZ - this.zOffset; + this.flags[x][z] &= 0xFFFBFFFF; + } + + @OriginalMember(owner = "client!mj", name = "b", descriptor = "(IIIII)Z") + public final boolean method3054(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + if (arg3 == arg2 && arg0 == arg1) { + return true; + } + @Pc(22) int local22 = arg1 - this.zOffset; + @Pc(33) int local33 = arg2 - this.xOffset; + if (local33 < 0 || this.width <= local33 || local22 < 0 || local22 >= this.length) { + return false; + } + @Pc(61) int local61 = arg0 - this.zOffset; + @Pc(66) int local66 = arg3 - this.xOffset; + @Pc(77) int local77; + if (local33 > local66) { + local77 = local33 - local66; + } else { + local77 = local66 - local33; + } + @Pc(96) int local96; + if (local22 <= local61) { + local96 = local61 - local22; + } else { + local96 = local22 - local61; + } + @Pc(117) int local117; + @Pc(111) int local111; + if (local77 <= local96) { + local111 = 32768; + local117 = local77 * 65536 / local96; + while (local61 != local22) { + if (local22 > local61) { + if ((this.flags[local66][local61] & 0x12C0102) != 0) { + return false; + } + local61++; + } else if (local22 < local61) { + if ((this.flags[local66][local61] & 0x12C0120) != 0) { + return false; + } + local61--; + } + local111 += local117; + if (local111 >= 65536) { + local111 -= 65536; + if (local66 < local33) { + if ((this.flags[local66][local61] & 0x12C0108) != 0) { + return false; + } + local66++; + } else if (local66 > local33) { + if ((this.flags[local66][local61] & 0x12C0180) != 0) { + return false; + } + local66--; + } + } + } + } else { + local117 = local96 * 65536 / local77; + local111 = 32768; + while (local33 != local66) { + if (local66 < local33) { + if ((this.flags[local66][local61] & 0x12C0108) != 0) { + return false; + } + local66++; + } else if (local33 < local66) { + if ((this.flags[local66][local61] & 0x12C0180) != 0) { + return false; + } + local66--; + } + local111 += local117; + if (local111 >= 65536) { + local111 -= 65536; + if (local61 < local22) { + if ((this.flags[local66][local61] & 0x12C0102) != 0) { + return false; + } + local61++; + } else if (local22 < local61) { + if ((this.flags[local66][local61] & 0x12C0120) != 0) { + return false; + } + local61--; + } + } + } + } + return (this.flags[local33][local22] & 0x1240100) == 0; + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(BIII)V") + private void unflag(@OriginalArg(1) int z, @OriginalArg(2) int x, @OriginalArg(3) int flags) { + this.flags[x][z] &= ~flags; + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(IIIZIII)V") + public final void unflagScenery(@OriginalArg(1) int startX, @OriginalArg(2) int width, @OriginalArg(3) boolean blockProjectiles, @OriginalArg(4) int angle, @OriginalArg(5) int length, @OriginalArg(6) int startZ) { + @Pc(6) int x = startX - this.xOffset; + @Pc(11) int z = startZ - this.zOffset; + @Pc(13) int flags = 256; + if (blockProjectiles) { + flags = 131328; + } + @Pc(40) int temp; + if (angle == 1 || angle == 3) { + temp = width; + width = length; + length = temp; + } + for (int x0 = x; x0 < x + width; x0++) { + if (x0 >= 0 && x0 < this.width) { + for (@Pc(61) int z0 = z; z0 < length + z; z0++) { + if (z0 >= 0 && this.length > z0) { + this.unflag(z0, x0, flags); + } + } + } + } + } + + @OriginalMember(owner = "client!mj", name = "b", descriptor = "(III)V") + public final void flagGroundDecor(@OriginalArg(0) int startX, @OriginalArg(1) int startZ) { + @Pc(4) int z = startZ - this.zOffset; + @Pc(17) int x = startX - this.xOffset; + this.flags[x][z] |= 0x40000; + } +} diff --git a/client/src/main/java/rt4/ColorImageCache.java b/client/src/main/java/rt4/ColorImageCache.java new file mode 100644 index 0000000..deceac1 --- /dev/null +++ b/client/src/main/java/rt4/ColorImageCache.java @@ -0,0 +1,98 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!pf") +public final class ColorImageCache { + + @OriginalMember(owner = "client!ib", name = "c", descriptor = "Lclient!qi;") + public static final ColorImageCacheEntry VALID = new ColorImageCacheEntry(0, 0); + @OriginalMember(owner = "client!pf", name = "d", descriptor = "I") + private int size = 0; + + @OriginalMember(owner = "client!pf", name = "m", descriptor = "I") + private int singleRow = -1; + + @OriginalMember(owner = "client!pf", name = "p", descriptor = "Lclient!ih;") + private LinkedList recentlyUsed = new LinkedList(); + + @OriginalMember(owner = "client!pf", name = "t", descriptor = "Z") + public boolean invalid = false; + + @OriginalMember(owner = "client!pf", name = "a", descriptor = "I") + private final int height; + + @OriginalMember(owner = "client!pf", name = "e", descriptor = "[Lclient!qi;") + private ColorImageCacheEntry[] entries; + + @OriginalMember(owner = "client!pf", name = "s", descriptor = "I") + private final int capacity; + + @OriginalMember(owner = "client!pf", name = "g", descriptor = "[[I") + private int[][] pixels; + + @OriginalMember(owner = "client!pf", name = "", descriptor = "(III)V") + public ColorImageCache(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int width) { + this.height = arg1; + this.entries = new ColorImageCacheEntry[this.height]; + this.capacity = arg0; + this.pixels = new int[this.capacity][width]; + } + + @OriginalMember(owner = "client!pf", name = "b", descriptor = "(I)V") + public final void clear() { + for (@Pc(3) int i = 0; i < this.capacity; i++) { + this.pixels[i] = null; + } + this.pixels = null; + this.entries = null; + this.recentlyUsed.clear(); + this.recentlyUsed = null; + } + + @OriginalMember(owner = "client!pf", name = "b", descriptor = "(II)[I") + public final int[] get(@OriginalArg(1) int row) { + if (this.height == this.capacity) { + this.invalid = this.entries[row] == null; + this.entries[row] = VALID; + return this.pixels[row]; + } else if (this.capacity == 1) { + this.invalid = this.singleRow != row; + this.singleRow = row; + return this.pixels[0]; + } else { + @Pc(29) ColorImageCacheEntry local29 = this.entries[row]; + if (local29 == null) { + this.invalid = true; + if (this.size < this.capacity) { + local29 = new ColorImageCacheEntry(row, this.size); + this.size++; + } else { + @Pc(66) ColorImageCacheEntry local66 = (ColorImageCacheEntry) this.recentlyUsed.tail(); + local29 = new ColorImageCacheEntry(row, local66.index); + this.entries[local66.row] = null; + local66.unlink(); + } + this.entries[row] = local29; + } else { + this.invalid = false; + } + this.recentlyUsed.addHead(local29); + return this.pixels[local29.index]; + } + } + + @OriginalMember(owner = "client!pf", name = "a", descriptor = "(B)[[I") + public final int[][] method3446() { + if (this.capacity != this.height) { + throw new RuntimeException("Can only retrieve a full image cache"); + } + for (@Pc(24) int local24 = 0; local24 < this.capacity; local24++) { + this.entries[local24] = VALID; + } + return this.pixels; + } +} diff --git a/client/src/main/java/rt4/ColorImageCacheEntry.java b/client/src/main/java/rt4/ColorImageCacheEntry.java new file mode 100644 index 0000000..f680add --- /dev/null +++ b/client/src/main/java/rt4/ColorImageCacheEntry.java @@ -0,0 +1,21 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!qi") +public final class ColorImageCacheEntry extends Node { + + @OriginalMember(owner = "client!qi", name = "s", descriptor = "I") + public final int index; + + @OriginalMember(owner = "client!qi", name = "q", descriptor = "I") + public final int row; + + @OriginalMember(owner = "client!qi", name = "", descriptor = "(II)V") + public ColorImageCacheEntry(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + this.index = arg1; + this.row = arg0; + } +} diff --git a/client/src/main/java/rt4/ColorUtils.java b/client/src/main/java/rt4/ColorUtils.java new file mode 100644 index 0000000..545c8d8 --- /dev/null +++ b/client/src/main/java/rt4/ColorUtils.java @@ -0,0 +1,181 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class ColorUtils { + @OriginalMember(owner = "client!ug", name = "b", descriptor = "[F") + public static final float[] aFloatArray28 = new float[4]; + + @OriginalMember(owner = "client!ib", name = "a", descriptor = "(II)I") + public static int rgbToHsl(@OriginalArg(1) int arg0) { + @Pc(10) double local10 = (double) (arg0 >> 16 & 0xFF) / 256.0D; + @Pc(19) double local19 = (double) (arg0 >> 8 & 0xFF) / 256.0D; + @Pc(25) double local25 = 0.0D; + @Pc(32) double local32 = (double) (arg0 & 0xFF) / 256.0D; + @Pc(34) double local34 = local10; + @Pc(37) double local37 = 0; + @Pc(39) double local39 = local10; + if (local10 > local19) { + local34 = local19; + } + if (local32 < local34) { + local34 = local32; + } + if (local19 > local10) { + local39 = local19; + } + if (local32 > local39) { + local39 = local32; + } + @Pc(72) double local72 = (local34 + local39) / 2.0D; + if (local34 != local39) { + if (local72 < 0.5D) { + local37 = (local39 - local34) / (local34 + local39); + } + if (local72 >= 0.5D) { + local37 = (local39 - local34) / (2.0D - local39 - local34); + } + if (local39 == local10) { + local25 = (local19 - local32) / (local39 - local34); + } else if (local19 == local39) { + local25 = (local32 - local10) / (local39 - local34) + 2.0D; + } else if (local39 == local32) { + local25 = (local10 - local19) / (-local34 + local39) + 4.0D; + } + } + @Pc(159) int local159 = (int) (local37 * 256.0D); + @Pc(164) int local164 = (int) (local72 * 256.0D); + local25 /= 6.0D; + if (local164 < 0) { + local164 = 0; + } else if (local164 > 255) { + local164 = 255; + } + @Pc(188) int local188 = (int) (local25 * 256.0D); + if (local159 < 0) { + local159 = 0; + } else if (local159 > 255) { + local159 = 255; + } + if (local164 > 243) { + local159 >>= 0x4; + } else if (local164 > 217) { + local159 >>= 0x3; + } else if (local164 > 192) { + local159 >>= 0x2; + } else if (local164 > 179) { + local159 >>= 0x1; + } + return (local188 >> 2 << 10) + (local159 >> 5 << 7) + (local164 >> 1); + } + + @OriginalMember(owner = "client!pf", name = "a", descriptor = "(II)[F") + public static float[] getRgbFloat(@OriginalArg(0) int arg0) { + @Pc(7) float local7 = FogManager.getLightingModelAmbient() + FogManager.getLight0Diffuse(); + @Pc(9) int local9 = FogManager.getLightColor(); + @Pc(11) float local11 = 0.58823526F; + aFloatArray28[3] = 1.0F; + @Pc(24) float local24 = (float) (local9 >> 16 & 0xFF) / 255.0F; + @Pc(33) float local33 = (float) (local9 >> 8 & 0xFF) / 255.0F; + aFloatArray28[1] = local7 * (float) (arg0 >> 8 & 0xFF) / 255.0F * local33 * local11; + aFloatArray28[0] = local7 * local11 * local24 * ((float) (arg0 >> 16 & 0xFF) / 255.0F); + @Pc(74) float local74 = (float) (local9 & 0xFF) / 255.0F; + aFloatArray28[2] = (float) (arg0 & 0xFF) / 255.0F * local74 * local11 * local7; + return aFloatArray28; + } + + @OriginalMember(owner = "client!gn", name = "a", descriptor = "(IZI)I") + public static int multiplyLightnessSafe(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + if (arg1 == -1) { + return 12345678; + } + arg0 = arg0 * (arg1 & 0x7F) >> 7; + if (arg0 < 2) { + arg0 = 2; + } else if (arg0 > 126) { + arg0 = 126; + } + return arg0 + (arg1 & 0xFF80); + } + + @OriginalMember(owner = "client!sj", name = "a", descriptor = "(BII)I") + public static int multiplyLightnessGrayscale(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + if (arg0 == -2) { + return 12345678; + } else if (arg0 == -1) { + if (arg1 < 2) { + arg1 = 2; + } else if (arg1 > 126) { + arg1 = 126; + } + return arg1; + } else { + arg1 = (arg0 & 0x7F) * arg1 >> 7; + if (arg1 < 2) { + arg1 = 2; + } else if (arg1 > 126) { + arg1 = 126; + } + return (arg0 & 0xFF80) + arg1; + } + } + + @OriginalMember(owner = "client!w", name = "f", descriptor = "(I)I") + public static int method4582(@OriginalArg(0) int arg0) { + if (arg0 < 2) { + arg0 = 2; + } else if (arg0 > 126) { + arg0 = 126; + } + return arg0; + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "(II)I") + public static int multiplyLightness(@OriginalArg(0) int a, @OriginalArg(1) int b) { + b = b * (a & 0x7F) >> 7; + if (b < 2) { + b = 2; + } else if (b > 126) { + b = 126; + } + return (a & 0xFF80) + b; + } + + @OriginalMember(owner = "client!w", name = "a", descriptor = "(II)I") + public static int multiplyLightness2(@OriginalArg(0) int a, @OriginalArg(1) int b) { + b = b * (a & 0x7F) >> 7; + if (b < 2) { + b = 2; + } else if (b > 126) { + b = 126; + } + return (a & 0xFF80) + b; + } + + @OriginalMember(owner = "client!ri", name = "a", descriptor = "(II)I") + public static int multiplyLightness3(@OriginalArg(0) int a, @OriginalArg(1) int b) { + b = b * (a & 0x7F) >> 7; + if (b < 2) { + b = 2; + } else if (b > 126) { + b = 126; + } + return (a & 0xFF80) + b; + } + + @OriginalMember(owner = "client!ed", name = "a", descriptor = "(IIII)I") + public static int method1309(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + if (arg0 > 243) { + arg1 >>= 0x4; + } else if (arg0 > 217) { + arg1 >>= 0x3; + } else if (arg0 > 192) { + arg1 >>= 0x2; + } else if (arg0 > 179) { + arg1 >>= 0x1; + } + return (arg0 >> 1) + (arg1 >> 5 << 7) + (arg2 >> 2 << 10); + } +} diff --git a/client/src/main/java/rt4/Component.java b/client/src/main/java/rt4/Component.java new file mode 100644 index 0000000..181910f --- /dev/null +++ b/client/src/main/java/rt4/Component.java @@ -0,0 +1,1219 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!be") +public final class Component { + + @OriginalMember(owner = "client!pf", name = "b", descriptor = "Lclient!n;") + public static final SoftLruHashTable sprites = new SoftLruHashTable(200); + + @OriginalMember(owner = "client!jk", name = "z", descriptor = "Lclient!n;") + public static final SoftLruHashTable models = new SoftLruHashTable(50); + + @OriginalMember(owner = "client!gn", name = "i", descriptor = "Lclient!n;") + public static final SoftLruHashTable fonts = new SoftLruHashTable(20); + + @OriginalMember(owner = "client!rc", name = "C", descriptor = "Z") + public static boolean aBoolean72 = false; + + @OriginalMember(owner = "client!be", name = "b", descriptor = "[Ljava/lang/Object;") + public Object[] onFriendTransmit; + + @OriginalMember(owner = "client!be", name = "d", descriptor = "[Ljava/lang/Object;") + public Object[] onStatTransmit; + + @OriginalMember(owner = "client!be", name = "e", descriptor = "[Ljava/lang/Object;") + public Object[] anObjectArray3; + + @OriginalMember(owner = "client!be", name = "g", descriptor = "[Ljava/lang/Object;") + public Object[] onVarcTransmit; + + @OriginalMember(owner = "client!be", name = "k", descriptor = "[Ljava/lang/Object;") + public Object[] onClickRepeat; + + @OriginalMember(owner = "client!be", name = "p", descriptor = "[Ljava/lang/Object;") + public Object[] onDrag; + + @OriginalMember(owner = "client!be", name = "q", descriptor = "[Lclient!na;") + public JagString[] ops; + + @OriginalMember(owner = "client!be", name = "s", descriptor = "[Lclient!na;") + public JagString[] invOptions; + + @OriginalMember(owner = "client!be", name = "t", descriptor = "[Ljava/lang/Object;") + public Object[] onInvTransmit; + + @OriginalMember(owner = "client!be", name = "u", descriptor = "[I") + public int[] inventoryTriggers; + + @OriginalMember(owner = "client!be", name = "v", descriptor = "[Ljava/lang/Object;") + public Object[] onWidgetsOpenClose; + + @OriginalMember(owner = "client!be", name = "x", descriptor = "Z") + public boolean vFlip; + + @OriginalMember(owner = "client!be", name = "z", descriptor = "[Ljava/lang/Object;") + public Object[] onHold; + + @OriginalMember(owner = "client!be", name = "E", descriptor = "[Ljava/lang/Object;") + public Object[] onScroll; + + @OriginalMember(owner = "client!be", name = "G", descriptor = "[I") + public int[] varcstrTriggers; + + @OriginalMember(owner = "client!be", name = "I", descriptor = "I") + public int type; + + @OriginalMember(owner = "client!be", name = "V", descriptor = "[I") + public int[] invSprite; + + @OriginalMember(owner = "client!be", name = "X", descriptor = "Z") + public boolean hFlip; + + @OriginalMember(owner = "client!be", name = "Z", descriptor = "I") + public int modelId; + + @OriginalMember(owner = "client!be", name = "bb", descriptor = "[Ljava/lang/Object;") + public Object[] onUse; + + @OriginalMember(owner = "client!be", name = "fb", descriptor = "[Ljava/lang/Object;") + public Object[] onDialogAbort; + + @OriginalMember(owner = "client!be", name = "gb", descriptor = "[I") + public int[] anIntArray37; + + @OriginalMember(owner = "client!be", name = "kb", descriptor = "[I") + public int[] varcTriggers; + + @OriginalMember(owner = "client!be", name = "qb", descriptor = "[Ljava/lang/Object;") + public Object[] onMinimapUnlock; + + @OriginalMember(owner = "client!be", name = "tb", descriptor = "[Ljava/lang/Object;") + public Object[] onKey; + + @OriginalMember(owner = "client!be", name = "ub", descriptor = "[Ljava/lang/Object;") + public Object[] onVarcstrTransmit; + + @OriginalMember(owner = "client!be", name = "Db", descriptor = "[Ljava/lang/Object;") + public Object[] onDragRelease; + + @OriginalMember(owner = "client!be", name = "Fb", descriptor = "[B") + public byte[] aByteArray7; + + @OriginalMember(owner = "client!be", name = "Jb", descriptor = "[Ljava/lang/Object;") + public Object[] onResize; + + @OriginalMember(owner = "client!be", name = "Nb", descriptor = "[Ljava/lang/Object;") + public Object[] onRelease; + + @OriginalMember(owner = "client!be", name = "Xb", descriptor = "[Ljava/lang/Object;") + public Object[] onMouseOver; + + @OriginalMember(owner = "client!be", name = "Yb", descriptor = "[I") + public int[] anIntArray39; + + @OriginalMember(owner = "client!be", name = "dc", descriptor = "[I") + public int[] objTypes; + + @OriginalMember(owner = "client!be", name = "fc", descriptor = "[Ljava/lang/Object;") + public Object[] onMsg; + + @OriginalMember(owner = "client!be", name = "lc", descriptor = "[Lclient!be;") + public Component[] createdComponents; + + @OriginalMember(owner = "client!be", name = "mc", descriptor = "[B") + public byte[] aByteArray8; + + @OriginalMember(owner = "client!be", name = "rc", descriptor = "[Ljava/lang/Object;") + public Object[] onStockTransmit; + + @OriginalMember(owner = "client!be", name = "tc", descriptor = "[Ljava/lang/Object;") + public Object[] onTimer; + + @OriginalMember(owner = "client!be", name = "yc", descriptor = "[I") + public int[] invOffsetX; + + @OriginalMember(owner = "client!be", name = "Ac", descriptor = "[I") + public int[] statTriggers; + + @OriginalMember(owner = "client!be", name = "Bc", descriptor = "[I") + public int[] cs1ComparisonOpcodes; + + @OriginalMember(owner = "client!be", name = "Cc", descriptor = "[Ljava/lang/Object;") + public Object[] onMouseRepeat; + + @OriginalMember(owner = "client!be", name = "Ic", descriptor = "[Ljava/lang/Object;") + public Object[] onMouseLeave; + + @OriginalMember(owner = "client!be", name = "Jc", descriptor = "[Ljava/lang/Object;") + public Object[] onVarpTransmit; + + @OriginalMember(owner = "client!be", name = "Nc", descriptor = "[I") + public int[] varpTriggers; + + @OriginalMember(owner = "client!be", name = "Tc", descriptor = "[I") + public int[] anIntArray45; + + @OriginalMember(owner = "client!be", name = "Xc", descriptor = "[Ljava/lang/Object;") + public Object[] onDragStart; + + @OriginalMember(owner = "client!be", name = "ad", descriptor = "[[I") + public int[][] cs1Scripts; + + @OriginalMember(owner = "client!be", name = "bd", descriptor = "[I") + public int[] anIntArray46; + + @OriginalMember(owner = "client!be", name = "cd", descriptor = "[I") + public int[] invOffsetY; + + @OriginalMember(owner = "client!be", name = "gd", descriptor = "[Ljava/lang/Object;") + public Object[] onUseWith; + + @OriginalMember(owner = "client!be", name = "kd", descriptor = "[I") + public int[] cs1ComparisonOperands; + + @OriginalMember(owner = "client!be", name = "nd", descriptor = "[I") + public int[] anIntArray49; + + @OriginalMember(owner = "client!be", name = "qd", descriptor = "[Ljava/lang/Object;") + public Object[] onClanTransmit; + + @OriginalMember(owner = "client!be", name = "rd", descriptor = "[Ljava/lang/Object;") + public Object[] onOptionClick; + + @OriginalMember(owner = "client!be", name = "sd", descriptor = "[Ljava/lang/Object;") + public Object[] onMiscTransmit; + + @OriginalMember(owner = "client!be", name = "wd", descriptor = "[I") + public int[] objCounts; + + @OriginalMember(owner = "client!be", name = "H", descriptor = "Z") + public boolean spriteTiling = false; + + @OriginalMember(owner = "client!be", name = "f", descriptor = "I") + public int aspectHeight = 1; + + @OriginalMember(owner = "client!be", name = "R", descriptor = "I") + public int height = 0; + + @OriginalMember(owner = "client!be", name = "S", descriptor = "I") + public int halign = 0; + + @OriginalMember(owner = "client!be", name = "j", descriptor = "I") + public int modelZoom = 100; + + @OriginalMember(owner = "client!be", name = "h", descriptor = "B") + public byte xMode = 0; + + @OriginalMember(owner = "client!be", name = "jb", descriptor = "I") + public int y = 0; + + @OriginalMember(owner = "client!be", name = "nb", descriptor = "I") + public int dragDeadzone = 0; + + @OriginalMember(owner = "client!be", name = "W", descriptor = "I") + public int activeModelSeqId = -1; + + @OriginalMember(owner = "client!be", name = "o", descriptor = "S") + public short aShort10 = 3000; + + @OriginalMember(owner = "client!be", name = "D", descriptor = "I") + public int modelXAngle = 0; + + @OriginalMember(owner = "client!be", name = "Eb", descriptor = "I") + public int anInt481 = 0; + + @OriginalMember(owner = "client!be", name = "A", descriptor = "Z") + public boolean modelOrtho = false; + + @OriginalMember(owner = "client!be", name = "zb", descriptor = "Z") + public boolean filled = false; + + @OriginalMember(owner = "client!be", name = "y", descriptor = "I") + public int dragDeadtime = 0; + + @OriginalMember(owner = "client!be", name = "hb", descriptor = "I") + public int scrollY = 0; + + @OriginalMember(owner = "client!be", name = "xb", descriptor = "I") + public int spriteId = -1; + + @OriginalMember(owner = "client!be", name = "eb", descriptor = "I") + public int vpadding = 0; + + @OriginalMember(owner = "client!be", name = "a", descriptor = "Z") + public boolean hidden = false; + + @OriginalMember(owner = "client!be", name = "Zb", descriptor = "I") + public int lineWidth = 1; + + @OriginalMember(owner = "client!be", name = "Mb", descriptor = "I") + public int anInt484 = -1; + + @OriginalMember(owner = "client!be", name = "O", descriptor = "I") + public int createdComponentId = -1; + + @OriginalMember(owner = "client!be", name = "J", descriptor = "Z") + public boolean aBoolean24 = false; + + @OriginalMember(owner = "client!ob", name = "e", descriptor = "Lclient!na;") + public static final JagString EMPTY_STRING = JagString.parse(""); + @OriginalMember(owner = "client!be", name = "Sb", descriptor = "Lclient!na;") + public JagString optionSuffix = EMPTY_STRING; + + @OriginalMember(owner = "client!be", name = "i", descriptor = "Z") + public boolean aBoolean19 = false; + + @OriginalMember(owner = "client!be", name = "yb", descriptor = "I") + public int valign = 0; + + @OriginalMember(owner = "client!be", name = "lb", descriptor = "I") + public int anInt470 = -1; + + @OriginalMember(owner = "client!be", name = "m", descriptor = "Z") + public boolean aBoolean20 = false; + + @OriginalMember(owner = "client!be", name = "pc", descriptor = "I") + public int anInt499 = -1; + + @OriginalMember(owner = "client!be", name = "Qb", descriptor = "B") + public byte dynamicHeightValue = 0; + + @OriginalMember(owner = "client!be", name = "bc", descriptor = "I") + public int scrollMaxV = 0; + + @OriginalMember(owner = "client!be", name = "Y", descriptor = "Z") + public boolean dragRenderBehavior = false; + + @OriginalMember(owner = "client!be", name = "ob", descriptor = "Z") + public boolean shadowed = false; + + @OriginalMember(owner = "client!be", name = "cb", descriptor = "I") + public int rectangleLoop = -1; + + @OriginalMember(owner = "client!be", name = "jc", descriptor = "I") + public int anInt496 = 1; + + @OriginalMember(owner = "client!be", name = "Cb", descriptor = "I") + public int overColor = 0; + + @OriginalMember(owner = "client!be", name = "Hb", descriptor = "Z") + public boolean if3 = false; + + @OriginalMember(owner = "client!di", name = "F", descriptor = "Lclient!bf;") + public static final ServerActiveProperties DEFAULT_SERVER_ACTIVE_PROPERTIES = new ServerActiveProperties(0, -1); + + @OriginalMember(owner = "client!be", name = "gc", descriptor = "Lclient!bf;") + public ServerActiveProperties properties = DEFAULT_SERVER_ACTIVE_PROPERTIES; + + @OriginalMember(owner = "client!be", name = "cc", descriptor = "I") + public int activeColor = 0; + + @OriginalMember(owner = "client!be", name = "Gb", descriptor = "Lclient!na;") + public JagString text = EMPTY_STRING; + + @OriginalMember(owner = "client!be", name = "n", descriptor = "I") + public int width = 0; + + @OriginalMember(owner = "client!be", name = "Wb", descriptor = "I") + public int scrollX = 0; + + @OriginalMember(owner = "client!be", name = "sb", descriptor = "Z") + public boolean noClickThrough = false; + + @OriginalMember(owner = "client!be", name = "U", descriptor = "I") + private int activeModelId = -1; + + @OriginalMember(owner = "client!be", name = "N", descriptor = "I") + public int overlayer = -1; + + @OriginalMember(owner = "client!be", name = "pb", descriptor = "I") + public int aspectWidth = 1; + + @OriginalMember(owner = "client!be", name = "Q", descriptor = "I") + public int objId = -1; + + @OriginalMember(owner = "client!be", name = "vb", descriptor = "I") + public int anInt475 = 0; + + @OriginalMember(owner = "client!be", name = "nc", descriptor = "I") + public int modelZOffset = 0; + + @OriginalMember(owner = "client!be", name = "Dc", descriptor = "Lclient!na;") + public JagString optionBase = EMPTY_STRING; + + @OriginalMember(owner = "client!be", name = "Lc", descriptor = "I") + public int updatedVarcsReaderIndex = 0; + + @OriginalMember(owner = "client!be", name = "w", descriptor = "I") + public int baseWidth = 0; + + @OriginalMember(owner = "client!be", name = "Mc", descriptor = "I") + public int invMarginX = 0; + + @OriginalMember(owner = "client!be", name = "Ib", descriptor = "I") + public int lastTransmitTimer = -1; + + @OriginalMember(owner = "client!be", name = "c", descriptor = "Z") + public boolean hasAlpha = false; + + @OriginalMember(owner = "client!be", name = "F", descriptor = "I") + public int anInt451 = 0; + + @OriginalMember(owner = "client!be", name = "wb", descriptor = "I") + public int alpha = 0; + + @OriginalMember(owner = "client!be", name = "hc", descriptor = "I") + public int modelXOffset = 0; + + @OriginalMember(owner = "client!be", name = "Ub", descriptor = "Lclient!na;") + public JagString optionCircumfix = EMPTY_STRING; + + @OriginalMember(owner = "client!be", name = "Lb", descriptor = "I") + public int modelRotationSpeed = 0; + + @OriginalMember(owner = "client!be", name = "r", descriptor = "Lclient!na;") + public JagString activeText = EMPTY_STRING; + + @OriginalMember(owner = "client!be", name = "Pc", descriptor = "I") + public int outlineThickness = 0; + + @OriginalMember(owner = "client!be", name = "oc", descriptor = "I") + public int anInt498 = -1; + + @OriginalMember(owner = "client!be", name = "Rb", descriptor = "I") + public int updatedVarcstrsReaderIndex = 0; + + @OriginalMember(owner = "client!be", name = "ic", descriptor = "I") + public int anInt495 = 0; + + @OriginalMember(owner = "client!be", name = "Sc", descriptor = "I") + public int invMarginY = 0; + + @OriginalMember(owner = "client!be", name = "Tb", descriptor = "I") + public int baseHeight = 0; + + @OriginalMember(owner = "client!be", name = "Fc", descriptor = "I") + public int id = -1; + + @OriginalMember(owner = "client!be", name = "Yc", descriptor = "I") + public int activeSpriteId = -1; + + @OriginalMember(owner = "client!be", name = "zc", descriptor = "B") + public byte yMode = 0; + + @OriginalMember(owner = "client!be", name = "qc", descriptor = "I") + public int anInt500 = 0; + + @OriginalMember(owner = "client!be", name = "uc", descriptor = "I") + public int font = -1; + + @OriginalMember(owner = "client!be", name = "Pb", descriptor = "I") + public int scrollMaxH = 0; + + @OriginalMember(owner = "client!be", name = "ec", descriptor = "I") + public int updatedInventoriesReaderIndex = 0; + + @OriginalMember(owner = "client!be", name = "Vc", descriptor = "S") + public short aShort11 = 0; + + @OriginalMember(owner = "client!be", name = "ed", descriptor = "I") + public int angle2d = 0; + + @OriginalMember(owner = "client!be", name = "id", descriptor = "I") + public int modelSeqId = -1; + + @OriginalMember(owner = "client!be", name = "Rc", descriptor = "Lclient!na;") + public JagString option = LocalizedText.OK; + + @OriginalMember(owner = "client!be", name = "Gc", descriptor = "I") + public int modelYOffset = 0; + + @OriginalMember(owner = "client!be", name = "vc", descriptor = "I") + public int objCount = 0; + + @OriginalMember(owner = "client!be", name = "Uc", descriptor = "I") + public int rectangle = -1; + + @OriginalMember(owner = "client!be", name = "K", descriptor = "I") + public int clientCode = 0; + + @OriginalMember(owner = "client!be", name = "Oc", descriptor = "I") + public int shadowColor = 0; + + @OriginalMember(owner = "client!be", name = "fd", descriptor = "Lclient!be;") + public Component aClass13_5 = null; + + @OriginalMember(owner = "client!be", name = "od", descriptor = "I") + public int updatedStatsReaderIndex = 0; + + @OriginalMember(owner = "client!be", name = "ab", descriptor = "I") + public int modelType = 1; + + @OriginalMember(owner = "client!be", name = "md", descriptor = "Z") + public boolean aBoolean34 = false; + + @OriginalMember(owner = "client!be", name = "hd", descriptor = "B") + public byte dynamicWidthValue = 0; + + @OriginalMember(owner = "client!be", name = "Wc", descriptor = "I") + private int activeModelType = 1; + + @OriginalMember(owner = "client!be", name = "pd", descriptor = "I") + public int anInt526 = 0; + + @OriginalMember(owner = "client!be", name = "ld", descriptor = "I") + public int modelYAngle = 0; + + @OriginalMember(owner = "client!be", name = "T", descriptor = "Z") + public boolean aBoolean25 = false; + + @OriginalMember(owner = "client!be", name = "vd", descriptor = "I") + public int baseX = 0; + + @OriginalMember(owner = "client!be", name = "jd", descriptor = "I") + public int x = 0; + + @OriginalMember(owner = "client!be", name = "l", descriptor = "I") + public int baseY = 0; + + @OriginalMember(owner = "client!be", name = "Bb", descriptor = "Z") + public boolean objDrawText = true; + + @OriginalMember(owner = "client!be", name = "Kc", descriptor = "I") + public int anInt510 = 0; + + @OriginalMember(owner = "client!be", name = "mb", descriptor = "I") + public int updatedVarpsReaderIndex = 0; + + @OriginalMember(owner = "client!be", name = "rb", descriptor = "I") + public int color = 0; + + @OriginalMember(owner = "client!be", name = "xd", descriptor = "I") + public int buttonType = 0; + + @OriginalMember(owner = "client!ec", name = "a", descriptor = "(II)V") + public static void clean() { + sprites.clean(50); + models.clean(50); + fonts.clean(50); + } + + @OriginalMember(owner = "client!lh", name = "d", descriptor = "(B)V") + public static void clear() { + sprites.clear(); + models.clear(); + fonts.clear(); + } + + @OriginalMember(owner = "client!da", name = "h", descriptor = "(B)V") + public static void removeSoft() { + sprites.removeSoft(); + models.removeSoft(); + fonts.removeSoft(); + } + + @OriginalMember(owner = "client!be", name = "a", descriptor = "(IIB)V") + public final void method477(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + if (this.anIntArray39 == null || this.anIntArray39.length <= arg0) { + @Pc(18) int[] local18 = new int[arg0 + 1]; + if (this.anIntArray39 != null) { + @Pc(24) int local24; + for (local24 = 0; local24 < this.anIntArray39.length; local24++) { + local18[local24] = this.anIntArray39[local24]; + } + for (local24 = this.anIntArray39.length; local24 < arg0; local24++) { + local18[local24] = -1; + } + } + this.anIntArray39 = local18; + } + this.anIntArray39[arg0] = arg1; + } + + @OriginalMember(owner = "client!be", name = "a", descriptor = "(I)Z") + public final boolean method478() { + if (this.anIntArray37 != null) { + return true; + } + @Pc(18) SoftwareIndexedSprite local18 = SpriteLoader.loadSoftwareIndexedSprite(this.spriteId, InterfaceList.aClass153_12); + if (local18 == null) { + return false; + } + local18.trim(); + this.anIntArray37 = new int[local18.height]; + this.anIntArray45 = new int[local18.height]; + for (@Pc(37) int local37 = 0; local37 < local18.height; local37++) { + @Pc(47) int local47 = 0; + @Pc(50) int local50 = local18.width; + @Pc(52) int local52; + for (local52 = 0; local52 < local18.width; local52++) { + if (local18.pixels[local18.width * local37 + local52] != 0) { + local47 = local52; + break; + } + } + for (local52 = local47; local52 < local18.width; local52++) { + if (local18.pixels[local37 * local18.width + local52] == 0) { + local50 = local52; + break; + } + } + this.anIntArray37[local37] = local47; + this.anIntArray45[local37] = local50 - local47; + } + return true; + } + + @OriginalMember(owner = "client!be", name = "a", descriptor = "(BLclient!na;I)V") + public final void method480(@OriginalArg(1) JagString arg0, @OriginalArg(2) int arg1) { + if (this.ops == null || this.ops.length <= arg1) { + @Pc(23) JagString[] local23 = new JagString[arg1 + 1]; + if (this.ops != null) { + for (@Pc(30) int local30 = 0; local30 < this.ops.length; local30++) { + local23[local30] = this.ops[local30]; + } + } + this.ops = local23; + } + this.ops[arg1] = arg0; + } + + @OriginalMember(owner = "client!be", name = "a", descriptor = "(ILclient!wa;)V") + public final void decodeIf1(@OriginalArg(1) Buffer buffer) { + this.if3 = false; + this.type = buffer.g1(); + this.buttonType = buffer.g1(); + this.clientCode = buffer.g2(); + this.baseX = buffer.g2b(); + this.baseY = buffer.g2b(); + this.baseWidth = buffer.g2(); + this.baseHeight = buffer.g2(); + this.dynamicWidthValue = 0; + this.dynamicHeightValue = 0; + this.yMode = 0; + this.xMode = 0; + this.alpha = buffer.g1(); + this.overlayer = buffer.g2(); + if (this.overlayer == 65535) { + this.overlayer = -1; + } else { + this.overlayer += this.id & 0xFFFF0000; + } + this.anInt470 = buffer.g2(); + if (this.anInt470 == 65535) { + this.anInt470 = -1; + } + @Pc(109) int local109 = buffer.g1(); + @Pc(125) int local125; + if (local109 > 0) { + this.cs1ComparisonOperands = new int[local109]; + this.cs1ComparisonOpcodes = new int[local109]; + for (local125 = 0; local125 < local109; local125++) { + this.cs1ComparisonOpcodes[local125] = buffer.g1(); + this.cs1ComparisonOperands[local125] = buffer.g2(); + } + } + local125 = buffer.g1(); + @Pc(164) int local164; + @Pc(175) int local175; + @Pc(183) int local183; + if (local125 > 0) { + this.cs1Scripts = new int[local125][]; + for (local164 = 0; local164 < local125; local164++) { + local175 = buffer.g2(); + this.cs1Scripts[local164] = new int[local175]; + for (local183 = 0; local183 < local175; local183++) { + this.cs1Scripts[local164][local183] = buffer.g2(); + if (this.cs1Scripts[local164][local183] == 65535) { + this.cs1Scripts[local164][local183] = -1; + } + } + } + } + if (this.type == 0) { + this.scrollMaxV = buffer.g2(); + this.hidden = buffer.g1() == 1; + } + if (this.type == 1) { + buffer.g2(); + buffer.g1(); + } + local164 = 0; + if (this.type == 2) { + this.dynamicHeightValue = 3; + this.objCounts = new int[this.baseWidth * this.baseHeight]; + this.objTypes = new int[this.baseHeight * this.baseWidth]; + this.dynamicWidthValue = 3; + local175 = buffer.g1(); + local183 = buffer.g1(); + if (local175 == 1) { + local164 = 268435456; + } + @Pc(312) int local312 = buffer.g1(); + if (local183 == 1) { + local164 |= 0x40000000; + } + if (local312 == 1) { + local164 |= Integer.MIN_VALUE; + } + @Pc(333) int local333 = buffer.g1(); + if (local333 == 1) { + local164 |= 0x20000000; + } + this.invMarginX = buffer.g1(); + this.invMarginY = buffer.g1(); + this.invOffsetY = new int[20]; + this.invOffsetX = new int[20]; + this.invSprite = new int[20]; + @Pc(364) int i; + for (i = 0; i < 20; i++) { + @Pc(371) int hasSprite = buffer.g1(); + if (hasSprite == 1) { + this.invOffsetX[i] = buffer.g2b(); + this.invOffsetY[i] = buffer.g2b(); + this.invSprite[i] = buffer.g4(); + } else { + this.invSprite[i] = -1; + } + } + this.invOptions = new JagString[5]; + for (i = 0; i < 5; i++) { + @Pc(418) JagString option = buffer.gjstr(); + if (option.length() > 0) { + this.invOptions[i] = option; + local164 |= 0x1 << i + 23; + } + } + } + if (this.type == 3) { + this.filled = buffer.g1() == 1; + } + if (this.type == 4 || this.type == 1) { + this.halign = buffer.g1(); + this.valign = buffer.g1(); // this is an educated guess, follow arg8 in Font.renderParagraphAlpha + this.vpadding = buffer.g1(); // this is an educated guess, follow arg9 in Font.renderParagraphAlpha + this.font = buffer.g2(); + if (this.font == 65535) { + this.font = -1; + } + this.shadowed = buffer.g1() == 1; + } + if (this.type == 4) { + this.text = buffer.gjstr(); + this.activeText = buffer.gjstr(); + } + if (this.type == 1 || this.type == 3 || this.type == 4) { + this.color = buffer.g4(); + } + if (this.type == 3 || this.type == 4) { + this.activeColor = buffer.g4(); + this.overColor = buffer.g4(); + this.anInt475 = buffer.g4(); + } + if (this.type == 5) { + this.spriteId = buffer.g4(); + this.activeSpriteId = buffer.g4(); + } + if (this.type == 6) { + this.modelType = 1; + this.modelId = buffer.g2(); + if (this.modelId == 65535) { + this.modelId = -1; + } + this.activeModelType = 1; + this.activeModelId = buffer.g2(); + if (this.activeModelId == 65535) { + this.activeModelId = -1; + } + this.modelSeqId = buffer.g2(); + if (this.modelSeqId == 65535) { + this.modelSeqId = -1; + } + this.activeModelSeqId = buffer.g2(); + if (this.activeModelSeqId == 65535) { + this.activeModelSeqId = -1; + } + this.modelZoom = buffer.g2(); + this.modelXAngle = buffer.g2(); + this.modelYAngle = buffer.g2(); + } + if (this.type == 7) { + this.dynamicHeightValue = 3; + this.dynamicWidthValue = 3; + this.objCounts = new int[this.baseHeight * this.baseWidth]; + this.objTypes = new int[this.baseWidth * this.baseHeight]; + this.halign = buffer.g1(); + this.font = buffer.g2(); + if (this.font == 65535) { + this.font = -1; + } + this.shadowed = buffer.g1() == 1; + this.color = buffer.g4(); + this.invMarginX = buffer.g2b(); + this.invMarginY = buffer.g2b(); + int invHasOptions = buffer.g1(); + if (invHasOptions == 1) { + local164 |= 0x40000000; + } + this.invOptions = new JagString[5]; + for (int i = 0; i < 5; i++) { + @Pc(756) JagString option = buffer.gjstr(); + if (option.length() > 0) { + this.invOptions[i] = option; + local164 |= 0x1 << i + 23; + } + } + } + if (this.type == 8) { + this.text = buffer.gjstr(); + } + if (this.buttonType == 2 || this.type == 2) { + this.optionCircumfix = buffer.gjstr(); + this.optionSuffix = buffer.gjstr(); + local175 = buffer.g2() & 0x3F; + local164 |= local175 << 11; + } + if (this.buttonType == 1 || this.buttonType == 4 || this.buttonType == 5 || this.buttonType == 6) { + this.option = buffer.gjstr(); + if (this.option.length() == 0) { + if (this.buttonType == 1) { + this.option = LocalizedText.OK; + } + if (this.buttonType == 4) { + this.option = LocalizedText.SELECT; + } + if (this.buttonType == 5) { + this.option = LocalizedText.SELECT; + } + if (this.buttonType == 6) { + this.option = LocalizedText.CONTINUE; + } + } + } + if (this.buttonType == 1 || this.buttonType == 4 || this.buttonType == 5) { + local164 |= 0x400000; + } + if (this.buttonType == 6) { + local164 |= 0x1; + } + this.properties = new ServerActiveProperties(local164, -1); + } + + @OriginalMember(owner = "client!be", name = "a", descriptor = "(ZI)Lclient!qf;") + public final Sprite method482(@OriginalArg(1) int arg0) { + aBoolean72 = false; + if (arg0 < 0 || arg0 >= this.invSprite.length) { + return null; + } + @Pc(29) int local29 = this.invSprite[arg0]; + if (local29 == -1) { + return null; + } + @Pc(43) Sprite local43 = (Sprite) sprites.get(local29); + if (local43 != null) { + return local43; + } + local43 = SpriteLoader.loadSprites(local29, InterfaceList.aClass153_12); + if (local43 == null) { + aBoolean72 = true; + } else { + sprites.put(local43, local29); + } + return local43; + } + + @OriginalMember(owner = "client!be", name = "b", descriptor = "(ILclient!wa;)[Ljava/lang/Object;") + private Object[] method485(@OriginalArg(1) Buffer arg0) { + @Pc(11) int local11 = arg0.g1(); + if (local11 == 0) { + return null; + } + @Pc(26) Object[] local26 = new Object[local11]; + for (@Pc(28) int local28 = 0; local28 < local11; local28++) { + @Pc(35) int local35 = arg0.g1(); + if (local35 == 0) { + local26[local28] = Integer.valueOf(arg0.g4()); + } else if (local35 == 1) { + local26[local28] = arg0.gjstr(); + } + } + this.aBoolean25 = true; + return local26; + } + + @OriginalMember(owner = "client!be", name = "a", descriptor = "(Lclient!wa;Z)[I") + private int[] method486(@OriginalArg(0) Buffer arg0) { + @Pc(9) int local9 = arg0.g1(); + if (local9 == 0) { + return null; + } + @Pc(19) int[] local19 = new int[local9]; + for (@Pc(26) int local26 = 0; local26 < local9; local26++) { + local19[local26] = arg0.g4(); + } + return local19; + } + + @OriginalMember(owner = "client!be", name = "b", descriptor = "(III)V") + public final void swapObjs(@OriginalArg(0) int oldIndex, @OriginalArg(1) int newIndex) { + @Pc(8) int tmpObj = this.objTypes[newIndex]; + this.objTypes[newIndex] = this.objTypes[oldIndex]; + this.objTypes[oldIndex] = tmpObj; + + @Pc(34) int tmpCount = this.objCounts[newIndex]; + this.objCounts[newIndex] = this.objCounts[oldIndex]; + this.objCounts[oldIndex] = tmpCount; + } + + @OriginalMember(owner = "client!be", name = "a", descriptor = "(ILclient!tk;IIIZLclient!hh;)Lclient!ak;") + public final Model method488(@OriginalArg(0) int arg0, @OriginalArg(1) SeqType arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) boolean arg4, @OriginalArg(6) PlayerAppearance arg5) { + aBoolean72 = false; + @Pc(10) int local10; + @Pc(13) int local13; + if (arg4) { + local10 = this.activeModelType; + local13 = this.activeModelId; + } else { + local13 = this.modelId; + local10 = this.modelType; + } + if (local10 == 0) { + return null; + } else if (local10 == 1 && local13 == -1) { + return null; + } else { + @Pc(61) Model local61; + if (local10 == 1) { + local61 = (Model) models.get((local10 << 16) + local13); + if (local61 == null) { + @Pc(69) RawModel local69 = RawModel.create(InterfaceList.aClass153_85, local13); + if (local69 == null) { + aBoolean72 = true; + return null; + } + local61 = local69.createModel(64, 768, -50, -10, -50); + models.put(local61, local13 + (local10 << 16)); + } + if (arg1 != null) { + local61 = arg1.method4215(local61, arg0, arg3, arg2); + } + return local61; + } else if (local10 == 2) { + local61 = NpcTypeList.get(local13).getHeadModel(arg1, arg3, arg0, arg2); + if (local61 == null) { + aBoolean72 = true; + return null; + } else { + return local61; + } + } else if (local10 == 3) { + if (arg5 == null) { + return null; + } + local61 = arg5.method1956(arg3, arg1, arg2, arg0); + if (local61 == null) { + aBoolean72 = true; + return null; + } else { + return local61; + } + } else if (local10 == 4) { + @Pc(164) ObjType local164 = ObjTypeList.get(local13); + @Pc(173) Model local173 = local164.getModel(arg0, arg3, arg1, 10, arg2); + if (local173 == null) { + aBoolean72 = true; + return null; + } else { + return local173; + } + } else if (local10 == 6) { + local61 = NpcTypeList.get(local13).getBodyModel(null, 0, 0, arg0, arg3, arg2, null, 0, arg1); + if (local61 == null) { + aBoolean72 = true; + return null; + } else { + return local61; + } + } else if (local10 != 7) { + return null; + } else if (arg5 == null) { + return null; + } else { + @Pc(227) int local227 = this.modelId >>> 16; + @Pc(232) int local232 = this.modelId & 0xFFFF; + @Pc(235) int local235 = this.anInt498; + @Pc(246) Model local246 = arg5.method1946(arg0, local235, local227, arg3, arg1, arg2, local232); + if (local246 == null) { + aBoolean72 = true; + return null; + } else { + return local246; + } + } + } + } + + @OriginalMember(owner = "client!be", name = "a", descriptor = "(BZ)Lclient!qf;") + public final Sprite method489(@OriginalArg(1) boolean arg0) { + aBoolean72 = false; + @Pc(12) int local12; + if (arg0) { + local12 = this.activeSpriteId; + } else { + local12 = this.spriteId; + } + if (local12 == -1) { + return null; + } + @Pc(66) long local66 = ((this.vFlip ? 1L : 0L) << 38) + ((this.hasAlpha ? 1L : 0L) << 35) + (long) local12 + ((long) this.outlineThickness << 36) + ((this.hFlip ? 1L : 0L) << 39) + ((long) this.shadowColor << 40); + @Pc(72) Sprite local72 = (Sprite) sprites.get(local66); + if (local72 != null) { + return local72; + } + @Pc(85) SoftwareSprite local85; + if (this.hasAlpha) { + local85 = SoftwareSprite.loadSoftwareAlphaSprite(InterfaceList.aClass153_12, local12); + } else { + local85 = SpriteLoader.loadSoftwareSprite(0, InterfaceList.aClass153_12, local12); + } + if (local85 == null) { + aBoolean72 = true; + return null; + } + if (this.vFlip) { + local85.method309(); + } + if (this.hFlip) { + local85.method299(); + } + if (this.outlineThickness > 0) { + local85.method298(this.outlineThickness); + } + if (this.outlineThickness >= 1) { + local85.drawOutline(1); + } + if (this.outlineThickness >= 2) { + local85.drawOutline(16777215); + } + if (this.shadowColor != 0) { + local85.drawShadow(this.shadowColor); + } + if (!GlRenderer.enabled) { + local72 = local85; + } else if (local85 instanceof SoftwareAlphaSprite) { + local72 = new GlAlphaSprite(local85); + } else { + local72 = new GlSprite(local85); + } + sprites.put(local72, local66); + return local72; + } + + @OriginalMember(owner = "client!be", name = "c", descriptor = "(ILclient!wa;)V") + public final void decodeIf3(@OriginalArg(1) Buffer buffer) { + this.if3 = true; + buffer.offset++; + this.type = buffer.g1(); + if ((this.type & 0x80) != 0) { + this.type &= 0x7F; + buffer.gjstr(); + } + this.clientCode = buffer.g2(); + this.baseX = buffer.g2b(); + this.baseY = buffer.g2b(); + this.baseWidth = buffer.g2(); + this.baseHeight = buffer.g2(); + this.dynamicWidthValue = buffer.g1b(); + this.dynamicHeightValue = buffer.g1b(); + this.yMode = buffer.g1b(); + this.xMode = buffer.g1b(); + this.overlayer = buffer.g2(); + if (this.overlayer == 65535) { + this.overlayer = -1; + } else { + this.overlayer = (this.id & 0xFFFF0000) + this.overlayer; + } + this.hidden = buffer.g1() == 1; + if (this.type == 0) { + this.scrollMaxH = buffer.g2(); + this.scrollMaxV = buffer.g2(); + this.noClickThrough = buffer.g1() == 1; + } + @Pc(175) int local175; + if (this.type == 5) { + this.spriteId = buffer.g4(); + this.angle2d = buffer.g2(); + local175 = buffer.g1(); + this.hasAlpha = (local175 & 0x2) != 0; + this.spriteTiling = (local175 & 0x1) != 0; + this.alpha = buffer.g1(); + this.outlineThickness = buffer.g1(); + this.shadowColor = buffer.g4(); + this.vFlip = buffer.g1() == 1; + this.hFlip = buffer.g1() == 1; + } + if (this.type == 6) { + this.modelType = 1; + this.modelId = buffer.g2(); + if (this.modelId == 65535) { + this.modelId = -1; + } + this.anInt495 = buffer.g2b(); + this.anInt481 = buffer.g2b(); + this.modelXAngle = buffer.g2(); + this.modelYAngle = buffer.g2(); + this.modelYOffset = buffer.g2(); + this.modelZoom = buffer.g2(); + this.modelSeqId = buffer.g2(); + if (this.modelSeqId == 65535) { + this.modelSeqId = -1; + } + this.modelOrtho = buffer.g1() == 1; + this.aShort11 = (short) buffer.g2(); + this.aShort10 = (short) buffer.g2(); + this.aBoolean34 = buffer.g1() == 1; + if (this.dynamicWidthValue != 0) { + this.anInt451 = buffer.g2(); + } + if (this.dynamicHeightValue != 0) { + this.anInt526 = buffer.g2(); + } + } + if (this.type == 4) { + this.font = buffer.g2(); + if (this.font == 65535) { + this.font = -1; + } + this.text = buffer.gjstr(); + this.vpadding = buffer.g1(); + this.halign = buffer.g1(); + this.valign = buffer.g1(); + this.shadowed = buffer.g1() == 1; + this.color = buffer.g4(); + } + if (this.type == 3) { + this.color = buffer.g4(); + this.filled = buffer.g1() == 1; + this.alpha = buffer.g1(); + } + if (this.type == 9) { + this.lineWidth = buffer.g1(); + this.color = buffer.g4(); + this.aBoolean20 = buffer.g1() == 1; + } + local175 = buffer.g3(); + @Pc(471) int local471 = buffer.g1(); + @Pc(497) int local497; + if (local471 != 0) { + this.anIntArray46 = new int[10]; + this.aByteArray8 = new byte[10]; + this.aByteArray7 = new byte[10]; + while (local471 != 0) { + local497 = (local471 >> 4) - 1; + local471 = buffer.g1() | local471 << 8; + local471 &= 0xFFF; + if (local471 == 4095) { + this.anIntArray46[local497] = -1; + } else { + this.anIntArray46[local497] = local471; + } + this.aByteArray8[local497] = buffer.g1b(); + this.aByteArray7[local497] = buffer.g1b(); + local471 = buffer.g1(); + } + } + this.optionBase = buffer.gjstr(); + local497 = buffer.g1(); + @Pc(557) int local557 = local497 & 0xF; + @Pc(567) int local567; + if (local557 > 0) { + this.ops = new JagString[local557]; + for (local567 = 0; local567 < local557; local567++) { + this.ops[local567] = buffer.gjstr(); + } + } + @Pc(584) int local584 = local497 >> 4; + if (local584 > 0) { + local567 = buffer.g1(); + this.anIntArray39 = new int[local567 + 1]; + for (@Pc(599) int local599 = 0; local599 < this.anIntArray39.length; local599++) { + this.anIntArray39[local599] = -1; + } + this.anIntArray39[local567] = buffer.g2(); + } + if (local584 > 1) { + local567 = buffer.g1(); + this.anIntArray39[local567] = buffer.g2(); + } + this.dragDeadzone = buffer.g1(); + this.dragDeadtime = buffer.g1(); + this.dragRenderBehavior = buffer.g1() == 1; + local567 = -1; + this.optionCircumfix = buffer.gjstr(); + if (ServerActiveProperties.getTargetMask(local175) != 0) { + local567 = buffer.g2(); + this.anInt499 = buffer.g2(); + if (local567 == 65535) { + local567 = -1; + } + if (this.anInt499 == 65535) { + this.anInt499 = -1; + } + this.anInt484 = buffer.g2(); + if (this.anInt484 == 65535) { + this.anInt484 = -1; + } + } + this.properties = new ServerActiveProperties(local175, local567); + this.anObjectArray3 = this.method485(buffer); + this.onMouseOver = this.method485(buffer); + this.onMouseLeave = this.method485(buffer); + this.onUseWith = this.method485(buffer); + this.onUse = this.method485(buffer); + this.onVarpTransmit = this.method485(buffer); + this.onInvTransmit = this.method485(buffer); + this.onStatTransmit = this.method485(buffer); + this.onTimer = this.method485(buffer); + this.onOptionClick = this.method485(buffer); + this.onMouseRepeat = this.method485(buffer); + this.onClickRepeat = this.method485(buffer); + this.onDrag = this.method485(buffer); + this.onRelease = this.method485(buffer); + this.onHold = this.method485(buffer); + this.onDragStart = this.method485(buffer); + this.onDragRelease = this.method485(buffer); + this.onScroll = this.method485(buffer); + this.onVarcTransmit = this.method485(buffer); + this.onVarcstrTransmit = this.method485(buffer); + this.varpTriggers = this.method486(buffer); + this.inventoryTriggers = this.method486(buffer); + this.statTriggers = this.method486(buffer); + this.varcTriggers = this.method486(buffer); + this.varcstrTriggers = this.method486(buffer); + } + + @OriginalMember(owner = "client!be", name = "a", descriptor = "([Lclient!ok;I)Lclient!rk;") + public final Font method491(@OriginalArg(0) IndexedSprite[] arg0) { + aBoolean72 = false; + if (this.font == -1) { + return null; + } + @Pc(21) Font local21 = (Font) fonts.get(this.font); + if (local21 != null) { + return local21; + } + local21 = Font.method2462(this.font, InterfaceList.aClass153_12, InterfaceList.aClass153_64); + if (local21 == null) { + aBoolean72 = true; + } else { + local21.setNameIcons(arg0, null); + fonts.put(local21, this.font); + } + return local21; + } +} diff --git a/client/src/main/java/rt4/ComponentPointer.java b/client/src/main/java/rt4/ComponentPointer.java new file mode 100644 index 0000000..ca89cca --- /dev/null +++ b/client/src/main/java/rt4/ComponentPointer.java @@ -0,0 +1,14 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!wk") +public final class ComponentPointer extends Node { + + @OriginalMember(owner = "client!wk", name = "r", descriptor = "I") + public int interfaceId; + + @OriginalMember(owner = "client!wk", name = "s", descriptor = "I") + public int anInt5879; +} diff --git a/client/src/main/java/rt4/CreateManager.java b/client/src/main/java/rt4/CreateManager.java new file mode 100644 index 0000000..4f9db7f --- /dev/null +++ b/client/src/main/java/rt4/CreateManager.java @@ -0,0 +1,191 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.io.IOException; +import java.net.Socket; + +public class CreateManager { + + @OriginalMember(owner = "client!oe", name = "l", descriptor = "I") + public static int step = 0; + + @OriginalMember(owner = "client!sf", name = "a", descriptor = "I") + public static int loops = 0; + + @OriginalMember(owner = "client!eg", name = "v", descriptor = "I") + public static int errors = 0; + + @OriginalMember(owner = "client!sc", name = "y", descriptor = "I") + public static int reply = -2; + + @OriginalMember(owner = "client!si", name = "S", descriptor = "[Lclient!na;") + public static JagString[] suggestedNames; + + @OriginalMember(owner = "client!mh", name = "f", descriptor = "(B)V") + public static void loop() { + if (step == 0) { + return; + } + try { + if (++loops > 2000) { + if (Protocol.socket != null) { + Protocol.socket.close(); + Protocol.socket = null; + } + if (errors >= 1) { + reply = -5; + step = 0; + return; + } + step = 1; + loops = 0; + errors++; + if (client.port == client.defaultPort) { + client.port = client.alternatePort; + } else { + client.port = client.defaultPort; + } + } + if (step == 1) { + Protocol.socketRequest = GameShell.signLink.openSocket(client.hostname, client.port); + step = 2; + } + @Pc(120) int local120; + if (step == 2) { + if (Protocol.socketRequest.status == 2) { + throw new IOException(); + } + if (Protocol.socketRequest.status != 1) { + return; + } + Protocol.socket = new BufferedSocket((Socket) Protocol.socketRequest.result, GameShell.signLink); + Protocol.socketRequest = null; + Protocol.socket.write(Protocol.outboundBuffer.data, Protocol.outboundBuffer.offset); + if (client.musicChannel != null) { + client.musicChannel.method3571(); + } + if (client.soundChannel != null) { + client.soundChannel.method3571(); + } + local120 = Protocol.socket.read(); + if (client.musicChannel != null) { + client.musicChannel.method3571(); + } + if (client.soundChannel != null) { + client.soundChannel.method3571(); + } + if (local120 != 21) { + reply = local120; + step = 0; + Protocol.socket.close(); + Protocol.socket = null; + return; + } + step = 3; + } + if (step == 3) { + if (Protocol.socket.available() < 1) { + return; + } + suggestedNames = new JagString[Protocol.socket.read()]; + step = 4; + } + if (step == 4) { + if (Protocol.socket.available() < suggestedNames.length * 8) { + return; + } + Protocol.inboundBuffer.offset = 0; + Protocol.socket.read(0, suggestedNames.length * 8, Protocol.inboundBuffer.data); + for (local120 = 0; local120 < suggestedNames.length; local120++) { + suggestedNames[local120] = Base37.decode37(Protocol.inboundBuffer.g8()); + } + reply = 21; + step = 0; + Protocol.socket.close(); + Protocol.socket = null; + } + } catch (@Pc(238) IOException ignored) { + if (Protocol.socket != null) { + Protocol.socket.close(); + Protocol.socket = null; + } + if (errors < 1) { + errors++; + if (client.defaultPort == client.port) { + client.port = client.alternatePort; + } else { + client.port = client.defaultPort; + } + loops = 0; + step = 1; + } else { + reply = -4; + step = 0; + } + } + } + + @OriginalMember(owner = "client!gd", name = "a", descriptor = "(JI)V") + public static void checkName(@OriginalArg(0) long name) { + Protocol.outboundBuffer.offset = 0; + Protocol.outboundBuffer.p1(186); + if (GlobalConfig.LOGIN_USE_STRINGS) { + Protocol.outboundBuffer.pjstr(Base37.decode37(name)); + } else { + Protocol.outboundBuffer.p8(name); + } + step = 1; + loops = 0; + errors = 0; + reply = -3; + } + + @OriginalMember(owner = "client!jl", name = "a", descriptor = "(IIIII)V") + public static void checkInfo(@OriginalArg(0) int year, @OriginalArg(1) int country, @OriginalArg(2) int day, @OriginalArg(3) int month) { + Protocol.outboundBuffer.offset = 0; + Protocol.outboundBuffer.p1(147); + Protocol.outboundBuffer.p1(day); + Protocol.outboundBuffer.p1(month); + Protocol.outboundBuffer.p2(year); + Protocol.outboundBuffer.p2(country); + loops = 0; + errors = 0; + step = 1; + reply = -3; + } + + @OriginalMember(owner = "client!da", name = "a", descriptor = "(IIIILclient!na;JI)V") + public static void createAccount(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) JagString password, @OriginalArg(5) long name, @OriginalArg(6) int arg5) { + @Pc(8) Buffer buffer = new Buffer(GlobalConfig.LOGIN_USE_STRINGS ? 129 : 128); + buffer.p1(10); + buffer.p2((int) (Math.random() * 99999.0D)); + buffer.p2(530); + if (GlobalConfig.LOGIN_USE_STRINGS) { + buffer.pjstr(Base37.decode37(name)); + } else { + buffer.p8(name); + } + buffer.p4((int) (Math.random() * 9.9999999E7D)); + buffer.pjstr(password); + buffer.p4((int) (Math.random() * 9.9999999E7D)); + buffer.p2(client.affiliate); + buffer.p1(arg0); + buffer.p1(arg2); + buffer.p4((int) (Math.random() * 9.9999999E7D)); + buffer.p2(arg5); + buffer.p2(arg1); + buffer.p4((int) (Math.random() * 9.9999999E7D)); + buffer.rsaenc(GlobalConfig.RSA_EXPONENT, GlobalConfig.RSA_MODULUS); + Protocol.outboundBuffer.offset = 0; + Protocol.outboundBuffer.p1(36); + Protocol.outboundBuffer.p1(buffer.offset); + Protocol.outboundBuffer.pdata(buffer.data, buffer.offset); + reply = -3; + step = 1; + loops = 0; + errors = 0; + } +} diff --git a/client/src/main/java/rt4/Cross.java b/client/src/main/java/rt4/Cross.java new file mode 100644 index 0000000..4a668cd --- /dev/null +++ b/client/src/main/java/rt4/Cross.java @@ -0,0 +1,14 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalMember; + +public class Cross { + @OriginalMember(owner = "client!fi", name = "k", descriptor = "I") + public static int type = 0; + @OriginalMember(owner = "client!bg", name = "M", descriptor = "I") + public static int milliseconds = 0; + @OriginalMember(owner = "client!c", name = "eb", descriptor = "I") + public static int y = 0; + @OriginalMember(owner = "client!jh", name = "j", descriptor = "I") + public static int x = 0; +} diff --git a/client/src/main/java/rt4/Cs1ScriptRunner.java b/client/src/main/java/rt4/Cs1ScriptRunner.java new file mode 100644 index 0000000..2a6c092 --- /dev/null +++ b/client/src/main/java/rt4/Cs1ScriptRunner.java @@ -0,0 +1,1414 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; +import plugin.PluginRepository; + +import java.nio.charset.StandardCharsets; + +public class Cs1ScriptRunner { + @OriginalMember(owner = "client!bm", name = "p", descriptor = "Lclient!na;") + public static final JagString aClass100_133 = JagString.parse("(U1"); + @OriginalMember(owner = "client!wh", name = "u", descriptor = "Lclient!na;") + public static final JagString aClass100_1097 = JagString.parse("(U2"); + @OriginalMember(owner = "client!mj", name = "g", descriptor = "Lclient!na;") + public static final JagString aClass100_761 = JagString.parse("(U3"); + @OriginalMember(owner = "client!hh", name = "a", descriptor = "Lclient!na;") + public static final JagString aClass100_520 = JagString.parse("(U4"); + @OriginalMember(owner = "client!tb", name = "P", descriptor = "Lclient!na;") + public static final JagString aClass100_1002 = JagString.parse("(U5"); + @OriginalMember(owner = "client!jh", name = "g", descriptor = "Lclient!na;") + public static final JagString aClass100_591 = JagString.parse("(Udns"); + @OriginalMember(owner = "client!lh", name = "z", descriptor = "Lclient!na;") + public static final JagString aClass100_672 = JagString.parse("(U (X"); + @OriginalMember(owner = "client!bd", name = "b", descriptor = "Lclient!na;") + public static final JagString aClass100_80 = JagString.parse("(U(Y"); + @OriginalMember(owner = "client!oj", name = "p", descriptor = "I") + public static final int anInt4306 = 0x23201b; + @OriginalMember(owner = "client!ec", name = "l", descriptor = "I") + public static final int anInt1704 = 0x4d4233; + @OriginalMember(owner = "client!rl", name = "Z", descriptor = "I") + public static final int anInt4938 = 0x766654; + @OriginalMember(owner = "client!bj", name = "V", descriptor = "I") + public static final int anInt671 = 0x332d25; + @OriginalMember(owner = "client!pg", name = "V", descriptor = "I") + public static final int anInt4504 = 50; + @OriginalMember(owner = "client!th", name = "m", descriptor = "[Lclient!be;") + public static Component[] aClass13Array13; + @OriginalMember(owner = "client!k", name = "j", descriptor = "I") + public static int anInt3126; + @OriginalMember(owner = "client!gf", name = "K", descriptor = "I") + public static int anInt4696; + @OriginalMember(owner = "client!ac", name = "p", descriptor = "Lclient!be;") + public static Component aClass13_1 = null; + @OriginalMember(owner = "client!ib", name = "e", descriptor = "Lclient!be;") + public static Component aClass13_14 = null; + @OriginalMember(owner = "client!km", name = "pc", descriptor = "Z") + public static boolean aBoolean172 = false; + @OriginalMember(owner = "client!gg", name = "db", descriptor = "I") + public static int anInt2225 = -1; + @OriginalMember(owner = "client!nb", name = "d", descriptor = "I") + public static int anInt4035 = 0; + @OriginalMember(owner = "client!kd", name = "Bb", descriptor = "I") + public static int anInt3260 = -1; + @OriginalMember(owner = "client!d", name = "R", descriptor = "Lclient!be;") + public static Component aClass13_10 = null; + @OriginalMember(owner = "client!hi", name = "a", descriptor = "I") + public static int anInt2503 = -1; + @OriginalMember(owner = "client!ld", name = "c", descriptor = "I") + public static int anInt3484 = -1; + @OriginalMember(owner = "client!lf", name = "k", descriptor = "I") + public static int anInt3502 = -1; + @OriginalMember(owner = "client!mh", name = "X", descriptor = "I") + public static int anInt3851 = -1; + @OriginalMember(owner = "client!ig", name = "b", descriptor = "I") + public static int anInt2882; + @OriginalMember(owner = "client!ig", name = "f", descriptor = "I") + public static int anInt2884; + @OriginalMember(owner = "client!hc", name = "P", descriptor = "I") + public static int anInt2428; + @OriginalMember(owner = "client!u", name = "a", descriptor = "I") + public static int anInt5388 = 0; + @OriginalMember(owner = "client!re", name = "y", descriptor = "I") + public static int anInt4851; + @OriginalMember(owner = "client!em", name = "z", descriptor = "Z") + public static boolean aBoolean108 = false; + + @OriginalMember(owner = "client!we", name = "a", descriptor = "(BILclient!be;)I") + public static int run(@OriginalArg(1) int arg0, @OriginalArg(2) Component arg1) { + if (arg1.cs1Scripts == null || arg0 >= arg1.cs1Scripts.length) { + return -2; + } + try { + @Pc(33) int[] script = arg1.cs1Scripts[arg0]; + @Pc(35) byte accumulatorMode = 0; + @Pc(37) int accumulator = 0; + @Pc(39) int pc = 0; + while (true) { + @Pc(41) int value = 0; + @Pc(46) int opcode = script[pc++]; + @Pc(48) byte nextAccumulatorMode = 0; + if (opcode == 0) { + return accumulator; + } + if (opcode == 15) { + nextAccumulatorMode = 1; + } + if (opcode == 16) { + nextAccumulatorMode = 2; + } + if (opcode == 1) { + value = PlayerSkillXpTable.boostedLevels[script[pc++]]; + } + if (opcode == 17) { + nextAccumulatorMode = 3; + } + if (opcode == 2) { + value = PlayerSkillXpTable.baseLevels[script[pc++]]; + } + if (opcode == 3) { + value = PlayerSkillXpTable.experience[script[pc++]]; + } + @Pc(124) int pc2; + @Pc(135) Component otherComponent; + @Pc(140) int pc3; + @Pc(152) int local152; + if (opcode == 4) { + pc2 = script[pc++] << 16; + @Pc(131) int componentId = pc2 + script[pc++]; + otherComponent = InterfaceList.getComponent(componentId); + pc3 = script[pc++]; + if (pc3 != -1 && (!ObjTypeList.get(pc3).members || LoginManager.mapMembers)) { + for (local152 = 0; local152 < otherComponent.objTypes.length; local152++) { + if (pc3 + 1 == otherComponent.objTypes[local152]) { + value += otherComponent.objCounts[local152]; + } + } + } + } + if (opcode == 5) { + value = VarpDomain.activeVarps[script[pc++]]; + } + if (opcode == 6) { + value = PlayerSkillXpTable.xpLevelLookup[PlayerSkillXpTable.baseLevels[script[pc++]] - 1]; + } + if (opcode == 7) { + value = VarpDomain.activeVarps[script[pc++]] * 100 / 46875; + } + if (opcode == 8) { + value = PlayerList.self.combatLevel; + } + if (opcode == 9) { + for (pc2 = 0; pc2 < 25; pc2++) { + if (PlayerSkillXpTable.ENABLED_SKILLS[pc2]) { + value += PlayerSkillXpTable.baseLevels[pc2]; + } + } + } + if (opcode == 10) { + pc2 = script[pc++] << 16; + pc2 += script[pc++]; + otherComponent = InterfaceList.getComponent(pc2); + pc3 = script[pc++]; + if (pc3 != -1 && (!ObjTypeList.get(pc3).members || LoginManager.mapMembers)) { + for (local152 = 0; local152 < otherComponent.objTypes.length; local152++) { + if (otherComponent.objTypes[local152] == pc3 + 1) { + value = 999999999; + break; + } + } + } + } + if (opcode == 11) { + value = Player.runEnergy; + } + if (opcode == 12) { + value = Player.weight; + } + if (opcode == 13) { + pc2 = VarpDomain.activeVarps[script[pc++]]; + @Pc(353) int local353 = script[pc++]; + value = (0x1 << local353 & pc2) == 0 ? 0 : 1; + } + if (opcode == 14) { + pc2 = script[pc++]; + value = VarpDomain.getVarbit(pc2); + } + if (opcode == 18) { + value = (PlayerList.self.xFine >> 7) + Camera.originX; + } + if (opcode == 19) { + value = (PlayerList.self.zFine >> 7) + Camera.originZ; + } + if (opcode == 20) { + value = script[pc++]; + } + if (nextAccumulatorMode == 0) { + if (accumulatorMode == 0) { + accumulator += value; + } + if (accumulatorMode == 1) { + accumulator -= value; + } + if (accumulatorMode == 2 && value != 0) { + accumulator /= value; + } + if (accumulatorMode == 3) { + accumulator *= value; + } + accumulatorMode = 0; + } else { + accumulatorMode = nextAccumulatorMode; + } + } + } catch (@Pc(464) Exception ignored) { + return -1; + } + } + + @OriginalMember(owner = "client!k", name = "a", descriptor = "(Lclient!be;Lclient!na;I)Lclient!na;") + public static JagString interpolate(@OriginalArg(0) Component arg0, @OriginalArg(1) JagString text) { + if (text.indexOf(JagString.PERCENT_SIGN) == -1) { + return text; + } + + while (true) { + @Pc(14) int local14 = text.indexOf(aClass100_133); + if (local14 == -1) { + while (true) { + local14 = text.indexOf(aClass100_1097); + if (local14 == -1) { + while (true) { + local14 = text.indexOf(aClass100_761); + if (local14 == -1) { + while (true) { + local14 = text.indexOf(aClass100_520); + if (local14 == -1) { + while (true) { + local14 = text.indexOf(aClass100_1002); + if (local14 == -1) { + while (true) { + local14 = text.indexOf(aClass100_591); + if (local14 == -1) { + return text; + } + @Pc(246) JagString local246 = JagString.EMPTY; + if (Player.lastLogAddress != null) { + local246 = JagString.formatIp(Player.lastLogAddress.intArg2); + if (Player.lastLogAddress.result != null) { + @Pc(265) byte[] local265 = ((String) Player.lastLogAddress.result).getBytes(StandardCharsets.ISO_8859_1); + local246 = JagString.decodeString(local265, local265.length, 0); + } + } + text = JagString.concatenate(new JagString[]{text.substring(local14, 0), local246, text.substring(local14 + 4)}); + } + } + text = JagString.concatenate(new JagString[]{text.substring(local14, 0), StringUtils.toString(run(4, arg0)), text.substring(local14 + 2)}); + } + } + text = JagString.concatenate(new JagString[]{text.substring(local14, 0), StringUtils.toString(run(3, arg0)), text.substring(local14 + 2)}); + } + } + text = JagString.concatenate(new JagString[]{text.substring(local14, 0), StringUtils.toString(run(2, arg0)), text.substring(local14 + 2)}); + } + } + text = JagString.concatenate(new JagString[]{text.substring(local14, 0), StringUtils.toString(run(1, arg0)), text.substring(local14 + 2)}); + } + } + text = JagString.concatenate(new JagString[]{text.substring(local14, 0), StringUtils.toString(run(0, arg0)), text.substring(local14 + 2)}); + } + } + + @OriginalMember(owner = "client!md", name = "a", descriptor = "(Lclient!be;I)Z") + public static boolean isTrue(@OriginalArg(0) Component component) { + if (component.cs1ComparisonOpcodes == null) { + return false; + } + for (@Pc(14) int i = 0; i < component.cs1ComparisonOpcodes.length; i++) { + @Pc(34) int value = run(i, component); + @Pc(39) int operand = component.cs1ComparisonOperands[i]; + if (component.cs1ComparisonOpcodes[i] == 2) { + if (operand <= value) { + return false; + } + } else if (component.cs1ComparisonOpcodes[i] == 3) { + if (value <= operand) { + return false; + } + } else if (component.cs1ComparisonOpcodes[i] == 4) { + if (value == operand) { + return false; + } + } else if (operand != value) { + return false; + } + } + return true; + } + + @OriginalMember(owner = "client!gn", name = "a", descriptor = "(III[Lclient!be;IIIIBI)V") + public static void renderComponent(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) Component[] components, @OriginalArg(4) int arg4, @OriginalArg(5) int layer, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(9) int parentRectangle) { + if (GlRenderer.enabled) { + GlRaster.setClip(arg0, arg6, arg4, arg7); + } else { + SoftwareRaster.setClip(arg0, arg6, arg4, arg7); + Rasteriser.prepare(); + } + + for (@Pc(18) int i = 0; i < components.length; i++) { + @Pc(30) Component component = components[i]; + if (component != null && (component.overlayer == layer || layer == 0xabcdabcd && component == aClass13_14)) { + @Pc(57) int rectangle; + if (parentRectangle == -1) { + InterfaceList.rectangleX[InterfaceList.rectangles] = arg2 + component.x; + InterfaceList.rectangleY[InterfaceList.rectangles] = component.y + arg1; + InterfaceList.rectangleWidth[InterfaceList.rectangles] = component.width; + InterfaceList.rectangleHeight[InterfaceList.rectangles] = component.height; + rectangle = InterfaceList.rectangles++; + } else { + rectangle = parentRectangle; + } + component.rectangleLoop = client.loop; + component.rectangle = rectangle; + if (!component.if3 || !InterfaceList.method947(component)) { + if (component.clientCode > 0) { + method13(component); + } + @Pc(114) int local114 = arg1 + component.y; + @Pc(117) int alpha = component.alpha; + @Pc(123) int local123 = component.x + arg2; + if (Cheat.qaOpTest && (InterfaceList.getServerActiveProperties(component).events != 0 || component.type == 0) && alpha > 127) { + alpha = 127; + } + @Pc(166) int local166; + @Pc(164) int local164; + if (component == aClass13_14) { + if (layer != 0xabcdabcd && !component.dragRenderBehavior) { + anInt4696 = arg2; + anInt3126 = arg1; + aClass13Array13 = components; + continue; + } + if (aBoolean172 && InterfaceList.aBoolean174) { + local164 = Mouse.lastMouseY; + local166 = Mouse.lastMouseX; + local164 -= anInt4035; + if (local164 < InterfaceList.anInt5103) { + local164 = InterfaceList.anInt5103; + } + if (local164 + component.height > aClass13_1.height + InterfaceList.anInt5103) { + local164 = aClass13_1.height + InterfaceList.anInt5103 - component.height; + } + local114 = local164; + local166 -= anInt5388; + if (anInt2225 > local166) { + local166 = anInt2225; + } + if (aClass13_1.width + anInt2225 < component.width + local166) { + local166 = aClass13_1.width + anInt2225 - component.width; + } + local123 = local166; + } + if (!component.dragRenderBehavior) { + alpha = 128; + } + } + @Pc(302) int local302; + @Pc(291) int local291; + @Pc(270) int local270; + @Pc(276) int local276; + if (component.type == 2) { + local291 = arg7; + local302 = arg4; + local164 = arg6; + local166 = arg0; + } else { + local164 = local114 > arg6 ? local114 : arg6; + local166 = arg0 < local123 ? local123 : arg0; + local270 = component.width + local123; + local276 = local114 + component.height; + if (component.type == 9) { + local276++; + local270++; + } + local291 = arg7 <= local276 ? arg7 : local276; + local302 = local270 >= arg4 ? arg4 : local270; + } + if (!component.if3 || local302 > local166 && local164 < local291) { + @Pc(468) int local468; + @Pc(503) int memory; + @Pc(514) int color; + @Pc(518) int cardMemory; + @Pc(556) int local556; + @Pc(563) int local563; + @Pc(571) int local571; + @Pc(545) int objId; + if (component.clientCode != 0) { + if (component.clientCode == 1337 || component.clientCode == 1403 && GlRenderer.enabled) { + InterfaceList.aClass13_26 = component; + InterfaceList.anInt5574 = local114; + anInt2503 = local123; + ScriptRunner.method4326(component.height, component.clientCode == 1403, local123, component.width, local114); + if (GlRenderer.enabled) { + GlRaster.setClip(arg0, arg6, arg4, arg7); + } else { + SoftwareRaster.setClip(arg0, arg6, arg4, arg7); + } + continue; + } + if (component.clientCode == 1338) { + if (!component.method478()) { + continue; + } + MiniMap.render(rectangle, local114, local123, component); + if (GlRenderer.enabled) { + GlRaster.setClip(arg0, arg6, arg4, arg7); + } else { + SoftwareRaster.setClip(arg0, arg6, arg4, arg7); + } + if (MiniMap.state != 0 && MiniMap.state != 3 || aBoolean108 || local166 > ScriptRunner.anInt3751 || ScriptRunner.anInt1892 < local164 || ScriptRunner.anInt3751 >= local302 || local291 <= ScriptRunner.anInt1892) { + continue; + } + local270 = ScriptRunner.anInt3751 - local123; + local276 = ScriptRunner.anInt1892 - local114; + local468 = component.anIntArray37[local276]; + if (local270 < local468 || local270 > local468 + component.anIntArray45[local276]) { + continue; + } + local276 -= component.height / 2; + memory = (int) Camera.yawTarget + MiniMap.anInt1814 & 0x7FF; + local270 -= component.width / 2; + color = MathUtils.sin[memory]; + cardMemory = MathUtils.cos[memory]; + color = (MiniMap.anInt4130 + 256) * color >> 8; + cardMemory = (MiniMap.anInt4130 + 256) * cardMemory >> 8; + objId = cardMemory * local276 - color * local270 >> 11; + local556 = local276 * color + local270 * cardMemory >> 11; + local563 = PlayerList.self.xFine + local556 >> 7; + local571 = PlayerList.self.zFine - objId >> 7; + if (MiniMenu.aBoolean302 && (MiniMenu.anInt4999 & 0x40) != 0) { + @Pc(583) Component local583 = InterfaceList.method1418(MiniMenu.anInt2512, MiniMenu.anInt506); + if (local583 == null) { + MiniMenu.method1294(); + } else { + MiniMenu.add(MiniMenu.anInt5393, 1L, MiniMenu.aClass100_961, local563, (short) 11, MiniMenu.aClass100_545, local571); + } + continue; + } + if (client.game == 1) { + MiniMenu.add(-1, 1L, JagString.EMPTY, local563, (short) 36, LocalizedText.FACEHERE, local571); + } + MiniMenu.add(-1, 1L, JagString.EMPTY, local563, (short) 60, MiniMenu.walkText, local571); + continue; + } + if (component.clientCode == 1339) { + if (component.method478()) { + method3047(local123, local114, component, rectangle); + if (GlRenderer.enabled) { + GlRaster.setClip(arg0, arg6, arg4, arg7); + } else { + SoftwareRaster.setClip(arg0, arg6, arg4, arg7); + } + } + continue; + } + if (component.clientCode == 1400) { + WorldMap.method2225(local123, local114, component.height, component.width); + InterfaceList.aBooleanArray100[rectangle] = true; + InterfaceList.rectangleRedraw[rectangle] = true; + if (GlRenderer.enabled) { + GlRaster.setClip(arg0, arg6, arg4, arg7); + } else { + SoftwareRaster.setClip(arg0, arg6, arg4, arg7); + } + continue; + } + if (component.clientCode == 1401) { + method4(local123, component.height, component.width, local114); + InterfaceList.aBooleanArray100[rectangle] = true; + InterfaceList.rectangleRedraw[rectangle] = true; + if (GlRenderer.enabled) { + GlRaster.setClip(arg0, arg6, arg4, arg7); + } else { + SoftwareRaster.setClip(arg0, arg6, arg4, arg7); + } + continue; + } + if (component.clientCode == 1402) { + if (!GlRenderer.enabled) { + Flames.render(local123, local114); + InterfaceList.aBooleanArray100[rectangle] = true; + InterfaceList.rectangleRedraw[rectangle] = true; + } + continue; + } + if (component.clientCode == 1405) { + PluginRepository.Draw(); + InterfaceList.aBooleanArray100[rectangle] = true; + InterfaceList.rectangleRedraw[rectangle] = true; + + //Above are inauthentic changes to call plugin draws and redraw this interface. Below I have left intact all the authentic code. + + if (!Cheat.displayFps) { + continue; + } + local270 = component.width + local123; + local276 = local114 + 15; + Fonts.p12Full.renderRight(JagString.concatenate(new JagString[]{Cheat.DEBUG_FPS2, JagString.parseInt((int) GameShell.framesPerSecond)}), local270, local276, 16776960, 0); + local276 += 15; + @Pc(795) Runtime runtime = Runtime.getRuntime(); + memory = (int) ((runtime.totalMemory() - runtime.freeMemory()) / 1024L / 1024L); + color = 16776960; + if (memory > 128) { + color = 16711680; + } + Fonts.p12Full.renderRight(JagString.concatenate(new JagString[]{Cheat.DEBUG_MEM, JagString.parseInt(memory), Cheat.DEBUG_MEM_UNIT}), local270, local276, color, 0); + local276 += 15; + if (GlRenderer.enabled) { + color = 16776960; + cardMemory = (GlCleaner.onCardTexture + GlCleaner.onCardGeometry + GlCleaner.onCard2d) / 1024 / 1024; + if (cardMemory > 64) { + color = 16711680; + } + Fonts.p12Full.renderRight(JagString.concatenate(new JagString[]{Cheat.DEBUG_CARD, JagString.parseInt(cardMemory), Cheat.DEBUG_MEM_UNIT}), local270, local276, color, 0); + local276 += 15; + } + cardMemory = 0; + objId = 0; + local556 = 0; + for (local563 = 0; local563 < 28; local563++) { + cardMemory += client.js5Providers[local563].getIndexSize(); + local556 += client.js5Providers[local563].getVerifiedGroups(); + objId += client.js5Providers[local563].getTotalVerifiedGroups(); + } + local571 = local556 * 10000 / cardMemory; + local563 = objId * 100 / cardMemory; + @Pc(968) JagString local968 = JagString.concatenate(new JagString[]{Cheat.DEBUG_CAHE, StringUtils.formatNumber(0, true, 2, local571), aClass100_672, JagString.parseInt(local563), aClass100_80}); + Fonts.p11Full.renderRight(local968, local270, local276, 16776960, 0); + local276 += 12; + InterfaceList.aBooleanArray100[rectangle] = true; + InterfaceList.rectangleRedraw[rectangle] = true; + continue; + } + if (component.clientCode == 1406) { + anInt3484 = local114; + LoginManager.aClass13_13 = component; + anInt3260 = local123; + continue; + } + } + if (!aBoolean108) { + if (component.type == 0 && component.noClickThrough && ScriptRunner.anInt3751 >= local166 && ScriptRunner.anInt1892 >= local164 && ScriptRunner.anInt3751 < local302 && local291 > ScriptRunner.anInt1892 && !Cheat.qaOpTest) { + MiniMenu.size = 1; + MiniMenu.cursors[0] = MiniMenu.anInt1092; + MiniMenu.ops[0] = LocalizedText.CANCEL; + MiniMenu.opBases[0] = JagString.EMPTY; + MiniMenu.actions[0] = 1005; + } + if (local166 <= ScriptRunner.anInt3751 && local164 <= ScriptRunner.anInt1892 && local302 > ScriptRunner.anInt3751 && local291 > ScriptRunner.anInt1892) { + MiniMenu.addComponentEntries(ScriptRunner.anInt1892 - local114, -local123 + ScriptRunner.anInt3751, component); + } + } + if (component.type == 0) { + if (!component.if3 && InterfaceList.method947(component) && InterfaceList.aClass13_22 != component) { + continue; + } + if (!component.if3) { + if (component.scrollMaxV - component.height < component.scrollY) { + component.scrollY = component.scrollMaxV - component.height; + } + if (component.scrollY < 0) { + component.scrollY = 0; + } + } + renderComponent(local166, local114 - component.scrollY, -component.scrollX + local123, components, local302, component.id, local164, local291, rectangle); + if (component.createdComponents != null) { + renderComponent(local166, local114 - component.scrollY, -component.scrollX + local123, component.createdComponents, local302, component.id, local164, local291, rectangle); + } + @Pc(1186) ComponentPointer local1186 = (ComponentPointer) InterfaceList.openInterfaces.get(component.id); + if (local1186 != null) { + if (local1186.anInt5879 == 0 && !aBoolean108 && ScriptRunner.anInt3751 >= local166 && local164 <= ScriptRunner.anInt1892 && local302 > ScriptRunner.anInt3751 && ScriptRunner.anInt1892 < local291 && !Cheat.qaOpTest) { + MiniMenu.ops[0] = LocalizedText.CANCEL; + MiniMenu.size = 1; + MiniMenu.cursors[0] = MiniMenu.anInt1092; + MiniMenu.actions[0] = 1005; + MiniMenu.opBases[0] = JagString.EMPTY; + } + method86(local1186.interfaceId, local166, local302, local123, rectangle, local291, local164, local114); + } + if (GlRenderer.enabled) { + GlRaster.setClip(arg0, arg6, arg4, arg7); + } else { + SoftwareRaster.setClip(arg0, arg6, arg4, arg7); + Rasteriser.prepare(); + } + } + if (InterfaceList.aBooleanArray116[rectangle] || Cheat.rectDebug > 1) { + if (component.type == 0 && !component.if3 && component.scrollMaxV > component.height) { + method1624(component.scrollY, component.scrollMaxV, component.width + local123, local114, component.height); + } + + if (component.type != 1) { + if (component.type == 2) { + local270 = 0; + for (local276 = 0; local276 < component.baseHeight; local276++) { + for (local468 = 0; local468 < component.baseWidth; local468++) { + int y = local114 + local276 * (component.invMarginY + 32); + int x = (component.invMarginX + 32) * local468 + local123; + if (local270 < 20) { + y += component.invOffsetY[local270]; + x += component.invOffsetX[local270]; + } + if (component.objTypes[local270] > 0) { + objId = component.objTypes[local270] - 1; + if (arg0 < x + 32 && x < arg4 && arg6 < y + 32 && y < arg7 || component == InterfaceList.clickedInventoryComponent && InterfaceList.mouseOverInventoryObjectIndex == local270) { + @Pc(1476) Sprite sprite; + + if (MiniMenu.anInt5014 == 1 && MiniMenu.anInt4370 == local270 && component.id == MiniMap.anInt5062) { + sprite = Inv.getObjectSprite(2, objId, component.objDrawText, component.objCounts[local270], 0); + } else { + sprite = Inv.getObjectSprite(1, objId, component.objDrawText, component.objCounts[local270], 3153952); + } + + if (Rasteriser.textureHasTransparency) { + InterfaceList.aBooleanArray100[rectangle] = true; + } + + if (sprite == null) { + InterfaceList.redraw(component); + } else if (InterfaceList.clickedInventoryComponent == component && local270 == InterfaceList.mouseOverInventoryObjectIndex) { + int dragX = Mouse.lastMouseX - InterfaceList.clickedInventoryComponentX; + int dragY = Mouse.lastMouseY - InterfaceList.clickedInventoryComponentY; + + if (dragY < 5 && dragY > -5) { + dragY = 0; + } + + if (dragX < 5 && dragX > -5) { + dragX = 0; + } + + if (InterfaceList.clickedInventoryComponentCycle < 5) { + dragX = 0; + dragY = 0; + } + + // draw dragged icon (at half opacity) + sprite.renderAlpha(x + dragX, y + dragY, 128); + + if (layer != -1) { + @Pc(1571) Component local1571 = components[layer & 0xFFFF]; + @Pc(1577) int top; + @Pc(1575) int bottom; + + if (GlRenderer.enabled) { + bottom = GlRaster.clipBottom; + top = GlRaster.clipTop; + } else { + top = SoftwareRaster.clipTop; + bottom = SoftwareRaster.clipBottom; + } + + @Pc(1611) int local1611; + if (top > dragY + y && local1571.scrollY > 0) { + local1611 = Protocol.sceneDelta * (top - dragY - y) / 3; + if (local1611 > Protocol.sceneDelta * 10) { + local1611 = Protocol.sceneDelta * 10; + } + + if (local1611 > local1571.scrollY) { + local1611 = local1571.scrollY; + } + + local1571.scrollY -= local1611; + InterfaceList.clickedInventoryComponentY += local1611; + InterfaceList.redraw(local1571); + } + + if (bottom < dragY + y + 32 && local1571.scrollY < local1571.scrollMaxV - local1571.height) { + local1611 = (y + dragY + 32 - bottom) * Protocol.sceneDelta / 3; + if (local1611 > Protocol.sceneDelta * 10) { + local1611 = Protocol.sceneDelta * 10; + } + + if (local1571.scrollMaxV - local1571.scrollY - local1571.height < local1611) { + local1611 = local1571.scrollMaxV - local1571.height - local1571.scrollY; + } + + local1571.scrollY += local1611; + InterfaceList.clickedInventoryComponentY -= local1611; + InterfaceList.redraw(local1571); + } + } + } else if (component == MiniMenu.pressedInventoryComponent && local270 == MiniMenu.anInt5444) { + sprite.renderAlpha(x, y, 128); + } else { + sprite.render(x, y); + // downscale: + // sprite.renderResized(x, y, 36, 32); + } + } + } else if (component.invSprite != null && local270 < 20) { + @Pc(1381) Sprite local1381 = component.method482(local270); + if (local1381 != null) { + local1381.render(x, y); + } else if (Component.aBoolean72) { + InterfaceList.redraw(component); + } + } + + local270++; + } + } + PluginRepository.ComponentDraw(i, component, local123, local114); + } else if (component.type == 3) { + if (isTrue(component)) { + local270 = component.activeColor; + if (InterfaceList.aClass13_22 == component && component.anInt475 != 0) { + local270 = component.anInt475; + } + } else { + local270 = component.color; + if (component == InterfaceList.aClass13_22 && component.overColor != 0) { + local270 = component.overColor; + } + } + if (alpha == 0) { + if (component.filled) { + if (GlRenderer.enabled) { + GlRaster.fillRect(local123, local114, component.width, component.height, local270); + } else { + SoftwareRaster.fillRect(local123, local114, component.width, component.height, local270); + } + } else if (GlRenderer.enabled) { + GlRaster.drawRect(local123, local114, component.width, component.height, local270); + } else { + SoftwareRaster.drawRect(local123, local114, component.width, component.height, local270); + } + } else if (component.filled) { + if (GlRenderer.enabled) { + GlRaster.fillRectAlpha(local123, local114, component.width, component.height, local270, 256 - (alpha & 0xFF)); + } else { + SoftwareRaster.fillRectAlpha(local123, local114, component.width, component.height, local270, 256 - (alpha & 0xFF)); + } + } else if (GlRenderer.enabled) { + GlRaster.drawRectAlpha(local123, local114, component.width, component.height, local270, 256 - (alpha & 0xFF)); + } else { + SoftwareRaster.method2487(local123, local114, component.width, component.height, local270, 256 - (alpha & 0xFF)); + } + PluginRepository.ComponentDraw(i, component, local123, local114); + } else { + @Pc(1921) Font local1921; + if (component.type == 4) { + local1921 = component.method491(Sprites.nameIcons); + if (local1921 != null) { + @Pc(1934) JagString local1934 = component.text; + if (isTrue(component)) { + local276 = component.activeColor; + if (InterfaceList.aClass13_22 == component && component.anInt475 != 0) { + local276 = component.anInt475; + } + if (component.activeText.length() > 0) { + local1934 = component.activeText; + } + } else { + local276 = component.color; + if (InterfaceList.aClass13_22 == component && component.overColor != 0) { + local276 = component.overColor; + } + } + if (component.if3 && component.objId != -1) { + @Pc(1989) ObjType local1989 = ObjTypeList.get(component.objId); + local1934 = local1989.name; + if (local1934 == null) { + local1934 = MiniMenu.NULL; + } + if ((local1989.stackable == 1 || component.objCount != 1) && component.objCount != -1) { + local1934 = JagString.concatenate(new JagString[]{MiniMenu.aClass100_32, local1934, JagString.aClass100_375, method1548(component.objCount)}); + } + } + if (aClass13_10 == component) { + local276 = component.color; + local1934 = LocalizedText.PLEASEWAIT; + } + if (!component.if3) { + local1934 = interpolate(component, local1934); + } + local1921.drawInterfaceText(local1934, local123, local114, component.width, component.height, local276, component.shadowed ? 0 : -1, component.halign, component.valign, component.vpadding); + PluginRepository.ComponentDraw(i, component, local123, local114); + } else if (Component.aBoolean72) { + InterfaceList.redraw(component); + } + } else if (component.type == 5) { + @Pc(2094) Sprite sprite = null; + if (component.if3) { + if (component.objId == -1) { + sprite = component.method489(false); + } else { + sprite = Inv.getObjectSprite(component.outlineThickness, component.objId, component.objDrawText, component.objCount, component.shadowColor); + } + + if (sprite != null) { + local276 = sprite.anInt1860; + local468 = sprite.anInt1866; + + if (component.spriteTiling) { + memory = (local276 + component.width - 1) / local276; + color = (component.height + local468 - 1) / local468; + + if (GlRenderer.enabled) { + GlRaster.method1183(local123, local114, component.width + local123, component.height + local114); + + @Pc(2274) boolean local2274 = IntUtils.isPowerOfTwo(sprite.width); + @Pc(2279) boolean local2279 = IntUtils.isPowerOfTwo(sprite.height); + @Pc(2282) GlSprite local2282 = (GlSprite) sprite; + if (local2274 && local2279) { + if (alpha == 0) { + local2282.method1429(local123, local114, memory, color); + } else { + local2282.method1426(local123, local114, 256 - (alpha & 0xFF), memory, color); + } + PluginRepository.ComponentDraw(i, component, local123, local114); + } else if (local2274) { + for (local563 = 0; local563 < color; local563++) { + if (alpha == 0) { + local2282.method1429(local123, local563 * local468 + local114, memory, 1); + } else { + local2282.method1426(local123, local114 + local563 * local468, -(alpha & 0xFF) + 256, memory, 1); + } + } + PluginRepository.ComponentDraw(i, component, local123, local114); + } else if (local2279) { + for (local563 = 0; local563 < memory; local563++) { + if (alpha == 0) { + local2282.method1429(local276 * local563 + local123, local114, 1, color); + } else { + local2282.method1426(local276 * local563 + local123, local114, 256 - (alpha & 0xFF), 1, color); + } + } + PluginRepository.ComponentDraw(i, component, local123, local114); + } else { + for (local563 = 0; local563 < memory; local563++) { + for (local571 = 0; local571 < color; local571++) { + if (alpha == 0) { + sprite.render(local123 + local276 * local563, local468 * local571 + local114); + } else { + sprite.renderAlpha(local563 * local276 + local123, local468 * local571 + local114, 256 - (alpha & 0xFF)); + } + } + } + PluginRepository.ComponentDraw(i, component, local123 + local276, local468 + local114); + } + + GlRaster.setClip(arg0, arg6, arg4, arg7); + } else { + SoftwareRaster.method2498(local123, local114, local123 + component.width, local114 - -component.height); + for (cardMemory = 0; cardMemory < memory; cardMemory++) { + for (local556 = 0; local556 < color; local556++) { + if (component.angle2d != 0) { + sprite.renderAngled(local114 + local468 * local556 + local468 / 2, component.angle2d, 4096, cardMemory * local276 + local123 + local276 / 2); + } else if (alpha == 0) { + sprite.render(cardMemory * local276 + local123, local468 * local556 + local114); + } else { + sprite.renderAlpha(cardMemory * local276 + local123, local114 + local556 * local468, 256 - (alpha & 0xFF)); + } + } + } + PluginRepository.ComponentDraw(i, component, local123 + local276, local114 + local468); + + SoftwareRaster.setClip(arg0, arg6, arg4, arg7); + } + } else { + memory = component.width * 4096 / local276; + if (component.angle2d != 0) { + sprite.renderAngled(local114 + component.height / 2, component.angle2d, memory, local123 + component.width / 2); + } else if (alpha != 0) { + sprite.renderAlpha(local123, local114, component.width, component.height, 256 - (alpha & 0xFF)); + } else if (local276 == component.width && local468 == component.height) { + sprite.render(local123, local114); + } else { + // render icons in a container i.e bank icons + sprite.renderResized(local123, local114, component.width, component.height); + } + PluginRepository.ComponentDraw(i, component, local123, local114); + } + } else if (Component.aBoolean72) { + InterfaceList.redraw(component); + } + } else { + sprite = component.method489(isTrue(component)); + if (sprite != null) { + sprite.render(local123, local114); + } else if (Component.aBoolean72) { + InterfaceList.redraw(component); + } + } + } else { + @Pc(2611) ObjType local2611; + if (component.type == 6) { + @Pc(2587) boolean local2587 = isTrue(component); + @Pc(2589) Model local2589 = null; + if (local2587) { + local276 = component.activeModelSeqId; + } else { + local276 = component.modelSeqId; + } + memory = 0; + if (component.objId != -1) { + local2611 = ObjTypeList.get(component.objId); + if (local2611 != null) { + local2611 = local2611.method1820(component.objCount); + @Pc(2630) SeqType local2630 = local276 == -1 ? null : SeqTypeList.get(local276); + local2589 = local2611.getModel(component.anInt496, component.anInt500, local2630, 1, component.anInt510); + if (local2589 == null) { + InterfaceList.redraw(component); + } else { + memory = -local2589.getMinY() / 2; + } + } + } else if (component.modelType == 5) { + if (component.modelId == -1) { + local2589 = PlayerAppearance.DEFAULT.method1954(null, -1, null, null, 0, -1, 0, -1, -1); + } else { + color = component.modelId & 0x7FF; + if (color == PlayerList.selfId) { + color = 2047; + } + @Pc(2751) Player local2751 = PlayerList.players[color]; + @Pc(2760) SeqType local2760 = local276 == -1 ? null : SeqTypeList.get(local276); + if (local2751 != null && (int) local2751.username.encode37() << 11 == (component.modelId & 0xFFFFF800)) { + local2589 = local2751.appearance.method1954(null, -1, null, local2760, 0, -1, 0, component.anInt510, 0); + } + } + } else if (local276 == -1) { + local2589 = component.method488(-1, null, -1, 0, local2587, PlayerList.self.appearance); + if (local2589 == null && Component.aBoolean72) { + InterfaceList.redraw(component); + } + } else { + @Pc(2689) SeqType local2689 = SeqTypeList.get(local276); + local2589 = component.method488(component.anInt496, local2689, component.anInt510, component.anInt500, local2587, PlayerList.self.appearance); + if (local2589 == null && Component.aBoolean72) { + InterfaceList.redraw(component); + } + } + if (local2589 != null) { + if (component.anInt451 > 0) { + color = (component.width << 8) / component.anInt451; + } else { + color = 256; + } + if (component.anInt526 <= 0) { + cardMemory = 256; + } else { + cardMemory = (component.height << 8) / component.anInt526; + } + local556 = local123 + component.width / 2 + (color * component.anInt495 >> 8); + objId = component.height / 2 + local114 + (cardMemory * component.anInt481 >> 8); + if (GlRenderer.enabled) { + if (component.modelOrtho) { + GlRenderer.method4182(local556, objId, component.modelZoom, component.aShort11, color, cardMemory); + } else { + GlRenderer.method4148(local556, objId, color, cardMemory); + GlRenderer.method4152(component.aShort10, (float) component.aShort11 * 1.5F); + } + GlRenderer.restoreLighting(); + GlRenderer.setDepthTestEnabled(true); + GlRenderer.setFogEnabled(false); + FogManager.init(Preferences.brightness); + if (ScriptRunner.aBoolean299) { + GlRaster.method1177(); + GlRenderer.clearDepthBuffer(); + GlRaster.setClip(arg0, arg6, arg4, arg7); + ScriptRunner.aBoolean299 = false; + } + if (component.aBoolean34) { + GlRenderer.disableDepthMask(); + } + local563 = MathUtils.sin[component.modelXAngle] * component.modelZoom >> 16; + local571 = component.modelZoom * MathUtils.cos[component.modelXAngle] >> 16; + if (component.if3) { + local2589.setCamera(component.modelYAngle, component.modelYOffset, component.modelXAngle, component.modelXOffset, component.modelZOffset + local563 + memory, component.modelZOffset + local571, -1L); + } else { + local2589.setCamera(component.modelYAngle, 0, component.modelXAngle, 0, local563, local571, -1L); + } + if (component.aBoolean34) { + GlRenderer.enableDepthMask(); + } + } else { + Rasteriser.setBounds(local556, objId); + local563 = MathUtils.sin[component.modelXAngle] * component.modelZoom >> 16; + local571 = component.modelZoom * MathUtils.cos[component.modelXAngle] >> 16; + if (!component.if3) { + local2589.setCamera(component.modelYAngle, 0, component.modelXAngle, 0, local563, local571, -1L); + } else if (component.modelOrtho) { + ((SoftwareModel) local2589).method4591(component.modelYAngle, component.modelYOffset, component.modelXAngle, component.modelXOffset, component.modelZOffset + memory + local563, local571 + component.modelZOffset, component.modelZoom); + } else { + local2589.setCamera(component.modelYAngle, component.modelYOffset, component.modelXAngle, component.modelXOffset, component.modelZOffset + local563 + memory, local571 + component.modelZOffset, -1L); + } + Rasteriser.prepareOffsets(); + } + } + PluginRepository.ComponentDraw(i, component, local123 + component.width / 2, local114 + component.height / 2); + } else { + if (component.type == 7) { + local1921 = component.method491(Sprites.nameIcons); + if (local1921 == null) { + if (Component.aBoolean72) { + InterfaceList.redraw(component); + } + continue; + } + local276 = 0; + for (local468 = 0; local468 < component.baseHeight; local468++) { + for (memory = 0; memory < component.baseWidth; memory++) { + if (component.objTypes[local276] > 0) { + local2611 = ObjTypeList.get(component.objTypes[local276] - 1); + @Pc(3159) JagString local3159; + if (local2611.stackable != 1 && component.objCounts[local276] == 1) { + local3159 = JagString.concatenate(new JagString[]{MiniMenu.aClass100_32, local2611.name, JagString.aClass100_978}); + } else { + local3159 = JagString.concatenate(new JagString[]{MiniMenu.aClass100_32, local2611.name, JagString.aClass100_375, method1548(component.objCounts[local276])}); + } + local556 = local123 + memory * (component.invMarginX + 115); + objId = (component.invMarginY + 12) * local468 + local114; + if (component.halign == 0) { + local1921.renderLeft(local3159, local556, objId, component.color, component.shadowed ? 0 : -1); + } else if (component.halign == 1) { + local1921.renderCenter(local3159, local556 + 57, objId, component.color, component.shadowed ? 0 : -1); + } else { + local1921.renderRight(local3159, local556 + 115 - 1, objId, component.color, component.shadowed ? 0 : -1); + } + } + local276++; + } + } + PluginRepository.ComponentDraw(i, component, local123 + component.invMarginX + 115, local114 + component.invMarginY + 12); + } + if (component.type == 8 && Protocol.aClass13_11 == component && Protocol.anInt5235 == anInt4504) { + local276 = 0; + local270 = 0; + @Pc(3297) JagString local3297 = component.text; + @Pc(3299) Font local3299 = Fonts.p12Full; + local3297 = interpolate(component, local3297); + @Pc(3325) JagString local3325; + while (local3297.length() > 0) { + cardMemory = local3297.indexOf(JagString.aClass100_556); + if (cardMemory == -1) { + local3325 = local3297; + local3297 = JagString.EMPTY; + } else { + local3325 = local3297.substring(cardMemory, 0); + local3297 = local3297.substring(cardMemory + 4); + } + local556 = local3299.getStringWidth(local3325); + local276 += local3299.lineHeight + 1; + if (local270 < local556) { + local270 = local556; + } + } + local556 = local114 + component.height + 5; + local270 += 6; + local276 += 7; + if (local556 + local276 > arg7) { + local556 = arg7 - local276; + } + cardMemory = local123 + component.width - local270 - 5; + if (cardMemory < local123 + 5) { + cardMemory = local123 + 5; + } + if (local270 + cardMemory > arg4) { + cardMemory = arg4 - local270; + } + if (GlRenderer.enabled) { + GlRaster.fillRect(cardMemory, local556, local270, local276, 16777120); + GlRaster.drawRect(cardMemory, local556, local270, local276, 0); + } else { + SoftwareRaster.fillRect(cardMemory, local556, local270, local276, 16777120); + SoftwareRaster.drawRect(cardMemory, local556, local270, local276, 0); + } + local3297 = component.text; + objId = local556 + local3299.lineHeight + 2; + local3297 = interpolate(component, local3297); + while (local3297.length() > 0) { + local563 = local3297.indexOf(JagString.aClass100_556); + if (local563 == -1) { + local3325 = local3297; + local3297 = JagString.EMPTY; + } else { + local3325 = local3297.substring(local563, 0); + local3297 = local3297.substring(local563 + 4); + } + local3299.renderLeft(local3325, cardMemory + 3, objId, 0, -1); + objId += local3299.lineHeight + 1; + } + PluginRepository.ComponentDraw(i, component, cardMemory + 3, objId); + } + if (component.type == 9) { + if (component.aBoolean20) { + local468 = local123 + component.width; + local276 = local114 + component.height; + memory = local114; + } else { + local276 = local114; + memory = local114 + component.height; + local468 = local123 + component.width; + } + if (component.lineWidth == 1) { + if (GlRenderer.enabled) { + GlRaster.method1185(local123, local276, local468, memory, component.color); + } else { + SoftwareRaster.method2500(local123, local276, local468, memory, component.color); + } + } else if (GlRenderer.enabled) { + GlRaster.method1181(local123, local276, local468, memory, component.color, component.lineWidth); + } else { + SoftwareRaster.method2494(local123, local276, local468, memory, component.color, component.lineWidth); + } + PluginRepository.ComponentDraw(i, component, local468, local276); + } + } + } + } + } + } + } + } + } + } + } + + @OriginalMember(owner = "client!ag", name = "a", descriptor = "(IIIIIIIII)V") + public static void method86(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7) { + if (InterfaceList.load(arg0)) { + renderComponent(arg1, arg7, arg3, InterfaceList.components[arg0], arg2, -1, arg6, arg5, arg4); + } else if (arg4 == -1) { + for (@Pc(27) int local27 = 0; local27 < 100; local27++) { + InterfaceList.aBooleanArray100[local27] = true; + } + } else { + InterfaceList.aBooleanArray100[arg4] = true; + } + } + + @OriginalMember(owner = "client!al", name = "a", descriptor = "(Z)V") + public static void method182() { + aClass13Array13 = null; + method86(InterfaceList.topLevelInterface, 0, GameShell.canvasWidth, 0, -1, GameShell.canvasHeight, 0, 0); + if (aClass13Array13 != null) { + renderComponent(0, anInt3126, anInt4696, aClass13Array13, GameShell.canvasWidth, -1412584499, 0, GameShell.canvasHeight, aClass13_1.rectangle); + aClass13Array13 = null; + } + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(IILclient!be;IB)V") + public static void method3047(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) Component arg2, @OriginalArg(3) int arg3) { + if (GlRenderer.enabled) { + GlRaster.setClip(arg0, arg1, arg2.width + arg0, arg2.height + arg1); + } + if (MiniMap.state >= 3) { + if (GlRenderer.enabled) { + @Pc(44) Sprite local44 = arg2.method489(false); + if (local44 != null) { + local44.render(arg0, arg1); + } + } else { + SoftwareRaster.method2504(arg0, arg1, arg2.anIntArray37, arg2.anIntArray45); + } + } else if (GlRenderer.enabled) { + ((GlSprite) Sprites.compass).renderRotatedTransparent(arg0, arg1, arg2.width, arg2.height, Sprites.compass.width / 2, Sprites.compass.height / 2, (int) Camera.yawTarget, 256, (GlSprite) arg2.method489(false)); + } else { + ((SoftwareSprite) Sprites.compass).renderRotated(arg0, arg1, arg2.width, arg2.height, Sprites.compass.width / 2, Sprites.compass.height / 2, (int) Camera.yawTarget, arg2.anIntArray37, arg2.anIntArray45); + } + InterfaceList.rectangleRedraw[arg3] = true; + } + + @OriginalMember(owner = "client!fn", name = "a", descriptor = "(BIIIII)V") + public static void method1624(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + Sprites.scrollbars[0].renderTransparent(arg2, arg3); + Sprites.scrollbars[1].renderTransparent(arg2, arg4 + arg3 - 16); + @Pc(35) int local35 = arg4 * (arg4 - 32) / arg1; + if (local35 < 8) { + local35 = 8; + } + @Pc(54) int local54 = arg0 * (arg4 - local35 - 32) / (arg1 - arg4); + if (!GlRenderer.enabled) { + SoftwareRaster.fillRect(arg2, arg3 + 16, 16, arg4 - 32, anInt4306); + SoftwareRaster.fillRect(arg2, local54 + arg3 + 16, 16, local35, anInt1704); + SoftwareRaster.drawVerticalLine(arg2, local54 + arg3 + 16, local35, anInt4938); + SoftwareRaster.drawVerticalLine(arg2 + 1, local54 + 16 + arg3, local35, anInt4938); + SoftwareRaster.drawHorizontalLine(arg2, arg3 + local54 + 16, 16, anInt4938); + SoftwareRaster.drawHorizontalLine(arg2, arg3 + local54 + 17, 16, anInt4938); + SoftwareRaster.drawVerticalLine(arg2 + 15, local54 + 16 + arg3, local35, anInt671); + SoftwareRaster.drawVerticalLine(arg2 + 14, arg3 - -17 - -local54, local35 - 1, anInt671); + SoftwareRaster.drawHorizontalLine(arg2, local35 + arg3 + local54 + 15, 16, anInt671); + SoftwareRaster.drawHorizontalLine(arg2 + 1, local35 + arg3 - (-local54 + -14), 15, anInt671); + return; + } + GlRaster.fillRect(arg2, arg3 + 16, 16, arg4 - 32, anInt4306); + GlRaster.fillRect(arg2, arg3 + local54 + 16, 16, local35, anInt1704); + GlRaster.drawVerticalLine(arg2, local54 + arg3 + 16, local35, anInt4938); + GlRaster.drawVerticalLine(arg2 + 1, local54 + 16 + arg3, local35, anInt4938); + GlRaster.drawHorizontalLine(arg2, local54 + arg3 + 16, 16, anInt4938); + GlRaster.drawHorizontalLine(arg2, local54 + arg3 + 17, 16, anInt4938); + GlRaster.drawVerticalLine(arg2 + 15, arg3 + (16 - -local54), local35, anInt671); + GlRaster.drawVerticalLine(arg2 + 14, arg3 - -local54 + 17, local35 - 1, anInt671); + GlRaster.drawHorizontalLine(arg2, local35 + arg3 + local54 + 15, 16, anInt671); + GlRaster.drawHorizontalLine(arg2 + 1, arg3 + 14 - -local54 + local35, 15, anInt671); + } + + @OriginalMember(owner = "client!aa", name = "a", descriptor = "(BLclient!be;)V") + public static void method13(@OriginalArg(1) Component arg0) { + @Pc(16) int local16 = arg0.clientCode; + if (local16 == 324) { + if (anInt3851 == -1) { + anInt3851 = arg0.spriteId; + anInt3502 = arg0.activeSpriteId; + } + if (PlayerAppearance.DEFAULT.gender) { + arg0.spriteId = anInt3851; + } else { + arg0.spriteId = anInt3502; + } + } else if (local16 == 325) { + if (anInt3851 == -1) { + anInt3502 = arg0.activeSpriteId; + anInt3851 = arg0.spriteId; + } + if (PlayerAppearance.DEFAULT.gender) { + arg0.spriteId = anInt3502; + } else { + arg0.spriteId = anInt3851; + } + } else if (local16 == 327) { + arg0.modelXAngle = 150; + arg0.modelYAngle = (int) (Math.sin((double) client.loop / 40.0D) * 256.0D) & 0x7FF; + arg0.modelType = 5; + arg0.modelId = -1; + } else if (local16 == 328) { + if (PlayerList.self.username == null) { + arg0.modelId = 0; + } else { + arg0.modelXAngle = 150; + arg0.modelYAngle = (int) (Math.sin((double) client.loop / 40.0D) * 256.0D) & 0x7FF; + arg0.modelType = 5; + arg0.modelId = ((int) PlayerList.self.username.encode37() << 11) + 2047; + arg0.anInt496 = PlayerList.self.anInt3388; + arg0.anInt500 = 0; + arg0.modelSeqId = PlayerList.self.movementSeqId; + arg0.anInt510 = PlayerList.self.anInt3407; + } + } + } + + @OriginalMember(owner = "client!fi", name = "a", descriptor = "(BI)Lclient!na;") + public static JagString method1548(@OriginalArg(1) int arg0) { + @Pc(9) JagString local9 = JagString.parseInt(arg0); + for (@Pc(21) int local21 = local9.length() - 3; local21 > 0; local21 -= 3) { + local9 = JagString.concatenate(new JagString[]{local9.substring(local21, 0), JagString.aClass100_760, local9.substring(local21)}); + } + if (local9.length() > 9) { + return JagString.concatenate(new JagString[]{JagString.aClass100_1043, local9.substring(local9.length() - 8, 0), LocalizedText.MILLION_SHORT, MiniMenu.OPEN_PARENTHESIS, local9, JagString.aClass100_583}); + } else if (local9.length() > 6) { + return JagString.concatenate(new JagString[]{JagString.aClass100_589, local9.substring(local9.length() - 4, 0), LocalizedText.THOUSAND_SHORT, MiniMenu.OPEN_PARENTHESIS, local9, JagString.aClass100_583}); + } else { + return JagString.concatenate(new JagString[]{JagString.aClass100_1101, local9, JagString.aClass100_978}); + } + } + + @OriginalMember(owner = "client!a", name = "a", descriptor = "(IIIII)V") + public static void method4(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3) { + if (GlRenderer.enabled) { + GlRaster.setClip(arg0, arg3, arg2 + arg0, arg1 + arg3); + GlRaster.fillRect(arg0, arg3, arg2, arg1, 0); + } else { + SoftwareRaster.setClip(arg0, arg3, arg2 + arg0, arg3 + arg1); + SoftwareRaster.fillRect(arg0, arg3, arg2, arg1, 0); + } + if (WorldMap.loadPercentage < 100) { + return; + } + if (WorldMap.aClass3_Sub2_Sub1_2 == null || arg2 != WorldMap.aClass3_Sub2_Sub1_2.width || WorldMap.aClass3_Sub2_Sub1_2.height != arg1) { + @Pc(63) SoftwareSprite local63 = new SoftwareSprite(arg2, arg1); + SoftwareRaster.setSize(local63.pixels, arg2, arg1); + WorldMap.method4364(arg2, 0, WorldMap.width, 0, 0, WorldMap.length, arg1, 0); + if (GlRenderer.enabled) { + WorldMap.aClass3_Sub2_Sub1_2 = new GlSprite(local63); + } else { + WorldMap.aClass3_Sub2_Sub1_2 = local63; + } + if (GlRenderer.enabled) { + SoftwareRaster.pixels = null; + } else { + SoftwareRaster.frameBuffer.makeTarget(); + } + } + WorldMap.aClass3_Sub2_Sub1_2.drawPixels(arg0, arg3); + @Pc(147) int local147 = arg1 * anInt2884 / WorldMap.length + arg3; + @Pc(153) int local153 = WorldMap.anInt1176 * arg1 / WorldMap.length; + @Pc(161) int local161 = arg0 + arg2 * anInt2882 / WorldMap.width; + @Pc(167) int local167 = arg2 * WorldMap.anInt2387 / WorldMap.width; + @Pc(169) int local169 = 16711680; + if (client.game == 1) { + local169 = 16777215; + } + if (GlRenderer.enabled) { + GlRaster.fillRectAlpha(local161, local147, local167, local153, local169, 128); + GlRaster.drawRect(local161, local147, local167, local153, local169); + } else { + SoftwareRaster.fillRectAlpha(local161, local147, local167, local153, local169, 128); + SoftwareRaster.drawRect(local161, local147, local167, local153, local169); + } + if (WorldMap.anInt1864 <= 0) { + return; + } + @Pc(225) int local225; + if (anInt2428 > 10) { + local225 = (20 - anInt2428) * 25; + } else { + local225 = anInt2428 * 25; + } + for (@Pc(238) MapElement local238 = (MapElement) WorldMap.mapElements.head(); local238 != null; local238 = (MapElement) WorldMap.mapElements.next()) { + if (local238.id == WorldMap.anInt172) { + @Pc(258) int local258 = arg3 + local238.anInt4314 * arg1 / WorldMap.length; + @Pc(267) int local267 = arg2 * local238.anInt4307 / WorldMap.width + arg0; + if (GlRenderer.enabled) { + GlRaster.fillRectAlpha(local267 - 2, local258 + -2, 4, 4, 16776960, local225); + } else { + SoftwareRaster.fillRectAlpha(local267 - 2, local258 + -2, 4, 4, 16776960, local225); + } + } + } + } + + @OriginalMember(owner = "client!da", name = "a", descriptor = "(IIILclient!be;)V") + public static void method1015(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) Component arg2) { + if (aClass13_14 != null || aBoolean108 || (arg2 == null || method1836(arg2) == null)) { + return; + } + aClass13_14 = arg2; + aClass13_1 = method1836(arg2); + anInt5388 = arg1; + aBoolean172 = false; + anInt4851 = 0; + anInt4035 = arg0; + } + + @OriginalMember(owner = "client!ha", name = "a", descriptor = "(ILclient!be;)Lclient!be;") + public static Component method1836(@OriginalArg(1) Component arg0) { + @Pc(12) Component local12 = InterfaceList.method938(arg0); + if (local12 == null) { + local12 = arg0.aClass13_5; + } + return local12; + } + + @OriginalMember(owner = "client!ac", name = "b", descriptor = "(I)V") + public static void method28() { + InterfaceList.redraw(aClass13_14); + anInt4851++; + if (InterfaceList.aBoolean83 && InterfaceList.aBoolean174) { + @Pc(30) int local30 = Mouse.lastMouseX; + local30 -= anInt5388; + if (anInt2225 > local30) { + local30 = anInt2225; + } + @Pc(41) int local41 = Mouse.lastMouseY; + if (anInt2225 + aClass13_1.width < local30 - -aClass13_14.width) { + local30 = anInt2225 + aClass13_1.width - aClass13_14.width; + } + local41 -= anInt4035; + if (local41 < InterfaceList.anInt5103) { + local41 = InterfaceList.anInt5103; + } + if (InterfaceList.anInt5103 + aClass13_1.height < local41 - -aClass13_14.height) { + local41 = InterfaceList.anInt5103 + aClass13_1.height - aClass13_14.height; + } + @Pc(109) int local109 = local41 - InterfaceList.anInt660; + @Pc(114) int local114 = local30 - InterfaceList.anInt3075; + @Pc(122) int local122 = local30 + aClass13_1.scrollX - anInt2225; + @Pc(130) int local130 = aClass13_1.scrollY + local41 - InterfaceList.anInt5103; + @Pc(133) int local133 = aClass13_14.dragDeadzone; + if (anInt4851 > aClass13_14.dragDeadtime && (local133 < local114 || -local133 > local114 || local109 > local133 || local109 < -local133)) { + aBoolean172 = true; + } + @Pc(176) HookRequest local176; + if (aClass13_14.onDragStart != null && aBoolean172) { + local176 = new HookRequest(); + local176.source = aClass13_14; + local176.arguments = aClass13_14.onDragStart; + local176.mouseX = local122; + local176.mouseY = local130; + ScriptRunner.run(local176); + } + if (Mouse.pressedButton == 0) { + if (aBoolean172) { + if (aClass13_14.onDragRelease != null) { + local176 = new HookRequest(); + local176.mouseY = local130; + local176.target = InterfaceList.aClass13_12; + local176.mouseX = local122; + local176.arguments = aClass13_14.onDragRelease; + local176.source = aClass13_14; + ScriptRunner.run(local176); + } + if (InterfaceList.aClass13_12 != null && InterfaceList.method938(aClass13_14) != null) { + Protocol.outboundBuffer.p1isaac(79); + Protocol.outboundBuffer.mp4(aClass13_14.id); + Protocol.outboundBuffer.ip2(InterfaceList.aClass13_12.createdComponentId); + Protocol.outboundBuffer.p4(InterfaceList.aClass13_12.id); + Protocol.outboundBuffer.ip2(aClass13_14.createdComponentId); + } + } else if ((VarpDomain.anInt2952 == 1 || MiniMenu.method4640(MiniMenu.size - 1)) && MiniMenu.size > 2) { + ScriptRunner.method3901(); + } else if (MiniMenu.size > 0) { + MiniMenu.method1372(); + } + aClass13_14 = null; + } + } else if (anInt4851 > 1) { + aClass13_14 = null; + } + } +} diff --git a/client/src/main/java/rt4/CursorType.java b/client/src/main/java/rt4/CursorType.java new file mode 100644 index 0000000..e858129 --- /dev/null +++ b/client/src/main/java/rt4/CursorType.java @@ -0,0 +1,53 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ia") +public final class CursorType { + + @OriginalMember(owner = "client!ia", name = "a", descriptor = "I") + public int hotSpotY; + + @OriginalMember(owner = "client!ia", name = "c", descriptor = "I") + public int hotSpotX; + + @OriginalMember(owner = "client!ia", name = "i", descriptor = "I") + private int spriteId; + + @OriginalMember(owner = "client!ia", name = "a", descriptor = "(B)Lclient!mm;") + public final SoftwareSprite getSprite() { + @Pc(7) SoftwareSprite local7 = (SoftwareSprite) CursorTypeList.sprites.get(this.spriteId); + if (local7 != null) { + return local7; + } + local7 = SoftwareSprite.loadSoftwareAlphaSprite(CursorTypeList.spritesArchive, this.spriteId); + if (local7 != null) { + CursorTypeList.sprites.put(local7, this.spriteId); + } + return local7; + } + + @OriginalMember(owner = "client!ia", name = "a", descriptor = "(Lclient!wa;IB)V") + public final void decode(@OriginalArg(0) Buffer arg0, @OriginalArg(1) int arg1) { + while (true) { + @Pc(18) int local18 = arg0.g1(); + if (local18 == 0) { + return; + } + this.decode(arg1, local18, arg0); + } + } + + @OriginalMember(owner = "client!ia", name = "a", descriptor = "(IIILclient!wa;)V") + private void decode(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) Buffer arg2) { + if (arg1 == 1) { + this.spriteId = arg2.g2(); + } else if (arg1 == 2) { + this.hotSpotX = arg2.g1(); + this.hotSpotY = arg2.g1(); + } + } +} diff --git a/client/src/main/java/rt4/CursorTypeList.java b/client/src/main/java/rt4/CursorTypeList.java new file mode 100644 index 0000000..157f748 --- /dev/null +++ b/client/src/main/java/rt4/CursorTypeList.java @@ -0,0 +1,55 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class CursorTypeList { + @OriginalMember(owner = "client!ge", name = "i", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + @OriginalMember(owner = "client!ah", name = "i", descriptor = "Lclient!n;") + public static final SoftLruHashTable sprites = new SoftLruHashTable(2); + @OriginalMember(owner = "client!mc", name = "Z", descriptor = "Lclient!ve;") + public static Js5 archive; + @OriginalMember(owner = "client!tk", name = "j", descriptor = "Lclient!ve;") + public static Js5 spritesArchive; + + @OriginalMember(owner = "client!u", name = "a", descriptor = "(BLclient!ve;Lclient!ve;)V") + public static void init(@OriginalArg(1) Js5 arg0, @OriginalArg(2) Js5 arg1) { + archive = arg0; + spritesArchive = arg1; + } + + @OriginalMember(owner = "client!qg", name = "d", descriptor = "(II)Lclient!ia;") + public static CursorType get(@OriginalArg(0) int arg0) { + @Pc(10) CursorType local10 = (CursorType) types.get(arg0); + if (local10 != null) { + return local10; + } + @Pc(20) byte[] local20 = archive.fetchFile(33, arg0); + local10 = new CursorType(); + if (local20 != null) { + local10.decode(new Buffer(local20), arg0); + } + types.put(local10, arg0); + return local10; + } + + @OriginalMember(owner = "client!an", name = "i", descriptor = "(I)V") + public static void clear() { + types.clear(); + sprites.clear(); + } + + @OriginalMember(owner = "client!c", name = "d", descriptor = "(II)V") + public static void clean() { + types.clean(5); + sprites.clean(5); + } + + @OriginalMember(owner = "client!ca", name = "a", descriptor = "(Z)V") + public static void removeSoft() { + types.removeSoft(); + sprites.removeSoft(); + } +} diff --git a/client/src/main/java/rt4/DateUtil.java b/client/src/main/java/rt4/DateUtil.java new file mode 100644 index 0000000..6def766 --- /dev/null +++ b/client/src/main/java/rt4/DateUtil.java @@ -0,0 +1,99 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +public final class DateUtil { + + @OriginalMember(owner = "client!cl", name = "K", descriptor = "Ljava/util/Calendar;") + public static final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + + @OriginalMember(owner = "client!km", name = "tc", descriptor = "Lclient!na;") + private static final JagString DEC = JagString.parse("Dec"); + @OriginalMember(owner = "client!km", name = "vc", descriptor = "Lclient!na;") + private static final JagString JUL = JagString.parse("Jul"); + @OriginalMember(owner = "client!km", name = "xc", descriptor = "Lclient!na;") + private static final JagString MAY = JagString.parse("May"); + @OriginalMember(owner = "client!km", name = "yc", descriptor = "Lclient!na;") + private static final JagString NOV = JagString.parse("Nov"); + @OriginalMember(owner = "client!km", name = "zc", descriptor = "Lclient!na;") + private static final JagString MAR = JagString.parse("Mar"); + @OriginalMember(owner = "client!km", name = "Gc", descriptor = "Lclient!na;") + private static final JagString JAN = JagString.parse("Jan"); + @OriginalMember(owner = "client!km", name = "Hc", descriptor = "Lclient!na;") + private static final JagString FEB = JagString.parse("Feb"); + @OriginalMember(owner = "client!km", name = "Tc", descriptor = "Lclient!na;") + private static final JagString APR = JagString.parse("Apr"); + @OriginalMember(owner = "client!km", name = "Wc", descriptor = "Lclient!na;") + private static final JagString JUN = JagString.parse("Jun"); + @OriginalMember(owner = "client!km", name = "Qc", descriptor = "Lclient!na;") + private static final JagString AUG = JagString.parse("Aug"); + @OriginalMember(owner = "client!km", name = "cd", descriptor = "Lclient!na;") + private static final JagString SEP = JagString.parse("Sep"); + @OriginalMember(owner = "client!km", name = "dd", descriptor = "Lclient!na;") + private static final JagString OCT = JagString.parse("Oct"); + @OriginalMember(owner = "client!km", name = "Ac", descriptor = "[Lclient!na;") + public static final JagString[] MONTHS = new JagString[]{JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC}; + + @OriginalMember(owner = "client!rl", name = "T", descriptor = "Lclient!na;") + private static final JagString SAT = JagString.parse("Sat"); + @OriginalMember(owner = "client!rl", name = "U", descriptor = "Lclient!na;") + private static final JagString MON = JagString.parse("Mon"); + @OriginalMember(owner = "client!rl", name = "W", descriptor = "Lclient!na;") + private static final JagString FRI = JagString.parse("Fri"); + @OriginalMember(owner = "client!rl", name = "db", descriptor = "Lclient!na;") + private static final JagString SUN = JagString.parse("Sun"); + @OriginalMember(owner = "client!rl", name = "cb", descriptor = "Lclient!na;") + private static final JagString TUE = JagString.parse("Tue"); + @OriginalMember(owner = "client!rl", name = "ab", descriptor = "Lclient!na;") + private static final JagString WED = JagString.parse("Wed"); + @OriginalMember(owner = "client!rl", name = "bb", descriptor = "Lclient!na;") + private static final JagString THU = JagString.parse("Thu"); + @OriginalMember(owner = "client!rl", name = "Y", descriptor = "[Lclient!na;") + public static final JagString[] DAYS = new JagString[]{SUN, MON, TUE, WED, THU, FRI, SAT}; + + @OriginalMember(owner = "client!ck", name = "T", descriptor = "Lclient!na;") + private static final JagString aClass100_207 = JagString.parse("Jan"); + @OriginalMember(owner = "client!ck", name = "hb", descriptor = "Lclient!na;") + private static final JagString aClass100_212 = JagString.parse("Feb"); + @OriginalMember(owner = "client!ck", name = "gb", descriptor = "Lclient!na;") + private static final JagString aClass100_211 = JagString.parse("Mar"); + @OriginalMember(owner = "client!ck", name = "db", descriptor = "Lclient!na;") + private static final JagString aClass100_210 = JagString.parse("Apr"); + @OriginalMember(owner = "client!ck", name = "n", descriptor = "Lclient!na;") + private static final JagString aClass100_199 = JagString.parse("May"); + @OriginalMember(owner = "client!ck", name = "L", descriptor = "Lclient!na;") + private static final JagString aClass100_204 = JagString.parse("Jun"); + @OriginalMember(owner = "client!ck", name = "B", descriptor = "Lclient!na;") + private static final JagString aClass100_202 = JagString.parse("Jul"); + @OriginalMember(owner = "client!ck", name = "l", descriptor = "Lclient!na;") + private static final JagString aClass100_198 = JagString.parse("Aug"); + @OriginalMember(owner = "client!ck", name = "V", descriptor = "Lclient!na;") + private static final JagString aClass100_208 = JagString.parse("Sep"); + @OriginalMember(owner = "client!ck", name = "S", descriptor = "Lclient!na;") + private static final JagString aClass100_206 = JagString.parse("Oct"); + @OriginalMember(owner = "client!ck", name = "Y", descriptor = "Lclient!na;") + private static final JagString aClass100_209 = JagString.parse("Nov"); + @OriginalMember(owner = "client!ck", name = "O", descriptor = "Lclient!na;") + private static final JagString aClass100_205 = JagString.parse("Dec"); + @OriginalMember(owner = "client!ck", name = "f", descriptor = "[Lclient!na;") + public static final JagString[] aClass100Array40 = new JagString[]{aClass100_207, aClass100_212, aClass100_211, aClass100_210, aClass100_199, aClass100_204, aClass100_202, aClass100_198, aClass100_208, aClass100_206, aClass100_209, aClass100_205}; + + @OriginalMember(owner = "client!cj", name = "a", descriptor = "(JB)Lclient!na;") + public static JagString getDateString(@OriginalArg(0) long date) { + calendar.setTime(new Date(date)); + @Pc(13) int local13 = calendar.get(Calendar.DAY_OF_WEEK); + @Pc(17) int local17 = calendar.get(Calendar.DATE); + @Pc(21) int local21 = calendar.get(Calendar.MONTH); + @Pc(32) int local32 = calendar.get(Calendar.YEAR); + @Pc(36) int local36 = calendar.get(Calendar.HOUR_OF_DAY); + @Pc(40) int local40 = calendar.get(Calendar.MINUTE); + @Pc(44) int local44 = calendar.get(Calendar.SECOND); + return JagString.concatenate(new JagString[]{DAYS[local13 - 1], JagString.aClass100_461, JagString.parseInt(local17 / 10), JagString.parseInt(local17 % 10), JagString.aClass100_1089, MONTHS[local21], JagString.aClass100_1089, JagString.parseInt(local32), JagString.SPACE, JagString.parseInt(local36 / 10), JagString.parseInt(local36 % 10), JagString.COLON, JagString.parseInt(local40 / 10), JagString.parseInt(local40 % 10), JagString.COLON, JagString.parseInt(local44 / 10), JagString.parseInt(local44 % 10), JagString.TIMEZONE}); + } +} diff --git a/client/src/main/java/rt4/DeadClass.java b/client/src/main/java/rt4/DeadClass.java new file mode 100644 index 0000000..1fdeb9d --- /dev/null +++ b/client/src/main/java/rt4/DeadClass.java @@ -0,0 +1,21 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalMember; + +// Has no usages. + +public final class DeadClass { + + @OriginalMember(owner = "client!ul", name = "I", descriptor = "Lclient!gn;") + public static final LruHashTable cache = new LruHashTable(4); + + @OriginalMember(owner = "client!ck", name = "b", descriptor = "Lclient!na;") + private static final JagString aClass100_195 = JagString.parse("Discard"); + @OriginalMember(owner = "client!ck", name = "o", descriptor = "Lclient!na;") + private static final JagString aClass100_200 = JagString.parse("Loaded world list data"); + @OriginalMember(owner = "client!cn", name = "L", descriptor = "I") + public static double yawAccel = 0; + + @OriginalMember(owner = "client!rc", name = "R", descriptor = "Z") + private static boolean aBoolean74; +} diff --git a/client/src/main/java/rt4/DelayedStateChange.java b/client/src/main/java/rt4/DelayedStateChange.java new file mode 100644 index 0000000..d88d26a --- /dev/null +++ b/client/src/main/java/rt4/DelayedStateChange.java @@ -0,0 +1,272 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!da") +public final class DelayedStateChange extends SecondaryNode { + + @OriginalMember(owner = "client!client", name = "U", descriptor = "Lclient!sc;") + public static final HashTable changes = new HashTable(16); + @OriginalMember(owner = "client!la", name = "f", descriptor = "Lclient!ce;") + public static final SecondaryLinkedList clientQueue = new SecondaryLinkedList(); + @OriginalMember(owner = "client!rh", name = "e", descriptor = "Lclient!ce;") + public static final SecondaryLinkedList serverQueue = new SecondaryLinkedList(); + @OriginalMember(owner = "client!da", name = "T", descriptor = "I") + public int intArg2; + + @OriginalMember(owner = "client!da", name = "U", descriptor = "I") + public int intArg3; + + @OriginalMember(owner = "client!da", name = "V", descriptor = "I") + public int intArg1; + + @OriginalMember(owner = "client!da", name = "W", descriptor = "Lclient!na;") + public JagString stringArg; + + @OriginalMember(owner = "client!da", name = "", descriptor = "(II)V") + public DelayedStateChange(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + this.key = (long) arg0 << 32 | (long) arg1; + } + + @OriginalMember(owner = "client!bj", name = "d", descriptor = "(B)V") + public static void clear() { + changes.clear(); + clientQueue.clear(); + serverQueue.clear(); + } + + @OriginalMember(owner = "client!pf", name = "a", descriptor = "(III)V") + public static void setComponentModelRotationSpeedServer(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(14) DelayedStateChange local14 = create(13, arg1); + local14.pushServer(); + local14.intArg1 = arg0; + } + + @OriginalMember(owner = "client!pi", name = "a", descriptor = "(Lclient!na;BI)V") + public static void method3498(@OriginalArg(0) JagString arg0, @OriginalArg(2) int arg1) { + @Pc(10) DelayedStateChange local10 = create(2, arg1); + local10.pushServer(); + local10.stringArg = arg0; + } + + @OriginalMember(owner = "client!mc", name = "c", descriptor = "(III)V") + public static void method2905(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + @Pc(14) DelayedStateChange local14 = create(7, arg0); + local14.pushServer(); + local14.intArg1 = arg1; + } + + @OriginalMember(owner = "client!ke", name = "c", descriptor = "(III)V") + public static void updateVarC(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(8) DelayedStateChange local8 = create(1, arg0); + local8.pushServer(); + local8.intArg1 = arg1; + } + + @OriginalMember(owner = "client!ke", name = "a", descriptor = "(IIIBI)V") + public static void updateComponentModel(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3) { + @Pc(8) DelayedStateChange local8 = create(4, arg2); + local8.pushServer(); + local8.intArg3 = arg3; + local8.intArg2 = arg0; + local8.intArg1 = arg1; + } + + @OriginalMember(owner = "client!se", name = "a", descriptor = "(III)V") + public static void method3893(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(14) DelayedStateChange local14 = create(5, arg0); + local14.pushServer(); + local14.intArg1 = arg1; + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(BIIII)V") + public static void updateView(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + @Pc(8) DelayedStateChange local8 = create(8, arg1); + local8.pushServer(); + local8.intArg2 = arg0; + local8.intArg1 = arg3; + local8.intArg3 = arg2; + } + + @OriginalMember(owner = "client!kk", name = "a", descriptor = "(IIB)V") + public static void setColor(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(4) DelayedStateChange local4 = create(6, arg1); + local4.pushServer(); + local4.intArg1 = arg0; + } + + @OriginalMember(owner = "client!wl", name = "a", descriptor = "(IIII)V") + public static void method4666(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2) { + @Pc(18) DelayedStateChange local18 = create(11, arg1); + local18.pushServer(); + local18.intArg3 = arg2; + local18.intArg1 = arg0; + } + + @OriginalMember(owner = "client!gf", name = "a", descriptor = "(Lclient!na;II)V") + public static void method3617(@OriginalArg(0) JagString arg0, @OriginalArg(2) int arg1) { + @Pc(6) DelayedStateChange local6 = create(3, arg1); + local6.pushServer(); + local6.stringArg = arg0; + } + + @OriginalMember(owner = "client!ug", name = "a", descriptor = "(IB)V") + public static void setComponentObjClient(@OriginalArg(0) int arg0) { + @Pc(14) DelayedStateChange local14 = create(9, arg0); + local14.pushClient(); + } + + @OriginalMember(owner = "client!mc", name = "a", descriptor = "(BI)V") + public static void setComponentModelAngleClient(@OriginalArg(1) int arg0) { + @Pc(4) DelayedStateChange local4 = create(8, arg0); + local4.pushClient(); + } + + @OriginalMember(owner = "client!og", name = "a", descriptor = "(II)V") + public static void setComponentModelOffsetClient(@OriginalArg(0) int arg0) { + @Pc(12) DelayedStateChange local12 = create(10, arg0); + local12.pushClient(); + } + + @OriginalMember(owner = "client!te", name = "a", descriptor = "(III)Lclient!da;") + public static DelayedStateChange create(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + @Pc(13) DelayedStateChange local13 = (DelayedStateChange) changes.get((long) arg1 | (long) arg0 << 32); + if (local13 == null) { + local13 = new DelayedStateChange(arg0, arg1); + changes.put(local13, local13.key); + } + return local13; + } + + @OriginalMember(owner = "client!wc", name = "a", descriptor = "(ZI)V") + public static void method4600(@OriginalArg(1) int arg0) { + @Pc(8) DelayedStateChange local8 = create(4, arg0); + local8.pushClient(); + } + + @OriginalMember(owner = "client!jd", name = "a", descriptor = "(IB)V") + public static void method2353(@OriginalArg(0) int arg0) { + @Pc(12) DelayedStateChange local12 = create(12, arg0); + local12.pushClient(); + } + + @OriginalMember(owner = "client!k", name = "a", descriptor = "(B)Lclient!da;") + public static DelayedStateChange poll() { + @Pc(10) DelayedStateChange local10 = (DelayedStateChange) serverQueue.head(); + if (local10 != null) { + local10.unlink(); + local10.unlinkSecondary(); + return local10; + } + do { + local10 = (DelayedStateChange) clientQueue.head(); + if (local10 == null) { + return null; + } + if (local10.getTime() > MonotonicClock.currentTimeMillis()) { + return null; + } + local10.unlink(); + local10.unlinkSecondary(); + } while ((Long.MIN_VALUE & local10.secondaryKey) == 0L); + return local10; + } + + @OriginalMember(owner = "client!lf", name = "a", descriptor = "(IIIIB)V") + public static void method2745(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(8) DelayedStateChange local8 = create(10, arg0); + local8.pushServer(); + local8.intArg3 = arg2; + local8.intArg1 = arg3; + local8.intArg2 = arg1; + } + + @OriginalMember(owner = "client!n", name = "a", descriptor = "(II)V") + public static void method3096(@OriginalArg(0) int arg0) { + @Pc(8) DelayedStateChange local8 = create(3, arg0); + local8.pushClient(); + } + + @OriginalMember(owner = "client!oi", name = "b", descriptor = "(II)V") + public static void method3345(@OriginalArg(0) int arg0) { + @Pc(8) DelayedStateChange local8 = create(5, arg0); + local8.pushClient(); + } + + @OriginalMember(owner = "client!ra", name = "a", descriptor = "(BIII)V") + public static void method3707(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + @Pc(12) DelayedStateChange local12 = create(9, arg0); + local12.pushServer(); + local12.intArg1 = arg2; + local12.intArg3 = arg1; + } + + @OriginalMember(owner = "client!si", name = "b", descriptor = "(IIB)V") + public static void method3938(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(16) DelayedStateChange local16 = create(12, arg1); + local16.pushServer(); + local16.intArg1 = arg0; + } + + @OriginalMember(owner = "client!tm", name = "a", descriptor = "(II)V") + public static void method4224(@OriginalArg(0) int arg0) { + @Pc(16) DelayedStateChange local16 = create(6, arg0); + local16.pushClient(); + } + + @OriginalMember(owner = "client!wl", name = "a", descriptor = "(II)V") + public static void method4675(@OriginalArg(1) int arg0) { + @Pc(17) DelayedStateChange local17 = create(11, arg0); + local17.pushClient(); + } + + @OriginalMember(owner = "client!ac", name = "a", descriptor = "(BI)V") + public static void method24(@OriginalArg(1) int arg0) { + @Pc(16) DelayedStateChange local16 = create(1, arg0); + local16.pushClient(); + } + + @OriginalMember(owner = "client!ha", name = "b", descriptor = "(II)V") + public static void method1840(@OriginalArg(1) int arg0) { + @Pc(8) DelayedStateChange local8 = create(2, arg0); + local8.pushClient(); + } + + @OriginalMember(owner = "client!he", name = "c", descriptor = "(II)V") + public static void method1906(@OriginalArg(1) int arg0) { + @Pc(12) DelayedStateChange local12 = create(7, arg0); + local12.pushClient(); + } + + @OriginalMember(owner = "client!da", name = "a", descriptor = "(Z)V") + public final void pushClient() { + this.secondaryKey = MonotonicClock.currentTimeMillis() + 500L | Long.MIN_VALUE & this.secondaryKey; + clientQueue.addTail(this); + } + + @OriginalMember(owner = "client!da", name = "b", descriptor = "(Z)J") + public final long getTime() { + return this.secondaryKey & Long.MAX_VALUE; + } + + @OriginalMember(owner = "client!da", name = "e", descriptor = "(I)I") + public final int getType() { + return (int) (this.key >>> 32 & 0xFFL); + } + + @OriginalMember(owner = "client!da", name = "f", descriptor = "(B)I") + public final int getId() { + return (int) this.key; + } + + @OriginalMember(owner = "client!da", name = "g", descriptor = "(B)V") + public final void pushServer() { + this.secondaryKey |= Long.MIN_VALUE; + if (this.getTime() == 0L) { + serverQueue.addTail(this); + } + } +} diff --git a/client/src/main/java/rt4/DirectByteArray.java b/client/src/main/java/rt4/DirectByteArray.java new file mode 100644 index 0000000..b9b6cf2 --- /dev/null +++ b/client/src/main/java/rt4/DirectByteArray.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!ua") +public final class DirectByteArray extends ByteArray { + + @OriginalMember(owner = "client!ua", name = "m", descriptor = "Ljava/nio/ByteBuffer;") + private ByteBuffer buffer; + + @OriginalMember(owner = "client!ua", name = "a", descriptor = "(I[B)V") + @Override + public final void set(@OriginalArg(1) byte[] bytes) { + this.buffer = ByteBuffer.allocateDirect(bytes.length); + this.buffer.position(0); + this.buffer.put(bytes); + } + + @OriginalMember(owner = "client!ua", name = "a", descriptor = "(I)[B") + @Override + public final byte[] get() { + @Pc(4) byte[] bytes = new byte[this.buffer.capacity()]; + this.buffer.position(0); + this.buffer.get(bytes); + return bytes; + } +} diff --git a/client/src/main/java/rt4/DisplayMode.java b/client/src/main/java/rt4/DisplayMode.java new file mode 100644 index 0000000..440e79d --- /dev/null +++ b/client/src/main/java/rt4/DisplayMode.java @@ -0,0 +1,344 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; +import plugin.PluginRepository; + +import java.awt.*; + +@OriginalClass("client!od") +public final class DisplayMode { + + @OriginalMember(owner = "client!ib", name = "i", descriptor = "[Lclient!od;") + public static DisplayMode[] aClass114Array1; + @OriginalMember(owner = "client!rc", name = "M", descriptor = "Z") + public static boolean aBoolean73 = false; + @OriginalMember(owner = "client!jk", name = "y", descriptor = "Z") + public static boolean resizable = false; + @OriginalMember(owner = "client!hi", name = "f", descriptor = "J") + public static long aLong89 = 0L; + + @OriginalMember(owner = "client!od", name = "j", descriptor = "I") + public int width; + + @OriginalMember(owner = "client!od", name = "k", descriptor = "I") + public int refreshRate; + + @OriginalMember(owner = "client!od", name = "l", descriptor = "I") + public int height; + + @OriginalMember(owner = "client!od", name = "m", descriptor = "I") + public int bitDepth; + + public static boolean resizableSD = false; + + @OriginalMember(owner = "client!c", name = "a", descriptor = "(Ljava/awt/Frame;ZLsignlink!ll;)V") + public static void exitFullScreen(@OriginalArg(0) Frame frame, @OriginalArg(2) SignLink signLink) { + while (true) { + @Pc(16) PrivilegedRequest request = signLink.exitFullScreen(frame); + while (request.status == 0) { + ThreadUtils.sleep(10L); + } + if (request.status == 1) { + frame.setVisible(false); + frame.dispose(); + return; + } + ThreadUtils.sleep(100L); + } + } + + @OriginalMember(owner = "client!th", name = "a", descriptor = "(ZIIII)V") + public static void setWindowMode(@OriginalArg(0) boolean replaceCanvas, @OriginalArg(1) int newMode, @OriginalArg(3) int width, @OriginalArg(4) int height) { + aLong89 = 0L; + @Pc(4) int currentMode = getWindowMode(); + if (newMode == 3 || currentMode == 3) { + replaceCanvas = true; + } + @Pc(44) boolean useHD = currentMode > 0 != newMode > 0; + if (replaceCanvas && newMode > 0 && !resizableSD) { + useHD = true; + } + setWindowMode(replaceCanvas, newMode, useHD, currentMode, width, height); + } + + @OriginalMember(owner = "client!le", name = "a", descriptor = "(I)I") + public static int getWindowMode() { + if (GameShell.fullScreenFrame != null) { + return 3; + } else if ((GlRenderer.enabled && resizable) || resizableSD) { + return 2; + } else if (GlRenderer.enabled && !resizable) { + return 1; + } else { + return 0; + } + } + + @OriginalMember(owner = "client!pm", name = "a", descriptor = "(ZIZIZII)V") + public static void setWindowMode(@OriginalArg(0) boolean replaceCanvas, @OriginalArg(1) int newMode, @OriginalArg(2) boolean useHD, @OriginalArg(3) int currentMode, @OriginalArg(5) int width, @OriginalArg(6) int height) { + if (useHD) { + GlRenderer.quit(); + } + if (GameShell.fullScreenFrame != null && (newMode != 3 || width != Preferences.fullScreenWidth || height != Preferences.fullScreenHeight)) { + exitFullScreen(GameShell.fullScreenFrame, GameShell.signLink); + GameShell.fullScreenFrame = null; + } + if (newMode == 3 && GameShell.fullScreenFrame == null) { + GameShell.fullScreenFrame = createFullScreenFrame(0, height, width, GameShell.signLink); + if (GameShell.fullScreenFrame != null) { + Preferences.fullScreenHeight = height; + Preferences.fullScreenWidth = width; + Preferences.write(GameShell.signLink); + } + } + if (newMode == 3 && GameShell.fullScreenFrame == null) { + setWindowMode(true, Preferences.favoriteWorlds, true, currentMode, -1, -1); + return; + } + @Pc(85) Container container; + if (GameShell.fullScreenFrame != null) { + container = GameShell.fullScreenFrame; + } else if (GameShell.frame == null) { + container = GameShell.signLink.applet; + } else { + container = GameShell.frame; + } + GameShell.frameWidth = container.getSize().width; + GameShell.frameHeight = container.getSize().height; + @Pc(109) Insets insets; + if (GameShell.frame == container) { + insets = GameShell.frame.getInsets(); + GameShell.frameWidth -= insets.right + insets.left; + GameShell.frameHeight -= insets.bottom + insets.top; + } + if (newMode >= 2 || resizableSD) { + GameShell.canvasWidth = GameShell.frameWidth; + GameShell.canvasHeight = GameShell.frameHeight; + GameShell.leftMargin = 0; + GameShell.topMargin = 0; + } else { + GameShell.topMargin = 0; + GameShell.leftMargin = (GameShell.frameWidth - 765) / 2; + GameShell.canvasWidth = 765; + GameShell.canvasHeight = 503; + } + if (replaceCanvas) { + Keyboard.stop(GameShell.canvas); + Mouse.stop(GameShell.canvas); + if (client.mouseWheel != null) { + client.mouseWheel.stop(GameShell.canvas); + } + client.instance.addCanvas(); + Keyboard.start(GameShell.canvas); + Mouse.start(GameShell.canvas); + if (client.mouseWheel != null) { + client.mouseWheel.start(GameShell.canvas); + } + } else { + if (GlRenderer.enabled) { + GlRenderer.setCanvasSize(GameShell.canvasWidth, GameShell.canvasHeight); + } + GameShell.canvas.setSize(GameShell.canvasWidth, GameShell.canvasHeight); + if (GameShell.frame == container) { + insets = GameShell.frame.getInsets(); + GameShell.canvas.setLocation(insets.left + GameShell.leftMargin, insets.top + GameShell.topMargin); + } else { + GameShell.canvas.setLocation(GameShell.leftMargin, GameShell.topMargin); + } + } + if (newMode == 0 && currentMode > 0) { + GlRenderer.createAndDestroyContext(GameShell.canvas); + } + if (useHD && newMode > 0) { + GameShell.canvas.setIgnoreRepaint(true); + if (!aBoolean73) { + SceneGraph.clear(); + SoftwareRaster.frameBuffer = null; + SoftwareRaster.frameBuffer = FrameBuffer.create(GameShell.canvasHeight, GameShell.canvasWidth, GameShell.canvas); + SoftwareRaster.clear(); + if (client.gameState == 5) { + LoadingBar.render(true, Fonts.b12Full); + } else { + Fonts.drawTextOnScreen(false, LocalizedText.LOADING); + } + try { + @Pc(269) Graphics graphics = GameShell.canvas.getGraphics(); + SoftwareRaster.frameBuffer.draw(graphics); + } catch (@Pc(277) Exception local277) { + } + GameShell.method2704(); + if (currentMode == 0) { + if(resizableSD) + SoftwareRaster.frameBuffer = FrameBuffer.create(GameShell.frameHeight, GameShell.frameWidth, GameShell.canvas); + else + SoftwareRaster.frameBuffer = FrameBuffer.create(503, 765, GameShell.canvas); + } else { + SoftwareRaster.frameBuffer = null; + } + @Pc(300) PrivilegedRequest local300 = GameShell.signLink.loadGlNatives(client.instance.getClass()); + while (local300.status == 0) { + ThreadUtils.sleep(100L); + } + if (local300.status == 1) { + aBoolean73 = true; + } + } + if (aBoolean73) { + GlRenderer.init(GameShell.canvas, Preferences.antiAliasingMode * 2); + } + } + if (!GlRenderer.enabled && newMode > 0) { + setWindowMode(true, 0, true, currentMode, -1, -1); + return; + } + if (newMode > 0 && currentMode == 0) { + GameShell.thread.setPriority(5); + SoftwareRaster.frameBuffer = null; + SoftwareModel.method4580(); + ((Js5GlTextureProvider) Rasteriser.textureProvider).method3248(200); + if (Preferences.highDetailLighting) { + Rasteriser.setBrightness(0.7F); + } + LoginManager.method4637(); + } else if (newMode == 0 && currentMode > 0) { + GameShell.thread.setPriority(1); + if(resizableSD) + SoftwareRaster.frameBuffer = FrameBuffer.create(GameShell.frameHeight, GameShell.frameWidth, GameShell.canvas); + else + SoftwareRaster.frameBuffer = FrameBuffer.create(503, 765, GameShell.canvas); + SoftwareModel.method4583(); + ParticleSystem.quit(); + ((Js5GlTextureProvider) Rasteriser.textureProvider).method3248(20); + if (Preferences.highDetailLighting) { + if (Preferences.brightness == 1) { + Rasteriser.setBrightness(0.9F); + } + if (Preferences.brightness == 2) { + Rasteriser.setBrightness(0.8F); + } + if (Preferences.brightness == 3) { + Rasteriser.setBrightness(0.7F); + } + if (Preferences.brightness == 4) { + Rasteriser.setBrightness(0.6F); + } + } + GlTile.method1939(); + LoginManager.method4637(); + } + SceneGraph.aBoolean130 = !SceneGraph.allLevelsAreVisible(); + if (useHD) { + client.method2721(); + } + resizable = newMode >= 2; + if (InterfaceList.topLevelInterface != -1) { + InterfaceList.method3712(true); + } + if (Protocol.socket != null && (client.gameState == 30 || client.gameState == 25)) { + ClientProt.sendWindowDetails(); + } + for (@Pc(466) int local466 = 0; local466 < 100; local466++) { + InterfaceList.aBooleanArray100[local466] = true; + } + GameShell.fullRedraw = true; + PluginRepository.reloadPlugins(); + } + + @OriginalMember(owner = "client!ab", name = "c", descriptor = "(B)[Lclient!od;") + public static DisplayMode[] getDisplayModes() { + if (aClass114Array1 == null) { + @Pc(16) DisplayMode[] local16 = method3558(GameShell.signLink); + @Pc(20) DisplayMode[] local20 = new DisplayMode[local16.length]; + @Pc(22) int local22 = 0; + label52: + for (@Pc(24) int local24 = 0; local24 < local16.length; local24++) { + @Pc(32) DisplayMode local32 = local16[local24]; + if ((local32.bitDepth <= 0 || local32.bitDepth >= 24) && local32.width >= 800 && local32.height >= 600) { + for (@Pc(52) int local52 = 0; local52 < local22; local52++) { + @Pc(59) DisplayMode local59 = local20[local52]; + if (local32.width == local59.width && local59.height == local32.height) { + if (local32.bitDepth > local59.bitDepth) { + local20[local52] = local32; + } + continue label52; + } + } + local20[local22] = local32; + local22++; + } + } + aClass114Array1 = new DisplayMode[local22]; + ArrayUtils.copy(local20, 0, aClass114Array1, 0, local22); + @Pc(112) int[] local112 = new int[aClass114Array1.length]; + for (@Pc(114) int local114 = 0; local114 < aClass114Array1.length; local114++) { + @Pc(122) DisplayMode local122 = aClass114Array1[local114]; + local112[local114] = local122.height * local122.width; + } + ArrayUtils.sort(local112, aClass114Array1); + } + return aClass114Array1; + } + + @OriginalMember(owner = "client!pm", name = "a", descriptor = "(ILsignlink!ll;)[Lclient!od;") + public static DisplayMode[] method3558(@OriginalArg(1) SignLink arg0) { + if (!arg0.isFullScreenSupported()) { + return new DisplayMode[0]; + } + @Pc(17) PrivilegedRequest local17 = arg0.getDisplayModes(); + while (local17.status == 0) { + ThreadUtils.sleep(10L); + } + if (local17.status == 2) { + return new DisplayMode[0]; + } + @Pc(39) int[] local39 = (int[]) local17.result; + @Pc(45) DisplayMode[] local45 = new DisplayMode[local39.length >> 2]; + for (@Pc(47) int local47 = 0; local47 < local45.length; local47++) { + @Pc(59) DisplayMode local59 = new DisplayMode(); + local45[local47] = local59; + local59.width = local39[local47 << 2]; + local59.height = local39[(local47 << 2) + 1]; + local59.bitDepth = local39[(local47 << 2) + 2]; + local59.refreshRate = local39[(local47 << 2) + 3]; + } + return local45; + } + + @OriginalMember(owner = "client!nf", name = "a", descriptor = "(IIIIILsignlink!ll;)Ljava/awt/Frame;") + public static Frame createFullScreenFrame(@OriginalArg(2) int bitDepth, @OriginalArg(3) int height, @OriginalArg(4) int width, @OriginalArg(5) SignLink signLink) { + if (!signLink.isFullScreenSupported()) { + return null; + } + @Pc(20) DisplayMode[] displayModes = method3558(signLink); + if (displayModes == null) { + return null; + } + @Pc(27) boolean local27 = false; + for (@Pc(29) int local29 = 0; local29 < displayModes.length; local29++) { + if (width == displayModes[local29].width && height == displayModes[local29].height && (!local27 || displayModes[local29].bitDepth > bitDepth)) { + bitDepth = displayModes[local29].bitDepth; + local27 = true; + } + } + if (!local27) { + return null; + } + @Pc(90) PrivilegedRequest request = signLink.enterFullScreen(bitDepth, height, width); + while (request.status == 0) { + ThreadUtils.sleep(10L); + } + @Pc(103) Frame frame = (Frame) request.result; + if (frame == null) { + return null; + } else if (request.status == 2) { + exitFullScreen(frame, signLink); + return null; + } else { + return frame; + } + } + +} diff --git a/client/src/main/java/rt4/Entity.java b/client/src/main/java/rt4/Entity.java new file mode 100644 index 0000000..01c451c --- /dev/null +++ b/client/src/main/java/rt4/Entity.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!th") +public abstract class Entity { + + @OriginalMember(owner = "client!th", name = "a", descriptor = "(III)Lclient!th;") + public Entity createModel() { + return this; + } + + @OriginalMember(owner = "client!th", name = "a", descriptor = "()Z") + public boolean method4543() { + return false; + } + + @OriginalMember(owner = "client!th", name = "a", descriptor = "(Lclient!th;IIIZ)V") + public void method4544(@OriginalArg(0) Entity arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) boolean arg4) { + } + + @OriginalMember(owner = "client!th", name = "a", descriptor = "(IIIII)V") + public abstract void method4545(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4); + + @OriginalMember(owner = "client!th", name = "a", descriptor = "(IIIIIIIIJILclient!ga;)V") + public abstract void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) long arg8, @OriginalArg(9) int arg9, @OriginalArg(10) ParticleSystem arg10); + + @OriginalMember(owner = "client!th", name = "b", descriptor = "()I") + public abstract int getMinY(); +} diff --git a/client/src/main/java/rt4/EnumStringEntry.java b/client/src/main/java/rt4/EnumStringEntry.java new file mode 100644 index 0000000..4da6711 --- /dev/null +++ b/client/src/main/java/rt4/EnumStringEntry.java @@ -0,0 +1,17 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!hb") +public final class EnumStringEntry extends Node { + + @OriginalMember(owner = "client!hb", name = "y", descriptor = "Lclient!na;") + public final JagString value; + + @OriginalMember(owner = "client!hb", name = "", descriptor = "(Lclient!na;I)V") + public EnumStringEntry(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1) { + this.value = arg0; + } +} diff --git a/client/src/main/java/rt4/EnumType.java b/client/src/main/java/rt4/EnumType.java new file mode 100644 index 0000000..cffcefc --- /dev/null +++ b/client/src/main/java/rt4/EnumType.java @@ -0,0 +1,133 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ml") +public final class EnumType extends SecondaryNode { + + @OriginalMember(owner = "client!ml", name = "N", descriptor = "I") + public int valueType; + + @OriginalMember(owner = "client!ml", name = "V", descriptor = "I") + public int keyType; + + @OriginalMember(owner = "client!ml", name = "X", descriptor = "Lclient!sc;") + public HashTable table; + + @OriginalMember(owner = "client!ml", name = "bb", descriptor = "Lclient!sc;") + private HashTable inverseTable; + + @OriginalMember(owner = "client!ml", name = "cb", descriptor = "I") + private int defaultInt; + + @OriginalMember(owner = "client!gn", name = "v", descriptor = "Lclient!na;") + public static final JagString NULL = JagString.parse("null"); + @OriginalMember(owner = "client!ml", name = "Z", descriptor = "Lclient!na;") + private JagString defaultString = NULL; + + @OriginalMember(owner = "client!ml", name = "a", descriptor = "(ILclient!wa;B)V") + private void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 1) { + this.keyType = arg1.g1(); + } else if (arg0 == 2) { + this.valueType = arg1.g1(); + } else if (arg0 == 3) { + this.defaultString = arg1.gjstr(); + } else if (arg0 == 4) { + this.defaultInt = arg1.g4(); + } else if (arg0 == 5 || arg0 == 6) { + @Pc(41) int size = arg1.g2(); + this.table = new HashTable(IntUtils.clp2(size)); + for (@Pc(51) int local51 = 0; local51 < size; local51++) { + @Pc(58) int local58 = arg1.g4(); + @Pc(70) Node local70; + if (arg0 == 5) { + local70 = new StringNode(arg1.gjstr()); + } else { + local70 = new IntNode(arg1.g4()); + } + this.table.put(local70, local58); + } + } + } + + @OriginalMember(owner = "client!ml", name = "a", descriptor = "(IB)Lclient!na;") + public final JagString getString(@OriginalArg(0) int arg0) { + if (this.table == null) { + return this.defaultString; + } else { + @Pc(26) StringNode local26 = (StringNode) this.table.get(arg0); + return local26 == null ? this.defaultString : local26.value; + } + } + + @OriginalMember(owner = "client!ml", name = "b", descriptor = "(Lclient!na;I)Z") + public final boolean containsValue(@OriginalArg(0) JagString arg0) { + if (this.table == null) { + return false; + } + if (this.inverseTable == null) { + this.inverseStrings(); + } + for (@Pc(38) EnumStringEntry node = (EnumStringEntry) this.inverseTable.get(arg0.longHashCode()); node != null; node = (EnumStringEntry) this.inverseTable.nextWithKey()) { + if (node.value.strEquals(arg0)) { + return true; + } + } + return false; + } + + @OriginalMember(owner = "client!ml", name = "d", descriptor = "(I)V") + private void inverseStrings() { + this.inverseTable = new HashTable(this.table.getBucketCount()); + for (@Pc(22) StringNode node = (StringNode) this.table.head(); node != null; node = (StringNode) this.table.next()) { + @Pc(36) EnumStringEntry entry = new EnumStringEntry(node.value, (int) node.key); + this.inverseTable.put(entry, node.value.longHashCode()); + } + } + + @OriginalMember(owner = "client!ml", name = "c", descriptor = "(II)I") + public final int getInt(@OriginalArg(1) int arg0) { + if (this.table == null) { + return this.defaultInt; + } else { + @Pc(18) IntNode local18 = (IntNode) this.table.get(arg0); + return local18 == null ? this.defaultInt : local18.value; + } + } + + @OriginalMember(owner = "client!ml", name = "d", descriptor = "(II)Z") + public final boolean containsValue(@OriginalArg(1) int arg0) { + if (this.table == null) { + return false; + } + if (this.inverseTable == null) { + this.inverseInts(); + } + @Pc(34) IntNode node = (IntNode) this.inverseTable.get(arg0); + return node != null; + } + + @OriginalMember(owner = "client!ml", name = "e", descriptor = "(I)V") + private void inverseInts() { + this.inverseTable = new HashTable(this.table.getBucketCount()); + for (@Pc(24) IntNode node = (IntNode) this.table.head(); node != null; node = (IntNode) this.table.next()) { + @Pc(34) IntNode inverseNode = new IntNode((int) node.key); + this.inverseTable.put(inverseNode, node.value); + } + } + + @OriginalMember(owner = "client!ml", name = "a", descriptor = "(Lclient!wa;I)V") + public final void decode(@OriginalArg(0) Buffer arg0) { + while (true) { + @Pc(9) int local9 = arg0.g1(); + if (local9 == 0) { + return; + } + this.decode(local9, arg0); + } + } +} diff --git a/client/src/main/java/rt4/EnumTypeList.java b/client/src/main/java/rt4/EnumTypeList.java new file mode 100644 index 0000000..358f399 --- /dev/null +++ b/client/src/main/java/rt4/EnumTypeList.java @@ -0,0 +1,42 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class EnumTypeList { + @OriginalMember(owner = "client!lj", name = "p", descriptor = "Lclient!gn;") + public static final LruHashTable types = new LruHashTable(128); + @OriginalMember(owner = "client!gk", name = "e", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!gl", name = "a", descriptor = "(Lclient!ve;I)V") + public static void init(@OriginalArg(0) Js5 arg0) { + archive = arg0; + } + + @OriginalMember(owner = "client!ui", name = "a", descriptor = "(IZ)Lclient!ml;") + public static EnumType get(@OriginalArg(0) int arg0) { + @Pc(10) EnumType local10 = (EnumType) types.get(arg0); + if (local10 != null) { + return local10; + } + @Pc(24) byte[] local24 = archive.fetchFile(getGroupId(arg0), getFileId(arg0)); + local10 = new EnumType(); + if (local24 != null) { + local10.decode(new Buffer(local24)); + } + types.put(local10, arg0); + return local10; + } + + @OriginalMember(owner = "client!i", name = "e", descriptor = "(BI)I") + public static int getFileId(@OriginalArg(1) int arg0) { + return arg0 & 0xFF; + } + + @OriginalMember(owner = "client!hi", name = "a", descriptor = "(BI)I") + public static int getGroupId(@OriginalArg(1) int arg0) { + return arg0 >>> 8; + } +} diff --git a/client/src/main/java/rt4/Environment.java b/client/src/main/java/rt4/Environment.java new file mode 100644 index 0000000..0e8503c --- /dev/null +++ b/client/src/main/java/rt4/Environment.java @@ -0,0 +1,95 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!li") +public final class Environment { + + @OriginalMember(owner = "client!li", name = "c", descriptor = "I") + public final int screenColorRgb; + + @OriginalMember(owner = "client!li", name = "q", descriptor = "F") + public final float light1Diffuse; + + @OriginalMember(owner = "client!li", name = "d", descriptor = "I") + public final int lightZ; + + @OriginalMember(owner = "client!li", name = "n", descriptor = "F") + public final float lightModelAmbient; + + @OriginalMember(owner = "client!li", name = "a", descriptor = "I") + public final int fogColorRgb; + + @OriginalMember(owner = "client!li", name = "g", descriptor = "I") + public final int lightY; + + @OriginalMember(owner = "client!li", name = "s", descriptor = "F") + public final float light0Diffuse; + + @OriginalMember(owner = "client!li", name = "j", descriptor = "I") + public final int fogDepth; + + @OriginalMember(owner = "client!li", name = "k", descriptor = "I") + public final int lightX; + + @OriginalMember(owner = "client!li", name = "", descriptor = "()V") + public Environment() { + this.screenColorRgb = FogManager.defaultLightColorRgb; + this.light1Diffuse = 1.2F; + this.lightZ = -50; + this.lightModelAmbient = 1.1523438F; + this.fogColorRgb = FogManager.defaulFogColorRgb; + this.lightY = -60; + this.light0Diffuse = 0.69921875F; + this.fogDepth = 0; + this.lightX = -50; + } + + @OriginalMember(owner = "client!li", name = "", descriptor = "(Lclient!wa;)V") + public Environment(@OriginalArg(0) Buffer buffer) { + @Pc(7) int flag = buffer.g1(); + if ((flag & 0x1) == 0) { + this.screenColorRgb = FogManager.defaultLightColorRgb; + } else { + this.screenColorRgb = buffer.g4(); + } + if ((flag & 0x2) == 0) { + this.lightModelAmbient = 1.1523438F; + } else { + this.lightModelAmbient = (float) buffer.g2() / 256.0F; + } + if ((flag & 0x4) == 0) { + this.light0Diffuse = 0.69921875F; + } else { + this.light0Diffuse = (float) buffer.g2() / 256.0F; + } + if ((flag & 0x8) == 0) { + this.light1Diffuse = 1.2F; + } else { + this.light1Diffuse = (float) buffer.g2() / 256.0F; + } + if ((flag & 0x10) == 0) { + this.lightZ = -50; + this.lightX = -50; + this.lightY = -60; + } else { + this.lightX = buffer.g2b(); + this.lightY = buffer.g2b(); + this.lightZ = buffer.g2b(); + } + if ((flag & 0x20) == 0) { + this.fogColorRgb = FogManager.defaulFogColorRgb; + } else { + this.fogColorRgb = buffer.g4(); + } + if ((flag & 0x40) == 0) { + this.fogDepth = 0; + } else { + this.fogDepth = buffer.g2(); + } + } + +} diff --git a/client/src/main/java/rt4/Equipment.java b/client/src/main/java/rt4/Equipment.java new file mode 100644 index 0000000..de83af1 --- /dev/null +++ b/client/src/main/java/rt4/Equipment.java @@ -0,0 +1,26 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class Equipment { + @OriginalMember(owner = "client!ta", name = "p", descriptor = "[I") + public static int[] objIds; + + @OriginalMember(owner = "client!eh", name = "a", descriptor = "(I)V") + public static void init() { + @Pc(8) int[] ids = new int[ObjTypeList.capacity]; + @Pc(10) int j = 0; + @Pc(12) int i; + for (i = 0; i < ObjTypeList.capacity; i++) { + @Pc(19) ObjType type = ObjTypeList.get(i); + if (type.manwear >= 0 || type.womanwear >= 0) { + ids[j++] = i; + } + } + objIds = new int[j]; + for (i = 0; i < j; i++) { + objIds[i] = ids[i]; + } + } +} diff --git a/client/src/main/java/rt4/Find.java b/client/src/main/java/rt4/Find.java new file mode 100644 index 0000000..f59f501 --- /dev/null +++ b/client/src/main/java/rt4/Find.java @@ -0,0 +1,118 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class Find { + @OriginalMember(owner = "client!nf", name = "c", descriptor = "[S") + public static short[] results; + @OriginalMember(owner = "client!fe", name = "x", descriptor = "I") + public static int size; + @OriginalMember(owner = "client!ii", name = "l", descriptor = "I") + public static int index; + + @OriginalMember(owner = "client!bn", name = "a", descriptor = "(BZLclient!na;)V") + public static void findQuickChatPhrases(@OriginalArg(1) boolean arg0, @OriginalArg(2) JagString arg1) { + @Pc(9) JagString local9 = arg1.toLowerCase(); + @Pc(11) int local11 = 0; + @Pc(22) short[] local22 = new short[16]; + @Pc(28) int local28 = arg0 ? 32768 : 0; + @Pc(36) int local36 = (arg0 ? QuickChatPhraseTypeList.anInt1047 : QuickChatPhraseTypeList.anInt3490) + local28; + for (@Pc(38) int local38 = local28; local38 < local36; local38++) { + @Pc(45) QuickChatPhraseType local45 = QuickChatPhraseTypeList.get(local38); + if (local45.aBoolean60 && local45.getText().toLowerCase().indexOf(local9) != -1) { + if (local11 >= 50) { + index = -1; + results = null; + return; + } + if (local11 >= local22.length) { + @Pc(79) short[] local79 = new short[local22.length * 2]; + for (@Pc(81) int local81 = 0; local81 < local11; local81++) { + local79[local81] = local22[local81]; + } + local22 = local79; + } + local22[local11++] = (short) local38; + } + } + results = local22; + index = local11; + size = 0; + @Pc(113) JagString[] local113 = new JagString[index]; + for (@Pc(115) int local115 = 0; local115 < index; local115++) { + local113[local115] = QuickChatPhraseTypeList.get(local22[local115]).getText(); + } + method3656(local113, results); + } + + @OriginalMember(owner = "client!me", name = "a", descriptor = "(ZLclient!na;I)V") + public static void search(@OriginalArg(0) boolean arg0, @OriginalArg(1) JagString arg1) { + @Pc(8) short[] local8 = new short[16]; + @Pc(12) JagString local12 = arg1.toLowerCase(); + @Pc(14) int local14 = 0; + for (@Pc(16) int local16 = 0; local16 < ObjTypeList.capacity; local16++) { + @Pc(27) ObjType local27 = ObjTypeList.get(local16); + if ((!arg0 || local27.stockMarket) && local27.certtemplate == -1 && local27.lentTemplate == -1 && local27.dummyItem == 0 && local27.name.toLowerCase().indexOf(local12) != -1) { + if (local14 >= 250) { + results = null; + index = -1; + return; + } + if (local14 >= local8.length) { + @Pc(83) short[] local83 = new short[local8.length * 2]; + for (@Pc(85) int local85 = 0; local85 < local14; local85++) { + local83[local85] = local8[local85]; + } + local8 = local83; + } + local8[local14++] = (short) local16; + } + } + results = local8; + size = 0; + index = local14; + @Pc(117) JagString[] local117 = new JagString[index]; + for (@Pc(119) int local119 = 0; local119 < index; local119++) { + local117[local119] = ObjTypeList.get(local8[local119]).name; + } + method3656(local117, results); + } + + @OriginalMember(owner = "client!qg", name = "a", descriptor = "([Lclient!na;[SI)V") + public static void method3656(@OriginalArg(0) JagString[] arg0, @OriginalArg(1) short[] arg1) { + method1307(arg1, arg0.length - 1, arg0, 0); + } + + @OriginalMember(owner = "client!ed", name = "a", descriptor = "([SI[Lclient!na;II)V") + public static void method1307(@OriginalArg(0) short[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) JagString[] arg2, @OriginalArg(4) int arg3) { + if (arg1 <= arg3) { + return; + } + @Pc(14) int local14 = arg3; + @Pc(21) int local21 = (arg3 + arg1) / 2; + @Pc(25) JagString local25 = arg2[local21]; + arg2[local21] = arg2[arg1]; + arg2[arg1] = local25; + @Pc(39) short local39 = arg0[local21]; + arg0[local21] = arg0[arg1]; + arg0[arg1] = local39; + for (@Pc(51) int local51 = arg3; local51 < arg1; local51++) { + if (local25 == null || arg2[local51] != null && arg2[local51].method3139(local25) < (local51 & 0x1)) { + @Pc(80) JagString local80 = arg2[local51]; + arg2[local51] = arg2[local14]; + arg2[local14] = local80; + @Pc(94) short local94 = arg0[local51]; + arg0[local51] = arg0[local14]; + arg0[local14++] = local94; + } + } + arg2[arg1] = arg2[local14]; + arg2[local14] = local25; + arg0[arg1] = arg0[local14]; + arg0[local14] = local39; + method1307(arg0, local14 - 1, arg2, arg3); + method1307(arg0, arg1, arg2, local14 + 1); + } +} diff --git a/client/src/main/java/rt4/Flames.java b/client/src/main/java/rt4/Flames.java new file mode 100644 index 0000000..1ab546c --- /dev/null +++ b/client/src/main/java/rt4/Flames.java @@ -0,0 +1,277 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class Flames { + @OriginalMember(owner = "client!se", name = "t", descriptor = "[I") + public static final int[] flameGradientSource = new int[]{0xbf6428, 0xec963a, 0xf2d766, 0xfff2ba}; + + @OriginalMember(owner = "client!bb", name = "m", descriptor = "Lclient!na;") + public static final JagString RUNES = JagString.parse("runes"); + + @OriginalMember(owner = "client!cl", name = "ab", descriptor = "[I") + public static final int[] flameShiftX = new int[256]; + + @OriginalMember(owner = "client!km", name = "Yc", descriptor = "I") + public static int runesId; + + @OriginalMember(owner = "client!uf", name = "e", descriptor = "I") + public static int flameCycle = 0; + + @OriginalMember(owner = "client!wb", name = "b", descriptor = "[I") + public static int[] flameBuffer1; + + @OriginalMember(owner = "client!t", name = "G", descriptor = "[Lclient!ek;") + public static SoftwareIndexedSprite[] runes; + + @OriginalMember(owner = "client!hh", name = "r", descriptor = "[I") + public static int[] flameGradient; + + @OriginalMember(owner = "client!vg", name = "e", descriptor = "[I") + public static int[] flameBuffer2; + + @OriginalMember(owner = "client!ri", name = "d", descriptor = "[I") + public static int[] flameIntensityBuffer; + + @OriginalMember(owner = "client!nd", name = "y", descriptor = "Lclient!mm;") + public static SoftwareSprite imageFlames; + + @OriginalMember(owner = "client!i", name = "ec", descriptor = "[I") + public static int[] flameIntensity; + + @OriginalMember(owner = "client!jj", name = "e", descriptor = "I") + public static int flameOffset = 0; + + @OriginalMember(owner = "client!a", name = "i", descriptor = "I") + public static int anInt6 = 0; + + @OriginalMember(owner = "client!sf", name = "i", descriptor = "I") + public static int anInt5084 = 0; + + @OriginalMember(owner = "client!gg", name = "a", descriptor = "(ILclient!ve;)V") + public static void init(@OriginalArg(1) Js5 archive) { + runesId = archive.getGroupId(RUNES); + } + + @OriginalMember(owner = "client!sk", name = "a", descriptor = "(Lclient!ve;I)Z") + public static boolean isReady(@OriginalArg(0) Js5 archive) { + return archive.isFileReady(runesId); + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(Z)V") + public static void update() { + flameCycle++; + } + + @OriginalMember(owner = "client!lf", name = "a", descriptor = "(ILclient!ve;)V") + public static void load(@OriginalArg(1) Js5 archive) { + runes = SpriteLoader.loadSoftwareIndexedSpritesAutoDetect(runesId, archive); + flameGradient = new int[256]; + @Pc(15) int local15; + for (local15 = 0; local15 < 3; local15++) { + @Pc(30) int local30 = flameGradientSource[local15 + 1] >> 16 & 0xFF; + @Pc(39) float local39 = (float) (flameGradientSource[local15] >> 16 & 0xFF); + @Pc(48) float local48 = (float) (flameGradientSource[local15] >> 8 & 0xFF); + @Pc(55) float local55 = (float) (flameGradientSource[local15] & 0xFF); + @Pc(62) float local62 = ((float) local30 - local39) / 64.0F; + @Pc(72) int local72 = flameGradientSource[local15 + 1] >> 8 & 0xFF; + @Pc(80) float local80 = ((float) local72 - local48) / 64.0F; + @Pc(88) int local88 = flameGradientSource[local15 + 1] & 0xFF; + @Pc(95) float local95 = ((float) local88 - local55) / 64.0F; + for (@Pc(97) int local97 = 0; local97 < 64; local97++) { + flameGradient[local97 + local15 * 64] = (int) local55 | (int) local48 << 8 | (int) local39 << 16; + local48 += local80; + local55 += local95; + local39 += local62; + } + } + for (local15 = 192; local15 < 255; local15++) { + flameGradient[local15] = flameGradientSource[3]; + } + flameBuffer1 = new int[32768]; + flameBuffer2 = new int[32768]; + setRune(null); + flameIntensity = new int[32768]; + flameIntensityBuffer = new int[32768]; + imageFlames = new SoftwareSprite(128, 254); + } + + @OriginalMember(owner = "client!vl", name = "a", descriptor = "(II)V") + public static void method4528(@OriginalArg(0) int arg0) { + if (arg0 > 256) { + arg0 = 256; + } + if (arg0 > 10) { + arg0 = 10; + } + flameOffset += arg0 * 128; + @Pc(40) int local40; + if (flameBuffer1.length < flameOffset) { + flameOffset -= flameBuffer1.length; + local40 = (int) (Math.random() * 12.0D); + setRune(runes[local40]); + } + local40 = 0; + @Pc(54) int local54 = (256 - arg0) * 128; + @Pc(58) int local58 = arg0 * 128; + @Pc(60) int local60; + @Pc(89) int local89; + for (local60 = 0; local60 < local54; local60++) { + local89 = flameIntensityBuffer[local40 + local58] - arg0 * flameBuffer1[flameBuffer1.length - 1 & flameOffset + local40] / 6; + if (local89 < 0) { + local89 = 0; + } + flameIntensityBuffer[local40++] = local89; + } + @Pc(117) int local117; + @Pc(125) int local125; + for (local60 = 256 - arg0; local60 < 256; local60++) { + local89 = local60 * 128; + for (local117 = 0; local117 < 128; local117++) { + local125 = (int) (Math.random() * 100.0D); + if (local125 < 50 && local117 > 10 && local117 < 118) { + flameIntensityBuffer[local117 + local89] = 255; + } else { + flameIntensityBuffer[local117 + local89] = 0; + } + } + } + for (local60 = 0; local60 < 256 - arg0; local60++) { + flameShiftX[local60] = flameShiftX[local60 + arg0]; + } + for (local60 = 256 - arg0; local60 < 256; local60++) { + flameShiftX[local60] = (int) (Math.sin((double) anInt6 / 14.0D) * 16.0D + Math.sin((double) anInt6 / 15.0D) * 14.0D + Math.sin((double) anInt6 / 16.0D) * 12.0D); + anInt6++; + } + anInt5084 += arg0; + local60 = (arg0 + (client.loop & 0x1)) / 2; + if (local60 <= 0) { + return; + } + for (local89 = 0; local89 < anInt5084; local89++) { + local117 = (int) (Math.random() * 124.0D) + 2; + local125 = (int) (Math.random() * 128.0D) + 128; + flameIntensityBuffer[local117 + (local125 << 7)] = 192; + } + anInt5084 = 0; + @Pc(290) int local290; + for (local89 = 0; local89 < 256; local89++) { + local125 = local89 * 128; + local117 = 0; + for (local290 = -local60; local290 < 128; local290++) { + if (local60 + local290 < 128) { + local117 += flameIntensityBuffer[local125 + local290 + local60]; + } + if (local290 - local60 - 1 >= 0) { + local117 -= flameIntensityBuffer[local290 + local125 - local60 - 1]; + } + if (local290 >= 0) { + flameIntensity[local290 + local125] = local117 / (local60 * 2 + 1); + } + } + } + for (local89 = 0; local89 < 128; local89++) { + local117 = 0; + for (local125 = -local60; local125 < 256; local125++) { + local290 = local125 * 128; + if (local125 + local60 < 256) { + local117 += flameIntensity[local60 * 128 + local89 + local290]; + } + if (local125 - local60 - 1 >= 0) { + local117 -= flameIntensity[local89 + local290 - (local60 + 1) * 128]; + } + if (local125 >= 0) { + flameIntensityBuffer[local290 + local89] = local117 / (local60 * 2 + 1); + } + } + } + } + + @OriginalMember(owner = "client!fh", name = "a", descriptor = "(BLclient!ek;)V") + public static void setRune(@OriginalArg(1) SoftwareIndexedSprite sprite) { + @Pc(5) int local5; + for (local5 = 0; local5 < flameBuffer1.length; local5++) { + flameBuffer1[local5] = 0; + } + @Pc(36) int local36; + for (local5 = 0; local5 < 5000; local5++) { + local36 = (int) ((double) 256 * Math.random() * 128.0D); + flameBuffer1[local36] = (int) (Math.random() * 284.0D); + } + @Pc(66) int local66; + @Pc(76) int local76; + for (local5 = 0; local5 < 20; local5++) { + for (local36 = 1; local36 < 255; local36++) { + for (local66 = 1; local66 < 127; local66++) { + local76 = local66 + (local36 << 7); + flameBuffer2[local76] = (flameBuffer1[local76 + 128] + flameBuffer1[local76 - 1] + flameBuffer1[local76 + 1] + flameBuffer1[local76 + -128]) / 4; + } + } + @Pc(113) int[] local113 = flameBuffer1; + flameBuffer1 = flameBuffer2; + flameBuffer2 = local113; + } + if (sprite == null) { + return; + } + local5 = 0; + for (local36 = 0; local36 < sprite.height; local36++) { + for (local66 = 0; local66 < sprite.width; local66++) { + if (sprite.pixels[local5++] != 0) { + local76 = sprite.xOffset + local66 + 16; + @Pc(162) int local162 = sprite.yOffset + local36 + 16; + @Pc(169) int local169 = local76 + (local162 << 7); + flameBuffer1[local169] = 0; + } + } + } + } + + @OriginalMember(owner = "client!s", name = "b", descriptor = "(III)V") + public static void render(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + if (flameCycle > 0) { + method4528(flameCycle); + flameCycle = 0; + } + @Pc(20) int local20 = 0; + @Pc(24) int local24 = SoftwareRaster.width * arg1; + @Pc(26) int local26 = 0; + for (@Pc(28) int local28 = 1; local28 < 255; local28++) { + @Pc(43) int local43 = (256 - local28) * flameShiftX[local28] / 256; + if (local43 < 0) { + local43 = 0; + } + local20 += local43; + @Pc(55) int local55; + for (local55 = local43; local55 < 128; local55++) { + @Pc(65) int local65 = SoftwareRaster.pixels[local24++ + arg0]; + @Pc(70) int local70 = flameIntensityBuffer[local20++]; + if (local70 == 0) { + imageFlames.pixels[local26++] = local65; + } else { + @Pc(76) int local76 = local70 + 18; + if (local76 > 255) { + local76 = 255; + } + @Pc(89) int local89 = 256 - local70 - 18; + if (local89 > 255) { + local89 = 255; + } + local70 = flameGradient[local70]; + imageFlames.pixels[local26++] = (local89 * (local65 & 0xFF00FF) + (local70 & 0xFF00FF) * local76 & 0xFF00FF00) + ((local70 & 0xFF00) * local76 + ((local65 & 0xFF00) * local89) & 0xFF0000) >> 8; + } + } + for (local55 = 0; local55 < local43; local55++) { + imageFlames.pixels[local26++] = SoftwareRaster.pixels[arg0 + local24++]; + } + local24 += SoftwareRaster.width - 128; + } + if (GlRenderer.enabled) { + GlRaster.drawPixels(imageFlames.pixels, arg0, arg1, imageFlames.width, imageFlames.height); + } else { + imageFlames.drawPixels(arg0, arg1); + } + } +} diff --git a/client/src/main/java/rt4/FloType.java b/client/src/main/java/rt4/FloType.java new file mode 100644 index 0000000..3f93bc0 --- /dev/null +++ b/client/src/main/java/rt4/FloType.java @@ -0,0 +1,97 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!wl") +public final class FloType { + + @OriginalMember(owner = "client!ca", name = "db", descriptor = "I") + public static int anInt865 = 0; + @OriginalMember(owner = "client!wl", name = "j", descriptor = "Z") + public boolean blendTexture = false; + + @OriginalMember(owner = "client!wl", name = "l", descriptor = "Z") + public boolean aBoolean311 = true; + + @OriginalMember(owner = "client!wl", name = "p", descriptor = "I") + public int texture = -1; + + @OriginalMember(owner = "client!wl", name = "f", descriptor = "I") + public int anInt5885 = 128; + + @OriginalMember(owner = "client!wl", name = "w", descriptor = "I") + public int textureBrightness = 8; + + @OriginalMember(owner = "client!wl", name = "x", descriptor = "I") + public int waterOpacity = 16; + + @OriginalMember(owner = "client!wl", name = "t", descriptor = "I") + public int secondaryColor = -1; + + @OriginalMember(owner = "client!wl", name = "y", descriptor = "Z") + public boolean occludeUnderlay = true; + + @OriginalMember(owner = "client!wl", name = "z", descriptor = "I") + public int baseColor = 0; + + @OriginalMember(owner = "client!wl", name = "m", descriptor = "I") + public int waterColor = 1190717; + + @OriginalMember(owner = "client!be", name = "a", descriptor = "(II)I") + public static int method492(@OriginalArg(1) int color) { + return color == 16711935 ? -1 : ColorUtils.rgbToHsl(color); + } + + @OriginalMember(owner = "client!wl", name = "a", descriptor = "(ILclient!wa;I)V") + public final void decode(@OriginalArg(1) Buffer buffer, @OriginalArg(2) int id) { + while (true) { + @Pc(5) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(opcode, buffer, id); + } + } + + @OriginalMember(owner = "client!wl", name = "a", descriptor = "(IILclient!wa;I)V") + private void decode(@OriginalArg(1) int opcode, @OriginalArg(2) Buffer buffer, @OriginalArg(3) int id) { + if (opcode == 1) { + this.baseColor = method492(buffer.g3()); + } else if (opcode == 2) { + this.texture = buffer.g1(); + } else if (opcode == 3) { + this.texture = buffer.g2(); + if (this.texture == 65535) { + this.texture = -1; + } + } else if (opcode == 5) { + this.occludeUnderlay = false; + } else if (opcode == 7) { + this.secondaryColor = method492(buffer.g3()); + } else if (opcode == 8) { + anInt865 = id; + } else if (opcode == 9) { + this.anInt5885 = buffer.g2(); + } else if (opcode == 10) { + this.aBoolean311 = false; + } else if (opcode == 11) { + this.textureBrightness = buffer.g1(); + } else if (opcode == 12) { + this.blendTexture = true; + } else if (opcode == 13) { + this.waterColor = buffer.g3(); + } else if (opcode == 14) { + /* + * Handles how deep into water the player is able to see, + * seems to (but not confirmed) work in jumps of 2, so: "0, 2, 4, 6" etc. + * It seems any number equals to or less than 0, removes any visual + * effect obscuring the depth view. The first increment in order, + * being 2, blocks almost 100% of the view of the underwater map (UM). + */ + this.waterOpacity = buffer.g1(); + } + } +} diff --git a/client/src/main/java/rt4/FloTypeList.java b/client/src/main/java/rt4/FloTypeList.java new file mode 100644 index 0000000..99b9ba3 --- /dev/null +++ b/client/src/main/java/rt4/FloTypeList.java @@ -0,0 +1,50 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class FloTypeList { + @OriginalMember(owner = "client!t", name = "p", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + @OriginalMember(owner = "client!hj", name = "a", descriptor = "I") + public static int capacity; + @OriginalMember(owner = "client!cl", name = "J", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!qc", name = "a", descriptor = "(ZLclient!ve;)V") + public static void init(@OriginalArg(1) Js5 arg0) { + archive = arg0; + capacity = archive.getGroupCapacity(4); + } + + @OriginalMember(owner = "client!um", name = "a", descriptor = "(BI)Lclient!wl;") + public static FloType method4395(@OriginalArg(1) int id) { + @Pc(6) FloType floorOverlay = (FloType) types.get(id); + if (floorOverlay != null) { + return floorOverlay; + } + @Pc(30) byte[] data = archive.fetchFile(4, id); + floorOverlay = new FloType(); + if (data != null) { + floorOverlay.decode(new Buffer(data), id); + } + types.put(floorOverlay, id); + return floorOverlay; + } + + @OriginalMember(owner = "client!uh", name = "e", descriptor = "(I)V") + public static void removeSoft() { + types.removeSoft(); + } + + @OriginalMember(owner = "client!wh", name = "a", descriptor = "(I)V") + public static void clear() { + types.clear(); + } + + @OriginalMember(owner = "client!aj", name = "c", descriptor = "(II)V") + public static void clean() { + types.clean(5); + } +} diff --git a/client/src/main/java/rt4/FluType.java b/client/src/main/java/rt4/FluType.java new file mode 100644 index 0000000..f46a205 --- /dev/null +++ b/client/src/main/java/rt4/FluType.java @@ -0,0 +1,123 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ni") +public final class FluType { + + @OriginalMember(owner = "client!ni", name = "d", descriptor = "I") + public int saturation; + + @OriginalMember(owner = "client!ni", name = "i", descriptor = "I") + public int weightedHue; + + @OriginalMember(owner = "client!ni", name = "r", descriptor = "I") + public int lightness; + + @OriginalMember(owner = "client!ni", name = "u", descriptor = "I") + public int chroma; + + @OriginalMember(owner = "client!ni", name = "b", descriptor = "I") + private int color = 0; + + @OriginalMember(owner = "client!ni", name = "m", descriptor = "I") + public int texture = -1; + + @OriginalMember(owner = "client!ni", name = "o", descriptor = "I") + public int anInt4156 = 128; + + @OriginalMember(owner = "client!ni", name = "l", descriptor = "Z") + public boolean blockShadow = true; + + @OriginalMember(owner = "client!ni", name = "a", descriptor = "(IB)V") + private void rgbToHsl(@OriginalArg(0) int arg0) { + @Pc(8) double local8 = (double) (arg0 >> 16 & 0xFF) / 256.0D; + @Pc(21) double local21 = (double) (arg0 >> 8 & 0xFF) / 256.0D; + @Pc(23) double local23 = local8; + @Pc(30) double local30 = (double) (arg0 & 0xFF) / 256.0D; + if (local21 < local8) { + local23 = local21; + } + if (local30 < local23) { + local23 = local30; + } + @Pc(44) double local44 = local8; + @Pc(54) double local54 = 0.0D; + if (local21 > local8) { + local44 = local21; + } + if (local30 > local44) { + local44 = local30; + } + @Pc(68) double local68 = 0.0D; + @Pc(74) double local74 = (local44 + local23) / 2.0D; + if (local23 != local44) { + if (local74 < 0.5D) { + local68 = (local44 - local23) / (local44 + local23); + } + if (local44 == local8) { + local54 = (local21 - local30) / (-local23 + local44); + } else if (local21 == local44) { + local54 = (local30 - local8) / (local44 - local23) + 2.0D; + } else if (local30 == local44) { + local54 = (local8 - local21) / (-local23 + local44) + 4.0D; + } + if (local74 >= 0.5D) { + local68 = (local44 - local23) / ((2.0D - local44) - local23); + } + } + if (local74 > 0.5D) { + this.chroma = (int) (local68 * (1.0D - local74) * 512.0D); + } else { + this.chroma = (int) (local68 * local74 * 512.0D); + } + if (this.chroma < 1) { + this.chroma = 1; + } + this.saturation = (int) (local68 * 256.0D); + this.lightness = (int) (local74 * 256.0D); + if (this.lightness < 0) { + this.lightness = 0; + } else if (this.lightness > 255) { + this.lightness = 255; + } + local54 /= 6.0D; + this.weightedHue = (int) ((double) this.chroma * local54); + if (this.saturation < 0) { + this.saturation = 0; + } else if (this.saturation > 255) { + this.saturation = 255; + } + } + + @OriginalMember(owner = "client!ni", name = "a", descriptor = "(ILclient!wa;I)V") + public final void decode(@OriginalArg(0) int id, @OriginalArg(1) Buffer buffer) { + while (true) { + @Pc(7) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(opcode, buffer, id); + } + } + + @OriginalMember(owner = "client!ni", name = "a", descriptor = "(BILclient!wa;I)V") + private void decode(@OriginalArg(1) int opcode, @OriginalArg(2) Buffer buffer, @OriginalArg(3) int arg2) { + if (opcode == 1) { + this.color = buffer.g3(); + this.rgbToHsl(this.color); + } else if (opcode == 2) { + this.texture = buffer.g2(); + if (this.texture == 65535) { + this.texture = -1; + } + } else if (opcode == 3) { + this.anInt4156 = buffer.g2(); + } else if (opcode == 4) { + this.blockShadow = false; + } + } +} diff --git a/client/src/main/java/rt4/FluTypeList.java b/client/src/main/java/rt4/FluTypeList.java new file mode 100644 index 0000000..1a35424 --- /dev/null +++ b/client/src/main/java/rt4/FluTypeList.java @@ -0,0 +1,47 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class FluTypeList { + @OriginalMember(owner = "client!gj", name = "p", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + @OriginalMember(owner = "client!oj", name = "x", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!qc", name = "a", descriptor = "(ZI)Lclient!ni;") + public static FluType get(@OriginalArg(1) int id) { + @Pc(10) FluType floorUnderlay = (FluType) types.get(id); + if (floorUnderlay != null) { + return floorUnderlay; + } + @Pc(27) byte[] data = archive.fetchFile(1, id); + floorUnderlay = new FluType(); + if (data != null) { + floorUnderlay.decode(id, new Buffer(data)); + } + types.put(floorUnderlay, id); + return floorUnderlay; + } + + @OriginalMember(owner = "client!hc", name = "a", descriptor = "(Lclient!ve;I)V") + public static void init(@OriginalArg(0) Js5 arg0) { + archive = arg0; + } + + @OriginalMember(owner = "client!sd", name = "f", descriptor = "(B)V") + public static void removeSoft() { + types.removeSoft(); + } + + @OriginalMember(owner = "client!ed", name = "c", descriptor = "(I)V") + public static void clear() { + types.clear(); + } + + @OriginalMember(owner = "client!fk", name = "b", descriptor = "(IB)V") + public static void clean() { + types.clean(5); + } +} diff --git a/client/src/main/java/rt4/FogManager.java b/client/src/main/java/rt4/FogManager.java new file mode 100644 index 0000000..f6768ed --- /dev/null +++ b/client/src/main/java/rt4/FogManager.java @@ -0,0 +1,296 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public final class FogManager { + + @OriginalMember(owner = "client!ph", name = "b", descriptor = "[[Lclient!li;") + public static final Environment[][] chunksAtmosphere = new Environment[13][13]; + + @OriginalMember(owner = "client!mk", name = "c", descriptor = "I") + public static int lightX; + + @OriginalMember(owner = "client!mk", name = "d", descriptor = "I") + public static int lightZ; + @OriginalMember(owner = "client!ig", name = "d", descriptor = "I") + public static int anInt2883; + @OriginalMember(owner = "client!jm", name = "s", descriptor = "F") + public static float aFloat13; + @OriginalMember(owner = "client!ui", name = "mb", descriptor = "F") + public static float aFloat37; + @OriginalMember(owner = "client!ej", name = "bb", descriptor = "F") + public static float aFloat6; + @OriginalMember(owner = "client!vh", name = "e", descriptor = "I") + public static int anInt4623; + @OriginalMember(owner = "client!ni", name = "h", descriptor = "I") + public static int anInt4153; + @OriginalMember(owner = "client!be", name = "Vb", descriptor = "F") + public static float aFloat4; + @OriginalMember(owner = "client!ab", name = "b", descriptor = "I") + public static int anInt5868 = 0; + @OriginalMember(owner = "client!sf", name = "c", descriptor = "I") + public static int anInt5080; + @OriginalMember(owner = "client!kd", name = "ub", descriptor = "I") + public static int anInt3255; + @OriginalMember(owner = "client!aj", name = "X", descriptor = "F") + public static float aFloat1; + @OriginalMember(owner = "client!p", name = "g", descriptor = "F") + public static float aFloat23; + @OriginalMember(owner = "client!nc", name = "a", descriptor = "I") + public static int anInt4044; + @OriginalMember(owner = "client!bm", name = "a", descriptor = "F") + public static float aFloat5; + @OriginalMember(owner = "client!ve", name = "t", descriptor = "I") + public static int anInt5731; + @OriginalMember(owner = "client!md", name = "S", descriptor = "I") + public static int anInt3709; + @OriginalMember(owner = "client!ui", name = "T", descriptor = "F") + public static float aFloat36; + @OriginalMember(owner = "client!en", name = "z", descriptor = "F") + public static float aFloat7; + @OriginalMember(owner = "client!ge", name = "q", descriptor = "I") + public static int anInt2161; + @OriginalMember(owner = "client!sa", name = "W", descriptor = "Z") + public static boolean instantScreenFade = true; + @OriginalMember(owner = "client!li", name = "t", descriptor = "I") + public static int currentLightZ; + @OriginalMember(owner = "client!mi", name = "Z", descriptor = "I") + public static int currentLightY; + @OriginalMember(owner = "client!gl", name = "f", descriptor = "I") + public static int currentLightX; + + @OriginalMember(owner = "client!mk", name = "i", descriptor = "F") + private static float lightModelAmbient; + + @OriginalMember(owner = "client!mk", name = "a", descriptor = "[F") + public static final float[] light0Position = new float[4]; + + @OriginalMember(owner = "client!mk", name = "b", descriptor = "I") + private static int lightColor = -1; + + @OriginalMember(owner = "client!mk", name = "e", descriptor = "I") + public static int defaulFogColorRgb = 13156520; + + @OriginalMember(owner = "client!mk", name = "f", descriptor = "F") + private static float light0Diffuse = -1.0F; + + @OriginalMember(owner = "client!mk", name = "g", descriptor = "F") + private static float light1Diffuse = -1.0F; + + @OriginalMember(owner = "client!mk", name = "h", descriptor = "[F") + public static final float[] fogColor = new float[4]; + + @OriginalMember(owner = "client!mk", name = "j", descriptor = "[F") + private static final float[] light1Position = new float[4]; + + @OriginalMember(owner = "client!mk", name = "k", descriptor = "I") + public static int defaultLightColorRgb = 16777215; + + @OriginalMember(owner = "client!mk", name = "l", descriptor = "I") + private static int fogOffset = -1; + + @OriginalMember(owner = "client!mk", name = "m", descriptor = "I") + private static int fogColorRGB = -1; + + @OriginalMember(owner = "client!mk", name = "a", descriptor = "()V") + public static void applyLightPosition() { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, light0Position, 0); + gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_POSITION, light1Position, 0); + } + + @OriginalMember(owner = "client!mk", name = "b", descriptor = "()F") + public static float getLight0Diffuse() { + return light0Diffuse; + } + + @OriginalMember(owner = "client!mk", name = "a", descriptor = "(IFFF)V") + public static void setLightParams(@OriginalArg(0) int color, @OriginalArg(1) float ambientMod, @OriginalArg(2) float l0Diffuse, @OriginalArg(3) float l1Diffuse) { + if (lightColor == color && lightModelAmbient == ambientMod && light0Diffuse == l0Diffuse && light1Diffuse == l1Diffuse) { + return; + } + lightColor = color; + lightModelAmbient = ambientMod; + light0Diffuse = l0Diffuse; + light1Diffuse = l1Diffuse; + @Pc(25) GL2 gl = GlRenderer.gl; + @Pc(34) float red = (float) (color >> 16 & 0xFF) / 255.0F; + @Pc(43) float green = (float) (color >> 8 & 0xFF) / 255.0F; + @Pc(50) float blue = (float) (color & 0xFF) / 255.0F; + @Pc(75) float[] lightModelAmbientParams = new float[]{ambientMod * red, ambientMod * green, ambientMod * blue, 1.0F}; + gl.glLightModelfv(GL2.GL_LIGHT_MODEL_AMBIENT, lightModelAmbientParams, 0); + @Pc(105) float[] light0Params = new float[]{l0Diffuse * red, l0Diffuse * green, l0Diffuse * blue, 1.0F}; + gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_DIFFUSE, light0Params, 0); + @Pc(139) float[] light1Params = new float[]{-l1Diffuse * red, -l1Diffuse * green, -l1Diffuse * blue, 1.0F}; + gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_DIFFUSE, light1Params, 0); + } + + @OriginalMember(owner = "client!mk", name = "a", descriptor = "(II)V") + public static void setFogParams(@OriginalArg(0) int color, @OriginalArg(1) int offset) { + if (fogColorRGB == color && fogOffset == offset) { + return; + } + fogColorRGB = color; + fogOffset = offset; + @Pc(12) GL2 gl = GlRenderer.gl; + fogColor[0] = (float) (color >> 16 & 0xFF) / 255.0F; + fogColor[1] = (float) (color >> 8 & 0xFF) / 255.0F; + fogColor[2] = (float) (color & 0xFF) / 255.0F; + gl.glFogi(GL2.GL_FOG_MODE, GL2.GL_LINEAR); + gl.glFogf(GL2.GL_FOG_DENSITY, 0.95F); + gl.glHint(GL2.GL_FOG_HINT, GL2.GL_FASTEST); + int fogEnd = GlobalConfig.VIEW_DISTANCE; + @Pc(65) int fogStart = fogEnd - (int) (GlobalConfig.VIEW_FADE_DISTANCE * 2.0f) - offset; + if (fogStart < 50) { + fogStart = 50; + } + gl.glFogf(GL2.GL_FOG_START, (float) fogStart); + gl.glFogf(GL2.GL_FOG_END, (float) fogEnd - GlobalConfig.VIEW_FADE_DISTANCE); + gl.glFogfv(GL2.GL_FOG_COLOR, fogColor, 0); + } + + @OriginalMember(owner = "client!mk", name = "a", descriptor = "(FFF)V") + public static void setLightPosition(@OriginalArg(0) float x, @OriginalArg(1) float y, @OriginalArg(2) float z) { + if (light0Position[0] == x && light0Position[1] == y && light0Position[2] == z) { + return; + } + light0Position[0] = x; + light0Position[1] = y; + light0Position[2] = z; + light1Position[0] = -x; + light1Position[1] = -y; + light1Position[2] = -z; + lightX = (int) (x * 256.0F / y); + lightZ = (int) (z * 256.0F / y); + } + + @OriginalMember(owner = "client!mk", name = "d", descriptor = "()I") + public static int getLightColor() { + return lightColor; + } + + @OriginalMember(owner = "client!mk", name = "e", descriptor = "()V") + public static void setup() { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glColorMaterial(GL2.GL_FRONT, GL2.GL_AMBIENT_AND_DIFFUSE); + gl.glEnable(GL2.GL_COLOR_MATERIAL); + @Pc(27) float[] light0Params = new float[]{0.0F, 0.0F, 0.0F, 1.0F}; + gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, light0Params, 0); + gl.glEnable(GL2.GL_LIGHT0); + @Pc(55) float[] light1Params = new float[]{0.0F, 0.0F, 0.0F, 1.0F}; + gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_AMBIENT, light1Params, 0); + gl.glEnable(GL2.GL_LIGHT1); + lightColor = -1; + fogColorRGB = -1; + initDefaults(); + } + + @OriginalMember(owner = "client!mk", name = "a", descriptor = "([F)V") + public static void setFogColor(@OriginalArg(0) float[] params) { + if (params == null) { + params = fogColor; + } + @Pc(5) GL2 gl = GlRenderer.gl; + gl.glFogfv(GL2.GL_FOG_COLOR, params, 0); + } + + @OriginalMember(owner = "client!mk", name = "f", descriptor = "()V") + private static void initDefaults() { + setLightParams(defaultLightColorRgb, 1.1523438F, 0.69921875F, 1.2F); + setLightPosition(-50.0F, -60.0F, -50.0F); + setFogParams(defaulFogColorRgb, 0); + } + + @OriginalMember(owner = "client!mk", name = "g", descriptor = "()F") + public static float getLightingModelAmbient() { + return lightModelAmbient; + } + + @OriginalMember(owner = "client!si", name = "a", descriptor = "(IZ)V") + public static void init(@OriginalArg(0) int arg0) { + setLightParams(defaultLightColorRgb, ((float) arg0 * 0.1F + 0.7F) * 1.1523438F, 0.69921875F, 0.69921875F); + setLightPosition(-50.0F, -60.0F, -50.0F); + setFogParams(defaulFogColorRgb, 0); + applyLightPosition(); + } + + @OriginalMember(owner = "client!i", name = "b", descriptor = "(IIIII)I") + public static int method2235(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (instantScreenFade) { + arg0 = 1000000; + instantScreenFade = false; + } + @Pc(15) Environment local15 = chunksAtmosphere[arg3][arg1]; + @Pc(25) float local25 = ((float) arg2 * 0.1F + 0.7F) * local15.lightModelAmbient; + @Pc(28) float local28 = local15.light0Diffuse; + @Pc(31) int local31 = local15.screenColorRgb; + @Pc(34) int local34 = local15.fogDepth; + @Pc(37) int local37 = local15.fogColorRgb; + if (!Preferences.fogEnabled) { + local34 = 0; + } + @Pc(44) float local44 = local15.light1Diffuse; + if (local31 != anInt2883 || aFloat13 != local25 || aFloat1 != local28 || local44 != aFloat4 || anInt4044 != local37 || anInt5080 != local34) { + aFloat13 = local25; + aFloat37 = aFloat36; + aFloat6 = aFloat7; + anInt2883 = local31; + anInt4623 = anInt3709; + anInt4153 = anInt2161; + aFloat4 = local44; + anInt5868 = 0; + anInt3255 = anInt5731; + anInt5080 = local34; + aFloat1 = local28; + anInt4044 = local37; + aFloat23 = aFloat5; + } + if (anInt5868 < 65536) { + anInt5868 += arg0 * 250; + if (anInt5868 >= 65536) { + anInt5868 = 65536; + } + @Pc(114) float local114 = (float) anInt5868 / 65536.0F; + @Pc(118) int local118 = anInt5868 >> 8; + @Pc(125) int local125 = 65536 - anInt5868 >> 8; + anInt3709 = (local118 * (anInt4044 & 0xFF00FF) + (anInt4623 & 0xFF00FF) * local125 & 0xFF00FF00) + (local125 * (anInt4623 & 0xFF00) + (anInt4044 & 0xFF00) * local118 & 0xFF0000) >> 8; + @Pc(162) float local162 = (float) (65536 - anInt5868) / 65536.0F; + aFloat7 = local162 * aFloat6 + local114 * aFloat13; + aFloat36 = aFloat37 * local162 + local114 * aFloat1; + aFloat5 = local114 * aFloat4 + local162 * aFloat23; + anInt5731 = ((anInt2883 & 0xFF00) * local118 + local125 * (anInt3255 & 0xFF00) & 0xFF0000) + ((anInt3255 & 0xFF00FF) * local125 + ((anInt2883 & 0xFF00FF) * local118) & 0xFF00FF00) >> 8; + anInt2161 = local118 * anInt5080 + local125 * anInt4153 >> 8; + } + setLightParams(anInt5731, aFloat7, aFloat36, aFloat5); + setFogParams(anInt3709, anInt2161); + setLightPosition((float) currentLightX, (float) currentLightY, (float) currentLightZ); + applyLightPosition(); + return anInt3709; + } + + @OriginalMember(owner = "client!gm", name = "f", descriptor = "(B)V") + public static void setInstantFade() { + instantScreenFade = true; + } + + @OriginalMember(owner = "client!fm", name = "a", descriptor = "(ZII)V") + public static void setLightPosition(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + currentLightX = chunksAtmosphere[arg1][arg0].lightX; + currentLightY = chunksAtmosphere[arg1][arg0].lightY; + currentLightZ = chunksAtmosphere[arg1][arg0].lightZ; + setLightPosition((float) currentLightX, (float) currentLightY, (float) currentLightZ); + } + + @OriginalMember(owner = "client!g", name = "b", descriptor = "(I)V") + public static void setDefaultChunksAtmosphere() { + @Pc(9) Environment local9 = new Environment(); + for (@Pc(18) int local18 = 0; local18 < 13; local18++) { + for (@Pc(25) int local25 = 0; local25 < 13; local25++) { + chunksAtmosphere[local18][local25] = local9; + } + } + } +} diff --git a/client/src/main/java/rt4/Font.java b/client/src/main/java/rt4/Font.java new file mode 100644 index 0000000..555e471 --- /dev/null +++ b/client/src/main/java/rt4/Font.java @@ -0,0 +1,1016 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.util.Random; + +@OriginalClass("client!rk") +public abstract class Font extends SecondaryNode { + + @OriginalMember(owner = "client!rk", name = "K", descriptor = "Lclient!na;") + public static final JagString TAG_GT = JagString.parse("gt"); + @OriginalMember(owner = "client!rk", name = "L", descriptor = "Lclient!na;") + public static final JagString TAG_LT = JagString.parse("lt"); + @OriginalMember(owner = "client!rk", name = "M", descriptor = "Lclient!na;") + public static final JagString TAG_SHAD1 = JagString.parse("shad="); + @OriginalMember(owner = "client!rk", name = "N", descriptor = "Lclient!na;") + public static final JagString TAB_SHY = JagString.parse("shy"); + @OriginalMember(owner = "client!rk", name = "O", descriptor = "Lclient!na;") + public static final JagString TAG_TRANS1 = JagString.parse("trans="); + @OriginalMember(owner = "client!rk", name = "P", descriptor = "Lclient!na;") + public static final JagString TAG_U1 = JagString.parse("u="); + @OriginalMember(owner = "client!rk", name = "Q", descriptor = "Lclient!na;") + public static final JagString TAG_STR1 = JagString.parse("str="); + @OriginalMember(owner = "client!rk", name = "R", descriptor = "Lclient!na;") + public static final JagString TAB_EURO = JagString.parse("euro"); + @OriginalMember(owner = "client!rk", name = "T", descriptor = "Lclient!na;") + public static final JagString TAG_COL2 = JagString.parse(")4col"); + @OriginalMember(owner = "client!rk", name = "X", descriptor = "Lclient!na;") + public static final JagString TAG_SHAD3 = JagString.parse(")4shad"); + @OriginalMember(owner = "client!rk", name = "Y", descriptor = "Lclient!na;") + public static final JagString TAG_COL1 = JagString.parse("col="); + @OriginalMember(owner = "client!rk", name = "bb", descriptor = "Lclient!na;") + public static final JagString TAG_U2 = JagString.parse("u"); + @OriginalMember(owner = "client!rk", name = "cb", descriptor = "Lclient!na;") + public static final JagString TAB_TIMES = JagString.parse("times"); + @OriginalMember(owner = "client!rk", name = "eb", descriptor = "Lclient!na;") + public static final JagString TAG_TRANS2 = JagString.parse(")4trans"); + @OriginalMember(owner = "client!rk", name = "fb", descriptor = "Lclient!na;") + public static final JagString TAG_NBSP = JagString.parse("nbsp"); + @OriginalMember(owner = "client!rk", name = "ib", descriptor = "Lclient!na;") + public static final JagString TAG_U3 = JagString.parse(")4u"); + @OriginalMember(owner = "client!rk", name = "kb", descriptor = "Lclient!na;") + public static final JagString TAG_BR = JagString.parse("br"); + @OriginalMember(owner = "client!rk", name = "lb", descriptor = "Lclient!na;") + public static final JagString TAG_SHAD2 = JagString.parse("shad"); + @OriginalMember(owner = "client!rk", name = "mb", descriptor = "Lclient!na;") + public static final JagString TAG_IMG = JagString.parse("img="); + @OriginalMember(owner = "client!rk", name = "ob", descriptor = "Lclient!na;") + public static final JagString TAB_COPY = JagString.parse("copy"); + @OriginalMember(owner = "client!rk", name = "pb", descriptor = "Lclient!na;") + public static final JagString TAG_STR3 = JagString.parse(")4str"); + @OriginalMember(owner = "client!rk", name = "qb", descriptor = "Lclient!na;") + public static final JagString TAG_REG = JagString.parse("reg"); + @OriginalMember(owner = "client!rk", name = "rb", descriptor = "Lclient!na;") + public static final JagString TAG_STR2 = JagString.parse("str"); + @OriginalMember(owner = "client!rk", name = "sb", descriptor = "Lclient!na;") + public static final JagString buffer = JagString.allocate(100); + @OriginalMember(owner = "client!rk", name = "Ab", descriptor = "[Lclient!na;") + public static final JagString[] lines = new JagString[100]; + @OriginalMember(owner = "client!rk", name = "Z", descriptor = "Lclient!na;") + private static final JagString aClass100_706 = JagString.parse(""); + @OriginalMember(owner = "client!rk", name = "hb", descriptor = "Lclient!na;") + private static final JagString aClass100_711 = JagString.parse(""); + @OriginalMember(owner = "client!rk", name = "tb", descriptor = "I") + public static int strikethroughColor = -1; + @OriginalMember(owner = "client!rk", name = "ub", descriptor = "I") + public static int underlineColor = -1; + @OriginalMember(owner = "client!rk", name = "vb", descriptor = "I") + public static int extraSpaceWidth = 0; + @OriginalMember(owner = "client!rk", name = "wb", descriptor = "I") + public static int color = 0; + @OriginalMember(owner = "client!rk", name = "xb", descriptor = "I") + public static int alphaOverride = 256; + @OriginalMember(owner = "client!rk", name = "yb", descriptor = "I") + public static int alpha = 256; + @OriginalMember(owner = "client!rk", name = "zb", descriptor = "I") + public static int shadowColor = -1; + @OriginalMember(owner = "client!rk", name = "Bb", descriptor = "I") + public static int shadowColorOverride = -1; + @OriginalMember(owner = "client!rk", name = "Cb", descriptor = "I") + public static int colorOverride = 0; + @OriginalMember(owner = "client!rk", name = "Db", descriptor = "I") + public static int spaceWidth = 0; + @OriginalMember(owner = "client!rk", name = "W", descriptor = "[I") + private int[] nameIconHeights; + + @OriginalMember(owner = "client!rk", name = "gb", descriptor = "[B") + private byte[] kerning; + + @OriginalMember(owner = "client!rk", name = "jb", descriptor = "[I") + private int[] glyphWidths; + + @OriginalMember(owner = "client!rk", name = "nb", descriptor = "[Lclient!ok;") + private IndexedSprite[] nameIcons; + + @OriginalMember(owner = "client!rk", name = "ab", descriptor = "I") + public int lineHeight = 0; + + @OriginalMember(owner = "client!rk", name = "S", descriptor = "[I") + private int[] spriteXOffsets; + + @OriginalMember(owner = "client!rk", name = "db", descriptor = "[I") + private int[] spriteYOffsets; + + @OriginalMember(owner = "client!rk", name = "I", descriptor = "[I") + protected int[] spriteInnerWidths; + + @OriginalMember(owner = "client!rk", name = "U", descriptor = "[I") + protected int[] spriteInnerHeights; + + @OriginalMember(owner = "client!rk", name = "V", descriptor = "I") + private int paragraphTopPadding; + + @OriginalMember(owner = "client!rk", name = "J", descriptor = "I") + private int paragraphBottomPadding; + + @OriginalMember(owner = "client!rk", name = "", descriptor = "([B[I[I[I[I)V") + protected Font(@OriginalArg(0) byte[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int[] arg2, @OriginalArg(3) int[] arg3, @OriginalArg(4) int[] arg4) { + this.spriteXOffsets = arg1; + this.spriteYOffsets = arg2; + this.spriteInnerWidths = arg3; + this.spriteInnerHeights = arg4; + this.decode(arg0); + @Pc(21) int local21 = Integer.MAX_VALUE; + @Pc(23) int local23 = Integer.MIN_VALUE; + for (@Pc(25) int local25 = 0; local25 < 256; local25++) { + if (this.spriteYOffsets[local25] < local21 && this.spriteInnerHeights[local25] != 0) { + local21 = this.spriteYOffsets[local25]; + } + if (this.spriteYOffsets[local25] + this.spriteInnerHeights[local25] > local23) { + local23 = this.spriteYOffsets[local25] + this.spriteInnerHeights[local25]; + } + } + this.paragraphTopPadding = this.lineHeight - local21; + this.paragraphBottomPadding = local23 - this.lineHeight; + } + + @OriginalMember(owner = "client!rk", name = "", descriptor = "([B)V") + public Font(@OriginalArg(0) byte[] arg0) { + this.decode(arg0); + } + + @OriginalMember(owner = "client!rk", name = "c", descriptor = "(Lclient!na;)Lclient!na;") + public static JagString escape(@OriginalArg(0) JagString arg0) { + @Pc(3) int local3 = arg0.length(); + @Pc(5) int local5 = 0; + @Pc(15) int local15; + for (@Pc(7) int local7 = 0; local7 < local3; local7++) { + local15 = arg0.charAt(local7); + if (local15 == 60 || local15 == 62) { + local5 += 3; + } + } + @Pc(30) JagString local30 = JagString.allocate(local3 + local5); + for (local15 = 0; local15 < local3; local15++) { + @Pc(40) int local40 = arg0.charAt(local15); + if (local40 == 60) { + local30.method3113(aClass100_711); + } else if (local40 == 62) { + local30.method3113(aClass100_706); + } else { + local30.append(local40); + } + } + return local30; + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "([[B[[B[I[I[III)I") + public static int method2870(@OriginalArg(0) byte[][] arg0, @OriginalArg(1) byte[][] arg1, @OriginalArg(2) int[] arg2, @OriginalArg(3) int[] arg3, @OriginalArg(4) int[] arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6) { + @Pc(3) int local3 = arg2[arg5]; + @Pc(9) int local9 = local3 + arg4[arg5]; + @Pc(13) int local13 = arg2[arg6]; + @Pc(19) int local19 = local13 + arg4[arg6]; + @Pc(21) int local21 = local3; + if (local13 > local3) { + local21 = local13; + } + @Pc(28) int local28 = local9; + if (local19 < local9) { + local28 = local19; + } + @Pc(37) int local37 = arg3[arg5]; + if (arg3[arg6] < local37) { + local37 = arg3[arg6]; + } + @Pc(50) byte[] local50 = arg1[arg5]; + @Pc(54) byte[] local54 = arg0[arg6]; + @Pc(58) int local58 = local21 - local3; + @Pc(62) int local62 = local21 - local13; + for (@Pc(64) int local64 = local21; local64 < local28; local64++) { + @Pc(77) int local77 = local50[local58++] + local54[local62++]; + if (local77 < local37) { + local37 = local77; + } + } + return -local37; + } + + @OriginalMember(owner = "client!ce", name = "a", descriptor = "(I[B)Lclient!rk;") + public static Font method799(@OriginalArg(1) byte[] arg0) { + if (arg0 == null) { + return null; + } + @Pc(27) Font local27; + if (GlRenderer.enabled) { + local27 = new GlFont(arg0, SpriteLoader.xOffsets, SpriteLoader.yOffsets, SpriteLoader.innerWidths, SpriteLoader.innerHeights, SpriteLoader.pixels); + } else { + local27 = new SoftwareFont(arg0, SpriteLoader.xOffsets, SpriteLoader.yOffsets, SpriteLoader.innerWidths, SpriteLoader.innerHeights, SpriteLoader.pixels); + } + SpriteLoader.clear(); + return local27; + } + + @OriginalMember(owner = "client!k", name = "a", descriptor = "(IIBLclient!ve;Lclient!ve;)Lclient!rk;") + public static Font method2462(@OriginalArg(1) int arg0, @OriginalArg(3) Js5 arg1, @OriginalArg(4) Js5 arg2) { + return SpriteLoader.decode(arg1, 0, arg0) ? method799(arg2.fetchFile(arg0, 0)) : null; + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(Lclient!na;IIIIIIIII)I") + public final int drawInterfaceText(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9) { + return this.renderParagraphAlpha(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(Lclient!na;II)V") + private void render(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(4) int local4 = arg2 - this.lineHeight; + @Pc(6) int local6 = -1; + @Pc(8) int local8 = 0; + @Pc(12) int local12 = arg0.length(); + for (@Pc(14) int local14 = 0; local14 < local12; local14++) { + @Pc(22) int local22 = arg0.charAt(local14); + if (local22 == 60) { + local6 = local14; + } else { + @Pc(120) int local120; + if (local22 == 62 && local6 != -1) { + @Pc(42) JagString local42 = arg0.substring(local14, local6 + 1); + local6 = -1; + if (local42.strEquals(TAG_LT)) { + local22 = 60; + } else if (local42.strEquals(TAG_GT)) { + local22 = 62; + } else if (local42.strEquals(TAG_NBSP)) { + local22 = 160; + } else if (local42.strEquals(TAB_SHY)) { + local22 = 173; + } else if (local42.strEquals(TAB_TIMES)) { + local22 = 215; + } else if (local42.strEquals(TAB_EURO)) { + local22 = 128; + } else if (local42.strEquals(TAB_COPY)) { + local22 = 169; + } else { + if (!local42.strEquals(TAG_REG)) { + if (local42.startsWith(TAG_IMG)) { + try { + local120 = local42.substring(4).parseInt(); + @Pc(125) IndexedSprite local125 = this.nameIcons[local120]; + @Pc(136) int local136 = this.nameIconHeights == null ? local125.innerHeight : this.nameIconHeights[local120]; + if (alphaOverride == 256) { + local125.renderTransparent(arg1, local4 + this.lineHeight - local136); + } else { + local125.method3335(arg1, local4 + this.lineHeight - local136, alphaOverride); + } + arg1 += local125.innerWidth; + local8 = 0; + } catch (@Pc(168) Exception local168) { + } + } else { + this.parseTag(local42); + } + continue; + } + local22 = 174; + } + } + if (local6 == -1) { + if (this.kerning != null && local8 != 0) { + arg1 += this.kerning[(local8 << 8) + local22]; + } + @Pc(197) int local197 = this.spriteInnerWidths[local22]; + local120 = this.spriteInnerHeights[local22]; + if (local22 == 32) { + if (spaceWidth > 0) { + extraSpaceWidth += spaceWidth; + arg1 += extraSpaceWidth >> 8; + extraSpaceWidth &= 0xFF; + } + } else if (alphaOverride == 256) { + if (shadowColorOverride != -1) { + this.renderGlyph(local22, arg1 + this.spriteXOffsets[local22] + 1, local4 + this.spriteYOffsets[local22] + 1, local197, local120, shadowColorOverride); + } + this.renderGlyph(local22, arg1 + this.spriteXOffsets[local22], local4 + this.spriteYOffsets[local22], local197, local120, colorOverride); + } else { + if (shadowColorOverride != -1) { + this.renderGlyphTransparent(local22, arg1 + this.spriteXOffsets[local22] + 1, local4 + this.spriteYOffsets[local22] + 1, local197, local120, shadowColorOverride, alphaOverride); + } + this.renderGlyphTransparent(local22, arg1 + this.spriteXOffsets[local22], local4 + this.spriteYOffsets[local22], local197, local120, colorOverride, alphaOverride); + } + @Pc(323) int local323 = this.glyphWidths[local22]; + if (strikethroughColor != -1) { + if (GlRenderer.enabled) { + GlRaster.drawHorizontalLine(arg1, local4 + (int) ((double) this.lineHeight * 0.7D), local323, strikethroughColor); + } else { + SoftwareRaster.drawHorizontalLine(arg1, local4 + (int) ((double) this.lineHeight * 0.7D), local323, strikethroughColor); + } + } + if (underlineColor != -1) { + if (GlRenderer.enabled) { + GlRaster.drawHorizontalLine(arg1, local4 + this.lineHeight + 1, local323, underlineColor); + } else { + SoftwareRaster.drawHorizontalLine(arg1, local4 + this.lineHeight + 1, local323, underlineColor); + } + } + arg1 += local323; + local8 = local22; + } + } + } + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(IIIIIIZ)V") + protected abstract void renderGlyph(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5); + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(IIIIIIIZ)V") + protected abstract void renderGlyphTransparent(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6); + + @OriginalMember(owner = "client!rk", name = "b", descriptor = "(Lclient!na;I)I") + public final int getMaxLineWidth(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1) { + @Pc(10) int local10 = this.splitParagraph(arg0, new int[]{arg1}, lines); + @Pc(12) int local12 = 0; + for (@Pc(14) int local14 = 0; local14 < local10; local14++) { + @Pc(23) int local23 = this.getStringWidth(lines[local14]); + if (local23 > local12) { + local12 = local23; + } + } + return local12; + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(Lclient!na;IIII)V") + public final void renderLeft(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (arg0 != null) { + this.setColors(arg3, arg4); + this.render(arg0, arg1, arg2); + } + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(Lclient!na;)I") + public final int getStringWidth(@OriginalArg(0) JagString arg0) { + if (arg0 == null) { + return 0; + } + @Pc(5) int local5 = -1; + @Pc(7) int local7 = 0; + @Pc(9) int local9 = 0; + @Pc(13) int local13 = arg0.length(); + for (@Pc(15) int local15 = 0; local15 < local13; local15++) { + @Pc(23) int local23 = arg0.charAt(local15); + if (local23 == 60) { + local5 = local15; + } else { + if (local23 == 62 && local5 != -1) { + @Pc(43) JagString local43 = arg0.substring(local15, local5 + 1); + local5 = -1; + if (local43.strEquals(TAG_LT)) { + local23 = 60; + } else if (local43.strEquals(TAG_GT)) { + local23 = 62; + } else if (local43.strEquals(TAG_NBSP)) { + local23 = 160; + } else if (local43.strEquals(TAB_SHY)) { + local23 = 173; + } else if (local43.strEquals(TAB_TIMES)) { + local23 = 215; + } else if (local43.strEquals(TAB_EURO)) { + local23 = 128; + } else if (local43.strEquals(TAB_COPY)) { + local23 = 169; + } else { + if (!local43.strEquals(TAG_REG)) { + if (local43.startsWith(TAG_IMG)) { + try { + @Pc(121) int local121 = local43.substring(4).parseInt(); + local9 += this.nameIcons[local121].innerWidth; + local7 = 0; + } catch (@Pc(133) Exception local133) { + } + } + continue; + } + local23 = 174; + } + } + if (local5 == -1) { + local9 += this.glyphWidths[local23]; + if (this.kerning != null && local7 != 0) { + local9 += this.kerning[(local7 << 8) + local23]; + } + local7 = local23; + } + } + } + return local9; + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(Lclient!na;IIIILjava/util/Random;I)I") + public final int method2859(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(5) Random arg3, @OriginalArg(6) int arg4) { + if (arg0 == null) { + return 0; + } + arg3.setSeed(arg4); + this.setColors(16777215, 0, (arg3.nextInt() & 0x1F) + 192); + @Pc(21) int local21 = arg0.length(); + @Pc(24) int[] local24 = new int[local21]; + @Pc(26) int local26 = 0; + for (@Pc(28) int local28 = 0; local28 < local21; local28++) { + local24[local28] = local26; + if ((arg3.nextInt() & 0x3) == 0) { + local26++; + } + } + this.renderOffset(arg0, arg1, arg2, local24, null); + return local26; + } + + @OriginalMember(owner = "client!rk", name = "c", descriptor = "(Lclient!na;I)I") + public final int getParagraphLineCount(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1) { + return this.splitParagraph(arg0, new int[]{arg1}, lines); + } + + @OriginalMember(owner = "client!rk", name = "b", descriptor = "(Lclient!na;)V") + private void parseTag(@OriginalArg(0) JagString arg0) { + try { + if (arg0.startsWith(TAG_COL1)) { + colorOverride = arg0.substring(4).parseHexString(16); + } else if (arg0.strEquals(TAG_COL2)) { + colorOverride = color; + } else if (arg0.startsWith(TAG_TRANS1)) { + alphaOverride = arg0.substring(6).parseInt(); + } else if (arg0.strEquals(TAG_TRANS2)) { + alphaOverride = alpha; + } else if (arg0.startsWith(TAG_STR1)) { + strikethroughColor = arg0.substring(4).parseHexString(16); + } else if (arg0.strEquals(TAG_STR2)) { + strikethroughColor = 0x800000; + } else if (arg0.strEquals(TAG_STR3)) { + strikethroughColor = -1; + } else if (arg0.startsWith(TAG_U1)) { + underlineColor = arg0.substring(2).parseHexString(16); + } else if (arg0.strEquals(TAG_U2)) { + underlineColor = 0; + } else if (arg0.strEquals(TAG_U3)) { + underlineColor = -1; + } else if (arg0.startsWith(TAG_SHAD1)) { + shadowColorOverride = arg0.substring(5).parseHexString(16); + } else if (arg0.strEquals(TAG_SHAD2)) { + shadowColorOverride = 0; + } else if (arg0.strEquals(TAG_SHAD3)) { + shadowColorOverride = shadowColor; + } else if (arg0.strEquals(TAG_BR)) { + this.setColors(color, shadowColor, alpha); + } + } catch (@Pc(144) Exception local144) { + } + } + + @OriginalMember(owner = "client!rk", name = "d", descriptor = "(I)I") + private int getGlyphWidth(@OriginalArg(0) int arg0) { + return this.glyphWidths[arg0 & 0xFF]; + } + + @OriginalMember(owner = "client!rk", name = "b", descriptor = "(Lclient!na;IIII)V") + public final void renderRight(@OriginalArg(0) JagString string, @OriginalArg(1) int x, @OriginalArg(2) int y, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (string != null) { + this.setColors(arg3, arg4); + this.render(string, x - this.getStringWidth(string), y); + } + } + + @OriginalMember(owner = "client!rk", name = "d", descriptor = "(Lclient!na;I)V") + private void justify(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1) { + @Pc(1) int local1 = 0; + @Pc(3) boolean local3 = false; + @Pc(7) int local7 = arg0.length(); + for (@Pc(9) int local9 = 0; local9 < local7; local9++) { + @Pc(17) int local17 = arg0.charAt(local9); + if (local17 == 60) { + local3 = true; + } else if (local17 == 62) { + local3 = false; + } else if (!local3 && local17 == 32) { + local1++; + } + } + if (local1 > 0) { + spaceWidth = (arg1 - this.getStringWidth(arg0) << 8) / local1; + } + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(Lclient!na;[I[Lclient!na;)I") + public final int splitParagraph(@OriginalArg(0) JagString arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) JagString[] arg2) { + if (arg0 == null) { + return 0; + } + buffer.method3133(0); + @Pc(9) int local9 = 0; + @Pc(11) int local11 = 0; + @Pc(13) int local13 = -1; + @Pc(15) int local15 = 0; + @Pc(17) byte local17 = 0; + @Pc(19) int local19 = -1; + @Pc(21) int local21 = 0; + @Pc(23) int local23 = 0; + @Pc(27) int local27 = arg0.length(); + for (@Pc(29) int local29 = 0; local29 < local27; local29++) { + @Pc(37) int local37 = arg0.charAt(local29); + if (local37 == 60) { + local19 = local29; + } else { + if (local37 == 62 && local19 != -1) { + @Pc(57) JagString local57 = arg0.substring(local29, local19 + 1); + local19 = -1; + buffer.append(60); + buffer.method3113(local57); + buffer.append(62); + if (local57.strEquals(TAG_BR)) { + if (arg2[local23] == null) { + arg2[local23] = buffer.asString().substring(buffer.length(), local11); + } else { + arg2[local23].method3133(0); + arg2[local23].method3122(buffer, local11, buffer.length()); + } + local23++; + local11 = buffer.length(); + local9 = 0; + local13 = -1; + local21 = 0; + } else if (local57.strEquals(TAG_LT)) { + local9 += this.getGlyphWidth(60); + if (this.kerning != null && local21 != 0) { + local9 += this.kerning[(local21 << 8) + 60]; + } + local21 = 60; + } else if (local57.strEquals(TAG_GT)) { + local9 += this.getGlyphWidth(62); + if (this.kerning != null && local21 != 0) { + local9 += this.kerning[(local21 << 8) + 62]; + } + local21 = 62; + } else if (local57.strEquals(TAG_NBSP)) { + local9 += this.getGlyphWidth(160); + if (this.kerning != null && local21 != 0) { + local9 += this.kerning[(local21 << 8) + 160]; + } + local21 = 160; + } else if (local57.strEquals(TAB_SHY)) { + local9 += this.getGlyphWidth(173); + if (this.kerning != null && local21 != 0) { + local9 += this.kerning[(local21 << 8) + 173]; + } + local21 = 173; + } else if (local57.strEquals(TAB_TIMES)) { + local9 += this.getGlyphWidth(215); + if (this.kerning != null && local21 != 0) { + local9 += this.kerning[(local21 << 8) + 215]; + } + local21 = 215; + } else if (local57.strEquals(TAB_EURO)) { + local9 += this.getGlyphWidth(128); + if (this.kerning != null && local21 != 0) { + local9 += this.kerning[(local21 << 8) + 128]; + } + local21 = 128; + } else if (local57.strEquals(TAB_COPY)) { + local9 += this.getGlyphWidth(169); + if (this.kerning != null && local21 != 0) { + local9 += this.kerning[(local21 << 8) + 169]; + } + local21 = 169; + } else if (local57.strEquals(TAG_REG)) { + local9 += this.getGlyphWidth(174); + if (this.kerning != null && local21 != 0) { + local9 += this.kerning[(local21 << 8) + 174]; + } + local21 = 174; + } else if (local57.startsWith(TAG_IMG)) { + try { + @Pc(377) int local377 = local57.substring(4).parseInt(); + local9 += this.nameIcons[local377].innerWidth; + local21 = 0; + } catch (@Pc(389) Exception local389) { + } + } + local37 = 0; + } + if (local19 == -1) { + if (local37 != 0) { + buffer.append(local37); + local9 += this.glyphWidths[local37]; + if (this.kerning != null && local21 != 0) { + local9 += this.kerning[(local21 << 8) + local37]; + } + local21 = local37; + } + if (local37 == 32) { + local13 = buffer.length(); + local15 = local9; + local17 = 1; + } + if (arg1 != null && local9 > arg1[local23 < arg1.length ? local23 : arg1.length - 1] && local13 >= 0) { + if (arg2[local23] == null) { + arg2[local23] = buffer.asString().substring(local13 - local17, local11); + } else { + arg2[local23].method3133(0); + arg2[local23] = arg2[local23].method3122(buffer, local11, local13 - local17); + } + local23++; + local11 = local13; + local13 = -1; + local9 -= local15; + local21 = 0; + } + if (local37 == 45) { + local13 = buffer.length(); + local15 = local9; + local17 = 0; + } + } + } + } + if (buffer.length() > local11) { + if (arg2[local23] == null) { + arg2[local23] = buffer.asString().substring(buffer.length(), local11); + } else { + arg2[local23].method3133(0); + arg2[local23] = arg2[local23].method3122(buffer, local11, buffer.length()); + } + local23++; + } + return local23; + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(Lclient!na;IIIIII)V") + public final void renderShake(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5) { + if (arg0 == null) { + return; + } + this.setColors(arg3, 0); + @Pc(13) double local13 = 7.0D - (double) arg5 / 8.0D; + if (local13 < 0.0D) { + local13 = 0.0D; + } + @Pc(23) int local23 = arg0.length(); + @Pc(26) int[] local26 = new int[local23]; + for (@Pc(28) int local28 = 0; local28 < local23; local28++) { + local26[local28] = (int) (Math.sin((double) local28 / 1.5D + (double) arg4 / 1.0D) * local13); + } + this.renderOffset(arg0, arg1 - this.getStringWidth(arg0) / 2, arg2, null, local26); + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(Lclient!na;IIIIIIIIII)I") + public final int renderParagraphAlpha(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8, @OriginalArg(10) int arg9) { + if (arg0 == null) { + return 0; + } + this.setColors(arg5, arg6, 256); + if (arg9 == 0) { + arg9 = this.lineHeight; + } + @Pc(20) int[] local20 = new int[]{arg3}; + if (arg4 < this.paragraphTopPadding + this.paragraphBottomPadding + arg9 && arg4 < arg9 + arg9) { + local20 = null; + } + @Pc(42) int local42 = this.splitParagraph(arg0, local20, lines); + if (arg8 == 3 && local42 == 1) { + arg8 = 1; + } + @Pc(57) int local57; + @Pc(118) int local118; + if (arg8 == 0) { + local57 = arg2 + this.paragraphTopPadding; + } else if (arg8 == 1) { + local57 = arg2 + this.paragraphTopPadding + (arg4 - this.paragraphTopPadding - this.paragraphBottomPadding - (local42 - 1) * arg9) / 2; + } else if (arg8 == 2) { + local57 = arg2 + arg4 - this.paragraphBottomPadding - (local42 - 1) * arg9; + } else { + local118 = (arg4 - this.paragraphTopPadding - this.paragraphBottomPadding - (local42 - 1) * arg9) / (local42 + 1); + if (local118 < 0) { + local118 = 0; + } + local57 = arg2 + this.paragraphTopPadding + local118; + arg9 += local118; + } + for (local118 = 0; local118 < local42; local118++) { + if (arg7 == 0) { + this.render(lines[local118], arg1, local57); + } else if (arg7 == 1) { + this.render(lines[local118], arg1 + (arg3 - this.getStringWidth(lines[local118])) / 2, local57); + } else if (arg7 == 2) { + this.render(lines[local118], arg1 + arg3 - this.getStringWidth(lines[local118]), local57); + } else if (local118 == local42 - 1) { + this.render(lines[local118], arg1, local57); + } else { + this.justify(lines[local118], arg3); + this.render(lines[local118], arg1, local57); + spaceWidth = 0; + } + local57 += arg9; + } + return local42; + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(Lclient!na;IIIII)V") + public final void renderWave2(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(5) int arg4) { + if (arg0 == null) { + return; + } + this.setColors(arg3, 0); + @Pc(10) int local10 = arg0.length(); + @Pc(13) int[] local13 = new int[local10]; + @Pc(16) int[] local16 = new int[local10]; + for (@Pc(18) int local18 = 0; local18 < local10; local18++) { + local13[local18] = (int) (Math.sin((double) local18 / 5.0D + (double) arg4 / 5.0D) * 5.0D); + local16[local18] = (int) (Math.sin((double) local18 / 3.0D + (double) arg4 / 5.0D) * 5.0D); + } + this.renderOffset(arg0, arg1 - this.getStringWidth(arg0) / 2, arg2, local13, local16); + } + + @OriginalMember(owner = "client!rk", name = "b", descriptor = "(Lclient!na;IIIII)V") + public final void renderWave(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(5) int arg4) { + if (arg0 == null) { + return; + } + this.setColors(arg3, 0); + @Pc(10) int local10 = arg0.length(); + @Pc(13) int[] local13 = new int[local10]; + for (@Pc(15) int local15 = 0; local15 < local10; local15++) { + local13[local15] = (int) (Math.sin((double) local15 / 2.0D + (double) arg4 / 5.0D) * 5.0D); + } + this.renderOffset(arg0, arg1 - this.getStringWidth(arg0) / 2, arg2, null, local13); + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "([Lclient!ok;[I)V") + public final void setNameIcons(@OriginalArg(0) IndexedSprite[] arg0, @OriginalArg(1) int[] arg1) { + if (arg1 != null && arg1.length != arg0.length) { + throw new IllegalArgumentException(); + } + this.nameIcons = arg0; + this.nameIconHeights = arg1; + } + + @OriginalMember(owner = "client!rk", name = "c", descriptor = "(II)V") + private void setColors(@OriginalArg(0) int rgb, @OriginalArg(1) int shadow) { + strikethroughColor = -1; + underlineColor = -1; + shadowColor = shadow; + shadowColorOverride = shadow; + color = rgb; + colorOverride = rgb; + alpha = 256; + alphaOverride = 256; + spaceWidth = 0; + extraSpaceWidth = 0; + } + + @OriginalMember(owner = "client!rk", name = "c", descriptor = "(Lclient!na;IIII)V") + public final void renderCenter(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (arg0 != null) { + this.setColors(arg3, arg4); + this.render(arg0, arg1 - this.getStringWidth(arg0) / 2, arg2); + } + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "([B)V") + private void decode(@OriginalArg(0) byte[] arg0) { + this.glyphWidths = new int[256]; + @Pc(9) int local9; + if (arg0.length == 257) { + for (local9 = 0; local9 < this.glyphWidths.length; local9++) { + this.glyphWidths[local9] = arg0[local9] & 0xFF; + } + this.lineHeight = arg0[256] & 0xFF; + return; + } + local9 = 0; + for (@Pc(37) int local37 = 0; local37 < 256; local37++) { + this.glyphWidths[local37] = arg0[local9++] & 0xFF; + } + @Pc(55) int[] local55 = new int[256]; + @Pc(58) int[] local58 = new int[256]; + @Pc(60) int local60; + for (local60 = 0; local60 < 256; local60++) { + local55[local60] = arg0[local9++] & 0xFF; + } + for (local60 = 0; local60 < 256; local60++) { + local58[local60] = arg0[local9++] & 0xFF; + } + @Pc(93) byte[][] local93 = new byte[256][]; + @Pc(109) int local109; + for (@Pc(95) int local95 = 0; local95 < 256; local95++) { + local93[local95] = new byte[local55[local95]]; + @Pc(107) byte local107 = 0; + for (local109 = 0; local109 < local93[local95].length; local109++) { + local107 += arg0[local9++]; + local93[local95][local109] = local107; + } + } + @Pc(136) byte[][] local136 = new byte[256][]; + @Pc(138) int local138; + for (local138 = 0; local138 < 256; local138++) { + local136[local138] = new byte[local55[local138]]; + @Pc(150) byte local150 = 0; + for (@Pc(152) int local152 = 0; local152 < local136[local138].length; local152++) { + local150 += arg0[local9++]; + local136[local138][local152] = local150; + } + } + this.kerning = new byte[65536]; + for (local138 = 0; local138 < 256; local138++) { + if (local138 != 32 && local138 != 160) { + for (local109 = 0; local109 < 256; local109++) { + if (local109 != 32 && local109 != 160) { + this.kerning[(local138 << 8) + local109] = (byte) method2870(local93, local136, local58, this.glyphWidths, local55, local138, local109); + } + } + } + } + this.lineHeight = local58[32] + local55[32]; + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(III)V") + private void setColors(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + strikethroughColor = -1; + underlineColor = -1; + shadowColor = arg1; + shadowColorOverride = arg1; + color = arg0; + colorOverride = arg0; + alpha = arg2; + alphaOverride = arg2; + spaceWidth = 0; + extraSpaceWidth = 0; + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(Lclient!na;IIIIIIIILjava/util/Random;I[I)I") + public final int method2878(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) Random arg9, @OriginalArg(10) int arg10, @OriginalArg(11) int[] arg11) { + if (arg0 == null) { + return 0; + } + arg9.setSeed(arg10); + this.setColors(arg5, arg6, (arg9.nextInt() & 0x1F) + 192); + @Pc(21) int local21 = arg0.length(); + @Pc(24) int[] local24 = new int[local21]; + @Pc(26) int local26 = 0; + @Pc(28) int local28; + for (local28 = 0; local28 < local21; local28++) { + local24[local28] = local26; + if ((arg9.nextInt() & 0x3) == 0) { + local26++; + } + } + local28 = arg1; + @Pc(50) int local50 = arg2 + this.paragraphTopPadding; + @Pc(52) int local52 = -1; + if (arg8 == 1) { + local50 += (arg4 - this.paragraphTopPadding - this.paragraphBottomPadding) / 2; + } else if (arg8 == 2) { + local50 = arg2 + arg4 - this.paragraphBottomPadding; + } + if (arg7 == 1) { + local52 = this.getStringWidth(arg0) + local26; + local28 = arg1 + (arg3 - local52) / 2; + } else if (arg7 == 2) { + local52 = this.getStringWidth(arg0) + local26; + local28 = arg1 + arg3 - local52; + } + this.renderOffset(arg0, local28, local50, local24, null); + if (arg11 != null) { + if (local52 == -1) { + local52 = this.getStringWidth(arg0) + local26; + } + arg11[0] = local28; + arg11[1] = local50 - this.paragraphTopPadding; + arg11[2] = local52; + arg11[3] = this.paragraphTopPadding + this.paragraphBottomPadding; + } + return local26; + } + + @OriginalMember(owner = "client!rk", name = "a", descriptor = "(Lclient!na;II[I[I)V") + private void renderOffset(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int[] arg3, @OriginalArg(4) int[] arg4) { + @Pc(4) int local4 = arg2 - this.lineHeight; + @Pc(6) int local6 = -1; + @Pc(8) int local8 = 0; + @Pc(10) int local10 = 0; + @Pc(14) int local14 = arg0.length(); + for (@Pc(16) int local16 = 0; local16 < local14; local16++) { + @Pc(24) int local24 = arg0.charAt(local16); + if (local24 == 60) { + local6 = local16; + } else { + @Pc(121) int local121; + @Pc(130) int local130; + @Pc(141) int local141; + if (local24 == 62 && local6 != -1) { + @Pc(44) JagString local44 = arg0.substring(local16, local6 + 1); + local6 = -1; + if (local44.strEquals(TAG_LT)) { + local24 = 60; + } else if (local44.strEquals(TAG_GT)) { + local24 = 62; + } else if (local44.strEquals(TAG_NBSP)) { + local24 = 160; + } else if (local44.strEquals(TAB_SHY)) { + local24 = 173; + } else if (local44.strEquals(TAB_TIMES)) { + local24 = 215; + } else if (local44.strEquals(TAB_EURO)) { + local24 = 128; + } else if (local44.strEquals(TAB_COPY)) { + local24 = 169; + } else { + if (!local44.strEquals(TAG_REG)) { + if (local44.startsWith(TAG_IMG)) { + try { + if (arg3 == null) { + local121 = 0; + } else { + local121 = arg3[local10]; + } + if (arg4 == null) { + local130 = 0; + } else { + local130 = arg4[local10]; + } + local10++; + local141 = local44.substring(4).parseInt(); + @Pc(146) IndexedSprite local146 = this.nameIcons[local141]; + @Pc(157) int local157 = this.nameIconHeights == null ? local146.innerHeight : this.nameIconHeights[local141]; + if (alphaOverride == 256) { + local146.renderTransparent(arg1 + local121, local4 + this.lineHeight - local157 + local130); + } else { + local146.method3335(arg1 + local121, local4 + this.lineHeight - local157 + local130, alphaOverride); + } + arg1 += local146.innerWidth; + local8 = 0; + } catch (@Pc(197) Exception local197) { + } + } else { + this.parseTag(local44); + } + continue; + } + local24 = 174; + } + } + if (local6 == -1) { + if (this.kerning != null && local8 != 0) { + arg1 += this.kerning[(local8 << 8) + local24]; + } + @Pc(226) int local226 = this.spriteInnerWidths[local24]; + local121 = this.spriteInnerHeights[local24]; + if (arg3 == null) { + local130 = 0; + } else { + local130 = arg3[local10]; + } + if (arg4 == null) { + local141 = 0; + } else { + local141 = arg4[local10]; + } + local10++; + if (local24 == 32) { + if (spaceWidth > 0) { + extraSpaceWidth += spaceWidth; + arg1 += extraSpaceWidth >> 8; + extraSpaceWidth &= 0xFF; + } + } else if (alphaOverride == 256) { + if (shadowColorOverride != -1) { + this.renderGlyph(local24, arg1 + this.spriteXOffsets[local24] + local130 + 1, local4 + this.spriteYOffsets[local24] + 1 + local141, local226, local121, shadowColorOverride); + } + this.renderGlyph(local24, arg1 + this.spriteXOffsets[local24] + local130, local4 + this.spriteYOffsets[local24] + local141, local226, local121, colorOverride); + } else { + if (shadowColorOverride != -1) { + this.renderGlyphTransparent(local24, arg1 + this.spriteXOffsets[local24] + local130 + 1, local4 + this.spriteYOffsets[local24] + 1 + local141, local226, local121, shadowColorOverride, alphaOverride); + } + this.renderGlyphTransparent(local24, arg1 + this.spriteXOffsets[local24] + local130, local4 + this.spriteYOffsets[local24] + local141, local226, local121, colorOverride, alphaOverride); + } + @Pc(387) int local387 = this.glyphWidths[local24]; + if (strikethroughColor != -1) { + if (GlRenderer.enabled) { + GlRaster.drawHorizontalLine(arg1, local4 + (int) ((double) this.lineHeight * 0.7D), local387, strikethroughColor); + } else { + SoftwareRaster.drawHorizontalLine(arg1, local4 + (int) ((double) this.lineHeight * 0.7D), local387, strikethroughColor); + } + } + if (underlineColor != -1) { + if (GlRenderer.enabled) { + GlRaster.drawHorizontalLine(arg1, local4 + this.lineHeight, local387, underlineColor); + } else { + SoftwareRaster.drawHorizontalLine(arg1, local4 + this.lineHeight, local387, underlineColor); + } + } + arg1 += local387; + local8 = local24; + } + } + } + } +} diff --git a/client/src/main/java/rt4/FontMetricsList.java b/client/src/main/java/rt4/FontMetricsList.java new file mode 100644 index 0000000..30828a7 --- /dev/null +++ b/client/src/main/java/rt4/FontMetricsList.java @@ -0,0 +1,23 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class FontMetricsList { + @OriginalMember(owner = "client!l", name = "f", descriptor = "Lclient!n;") + public static final SoftLruHashTable fontMetrics = new SoftLruHashTable(4); + + @OriginalMember(owner = "client!li", name = "a", descriptor = "(II)Lclient!dd;") + public static SoftwareFont get(@OriginalArg(1) int arg0) { + @Pc(16) SoftwareFont local16 = (SoftwareFont) fontMetrics.get(arg0); + if (local16 != null) { + return local16; + } + @Pc(26) byte[] local26 = client.js5Archive13.fetchFile(arg0, 0); + local16 = new SoftwareFont(local26); + local16.setNameIcons(Sprites.nameIcons, null); + fontMetrics.put(local16, arg0); + return local16; + } +} diff --git a/client/src/main/java/rt4/Fonts.java b/client/src/main/java/rt4/Fonts.java new file mode 100644 index 0000000..d4297ed --- /dev/null +++ b/client/src/main/java/rt4/Fonts.java @@ -0,0 +1,86 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.*; + +public class Fonts { + @OriginalMember(owner = "client!j", name = "x", descriptor = "Lclient!rk;") + public static Font p11Full; + @OriginalMember(owner = "client!rh", name = "h", descriptor = "Lclient!rk;") + public static Font p12Full; + @OriginalMember(owner = "client!wl", name = "q", descriptor = "Lclient!rk;") + public static Font b12Full; + @OriginalMember(owner = "client!vj", name = "j", descriptor = "Lclient!dd;") + public static SoftwareFont p11FullSoftware; + + @OriginalMember(owner = "client!fn", name = "a", descriptor = "(Lclient!ve;Lclient!ve;Z)I") + public static int getReady(@OriginalArg(0) Js5 arg0, @OriginalArg(1) Js5 arg1) { + @Pc(5) int ready = 0; + if (arg0.isFileReady(Sprites.p11FullId)) { + ready++; + } + if (arg0.isFileReady(Sprites.p12FullId)) { + ready++; + } + if (arg0.isFileReady(Sprites.b12FullId)) { + ready++; + } + if (arg1.isFileReady(Sprites.p11FullId)) { + ready++; + } + if (arg1.isFileReady(Sprites.p12FullId)) { + ready++; + } + if (arg1.isFileReady(Sprites.b12FullId)) { + ready++; + } + return ready; + } + + @OriginalMember(owner = "client!ld", name = "a", descriptor = "(B)I") + public static int getTotal() { + return 6; + } + + @OriginalMember(owner = "client!hn", name = "a", descriptor = "(Lclient!ve;ILclient!ve;)V") + public static void load(@OriginalArg(0) Js5 arg0, @OriginalArg(2) Js5 arg1) { + p11Full = Font.method2462(Sprites.p11FullId, arg1, arg0); + if (GlRenderer.enabled) { + p11FullSoftware = SoftwareFont.method2412(Sprites.p11FullId, arg0, arg1); + } else { + p11FullSoftware = (SoftwareFont) p11Full; + } + p12Full = Font.method2462(Sprites.p12FullId, arg1, arg0); + b12Full = Font.method2462(Sprites.b12FullId, arg1, arg0); + } + + @OriginalMember(owner = "client!j", name = "a", descriptor = "(BZLclient!na;)V") + public static void drawTextOnScreen(@OriginalArg(1) boolean arg0, @OriginalArg(2) JagString arg1) { + @Pc(24) int local24 = p12Full.getMaxLineWidth(arg1, 250); + @Pc(31) int local31 = p12Full.getParagraphLineCount(arg1, 250) * 13; + if (GlRenderer.enabled) { + GlRaster.fillRect(6, 6, local24 + 4 + 4, local31 + 8, 0); + GlRaster.drawRect(6, 6, local24 + 4 + 4, local31 + 4 + 4, 16777215); + } else { + SoftwareRaster.fillRect(6, 6, local24 + 4 + 4, local31 + 8, 0); + SoftwareRaster.drawRect(6, 6, local24 + 8, 4 + 4 + local31, 16777215); + } + p12Full.drawInterfaceText(arg1, 10, 10, local24, local31, 16777215, -1, 1, 1, 0); + InterfaceList.redrawScreen(6, local24 + 8, 6, local31 + 4 + 4); + if (!arg0) { + InterfaceList.forceRedrawScreen(10, 10, local31, local24); + } else if (GlRenderer.enabled) { + GlRenderer.swapBuffers(); + } else { + try { + @Pc(159) Graphics local159 = GameShell.canvas.getGraphics(); + SoftwareRaster.frameBuffer.draw(local159); + } catch (@Pc(167) Exception local167) { + GameShell.canvas.repaint(); + } + } + } +} diff --git a/client/src/main/java/rt4/FrameBuffer.java b/client/src/main/java/rt4/FrameBuffer.java new file mode 100644 index 0000000..f641434 --- /dev/null +++ b/client/src/main/java/rt4/FrameBuffer.java @@ -0,0 +1,52 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.Component; +import java.awt.*; + +@OriginalClass("client!vk") +public abstract class FrameBuffer { + + @OriginalMember(owner = "client!vk", name = "e", descriptor = "[I") + public int[] pixels; + + @OriginalMember(owner = "client!vk", name = "g", descriptor = "Ljava/awt/Image;") + protected Image image; + + @OriginalMember(owner = "client!vk", name = "i", descriptor = "I") + protected int height; + + @OriginalMember(owner = "client!vk", name = "k", descriptor = "I") + protected int width; + + @OriginalMember(owner = "client!kd", name = "a", descriptor = "(IIZLjava/awt/Component;)Lclient!vk;") + public static FrameBuffer create(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) Component arg2) { + try { + @Pc(16) FrameBuffer local16 = new BufferedImageFrameBuffer(); + local16.init(arg0, arg1, arg2); + return local16; + } catch (@Pc(25) Throwable local25) { + @Pc(29) ImageProducerFrameBuffer local29 = new ImageProducerFrameBuffer(); + local29.init(arg0, arg1, arg2); + return local29; + } + } + + @OriginalMember(owner = "client!vk", name = "a", descriptor = "(IILjava/awt/Graphics;I)V") + public abstract void draw(@OriginalArg(2) Graphics graphics); + + @OriginalMember(owner = "client!vk", name = "a", descriptor = "(I)V") + public final void makeTarget() { + SoftwareRaster.setSize(this.pixels, this.width, this.height); + } + + @OriginalMember(owner = "client!vk", name = "a", descriptor = "(IIIILjava/awt/Graphics;I)V") + public abstract void drawAt(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) Graphics graphics, @OriginalArg(5) int arg4); + + @OriginalMember(owner = "client!vk", name = "a", descriptor = "(IZILjava/awt/Component;)V") + public abstract void init(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) Component component); +} diff --git a/client/src/main/java/rt4/FriendsList.java b/client/src/main/java/rt4/FriendsList.java new file mode 100644 index 0000000..5fac235 --- /dev/null +++ b/client/src/main/java/rt4/FriendsList.java @@ -0,0 +1,122 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class FriendsList { + @OriginalMember(owner = "client!hd", name = "g", descriptor = "[J") + public static final long[] encodedUsernames = new long[200]; + @OriginalMember(owner = "client!rg", name = "r", descriptor = "[Lclient!na;") + public static final JagString[] worldNames = new JagString[200]; + @OriginalMember(owner = "client!ic", name = "l", descriptor = "[I") + public static final int[] ranks = new int[200]; + @OriginalMember(owner = "client!ia", name = "d", descriptor = "[I") + public static final int[] worlds = new int[200]; + @OriginalMember(owner = "client!jh", name = "b", descriptor = "[Lclient!na;") + public static final JagString[] usernames = new JagString[200]; + @OriginalMember(owner = "client!ab", name = "c", descriptor = "[Z") + public static final boolean[] sameGame = new boolean[200]; + @OriginalMember(owner = "client!p", name = "d", descriptor = "I") + public static int transmitAt = 0; + @OriginalMember(owner = "client!nc", name = "m", descriptor = "I") + public static int state = 0; + @OriginalMember(owner = "client!al", name = "m", descriptor = "I") + public static int size = 0; + + @OriginalMember(owner = "client!hj", name = "a", descriptor = "(Lclient!na;B)Z") + public static boolean contains(@OriginalArg(0) JagString arg0) { + if (arg0 == null) { + return false; + } + for (@Pc(12) int local12 = 0; local12 < size; local12++) { + if (arg0.equalsIgnoreCase(usernames[local12])) { + return true; + } + } + return arg0.equalsIgnoreCase(PlayerList.self.username); + } + + @OriginalMember(owner = "client!fb", name = "a", descriptor = "(JB)V") + public static void add(@OriginalArg(0) long arg0) { + if (arg0 == 0L) { + return; + } + if (size >= 100 && !LoginManager.playerMember || size >= 200) { + Chat.add(JagString.EMPTY, 0, LocalizedText.FRIENDLISTFULL); + return; + } + @Pc(35) JagString local35 = Base37.decode37(arg0).toTitleCase(); + @Pc(42) int local42; + for (local42 = 0; local42 < size; local42++) { + if (encodedUsernames[local42] == arg0) { + Chat.add(JagString.EMPTY, 0, JagString.concatenate(new JagString[]{local35, LocalizedText.FRIENDLISTDUPE})); + return; + } + } + for (local42 = 0; local42 < IgnoreList.size; local42++) { + if (arg0 == IgnoreList.encodedUsernames[local42]) { + Chat.add(JagString.EMPTY, 0, JagString.concatenate(new JagString[]{LocalizedText.REMOVESOCIAL1, local35, LocalizedText.REMOVEIGNORE})); + return; + } + } + if (local35.strEquals(PlayerList.self.username)) { + Chat.add(JagString.EMPTY, 0, LocalizedText.FRIENDCANTADDSELF); + return; + } + usernames[size] = local35; + encodedUsernames[size] = arg0; + worlds[size] = 0; + worldNames[size] = JagString.EMPTY; + ranks[size] = 0; + sameGame[size] = false; + size++; + transmitAt = InterfaceList.transmitTimer; + Protocol.outboundBuffer.p1isaac(ClientProt.FRIENDLIST_ADD); + Protocol.outboundBuffer.p8(arg0); + } + + @OriginalMember(owner = "client!pi", name = "a", descriptor = "(JI)V") + public static void remove(@OriginalArg(0) long arg0) { + if (arg0 == 0L) { + return; + } + for (@Pc(13) int local13 = 0; local13 < size; local13++) { + if (encodedUsernames[local13] == arg0) { + size--; + for (@Pc(41) int local41 = local13; local41 < size; local41++) { + usernames[local41] = usernames[local41 + 1]; + worlds[local41] = worlds[local41 + 1]; + worldNames[local41] = worldNames[local41 + 1]; + encodedUsernames[local41] = encodedUsernames[local41 + 1]; + ranks[local41] = ranks[local41 + 1]; + sameGame[local41] = sameGame[local41 + 1]; + } + transmitAt = InterfaceList.transmitTimer; + Protocol.outboundBuffer.p1isaac(ClientProt.FRIENDLIST_DEL); + Protocol.outboundBuffer.p8(arg0); + break; + } + } + } + + @OriginalMember(owner = "client!ni", name = "a", descriptor = "(ILclient!na;I)V") + public static void setRank(@OriginalArg(1) JagString arg0, @OriginalArg(2) int arg1) { + Protocol.outboundBuffer.p1isaac(ClientProt.FRIEND_SETRANK); + Protocol.outboundBuffer.p1add(arg1); + Protocol.outboundBuffer.p8(arg0.encode37()); + } + + @OriginalMember(owner = "client!ac", name = "a", descriptor = "(Lclient!na;I)I") + public static int indexOf(@OriginalArg(0) JagString arg0) { + if (arg0 == null) { + return -1; + } + for (@Pc(20) int local20 = 0; local20 < size; local20++) { + if (arg0.equalsIgnoreCase(usernames[local20])) { + return local20; + } + } + return -1; + } +} diff --git a/client/src/main/java/rt4/GameCanvas.java b/client/src/main/java/rt4/GameCanvas.java new file mode 100644 index 0000000..76eda48 --- /dev/null +++ b/client/src/main/java/rt4/GameCanvas.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +import java.awt.Component; +import java.awt.*; + +@OriginalClass("client!tm") +public final class GameCanvas extends Canvas { + + @OriginalMember(owner = "client!tm", name = "m", descriptor = "Ljava/awt/Component;") + private final Component component; + + @OriginalMember(owner = "client!tm", name = "", descriptor = "(Ljava/awt/Component;)V") + public GameCanvas(@OriginalArg(0) Component component) { + this.component = component; + } + + @OriginalMember(owner = "client!tm", name = "update", descriptor = "(Ljava/awt/Graphics;)V") + @Override + public final void update(@OriginalArg(0) Graphics graphics) { + this.component.update(graphics); + } + + @OriginalMember(owner = "client!tm", name = "paint", descriptor = "(Ljava/awt/Graphics;)V") + @Override + public final void paint(@OriginalArg(0) Graphics graphics) { + this.component.paint(graphics); + } +} diff --git a/client/src/main/java/rt4/GameShell.java b/client/src/main/java/rt4/GameShell.java new file mode 100644 index 0000000..5c7da64 --- /dev/null +++ b/client/src/main/java/rt4/GameShell.java @@ -0,0 +1,796 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.applet.Applet; +import java.applet.AppletContext; +import java.awt.*; +import java.awt.event.*; +import java.lang.reflect.Method; +import java.net.URL; + +@OriginalClass("client!rc") +public abstract class GameShell extends Applet implements Runnable, FocusListener, WindowListener { + + @OriginalMember(owner = "client!sh", name = "l", descriptor = "[J") + public static final long[] logicTimes = new long[32]; + + @OriginalMember(owner = "client!ah", name = "k", descriptor = "[J") + public static final long[] redrawTimes = new long[32]; + + @OriginalMember(owner = "client!fk", name = "l", descriptor = "Lsignlink!ll;") + public static SignLink signLink; + + @OriginalMember(owner = "client!d", name = "Y", descriptor = "Ljava/awt/Frame;") + public static Frame frame; + + @OriginalMember(owner = "client!t", name = "m", descriptor = "Z") + public static volatile boolean focusIn = true; + + @OriginalMember(owner = "client!fh", name = "P", descriptor = "Z") + public static volatile boolean fullRedraw = true; + + @OriginalMember(owner = "client!md", name = "L", descriptor = "Ljava/awt/Canvas;") + public static Canvas canvas; + + @OriginalMember(owner = "client!fh", name = "Y", descriptor = "Ljava/awt/Frame;") + public static Frame fullScreenFrame; + + @OriginalMember(owner = "client!dl", name = "d", descriptor = "I") + public static int canvasWidth; + + @OriginalMember(owner = "client!uj", name = "B", descriptor = "I") + public static int canvasHeight; + + @OriginalMember(owner = "client!lf", name = "f", descriptor = "I") + public static int leftMargin = 0; + + @OriginalMember(owner = "client!od", name = "e", descriptor = "I") + public static int topMargin = 0; + + @OriginalMember(owner = "client!ca", name = "ab", descriptor = "Z") + public static boolean focus; + + @OriginalMember(owner = "client!cl", name = "bb", descriptor = "Z") + public static volatile boolean replaceCanvas = false; + + @OriginalMember(owner = "client!tk", name = "c", descriptor = "J") + public static volatile long lastCanvasReplace = 0L; + + @OriginalMember(owner = "client!sj", name = "F", descriptor = "Lclient!rc;") + public static GameShell instance = null; + + @OriginalMember(owner = "client!eh", name = "a", descriptor = "Z") + public static boolean shutdown = false; + + @OriginalMember(owner = "client!ve", name = "F", descriptor = "I") + public static int logicTimePointer; + + @OriginalMember(owner = "client!jh", name = "c", descriptor = "I") + public static int frameHeight; + + @OriginalMember(owner = "client!kd", name = "pb", descriptor = "I") + public static int clientBuild; + + @OriginalMember(owner = "client!fl", name = "U", descriptor = "I") + public static int frameWidth; + + @OriginalMember(owner = "client!tc", name = "f", descriptor = "Z") + public static boolean isJava5OrLater = false; + + @OriginalMember(owner = "client!sf", name = "d", descriptor = "I") + public static int minimumDelay = 1; + + @OriginalMember(owner = "client!ba", name = "B", descriptor = "I") + public static double VARIABLE_RENDER_RATE = 20.0d; + public static long VARIABLE_RENDER_RATE_NS = (long) (VARIABLE_RENDER_RATE * 1_000_000.0d); + + public static final double FIXED_UPDATE_RATE = 20.0d; + public static final long FIXED_UPDATE_RATE_NS = (long) (FIXED_UPDATE_RATE * 1_000_000.0d); + + @OriginalMember(owner = "client!cm", name = "b", descriptor = "Ljava/lang/Thread;") + public static Thread thread; + + @OriginalMember(owner = "client!fl", name = "w", descriptor = "J") + public static long killTime = 0L; + + @OriginalMember(owner = "client!da", name = "M", descriptor = "Z") + public static boolean openWindowJavaScript; + + @OriginalMember(owner = "client!fi", name = "l", descriptor = "I") + public static int instances = 0; + + @OriginalMember(owner = "client!qe", name = "v", descriptor = "Lclient!s;") + public static Timer timer; + + @OriginalMember(owner = "client!sg", name = "p", descriptor = "I") + public static int logicCycles; + + @OriginalMember(owner = "client!ii", name = "i", descriptor = "I") + public static int redrawTimePointer; + + @OriginalMember(owner = "client!ol", name = "fb", descriptor = "I") + public static int partialRedraws = 500; + + @OriginalMember(owner = "client!tk", name = "v", descriptor = "I") + public static double framesPerSecond = 0; + + @OriginalMember(owner = "client!te", name = "C", descriptor = "I") + public static int maxMemory = 64; + @OriginalMember(owner = "client!fh", name = "cb", descriptor = "Lsignlink!ll;") + public static SignLink signLink2; + + @OriginalMember(owner = "client!rc", name = "b", descriptor = "Z") + private boolean error = false; + + public static double canvasScale = 1.0d; + + public static double subpixelX = 0.5d; + + public static double subpixelY = 0.5d; + + public static long updateDelta = 0; + + public static long renderDelta = 0; + + @OriginalMember(owner = "client!rc", name = "providesignlink", descriptor = "(Lsignlink!ll;)V") + public static void providesignlink(@OriginalArg(0) SignLink signLink) { + GameShell.signLink = signLink; + signLink2 = signLink; + } + + @OriginalMember(owner = "client!sd", name = "e", descriptor = "(I)V") + public static void getMaxMemory() { + maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1048576L) + 1; + } + + @OriginalMember(owner = "client!la", name = "a", descriptor = "(Lsignlink!ll;Ljava/lang/Object;I)V") + public static void flush(@OriginalArg(0) SignLink signLink, @OriginalArg(1) Object source) { + if (signLink.eventQueue == null) { + return; + } + + for (@Pc(19) int i = 0; i < 50 && signLink.eventQueue.peekEvent() != null; i++) { + ThreadUtils.sleep(1L); + } + if (source != null) { + signLink.eventQueue.postEvent(new ActionEvent(source, 1001, "dummy")); + } + } + + @OriginalMember(owner = "client!ta", name = "a", descriptor = "(Z)V") + public static void resetTimer() { + timer.reset(); + @Pc(10) int local10; + for (local10 = 0; local10 < 32; local10++) { + redrawTimes[local10] = 0L; + } + for (local10 = 0; local10 < 32; local10++) { + logicTimes[local10] = 0L; + } + logicCycles = 0; + } + + @OriginalMember(owner = "client!ja", name = "a", descriptor = "(II)V") + public static void setFpsTarget(@OriginalArg(0) int fps) { + VARIABLE_RENDER_RATE = 1000.0d / (double) fps; + VARIABLE_RENDER_RATE_NS = (int) (VARIABLE_RENDER_RATE * 1_000_000.0d); + } + + @OriginalMember(owner = "client!qh", name = "a", descriptor = "(Z)V") + public static void method3662() { + @Pc(8) Container local8; + if (fullScreenFrame != null) { + local8 = fullScreenFrame; + } else if (frame == null) { + local8 = signLink.applet; + } else { + local8 = frame; + } + frameWidth = local8.getSize().width; + frameHeight = local8.getSize().height; + @Pc(35) Insets local35; + if (local8 == frame) { + local35 = frame.getInsets(); + frameHeight -= local35.bottom + local35.top; + frameWidth -= local35.right + local35.left; + } + if (DisplayMode.getWindowMode() >= 2) { + canvasWidth = frameWidth; + leftMargin = 0; + topMargin = 0; + canvasHeight = frameHeight; + } else { + topMargin = 0; + leftMargin = (frameWidth - 765) / 2; + canvasHeight = 503; + canvasWidth = 765; + } + if (GlRenderer.enabled) { + GlRenderer.setCanvasSize(canvasWidth, canvasHeight); + } + canvas.setSize(canvasWidth, canvasHeight); + if (local8 == frame) { + local35 = frame.getInsets(); + canvas.setLocation(local35.left + leftMargin, topMargin + local35.top); + } else { + canvas.setLocation(leftMargin, topMargin); + } + if (InterfaceList.topLevelInterface != -1) { + InterfaceList.method3712(true); + } + method2704(); + } + + @OriginalMember(owner = "client!l", name = "b", descriptor = "(I)V") + public static void method2704() { + @Pc(7) int local7 = topMargin; + @Pc(9) int local9 = leftMargin; + @Pc(16) int local16 = frameHeight - canvasHeight - local7; + @Pc(23) int local23 = frameWidth - local9 - canvasWidth; + if (local9 <= 0 && local23 <= 0 && local7 <= 0 && local16 <= 0) { + return; + } + try { + @Pc(46) Container local46; + if (fullScreenFrame != null) { + local46 = fullScreenFrame; + } else if (frame == null) { + local46 = signLink.applet; + } else { + local46 = frame; + } + @Pc(59) int local59 = 0; + @Pc(61) int local61 = 0; + if (frame == local46) { + @Pc(68) Insets local68 = frame.getInsets(); + local61 = local68.left; + local59 = local68.top; + } + @Pc(77) Graphics local77 = local46.getGraphics(); + local77.setColor(Color.black); + if (local9 > 0) { + local77.fillRect(local61, local59, local9, frameHeight); + } + if (local7 > 0) { + local77.fillRect(local61, local59, frameWidth, local7); + } + if (local23 > 0) { + local77.fillRect(local61 + frameWidth - local23, local59, local23, frameHeight); + } + if (local16 > 0) { + local77.fillRect(local61, local59 + frameHeight - local16, frameWidth, local16); + } + } catch (@Pc(132) Exception local132) { + } + } + + @OriginalMember(owner = "client!rc", name = "focusLost", descriptor = "(Ljava/awt/event/FocusEvent;)V") + @Override + public final void focusLost(@OriginalArg(0) FocusEvent event) { + focusIn = false; + } + + @OriginalMember(owner = "client!rc", name = "a", descriptor = "(B)V") + protected abstract void mainLoop(); + + @OriginalMember(owner = "client!rc", name = "windowClosing", descriptor = "(Ljava/awt/event/WindowEvent;)V") + @Override + public final void windowClosing(@OriginalArg(0) WindowEvent event) { + this.destroy(); + } + + @OriginalMember(owner = "client!rc", name = "windowIconified", descriptor = "(Ljava/awt/event/WindowEvent;)V") + @Override + public final void windowIconified(@OriginalArg(0) WindowEvent event) { + } + + @OriginalMember(owner = "client!rc", name = "windowDeactivated", descriptor = "(Ljava/awt/event/WindowEvent;)V") + @Override + public final void windowDeactivated(@OriginalArg(0) WindowEvent event) { + } + + @OriginalMember(owner = "client!rc", name = "getAppletContext", descriptor = "()Ljava/applet/AppletContext;") + @Override + public final AppletContext getAppletContext() { + if (frame == null) { + return signLink == null || signLink.applet == this ? super.getAppletContext() : signLink.applet.getAppletContext(); + } else { + return null; + } + } + + @OriginalMember(owner = "client!rc", name = "focusGained", descriptor = "(Ljava/awt/event/FocusEvent;)V") + @Override + public final void focusGained(@OriginalArg(0) FocusEvent event) { + focusIn = true; + fullRedraw = true; + } + + @OriginalMember(owner = "client!rc", name = "windowClosed", descriptor = "(Ljava/awt/event/WindowEvent;)V") + @Override + public final void windowClosed(@OriginalArg(0) WindowEvent event) { + } + + @OriginalMember(owner = "client!rc", name = "b", descriptor = "(I)Z") + protected final boolean isHostnameValid() { + return true; + } + + @OriginalMember(owner = "client!rc", name = "b", descriptor = "(B)V") + public final synchronized void addCanvas() { + if (canvas != null) { + canvas.removeFocusListener(this); + canvas.getParent().remove(canvas); + } + @Pc(19) Container container; + if (fullScreenFrame != null) { + container = fullScreenFrame; + } else if (frame == null) { + container = signLink.applet; + } else { + container = frame; + } + container.setLayout(null); + canvas = new GameCanvas(this); + container.add(canvas); + canvas.setSize(canvasWidth, canvasHeight); + canvas.setVisible(true); + if (container == frame) { + @Pc(66) Insets insets = frame.getInsets(); + canvas.setLocation(leftMargin + insets.left, insets.top + topMargin); + } else { + canvas.setLocation(leftMargin, topMargin); + } + canvas.addFocusListener(this); + canvas.requestFocus(); + focusIn = true; + fullRedraw = true; + focus = true; + replaceCanvas = false; + lastCanvasReplace = MonotonicClock.currentTimeMillis(); + } + + @OriginalMember(owner = "client!rc", name = "destroy", descriptor = "()V") + @Override + public final void destroy() { + if (instance == this && !shutdown) { + killTime = MonotonicClock.currentTimeMillis(); + ThreadUtils.sleep(5000L); + signLink2 = null; + this.shutdown(false); + } + } + + @OriginalMember(owner = "client!rc", name = "update", descriptor = "(Ljava/awt/Graphics;)V") + @Override + public final void update(@OriginalArg(0) Graphics graphics) { + this.paint(graphics); + } + + @OriginalMember(owner = "client!rc", name = "a", descriptor = "(Ljava/lang/String;I)V") + protected final void error(@OriginalArg(0) String error) { + if (this.error) { + return; + } + this.error = true; + System.out.println("error_game_" + error); + try { + this.getAppletContext().showDocument(new URL(this.getCodeBase(), "error_game_" + error + ".ws"), "_top"); + } catch (@Pc(47) Exception ex) { + } + } + + @OriginalMember(owner = "client!rc", name = "c", descriptor = "(B)V") + protected abstract void mainQuit(); + + @OriginalMember(owner = "client!rc", name = "c", descriptor = "(I)V") + protected abstract void reset(); + + @OriginalMember(owner = "client!rc", name = "getDocumentBase", descriptor = "()Ljava/net/URL;") + @Override + public final URL getDocumentBase() { + if (frame == null) { + return signLink == null || signLink.applet == this ? super.getDocumentBase() : signLink.applet.getDocumentBase(); + } else { + return null; + } + } + + @OriginalMember(owner = "client!rc", name = "paint", descriptor = "(Ljava/awt/Graphics;)V") + @Override + public final synchronized void paint(@OriginalArg(0) Graphics graphics) { + if (instance != this || shutdown) { + return; + } + fullRedraw = true; + if (isJava5OrLater && !GlRenderer.enabled && MonotonicClock.currentTimeMillis() - lastCanvasReplace > 1000L) { + @Pc(29) Rectangle clipBounds = graphics.getClipBounds(); + if (clipBounds == null || clipBounds.width >= frameWidth && frameHeight <= clipBounds.height) { + replaceCanvas = true; + } + } + } + + @OriginalMember(owner = "client!rc", name = "windowDeiconified", descriptor = "(Ljava/awt/event/WindowEvent;)V") + @Override + public final void windowDeiconified(@OriginalArg(0) WindowEvent event) { + } + + @OriginalMember(owner = "client!rc", name = "a", descriptor = "(IZ)V") + private void shutdown(@OriginalArg(1) boolean clean) { + synchronized (this) { + if (shutdown) { + return; + } + shutdown = true; + } + if (signLink.applet != null) { + signLink.applet.destroy(); + } + try { + this.mainQuit(); + } catch (@Pc(34) Exception ex) { + } + if (canvas != null) { + try { + canvas.removeFocusListener(this); + canvas.getParent().remove(canvas); + } catch (@Pc(45) Exception ex) { + } + } + if (signLink != null) { + try { + signLink.stop(); + } catch (@Pc(53) Exception ex) { + } + } + this.reset(); + if (frame != null) { + try { + System.exit(0); + } catch (@Pc(77) Throwable ex) { + } + } + System.out.println("Shutdown complete - clean:" + clean); + } + + @OriginalMember(owner = "client!rc", name = "windowActivated", descriptor = "(Ljava/awt/event/WindowEvent;)V") + @Override + public final void windowActivated(@OriginalArg(0) WindowEvent event) { + } + + @OriginalMember(owner = "client!rc", name = "b", descriptor = "(Z)V") + private void mainLoopWrapper() { + synchronized (this) { + focus = focusIn; + } + setWindowTitle(); + this.mainLoop(); + } + + public static GraphicsDevice getCurrentDevice() { + GraphicsConfiguration config = frame.getGraphicsConfiguration(); + GraphicsDevice myScreen = config.getDevice(); + GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice[] allScreens = env.getScreenDevices(); + for (int i = 0; i < allScreens.length; i++) { + if (allScreens[i].equals(myScreen)) { + return allScreens[i]; + } + } + return null; + } + + long lastFpsUpdate = 0; + double[] lastFps = new double[5]; + int lastFpsIndex = 0; + + @OriginalMember(owner = "client!rc", name = "e", descriptor = "(I)V") + private void mainRedrawWrapper() { + long now = System.currentTimeMillis(); + if (now - lastFpsUpdate > 1000) { + lastFps[lastFpsIndex++] = 1_000_000_000.0d / (double) renderDelta; + double total = 0.0d; + for (int i = 0; i < lastFps.length; ++i) { + total += lastFps[i]; + } + if (lastFpsIndex >= 5) { + lastFpsIndex = 0; + } + framesPerSecond = Math.ceil(total / 5); + lastFpsUpdate = now; + } + + if (partialRedraws++ > 50) { + fullRedraw = true; + partialRedraws -= 50; + canvas.setSize(canvasWidth, canvasHeight); + canvas.setVisible(true); + canvasScale = getCurrentDevice().getDefaultConfiguration().getDefaultTransform().getScaleX(); + if (frame != null && fullScreenFrame == null) { + @Pc(84) Insets insets = frame.getInsets(); + canvas.setLocation(insets.left + leftMargin, topMargin + insets.top); + } else { + canvas.setLocation(leftMargin, topMargin); + } + } + this.mainRedraw(); + } + + @OriginalMember(owner = "client!rc", name = "f", descriptor = "(I)V") + protected abstract void mainRedraw(); + + @OriginalMember(owner = "client!rc", name = "getCodeBase", descriptor = "()Ljava/net/URL;") + @Override + public final URL getCodeBase() { + if (frame == null) { + return signLink == null || signLink.applet == this ? super.getCodeBase() : signLink.applet.getCodeBase(); + } else { + return null; + } + } + + public double calcUpdateDelta(double value) { + return value / 1_000_000_000.0d * (double) updateDelta * value; + } + + public double calcRenderDelta(double value) { + return value / 1_000_000_000.0d * (double) renderDelta * value; + } + + public void mainInputLoop() { + if (Keyboard.pressedKeys[Keyboard.KEY_UP] || Keyboard.pressedKeys[Keyboard.KEY_DOWN] || Keyboard.pressedKeys[Keyboard.KEY_LEFT] || Keyboard.pressedKeys[Keyboard.KEY_RIGHT]) { + double vertical = calcRenderDelta(18.0d); + if (Keyboard.pressedKeys[Keyboard.KEY_UP]) { + Camera.pitchTarget += vertical; + } else if (Keyboard.pressedKeys[Keyboard.KEY_DOWN]) { + Camera.pitchTarget -= vertical; + } + + double horizontal = calcRenderDelta(24.0d); + if (Keyboard.pressedKeys[Keyboard.KEY_LEFT]) { + Camera.yawTarget -= horizontal; + } else if (Keyboard.pressedKeys[Keyboard.KEY_RIGHT]) { + Camera.yawTarget += horizontal; + } + + Camera.clampCameraAngle(); + } + } + + @OriginalMember(owner = "client!rc", name = "run", descriptor = "()V") + @Override + public final void run() { + try { + if (SignLink.javaVendor != null) { + @Pc(12) String javaVendor = SignLink.javaVendor.toLowerCase(); + if (javaVendor.contains("sun") || javaVendor.contains("apple")) { + @Pc(24) String javaVersion = SignLink.javaVersion; + if (javaVersion.equals("1.1") || javaVersion.startsWith("1.1.") || javaVersion.equals("1.2") || javaVersion.startsWith("1.2.")) { + this.error("wrongjava"); + return; + } + minimumDelay = 5; + } else if (javaVendor.contains("ibm") && (SignLink.javaVersion == null || SignLink.javaVersion.equals("1.4.2"))) { + this.error("wrongjava"); + return; + } + } + @Pc(76) int i; + if (SignLink.javaVersion != null && SignLink.javaVersion.startsWith("1.")) { + i = 2; + @Pc(78) int minorVersion = 0; + while (i < SignLink.javaVersion.length()) { + @Pc(90) char c = SignLink.javaVersion.charAt(i); + if (c < '0' || c > '9') { + break; + } + minorVersion = minorVersion * 10 + c - '0'; + i++; + } + if (minorVersion >= 5) { + isJava5OrLater = true; + } + } + if (signLink.applet != null) { + @Pc(125) Method setFocusCycleRoot = SignLink.setFocusCycleRoot; + if (setFocusCycleRoot != null) { + try { + setFocusCycleRoot.invoke(signLink.applet, Boolean.TRUE); + } catch (@Pc(142) Throwable ex) { + } + } + } + getMaxMemory(); + this.addCanvas(); + SoftwareRaster.frameBuffer = FrameBuffer.create(canvasHeight, canvasWidth, canvas); + this.mainInit(); + timer = Timer.create(); + + long lastUpdateTime = 0; + long lastDrawTime = 0; + while (killTime == 0L) { + if (GameShell.killTime > MonotonicClock.currentTimeMillis()) { + break; + } + + long currentTime = System.nanoTime(); + + updateDelta = currentTime - lastUpdateTime; + if (updateDelta >= FIXED_UPDATE_RATE_NS) { + logicCycles = timer.count(minimumDelay, (int) FIXED_UPDATE_RATE); + for (int cycle = 0; cycle < logicCycles; ++cycle) { + this.mainLoopWrapper(); + } + lastUpdateTime = currentTime; + flush(signLink, canvas); + } + + renderDelta = currentTime - lastDrawTime; + if (renderDelta >= VARIABLE_RENDER_RATE_NS) { + this.mainInputLoop(); + this.mainRedrawWrapper(); + lastDrawTime = currentTime; + Thread.yield(); + } + } + } catch (@Pc(198) Exception ex) { + TracingException.report(null, ex); + this.error("crash"); + } + this.shutdown(true); + } + + @OriginalMember(owner = "client!rc", name = "getParameter", descriptor = "(Ljava/lang/String;)Ljava/lang/String;") + @Override + public final String getParameter(@OriginalArg(0) String name) { + if (frame == null) { + return signLink == null || signLink.applet == this ? super.getParameter(name) : signLink.applet.getParameter(name); + } else { + return null; + } + } + + @OriginalMember(owner = "client!rc", name = "g", descriptor = "(I)V") + protected abstract void mainInit(); + + @OriginalMember(owner = "client!rc", name = "stop", descriptor = "()V") + @Override + public final void stop() { + if (instance == this && !shutdown) { + killTime = MonotonicClock.currentTimeMillis() + 4000L; + } + } + + @OriginalMember(owner = "client!rc", name = "init", descriptor = "()V") + public abstract void init(); + + @OriginalMember(owner = "client!rc", name = "a", descriptor = "(IIZILjava/lang/String;III)V") + protected final void startApplication(@OriginalArg(0) int cacheId, @OriginalArg(4) String cacheSubDir) { + try { + leftMargin = 0; + clientBuild = 530; + frameWidth = 1024; + frameHeight = 768; + canvasWidth = frameWidth; + canvasHeight = frameHeight; + topMargin = 0; + instance = this; + frame = new Frame(); + frame.setTitle("Jagex"); + frame.setResizable(true); + frame.addWindowListener(this); + frame.setVisible(true); + frame.setBackground(Color.black); + frame.toFront(); + frame.setIconImage(new javax.swing.ImageIcon(getClass().getResource("/saradomin.png")).getImage()); + @Pc(44) Insets insets = frame.getInsets(); + frame.setSize(insets.left + frameWidth + insets.right, insets.top + frameHeight + insets.bottom); + configureTargetFPS(); + signLink2 = signLink = new SignLink(null, cacheId, cacheSubDir, 28); + @Pc(76) PrivilegedRequest request = signLink.startThread(1, this); + while (request.status == 0) { + ThreadUtils.sleep(10L); + } + thread = (Thread) request.result; + } catch (@Pc(91) Exception ex) { + TracingException.report(null, ex); + } + } + + private void setWindowTitle() { + String modeString = "2009Scape [Test]"; + if (GlobalJsonConfig.instance != null) { + switch (GlobalJsonConfig.instance.ip_management) { + case "play.2009scape.org": + modeString = "2009Scape [Live]"; + break; + case "test.2009scape.org": + modeString = "2009Scape [Test]"; + break; + case "play.emoscape.org": + modeString = "EmoScape"; + break; + default: + modeString = "EmoScape [Local]"; + break; + } + } + if (PlayerList.self != null) { + JagString name = PlayerList.self.username; + if (name != null) + modeString += " - " + name.toString(); + else modeString += " - At Login"; + } + if (frame != null) + frame.setTitle(modeString); + } + + private final void configureTargetFPS() { + int targetFps = 0; + String clientFps = System.getProperty("clientFps"); + if (clientFps != null) { + targetFps = Integer.parseInt(clientFps); //if invalid number, we're happy to get the exception + } + if (targetFps == 0) { + targetFps = getCurrentDevice().getDisplayMode().getRefreshRate(); + if (targetFps == java.awt.DisplayMode.REFRESH_RATE_UNKNOWN) { + targetFps = 60; //just assume 60hz and call it a day. + } + } + GameShell.setFpsTarget(targetFps); + } + + @OriginalMember(owner = "client!rc", name = "windowOpened", descriptor = "(Ljava/awt/event/WindowEvent;)V") + @Override + public final void windowOpened(@OriginalArg(0) WindowEvent event) { + } + + @OriginalMember(owner = "client!rc", name = "start", descriptor = "()V") + @Override + public final void start() { + if (instance == this && !shutdown) { + killTime = 0L; + } + } + + @OriginalMember(owner = "client!rc", name = "a", descriptor = "(BIIII)V") + protected final void startApplet(@OriginalArg(2) int cacheId) { + try { + if (instance != null) { + instances++; + if (instances >= 3) { + this.error("alreadyloaded"); + return; + } + this.getAppletContext().showDocument(this.getDocumentBase(), "_self"); + return; + } + instance = this; + topMargin = 0; + clientBuild = 1530; + canvasWidth = 765; + frameWidth = 765; + leftMargin = 0; + canvasHeight = 503; + frameHeight = 503; + @Pc(54) String openWindowJavaScriptStr = this.getParameter("openwinjs"); + openWindowJavaScript = openWindowJavaScriptStr != null && openWindowJavaScriptStr.equals("1"); + if (signLink == null) { + signLink2 = signLink = new SignLink(this, cacheId, null, 0); + } + @Pc(86) PrivilegedRequest request = signLink.startThread(1, this); + while (request.status == 0) { + ThreadUtils.sleep(10L); + } + thread = (Thread) request.result; + } catch (@Pc(103) Exception ex) { + TracingException.report(null, ex); + this.error("crash"); + } + } +} diff --git a/client/src/main/java/rt4/GlAlphaSprite.java b/client/src/main/java/rt4/GlAlphaSprite.java new file mode 100644 index 0000000..d717746 --- /dev/null +++ b/client/src/main/java/rt4/GlAlphaSprite.java @@ -0,0 +1,59 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!el") +public final class GlAlphaSprite extends GlSprite { + + @OriginalMember(owner = "client!el", name = "", descriptor = "(IIIIII[I)V") + public GlAlphaSprite(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int[] arg6) { + super(arg0, arg1, arg2, arg3, arg4, arg5, arg6); + } + + @OriginalMember(owner = "client!el", name = "", descriptor = "(Lclient!mm;)V") + public GlAlphaSprite(@OriginalArg(0) SoftwareSprite arg0) { + super(arg0); + } + + @OriginalMember(owner = "client!el", name = "a", descriptor = "([I)V") + @Override + protected final void method1430(@OriginalArg(0) int[] arg0) { + this.powerOfTwoWidth = IntUtils.clp2(this.width); + this.powerOfTwoHeight = IntUtils.clp2(this.height); + @Pc(20) byte[] local20 = new byte[this.powerOfTwoWidth * this.powerOfTwoHeight * 4]; + @Pc(22) int local22 = 0; + @Pc(24) int local24 = 0; + @Pc(32) int local32 = (this.powerOfTwoWidth - this.width) * 4; + for (@Pc(34) int local34 = 0; local34 < this.height; local34++) { + for (@Pc(40) int local40 = 0; local40 < this.width; local40++) { + @Pc(49) int local49 = arg0[local24++]; + if (local49 == 0) { + local22 += 4; + } else { + local20[local22++] = (byte) (local49 >> 16); + local20[local22++] = (byte) (local49 >> 8); + local20[local22++] = (byte) local49; + local20[local22++] = (byte) (local49 >> 24); + } + } + local22 += local32; + } + @Pc(94) ByteBuffer local94 = ByteBuffer.wrap(local20); + @Pc(96) GL2 gl = GlRenderer.gl; + if (this.textureId == -1) { + @Pc(103) int[] local103 = new int[1]; + gl.glGenTextures(1, local103, 0); + this.textureId = local103[0]; + } + GlRenderer.setTextureId(this.textureId); + gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA, this.powerOfTwoWidth, this.powerOfTwoHeight, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, local94); + GlCleaner.onCard2d += local94.limit() - this.anInt1869; + this.anInt1869 = local94.limit(); + } +} diff --git a/client/src/main/java/rt4/GlBoundingBox.java b/client/src/main/java/rt4/GlBoundingBox.java new file mode 100644 index 0000000..5c84753 --- /dev/null +++ b/client/src/main/java/rt4/GlBoundingBox.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!ae") +public final class GlBoundingBox { + + @OriginalMember(owner = "client!ae", name = "a", descriptor = "S") + public short minY; + + @OriginalMember(owner = "client!ae", name = "b", descriptor = "S") + public short maxY; + + @OriginalMember(owner = "client!ae", name = "c", descriptor = "S") + public short cylinderRadius; + + @OriginalMember(owner = "client!ae", name = "d", descriptor = "S") + public short maxX; + + @OriginalMember(owner = "client!ae", name = "e", descriptor = "S") + public short minX; + + @OriginalMember(owner = "client!ae", name = "f", descriptor = "S") + public short maxZ; + + @OriginalMember(owner = "client!ae", name = "g", descriptor = "S") + public short minZ; + + @OriginalMember(owner = "client!ae", name = "h", descriptor = "Z") + public boolean valid = false; +} diff --git a/client/src/main/java/rt4/GlBuffer.java b/client/src/main/java/rt4/GlBuffer.java new file mode 100644 index 0000000..ffb5e2c --- /dev/null +++ b/client/src/main/java/rt4/GlBuffer.java @@ -0,0 +1,25 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +import java.nio.ByteBuffer; + +@OriginalClass("client!ql") +public final class GlBuffer { + + @OriginalMember(owner = "client!ql", name = "e", descriptor = "Lclient!vi;") + public GlVertexBufferObject vbo; + + @OriginalMember(owner = "client!ql", name = "f", descriptor = "Ljava/nio/ByteBuffer;") + public ByteBuffer buffer; + + @OriginalMember(owner = "client!ql", name = "b", descriptor = "Z") + public boolean valid = false; + + @OriginalMember(owner = "client!ql", name = "a", descriptor = "I") + public int pointer = 0; + + @OriginalMember(owner = "client!ql", name = "m", descriptor = "I") + public int stride = 0; +} diff --git a/client/src/main/java/rt4/GlCleaner.java b/client/src/main/java/rt4/GlCleaner.java new file mode 100644 index 0000000..f7b5b67 --- /dev/null +++ b/client/src/main/java/rt4/GlCleaner.java @@ -0,0 +1,145 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public final class GlCleaner { + + @OriginalMember(owner = "client!fa", name = "a", descriptor = "I") + public static int onCardTexture = 0; + + @OriginalMember(owner = "client!fa", name = "b", descriptor = "Lclient!ih;") + private static final LinkedList aClass69_48 = new LinkedList(); + + @OriginalMember(owner = "client!fa", name = "c", descriptor = "I") + public static int contextId = 0; + + @OriginalMember(owner = "client!fa", name = "d", descriptor = "J") + private static long aLong71 = 0L; + + @OriginalMember(owner = "client!fa", name = "e", descriptor = "I") + public static int onCard2d = 0; + + @OriginalMember(owner = "client!fa", name = "f", descriptor = "I") + public static int onCardGeometry = 0; + + @OriginalMember(owner = "client!fa", name = "g", descriptor = "Lclient!ih;") + private static final LinkedList aClass69_49 = new LinkedList(); + + @OriginalMember(owner = "client!fa", name = "h", descriptor = "Lclient!ih;") + private static final LinkedList aClass69_50 = new LinkedList(); + + @OriginalMember(owner = "client!fa", name = "i", descriptor = "Lclient!ih;") + private static final LinkedList aClass69_51 = new LinkedList(); + + @OriginalMember(owner = "client!fa", name = "j", descriptor = "[I") + private static final int[] anIntArray151 = new int[1000]; + + @OriginalMember(owner = "client!fa", name = "a", descriptor = "(III)V") + public static synchronized void deleteTexture(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + if (arg2 == contextId) { + @Pc(8) IntNode local8 = new IntNode(arg1); + local8.key = arg0; + aClass69_50.addTail(local8); + } + } + + @OriginalMember(owner = "client!fa", name = "a", descriptor = "(II)V") + public static synchronized void deleteList(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + if (arg1 == contextId) { + @Pc(7) IntNode local7 = new IntNode(); + local7.key = arg0; + aClass69_51.addTail(local7); + } + } + + @OriginalMember(owner = "client!fa", name = "b", descriptor = "()V") + public static synchronized void clear() { + contextId++; + aClass69_48.clear(); + aClass69_49.clear(); + aClass69_50.clear(); + aClass69_51.clear(); + onCardGeometry = 0; + onCard2d = 0; + onCardTexture = 0; + } + + @OriginalMember(owner = "client!fa", name = "b", descriptor = "(III)V") + public static synchronized void deleteBuffer(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + if (arg2 == contextId) { + @Pc(8) IntNode local8 = new IntNode(arg1); + local8.key = arg0; + aClass69_48.addTail(local8); + } + } + + @OriginalMember(owner = "client!fa", name = "c", descriptor = "()V") + public static synchronized void process() { + @Pc(1) GL2 gl = GlRenderer.gl; + @Pc(3) int local3 = 0; + while (true) { + @Pc(8) IntNode local8 = (IntNode) aClass69_48.removeHead(); + if (local8 == null) { + if (local3 > 0) { + gl.glDeleteBuffers(local3, anIntArray151, 0); + local3 = 0; + } + while (true) { + local8 = (IntNode) aClass69_49.removeHead(); + if (local8 == null) { + while (true) { + local8 = (IntNode) aClass69_50.removeHead(); + if (local8 == null) { + if (local3 > 0) { + gl.glDeleteTextures(local3, anIntArray151, 0); + } + while (true) { + local8 = (IntNode) aClass69_51.removeHead(); + if (local8 == null) { + if (onCardGeometry + onCard2d + onCardTexture > 100663296 && MonotonicClock.currentTimeMillis() > aLong71 + 60000L) { + System.gc(); + aLong71 = MonotonicClock.currentTimeMillis(); + } + return; + } + @Pc(126) int local126 = (int) local8.key; + gl.glDeleteLists(local126, 1); + } + } + anIntArray151[local3++] = (int) local8.key; + onCardTexture -= local8.value; + if (local3 == 1000) { + gl.glDeleteTextures(local3, anIntArray151, 0); + local3 = 0; + } + } + } + anIntArray151[local3++] = (int) local8.key; + onCard2d -= local8.value; + if (local3 == 1000) { + gl.glDeleteTextures(local3, anIntArray151, 0); + local3 = 0; + } + } + } + anIntArray151[local3++] = (int) local8.key; + onCardGeometry -= local8.value; + if (local3 == 1000) { + gl.glDeleteBuffers(local3, anIntArray151, 0); + local3 = 0; + } + } + } + + @OriginalMember(owner = "client!fa", name = "c", descriptor = "(III)V") + public static synchronized void deleteTexture2d(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + if (arg2 == contextId) { + @Pc(8) IntNode local8 = new IntNode(arg1); + local8.key = arg0; + aClass69_49.addTail(local8); + } + } +} diff --git a/client/src/main/java/rt4/GlFont.java b/client/src/main/java/rt4/GlFont.java new file mode 100644 index 0000000..5e94e73 --- /dev/null +++ b/client/src/main/java/rt4/GlFont.java @@ -0,0 +1,216 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!mb") +public final class GlFont extends Font { + + @OriginalMember(owner = "client!dj", name = "a", descriptor = "Lclient!cf;") + public static GlSprite masked = null; + @OriginalMember(owner = "client!mb", name = "Gb", descriptor = "[I") + private int[] listIds; + + @OriginalMember(owner = "client!mb", name = "Hb", descriptor = "I") + private int contextId; + + @OriginalMember(owner = "client!mb", name = "Ib", descriptor = "I") + private int powerOfTwoSize; + + @OriginalMember(owner = "client!mb", name = "Fb", descriptor = "I") + private int textureId = -1; + + @OriginalMember(owner = "client!mb", name = "Eb", descriptor = "I") + private int size = 0; + + @OriginalMember(owner = "client!mb", name = "", descriptor = "([B[I[I[I[I[[B)V") + public GlFont(@OriginalArg(0) byte[] bytes, @OriginalArg(1) int[] xOffsets, @OriginalArg(2) int[] yOffsets, @OriginalArg(3) int[] innerWidths, @OriginalArg(4) int[] innerHeights, @OriginalArg(5) byte[][] pixels) { + super(bytes, xOffsets, yOffsets, innerWidths, innerHeights); + this.createTexture(pixels); + this.createLists(); + } + + @OriginalMember(owner = "client!dj", name = "a", descriptor = "()V") + public static void method1173() { + masked = null; + } + + @OriginalMember(owner = "client!dj", name = "a", descriptor = "(Lclient!cf;)V") + public static void method1188(@OriginalArg(0) GlSprite sprite) { + if (sprite.height != GlRaster.clipBottom - GlRaster.clipTop) { + throw new IllegalArgumentException(); + } + masked = sprite; + } + + @OriginalMember(owner = "client!mb", name = "finalize", descriptor = "()V") + @Override + protected void finalize() throws Throwable { + if (this.textureId != -1) { + GlCleaner.deleteTexture2d(this.textureId, this.size, this.contextId); + this.textureId = -1; + this.size = 0; + } + if (this.listIds != null) { + for (@Pc(21) int i = 0; i < this.listIds.length; i++) { + GlCleaner.deleteList(this.listIds[i], this.contextId); + } + this.listIds = null; + } + super.finalize(); + } + + @OriginalMember(owner = "client!mb", name = "a", descriptor = "(IIIIIIZ)V") + @Override + protected final void renderGlyph(@OriginalArg(0) int glyph, @OriginalArg(1) int x, @OriginalArg(2) int y, @OriginalArg(3) int width, @OriginalArg(4) int height, @OriginalArg(5) int color) { + @Pc(4) GL2 gl; + if (masked == null) { + GlRenderer.method4151(); + gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + gl.glColor3ub((byte) (color >> 16), (byte) (color >> 8), (byte) color); + gl.glTranslatef((float) x, (float) (GlRenderer.canvasHeight - y), 0.0F); + gl.glCallList(this.listIds[glyph]); + gl.glLoadIdentity(); + return; + } + GlRenderer.method4151(); + gl = GlRenderer.gl; + gl.glColor3ub((byte) (color >> 16), (byte) (color >> 8), (byte) color); + gl.glTranslatef((float) x, (float) (GlRenderer.canvasHeight - y), 0.0F); + @Pc(32) float s0 = (float) (glyph % 16) / 16.0F; + @Pc(39) float t0 = (float) (glyph / 16) / 16.0F; + @Pc(51) float s1 = s0 + (float) this.spriteInnerWidths[glyph] / (float) this.powerOfTwoSize; + @Pc(63) float t1 = t0 + (float) this.spriteInnerHeights[glyph] / (float) this.powerOfTwoSize; + GlRenderer.setTextureId(this.textureId); + @Pc(68) GlSprite mask = masked; + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glEnable(GL2.GL_TEXTURE_2D); + gl.glBindTexture(GL2.GL_TEXTURE_2D, mask.textureId); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_REPLACE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_PREVIOUS); + @Pc(98) float maskX0 = (float) (x - GlRaster.clipLeft) / (float) mask.powerOfTwoWidth; + @Pc(107) float maskY0 = (float) (y - GlRaster.clipTop) / (float) mask.powerOfTwoHeight; + @Pc(118) float maskX1 = (float) (x + width - GlRaster.clipLeft) / (float) mask.powerOfTwoWidth; + @Pc(129) float maskY1 = (float) (y + height - GlRaster.clipTop) / (float) mask.powerOfTwoHeight; + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glMultiTexCoord2f(GL2.GL_TEXTURE1, maskX1, maskY0); + gl.glTexCoord2f(s1, t0); + gl.glVertex2f((float) this.spriteInnerWidths[glyph], 0.0F); + gl.glMultiTexCoord2f(GL2.GL_TEXTURE1, maskX0, maskY0); + gl.glTexCoord2f(s0, t0); + gl.glVertex2f(0.0F, 0.0F); + gl.glMultiTexCoord2f(GL2.GL_TEXTURE1, maskX0, maskY1); + gl.glTexCoord2f(s0, t1); + gl.glVertex2f(0.0F, (float) -this.spriteInnerHeights[glyph]); + gl.glMultiTexCoord2f(GL2.GL_TEXTURE1, maskX1, maskY1); + gl.glTexCoord2f(s1, t1); + gl.glVertex2f((float) this.spriteInnerWidths[glyph], (float) -this.spriteInnerHeights[glyph]); + gl.glEnd(); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_TEXTURE); + gl.glDisable(GL2.GL_TEXTURE_2D); + gl.glActiveTexture(GL2.GL_TEXTURE0); + gl.glLoadIdentity(); + } + + @OriginalMember(owner = "client!mb", name = "a", descriptor = "(IIIIIIIZ)V") + @Override + protected final void renderGlyphTransparent(@OriginalArg(0) int glyph, @OriginalArg(1) int x, @OriginalArg(2) int y, @OriginalArg(3) int width, @OriginalArg(4) int height, @OriginalArg(5) int color, @OriginalArg(6) int alpha) { + GlRenderer.method4151(); + @Pc(2) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + gl.glColor4ub((byte) (color >> 16), (byte) (color >> 8), (byte) color, alpha > 255 ? -1 : (byte) alpha); + gl.glTranslatef((float) x, (float) (GlRenderer.canvasHeight - y), 0.0F); + gl.glCallList(this.listIds[glyph]); + gl.glLoadIdentity(); + } + + @OriginalMember(owner = "client!mb", name = "b", descriptor = "()V") + private void createLists() { + if (this.listIds != null) { + return; + } + this.listIds = new int[256]; + @Pc(9) GL2 gl = GlRenderer.gl; + for (@Pc(11) int i = 0; i < 256; i++) { + @Pc(21) float s0 = (float) (i % 16) / 16.0F; + @Pc(28) float t0 = (float) (i / 16) / 16.0F; + @Pc(40) float s1 = s0 + (float) this.spriteInnerWidths[i] / (float) this.powerOfTwoSize; + @Pc(52) float t1 = t0 + (float) this.spriteInnerHeights[i] / (float) this.powerOfTwoSize; + this.listIds[i] = gl.glGenLists(1); + gl.glNewList(this.listIds[i], GL2.GL_COMPILE); + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glTexCoord2f(s1, t0); + gl.glVertex2f((float) this.spriteInnerWidths[i], 0.0F); + gl.glTexCoord2f(s0, t0); + gl.glVertex2f(0.0F, 0.0F); + gl.glTexCoord2f(s0, t1); + gl.glVertex2f(0.0F, (float) -this.spriteInnerHeights[i]); + gl.glTexCoord2f(s1, t1); + gl.glVertex2f((float) this.spriteInnerWidths[i], (float) -this.spriteInnerHeights[i]); + gl.glEnd(); + gl.glEndList(); + } + this.contextId = GlCleaner.contextId; + } + + @OriginalMember(owner = "client!mb", name = "a", descriptor = "([[B)V") + private void createTexture(@OriginalArg(0) byte[][] pixels) { + if (this.textureId != -1) { + return; + } + this.powerOfTwoSize = 0; + for (@Pc(9) int i = 0; i < 256; i++) { + if (this.spriteInnerHeights[i] > this.powerOfTwoSize) { + this.powerOfTwoSize = this.spriteInnerHeights[i]; + } + if (this.spriteInnerWidths[i] > this.powerOfTwoSize) { + this.powerOfTwoSize = this.spriteInnerWidths[i]; + } + } + this.powerOfTwoSize *= 16; + this.powerOfTwoSize = IntUtils.clp2(this.powerOfTwoSize); + int glyphSize = this.powerOfTwoSize / 16; + @Pc(66) byte[] dest = new byte[this.powerOfTwoSize * this.powerOfTwoSize * 2]; + for (@Pc(68) int i = 0; i < 256; i++) { + @Pc(77) int s = i % 16 * glyphSize; + @Pc(83) int t = i / 16 * glyphSize; + @Pc(92) int destIndex = (t * this.powerOfTwoSize + s) * 2; + @Pc(94) int srcIndex = 0; + @Pc(99) int height = this.spriteInnerHeights[i]; + @Pc(104) int width = this.spriteInnerWidths[i]; + @Pc(108) byte[] src = pixels[i]; + for (@Pc(110) int y = 0; y < height; y++) { + for (@Pc(115) int x = 0; x < width; x++) { + if (src[srcIndex++] == 0) { + destIndex += 2; + } else { + dest[destIndex++] = -1; + dest[destIndex++] = -1; + } + } + destIndex += (this.powerOfTwoSize - width) * 2; + } + } + @Pc(153) ByteBuffer buffer = ByteBuffer.wrap(dest); + @Pc(155) GL2 gl = GlRenderer.gl; + if (this.textureId == -1) { + @Pc(162) int[] temp = new int[1]; + gl.glGenTextures(1, temp, 0); + this.textureId = temp[0]; + this.contextId = GlCleaner.contextId; + } + GlRenderer.setTextureId(this.textureId); + gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_LUMINANCE_ALPHA, this.powerOfTwoSize, this.powerOfTwoSize, 0, GL2.GL_LUMINANCE_ALPHA, GL2.GL_UNSIGNED_BYTE, buffer); + GlCleaner.onCard2d += buffer.limit() - this.size; + this.size = buffer.limit(); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_NEAREST); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_NEAREST); + } +} diff --git a/client/src/main/java/rt4/GlIndexedSprite.java b/client/src/main/java/rt4/GlIndexedSprite.java new file mode 100644 index 0000000..fff4a88 --- /dev/null +++ b/client/src/main/java/rt4/GlIndexedSprite.java @@ -0,0 +1,165 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!oh") +public final class GlIndexedSprite extends IndexedSprite { + + @OriginalMember(owner = "client!oh", name = "r", descriptor = "I") + private int anInt4285; + + @OriginalMember(owner = "client!oh", name = "s", descriptor = "I") + private int anInt4286; + + @OriginalMember(owner = "client!oh", name = "t", descriptor = "I") + private int anInt4287; + + @OriginalMember(owner = "client!oh", name = "n", descriptor = "I") + private int anInt4281 = -1; + + @OriginalMember(owner = "client!oh", name = "p", descriptor = "I") + private int anInt4283 = 0; + + @OriginalMember(owner = "client!oh", name = "o", descriptor = "I") + private int anInt4282 = -1; + + @OriginalMember(owner = "client!oh", name = "q", descriptor = "I") + private int anInt4284 = 0; + + public byte[] pixels; + + public int[] pallet; + + @OriginalMember(owner = "client!oh", name = "", descriptor = "(IIIIII[B[I)V") + public GlIndexedSprite(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) byte[] arg6, @OriginalArg(7) int[] arg7) { + this.innerWidth = arg0; + this.innerHeight = arg1; + this.xOffset = arg2; + this.yOffset = arg3; + this.width = arg4; + this.height = arg5; + this.pixels = arg6; + this.pallet = arg7; + this.method3337(arg6, arg7); + this.method3339(); + } + + @OriginalMember(owner = "client!oh", name = "a", descriptor = "([B[I)V") + private void method3337(@OriginalArg(0) byte[] arg0, @OriginalArg(1) int[] arg1) { + this.anInt4287 = IntUtils.clp2(this.width); + this.anInt4286 = IntUtils.clp2(this.height); + @Pc(20) byte[] local20 = new byte[this.anInt4287 * this.anInt4286 * 4]; + @Pc(22) int local22 = 0; + @Pc(24) int local24 = 0; + for (@Pc(26) int local26 = 0; local26 < this.height; local26++) { + for (@Pc(32) int local32 = 0; local32 < this.width; local32++) { + @Pc(41) byte local41 = arg0[local24++]; + if (local41 == 0) { + local22 += 4; + } else { + @Pc(47) int local47 = arg1[local41]; + local20[local22++] = (byte) (local47 >> 16); + local20[local22++] = (byte) (local47 >> 8); + local20[local22++] = (byte) local47; + local20[local22++] = -1; + } + } + local22 += (this.anInt4287 - this.width) * 4; + } + @Pc(93) ByteBuffer local93 = ByteBuffer.wrap(local20); + @Pc(95) GL2 gl = GlRenderer.gl; + if (this.anInt4281 == -1) { + @Pc(102) int[] local102 = new int[1]; + gl.glGenTextures(1, local102, 0); + this.anInt4281 = local102[0]; + this.anInt4285 = GlCleaner.contextId; + } + GlRenderer.setTextureId(this.anInt4281); + gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA, this.anInt4287, this.anInt4286, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, local93); + GlCleaner.onCard2d += local93.limit() - this.anInt4284; + this.anInt4284 = local93.limit(); + } + + @OriginalMember(owner = "client!oh", name = "a", descriptor = "(III)V") + @Override + public final void method3335(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + GlRenderer.method4155(); + @Pc(5) int local5 = arg0 + this.xOffset; + @Pc(10) int local10 = arg1 + this.yOffset; + @Pc(12) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.anInt4281); + this.method3338(); + gl.glColor4f(1.0F, 1.0F, 1.0F, (float) arg2 / 256.0F); + gl.glTranslatef((float) local5, (float) (GlRenderer.canvasHeight - local10), 0.0F); + gl.glCallList(this.anInt4282); + gl.glLoadIdentity(); + } + + @OriginalMember(owner = "client!oh", name = "b", descriptor = "(I)V") + private void method3338() { + if (this.anInt4283 != 1) { + this.anInt4283 = 1; + @Pc(9) GL2 gl = GlRenderer.gl; + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_NEAREST); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_NEAREST); + } + } + + @OriginalMember(owner = "client!oh", name = "a", descriptor = "(II)V") + @Override + public final void renderTransparent(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + GlRenderer.method4149(); + @Pc(5) int local5 = arg0 + this.xOffset; + @Pc(10) int local10 = arg1 + this.yOffset; + @Pc(12) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.anInt4281); + this.method3338(); + gl.glTranslatef((float) local5, (float) (GlRenderer.canvasHeight - local10), 0.0F); + gl.glCallList(this.anInt4282); + gl.glLoadIdentity(); + } + + @OriginalMember(owner = "client!oh", name = "finalize", descriptor = "()V") + @Override + public final void finalize() throws Throwable { + if (this.anInt4281 != -1) { + GlCleaner.deleteTexture2d(this.anInt4281, this.anInt4284, this.anInt4285); + this.anInt4281 = -1; + this.anInt4284 = 0; + } + if (this.anInt4282 != -1) { + GlCleaner.deleteList(this.anInt4282, this.anInt4285); + this.anInt4282 = -1; + } + super.finalize(); + } + + @OriginalMember(owner = "client!oh", name = "a", descriptor = "()V") + private void method3339() { + @Pc(7) float local7 = (float) this.width / (float) this.anInt4287; + @Pc(15) float local15 = (float) this.height / (float) this.anInt4286; + @Pc(17) GL2 gl = GlRenderer.gl; + if (this.anInt4282 == -1) { + this.anInt4282 = gl.glGenLists(1); + this.anInt4285 = GlCleaner.contextId; + } + gl.glNewList(this.anInt4282, GL2.GL_COMPILE); + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glTexCoord2f(local7, 0.0F); + gl.glVertex2f((float) this.width, 0.0F); + gl.glTexCoord2f(0.0F, 0.0F); + gl.glVertex2f(0.0F, 0.0F); + gl.glTexCoord2f(0.0F, local15); + gl.glVertex2f(0.0F, (float) -this.height); + gl.glTexCoord2f(local7, local15); + gl.glVertex2f((float) this.width, (float) -this.height); + gl.glEnd(); + gl.glEndList(); + } +} diff --git a/client/src/main/java/rt4/GlModel.java b/client/src/main/java/rt4/GlModel.java new file mode 100644 index 0000000..51ab917 --- /dev/null +++ b/client/src/main/java/rt4/GlModel.java @@ -0,0 +1,3557 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!td") +public final class GlModel extends Model { + + @OriginalMember(owner = "client!tf", name = "G", descriptor = "Z") + public static boolean arbVboSupported; + + @OriginalMember(owner = "client!td", name = "D", descriptor = "Lclient!wa;") + public static Buffer tempBuffer = new Buffer(10000); + + @OriginalMember(owner = "client!td", name = "bb", descriptor = "Lclient!td;") + public static GlModel aClass8_Sub1_Sub1_1 = new GlModel(); + + @OriginalMember(owner = "client!td", name = "jb", descriptor = "Lclient!td;") + public static GlModel aClass8_Sub1_Sub1_2 = new GlModel(); + + @OriginalMember(owner = "client!td", name = "mb", descriptor = "Lclient!td;") + public static GlModel aClass8_Sub1_Sub1_3 = new GlModel(); + + @OriginalMember(owner = "client!td", name = "nb", descriptor = "Lclient!td;") + public static GlModel aClass8_Sub1_Sub1_4 = new GlModel(); + + @OriginalMember(owner = "client!td", name = "ob", descriptor = "Lclient!td;") + public static GlModel aClass8_Sub1_Sub1_5 = new GlModel(); + + @OriginalMember(owner = "client!td", name = "pb", descriptor = "Lclient!td;") + public static GlModel aClass8_Sub1_Sub1_6 = new GlModel(); + + @OriginalMember(owner = "client!td", name = "qb", descriptor = "[I") + public static int[] anIntArray467 = new int[1]; + + @OriginalMember(owner = "client!td", name = "ub", descriptor = "[I") + public static int[] anIntArray468 = new int[1]; + + @OriginalMember(owner = "client!td", name = "Bb", descriptor = "Z") + public static boolean aBoolean260 = false; + + @OriginalMember(owner = "client!td", name = "Ab", descriptor = "F") + public static float aFloat29; + + @OriginalMember(owner = "client!td", name = "G", descriptor = "[J") + public static long[] aLongArray10; + + @OriginalMember(owner = "client!td", name = "T", descriptor = "Ljava/nio/ByteBuffer;") + public static ByteBuffer aByteBuffer9; + + @OriginalMember(owner = "client!td", name = "rb", descriptor = "F") + public static float aFloat24; + + @OriginalMember(owner = "client!td", name = "sb", descriptor = "I") + public static int anInt5298; + + @OriginalMember(owner = "client!td", name = "tb", descriptor = "F") + public static float aFloat25; + + @OriginalMember(owner = "client!td", name = "vb", descriptor = "I") + public static int anInt5299; + + @OriginalMember(owner = "client!td", name = "wb", descriptor = "F") + public static float aFloat26; + + @OriginalMember(owner = "client!td", name = "xb", descriptor = "F") + public static float aFloat27; + + @OriginalMember(owner = "client!td", name = "yb", descriptor = "I") + public static int anInt5300; + + @OriginalMember(owner = "client!td", name = "zb", descriptor = "F") + public static float aFloat28; + + @OriginalMember(owner = "client!lk", name = "V", descriptor = "I") + public static int anInt3582 = 0; + + @OriginalMember(owner = "client!td", name = "t", descriptor = "[S") + private short[] triangleColors; + + @OriginalMember(owner = "client!td", name = "v", descriptor = "[S") + private short[] aShortArray76; + + @OriginalMember(owner = "client!td", name = "w", descriptor = "[S") + private short[] aShortArray77; + + @OriginalMember(owner = "client!td", name = "x", descriptor = "Lclient!vi;") + private GlVertexBufferObject aClass155_5; + + @OriginalMember(owner = "client!td", name = "y", descriptor = "[S") + private short[] triangleSources; + + @OriginalMember(owner = "client!td", name = "z", descriptor = "Lclient!ql;") + private GlBuffer colorBuffer; + + @OriginalMember(owner = "client!td", name = "A", descriptor = "Lclient!ql;") + private GlBuffer normalsBuffer; + + @OriginalMember(owner = "client!td", name = "B", descriptor = "[B") + private byte[] triangleAlpha; + + @OriginalMember(owner = "client!td", name = "C", descriptor = "Lclient!ql;") + private GlBuffer texCoordBuffer; + + @OriginalMember(owner = "client!td", name = "E", descriptor = "S") + private short aShort28; + + @OriginalMember(owner = "client!td", name = "F", descriptor = "[B") + private byte[] triangleBones; + + @OriginalMember(owner = "client!td", name = "H", descriptor = "[I") + public int[] vertexX; + + @OriginalMember(owner = "client!td", name = "J", descriptor = "[F") + private float[] vertexS; + + @OriginalMember(owner = "client!td", name = "K", descriptor = "[[I") + private int[][] boneVertices; + + @OriginalMember(owner = "client!td", name = "L", descriptor = "[S") + private short[] aShortArray79; + + @OriginalMember(owner = "client!td", name = "M", descriptor = "[S") + private short[] triangleTextures; + + @OriginalMember(owner = "client!td", name = "N", descriptor = "[S") + private short[] aShortArray81; + + @OriginalMember(owner = "client!td", name = "O", descriptor = "[[I") + private int[][] boneTriangles; + + @OriginalMember(owner = "client!td", name = "P", descriptor = "[S") + private short[] aShortArray82; + + @OriginalMember(owner = "client!td", name = "Q", descriptor = "[S") + private short[] aShortArray83; + + @OriginalMember(owner = "client!td", name = "R", descriptor = "[S") + private short[] vertexSources; + + @OriginalMember(owner = "client!td", name = "U", descriptor = "Lclient!ae;") + public GlBoundingBox bounds; + + @OriginalMember(owner = "client!td", name = "W", descriptor = "[S") + private short[] aShortArray85; + + @OriginalMember(owner = "client!td", name = "X", descriptor = "[I") + private int[] anIntArray462; + + @OriginalMember(owner = "client!td", name = "Y", descriptor = "Lclient!ql;") + public GlBuffer vertexBuffer; + + @OriginalMember(owner = "client!td", name = "Z", descriptor = "[I") + private int[] anIntArray463; + + @OriginalMember(owner = "client!td", name = "ab", descriptor = "[S") + private short[] aShortArray86; + + @OriginalMember(owner = "client!td", name = "cb", descriptor = "Lclient!de;") + private GlModel_Class23 aClass23_1; + + @OriginalMember(owner = "client!td", name = "db", descriptor = "[I") + private int[] vertexBones; + + @OriginalMember(owner = "client!td", name = "eb", descriptor = "[I") + public int[] vertexY; + + @OriginalMember(owner = "client!td", name = "fb", descriptor = "Lclient!ql;") + private GlBuffer indexBuffer; + + @OriginalMember(owner = "client!td", name = "gb", descriptor = "[F") + private float[] vertexT; + + @OriginalMember(owner = "client!td", name = "hb", descriptor = "[I") + public int[] vertexZ; + + @OriginalMember(owner = "client!td", name = "ib", descriptor = "S") + private short aShort29; + + @OriginalMember(owner = "client!td", name = "u", descriptor = "Z") + public boolean aBoolean259 = false; + + @OriginalMember(owner = "client!td", name = "I", descriptor = "I") + public int vertexCount = 0; + + @OriginalMember(owner = "client!td", name = "S", descriptor = "I") + private int anInt5296 = 0; + + @OriginalMember(owner = "client!td", name = "V", descriptor = "B") + private byte aByte18 = 0; + + @OriginalMember(owner = "client!td", name = "kb", descriptor = "B") + private byte aByte19 = 0; + + @OriginalMember(owner = "client!td", name = "lb", descriptor = "I") + private int triangleCount = 0; + + @OriginalMember(owner = "client!td", name = "", descriptor = "()V") + public GlModel() { + } + + @OriginalMember(owner = "client!td", name = "", descriptor = "(Lclient!gb;IIZ)V") + public GlModel(@OriginalArg(0) RawModel model, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) boolean arg3) { + @Pc(23) int[] local23 = new int[model.triangleCount]; + this.anIntArray462 = new int[model.vertexCount + 1]; + for (@Pc(32) int local32 = 0; local32 < model.triangleCount; local32++) { + if ((model.triangleInfo == null || model.triangleInfo[local32] != 2) && (model.triangleTextures == null || model.triangleTextures[local32] == -1 || !Rasteriser.textureProvider.method3231(model.triangleTextures[local32] & 0xFFFF))) { + local23[this.triangleCount++] = local32; + this.anIntArray462[model.triangleVertexA[local32]]++; + this.anIntArray462[model.triangleVertexB[local32]]++; + this.anIntArray462[model.triangleVertexC[local32]]++; + } + } + @Pc(115) long[] local115 = new long[this.triangleCount]; + @Pc(117) int local117; + @Pc(125) int local125; + @Pc(127) int local127; + @Pc(226) int local226; + for (local117 = 0; local117 < this.triangleCount; local117++) { + local125 = local23[local117]; + local127 = 0; + @Pc(129) byte local129 = 0; + @Pc(131) int local131 = 0; + @Pc(133) int local133 = 0; + @Pc(135) short local135 = -1; + if (model.triangleTextures != null) { + local135 = model.triangleTextures[local125]; + if (local135 != -1) { + local131 = Rasteriser.textureProvider.getMaterialType(local135 & 0xFFFF); + local133 = Rasteriser.textureProvider.method3228(local135 & 0xFFFF); + } + } + @Pc(182) boolean local182 = model.triangleAlpha != null && model.triangleAlpha[local125] != 0 || local135 != -1 && !Rasteriser.textureProvider.isOpaque(local135 & 0xFFFF); + if ((arg3 || local182) && model.trianglePriorities != null) { + local127 += model.trianglePriorities[local125] << 17; + } + if (local182) { + local127 += 65536; + } + local127 += (local131 & 0xFF) << 8; + local127 += local133 & 0xFF; + local226 = local129 + ((local135 & 0xFFFF) << 16); + @Pc(232) int local232 = local226 + (local117 & 0xFFFF); + local115[local117] = ((long) local127 << 32) + (long) local232; + } + ArrayUtils.sort(local115, local23); + this.vertexCount = model.vertexCount; + this.vertexX = model.vertexX; + this.vertexY = model.vertexY; + this.vertexZ = model.vertexZ; + this.vertexBones = model.vertexBones; + this.vertexSources = model.vertexSources; + local117 = this.triangleCount * 3; + this.aShortArray76 = new short[local117]; + this.aShortArray79 = new short[local117]; + this.aShortArray85 = new short[local117]; + this.aShortArray86 = new short[local117]; + this.vertexS = new float[local117]; + this.vertexT = new float[local117]; + this.triangleColors = new short[this.triangleCount]; + this.triangleAlpha = new byte[this.triangleCount]; + this.aShortArray77 = new short[this.triangleCount]; + this.aShortArray82 = new short[this.triangleCount]; + this.aShortArray83 = new short[this.triangleCount]; + this.triangleTextures = new short[this.triangleCount]; + if (model.triangleBones != null) { + this.triangleBones = new byte[this.triangleCount]; + } + if (model.triangleSources != null) { + this.triangleSources = new short[this.triangleCount]; + } + this.bounds = new GlBoundingBox(); + this.vertexBuffer = new GlBuffer(); + this.colorBuffer = new GlBuffer(); + if (Preferences.highDetailLighting) { + this.normalsBuffer = new GlBuffer(); + } + this.texCoordBuffer = new GlBuffer(); + this.indexBuffer = new GlBuffer(); + this.aShort29 = (short) arg1; + this.aShort28 = (short) arg2; + this.aShortArray81 = new short[local117]; + aLongArray10 = new long[local117]; + local125 = 0; + for (local127 = 0; local127 < model.vertexCount; local127++) { + local226 = this.anIntArray462[local127]; + this.anIntArray462[local127] = local125; + local125 += local226; + } + this.anIntArray462[model.vertexCount] = local125; + @Pc(426) int[] local426 = null; + @Pc(428) int[] local428 = null; + @Pc(430) int[] local430 = null; + @Pc(433) float[][] local433 = null; + @Pc(553) int local553; + @Pc(439) int local439; + @Pc(683) float local683; + @Pc(714) float local714; + @Pc(685) float local685; + if (model.triangleTextureIndex != null) { + local439 = model.texturedCount; + @Pc(442) int[] local442 = new int[local439]; + @Pc(445) int[] local445 = new int[local439]; + @Pc(448) int[] local448 = new int[local439]; + @Pc(451) int[] local451 = new int[local439]; + @Pc(454) int[] local454 = new int[local439]; + @Pc(457) int[] local457 = new int[local439]; + @Pc(459) int local459; + for (local459 = 0; local459 < local439; local459++) { + local442[local459] = Integer.MAX_VALUE; + local445[local459] = -2147483647; + local448[local459] = Integer.MAX_VALUE; + local451[local459] = -2147483647; + local454[local459] = Integer.MAX_VALUE; + local457[local459] = -2147483647; + } + for (local459 = 0; local459 < this.triangleCount; local459++) { + @Pc(498) int local498 = local23[local459]; + if (model.triangleTextureIndex[local498] != -1) { + @Pc(511) int local511 = model.triangleTextureIndex[local498] & 0xFF; + for (@Pc(513) int local513 = 0; local513 < 3; local513++) { + @Pc(523) int local523; + if (local513 == 0) { + local523 = model.triangleVertexA[local498]; + } else if (local513 == 1) { + local523 = model.triangleVertexB[local498]; + } else { + local523 = model.triangleVertexC[local498]; + } + @Pc(543) int local543 = model.vertexX[local523]; + @Pc(548) int local548 = model.vertexY[local523]; + local553 = model.vertexZ[local523]; + if (local543 < local442[local511]) { + local442[local511] = local543; + } + if (local543 > local445[local511]) { + local445[local511] = local543; + } + if (local548 < local448[local511]) { + local448[local511] = local548; + } + if (local548 > local451[local511]) { + local451[local511] = local548; + } + if (local553 < local454[local511]) { + local454[local511] = local553; + } + if (local553 > local457[local511]) { + local457[local511] = local553; + } + } + } + } + local426 = new int[local439]; + local428 = new int[local439]; + local430 = new int[local439]; + local433 = new float[local439][]; + for (local459 = 0; local459 < local439; local459++) { + @Pc(633) byte local633 = model.textureTypes[local459]; + if (local633 > 0) { + local426[local459] = (local442[local459] + local445[local459]) / 2; + local428[local459] = (local448[local459] + local451[local459]) / 2; + local430[local459] = (local454[local459] + local457[local459]) / 2; + if (local633 == 1) { + @Pc(679) short local679 = model.texturesScaleX[local459]; + if (local679 == 0) { + local683 = 1.0F; + local685 = 1.0F; + } else if (local679 > 0) { + local683 = 1.0F; + local685 = (float) local679 / 1024.0F; + } else { + local685 = 1.0F; + local683 = (float) -local679 / 1024.0F; + } + local714 = 64.0F / (float) (model.texturesScaleY[local459] & 0xFFFF); + } else if (local633 == 2) { + local683 = 64.0F / (float) (model.texturesScaleX[local459] & 0xFFFF); + local714 = 64.0F / (float) (model.texturesScaleY[local459] & 0xFFFF); + local685 = 64.0F / (float) (model.texturesScaleZ[local459] & 0xFFFF); + } else { + local683 = (float) model.texturesScaleX[local459] / 1024.0F; + local714 = (float) model.texturesScaleY[local459] / 1024.0F; + local685 = (float) model.texturesScaleZ[local459] / 1024.0F; + } + local433[local459] = method4097(model.textureFacesP[local459], model.textureFacesM[local459], model.textureFacesN[local459], model.textureRotationY[local459] & 0xFF, local683, local714, local685); + } + } + } + @Pc(817) int local817; + @Pc(822) short local822; + for (local439 = 0; local439 < this.triangleCount; local439++) { + @Pc(810) int local810 = local23[local439]; + local817 = model.triangleColors[local810] & 0xFFFF; + if (model.triangleTextures == null) { + local822 = -1; + } else { + local822 = model.triangleTextures[local810]; + } + @Pc(833) int local833; + if (model.triangleTextureIndex == null) { + local833 = -1; + } else { + local833 = model.triangleTextureIndex[local810]; + } + @Pc(844) int local844; + if (model.triangleAlpha == null) { + local844 = 0; + } else { + local844 = model.triangleAlpha[local810] & 0xFF; + } + @Pc(854) float local854 = 0.0F; + @Pc(856) float local856 = 0.0F; + @Pc(858) float local858 = 0.0F; + local683 = 0.0F; + local714 = 0.0F; + local685 = 0.0F; + @Pc(866) byte local866 = 0; + @Pc(868) byte local868 = 0; + local553 = 0; + @Pc(902) byte local902; + @Pc(919) int local919; + @Pc(1280) int local1280; + if (local822 != -1) { + if (local833 == -1) { + local854 = 0.0F; + local856 = 1.0F; + local858 = 1.0F; + local683 = 1.0F; + local866 = 1; + local714 = 0.0F; + local685 = 0.0F; + local868 = 2; + } else { + local833 &= 0xFF; + local902 = model.textureTypes[local833]; + @Pc(909) int local909; + @Pc(914) int local914; + @Pc(952) float local952; + @Pc(960) float local960; + @Pc(968) float local968; + @Pc(1048) float local1048; + @Pc(1056) float local1056; + @Pc(1064) float local1064; + @Pc(1072) float local1072; + @Pc(1080) float local1080; + @Pc(1088) float local1088; + if (local902 == 0) { + local909 = model.triangleVertexA[local810]; + local914 = model.triangleVertexB[local810]; + local919 = model.triangleVertexC[local810]; + @Pc(924) short local924 = model.textureFacesP[local833]; + @Pc(929) short local929 = model.textureFacesM[local833]; + @Pc(934) short local934 = model.textureFacesN[local833]; + @Pc(940) float local940 = (float) model.vertexX[local924]; + @Pc(946) float local946 = (float) model.vertexY[local924]; + local952 = model.vertexZ[local924]; + local960 = (float) model.vertexX[local929] - local940; + local968 = (float) model.vertexY[local929] - local946; + @Pc(976) float local976 = (float) model.vertexZ[local929] - local952; + @Pc(984) float local984 = (float) model.vertexX[local934] - local940; + @Pc(992) float local992 = (float) model.vertexY[local934] - local946; + @Pc(1000) float local1000 = (float) model.vertexZ[local934] - local952; + @Pc(1008) float local1008 = (float) model.vertexX[local909] - local940; + @Pc(1016) float local1016 = (float) model.vertexY[local909] - local946; + @Pc(1024) float local1024 = (float) model.vertexZ[local909] - local952; + @Pc(1032) float local1032 = (float) model.vertexX[local914] - local940; + @Pc(1040) float local1040 = (float) model.vertexY[local914] - local946; + local1048 = (float) model.vertexZ[local914] - local952; + local1056 = (float) model.vertexX[local919] - local940; + local1064 = (float) model.vertexY[local919] - local946; + local1072 = (float) model.vertexZ[local919] - local952; + local1080 = local968 * local1000 - local976 * local992; + local1088 = local976 * local984 - local960 * local1000; + @Pc(1096) float local1096 = local960 * local992 - local968 * local984; + @Pc(1104) float local1104 = local992 * local1096 - local1000 * local1088; + @Pc(1112) float local1112 = local1000 * local1080 - local984 * local1096; + @Pc(1120) float local1120 = local984 * local1088 - local992 * local1080; + @Pc(1134) float local1134 = 1.0F / (local1104 * local960 + local1112 * local968 + local1120 * local976); + local854 = (local1104 * local1008 + local1112 * local1016 + local1120 * local1024) * local1134; + local858 = (local1104 * local1032 + local1112 * local1040 + local1120 * local1048) * local1134; + local714 = (local1104 * local1056 + local1112 * local1064 + local1120 * local1072) * local1134; + @Pc(1184) float local1184 = local968 * local1096 - local976 * local1088; + @Pc(1192) float local1192 = local976 * local1080 - local960 * local1096; + @Pc(1200) float local1200 = local960 * local1088 - local968 * local1080; + @Pc(1214) float local1214 = 1.0F / (local1184 * local984 + local1192 * local992 + local1200 * local1000); + local856 = (local1184 * local1008 + local1192 * local1016 + local1200 * local1024) * local1214; + local683 = (local1184 * local1032 + local1192 * local1040 + local1200 * local1048) * local1214; + local685 = (local1184 * local1056 + local1192 * local1064 + local1200 * local1072) * local1214; + } else { + local909 = model.triangleVertexA[local810]; + local914 = model.triangleVertexB[local810]; + local919 = model.triangleVertexC[local810]; + @Pc(1276) int local1276 = local426[local833]; + local1280 = local428[local833]; + @Pc(1284) int local1284 = local430[local833]; + @Pc(1288) float[] local1288 = local433[local833]; + @Pc(1293) byte local1293 = model.aByteArray32[local833]; + local952 = (float) model.aByteArray34[local833] / 256.0F; + if (local902 == 1) { + local960 = (float) (model.texturesScaleZ[local833] & 0xFFFF) / 1024.0F; + method4095(model.vertexX[local909], model.vertexY[local909], model.vertexZ[local909], local1276, local1280, local1284, local1288, local960, local1293, local952); + local854 = aFloat26; + local856 = aFloat28; + method4095(model.vertexX[local914], model.vertexY[local914], model.vertexZ[local914], local1276, local1280, local1284, local1288, local960, local1293, local952); + local858 = aFloat26; + local683 = aFloat28; + method4095(model.vertexX[local919], model.vertexY[local919], model.vertexZ[local919], local1276, local1280, local1284, local1288, local960, local1293, local952); + local714 = aFloat26; + local685 = aFloat28; + local968 = local960 / 2.0F; + if ((local1293 & 0x1) == 0) { + if (local858 - local854 > local968) { + local858 -= local960; + local866 = 1; + } else if (local854 - local858 > local968) { + local858 += local960; + local866 = 2; + } + if (local714 - local854 > local968) { + local714 -= local960; + local868 = 1; + } else if (local854 - local714 > local968) { + local714 += local960; + local868 = 2; + } + } else { + if (local683 - local856 > local968) { + local683 -= local960; + local866 = 1; + } else if (local856 - local683 > local968) { + local683 += local960; + local866 = 2; + } + if (local685 - local856 > local968) { + local685 -= local960; + local868 = 1; + } else if (local856 - local685 > local968) { + local685 += local960; + local868 = 2; + } + } + } else if (local902 == 2) { + local960 = (float) model.aByteArray28[local833] / 256.0F; + local968 = (float) model.aByteArray33[local833] / 256.0F; + @Pc(1525) int local1525 = model.vertexX[local914] - model.vertexX[local909]; + @Pc(1535) int local1535 = model.vertexY[local914] - model.vertexY[local909]; + @Pc(1545) int local1545 = model.vertexZ[local914] - model.vertexZ[local909]; + @Pc(1555) int local1555 = model.vertexX[local919] - model.vertexX[local909]; + @Pc(1565) int local1565 = model.vertexY[local919] - model.vertexY[local909]; + @Pc(1575) int local1575 = model.vertexZ[local919] - model.vertexZ[local909]; + @Pc(1583) int local1583 = local1535 * local1575 - local1565 * local1545; + @Pc(1591) int local1591 = local1545 * local1555 - local1575 * local1525; + @Pc(1599) int local1599 = local1525 * local1565 - local1555 * local1535; + local1048 = 64.0F / (float) (model.texturesScaleX[local833] & 0xFFFF); + local1056 = 64.0F / (float) (model.texturesScaleY[local833] & 0xFFFF); + local1064 = 64.0F / (float) (model.texturesScaleZ[local833] & 0xFFFF); + local1072 = ((float) local1583 * local1288[0] + (float) local1591 * local1288[1] + (float) local1599 * local1288[2]) / local1048; + local1080 = ((float) local1583 * local1288[3] + (float) local1591 * local1288[4] + (float) local1599 * local1288[5]) / local1056; + local1088 = ((float) local1583 * local1288[6] + (float) local1591 * local1288[7] + (float) local1599 * local1288[8]) / local1064; + local553 = method4092(local1072, local1080, local1088); + method4104(model.vertexX[local909], model.vertexY[local909], model.vertexZ[local909], local1276, local1280, local1284, local553, local1288, local1293, local952, local960, local968); + local854 = aFloat27; + local856 = aFloat24; + method4104(model.vertexX[local914], model.vertexY[local914], model.vertexZ[local914], local1276, local1280, local1284, local553, local1288, local1293, local952, local960, local968); + local858 = aFloat27; + local683 = aFloat24; + method4104(model.vertexX[local919], model.vertexY[local919], model.vertexZ[local919], local1276, local1280, local1284, local553, local1288, local1293, local952, local960, local968); + local714 = aFloat27; + local685 = aFloat24; + } else if (local902 == 3) { + method4101(model.vertexX[local909], model.vertexY[local909], model.vertexZ[local909], local1276, local1280, local1284, local1288, local1293, local952); + local854 = aFloat29; + local856 = aFloat25; + method4101(model.vertexX[local914], model.vertexY[local914], model.vertexZ[local914], local1276, local1280, local1284, local1288, local1293, local952); + local858 = aFloat29; + local683 = aFloat25; + method4101(model.vertexX[local919], model.vertexY[local919], model.vertexZ[local919], local1276, local1280, local1284, local1288, local1293, local952); + local714 = aFloat29; + local685 = aFloat25; + if ((local1293 & 0x1) == 0) { + if (local858 - local854 > 0.5F) { + local858--; + local866 = 1; + } else if (local854 - local858 > 0.5F) { + local858++; + local866 = 2; + } + if (local714 - local854 > 0.5F) { + local714--; + local868 = 1; + } else if (local854 - local714 > 0.5F) { + local714++; + local868 = 2; + } + } else { + if (local683 - local856 > 0.5F) { + local683--; + local866 = 1; + } else if (local856 - local683 > 0.5F) { + local683++; + local866 = 2; + } + if (local685 - local856 > 0.5F) { + local685--; + local868 = 1; + } else if (local856 - local685 > 0.5F) { + local685++; + local868 = 2; + } + } + } + } + } + } + model.calculateNormals(); + if (model.triangleInfo == null) { + local902 = 0; + } else { + local902 = model.triangleInfo[local810]; + } + if (local902 == 0) { + @Pc(1994) long local1994 = (long) (local833 << 2) + ((long) (local553 << 24) + (long) (local817 << 8) + (long) local844 << 32); + local919 = model.triangleVertexA[local810]; + @Pc(2004) VertexNormal local2004 = model.vertexNormals[local919]; + this.aShortArray77[local439] = this.method4098(model, local919, local1994, local2004.x, local2004.y, local2004.z, local2004.magnitude, local854, local856); + local1280 = model.triangleVertexB[local810]; + @Pc(2033) VertexNormal local2033 = model.vertexNormals[local1280]; + this.aShortArray82[local439] = this.method4098(model, local1280, local1994 + (long) local866, local2033.x, local2033.y, local2033.z, local2033.magnitude, local858, local683); + @Pc(2060) int local2060 = model.triangleVertexC[local810]; + @Pc(2065) VertexNormal local2065 = model.vertexNormals[local2060]; + this.aShortArray83[local439] = this.method4098(model, local2060, local1994 + (long) local868, local2065.x, local2065.y, local2065.z, local2065.magnitude, local714, local685); + } else if (local902 == 1) { + @Pc(2096) TriangleNormal local2096 = model.triangleNormals[local810]; + @Pc(2137) long local2137 = (long) ((local833 << 2) + (local2096.anInt4769 > 0 ? 1024 : 2048) + (local2096.anInt4770 + 256 << 12) + (local2096.anInt4767 + 256 << 22)) + ((long) (local553 << 24) + (long) (local817 << 8) + (long) local844 << 32); + this.aShortArray77[local439] = this.method4098(model, model.triangleVertexA[local810], local2137, local2096.anInt4769, local2096.anInt4770, local2096.anInt4767, 0, local854, local856); + this.aShortArray82[local439] = this.method4098(model, model.triangleVertexB[local810], local2137 + (long) local866, local2096.anInt4769, local2096.anInt4770, local2096.anInt4767, 0, local858, local683); + this.aShortArray83[local439] = this.method4098(model, model.triangleVertexC[local810], local2137 + (long) local868, local2096.anInt4769, local2096.anInt4770, local2096.anInt4767, 0, local714, local685); + } + if (model.triangleTextures == null) { + this.triangleTextures[local439] = -1; + } else { + this.triangleTextures[local439] = model.triangleTextures[local810]; + } + if (this.triangleBones != null) { + this.triangleBones[local439] = (byte) model.triangleBones[local810]; + } + this.triangleColors[local439] = model.triangleColors[local810]; + if (model.triangleAlpha != null) { + this.triangleAlpha[local439] = model.triangleAlpha[local810]; + } + if (model.triangleSources != null) { + this.triangleSources[local439] = model.triangleSources[local810]; + } + } + local439 = 0; + @Pc(2271) short local2271 = -10000; + for (local817 = 0; local817 < this.triangleCount; local817++) { + local822 = this.triangleTextures[local817]; + if (local822 != local2271) { + local439++; + local2271 = local822; + } + } + this.anIntArray463 = new int[local439 + 1]; + local439 = 0; + local2271 = -10000; + for (local817 = 0; local817 < this.triangleCount; local817++) { + local822 = this.triangleTextures[local817]; + if (local822 != local2271) { + this.anIntArray463[local439++] = local817; + local2271 = local822; + } + } + this.anIntArray463[local439] = this.triangleCount; + aLongArray10 = null; + this.aShortArray76 = ArrayUtils.copyOf(this.aShortArray76, this.anInt5296); + this.aShortArray79 = ArrayUtils.copyOf(this.aShortArray79, this.anInt5296); + this.aShortArray85 = ArrayUtils.copyOf(this.aShortArray85, this.anInt5296); + this.aShortArray86 = ArrayUtils.copyOf(this.aShortArray86, this.anInt5296); + this.vertexS = ArrayUtils.copyOf(this.vertexS, this.anInt5296); + this.vertexT = ArrayUtils.copyOf(this.vertexT, this.anInt5296); + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(FFF)I") + public static int method4092(@OriginalArg(0) float arg0, @OriginalArg(1) float arg1, @OriginalArg(2) float arg2) { + @Pc(8) float local8 = arg0 < 0.0F ? -arg0 : arg0; + @Pc(17) float local17 = arg1 < 0.0F ? -arg1 : arg1; + @Pc(26) float local26 = arg2 < 0.0F ? -arg2 : arg2; + if (local17 > local8 && local17 > local26) { + return arg1 > 0.0F ? 0 : 1; + } else if (local26 > local8 && local26 > local17) { + return arg2 > 0.0F ? 2 : 3; + } else if (arg0 > 0.0F) { + return 4; + } else { + return 5; + } + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(IIIIII[FFIF)V") + public static void method4095(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) float[] arg6, @OriginalArg(7) float arg7, @OriginalArg(8) int arg8, @OriginalArg(9) float arg9) { + @Pc(3) int local3 = arg0 - arg3; + @Pc(7) int local7 = arg1 - arg4; + @Pc(11) int local11 = arg2 - arg5; + @Pc(32) float local32 = (float) local3 * arg6[0] + (float) local7 * arg6[1] + (float) local11 * arg6[2]; + @Pc(53) float local53 = (float) local3 * arg6[3] + (float) local7 * arg6[4] + (float) local11 * arg6[5]; + @Pc(74) float local74 = (float) local3 * arg6[6] + (float) local7 * arg6[7] + (float) local11 * arg6[8]; + @Pc(85) float local85 = (float) Math.atan2(local32, local74) / 6.2831855F + 0.5F; + if (arg7 != 1.0F) { + local85 *= arg7; + } + @Pc(99) float local99 = local53 + arg9 + 0.5F; + @Pc(104) float local104; + if (arg8 == 1) { + local104 = local85; + local85 = -local99; + local99 = local104; + } else if (arg8 == 2) { + local85 = -local85; + local99 = -local99; + } else if (arg8 == 3) { + local104 = local85; + local85 = local99; + local99 = -local104; + } + aFloat26 = local85; + aFloat28 = local99; + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(ISIB)I") + public static int method4096(@OriginalArg(0) int arg0, @OriginalArg(1) short arg1, @OriginalArg(2) int arg2, @OriginalArg(3) byte arg3) { + @Pc(5) int local5 = Rasteriser.palette[ColorUtils.multiplyLightness2(arg0, arg2)]; + if (arg1 != -1) { + @Pc(15) int local15 = Rasteriser.textureProvider.method3238(arg1 & 0xFFFF); + @Pc(21) int local21; + @Pc(44) int local44; + if (local15 != 0) { + if (arg2 < 0) { + local21 = 0; + } else if (arg2 > 127) { + local21 = 16777215; + } else { + local21 = arg2 * 131586; + } + if (local15 == 256) { + local5 = local21; + } else { + local44 = 256 - local15; + local5 = ((local21 & 0xFF00FF) * local15 + (local5 & 0xFF00FF) * local44 & 0xFF00FF00) + ((local21 & 0xFF00) * local15 + (local5 & 0xFF00) * local44 & 0xFF0000) >> 8; + } + } + local21 = Rasteriser.textureProvider.method3229(arg1 & 0xFFFF); + if (local21 != 0) { + local21 += 256; + @Pc(92) int local92 = (local5 >> 16 & 0xFF) * local21; + if (local92 > 65535) { + local92 = 65535; + } + local44 = (local5 >> 8 & 0xFF) * local21; + if (local44 > 65535) { + local44 = 65535; + } + @Pc(116) int local116 = (local5 & 0xFF) * local21; + if (local116 > 65535) { + local116 = 65535; + } + local5 = ((local92 & 0xFF00) << 8) + (local44 & 0xFF00) + (local116 >> 8); + } + } + return (local5 << 8) + (255 - (arg3 & 0xFF)); + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(IIIIFFF)[F") + public static float[] method4097(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) float arg4, @OriginalArg(5) float arg5, @OriginalArg(6) float arg6) { + @Pc(2) float[] local2 = new float[9]; + @Pc(5) float[] local5 = new float[9]; + @Pc(13) float local13 = (float) Math.cos((float) arg3 * 0.024543693F); + @Pc(21) float local21 = (float) Math.sin((float) arg3 * 0.024543693F); + local2[0] = local13; + local2[1] = 0.0F; + local2[2] = local21; + local2[3] = 0.0F; + local2[4] = 1.0F; + local2[5] = 0.0F; + local2[6] = -local21; + local2[7] = 0.0F; + local2[8] = local13; + @Pc(65) float[] local65 = new float[9]; + @Pc(67) float local67 = 1.0F; + @Pc(69) float local69 = 0.0F; + @Pc(74) float local74 = (float) arg1 / 32767.0F; + @Pc(84) float local84 = -((float) Math.sqrt(1.0F - local74 * local74)); + @Pc(88) float local88 = 1.0F - local74; + @Pc(99) float local99 = (float) Math.sqrt(arg0 * arg0 + arg2 * arg2); + if (local99 == 0.0F && local74 == 0.0F) { + local5 = local2; + } else { + if (local99 != 0.0F) { + local67 = (float) -arg2 / local99; + local69 = (float) arg0 / local99; + } + local65[0] = local74 + local67 * local67 * local88; + local65[1] = local69 * local84; + local65[2] = local69 * local67 * local88; + local65[3] = -local69 * local84; + local65[4] = local74; + local65[5] = local67 * local84; + local65[6] = local67 * local69 * local88; + local65[7] = -local67 * local84; + local65[8] = local74 + local69 * local69 * local88; + local5[0] = local2[0] * local65[0] + local2[1] * local65[3] + local2[2] * local65[6]; + local5[1] = local2[0] * local65[1] + local2[1] * local65[4] + local2[2] * local65[7]; + local5[2] = local2[0] * local65[2] + local2[1] * local65[5] + local2[2] * local65[8]; + local5[3] = local2[3] * local65[0] + local2[4] * local65[3] + local2[5] * local65[6]; + local5[4] = local2[3] * local65[1] + local2[4] * local65[4] + local2[5] * local65[7]; + local5[5] = local2[3] * local65[2] + local2[4] * local65[5] + local2[5] * local65[8]; + local5[6] = local2[6] * local65[0] + local2[7] * local65[3] + local2[8] * local65[6]; + local5[7] = local2[6] * local65[1] + local2[7] * local65[4] + local2[8] * local65[7]; + local5[8] = local2[6] * local65[2] + local2[7] * local65[5] + local2[8] * local65[8]; + } + local5[0] *= arg4; + local5[1] *= arg4; + local5[2] *= arg4; + local5[3] *= arg5; + local5[4] *= arg5; + local5[5] *= arg5; + local5[6] *= arg6; + local5[7] *= arg6; + local5[8] *= arg6; + return local5; + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(IIIIII[FIF)V") + public static void method4101(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) float[] arg6, @OriginalArg(7) int arg7, @OriginalArg(8) float arg8) { + @Pc(3) int local3 = arg0 - arg3; + @Pc(7) int local7 = arg1 - arg4; + @Pc(11) int local11 = arg2 - arg5; + @Pc(32) float local32 = (float) local3 * arg6[0] + (float) local7 * arg6[1] + (float) local11 * arg6[2]; + @Pc(53) float local53 = (float) local3 * arg6[3] + (float) local7 * arg6[4] + (float) local11 * arg6[5]; + @Pc(74) float local74 = (float) local3 * arg6[6] + (float) local7 * arg6[7] + (float) local11 * arg6[8]; + @Pc(89) float local89 = (float) Math.sqrt(local32 * local32 + local53 * local53 + local74 * local74); + @Pc(100) float local100 = (float) Math.atan2(local32, local74) / 6.2831855F + 0.5F; + @Pc(113) float local113 = (float) Math.asin(local53 / local89) / 3.1415927F + arg8 + 0.5F; + @Pc(118) float local118; + if (arg7 == 1) { + local118 = local100; + local100 = -local113; + local113 = local118; + } else if (arg7 == 2) { + local100 = -local100; + local113 = -local113; + } else if (arg7 == 3) { + local118 = local100; + local100 = local113; + local113 = -local118; + } + aFloat29 = local100; + aFloat25 = local113; + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(IIIIIII[FIFFF)V") + public static void method4104(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) float[] arg7, @OriginalArg(8) int arg8, @OriginalArg(9) float arg9, @OriginalArg(10) float arg10, @OriginalArg(11) float arg11) { + @Pc(3) int local3 = arg0 - arg3; + @Pc(7) int local7 = arg1 - arg4; + @Pc(11) int local11 = arg2 - arg5; + @Pc(32) float local32 = (float) local3 * arg7[0] + (float) local7 * arg7[1] + (float) local11 * arg7[2]; + @Pc(53) float local53 = (float) local3 * arg7[3] + (float) local7 * arg7[4] + (float) local11 * arg7[5]; + @Pc(74) float local74 = (float) local3 * arg7[6] + (float) local7 * arg7[7] + (float) local11 * arg7[8]; + @Pc(82) float local82; + @Pc(89) float local89; + if (arg6 == 0) { + local82 = local32 + arg9 + 0.5F; + local89 = arg11 + 0.5F - local74; + } else if (arg6 == 1) { + local82 = local32 + arg9 + 0.5F; + local89 = local74 + arg11 + 0.5F; + } else if (arg6 == 2) { + local82 = arg9 + 0.5F - local32; + local89 = arg10 + 0.5F - local53; + } else if (arg6 == 3) { + local82 = local32 + arg9 + 0.5F; + local89 = arg10 + 0.5F - local53; + } else if (arg6 == 4) { + local82 = local74 + arg11 + 0.5F; + local89 = arg10 + 0.5F - local53; + } else { + local82 = arg11 + 0.5F - local74; + local89 = arg10 + 0.5F - local53; + } + @Pc(177) float local177; + if (arg8 == 1) { + local177 = local82; + local82 = -local89; + local89 = local177; + } else if (arg8 == 2) { + local82 = -local82; + local89 = -local89; + } else if (arg8 == 3) { + local177 = local82; + local82 = local89; + local89 = -local177; + } + aFloat27 = local82; + aFloat24 = local89; + } + + @OriginalMember(owner = "client!td", name = "v", descriptor = "()V") + public static void method4120() { + aClass8_Sub1_Sub1_1 = new GlModel(); + aClass8_Sub1_Sub1_2 = new GlModel(); + aClass8_Sub1_Sub1_3 = new GlModel(); + aClass8_Sub1_Sub1_4 = new GlModel(); + aClass8_Sub1_Sub1_5 = new GlModel(); + aClass8_Sub1_Sub1_6 = new GlModel(); + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(ZZZ)Lclient!ak;") + @Override + public final Model method4560(@OriginalArg(0) boolean arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) boolean arg2) { + return this.method4114(arg0, arg1, arg2, aClass8_Sub1_Sub1_4, aClass8_Sub1_Sub1_3); + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(IIIIIIIIJILclient!ga;)V") + @Override + public final void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) long arg8, @OriginalArg(9) int arg9, @OriginalArg(10) ParticleSystem arg10) { + if (this.anInt5296 == 0) { + return; + } + if (!this.bounds.valid) { + this.calculateBounds(); + } + @Pc(13) short local13 = this.bounds.cylinderRadius; + @Pc(17) short local17 = this.bounds.minY; + @Pc(21) short local21 = this.bounds.maxY; + @Pc(31) int local31 = arg7 * arg4 - arg5 * arg3 >> 16; + @Pc(41) int local41 = arg6 * arg1 + local31 * arg2 >> 16; + @Pc(53) int local53 = local41 + (local13 * arg2 + local21 * arg1 >> 16); + if (local53 <= 50) { + return; + } + @Pc(70) int local70 = local41 + (-local13 * arg2 + local17 * arg1 >> 16); + if (local70 >= GlobalConfig.VIEW_DISTANCE) { + return; + } + @Pc(84) int local84 = arg7 * arg3 + arg5 * arg4 >> 16; + @Pc(90) int local90 = local84 + local13 << 9; + if (local90 / local53 <= Rasteriser.screenLowerX) { + return; + } + @Pc(102) int local102 = local84 - local13 << 9; + if (local102 / local53 >= Rasteriser.screenUpperX) { + return; + } + @Pc(118) int local118 = arg6 * arg2 - local31 * arg1 >> 16; + @Pc(132) int local132 = local118 + (local13 * arg1 + local21 * arg2 >> 16) << 9; + if (local132 / local53 <= Rasteriser.screenLowerY) { + return; + } + @Pc(153) int local153 = local118 + (-local13 * arg1 + local17 * arg2 >> 16) << 9; + if (local153 / local53 >= Rasteriser.screenUpperY) { + return; + } + @Pc(161) int local161 = 0; + @Pc(163) int local163 = 0; + if (arg0 != 0) { + local161 = MathUtils.sin[arg0]; + local163 = MathUtils.cos[arg0]; + } + if (arg8 > 0L && RawModel.allowInput && local70 > 0) { + @Pc(187) int local187; + @Pc(191) int local191; + if (local84 > 0) { + local187 = local102 / local53; + local191 = local90 / local70; + } else { + local187 = local102 / local70; + local191 = local90 / local53; + } + @Pc(206) int local206; + @Pc(210) int local210; + if (local118 > 0) { + local206 = local153 / local53; + local210 = local132 / local70; + } else { + local206 = local153 / local70; + local210 = local132 / local53; + } + if (anInt3582 >= local187 && anInt3582 <= local191 && RawModel.anInt1053 >= local206 && RawModel.anInt1053 <= local210) { + local187 = 999999; + local191 = -999999; + local206 = 999999; + local210 = -999999; + @Pc(243) short local243 = this.bounds.minX; + @Pc(247) short local247 = this.bounds.maxX; + @Pc(251) short local251 = this.bounds.minZ; + @Pc(255) short local255 = this.bounds.maxZ; + @Pc(290) int[] local290 = new int[]{local243, local247, local243, local247, local243, local247, local243, local247}; + @Pc(325) int[] local325 = new int[]{local251, local251, local255, local255, local251, local251, local255, local255}; + @Pc(360) int[] local360 = new int[]{local17, local17, local17, local17, local21, local21, local21, local21}; + @Pc(362) int local362; + @Pc(369) int local369; + @Pc(373) int local373; + @Pc(377) int local377; + @Pc(389) int local389; + @Pc(465) int local465; + @Pc(471) int local471; + for (local362 = 0; local362 < 8; local362++) { + local369 = local290[local362]; + local373 = local360[local362]; + local377 = local325[local362]; + if (arg0 != 0) { + local389 = local377 * local161 + local369 * local163 >> 16; + local377 = local377 * local163 - local369 * local161 >> 16; + local369 = local389; + } + local369 += arg5; + local373 += arg6; + local377 += arg7; + local389 = local377 * arg3 + local369 * arg4 >> 16; + local377 = local377 * arg4 - local369 * arg3 >> 16; + local369 = local389; + local389 = local373 * arg2 - local377 * arg1 >> 16; + local377 = local373 * arg1 + local377 * arg2 >> 16; + if (local377 > 0) { + local465 = (local369 << 9) / local377; + local471 = (local389 << 9) / local377; + if (local465 < local187) { + local187 = local465; + } + if (local465 > local191) { + local191 = local465; + } + if (local471 < local206) { + local206 = local471; + } + if (local471 > local210) { + local210 = local471; + } + } + } + if (anInt3582 >= local187 && anInt3582 <= local191 && RawModel.anInt1053 >= local206 && RawModel.anInt1053 <= local210) { + if (this.pickable) { + Model.aLongArray11[MiniMenu.anInt7++] = arg8; + } else { + if (anIntArray468.length < this.anInt5296) { + anIntArray468 = new int[this.anInt5296]; + anIntArray467 = new int[this.anInt5296]; + } + local362 = 0; + label118: + while (true) { + if (local362 >= this.vertexCount) { + local362 = 0; + while (true) { + if (local362 >= this.triangleCount) { + break label118; + } + @Pc(698) short local698 = this.aShortArray77[local362]; + @Pc(703) short local703 = this.aShortArray82[local362]; + @Pc(708) short local708 = this.aShortArray83[local362]; + if (this.method4118(anInt3582, RawModel.anInt1053, anIntArray467[local698], anIntArray467[local703], anIntArray467[local708], anIntArray468[local698], anIntArray468[local703], anIntArray468[local708])) { + Model.aLongArray11[MiniMenu.anInt7++] = arg8; + break label118; + } + local362++; + } + } + local369 = this.vertexX[local362]; + local373 = this.vertexY[local362]; + local377 = this.vertexZ[local362]; + if (arg0 != 0) { + local389 = local377 * local161 + local369 * local163 >> 16; + local377 = local377 * local163 - local369 * local161 >> 16; + local369 = local389; + } + local369 += arg5; + local373 += arg6; + local377 += arg7; + local389 = local377 * arg3 + local369 * arg4 >> 16; + local377 = local377 * arg4 - local369 * arg3 >> 16; + local369 = local389; + local389 = local373 * arg2 - local377 * arg1 >> 16; + local377 = local373 * arg1 + local377 * arg2 >> 16; + if (local377 < 50) { + break; + } + local465 = (local369 << 9) / local377; + local471 = (local389 << 9) / local377; + @Pc(652) int local652 = this.anIntArray462[local362]; + @Pc(659) int local659 = this.anIntArray462[local362 + 1]; + for (@Pc(661) int local661 = local652; local661 < local659; local661++) { + @Pc(671) int local671 = this.aShortArray81[local661] - 1; + if (local671 == -1) { + break; + } + anIntArray468[local671] = local465; + anIntArray467[local671] = local471; + } + local362++; + } + } + } + } + } + @Pc(744) GL2 gl = GlRenderer.gl; + gl.glPushMatrix(); + gl.glTranslatef((float) arg5, (float) arg6, (float) arg7); + gl.glRotatef((float) arg0 * 0.17578125F, 0.0F, 1.0F, 0.0F); + this.method4121(); + gl.glRotatef((float) -arg0 * 0.17578125F, 0.0F, 1.0F, 0.0F); + gl.glTranslatef((float) -arg5, (float) -arg6, (float) -arg7); + gl.glPopMatrix(); + } + + @OriginalMember(owner = "client!td", name = "m", descriptor = "()V") + public final void method4093() { + if (this.aShortArray76 == null) { + this.method4578(); + return; + } + @Pc(7) int local7; + for (local7 = 0; local7 < this.vertexCount; local7++) { + @Pc(16) int local16 = this.vertexZ[local7]; + this.vertexZ[local7] = this.vertexX[local7]; + this.vertexX[local7] = -local16; + } + for (local7 = 0; local7 < this.anInt5296; local7++) { + @Pc(43) short local43 = this.aShortArray85[local7]; + this.aShortArray85[local7] = this.aShortArray76[local7]; + this.aShortArray76[local7] = (short) -local43; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + if (this.normalsBuffer != null) { + this.normalsBuffer.valid = false; + } + } + + @OriginalMember(owner = "client!td", name = "n", descriptor = "()I") + public final int method4094() { + return this.aShort29; + } + + @OriginalMember(owner = "client!td", name = "c", descriptor = "(I)V") + @Override + public final void rotateZ(@OriginalArg(0) int arg0) { + @Pc(3) int local3 = MathUtils.sin[arg0]; + @Pc(7) int local7 = MathUtils.cos[arg0]; + for (@Pc(9) int local9 = 0; local9 < this.vertexCount; local9++) { + @Pc(29) int local29 = this.vertexY[local9] * local3 + this.vertexX[local9] * local7 >> 16; + this.vertexY[local9] = this.vertexY[local9] * local7 - this.vertexX[local9] * local3 >> 16; + this.vertexX[local9] = local29; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + } + + @OriginalMember(owner = "client!td", name = "g", descriptor = "()I") + @Override + public final int getMaxX() { + if (!this.bounds.valid) { + this.calculateBounds(); + } + return this.bounds.maxX; + } + + @OriginalMember(owner = "client!td", name = "c", descriptor = "()I") + @Override + public final int getMaxZ() { + if (!this.bounds.valid) { + this.calculateBounds(); + } + return this.bounds.maxZ; + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "()Z") + @Override + public final boolean method4543() { + return this.aBoolean259 && this.vertexX != null && this.aShortArray76 != null; + } + + @OriginalMember(owner = "client!td", name = "k", descriptor = "()I") + @Override + public final int getMinZ() { + if (!this.bounds.valid) { + this.calculateBounds(); + } + return this.bounds.minZ; + } + + @OriginalMember(owner = "client!td", name = "c", descriptor = "(III)V") + @Override + public final void translate(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + this.vertexX[local1] += arg0; + this.vertexY[local1] += arg1; + this.vertexZ[local1] += arg2; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + } + + @OriginalMember(owner = "client!td", name = "b", descriptor = "(ZZZ)Lclient!ak;") + @Override + public final Model method4568(@OriginalArg(0) boolean arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) boolean arg2) { + return this.method4114(arg0, arg1, arg2, aClass8_Sub1_Sub1_6, aClass8_Sub1_Sub1_5); + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(Lclient!th;IIIZ)V") + @Override + public final void method4544(@OriginalArg(0) Entity arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) boolean arg4) { + @Pc(2) GlModel local2 = (GlModel) arg0; + if (this.triangleCount == 0 || local2.triangleCount == 0) { + return; + } + @Pc(12) int local12 = local2.vertexCount; + @Pc(15) int[] local15 = local2.vertexX; + @Pc(18) int[] local18 = local2.vertexY; + @Pc(21) int[] local21 = local2.vertexZ; + @Pc(24) short[] local24 = local2.aShortArray76; + @Pc(27) short[] local27 = local2.aShortArray79; + @Pc(30) short[] local30 = local2.aShortArray85; + @Pc(33) short[] local33 = local2.aShortArray86; + @Pc(40) short[] local40; + @Pc(44) short[] local44; + @Pc(48) short[] local48; + @Pc(52) short[] local52; + if (this.aClass23_1 == null) { + local40 = null; + local44 = null; + local48 = null; + local52 = null; + } else { + local40 = this.aClass23_1.aShortArray8; + local44 = this.aClass23_1.aShortArray10; + local48 = this.aClass23_1.aShortArray9; + local52 = this.aClass23_1.aShortArray7; + } + @Pc(68) short[] local68; + @Pc(72) short[] local72; + @Pc(76) short[] local76; + @Pc(80) short[] local80; + if (local2.aClass23_1 == null) { + local68 = null; + local72 = null; + local76 = null; + local80 = null; + } else { + local68 = local2.aClass23_1.aShortArray8; + local72 = local2.aClass23_1.aShortArray10; + local76 = local2.aClass23_1.aShortArray9; + local80 = local2.aClass23_1.aShortArray7; + } + @Pc(92) int[] local92 = local2.anIntArray462; + @Pc(95) short[] local95 = local2.aShortArray81; + if (!local2.bounds.valid) { + local2.calculateBounds(); + } + @Pc(105) short local105 = local2.bounds.minY; + @Pc(109) short local109 = local2.bounds.maxY; + @Pc(113) short local113 = local2.bounds.minX; + @Pc(117) short local117 = local2.bounds.maxX; + @Pc(121) short local121 = local2.bounds.minZ; + @Pc(125) short local125 = local2.bounds.maxZ; + for (@Pc(127) int local127 = 0; local127 < this.vertexCount; local127++) { + @Pc(138) int local138 = this.vertexY[local127] - arg2; + if (local138 >= local105 && local138 <= local109) { + @Pc(152) int local152 = this.vertexX[local127] - arg1; + if (local152 >= local113 && local152 <= local117) { + @Pc(166) int local166 = this.vertexZ[local127] - arg3; + if (local166 >= local121 && local166 <= local125) { + @Pc(175) int local175 = -1; + @Pc(180) int local180 = this.anIntArray462[local127]; + @Pc(187) int local187 = this.anIntArray462[local127 + 1]; + @Pc(189) int local189; + for (local189 = local180; local189 < local187; local189++) { + local175 = this.aShortArray81[local189] - 1; + if (local175 == -1 || this.aShortArray86[local175] != 0) { + break; + } + } + if (local175 != -1) { + for (local189 = 0; local189 < local12; local189++) { + if (local152 == local15[local189] && local166 == local21[local189] && local138 == local18[local189]) { + @Pc(237) int local237 = -1; + local180 = local92[local189]; + local187 = local92[local189 + 1]; + for (@Pc(249) int local249 = local180; local249 < local187; local249++) { + local237 = local95[local249] - 1; + if (local237 == -1 || local33[local237] != 0) { + break; + } + } + if (local237 != -1) { + if (local40 == null) { + this.aClass23_1 = new GlModel_Class23(); + local40 = this.aClass23_1.aShortArray8 = ArrayUtils.copyOfNullable(this.aShortArray76); + local44 = this.aClass23_1.aShortArray10 = ArrayUtils.copyOfNullable(this.aShortArray79); + local48 = this.aClass23_1.aShortArray9 = ArrayUtils.copyOfNullable(this.aShortArray85); + local52 = this.aClass23_1.aShortArray7 = ArrayUtils.copyOfNullable(this.aShortArray86); + } + if (local68 == null) { + @Pc(325) GlModel_Class23 local325 = local2.aClass23_1 = new GlModel_Class23(); + local68 = local325.aShortArray8 = ArrayUtils.copyOfNullable(local24); + local72 = local325.aShortArray10 = ArrayUtils.copyOfNullable(local27); + local76 = local325.aShortArray9 = ArrayUtils.copyOfNullable(local30); + local80 = local325.aShortArray7 = ArrayUtils.copyOfNullable(local33); + } + @Pc(358) short local358 = this.aShortArray76[local175]; + @Pc(363) short local363 = this.aShortArray79[local175]; + @Pc(368) short local368 = this.aShortArray85[local175]; + @Pc(373) short local373 = this.aShortArray86[local175]; + local180 = local92[local189]; + local187 = local92[local189 + 1]; + @Pc(385) int local385; + @Pc(394) int local394; + for (local385 = local180; local385 < local187; local385++) { + local394 = local95[local385] - 1; + if (local394 == -1) { + break; + } + if (local80[local394] != 0) { + local68[local394] += local358; + local72[local394] += local363; + local76[local394] += local368; + local80[local394] += local373; + } + } + local358 = local24[local237]; + local363 = local27[local237]; + local368 = local30[local237]; + local373 = local33[local237]; + local180 = this.anIntArray462[local127]; + local187 = this.anIntArray462[local127 + 1]; + for (local385 = local180; local385 < local187; local385++) { + local394 = this.aShortArray81[local385] - 1; + if (local394 == -1) { + break; + } + if (local52[local394] != 0) { + local40[local394] += local358; + local44[local394] += local363; + local48[local394] += local368; + local52[local394] += local373; + } + } + } + } + } + } + } + } + } + } + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(IIIIIIIJ)V") + @Override + public final void setCamera(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) long arg6) { + if (this.anInt5296 == 0) { + return; + } + @Pc(5) GL2 gl = GlRenderer.gl; + gl.glPushMatrix(); + if (arg2 != 0) { + gl.glRotatef((float) arg2 * 0.17578125F, 1.0F, 0.0F, 0.0F); + } + gl.glTranslatef((float) arg3, (float) arg4, (float) arg5); + if (arg0 != 0) { + gl.glRotatef((float) arg0 * 0.17578125F, 0.0F, 1.0F, 0.0F); + } + if (arg1 != 0) { + gl.glRotatef((float) -arg1 * 0.17578125F, 0.0F, 0.0F, 1.0F); + } + this.method4121(); + gl.glPopMatrix(); + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(Lclient!gb;IJIIIIFF)S") + private short method4098(@OriginalArg(0) RawModel arg0, @OriginalArg(1) int arg1, @OriginalArg(2) long arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) float arg7, @OriginalArg(8) float arg8) { + @Pc(4) int local4 = this.anIntArray462[arg1]; + @Pc(11) int local11 = this.anIntArray462[arg1 + 1]; + @Pc(13) int local13 = 0; + for (@Pc(15) int local15 = local4; local15 < local11; local15++) { + @Pc(23) short local23 = this.aShortArray81[local15]; + if (local23 == 0) { + local13 = local15; + break; + } + if (aLongArray10[local15] == arg2) { + return (short) (local23 - 1); + } + } + this.aShortArray81[local13] = (short) (this.anInt5296 + 1); + aLongArray10[local13] = arg2; + this.aShortArray76[this.anInt5296] = (short) arg3; + this.aShortArray79[this.anInt5296] = (short) arg4; + this.aShortArray85[this.anInt5296] = (short) arg5; + this.aShortArray86[this.anInt5296] = (short) arg6; + this.vertexS[this.anInt5296] = arg7; + this.vertexT[this.anInt5296] = arg8; + return (short) this.anInt5296++; + } + + @OriginalMember(owner = "client!td", name = "b", descriptor = "(I)V") + @Override + public final void rotateY(@OriginalArg(0) int arg0) { + @Pc(3) int local3 = MathUtils.sin[arg0]; + @Pc(7) int local7 = MathUtils.cos[arg0]; + for (@Pc(9) int local9 = 0; local9 < this.vertexCount; local9++) { + @Pc(29) int local29 = this.vertexZ[local9] * local3 + this.vertexX[local9] * local7 >> 16; + this.vertexZ[local9] = this.vertexZ[local9] * local7 - this.vertexX[local9] * local3 >> 16; + this.vertexX[local9] = local29; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(I[IIIIZI[I)V") + @Override + protected final void method4577(@OriginalArg(0) int arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) boolean arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int[] arg7) { + @Pc(2) int local2 = arg1.length; + @Pc(18) int local18; + @Pc(26) int local26; + @Pc(45) int local45; + @Pc(53) int local53; + @Pc(33) int local33; + if (arg0 == 0) { + arg2 <<= 0x4; + arg3 <<= 0x4; + arg4 <<= 0x4; + local18 = 0; + anInt5298 = 0; + anInt5300 = 0; + anInt5299 = 0; + for (local26 = 0; local26 < local2; local26++) { + local33 = arg1[local26]; + if (local33 < this.boneVertices.length) { + @Pc(43) int[] local43 = this.boneVertices[local33]; + for (local45 = 0; local45 < local43.length; local45++) { + local53 = local43[local45]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local53]) != 0) { + anInt5298 += this.vertexX[local53]; + anInt5300 += this.vertexY[local53]; + anInt5299 += this.vertexZ[local53]; + local18++; + } + } + } + } + if (local18 > 0) { + anInt5298 = anInt5298 / local18 + arg2; + anInt5300 = anInt5300 / local18 + arg3; + anInt5299 = anInt5299 / local18 + arg4; + aBoolean260 = true; + } else { + anInt5298 = arg2; + anInt5300 = arg3; + anInt5299 = arg4; + } + return; + } + @Pc(228) int[] local228; + @Pc(230) int local230; + if (arg0 == 1) { + if (arg7 != null) { + local18 = arg7[0] * arg2 + arg7[1] * arg3 + arg7[2] * arg4 + 16384 >> 15; + local26 = arg7[3] * arg2 + arg7[4] * arg3 + arg7[5] * arg4 + 16384 >> 15; + local33 = arg7[6] * arg2 + arg7[7] * arg3 + arg7[8] * arg4 + 16384 >> 15; + arg2 = local18; + arg3 = local26; + arg4 = local33; + } + arg2 <<= 0x4; + arg3 <<= 0x4; + arg4 <<= 0x4; + for (local18 = 0; local18 < local2; local18++) { + local26 = arg1[local18]; + if (local26 < this.boneVertices.length) { + local228 = this.boneVertices[local26]; + for (local230 = 0; local230 < local228.length; local230++) { + local45 = local228[local230]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local45]) != 0) { + this.vertexX[local45] += arg2; + this.vertexY[local45] += arg3; + this.vertexZ[local45] += arg4; + } + } + } + } + return; + } + @Pc(343) int local343; + @Pc(365) int local365; + @Pc(387) int local387; + @Pc(428) int local428; + @Pc(434) int local434; + @Pc(440) int local440; + @Pc(446) int local446; + @Pc(454) int local454; + @Pc(462) int local462; + @Pc(615) int local615; + @Pc(640) int local640; + @Pc(644) int local644; + @Pc(652) int local652; + @Pc(657) int local657; + @Pc(662) int local662; + @Pc(667) int local667; + @Pc(789) int[] local789; + @Pc(791) int local791; + @Pc(796) int local796; + @Pc(801) int local801; + @Pc(803) int local803; + @Pc(929) int local929; + if (arg0 == 2) { + if (arg7 == null) { + for (local18 = 0; local18 < local2; local18++) { + local26 = arg1[local18]; + if (local26 < this.boneVertices.length) { + local228 = this.boneVertices[local26]; + for (local230 = 0; local230 < local228.length; local230++) { + local45 = local228[local230]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local45]) != 0) { + this.vertexX[local45] -= anInt5298; + this.vertexY[local45] -= anInt5300; + this.vertexZ[local45] -= anInt5299; + if (arg4 != 0) { + local53 = MathUtils.sin[arg4]; + local343 = MathUtils.cos[arg4]; + local365 = this.vertexY[local45] * local53 + this.vertexX[local45] * local343 + 32767 >> 16; + this.vertexY[local45] = this.vertexY[local45] * local343 + 32767 - this.vertexX[local45] * local53 >> 16; + this.vertexX[local45] = local365; + } + if (arg2 != 0) { + local53 = MathUtils.sin[arg2]; + local343 = MathUtils.cos[arg2]; + local365 = this.vertexY[local45] * local343 + 32767 - this.vertexZ[local45] * local53 >> 16; + this.vertexZ[local45] = this.vertexY[local45] * local53 + this.vertexZ[local45] * local343 + 32767 >> 16; + this.vertexY[local45] = local365; + } + if (arg3 != 0) { + local53 = MathUtils.sin[arg3]; + local343 = MathUtils.cos[arg3]; + local365 = this.vertexZ[local45] * local53 + this.vertexX[local45] * local343 + 32767 >> 16; + this.vertexZ[local45] = this.vertexZ[local45] * local343 + 32767 - this.vertexX[local45] * local53 >> 16; + this.vertexX[local45] = local365; + } + this.vertexX[local45] += anInt5298; + this.vertexY[local45] += anInt5300; + this.vertexZ[local45] += anInt5299; + } + } + } + } + if (arg5 && this.aShortArray76 != null) { + for (local18 = 0; local18 < local2; local18++) { + local26 = arg1[local18]; + if (local26 < this.boneVertices.length) { + local228 = this.boneVertices[local26]; + for (local230 = 0; local230 < local228.length; local230++) { + local45 = local228[local230]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local45]) != 0) { + local53 = this.anIntArray462[local45]; + local343 = this.anIntArray462[local45 + 1]; + for (local365 = local53; local365 < local343; local365++) { + local387 = this.aShortArray81[local365] - 1; + if (local387 == -1) { + break; + } + if (arg4 != 0) { + local428 = MathUtils.sin[arg4]; + local434 = MathUtils.cos[arg4]; + local440 = this.aShortArray79[local387] * local428 + this.aShortArray76[local387] * local434 + 32767 >> 16; + this.aShortArray79[local387] = (short) (this.aShortArray79[local387] * local434 + 32767 - this.aShortArray76[local387] * local428 >> 16); + this.aShortArray76[local387] = (short) local440; + } + if (arg2 != 0) { + local428 = MathUtils.sin[arg2]; + local434 = MathUtils.cos[arg2]; + local440 = this.aShortArray79[local387] * local434 + 32767 - this.aShortArray85[local387] * local428 >> 16; + this.aShortArray85[local387] = (short) (this.aShortArray79[local387] * local428 + this.aShortArray85[local387] * local434 + 32767 >> 16); + this.aShortArray79[local387] = (short) local440; + } + if (arg3 != 0) { + local428 = MathUtils.sin[arg3]; + local434 = MathUtils.cos[arg3]; + local440 = this.aShortArray85[local387] * local428 + this.aShortArray76[local387] * local434 + 32767 >> 16; + this.aShortArray85[local387] = (short) (this.aShortArray85[local387] * local434 + 32767 - this.aShortArray76[local387] * local428 >> 16); + this.aShortArray76[local387] = (short) local440; + } + } + } + } + } + } + if (this.normalsBuffer != null) { + this.normalsBuffer.valid = false; + } + } + } else { + local18 = arg7[9] << 4; + local26 = arg7[10] << 4; + local33 = arg7[11] << 4; + local230 = arg7[12] << 4; + local45 = arg7[13] << 4; + local53 = arg7[14] << 4; + if (aBoolean260) { + local343 = arg7[0] * anInt5298 + arg7[3] * anInt5300 + arg7[6] * anInt5299 + 16384 >> 15; + local365 = arg7[1] * anInt5298 + arg7[4] * anInt5300 + arg7[7] * anInt5299 + 16384 >> 15; + local387 = arg7[2] * anInt5298 + arg7[5] * anInt5300 + arg7[8] * anInt5299 + 16384 >> 15; + local343 += local230; + local365 += local45; + local387 += local53; + anInt5298 = local343; + anInt5300 = local365; + anInt5299 = local387; + aBoolean260 = false; + } + @Pc(410) int[] local410 = new int[9]; + local365 = MathUtils.cos[arg2] >> 1; + local387 = MathUtils.sin[arg2] >> 1; + local428 = MathUtils.cos[arg3] >> 1; + local434 = MathUtils.sin[arg3] >> 1; + local440 = MathUtils.cos[arg4] >> 1; + local446 = MathUtils.sin[arg4] >> 1; + local454 = local387 * local440 + 16384 >> 15; + local462 = local387 * local446 + 16384 >> 15; + local410[0] = local428 * local440 + local434 * local462 + 16384 >> 15; + local410[1] = -local428 * local446 + local434 * local454 + 16384 >> 15; + local410[2] = local434 * local365 + 16384 >> 15; + local410[3] = local365 * local446 + 16384 >> 15; + local410[4] = local365 * local440 + 16384 >> 15; + local410[5] = -local387; + local410[6] = -local434 * local440 + local428 * local462 + 16384 >> 15; + local410[7] = local434 * local446 + local428 * local454 + 16384 >> 15; + local410[8] = local428 * local365 + 16384 >> 15; + @Pc(590) int local590 = local410[0] * -anInt5298 + local410[1] * -anInt5300 + local410[2] * -anInt5299 + 16384 >> 15; + local615 = local410[3] * -anInt5298 + local410[4] * -anInt5300 + local410[5] * -anInt5299 + 16384 >> 15; + local640 = local410[6] * -anInt5298 + local410[7] * -anInt5300 + local410[8] * -anInt5299 + 16384 >> 15; + local644 = local590 + anInt5298; + @Pc(648) int local648 = local615 + anInt5300; + local652 = local640 + anInt5299; + @Pc(655) int[] local655 = new int[9]; + for (local657 = 0; local657 < 3; local657++) { + for (local662 = 0; local662 < 3; local662++) { + local667 = 0; + for (@Pc(669) int local669 = 0; local669 < 3; local669++) { + local667 += local410[local657 * 3 + local669] * arg7[local662 * 3 + local669]; + } + local655[local657 * 3 + local662] = local667 + 16384 >> 15; + } + } + local657 = local410[0] * local230 + local410[1] * local45 + local410[2] * local53 + 16384 >> 15; + local662 = local410[3] * local230 + local410[4] * local45 + local410[5] * local53 + 16384 >> 15; + local667 = local410[6] * local230 + local410[7] * local45 + local410[8] * local53 + 16384 >> 15; + local657 += local644; + local662 += local648; + local667 += local652; + local789 = new int[9]; + for (local791 = 0; local791 < 3; local791++) { + for (local796 = 0; local796 < 3; local796++) { + local801 = 0; + for (local803 = 0; local803 < 3; local803++) { + local801 += arg7[local791 * 3 + local803] * local655[local796 + local803 * 3]; + } + local789[local791 * 3 + local796] = local801 + 16384 >> 15; + } + } + local791 = arg7[0] * local657 + arg7[1] * local662 + arg7[2] * local667 + 16384 >> 15; + local796 = arg7[3] * local657 + arg7[4] * local662 + arg7[5] * local667 + 16384 >> 15; + local801 = arg7[6] * local657 + arg7[7] * local662 + arg7[8] * local667 + 16384 >> 15; + local791 += local18; + local796 += local26; + local801 += local33; + for (local803 = 0; local803 < local2; local803++) { + local929 = arg1[local803]; + if (local929 < this.boneVertices.length) { + @Pc(939) int[] local939 = this.boneVertices[local929]; + for (@Pc(941) int local941 = 0; local941 < local939.length; local941++) { + @Pc(949) int local949 = local939[local941]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local949]) != 0) { + @Pc(991) int local991 = local789[0] * this.vertexX[local949] + local789[1] * this.vertexY[local949] + local789[2] * this.vertexZ[local949] + 16384 >> 15; + @Pc(1022) int local1022 = local789[3] * this.vertexX[local949] + local789[4] * this.vertexY[local949] + local789[5] * this.vertexZ[local949] + 16384 >> 15; + @Pc(1053) int local1053 = local789[6] * this.vertexX[local949] + local789[7] * this.vertexY[local949] + local789[8] * this.vertexZ[local949] + 16384 >> 15; + @Pc(1057) int local1057 = local991 + local791; + @Pc(1061) int local1061 = local1022 + local796; + @Pc(1065) int local1065 = local1053 + local801; + this.vertexX[local949] = local1057; + this.vertexY[local949] = local1061; + this.vertexZ[local949] = local1065; + } + } + } + } + } + } else if (arg0 == 3) { + if (arg7 == null) { + for (local18 = 0; local18 < local2; local18++) { + local26 = arg1[local18]; + if (local26 < this.boneVertices.length) { + local228 = this.boneVertices[local26]; + for (local230 = 0; local230 < local228.length; local230++) { + local45 = local228[local230]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local45]) != 0) { + this.vertexX[local45] -= anInt5298; + this.vertexY[local45] -= anInt5300; + this.vertexZ[local45] -= anInt5299; + this.vertexX[local45] = this.vertexX[local45] * arg2 >> 7; + this.vertexY[local45] = this.vertexY[local45] * arg3 >> 7; + this.vertexZ[local45] = this.vertexZ[local45] * arg4 >> 7; + this.vertexX[local45] += anInt5298; + this.vertexY[local45] += anInt5300; + this.vertexZ[local45] += anInt5299; + } + } + } + } + } else { + local18 = arg7[9] << 4; + local26 = arg7[10] << 4; + local33 = arg7[11] << 4; + local230 = arg7[12] << 4; + local45 = arg7[13] << 4; + local53 = arg7[14] << 4; + if (aBoolean260) { + local343 = arg7[0] * anInt5298 + arg7[3] * anInt5300 + arg7[6] * anInt5299 + 16384 >> 15; + local365 = arg7[1] * anInt5298 + arg7[4] * anInt5300 + arg7[7] * anInt5299 + 16384 >> 15; + local387 = arg7[2] * anInt5298 + arg7[5] * anInt5300 + arg7[8] * anInt5299 + 16384 >> 15; + local343 += local230; + local365 += local45; + local387 += local53; + anInt5298 = local343; + anInt5300 = local365; + anInt5299 = local387; + aBoolean260 = false; + } + local343 = arg2 << 15 >> 7; + local365 = arg3 << 15 >> 7; + local387 = arg4 << 15 >> 7; + local428 = local343 * -anInt5298 + 16384 >> 15; + local434 = local365 * -anInt5300 + 16384 >> 15; + local440 = local387 * -anInt5299 + 16384 >> 15; + local446 = local428 + anInt5298; + local454 = local434 + anInt5300; + local462 = local440 + anInt5299; + @Pc(1783) int[] local1783 = new int[]{local343 * arg7[0] + 16384 >> 15, local343 * arg7[3] + 16384 >> 15, local343 * arg7[6] + 16384 >> 15, local365 * arg7[1] + 16384 >> 15, local365 * arg7[4] + 16384 >> 15, local365 * arg7[7] + 16384 >> 15, local387 * arg7[2] + 16384 >> 15, local387 * arg7[5] + 16384 >> 15, local387 * arg7[8] + 16384 >> 15}; + local615 = local343 * local230 + 16384 >> 15; + local640 = local365 * local45 + 16384 >> 15; + local644 = local387 * local53 + 16384 >> 15; + @Pc(1919) int local1919 = local615 + local446; + @Pc(1923) int local1923 = local640 + local454; + @Pc(1927) int local1927 = local644 + local462; + @Pc(1930) int[] local1930 = new int[9]; + @Pc(1937) int local1937; + for (local652 = 0; local652 < 3; local652++) { + for (local1937 = 0; local1937 < 3; local1937++) { + local657 = 0; + for (local662 = 0; local662 < 3; local662++) { + local657 += arg7[local652 * 3 + local662] * local1783[local1937 + local662 * 3]; + } + local1930[local652 * 3 + local1937] = local657 + 16384 >> 15; + } + } + local652 = arg7[0] * local1919 + arg7[1] * local1923 + arg7[2] * local1927 + 16384 >> 15; + local1937 = arg7[3] * local1919 + arg7[4] * local1923 + arg7[5] * local1927 + 16384 >> 15; + local657 = arg7[6] * local1919 + arg7[7] * local1923 + arg7[8] * local1927 + 16384 >> 15; + local652 += local18; + local1937 += local26; + local657 += local33; + for (local662 = 0; local662 < local2; local662++) { + local667 = arg1[local662]; + if (local667 < this.boneVertices.length) { + local789 = this.boneVertices[local667]; + for (local791 = 0; local791 < local789.length; local791++) { + local796 = local789[local791]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local796]) != 0) { + local801 = local1930[0] * this.vertexX[local796] + local1930[1] * this.vertexY[local796] + local1930[2] * this.vertexZ[local796] + 16384 >> 15; + local803 = local1930[3] * this.vertexX[local796] + local1930[4] * this.vertexY[local796] + local1930[5] * this.vertexZ[local796] + 16384 >> 15; + local929 = local1930[6] * this.vertexX[local796] + local1930[7] * this.vertexY[local796] + local1930[8] * this.vertexZ[local796] + 16384 >> 15; + @Pc(2198) int local2198 = local801 + local652; + @Pc(2202) int local2202 = local803 + local1937; + @Pc(2206) int local2206 = local929 + local657; + this.vertexX[local796] = local2198; + this.vertexY[local796] = local2202; + this.vertexZ[local796] = local2206; + } + } + } + } + } + } else if (arg0 == 5) { + if (this.boneTriangles != null && this.triangleAlpha != null) { + for (local18 = 0; local18 < local2; local18++) { + local26 = arg1[local18]; + if (local26 < this.boneTriangles.length) { + local228 = this.boneTriangles[local26]; + for (local230 = 0; local230 < local228.length; local230++) { + local45 = local228[local230]; + if (this.triangleSources == null || (arg6 & this.triangleSources[local45]) != 0) { + local53 = (this.triangleAlpha[local45] & 0xFF) + arg2 * 8; + if (local53 < 0) { + local53 = 0; + } else if (local53 > 255) { + local53 = 255; + } + this.triangleAlpha[local45] = (byte) local53; + } + } + if (local228.length > 0) { + this.colorBuffer.valid = false; + } + } + } + } + } else if (arg0 == 7 && this.boneTriangles != null) { + for (local18 = 0; local18 < local2; local18++) { + local26 = arg1[local18]; + if (local26 < this.boneTriangles.length) { + local228 = this.boneTriangles[local26]; + for (local230 = 0; local230 < local228.length; local230++) { + local45 = local228[local230]; + if (this.triangleSources == null || (arg6 & this.triangleSources[local45]) != 0) { + local53 = this.triangleColors[local45] & 0xFFFF; + local343 = local53 >> 10 & 0x3F; + local365 = local53 >> 7 & 0x7; + local387 = local53 & 0x7F; + @Pc(2518) int local2518 = local343 + arg2 & 0x3F; + local365 += arg3 / 4; + if (local365 < 0) { + local365 = 0; + } else if (local365 > 7) { + local365 = 7; + } + local387 += arg4; + if (local387 < 0) { + local387 = 0; + } else if (local387 > 127) { + local387 = 127; + } + this.triangleColors[local45] = (short) (local2518 << 10 | local365 << 7 | local387); + } + } + if (local228.length > 0) { + this.colorBuffer.valid = false; + } + } + } + } + } + + @OriginalMember(owner = "client!td", name = "b", descriptor = "()I") + @Override + public final int getMinY() { + if (!this.bounds.valid) { + this.calculateBounds(); + } + return this.bounds.minY; + } + + @OriginalMember(owner = "client!td", name = "o", descriptor = "()V") + public final void createBones() { + @Pc(5) int[] local5; + @Pc(7) int local7; + @Pc(24) int local24; + @Pc(9) int local9; + @Pc(20) int local20; + if (this.vertexBones != null) { + local5 = new int[256]; + local7 = 0; + for (local9 = 0; local9 < this.vertexCount; local9++) { + local20 = this.vertexBones[local9] & 0xFF; + local24 = local5[local20]++; + if (local20 > local7) { + local7 = local20; + } + } + this.boneVertices = new int[local7 + 1][]; + for (local9 = 0; local9 <= local7; local9++) { + this.boneVertices[local9] = new int[local5[local9]]; + local5[local9] = 0; + } + local9 = 0; + while (local9 < this.vertexCount) { + local20 = this.vertexBones[local9] & 0xFF; + this.boneVertices[local20][local5[local20]++] = local9++; + } + this.vertexBones = null; + } + if (this.triangleBones == null) { + return; + } + local5 = new int[256]; + local7 = 0; + for (local9 = 0; local9 < this.triangleCount; local9++) { + local20 = this.triangleBones[local9] & 0xFF; + local24 = local5[local20]++; + if (local20 > local7) { + local7 = local20; + } + } + this.boneTriangles = new int[local7 + 1][]; + for (local9 = 0; local9 <= local7; local9++) { + this.boneTriangles[local9] = new int[local5[local9]]; + local5[local9] = 0; + } + local9 = 0; + while (local9 < this.triangleCount) { + local20 = this.triangleBones[local9] & 0xFF; + this.boneTriangles[local20][local5[local20]++] = local9++; + } + this.triangleBones = null; + } + + @OriginalMember(owner = "client!td", name = "e", descriptor = "(I)V") + public final void method4100(@OriginalArg(0) int arg0) { + this.aShort28 = (short) arg0; + if (this.normalsBuffer != null) { + this.normalsBuffer.valid = false; + } + } + + @OriginalMember(owner = "client!td", name = "p", descriptor = "()V") + public final void method4102() { + if (this.aShortArray76 == null) { + this.method4552(); + return; + } + @Pc(7) int local7; + for (local7 = 0; local7 < this.vertexCount; local7++) { + this.vertexX[local7] = -this.vertexX[local7]; + this.vertexZ[local7] = -this.vertexZ[local7]; + } + for (local7 = 0; local7 < this.anInt5296; local7++) { + this.aShortArray76[local7] = (short) -this.aShortArray76[local7]; + this.aShortArray85[local7] = (short) -this.aShortArray85[local7]; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + if (this.normalsBuffer != null) { + this.normalsBuffer.valid = false; + } + } + + @OriginalMember(owner = "client!td", name = "b", descriptor = "(III)V") + @Override + public final void resize(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + this.vertexX[local1] = this.vertexX[local1] * arg0 >> 7; + this.vertexY[local1] = this.vertexY[local1] * arg1 >> 7; + this.vertexZ[local1] = this.vertexZ[local1] * arg2 >> 7; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + } + + @OriginalMember(owner = "client!td", name = "c", descriptor = "(ZZZ)Lclient!ak;") + @Override + public final Model method4572(@OriginalArg(0) boolean arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) boolean arg2) { + return this.method4114(arg0, arg1, arg2, aClass8_Sub1_Sub1_2, aClass8_Sub1_Sub1_1); + } + + @OriginalMember(owner = "client!td", name = "e", descriptor = "()V") + @Override + public final void method4552() { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + this.vertexX[local1] = -this.vertexX[local1]; + this.vertexZ[local1] = -this.vertexZ[local1]; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + } + + @OriginalMember(owner = "client!td", name = "q", descriptor = "()V") + private void method4103() { + if (tempBuffer.data.length < this.anInt5296 * 12) { + tempBuffer = new Buffer((this.anInt5296 + 100) * 12); + } else { + tempBuffer.offset = 0; + } + @Pc(25) int local25; + if (GlRenderer.bigEndian) { + for (local25 = 0; local25 < this.triangleCount; local25++) { + tempBuffer.p4(this.aShortArray77[local25]); + tempBuffer.p4(this.aShortArray82[local25]); + tempBuffer.p4(this.aShortArray83[local25]); + } + } else { + for (local25 = 0; local25 < this.triangleCount; local25++) { + tempBuffer.ip4(this.aShortArray77[local25]); + tempBuffer.ip4(this.aShortArray82[local25]); + tempBuffer.ip4(this.aShortArray83[local25]); + } + } + if (!GlRenderer.arbVboSupported) { + @Pc(115) ByteBuffer local115 = ByteBuffer.allocateDirect(tempBuffer.offset); + local115.put(tempBuffer.data, 0, tempBuffer.offset); + local115.flip(); + this.indexBuffer.valid = true; + this.indexBuffer.buffer = local115; + this.indexBuffer.vbo = null; + return; + } + @Pc(88) GlVertexBufferObject vbo = new GlVertexBufferObject(); + @Pc(95) ByteBuffer buffer = ByteBuffer.wrap(tempBuffer.data, 0, tempBuffer.offset); + vbo.setArrayBuffer(buffer); + this.indexBuffer.valid = true; + this.indexBuffer.buffer = null; + this.indexBuffer.vbo = vbo; + } + + @OriginalMember(owner = "client!td", name = "f", descriptor = "(I)V") + public final void method4105(@OriginalArg(0) int arg0) { + this.aShort29 = (short) arg0; + this.colorBuffer.valid = false; + } + + @OriginalMember(owner = "client!td", name = "d", descriptor = "()Z") + @Override + protected final boolean method4551() { + if (this.boneVertices == null) { + return false; + } + for (@Pc(6) int local6 = 0; local6 < this.vertexCount; local6++) { + this.vertexX[local6] <<= 0x4; + this.vertexY[local6] <<= 0x4; + this.vertexZ[local6] <<= 0x4; + } + anInt5298 = 0; + anInt5300 = 0; + anInt5299 = 0; + return true; + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(SS)V") + public final void method4107(@OriginalArg(0) short arg0, @OriginalArg(1) short arg1) { + @Pc(1) int local1; + for (local1 = 0; local1 < this.triangleCount; local1++) { + if (this.triangleTextures[local1] == arg0) { + this.triangleTextures[local1] = arg1; + } + } + local1 = 0; + @Pc(22) int local22 = 0; + if (arg0 != -1) { + local1 = Rasteriser.textureProvider.method3238(arg0 & 0xFFFF); + local22 = Rasteriser.textureProvider.method3229(arg0 & 0xFFFF); + } + @Pc(41) int local41 = 0; + @Pc(43) int local43 = 0; + if (arg1 != -1) { + local41 = Rasteriser.textureProvider.method3238(arg1 & 0xFFFF); + local43 = Rasteriser.textureProvider.method3229(arg1 & 0xFFFF); + } + if (local1 != local41 || local22 != local43) { + this.colorBuffer.valid = false; + } + } + + @OriginalMember(owner = "client!td", name = "s", descriptor = "()V") + private void calculateBounds() { + @Pc(1) int minX = 32767; + @Pc(3) int minY = 32767; + @Pc(5) int minZ = 32767; + @Pc(7) int maxX = -32768; + @Pc(9) int maxY = -32768; + @Pc(11) int maxZ = -32768; + @Pc(13) int maxCylinderRadiusSquared = 0; + @Pc(15) int maxSphereRadiusSquared = 0; + for (@Pc(17) int i = 0; i < this.vertexCount; i++) { + @Pc(26) int x = this.vertexX[i]; + @Pc(31) int y = this.vertexY[i]; + @Pc(36) int z = this.vertexZ[i]; + if (x < minX) { + minX = x; + } + if (x > maxX) { + maxX = x; + } + if (y < minY) { + minY = y; + } + if (y > maxY) { + maxY = y; + } + if (z < minZ) { + minZ = z; + } + if (z > maxZ) { + maxZ = z; + } + @Pc(74) int cylinderRadiusSquared = x * x + z * z; + if (cylinderRadiusSquared > maxCylinderRadiusSquared) { + maxCylinderRadiusSquared = cylinderRadiusSquared; + } + int sphereRadiusSquared = x * x + z * z + y * y; + if (sphereRadiusSquared > maxSphereRadiusSquared) { + maxSphereRadiusSquared = sphereRadiusSquared; + } + } + this.bounds.minX = (short) minX; + this.bounds.maxX = (short) maxX; + this.bounds.minY = (short) minY; + this.bounds.maxY = (short) maxY; + this.bounds.minZ = (short) minZ; + this.bounds.maxZ = (short) maxZ; + this.bounds.cylinderRadius = (short) (Math.sqrt(maxCylinderRadiusSquared) + 0.99D); + Math.sqrt(maxSphereRadiusSquared); + this.bounds.valid = true; + } + + @OriginalMember(owner = "client!td", name = "b", descriptor = "(SS)V") + public final void method4109(@OriginalArg(0) short arg0, @OriginalArg(1) short arg1) { + for (@Pc(1) int local1 = 0; local1 < this.triangleCount; local1++) { + if (this.triangleColors[local1] == arg0) { + this.triangleColors[local1] = arg1; + } + } + this.colorBuffer.valid = false; + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(IILclient!td;[[I[[IIII)V") + public final void method4110(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) GlModel arg2, @OriginalArg(3) int[][] arg3, @OriginalArg(4) int[][] arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7) { + if (!arg2.bounds.valid) { + arg2.calculateBounds(); + } + @Pc(11) int local11 = arg5 + arg2.bounds.minX; + @Pc(17) int local17 = arg5 + arg2.bounds.maxX; + @Pc(23) int local23 = arg7 + arg2.bounds.minZ; + @Pc(29) int local29 = arg7 + arg2.bounds.maxZ; + if ((arg0 == 1 || arg0 == 2 || arg0 == 3 || arg0 == 5) && (local11 < 0 || local17 + 128 >> 7 >= arg3.length || local23 < 0 || local29 + 128 >> 7 >= arg3[0].length)) { + return; + } + if (arg0 == 4 || arg0 == 5) { + if (arg4 == null) { + return; + } + if (local11 < 0 || local17 + 128 >> 7 >= arg4.length || local23 < 0 || local29 + 128 >> 7 >= arg4[0].length) { + return; + } + } else { + local11 >>= 0x7; + local17 = local17 + 127 >> 7; + local23 >>= 0x7; + local29 = local29 + 127 >> 7; + if (arg3[local11][local23] == arg6 && arg3[local17][local23] == arg6 && arg3[local11][local29] == arg6 && arg3[local17][local29] == arg6) { + return; + } + } + @Pc(150) int local150; + @Pc(161) int local161; + @Pc(168) int local168; + @Pc(172) int local172; + @Pc(176) int local176; + @Pc(180) int local180; + @Pc(184) int local184; + @Pc(206) int local206; + @Pc(232) int local232; + @Pc(244) int local244; + if (arg0 == 1) { + for (local150 = 0; local150 < this.vertexCount; local150++) { + local161 = this.vertexX[local150] + arg5; + local168 = this.vertexZ[local150] + arg7; + local172 = local161 & 0x7F; + local176 = local168 & 0x7F; + local180 = local161 >> 7; + local184 = local168 >> 7; + local206 = arg3[local180][local184] * (128 - local172) + arg3[local180 + 1][local184] * local172 >> 7; + local232 = arg3[local180][local184 + 1] * (128 - local172) + arg3[local180 + 1][local184 + 1] * local172 >> 7; + local244 = local206 * (128 - local176) + local232 * local176 >> 7; + this.vertexY[local150] = this.vertexY[local150] + local244 - arg6; + } + } else { + @Pc(362) int local362; + @Pc(374) int local374; + if (arg0 == 2) { + @Pc(266) short local266 = arg2.bounds.minY; + for (local161 = 0; local161 < this.vertexCount; local161++) { + local168 = (this.vertexY[local161] << 16) / local266; + if (local168 < arg1) { + local172 = this.vertexX[local161] + arg5; + local176 = this.vertexZ[local161] + arg7; + local180 = local172 & 0x7F; + local184 = local176 & 0x7F; + local206 = local172 >> 7; + local232 = local176 >> 7; + local244 = arg3[local206][local232] * (128 - local180) + arg3[local206 + 1][local232] * local180 >> 7; + local362 = arg3[local206][local232 + 1] * (128 - local180) + arg3[local206 + 1][local232 + 1] * local180 >> 7; + local374 = local244 * (128 - local184) + local362 * local184 >> 7; + this.vertexY[local161] += (local374 - arg6) * (arg1 - local168) / arg1; + } + } + } else if (arg0 == 3) { + local150 = (arg1 & 0xFF) * 4; + local161 = (arg1 >> 8 & 0xFF) * 4; + this.method4573(arg3, arg5, arg6, arg7, local150, local161); + } else if (arg0 == 4) { + local150 = arg2.bounds.maxY - arg2.bounds.minY; + for (local161 = 0; local161 < this.vertexCount; local161++) { + local168 = this.vertexX[local161] + arg5; + local172 = this.vertexZ[local161] + arg7; + local176 = local168 & 0x7F; + local180 = local172 & 0x7F; + local184 = local168 >> 7; + local206 = local172 >> 7; + local232 = arg4[local184][local206] * (128 - local176) + arg4[local184 + 1][local206] * local176 >> 7; + local244 = arg4[local184][local206 + 1] * (128 - local176) + arg4[local184 + 1][local206 + 1] * local176 >> 7; + local362 = local232 * (128 - local180) + local244 * local180 >> 7; + this.vertexY[local161] = this.vertexY[local161] + local362 + local150 - arg6; + } + } else if (arg0 == 5) { + local150 = arg2.bounds.maxY - arg2.bounds.minY; + for (local161 = 0; local161 < this.vertexCount; local161++) { + local168 = this.vertexX[local161] + arg5; + local172 = this.vertexZ[local161] + arg7; + local176 = local168 & 0x7F; + local180 = local172 & 0x7F; + local184 = local168 >> 7; + local206 = local172 >> 7; + local232 = arg3[local184][local206] * (128 - local176) + arg3[local184 + 1][local206] * local176 >> 7; + local244 = arg3[local184][local206 + 1] * (128 - local176) + arg3[local184 + 1][local206 + 1] * local176 >> 7; + local362 = local232 * (128 - local180) + local244 * local180 >> 7; + local232 = arg4[local184][local206] * (128 - local176) + arg4[local184 + 1][local206] * local176 >> 7; + local244 = arg4[local184][local206 + 1] * (128 - local176) + arg4[local184 + 1][local206 + 1] * local176 >> 7; + local374 = local232 * (128 - local180) + local244 * local180 >> 7; + @Pc(716) int local716 = local362 - local374; + this.vertexY[local161] = ((this.vertexY[local161] << 8) / local150 * local716 >> 8) - (arg6 - local362); + } + } + } + this.vertexBuffer.valid = false; + this.bounds.valid = false; + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(ZZZZZZZ)V") + public final void method4111(@OriginalArg(0) boolean arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) boolean arg2, @OriginalArg(4) boolean arg3, @OriginalArg(5) boolean arg4, @OriginalArg(6) boolean arg5) { + if (this.aByte18 != 0) { + throw new IllegalArgumentException(); + } else if (this.anInt5296 != 0) { + if (arg5) { + @Pc(26) boolean local26 = !this.colorBuffer.valid && (arg1 || arg2 && !Preferences.highDetailLighting); + this.method4113(false, !this.vertexBuffer.valid && arg0, local26, this.normalsBuffer != null && !this.normalsBuffer.valid && arg2, !this.texCoordBuffer.valid); + if (!this.indexBuffer.valid && arg3 && arg1) { + this.method4103(); + } + } + if (arg0) { + if (this.vertexBuffer.valid) { + if (!this.bounds.valid) { + this.calculateBounds(); + } + this.vertexX = null; + this.vertexY = null; + this.vertexZ = null; + this.aShortArray81 = null; + this.anIntArray462 = null; + } else { + this.aByte19 = (byte) (this.aByte19 | 0x1); + } + } + if (arg1) { + if (this.colorBuffer.valid) { + this.triangleColors = null; + this.triangleAlpha = null; + } else { + this.aByte19 = (byte) (this.aByte19 | 0x2); + } + } + if (arg2 && Preferences.highDetailLighting) { + if (this.normalsBuffer.valid) { + this.aShortArray76 = null; + this.aShortArray79 = null; + this.aShortArray85 = null; + this.aShortArray86 = null; + } else { + this.aByte19 = (byte) (this.aByte19 | 0x4); + } + } + if (this.texCoordBuffer.valid) { + this.vertexS = null; + this.vertexT = null; + } else { + this.aByte19 = (byte) (this.aByte19 | 0x8); + } + if (arg3 && arg1) { + if (this.indexBuffer.valid && this.colorBuffer.valid) { + this.aShortArray77 = null; + this.aShortArray82 = null; + this.aShortArray83 = null; + } else { + this.aByte19 = (byte) (this.aByte19 | 0x10); + } + } + if (arg4) { + this.vertexBones = null; + this.triangleBones = null; + this.boneVertices = null; + this.boneTriangles = null; + } + } + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(ZZZZZ)V") + private void method4113(@OriginalArg(0) boolean arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) boolean arg2, @OriginalArg(3) boolean arg3, @OriginalArg(4) boolean arg4) { + @Pc(1) int stride = 0; + if (arg1) { + this.vertexBuffer.pointer = 0; + stride += 12; + } + if (arg2) { + this.colorBuffer.pointer = stride; + stride += 4; + } + if (arg3) { + this.normalsBuffer.pointer = stride; + stride += 12; + } + if (arg4) { + this.texCoordBuffer.pointer = stride; + stride += 8; + } + if (stride == 0) { + return; + } + if (tempBuffer.data.length < this.anInt5296 * stride) { + tempBuffer = new Buffer((this.anInt5296 + 100) * stride); + } else { + tempBuffer.offset = 0; + } + @Pc(60) int local60; + @Pc(71) int local71; + @Pc(78) int local78; + @Pc(85) int local85; + @Pc(90) int local90; + @Pc(97) int local97; + @Pc(99) int local99; + if (arg1) { + @Pc(109) int local109; + if (GlRenderer.bigEndian) { + for (local60 = 0; local60 < this.vertexCount; local60++) { + local71 = Float.floatToRawIntBits((float) this.vertexX[local60]); + local78 = Float.floatToRawIntBits((float) this.vertexY[local60]); + local85 = Float.floatToRawIntBits((float) this.vertexZ[local60]); + local90 = this.anIntArray462[local60]; + local97 = this.anIntArray462[local60 + 1]; + for (local99 = local90; local99 < local97; local99++) { + local109 = this.aShortArray81[local99] - 1; + if (local109 == -1) { + break; + } + tempBuffer.offset = local109 * stride; + tempBuffer.p4(local71); + tempBuffer.p4(local78); + tempBuffer.p4(local85); + } + } + } else { + for (local60 = 0; local60 < this.vertexCount; local60++) { + local71 = Float.floatToRawIntBits((float) this.vertexX[local60]); + local78 = Float.floatToRawIntBits((float) this.vertexY[local60]); + local85 = Float.floatToRawIntBits((float) this.vertexZ[local60]); + local90 = this.anIntArray462[local60]; + local97 = this.anIntArray462[local60 + 1]; + for (local99 = local90; local99 < local97; local99++) { + local109 = this.aShortArray81[local99] - 1; + if (local109 == -1) { + break; + } + tempBuffer.offset = local109 * stride; + tempBuffer.ip4(local71); + tempBuffer.ip4(local78); + tempBuffer.ip4(local85); + } + } + } + } + if (arg2) { + if (Preferences.highDetailLighting) { + for (local60 = 0; local60 < this.triangleCount; local60++) { + local71 = method4096(this.triangleColors[local60], this.triangleTextures[local60], this.aShort29, this.triangleAlpha[local60]); + tempBuffer.offset = this.colorBuffer.pointer + this.aShortArray77[local60] * stride; + tempBuffer.p4(local71); + tempBuffer.offset = this.colorBuffer.pointer + this.aShortArray82[local60] * stride; + tempBuffer.p4(local71); + tempBuffer.offset = this.colorBuffer.pointer + this.aShortArray83[local60] * stride; + tempBuffer.p4(local71); + } + } else { + local60 = (int) FogManager.light0Position[0]; + local71 = (int) FogManager.light0Position[1]; + local78 = (int) FogManager.light0Position[2]; + local85 = (int) Math.sqrt(local60 * local60 + local71 * local71 + local78 * local78); + local90 = (int) ((float) this.aShort29 * 1.3F); + local97 = this.aShort28 * local85 >> 8; + for (local99 = 0; local99 < this.triangleCount; local99++) { + @Pc(270) short local270 = this.aShortArray77[local99]; + @Pc(275) short local275 = this.aShortArray86[local270]; + @Pc(281) int local281; + if (local275 < 0) { + local281 = -local275 - 1; + } else { + if (local275 == 0) { + local281 = local90 + (local60 * this.aShortArray76[local270] + local71 * this.aShortArray79[local270] + local78 * this.aShortArray85[local270]) / (local97 + local97 / 2); + } else { + local281 = local90 + (local60 * this.aShortArray76[local270] + local71 * this.aShortArray79[local270] + local78 * this.aShortArray85[local270]) / (local97 * local275); + } + if (local281 < 0) { + local281 = 0; + } else if (local281 > 16384) { + local281 = 16384; + } + this.aShortArray86[local270] = (short) (-local281 - 1); + } + @Pc(364) short local364 = this.aShortArray82[local99]; + @Pc(369) short local369 = this.aShortArray86[local364]; + @Pc(375) int local375; + if (local369 < 0) { + local375 = -local369 - 1; + } else { + if (local369 == 0) { + local375 = local90 + (local60 * this.aShortArray76[local364] + local71 * this.aShortArray79[local364] + local78 * this.aShortArray85[local364]) / (local97 + local97 / 2); + } else { + local375 = local90 + (local60 * this.aShortArray76[local364] + local71 * this.aShortArray79[local364] + local78 * this.aShortArray85[local364]) / (local97 * local369); + } + if (local375 < 0) { + local375 = 0; + } else if (local375 > 16384) { + local375 = 16384; + } + this.aShortArray86[local364] = (short) (-local375 - 1); + } + @Pc(458) short local458 = this.aShortArray83[local99]; + @Pc(463) short local463 = this.aShortArray86[local458]; + @Pc(469) int local469; + if (local463 < 0) { + local469 = -local463 - 1; + } else { + if (local463 == 0) { + local469 = local90 + (local60 * this.aShortArray76[local458] + local71 * this.aShortArray79[local458] + local78 * this.aShortArray85[local458]) / (local97 + local97 / 2); + } else { + local469 = local90 + (local60 * this.aShortArray76[local458] + local71 * this.aShortArray79[local458] + local78 * this.aShortArray85[local458]) / (local97 * local463); + } + if (local469 < 0) { + local469 = 0; + } else if (local469 > 16384) { + local469 = 16384; + } + this.aShortArray86[local458] = (short) (-local469 - 1); + } + @Pc(562) int local562 = method4096(this.triangleColors[local99], this.triangleTextures[local99], local281, this.triangleAlpha[local99]); + @Pc(577) int local577 = method4096(this.triangleColors[local99], this.triangleTextures[local99], local375, this.triangleAlpha[local99]); + @Pc(592) int local592 = method4096(this.triangleColors[local99], this.triangleTextures[local99], local469, this.triangleAlpha[local99]); + tempBuffer.offset = this.colorBuffer.pointer + local270 * stride; + tempBuffer.p4(local562); + tempBuffer.offset = this.colorBuffer.pointer + local364 * stride; + tempBuffer.p4(local577); + tempBuffer.offset = this.colorBuffer.pointer + local458 * stride; + tempBuffer.p4(local592); + } + this.aShortArray76 = null; + this.aShortArray79 = null; + this.aShortArray85 = null; + } + } + if (arg3) { + @Pc(723) float local723 = 3.0F / (float) this.aShort28; + @Pc(734) float local734 = 3.0F / (float) (this.aShort28 + this.aShort28 / 2); + tempBuffer.offset = this.normalsBuffer.pointer; + @Pc(752) short local752; + @Pc(790) float local790; + if (GlRenderer.bigEndian) { + for (local78 = 0; local78 < this.anInt5296; local78++) { + local752 = this.aShortArray86[local78]; + if (local752 == 0) { + tempBuffer.pFloat((float) this.aShortArray76[local78] * local734); + tempBuffer.pFloat((float) this.aShortArray79[local78] * local734); + tempBuffer.pFloat((float) this.aShortArray85[local78] * local734); + } else { + local790 = local723 / (float) local752; + tempBuffer.pFloat((float) this.aShortArray76[local78] * local790); + tempBuffer.pFloat((float) this.aShortArray79[local78] * local790); + tempBuffer.pFloat((float) this.aShortArray85[local78] * local790); + } + tempBuffer.offset += stride - 12; + } + } else { + for (local78 = 0; local78 < this.anInt5296; local78++) { + local752 = this.aShortArray86[local78]; + if (local752 == 0) { + tempBuffer.gFloat((float) this.aShortArray76[local78] * local734); + tempBuffer.gFloat((float) this.aShortArray79[local78] * local734); + tempBuffer.gFloat((float) this.aShortArray85[local78] * local734); + } else { + local790 = local723 / (float) local752; + tempBuffer.gFloat((float) this.aShortArray76[local78] * local790); + tempBuffer.gFloat((float) this.aShortArray79[local78] * local790); + tempBuffer.gFloat((float) this.aShortArray85[local78] * local790); + } + tempBuffer.offset += stride - 12; + } + } + } + if (arg4) { + tempBuffer.offset = this.texCoordBuffer.pointer; + if (GlRenderer.bigEndian) { + for (local60 = 0; local60 < this.anInt5296; local60++) { + tempBuffer.pFloat(this.vertexS[local60]); + tempBuffer.pFloat(this.vertexT[local60]); + tempBuffer.offset += stride - 8; + } + } else { + for (local60 = 0; local60 < this.anInt5296; local60++) { + tempBuffer.gFloat(this.vertexS[local60]); + tempBuffer.gFloat(this.vertexT[local60]); + tempBuffer.offset += stride - 8; + } + } + } + tempBuffer.offset = stride * this.anInt5296; + @Pc(1007) ByteBuffer local1007; + if (arg0) { + if (arbVboSupported) { + local1007 = ByteBuffer.wrap(tempBuffer.data, 0, tempBuffer.offset); + if (this.aClass155_5 == null) { + this.aClass155_5 = new GlVertexBufferObject(true); + this.aClass155_5.setArrayBuffer(local1007); + } else { + this.aClass155_5.updateArrayBuffer(local1007); + } + if (arg1) { + this.vertexBuffer.valid = true; + this.vertexBuffer.buffer = null; + this.vertexBuffer.vbo = this.aClass155_5; + this.vertexBuffer.stride = stride; + } + if (arg2) { + this.colorBuffer.valid = true; + this.colorBuffer.buffer = null; + this.colorBuffer.vbo = this.aClass155_5; + this.colorBuffer.stride = stride; + } + if (arg3) { + this.normalsBuffer.valid = true; + this.normalsBuffer.buffer = null; + this.normalsBuffer.vbo = this.aClass155_5; + this.normalsBuffer.stride = stride; + } + if (arg4) { + this.texCoordBuffer.valid = true; + this.texCoordBuffer.buffer = null; + this.texCoordBuffer.vbo = this.aClass155_5; + this.texCoordBuffer.stride = stride; + } + } else { + if (aByteBuffer9 == null || aByteBuffer9.capacity() < tempBuffer.offset) { + aByteBuffer9 = ByteBuffer.allocateDirect(tempBuffer.offset + stride * 100); + } else { + aByteBuffer9.clear(); + } + aByteBuffer9.put(tempBuffer.data, 0, tempBuffer.offset); + aByteBuffer9.flip(); + if (arg1) { + this.vertexBuffer.valid = true; + this.vertexBuffer.buffer = aByteBuffer9; + this.vertexBuffer.vbo = null; + this.vertexBuffer.stride = stride; + } + if (arg2) { + this.colorBuffer.valid = true; + this.colorBuffer.buffer = aByteBuffer9; + this.vertexBuffer.vbo = null; + this.colorBuffer.stride = stride; + } + if (arg3) { + this.normalsBuffer.valid = true; + this.normalsBuffer.buffer = aByteBuffer9; + this.normalsBuffer.vbo = null; + this.normalsBuffer.stride = stride; + } + if (arg4) { + this.texCoordBuffer.valid = true; + this.texCoordBuffer.buffer = aByteBuffer9; + this.texCoordBuffer.vbo = null; + this.texCoordBuffer.stride = stride; + } + } + } else if (GlRenderer.arbVboSupported) { + @Pc(1211) GlVertexBufferObject local1211 = new GlVertexBufferObject(); + @Pc(1218) ByteBuffer local1218 = ByteBuffer.wrap(tempBuffer.data, 0, tempBuffer.offset); + local1211.setArrayBuffer(local1218); + if (arg1) { + this.vertexBuffer.valid = true; + this.vertexBuffer.buffer = null; + this.vertexBuffer.vbo = local1211; + this.vertexBuffer.stride = stride; + } + if (arg2) { + this.colorBuffer.valid = true; + this.colorBuffer.buffer = null; + this.colorBuffer.vbo = local1211; + this.colorBuffer.stride = stride; + } + if (arg3) { + this.normalsBuffer.valid = true; + this.normalsBuffer.buffer = null; + this.normalsBuffer.vbo = local1211; + this.normalsBuffer.stride = stride; + } + if (arg4) { + this.texCoordBuffer.valid = true; + this.texCoordBuffer.buffer = null; + this.texCoordBuffer.vbo = local1211; + this.texCoordBuffer.stride = stride; + } + } else { + local1007 = ByteBuffer.allocateDirect(tempBuffer.offset); + local1007.put(tempBuffer.data, 0, tempBuffer.offset); + local1007.flip(); + if (arg1) { + this.vertexBuffer.valid = true; + this.vertexBuffer.buffer = local1007; + this.vertexBuffer.vbo = null; + this.vertexBuffer.stride = stride; + } + if (arg2) { + this.colorBuffer.valid = true; + this.colorBuffer.buffer = local1007; + this.vertexBuffer.vbo = null; + this.colorBuffer.stride = stride; + } + if (arg3) { + this.normalsBuffer.valid = true; + this.normalsBuffer.buffer = local1007; + this.normalsBuffer.vbo = null; + this.normalsBuffer.stride = stride; + } + if (arg4) { + this.texCoordBuffer.valid = true; + this.texCoordBuffer.buffer = local1007; + this.texCoordBuffer.vbo = null; + this.texCoordBuffer.stride = stride; + } + } + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(ZZZLclient!td;Lclient!td;)Lclient!ak;") + private Model method4114(@OriginalArg(0) boolean arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) boolean arg2, @OriginalArg(3) GlModel arg3, @OriginalArg(4) GlModel arg4) { + arg3.vertexCount = this.vertexCount; + arg3.anInt5296 = this.anInt5296; + arg3.triangleCount = this.triangleCount; + arg3.aShort29 = this.aShort29; + arg3.aShort28 = this.aShort28; + arg3.aByte18 = (byte) ((arg0 && arg1 ? 0 : 2) | 0x1 | (arg2 ? 0 : 4)); + if (arg3.vertexX == null || arg3.vertexX.length < this.vertexCount) { + arg3.vertexX = new int[this.vertexCount + 100]; + arg3.vertexY = new int[this.vertexCount + 100]; + arg3.vertexZ = new int[this.vertexCount + 100]; + } + @Pc(69) int local69; + for (local69 = 0; local69 < this.vertexCount; local69++) { + arg3.vertexX[local69] = this.vertexX[local69]; + arg3.vertexY[local69] = this.vertexY[local69]; + arg3.vertexZ[local69] = this.vertexZ[local69]; + } + if (arg3.vertexBuffer == null) { + arg3.vertexBuffer = new GlBuffer(); + } + arg3.vertexBuffer.valid = false; + if (arg3.bounds == null) { + arg3.bounds = new GlBoundingBox(); + } + arg3.bounds.valid = false; + if (arg0) { + arg3.triangleAlpha = this.triangleAlpha; + } else { + if (arg4.triangleAlpha == null || arg4.triangleAlpha.length < this.triangleCount) { + arg4.triangleAlpha = new byte[this.triangleCount + 100]; + } + arg3.triangleAlpha = arg4.triangleAlpha; + for (local69 = 0; local69 < this.triangleCount; local69++) { + arg3.triangleAlpha[local69] = this.triangleAlpha[local69]; + } + } + if (arg1) { + arg3.triangleColors = this.triangleColors; + } else { + if (arg4.triangleColors == null || arg4.triangleColors.length < this.triangleCount) { + arg4.triangleColors = new short[this.triangleCount + 100]; + } + arg3.triangleColors = arg4.triangleColors; + for (local69 = 0; local69 < this.triangleCount; local69++) { + arg3.triangleColors[local69] = this.triangleColors[local69]; + } + } + if (arg0 && arg1) { + arg3.colorBuffer = this.colorBuffer; + } else { + if (arg4.colorBuffer == null) { + arg4.colorBuffer = new GlBuffer(); + } + arg3.colorBuffer = arg4.colorBuffer; + arg3.colorBuffer.valid = false; + } + if (arg2 || this.aShortArray76 == null) { + arg3.aShortArray76 = this.aShortArray76; + arg3.aShortArray79 = this.aShortArray79; + arg3.aShortArray85 = this.aShortArray85; + arg3.aShortArray86 = this.aShortArray86; + arg3.normalsBuffer = this.normalsBuffer; + } else { + if (arg4.aShortArray76 == null || arg4.aShortArray76.length < this.anInt5296) { + arg4.aShortArray76 = new short[this.anInt5296 + 100]; + arg4.aShortArray79 = new short[this.anInt5296 + 100]; + arg4.aShortArray85 = new short[this.anInt5296 + 100]; + arg4.aShortArray86 = new short[this.anInt5296 + 100]; + } + arg3.aShortArray76 = arg4.aShortArray76; + arg3.aShortArray79 = arg4.aShortArray79; + arg3.aShortArray85 = arg4.aShortArray85; + arg3.aShortArray86 = arg4.aShortArray86; + for (local69 = 0; local69 < this.anInt5296; local69++) { + arg3.aShortArray76[local69] = this.aShortArray76[local69]; + arg3.aShortArray79[local69] = this.aShortArray79[local69]; + arg3.aShortArray85[local69] = this.aShortArray85[local69]; + arg3.aShortArray86[local69] = this.aShortArray86[local69]; + } + if (Preferences.highDetailLighting) { + if (arg4.normalsBuffer == null) { + arg4.normalsBuffer = new GlBuffer(); + } + arg3.normalsBuffer = arg4.normalsBuffer; + arg3.normalsBuffer.valid = false; + } else { + arg3.normalsBuffer = null; + } + } + arg3.vertexS = this.vertexS; + arg3.vertexT = this.vertexT; + arg3.vertexBones = this.vertexBones; + arg3.boneVertices = this.boneVertices; + arg3.aShortArray77 = this.aShortArray77; + arg3.aShortArray82 = this.aShortArray82; + arg3.aShortArray83 = this.aShortArray83; + arg3.triangleTextures = this.triangleTextures; + arg3.triangleBones = this.triangleBones; + arg3.boneTriangles = this.boneTriangles; + arg3.texCoordBuffer = this.texCoordBuffer; + arg3.indexBuffer = this.indexBuffer; + arg3.anIntArray463 = this.anIntArray463; + arg3.aShortArray81 = this.aShortArray81; + arg3.anIntArray462 = this.anIntArray462; + arg3.pickable = this.pickable; + arg3.vertexSources = this.vertexSources; + arg3.triangleSources = this.triangleSources; + return arg3; + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(III)Lclient!th;") + @Override + public final Entity createModel() { + this.aBoolean259 = false; + if (this.aClass23_1 != null) { + this.aShortArray76 = this.aClass23_1.aShortArray8; + this.aShortArray79 = this.aClass23_1.aShortArray10; + this.aShortArray85 = this.aClass23_1.aShortArray9; + this.aShortArray86 = this.aClass23_1.aShortArray7; + this.aClass23_1 = null; + } + return this; + } + + @OriginalMember(owner = "client!td", name = "t", descriptor = "()I") + public final int method4115() { + return this.aShort28; + } + + @OriginalMember(owner = "client!td", name = "u", descriptor = "()V") + public final void method4116() { + if (this.aShortArray76 == null) { + this.rotateCounterClockwise(); + return; + } + @Pc(7) int local7; + for (local7 = 0; local7 < this.vertexCount; local7++) { + @Pc(16) int local16 = this.vertexX[local7]; + this.vertexX[local7] = this.vertexZ[local7]; + this.vertexZ[local7] = -local16; + } + for (local7 = 0; local7 < this.anInt5296; local7++) { + @Pc(43) short local43 = this.aShortArray76[local7]; + this.aShortArray76[local7] = this.aShortArray85[local7]; + this.aShortArray85[local7] = (short) -local43; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + if (this.normalsBuffer != null) { + this.normalsBuffer.valid = false; + } + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(ZZZZZZZZZZZ)Lclient!td;") + public final GlModel method4117(@OriginalArg(0) boolean arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) boolean arg2, @OriginalArg(4) boolean arg3, @OriginalArg(5) boolean arg4, @OriginalArg(6) boolean arg5, @OriginalArg(7) boolean arg6, @OriginalArg(9) boolean arg7, @OriginalArg(10) boolean arg8) { + @Pc(3) GlModel model = new GlModel(); + model.vertexCount = this.vertexCount; + model.anInt5296 = this.anInt5296; + model.triangleCount = this.triangleCount; + if (arg0) { + model.vertexX = this.vertexX; + model.vertexZ = this.vertexZ; + } else { + model.vertexX = ArrayUtils.copyOfNullable(this.vertexX); + model.vertexZ = ArrayUtils.copyOfNullable(this.vertexZ); + } + if (arg1) { + model.vertexY = this.vertexY; + } else { + model.vertexY = ArrayUtils.copyOfNullable(this.vertexY); + } + if (arg0 && arg1) { + model.vertexBuffer = this.vertexBuffer; + model.bounds = this.bounds; + } else { + model.vertexBuffer = new GlBuffer(); + model.bounds = new GlBoundingBox(); + } + if (arg2) { + model.triangleColors = this.triangleColors; + } else { + model.triangleColors = ArrayUtils.copyOfNullable(this.triangleColors); + } + model.triangleAlpha = this.triangleAlpha; + if (arg2 && arg3 && (arg6 && arg4 || Preferences.highDetailLighting)) { + model.colorBuffer = this.colorBuffer; + } else { + model.colorBuffer = new GlBuffer(); + } + if (arg4) { + model.aShortArray76 = this.aShortArray76; + model.aShortArray79 = this.aShortArray79; + model.aShortArray85 = this.aShortArray85; + model.aShortArray86 = this.aShortArray86; + } else { + model.aShortArray76 = ArrayUtils.copyOfNullable(this.aShortArray76); + model.aShortArray79 = ArrayUtils.copyOfNullable(this.aShortArray79); + model.aShortArray85 = ArrayUtils.copyOfNullable(this.aShortArray85); + model.aShortArray86 = ArrayUtils.copyOfNullable(this.aShortArray86); + } + if (!Preferences.highDetailLighting) { + model.normalsBuffer = null; + } else if (arg4 && arg5 && arg6) { + model.normalsBuffer = this.normalsBuffer; + } else { + model.normalsBuffer = new GlBuffer(); + } + model.vertexS = this.vertexS; + model.vertexT = this.vertexT; + model.texCoordBuffer = this.texCoordBuffer; + if (arg7) { + model.aShortArray77 = this.aShortArray77; + model.aShortArray82 = this.aShortArray82; + model.aShortArray83 = this.aShortArray83; + model.indexBuffer = this.indexBuffer; + } else { + model.aShortArray77 = ArrayUtils.copyOfNullable(this.aShortArray77); + model.aShortArray82 = ArrayUtils.copyOfNullable(this.aShortArray82); + model.aShortArray83 = ArrayUtils.copyOfNullable(this.aShortArray83); + model.indexBuffer = new GlBuffer(); + } + if (arg8) { + model.triangleTextures = this.triangleTextures; + } else { + model.triangleTextures = ArrayUtils.copyOfNullable(this.triangleTextures); + } + model.vertexBones = this.vertexBones; + model.boneVertices = this.boneVertices; + model.triangleBones = this.triangleBones; + model.boneTriangles = this.boneTriangles; + model.anIntArray463 = this.anIntArray463; + model.aShortArray81 = this.aShortArray81; + model.anIntArray462 = this.anIntArray462; + model.aShort29 = this.aShort29; + model.aShort28 = this.aShort28; + model.vertexSources = this.vertexSources; + model.triangleSources = this.triangleSources; + return model; + } + + @OriginalMember(owner = "client!td", name = "i", descriptor = "()V") + @Override + public final void rotateCounterClockwise() { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + @Pc(10) int local10 = this.vertexX[local1]; + this.vertexX[local1] = this.vertexZ[local1]; + this.vertexZ[local1] = -local10; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(IIIIIIII)Z") + private boolean method4118(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7) { + if (arg1 < arg2 && arg1 < arg3 && arg1 < arg4) { + return false; + } else if (arg1 > arg2 && arg1 > arg3 && arg1 > arg4) { + return false; + } else if (arg0 < arg5 && arg0 < arg6 && arg0 < arg7) { + return false; + } else { + return arg0 <= arg5 || arg0 <= arg6 || arg0 <= arg7; + } + } + + @OriginalMember(owner = "client!td", name = "j", descriptor = "()I") + @Override + public final int getLengthXZ() { + if (!this.bounds.valid) { + this.calculateBounds(); + } + return this.bounds.cylinderRadius; + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(I[IIIIZ)V") + @Override + protected final void method4569(@OriginalArg(0) int arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) boolean arg5) { + @Pc(2) int local2 = arg1.length; + @Pc(18) int local18; + @Pc(26) int local26; + @Pc(45) int local45; + @Pc(53) int local53; + @Pc(8) int local8; + @Pc(12) int local12; + @Pc(16) int local16; + if (arg0 == 0) { + local8 = arg2 << 4; + local12 = arg3 << 4; + local16 = arg4 << 4; + local18 = 0; + anInt5298 = 0; + anInt5300 = 0; + anInt5299 = 0; + for (local26 = 0; local26 < local2; local26++) { + @Pc(33) int local33 = arg1[local26]; + if (local33 < this.boneVertices.length) { + @Pc(43) int[] local43 = this.boneVertices[local33]; + for (local45 = 0; local45 < local43.length; local45++) { + local53 = local43[local45]; + anInt5298 += this.vertexX[local53]; + anInt5300 += this.vertexY[local53]; + anInt5299 += this.vertexZ[local53]; + local18++; + } + } + } + if (local18 > 0) { + anInt5298 = anInt5298 / local18 + local8; + anInt5300 = anInt5300 / local18 + local12; + anInt5299 = anInt5299 / local18 + local16; + } else { + anInt5298 = local8; + anInt5300 = local12; + anInt5299 = local16; + } + return; + } + @Pc(141) int[] local141; + @Pc(143) int local143; + if (arg0 == 1) { + local8 = arg2 << 4; + local12 = arg3 << 4; + local16 = arg4 << 4; + for (local18 = 0; local18 < local2; local18++) { + local26 = arg1[local18]; + if (local26 < this.boneVertices.length) { + local141 = this.boneVertices[local26]; + for (local143 = 0; local143 < local141.length; local143++) { + local45 = local141[local143]; + this.vertexX[local45] += local8; + this.vertexY[local45] += local12; + this.vertexZ[local45] += local16; + } + } + } + return; + } + @Pc(246) int local246; + @Pc(264) int local264; + @Pc(484) int local484; + if (arg0 == 2) { + for (local18 = 0; local18 < local2; local18++) { + local26 = arg1[local18]; + if (local26 < this.boneVertices.length) { + local141 = this.boneVertices[local26]; + for (local143 = 0; local143 < local141.length; local143++) { + local45 = local141[local143]; + this.vertexX[local45] -= anInt5298; + this.vertexY[local45] -= anInt5300; + this.vertexZ[local45] -= anInt5299; + if (arg4 != 0) { + local53 = MathUtils.sin[arg4]; + local246 = MathUtils.cos[arg4]; + local264 = this.vertexY[local45] * local53 + this.vertexX[local45] * local246 + 32767 >> 16; + this.vertexY[local45] = this.vertexY[local45] * local246 + 32767 - this.vertexX[local45] * local53 >> 16; + this.vertexX[local45] = local264; + } + if (arg2 != 0) { + local53 = MathUtils.sin[arg2]; + local246 = MathUtils.cos[arg2]; + local264 = this.vertexY[local45] * local246 + 32767 - this.vertexZ[local45] * local53 >> 16; + this.vertexZ[local45] = this.vertexY[local45] * local53 + this.vertexZ[local45] * local246 + 32767 >> 16; + this.vertexY[local45] = local264; + } + if (arg3 != 0) { + local53 = MathUtils.sin[arg3]; + local246 = MathUtils.cos[arg3]; + local264 = this.vertexZ[local45] * local53 + this.vertexX[local45] * local246 + 32767 >> 16; + this.vertexZ[local45] = this.vertexZ[local45] * local246 + 32767 - this.vertexX[local45] * local53 >> 16; + this.vertexX[local45] = local264; + } + this.vertexX[local45] += anInt5298; + this.vertexY[local45] += anInt5300; + this.vertexZ[local45] += anInt5299; + } + } + } + if (arg5 && this.aShortArray76 != null) { + for (local18 = 0; local18 < local2; local18++) { + local26 = arg1[local18]; + if (local26 < this.boneVertices.length) { + local141 = this.boneVertices[local26]; + for (local143 = 0; local143 < local141.length; local143++) { + local45 = local141[local143]; + local53 = this.anIntArray462[local45]; + local246 = this.anIntArray462[local45 + 1]; + for (local264 = local53; local264 < local246; local264++) { + local484 = this.aShortArray81[local264] - 1; + if (local484 == -1) { + break; + } + @Pc(494) int local494; + @Pc(498) int local498; + @Pc(516) int local516; + if (arg4 != 0) { + local494 = MathUtils.sin[arg4]; + local498 = MathUtils.cos[arg4]; + local516 = this.aShortArray79[local484] * local494 + this.aShortArray76[local484] * local498 + 32767 >> 16; + this.aShortArray79[local484] = (short) (this.aShortArray79[local484] * local498 + 32767 - this.aShortArray76[local484] * local494 >> 16); + this.aShortArray76[local484] = (short) local516; + } + if (arg2 != 0) { + local494 = MathUtils.sin[arg2]; + local498 = MathUtils.cos[arg2]; + local516 = this.aShortArray79[local484] * local498 + 32767 - this.aShortArray85[local484] * local494 >> 16; + this.aShortArray85[local484] = (short) (this.aShortArray79[local484] * local494 + this.aShortArray85[local484] * local498 + 32767 >> 16); + this.aShortArray79[local484] = (short) local516; + } + if (arg3 != 0) { + local494 = MathUtils.sin[arg3]; + local498 = MathUtils.cos[arg3]; + local516 = this.aShortArray85[local484] * local494 + this.aShortArray76[local484] * local498 + 32767 >> 16; + this.aShortArray85[local484] = (short) (this.aShortArray85[local484] * local498 + 32767 - this.aShortArray76[local484] * local494 >> 16); + this.aShortArray76[local484] = (short) local516; + } + } + } + } + } + if (this.normalsBuffer != null) { + this.normalsBuffer.valid = false; + } + } + } else if (arg0 == 3) { + for (local18 = 0; local18 < local2; local18++) { + local26 = arg1[local18]; + if (local26 < this.boneVertices.length) { + local141 = this.boneVertices[local26]; + for (local143 = 0; local143 < local141.length; local143++) { + local45 = local141[local143]; + this.vertexX[local45] -= anInt5298; + this.vertexY[local45] -= anInt5300; + this.vertexZ[local45] -= anInt5299; + this.vertexX[local45] = this.vertexX[local45] * arg2 >> 7; + this.vertexY[local45] = this.vertexY[local45] * arg3 >> 7; + this.vertexZ[local45] = this.vertexZ[local45] * arg4 >> 7; + this.vertexX[local45] += anInt5298; + this.vertexY[local45] += anInt5300; + this.vertexZ[local45] += anInt5299; + } + } + } + } else if (arg0 == 5) { + if (this.boneTriangles != null && this.triangleAlpha != null) { + for (local18 = 0; local18 < local2; local18++) { + local26 = arg1[local18]; + if (local26 < this.boneTriangles.length) { + local141 = this.boneTriangles[local26]; + for (local143 = 0; local143 < local141.length; local143++) { + local45 = local141[local143]; + local53 = (this.triangleAlpha[local45] & 0xFF) + arg2 * 8; + if (local53 < 0) { + local53 = 0; + } else if (local53 > 255) { + local53 = 255; + } + this.triangleAlpha[local45] = (byte) local53; + } + if (local141.length > 0) { + this.colorBuffer.valid = false; + } + } + } + } + } else if (arg0 == 7 && this.boneTriangles != null) { + for (local18 = 0; local18 < local2; local18++) { + local26 = arg1[local18]; + if (local26 < this.boneTriangles.length) { + local141 = this.boneTriangles[local26]; + for (local143 = 0; local143 < local141.length; local143++) { + local45 = local141[local143]; + local53 = this.triangleColors[local45] & 0xFFFF; + local246 = local53 >> 10 & 0x3F; + local264 = local53 >> 7 & 0x7; + local484 = local53 & 0x7F; + @Pc(932) int local932 = local246 + arg2 & 0x3F; + local264 += arg3 / 4; + if (local264 < 0) { + local264 = 0; + } else if (local264 > 7) { + local264 = 7; + } + local484 += arg4; + if (local484 < 0) { + local484 = 0; + } else if (local484 > 127) { + local484 = 127; + } + this.triangleColors[local45] = (short) (local932 << 10 | local264 << 7 | local484); + } + if (local141.length > 0) { + this.colorBuffer.valid = false; + } + } + } + } + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(IIII)V") + @Override + protected final void method4567(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(3) int local3; + @Pc(11) int local11; + if (arg0 == 0) { + local3 = 0; + anInt5298 = 0; + anInt5300 = 0; + anInt5299 = 0; + for (local11 = 0; local11 < this.vertexCount; local11++) { + anInt5298 += this.vertexX[local11]; + anInt5300 += this.vertexY[local11]; + anInt5299 += this.vertexZ[local11]; + local3++; + } + if (local3 > 0) { + anInt5298 = anInt5298 / local3 + arg1; + anInt5300 = anInt5300 / local3 + arg2; + anInt5299 = anInt5299 / local3 + arg3; + } else { + anInt5298 = arg1; + anInt5300 = arg2; + anInt5299 = arg3; + } + } else if (arg0 == 1) { + for (local3 = 0; local3 < this.vertexCount; local3++) { + this.vertexX[local3] += arg1; + this.vertexY[local3] += arg2; + this.vertexZ[local3] += arg3; + } + } else { + @Pc(146) int local146; + @Pc(164) int local164; + if (arg0 == 2) { + for (local3 = 0; local3 < this.vertexCount; local3++) { + this.vertexX[local3] -= anInt5298; + this.vertexY[local3] -= anInt5300; + this.vertexZ[local3] -= anInt5299; + if (arg3 != 0) { + local11 = MathUtils.sin[arg3]; + local146 = MathUtils.cos[arg3]; + local164 = this.vertexY[local3] * local11 + this.vertexX[local3] * local146 + 32767 >> 16; + this.vertexY[local3] = this.vertexY[local3] * local146 + 32767 - this.vertexX[local3] * local11 >> 16; + this.vertexX[local3] = local164; + } + if (arg1 != 0) { + local11 = MathUtils.sin[arg1]; + local146 = MathUtils.cos[arg1]; + local164 = this.vertexY[local3] * local146 + 32767 - this.vertexZ[local3] * local11 >> 16; + this.vertexZ[local3] = this.vertexY[local3] * local11 + this.vertexZ[local3] * local146 + 32767 >> 16; + this.vertexY[local3] = local164; + } + if (arg2 != 0) { + local11 = MathUtils.sin[arg2]; + local146 = MathUtils.cos[arg2]; + local164 = this.vertexZ[local3] * local11 + this.vertexX[local3] * local146 + 32767 >> 16; + this.vertexZ[local3] = this.vertexZ[local3] * local146 + 32767 - this.vertexX[local3] * local11 >> 16; + this.vertexX[local3] = local164; + } + this.vertexX[local3] += anInt5298; + this.vertexY[local3] += anInt5300; + this.vertexZ[local3] += anInt5299; + } + } else if (arg0 == 3) { + for (local3 = 0; local3 < this.vertexCount; local3++) { + this.vertexX[local3] -= anInt5298; + this.vertexY[local3] -= anInt5300; + this.vertexZ[local3] -= anInt5299; + this.vertexX[local3] = this.vertexX[local3] * arg1 / 128; + this.vertexY[local3] = this.vertexY[local3] * arg2 / 128; + this.vertexZ[local3] = this.vertexZ[local3] * arg3 / 128; + this.vertexX[local3] += anInt5298; + this.vertexY[local3] += anInt5300; + this.vertexZ[local3] += anInt5299; + } + } else if (arg0 == 5) { + for (local3 = 0; local3 < this.triangleCount; local3++) { + local11 = (this.triangleAlpha[local3] & 0xFF) + arg1 * 8; + if (local11 < 0) { + local11 = 0; + } else if (local11 > 255) { + local11 = 255; + } + this.triangleAlpha[local3] = (byte) local11; + } + this.colorBuffer.valid = false; + } else if (arg0 == 7) { + for (local3 = 0; local3 < this.triangleCount; local3++) { + local11 = this.triangleColors[local3] & 0xFFFF; + local146 = local11 >> 10 & 0x3F; + local164 = local11 >> 7 & 0x7; + @Pc(496) int local496 = local11 & 0x7F; + @Pc(502) int local502 = local146 + arg1 & 0x3F; + local164 += arg2 / 4; + if (local164 < 0) { + local164 = 0; + } else if (local164 > 7) { + local164 = 7; + } + local496 += arg3; + if (local496 < 0) { + local496 = 0; + } else if (local496 > 127) { + local496 = 127; + } + this.triangleColors[local3] = (short) (local502 << 10 | local164 << 7 | local496); + } + this.colorBuffer.valid = false; + } + } + } + + @OriginalMember(owner = "client!td", name = "h", descriptor = "()I") + @Override + public final int getMinX() { + if (!this.bounds.valid) { + this.calculateBounds(); + } + return this.bounds.minX; + } + + @OriginalMember(owner = "client!td", name = "w", descriptor = "()V") + private void method4121() { + @Pc(1) GL2 gl = GlRenderer.gl; + if (this.triangleCount == 0) { + return; + } + if (this.aByte18 != 0) { + this.method4113(true, !this.vertexBuffer.valid && (this.aByte18 & 0x1) != 0, !this.colorBuffer.valid && (this.aByte18 & 0x2) != 0, this.normalsBuffer != null && !this.normalsBuffer.valid && (this.aByte18 & 0x4) != 0, false); + } + this.method4113(false, !this.vertexBuffer.valid, !this.colorBuffer.valid, this.normalsBuffer != null && !this.normalsBuffer.valid, !this.texCoordBuffer.valid); + if (!this.indexBuffer.valid) { + this.method4103(); + } + if (this.aByte19 != 0) { + if ((this.aByte19 & 0x1) != 0) { + this.vertexX = null; + this.vertexY = null; + this.vertexZ = null; + this.aShortArray81 = null; + this.anIntArray462 = null; + } + if ((this.aByte19 & 0x2) != 0) { + this.triangleColors = null; + this.triangleAlpha = null; + } + if ((this.aByte19 & 0x4) != 0) { + this.aShortArray76 = null; + this.aShortArray79 = null; + this.aShortArray85 = null; + this.aShortArray86 = null; + } + if ((this.aByte19 & 0x8) != 0) { + this.vertexS = null; + this.vertexT = null; + } + if ((this.aByte19 & 0x10) != 0) { + this.aShortArray77 = null; + this.aShortArray82 = null; + this.aShortArray83 = null; + } + this.aByte19 = 0; + } + @Pc(172) GlVertexBufferObject local172 = null; + if (this.vertexBuffer.vbo != null) { + this.vertexBuffer.vbo.bindArray(); + local172 = this.vertexBuffer.vbo; + gl.glVertexPointer(3, GL2.GL_FLOAT, this.vertexBuffer.stride, this.vertexBuffer.pointer); + } + if (this.colorBuffer.vbo != null) { + if (local172 != this.colorBuffer.vbo) { + this.colorBuffer.vbo.bindArray(); + local172 = this.colorBuffer.vbo; + } + gl.glColorPointer(4, GL2.GL_UNSIGNED_BYTE, this.colorBuffer.stride, this.colorBuffer.pointer); + } + if (Preferences.highDetailLighting && this.normalsBuffer.vbo != null) { + if (local172 != this.normalsBuffer.vbo) { + this.normalsBuffer.vbo.bindArray(); + local172 = this.normalsBuffer.vbo; + } + gl.glNormalPointer(GL2.GL_FLOAT, this.normalsBuffer.stride, this.normalsBuffer.pointer); + } + if (this.texCoordBuffer.vbo != null) { + if (local172 != this.texCoordBuffer.vbo) { + this.texCoordBuffer.vbo.bindArray(); + local172 = this.texCoordBuffer.vbo; + } + gl.glTexCoordPointer(2, GL2.GL_FLOAT, this.texCoordBuffer.stride, this.texCoordBuffer.pointer); + } + if (this.indexBuffer.vbo != null) { + this.indexBuffer.vbo.bindElementArray(); + } + if (this.vertexBuffer.vbo == null || this.colorBuffer.vbo == null || Preferences.highDetailLighting && this.normalsBuffer.vbo == null || this.texCoordBuffer.vbo == null) { + if (GlRenderer.arbVboSupported) { + gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, 0); + } + if (this.vertexBuffer.vbo == null) { + this.vertexBuffer.buffer.position(this.vertexBuffer.pointer); + gl.glVertexPointer(3, GL2.GL_FLOAT, this.vertexBuffer.stride, this.vertexBuffer.buffer); + } + if (this.colorBuffer.vbo == null) { + this.colorBuffer.buffer.position(this.colorBuffer.pointer); + gl.glColorPointer(4, GL2.GL_UNSIGNED_BYTE, this.colorBuffer.stride, this.colorBuffer.buffer); + } + if (Preferences.highDetailLighting && this.normalsBuffer.vbo == null) { + this.normalsBuffer.buffer.position(this.normalsBuffer.pointer); + gl.glNormalPointer(GL2.GL_FLOAT, this.normalsBuffer.stride, this.normalsBuffer.buffer); + } + if (this.texCoordBuffer.vbo == null) { + this.texCoordBuffer.buffer.position(this.texCoordBuffer.pointer); + gl.glTexCoordPointer(2, GL2.GL_FLOAT, this.texCoordBuffer.stride, this.texCoordBuffer.buffer); + } + } + if (this.indexBuffer.vbo == null && GlRenderer.arbVboSupported) { + gl.glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, 0); + } + @Pc(417) int local417 = this.anIntArray463.length - 1; + for (@Pc(419) int local419 = 0; local419 < local417; local419++) { + @Pc(427) int local427 = this.anIntArray463[local419]; + @Pc(434) int local434 = this.anIntArray463[local419 + 1]; + @Pc(439) short local439 = this.triangleTextures[local427]; + if (local439 == -1) { + GlRenderer.setTextureId(-1); + MaterialManager.setMaterial(0, 0); + } else { + Rasteriser.textureProvider.method3227(local439 & 0xFFFF); + } + if (this.indexBuffer.vbo == null) { + this.indexBuffer.buffer.position(local427 * 12); + gl.glDrawElements(GL2.GL_TRIANGLES, (local434 - local427) * 3, GL2.GL_UNSIGNED_INT, this.indexBuffer.buffer); + } else { + gl.glDrawElements(GL2.GL_TRIANGLES, (local434 - local427) * 3, GL2.GL_UNSIGNED_INT, local427 * 12L); + } + } + } + + @OriginalMember(owner = "client!td", name = "f", descriptor = "()V") + @Override + protected final void method4557() { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + this.vertexX[local1] = this.vertexX[local1] + 7 >> 4; + this.vertexY[local1] = this.vertexY[local1] + 7 >> 4; + this.vertexZ[local1] = this.vertexZ[local1] + 7 >> 4; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + } + + @OriginalMember(owner = "client!td", name = "x", descriptor = "()V") + public final void method4122() { + @Pc(1) int local1; + for (local1 = 0; local1 < this.vertexCount; local1++) { + this.vertexZ[local1] = -this.vertexZ[local1]; + } + if (this.aShortArray85 != null) { + for (local1 = 0; local1 < this.anInt5296; local1++) { + this.aShortArray85[local1] = (short) -this.aShortArray85[local1]; + } + } + for (local1 = 0; local1 < this.triangleCount; local1++) { + @Pc(48) short local48 = this.aShortArray77[local1]; + this.aShortArray77[local1] = this.aShortArray83[local1]; + this.aShortArray83[local1] = local48; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + if (this.normalsBuffer != null) { + this.normalsBuffer.valid = false; + } + this.indexBuffer.valid = false; + } + + @OriginalMember(owner = "client!td", name = "d", descriptor = "(I)V") + @Override + public final void rotateX(@OriginalArg(0) int arg0) { + @Pc(3) int local3 = MathUtils.sin[arg0]; + @Pc(7) int local7 = MathUtils.cos[arg0]; + for (@Pc(9) int local9 = 0; local9 < this.vertexCount; local9++) { + @Pc(29) int local29 = this.vertexY[local9] * local7 - this.vertexZ[local9] * local3 >> 16; + this.vertexZ[local9] = this.vertexY[local9] * local3 + this.vertexZ[local9] * local7 >> 16; + this.vertexY[local9] = local29; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + } + + @OriginalMember(owner = "client!td", name = "g", descriptor = "(I)V") + public final void method4123() { + if (this.aShortArray76 == null) { + this.rotateY(256); + return; + } + @Pc(10) int local10 = MathUtils.sin[256]; + @Pc(14) int local14 = MathUtils.cos[256]; + @Pc(16) int local16; + @Pc(36) int local36; + for (local16 = 0; local16 < this.vertexCount; local16++) { + local36 = this.vertexZ[local16] * local10 + this.vertexX[local16] * local14 >> 16; + this.vertexZ[local16] = this.vertexZ[local16] * local14 - this.vertexX[local16] * local10 >> 16; + this.vertexX[local16] = local36; + } + for (local16 = 0; local16 < this.anInt5296; local16++) { + local36 = this.aShortArray85[local16] * local10 + this.aShortArray76[local16] * local14 >> 16; + this.aShortArray85[local16] = (short) (this.aShortArray85[local16] * local14 - this.aShortArray76[local16] * local10 >> 16); + this.aShortArray76[local16] = (short) local36; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + if (this.normalsBuffer != null) { + this.normalsBuffer.valid = false; + } + } + + @OriginalMember(owner = "client!td", name = "a", descriptor = "(Lclient!ek;)Lclient!ek;") + public final SoftwareIndexedSprite method4124(@OriginalArg(0) SoftwareIndexedSprite arg0) { + if (this.anInt5296 == 0) { + return null; + } + if (!this.bounds.valid) { + this.calculateBounds(); + } + @Pc(26) int local26; + @Pc(40) int local40; + if (FogManager.lightX > 0) { + local26 = this.bounds.minX - (this.bounds.maxY * FogManager.lightX >> 8) >> 3; + local40 = this.bounds.maxX - (this.bounds.minY * FogManager.lightX >> 8) >> 3; + } else { + local26 = this.bounds.minX - (this.bounds.minY * FogManager.lightX >> 8) >> 3; + local40 = this.bounds.maxX - (this.bounds.maxY * FogManager.lightX >> 8) >> 3; + } + @Pc(85) int local85; + @Pc(99) int local99; + if (FogManager.lightZ > 0) { + local85 = this.bounds.minZ - (this.bounds.maxY * FogManager.lightZ >> 8) >> 3; + local99 = this.bounds.maxZ - (this.bounds.minY * FogManager.lightZ >> 8) >> 3; + } else { + local85 = this.bounds.minZ - (this.bounds.minY * FogManager.lightZ >> 8) >> 3; + local99 = this.bounds.maxZ - (this.bounds.maxY * FogManager.lightZ >> 8) >> 3; + } + @Pc(134) int local134 = local40 + 1 - local26; + @Pc(140) int local140 = local99 + 1 - local85; + @Pc(151) SoftwareIndexedSprite local151; + if (arg0 == null || arg0.pixels.length < local134 * local140) { + local151 = new SoftwareIndexedSprite(local134, local140, 0); + } else { + local151 = arg0; + arg0.innerWidth = arg0.width = local134; + arg0.innerHeight = arg0.height = local140; + arg0.clear(); + } + local151.xOffset = local26; + local151.yOffset = local85; + if (anIntArray468.length < this.anInt5296) { + anIntArray468 = new int[this.anInt5296]; + anIntArray467 = new int[this.anInt5296]; + } + @Pc(194) int local194; + @Pc(246) int local246; + @Pc(248) int local248; + @Pc(258) int local258; + for (local194 = 0; local194 < this.vertexCount; local194++) { + @Pc(216) int local216 = (this.vertexX[local194] - (this.vertexY[local194] * FogManager.lightX >> 8) >> 3) - local26; + @Pc(234) int local234 = (this.vertexZ[local194] - (this.vertexY[local194] * FogManager.lightZ >> 8) >> 3) - local85; + @Pc(239) int local239 = this.anIntArray462[local194]; + local246 = this.anIntArray462[local194 + 1]; + for (local248 = local239; local248 < local246; local248++) { + local258 = this.aShortArray81[local248] - 1; + if (local258 == -1) { + break; + } + anIntArray468[local258] = local216; + anIntArray467[local258] = local234; + } + } + for (local194 = 0; local194 < this.triangleCount; local194++) { + if (this.triangleAlpha[local194] <= 128) { + @Pc(292) short local292 = this.aShortArray77[local194]; + @Pc(297) short local297 = this.aShortArray82[local194]; + @Pc(302) short local302 = this.aShortArray83[local194]; + local246 = anIntArray468[local292]; + local248 = anIntArray468[local297]; + local258 = anIntArray468[local302]; + @Pc(318) int local318 = anIntArray467[local292]; + @Pc(322) int local322 = anIntArray467[local297]; + @Pc(326) int local326 = anIntArray467[local302]; + if ((local246 - local248) * (local322 - local326) - (local322 - local318) * (local258 - local248) > 0) { + Rasteriser.fillSpriteTriangle(local151.pixels, local318, local322, local326, local246, local248, local258, local134); + } + } + } + return local151; + } + + @OriginalMember(owner = "client!td", name = "l", descriptor = "()V") + @Override + public final void method4578() { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + @Pc(10) int local10 = this.vertexZ[local1]; + this.vertexZ[local1] = this.vertexX[local1]; + this.vertexX[local1] = -local10; + } + this.bounds.valid = false; + this.vertexBuffer.valid = false; + } +} diff --git a/client/src/main/java/rt4/GlModel_Class23.java b/client/src/main/java/rt4/GlModel_Class23.java new file mode 100644 index 0000000..31e0b57 --- /dev/null +++ b/client/src/main/java/rt4/GlModel_Class23.java @@ -0,0 +1,20 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!de") +public final class GlModel_Class23 { + + @OriginalMember(owner = "client!de", name = "a", descriptor = "[S") + public short[] aShortArray7; + + @OriginalMember(owner = "client!de", name = "b", descriptor = "[S") + public short[] aShortArray8; + + @OriginalMember(owner = "client!de", name = "c", descriptor = "[S") + public short[] aShortArray9; + + @OriginalMember(owner = "client!de", name = "d", descriptor = "[S") + public short[] aShortArray10; +} diff --git a/client/src/main/java/rt4/GlRaster.java b/client/src/main/java/rt4/GlRaster.java new file mode 100644 index 0000000..093f2ca --- /dev/null +++ b/client/src/main/java/rt4/GlRaster.java @@ -0,0 +1,267 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.IntBuffer; + +public final class GlRaster { + + @OriginalMember(owner = "client!dj", name = "b", descriptor = "I") + public static int clipTop = 0; + + @OriginalMember(owner = "client!dj", name = "c", descriptor = "I") + public static int clipLeft = 0; + + @OriginalMember(owner = "client!dj", name = "d", descriptor = "I") + private static int clipRight = 0; + + @OriginalMember(owner = "client!dj", name = "e", descriptor = "I") + public static int clipBottom = 0; + + @OriginalMember(owner = "client!dj", name = "a", descriptor = "(IIII)V") + public static void drawHorizontalLine(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int length, @OriginalArg(3) int color) { + GlRenderer.method4162(); + @Pc(5) float xCoordinateStart = (float) x + 0.3F; + @Pc(10) float xCoordinateEnd = xCoordinateStart + (float) length; + @Pc(18) float yCoordinate = (float) GlRenderer.canvasHeight - (float) y - 0.3F; + @Pc(20) GL2 gl = GlRenderer.gl; + gl.glBegin(GL2.GL_LINES); + gl.glColor3ub((byte) (color >> 16), (byte) (color >> 8), (byte) color); + gl.glVertex2f(xCoordinateStart, yCoordinate); + gl.glVertex2f(xCoordinateEnd, yCoordinate); + gl.glEnd(); + } + + @OriginalMember(owner = "client!dj", name = "b", descriptor = "(IIII)V") + public static void drawVerticalLine(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int height, @OriginalArg(3) int color) { + GlRenderer.method4162(); + @Pc(5) float xCoordinate = (float) x + 0.3F; + @Pc(13) float yCoordinateStart = (float) GlRenderer.canvasHeight - (float) y - 0.3F; + @Pc(18) float yCoordinateEnd = yCoordinateStart - (float) height; + @Pc(20) GL2 gl = GlRenderer.gl; + gl.glBegin(GL2.GL_LINES); + gl.glColor3ub((byte) (color >> 16), (byte) (color >> 8), (byte) color); + gl.glVertex2f(xCoordinate, yCoordinateStart); + gl.glVertex2f(xCoordinate, yCoordinateEnd); + gl.glEnd(); + } + + @OriginalMember(owner = "client!dj", name = "c", descriptor = "()V") + public static void method1177() { + clipLeft = 0; + clipTop = 0; + clipRight = GlRenderer.canvasWidth; + clipBottom = GlRenderer.canvasHeight; + @Pc(9) GL2 gl = GlRenderer.gl; + gl.glDisable(GL2.GL_SCISSOR_TEST); + GlFont.method1173(); + } + + @OriginalMember(owner = "client!dj", name = "a", descriptor = "([IIIII)V") + public static void drawPixels(@OriginalArg(0) int[] pixels, @OriginalArg(1) int x, @OriginalArg(2) int y, @OriginalArg(3) int width, @OriginalArg(4) int height) { + GlRenderer.method4162(); + @Pc(2) GL2 gl = GlRenderer.gl; + gl.glRasterPos2i(x, GlRenderer.canvasHeight - y); + gl.glPixelZoom((float) GameShell.canvasScale, (float) -GameShell.canvasScale); + gl.glDisable(GL2.GL_BLEND); + gl.glDisable(GL2.GL_ALPHA_TEST); + gl.glDrawPixels(width, height, GL2.GL_BGRA, GlRenderer.bigEndian ? GL2.GL_UNSIGNED_INT_8_8_8_8_REV : GL2.GL_UNSIGNED_BYTE, IntBuffer.wrap(pixels)); + gl.glPixelZoom(1.0F, 1.0F); + gl.glEnable(GL2.GL_ALPHA_TEST); + gl.glEnable(GL2.GL_BLEND); + } + + @OriginalMember(owner = "client!dj", name = "a", descriptor = "(IIIII)V") + public static void drawRect(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int width, @OriginalArg(3) int height, @OriginalArg(4) int color) { + GlRenderer.method4162(); + @Pc(5) float local5 = (float) x + 0.3F; + @Pc(12) float local12 = local5 + (float) (width - 1); + @Pc(20) float local20 = (float) GlRenderer.canvasHeight - (float) y - 0.3F; + @Pc(27) float local27 = local20 - (float) (height - 1); + @Pc(29) GL2 gl = GlRenderer.gl; + gl.glBegin(GL2.GL_LINE_LOOP); + gl.glColor3ub((byte) (color >> 16), (byte) (color >> 8), (byte) color); + gl.glVertex2f(local5, local20); + gl.glVertex2f(local5, local27); + gl.glVertex2f(local12, local27); + gl.glVertex2f(local12, local20); + gl.glEnd(); + } + + @OriginalMember(owner = "client!dj", name = "a", descriptor = "(IIIIII)V") + public static void drawRectAlpha(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int width, @OriginalArg(3) int height, @OriginalArg(4) int color, @OriginalArg(5) int alpha) { + GlRenderer.method4162(); + @Pc(5) float local5 = (float) x + 0.3F; + @Pc(12) float local12 = local5 + (float) (width - 1); + @Pc(20) float local20 = (float) GlRenderer.canvasHeight - (float) y - 0.3F; + @Pc(27) float local27 = local20 - (float) (height - 1); + @Pc(29) GL2 gl = GlRenderer.gl; + gl.glBegin(GL2.GL_LINE_LOOP); + gl.glColor4ub((byte) (color >> 16), (byte) (color >> 8), (byte) color, alpha > 255 ? -1 : (byte) alpha); + gl.glVertex2f(local5, local20); + gl.glVertex2f(local5, local27); + gl.glVertex2f(local12, local27); + gl.glVertex2f(local12, local20); + gl.glEnd(); + } + + @OriginalMember(owner = "client!dj", name = "b", descriptor = "(IIIIII)V") + public static void method1181(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + @Pc(3) int local3 = arg2 - arg0; + @Pc(7) int local7 = arg3 - arg1; + @Pc(14) int local14 = local3 >= 0 ? local3 : -local3; + @Pc(21) int local21 = local7 >= 0 ? local7 : -local7; + @Pc(23) int local23 = local14; + if (local14 < local21) { + local23 = local21; + } + if (local23 == 0) { + return; + } + @Pc(37) int local37 = (local3 << 16) / local23; + @Pc(43) int local43 = (local7 << 16) / local23; + if (local43 <= local37) { + local37 = -local37; + } else { + local43 = -local43; + } + @Pc(59) int local59 = arg5 * local43 >> 17; + @Pc(67) int local67 = arg5 * local43 + 1 >> 17; + @Pc(73) int local73 = arg5 * local37 >> 17; + @Pc(81) int local81 = arg5 * local37 + 1 >> 17; + @Pc(85) int local85 = arg0 + local59; + @Pc(89) int local89 = arg0 - local67; + @Pc(95) int local95 = arg0 + local3 - local67; + @Pc(101) int local101 = arg0 + local3 + local59; + @Pc(105) int local105 = arg1 + local73; + @Pc(109) int local109 = arg1 - local81; + @Pc(115) int local115 = arg1 + local7 - local81; + @Pc(121) int local121 = arg1 + local7 + local73; + GlRenderer.method4162(); + @Pc(124) GL2 gl = GlRenderer.gl; + gl.glColor3ub((byte) (arg4 >> 16), (byte) (arg4 >> 8), (byte) arg4); + gl.glBegin(GL2.GL_TRIANGLE_FAN); + if (local43 <= local37) { + gl.glVertex2f((float) local101, (float) (GlRenderer.canvasHeight - local121)); + gl.glVertex2f((float) local95, (float) (GlRenderer.canvasHeight - local115)); + gl.glVertex2f((float) local89, (float) (GlRenderer.canvasHeight - local109)); + gl.glVertex2f((float) local85, (float) (GlRenderer.canvasHeight - local105)); + } else { + gl.glVertex2f((float) local85, (float) (GlRenderer.canvasHeight - local105)); + gl.glVertex2f((float) local89, (float) (GlRenderer.canvasHeight - local109)); + gl.glVertex2f((float) local95, (float) (GlRenderer.canvasHeight - local115)); + gl.glVertex2f((float) local101, (float) (GlRenderer.canvasHeight - local121)); + } + gl.glEnd(); + } + + @OriginalMember(owner = "client!dj", name = "c", descriptor = "(IIIIII)V") + public static void fillRectAlpha(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int width, @OriginalArg(3) int height, @OriginalArg(4) int color, @OriginalArg(5) int alpha) { + GlRenderer.method4162(); + @Pc(3) float local3 = (float) x; + @Pc(8) float local8 = local3 + (float) width; + @Pc(13) float local13 = (float) (GlRenderer.canvasHeight - y); + @Pc(18) float local18 = local13 - (float) height; + @Pc(20) GL2 gl = GlRenderer.gl; + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glColor4ub((byte) (color >> 16), (byte) (color >> 8), (byte) color, alpha > 255 ? -1 : (byte) alpha); + gl.glVertex2f(local3, local13); + gl.glVertex2f(local3, local18); + gl.glVertex2f(local8, local18); + gl.glVertex2f(local8, local13); + gl.glEnd(); + } + + @OriginalMember(owner = "client!dj", name = "c", descriptor = "(IIII)V") + public static void method1183(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (clipLeft < arg0) { + clipLeft = arg0; + } + if (clipTop < arg1) { + clipTop = arg1; + } + if (clipRight > arg2) { + clipRight = arg2; + } + if (clipBottom > arg3) { + clipBottom = arg3; + } + @Pc(21) GL2 gl = GlRenderer.gl; + gl.glEnable(GL2.GL_SCISSOR_TEST); + if (clipLeft <= clipRight && clipTop <= clipBottom) { + gl.glScissor((int) (clipLeft * GameShell.canvasScale + GameShell.subpixelX), (int) ((GlRenderer.canvasHeight - clipBottom) * GameShell.canvasScale + GameShell.subpixelY), (int) ((clipRight - clipLeft) * GameShell.canvasScale + GameShell.subpixelX), (int) ((clipBottom - clipTop) * GameShell.canvasScale + GameShell.subpixelY)); + } else { + gl.glScissor(0, 0, 0, 0); + } + GlFont.method1173(); + } + + @OriginalMember(owner = "client!dj", name = "d", descriptor = "()V") + public static void clear() { + GlRenderer.gl.glClear(GL2.GL_DEPTH_BUFFER_BIT | GL2.GL_COLOR_BUFFER_BIT); + } + + @OriginalMember(owner = "client!dj", name = "b", descriptor = "(IIIII)V") + public static void method1185(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + GlRenderer.method4162(); + @Pc(5) float local5 = (float) arg0 + 0.3F; + @Pc(10) float local10 = (float) arg2 + 0.3F; + @Pc(18) float local18 = (float) GlRenderer.canvasHeight - (float) arg1 - 0.3F; + @Pc(26) float local26 = (float) GlRenderer.canvasHeight - (float) arg3 - 0.3F; + @Pc(28) GL2 gl = GlRenderer.gl; + gl.glBegin(GL2.GL_LINE_LOOP); + gl.glColor3ub((byte) (arg4 >> 16), (byte) (arg4 >> 8), (byte) arg4); + gl.glVertex2f(local5, local18); + gl.glVertex2f(local10, local26); + gl.glEnd(); + } + + @OriginalMember(owner = "client!dj", name = "c", descriptor = "(IIIII)V") + public static void fillRect(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + GlRenderer.method4162(); + @Pc(3) float local3 = (float) arg0; + @Pc(8) float local8 = local3 + (float) arg2; + @Pc(13) float local13 = (float) (GlRenderer.canvasHeight - arg1); + @Pc(18) float local18 = local13 - (float) arg3; + @Pc(20) GL2 gl = GlRenderer.gl; + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glColor3ub((byte) (arg4 >> 16), (byte) (arg4 >> 8), (byte) arg4); + gl.glVertex2f(local3, local13); + gl.glVertex2f(local3, local18); + gl.glVertex2f(local8, local18); + gl.glVertex2f(local8, local13); + gl.glEnd(); + } + + @OriginalMember(owner = "client!dj", name = "d", descriptor = "(IIII)V") + public static void setClip(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (arg0 < 0) { + arg0 = 0; + } + if (arg1 < 0) { + arg1 = 0; + } + if (arg2 > GlRenderer.canvasWidth) { + arg2 = GlRenderer.canvasWidth; + } + if (arg3 > GlRenderer.canvasHeight) { + arg3 = GlRenderer.canvasHeight; + } + clipLeft = arg0; + clipTop = arg1; + clipRight = arg2; + clipBottom = arg3; + @Pc(27) GL2 gl = GlRenderer.gl; + gl.glEnable(GL2.GL_SCISSOR_TEST); + if (clipLeft <= clipRight && clipTop <= clipBottom) { + gl.glScissor((int) (clipLeft * GameShell.canvasScale + GameShell.subpixelX), (int) ((GlRenderer.canvasHeight - clipBottom) * GameShell.canvasScale + GameShell.subpixelY), (int) ((clipRight - clipLeft) * GameShell.canvasScale + GameShell.subpixelX), (int) ((clipBottom - clipTop) * GameShell.canvasScale + GameShell.subpixelY)); + } else { + gl.glScissor(0, 0, 0, 0); + } + GlFont.method1173(); + } + +} diff --git a/client/src/main/java/rt4/GlRenderer.java b/client/src/main/java/rt4/GlRenderer.java new file mode 100644 index 0000000..92e4564 --- /dev/null +++ b/client/src/main/java/rt4/GlRenderer.java @@ -0,0 +1,860 @@ +package rt4; + +import com.jogamp.nativewindow.awt.AWTGraphicsConfiguration; +import com.jogamp.nativewindow.awt.JAWTWindow; +import com.jogamp.opengl.*; +import jogamp.newt.awt.NewtFactoryAWT; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.*; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.IntBuffer; +import java.nio.charset.StandardCharsets; + +public final class GlRenderer { + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "Ljava/lang/String;") + private static String vendor; + + @OriginalMember(owner = "client!tf", name = "b", descriptor = "Ljava/lang/String;") + private static String renderer; + public static float vFOV = 0; + public static float hFOV = 0; + + + + private static ByteBuffer pixelByteBuffer; + private static IntBuffer pixelIntBuffer; + public static int[] pixelData; + + @OriginalMember(owner = "client!tf", name = "c", descriptor = "F") + private static float aFloat30; + + @OriginalMember(owner = "client!tf", name = "e", descriptor = "I") + public static int maxTextureUnits; + + @OriginalMember(owner = "client!tf", name = "f", descriptor = "Z") + public static boolean bigEndian; + + @OriginalMember(owner = "client!tf", name = "k", descriptor = "F") + private static float aFloat32; + + @OriginalMember(owner = "client!tf", name = "p", descriptor = "Lgl!javax/media/opengl/GLContext;") + private static GLContext context; + + @OriginalMember(owner = "client!tf", name = "r", descriptor = "Z") + public static boolean extTexture3dSupported; + + @OriginalMember(owner = "client!tf", name = "t", descriptor = "Lgl!javax/media/opengl/GL;") + public static GL2 gl; + + @OriginalMember(owner = "client!tf", name = "v", descriptor = "I") + private static int maxTextureImageUnits; + + @OriginalMember(owner = "client!tf", name = "y", descriptor = "Z") + public static boolean arbMultisampleSupported; + + @OriginalMember(owner = "client!tf", name = "z", descriptor = "I") + public static int anInt5328; + + @OriginalMember(owner = "client!tf", name = "A", descriptor = "I") + public static int canvasHeight; + + @OriginalMember(owner = "client!tf", name = "B", descriptor = "I") + private static int version; + + @OriginalMember(owner = "client!tf", name = "C", descriptor = "Z") + public static boolean arbVboSupported; + + @OriginalMember(owner = "client!tf", name = "D", descriptor = "I") + private static int maxTextureCoords; + + @OriginalMember(owner = "client!tf", name = "E", descriptor = "Lgl!javax/media/opengl/GLDrawable;") + private static GLDrawable drawable; + + @OriginalMember(owner = "client!tf", name = "H", descriptor = "Z") + public static boolean arbVertexProgramSupported; + + @OriginalMember(owner = "client!tf", name = "J", descriptor = "I") + public static int canvasWidth; + + @OriginalMember(owner = "client!tf", name = "K", descriptor = "Z") + public static boolean arbTextureCubeMapSupported; + + @OriginalMember(owner = "client!tf", name = "d", descriptor = "Z") + private static boolean textureMatrixModified = false; + + @OriginalMember(owner = "client!tf", name = "g", descriptor = "I") + public static int anInt5323 = 0; + + @OriginalMember(owner = "client!tf", name = "h", descriptor = "I") + private static int textureCombineAlphaMode = 0; + + @OriginalMember(owner = "client!tf", name = "i", descriptor = "I") + private static int textureCombineRgbMode = 0; + + @OriginalMember(owner = "client!tf", name = "j", descriptor = "F") + private static float aFloat31 = 0.0F; + + @OriginalMember(owner = "client!tf", name = "l", descriptor = "Z") + private static boolean lightingEnabled = true; + + @OriginalMember(owner = "client!tf", name = "m", descriptor = "F") + private static float aFloat33 = 0.0F; + + @OriginalMember(owner = "client!tf", name = "n", descriptor = "Z") + public static boolean normalArrayEnabled = true; + + @OriginalMember(owner = "client!tf", name = "o", descriptor = "Z") + private static boolean aBoolean266 = false; + + @OriginalMember(owner = "client!tf", name = "q", descriptor = "F") + private static final float aFloat34 = 0.09765625F; + + @OriginalMember(owner = "client!tf", name = "s", descriptor = "I") + private static int textureId = -1; + + @OriginalMember(owner = "client!tf", name = "u", descriptor = "Z") + private static boolean depthTestEnabled = true; + + @OriginalMember(owner = "client!tf", name = "w", descriptor = "Z") + public static boolean enabled = false; + + @OriginalMember(owner = "client!tf", name = "x", descriptor = "[F") + private static final float[] matrix = new float[16]; + + @OriginalMember(owner = "client!tf", name = "F", descriptor = "Z") + private static boolean fogEnabled = true; + + @OriginalMember(owner = "client!tf", name = "I", descriptor = "Lclient!na;") + private static final JagString RADEON = JagString.parse("radeon"); + + private static JAWTWindow window; + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(Ljava/lang/String;)Lclient!na;") + private static JagString method4147(@OriginalArg(0) String arg0) { + @Pc(3) byte[] local3; + local3 = arg0.getBytes(StandardCharsets.ISO_8859_1); + return JagString.decodeString(local3, local3.length, 0); + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(IIII)V") + public static void method4148(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + method4171(0, 0, canvasWidth, canvasHeight, arg0, arg1, 0.0F, 0.0F, arg2, arg3); + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "()V") + public static void method4149() { + MaterialManager.setMaterial(0, 0); + method4163(); + setTextureCombineRgbMode(1); + setTextureCombineAlphaMode(1); + setLightingEnabled(false); + setDepthTestEnabled(false); + setFogEnabled(false); + resetTextureMatrix(); + } + + @OriginalMember(owner = "client!tf", name = "b", descriptor = "()V") + public static void resetTextureMatrix() { + if (textureMatrixModified) { + gl.glMatrixMode(GL2.GL_TEXTURE); + gl.glLoadIdentity(); + gl.glMatrixMode(GL2.GL_MODELVIEW); + textureMatrixModified = false; + } + } + + @OriginalMember(owner = "client!tf", name = "c", descriptor = "()V") + public static void method4151() { + MaterialManager.setMaterial(0, 0); // MaterialManager + method4163(); + setTextureCombineRgbMode(0); + setTextureCombineAlphaMode(0); + setLightingEnabled(false); + setDepthTestEnabled(false); + setFogEnabled(false); + resetTextureMatrix(); + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(FF)V") + public static void method4152(@OriginalArg(0) float arg0, @OriginalArg(1) float arg1) { + if (aBoolean266 || arg0 == aFloat33 && arg1 == aFloat31) { + return; + } + aFloat33 = arg0; + aFloat31 = arg1; + if (arg1 == 0.0F) { + matrix[10] = aFloat30; + matrix[14] = aFloat32; + } else { + @Pc(25) float local25 = arg0 / (arg1 + arg0); + @Pc(29) float local29 = local25 * local25; + @Pc(42) float local42 = -aFloat32 * (1.0F - local25) * (1.0F - local25) / arg1; + matrix[10] = aFloat30 + local42; + matrix[14] = aFloat32 * local29; + } + gl.glMatrixMode(GL2.GL_PROJECTION); + gl.glLoadMatrixf(matrix, 0); + gl.glMatrixMode(GL2.GL_MODELVIEW); + } + + @OriginalMember(owner = "client!tf", name = "d", descriptor = "()V") + public static void swapBuffers() { + try { + drawable.swapBuffers(); + readPixels(); + } catch (@Pc(3) Exception local3) { + } + } + + public static void initializePixelBuffer(int width, int height) { + // Allocate ByteBuffer for BGRA pixels (4 bytes per pixel) + pixelByteBuffer = ByteBuffer.allocateDirect(width * height * 4).order(ByteOrder.nativeOrder()); + pixelIntBuffer = pixelByteBuffer.asIntBuffer(); + pixelData = new int[width * height]; + } + + public static void readPixels() { + // Ensure the pixel buffer is initialized with the correct size + if (pixelByteBuffer == null || pixelIntBuffer.capacity() != canvasWidth * canvasHeight) { + initializePixelBuffer(canvasWidth, canvasHeight); + } + + // Read pixels into the direct ByteBuffer + gl.glReadPixels(0, 0, canvasWidth, canvasHeight, GL2.GL_BGRA, + GlRenderer.bigEndian ? GL2.GL_UNSIGNED_INT_8_8_8_8_REV : GL2.GL_UNSIGNED_BYTE, + pixelByteBuffer); + + // Convert to int array if needed + pixelIntBuffer.rewind(); // Prepare the IntBuffer for reading + pixelIntBuffer.get(pixelData, 0, pixelData.length); // Transfer to pixelData array if necessary + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(Z)V") + public static void setFogEnabled(@OriginalArg(0) boolean enabled) { + if (enabled == fogEnabled) { + return; + } + if (enabled) { + gl.glEnable(GL2.GL_FOG); + } else { + gl.glDisable(GL2.GL_FOG); + } + fogEnabled = enabled; + } + + @OriginalMember(owner = "client!tf", name = "e", descriptor = "()V") + public static void method4155() { + MaterialManager.setMaterial(0, 0); + method4163(); + setTextureCombineRgbMode(0); + setTextureCombineAlphaMode(0); + setLightingEnabled(false); + setDepthTestEnabled(false); + setFogEnabled(false); + resetTextureMatrix(); + } + + @OriginalMember(owner = "client!tf", name = "f", descriptor = "()V") + private static void method4156() { + aBoolean266 = false; + gl.glDisable(GL2.GL_TEXTURE_2D); + textureId = -1; + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_COMBINE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + textureCombineRgbMode = 0; + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE); + textureCombineAlphaMode = 0; + gl.glEnable(GL2.GL_LIGHTING); + gl.glEnable(GL2.GL_FOG); + gl.glEnable(GL2.GL_DEPTH_TEST); + lightingEnabled = true; + depthTestEnabled = true; + fogEnabled = true; + resetMaterial(); + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_COMBINE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE); + gl.glActiveTexture(GL2.GL_TEXTURE0); + gl.setSwapInterval(0); + gl.glClearColor(0.0F, 0.0F, 0.0F, 0.0F); + gl.glShadeModel(GL2.GL_SMOOTH); + gl.glClearDepth(1.0D); + gl.glDepthFunc(GL2.GL_LEQUAL); + enableDepthMask(); + gl.glMatrixMode(GL2.GL_TEXTURE); + gl.glLoadIdentity(); + gl.glPolygonMode(GL2.GL_FRONT, GL2.GL_FILL); + gl.glEnable(GL2.GL_CULL_FACE); + gl.glCullFace(GL2.GL_BACK); + gl.glEnable(GL2.GL_BLEND); // Enable the OpenGL Blending functionality + gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA); // Set the blend mode to blend our current RGBA with what is already in the buffer + gl.glEnable(GL2.GL_ALPHA_TEST); + gl.glAlphaFunc(GL2.GL_GREATER, 0.0F); + gl.glEnableClientState(GL2.GL_VERTEX_ARRAY); + gl.glEnableClientState(GL2.GL_NORMAL_ARRAY); + normalArrayEnabled = true; + gl.glEnableClientState(GL2.GL_COLOR_ARRAY); + gl.glEnableClientState(GL2.GL_TEXTURE_COORD_ARRAY); + gl.glMatrixMode(GL2.GL_MODELVIEW); + gl.glLoadIdentity(); + FogManager.setup(); + LightingManager.method2400(); + } + + @OriginalMember(owner = "client!tf", name = "g", descriptor = "()V") + public static void enableDepthMask() { + gl.glDepthMask(true); + } + + @OriginalMember(owner = "client!tf", name = "b", descriptor = "(Z)V") + public static void setDepthTestEnabled(@OriginalArg(0) boolean enabled) { + if (enabled == depthTestEnabled) { + return; + } + if (enabled) { + gl.glEnable(GL2.GL_DEPTH_TEST); + } else { + gl.glDisable(GL2.GL_DEPTH_TEST); + } + depthTestEnabled = enabled; + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(F)V") + public static void method4159(@OriginalArg(0) float arg0) { + method4152(3000.0F, arg0 * 1.5F); + } + + @OriginalMember(owner = "client!tf", name = "h", descriptor = "()V") + public static void draw() { + @Pc(2) int[] local2 = new int[2]; + gl.glGetIntegerv(GL2.GL_DRAW_BUFFER, local2, 0); + gl.glGetIntegerv(GL2.GL_READ_BUFFER, local2, 1); + gl.glDrawBuffer(GL2.GL_BACK_LEFT); + gl.glReadBuffer(GL2.GL_FRONT_LEFT); + setTextureId(-1); + gl.glPushAttrib(GL2.GL_ENABLE_BIT); + gl.glDisable(GL2.GL_FOG); + gl.glDisable(GL2.GL_BLEND); + gl.glDisable(GL2.GL_DEPTH_TEST); + gl.glDisable(GL2.GL_ALPHA_TEST); + gl.glRasterPos2i(0, 0); + gl.glCopyPixels(0, 0, canvasWidth, canvasHeight, GL2.GL_COLOR); + gl.glPopAttrib(); + gl.glDrawBuffer(local2[0]); + gl.glReadBuffer(local2[1]); + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(Ljava/awt/Canvas;)V") + public static void createAndDestroyContext(@OriginalArg(0) Canvas canvas) { + try { + if (!canvas.isDisplayable()) { + return; + } + GLProfile profile = GLProfile.getDefault(); + + GLCapabilities glCaps = new GLCapabilities(profile); + AWTGraphicsConfiguration config = AWTGraphicsConfiguration.create(canvas.getGraphicsConfiguration(), glCaps, glCaps); + JAWTWindow jawtWindow = NewtFactoryAWT.getNativeWindow(canvas, config); + @Pc(5) GLDrawableFactory glDrawableFactory = GLDrawableFactory.getFactory(profile); + @Pc(11) GLDrawable glDrawable = glDrawableFactory.createGLDrawable(jawtWindow); + + glDrawable.setRealized(true); + @Pc(18) GLContext glContext = glDrawable.createContext(null); + glContext.makeCurrent(); + glContext.release(); + glContext.destroy(); + glDrawable.setRealized(false); + } catch (@Pc(30) Throwable ex) { + } + } + + @OriginalMember(owner = "client!tf", name = "i", descriptor = "()V") + public static void method4162() { + MaterialManager.setMaterial(0, 0); + method4163(); + setTextureId(-1); + setLightingEnabled(false); + setDepthTestEnabled(false); + setFogEnabled(false); + resetTextureMatrix(); + } + + @OriginalMember(owner = "client!tf", name = "j", descriptor = "()V") + private static void method4163() { + if (aBoolean266) { + return; + } + gl.glMatrixMode(GL2.GL_PROJECTION); // Switch to the projection matrix so that we can manipulate how our scene is viewed + gl.glLoadIdentity(); // Reset the projection matrix to the identity matrix so that we don't get any artifacts (cleaning up) + gl.glOrtho(0, canvasWidth, 0, canvasHeight, -1.0D, 1.0D); + setViewportBounds(0, 0, canvasWidth, canvasHeight); + gl.glMatrixMode(GL2.GL_MODELVIEW); // Switch back to the model view matrix, so that we can start drawing shapes correctly + gl.glLoadIdentity(); // Reset the projection matrix to the identity matrix so that we don't get any artifacts (cleaning up) + aBoolean266 = true; + } + + @OriginalMember(owner = "client!tf", name = "c", descriptor = "(Z)V") + public static void setLightingEnabled(@OriginalArg(0) boolean enabled) { + if (enabled == lightingEnabled) { + return; + } + if (enabled) { + gl.glEnable(GL2.GL_LIGHTING); + } else { + gl.glDisable(GL2.GL_LIGHTING); + } + lightingEnabled = enabled; + } + + @OriginalMember(owner = "client!tf", name = "l", descriptor = "()F") + public static float method4166() { + return aFloat31; + } + + @OriginalMember(owner = "client!tf", name = "m", descriptor = "()I") + private static int checkContext() { + @Pc(1) int result = 0; + vendor = gl.glGetString(GL2.GL_VENDOR); + renderer = gl.glGetString(GL2.GL_RENDERER); + @Pc(12) String vendor = GlRenderer.vendor.toLowerCase(); + if (vendor.contains("microsoft")) { + result = 1; + } + if (vendor.contains("brian paul") || vendor.contains("mesa")) { + result |= 0x1; + } + @Pc(39) String version = gl.glGetString(GL2.GL_VERSION); + @Pc(43) String[] versionParts = version.split("[. ]"); + if (versionParts.length >= 2) { + try { + @Pc(52) int major = Integer.parseInt(versionParts[0]); + @Pc(57) int minor = Integer.parseInt(versionParts[1]); + GlRenderer.version = major * 10 + minor; + } catch (@Pc(65) NumberFormatException ex) { + result |= 0x4; + } + } else { + result |= 0x4; + } + if (GlRenderer.version < 12) { + result |= 0x2; + } + if (!gl.isExtensionAvailable("GL_ARB_multitexture")) { + result |= 0x8; + } + if (!gl.isExtensionAvailable("GL_ARB_texture_env_combine")) { + result |= 0x20; + } + @Pc(100) int[] data = new int[1]; + gl.glGetIntegerv(GL2.GL_MAX_TEXTURE_UNITS, data, 0); + maxTextureUnits = data[0]; + gl.glGetIntegerv(GL2.GL_MAX_TEXTURE_COORDS, data, 0); + maxTextureCoords = data[0]; + gl.glGetIntegerv(GL2.GL_MAX_TEXTURE_IMAGE_UNITS, data, 0); + maxTextureImageUnits = data[0]; + if (maxTextureUnits < 2 || maxTextureCoords < 2 || maxTextureImageUnits < 2) { + result |= 0x10; + } + if (result != 0) { + return result; + } + bigEndian = ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN; + arbVboSupported = gl.isExtensionAvailable("GL_ARB_vertex_buffer_object"); + arbMultisampleSupported = gl.isExtensionAvailable("GL_ARB_multisample"); + arbTextureCubeMapSupported = gl.isExtensionAvailable("GL_ARB_texture_cube_map"); + arbVertexProgramSupported = gl.isExtensionAvailable("GL_ARB_vertex_program"); + extTexture3dSupported = gl.isExtensionAvailable("GL_EXT_texture3D"); + @Pc(176) JagString renderer = method4147(GlRenderer.renderer).toLowerCase(); + if (renderer.indexOf(RADEON) != -1) { + @Pc(184) int v = 0; + @Pc(193) JagString[] rendererParts = renderer.replaceSlashWithSpace().split(32); + for (@Pc(195) int i = 0; i < rendererParts.length; i++) { + @Pc(203) JagString part = rendererParts[i]; + if (part.length() >= 4 && part.substring(4, 0).isInt()) { + v = part.substring(4, 0).parseInt(); + break; + } + } + if (v >= 7000 && v <= 7999) { + arbVboSupported = false; + } + if (v >= 7000 && v <= 9250) { + extTexture3dSupported = false; + } + GlModel.arbVboSupported = arbVboSupported; + } + if (arbVboSupported) { + try { + @Pc(250) int[] temp = new int[1]; + gl.glGenBuffers(1, temp, 0); + } catch (@Pc(257) Throwable ex) { + return -4; + } + } + return 0; + } + + @OriginalMember(owner = "client!tf", name = "n", descriptor = "()V") + public static void clearDepthBuffer() { + gl.glClear(GL2.GL_DEPTH_BUFFER_BIT); + } + + @OriginalMember(owner = "client!tf", name = "o", descriptor = "()V") + public static void quit() { + if (gl != null) { + try { + MaterialManager.quit(); // MaterialManager + } catch (@Pc(5) Throwable local5) { + } + } + + if (window != null) { + if (!window.getLock().isLocked()) { + window.lockSurface(); + } + + if (context != null) { + GlCleaner.clear(); // GlCleaner + try { + if (GLContext.getCurrent() == context) { + context.release(); + } + } catch (@Pc(17) Throwable ex) { + } + try { + context.destroy(); + } catch (@Pc(21) Throwable ex) { + } + } + } + + if (drawable != null) { + try { + drawable.setRealized(false); + } catch (@Pc(30) Throwable ex) { + } + } + window = null; + gl = null; + context = null; + drawable = null; + LightingManager.method2398(); // LightingManager + enabled = false; + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(FFF)V") + public static void translateTextureMatrix(@OriginalArg(0) float x, @OriginalArg(1) float y, @OriginalArg(2) float z) { + gl.glMatrixMode(GL2.GL_TEXTURE); + if (textureMatrixModified) { + gl.glLoadIdentity(); + } + gl.glTranslatef(x, y, z); + gl.glMatrixMode(GL2.GL_MODELVIEW); + textureMatrixModified = true; + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(IIIIIIFFII)V") + public static void method4171(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) float arg6, @OriginalArg(7) float arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9) { + @Pc(7) int local7 = (arg0 - arg4 << 8) / arg8; + @Pc(17) int local17 = (arg0 + arg2 - arg4 << 8) / arg8; + @Pc(25) int local25 = (arg1 - arg5 << 8) / arg9; + @Pc(35) int local35 = (arg1 + arg3 - arg5 << 8) / arg9; + gl.glMatrixMode(GL2.GL_PROJECTION); + gl.glLoadIdentity(); + method4175((float) local7 * aFloat34, (float) local17 * aFloat34, (float) -local35 * aFloat34, (float) -local25 * aFloat34, 50.0F, (float) GlobalConfig.VIEW_DISTANCE); + setViewportBounds(arg0, canvasHeight - arg1 - arg3, arg2, arg3); + gl.glMatrixMode(GL2.GL_MODELVIEW); + gl.glLoadIdentity(); + gl.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + if (arg6 != 0.0F) { + gl.glRotatef(arg6, 1.0F, 0.0F, 0.0F); + } + if (arg7 != 0.0F) { + gl.glRotatef(arg7, 0.0F, 1.0F, 0.0F); + } + aBoolean266 = false; + Rasteriser.screenLowerX = local7; + Rasteriser.screenUpperX = local17; + Rasteriser.screenLowerY = local25; + Rasteriser.screenUpperY = local35; + } + + @OriginalMember(owner = "client!tf", name = "d", descriptor = "(Z)V") + private static void setNormalArrayEnabled(@OriginalArg(0) boolean enabled) { + if (enabled == normalArrayEnabled) { + return; + } + if (enabled) { + gl.glEnableClientState(GL2.GL_NORMAL_ARRAY); + } else { + gl.glDisableClientState(GL2.GL_NORMAL_ARRAY); + } + normalArrayEnabled = enabled; + } + + @OriginalMember(owner = "client!tf", name = "p", descriptor = "()V") + public static void restoreLighting() { + if (Preferences.highDetailLighting) { + setLightingEnabled(true); + setNormalArrayEnabled(true); + } else { + setLightingEnabled(false); + setNormalArrayEnabled(false); + } + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(I)V") + public static void setTextureCombineAlphaMode(@OriginalArg(0) int mode) { + if (mode == textureCombineAlphaMode) { + return; + } + if (mode == 0) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE); + } + if (mode == 1) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_REPLACE); + } + if (mode == 2) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_ADD); + } + textureCombineAlphaMode = mode; + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(FFFFFF)V") + private static void method4175(@OriginalArg(0) float xMin, @OriginalArg(1) float xMax, @OriginalArg(2) float yMin, @OriginalArg(3) float yMax, @OriginalArg(4) float nearClip, @OriginalArg(5) float farClip) { + float width = xMax - xMin; + float height = yMax - yMin; + + hFOV = 2 * (float)Math.atan(width / (2 * nearClip)); + vFOV = 2 * (float)Math.atan(height / (2 * nearClip)); + hFOV = (float)Math.toDegrees(hFOV); + vFOV = (float)Math.toDegrees(vFOV); + + @Pc(3) float local3 = nearClip * 2.0F; + matrix[0] = local3 / (xMax - xMin); + matrix[1] = 0.0F; + matrix[2] = 0.0F; + matrix[3] = 0.0F; + matrix[4] = 0.0F; + matrix[5] = local3 / (yMax - yMin); + matrix[6] = 0.0F; + matrix[7] = 0.0F; + matrix[8] = (xMax + xMin) / (xMax - xMin); + matrix[9] = (yMax + yMin) / (yMax - yMin); + matrix[10] = aFloat30 = -(farClip + nearClip) / (farClip - nearClip); + matrix[11] = -1.0F; + matrix[12] = 0.0F; + matrix[13] = 0.0F; + matrix[14] = aFloat32 = -(local3 * farClip) / (farClip - nearClip); + matrix[15] = 0.0F; + gl.glLoadMatrixf(matrix, 0); + aFloat33 = 0.0F; + aFloat31 = 0.0F; + } + + @OriginalMember(owner = "client!tf", name = "b", descriptor = "(I)V") + public static void clearColorAndDepthBuffers(@OriginalArg(0) int rgb) { + gl.glClearColor((float) (rgb >> 16 & 0xFF) / 255.0F, (float) (rgb >> 8 & 0xFF) / 255.0F, (float) (rgb & 0xFF) / 255.0F, 0.0F); + gl.glClear(GL2.GL_DEPTH_BUFFER_BIT | GL2.GL_COLOR_BUFFER_BIT); + gl.glClearColor(0.0F, 0.0F, 0.0F, 0.0F); + } + + @OriginalMember(owner = "client!tf", name = "c", descriptor = "(I)V") + public static void setTextureId(@OriginalArg(0) int id) { + if (id == textureId) { + return; + } + if (id == -1) { + gl.glDisable(GL2.GL_TEXTURE_2D); + } else { + if (textureId == -1) { + gl.glEnable(GL2.GL_TEXTURE_2D); + } + gl.glBindTexture(GL2.GL_TEXTURE_2D, id); + } + textureId = id; + } + + @OriginalMember(owner = "client!tf", name = "q", descriptor = "()V") + public static void disableDepthMask() { + gl.glDepthMask(false); + } + + @OriginalMember(owner = "client!tf", name = "r", descriptor = "()F") + public static float method4179() { + return aFloat33; + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(Ljava/awt/Canvas;I)I") + public static int init(@OriginalArg(0) Canvas canvas, @OriginalArg(1) int numSamples) { + try { + if (!canvas.isDisplayable()) { + return -1; + } + GLProfile profile = GLProfile.get(GLProfile.GL3bc); + @Pc(8) GLCapabilities capabilities = new GLCapabilities(profile); + if (numSamples > 0) { + capabilities.setSampleBuffers(true); + capabilities.setNumSamples(numSamples * 4); + } + @Pc(18) GLDrawableFactory factory = GLDrawableFactory.getFactory(profile); + AWTGraphicsConfiguration config = AWTGraphicsConfiguration.create(canvas.getGraphicsConfiguration(), capabilities, capabilities); + window = NewtFactoryAWT.getNativeWindow(canvas, config); + if (!window.getLock().isLocked()) { + window.lockSurface(); + } + try { + drawable = factory.createGLDrawable(window); + drawable.setRealized(true); + } finally { + window.unlockSurface(); + } + @Pc(29) int swapBuffersAttempts = 0; + @Pc(36) int result; + while (true) { + context = drawable.createContext(null); + try { + result = context.makeCurrent(); + if (result != 0) { + break; + } + } catch (@Pc(41) Exception local41) { + } + if (swapBuffersAttempts++ > 5) { + return -2; + } + ThreadUtils.sleep(1000L); + } + if (window.getLock().isLocked()) { + window.unlockSurface(); + } + gl = GLContext.getCurrentGL().getGL2(); + gl.glLineWidth((float) GameShell.canvasScale); + enabled = true; + canvasWidth = canvas.getSize().width; + canvasHeight = canvas.getSize().height; + result = checkContext(); + if (result != 0) { + quit(); + return result; + } + method4184(); + method4156(); + gl.glClear(GL2.GL_COLOR_BUFFER_BIT); + swapBuffersAttempts = 0; + while (true) { + try { + drawable.swapBuffers(); + break; + } catch (@Pc(86) Exception ex) { + if (swapBuffersAttempts++ > 5) { + quit(); + return -3; + } + ThreadUtils.sleep(100L); + } + } + gl.glClear(GL2.GL_COLOR_BUFFER_BIT); + return 0; + } catch (@Pc(103) Throwable ex) { + quit(); + return -5; + } + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(II)V") + public static void setCanvasSize(@OriginalArg(0) int width, @OriginalArg(1) int height) { + canvasWidth = width; + canvasHeight = height; + aBoolean266 = false; + } + + public static int leftMargin; + + public static int topMargin; + + public static int viewportWidth; + + public static int viewportHeight; + + public static void setViewportBounds(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int width, @OriginalArg(3) int height) { + leftMargin = x; + topMargin = y; + viewportWidth = width; + viewportHeight = height; + resizeViewport(); + } + + @OriginalMember(owner = "client!gi", name = "b", descriptor = "()V") + private static void resizeViewport() { + gl.glViewport((int) (leftMargin * GameShell.canvasScale + GameShell.subpixelX), (int) (topMargin * GameShell.canvasScale + GameShell.subpixelY), + (int) (viewportWidth * GameShell.canvasScale + GameShell.subpixelX), (int) (viewportHeight * GameShell.canvasScale + GameShell.subpixelY)); + } + + @OriginalMember(owner = "client!tf", name = "a", descriptor = "(IIIIII)V") + public static void method4182(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + @Pc(2) int local2 = -arg0; + @Pc(6) int local6 = canvasWidth - arg0; + @Pc(9) int local9 = -arg1; + @Pc(13) int local13 = canvasHeight - arg1; + gl.glMatrixMode(GL2.GL_PROJECTION); + gl.glLoadIdentity(); + @Pc(23) float local23 = (float) arg2 / 512.0F; + @Pc(30) float local30 = local23 * (256.0F / (float) arg4); + @Pc(37) float local37 = local23 * (256.0F / (float) arg5); + gl.glOrtho((float) local2 * local30, (float) local6 * local30, (float) -local13 * local37, (float) -local9 * local37, 50 - arg3, GlobalConfig.VIEW_DISTANCE - arg3); + setViewportBounds(0, 0, canvasWidth, canvasHeight); + gl.glMatrixMode(GL2.GL_MODELVIEW); + gl.glLoadIdentity(); + gl.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + aBoolean266 = false; + } + + @OriginalMember(owner = "client!tf", name = "d", descriptor = "(I)V") + public static void setTextureCombineRgbMode(@OriginalArg(0) int mode) { + if (mode == textureCombineRgbMode) { + return; + } + if (mode == 0) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + } + if (mode == 1) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_REPLACE); + } + if (mode == 2) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_ADD); + } + if (mode == 3) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_SUBTRACT); + } + if (mode == 4) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_ADD_SIGNED); + } + if (mode == 5) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_INTERPOLATE); + } + textureCombineRgbMode = mode; + } + + @OriginalMember(owner = "client!tf", name = "s", descriptor = "()V") + private static void method4184() { + @Pc(2) int[] local2 = new int[1]; + gl.glGenTextures(1, local2, 0); + anInt5328 = local2[0]; + gl.glBindTexture(GL2.GL_TEXTURE_2D, anInt5328); + gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, 4, 1, 1, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, IntBuffer.wrap(new int[]{-1})); + LightingManager.method2401(); + MaterialManager.init(); + } + + @OriginalMember(owner = "client!gj", name = "b", descriptor = "(I)V") + public static void resetMaterial() { + MaterialManager.setMaterial(0, 0); + } +} diff --git a/client/src/main/java/rt4/GlSolidColorTexture.java b/client/src/main/java/rt4/GlSolidColorTexture.java new file mode 100644 index 0000000..5d29539 --- /dev/null +++ b/client/src/main/java/rt4/GlSolidColorTexture.java @@ -0,0 +1,65 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!sd") +public final class GlSolidColorTexture extends SecondaryNode { + + @OriginalMember(owner = "client!sd", name = "U", descriptor = "I") + private int textureSize = 0; + + @OriginalMember(owner = "client!sd", name = "K", descriptor = "I") + private int textureId = -1; + + @OriginalMember(owner = "client!sd", name = "L", descriptor = "I") + private final int contextId; + + @OriginalMember(owner = "client!sd", name = "", descriptor = "(I)V") + public GlSolidColorTexture(@OriginalArg(0) int hsl) { + @Pc(9) GL2 gl = GlRenderer.gl; + @Pc(12) int[] temp = new int[1]; + gl.glGenTextures(1, temp, 0); + this.textureId = temp[0]; + this.contextId = GlCleaner.contextId; + GlRenderer.setTextureId(this.textureId); + @Pc(32) int rgb = Rasteriser.palette[hsl]; + @Pc(58) byte[] bytes = new byte[]{(byte) (rgb >> 16), (byte) (rgb >> 8), (byte) rgb, -1}; + @Pc(61) ByteBuffer buffer = ByteBuffer.wrap(bytes); + gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA, 1, 1, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, buffer); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + GlCleaner.onCardTexture += buffer.limit() - this.textureSize; + this.textureSize = buffer.limit(); + } + + @OriginalMember(owner = "client!sd", name = "finalize", descriptor = "()V") + @Override + public final void finalize() throws Throwable { + if (this.textureId != -1) { + GlCleaner.deleteTexture(this.textureId, this.textureSize, this.contextId); + this.textureId = -1; + this.textureSize = 0; + } + super.finalize(); + } + + @OriginalMember(owner = "client!sd", name = "g", descriptor = "(B)V") + public final void method3887() { + @Pc(8) int flags = MaterialManager.getFlags(); + if ((flags & 0x1) == 0) { + GlRenderer.setTextureId(this.textureId); + } + if ((flags & 0x2) == 0) { + GlRenderer.setTextureCombineRgbMode(0); + } + if ((flags & 0x4) == 0) { + GlRenderer.setTextureCombineAlphaMode(0); + } + } +} diff --git a/client/src/main/java/rt4/GlSprite.java b/client/src/main/java/rt4/GlSprite.java new file mode 100644 index 0000000..15a77de --- /dev/null +++ b/client/src/main/java/rt4/GlSprite.java @@ -0,0 +1,522 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!cf") +public class GlSprite extends Sprite { + + @OriginalMember(owner = "client!cf", name = "O", descriptor = "I") + public int powerOfTwoWidth; + + @OriginalMember(owner = "client!cf", name = "cb", descriptor = "I") + public int powerOfTwoHeight; + + @OriginalMember(owner = "client!cf", name = "db", descriptor = "I") + private int anInt1875; + + @OriginalMember(owner = "client!cf", name = "L", descriptor = "I") + protected int anInt1869 = 0; + + @OriginalMember(owner = "client!cf", name = "ab", descriptor = "I") + public int textureId = -1; + + public int[] pixels; + + @OriginalMember(owner = "client!cf", name = "Z", descriptor = "I") + private int anInt1871 = -1; + + @OriginalMember(owner = "client!cf", name = "bb", descriptor = "I") + private int anInt1873 = 0; + + @OriginalMember(owner = "client!cf", name = "", descriptor = "(IIIIII[I)V") + public GlSprite(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int[] arg6) { + this.anInt1860 = arg0; + this.anInt1866 = arg1; + this.anInt1863 = arg2; + this.anInt1861 = arg3; + this.width = arg4; + this.height = arg5; + this.pixels = arg6; + this.method1430(arg6); + this.method1431(); + } + + @OriginalMember(owner = "client!cf", name = "", descriptor = "(Lclient!mm;)V") + public GlSprite(@OriginalArg(0) SoftwareSprite arg0) { + this.anInt1860 = arg0.anInt1860; + this.anInt1866 = arg0.anInt1866; + this.anInt1863 = arg0.anInt1863; + this.anInt1861 = arg0.anInt1861; + this.width = arg0.width; + this.height = arg0.height; + this.pixels = arg0.pixels; + this.method1430(arg0.pixels); + this.method1431(); + } + + @OriginalMember(owner = "client!cf", name = "d", descriptor = "(I)V") + private void method1424(@OriginalArg(0) int arg0) { + if (this.anInt1873 == arg0) { + return; + } + this.anInt1873 = arg0; + @Pc(9) GL2 gl = GlRenderer.gl; + if (arg0 == 2) { + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + } else { + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_NEAREST); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_NEAREST); + } + } + + @OriginalMember(owner = "client!cf", name = "a", descriptor = "(IILclient!cf;)V") + public final void method1425(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) GlSprite arg2) { + if (arg2 == null) { + return; + } + GlRenderer.method4149(); + GlRenderer.setTextureId(arg2.textureId); + arg2.method1424(1); + @Pc(11) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + this.method1424(1); + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glEnable(GL2.GL_TEXTURE_2D); + gl.glBindTexture(GL2.GL_TEXTURE_2D, arg2.textureId); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_REPLACE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_PREVIOUS); + @Pc(47) float local47 = (float) (arg0 - GlRaster.clipLeft) / (float) arg2.powerOfTwoWidth; + @Pc(56) float local56 = (float) (arg1 - GlRaster.clipTop) / (float) arg2.powerOfTwoHeight; + @Pc(68) float local68 = (float) (arg0 + this.width - GlRaster.clipLeft) / (float) arg2.powerOfTwoWidth; + @Pc(80) float local80 = (float) (arg1 + this.height - GlRaster.clipTop) / (float) arg2.powerOfTwoHeight; + @Pc(85) int local85 = arg0 + this.anInt1863; + @Pc(90) int local90 = arg1 + this.anInt1861; + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + @Pc(107) float local107 = (float) this.width / (float) this.powerOfTwoWidth; + @Pc(115) float local115 = (float) this.height / (float) this.powerOfTwoHeight; + gl.glMultiTexCoord2f(GL2.GL_TEXTURE1, local68, local56); + gl.glTexCoord2f(local107, 0.0F); + gl.glVertex2f((float) (local85 + this.width), (float) (GlRenderer.canvasHeight - local90)); + gl.glMultiTexCoord2f(GL2.GL_TEXTURE1, local47, local56); + gl.glTexCoord2f(0.0F, 0.0F); + gl.glVertex2f((float) local85, (float) (GlRenderer.canvasHeight - local90)); + gl.glMultiTexCoord2f(GL2.GL_TEXTURE1, local47, local80); + gl.glTexCoord2f(0.0F, local115); + gl.glVertex2f((float) local85, (float) (GlRenderer.canvasHeight - local90 - this.height)); + gl.glMultiTexCoord2f(GL2.GL_TEXTURE1, local68, local80); + gl.glTexCoord2f(local107, local115); + gl.glVertex2f((float) (local85 + this.width), (float) (GlRenderer.canvasHeight - local90 - this.height)); + gl.glEnd(); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_TEXTURE); + gl.glDisable(GL2.GL_TEXTURE_2D); + gl.glActiveTexture(GL2.GL_TEXTURE0); + } + + @OriginalMember(owner = "client!cf", name = "c", descriptor = "(IIIII)V") + public final void method1426(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + GlRenderer.method4155(); + @Pc(2) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + this.method1424(1); + @Pc(16) float local16 = (float) this.width / (float) this.powerOfTwoWidth; + @Pc(24) float local24 = (float) this.height / (float) this.powerOfTwoHeight; + @Pc(29) float local29 = local16 * (float) arg3; + @Pc(34) float local34 = local24 * (float) arg4; + @Pc(39) int local39 = arg0 + this.anInt1863; + @Pc(46) int local46 = local39 + this.width * arg3; + @Pc(53) int local53 = GlRenderer.canvasHeight - arg1 - this.anInt1861; + @Pc(60) int local60 = local53 - this.height * arg4; + @Pc(65) float local65 = (float) arg2 / 256.0F; + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glColor4f(1.0F, 1.0F, 1.0F, local65); + gl.glTexCoord2f(local29, 0.0F); + gl.glVertex2f((float) local46, (float) local53); + gl.glTexCoord2f(0.0F, 0.0F); + gl.glVertex2f((float) local39, (float) local53); + gl.glTexCoord2f(0.0F, local34); + gl.glVertex2f((float) local39, (float) local60); + gl.glTexCoord2f(local29, local34); + gl.glVertex2f((float) local46, (float) local60); + gl.glEnd(); + } + + @OriginalMember(owner = "client!cf", name = "a", descriptor = "(IIIIIIIILclient!cf;)V") + public final void renderRotatedTransparent(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) GlSprite arg8) { + if (arg8 == null) { + return; + } + GlRenderer.method4149(); + GlRenderer.setTextureId(arg8.textureId); + arg8.method1424(1); + @Pc(11) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + if (GlobalConfig.BILINEAR_MINIMAP) { + this.method1424(2); + } else { + this.method1424(1); + } + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glEnable(GL2.GL_TEXTURE_2D); + gl.glBindTexture(GL2.GL_TEXTURE_2D, arg8.textureId); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_REPLACE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_PREVIOUS); + @Pc(43) int local43 = -arg2 / 2; + @Pc(48) int local48 = -arg3 / 2; + @Pc(51) int local51 = -local43; + @Pc(54) int local54 = -local48; + @Pc(63) int local63 = (int) (Math.sin((double) arg6 / 326.11D) * 65536.0D); + @Pc(72) int local72 = (int) (Math.cos((double) arg6 / 326.11D) * 65536.0D); + @Pc(78) int local78 = local63 * arg7 >> 8; + @Pc(84) int local84 = local72 * arg7 >> 8; + @Pc(96) int local96 = (arg4 << 16) + local48 * local78 + local43 * local84; + @Pc(108) int local108 = (arg5 << 16) + (local48 * local84 - local43 * local78); + @Pc(120) int local120 = (arg4 << 16) + local48 * local78 + local51 * local84; + @Pc(132) int local132 = (arg5 << 16) + (local48 * local84 - local51 * local78); + @Pc(144) int local144 = (arg4 << 16) + local54 * local78 + local43 * local84; + @Pc(156) int local156 = (arg5 << 16) + (local54 * local84 - local43 * local78); + @Pc(168) int local168 = (arg4 << 16) + local54 * local78 + local51 * local84; + @Pc(180) int local180 = (arg5 << 16) + (local54 * local84 - local51 * local78); + @Pc(188) float local188 = (float) arg8.width / (float) arg8.powerOfTwoWidth; + @Pc(196) float local196 = (float) arg8.height / (float) arg8.powerOfTwoHeight; + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + @Pc(211) float local211 = (float) this.powerOfTwoWidth * 65536.0F; + @Pc(217) float local217 = (float) (this.powerOfTwoHeight * 65536); + gl.glMultiTexCoord2f(GL2.GL_TEXTURE1, local188, 0.0F); + gl.glTexCoord2f((float) local120 / local211, (float) local132 / local217); + gl.glVertex2f((float) (arg0 + arg2), (float) (GlRenderer.canvasHeight - arg1)); + gl.glMultiTexCoord2f(GL2.GL_TEXTURE1, 0.0F, 0.0F); + gl.glTexCoord2f((float) local96 / local211, (float) local108 / local217); + gl.glVertex2f((float) arg0, (float) (GlRenderer.canvasHeight - arg1)); + gl.glMultiTexCoord2f(GL2.GL_TEXTURE1, 0.0F, local196); + gl.glTexCoord2f((float) local144 / local211, (float) local156 / local217); + gl.glVertex2f((float) arg0, (float) (GlRenderer.canvasHeight - arg1 - arg3)); + gl.glMultiTexCoord2f(GL2.GL_TEXTURE1, local188, local196); + gl.glTexCoord2f((float) local168 / local211, (float) local180 / local217); + gl.glVertex2f((float) (arg0 + arg2), (float) (GlRenderer.canvasHeight - arg1 - arg3)); + gl.glEnd(); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_TEXTURE); + gl.glDisable(GL2.GL_TEXTURE_2D); + gl.glActiveTexture(GL2.GL_TEXTURE0); + } + + @OriginalMember(owner = "client!cf", name = "d", descriptor = "(II)V") + @Override + public final void renderHorizontalFlip(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + GlRenderer.method4149(); + @Pc(5) int local5 = arg0 + this.anInt1863; + @Pc(10) int local10 = arg1 + this.anInt1861; + @Pc(12) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + this.method1424(1); + gl.glTranslatef((float) local5, (float) (GlRenderer.canvasHeight - local10), 0.0F); + @Pc(35) float local35 = (float) this.width / (float) this.powerOfTwoWidth; + @Pc(43) float local43 = (float) this.height / (float) this.powerOfTwoHeight; + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glTexCoord2f(0.0F, 0.0F); + gl.glVertex2f((float) this.width, 0.0F); + gl.glTexCoord2f(local35, 0.0F); + gl.glVertex2f(0.0F, 0.0F); + gl.glTexCoord2f(local35, local43); + gl.glVertex2f(0.0F, (float) -this.height); + gl.glTexCoord2f(0.0F, local43); + gl.glVertex2f((float) this.width, (float) -this.height); + gl.glEnd(); + gl.glLoadIdentity(); + } + + @OriginalMember(owner = "client!cf", name = "e", descriptor = "(II)V") + @Override + public final void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + GlRenderer.method4149(); + @Pc(5) int local5 = arg0 + this.anInt1863; + @Pc(10) int local10 = arg1 + this.anInt1861; + @Pc(12) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + this.method1424(1); + gl.glTranslatef((float) local5, (float) (GlRenderer.canvasHeight - local10), 0.0F); + gl.glCallList(this.anInt1871); + gl.glLoadIdentity(); + } + + @OriginalMember(owner = "client!cf", name = "b", descriptor = "(IIIIII)V") + public final void method1428(@OriginalArg(2) int arg0, @OriginalArg(3) int arg1, @OriginalArg(4) int arg2) { + GlRenderer.method4149(); + @Pc(2) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + this.method1424(2); + @Pc(15) int local15 = 240 - (this.anInt1863 << 4); + @Pc(22) int local22 = 240 - (this.anInt1861 << 4); + gl.glTranslatef((float) arg0 / 16.0F, (float) GlRenderer.canvasHeight - (float) arg1 / 16.0F, 0.0F); + gl.glRotatef((float) -arg2 * 0.005493164F, 0.0F, 0.0F, 1.0F); + gl.glTranslatef((float) -local15 / 16.0F, (float) local22 / 16.0F, 0.0F); + gl.glCallList(this.anInt1871); + gl.glLoadIdentity(); + } + + @OriginalMember(owner = "client!cf", name = "a", descriptor = "(IIII)V") + @Override + public final void renderResized(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (arg2 <= 0 || arg3 <= 0) { + return; + } + GlRenderer.method4149(); + @Pc(8) int local8 = this.width; + @Pc(11) int local11 = this.height; + @Pc(13) int local13 = 0; + @Pc(15) int local15 = 0; + @Pc(18) int local18 = this.anInt1860; + @Pc(21) int local21 = this.anInt1866; + @Pc(27) int local27 = (local18 << 16) / arg2; + @Pc(33) int local33 = (local21 << 16) / arg3; + @Pc(47) int local47; + if (this.anInt1863 > 0) { + local47 = ((this.anInt1863 << 16) + local27 - 1) / local27; + arg0 += local47; + local13 = local47 * local27 - (this.anInt1863 << 16); + } + if (this.anInt1861 > 0) { + local47 = ((this.anInt1861 << 16) + local33 - 1) / local33; + arg1 += local47; + local15 = local47 * local33 - (this.anInt1861 << 16); + } + if (local8 < local18) { + arg2 = ((local8 << 16) + local27 - local13 - 1) / local27; + } + if (local11 < local21) { + arg3 = ((local11 << 16) + local33 - local15 - 1) / local33; + } + @Pc(123) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + this.method1424(2); + @Pc(132) float local132 = (float) arg0; + @Pc(137) float local137 = local132 + (float) arg2; + @Pc(142) float local142 = (float) (GlRenderer.canvasHeight - arg1); + @Pc(147) float local147 = local142 - (float) arg3; + @Pc(155) float local155 = (float) this.width / (float) this.powerOfTwoWidth; + @Pc(163) float local163 = (float) this.height / (float) this.powerOfTwoHeight; + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glTexCoord2f(local155, 0.0F); + gl.glVertex2f(local137, local142); + gl.glTexCoord2f(0.0F, 0.0F); + gl.glVertex2f(local132, local142); + gl.glTexCoord2f(0.0F, local163); + gl.glVertex2f(local132, local147); + gl.glTexCoord2f(local155, local163); + gl.glVertex2f(local137, local147); + gl.glEnd(); + } + + @OriginalMember(owner = "client!cf", name = "c", descriptor = "(II)V") + @Override + public final void drawPixels(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + GlRenderer.method4149(); + @Pc(5) int local5 = arg0 + this.anInt1863; + @Pc(10) int local10 = arg1 + this.anInt1861; + @Pc(12) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + this.method1424(1); + gl.glTranslatef((float) local5, (float) (GlRenderer.canvasHeight - local10), 0.0F); + gl.glCallList(this.anInt1871); + gl.glLoadIdentity(); + } + + @OriginalMember(owner = "client!cf", name = "finalize", descriptor = "()V") + @Override + public final void finalize() throws Throwable { + if (this.textureId != -1) { + GlCleaner.deleteTexture2d(this.textureId, this.anInt1869, this.anInt1875); + this.textureId = -1; + this.anInt1869 = 0; + } + if (this.anInt1871 != -1) { + GlCleaner.deleteList(this.anInt1871, this.anInt1875); + this.anInt1871 = -1; + } + super.finalize(); + } + + @OriginalMember(owner = "client!cf", name = "a", descriptor = "(IIIIII)V") + @Override + protected final void method1416(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + GlRenderer.method4149(); + @Pc(2) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + this.method1424(1); + @Pc(15) int local15 = arg0 - (this.anInt1863 << 4); + @Pc(22) int local22 = arg1 - (this.anInt1861 << 4); + gl.glTranslatef((float) arg2 / 16.0F, (float) GlRenderer.canvasHeight - (float) arg3 / 16.0F, 0.0F); + gl.glRotatef((float) arg4 * 0.005493164F, 0.0F, 0.0F, 1.0F); + if (arg5 != 4096) { + gl.glScalef((float) arg5 / 4096.0F, (float) arg5 / 4096.0F, 0.0F); + } + gl.glTranslatef((float) -local15 / 16.0F, (float) local22 / 16.0F, 0.0F); + gl.glCallList(this.anInt1871); + gl.glLoadIdentity(); + } + + @OriginalMember(owner = "client!cf", name = "b", descriptor = "(IIIII)V") + @Override + public final void renderAlpha(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (arg2 <= 0 || arg3 <= 0) { + return; + } + GlRenderer.method4155(); + @Pc(8) int local8 = this.width; + @Pc(11) int local11 = this.height; + @Pc(13) int local13 = 0; + @Pc(15) int local15 = 0; + @Pc(18) int local18 = this.anInt1860; + @Pc(21) int local21 = this.anInt1866; + @Pc(27) int local27 = (local18 << 16) / arg2; + @Pc(33) int local33 = (local21 << 16) / arg3; + @Pc(47) int local47; + if (this.anInt1863 > 0) { + local47 = ((this.anInt1863 << 16) + local27 - 1) / local27; + arg0 += local47; + local13 = local47 * local27 - (this.anInt1863 << 16); + } + if (this.anInt1861 > 0) { + local47 = ((this.anInt1861 << 16) + local33 - 1) / local33; + arg1 += local47; + local15 = local47 * local33 - (this.anInt1861 << 16); + } + if (local8 < local18) { + arg2 = ((local8 << 16) + local27 - local13 - 1) / local27; + } + if (local11 < local21) { + arg3 = ((local11 << 16) + local33 - local15 - 1) / local33; + } + @Pc(123) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + this.method1424(1); + @Pc(132) float local132 = (float) arg0; + @Pc(137) float local137 = local132 + (float) arg2; + @Pc(142) float local142 = (float) (GlRenderer.canvasHeight - arg1); + @Pc(147) float local147 = local142 - (float) arg3; + @Pc(155) float local155 = (float) this.width / (float) this.powerOfTwoWidth; + @Pc(163) float local163 = (float) this.height / (float) this.powerOfTwoHeight; + @Pc(168) float local168 = (float) arg4 / 256.0F; + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glColor4f(1.0F, 1.0F, 1.0F, local168); + gl.glTexCoord2f(local155, 0.0F); + gl.glVertex2f(local137, local142); + gl.glTexCoord2f(0.0F, 0.0F); + gl.glVertex2f(local132, local142); + gl.glTexCoord2f(0.0F, local163); + gl.glVertex2f(local132, local147); + gl.glTexCoord2f(local155, local163); + gl.glVertex2f(local137, local147); + gl.glEnd(); + } + + @OriginalMember(owner = "client!cf", name = "b", descriptor = "(IIII)V") + public final void method1429(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + GlRenderer.method4149(); + @Pc(2) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + this.method1424(1); + @Pc(16) float local16 = (float) this.width / (float) this.powerOfTwoWidth; + @Pc(24) float local24 = (float) this.height / (float) this.powerOfTwoHeight; + @Pc(29) float local29 = local16 * (float) arg2; + @Pc(34) float local34 = local24 * (float) arg3; + @Pc(39) int local39 = arg0 + this.anInt1863; + @Pc(46) int local46 = local39 + this.width * arg2; + @Pc(53) int local53 = GlRenderer.canvasHeight - arg1 - this.anInt1861; + @Pc(60) int local60 = local53 - this.height * arg3; + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glTexCoord2f(local29, 0.0F); + gl.glVertex2f((float) local46, (float) local53); + gl.glTexCoord2f(0.0F, 0.0F); + gl.glVertex2f((float) local39, (float) local53); + gl.glTexCoord2f(0.0F, local34); + gl.glVertex2f((float) local39, (float) local60); + gl.glTexCoord2f(local29, local34); + gl.glVertex2f((float) local46, (float) local60); + gl.glEnd(); + } + + @OriginalMember(owner = "client!cf", name = "a", descriptor = "([I)V") + protected void method1430(@OriginalArg(0) int[] arg0) { + this.powerOfTwoWidth = IntUtils.clp2(this.width); + this.powerOfTwoHeight = IntUtils.clp2(this.height); + @Pc(20) byte[] local20 = new byte[this.powerOfTwoWidth * this.powerOfTwoHeight * 4]; + @Pc(22) int local22 = 0; + @Pc(24) int local24 = 0; + @Pc(32) int local32 = (this.powerOfTwoWidth - this.width) * 4; + for (@Pc(34) int local34 = 0; local34 < this.height; local34++) { + for (@Pc(40) int local40 = 0; local40 < this.width; local40++) { + @Pc(49) int local49 = arg0[local24++]; + if (local49 == 0) { + local22 += 4; + } else { + local20[local22++] = (byte) (local49 >> 16); + local20[local22++] = (byte) (local49 >> 8); + local20[local22++] = (byte) local49; + local20[local22++] = -1; + } + } + local22 += local32; + } + @Pc(91) ByteBuffer local91 = ByteBuffer.wrap(local20); + @Pc(93) GL2 gl = GlRenderer.gl; + if (this.textureId == -1) { + @Pc(100) int[] local100 = new int[1]; + gl.glGenTextures(1, local100, 0); + this.textureId = local100[0]; + this.anInt1875 = GlCleaner.contextId; + } + GlRenderer.setTextureId(this.textureId); + gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA, this.powerOfTwoWidth, this.powerOfTwoHeight, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, local91); + GlCleaner.onCard2d += local91.limit() - this.anInt1869; + this.anInt1869 = local91.limit(); + } + + @OriginalMember(owner = "client!cf", name = "a", descriptor = "(III)V") + @Override + public final void renderAlpha(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + GlRenderer.method4155(); + @Pc(5) int local5 = arg0 + this.anInt1863; + @Pc(10) int local10 = arg1 + this.anInt1861; + @Pc(12) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.textureId); + this.method1424(1); + gl.glColor4f(1.0F, 1.0F, 1.0F, (float) arg2 / 256.0F); + gl.glTranslatef((float) local5, (float) (GlRenderer.canvasHeight - local10), 0.0F); + gl.glCallList(this.anInt1871); + gl.glLoadIdentity(); + } + + @OriginalMember(owner = "client!cf", name = "a", descriptor = "()V") + private void method1431() { + @Pc(7) float local7 = (float) this.width / (float) this.powerOfTwoWidth; + @Pc(15) float local15 = (float) this.height / (float) this.powerOfTwoHeight; + @Pc(17) GL2 gl = GlRenderer.gl; + if (this.anInt1871 == -1) { + this.anInt1871 = gl.glGenLists(1); + this.anInt1875 = GlCleaner.contextId; + } + gl.glNewList(this.anInt1871, GL2.GL_COMPILE); + gl.glBegin(GL2.GL_TRIANGLE_FAN); + gl.glTexCoord2f(local7, 0.0F); + gl.glVertex2f((float) this.width, 0.0F); + gl.glTexCoord2f(0.0F, 0.0F); + gl.glVertex2f(0.0F, 0.0F); + gl.glTexCoord2f(0.0F, local15); + gl.glVertex2f(0.0F, (float) -this.height); + gl.glTexCoord2f(local7, local15); + gl.glVertex2f((float) this.width, (float) -this.height); + gl.glEnd(); + gl.glEndList(); + } +} \ No newline at end of file diff --git a/client/src/main/java/rt4/GlTexture.java b/client/src/main/java/rt4/GlTexture.java new file mode 100644 index 0000000..93c6781 --- /dev/null +++ b/client/src/main/java/rt4/GlTexture.java @@ -0,0 +1,322 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!uh") +public final class GlTexture extends SecondaryNode { + + @OriginalMember(owner = "client!oj", name = "t", descriptor = "[I") + public static int[] anIntArray372; + @OriginalMember(owner = "client!uh", name = "K", descriptor = "F") + private float aFloat35; + + @OriginalMember(owner = "client!uh", name = "X", descriptor = "I") + private int anInt5492; + + @OriginalMember(owner = "client!uh", name = "Z", descriptor = "[I") + private int[] anIntArray481; + + @OriginalMember(owner = "client!uh", name = "bb", descriptor = "I") + private int textureId = -1; + + @OriginalMember(owner = "client!uh", name = "eb", descriptor = "Z") + public boolean aBoolean287 = false; + + @OriginalMember(owner = "client!uh", name = "db", descriptor = "I") + private int textureSize = 0; + + @OriginalMember(owner = "client!uh", name = "W", descriptor = "Lclient!lc;") + private final Texture aClass88_1; + + @OriginalMember(owner = "client!uh", name = "U", descriptor = "Z") + private final boolean aBoolean286; + + @OriginalMember(owner = "client!uh", name = "jb", descriptor = "Z") + private final boolean aBoolean288; + + @OriginalMember(owner = "client!uh", name = "Q", descriptor = "Z") + private final boolean aBoolean285; + + @OriginalMember(owner = "client!uh", name = "J", descriptor = "Z") + private final boolean aBoolean284; + + @OriginalMember(owner = "client!uh", name = "L", descriptor = "I") + private final int anInt5485; + + @OriginalMember(owner = "client!uh", name = "hb", descriptor = "I") + private final int anInt5497; + + @OriginalMember(owner = "client!uh", name = "M", descriptor = "I") + private final int anInt5486; + + @OriginalMember(owner = "client!uh", name = "S", descriptor = "I") + private final int anInt5489; + + @OriginalMember(owner = "client!uh", name = "", descriptor = "(Lclient!wa;)V") + public GlTexture(@OriginalArg(0) Buffer arg0) { + this.aClass88_1 = new Texture(arg0); + this.aBoolean286 = arg0.g1() == 1; // Unsure + this.aBoolean288 = arg0.g1() == 1; // Wrap Horizontal? + this.aBoolean285 = arg0.g1() == 1; // Wrap Horizontal? + this.aBoolean284 = arg0.g1() == 1; // Wrap Vertical? + @Pc(68) int local68 = arg0.g1() & 0x3; // Material Brightness + this.anInt5485 = arg0.g1b(); // Speed U + this.anInt5497 = arg0.g1b(); // Speed V + @Pc(82) int local82 = arg0.g1(); // Mipmap related? how texture behaves the further out it is from the camera + arg0.g1(); + if (local68 == 1) { + this.anInt5486 = 2; + } else if (local68 == 2) { + this.anInt5486 = 3; + } else if (local68 == 3) { + this.anInt5486 = 4; + } else { + this.anInt5486 = 0; + } + this.anInt5489 = local82 >> 4 & 0xF; + } + + @OriginalMember(owner = "client!uh", name = "a", descriptor = "(Lclient!m;IFLclient!ve;Z)[I") + public final int[] method4295(@OriginalArg(0) TextureProvider arg0, @OriginalArg(2) float arg1, @OriginalArg(3) Js5 arg2, @OriginalArg(4) boolean arg3) { + if (this.anIntArray481 == null || this.aFloat35 != arg1) { + if (!this.aClass88_1.method2729(arg0, arg2)) { + return null; + } + @Pc(36) int local36 = arg3 ? 64 : 128; + this.anIntArray481 = this.aClass88_1.method2725(local36, this.aBoolean288, local36, arg1, arg2, arg0, true); + this.aFloat35 = arg1; + if (this.aBoolean286) { + @Pc(62) int[] local62 = new int[local36]; + @Pc(67) int[] local67 = new int[local36 * local36]; + @Pc(70) int[] local70 = new int[local36]; + @Pc(73) int[] local73 = new int[local36]; + @Pc(80) int local80; + @Pc(81) int local81 = local80 = local36; + @Pc(87) int local87 = local36 * local36; + @Pc(91) int local91 = local36 - 1; + @Pc(95) int local95 = local36 - 1; + @Pc(101) int local101; + @Pc(97) int local97; + for (local97 = 2; local97 >= 0; local97--) { + for (local101 = local95; local101 >= 0; local101--) { + local80--; + @Pc(109) int local109 = this.anIntArray481[local80]; + local62[local101] += local109 >> 16 & 0xFF; + local70[local101] += local109 >> 8 & 0xFF; + local73[local101] += local109 & 0xFF; + } + if (local80 == 0) { + local80 = local87; + } + } + @Pc(152) int local152 = local87; + for (@Pc(154) int local154 = local91; local154 >= 0; local154--) { + @Pc(162) int local162 = 0; + @Pc(164) int local164 = 0; + @Pc(165) int local165 = 0; + @Pc(167) int local167 = 1; + @Pc(169) int local169 = 1; + for (local101 = 2; local101 >= 0; local101--) { + local169--; + local162 += local70[local169]; + local164 += local73[local169]; + local165 += local62[local169]; + if (local169 == 0) { + local169 = local36; + } + } + for (local101 = local95; local101 >= 0; local101--) { + local167--; + @Pc(215) int local215 = local162 / 9; + @Pc(219) int local219 = local164 / 9; + local169--; + local97 = local165 / 9; + local152--; + local67[local152] = local219 | local97 << 16 | local215 << 8; + local165 += local62[local169] - local62[local167]; + local164 += local73[local169] - local73[local167]; + local162 += local70[local169] - local70[local167]; + if (local167 == 0) { + local167 = local36; + } + if (local169 == 0) { + local169 = local36; + } + } + for (local101 = local95; local101 >= 0; local101--) { + local81--; + @Pc(300) int local300 = this.anIntArray481[local81]; + local80--; + @Pc(306) int local306 = this.anIntArray481[local80]; + local62[local101] += (local306 >> 16 & 0xFF) - (local300 >> 16 & 0xFF); + local70[local101] += (local306 >> 8 & 0xFF) - (local300 >> 8 & 0xFF); + local73[local101] += (local306 & 0xFF) - (local300 & 0xFF); + } + if (local81 == 0) { + local81 = local87; + } + if (local80 == 0) { + local80 = local87; + } + } + this.anIntArray481 = local67; + } + } + return this.anIntArray481; + } + + @OriginalMember(owner = "client!uh", name = "a", descriptor = "(Lclient!ve;Lclient!m;IZ)Z") + public final boolean method4296(@OriginalArg(0) Js5 arg0, @OriginalArg(1) TextureProvider arg1, @OriginalArg(3) boolean arg2) { + if (!this.aClass88_1.method2729(arg1, arg0)) { + return false; + } + @Pc(22) GL2 gl = GlRenderer.gl; + @Pc(28) int size = arg2 ? 64 : 128; + @Pc(31) int local31 = MaterialManager.getFlags(); + if ((local31 & 0x1) == 0) { + if (this.textureId == -1) { + @Pc(53) int[] temp = new int[1]; + gl.glGenTextures(1, temp, 0); + this.anInt5492 = GlCleaner.contextId; + this.textureId = temp[0]; + GlRenderer.setTextureId(this.textureId); + @Pc(82) ByteBuffer pixels = ByteBuffer.wrap(this.aClass88_1.method2728(size, size, this.aBoolean288, arg1, 0.7D, arg0)); + if (this.anInt5489 == 2) { + // Old GLU code: +// @Pc(201) GLUgl2es1 local201 = new GLUgl2es1(); +// local201.gluBuild2DMipmaps(3553, 6408, size, size, 6408, 5121, pixels); +// gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR_MIPMAP_LINEAR); +// gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + + // New code (OpenGL 4+?) w/ texStorage + int num_mipmaps = 4; + gl.glTexStorage2D(GL2.GL_TEXTURE_2D, num_mipmaps, GL2.GL_RGBA8, size, size); + gl.glTexSubImage2D(GL2.GL_TEXTURE_2D, 0, 0, 0, size, size, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, pixels); + gl.glGenerateMipmap(GL2.GL_TEXTURE_2D); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_REPEAT); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_T, GL2.GL_REPEAT); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR_MIPMAP_LINEAR); + + // New code (OpenGL 3.0+) w/o texStorage +// gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA8, size, size, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, pixels); +// gl.glGenerateMipmap(GL2.GL_TEXTURE_2D); +// gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_REPEAT); +// gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_T, GL2.GL_REPEAT); +// gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); +// gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR_MIPMAP_LINEAR); + + // New code (OpenGL 1.4): +// gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_REPEAT); +// gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_T, GL2.GL_REPEAT); +// gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); +// gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR_MIPMAP_LINEAR); +// gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_GENERATE_MIPMAP, GL2.GL_TRUE); +// gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA8, size, size, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, pixels); + + GlCleaner.onCardTexture += pixels.limit() * 4 / 3 - this.textureSize; + this.textureSize = pixels.limit() * 4 / 3; + } else if (this.anInt5489 == 1) { + @Pc(129) int local129 = 0; + while (true) { + gl.glTexImage2D(GL2.GL_TEXTURE_2D, local129++, GL2.GL_RGBA, size, size, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, pixels); + size >>= 0x1; + if (size == 0) { + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR_MIPMAP_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + GlCleaner.onCardTexture += pixels.limit() * 4 / 3 - this.textureSize; + this.textureSize = pixels.limit() * 4 / 3; + break; + } + pixels = ByteBuffer.wrap(this.aClass88_1.method2728(size, size, this.aBoolean288, arg1, 0.7D, arg0)); + } + } else { + gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA, size, size, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, pixels); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + GlCleaner.onCardTexture += pixels.limit() - this.textureSize; + this.textureSize = pixels.limit(); + } + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_S, this.aBoolean285 ? GL2.GL_REPEAT : GL2.GL_CLAMP_TO_EDGE); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_T, this.aBoolean284 ? GL2.GL_REPEAT : GL2.GL_CLAMP_TO_EDGE); + } else { + GlRenderer.setTextureId(this.textureId); + } + } + if ((local31 & 0x2) == 0) { + GlRenderer.setTextureCombineRgbMode(this.anInt5486); + } + if ((local31 & 0x4) == 0) { + GlRenderer.setTextureCombineAlphaMode(0); + } + if ((local31 & 0x8) == 0) { + if (this.anInt5497 == 0 && this.anInt5485 == 0) { + GlRenderer.resetTextureMatrix(); + } else { + @Pc(303) float local303 = (float) (this.anInt5497 * GlRenderer.anInt5323) / (float) size; + @Pc(312) float local312 = (float) (this.anInt5485 * GlRenderer.anInt5323) / (float) size; + GlRenderer.translateTextureMatrix(local312, local303, 0.0F); + } + } + return true; + } + + @OriginalMember(owner = "client!uh", name = "a", descriptor = "(ZZLclient!m;Lclient!ve;)[I") + public final int[] method4297(@OriginalArg(1) boolean arg0, @OriginalArg(2) TextureProvider arg1, @OriginalArg(3) Js5 arg2) { + if (this.aClass88_1.method2729(arg1, arg2)) { + @Pc(24) int local24 = arg0 ? 64 : 128; + return this.aClass88_1.method2725(local24, this.aBoolean288, local24, 1.0D, arg2, arg1, false); + } else { + return null; + } + } + + @OriginalMember(owner = "client!uh", name = "a", descriptor = "(ILclient!m;Lclient!ve;)Z") + public final boolean method4299(@OriginalArg(1) TextureProvider arg0, @OriginalArg(2) Js5 arg1) { + return this.aClass88_1.method2729(arg0, arg1); + } + + @OriginalMember(owner = "client!uh", name = "a", descriptor = "(IB)V") + public final void method4300(@OriginalArg(0) int arg0) { + if (this.anIntArray481 == null || this.anInt5497 == 0 && this.anInt5485 == 0) { + return; + } + if (anIntArray372 == null || anIntArray372.length < this.anIntArray481.length) { + anIntArray372 = new int[this.anIntArray481.length]; + } + @Pc(47) int local47 = arg0 * this.anInt5485; + @Pc(58) int local58 = this.anIntArray481.length == 4096 ? 64 : 128; + @Pc(62) int local62 = this.anIntArray481.length; + @Pc(66) int local66 = local58 - 1; + @Pc(73) int local73 = this.anInt5497 * arg0 * local58; + @Pc(77) int local77 = local62 - 1; + for (@Pc(79) int local79 = 0; local79 < local62; local79 += local58) { + @Pc(88) int local88 = local73 + local79 & local77; + for (@Pc(90) int local90 = 0; local90 < local58; local90++) { + @Pc(102) int local102 = (local66 & local90 + local47) + local88; + @Pc(106) int local106 = local90 + local79; + anIntArray372[local106] = this.anIntArray481[local102]; + } + } + @Pc(125) int[] local125 = this.anIntArray481; + this.anIntArray481 = anIntArray372; + anIntArray372 = local125; + } + + @OriginalMember(owner = "client!uh", name = "finalize", descriptor = "()V") + @Override + public final void finalize() throws Throwable { + if (this.textureId != -1) { + GlCleaner.deleteTexture(this.textureId, this.textureSize, this.anInt5492); + this.textureSize = 0; + this.textureId = -1; + } + super.finalize(); + } +} diff --git a/client/src/main/java/rt4/GlTile.java b/client/src/main/java/rt4/GlTile.java new file mode 100644 index 0000000..edd31b1 --- /dev/null +++ b/client/src/main/java/rt4/GlTile.java @@ -0,0 +1,395 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +@OriginalClass("client!hg") +public final class GlTile extends Node { + + @OriginalMember(owner = "client!hg", name = "J", descriptor = "Ljava/nio/ByteBuffer;") + public static ByteBuffer aByteBuffer4; + + @OriginalMember(owner = "client!hg", name = "U", descriptor = "Lclient!wa;") + public static Buffer aClass3_Sub15_3; + + @OriginalMember(owner = "client!hg", name = "K", descriptor = "Lclient!wa;") + public static Buffer aClass3_Sub15_2; + + @OriginalMember(owner = "client!hg", name = "Q", descriptor = "Ljava/nio/ByteBuffer;") + public static ByteBuffer aByteBuffer5; + + @OriginalMember(owner = "client!hg", name = "s", descriptor = "Ljava/nio/ByteBuffer;") + private ByteBuffer aByteBuffer3; + + @OriginalMember(owner = "client!hg", name = "t", descriptor = "[F") + private float[] aFloatArray4; + + @OriginalMember(owner = "client!hg", name = "v", descriptor = "[I") + private int[] anIntArray226; + + @OriginalMember(owner = "client!hg", name = "w", descriptor = "[I") + private int[] anIntArray227; + + @OriginalMember(owner = "client!hg", name = "x", descriptor = "[I") + private int[] anIntArray228; + + @OriginalMember(owner = "client!hg", name = "z", descriptor = "[I") + private int[] anIntArray229; + + @OriginalMember(owner = "client!hg", name = "A", descriptor = "Lclient!sc;") + private HashTable aClass133_8; + + @OriginalMember(owner = "client!hg", name = "B", descriptor = "[F") + private float[] aFloatArray5; + + @OriginalMember(owner = "client!hg", name = "E", descriptor = "[[I") + private int[][] anIntArrayArray17; + + @OriginalMember(owner = "client!hg", name = "F", descriptor = "[I") + private int[] anIntArray230; + + @OriginalMember(owner = "client!hg", name = "I", descriptor = "[[I") + private int[][] anIntArrayArray18; + + @OriginalMember(owner = "client!hg", name = "L", descriptor = "Lclient!vi;") + private GlVertexBufferObject aClass155_3; + + @OriginalMember(owner = "client!hg", name = "N", descriptor = "[F") + private float[] aFloatArray6; + + @OriginalMember(owner = "client!hg", name = "P", descriptor = "[I") + private int[] anIntArray231; + + @OriginalMember(owner = "client!hg", name = "R", descriptor = "[F") + private float[] aFloatArray7; + + @OriginalMember(owner = "client!hg", name = "S", descriptor = "[Z") + private boolean[] aBooleanArray54; + + @OriginalMember(owner = "client!hg", name = "T", descriptor = "[I") + private int[] anIntArray232; + + @OriginalMember(owner = "client!hg", name = "p", descriptor = "I") + public int anInt2482 = 0; + + @OriginalMember(owner = "client!hg", name = "D", descriptor = "I") + private int anInt2487 = 0; + + @OriginalMember(owner = "client!hg", name = "G", descriptor = "I") + private int anInt2488 = 0; + + @OriginalMember(owner = "client!hg", name = "q", descriptor = "I") + public int anInt2483 = 0; + + @OriginalMember(owner = "client!hg", name = "r", descriptor = "I") + public int anInt2484 = 0; + + @OriginalMember(owner = "client!hg", name = "O", descriptor = "I") + private int anInt2489 = 0; + + @OriginalMember(owner = "client!hg", name = "y", descriptor = "I") + public final int texture; + + @OriginalMember(owner = "client!hg", name = "V", descriptor = "F") + private final float aFloat12; + + @OriginalMember(owner = "client!hg", name = "M", descriptor = "Z") + public final boolean blend; + + @OriginalMember(owner = "client!hg", name = "u", descriptor = "Z") + private final boolean aBoolean139; + + @OriginalMember(owner = "client!hg", name = "C", descriptor = "I") + public final int underwaterColor; + + @OriginalMember(owner = "client!hg", name = "", descriptor = "(IFZZI)V") + public GlTile(@OriginalArg(0) int arg0, @OriginalArg(1) float arg1, @OriginalArg(2) boolean arg2, @OriginalArg(3) boolean arg3, @OriginalArg(4) int arg4) { + this.texture = arg0; + this.aFloat12 = arg1; + this.blend = arg2; + this.aBoolean139 = arg3; + this.underwaterColor = arg4; + } + + @OriginalMember(owner = "client!hg", name = "a", descriptor = "()V") + public static void method1939() { + aClass3_Sub15_3 = null; + aClass3_Sub15_2 = null; + aByteBuffer5 = null; + aByteBuffer4 = null; + } + + @OriginalMember(owner = "client!hg", name = "b", descriptor = "()V") + public final void method1940() { + this.anIntArray232 = new int[this.anInt2482]; + this.anIntArray230 = new int[this.anInt2482]; + this.anIntArray229 = new int[this.anInt2482]; + if (this.aBoolean139) { + this.aFloatArray4 = new float[this.anInt2482]; + } + this.anIntArray226 = new int[this.anInt2482]; + this.aFloatArray7 = new float[this.anInt2482]; + this.aFloatArray6 = new float[this.anInt2482]; + this.aFloatArray5 = new float[this.anInt2482]; + this.anIntArray228 = new int[this.anInt2484]; + this.anIntArray227 = new int[this.anInt2484]; + this.anIntArray231 = new int[this.anInt2484]; + this.anIntArrayArray17 = new int[this.anInt2484][]; + this.aClass133_8 = new HashTable(IntUtils.clp2(this.anInt2482)); + if (this.blend) { + this.anIntArrayArray18 = new int[this.anInt2484][]; + this.aBooleanArray54 = new boolean[this.anInt2484]; + } + } + + @OriginalMember(owner = "client!hg", name = "a", descriptor = "(IIIFFFIF)I") + public final int method1941(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) float arg3, @OriginalArg(4) float arg4, @OriginalArg(5) float arg5, @OriginalArg(6) int arg6, @OriginalArg(7) float arg7) { + @Pc(1) long local1 = 0L; + if ((arg0 & 0x7F) == 0 || (arg2 & 0x7F) == 0) { + local1 = (long) (arg0 + (arg2 << 16)) + ((long) arg6 << 32); + @Pc(28) IntNode local28 = (IntNode) this.aClass133_8.get(local1); + if (local28 != null) { + if (arg1 < this.anIntArray230[local28.value]) { + this.anIntArray230[local28.value] = arg1; + } + return local28.value; + } + } + this.anIntArray232[this.anInt2483] = arg0; + this.anIntArray230[this.anInt2483] = arg1; + this.anIntArray229[this.anInt2483] = arg2; + if (this.aBoolean139) { + this.aFloatArray4[this.anInt2483] = arg7; + } + this.aFloatArray7[this.anInt2483] = arg3; + this.aFloatArray6[this.anInt2483] = arg4; + this.aFloatArray5[this.anInt2483] = arg5; + this.anIntArray226[this.anInt2483] = arg6; + if (local1 != 0L) { + this.aClass133_8.put(new IntNode(this.anInt2483), local1); + } + return this.anInt2483++; + } + + @OriginalMember(owner = "client!hg", name = "d", descriptor = "()V") + public final void method1943() { + @Pc(12) Buffer local12 = new Buffer((this.aBoolean139 ? 40 : 36) * this.anInt2483); + for (@Pc(14) int local14 = 0; local14 < this.anInt2483; local14++) { + if (GlRenderer.bigEndian) { + local12.pFloat((float) this.anIntArray232[local14]); + local12.pFloat((float) this.anIntArray230[local14]); + local12.pFloat((float) this.anIntArray229[local14]); + local12.p4(this.anIntArray226[local14]); + local12.pFloat(this.aFloatArray7[local14]); + local12.pFloat(this.aFloatArray6[local14]); + local12.pFloat(this.aFloatArray5[local14]); + local12.pFloat((float) this.anIntArray232[local14] / this.aFloat12); + local12.pFloat((float) this.anIntArray229[local14] / this.aFloat12); + if (this.aBoolean139) { + local12.pFloat(this.aFloatArray4[local14]); + } + } else { + local12.gFloat((float) this.anIntArray232[local14]); + local12.gFloat((float) this.anIntArray230[local14]); + local12.gFloat((float) this.anIntArray229[local14]); + local12.p4(this.anIntArray226[local14]); + local12.gFloat(this.aFloatArray7[local14]); + local12.gFloat(this.aFloatArray6[local14]); + local12.gFloat(this.aFloatArray5[local14]); + local12.gFloat((float) this.anIntArray232[local14] / this.aFloat12); + local12.gFloat((float) this.anIntArray229[local14] / this.aFloat12); + if (this.aBoolean139) { + local12.gFloat(this.aFloatArray4[local14]); + } + } + } + if (GlRenderer.arbVboSupported) { + @Pc(200) ByteBuffer local200 = ByteBuffer.wrap(local12.data, 0, local12.offset); + this.aClass155_3 = new GlVertexBufferObject(); + this.aClass155_3.setArrayBuffer(local200); + } else { + this.aByteBuffer3 = ByteBuffer.allocateDirect(local12.offset).order(ByteOrder.nativeOrder()); + this.aByteBuffer3.put(local12.data, 0, local12.offset); + this.aByteBuffer3.flip(); + } + this.anIntArray232 = null; + this.anIntArray230 = null; + this.anIntArray229 = null; + this.anIntArray226 = null; + this.aFloatArray7 = null; + this.aFloatArray6 = null; + this.aFloatArray5 = null; + this.aClass133_8 = null; + this.aFloatArray4 = null; + } + + @OriginalMember(owner = "client!hg", name = "a", descriptor = "([[[Lclient!bj;FZ)V") + public final void method1944(@OriginalArg(0) Tile[][][] arg0, @OriginalArg(1) float arg1, @OriginalArg(2) boolean arg2) { + if (aClass3_Sub15_3 == null || aClass3_Sub15_3.data.length < this.anInt2488 * 4) { + aClass3_Sub15_3 = new Buffer(this.anInt2488 * 4); + } else { + aClass3_Sub15_3.offset = 0; + } + if (aClass3_Sub15_2 == null || aClass3_Sub15_2.data.length < this.anInt2487 * 4) { + aClass3_Sub15_2 = new Buffer(this.anInt2487 * 4); + } else { + aClass3_Sub15_2.offset = 0; + } + @Pc(47) int local47; + @Pc(68) Tile local68; + @Pc(111) Buffer local111; + @Pc(78) int[] local78; + @Pc(86) int[] local86; + @Pc(90) int local90; + @Pc(116) int local116; + if (GlRenderer.bigEndian) { + for (local47 = 0; local47 < this.anInt2489; local47++) { + local68 = arg0[this.anIntArray231[local47]][this.anIntArray228[local47]][this.anIntArray227[local47]]; + if (local68 != null && local68.aBoolean45) { + local78 = this.anIntArrayArray17[local47]; + if (this.blend) { + local86 = this.anIntArrayArray18[local47]; + if (local86 != null) { + for (local90 = 0; local90 < local86.length; local90++) { + aClass3_Sub15_2.p4(local86[local90]); + } + } + local111 = this.aBooleanArray54[local47] ? aClass3_Sub15_2 : aClass3_Sub15_3; + } else { + local111 = aClass3_Sub15_3; + } + for (local116 = 1; local116 < local78.length - 1; local116++) { + local111.p4(local78[0]); + local111.p4(local78[local116]); + local111.p4(local78[local116 + 1]); + } + } + } + } else { + for (local47 = 0; local47 < this.anInt2489; local47++) { + local68 = arg0[this.anIntArray231[local47]][this.anIntArray228[local47]][this.anIntArray227[local47]]; + if (local68 != null && local68.aBoolean45) { + local78 = this.anIntArrayArray17[local47]; + if (this.blend) { + local86 = this.anIntArrayArray18[local47]; + if (local86 != null) { + for (local90 = 0; local90 < local86.length; local90++) { + aClass3_Sub15_2.ip4(local86[local90]); + } + } + local111 = this.aBooleanArray54[local47] ? aClass3_Sub15_2 : aClass3_Sub15_3; + } else { + local111 = aClass3_Sub15_3; + } + for (local116 = 1; local116 < local78.length - 1; local116++) { + local111.ip4(local78[0]); + local111.ip4(local78[local116]); + local111.ip4(local78[local116 + 1]); + } + } + } + } + if (aClass3_Sub15_3.offset == 0 && aClass3_Sub15_2.offset == 0) { + return; + } + @Pc(257) GL2 gl = GlRenderer.gl; + if (this.texture == -1 || arg2) { + GlRenderer.setTextureId(-1); + MaterialManager.setMaterial(0, 0); + } else { + Rasteriser.textureProvider.method3227(this.texture); + } + @Pc(282) int i = this.aBoolean139 ? 40 : 36; + if (this.aClass155_3 == null) { + if (GlRenderer.arbVboSupported) { + gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, 0); + } + this.aByteBuffer3.position(0); + gl.glVertexPointer(3, GL2.GL_FLOAT, i, this.aByteBuffer3); + this.aByteBuffer3.position(12); + gl.glColorPointer(4, GL2.GL_UNSIGNED_BYTE, i, this.aByteBuffer3); + if (Preferences.highDetailLighting) { + this.aByteBuffer3.position(16); + gl.glNormalPointer(GL2.GL_FLOAT, i, this.aByteBuffer3); + } + this.aByteBuffer3.position(28); + gl.glTexCoordPointer(2, GL2.GL_FLOAT, i, this.aByteBuffer3); + if (this.aBoolean139) { + gl.glClientActiveTexture(UnderwaterMaterialRenderer.method4607()); + this.aByteBuffer3.position(36); + gl.glTexCoordPointer(1, GL2.GL_FLOAT, i, this.aByteBuffer3); + gl.glClientActiveTexture(GL2.GL_TEXTURE0); + } + } else { + this.aClass155_3.bindArray(); + gl.glVertexPointer(3, GL2.GL_FLOAT, i, 0L); + gl.glColorPointer(4, GL2.GL_UNSIGNED_BYTE, i, 12L); + if (Preferences.highDetailLighting) { + gl.glNormalPointer(GL2.GL_FLOAT, i, 16L); + } + gl.glTexCoordPointer(2, GL2.GL_FLOAT, i, 28L); + if (this.aBoolean139) { + gl.glClientActiveTexture(UnderwaterMaterialRenderer.method4607()); + gl.glTexCoordPointer(1, GL2.GL_FLOAT, i, 36L); + gl.glClientActiveTexture(GL2.GL_TEXTURE0); + } + } + if (GlRenderer.arbVboSupported) { + gl.glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, 0); + } + if (aClass3_Sub15_3.offset != 0) { + if (aByteBuffer5 == null || aByteBuffer5.capacity() < aClass3_Sub15_3.offset) { + aByteBuffer5 = ByteBuffer.allocateDirect(aClass3_Sub15_3.offset).order(ByteOrder.nativeOrder()); + } else { + aByteBuffer5.clear(); + } + aByteBuffer5.put(aClass3_Sub15_3.data, 0, aClass3_Sub15_3.offset); + aByteBuffer5.flip(); + GlRenderer.method4159(arg1); + gl.glDrawElements(GL2.GL_TRIANGLES, aClass3_Sub15_3.offset / 4, GL2.GL_UNSIGNED_INT, aByteBuffer5); + } + if (aClass3_Sub15_2.offset == 0) { + return; + } + if (aByteBuffer4 == null || aByteBuffer4.capacity() < aClass3_Sub15_2.offset) { + aByteBuffer4 = ByteBuffer.allocateDirect(aClass3_Sub15_2.offset).order(ByteOrder.nativeOrder()); + } else { + aByteBuffer4.clear(); + } + aByteBuffer4.put(aClass3_Sub15_2.data, 0, aClass3_Sub15_2.offset); + aByteBuffer4.flip(); + GlRenderer.method4159(arg1 - 100.0F); + GlRenderer.disableDepthMask(); + gl.glDrawElements(GL2.GL_TRIANGLES, aClass3_Sub15_2.offset / 4, GL2.GL_UNSIGNED_INT, aByteBuffer4); + GlRenderer.enableDepthMask(); + } + + @OriginalMember(owner = "client!hg", name = "a", descriptor = "(III[I[IZ)I") + public final int method1945(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int[] arg3, @OriginalArg(4) int[] arg4, @OriginalArg(5) boolean arg5) { + if (this.blend) { + this.anIntArrayArray18[this.anInt2489] = arg4; + this.aBooleanArray54[this.anInt2489] = arg5; + if (arg4 != null) { + this.anInt2487 += arg4.length; + } + if (arg5) { + this.anInt2487 += (arg3.length - 2) * 3; + } else { + this.anInt2488 += (arg3.length - 2) * 3; + } + } else { + this.anInt2488 += (arg3.length - 2) * 3; + } + this.anIntArray231[this.anInt2489] = arg0; + this.anIntArray228[this.anInt2489] = arg1; + this.anIntArray227[this.anInt2489] = arg2; + this.anIntArrayArray17[this.anInt2489] = arg3; + return this.anInt2489++; + } +} diff --git a/client/src/main/java/rt4/GlVertexBufferObject.java b/client/src/main/java/rt4/GlVertexBufferObject.java new file mode 100644 index 0000000..a8e6410 --- /dev/null +++ b/client/src/main/java/rt4/GlVertexBufferObject.java @@ -0,0 +1,94 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!vi") +public final class GlVertexBufferObject { + + @OriginalMember(owner = "client!vi", name = "a", descriptor = "I") + private int id; + + @OriginalMember(owner = "client!vi", name = "b", descriptor = "I") + private final int contextId; + + @OriginalMember(owner = "client!vi", name = "c", descriptor = "I") + private int size; + + @OriginalMember(owner = "client!vi", name = "d", descriptor = "Z") + private final boolean stream; + + @OriginalMember(owner = "client!vi", name = "", descriptor = "()V") + public GlVertexBufferObject() { + this(false); + } + + @OriginalMember(owner = "client!vi", name = "", descriptor = "(Z)V") + public GlVertexBufferObject(@OriginalArg(0) boolean stream) { + this.id = -1; + this.size = 0; + @Pc(9) GL2 gl = GlRenderer.gl; + @Pc(12) int[] temp = new int[1]; + gl.glGenBuffers(1, temp, 0); + this.stream = stream; + this.id = temp[0]; + this.contextId = GlCleaner.contextId; + } + + @OriginalMember(owner = "client!vi", name = "a", descriptor = "(Ljava/nio/ByteBuffer;)V") + public final void updateArrayBuffer(@OriginalArg(0) ByteBuffer buffer) { + if (buffer.limit() <= this.size) { + @Pc(6) GL2 gl = GlRenderer.gl; + gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, this.id); + gl.glBufferSubData(GL2.GL_ARRAY_BUFFER, 0, buffer.limit(), buffer); + } else { + this.setArrayBuffer(buffer); + } + } + + @OriginalMember(owner = "client!vi", name = "finalize", descriptor = "()V") + @Override + public final void finalize() throws Throwable { + if (this.id != -1) { + GlCleaner.deleteBuffer(this.id, this.size, this.contextId); + this.id = -1; + this.size = 0; + } + super.finalize(); + } + + @OriginalMember(owner = "client!vi", name = "a", descriptor = "()V") + public final void bindArray() { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, this.id); + } + + @OriginalMember(owner = "client!vi", name = "b", descriptor = "(Ljava/nio/ByteBuffer;)V") + public final void setElementArrayBuffer(@OriginalArg(0) ByteBuffer buffer) { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, this.id); + gl.glBufferData(GL2.GL_ELEMENT_ARRAY_BUFFER, buffer.limit(), buffer, this.stream ? GL2.GL_STREAM_DRAW : GL2.GL_STATIC_DRAW); + GlCleaner.onCardGeometry += buffer.limit() - this.size; + this.size = buffer.limit(); + } + + @OriginalMember(owner = "client!vi", name = "b", descriptor = "()V") + public final void bindElementArray() { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, this.id); + } + + @OriginalMember(owner = "client!vi", name = "c", descriptor = "(Ljava/nio/ByteBuffer;)V") + public final void setArrayBuffer(@OriginalArg(0) ByteBuffer buffer) { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, this.id); + gl.glBufferData(GL2.GL_ARRAY_BUFFER, buffer.limit(), buffer, this.stream ? GL2.GL_STREAM_DRAW : GL2.GL_STATIC_DRAW); + GlCleaner.onCardGeometry += buffer.limit() - this.size; + this.size = buffer.limit(); + } +} diff --git a/client/src/main/java/rt4/GlobalConfig.java b/client/src/main/java/rt4/GlobalConfig.java new file mode 100644 index 0000000..9b1707d --- /dev/null +++ b/client/src/main/java/rt4/GlobalConfig.java @@ -0,0 +1,60 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalMember; + +import java.math.BigInteger; + +public class GlobalConfig { + // Jagex's RSA key: + // public static final BigInteger RSA_MODULUS = new BigInteger("7162900525229798032761816791230527296329313291232324290237849263501208207972894053929065636522363163621000728841182238772712427862772219676577293600221789"); + // public static final BigInteger RSA_EXPONENT = new BigInteger("58778699976184461502525193738213253649000149147835990136706041084440742975821"); + + //region 2009scape-compatibility Configuration + @OriginalMember(owner = "client!um", name = "V", descriptor = "Ljava/math/BigInteger;") + public static final BigInteger RSA_MODULUS = new BigInteger("96982303379631821170939875058071478695026608406924780574168393250855797534862289546229721580153879336741968220328805101128831071152160922518190059946555203865621183480223212969502122536662721687753974815205744569357388338433981424032996046420057284324856368815997832596174397728134370577184183004453899764051"); + + @OriginalMember(owner = "client!gm", name = "X", descriptor = "Ljava/math/BigInteger;") + public static final BigInteger RSA_EXPONENT = new BigInteger("65537"); + + public static String EXTENDED_CONFIG_PATH = "config.json"; + + // Server IP + public static String DEFAULT_HOSTNAME = "test.2009scape.org"; + + // Jagex had this at 40000+id + public static int DEFAULT_PORT = 43594; + + // Jagex had this at 50000+id/443 + public static int ALTERNATE_PORT = 43593; + + // If this isn't set, the world server will need to send a default + public static boolean SELECT_DEFAULT_WORLD = true; + + // Send strings instead of base37 for login/registration packets + public static boolean LOGIN_USE_STRINGS = true; + + // Send additional information like user/serial/mac address + public static boolean LOGIN_EXTRA_INFO = true; + + // Send an additional empty CRC for idx28 (not in this revision originally) + public static boolean LOGIN_FAKE_IDX28 = true; + + // Packet opcode encryption + public static boolean USE_ISAAC = false; + //endregion + + // default distance is 28 + public static int TILE_DISTANCE = 56; + public static int VIEW_DISTANCE = TILE_DISTANCE * 128; + public static float VIEW_FADE_DISTANCE = ((float) TILE_DISTANCE / 28.0f) * 256.0f; + + public static boolean USE_SHIFT_CLICK = true; + public static boolean USE_TWEENING = true; + public static boolean BILINEAR_MINIMAP = true; + public static boolean MOUSEWHEEL_ZOOM = true; + + public static int JS5_RESPONSE_TIMEOUT = 5000; + + public static int AUDIO_SAMPLE_RATE = 22050; //default is 22050, buff is 44100 + +} diff --git a/client/src/main/java/rt4/GlobalJsonConfig.java b/client/src/main/java/rt4/GlobalJsonConfig.java new file mode 100644 index 0000000..19b03ad --- /dev/null +++ b/client/src/main/java/rt4/GlobalJsonConfig.java @@ -0,0 +1,30 @@ +package rt4; + +import com.google.gson.Gson; + +import java.io.FileReader; + +public class GlobalJsonConfig { + public static GlobalJsonConfig instance = null; + + public static void load(String path) { + Gson gson = new Gson(); + + try { + instance = gson.fromJson(new FileReader(path), GlobalJsonConfig.class); + } catch (Exception ex) { + System.err.println("No config.json file, using defaults"); + } + } + + // ---- + + String ip_management; + String ip_address; + int world; + int server_port; + int wl_port; + int js5_port; + boolean mouseWheelZoom = GlobalConfig.MOUSEWHEEL_ZOOM; + public String pluginsFolder = "plugins"; +} diff --git a/client/src/main/java/rt4/GoSubFrame.java b/client/src/main/java/rt4/GoSubFrame.java new file mode 100644 index 0000000..b2c6dfe --- /dev/null +++ b/client/src/main/java/rt4/GoSubFrame.java @@ -0,0 +1,20 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!hj") +public final class GoSubFrame { + + @OriginalMember(owner = "client!hj", name = "b", descriptor = "[I") + public int[] intLocals; + + @OriginalMember(owner = "client!hj", name = "f", descriptor = "[Lclient!na;") + public JagString[] stringLocals; + + @OriginalMember(owner = "client!hj", name = "h", descriptor = "Lclient!qc;") + public ClientScript script; + + @OriginalMember(owner = "client!hj", name = "k", descriptor = "I") + public int pc = -1; +} diff --git a/client/src/main/java/rt4/GroundDecor.java b/client/src/main/java/rt4/GroundDecor.java new file mode 100644 index 0000000..ae5b9b5 --- /dev/null +++ b/client/src/main/java/rt4/GroundDecor.java @@ -0,0 +1,26 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!bm") +public final class GroundDecor { + + @OriginalMember(owner = "client!bm", name = "c", descriptor = "Lclient!th;") + public Entity entity; + + @OriginalMember(owner = "client!bm", name = "g", descriptor = "I") + public int xFine; + + @OriginalMember(owner = "client!bm", name = "i", descriptor = "I") + public int anInt733; + + @OriginalMember(owner = "client!bm", name = "m", descriptor = "J") + public long key; + + @OriginalMember(owner = "client!bm", name = "o", descriptor = "I") + public int zFine; + + @OriginalMember(owner = "client!bm", name = "n", descriptor = "Z") + public boolean aBoolean49 = false; +} diff --git a/client/src/main/java/rt4/GzipDecompressor.java b/client/src/main/java/rt4/GzipDecompressor.java new file mode 100644 index 0000000..3b477f7 --- /dev/null +++ b/client/src/main/java/rt4/GzipDecompressor.java @@ -0,0 +1,42 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.util.zip.Inflater; + +@OriginalClass("client!ha") +public final class GzipDecompressor { + + @OriginalMember(owner = "client!ha", name = "j", descriptor = "Ljava/util/zip/Inflater;") + private Inflater anInflater1; + + @OriginalMember(owner = "client!ha", name = "", descriptor = "()V") + public GzipDecompressor() { + this(-1, 1000000, 1000000); + } + + @OriginalMember(owner = "client!ha", name = "", descriptor = "(III)V") + private GzipDecompressor(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + } + + @OriginalMember(owner = "client!ha", name = "a", descriptor = "([BLclient!wa;Z)V") + public final void method1842(@OriginalArg(0) byte[] arg0, @OriginalArg(1) Buffer arg1) { + if (arg1.data[arg1.offset] != 31 || arg1.data[arg1.offset + 1] != -117) { + throw new RuntimeException("Invalid GZIP header!"); + } + if (this.anInflater1 == null) { + this.anInflater1 = new Inflater(true); + } + try { + this.anInflater1.setInput(arg1.data, arg1.offset + 10, -8 - (arg1.offset + 10) + arg1.data.length); + this.anInflater1.inflate(arg0); + } catch (@Pc(64) Exception local64) { + this.anInflater1.reset(); + throw new RuntimeException("Invalid GZIP compressed data!"); + } + this.anInflater1.reset(); + } +} diff --git a/client/src/main/java/rt4/HardReferenceNode.java b/client/src/main/java/rt4/HardReferenceNode.java new file mode 100644 index 0000000..b07d87d --- /dev/null +++ b/client/src/main/java/rt4/HardReferenceNode.java @@ -0,0 +1,29 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!he") +public final class HardReferenceNode extends ReferenceNode { + + @OriginalMember(owner = "client!he", name = "X", descriptor = "Ljava/lang/Object;") + private final Object referent; + + @OriginalMember(owner = "client!he", name = "", descriptor = "(Ljava/lang/Object;)V") + public HardReferenceNode(@OriginalArg(0) Object arg0) { + this.referent = arg0; + } + + @OriginalMember(owner = "client!he", name = "a", descriptor = "(Z)Ljava/lang/Object;") + @Override + public final Object get() { + return this.referent; + } + + @OriginalMember(owner = "client!he", name = "e", descriptor = "(I)Z") + @Override + public final boolean isSoft() { + return false; + } +} diff --git a/client/src/main/java/rt4/HashTable.java b/client/src/main/java/rt4/HashTable.java new file mode 100644 index 0000000..b603544 --- /dev/null +++ b/client/src/main/java/rt4/HashTable.java @@ -0,0 +1,156 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!sc") +public final class HashTable { + + @OriginalMember(owner = "client!sc", name = "q", descriptor = "Lclient!ab;") + private Node aClass3_192; + + @OriginalMember(owner = "client!sc", name = "u", descriptor = "J") + private long aLong168; + + @OriginalMember(owner = "client!sc", name = "C", descriptor = "Lclient!ab;") + private Node aClass3_193; + + @OriginalMember(owner = "client!sc", name = "F", descriptor = "I") + private int anInt5037 = 0; + + @OriginalMember(owner = "client!sc", name = "c", descriptor = "[Lclient!ab;") + public final Node[] nodes; + + @OriginalMember(owner = "client!sc", name = "h", descriptor = "I") + public final int anInt5023; + + @OriginalMember(owner = "client!sc", name = "", descriptor = "(I)V") + public HashTable(@OriginalArg(0) int arg0) { + this.nodes = new Node[arg0]; + this.anInt5023 = arg0; + for (@Pc(13) int i = 0; i < arg0; i++) { + @Pc(25) Node node = this.nodes[i] = new Node(); + node.previousNode = node; + node.nextNode = node; + } + } + + @OriginalMember(owner = "client!sc", name = "a", descriptor = "(I)V") + public final void clear() { + for (@Pc(5) int local5 = 0; local5 < this.anInt5023; local5++) { + @Pc(14) Node local14 = this.nodes[local5]; + while (true) { + @Pc(17) Node local17 = local14.nextNode; + if (local14 == local17) { + break; + } + local17.unlink(); + } + } + this.aClass3_193 = null; + this.aClass3_192 = null; + } + + @OriginalMember(owner = "client!sc", name = "c", descriptor = "(I)Lclient!ab;") + public final Node head() { + this.anInt5037 = 0; + return this.next(); + } + + @OriginalMember(owner = "client!sc", name = "d", descriptor = "(I)Lclient!ab;") + public final Node next() { + @Pc(24) Node local24; + if (this.anInt5037 > 0 && this.aClass3_193 != this.nodes[this.anInt5037 - 1]) { + local24 = this.aClass3_193; + this.aClass3_193 = local24.nextNode; + return local24; + } + do { + if (this.anInt5037 >= this.anInt5023) { + return null; + } + local24 = this.nodes[this.anInt5037++].nextNode; + } while (this.nodes[this.anInt5037 - 1] == local24); + this.aClass3_193 = local24.nextNode; + return local24; + } + + @OriginalMember(owner = "client!sc", name = "a", descriptor = "(ILclient!ab;J)V") + public final void put(@OriginalArg(1) Node arg0, @OriginalArg(2) long arg1) { + if (arg0.previousNode != null) { + arg0.unlink(); + } + @Pc(21) Node local21 = this.nodes[(int) (arg1 & (long) (this.anInt5023 - 1))]; + arg0.nextNode = local21; + arg0.key = arg1; + arg0.previousNode = local21.previousNode; + arg0.previousNode.nextNode = arg0; + arg0.nextNode.previousNode = arg0; + } + + @OriginalMember(owner = "client!sc", name = "a", descriptor = "(JI)Lclient!ab;") + public final Node get(@OriginalArg(0) long arg0) { + this.aLong168 = arg0; + @Pc(24) Node local24 = this.nodes[(int) (arg0 & (long) (this.anInt5023 - 1))]; + for (this.aClass3_192 = local24.nextNode; this.aClass3_192 != local24; this.aClass3_192 = this.aClass3_192.nextNode) { + if (arg0 == this.aClass3_192.key) { + @Pc(46) Node local46 = this.aClass3_192; + this.aClass3_192 = this.aClass3_192.nextNode; + return local46; + } + } + this.aClass3_192 = null; + return null; + } + + @OriginalMember(owner = "client!sc", name = "e", descriptor = "(I)I") + public final int size() { + @Pc(15) int local15 = 0; + for (@Pc(17) int local17 = 0; local17 < this.anInt5023; local17++) { + @Pc(26) Node local26 = this.nodes[local17]; + @Pc(29) Node local29 = local26.nextNode; + while (local29 != local26) { + local29 = local29.nextNode; + local15++; + } + } + return local15; + } + + @OriginalMember(owner = "client!sc", name = "a", descriptor = "([Lclient!ab;I)I") + public final int method3865(@OriginalArg(0) Node[] arg0) { + @Pc(13) int local13 = 0; + for (@Pc(15) int local15 = 0; local15 < this.anInt5023; local15++) { + @Pc(24) Node local24 = this.nodes[local15]; + for (@Pc(27) Node local27 = local24.nextNode; local27 != local24; local27 = local27.nextNode) { + arg0[local13++] = local27; + } + } + return local13; + } + + @OriginalMember(owner = "client!sc", name = "f", descriptor = "(I)Lclient!ab;") + public final Node nextWithKey() { + if (this.aClass3_192 == null) { + return null; + } + @Pc(23) Node local23 = this.nodes[(int) (this.aLong168 & (long) (this.anInt5023 - 1))]; + while (local23 != this.aClass3_192) { + if (this.aClass3_192.key == this.aLong168) { + @Pc(45) Node local45 = this.aClass3_192; + this.aClass3_192 = this.aClass3_192.nextNode; + return local45; + } + this.aClass3_192 = this.aClass3_192.nextNode; + } + this.aClass3_192 = null; + return null; + } + + @OriginalMember(owner = "client!sc", name = "g", descriptor = "(I)I") + public final int getBucketCount() { + return this.anInt5023; + } +} diff --git a/client/src/main/java/rt4/HashTableIterator.java b/client/src/main/java/rt4/HashTableIterator.java new file mode 100644 index 0000000..2a100f8 --- /dev/null +++ b/client/src/main/java/rt4/HashTableIterator.java @@ -0,0 +1,48 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!l") +public final class HashTableIterator { + + @OriginalMember(owner = "client!l", name = "a", descriptor = "Lclient!ab;") + private Node aClass3_135; + + @OriginalMember(owner = "client!l", name = "c", descriptor = "I") + private int anInt3447 = 0; + + @OriginalMember(owner = "client!l", name = "e", descriptor = "Lclient!sc;") + private final HashTable aClass133_10; + + @OriginalMember(owner = "client!l", name = "", descriptor = "(Lclient!sc;)V") + public HashTableIterator(@OriginalArg(0) HashTable arg0) { + this.aClass133_10 = arg0; + } + + @OriginalMember(owner = "client!l", name = "a", descriptor = "(I)Lclient!ab;") + public final Node method2700() { + @Pc(30) Node local30; + if (this.anInt3447 > 0 && this.aClass133_10.nodes[this.anInt3447 - 1] != this.aClass3_135) { + local30 = this.aClass3_135; + this.aClass3_135 = local30.nextNode; + return local30; + } + do { + if (this.aClass133_10.anInt5023 <= this.anInt3447) { + return null; + } + local30 = this.aClass133_10.nodes[this.anInt3447++].nextNode; + } while (local30 == this.aClass133_10.nodes[this.anInt3447 - 1]); + this.aClass3_135 = local30.nextNode; + return local30; + } + + @OriginalMember(owner = "client!l", name = "a", descriptor = "(B)Lclient!ab;") + public final Node method2701() { + this.anInt3447 = 0; + return this.method2700(); + } +} diff --git a/client/src/main/java/rt4/HintArrowManager.java b/client/src/main/java/rt4/HintArrowManager.java new file mode 100644 index 0000000..8765c7a --- /dev/null +++ b/client/src/main/java/rt4/HintArrowManager.java @@ -0,0 +1,67 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class HintArrowManager { + @OriginalMember(owner = "client!ih", name = "l", descriptor = "Lclient!n;") + public static final SoftLruHashTable models = new SoftLruHashTable(4); + + @OriginalMember(owner = "client!mh", name = "c", descriptor = "(II)V") + public static void clean() { + models.clean(5); + } + + @OriginalMember(owner = "client!og", name = "a", descriptor = "(I)V") + public static void removeSoft() { + models.removeSoft(); + } + + @OriginalMember(owner = "client!oi", name = "b", descriptor = "(I)V") + public static void clear() { + models.clear(); + } + + @OriginalMember(owner = "client!rm", name = "a", descriptor = "(ZIIIILclient!ak;I)Lclient!ak;") + public static Model getModel(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) Model arg4, @OriginalArg(6) int arg5) { + @Pc(4) long local4 = arg2; + @Pc(10) Model model = (Model) models.get(local4); + if (model == null) { + @Pc(22) RawModel local22 = RawModel.create(client.js5Archive7, arg2); + if (local22 == null) { + return null; + } + model = local22.createModel(64, 768, -50, -10, -50); + models.put(model, local4); + } + @Pc(42) int minX = arg4.getMinX(); + @Pc(45) int maxX = arg4.getMaxX(); + @Pc(48) int minZ = arg4.getMinZ(); + @Pc(51) int maxZ = arg4.getMaxZ(); + model = model.method4560(true, true, true); + if (arg0 != 0) { + model.rotateY(arg0); + } + @Pc(94) int local94; + if (GlRenderer.enabled) { + @Pc(68) GlModel local68 = (GlModel) model; + if (arg5 != SceneGraph.getTileHeight(Player.plane, arg3 + minX, arg1 + minZ) || arg5 != SceneGraph.getTileHeight(Player.plane, arg3 + maxX, maxZ + arg1)) { + for (local94 = 0; local94 < local68.vertexCount; local94++) { + local68.vertexY[local94] += SceneGraph.getTileHeight(Player.plane, local68.vertexX[local94] + arg3, local68.vertexZ[local94] + arg1) - arg5; + } + local68.vertexBuffer.valid = false; + local68.bounds.valid = false; + } + } else { + @Pc(142) SoftwareModel local142 = (SoftwareModel) model; + if (arg5 != SceneGraph.getTileHeight(Player.plane, minX + arg3, minZ + arg1) || arg5 != SceneGraph.getTileHeight(Player.plane, arg3 + maxX, maxZ + arg1)) { + for (local94 = 0; local94 < local142.vertexCount; local94++) { + local142.vertexY[local94] += SceneGraph.getTileHeight(Player.plane, arg3 + local142.vertexX[local94], local142.vertexZ[local94] + arg1) - arg5; + } + local142.boundsValid = false; + } + } + return model; + } +} diff --git a/client/src/main/java/rt4/HitBarList.java b/client/src/main/java/rt4/HitBarList.java new file mode 100644 index 0000000..632060d --- /dev/null +++ b/client/src/main/java/rt4/HitBarList.java @@ -0,0 +1,8 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalMember; + +public class HitBarList { + @OriginalMember(owner = "client!fm", name = "S", descriptor = "Lclient!n;") + public static final SoftLruHashTable hitBars = new SoftLruHashTable(4); +} diff --git a/client/src/main/java/rt4/HookRequest.java b/client/src/main/java/rt4/HookRequest.java new file mode 100644 index 0000000..a64f93d --- /dev/null +++ b/client/src/main/java/rt4/HookRequest.java @@ -0,0 +1,38 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!jl") +public final class HookRequest extends Node { + + @OriginalMember(owner = "client!jl", name = "q", descriptor = "Lclient!be;") + public Component target; + + @OriginalMember(owner = "client!jl", name = "r", descriptor = "Lclient!na;") + public JagString opBase; + + @OriginalMember(owner = "client!jl", name = "w", descriptor = "I") + public int mouseY; + + @OriginalMember(owner = "client!jl", name = "z", descriptor = "I") + public int keyChar; + + @OriginalMember(owner = "client!jl", name = "A", descriptor = "I") + public int keyCode; + + @OriginalMember(owner = "client!jl", name = "B", descriptor = "I") + public int op; + + @OriginalMember(owner = "client!jl", name = "C", descriptor = "Z") + public boolean aBoolean158; + + @OriginalMember(owner = "client!jl", name = "D", descriptor = "I") + public int mouseX; + + @OriginalMember(owner = "client!jl", name = "E", descriptor = "[Ljava/lang/Object;") + public Object[] arguments; + + @OriginalMember(owner = "client!jl", name = "F", descriptor = "Lclient!be;") + public Component source; +} diff --git a/client/src/main/java/rt4/HuffmanCodec.java b/client/src/main/java/rt4/HuffmanCodec.java new file mode 100644 index 0000000..e1db8fa --- /dev/null +++ b/client/src/main/java/rt4/HuffmanCodec.java @@ -0,0 +1,250 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!fi") +public final class HuffmanCodec { + + @OriginalMember(owner = "client!fi", name = "b", descriptor = "[I") + private int[] symbolTree; + + @OriginalMember(owner = "client!fi", name = "h", descriptor = "[I") + private final int[] codewords; + + @OriginalMember(owner = "client!fi", name = "e", descriptor = "[B") + private final byte[] bits; + + @OriginalMember(owner = "client!fi", name = "", descriptor = "([B)V") + public HuffmanCodec(@OriginalArg(0) byte[] bits) { + @Pc(6) int[] nextCodewords = new int[33]; + @Pc(9) int symbols = bits.length; + this.symbolTree = new int[8]; + this.codewords = new int[symbols]; + this.bits = bits; + @Pc(22) int nextNode = 0; + for (@Pc(24) int symbol = 0; symbol < symbols; symbol++) { + @Pc(35) byte codewordBits = bits[symbol]; + if (codewordBits != 0) { + @Pc(49) int bit = 0x1 << 32 - codewordBits; + @Pc(53) int codeword = nextCodewords[codewordBits]; + this.codewords[symbol] = codeword; + @Pc(121) int local121; + @Pc(67) int local67; + @Pc(76) int local76; + @Pc(92) int local92; + if ((codeword & bit) == 0) { + for (local67 = codewordBits - 1; local67 >= 1; local67--) { + local76 = nextCodewords[local67]; + if (codeword != local76) { + break; + } + local92 = 0x1 << 32 - local67; + if ((local76 & local92) != 0) { + nextCodewords[local67] = nextCodewords[local67 - 1]; + break; + } + nextCodewords[local67] = local92 | local76; + } + local121 = codeword | bit; + } else { + local121 = nextCodewords[codewordBits - 1]; + } + nextCodewords[codewordBits] = local121; + for (local67 = codewordBits + 1; local67 <= 32; local67++) { + if (codeword == nextCodewords[local67]) { + nextCodewords[local67] = local121; + } + } + local67 = 0; + for (local76 = 0; local76 < codewordBits; local76++) { + local92 = Integer.MIN_VALUE >>> local76; + if ((codeword & local92) == 0) { + local67++; + } else { + if (this.symbolTree[local67] == 0) { + this.symbolTree[local67] = nextNode; + } + local67 = this.symbolTree[local67]; + } + if (this.symbolTree.length <= local67) { + @Pc(206) int[] local206 = new int[this.symbolTree.length * 2]; + for (@Pc(208) int local208 = 0; local208 < this.symbolTree.length; local208++) { + local206[local208] = this.symbolTree[local208]; + } + this.symbolTree = local206; + } + } + this.symbolTree[local67] = ~symbol; + if (local67 >= nextNode) { + nextNode = local67 + 1; + } + } + } + } + + @OriginalMember(owner = "client!fi", name = "a", descriptor = "(II[B[BII)I") + public final int encode(@OriginalArg(0) int arg0, @OriginalArg(2) byte[] arg1, @OriginalArg(3) byte[] arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + @Pc(5) int local5 = arg0; + @Pc(11) int local11 = 0; + @Pc(15) int local15 = arg4 << 3; + while (local5 > arg3) { + @Pc(24) int local24 = arg2[arg3] & 0xFF; + @Pc(29) int local29 = this.codewords[local24]; + @Pc(34) byte local34 = this.bits[local24]; + if (local34 == 0) { + throw new RuntimeException("No codeword for data value " + local24); + } + @Pc(54) int local54 = local15 >> 3; + @Pc(58) int local58 = local15 & 0x7; + local15 += local34; + @Pc(72) int local72 = local54 + (local58 + local34 - 1 >> 3); + local11 &= -local58 >> 31; + @Pc(80) int local80 = local58 + 24; + arg1[local54] = (byte) (local11 |= local29 >>> local80); + if (local54 < local72) { + local54++; + local58 = local80 - 8; + arg1[local54] = (byte) (local11 = local29 >>> local58); + if (local54 < local72) { + local58 -= 8; + local54++; + arg1[local54] = (byte) (local11 = local29 >>> local58); + if (local72 > local54) { + local58 -= 8; + local54++; + arg1[local54] = (byte) (local11 = local29 >>> local58); + if (local72 > local54) { + local54++; + local58 -= 8; + arg1[local54] = (byte) (local11 = local29 << -local58); + } + } + } + } + arg3++; + } + return (local15 + 7 >> 3) - arg4; + } + + @OriginalMember(owner = "client!fi", name = "a", descriptor = "(II[BI[BI)I") + public final int decode(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) byte[] arg2, @OriginalArg(4) byte[] arg3, @OriginalArg(5) int arg4) { + if (arg1 == 0) { + return 0; + } + @Pc(15) int local15 = 0; + @Pc(19) int local19 = arg1; + @Pc(21) int local21 = arg4; + while (true) { + @Pc(25) byte local25 = arg3[local21]; + if (local25 < 0) { + local15 = this.symbolTree[local15]; + } else { + local15++; + } + @Pc(41) int local41; + if ((local41 = this.symbolTree[local15]) < 0) { + arg2[arg0++] = (byte) ~local41; + if (arg0 >= local19) { + break; + } + local15 = 0; + } + if ((local25 & 0x40) == 0) { + local15++; + } else { + local15 = this.symbolTree[local15]; + } + @Pc(78) int local78; + if ((local78 = this.symbolTree[local15]) < 0) { + arg2[arg0++] = (byte) ~local78; + if (local19 <= arg0) { + break; + } + local15 = 0; + } + if ((local25 & 0x20) == 0) { + local15++; + } else { + local15 = this.symbolTree[local15]; + } + @Pc(118) int local118; + if ((local118 = this.symbolTree[local15]) < 0) { + arg2[arg0++] = (byte) ~local118; + if (local19 <= arg0) { + break; + } + local15 = 0; + } + if ((local25 & 0x10) == 0) { + local15++; + } else { + local15 = this.symbolTree[local15]; + } + @Pc(156) int local156; + if ((local156 = this.symbolTree[local15]) < 0) { + arg2[arg0++] = (byte) ~local156; + if (arg0 >= local19) { + break; + } + local15 = 0; + } + if ((local25 & 0x8) == 0) { + local15++; + } else { + local15 = this.symbolTree[local15]; + } + @Pc(195) int local195; + if ((local195 = this.symbolTree[local15]) < 0) { + arg2[arg0++] = (byte) ~local195; + if (local19 <= arg0) { + break; + } + local15 = 0; + } + if ((local25 & 0x4) == 0) { + local15++; + } else { + local15 = this.symbolTree[local15]; + } + @Pc(233) int local233; + if ((local233 = this.symbolTree[local15]) < 0) { + arg2[arg0++] = (byte) ~local233; + if (arg0 >= local19) { + break; + } + local15 = 0; + } + if ((local25 & 0x2) == 0) { + local15++; + } else { + local15 = this.symbolTree[local15]; + } + @Pc(276) int local276; + if ((local276 = this.symbolTree[local15]) < 0) { + arg2[arg0++] = (byte) ~local276; + if (arg0 >= local19) { + break; + } + local15 = 0; + } + if ((local25 & 0x1) == 0) { + local15++; + } else { + local15 = this.symbolTree[local15]; + } + @Pc(318) int local318; + if ((local318 = this.symbolTree[local15]) < 0) { + arg2[arg0++] = (byte) ~local318; + if (arg0 >= local19) { + break; + } + local15 = 0; + } + local21++; + } + return local21 + 1 - arg4; + } +} diff --git a/client/src/main/java/rt4/IdkType.java b/client/src/main/java/rt4/IdkType.java new file mode 100644 index 0000000..bf0305f --- /dev/null +++ b/client/src/main/java/rt4/IdkType.java @@ -0,0 +1,161 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!dm") +public final class IdkType { + + @OriginalMember(owner = "client!dm", name = "b", descriptor = "[S") + private short[] recol_d; + + @OriginalMember(owner = "client!dm", name = "i", descriptor = "[S") + private short[] recol_s; + + @OriginalMember(owner = "client!dm", name = "s", descriptor = "[S") + private short[] retex_d; + + @OriginalMember(owner = "client!dm", name = "t", descriptor = "[S") + private short[] retex_s; + + @OriginalMember(owner = "client!dm", name = "w", descriptor = "[I") + private int[] model; + + @OriginalMember(owner = "client!dm", name = "x", descriptor = "[I") + private final int[] head = new int[]{-1, -1, -1, -1, -1}; + + @OriginalMember(owner = "client!dm", name = "k", descriptor = "I") + public int feature = -1; + + @OriginalMember(owner = "client!dm", name = "A", descriptor = "Z") + public boolean disable = false; + + @OriginalMember(owner = "client!dm", name = "a", descriptor = "(Z)Lclient!gb;") + public RawModel getHeadModel() { + @Pc(13) int modelCount = 0; + @Pc(16) RawModel[] models = new RawModel[5]; + for (@Pc(18) int i = 0; i < 5; i++) { + if (this.head[i] != -1) { + models[modelCount++] = RawModel.create(IdkTypeList.modelsArchive, this.head[i]); + } + } + @Pc(52) RawModel model = new RawModel(models, modelCount); + @Pc(58) int i; + if (this.recol_s != null) { + for (i = 0; i < this.recol_s.length; i++) { + model.recolor(this.recol_s[i], this.recol_d[i]); + } + } + if (this.retex_s != null) { + for (i = 0; i < this.retex_s.length; i++) { + model.retexture(this.retex_s[i], this.retex_d[i]); + } + } + return model; + } + + @OriginalMember(owner = "client!dm", name = "a", descriptor = "(I)Z") + public boolean isBodyModelReady() { + if (this.model == null) { + return true; + } + @Pc(13) boolean ready = true; + for (@Pc(22) int i = 0; i < this.model.length; i++) { + if (!IdkTypeList.modelsArchive.isFileReady(0, this.model[i])) { + ready = false; + } + } + return ready; + } + + @OriginalMember(owner = "client!dm", name = "a", descriptor = "(BLclient!wa;I)V") + private void decode(@OriginalArg(1) Buffer buffer, @OriginalArg(2) int opcode) { + if (opcode == 1) { + this.feature = buffer.g1(); + return; + } + + @Pc(22) int count; + @Pc(28) int i; + if (opcode == 2) { + count = buffer.g1(); + this.model = new int[count]; + for (i = 0; i < count; i++) { + this.model[i] = buffer.g2(); + } + } else if (opcode == 3) { + this.disable = true; + } else if (opcode == 40) { + count = buffer.g1(); + this.recol_d = new short[count]; + this.recol_s = new short[count]; + for (i = 0; i < count; i++) { + this.recol_s[i] = (short) buffer.g2(); + this.recol_d[i] = (short) buffer.g2(); + } + } else if (opcode == 41) { + count = buffer.g1(); + this.retex_s = new short[count]; + this.retex_d = new short[count]; + for (i = 0; i < count; i++) { + this.retex_s[i] = (short) buffer.g2(); + this.retex_d[i] = (short) buffer.g2(); + } + } else if (opcode >= 60 && opcode < 70) { + this.head[opcode - 60] = buffer.g2(); + } + } + + @OriginalMember(owner = "client!dm", name = "b", descriptor = "(B)Lclient!gb;") + public RawModel getBodyModel() { + if (this.model == null) { + return null; + } + @Pc(16) RawModel[] models = new RawModel[this.model.length]; + for (@Pc(18) int i = 0; i < this.model.length; i++) { + models[i] = RawModel.create(IdkTypeList.modelsArchive, this.model[i]); + } + @Pc(56) RawModel model; + if (models.length == 1) { + model = models[0]; + } else { + model = new RawModel(models, models.length); + } + @Pc(70) int i; + if (this.recol_s != null) { + for (i = 0; i < this.recol_s.length; i++) { + model.recolor(this.recol_s[i], this.recol_d[i]); + } + } + if (this.retex_s != null) { + for (i = 0; i < this.retex_s.length; i++) { + model.retexture(this.retex_s[i], this.retex_d[i]); + } + } + return model; + } + + @OriginalMember(owner = "client!dm", name = "c", descriptor = "(I)Z") + public boolean isHeadModelReady() { + @Pc(3) boolean ready = true; + for (@Pc(12) int i = 0; i < 5; i++) { + if (this.head[i] != -1 && !IdkTypeList.modelsArchive.isFileReady(0, this.head[i])) { + ready = false; + } + } + return ready; + } + + @OriginalMember(owner = "client!dm", name = "a", descriptor = "(ILclient!wa;)V") + public void decode(@OriginalArg(1) Buffer buffer) { + while (true) { + @Pc(13) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(buffer, opcode); + } + } +} diff --git a/client/src/main/java/rt4/IdkTypeList.java b/client/src/main/java/rt4/IdkTypeList.java new file mode 100644 index 0000000..8e76c06 --- /dev/null +++ b/client/src/main/java/rt4/IdkTypeList.java @@ -0,0 +1,57 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class IdkTypeList { + + @OriginalMember(owner = "client!fe", name = "jb", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + + @OriginalMember(owner = "client!bd", name = "g", descriptor = "Lclient!ve;") + public static Js5 modelsArchive; + + @OriginalMember(owner = "client!ri", name = "c", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!ec", name = "z", descriptor = "I") + public static int count; + + @OriginalMember(owner = "client!jl", name = "a", descriptor = "(ILclient!ve;Lclient!ve;)V") + public static void init(@OriginalArg(1) Js5 arg0, @OriginalArg(2) Js5 arg1) { + modelsArchive = arg0; + archive = arg1; + count = archive.getGroupCapacity(3); + } + + @OriginalMember(owner = "client!gg", name = "d", descriptor = "(II)Lclient!dm;") + public static IdkType get(@OriginalArg(0) int id) { + @Pc(10) IdkType type = (IdkType) types.get(id); + if (type != null) { + return type; + } + @Pc(21) byte[] src = archive.fetchFile(3, id); + type = new IdkType(); + if (src != null) { + type.decode(new Buffer(src)); + } + types.put(type, id); + return type; + } + + @OriginalMember(owner = "client!oi", name = "a", descriptor = "(I)V") + public static void removeSoft() { + types.removeSoft(); + } + + @OriginalMember(owner = "client!t", name = "b", descriptor = "(I)V") + public static void clear() { + types.clear(); + } + + @OriginalMember(owner = "client!te", name = "a", descriptor = "(IZ)V") + public static void clean() { + types.clean(5); + } +} diff --git a/client/src/main/java/rt4/IgnoreList.java b/client/src/main/java/rt4/IgnoreList.java new file mode 100644 index 0000000..3b576bd --- /dev/null +++ b/client/src/main/java/rt4/IgnoreList.java @@ -0,0 +1,81 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class IgnoreList { + @OriginalMember(owner = "client!pf", name = "h", descriptor = "[J") + public static final long[] encodedUsernames = new long[100]; + @OriginalMember(owner = "client!pi", name = "V", descriptor = "[Lclient!na;") + public static final JagString[] usernames = new JagString[100]; + @OriginalMember(owner = "client!cl", name = "Z", descriptor = "I") + public static int size = 0; + + @OriginalMember(owner = "client!te", name = "b", descriptor = "(Lclient!na;I)Z") + public static boolean contains(@OriginalArg(0) JagString arg0) { + if (arg0 == null) { + return false; + } + for (@Pc(11) int local11 = 0; local11 < size; local11++) { + if (arg0.equalsIgnoreCase(usernames[local11])) { + return true; + } + } + return false; + } + + @OriginalMember(owner = "client!la", name = "a", descriptor = "(IJ)V") + public static void add(@OriginalArg(1) long arg0) { + if (arg0 == 0L) { + return; + } + if (size >= 100) { + Chat.add(JagString.EMPTY, 0, LocalizedText.IGNORELISTFULL); + return; + } + @Pc(34) JagString local34 = Base37.decode37(arg0).toTitleCase(); + @Pc(36) int local36; + for (local36 = 0; local36 < size; local36++) { + if (encodedUsernames[local36] == arg0) { + Chat.add(JagString.EMPTY, 0, JagString.concatenate(new JagString[]{local34, LocalizedText.IGNORELISTDUPE})); + return; + } + } + for (local36 = 0; local36 < FriendsList.size; local36++) { + if (FriendsList.encodedUsernames[local36] == arg0) { + Chat.add(JagString.EMPTY, 0, JagString.concatenate(new JagString[]{LocalizedText.REMOVESOCIAL2, local34, LocalizedText.REMOVEFRIEND})); + return; + } + } + if (local34.strEquals(PlayerList.self.username)) { + Chat.add(JagString.EMPTY, 0, LocalizedText.IGNORECANTADDSELF); + return; + } + encodedUsernames[size] = arg0; + usernames[size++] = Base37.decode37(arg0); + FriendsList.transmitAt = InterfaceList.transmitTimer; + Protocol.outboundBuffer.p1isaac(ClientProt.IGNORELIST_ADD); + Protocol.outboundBuffer.p8(arg0); + } + + @OriginalMember(owner = "client!fh", name = "a", descriptor = "(JI)V") + public static void remove(@OriginalArg(0) long arg0) { + if (arg0 == 0L) { + return; + } + for (@Pc(12) int local12 = 0; local12 < size; local12++) { + if (encodedUsernames[local12] == arg0) { + size--; + for (@Pc(36) int local36 = local12; local36 < size; local36++) { + encodedUsernames[local36] = encodedUsernames[local36 + 1]; + usernames[local36] = usernames[local36 + 1]; + } + FriendsList.transmitAt = InterfaceList.transmitTimer; + Protocol.outboundBuffer.p1isaac(ClientProt.IGNORELIST_DEL); + Protocol.outboundBuffer.p8(arg0); + break; + } + } + } +} diff --git a/client/src/main/java/rt4/ImageProducerFrameBuffer.java b/client/src/main/java/rt4/ImageProducerFrameBuffer.java new file mode 100644 index 0000000..05c3796 --- /dev/null +++ b/client/src/main/java/rt4/ImageProducerFrameBuffer.java @@ -0,0 +1,111 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.Component; +import java.awt.*; +import java.awt.image.*; + +@OriginalClass("client!di") +public final class ImageProducerFrameBuffer extends FrameBuffer implements ImageProducer, ImageObserver { + + @OriginalMember(owner = "client!di", name = "A", descriptor = "Ljava/awt/image/ImageConsumer;") + private ImageConsumer imageConsumer; + + @OriginalMember(owner = "client!di", name = "B", descriptor = "Ljava/awt/image/ColorModel;") + private ColorModel colorModel; + + @OriginalMember(owner = "client!di", name = "addConsumer", descriptor = "(Ljava/awt/image/ImageConsumer;)V") + @Override + public final synchronized void addConsumer(@OriginalArg(0) ImageConsumer consumer) { + this.imageConsumer = consumer; + consumer.setDimensions(this.width, this.height); + consumer.setProperties(null); + consumer.setColorModel(this.colorModel); + consumer.setHints(14); + } + + @OriginalMember(owner = "client!di", name = "a", descriptor = "(IIIBI)V") + private synchronized void method1168(@OriginalArg(0) int width, @OriginalArg(1) int height, @OriginalArg(2) int x, @OriginalArg(4) int y) { + if (this.imageConsumer != null) { + this.imageConsumer.setPixels(x, y, width, height, this.colorModel, this.pixels, y * this.width + x, this.width); + this.imageConsumer.imageComplete(2); + } + } + + @OriginalMember(owner = "client!di", name = "removeConsumer", descriptor = "(Ljava/awt/image/ImageConsumer;)V") + @Override + public final synchronized void removeConsumer(@OriginalArg(0) ImageConsumer consumer) { + if (this.imageConsumer == consumer) { + this.imageConsumer = null; + } + } + + @OriginalMember(owner = "client!di", name = "a", descriptor = "(IIIILjava/awt/Graphics;I)V") + @Override + public final void drawAt(@OriginalArg(0) int width, @OriginalArg(1) int x, @OriginalArg(3) int height, @OriginalArg(4) Graphics graphics, @OriginalArg(5) int y) { + this.method1168(width, height, x, y); + @Pc(17) Shape shape = graphics.getClip(); + graphics.clipRect(x, y, width, height); + graphics.drawImage(this.image, 0, 0, this); + graphics.setClip(shape); + } + + @OriginalMember(owner = "client!di", name = "startProduction", descriptor = "(Ljava/awt/image/ImageConsumer;)V") + @Override + public final void startProduction(@OriginalArg(0) ImageConsumer consumer) { + this.addConsumer(consumer); + } + + @OriginalMember(owner = "client!di", name = "c", descriptor = "(I)V") + private synchronized void setPixels() { + if (this.imageConsumer != null) { + this.imageConsumer.setPixels(0, 0, this.width, this.height, this.colorModel, this.pixels, 0, this.width); + this.imageConsumer.imageComplete(2); + } + } + + @OriginalMember(owner = "client!di", name = "isConsumer", descriptor = "(Ljava/awt/image/ImageConsumer;)Z") + @Override + public final synchronized boolean isConsumer(@OriginalArg(0) ImageConsumer consumer) { + return this.imageConsumer == consumer; + } + + @OriginalMember(owner = "client!di", name = "a", descriptor = "(IILjava/awt/Graphics;I)V") + @Override + public final void draw(@OriginalArg(2) Graphics graphics) { + this.setPixels(); + graphics.drawImage(this.image, 0, 0, this); + } + + @OriginalMember(owner = "client!di", name = "a", descriptor = "(IZILjava/awt/Component;)V") + @Override + public final void init(@OriginalArg(0) int height, @OriginalArg(2) int width, @OriginalArg(3) Component component) { + this.height = height; + this.pixels = new int[width * height + 1]; + this.width = width; + this.colorModel = new DirectColorModel(32, 16711680, 65280, 255); + this.image = component.createImage(this); + this.setPixels(); + component.prepareImage(this.image, this); + this.setPixels(); + component.prepareImage(this.image, this); + this.setPixels(); + component.prepareImage(this.image, this); + this.makeTarget(); + } + + @OriginalMember(owner = "client!di", name = "imageUpdate", descriptor = "(Ljava/awt/Image;IIIII)Z") + @Override + public final boolean imageUpdate(@OriginalArg(0) Image image, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + return true; + } + + @OriginalMember(owner = "client!di", name = "requestTopDownLeftRightResend", descriptor = "(Ljava/awt/image/ImageConsumer;)V") + @Override + public final void requestTopDownLeftRightResend(@OriginalArg(0) ImageConsumer consumer) { + } +} diff --git a/client/src/main/java/rt4/IndexedSprite.java b/client/src/main/java/rt4/IndexedSprite.java new file mode 100644 index 0000000..4ebba20 --- /dev/null +++ b/client/src/main/java/rt4/IndexedSprite.java @@ -0,0 +1,37 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!ok") +public abstract class IndexedSprite { + + @OriginalMember(owner = "client!ok", name = "a", descriptor = "I") + public int width; + + @OriginalMember(owner = "client!ok", name = "d", descriptor = "I") + public int yOffset; + + @OriginalMember(owner = "client!ok", name = "i", descriptor = "I") + public int innerHeight; + + @OriginalMember(owner = "client!ok", name = "k", descriptor = "I") + public int height; + + @OriginalMember(owner = "client!ok", name = "l", descriptor = "I") + public int innerWidth; + + @OriginalMember(owner = "client!ok", name = "m", descriptor = "I") + public int xOffset; + + @OriginalMember(owner = "client!ok", name = "", descriptor = "()V") + protected IndexedSprite() { + } + + @OriginalMember(owner = "client!ok", name = "a", descriptor = "(III)V") + public abstract void method3335(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2); + + @OriginalMember(owner = "client!ok", name = "a", descriptor = "(II)V") + public abstract void renderTransparent(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1); +} diff --git a/client/src/main/java/rt4/IntHashTable.java b/client/src/main/java/rt4/IntHashTable.java new file mode 100644 index 0000000..946f0e1 --- /dev/null +++ b/client/src/main/java/rt4/IntHashTable.java @@ -0,0 +1,49 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!jg") +public final class IntHashTable { + + @OriginalMember(owner = "client!jg", name = "f", descriptor = "[I") + private final int[] anIntArray285; + + @OriginalMember(owner = "client!jg", name = "", descriptor = "([I)V") + public IntHashTable(@OriginalArg(0) int[] arg0) { + @Pc(5) int local5; + for (local5 = 1; local5 <= (arg0.length >> 1) + arg0.length; local5 <<= 0x1) { + } + this.anIntArray285 = new int[local5 + local5]; + @Pc(28) int local28; + for (local28 = 0; local28 < local5 + local5; local28++) { + this.anIntArray285[local28] = -1; + } + local28 = 0; + while (arg0.length > local28) { + @Pc(55) int local55; + for (local55 = local5 - 1 & arg0[local28]; this.anIntArray285[local55 + local55 + 1] != -1; local55 = local5 - 1 & local55 + 1) { + } + this.anIntArray285[local55 + local55] = arg0[local28]; + this.anIntArray285[local55 + local55 + 1] = local28++; + } + } + + @OriginalMember(owner = "client!jg", name = "a", descriptor = "(II)I") + public final int get(@OriginalArg(0) int arg0) { + @Pc(16) int local16 = (this.anIntArray285.length >> 1) - 1; + @Pc(20) int local20 = local16 & arg0; + while (true) { + @Pc(29) int local29 = this.anIntArray285[local20 + local20 + 1]; + if (local29 == -1) { + return -1; + } + if (arg0 == this.anIntArray285[local20 + local20]) { + return local29; + } + local20 = local20 + 1 & local16; + } + } +} diff --git a/client/src/main/java/rt4/IntNode.java b/client/src/main/java/rt4/IntNode.java new file mode 100644 index 0000000..0a28fee --- /dev/null +++ b/client/src/main/java/rt4/IntNode.java @@ -0,0 +1,21 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!ka") +public final class IntNode extends Node { + + @OriginalMember(owner = "client!ka", name = "p", descriptor = "I") + public int value; + + @OriginalMember(owner = "client!ka", name = "", descriptor = "()V") + public IntNode() { + } + + @OriginalMember(owner = "client!ka", name = "", descriptor = "(I)V") + public IntNode(@OriginalArg(0) int arg0) { + this.value = arg0; + } +} diff --git a/client/src/main/java/rt4/IntUtils.java b/client/src/main/java/rt4/IntUtils.java new file mode 100644 index 0000000..9d242a4 --- /dev/null +++ b/client/src/main/java/rt4/IntUtils.java @@ -0,0 +1,92 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class IntUtils { + @OriginalMember(owner = "client!ra", name = "b", descriptor = "(III)I") + public static int pow(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(15) int local15 = 1; + while (arg0 > 1) { + if ((arg0 & 0x1) != 0) { + local15 *= arg1; + } + arg1 *= arg1; + arg0 >>= 0x1; + } + if (arg0 == 1) { + return local15 * arg1; + } else { + return local15; + } + } + + @OriginalMember(owner = "client!nb", name = "a", descriptor = "(BI)I") + public static int clp2(@OriginalArg(1) int arg0) { + @Pc(0) int local0 = arg0 - 1; + @Pc(6) int local6 = local0 | local0 >>> 1; + @Pc(22) int local22 = local6 | local6 >>> 2; + @Pc(28) int local28 = local22 | local22 >>> 4; + @Pc(34) int local34 = local28 | local28 >>> 8; + @Pc(40) int local40 = local34 | local34 >>> 16; + return local40 + 1; + } + + @OriginalMember(owner = "client!qi", name = "b", descriptor = "(II)I") + public static int bitCount(@OriginalArg(0) int arg0) { + @Pc(5) int local5 = 0; + if (arg0 < 0 || arg0 >= 65536) { + local5 += 16; + arg0 >>>= 0x10; + } + if (arg0 >= 256) { + local5 += 8; + arg0 >>>= 0x8; + } + if (arg0 >= 16) { + local5 += 4; + arg0 >>>= 0x4; + } + if (arg0 >= 4) { + arg0 >>>= 0x2; + local5 += 2; + } + if (arg0 >= 1) { + arg0 >>>= 0x1; + local5++; + } + return arg0 + local5; + } + + @OriginalMember(owner = "client!gd", name = "a", descriptor = "(IIBI)I") + public static int clamp(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2) { + return arg2 > arg1 ? arg2 : arg1 > arg0 ? arg0 : arg1; + } + + @OriginalMember(owner = "client!bn", name = "a", descriptor = "(III)I") + public static int bitReverse(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(8) int local8 = 0; + while (arg0 > 0) { + local8 = local8 << 1 | arg1 & 0x1; + arg1 >>>= 0x1; + arg0--; + } + return local8; + } + + @OriginalMember(owner = "client!uc", name = "a", descriptor = "(II)I") + public static int bitCountFast(@OriginalArg(0) int v) { + @Pc(9) int a = (v >>> 1 & 0xD5555555) + (v & 0x55555555); + @Pc(19) int b = (a >>> 2 & 0x33333333) + (a & 0x33333333); + @Pc(31) int c = (b >>> 4) + b & 0xF0F0F0F; + @Pc(37) int d = c + (c >>> 8); + @Pc(43) int e = d + (d >>> 16); + return e & 0xFF; + } + + @OriginalMember(owner = "client!ra", name = "a", descriptor = "(BI)Z") + public static boolean isPowerOfTwo(@OriginalArg(1) int v) { + return v == (-v & v); + } +} diff --git a/client/src/main/java/rt4/InterfaceList.java b/client/src/main/java/rt4/InterfaceList.java new file mode 100644 index 0000000..63dbb36 --- /dev/null +++ b/client/src/main/java/rt4/InterfaceList.java @@ -0,0 +1,1326 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.*; + +public class InterfaceList { + @OriginalMember(owner = "client!p", name = "c", descriptor = "Lclient!ih;") + public static final LinkedList lowPriorityRequests = new LinkedList(); + @OriginalMember(owner = "client!ch", name = "y", descriptor = "[Z") + public static final boolean[] rectangleRedraw = new boolean[100]; + @OriginalMember(owner = "client!qj", name = "i", descriptor = "[I") + public static final int[] keyChars = new int[128]; + @OriginalMember(owner = "client!sg", name = "q", descriptor = "[I") + public static final int[] keyCodes = new int[128]; + @OriginalMember(owner = "client!rb", name = "b", descriptor = "Lclient!sc;") + public static final HashTable properties = new HashTable(512); + @OriginalMember(owner = "client!vh", name = "b", descriptor = "[I") + public static final int[] rectangleX = new int[100]; + @OriginalMember(owner = "client!e", name = "sc", descriptor = "[I") + public static final int[] rectangleY = new int[100]; + @OriginalMember(owner = "client!sd", name = "V", descriptor = "[I") + public static final int[] rectangleWidth = new int[100]; + @OriginalMember(owner = "client!fe", name = "lb", descriptor = "[I") + public static final int[] rectangleHeight = new int[100]; + @OriginalMember(owner = "client!pa", name = "R", descriptor = "[Z") + public static final boolean[] aBooleanArray100 = new boolean[100]; + @OriginalMember(owner = "client!ql", name = "h", descriptor = "Lclient!na;") + public static final JagString aClass100_903 = JagString.parse("Hidden)2"); + @OriginalMember(owner = "client!ja", name = "f", descriptor = "Lclient!ih;") + public static final LinkedList mediumPriorityRequests = new LinkedList(); + @OriginalMember(owner = "client!ac", name = "i", descriptor = "Lclient!ih;") + public static final LinkedList highPriorityRequests = new LinkedList(); + @OriginalMember(owner = "client!sc", name = "z", descriptor = "[Z") + public static final boolean[] aBooleanArray116 = new boolean[100]; + @OriginalMember(owner = "client!bn", name = "V", descriptor = "I") + public static int rectangles = 0; + @OriginalMember(owner = "client!md", name = "W", descriptor = "I") + public static int topLevelInterface = -1; + @OriginalMember(owner = "client!bm", name = "f", descriptor = "Lclient!ve;") + public static Js5 aClass153_12; + @OriginalMember(owner = "client!nd", name = "v", descriptor = "Lclient!ve;") + public static Js5 aClass153_64; + @OriginalMember(owner = "client!qg", name = "ab", descriptor = "Lclient!ve;") + public static Js5 aClass153_84; + @OriginalMember(owner = "client!qh", name = "g", descriptor = "Lclient!ve;") + public static Js5 aClass153_85; + @OriginalMember(owner = "client!th", name = "j", descriptor = "[[Lclient!be;") + public static Component[][] components; + @OriginalMember(owner = "client!sc", name = "m", descriptor = "[Z") + public static boolean[] aBooleanArray115; + @OriginalMember(owner = "client!oj", name = "y", descriptor = "I") + public static int keyQueueSize = 0; + @OriginalMember(owner = "client!je", name = "fb", descriptor = "I") + public static int transmitTimer = 1; + @OriginalMember(owner = "client!ra", name = "J", descriptor = "I") + public static int miscTransmitAt = 0; + @OriginalMember(owner = "client!je", name = "T", descriptor = "Lclient!sc;") + public static HashTable openInterfaces = new HashTable(8); + @OriginalMember(owner = "client!wl", name = "h", descriptor = "Lclient!be;") + public static Component aClass13_26 = null; + @OriginalMember(owner = "client!jd", name = "i", descriptor = "Lclient!be;") + public static Component clickedInventoryComponent; + @OriginalMember(owner = "client!nf", name = "h", descriptor = "Lclient!be;") + public static Component mouseOverInventoryInterface; + @OriginalMember(owner = "client!qk", name = "f", descriptor = "I") + public static int clickedInventoryComponentY = 0; + @OriginalMember(owner = "client!ef", name = "r", descriptor = "Lclient!be;") + public static Component aClass13_12 = null; + @OriginalMember(owner = "client!bn", name = "O", descriptor = "I") + public static int anInt761; + @OriginalMember(owner = "client!bc", name = "X", descriptor = "I") + public static int anInt436; + @OriginalMember(owner = "client!si", name = "ab", descriptor = "I") + public static int anInt5138; + @OriginalMember(owner = "client!sh", name = "f", descriptor = "I") + public static int anInt5103 = -1; + @OriginalMember(owner = "client!gd", name = "j", descriptor = "I") + public static int clickedInventoryComponentCycle = 0; + @OriginalMember(owner = "client!lj", name = "w", descriptor = "I") + public static int clickedInventoryComponentX = 0; + @OriginalMember(owner = "client!og", name = "e", descriptor = "Lclient!be;") + public static Component aClass13_22; + @OriginalMember(owner = "client!ok", name = "b", descriptor = "I") + public static int anInt4271; + @OriginalMember(owner = "client!lg", name = "b", descriptor = "Z") + public static boolean aBoolean174 = false; + @OriginalMember(owner = "client!ac", name = "n", descriptor = "I") + public static int mouseOverInventoryObjectIndex = 0; + @OriginalMember(owner = "client!jj", name = "j", descriptor = "Z") + public static boolean draggingClickedInventoryObject = false; + @OriginalMember(owner = "client!rg", name = "s", descriptor = "I") + public static int anInt5574 = -1; + @OriginalMember(owner = "client!oj", name = "v", descriptor = "I") + public static int anInt4311 = -2; + @OriginalMember(owner = "client!pm", name = "hb", descriptor = "I") + public static int anInt4620; + @OriginalMember(owner = "client!fk", name = "e", descriptor = "I") + public static int anInt1885; + @OriginalMember(owner = "client!bj", name = "s", descriptor = "I") + public static int anInt660 = -1; + @OriginalMember(owner = "client!kl", name = "s", descriptor = "I") + public static int anInt3337 = 0; + @OriginalMember(owner = "client!jk", name = "p", descriptor = "I") + public static int anInt3075 = -1; + @OriginalMember(owner = "client!df", name = "n", descriptor = "I") + public static int anInt1396 = 0; + @OriginalMember(owner = "client!di", name = "H", descriptor = "Z") + public static boolean aBoolean84 = false; + @OriginalMember(owner = "client!dh", name = "a", descriptor = "Z") + public static boolean aBoolean83 = false; + @OriginalMember(owner = "client!ja", name = "r", descriptor = "I") + public static int anInt2941 = -1; + @OriginalMember(owner = "client!a", name = "h", descriptor = "I") + public static int anInt5; + @OriginalMember(owner = "client!ve", name = "w", descriptor = "Z") + public static boolean aBoolean298 = false; + + @OriginalMember(owner = "client!ab", name = "a", descriptor = "(ZLclient!ve;Lclient!ve;Lclient!ve;Lclient!ve;)V") + public static void init(@OriginalArg(1) Js5 arg0, @OriginalArg(2) Js5 arg1, @OriginalArg(3) Js5 arg2, @OriginalArg(4) Js5 arg3) { + aClass153_12 = arg1; + aClass153_64 = arg0; + aClass153_84 = arg2; + aClass153_85 = arg3; + components = new Component[aClass153_84.capacity()][]; + aBooleanArray115 = new boolean[aClass153_84.capacity()]; + } + + @OriginalMember(owner = "client!ig", name = "a", descriptor = "(BI)V") + public static void method2275(@OriginalArg(1) int arg0) { + if (arg0 == -1 || !aBooleanArray115[arg0]) { + return; + } + aClass153_84.discardUnpacked(arg0); + if (components[arg0] == null) { + return; + } + @Pc(27) boolean local27 = true; + for (@Pc(29) int local29 = 0; local29 < components[arg0].length; local29++) { + if (components[arg0][local29] != null) { + if (components[arg0][local29].type == 2) { + local27 = false; + } else { + components[arg0][local29] = null; + } + } + } + if (local27) { + components[arg0] = null; + } + aBooleanArray115[arg0] = false; + } + + @OriginalMember(owner = "client!tm", name = "b", descriptor = "(II)Z") + public static boolean load(@OriginalArg(0) int arg0) { + if (aBooleanArray115[arg0]) { + return true; + } + + if (aClass153_84.isGroupReady(arg0)) { + @Pc(25) int local25 = aClass153_84.getGroupCapacity(arg0); + if (local25 == 0) { + aBooleanArray115[arg0] = true; + return true; + } + if (components[arg0] == null) { + components[arg0] = new Component[local25]; + } + for (@Pc(46) int local46 = 0; local46 < local25; local46++) { + if (components[arg0][local46] == null) { + @Pc(62) byte[] local62 = aClass153_84.fetchFile(arg0, local46); + if (local62 != null) { + @Pc(74) Component local74 = components[arg0][local46] = new Component(); + local74.id = local46 + (arg0 << 16); + if (local62[0] == -1) { + local74.decodeIf3(new Buffer(local62)); + } else { + local74.decodeIf1(new Buffer(local62)); + } + } + } + } + aBooleanArray115[arg0] = true; + return true; + } else { + return false; + } + } + + @OriginalMember(owner = "client!eb", name = "d", descriptor = "(I)V") + public static void method1287() { + components = new Component[aClass153_84.capacity()][]; + aBooleanArray115 = new boolean[aClass153_84.capacity()]; + } + + @OriginalMember(owner = "client!i", name = "i", descriptor = "(Z)V") + public static void redrawActiveInterfaces() { + for (@Pc(6) ComponentPointer local6 = (ComponentPointer) openInterfaces.head(); local6 != null; local6 = (ComponentPointer) openInterfaces.next()) { + @Pc(14) int local14 = local6.interfaceId; + if (load(local14)) { + @Pc(21) boolean local21 = true; + @Pc(25) Component[] local25 = components[local14]; + @Pc(27) int local27; + for (local27 = 0; local27 < local25.length; local27++) { + if (local25[local27] != null) { + local21 = local25[local27].if3; + break; + } + } + if (!local21) { + local27 = (int) local6.key; + @Pc(60) Component local60 = getComponent(local27); + if (local60 != null) { + redraw(local60); + } + } + } + } + } + + public static void fullRedrawAllInterfaces() { + // Loop over all the possible interfaces + for (int i = 0; i < components.length; i++) { + if (components[i] == null) { + load(i); + } + if (components[i] == null) { + continue; + } + for (int j = 0; j < components[i].length; j++) { + if (components[i][j] != null) { + redraw(components[i][j]); + } + } + } + } + + @OriginalMember(owner = "client!af", name = "a", descriptor = "(BI)Lclient!be;") + public static Component getComponent(@OriginalArg(1) int id) { + try { + @Pc(7) int parent = id >> 16; + @Pc(18) int child = id & 0xFFFF; + if (components.length <= parent || parent < 0) { + return null; + } + if (components[parent] == null || components[parent].length <= child || components[parent][child] == null) { + @Pc(33) boolean success = load(parent); + if (!success) { + return null; + } + } + if (components[parent].length <= child) { + return null; + } + return components[parent][child]; + } catch (Exception ex) { + ex.printStackTrace(); + return null; + } + } + + @OriginalMember(owner = "client!client", name = "b", descriptor = "(Lclient!be;)Lclient!bf;") + public static ServerActiveProperties getServerActiveProperties(@OriginalArg(0) Component arg0) { + @Pc(13) ServerActiveProperties local13 = (ServerActiveProperties) properties.get(((long) arg0.id << 32) + (long) arg0.createdComponentId); + return local13 == null ? arg0.properties : local13; + } + + @OriginalMember(owner = "client!dg", name = "a", descriptor = "(ILclient!be;)V") + public static void redraw(@OriginalArg(1) Component arg0) { + if (anInt4311 == arg0.rectangleLoop) { + aBooleanArray100[arg0.rectangle] = true; + } + } + + @OriginalMember(owner = "client!qj", name = "a", descriptor = "(Lclient!be;BI)Lclient!na;") + public static JagString getOp(@OriginalArg(0) Component arg0, @OriginalArg(2) int arg1) { + if (!getServerActiveProperties(arg0).isButtonEnabled(arg1) && arg0.onOptionClick == null) { + return null; + } else if (arg0.ops == null || arg0.ops.length <= arg1 || arg0.ops[arg1] == null || arg0.ops[arg1].trim().length() == 0) { + return Cheat.qaOpTest ? JagString.concatenate(new JagString[]{aClass100_903, JagString.parseInt(arg1)}) : null; + } else { + return arg0.ops[arg1]; + } + } + + @OriginalMember(owner = "client!qf", name = "a", descriptor = "(BII)Lclient!be;") + public static Component method1418(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + @Pc(7) Component local7 = getComponent(arg0); + if (arg1 == -1) { + return local7; + } else if (local7 == null || local7.createdComponents == null || local7.createdComponents.length <= arg1) { + return null; + } else { + return local7.createdComponents[arg1]; + } + } + + @OriginalMember(owner = "client!gg", name = "e", descriptor = "(II)V") + public static void method1753(@OriginalArg(0) int arg0) { + if (!load(arg0)) { + return; + } + @Pc(15) Component[] local15 = components[arg0]; + for (@Pc(17) int local17 = 0; local17 < local15.length; local17++) { + @Pc(29) Component local29 = local15[local17]; + if (local29 != null) { + local29.anInt496 = 1; + local29.anInt510 = 0; + local29.anInt500 = 0; + } + } + } + + @OriginalMember(owner = "client!rb", name = "a", descriptor = "(ZB)V") + public static void method3712(@OriginalArg(0) boolean arg0) { + method4017(GameShell.canvasHeight, arg0, topLevelInterface, GameShell.canvasWidth); + } + + @OriginalMember(owner = "client!ta", name = "a", descriptor = "(IZIII)V") + public static void method4017(@OriginalArg(0) int arg0, @OriginalArg(1) boolean arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + if (load(arg2)) { + method4190(-1, arg1, arg3, arg0, components[arg2]); + } + } + + @OriginalMember(owner = "client!bg", name = "a", descriptor = "(Lclient!be;ZI)V") + public static void method531(@OriginalArg(0) Component arg0, @OriginalArg(1) boolean arg1) { + @Pc(20) int local20 = arg0.scrollMaxH == 0 ? arg0.width : arg0.scrollMaxH; + @Pc(32) int local32 = arg0.scrollMaxV == 0 ? arg0.height : arg0.scrollMaxV; + method4190(arg0.id, arg1, local20, local32, components[arg0.id >> 16]); + if (arg0.createdComponents != null) { + method4190(arg0.id, arg1, local20, local32, arg0.createdComponents); + } + @Pc(66) ComponentPointer local66 = (ComponentPointer) openInterfaces.get(arg0.id); + if (local66 != null) { + method4017(local32, arg1, local66.interfaceId, local20); + } + } + + @OriginalMember(owner = "client!vk", name = "a", descriptor = "(IZIII[Lclient!be;)V") + public static void method4190(@OriginalArg(0) int arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) Component[] arg4) { + for (@Pc(3) int local3 = 0; local3 < arg4.length; local3++) { + @Pc(19) Component local19 = arg4[local3]; + if (local19 != null && local19.overlayer == arg0) { + method2801(arg3, arg2, local19, arg1); + method2291(local19, arg3, arg2); + if (local19.scrollMaxH - local19.width < local19.scrollX) { + local19.scrollX = local19.scrollMaxH - local19.width; + } + if (local19.scrollY > local19.scrollMaxV - local19.height) { + local19.scrollY = local19.scrollMaxV - local19.height; + } + if (local19.scrollY < 0) { + local19.scrollY = 0; + } + if (local19.scrollX < 0) { + local19.scrollX = 0; + } + if (local19.type == 0) { + method531(local19, arg1); + } + } + } + } + + @OriginalMember(owner = "client!fn", name = "c", descriptor = "(II)V") + public static void method1626(@OriginalArg(0) int arg0) { + if (arg0 == -1 || !load(arg0)) { + return; + } + @Pc(31) Component[] local31 = components[arg0]; + for (@Pc(33) int local33 = 0; local33 < local31.length; local33++) { + @Pc(41) Component local41 = local31[local33]; + if (local41.anObjectArray3 != null) { + @Pc(50) HookRequest local50 = new HookRequest(); + local50.arguments = local41.anObjectArray3; + local50.source = local41; + ScriptRunner.run(2000000, local50); + } + } + } + + @OriginalMember(owner = "client!ke", name = "a", descriptor = "(ZLclient!wk;Z)V") + public static void closeInterface(@OriginalArg(0) boolean arg0, @OriginalArg(1) ComponentPointer arg1) { + @Pc(9) int local9 = (int) arg1.key; + @Pc(16) int local16 = arg1.interfaceId; + arg1.unlink(); + if (arg0) { + method2275(local16); + } + method3214(local16); + @Pc(32) Component local32 = getComponent(local9); + if (local32 != null) { + redraw(local32); + } + @Pc(41) int local41 = MiniMenu.size; + @Pc(43) int local43; + for (local43 = 0; local43 < local41; local43++) { + if (method5(MiniMenu.actions[local43])) { + MiniMenu.remove(local43); + } + } + if (MiniMenu.size == 1) { + Cs1ScriptRunner.aBoolean108 = false; + redrawScreen(anInt4271, anInt761, anInt5138, anInt436); + } else { + redrawScreen(anInt4271, anInt761, anInt5138, anInt436); + local43 = Fonts.b12Full.getStringWidth(LocalizedText.CHOOSE_OPTION); + for (@Pc(75) int local75 = 0; local75 < MiniMenu.size; local75++) { + @Pc(88) int local88 = Fonts.b12Full.getStringWidth(MiniMenu.getOp(local75)); + if (local43 < local88) { + local43 = local88; + } + } + anInt436 = MiniMenu.size * 15 + (aBoolean298 ? 26 : 22); + anInt761 = local43 + 8; + } + if (topLevelInterface != -1) { + runScripts(1, topLevelInterface); + } + } + + @OriginalMember(owner = "client!ii", name = "a", descriptor = "(Lclient!be;III)V") + public static void method2291(@OriginalArg(0) Component arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + if (arg0.xMode == 0) { + arg0.y = arg0.baseY; + } else if (arg0.xMode == 1) { + arg0.y = (arg1 - arg0.height) / 2 + arg0.baseY; + } else if (arg0.xMode == 2) { + arg0.y = arg1 - arg0.height - arg0.baseY; + } else if (arg0.xMode == 3) { + arg0.y = arg0.baseY * arg1 >> 14; + } else if (arg0.xMode == 4) { + arg0.y = (arg1 * arg0.baseY >> 14) + (arg1 - arg0.height) / 2; + } else { + arg0.y = arg1 - (arg1 * arg0.baseY >> 14) - arg0.height; + } + if (arg0.yMode == 0) { + arg0.x = arg0.baseX; + } else if (arg0.yMode == 1) { + arg0.x = arg0.baseX + (arg2 - arg0.width) / 2; + } else if (arg0.yMode == 2) { + arg0.x = arg2 - arg0.baseX - arg0.width; + } else if (arg0.yMode == 3) { + arg0.x = arg0.baseX * arg2 >> 14; + } else if (arg0.yMode == 4) { + arg0.x = (arg0.baseX * arg2 >> 14) + (arg2 - arg0.width) / 2; + } else { + arg0.x = arg2 - (arg2 * arg0.baseX >> 14) - arg0.width; + } + if (!Cheat.qaOpTest || getServerActiveProperties(arg0).events == 0 && arg0.type != 0) { + return; + } + if (arg0.y < 0) { + arg0.y = 0; + } else if (arg0.height + arg0.y > arg1) { + arg0.y = arg1 - arg0.height; + } + if (arg0.x < 0) { + arg0.x = 0; + } else if (arg2 < arg0.x + arg0.width) { + arg0.x = arg2 - arg0.width; + } + } + + @OriginalMember(owner = "client!fn", name = "a", descriptor = "(ILclient!be;)V") + public static void update(@OriginalArg(1) Component arg0) { + @Pc(7) Component local7 = method4668(arg0); + @Pc(19) int local19; + @Pc(17) int local17; + if (local7 == null) { + local17 = GameShell.canvasHeight; + local19 = GameShell.canvasWidth; + } else { + local17 = local7.height; + local19 = local7.width; + } + method2801(local17, local19, arg0, false); + method2291(arg0, local17, local19); + } + + @OriginalMember(owner = "client!lk", name = "a", descriptor = "(IIILclient!be;Z)V") + public static void method2801(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) Component arg2, @OriginalArg(4) boolean arg3) { + @Pc(4) int local4 = arg2.width; + @Pc(7) int local7 = arg2.height; + if (arg2.dynamicWidthValue == 0) { + arg2.width = arg2.baseWidth; + } else if (arg2.dynamicWidthValue == 1) { + arg2.width = arg1 - arg2.baseWidth; + } else if (arg2.dynamicWidthValue == 2) { + arg2.width = arg2.baseWidth * arg1 >> 14; + } else if (arg2.dynamicWidthValue == 3) { + if (arg2.type == 2) { + arg2.width = arg2.baseWidth * 32 + (arg2.baseWidth - 1) * arg2.invMarginX; + } else if (arg2.type == 7) { + arg2.width = arg2.baseWidth * 115 + arg2.invMarginX * (arg2.baseWidth - 1); + } + } + if (arg2.dynamicHeightValue == 0) { + arg2.height = arg2.baseHeight; + } else if (arg2.dynamicHeightValue == 1) { + arg2.height = arg0 - arg2.baseHeight; + } else if (arg2.dynamicHeightValue == 2) { + arg2.height = arg0 * arg2.baseHeight >> 14; + } else if (arg2.dynamicHeightValue == 3) { + if (arg2.type == 2) { + arg2.height = (arg2.baseHeight - 1) * arg2.invMarginY + arg2.baseHeight * 32; + } else if (arg2.type == 7) { + arg2.height = arg2.baseHeight * 12 + (arg2.baseHeight - 1) * arg2.invMarginY; + } + } + if (arg2.dynamicWidthValue == 4) { + arg2.width = arg2.aspectWidth * arg2.height / arg2.aspectHeight; + } + if (arg2.dynamicHeightValue == 4) { + arg2.height = arg2.aspectHeight * arg2.width / arg2.aspectWidth; + } + if (Cheat.qaOpTest && (getServerActiveProperties(arg2).events != 0 || arg2.type == 0)) { + if (arg2.height < 5 && arg2.width < 5) { + arg2.height = 5; + arg2.width = 5; + } else { + if (arg2.width <= 0) { + arg2.width = 5; + } + if (arg2.height <= 0) { + arg2.height = 5; + } + } + } + if (arg2.clientCode == 1337) { + aClass13_26 = arg2; + } + if (arg3 && arg2.onResize != null && (local4 != arg2.width || arg2.height != local7)) { + @Pc(305) HookRequest local305 = new HookRequest(); + local305.arguments = arg2.onResize; + local305.source = arg2; + lowPriorityRequests.addTail(local305); + } + } + + @OriginalMember(owner = "client!wl", name = "a", descriptor = "(Lclient!be;I)Lclient!be;") + public static Component method4668(@OriginalArg(0) Component arg0) { + if (arg0.overlayer != -1) { + return getComponent(arg0.overlayer); + } + @Pc(28) int local28 = arg0.id >>> 16; + @Pc(33) HashTableIterator local33 = new HashTableIterator(openInterfaces); + for (@Pc(38) ComponentPointer local38 = (ComponentPointer) local33.method2701(); local38 != null; local38 = (ComponentPointer) local33.method2700()) { + if (local28 == local38.interfaceId) { + return getComponent((int) local38.key); + } + } + return null; + } + + @OriginalMember(owner = "client!kf", name = "a", descriptor = "(IIBII)V") + public static void redrawScreen(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + for (@Pc(12) int local12 = 0; local12 < rectangles; local12++) { + if (rectangleWidth[local12] + rectangleX[local12] > arg0 && arg1 + arg0 > rectangleX[local12] && arg2 < rectangleHeight[local12] + rectangleY[local12] && rectangleY[local12] < arg2 + arg3) { + aBooleanArray100[local12] = true; + } + } + } + + @OriginalMember(owner = "client!we", name = "b", descriptor = "(BI)V") + public static void method3214(@OriginalArg(1) int arg0) { + for (@Pc(11) Node local11 = properties.head(); local11 != null; local11 = properties.next()) { + if ((local11.key >> 48 & 0xFFFFL) == (long) arg0) { + local11.unlink(); + } + } + } + + @OriginalMember(owner = "client!ed", name = "a", descriptor = "(III)V") + public static void runScripts(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + if (load(arg1)) { + method7(components[arg1], arg0); + } + } + + @OriginalMember(owner = "client!aa", name = "a", descriptor = "([Lclient!be;ZI)V") + public static void method7(@OriginalArg(0) Component[] arg0, @OriginalArg(2) int arg1) { + for (@Pc(11) int local11 = 0; local11 < arg0.length; local11++) { + @Pc(23) Component local23 = arg0[local11]; + if (local23 != null) { + if (local23.type == 0) { + if (local23.createdComponents != null) { + method7(local23.createdComponents, arg1); + } + @Pc(49) ComponentPointer local49 = (ComponentPointer) openInterfaces.get(local23.id); + if (local49 != null) { + runScripts(arg1, local49.interfaceId); + } + } + @Pc(72) HookRequest local72; + if (arg1 == 0 && local23.onDialogAbort != null) { + local72 = new HookRequest(); + local72.arguments = local23.onDialogAbort; + local72.source = local23; + ScriptRunner.run(local72); + } + if (arg1 == 1 && local23.onWidgetsOpenClose != null) { + if (local23.createdComponentId >= 0) { + @Pc(103) Component local103 = getComponent(local23.id); + if (local103 == null || local103.createdComponents == null || local23.createdComponentId >= local103.createdComponents.length || local103.createdComponents[local23.createdComponentId] != local23) { + continue; + } + } + local72 = new HookRequest(); + local72.arguments = local23.onWidgetsOpenClose; + local72.source = local23; + ScriptRunner.run(local72); + } + } + } + } + + @OriginalMember(owner = "client!eg", name = "a", descriptor = "(IIIIIIII)V") + public static void method1320(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6) { + if (load(arg4)) { + method946(components[arg4], -1, arg5, arg1, arg3, arg6, arg0, arg2); + } + } + + @OriginalMember(owner = "client!client", name = "a", descriptor = "([Lclient!be;IIIIIII)V") + public static void method946(@OriginalArg(0) Component[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7) { + for (@Pc(1) int local1 = 0; local1 < arg0.length; local1++) { + @Pc(9) Component component = arg0[local1]; + if (component != null && component.overlayer == arg1 && (!component.if3 || component.type == 0 || component.aBoolean25 || getServerActiveProperties(component).events != 0 || component == Cs1ScriptRunner.aClass13_1 || component.clientCode == 1338) && (!component.if3 || !method947(component))) { + @Pc(50) int local50 = component.x + arg6; + @Pc(55) int local55 = component.y + arg7; + @Pc(61) int local61; + @Pc(63) int local63; + @Pc(65) int local65; + @Pc(67) int local67; + if (component.type == 2) { + local61 = arg2; + local63 = arg3; + local65 = arg4; + local67 = arg5; + } else { + @Pc(73) int local73 = local50 + component.width; + @Pc(78) int local78 = local55 + component.height; + if (component.type == 9) { + local73++; + local78++; + } + local61 = local50 > arg2 ? local50 : arg2; + local63 = local55 > arg3 ? local55 : arg3; + local65 = local73 < arg4 ? local73 : arg4; + local67 = local78 < arg5 ? local78 : arg5; + } + if (component == Cs1ScriptRunner.aClass13_14) { + aBoolean83 = true; + anInt3075 = local50; + anInt660 = local55; + } + if (!component.if3 || local61 < local65 && local63 < local67) { + if (component.type == 0) { + if (!component.if3 && method947(component) && aClass13_22 != component) { + continue; + } + if (component.noClickThrough && Mouse.lastMouseX >= local61 && Mouse.lastMouseY >= local63 && Mouse.lastMouseX < local65 && Mouse.lastMouseY < local67) { + for (@Pc(164) HookRequest local164 = (HookRequest) lowPriorityRequests.head(); local164 != null; local164 = (HookRequest) lowPriorityRequests.next()) { + if (local164.aBoolean158) { + local164.unlink(); + local164.source.aBoolean19 = false; + } + } + if (Cs1ScriptRunner.anInt4851 == 0) { + Cs1ScriptRunner.aClass13_14 = null; + Cs1ScriptRunner.aClass13_1 = null; + } + anInt3337 = 0; + } + } + if (component.if3) { + @Pc(207) boolean local207; + local207 = Mouse.lastMouseX >= local61 && Mouse.lastMouseY >= local63 && Mouse.lastMouseX < local65 && Mouse.lastMouseY < local67; + @Pc(212) boolean local212 = Mouse.pressedButton == 1 && local207; + @Pc(221) boolean local221 = Mouse.clickButton == 1 && Mouse.clickX >= local61 && Mouse.clickY >= local63 && Mouse.clickX < local65 && Mouse.clickY < local67; + @Pc(243) int i; + @Pc(322) int k; + if (component.aByteArray8 != null) { + for (i = 0; i < component.aByteArray8.length; i++) { + if (Keyboard.pressedKeys[component.aByteArray8[i]]) { + if (component.anIntArray49 == null || client.loop >= component.anIntArray49[i]) { + @Pc(279) byte local279 = component.aByteArray7[i]; + if (local279 == 0 || ((local279 & 0x2) == 0 || Keyboard.pressedKeys[Keyboard.KEY_ALT]) && ((local279 & 0x1) == 0 || Keyboard.pressedKeys[Keyboard.KEY_CTRL]) && ((local279 & 0x4) == 0 || Keyboard.pressedKeys[Keyboard.KEY_SHIFT])) { + ClientProt.method4512(JagString.EMPTY, -1, i + 1, component.id); + k = component.anIntArray46[i]; + if (component.anIntArray49 == null) { + component.anIntArray49 = new int[component.aByteArray8.length]; + } + if (k == 0) { + component.anIntArray49[i] = Integer.MAX_VALUE; + } else { + component.anIntArray49[i] = client.loop + k; + } + } + } + } else if (component.anIntArray49 != null) { + component.anIntArray49[i] = 0; + } + } + } + if (local221) { + Cs1ScriptRunner.method1015(Mouse.clickY - local55, Mouse.clickX - local50, component); + } + if (Cs1ScriptRunner.aClass13_14 != null && Cs1ScriptRunner.aClass13_14 != component && local207 && getServerActiveProperties(component).isDragTarget()) { + aClass13_12 = component; + } + if (component == Cs1ScriptRunner.aClass13_1) { + aBoolean174 = true; + Cs1ScriptRunner.anInt2225 = local50; + anInt5103 = local55; + } + if (component.aBoolean25 || component.clientCode != 0) { + @Pc(399) HookRequest request; + if (local207 && MouseWheel.wheelRotation != 0 && component.onScroll != null) { + request = new HookRequest(); + request.aBoolean158 = true; + request.source = component; + request.mouseY = MouseWheel.wheelRotation; + request.arguments = component.onScroll; + lowPriorityRequests.addTail(request); + } + if (Cs1ScriptRunner.aClass13_14 != null || clickedInventoryComponent != null || Cs1ScriptRunner.aBoolean108 || component.clientCode != 1400 && anInt3337 > 0) { + local221 = false; + local212 = false; + local207 = false; + } + @Pc(508) int skill; + if (component.clientCode != 0) { + if (component.clientCode == 1337) { + aClass13_26 = component; + redraw(component); + continue; + } + if (component.clientCode == 1338) { + if (local221) { + anInt5 = Mouse.clickX - local50; + MiniMenu.anInt2878 = Mouse.clickY - local55; + } + continue; + } + if (component.clientCode == 1400) { + WorldMap.component = component; + if (local221) { + if (Keyboard.pressedKeys[Keyboard.KEY_CTRL] && LoginManager.staffModLevel > 0) { + i = (int) ((double) (Mouse.clickX - local50 - component.width / 2) * 2.0D / (double) WorldMap.zoom); + skill = (int) ((double) (Mouse.clickY - local55 - component.height / 2) * 2.0D / (double) WorldMap.zoom); + k = WorldMap.anInt435 + i; + @Pc(516) int local516 = WorldMap.anInt919 + skill; + @Pc(520) int local520 = k + WorldMap.originX; + @Pc(528) int local528 = WorldMap.length + WorldMap.originZ - local516 - 1; + Cheat.teleport(local520, local528, 0); + ClientProt.closeWidget(); + continue; + } + anInt3337 = 1; + Cs1ScriptRunner.anInt5388 = Mouse.lastMouseX; + Cs1ScriptRunner.anInt4035 = Mouse.lastMouseY; + continue; + } + if (local212 && anInt3337 > 0) { + if (anInt3337 == 1 && (Cs1ScriptRunner.anInt5388 != Mouse.lastMouseX || Cs1ScriptRunner.anInt4035 != Mouse.lastMouseY)) { + anInt4620 = WorldMap.anInt435; + anInt1885 = WorldMap.anInt919; + anInt3337 = 2; + } + if (anInt3337 == 2) { + WorldMap.method1964(anInt4620 + (int) ((double) (Cs1ScriptRunner.anInt5388 - Mouse.lastMouseX) * 2.0D / (double) WorldMap.targetZoom)); + WorldMap.method4641(anInt1885 + (int) ((double) (Cs1ScriptRunner.anInt4035 - Mouse.lastMouseY) * 2.0D / (double) WorldMap.targetZoom)); + } + continue; + } + anInt3337 = 0; + continue; + } + if (component.clientCode == 1401) { + if (local212) { + WorldMap.method2387(component.width, Mouse.lastMouseY - local55, Mouse.lastMouseX - local50, component.height); + } + continue; + } + if (component.clientCode == 1402) { + if (!GlRenderer.enabled) { + redraw(component); + } + continue; + } + } + if (!component.aBoolean24 && local221) { + component.aBoolean24 = true; + if (component.onClickRepeat != null) { + request = new HookRequest(); + request.aBoolean158 = true; + request.source = component; + request.mouseX = Mouse.clickX - local50; + request.mouseY = Mouse.clickY - local55; + request.arguments = component.onClickRepeat; + lowPriorityRequests.addTail(request); + } + } + if (component.aBoolean24 && local212 && component.onDrag != null) { + request = new HookRequest(); + request.aBoolean158 = true; + request.source = component; + request.mouseX = Mouse.lastMouseX - local50; + request.mouseY = Mouse.lastMouseY - local55; + request.arguments = component.onDrag; + lowPriorityRequests.addTail(request); + } + if (component.aBoolean24 && !local212) { + component.aBoolean24 = false; + if (component.onRelease != null) { + request = new HookRequest(); + request.aBoolean158 = true; + request.source = component; + request.mouseX = Mouse.lastMouseX - local50; + request.mouseY = Mouse.lastMouseY - local55; + request.arguments = component.onRelease; + mediumPriorityRequests.addTail(request); + } + } + if (local212 && component.onHold != null) { + request = new HookRequest(); + request.aBoolean158 = true; + request.source = component; + request.mouseX = Mouse.lastMouseX - local50; + request.mouseY = Mouse.lastMouseY - local55; + request.arguments = component.onHold; + lowPriorityRequests.addTail(request); + } + if (!component.aBoolean19 && local207) { + component.aBoolean19 = true; + if (component.onMouseOver != null) { + request = new HookRequest(); + request.aBoolean158 = true; + request.source = component; + request.mouseX = Mouse.lastMouseX - local50; + request.mouseY = Mouse.lastMouseY - local55; + request.arguments = component.onMouseOver; + lowPriorityRequests.addTail(request); + } + } + if (component.aBoolean19 && local207 && component.onMouseRepeat != null) { + request = new HookRequest(); + request.aBoolean158 = true; + request.source = component; + request.mouseX = Mouse.lastMouseX - local50; + request.mouseY = Mouse.lastMouseY - local55; + request.arguments = component.onMouseRepeat; + lowPriorityRequests.addTail(request); + } + if (component.aBoolean19 && !local207) { + component.aBoolean19 = false; + if (component.onMouseLeave != null) { + request = new HookRequest(); + request.aBoolean158 = true; + request.source = component; + request.mouseX = Mouse.lastMouseX - local50; + request.mouseY = Mouse.lastMouseY - local55; + request.arguments = component.onMouseLeave; + mediumPriorityRequests.addTail(request); + } + } + if (component.onTimer != null) { + request = new HookRequest(); + request.source = component; + request.arguments = component.onTimer; + highPriorityRequests.addTail(request); + } + @Pc(966) HookRequest request2; + if (component.onVarcTransmit != null && VarcDomain.updatedVarcsWriterIndex > component.updatedVarcsReaderIndex) { + if (component.varcTriggers == null || VarcDomain.updatedVarcsWriterIndex - component.updatedVarcsReaderIndex > 32) { + request = new HookRequest(); + request.source = component; + request.arguments = component.onVarcTransmit; + lowPriorityRequests.addTail(request); + } else { + label563: + for (i = component.updatedVarcsReaderIndex; i < VarcDomain.updatedVarcsWriterIndex; i++) { + skill = VarcDomain.updatedVarcs[i & 0x1F]; + for (k = 0; k < component.varcTriggers.length; k++) { + if (component.varcTriggers[k] == skill) { + request2 = new HookRequest(); + request2.source = component; + request2.arguments = component.onVarcTransmit; + lowPriorityRequests.addTail(request2); + break label563; + } + } + } + } + component.updatedVarcsReaderIndex = VarcDomain.updatedVarcsWriterIndex; + } + if (component.onVarcstrTransmit != null && VarcDomain.updatedVarcstrsWriterIndex > component.updatedVarcstrsReaderIndex) { + if (component.varcstrTriggers == null || VarcDomain.updatedVarcstrsWriterIndex - component.updatedVarcstrsReaderIndex > 32) { + request = new HookRequest(); + request.source = component; + request.arguments = component.onVarcstrTransmit; + lowPriorityRequests.addTail(request); + } else { + label539: + for (i = component.updatedVarcstrsReaderIndex; i < VarcDomain.updatedVarcstrsWriterIndex; i++) { + skill = VarcDomain.updatedVarcstrs[i & 0x1F]; + for (k = 0; k < component.varcstrTriggers.length; k++) { + if (component.varcstrTriggers[k] == skill) { + request2 = new HookRequest(); + request2.source = component; + request2.arguments = component.onVarcstrTransmit; + lowPriorityRequests.addTail(request2); + break label539; + } + } + } + } + component.updatedVarcstrsReaderIndex = VarcDomain.updatedVarcstrsWriterIndex; + } + if (component.onVarpTransmit != null && VarpDomain.updatedVarpsWriterIndex > component.updatedVarpsReaderIndex) { + if (component.varpTriggers == null || VarpDomain.updatedVarpsWriterIndex - component.updatedVarpsReaderIndex > 32) { + request = new HookRequest(); + request.source = component; + request.arguments = component.onVarpTransmit; + lowPriorityRequests.addTail(request); + } else { + label515: + for (i = component.updatedVarpsReaderIndex; i < VarpDomain.updatedVarpsWriterIndex; i++) { + skill = VarpDomain.updatedVarps[i & 0x1F]; + for (k = 0; k < component.varpTriggers.length; k++) { + if (component.varpTriggers[k] == skill) { + request2 = new HookRequest(); + request2.source = component; + request2.arguments = component.onVarpTransmit; + lowPriorityRequests.addTail(request2); + break label515; + } + } + } + } + component.updatedVarpsReaderIndex = VarpDomain.updatedVarpsWriterIndex; + } + if (component.onInvTransmit != null && Inv.updatedInventoriesWriterIndex > component.updatedInventoriesReaderIndex) { + if (component.inventoryTriggers == null || Inv.updatedInventoriesWriterIndex - component.updatedInventoriesReaderIndex > 32) { + request = new HookRequest(); + request.source = component; + request.arguments = component.onInvTransmit; + lowPriorityRequests.addTail(request); + } else { + outer: + for (i = component.updatedInventoriesReaderIndex; i < Inv.updatedInventoriesWriterIndex; i++) { + skill = Inv.updatedInventories[i & 0x1F]; + for (k = 0; k < component.inventoryTriggers.length; k++) { + if (component.inventoryTriggers[k] == skill) { + request2 = new HookRequest(); + request2.source = component; + request2.arguments = component.onInvTransmit; + lowPriorityRequests.addTail(request2); + break outer; + } + } + } + } + component.updatedInventoriesReaderIndex = Inv.updatedInventoriesWriterIndex; + } + if (component.onStatTransmit != null && PlayerSkillXpTable.updatedStatsWriterIndex > component.updatedStatsReaderIndex) { + if (component.statTriggers == null || PlayerSkillXpTable.updatedStatsWriterIndex - component.updatedStatsReaderIndex > 32) { + request = new HookRequest(); + request.source = component; + request.arguments = component.onStatTransmit; + lowPriorityRequests.addTail(request); + } else { + outer: + for (i = component.updatedStatsReaderIndex; i < PlayerSkillXpTable.updatedStatsWriterIndex; i++) { + skill = PlayerSkillXpTable.updatedStats[i & 0x1F]; + for (k = 0; k < component.statTriggers.length; k++) { + if (component.statTriggers[k] == skill) { + request2 = new HookRequest(); + request2.source = component; + request2.arguments = component.onStatTransmit; + lowPriorityRequests.addTail(request2); + break outer; + } + } + } + } + component.updatedStatsReaderIndex = PlayerSkillXpTable.updatedStatsWriterIndex; + } + if (Chat.transmitAt > component.lastTransmitTimer && component.onMsg != null) { + request = new HookRequest(); + request.source = component; + request.arguments = component.onMsg; + lowPriorityRequests.addTail(request); + } + if (FriendsList.transmitAt > component.lastTransmitTimer && component.onFriendTransmit != null) { + request = new HookRequest(); + request.source = component; + request.arguments = component.onFriendTransmit; + lowPriorityRequests.addTail(request); + } + if (ClanChat.transmitAt > component.lastTransmitTimer && component.onClanTransmit != null) { + request = new HookRequest(); + request.source = component; + request.arguments = component.onClanTransmit; + lowPriorityRequests.addTail(request); + } + if (StockMarketManager.transmitAt > component.lastTransmitTimer && component.onStockTransmit != null) { + request = new HookRequest(); + request.source = component; + request.arguments = component.onStockTransmit; + lowPriorityRequests.addTail(request); + } + if (miscTransmitAt > component.lastTransmitTimer && component.onMiscTransmit != null) { + request = new HookRequest(); + request.source = component; + request.arguments = component.onMiscTransmit; + lowPriorityRequests.addTail(request); + } + component.lastTransmitTimer = transmitTimer; + if (component.onKey != null) { + for (i = 0; i < keyQueueSize; i++) { + @Pc(1430) HookRequest local1430 = new HookRequest(); + local1430.source = component; + local1430.keyCode = keyCodes[i]; + local1430.keyChar = keyChars[i]; + local1430.arguments = component.onKey; + lowPriorityRequests.addTail(local1430); + } + } + if (Camera.aBoolean16 && component.onMinimapUnlock != null) { + request = new HookRequest(); + request.source = component; + request.arguments = component.onMinimapUnlock; + lowPriorityRequests.addTail(request); + } + } + } + if (!component.if3 && Cs1ScriptRunner.aClass13_14 == null && clickedInventoryComponent == null && !Cs1ScriptRunner.aBoolean108) { + if ((component.anInt470 >= 0 || component.overColor != 0) && Mouse.lastMouseX >= local61 && Mouse.lastMouseY >= local63 && Mouse.lastMouseX < local65 && Mouse.lastMouseY < local67) { + if (component.anInt470 >= 0) { + aClass13_22 = arg0[component.anInt470]; + } else { + aClass13_22 = component; + } + } + if (component.type == 8 && Mouse.lastMouseX >= local61 && Mouse.lastMouseY >= local63 && Mouse.lastMouseX < local65 && Mouse.lastMouseY < local67) { + Protocol.aClass13_11 = component; + } + if (component.scrollMaxV > component.height) { + method4049(Mouse.lastMouseY, component.height, component, Mouse.lastMouseX, local50 + component.width, local55, component.scrollMaxV); + } + } + if (component.type == 0) { + method946(arg0, component.id, local61, local63, local65, local67, local50 - component.scrollX, local55 - component.scrollY); + if (component.createdComponents != null) { + method946(component.createdComponents, component.id, local61, local63, local65, local67, local50 - component.scrollX, local55 - component.scrollY); + } + @Pc(1595) ComponentPointer local1595 = (ComponentPointer) openInterfaces.get(component.id); + if (local1595 != null) { + method1320(local50, local63, local55, local65, local1595.interfaceId, local61, local67); + } + } + } + } + } + } + + @OriginalMember(owner = "client!aa", name = "a", descriptor = "(SI)Z") + public static boolean method5(@OriginalArg(0) short arg0) { + if (arg0 == 47 || arg0 == 5 || arg0 == 43 || arg0 == 35 || arg0 == 58 || arg0 == 22 || arg0 == 40 || arg0 == 3) { + return true; + } else if (arg0 == 9 || arg0 == 12 || arg0 == 1006 || arg0 == 1003) { + return true; + } else if (arg0 == 25 || arg0 == 23 || arg0 == 48 || arg0 == 7 || arg0 == 13) { + return true; + } else { + return arg0 == 8 || arg0 == 32 || arg0 == 28 || arg0 == 59 || arg0 == 51 || arg0 == 41; + } + } + + @OriginalMember(owner = "client!fm", name = "a", descriptor = "(ZI)V") + public static void method1596(@OriginalArg(0) boolean arg0) { + if (arg0) { + if (topLevelInterface != -1) { + method2275(topLevelInterface); + } + for (@Pc(18) ComponentPointer local18 = (ComponentPointer) openInterfaces.head(); local18 != null; local18 = (ComponentPointer) openInterfaces.next()) { + closeInterface(true, local18); + } + topLevelInterface = -1; + openInterfaces = new HashTable(8); + method1287(); + topLevelInterface = LoginManager.loginScreenId; + method3712(false); + ScriptRunner.method1807(); + method1626(topLevelInterface); + } + MiniMenu.anInt1092 = -1; + method1750(ScriptRunner.anInt5794); + PlayerList.self = new Player(); + PlayerList.self.zFine = 3000; + PlayerList.self.xFine = 3000; + if (!GlRenderer.enabled) { + Flames.load(client.js5Archive8); + client.setGameState(10); + return; + } + if (Camera.cameraType == 2) { + Camera.renderX = Camera.anInt5375 << 7; + Camera.renderZ = Camera.anInt4232 << 7; + } else { + Camera.updateLoginScreenCamera(); + } + FogManager.setInstantFade(); + LoginManager.setupLoadingScreenRegion(); + client.setGameState(28); + } + + @OriginalMember(owner = "client!jg", name = "a", descriptor = "(IBIII)V") + public static void forceRedrawScreen(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + for (@Pc(3) int local3 = 0; local3 < rectangles; local3++) { + if (arg0 < rectangleX[local3] + rectangleWidth[local3] && arg0 + arg3 > rectangleX[local3] && rectangleY[local3] + rectangleHeight[local3] > arg1 && rectangleY[local3] < arg2 + arg1) { + rectangleRedraw[local3] = true; + } + } + } + + @OriginalMember(owner = "client!jm", name = "a", descriptor = "(Z)V") + public static void method2460() { + if (topLevelInterface != -1) { + method1949(topLevelInterface); + } + for (@Pc(15) int local15 = 0; local15 < rectangles; local15++) { + if (aBooleanArray100[local15]) { + rectangleRedraw[local15] = true; + } + aBooleanArray116[local15] = aBooleanArray100[local15]; + aBooleanArray100[local15] = false; + } + Cs1ScriptRunner.anInt2503 = -1; + mouseOverInventoryInterface = null; + anInt4311 = client.loop; + if (GlRenderer.enabled) { + ScriptRunner.aBoolean299 = true; + } + anInt5574 = -1; + if (topLevelInterface != -1) { + rectangles = 0; + Cs1ScriptRunner.method182(); + } + if (GlRenderer.enabled) { + GlRaster.method1177(); + } else { + SoftwareRaster.method2503(); + } + Protocol.sceneDelta = 0; + } + + @OriginalMember(owner = "client!client", name = "a", descriptor = "(Lclient!be;)Lclient!be;") + public static Component method938(@OriginalArg(0) Component arg0) { + @Pc(4) int local4 = getServerActiveProperties(arg0).getDragDepth(); + if (local4 == 0) { + return null; + } + for (@Pc(10) int local10 = 0; local10 < local4; local10++) { + arg0 = getComponent(arg0.overlayer); + if (arg0 == null) { + return null; + } + } + return arg0; + } + + @OriginalMember(owner = "client!client", name = "c", descriptor = "(Lclient!be;)Z") + public static boolean method947(@OriginalArg(0) Component arg0) { + if (Cheat.qaOpTest) { + if (getServerActiveProperties(arg0).events != 0) { + return false; + } + if (arg0.type == 0) { + return false; + } + } + return arg0.hidden; + } + + @OriginalMember(owner = "client!tc", name = "a", descriptor = "(IILclient!be;BIIII)V") + public static void method4049(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) Component arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6) { + if (aBoolean84) { + anInt1396 = 32; + } else { + anInt1396 = 0; + } + aBoolean84 = false; + @Pc(139) int local139; + if (Mouse.pressedButton != 0) { + if (arg4 <= arg3 && arg4 + 16 > arg3 && arg0 >= arg5 && arg5 + 16 > arg0) { + arg2.scrollY -= 4; + redraw(arg2); + } else if (arg3 >= arg4 && arg3 < arg4 + 16 && arg0 >= arg1 + arg5 - 16 && arg1 + arg5 > arg0) { + arg2.scrollY += 4; + redraw(arg2); + } else if (arg3 >= arg4 - anInt1396 && arg3 < arg4 + anInt1396 + 16 && arg0 >= arg5 + 16 && arg1 + arg5 - 16 > arg0) { + local139 = arg1 * (arg1 - 32) / arg6; + if (local139 < 8) { + local139 = 8; + } + @Pc(150) int local150 = arg1 - local139 - 32; + @Pc(162) int local162 = arg0 - local139 / 2 - arg5 - 16; + arg2.scrollY = (arg6 - arg1) * local162 / local150; + redraw(arg2); + aBoolean84 = true; + } + } + if (MouseWheel.wheelRotation == 0) { + return; + } + local139 = arg2.width; + if (arg4 - local139 <= arg3 && arg5 <= arg0 && arg3 < arg4 + 16 && arg1 + arg5 >= arg0) { + arg2.scrollY += MouseWheel.wheelRotation * 45; + redraw(arg2); + } + } + + @OriginalMember(owner = "client!hh", name = "a", descriptor = "(II)V") + public static void method1949(@OriginalArg(1) int arg0) { + if (load(arg0)) { + method2354(-1, components[arg0]); + } + } + + @OriginalMember(owner = "client!jd", name = "a", descriptor = "(II[Lclient!be;)V") + public static void method2354(@OriginalArg(1) int arg0, @OriginalArg(2) Component[] arg1) { + for (@Pc(7) int local7 = 0; local7 < arg1.length; local7++) { + @Pc(15) Component local15 = arg1[local7]; + if (local15 != null && local15.overlayer == arg0 && (!local15.if3 || !method947(local15))) { + if (local15.type == 0) { + if (!local15.if3 && method947(local15) && local15 != aClass13_22) { + continue; + } + method2354(local15.id, arg1); + if (local15.createdComponents != null) { + method2354(local15.id, local15.createdComponents); + } + @Pc(73) ComponentPointer local73 = (ComponentPointer) openInterfaces.get(local15.id); + if (local73 != null) { + method1949(local73.interfaceId); + } + } + if (local15.type == 6) { + @Pc(105) int local105; + if (local15.modelSeqId != -1 || local15.activeModelSeqId != -1) { + @Pc(100) boolean local100 = Cs1ScriptRunner.isTrue(local15); + if (local100) { + local105 = local15.activeModelSeqId; + } else { + local105 = local15.modelSeqId; + } + if (local105 != -1) { + @Pc(118) SeqType local118 = SeqTypeList.get(local105); + if (local118 != null) { + local15.anInt500 += Protocol.sceneDelta; + while (local15.anInt500 > local118.frameDelay[local15.anInt510]) { + local15.anInt500 -= local118.frameDelay[local15.anInt510]; + local15.anInt510++; + if (local118.frames.length <= local15.anInt510) { + local15.anInt510 -= local118.replayoff; + if (local15.anInt510 < 0 || local118.frames.length <= local15.anInt510) { + local15.anInt510 = 0; + } + } + local15.anInt496 = local15.anInt510 + 1; + if (local118.frames.length <= local15.anInt496) { + local15.anInt496 -= local118.replayoff; + if (local15.anInt496 < 0 || local118.frames.length <= local15.anInt496) { + local15.anInt496 = -1; + } + } + redraw(local15); + } + } + } + } + if (local15.modelRotationSpeed != 0 && !local15.if3) { + @Pc(239) int local239 = local15.modelRotationSpeed >> 16; + @Pc(243) int local243 = local239 * Protocol.sceneDelta; + local105 = local15.modelRotationSpeed << 16 >> 16; + local15.modelXAngle = local243 + local15.modelXAngle & 0x7FF; + local105 *= Protocol.sceneDelta; + local15.modelYAngle = local15.modelYAngle + local105 & 0x7FF; + redraw(local15); + } + } + } + } + } + + @OriginalMember(owner = "client!gg", name = "c", descriptor = "(II)V") + public static void method1750(@OriginalArg(0) int arg0) { + if (!Preferences.cursorsEnabled) { + arg0 = -1; + } + if (arg0 == anInt2941) { + return; + } + if (arg0 != -1) { + @Pc(24) CursorType local24 = CursorTypeList.get(arg0); + @Pc(28) SoftwareSprite local28 = local24.getSprite(); + if (local28 == null) { + arg0 = -1; + } else { + GameShell.signLink.setCursor(local28.method301(), local28.anInt1860, GameShell.canvas, new Point(local24.hotSpotX, local24.hotSpotY), local28.anInt1866); + anInt2941 = arg0; + } + } + if (arg0 == -1 && anInt2941 != -1) { + GameShell.signLink.setCursor(null, -1, GameShell.canvas, new Point(), -1); + anInt2941 = -1; + } + } +} diff --git a/client/src/main/java/rt4/Inv.java b/client/src/main/java/rt4/Inv.java new file mode 100644 index 0000000..f495ae9 --- /dev/null +++ b/client/src/main/java/rt4/Inv.java @@ -0,0 +1,284 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!qe") +public final class Inv extends Node { + + @OriginalMember(owner = "client!cb", name = "I", descriptor = "[I") + public static final int[] updatedInventories = new int[32]; + @OriginalMember(owner = "client!kl", name = "u", descriptor = "Lclient!na;") + public static final JagString aClass100_637 = JagString.parse(""); + @OriginalMember(owner = "client!ol", name = "Y", descriptor = "Lclient!na;") + public static final JagString aClass100_819 = JagString.parse(""); + @OriginalMember(owner = "client!ib", name = "g", descriptor = "Lclient!na;") + public static final JagString aClass100_559 = JagString.parse(""); + @OriginalMember(owner = "client!jj", name = "m", descriptor = "Lclient!na;") + public static final JagString aClass100_594 = JagString.parse("<)4col>"); + @OriginalMember(owner = "client!ii", name = "c", descriptor = "I") + public static int updatedInventoriesWriterIndex = 0; + @OriginalMember(owner = "client!bj", name = "v", descriptor = "Lclient!sc;") + public static HashTable objectContainerCache = new HashTable(32); + @OriginalMember(owner = "client!qe", name = "p", descriptor = "[I") + public int[] objectIds = new int[]{-1}; + + @OriginalMember(owner = "client!qe", name = "u", descriptor = "[I") + public int[] objectStackSizes = new int[]{0}; + + @OriginalMember(owner = "client!ba", name = "a", descriptor = "(IB)I") + public static int getFreeSpace(@OriginalArg(0) int arg0) { + if (arg0 < 0) { + return 0; + } + @Pc(17) Inv local17 = (Inv) objectContainerCache.get(arg0); + if (local17 == null) { + return InvTypeList.get(arg0).size; + } + @Pc(31) int freeSpaces = 0; + for (@Pc(33) int id = 0; id < local17.objectIds.length; id++) { + if (local17.objectIds[id] == -1) { + freeSpaces++; + } + } + return freeSpaces + InvTypeList.get(arg0).size - local17.objectIds.length; + } + + @OriginalMember(owner = "client!od", name = "a", descriptor = "(IZII)I") + public static int getTotalParam(@OriginalArg(1) boolean arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + @Pc(19) Inv local19 = (Inv) objectContainerCache.get(arg1); + if (local19 == null) { + return 0; + } + @Pc(27) int local27 = 0; + for (@Pc(29) int local29 = 0; local29 < local19.objectIds.length; local29++) { + if (local19.objectIds[local29] >= 0 && ObjTypeList.capacity > local19.objectIds[local29]) { + @Pc(56) ObjType local56 = ObjTypeList.get(local19.objectIds[local29]); + if (local56.params != null) { + @Pc(68) IntNode local68 = (IntNode) local56.params.get(arg2); + if (local68 != null) { + if (arg0) { + local27 += local19.objectStackSizes[local29] * local68.value; + } else { + local27 += local68.value; + } + } + } + } + } + return local27; + } + + @OriginalMember(owner = "client!wj", name = "a", descriptor = "(BII)I") + public static int getSlotTotal(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + @Pc(8) Inv local8 = (Inv) objectContainerCache.get(arg0); + if (local8 == null) { + return 0; + } else if (arg1 == -1) { + return 0; + } else { + @Pc(25) int local25 = 0; + for (@Pc(27) int local27 = 0; local27 < local8.objectStackSizes.length; local27++) { + if (arg1 == local8.objectIds[local27]) { + local25 += local8.objectStackSizes[local27]; + } + } + return local25; + } + } + + @OriginalMember(owner = "client!bm", name = "a", descriptor = "(III)I") + public static int getItemCount(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + @Pc(10) Inv local10 = (Inv) objectContainerCache.get(arg0); + if (local10 == null) { + return 0; + } else if (arg1 >= 0 && arg1 < local10.objectStackSizes.length) { + return local10.objectStackSizes[arg1]; + } else { + return 0; + } + } + + @OriginalMember(owner = "client!be", name = "a", descriptor = "(III)I") + public static int getItemType(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(10) Inv local10 = (Inv) objectContainerCache.get(arg0); + if (local10 == null) { + return -1; + } else if (arg1 >= 0 && arg1 < local10.objectIds.length) { + return local10.objectIds[arg1]; + } else { + return -1; + } + } + + @OriginalMember(owner = "client!bc", name = "d", descriptor = "(II)V") + public static void delete(@OriginalArg(0) int arg0) { + @Pc(14) Inv local14 = (Inv) objectContainerCache.get(arg0); + if (local14 != null) { + local14.unlink(); + } + } + + @OriginalMember(owner = "client!hn", name = "f", descriptor = "(B)V") + public static void clear() { + objectContainerCache = new HashTable(32); + } + + @OriginalMember(owner = "client!wl", name = "a", descriptor = "(IIIIB)V") + public static void updateContainer(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(12) Inv local12 = (Inv) objectContainerCache.get(arg3); + if (local12 == null) { + local12 = new Inv(); + objectContainerCache.put(local12, arg3); + } + if (arg1 >= local12.objectIds.length) { + @Pc(39) int[] local39 = new int[arg1 + 1]; + @Pc(44) int[] local44 = new int[arg1 + 1]; + @Pc(46) int local46; + for (local46 = 0; local46 < local12.objectIds.length; local46++) { + local39[local46] = local12.objectIds[local46]; + local44[local46] = local12.objectStackSizes[local46]; + } + for (local46 = local12.objectIds.length; local46 < arg1; local46++) { + local39[local46] = -1; + local44[local46] = 0; + } + local12.objectIds = local39; + local12.objectStackSizes = local44; + } + local12.objectIds[arg1] = arg0; + local12.objectStackSizes[arg1] = arg2; + } + + @OriginalMember(owner = "client!pf", name = "a", descriptor = "(IIZIII)Lclient!qf;") + public static Sprite getObjectSprite(@OriginalArg(0) int selected, @OriginalArg(1) int id, @OriginalArg(2) boolean drawText, @OriginalArg(3) int count, @OriginalArg(4) int shadow) { + @Pc(27) int key = (drawText ? 65536 : 0) + id + (selected << 17) + (shadow << 19); + @Pc(37) long uid = (long) key * 3849834839L + (long) count * 3147483667L; + @Pc(43) Sprite sprite = (Sprite) ObjTypeList.objectSpriteCache.get(uid); + if (sprite != null) { + return sprite; + } + + Rasteriser.textureHasTransparency = false; + sprite = renderObjectSprite(shadow, false, id, drawText, selected, count, false); + if (sprite != null && !Rasteriser.textureHasTransparency) { + ObjTypeList.objectSpriteCache.put(sprite, uid); + } + + return sprite; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(IBZIZIIZ)Lclient!qf;") + public static Sprite renderObjectSprite(@OriginalArg(0) int shadow, @OriginalArg(2) boolean linked, @OriginalArg(3) int id, @OriginalArg(4) boolean drawText, @OriginalArg(5) int state, @OriginalArg(6) int stack, @OriginalArg(7) boolean cert) { + @Pc(5) ObjType objType = ObjTypeList.get(id); + if (stack > 1 && objType.countobj != null) { + @Pc(15) int stackId = -1; + for (@Pc(17) int i = 0; i < 10; i++) { + if (stack >= objType.countco[i] && objType.countco[i] != 0) { + stackId = objType.countobj[i]; + } + } + if (stackId != -1) { + objType = ObjTypeList.get(stackId); + } + } + + @Pc(60) SoftwareModel model = objType.getInvModel(); + if (model == null) { + return null; + } + + @Pc(71) SoftwareSprite linkedSprite = null; + if (objType.certtemplate != -1) { + linkedSprite = (SoftwareSprite) renderObjectSprite(0, true, objType.certlink, false, 1, 10, true); + if (linkedSprite == null) { + return null; + } + } else if (objType.lentTemplate != -1) { + linkedSprite = (SoftwareSprite) renderObjectSprite(shadow, true, objType.lentLink, false, state, stack, false); + if (linkedSprite == null) { + return null; + } + } + + @Pc(118) int[] pixels = SoftwareRaster.pixels; + @Pc(120) int width = SoftwareRaster.width; + @Pc(122) int height = SoftwareRaster.height; + @Pc(125) int[] clip = new int[4]; + SoftwareRaster.saveClip(clip); + + final int canvasWidth = 36; + final int canvasHeight = 32; + + @Pc(133) SoftwareSprite canvas = new SoftwareSprite(canvasWidth, canvasHeight); + SoftwareRaster.setSize(canvas.pixels, canvasWidth, canvasHeight); + Rasteriser.prepare(); + Rasteriser.setBounds(16, 16); // canvasWidth / 2, canvasHeight / 2); + Rasteriser.jagged = false; + + @Pc(145) int zoom = objType.zoom2d; // / 4; + if (cert) { + zoom = (int) ((double) zoom * 1.5D); + } else if (state == 2) { + zoom = (int) ((double) zoom * 1.04D); + } + + @Pc(176) int pitchcos = MathUtils.cos[objType.xAngle2D] * zoom >> 16; + @Pc(185) int pitchsin = MathUtils.sin[objType.xAngle2D] * zoom >> 16; + model.setCamera(objType.yAngle2D, objType.zAngle2D, objType.xAngle2D, objType.xOffset2D, pitchsin + objType.yOffset2D - model.getMinY() / 2, objType.yOffset2D + pitchcos, -1L); + + if (state >= 1) { + canvas.drawOutline(1); + if (state >= 2) { + canvas.drawOutline(16777215); + } + SoftwareRaster.setSize(canvas.pixels, canvasWidth, canvasHeight); + } + + if (shadow != 0) { + canvas.drawShadow(shadow); + } + + if (objType.certtemplate != -1) { + linkedSprite.render(0, 0); + } else if (objType.lentTemplate != -1) { + SoftwareRaster.setSize(linkedSprite.pixels, canvasWidth, canvasHeight); + canvas.render(0, 0); + canvas = linkedSprite; + } + + if (drawText && (objType.stackable == 1 || stack != 1) && stack != -1) { + ObjTypeList.font.renderLeft(formatObjAmount(stack), 0, 9, 16776960, 1); + } + + SoftwareRaster.setSize(pixels, width, height); + SoftwareRaster.restoreClip(clip); + Rasteriser.prepare(); + Rasteriser.jagged = true; + return GlRenderer.enabled && !linked ? new GlSprite(canvas) : canvas; + } + + @OriginalMember(owner = "client!eb", name = "b", descriptor = "(II)Lclient!na;") + public static JagString formatObjAmount(@OriginalArg(1) int arg0) { + if (arg0 < 100000) { + return JagString.concatenate(new JagString[]{aClass100_559, JagString.parseInt(arg0), aClass100_594}); + } else if (arg0 >= 10000000) { + return JagString.concatenate(new JagString[]{aClass100_819, JagString.parseInt(arg0 / 1000000), LocalizedText.MILLION, aClass100_594}); + } else { + return JagString.concatenate(new JagString[]{aClass100_637, JagString.parseInt(arg0 / 1000), LocalizedText.THOUSAND, aClass100_594}); + } + } + + @OriginalMember(owner = "client!bd", name = "a", descriptor = "(BI)V") + public static void method475(@OriginalArg(1) int arg0) { + @Pc(8) Inv local8 = (Inv) objectContainerCache.get(arg0); + if (local8 != null) { + for (@Pc(24) int local24 = 0; local24 < local8.objectIds.length; local24++) { + local8.objectIds[local24] = -1; + local8.objectStackSizes[local24] = 0; + } + } + } +} diff --git a/client/src/main/java/rt4/InvType.java b/client/src/main/java/rt4/InvType.java new file mode 100644 index 0000000..9bb3364 --- /dev/null +++ b/client/src/main/java/rt4/InvType.java @@ -0,0 +1,31 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!md") +public final class InvType extends SecondaryNode { + + @OriginalMember(owner = "client!md", name = "K", descriptor = "I") + public int size = 0; + + @OriginalMember(owner = "client!md", name = "a", descriptor = "(Lclient!wa;I)V") + public final void decode(@OriginalArg(0) Buffer buffer) { + while (true) { + @Pc(10) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(buffer, opcode); + } + } + + @OriginalMember(owner = "client!md", name = "a", descriptor = "(Lclient!wa;IZ)V") + private void decode(@OriginalArg(0) Buffer buffer, @OriginalArg(1) int opcode) { + if (opcode == 2) { + this.size = buffer.g2(); + } + } +} diff --git a/client/src/main/java/rt4/InvTypeList.java b/client/src/main/java/rt4/InvTypeList.java new file mode 100644 index 0000000..15ac3e2 --- /dev/null +++ b/client/src/main/java/rt4/InvTypeList.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class InvTypeList { + @OriginalMember(owner = "client!ha", name = "p", descriptor = "Lclient!gn;") + public static final LruHashTable types = new LruHashTable(64); + @OriginalMember(owner = "client!al", name = "q", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!je", name = "a", descriptor = "(ILclient!ve;)V") + public static void init(@OriginalArg(1) Js5 arg0) { + archive = arg0; + } + + @OriginalMember(owner = "client!u", name = "a", descriptor = "(II)Lclient!md;") + public static InvType get(@OriginalArg(0) int id) { + @Pc(16) InvType invType = (InvType) types.get(id); + if (invType != null) { + return invType; + } + @Pc(27) byte[] data = archive.fetchFile(5, id); + invType = new InvType(); + if (data != null) { + invType.decode(new Buffer(data)); + } + types.put(invType, id); + return invType; + } +} diff --git a/client/src/main/java/rt4/IsaacRandom.java b/client/src/main/java/rt4/IsaacRandom.java new file mode 100644 index 0000000..034cb36 --- /dev/null +++ b/client/src/main/java/rt4/IsaacRandom.java @@ -0,0 +1,199 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ij") +public final class IsaacRandom { + + @OriginalMember(owner = "client!ij", name = "b", descriptor = "I") + private int c; + + @OriginalMember(owner = "client!ij", name = "d", descriptor = "I") + private int b; + + @OriginalMember(owner = "client!ij", name = "f", descriptor = "I") + private int count; + + @OriginalMember(owner = "client!ij", name = "i", descriptor = "[I") + private final int[] rsl = new int[256]; + + @OriginalMember(owner = "client!ij", name = "k", descriptor = "[I") + private final int[] mem = new int[256]; + + @OriginalMember(owner = "client!ij", name = "l", descriptor = "I") + private int a; + + @OriginalMember(owner = "client!ij", name = "", descriptor = "([I)V") + public IsaacRandom(@OriginalArg(0) int[] seed) { + for (@Pc(13) int i = 0; i < seed.length; i++) { + this.rsl[i] = seed[i]; + } + this.init(); + } + + public static final int GOLDEN_RATIO = 0x9e3779b9; + + @OriginalMember(owner = "client!ij", name = "a", descriptor = "(Z)V") + private void init() { + @Pc(14) int local14 = GOLDEN_RATIO; + @Pc(16) int local16 = GOLDEN_RATIO; + @Pc(18) int local18 = GOLDEN_RATIO; + @Pc(20) int local20 = GOLDEN_RATIO; + @Pc(22) int local22 = GOLDEN_RATIO; + @Pc(24) int local24 = GOLDEN_RATIO; + @Pc(26) int local26 = GOLDEN_RATIO; + @Pc(27) int local27 = GOLDEN_RATIO; + @Pc(29) int local29; + for (local29 = 0; local29 < 4; local29++) { + local27 ^= local26 << 11; + local22 += local27; + local26 += local24; + local26 ^= local24 >>> 2; + local24 += local22; + local24 ^= local22 << 8; + local18 += local24; + local20 += local26; + local22 += local20; + local22 ^= local20 >>> 16; + local20 += local18; + local16 += local22; + local20 ^= local18 << 10; + local14 += local20; + local18 += local16; + local18 ^= local16 >>> 4; + local16 += local14; + local16 ^= local14 << 8; + local26 += local16; + local27 += local18; + local14 += local27; + local14 ^= local27 >>> 9; + local24 += local14; + local27 += local26; + } + for (local29 = 0; local29 < 256; local29 += 8) { + local22 += this.rsl[local29 + 3]; + local20 += this.rsl[local29 + 4]; + local16 += this.rsl[local29 + 6]; + local27 += this.rsl[local29]; + local24 += this.rsl[local29 + 2]; + local18 += this.rsl[local29 + 5]; + local14 += this.rsl[local29 + 7]; + local26 += this.rsl[local29 + 1]; + local27 ^= local26 << 11; + local26 += local24; + local26 ^= local24 >>> 2; + local22 += local27; + local24 += local22; + local24 ^= local22 << 8; + local20 += local26; + local22 += local20; + local22 ^= local20 >>> 16; + local18 += local24; + local20 += local18; + local20 ^= local18 << 10; + local14 += local20; + local16 += local22; + local18 += local16; + local18 ^= local16 >>> 4; + local16 += local14; + local16 ^= local14 << 8; + local27 += local18; + local14 += local27; + local26 += local16; + local14 ^= local27 >>> 9; + local27 += local26; + this.mem[local29] = local27; + this.mem[local29 + 1] = local26; + local24 += local14; + this.mem[local29 + 2] = local24; + this.mem[local29 + 3] = local22; + this.mem[local29 + 4] = local20; + this.mem[local29 + 5] = local18; + this.mem[local29 + 6] = local16; + this.mem[local29 + 7] = local14; + } + for (local29 = 0; local29 < 256; local29 += 8) { + local16 += this.mem[local29 + 6]; + local18 += this.mem[local29 + 5]; + local20 += this.mem[local29 + 4]; + local26 += this.mem[local29 + 1]; + local24 += this.mem[local29 + 2]; + local27 += this.mem[local29]; + local27 ^= local26 << 11; + local22 += this.mem[local29 + 3]; + local14 += this.mem[local29 + 7]; + local22 += local27; + local26 += local24; + local26 ^= local24 >>> 2; + local24 += local22; + local20 += local26; + local24 ^= local22 << 8; + local18 += local24; + local22 += local20; + local22 ^= local20 >>> 16; + local20 += local18; + local20 ^= local18 << 10; + local16 += local22; + local18 += local16; + local18 ^= local16 >>> 4; + local14 += local20; + local16 += local14; + local27 += local18; + local16 ^= local14 << 8; + local26 += local16; + local14 += local27; + local14 ^= local27 >>> 9; + local24 += local14; + local27 += local26; + this.mem[local29] = local27; + this.mem[local29 + 1] = local26; + this.mem[local29 + 2] = local24; + this.mem[local29 + 3] = local22; + this.mem[local29 + 4] = local20; + this.mem[local29 + 5] = local18; + this.mem[local29 + 6] = local16; + this.mem[local29 + 7] = local14; + } + this.isaac(); + this.count = 256; + } + + @OriginalMember(owner = "client!ij", name = "a", descriptor = "(I)I") + public final int getNextKey() { + if (GlobalConfig.USE_ISAAC) { + if (this.count-- == 0) { + this.isaac(); + this.count = 255; + } + return this.rsl[this.count]; + } else { + return 0; + } + } + + @OriginalMember(owner = "client!ij", name = "b", descriptor = "(I)V") + private void isaac() { + this.b += ++this.c; + for (@Pc(17) int local17 = 0; local17 < 256; local17++) { + @Pc(33) int local33 = this.mem[local17]; + if ((local17 & 0x2) == 0) { + if ((local17 & 0x1) == 0) { + this.a ^= this.a << 13; + } else { + this.a ^= this.a >>> 6; + } + } else if ((local17 & 0x1) == 0) { + this.a ^= this.a << 2; + } else { + this.a ^= this.a >>> 16; + } + this.a += this.mem[local17 + 128 & 0xFF]; + @Pc(119) int local119; + this.mem[local17] = local119 = this.b + this.a + this.mem[local33 >> 2 & 0xFF]; + this.rsl[local17] = this.b = local33 + this.mem[local119 >> 8 >> 2 & 0xFF]; + } + } +} diff --git a/client/src/main/java/rt4/JagString.java b/client/src/main/java/rt4/JagString.java new file mode 100644 index 0000000..449090e --- /dev/null +++ b/client/src/main/java/rt4/JagString.java @@ -0,0 +1,1088 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.applet.Applet; +import java.awt.*; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.charset.StandardCharsets; + +@OriginalClass("client!na") +public final class JagString implements StringInterface { + + @OriginalMember(owner = "client!pa", name = "O", descriptor = "Lclient!na;") + public static final JagString EMPTY = parse(""); + @OriginalMember(owner = "client!pi", name = "Q", descriptor = "Lclient!na;") + public static final JagString aClass100_853 = parse("null"); + @OriginalMember(owner = "client!t", name = "C", descriptor = "Lclient!na;") + public static final JagString PERIOD = parse(")3"); + @OriginalMember(owner = "client!vk", name = "a", descriptor = "[I") + public static final int[] anIntArray471 = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 73, 74, 76, 78, 83, 84, 85, 86, 91, 92, 93, 94, 95, 97, 103, 104, 105, 106, 107, 108, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 133, 134, 136, 138, 143, 144, 145, 146, 151, 152, 153, 154, 155, 157, 163, 164, 165, 166, 168, 169, 174, 175, 176, 177, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 97, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 157, 215, 216, 117, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 66, 66, 66, 66, 66, 66, 65, 75, 79, 79, 79, 79, 87, 87, 87, 87, 77, 96, 98, 98, 98, 98, 98, 250, 251, 109, 109, 109, 109, 117, 252, 167, 126, 126, 126, 126, 126, 126, 125, 135, 139, 139, 139, 139, 147, 147, 147, 147, 137, 156, 158, 158, 158, 158, 158, 253, 254, 170, 170, 170, 170, 178, 255, 178}; + @OriginalMember(owner = "client!sh", name = "e", descriptor = "Lclient!na;") + public static final JagString aClass100_967 = parse(""); + @OriginalMember(owner = "client!dm", name = "n", descriptor = "Lclient!na;") + public static final JagString PERCENT_SIGN = parse("(U"); + @OriginalMember(owner = "client!wa", name = "pb", descriptor = "Lclient!na;") + public static final JagString aClass100_556 = parse("
"); + @OriginalMember(owner = "client!ed", name = "H", descriptor = "Lclient!na;") + public static final JagString aClass100_375 = parse("<)4col> x"); + @OriginalMember(owner = "client!je", name = "db", descriptor = "Lclient!na;") + public static final JagString aClass100_589 = parse(" "); + @OriginalMember(owner = "client!uf", name = "s", descriptor = "Lclient!na;") + public static final JagString aClass100_1043 = parse(" "); + @OriginalMember(owner = "client!wj", name = "b", descriptor = "Lclient!na;") + public static final JagString aClass100_1101 = parse(" "); + @OriginalMember(owner = "client!mi", name = "R", descriptor = "Lclient!na;") + public static final JagString aClass100_760 = parse(")1"); + @OriginalMember(owner = "client!sj", name = "w", descriptor = "Lclient!na;") + public static final JagString aClass100_978 = parse("<)4col>"); + @OriginalMember(owner = "client!jb", name = "c", descriptor = "Lclient!na;") + public static final JagString aClass100_583 = parse("(Y<)4col>"); + @OriginalMember(owner = "client!fn", name = "Z", descriptor = "Lclient!na;") + public static final JagString aClass100_461 = parse(")1 "); + @OriginalMember(owner = "client!wb", name = "a", descriptor = "Lclient!na;") + public static final JagString aClass100_1089 = parse(")2"); + @OriginalMember(owner = "client!dm", name = "j", descriptor = "Lclient!na;") + public static final JagString SPACE = parse(" "); + @OriginalMember(owner = "client!vh", name = "c", descriptor = "Lclient!na;") + public static final JagString COLON = parse(":"); + @OriginalMember(owner = "client!ee", name = "a", descriptor = "Lclient!na;") + public static final JagString TIMEZONE = parse(" GMT"); + @OriginalMember(owner = "client!li", name = "w", descriptor = "Lclient!sc;") + public static HashTable aClass133_13; + @OriginalMember(owner = "client!na", name = "T", descriptor = "[B") + public byte[] chars; + + @OriginalMember(owner = "client!na", name = "lb", descriptor = "I") + public int length; + + @OriginalMember(owner = "client!na", name = "N", descriptor = "Z") + private boolean aBoolean193 = true; + + @OriginalMember(owner = "client!ck", name = "a", descriptor = "([Lclient!na;B)Lclient!na;") + public static JagString concatenate(@OriginalArg(0) JagString[] arg0) { + if (arg0.length < 2) { + throw new IllegalArgumentException(); + } + return method2355(0, arg0.length, arg0); + } + + @OriginalMember(owner = "client!jd", name = "a", descriptor = "(II[Lclient!na;I)Lclient!na;") + public static JagString method2355(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) JagString[] arg2) { + @Pc(5) int local5 = 0; + for (@Pc(7) int local7 = 0; local7 < arg1; local7++) { + if (arg2[arg0 + local7] == null) { + arg2[local7 + arg0] = aClass100_853; + } + local5 += arg2[local7 + arg0].length; + } + @Pc(39) byte[] local39 = new byte[local5]; + @Pc(41) int local41 = 0; + for (@Pc(43) int local43 = 0; local43 < arg1; local43++) { + @Pc(52) JagString local52 = arg2[local43 + arg0]; + copy(local52.chars, 0, local39, local41, local52.length); + local41 += local52.length; + } + @Pc(71) JagString local71 = new JagString(); + local71.length = local5; + local71.chars = local39; + return local71; + } + + @OriginalMember(owner = "client!kg", name = "a", descriptor = "([BI[BII)V") + public static void copy(@OriginalArg(0) byte[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) byte[] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + @Pc(15) int local15; + if (arg0 == arg2) { + if (arg1 == arg3) { + return; + } + if (arg3 > arg1 && arg3 < arg1 + arg4) { + local15 = arg4 - 1; + @Pc(19) int local19 = arg1 + local15; + @Pc(23) int local23 = arg3 + local15; + local15 = local19 - local15; + local15 += 7; + while (local19 >= local15) { + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + arg2[local23--] = arg0[local19--]; + } + local15 -= 7; + while (local19 >= local15) { + arg2[local23--] = arg0[local19--]; + } + return; + } + } + local15 = arg4 + arg1; + @Pc(115) int local115 = local15 - 7; + while (arg1 < local115) { + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + arg2[arg3++] = arg0[arg1++]; + } + local15 = local115 + 7; + while (arg1 < local15) { + arg2[arg3++] = arg0[arg1++]; + } + } + + @OriginalMember(owner = "client!cd", name = "a", descriptor = "(Ljava/lang/String;B)Lclient!na;") + public static JagString parse(@OriginalArg(0) String arg0) { + @Pc(6) byte[] local6 = arg0.getBytes(); + @Pc(9) int local9 = local6.length; + @Pc(13) JagString local13 = new JagString(); + @Pc(15) int local15 = 0; + local13.chars = new byte[local9]; + while (local9 > local15) { + @Pc(29) int local29 = local6[local15++] & 0xFF; + if (local29 <= 45 && local29 >= 40) { + if (local15 >= local9) { + break; + } + @Pc(51) int local51 = local6[local15++] & 0xFF; + local13.chars[local13.length++] = (byte) (local51 + (local29 + -40) * 43 - 48); + } else if (local29 != 0) { + local13.chars[local13.length++] = (byte) local29; + } + } + local13.method3156(); + return local13.method3151(); + } + + @OriginalMember(owner = "client!jj", name = "b", descriptor = "(BI)Lclient!na;") + public static JagString parseInt(@OriginalArg(1) int arg0) { + return parseInt(false, arg0); + } + + @OriginalMember(owner = "client!q", name = "a", descriptor = "(BZII)Lclient!na;") + public static JagString parseInt(@OriginalArg(1) boolean arg0, @OriginalArg(3) int arg1) { + @Pc(23) int local23 = 1; + @Pc(27) int local27 = arg1 / 10; + while (local27 != 0) { + local27 /= 10; + local23++; + } + @Pc(38) int local38 = local23; + if (arg1 < 0 || arg0) { + local38 = local23 + 1; + } + @Pc(46) byte[] local46 = new byte[local38]; + if (arg1 < 0) { + local46[0] = 45; + } else if (arg0) { + local46[0] = 43; + } + for (@Pc(61) int local61 = 0; local61 < local23; local61++) { + @Pc(68) int local68 = arg1 % 10; + if (local68 < 0) { + local68 = -local68; + } + if (local68 > 9) { + local68 += 39; + } + local46[local38 - local61 - 1] = (byte) (local68 + 48); + arg1 /= 10; + } + @Pc(112) JagString local112 = new JagString(); + local112.chars = local46; + local112.length = local38; + return local112; + } + + @OriginalMember(owner = "client!an", name = "a", descriptor = "([BIII)Lclient!na;") + public static JagString decodeString(@OriginalArg(0) byte[] arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + @Pc(7) JagString local7 = new JagString(); + local7.chars = new byte[arg1]; + local7.length = 0; + for (@Pc(22) int local22 = arg2; local22 < arg1 + arg2; local22++) { + if (arg0[local22] != 0) { + local7.chars[local7.length++] = arg0[local22]; + } + } + return local7; + } + + @OriginalMember(owner = "client!bg", name = "d", descriptor = "(II)Z") + public static boolean method530(@OriginalArg(0) int arg0) { + return arg0 == 198 || arg0 == 230 || arg0 == 156 || arg0 == 140 || arg0 == 223; + } + + @OriginalMember(owner = "client!ih", name = "a", descriptor = "(ZII)Lclient!na;") + public static JagString parseIntTrue(@OriginalArg(2) int arg0) { + return parseInt(true, arg0); + } + + @OriginalMember(owner = "client!oi", name = "a", descriptor = "(II)Lclient!na;") + public static JagString formatIp(@OriginalArg(0) int arg0) { + return concatenate(new JagString[]{parseInt(arg0 >> 24 & 0xFF), PERIOD, parseInt(arg0 >> 16 & 0xFF), PERIOD, parseInt(arg0 >> 8 & 0xFF), PERIOD, parseInt(arg0 & 0xFF)}); + } + + @OriginalMember(owner = "client!nb", name = "a", descriptor = "(II)Lclient!na;") + public static JagString getNbsp() { + @Pc(21) JagString str = new JagString(); + str.length = 1; + str.chars = new byte[1]; + str.chars[0] = -96; // 0xA0 - NBSP + return str; + } + + /** + * @return A JagString consisting of the actual bytes in the provided string. + */ + @OriginalMember(owner = "client!sj", name = "a", descriptor = "(Ljava/lang/String;I)Lclient!na;") + public static JagString of(@OriginalArg(0) String string) { + @Pc(14) byte[] bytes = string.getBytes(StandardCharsets.ISO_8859_1); + @Pc(23) JagString js = new JagString(); + js.chars = bytes; + js.length = 0; + for (@Pc(31) int i = 0; i < bytes.length; i++) { + if (bytes[i] != 0) { + bytes[js.length++] = bytes[i]; + } + } + return js; + } + + @OriginalMember(owner = "client!gn", name = "a", descriptor = "(BI)Lclient!na;") + public static JagString allocate(@OriginalArg(1) int arg0) { + @Pc(13) JagString local13 = new JagString(); + local13.length = 0; + local13.chars = new byte[arg0]; + return local13; + } + + @OriginalMember(owner = "client!md", name = "a", descriptor = "(JB)Lclient!na;") + public static JagString method2929(@OriginalArg(0) long arg0) { + return method1376(arg0); + } + + @OriginalMember(owner = "client!ej", name = "a", descriptor = "(IZIJ)Lclient!na;") + public static JagString method1376(@OriginalArg(3) long arg0) { + @Pc(35) long local35 = arg0 / (long) 10; + @Pc(37) int local37 = 1; + while (local35 != 0L) { + local37++; + local35 /= 10; + } + @Pc(51) int local51 = local37; + if (arg0 < 0L) { + local51 = local37 + 1; + } + @Pc(61) byte[] local61 = new byte[local51]; + if (arg0 < 0L) { + local61[0] = 45; + } + for (@Pc(79) int local79 = 0; local79 < local37; local79++) { + @Pc(92) int local92 = (int) (arg0 % (long) 10); + arg0 /= 10; + if (local92 < 0) { + local92 = -local92; + } + if (local92 > 9) { + local92 += 39; + } + local61[local51 - local79 - 1] = (byte) (local92 + 48); + } + @Pc(126) JagString local126 = new JagString(); + local126.chars = local61; + local126.length = local51; + return local126; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(Z)Ljava/net/URL;") + public final URL method3107() throws MalformedURLException { + return new URL(new String(this.chars, 0, this.length)); + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(BLclient!na;)Z") + public final boolean strEquals(@OriginalArg(1) JagString arg0) { + if (arg0 == null) { + return false; + } else if (arg0 == this) { + return true; + } else if (this.length == arg0.length) { + @Pc(29) byte[] local29 = arg0.chars; + @Pc(32) byte[] local32 = this.chars; + for (@Pc(34) int local34 = 0; local34 < this.length; local34++) { + if (local32[local34] != local29[local34]) { + return false; + } + } + return true; + } else { + return false; + } + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(BI)I") + public final int parseHexString(@OriginalArg(1) int arg0) { + @Pc(14) boolean local14 = false; + @Pc(20) boolean local20 = false; + @Pc(22) int local22 = 0; + for (@Pc(24) int local24 = 0; local24 < this.length; local24++) { + @Pc(43) int local43 = this.chars[local24] & 0xFF; + if (local24 == 0) { + if (local43 == 45) { + local14 = true; + continue; + } + if (local43 == 43) { + continue; + } + } + if (local43 >= 48 && local43 <= 57) { + local43 -= 48; + } else if (local43 >= 65 && local43 <= 90) { + local43 -= 55; + } else if (local43 >= 97 && local43 <= 122) { + local43 -= 87; + } else { + throw new NumberFormatException(); + } + if (arg0 <= local43) { + throw new NumberFormatException(); + } + if (local14) { + local43 = -local43; + } + @Pc(117) int local117 = local43 + local22 * arg0; + if (local117 / arg0 != local22) { + throw new NumberFormatException(); + } + local22 = local117; + local20 = true; + } + if (!local20) { + throw new NumberFormatException(); + } + return local22; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(ILclient!na;)Z") + public final boolean equalsIgnoreCase(@OriginalArg(1) JagString arg0) { + if (arg0 == null) { + return false; + } else if (this.length == arg0.length) { + for (@Pc(28) int local28 = 0; local28 < this.length; local28++) { + @Pc(41) byte local41 = this.chars[local28]; + if (local41 >= 65 && local41 <= 90 || local41 >= -64 && local41 <= -34 && local41 != -41) { + local41 = (byte) (local41 + 32); + } + @Pc(75) byte local75 = arg0.chars[local28]; + if (local75 >= 65 && local75 <= 90 || local75 >= -64 && local75 <= -34 && local75 != -41) { + local75 = (byte) (local75 + 32); + } + if (local41 != local75) { + return false; + } + } + return true; + } else { + return false; + } + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(IILjava/awt/Graphics;B)V") + public final void drawString(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) Graphics arg2) { + @Pc(17) String local17 = new String(this.chars, 0, this.length, StandardCharsets.ISO_8859_1); + arg2.drawString(local17, arg1, arg0); + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(Lclient!na;Z)Lclient!na;") + public final JagString method3113(@OriginalArg(0) JagString arg0) { + if (!this.aBoolean193) { + throw new IllegalArgumentException(); + } + if (arg0.length + this.length > this.chars.length) { + @Pc(31) int local31; + for (local31 = 1; local31 < arg0.length + this.length; local31 += local31) { + } + @Pc(51) byte[] local51 = new byte[local31]; + copy(this.chars, 0, local51, 0, this.length); + this.chars = local51; + } + copy(arg0.chars, 0, this.chars, this.length, arg0.length); + this.length += arg0.length; + return this; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(I)Lclient!na;") + public final JagString toLowerCase() { + @Pc(14) JagString local14 = new JagString(); + local14.length = this.length; + local14.chars = new byte[this.length]; + for (@Pc(29) int local29 = 0; local29 < this.length; local29++) { + @Pc(42) byte local42 = this.chars[local29]; + if (local42 >= 65 && local42 <= 90 || local42 >= -64 && local42 <= -34 && local42 != -41) { + local42 = (byte) (local42 + 32); + } + local14.chars[local29] = local42; + } + return local14; + } + + @OriginalMember(owner = "client!na", name = "b", descriptor = "(I)Lclient!na;") + public final JagString encodeMessage() { + @Pc(7) byte local7 = 2; + @Pc(11) JagString local11 = new JagString(); + local11.length = this.length; + local11.chars = new byte[this.length]; + for (@Pc(28) int local28 = 0; local28 < this.length; local28++) { + @Pc(41) byte local41 = this.chars[local28]; + if (local41 >= 97 && local41 <= 122 || !(local41 < -32 || local41 > -2 || local41 == -9)) { + if (local7 == 2) { + local41 = (byte) (local41 - 32); + } + local7 = 0; + } else if (local41 >= 65 && local41 <= 90 || !(local41 < -64 || local41 > -34 || local41 == -41)) { + if (local7 == 0) { + local41 = (byte) (local41 + 32); + } + local7 = 0; + } else if (local41 == 46 || local41 == 33 || local41 == 63) { + local7 = 2; + } else if (local41 != 32) { + local7 = 1; + } else if (local7 != 2) { + local7 = 1; + } + local11.chars[local28] = local41; + } + return local11; + } + + @OriginalMember(owner = "client!na", name = "c", descriptor = "(I)J") + public final long longHashCode() { + @Pc(1) long local1 = 0L; + for (@Pc(9) int local9 = 0; local9 < this.length; local9++) { + local1 = (long) (this.chars[local9] & 0xFF) + (local1 << 5) - local1; + } + return local1; + } + + @OriginalMember(owner = "client!na", name = "d", descriptor = "(I)I") + public final int length() { + return this.length; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(ILclient!na;II)Lclient!na;") + public final JagString method3122(@OriginalArg(1) JagString arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + if (!this.aBoolean193) { + throw new IllegalArgumentException(); + } else if (arg1 >= 0 && arg1 <= arg2 && arg2 <= arg0.length) { + if (this.length + arg2 - arg1 > this.chars.length) { + @Pc(43) int local43; + for (local43 = 1; local43 < this.length + arg0.length; local43 += local43) { + } + @Pc(63) byte[] local63 = new byte[local43]; + copy(this.chars, 0, local63, 0, this.length); + this.chars = local63; + } + copy(arg0.chars, arg1, this.chars, this.length, arg2 - arg1); + this.length += arg2 - arg1; + return this; + } else { + throw new IllegalArgumentException(); + } + } + + @OriginalMember(owner = "client!na", name = "f", descriptor = "(I)Z") + public final boolean isInt() { + return this.method3141(); + } + + @OriginalMember(owner = "client!na", name = "b", descriptor = "(Z)Lclient!na;") + public final JagString method3124() { + @Pc(7) JagString local7 = new JagString(); + local7.length = this.length; + local7.chars = new byte[local7.length]; + for (@Pc(24) int local24 = 0; local24 < this.length; local24++) { + local7.chars[this.length - local24 - 1] = this.chars[local24]; + } + return local7; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(B)Lclient!na;") + public final JagString toTitleCase() { + @Pc(9) JagString local9 = new JagString(); + local9.length = this.length; + local9.chars = new byte[this.length]; + @Pc(20) boolean local20 = true; + for (@Pc(22) int local22 = 0; local22 < this.length; local22++) { + @Pc(41) byte local41 = this.chars[local22]; + if (local41 == 95) { + local20 = true; + local9.chars[local22] = 32; + } else if (local41 >= 97 && local41 <= 122 && local20) { + local20 = false; + local9.chars[local22] = (byte) (local41 - 32); + } else { + local9.chars[local22] = local41; + local20 = false; + } + } + return local9; + } + + @OriginalMember(owner = "client!na", name = "b", descriptor = "(BLclient!na;)I") + public final int compare(@OriginalArg(1) JagString arg0) { + @Pc(12) int local12 = 0; + @Pc(14) int local14 = 0; + @Pc(17) int local17 = arg0.length; + @Pc(20) int local20 = this.length; + @Pc(23) int local23 = this.length; + @Pc(26) int local26 = arg0.length; + @Pc(28) int local28 = 0; + @Pc(30) int local30 = 0; + while (local20 != 0 && local17 != 0) { + if (local12 == 156 || local12 == 230) { + local12 = 101; + } else if (local12 == 140 || local12 == 198) { + local12 = 69; + } else if (local12 == 223) { + local12 = 115; + } else { + local12 = this.chars[local28] & 0xFF; + local28++; + } + if (method530(local12)) { + local23++; + } else { + local20--; + } + if (local14 == 156 || local14 == 230) { + local14 = 101; + } else if (local14 == 140 || local14 == 198) { + local14 = 69; + } else if (local14 == 223) { + local14 = 115; + } else { + local14 = arg0.chars[local30] & 0xFF; + local30++; + } + if (method530(local14)) { + local26++; + } else { + local17--; + } + if (anIntArray471[local12] < anIntArray471[local14]) { + return -1; + } + if (anIntArray471[local14] < anIntArray471[local12]) { + return 1; + } + } + if (local26 <= local23) { + return local23 > local26 ? 1 : 0; + } else { + return -1; + } + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(Ljava/net/URL;Z)Ljava/net/URL;") + public final URL method3127(@OriginalArg(0) URL arg0) throws MalformedURLException { + return new URL(arg0, new String(this.chars, 0, this.length)); + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(ZI)Lclient!na;") + public final JagString concatChar(@OriginalArg(1) int arg0) { + if (arg0 <= 0 || arg0 > 255) { + throw new IllegalArgumentException("invalid char"); + } + @Pc(23) JagString local23 = new JagString(); + local23.chars = new byte[this.length + 1]; + local23.length = this.length + 1; + copy(this.chars, 0, local23.chars, 0, this.length); + local23.chars[this.length] = (byte) arg0; + return local23; + } + + @OriginalMember(owner = "client!na", name = "c", descriptor = "(Z)V") + public final void print() { + @Pc(16) String local16 = new String(this.chars, 0, this.length, StandardCharsets.ISO_8859_1); + System.out.println(local16); + } + + @OriginalMember(owner = "client!na", name = "c", descriptor = "(BLclient!na;)Z") + public final boolean endsWith(@OriginalArg(1) JagString arg0) { + if (arg0.length > this.length) { + return false; + } + @Pc(19) int local19 = this.length - arg0.length; + for (@Pc(27) int local27 = 0; local27 < arg0.length; local27++) { + if (this.chars[local19 + local27] != arg0.chars[local27]) { + return false; + } + } + return true; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(Lclient!na;I)I") + public final int indexOf(@OriginalArg(0) JagString arg0) { + return this.indexOf(arg0, 0); + } + + @OriginalMember(owner = "client!na", name = "b", descriptor = "(B)I") + public final int parseInt() { + return this.parseHexString(10); + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(IZ)V") + public final void method3133(@OriginalArg(0) int arg0) { + if (!this.aBoolean193) { + throw new IllegalArgumentException(); + } else if (arg0 < 0) { + throw new IllegalArgumentException(); + } else { + @Pc(30) int local30; + if (arg0 > this.chars.length) { + for (local30 = 1; local30 < arg0; local30 += local30) { + } + @Pc(45) byte[] local45 = new byte[local30]; + copy(this.chars, 0, local45, 0, this.length); + this.chars = local45; + } + for (local30 = this.length; local30 < arg0; local30++) { + this.chars[local30] = 32; + } + this.length = arg0; + } + } + + @OriginalMember(owner = "client!na", name = "toString", descriptor = "()Ljava/lang/String;") + @Override + public String toString() { + return new String(this.chars, 0, this.length, StandardCharsets.ISO_8859_1); + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(ZLjava/applet/Applet;)V") + public final void method3134(@OriginalArg(1) Applet arg0) throws Throwable { + @Pc(16) String local16 = new String(this.chars, 0, this.length); + BrowserControl.eval(arg0, local16); + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(III)I") + public final int indexOf(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(4) byte local4 = (byte) arg0; + for (@Pc(15) int local15 = arg1; local15 < this.length; local15++) { + if (this.chars[local15] == local4) { + return local15; + } + } + return -1; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(IB)Lclient!na;") + public final JagString substring(@OriginalArg(0) int arg0) { + return this.substring(this.length, arg0); + } + + @OriginalMember(owner = "client!na", name = "b", descriptor = "(III)Lclient!na;") + public final JagString substring(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(7) JagString local7 = new JagString(); + local7.length = arg0 - arg1; + local7.chars = new byte[arg0 - arg1]; + copy(this.chars, arg1, local7.chars, 0, local7.length); + return local7; + } + + @OriginalMember(owner = "client!na", name = "b", descriptor = "(Lclient!na;I)Z") + public final boolean startsWith(@OriginalArg(0) JagString arg0) { + if (this.length < arg0.length) { + return false; + } + for (@Pc(19) int local19 = 0; local19 < arg0.length; local19++) { + if (this.chars[local19] != arg0.chars[local19]) { + return false; + } + } + return true; + } + + @OriginalMember(owner = "client!na", name = "equals", descriptor = "(Ljava/lang/Object;)Z") + @Override + public final boolean equals(@OriginalArg(0) Object arg0) { + if (!(arg0 instanceof JagString)) { + throw new IllegalArgumentException(); + } + return this.strEquals((JagString) arg0); + } + + @OriginalMember(owner = "client!na", name = "c", descriptor = "(Lclient!na;I)I") + public final int method3139(@OriginalArg(0) JagString arg0) { + @Pc(20) int local20; + if (arg0.length < this.length) { + local20 = arg0.length; + } else { + local20 = this.length; + } + for (@Pc(27) int local27 = 0; local27 < local20; local27++) { + if ((this.chars[local27] & 0xFF) < (arg0.chars[local27] & 0xFF)) { + return -1; + } + if ((arg0.chars[local27] & 0xFF) < (this.chars[local27] & 0xFF)) { + return 1; + } + } + if (arg0.length > this.length) { + return -1; + } else if (arg0.length >= this.length) { + return 0; + } else { + return 1; + } + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(Lclient!na;ZLclient!na;)Lclient!na;") + public final JagString method3140(@OriginalArg(0) JagString arg0, @OriginalArg(2) JagString arg1) { + @Pc(8) int local8 = this.length; + @Pc(14) int local14 = arg0.length - arg1.length; + @Pc(16) int local16 = 0; + while (true) { + @Pc(22) int local22 = this.indexOf(arg1, local16); + if (local22 < 0) { + local16 = 0; + @Pc(45) JagString local45 = allocate(local8); + while (true) { + @Pc(51) int local51 = this.indexOf(arg1, local16); + if (local51 < 0) { + while (local16 < this.length) { + local45.append(this.chars[local16++] & 0xFF); + } + return local45; + } + while (local16 < local51) { + local45.append(this.chars[local16++] & 0xFF); + } + local45.method3113(arg0); + local16 += arg1.length; + } + } + local16 = local22 + arg1.length; + local8 += local14; + } + } + + @OriginalMember(owner = "client!na", name = "hashCode", descriptor = "()I") + @Override + public final int hashCode() { + return this.getHash(); + } + + @OriginalMember(owner = "client!na", name = "b", descriptor = "(IZ)Z") + private boolean method3141() { + @Pc(18) boolean local18 = false; + @Pc(24) boolean local24 = false; + @Pc(26) int local26 = 0; + for (@Pc(28) int local28 = 0; local28 < this.length; local28++) { + @Pc(39) int local39 = this.chars[local28] & 0xFF; + if (local28 == 0) { + if (local39 == 45) { + local24 = true; + continue; + } + if (local39 == 43) { + continue; + } + } + if (local39 >= 48 && local39 <= 57) { + local39 -= 48; + } else if (local39 >= 65 && local39 <= 90) { + local39 -= 55; + } else if (local39 >= 97 && local39 <= 122) { + local39 -= 87; + } else { + return false; + } + if (local39 >= 10) { + return false; + } + if (local24) { + local39 = -local39; + } + @Pc(110) int local110 = local39 + local26 * 10; + if (local26 != local110 / 10) { + return false; + } + local26 = local110; + local18 = true; + } + return local18; + } + + @OriginalMember(owner = "client!na", name = "d", descriptor = "(BLclient!na;)Z") + public final boolean method3142(@OriginalArg(1) JagString arg0) { + if (this.length < arg0.length) { + return false; + } + for (@Pc(21) int local21 = 0; local21 < arg0.length; local21++) { + @Pc(30) byte local30 = this.chars[local21]; + @Pc(35) byte local35 = arg0.chars[local21]; + if (local35 >= 65 && local35 <= 90 || local35 >= -64 && local35 <= -34 && local35 != -41) { + local35 = (byte) (local35 + 32); + } + if (local30 >= 65 && local30 <= 90 || local30 >= -64 && local30 <= -34 && local30 != -41) { + local30 = (byte) (local30 + 32); + } + if (local30 != local35) { + return false; + } + } + return true; + } + + @OriginalMember(owner = "client!na", name = "g", descriptor = "(I)Lclient!na;") + public final JagString asString() { + return this; + } + + @OriginalMember(owner = "client!na", name = "h", descriptor = "(I)Lclient!na;") + public final JagString trim() { + @Pc(17) int local17; + for (local17 = 0; local17 < this.length && (this.chars[local17] >= 0 && this.chars[local17] <= 32 || (this.chars[local17] & 0xFF) == 160); local17++) { + } + @Pc(53) int local53; + for (local53 = this.length; local53 > local17 && (this.chars[local53 - 1] >= 0 && this.chars[local53 - 1] <= 32 || (this.chars[local53 - 1] & 0xFF) == 160); local53--) { + } + if (local17 == 0 && this.length == local53) { + return this; + } + @Pc(111) JagString local111 = new JagString(); + local111.length = local53 - local17; + local111.chars = new byte[local111.length]; + for (@Pc(124) int local124 = 0; local124 < local111.length; local124++) { + local111.chars[local124] = this.chars[local17 + local124]; + } + return local111; + } + + @OriginalMember(owner = "client!na", name = "c", descriptor = "(III)Lclient!na;") + public final JagString replaceSlashWithSpace() { + @Pc(8) JagString str = new JagString(); + str.length = this.length; + str.chars = new byte[this.length]; + for (@Pc(31) int i = 0; i < this.length; i++) { + @Pc(44) byte c = this.chars[i]; + if (c == 47) { + str.chars[i] = 32; + } else { + str.chars[i] = c; + } + } + return str; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(Lclient!na;II)I") + public final int indexOf(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1) { + @Pc(8) int local8 = arg0.length; + if (arg1 >= this.length) { + return local8 == 0 ? this.length : -1; + } + if (arg1 < 0) { + arg1 = 0; + } + if (local8 == 0) { + return arg1; + } + @Pc(41) int local41 = this.length - local8; + @Pc(44) byte[] local44 = arg0.chars; + @Pc(48) byte local48 = local44[0]; + for (@Pc(50) int local50 = arg1; local50 <= local41; local50++) { + if (local48 != this.chars[local50]) { + do { + local50++; + if (local50 > local41) { + return -1; + } + } while (local48 != this.chars[local50]); + } + @Pc(88) boolean local88 = true; + @Pc(92) int local92 = local50 + 1; + for (@Pc(94) int local94 = 1; local94 < local8; local94++) { + if (local44[local94] != this.chars[local92]) { + local88 = false; + break; + } + local92++; + } + if (local88) { + return local50; + } + } + return -1; + } + + @OriginalMember(owner = "client!na", name = "b", descriptor = "(IB)[Lclient!na;") + public final JagString[] split(@OriginalArg(0) int delim) { + @Pc(7) int matches = 0; + for (@Pc(9) int i = 0; i < this.length; i++) { + if (delim == this.chars[i]) { + matches++; + } + } + @Pc(37) JagString[] parts = new JagString[matches + 1]; + if (matches == 0) { + parts[0] = this; + return parts; + } + @Pc(47) int part = 0; + @Pc(49) int start = 0; + for (@Pc(51) int i = 0; i < matches; i++) { + @Pc(68) int end; + for (end = 0; delim != this.chars[end + start]; end++) { + } + parts[part++] = this.substring(start + end, start); + start += end + 1; + } + parts[matches] = this.substring(this.length, start); + return parts; + } + + @OriginalMember(owner = "client!na", name = "i", descriptor = "(I)[B") + public final byte[] method3148() { + @Pc(7) byte[] local7 = new byte[this.length]; + copy(this.chars, 0, local7, 0, this.length); + return local7; + } + + @OriginalMember(owner = "client!na", name = "c", descriptor = "(IB)I") + public final int charAt(@OriginalArg(0) int arg0) { + return this.chars[arg0] & 0xFF; + } + + @OriginalMember(owner = "client!na", name = "c", descriptor = "(B)Lclient!na;") + public final JagString method3151() { + @Pc(9) long local9 = this.longHashCode(); + @Pc(19) Class local19 = JagString.class; + synchronized (local19) { + @Pc(30) StringNode local30; + if (aClass133_13 == null) { + aClass133_13 = new HashTable(4096); + } else { + for (local30 = (StringNode) aClass133_13.get(local9); local30 != null; local30 = (StringNode) aClass133_13.nextWithKey()) { + if (this.strEquals(local30.value)) { + return local30.value; + } + } + } + local30 = new StringNode(); + local30.value = this; + this.aBoolean193 = false; + aClass133_13.put(local30, local9); + return this; + } + } + + @OriginalMember(owner = "client!na", name = "d", descriptor = "(IB)Lclient!na;") + public final JagString append(@OriginalArg(0) int arg0) { + if (arg0 <= 0 || arg0 > 255) { + throw new IllegalArgumentException("invalid char:" + arg0); + } else if (this.aBoolean193) { + if (this.length == this.chars.length) { + @Pc(44) int local44; + for (local44 = 1; local44 <= this.length; local44 += local44) { + } + @Pc(61) byte[] local61 = new byte[local44]; + copy(this.chars, 0, local61, 0, this.length); + this.chars = local61; + } + this.chars[this.length++] = (byte) arg0; + return this; + } else { + throw new IllegalArgumentException(); + } + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(BLjava/applet/Applet;)Lclient!na;") + public final JagString fromParameters(@OriginalArg(1) Applet arg0) { + @Pc(19) String local19 = new String(this.chars, 0, this.length); + @Pc(23) String local23 = arg0.getParameter(local19); + return local23 == null ? null : of(local23); + } + + @OriginalMember(owner = "client!na", name = "d", descriptor = "(Z)I") + public final int getHash() { + @Pc(7) int hash = 0; + for (@Pc(14) int c = 0; c < this.length; c++) { + hash = (this.chars[c] & 0xFF) + (hash << 5) - hash; + } + return hash; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(ILjava/awt/FontMetrics;)I") + public final int stringWidth(@OriginalArg(1) FontMetrics arg0) { + @Pc(14) String local14 = new String(this.chars, 0, this.length, StandardCharsets.ISO_8859_1); + return arg0.stringWidth(local14); + } + + @OriginalMember(owner = "client!na", name = "d", descriptor = "(B)Lclient!na;") + public final JagString method3156() { + if (!this.aBoolean193) { + throw new IllegalArgumentException(); + } + if (this.chars.length != this.length) { + @Pc(26) byte[] local26 = new byte[this.length]; + copy(this.chars, 0, local26, 0, this.length); + this.chars = local26; + } + return this; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(ILjava/applet/Applet;)Ljava/lang/Object;") + public final Object browserControlCall(@OriginalArg(1) Applet arg0) throws Throwable { + @Pc(12) String local12 = new String(this.chars, 0, this.length); + @Pc(17) Object local17 = BrowserControl.call(local12, arg0); + if (local17 instanceof String) { + @Pc(24) byte[] local24 = ((String) local17).getBytes(); + local17 = decodeString(local24, local24.length, 0); + } + return local17; + } + + @OriginalMember(owner = "client!na", name = "j", descriptor = "(I)J") + public final long encode37() { + @Pc(7) long local7 = 0L; + for (@Pc(14) int local14 = 0; this.length > local14 && local14 < 12; local14++) { + @Pc(32) byte local32 = this.chars[local14]; + local7 *= 37L; + if (local32 >= 65 && local32 <= 90) { + local7 += local32 + 1 - 65; + } else if (local32 >= 97 && local32 <= 122) { + local7 += local32 + 1 - 97; + } else if (local32 >= 48 && local32 <= 57) { + local7 += local32 + 27 - 48; + } + } + while (local7 % 37L == 0L && local7 != 0L) { + local7 /= 37L; + } + return local7; + } + + @OriginalMember(owner = "client!na", name = "k", descriptor = "(I)Lclient!na;") + public final JagString method3159() { + @Pc(9) JagString local9 = Base37.decode37(this.encode37()); + return local9 == null ? aClass100_967 : local9; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(Z[BIII)I") + public final int encodeString(@OriginalArg(1) byte[] arg0, @OriginalArg(2) int arg1, @OriginalArg(4) int arg2) { + copy(this.chars, 0, arg0, arg1, arg2); + return arg2; + } +} diff --git a/client/src/main/java/rt4/JavaAudioChannel.java b/client/src/main/java/rt4/JavaAudioChannel.java new file mode 100644 index 0000000..4c485ec --- /dev/null +++ b/client/src/main/java/rt4/JavaAudioChannel.java @@ -0,0 +1,118 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.Mixer.Info; +import javax.sound.sampled.SourceDataLine; +import java.awt.Component; + +@OriginalClass("client!qa") +public final class JavaAudioChannel extends AudioChannel { + + @OriginalMember(owner = "client!qa", name = "L", descriptor = "I") + private int anInt4645; + + @OriginalMember(owner = "client!qa", name = "M", descriptor = "Ljavax/sound/sampled/SourceDataLine;") + private SourceDataLine aSourceDataLine1; + + @OriginalMember(owner = "client!qa", name = "O", descriptor = "Ljavax/sound/sampled/AudioFormat;") + private AudioFormat anAudioFormat1; + + @OriginalMember(owner = "client!qa", name = "P", descriptor = "[B") + private byte[] aByteArray64; + + @OriginalMember(owner = "client!qa", name = "N", descriptor = "Z") + private boolean aBoolean230 = false; + + @OriginalMember(owner = "client!qa", name = "d", descriptor = "()V") + @Override + protected final void flush() { + if (this.aSourceDataLine1 != null) { + this.aSourceDataLine1.close(); + this.aSourceDataLine1 = null; + } + } + + @OriginalMember(owner = "client!qa", name = "a", descriptor = "(Ljava/awt/Component;)V") + @Override + public final void init(@OriginalArg(0) Component arg0) { + @Pc(1) Info[] local1 = AudioSystem.getMixerInfo(); + if (local1 != null) { + for (@Pc(9) int local9 = 0; local9 < local1.length; local9++) { + @Pc(21) Info local21 = local1[local9]; + if (local21 != null) { + @Pc(28) String local28 = local21.getName(); + if (local28 != null && local28.toLowerCase().indexOf("soundmax") >= 0) { + this.aBoolean230 = true; + } + } + } + } + this.anAudioFormat1 = new AudioFormat((float) AudioChannel.sampleRate, 16, AudioChannel.stereo ? 2 : 1, true, false); + this.aByteArray64 = new byte[0x100 << (AudioChannel.stereo ? 2 : 1)]; + } + + @OriginalMember(owner = "client!qa", name = "a", descriptor = "(I)V") + @Override + public final void open(@OriginalArg(0) int arg0) throws LineUnavailableException { + try { + @Pc(20) javax.sound.sampled.DataLine.Info local20 = new javax.sound.sampled.DataLine.Info(SourceDataLine.class, this.anAudioFormat1, arg0 << (AudioChannel.stereo ? 2 : 1)); + this.aSourceDataLine1 = (SourceDataLine) AudioSystem.getLine(local20); + this.aSourceDataLine1.open(); + this.aSourceDataLine1.start(); + this.anInt4645 = arg0; + } catch (@Pc(36) LineUnavailableException local36) { + if (IntUtils.bitCountFast(arg0) == 1) { + this.aSourceDataLine1 = null; + throw local36; + } else { + this.open(IntUtils.clp2(arg0)); + } + } + } + + @OriginalMember(owner = "client!qa", name = "b", descriptor = "()V") + @Override + protected final void close() throws LineUnavailableException { + this.aSourceDataLine1.flush(); + if (!this.aBoolean230) { + return; + } + this.aSourceDataLine1.close(); + this.aSourceDataLine1 = null; + @Pc(34) javax.sound.sampled.DataLine.Info local34 = new javax.sound.sampled.DataLine.Info(SourceDataLine.class, this.anAudioFormat1, this.anInt4645 << (AudioChannel.stereo ? 2 : 1)); + this.aSourceDataLine1 = (SourceDataLine) AudioSystem.getLine(local34); + this.aSourceDataLine1.open(); + this.aSourceDataLine1.start(); + } + + @OriginalMember(owner = "client!qa", name = "c", descriptor = "()I") + @Override + protected final int getBufferSize() { + return this.anInt4645 - (this.aSourceDataLine1.available() >> (AudioChannel.stereo ? 2 : 1)); + } + + @OriginalMember(owner = "client!qa", name = "a", descriptor = "()V") + @Override + protected final void write() { + @Pc(1) short local1 = 256; + if (AudioChannel.stereo) { + local1 = 512; + } + for (@Pc(9) int local9 = 0; local9 < local1; local9++) { + @Pc(17) int local17 = this.samples[local9]; + if ((local17 + 8388608 & 0xFF000000) != 0) { + local17 = local17 >> 31 ^ 0x7FFFFF; + } + this.aByteArray64[local9 * 2] = (byte) (local17 >> 8); + this.aByteArray64[local9 * 2 + 1] = (byte) (local17 >> 16); + } + this.aSourceDataLine1.write(this.aByteArray64, 0, local1 << 1); + } +} diff --git a/client/src/main/java/rt4/JavaMouseWheel.java b/client/src/main/java/rt4/JavaMouseWheel.java new file mode 100644 index 0000000..dd06da5 --- /dev/null +++ b/client/src/main/java/rt4/JavaMouseWheel.java @@ -0,0 +1,47 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.Component; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; + +import static rt4.MathUtils.clamp; + +@OriginalClass("client!o") +public final class JavaMouseWheel extends MouseWheel implements MouseWheelListener { + + @OriginalMember(owner = "client!o", name = "g", descriptor = "I") + public int currentRotation = 0; + public int previousRotation = 0; + + @OriginalMember(owner = "client!o", name = "a", descriptor = "(ZLjava/awt/Component;)V") + @Override + public final void stop(@OriginalArg(1) Component arg0) { + arg0.removeMouseWheelListener(this); + } + + @OriginalMember(owner = "client!o", name = "a", descriptor = "(I)I") + @Override + public final synchronized int getRotation() { + @Pc(2) int local2 = this.currentRotation; + this.currentRotation = 0; + return local2; + } + + @OriginalMember(owner = "client!o", name = "mouseWheelMoved", descriptor = "(Ljava/awt/event/MouseWheelEvent;)V") + @Override + public final synchronized void mouseWheelMoved(@OriginalArg(0) MouseWheelEvent arg0) { + this.previousRotation = this.currentRotation; + this.currentRotation += arg0.getWheelRotation(); + } + + @OriginalMember(owner = "client!o", name = "a", descriptor = "(Ljava/awt/Component;I)V") + @Override + public final void start(@OriginalArg(0) Component arg0) { + arg0.addMouseWheelListener(this); + } +} diff --git a/client/src/main/java/rt4/Js5.java b/client/src/main/java/rt4/Js5.java new file mode 100644 index 0000000..06fc398 --- /dev/null +++ b/client/src/main/java/rt4/Js5.java @@ -0,0 +1,501 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.util.Arrays; + +@OriginalClass("client!ve") +public final class Js5 { + + @OriginalMember(owner = "client!sh", name = "k", descriptor = "Z") + public static final boolean RAISE_EXCEPTIONS = false; + + @OriginalMember(owner = "client!ve", name = "A", descriptor = "[[Ljava/lang/Object;") + private Object[][] unpacked; + + @OriginalMember(owner = "client!ve", name = "M", descriptor = "[Ljava/lang/Object;") + private Object[] packed; + + @OriginalMember(owner = "client!ve", name = "o", descriptor = "Lclient!ii;") + private Js5Index index = null; + + @OriginalMember(owner = "client!ve", name = "i", descriptor = "Lclient!v;") + private final Js5ResourceProvider provider; + + @OriginalMember(owner = "client!ve", name = "c", descriptor = "Z") + private final boolean discardPacked; + + @OriginalMember(owner = "client!ve", name = "g", descriptor = "Z") + private final boolean discardUnpacked; + + @OriginalMember(owner = "client!ve", name = "", descriptor = "(Lclient!v;ZZ)V") + public Js5(@OriginalArg(0) Js5ResourceProvider provider, @OriginalArg(1) boolean discardPacked, @OriginalArg(2) boolean discardUnpacked) { + this.provider = provider; + this.discardPacked = discardPacked; + this.discardUnpacked = discardUnpacked; + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(B)Z") + public final boolean fetchAll() { + if (!this.isIndexReady()) { + return false; + } + @Pc(20) boolean success = true; + for (@Pc(22) int i = 0; i < this.index.groupIds.length; i++) { + @Pc(38) int groupId = this.index.groupIds[i]; + if (this.packed[groupId] == null) { + this.fetchGroup(groupId); + if (this.packed[groupId] == null) { + success = false; + } + } + } + return success; + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(II)I") + private int getPercentageComplete(@OriginalArg(0) int group) { + if (this.isGroupValid(group)) { + return this.packed[group] == null ? this.provider.getPercentageComplete(group) : 100; + } else { + return 0; + } + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(IZZ)V") + public final void discardNames(@OriginalArg(1) boolean groups) { + if (!this.isIndexReady()) { + return; + } + if (groups) { + this.index.groupNameHashes = null; + this.index.groupNameHashTable = null; + } + this.index.fileNameHashTables = null; + this.index.fileNameHashes = null; + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(ILclient!na;)I") + public final int getPercentageComplete(@OriginalArg(1) JagString group) { + if (this.isIndexReady()) { + @Pc(15) JagString lower = group.toLowerCase(); + @Pc(29) int groupId = this.index.groupNameHashTable.get(lower.getHash()); + return this.getPercentageComplete(groupId); + } else { + return 0; + } + } + + @OriginalMember(owner = "client!ve", name = "b", descriptor = "(II)Z") + public final boolean isGroupReady(@OriginalArg(1) int group) { + if (!this.isGroupValid(group)) { + return false; + } else if (this.packed[group] == null) { + this.fetchGroup(group); + return this.packed[group] != null; + } else { + return true; + } + } + + @OriginalMember(owner = "client!ve", name = "b", descriptor = "(B)I") + public final int getChecksum() { + if (!this.isIndexReady()) { + throw new IllegalStateException(""); + } + return this.index.checksum; + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(Lclient!na;B)I") + public final int getGroupId(@OriginalArg(0) JagString group) { + if (this.isIndexReady()) { + @Pc(16) JagString lower = group.toLowerCase(); + @Pc(27) int groupId = this.index.groupNameHashTable.get(lower.getHash()); + return this.isGroupValid(groupId) ? groupId : -1; + } else { + return -1; + } + } + + @OriginalMember(owner = "client!ve", name = "b", descriptor = "(I)I") + public final int capacity() { + return this.isIndexReady() ? this.index.groupCapacities.length : -1; + } + + @OriginalMember(owner = "client!ve", name = "c", descriptor = "(I)Z") + private boolean isIndexReady() { + if (this.index == null) { + this.index = this.provider.fetchIndex(); + if (this.index == null) { + return false; + } + this.unpacked = new Object[this.index.capacity][]; + this.packed = new Object[this.index.capacity]; + } + return true; + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(ILclient!na;Lclient!na;)[B") + public final byte[] fetchFile(@OriginalArg(1) JagString file, @OriginalArg(2) JagString group) { + if (!this.isIndexReady()) { + return null; + } + @Pc(15) JagString groupLower = group.toLowerCase(); + @Pc(19) JagString fileLower = file.toLowerCase(); + @Pc(28) int groupId = this.index.groupNameHashTable.get(groupLower.getHash()); + if (this.isGroupValid(groupId)) { + @Pc(53) int fileId = this.index.fileNameHashTables[groupId].get(fileLower.getHash()); + return this.fetchFile(groupId, fileId); + } else { + return null; + } + } + + @OriginalMember(owner = "client!ve", name = "b", descriptor = "(ILclient!na;)V") + public final void prefetchGroup(@OriginalArg(1) JagString group) { + if (this.isIndexReady()) { + @Pc(13) JagString lower = group.toLowerCase(); + @Pc(22) int groupId = this.index.groupNameHashTable.get(lower.getHash()); + this.prefetchGroup(groupId); + } + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(Lclient!na;BLclient!na;)Z") + public final boolean isFileReady(@OriginalArg(0) JagString file, @OriginalArg(2) JagString group) { + if (!this.isIndexReady()) { + return false; + } + @Pc(17) JagString groupLower = group.toLowerCase(); + @Pc(21) JagString fileLower = file.toLowerCase(); + @Pc(30) int groupId = this.index.groupNameHashTable.get(groupLower.getHash()); + if (this.isGroupValid(groupId)) { + @Pc(49) int fileId = this.index.fileNameHashTables[groupId].get(fileLower.getHash()); + return this.isFileReady(fileId, groupId); + } else { + return false; + } + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(I[III)[B") + public final byte[] fetchFile(@OriginalArg(0) int group, @OriginalArg(1) int[] key, @OriginalArg(3) int file) { + if (!this.isFileValid(group, file)) { + return null; + } + if (this.unpacked[group] == null || this.unpacked[group][file] == null) { + @Pc(30) boolean success = this.unpackGroup(group, key); + if (!success) { + this.fetchGroup(group); + success = this.unpackGroup(group, key); + if (!success) { + return null; + } + } + } + @Pc(64) byte[] bytes = ByteArray.unwrap(this.unpacked[group][file], false); + if (this.discardUnpacked) { + this.unpacked[group][file] = null; + if (this.index.groupCapacities[group] == 1) { + this.unpacked[group] = null; + } + } + return bytes; + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(BLclient!na;)Z") + public final boolean isGroupReady(@OriginalArg(1) JagString group) { + if (this.isIndexReady()) { + @Pc(14) JagString lower = group.toLowerCase(); + @Pc(25) int groupId = this.index.groupNameHashTable.get(lower.getHash()); + return this.isGroupReady(groupId); + } else { + return false; + } + } + + @OriginalMember(owner = "client!ve", name = "c", descriptor = "(II)V") + public final void discardUnpacked(@OriginalArg(1) int group) { + if (this.isGroupValid(group) && this.unpacked != null) { + this.unpacked[group] = null; + } + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(BII)Z") + public final boolean isFileReady(@OriginalArg(1) int file, @OriginalArg(2) int group) { + if (!this.isFileValid(group, file)) { + return false; + } else if (this.unpacked[group] != null && this.unpacked[group][file] != null) { + return true; + } else if (this.packed[group] == null) { + this.fetchGroup(group); + return this.packed[group] != null; + } else { + return true; + } + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(ZI)Z") + private boolean isGroupValid(@OriginalArg(1) int group) { + if (!this.isIndexReady()) { + return false; + } else if (group >= 0 && this.index.groupCapacities.length > group && this.index.groupCapacities[group] != 0) { + return true; + } else if (RAISE_EXCEPTIONS) { + throw new IllegalArgumentException(Integer.toString(group)); + } else { + return false; + } + } + + @OriginalMember(owner = "client!ve", name = "d", descriptor = "(II)V") + private void prefetchGroup(@OriginalArg(1) int group) { + this.provider.prefetchGroup(group); + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(IZ[I)Z") + private boolean unpackGroup(@OriginalArg(0) int group, @OriginalArg(2) int[] key) { + if (!this.isGroupValid(group)) { + return false; + } else if (this.packed[group] == null) { + return false; + } else { + @Pc(25) int[] fileIds = this.index.fileIds[group]; + @Pc(31) int groupSize = this.index.groupSizes[group]; + if (this.unpacked[group] == null) { + this.unpacked[group] = new Object[this.index.groupCapacities[group]]; + } + @Pc(48) boolean valid = true; + @Pc(53) Object[] unpacked = this.unpacked[group]; + for (@Pc(55) int i = 0; i < groupSize; i++) { + @Pc(62) int fileId; + if (fileIds == null) { + fileId = i; + } else { + fileId = fileIds[i]; + } + if (unpacked[fileId] == null) { + valid = false; + break; + } + } + if (valid) { + return true; + } + @Pc(114) byte[] compressed; + if (key == null || key[0] == 0 && key[1] == 0 && key[2] == 0 && key[3] == 0) { + compressed = ByteArray.unwrap(this.packed[group], false); + } else { + compressed = ByteArray.unwrap(this.packed[group], true); + @Pc(128) Buffer buffer = new Buffer(compressed); + buffer.tinydec(key, buffer.data.length); + } + @Pc(140) byte[] uncompressed; + try { + uncompressed = Js5Compression.uncompress(compressed); + } catch (@Pc(142) RuntimeException ex) { + ex.printStackTrace(); + System.out.println("T3 - " + (key != null) + "," + group + "," + compressed.length + "," + Buffer.crc32(compressed, compressed.length) + "," + Buffer.crc32(compressed, compressed.length - 2) + "," + this.index.groupChecksums[group] + "," + this.index.checksum); + uncompressed = new byte[]{0}; + } + if (this.discardPacked) { + this.packed[group] = null; + } + @Pc(213) int start; + if (groupSize > 1) { + start = uncompressed.length; + @Pc(216) int position = start - 1; + @Pc(220) int stripes = uncompressed[position] & 0xFF; + @Pc(228) int bufferPosition = position - groupSize * stripes * 4; + @Pc(233) Buffer buffer = new Buffer(uncompressed); + buffer.offset = bufferPosition; + @Pc(239) int[] lens = new int[groupSize]; + @Pc(250) int len; + @Pc(252) int j; + for (@Pc(241) int i = 0; i < stripes; i++) { + len = 0; + for (j = 0; j < groupSize; j++) { + len += buffer.g4(); + lens[j] += len; + } + } + @Pc(282) byte[][] extracted = new byte[groupSize][]; + for (len = 0; len < groupSize; len++) { + extracted[len] = new byte[lens[len]]; + lens[len] = 0; + } + buffer.offset = bufferPosition; + len = 0; + @Pc(320) int off; + for (j = 0; j < stripes; j++) { + off = 0; + for (@Pc(322) int k = 0; k < groupSize; k++) { + off += buffer.g4(); + JagString.copy(uncompressed, len, extracted[k], lens[k], off); + len += off; + lens[k] += off; + } + } + for (j = 0; j < groupSize; j++) { + if (fileIds == null) { + off = j; + } else { + off = fileIds[j]; + } + if (this.discardUnpacked) { + unpacked[off] = extracted[j]; + } else { + unpacked[off] = ByteArray.wrap(extracted[j]); + } + } + } else { + if (fileIds == null) { + start = 0; + } else { + start = fileIds[0]; + } + if (this.discardUnpacked) { + unpacked[start] = uncompressed; + } else { + unpacked[start] = ByteArray.wrap(uncompressed); + } + } + return true; + } + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(IBI)[B") + public final byte[] fetchFile(@OriginalArg(0) int group, @OriginalArg(2) int file) { + return this.fetchFile(group, null, file); + } + + @OriginalMember(owner = "client!ve", name = "b", descriptor = "(ZI)V") + private void fetchGroup(@OriginalArg(1) int group) { + if (this.discardPacked) { + this.packed[group] = this.provider.fetchGroup(group); + } else { + this.packed[group] = ByteArray.wrap(this.provider.fetchGroup(group)); + } + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(Lclient!na;I)Z") + public final boolean isGroupNameValid(@OriginalArg(0) JagString group) { + if (this.isIndexReady()) { + @Pc(19) JagString lower = group.toLowerCase(); + @Pc(28) int groupId = this.index.groupNameHashTable.get(lower.getHash()); + return groupId >= 0; + } else { + return false; + } + } + + @OriginalMember(owner = "client!ve", name = "c", descriptor = "(B)I") + public final int getPercentageComplete() { + if (!this.isIndexReady()) { + return 0; + } + @Pc(18) int total = 0; + @Pc(20) int complete = 0; + for (@Pc(22) int i = 0; i < this.packed.length; i++) { + if (this.index.groupSizes[i] > 0) { + total += 100; + complete += this.getPercentageComplete(i); + } + } + if (total == 0) { + return 100; + } else { + return complete * 100 / total; + } + } + + @OriginalMember(owner = "client!ve", name = "d", descriptor = "(B)V") + public final void discardUnpacked() { + if (this.unpacked != null) { + Arrays.fill(this.unpacked, null); + } + } + + @OriginalMember(owner = "client!ve", name = "e", descriptor = "(II)[B") + public final byte[] fetchFile(@OriginalArg(0) int id) { + if (!this.isIndexReady()) { + return null; + } else if (this.index.groupCapacities.length == 1) { + return this.fetchFile(0, id); + } else if (!this.isGroupValid(id)) { + return null; + } else if (this.index.groupCapacities[id] == 1) { + return this.fetchFile(id, 0); + } else { + throw new RuntimeException(); + } + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(III)Z") + private boolean isFileValid(@OriginalArg(0) int group, @OriginalArg(2) int file) { + if (!this.isIndexReady()) { + return false; + } else if (group >= 0 && file >= 0 && this.index.groupCapacities.length > group && this.index.groupCapacities[group] > file) { + return true; + } else if (RAISE_EXCEPTIONS) { + throw new IllegalArgumentException(group + "," + file); + } else { + return false; + } + } + + @OriginalMember(owner = "client!ve", name = "b", descriptor = "(III)[B") + public final byte[] fetchFileNoDiscard(@OriginalArg(0) int file, @OriginalArg(1) int group) { + if (!this.isFileValid(group, file)) { + return null; + } + if (this.unpacked[group] == null || this.unpacked[group][file] == null) { + @Pc(34) boolean success = this.unpackGroup(group, null); + if (!success) { + this.fetchGroup(group); + success = this.unpackGroup(group, null); + if (!success) { + return null; + } + } + } + return ByteArray.unwrap(this.unpacked[group][file], false); + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(BI)[I") + public final int[] getFileIds(@OriginalArg(1) int group) { + if (!this.isGroupValid(group)) { + return null; + } + @Pc(22) int[] fileIds = this.index.fileIds[group]; + if (fileIds == null) { + fileIds = new int[this.index.groupSizes[group]]; + @Pc(34) int i = 0; + while (fileIds.length > i) { + fileIds[i] = i++; + } + } + return fileIds; + } + + @OriginalMember(owner = "client!ve", name = "a", descriptor = "(IB)I") + public final int getGroupCapacity(@OriginalArg(0) int group) { + return this.isGroupValid(group) ? this.index.groupCapacities[group] : 0; + } + + @OriginalMember(owner = "client!ve", name = "f", descriptor = "(II)Z") + public final boolean isFileReady(@OriginalArg(1) int id) { + if (!this.isIndexReady()) { + return false; + } else if (this.index.groupCapacities.length == 1) { + return this.isFileReady(id, 0); + } else if (!this.isGroupValid(id)) { + return false; + } else if (this.index.groupCapacities[id] == 1) { + return this.isFileReady(0, id); + } else { + throw new RuntimeException(); + } + } +} diff --git a/client/src/main/java/rt4/Js5CacheQueue.java b/client/src/main/java/rt4/Js5CacheQueue.java new file mode 100644 index 0000000..e97c9c6 --- /dev/null +++ b/client/src/main/java/rt4/Js5CacheQueue.java @@ -0,0 +1,132 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!k") +public final class Js5CacheQueue implements Runnable { + + @OriginalMember(owner = "client!k", name = "q", descriptor = "Lclient!ce;") + private final SecondaryLinkedList queue = new SecondaryLinkedList(); + + @OriginalMember(owner = "client!k", name = "s", descriptor = "I") + public int size = 0; + + @OriginalMember(owner = "client!k", name = "w", descriptor = "Z") + private boolean stop = false; + + @OriginalMember(owner = "client!k", name = "v", descriptor = "Ljava/lang/Thread;") + private Thread thread; + + @OriginalMember(owner = "client!k", name = "", descriptor = "()V") + public Js5CacheQueue() { + @Pc(20) PrivilegedRequest request = GameShell.signLink.startThread(5, this); + while (request.status == 0) { + ThreadUtils.sleep(10L); + } + if (request.status == 2) { + throw new RuntimeException(); + } + this.thread = (Thread) request.result; + } + + @OriginalMember(owner = "client!k", name = "a", descriptor = "(Lclient!c;I)V") + private void enqueue(@OriginalArg(0) Js5CacheRequest arg0) { + synchronized (this.queue) { + this.queue.addTail(arg0); + this.size++; + this.queue.notifyAll(); + } + } + + @OriginalMember(owner = "client!k", name = "a", descriptor = "(I)V") + public final void quit() { + this.stop = true; + synchronized (this.queue) { + this.queue.notifyAll(); + } + try { + this.thread.join(); + } catch (@Pc(23) InterruptedException ignored) { + } + this.thread = null; + } + + @OriginalMember(owner = "client!k", name = "a", descriptor = "(Lclient!ge;I[BI)Lclient!c;") + public final Js5CacheRequest write(@OriginalArg(0) Cache arg0, @OriginalArg(2) byte[] arg1, @OriginalArg(3) int arg2) { + @Pc(7) Js5CacheRequest request = new Js5CacheRequest(); + request.data = arg1; + request.urgent = false; + request.secondaryKey = arg2; + request.cache = arg0; + request.type = 2; + this.enqueue(request); + return request; + } + + @OriginalMember(owner = "client!k", name = "a", descriptor = "(IILclient!ge;)Lclient!c;") + public final Js5CacheRequest read(@OriginalArg(0) int arg0, @OriginalArg(2) Cache arg1) { + @Pc(7) Js5CacheRequest local7 = new Js5CacheRequest(); + local7.cache = arg1; + local7.type = 3; + local7.urgent = false; + local7.secondaryKey = arg0; + this.enqueue(local7); + return local7; + } + + @OriginalMember(owner = "client!k", name = "a", descriptor = "(Lclient!ge;BI)Lclient!c;") + public final Js5CacheRequest readSynchronous(@OriginalArg(0) Cache arg0, @OriginalArg(2) int arg1) { + @Pc(9) Js5CacheRequest local9 = new Js5CacheRequest(); + local9.type = 1; + synchronized (this.queue) { + @Pc(31) Js5CacheRequest local31 = (Js5CacheRequest) this.queue.head(); + while (true) { + if (local31 == null) { + break; + } + if (local31.secondaryKey == (long) arg1 && local31.cache == arg0 && local31.type == 2) { + local9.data = local31.data; + local9.incomplete = false; + return local9; + } + local31 = (Js5CacheRequest) this.queue.next(); + } + } + local9.data = arg0.read(arg1); + local9.incomplete = false; + local9.urgent = true; + return local9; + } + + @OriginalMember(owner = "client!k", name = "run", descriptor = "()V") + @Override + public final void run() { + while (!this.stop) { + @Pc(19) Js5CacheRequest local19; + synchronized (this.queue) { + local19 = (Js5CacheRequest) this.queue.removeHead(); + if (local19 == null) { + try { + this.queue.wait(); + } catch (@Pc(35) InterruptedException ignored) { + } + continue; + } + this.size--; + } + try { + if (local19.type == 2) { + local19.cache.write((int) local19.secondaryKey, local19.data.length, local19.data); + } else if (local19.type == 3) { + local19.data = local19.cache.read((int) local19.secondaryKey); + } + } catch (@Pc(83) Exception local83) { + TracingException.report(null, local83); + } + local19.incomplete = false; + } + } +} diff --git a/client/src/main/java/rt4/Js5CacheRequest.java b/client/src/main/java/rt4/Js5CacheRequest.java new file mode 100644 index 0000000..3544557 --- /dev/null +++ b/client/src/main/java/rt4/Js5CacheRequest.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!c") +public final class Js5CacheRequest extends Js5Request { + + @OriginalMember(owner = "client!c", name = "X", descriptor = "Lclient!ge;") + public Cache cache; + + @OriginalMember(owner = "client!c", name = "ab", descriptor = "[B") + public byte[] data; + + @OriginalMember(owner = "client!c", name = "cb", descriptor = "I") + public int type; + + @OriginalMember(owner = "client!c", name = "b", descriptor = "(Z)[B") + @Override + public final byte[] getData() { + if (this.incomplete) { + throw new RuntimeException(); + } + return this.data; + } + + @OriginalMember(owner = "client!c", name = "a", descriptor = "(Z)I") + @Override + public final int getPercentageComplete() { + return this.incomplete ? 0 : 100; + } +} diff --git a/client/src/main/java/rt4/Js5CachedResourceProvider.java b/client/src/main/java/rt4/Js5CachedResourceProvider.java new file mode 100644 index 0000000..c4852e5 --- /dev/null +++ b/client/src/main/java/rt4/Js5CachedResourceProvider.java @@ -0,0 +1,476 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.util.zip.CRC32; + +@OriginalClass("client!bg") +public final class Js5CachedResourceProvider extends Js5ResourceProvider { + + @OriginalMember(owner = "client!fn", name = "X", descriptor = "Ljava/util/zip/CRC32;") + public static final CRC32 crc32 = new CRC32(); + + @OriginalMember(owner = "client!bg", name = "m", descriptor = "Lclient!ii;") + private Js5Index index; + + @OriginalMember(owner = "client!bg", name = "w", descriptor = "[B") + private byte[] groupStatus; + + @OriginalMember(owner = "client!bg", name = "T", descriptor = "Z") + private boolean prefetchAll; + + @OriginalMember(owner = "client!bg", name = "u", descriptor = "I") + private int verifiedGroups = 0; + + @OriginalMember(owner = "client!bg", name = "p", descriptor = "Lclient!sc;") + private final HashTable requests = new HashTable(16); + + @OriginalMember(owner = "client!bg", name = "S", descriptor = "I") + private int group = 0; + + @OriginalMember(owner = "client!bg", name = "R", descriptor = "Lclient!ih;") + private final LinkedList prefetchQueue = new LinkedList(); + + @OriginalMember(owner = "client!bg", name = "V", descriptor = "J") + private long orphanCheckTime = 0L; + + @OriginalMember(owner = "client!bg", name = "L", descriptor = "I") + private final int archive; + + @OriginalMember(owner = "client!bg", name = "F", descriptor = "Lclient!ge;") + private final Cache cache; + + @OriginalMember(owner = "client!bg", name = "Q", descriptor = "Z") + private boolean verifyAll; + + @OriginalMember(owner = "client!bg", name = "U", descriptor = "Lclient!ih;") + private LinkedList groupQueue; + + @OriginalMember(owner = "client!bg", name = "J", descriptor = "Lclient!k;") + private final Js5CacheQueue cacheQueue; + + @OriginalMember(owner = "client!bg", name = "H", descriptor = "I") + private final int expectedChecksum; + + @OriginalMember(owner = "client!bg", name = "W", descriptor = "Z") + private final boolean discardOrphans; + + @OriginalMember(owner = "client!bg", name = "k", descriptor = "Lclient!ge;") + private final Cache masterCache; + + @OriginalMember(owner = "client!bg", name = "D", descriptor = "Lclient!jb;") + private final Js5NetQueue netQueue; + + @OriginalMember(owner = "client!bg", name = "t", descriptor = "I") + private final int expectedVersion; + + @OriginalMember(owner = "client!bg", name = "x", descriptor = "Lclient!il;") + private Js5Request indexRequest; + + @OriginalMember(owner = "client!bg", name = "", descriptor = "(ILclient!ge;Lclient!ge;Lclient!jb;Lclient!k;IIZ)V") + public Js5CachedResourceProvider(@OriginalArg(0) int archive, @OriginalArg(1) Cache cache, @OriginalArg(2) Cache masterCache, @OriginalArg(3) Js5NetQueue netQueue, @OriginalArg(4) Js5CacheQueue cacheQueue, @OriginalArg(5) int expectedChecksum, @OriginalArg(6) int expectedVersion, @OriginalArg(7) boolean discardOrphans) { + this.archive = archive; + this.cache = cache; + if (this.cache == null) { + this.verifyAll = false; + } else { + this.verifyAll = true; + this.groupQueue = new LinkedList(); + } + this.cacheQueue = cacheQueue; + this.expectedChecksum = expectedChecksum; + this.discardOrphans = discardOrphans; + this.masterCache = masterCache; + this.netQueue = netQueue; + this.expectedVersion = expectedVersion; + if (this.masterCache != null) { + this.indexRequest = this.cacheQueue.readSynchronous(this.masterCache, this.archive); + } + } + + @OriginalMember(owner = "client!bg", name = "a", descriptor = "(II)V") + @Override + public final void prefetchGroup(@OriginalArg(0) int arg0) { + if (this.cache == null) { + return; + } + @Pc(15) Node node; + for (node = this.prefetchQueue.head(); node != null; node = this.prefetchQueue.next()) { + if (node.key == (long) arg0) { + return; + } + } + node = new Node(); + node.key = arg0; + this.prefetchQueue.addTail(node); + } + + @OriginalMember(owner = "client!bg", name = "b", descriptor = "(I)Lclient!ii;") + @Override + public final Js5Index fetchIndex() { + if (this.index != null) { + return this.index; + } + if (this.indexRequest == null) { + if (this.netQueue.isUrgentRequestQueueFull()) { + return null; + } + this.indexRequest = this.netQueue.read(255, (byte) 0, this.archive, true); + } + if (this.indexRequest.incomplete) { + return null; + } + @Pc(52) byte[] local52 = this.indexRequest.getData(); + if (this.indexRequest instanceof Js5CacheRequest) { + try { + if (local52 == null) { + throw new RuntimeException(); + } + this.index = new Js5Index(local52, this.expectedChecksum); + if (this.expectedVersion != this.index.version) { + throw new RuntimeException(); + } + } catch (@Pc(88) RuntimeException local88) { + this.index = null; + if (this.netQueue.isUrgentRequestQueueFull()) { + this.indexRequest = null; + } else { + this.indexRequest = this.netQueue.read(255, (byte) 0, this.archive, true); + } + return null; + } + } else { + try { + if (local52 == null) { + throw new RuntimeException(); + } + this.index = new Js5Index(local52, this.expectedChecksum); + } catch (@Pc(131) RuntimeException ignored) { + this.netQueue.rekey(); + this.index = null; + if (this.netQueue.isUrgentRequestQueueFull()) { + this.indexRequest = null; + } else { + this.indexRequest = this.netQueue.read(255, (byte) 0, this.archive, true); + } + return null; + } + if (this.masterCache != null) { + this.cacheQueue.write(this.masterCache, local52, this.archive); + } + } + if (this.cache != null) { + this.groupStatus = new byte[this.index.capacity]; + this.verifiedGroups = 0; + } + this.indexRequest = null; + return this.index; + } + + @OriginalMember(owner = "client!bg", name = "a", descriptor = "(Z)V") + public final void prefetchAll() { + if (this.cache != null) { + this.prefetchAll = true; + if (this.groupQueue == null) { + this.groupQueue = new LinkedList(); + } + } + } + + @OriginalMember(owner = "client!bg", name = "c", descriptor = "(I)I") + public final int getVerifiedGroups() { + return this.verifiedGroups; + } + + @OriginalMember(owner = "client!bg", name = "d", descriptor = "(I)I") + public final int getTotalVerifiedGroups() { + if (this.index == null) { + return 0; + } else if (this.verifyAll) { + @Pc(25) Node node = this.groupQueue.head(); + return node == null ? 0 : (int) node.key; + } else { + return this.index.size; + } + } + + @OriginalMember(owner = "client!bg", name = "c", descriptor = "(Z)V") + public final void loop() { + if (this.groupQueue != null) { + if (this.fetchIndex() == null) { + return; + } + @Pc(32) boolean local32; + @Pc(37) Node local37; + @Pc(43) int local43; + if (this.verifyAll) { + local32 = true; + for (local37 = this.groupQueue.head(); local37 != null; local37 = this.groupQueue.next()) { + local43 = (int) local37.key; + if (this.groupStatus[local43] == 0) { + this.fetchGroupInner(1, local43); + } + if (this.groupStatus[local43] == 0) { + local32 = false; + } else { + local37.unlink(); + } + } + while (this.index.groupSizes.length > this.group) { + if (this.index.groupSizes[this.group] == 0) { + this.group++; + } else { + if (this.cacheQueue.size >= 250) { + local32 = false; + break; + } + if (this.groupStatus[this.group] == 0) { + this.fetchGroupInner(1, this.group); + } + if (this.groupStatus[this.group] == 0) { + local32 = false; + local37 = new Node(); + local37.key = this.group; + this.groupQueue.addTail(local37); + } + this.group++; + } + } + if (local32) { + this.verifyAll = false; + this.group = 0; + } + } else if (this.prefetchAll) { + local32 = true; + for (local37 = this.groupQueue.head(); local37 != null; local37 = this.groupQueue.next()) { + local43 = (int) local37.key; + if (this.groupStatus[local43] != 1) { + this.fetchGroupInner(2, local43); + } + if (this.groupStatus[local43] == 1) { + local37.unlink(); + } else { + local32 = false; + } + } + while (this.index.groupSizes.length > this.group) { + if (this.index.groupSizes[this.group] == 0) { + this.group++; + } else { + if (this.netQueue.isPrefetchRequestQueueFull()) { + local32 = false; + break; + } + if (this.groupStatus[this.group] != 1) { + this.fetchGroupInner(2, this.group); + } + if (this.groupStatus[this.group] != 1) { + local37 = new Node(); + local37.key = this.group; + this.groupQueue.addTail(local37); + local32 = false; + } + this.group++; + } + } + if (local32) { + this.group = 0; + this.prefetchAll = false; + } + } else { + this.groupQueue = null; + } + } + if (!this.discardOrphans || this.orphanCheckTime > MonotonicClock.currentTimeMillis()) { + return; + } + for (@Pc(331) Js5Request request = (Js5Request) this.requests.head(); request != null; request = (Js5Request) this.requests.next()) { + if (!request.incomplete) { + if (request.orphan) { + if (!request.urgent) { + throw new RuntimeException(); + } + request.unlink(); + } else { + request.orphan = true; + } + } + } + this.orphanCheckTime = MonotonicClock.currentTimeMillis() + 1000L; + } + + @OriginalMember(owner = "client!bg", name = "b", descriptor = "(II)I") + @Override + public final int getPercentageComplete(@OriginalArg(0) int arg0) { + @Pc(15) Js5Request request = (Js5Request) this.requests.get(arg0); + return request == null ? 0 : request.getPercentageComplete(); + } + + @OriginalMember(owner = "client!bg", name = "b", descriptor = "(B)I") + public final int getIndexSize() { + return this.index == null ? 0 : this.index.size; + } + + @OriginalMember(owner = "client!bg", name = "a", descriptor = "(III)Lclient!il;") + private Js5Request fetchGroupInner(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(13) Js5Request local13 = (Js5Request) this.requests.get(arg1); + if (local13 != null && arg0 == 0 && !local13.urgent && local13.incomplete) { + local13.unlink(); + local13 = null; + } + if (local13 == null) { + if (arg0 == 0) { + if (this.cache == null || this.groupStatus[arg1] == -1) { + if (this.netQueue.isUrgentRequestQueueFull()) { + return null; + } + local13 = this.netQueue.read(this.archive, (byte) 2, arg1, true); + } else { + local13 = this.cacheQueue.readSynchronous(this.cache, arg1); + } + } else if (arg0 == 1) { + if (this.cache == null) { + throw new RuntimeException(); + } + local13 = this.cacheQueue.read(arg1, this.cache); + } else if (arg0 == 2) { + if (this.cache == null) { + throw new RuntimeException(); + } + if (this.groupStatus[arg1] != -1) { + throw new RuntimeException(); + } + if (this.netQueue.isPrefetchRequestQueueFull()) { + return null; + } + local13 = this.netQueue.read(this.archive, (byte) 2, arg1, false); + } else { + throw new RuntimeException(); + } + this.requests.put(local13, arg1); + } + if (local13.incomplete) { + return null; + } + @Pc(161) byte[] local161 = local13.getData(); + @Pc(199) int local199; + @Pc(252) Js5NetRequest local252; + if (!(local13 instanceof Js5CacheRequest)) { + try { + if (local161 == null || local161.length <= 2) { + throw new RuntimeException(); + } + crc32.reset(); + crc32.update(local161, 0, local161.length - 2); + local199 = (int) crc32.getValue(); + if (this.index.groupChecksums[arg1] != local199) { + throw new RuntimeException(); + } + this.netQueue.errors = 0; + this.netQueue.response = 0; + } catch (@Pc(225) RuntimeException local225) { + this.netQueue.rekey(); + local13.unlink(); + if (local13.urgent && !this.netQueue.isUrgentRequestQueueFull()) { + local252 = this.netQueue.read(this.archive, (byte) 2, arg1, true); + this.requests.put(local252, arg1); + } + return null; + } + local161[local161.length - 2] = (byte) (this.index.groupVersions[arg1] >>> 8); + local161[local161.length - 1] = (byte) this.index.groupVersions[arg1]; + if (this.cache != null) { + this.cacheQueue.write(this.cache, local161, arg1); + if (this.groupStatus[arg1] != 1) { + this.verifiedGroups++; + this.groupStatus[arg1] = 1; + } + } + if (!local13.urgent) { + local13.unlink(); + } + return local13; + } + try { + if (local161 == null || local161.length <= 2) { + throw new RuntimeException(); + } + crc32.reset(); + crc32.update(local161, 0, local161.length - 2); + local199 = (int) crc32.getValue(); + if (this.index.groupChecksums[arg1] != local199) { + throw new RuntimeException(); + } + @Pc(385) int local385 = ((local161[local161.length - 2] & 0xFF) << 8) + (local161[local161.length - 1] & 0xFF); + if (local385 != (this.index.groupVersions[arg1] & 0xFFFF)) { + throw new RuntimeException(); + } + if (this.groupStatus[arg1] != 1) { + if (this.groupStatus[arg1] != 0) { + } + this.verifiedGroups++; + this.groupStatus[arg1] = 1; + } + if (!local13.urgent) { + local13.unlink(); + } + return local13; + } catch (@Pc(437) Exception local437) { + this.groupStatus[arg1] = -1; + local13.unlink(); + if (local13.urgent && !this.netQueue.isUrgentRequestQueueFull()) { + local252 = this.netQueue.read(this.archive, (byte) 2, arg1, true); + this.requests.put(local252, arg1); + } + return null; + } + } + + @OriginalMember(owner = "client!bg", name = "e", descriptor = "(I)V") + public final void processPrefetchQueue() { + if (this.groupQueue == null || this.fetchIndex() == null) { + return; + } + for (@Pc(21) Node local21 = this.prefetchQueue.head(); local21 != null; local21 = this.prefetchQueue.next()) { + @Pc(28) int local28 = (int) local21.key; + if (local28 < 0 || this.index.capacity <= local28 || this.index.groupSizes[local28] == 0) { + local21.unlink(); + } else { + if (this.groupStatus[local28] == 0) { + this.fetchGroupInner(1, local28); + } + if (this.groupStatus[local28] == -1) { + this.fetchGroupInner(2, local28); + } + if (this.groupStatus[local28] == 1) { + local21.unlink(); + } + } + } + } + + @OriginalMember(owner = "client!bg", name = "f", descriptor = "(I)I") + public final int getIndexPercentageComplete() { + if (this.fetchIndex() == null) { + return this.indexRequest == null ? 0 : this.indexRequest.getPercentageComplete(); + } else { + return 100; + } + } + + @OriginalMember(owner = "client!bg", name = "c", descriptor = "(II)[B") + @Override + public final byte[] fetchGroup(@OriginalArg(0) int arg0) { + @Pc(9) Js5Request local9 = this.fetchGroupInner(0, arg0); + if (local9 == null) { + return null; + } else { + @Pc(17) byte[] local17 = local9.getData(); + local9.unlink(); + return local17; + } + } +} diff --git a/client/src/main/java/rt4/Js5Compression.java b/client/src/main/java/rt4/Js5Compression.java new file mode 100644 index 0000000..2892028 --- /dev/null +++ b/client/src/main/java/rt4/Js5Compression.java @@ -0,0 +1,40 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public final class Js5Compression { + + @OriginalMember(owner = "client!mf", name = "x", descriptor = "Lclient!ha;") + public static final GzipDecompressor GZIP_DECOMPRESSOR = new GzipDecompressor(); + + @OriginalMember(owner = "client!kf", name = "j", descriptor = "I") + public static final int MAX_LENGTH = 0; + + @OriginalMember(owner = "client!ml", name = "a", descriptor = "(B[B)[B") + public static byte[] uncompress(@OriginalArg(1) byte[] in) { + @Pc(17) Buffer buffer = new Buffer(in); + @Pc(21) int type = buffer.g1(); + @Pc(25) int len = buffer.g4(); + if (len < 0 || MAX_LENGTH != 0 && MAX_LENGTH < len) { + throw new RuntimeException(); + } else if (type == 0) { + @Pc(53) byte[] bytes = new byte[len]; + buffer.gdata(len, bytes); + return bytes; + } else { + @Pc(65) int uncompressedLen = buffer.g4(); + if (uncompressedLen < 0 || MAX_LENGTH != 0 && MAX_LENGTH < uncompressedLen) { + throw new RuntimeException(); + } + @Pc(85) byte[] out = new byte[uncompressedLen]; + if (type == 1) { + Bzip2Decompressor.bunzip2(out, uncompressedLen, in, len); + } else { + GZIP_DECOMPRESSOR.method1842(out, buffer); + } + return out; + } + } +} diff --git a/client/src/main/java/rt4/Js5GlTextureProvider.java b/client/src/main/java/rt4/Js5GlTextureProvider.java new file mode 100644 index 0000000..783404b --- /dev/null +++ b/client/src/main/java/rt4/Js5GlTextureProvider.java @@ -0,0 +1,293 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!nk") +public final class Js5GlTextureProvider implements TextureProvider { + + @OriginalMember(owner = "client!nk", name = "z", descriptor = "Z") + private boolean lowDetail = false; + + @OriginalMember(owner = "client!nk", name = "J", descriptor = "I") + private int capacity = 50; + + @OriginalMember(owner = "client!nk", name = "b", descriptor = "Lclient!ve;") + private final Js5 aClass153_72; + + @OriginalMember(owner = "client!nk", name = "i", descriptor = "Lclient!ve;") + private final Js5 aClass153_73; + + @OriginalMember(owner = "client!nk", name = "P", descriptor = "Lclient!gn;") + private LruHashTable glTextures; + + @OriginalMember(owner = "client!nk", name = "G", descriptor = "Lclient!gn;") + private LruHashTable solidColorSprites; + + @OriginalMember(owner = "client!nk", name = "Q", descriptor = "[B") + private final byte[] aByteArray61; + + @OriginalMember(owner = "client!nk", name = "l", descriptor = "[B") + private final byte[] aByteArray60; + + @OriginalMember(owner = "client!nk", name = "h", descriptor = "[B") + private final byte[] aByteArray59; + + @OriginalMember(owner = "client!nk", name = "F", descriptor = "[S") + private final short[] aShortArray59; + + @OriginalMember(owner = "client!nk", name = "R", descriptor = "[B") + private final byte[] aByteArray62; + + @OriginalMember(owner = "client!nk", name = "k", descriptor = "[Z") + private final boolean[] aBooleanArray91; + + @OriginalMember(owner = "client!nk", name = "a", descriptor = "[Z") + private final boolean[] aBooleanArray89; + + @OriginalMember(owner = "client!nk", name = "c", descriptor = "[Z") + private final boolean[] aBooleanArray90; + + @OriginalMember(owner = "client!nk", name = "s", descriptor = "[Z") + private final boolean[] aBooleanArray92; + + @OriginalMember(owner = "client!nk", name = "D", descriptor = "[Z") + private final boolean[] aBooleanArray93; + + @OriginalMember(owner = "client!nk", name = "", descriptor = "(Lclient!ve;Lclient!ve;Lclient!ve;IZ)V") + public Js5GlTextureProvider(@OriginalArg(0) Js5 arg0, @OriginalArg(1) Js5 arg1, @OriginalArg(2) Js5 arg2, @OriginalArg(3) int arg3, @OriginalArg(4) boolean arg4) { + this.aClass153_72 = arg2; + this.lowDetail = arg4; + this.capacity = arg3; + this.aClass153_73 = arg0; + this.glTextures = new LruHashTable(this.capacity); + if (GlRenderer.enabled) { + this.solidColorSprites = new LruHashTable(this.capacity); + } else { + this.solidColorSprites = null; + } + + @Pc(51) Buffer local51 = new Buffer(arg1.fetchFile(0, 0)); + @Pc(55) int local55 = local51.g2(); + this.aByteArray61 = new byte[local55]; + this.aByteArray60 = new byte[local55]; + this.aByteArray59 = new byte[local55]; + this.aShortArray59 = new short[local55]; + this.aByteArray62 = new byte[local55]; + this.aBooleanArray91 = new boolean[local55]; + this.aBooleanArray89 = new boolean[local55]; + this.aBooleanArray90 = new boolean[local55]; + this.aBooleanArray92 = new boolean[local55]; + this.aBooleanArray93 = new boolean[local55]; + @Pc(97) int local97; + for (local97 = 0; local97 < local55; local97++) { + this.aBooleanArray92[local97] = local51.g1() == 1; + } + for (local97 = 0; local97 < local55; local97++) { + if (this.aBooleanArray92[local97]) { + this.aBooleanArray90[local97] = local51.g1() == 1; + } + } + for (local97 = 0; local97 < local55; local97++) { + if (this.aBooleanArray92[local97]) { + this.aBooleanArray91[local97] = local51.g1() == 1; + } + } + for (local97 = 0; local97 < local55; local97++) { + if (this.aBooleanArray92[local97]) { + this.aBooleanArray89[local97] = local51.g1() == 1; + } + } + for (local97 = 0; local97 < local55; local97++) { + if (this.aBooleanArray92[local97]) { + this.aBooleanArray93[local97] = local51.g1() == 1; + } + } + for (local97 = 0; local97 < local55; local97++) { + if (this.aBooleanArray92[local97]) { + this.aByteArray59[local97] = local51.g1b(); + } + } + for (local97 = 0; local97 < local55; local97++) { + if (this.aBooleanArray92[local97]) { + this.aByteArray60[local97] = local51.g1b(); + } + } + for (local97 = 0; local97 < local55; local97++) { + if (this.aBooleanArray92[local97]) { + this.aByteArray62[local97] = local51.g1b(); + } + } + for (local97 = 0; local97 < local55; local97++) { + if (this.aBooleanArray92[local97]) { + this.aByteArray61[local97] = local51.g1b(); + } + } + for (local97 = 0; local97 < local55; local97++) { + if (this.aBooleanArray92[local97]) { + this.aShortArray59[local97] = (short) local51.g2(); + } + } + } + + @OriginalMember(owner = "client!nk", name = "a", descriptor = "(ZI)V") + public final void method3239(@OriginalArg(1) int arg0) { + for (@Pc(19) GlTexture local19 = (GlTexture) this.glTextures.method1808(); local19 != null; local19 = (GlTexture) this.glTextures.next()) { + if (local19.aBoolean287) { + local19.method4300(arg0); + local19.aBoolean287 = false; + } + } + } + + @OriginalMember(owner = "client!nk", name = "e", descriptor = "(II)[I") + @Override + public final int[] getPixels(@OriginalArg(1) int arg0) { + @Pc(16) GlTexture local16 = this.method3242(arg0); + return local16 == null ? null : local16.method4297(this.lowDetail || this.aBooleanArray89[arg0], this, this.aClass153_72); + } + + @OriginalMember(owner = "client!nk", name = "a", descriptor = "(IZ)V") + @Override + public final void method3227(@OriginalArg(0) int arg0) { + MaterialManager.setMaterial(this.aByteArray61[arg0] & 0xFF, this.aByteArray62[arg0] & 0xFF); + @Pc(23) boolean local23 = false; + @Pc(28) GlTexture local28 = this.method3242(arg0); + if (local28 != null) { + local23 = local28.method4296(this.aClass153_72, this, this.lowDetail || this.aBooleanArray89[arg0]); + } + if (!local23) { + @Pc(56) GlSolidColorTexture local56 = this.method3244(arg0); + local56.method3887(); + } + } + + @OriginalMember(owner = "client!nk", name = "i", descriptor = "(II)Lclient!uh;") + private GlTexture method3242(@OriginalArg(0) int arg0) { + @Pc(14) GlTexture local14 = (GlTexture) this.glTextures.get(arg0); + if (local14 != null) { + return local14; + } + @Pc(30) byte[] local30 = this.aClass153_73.fetchFile(arg0, 0); + if (local30 == null) { + return null; + } else { + @Pc(41) Buffer local41 = new Buffer(local30); + local14 = new GlTexture(local41); + this.glTextures.put(local14, arg0); + return local14; + } + } + + @OriginalMember(owner = "client!nk", name = "b", descriptor = "(IZ)I") + @Override + public final int method3228(@OriginalArg(0) int arg0) { + return this.aByteArray61[arg0] & 0xFF; + } + + @OriginalMember(owner = "client!nk", name = "g", descriptor = "(II)I") + @Override + public final int getMaterialType(@OriginalArg(0) int arg0) { + return this.aByteArray62[arg0] & 0xFF; + } + + @OriginalMember(owner = "client!nk", name = "a", descriptor = "(II)I") + @Override + public final int method3229(@OriginalArg(1) int arg0) { + return this.aByteArray59[arg0] & 0xFF; + } + + @OriginalMember(owner = "client!nk", name = "a", descriptor = "(BI)Z") + @Override + public final boolean isOpaque(@OriginalArg(1) int arg0) { + return this.aBooleanArray91[arg0]; + } + + @OriginalMember(owner = "client!nk", name = "j", descriptor = "(II)Lclient!sd;") + private GlSolidColorTexture method3244(@OriginalArg(1) int arg0) { + @Pc(19) GlSolidColorTexture local19 = (GlSolidColorTexture) this.solidColorSprites.get(arg0); + if (local19 == null) { + local19 = new GlSolidColorTexture(this.aShortArray59[arg0] & 0xFFFF); + this.solidColorSprites.put(local19, arg0); + return local19; + } else { + return local19; + } + } + + @OriginalMember(owner = "client!nk", name = "b", descriptor = "(II)Z") + @Override + public final boolean method3230(@OriginalArg(1) int arg0) { + @Pc(15) GlTexture local15 = this.method3242(arg0); + return local15 != null && local15.method4299(this, this.aClass153_72); + } + + @OriginalMember(owner = "client!nk", name = "b", descriptor = "(ZI)V") + public final void method3245(@OriginalArg(0) boolean arg0) { + this.lowDetail = arg0; + this.clear(); + } + + @OriginalMember(owner = "client!nk", name = "c", descriptor = "(II)Z") + @Override + public final boolean method3231(@OriginalArg(0) int arg0) { + return this.aBooleanArray93[arg0]; + } + + @OriginalMember(owner = "client!nk", name = "h", descriptor = "(II)I") + @Override + public final int method3238(@OriginalArg(1) int arg0) { + return this.aByteArray60[arg0] & 0xFF; + } + + @OriginalMember(owner = "client!nk", name = "b", descriptor = "(I)V") + public final void clear() { + this.glTextures.clear(); + if (this.solidColorSprites != null) { + this.solidColorSprites.clear(); + } + } + + @OriginalMember(owner = "client!nk", name = "d", descriptor = "(II)I") + @Override + public final int getAverageColor(@OriginalArg(0) int arg0) { + return this.aShortArray59[arg0] & 0xFFFF; + } + + @OriginalMember(owner = "client!nk", name = "b", descriptor = "(BI)Z") + @Override + public final boolean isLowDetail(@OriginalArg(1) int arg0) { + return this.lowDetail || this.aBooleanArray89[arg0]; + } + + @OriginalMember(owner = "client!nk", name = "k", descriptor = "(II)V") + public final void method3248(@OriginalArg(0) int capacity) { + this.capacity = capacity; + this.glTextures = new LruHashTable(this.capacity); + if (GlRenderer.enabled) { + this.solidColorSprites = new LruHashTable(this.capacity); + } else { + this.solidColorSprites = null; + } + } + + @OriginalMember(owner = "client!nk", name = "f", descriptor = "(II)Z") + @Override + public final boolean method3236(@OriginalArg(0) int arg0) { + return this.aBooleanArray90[arg0]; + } + + @OriginalMember(owner = "client!nk", name = "a", descriptor = "(IZF)[I") + @Override + public final int[] method3232(@OriginalArg(0) int arg0, @OriginalArg(2) float arg1) { + @Pc(8) GlTexture local8 = this.method3242(arg0); + if (local8 == null) { + return null; + } else { + local8.aBoolean287 = true; + return local8.method4295(this, arg1, this.aClass153_72, this.lowDetail || this.aBooleanArray89[arg0]); + } + } +} diff --git a/client/src/main/java/rt4/Js5Index.java b/client/src/main/java/rt4/Js5Index.java new file mode 100644 index 0000000..c038400 --- /dev/null +++ b/client/src/main/java/rt4/Js5Index.java @@ -0,0 +1,155 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ii") +public final class Js5Index { + + @OriginalMember(owner = "client!ii", name = "b", descriptor = "[[I") + public int[][] fileNameHashes; + + @OriginalMember(owner = "client!ii", name = "d", descriptor = "[I") + public int[] groupChecksums; + + @OriginalMember(owner = "client!ii", name = "f", descriptor = "I") + public int size; + + @OriginalMember(owner = "client!ii", name = "h", descriptor = "Lclient!jg;") + public IntHashTable groupNameHashTable; + + @OriginalMember(owner = "client!ii", name = "m", descriptor = "[I") + public int[] groupIds; + + @OriginalMember(owner = "client!ii", name = "n", descriptor = "[I") + public int[] groupCapacities; + + @OriginalMember(owner = "client!ii", name = "o", descriptor = "[I") + public int[] groupNameHashes; + + @OriginalMember(owner = "client!ii", name = "p", descriptor = "[I") + public int[] groupSizes; + + @OriginalMember(owner = "client!ii", name = "r", descriptor = "[I") + public int[] groupVersions; + + @OriginalMember(owner = "client!ii", name = "s", descriptor = "[[I") + public int[][] fileIds; + + @OriginalMember(owner = "client!ii", name = "u", descriptor = "I") + public int capacity; + + @OriginalMember(owner = "client!ii", name = "v", descriptor = "I") + public int version; + + @OriginalMember(owner = "client!ii", name = "x", descriptor = "[Lclient!jg;") + public IntHashTable[] fileNameHashTables; + + @OriginalMember(owner = "client!ii", name = "z", descriptor = "I") + public final int checksum; + + @OriginalMember(owner = "client!ii", name = "", descriptor = "([BI)V") + public Js5Index(@OriginalArg(0) byte[] arg0, @OriginalArg(1) int arg1) { + this.checksum = Buffer.crc32(arg0, arg0.length); + if (arg1 != this.checksum) { + throw new RuntimeException(); + } + this.method2293(arg0); + } + + @OriginalMember(owner = "client!ii", name = "a", descriptor = "(I[B)V") + private void method2293(@OriginalArg(1) byte[] arg0) { + @Pc(12) Buffer local12 = new Buffer(Js5Compression.uncompress(arg0)); + @Pc(16) int local16 = local12.g1(); + if (local16 != 5 && local16 != 6) { + throw new RuntimeException(); + } + if (local16 >= 6) { + this.version = local12.g4(); + } else { + this.version = 0; + } + @Pc(48) int local48 = local12.g1(); + @Pc(50) int local50 = 0; + this.size = local12.g2(); + @Pc(59) int local59 = -1; + this.groupIds = new int[this.size]; + @Pc(66) int local66; + for (local66 = 0; local66 < this.size; local66++) { + this.groupIds[local66] = local50 += local12.g2(); + if (this.groupIds[local66] > local59) { + local59 = this.groupIds[local66]; + } + } + this.capacity = local59 + 1; + this.groupVersions = new int[this.capacity]; + this.fileIds = new int[this.capacity][]; + this.groupChecksums = new int[this.capacity]; + this.groupCapacities = new int[this.capacity]; + this.groupSizes = new int[this.capacity]; + if (local48 != 0) { + this.groupNameHashes = new int[this.capacity]; + for (local66 = 0; local66 < this.capacity; local66++) { + this.groupNameHashes[local66] = -1; + } + for (local66 = 0; local66 < this.size; local66++) { + this.groupNameHashes[this.groupIds[local66]] = local12.g4(); + } + this.groupNameHashTable = new IntHashTable(this.groupNameHashes); + } + for (local66 = 0; local66 < this.size; local66++) { + this.groupChecksums[this.groupIds[local66]] = local12.g4(); + } + for (local66 = 0; local66 < this.size; local66++) { + this.groupVersions[this.groupIds[local66]] = local12.g4(); + } + for (local66 = 0; local66 < this.size; local66++) { + this.groupSizes[this.groupIds[local66]] = local12.g2(); + } + @Pc(273) int local273; + @Pc(278) int local278; + @Pc(280) int local280; + @Pc(288) int local288; + for (local66 = 0; local66 < this.size; local66++) { + local50 = 0; + local273 = this.groupIds[local66]; + local278 = this.groupSizes[local273]; + local280 = -1; + this.fileIds[local273] = new int[local278]; + for (local288 = 0; local288 < local278; local288++) { + @Pc(306) int local306 = this.fileIds[local273][local288] = local50 += local12.g2(); + if (local306 > local280) { + local280 = local306; + } + } + this.groupCapacities[local273] = local280 + 1; + if (local280 + 1 == local278) { + this.fileIds[local273] = null; + } + } + if (local48 == 0) { + return; + } + this.fileNameHashTables = new IntHashTable[local59 + 1]; + this.fileNameHashes = new int[local59 + 1][]; + for (local66 = 0; local66 < this.size; local66++) { + local273 = this.groupIds[local66]; + local278 = this.groupSizes[local273]; + this.fileNameHashes[local273] = new int[this.groupCapacities[local273]]; + for (local280 = 0; local280 < this.groupCapacities[local273]; local280++) { + this.fileNameHashes[local273][local280] = -1; + } + for (local280 = 0; local280 < local278; local280++) { + if (this.fileIds[local273] == null) { + local288 = local280; + } else { + local288 = this.fileIds[local273][local280]; + } + this.fileNameHashes[local273][local288] = local12.g4(); + } + this.fileNameHashTables[local273] = new IntHashTable(this.fileNameHashes[local273]); + } + } +} diff --git a/client/src/main/java/rt4/Js5MasterIndex.java b/client/src/main/java/rt4/Js5MasterIndex.java new file mode 100644 index 0000000..efbc967 --- /dev/null +++ b/client/src/main/java/rt4/Js5MasterIndex.java @@ -0,0 +1,96 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!al") +public final class Js5MasterIndex { + + @OriginalMember(owner = "client!al", name = "a", descriptor = "Lclient!wa;") + private Buffer buffer; + + @OriginalMember(owner = "client!al", name = "s", descriptor = "[Lclient!bg;") + private Js5CachedResourceProvider[] resourceProviders; + + @OriginalMember(owner = "client!al", name = "j", descriptor = "Lclient!k;") + private final Js5CacheQueue cacheQueue; + + @OriginalMember(owner = "client!al", name = "f", descriptor = "Lclient!jb;") + private final Js5NetQueue netQueue; + + @OriginalMember(owner = "client!al", name = "c", descriptor = "Lclient!pm;") + private Js5NetRequest request; + + @OriginalMember(owner = "client!al", name = "", descriptor = "(Lclient!jb;Lclient!k;)V") + public Js5MasterIndex(@OriginalArg(0) Js5NetQueue arg0, @OriginalArg(1) Js5CacheQueue arg1) { + this.cacheQueue = arg1; + this.netQueue = arg0; + if (!this.netQueue.isUrgentRequestQueueFull()) { + this.request = this.netQueue.read(255, (byte) 0, 255, true); + } + } + + @OriginalMember(owner = "client!al", name = "b", descriptor = "(I)Z") + public final boolean isReady() { + if (this.buffer != null) { + return true; + } + if (this.request == null) { + if (this.netQueue.isUrgentRequestQueueFull()) { + return false; + } + this.request = this.netQueue.read(255, (byte) 0, 255, true); + } + if (this.request.incomplete) { + return false; + } else { + this.buffer = new Buffer(this.request.getData()); + this.resourceProviders = new Js5CachedResourceProvider[(this.buffer.data.length - 5) / 8]; + return true; + } + } + + @OriginalMember(owner = "client!al", name = "a", descriptor = "(B)V") + public final void method179() { + if (this.resourceProviders == null) { + return; + } + @Pc(13) int local13; + for (local13 = 0; local13 < this.resourceProviders.length; local13++) { + if (this.resourceProviders[local13] != null) { + this.resourceProviders[local13].processPrefetchQueue(); + } + } + for (local13 = 0; local13 < this.resourceProviders.length; local13++) { + if (this.resourceProviders[local13] != null) { + this.resourceProviders[local13].loop(); + } + } + } + + @OriginalMember(owner = "client!al", name = "a", descriptor = "(IILclient!ge;Lclient!ge;)Lclient!bg;") + public final Js5CachedResourceProvider getResourceProvider(@OriginalArg(1) int arg0, @OriginalArg(2) Cache arg1, @OriginalArg(3) Cache arg2) { + return this.method188(arg2, arg0, arg1); + } + + @OriginalMember(owner = "client!al", name = "a", descriptor = "(Lclient!ge;IIZLclient!ge;)Lclient!bg;") + private Js5CachedResourceProvider method188(@OriginalArg(0) Cache arg0, @OriginalArg(2) int arg1, @OriginalArg(4) Cache arg2) { + if (this.buffer == null) { + throw new RuntimeException(); + } + this.buffer.offset = arg1 * 8 + 5; + if (this.buffer.data.length <= this.buffer.offset) { + throw new RuntimeException(); + } else if (this.resourceProviders[arg1] == null) { + @Pc(56) int local56 = this.buffer.g4(); + @Pc(61) int local61 = this.buffer.g4(); + @Pc(75) Js5CachedResourceProvider local75 = new Js5CachedResourceProvider(arg1, arg0, arg2, this.netQueue, this.cacheQueue, local56, local61, true); + this.resourceProviders[arg1] = local75; + return local75; + } else { + return this.resourceProviders[arg1]; + } + } +} diff --git a/client/src/main/java/rt4/Js5NetQueue.java b/client/src/main/java/rt4/Js5NetQueue.java new file mode 100644 index 0000000..02d97b0 --- /dev/null +++ b/client/src/main/java/rt4/Js5NetQueue.java @@ -0,0 +1,373 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.io.IOException; + +@OriginalClass("client!jb") +public final class Js5NetQueue { + + @OriginalMember(owner = "client!jb", name = "A", descriptor = "J") + private long previousLoop; + + @OriginalMember(owner = "client!jb", name = "B", descriptor = "Lclient!ma;") + private BufferedSocket socket; + + @OriginalMember(owner = "client!jb", name = "C", descriptor = "I") + private int latency; + + @OriginalMember(owner = "client!jb", name = "J", descriptor = "Lclient!pm;") + private Js5NetRequest current; + + @OriginalMember(owner = "client!jb", name = "a", descriptor = "Lclient!ce;") + private final SecondaryLinkedList pendingUrgentRequests = new SecondaryLinkedList(); + + @OriginalMember(owner = "client!jb", name = "q", descriptor = "Lclient!ce;") + private final SecondaryLinkedList inFlightUrgentRequests = new SecondaryLinkedList(); + + @OriginalMember(owner = "client!jb", name = "v", descriptor = "Lclient!ce;") + private final SecondaryLinkedList pendingPrefetchRequests = new SecondaryLinkedList(); + + @OriginalMember(owner = "client!jb", name = "z", descriptor = "Lclient!ce;") + private final SecondaryLinkedList inFlightPrefetchRequests = new SecondaryLinkedList(); + + @OriginalMember(owner = "client!jb", name = "E", descriptor = "Lclient!wa;") + private final Buffer outBuffer = new Buffer(4); + + @OriginalMember(owner = "client!jb", name = "G", descriptor = "B") + private byte encryptionKey = 0; + + @OriginalMember(owner = "client!jb", name = "I", descriptor = "I") + public volatile int errors = 0; + + @OriginalMember(owner = "client!jb", name = "H", descriptor = "I") + public volatile int response = 0; + + @OriginalMember(owner = "client!jb", name = "F", descriptor = "Lclient!wa;") + private final Buffer inBuffer = new Buffer(8); + + @OriginalMember(owner = "client!jb", name = "a", descriptor = "(I)Z") + public final boolean isPrefetchRequestQueueFull() { + return this.getPrefetchRequestCount() >= 20; + } + + @OriginalMember(owner = "client!jb", name = "b", descriptor = "(B)Z") + public final boolean loop() { + @Pc(19) int local19; + if (this.socket != null) { + @Pc(12) long local12 = MonotonicClock.currentTimeMillis(); + local19 = (int) (local12 - this.previousLoop); + this.previousLoop = local12; + if (local19 > 200) { + local19 = 200; + } + this.latency += local19; + if (this.latency > 30000) { + try { + this.socket.close(); + } catch (@Pc(43) Exception local43) { + } + this.socket = null; + } + } + if (this.socket == null) { + return this.getUrgentRequestCount() == 0 && this.getPrefetchRequestCount() == 0; + } + try { + this.socket.checkError(); + @Pc(75) Js5NetRequest local75; + for (local75 = (Js5NetRequest) this.pendingUrgentRequests.head(); local75 != null; local75 = (Js5NetRequest) this.pendingUrgentRequests.next()) { + this.outBuffer.offset = 0; + this.outBuffer.p1(1); + this.outBuffer.p3((int) local75.secondaryKey); + this.socket.write(this.outBuffer.data, 4); + this.inFlightUrgentRequests.addTail(local75); + } + for (local75 = (Js5NetRequest) this.pendingPrefetchRequests.head(); local75 != null; local75 = (Js5NetRequest) this.pendingPrefetchRequests.next()) { + this.outBuffer.offset = 0; + this.outBuffer.p1(0); + this.outBuffer.p3((int) local75.secondaryKey); + this.socket.write(this.outBuffer.data, 4); + this.inFlightPrefetchRequests.addTail(local75); + } + for (@Pc(172) int local172 = 0; local172 < 100; local172++) { + local19 = this.socket.available(); + if (local19 < 0) { + throw new IOException(); + } + if (local19 == 0) { + break; + } + this.latency = 0; + @Pc(196) byte local196 = 0; + if (this.current == null) { + local196 = 8; + } else if (this.current.blockPosition == 0) { + local196 = 1; + } + @Pc(228) int local228; + @Pc(235) int local235; + @Pc(283) int local283; + if (local196 <= 0) { + local228 = this.current.buffer.data.length - this.current.trailerLen; + local235 = 512 - this.current.blockPosition; + if (local235 > local228 - this.current.buffer.offset) { + local235 = local228 - this.current.buffer.offset; + } + if (local235 > local19) { + local235 = local19; + } + this.socket.read(this.current.buffer.offset, local235, this.current.buffer.data); + if (this.encryptionKey != 0) { + for (local283 = 0; local283 < local235; local283++) { + this.current.buffer.data[this.current.buffer.offset + local283] = (byte) (this.current.buffer.data[this.current.buffer.offset + local283] ^ this.encryptionKey); + } + } + this.current.blockPosition += local235; + this.current.buffer.offset += local235; + if (this.current.buffer.offset == local228) { + this.current.unlinkSecondary(); + this.current.incomplete = false; + this.current = null; + } else if (this.current.blockPosition == 512) { + this.current.blockPosition = 0; + } + } else { + local228 = local196 - this.inBuffer.offset; + if (local19 < local228) { + local228 = local19; + } + this.socket.read(this.inBuffer.offset, local228, this.inBuffer.data); + if (this.encryptionKey != 0) { + for (local235 = 0; local235 < local228; local235++) { + this.inBuffer.data[local235 + this.inBuffer.offset] ^= this.encryptionKey; + } + } + this.inBuffer.offset += local228; + if (this.inBuffer.offset >= local196) { + if (this.current == null) { + this.inBuffer.offset = 0; + local235 = this.inBuffer.g1(); + local283 = this.inBuffer.g2(); + @Pc(471) int local471 = this.inBuffer.g1(); + @Pc(476) int local476 = this.inBuffer.g4(); + @Pc(480) int local480 = local471 & 0x7F; + @Pc(491) boolean local491 = (local471 & 0x80) != 0; + @Pc(501) long local501 = (local235 << 16) + local283; + @Pc(509) Js5NetRequest local509; + if (local491) { + for (local509 = (Js5NetRequest) this.inFlightPrefetchRequests.head(); local509 != null && local509.secondaryKey != local501; local509 = (Js5NetRequest) this.inFlightPrefetchRequests.next()) { + } + } else { + for (local509 = (Js5NetRequest) this.inFlightUrgentRequests.head(); local509 != null && local501 != local509.secondaryKey; local509 = (Js5NetRequest) this.inFlightUrgentRequests.next()) { + } + } + if (local509 == null) { + throw new IOException(); + } + @Pc(568) int local568 = local480 == 0 ? 5 : 9; + this.current = local509; + this.current.buffer = new Buffer(local476 + local568 + this.current.trailerLen); + this.current.buffer.p1(local480); + this.current.buffer.p4(local476); + this.current.blockPosition = 8; + this.inBuffer.offset = 0; + } else if (this.current.blockPosition != 0) { + throw new IOException(); + } else if (this.inBuffer.data[0] == -1) { + this.current.blockPosition = 1; + this.inBuffer.offset = 0; + } else { + this.current = null; + } + } + } + } + return true; + } catch (@Pc(644) IOException local644) { + try { + this.socket.close(); + } catch (@Pc(650) Exception ignored) { + } + this.response = -2; + this.errors++; + this.socket = null; + return this.getUrgentRequestCount() == 0 && this.getPrefetchRequestCount() == 0; + } + } + + @OriginalMember(owner = "client!jb", name = "a", descriptor = "(Z)V") + public final void drop() { + if (this.socket == null) { + return; + } + try { + this.outBuffer.offset = 0; + this.outBuffer.p1(7); + this.outBuffer.p3(0); + this.socket.write(this.outBuffer.data, 4); + } catch (@Pc(39) IOException local39) { + try { + this.socket.close(); + } catch (@Pc(45) Exception local45) { + } + this.errors++; + this.response = -2; + this.socket = null; + } + } + + @OriginalMember(owner = "client!jb", name = "b", descriptor = "(I)I") + private int getPrefetchRequestCount() { + return this.pendingPrefetchRequests.size() + this.inFlightPrefetchRequests.size(); + } + + @OriginalMember(owner = "client!jb", name = "a", descriptor = "(ZZ)V") + public final void writeLoggedIn(@OriginalArg(0) boolean arg0) { + if (this.socket == null) { + return; + } + try { + this.outBuffer.offset = 0; + this.outBuffer.p1(arg0 ? 2 : 3); + this.outBuffer.p3(0); + this.socket.write(this.outBuffer.data, 4); + } catch (@Pc(42) IOException local42) { + try { + this.socket.close(); + } catch (@Pc(48) Exception local48) { + } + this.errors++; + this.response = -2; + this.socket = null; + } + } + + @OriginalMember(owner = "client!jb", name = "c", descriptor = "(I)V") + public final void breakConnection() { + if (this.socket != null) { + this.socket.breakConnection(); + } + } + + @OriginalMember(owner = "client!jb", name = "a", descriptor = "(ZLclient!ma;I)V") + public final void start(@OriginalArg(0) boolean arg0, @OriginalArg(1) BufferedSocket arg1) { + if (this.socket != null) { + try { + this.socket.close(); + } catch (@Pc(14) Exception local14) { + } + this.socket = null; + } + this.socket = arg1; + this.method2331(); + this.writeLoggedIn(arg0); + this.inBuffer.offset = 0; + this.current = null; + while (true) { + @Pc(44) Js5NetRequest local44 = (Js5NetRequest) this.inFlightUrgentRequests.removeHead(); + if (local44 == null) { + while (true) { + local44 = (Js5NetRequest) this.inFlightPrefetchRequests.removeHead(); + if (local44 == null) { + if (this.encryptionKey != 0) { + try { + this.outBuffer.offset = 0; + this.outBuffer.p1(4); + this.outBuffer.p1(this.encryptionKey); + this.outBuffer.p2(0); + this.socket.write(this.outBuffer.data, 4); + } catch (@Pc(107) IOException local107) { + try { + this.socket.close(); + } catch (@Pc(113) Exception local113) { + } + this.response = -2; + this.errors++; + this.socket = null; + } + } + this.latency = 0; + this.previousLoop = MonotonicClock.currentTimeMillis(); + return; + } + this.pendingPrefetchRequests.addTail(local44); + } + } + this.pendingUrgentRequests.addTail(local44); + } + } + + @OriginalMember(owner = "client!jb", name = "c", descriptor = "(B)Z") + public final boolean isUrgentRequestQueueFull() { + return this.getUrgentRequestCount() >= 20; + } + + @OriginalMember(owner = "client!jb", name = "d", descriptor = "(B)V") + public final void rekey() { + try { + this.socket.close(); + } catch (@Pc(17) Exception local17) { + } + this.response = -1; + this.encryptionKey = (byte) (Math.random() * 255.0D + 1.0D); + this.socket = null; + this.errors++; + } + + @OriginalMember(owner = "client!jb", name = "d", descriptor = "(I)I") + public final int getUrgentRequestCount() { + return this.pendingUrgentRequests.size() + this.inFlightUrgentRequests.size(); + } + + @OriginalMember(owner = "client!jb", name = "b", descriptor = "(Z)V") + public final void quit() { + if (this.socket != null) { + this.socket.close(); + } + } + + @OriginalMember(owner = "client!jb", name = "a", descriptor = "(IIBIZ)Lclient!pm;") + public final Js5NetRequest read(@OriginalArg(1) int arg0, @OriginalArg(2) byte arg1, @OriginalArg(3) int arg2, @OriginalArg(4) boolean arg3) { + @Pc(7) Js5NetRequest local7 = new Js5NetRequest(); + @Pc(14) long local14 = arg2 + ((long) arg0 << 16); + local7.urgent = arg3; + local7.secondaryKey = local14; + local7.trailerLen = arg1; + if (arg3) { + if (this.getUrgentRequestCount() >= 20) { + throw new RuntimeException(); + } + this.pendingUrgentRequests.addTail(local7); + } else if (this.getPrefetchRequestCount() < 20) { + this.pendingPrefetchRequests.addTail(local7); + } else { + throw new RuntimeException(); + } + return local7; + } + + @OriginalMember(owner = "client!jb", name = "e", descriptor = "(B)V") + private void method2331() { + if (this.socket == null) { + return; + } + try { + this.outBuffer.offset = 0; + this.outBuffer.p1(6); + this.outBuffer.p3(3); + this.socket.write(this.outBuffer.data, 4); + } catch (@Pc(37) IOException local37) { + try { + this.socket.close(); + } catch (@Pc(43) Exception ignored) { + } + this.errors++; + this.socket = null; + this.response = -2; + } + } +} diff --git a/client/src/main/java/rt4/Js5NetRequest.java b/client/src/main/java/rt4/Js5NetRequest.java new file mode 100644 index 0000000..42bf8fb --- /dev/null +++ b/client/src/main/java/rt4/Js5NetRequest.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!pm") +public final class Js5NetRequest extends Js5Request { + + @OriginalMember(owner = "client!pm", name = "U", descriptor = "B") + public byte trailerLen; + + @OriginalMember(owner = "client!pm", name = "Z", descriptor = "I") + public int blockPosition; + + @OriginalMember(owner = "client!pm", name = "bb", descriptor = "Lclient!wa;") + public Buffer buffer; + + @OriginalMember(owner = "client!pm", name = "a", descriptor = "(Z)I") + @Override + public final int getPercentageComplete() { + return this.buffer == null ? 0 : this.buffer.offset * 100 / (this.buffer.data.length - this.trailerLen); + } + + @OriginalMember(owner = "client!pm", name = "b", descriptor = "(Z)[B") + @Override + public final byte[] getData() { + if (this.incomplete || this.buffer.offset < this.buffer.data.length - this.trailerLen) { + throw new RuntimeException(); + } + return this.buffer.data; + } +} diff --git a/client/src/main/java/rt4/Js5QuickChatCommandDecoder.java b/client/src/main/java/rt4/Js5QuickChatCommandDecoder.java new file mode 100644 index 0000000..3b3a4ba --- /dev/null +++ b/client/src/main/java/rt4/Js5QuickChatCommandDecoder.java @@ -0,0 +1,26 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!af") +public final class Js5QuickChatCommandDecoder implements QuickChatCommandDecoder { + + @OriginalMember(owner = "client!af", name = "a", descriptor = "(I[IIJ)Lclient!na;") + @Override + public final JagString decode(@OriginalArg(0) int command, @OriginalArg(1) int[] params, @OriginalArg(3) long value) { + if (command == 0) { + @Pc(12) EnumType type = EnumTypeList.get(params[0]); + return type.getString((int) value); + } else if (command == 1 || command == 10) { + @Pc(31) ObjType type = ObjTypeList.get((int) value); + return type.name; + } else if (command == 6 || command == 7 || command == 11) { + return EnumTypeList.get(params[0]).getString((int) value); + } else { + return null; + } + } +} diff --git a/client/src/main/java/rt4/Js5Request.java b/client/src/main/java/rt4/Js5Request.java new file mode 100644 index 0000000..7e1e7bb --- /dev/null +++ b/client/src/main/java/rt4/Js5Request.java @@ -0,0 +1,23 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!il") +public abstract class Js5Request extends SecondaryNode { + + @OriginalMember(owner = "client!il", name = "L", descriptor = "Z") + public boolean urgent; + + @OriginalMember(owner = "client!il", name = "T", descriptor = "Z") + public boolean orphan; + + @OriginalMember(owner = "client!il", name = "P", descriptor = "Z") + public volatile boolean incomplete = true; + + @OriginalMember(owner = "client!il", name = "a", descriptor = "(Z)I") + public abstract int getPercentageComplete(); + + @OriginalMember(owner = "client!il", name = "b", descriptor = "(Z)[B") + public abstract byte[] getData(); +} diff --git a/client/src/main/java/rt4/Js5ResourceProvider.java b/client/src/main/java/rt4/Js5ResourceProvider.java new file mode 100644 index 0000000..cedfaee --- /dev/null +++ b/client/src/main/java/rt4/Js5ResourceProvider.java @@ -0,0 +1,25 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!v") +public abstract class Js5ResourceProvider { + + @OriginalMember(owner = "client!v", name = "", descriptor = "()V") + protected Js5ResourceProvider() { + } + + @OriginalMember(owner = "client!v", name = "b", descriptor = "(I)Lclient!ii;") + public abstract Js5Index fetchIndex(); + + @OriginalMember(owner = "client!v", name = "a", descriptor = "(II)V") + public abstract void prefetchGroup(@OriginalArg(0) int arg0); + + @OriginalMember(owner = "client!v", name = "b", descriptor = "(II)I") + public abstract int getPercentageComplete(@OriginalArg(0) int arg0); + + @OriginalMember(owner = "client!v", name = "c", descriptor = "(II)[B") + public abstract byte[] fetchGroup(@OriginalArg(0) int arg0); +} diff --git a/client/src/main/java/rt4/Keyboard.java b/client/src/main/java/rt4/Keyboard.java new file mode 100644 index 0000000..ed4a0d3 --- /dev/null +++ b/client/src/main/java/rt4/Keyboard.java @@ -0,0 +1,391 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.Component; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.lang.reflect.Method; +import java.util.Arrays; + +@OriginalClass("client!uf") +public final class Keyboard implements KeyListener, FocusListener { + + public static final int KEY_SHIFT = 81; + public static final int KEY_CTRL = 82; + public static final int KEY_ENTER = 84; + public static final int KEY_BACK_SPACE = 85; + public static final int KEY_ALT = 86; + public static final int KEY_LEFT = 96; + public static final int KEY_RIGHT = 97; + public static final int KEY_UP = 98; + public static final int KEY_DOWN = 99; + + @OriginalMember(owner = "client!bg", name = "A", descriptor = "[I") + public static final int[] eventQueue = new int[128]; + + @OriginalMember(owner = "client!pl", name = "c", descriptor = "[I") + public static final int[] CODE_MAP = new int[521]; + + static { + Arrays.fill(CODE_MAP, -1); + CODE_MAP[KeyEvent.VK_BACK_SPACE] = 85; + CODE_MAP[KeyEvent.VK_TAB] = 80; + CODE_MAP[KeyEvent.VK_ENTER] = 84; + // + CODE_MAP[KeyEvent.VK_CLEAR] = 91; + // + CODE_MAP[KeyEvent.VK_SHIFT] = 81; + CODE_MAP[KeyEvent.VK_CONTROL] = 82; + CODE_MAP[KeyEvent.VK_ALT] = 86; + // + CODE_MAP[KeyEvent.VK_ESCAPE] = 13; + // + CODE_MAP[KeyEvent.VK_SPACE] = 83; + CODE_MAP[KeyEvent.VK_PAGE_UP] = 104; + CODE_MAP[KeyEvent.VK_PAGE_DOWN] = 105; + CODE_MAP[KeyEvent.VK_END] = 103; + CODE_MAP[KeyEvent.VK_HOME] = 102; + CODE_MAP[KeyEvent.VK_LEFT] = 96; + CODE_MAP[KeyEvent.VK_UP] = 98; + CODE_MAP[KeyEvent.VK_RIGHT] = 97; + CODE_MAP[KeyEvent.VK_DOWN] = 99; + // + CODE_MAP[KeyEvent.VK_0] = 25; + CODE_MAP[KeyEvent.VK_1] = 16; + CODE_MAP[KeyEvent.VK_2] = 17; + CODE_MAP[KeyEvent.VK_3] = 18; + CODE_MAP[KeyEvent.VK_4] = 19; + CODE_MAP[KeyEvent.VK_5] = 20; + CODE_MAP[KeyEvent.VK_6] = 21; + CODE_MAP[KeyEvent.VK_7] = 22; + CODE_MAP[KeyEvent.VK_8] = 23; + CODE_MAP[KeyEvent.VK_9] = 24; + // + CODE_MAP[KeyEvent.VK_A] = 48; + CODE_MAP[KeyEvent.VK_B] = 68; + CODE_MAP[KeyEvent.VK_C] = 66; + CODE_MAP[KeyEvent.VK_D] = 50; + CODE_MAP[KeyEvent.VK_E] = 34; + CODE_MAP[KeyEvent.VK_F] = 51; + CODE_MAP[KeyEvent.VK_G] = 52; + CODE_MAP[KeyEvent.VK_H] = 53; + CODE_MAP[KeyEvent.VK_I] = 39; + CODE_MAP[KeyEvent.VK_J] = 54; + CODE_MAP[KeyEvent.VK_K] = 55; + CODE_MAP[KeyEvent.VK_L] = 56; + CODE_MAP[KeyEvent.VK_M] = 70; + CODE_MAP[KeyEvent.VK_N] = 69; + CODE_MAP[KeyEvent.VK_O] = 40; + CODE_MAP[KeyEvent.VK_P] = 41; + CODE_MAP[KeyEvent.VK_Q] = 32; + CODE_MAP[KeyEvent.VK_R] = 35; + CODE_MAP[KeyEvent.VK_S] = 49; + CODE_MAP[KeyEvent.VK_T] = 36; + CODE_MAP[KeyEvent.VK_U] = 38; + CODE_MAP[KeyEvent.VK_V] = 67; + CODE_MAP[KeyEvent.VK_W] = 33; + CODE_MAP[KeyEvent.VK_X] = 65; + CODE_MAP[KeyEvent.VK_Y] = 37; + CODE_MAP[KeyEvent.VK_Z] = 64; + // + CODE_MAP[KeyEvent.VK_NUMPAD0] = 228; + CODE_MAP[KeyEvent.VK_NUMPAD1] = 231; + CODE_MAP[KeyEvent.VK_NUMPAD2] = 227; + CODE_MAP[KeyEvent.VK_NUMPAD3] = 233; + CODE_MAP[KeyEvent.VK_NUMPAD4] = 224; + CODE_MAP[KeyEvent.VK_NUMPAD5] = 219; + CODE_MAP[KeyEvent.VK_NUMPAD6] = 225; + CODE_MAP[KeyEvent.VK_NUMPAD7] = 230; + CODE_MAP[KeyEvent.VK_NUMPAD8] = 226; + CODE_MAP[KeyEvent.VK_NUMPAD9] = 232; + CODE_MAP[KeyEvent.VK_MULTIPLY] = 89; + CODE_MAP[KeyEvent.VK_ADD] = 87; + // + CODE_MAP[KeyEvent.VK_SUBTRACT] = 88; + CODE_MAP[KeyEvent.VK_DECIMAL] = 229; + CODE_MAP[KeyEvent.VK_DIVIDE] = 90; + CODE_MAP[KeyEvent.VK_F1] = 1; + CODE_MAP[KeyEvent.VK_F2] = 2; + CODE_MAP[KeyEvent.VK_F3] = 3; + CODE_MAP[KeyEvent.VK_F4] = 4; + CODE_MAP[KeyEvent.VK_F5] = 5; + CODE_MAP[KeyEvent.VK_F6] = 6; + CODE_MAP[KeyEvent.VK_F7] = 7; + CODE_MAP[KeyEvent.VK_F8] = 8; + CODE_MAP[KeyEvent.VK_F9] = 9; + CODE_MAP[KeyEvent.VK_F10] = 10; + CODE_MAP[KeyEvent.VK_F11] = 11; + CODE_MAP[KeyEvent.VK_F12] = 12; + // + CODE_MAP[KeyEvent.VK_DELETE] = 101; + // + CODE_MAP[KeyEvent.VK_INSERT] = 100; + } + + public static boolean getKey(int key) { + return pressedKeys[CODE_MAP[key]]; + } + + @OriginalMember(owner = "client!s", name = "e", descriptor = "[I") + public static final int[] typedCodeQueue = new int[128]; + + @OriginalMember(owner = "client!vh", name = "u", descriptor = "[I") + public static final int[] typedCharQueue = new int[128]; + + @OriginalMember(owner = "client!pb", name = "q", descriptor = "[Z") + public static final boolean[] pressedKeys = new boolean[112]; + + @OriginalMember(owner = "client!j", name = "L", descriptor = "I") + public static int eventQueueWriterIndex = 0; + + @OriginalMember(owner = "client!sg", name = "c", descriptor = "I") + public static int eventQueueReaderIndex = 0; + + @OriginalMember(owner = "client!ec", name = "q", descriptor = "I") + public static int typedQueueWriterIndex = 0; + + @OriginalMember(owner = "client!hn", name = "V", descriptor = "I") + public static int typedQueueReaderIndex = 0; + + @OriginalMember(owner = "client!an", name = "ab", descriptor = "Lclient!uf;") + public static Keyboard instance = new Keyboard(); + + @OriginalMember(owner = "client!si", name = "eb", descriptor = "I") + public static volatile int idleLoops = 0; + + @OriginalMember(owner = "client!sh", name = "h", descriptor = "I") + public static int prevTypedQueueWriterIndex = 0; + + @OriginalMember(owner = "client!hn", name = "Z", descriptor = "I") + public static int keyCode; + + @OriginalMember(owner = "client!pi", name = "Y", descriptor = "I") + public static int keyChar; + + @OriginalMember(owner = "client!ch", name = "a", descriptor = "(Ljava/awt/Component;I)V") + public static void stop(@OriginalArg(0) Component component) { + component.removeKeyListener(instance); + component.removeFocusListener(instance); + eventQueueWriterIndex = -1; + } + + @OriginalMember(owner = "client!fc", name = "b", descriptor = "(I)V") + public static void loop() { + @Pc(12) Keyboard keyboard = instance; + synchronized (instance) { + typedQueueReaderIndex = prevTypedQueueWriterIndex; + idleLoops++; + @Pc(23) int key; + if (eventQueueWriterIndex < 0) { + for (key = 0; key < 112; key++) { + pressedKeys[key] = false; + } + eventQueueWriterIndex = eventQueueReaderIndex; + } else { + while (eventQueueWriterIndex != eventQueueReaderIndex) { + key = eventQueue[eventQueueReaderIndex]; + eventQueueReaderIndex = eventQueueReaderIndex + 1 & 0x7F; + if (key >= 0) { + pressedKeys[key] = true; + } else { + pressedKeys[~key] = false; + } + } + } + prevTypedQueueWriterIndex = typedQueueWriterIndex; + } + } + + @OriginalMember(owner = "client!c", name = "d", descriptor = "(I)Z") + public static boolean nextKey() { + @Pc(6) Keyboard keyboard = instance; + synchronized (instance) { + if (prevTypedQueueWriterIndex == typedQueueReaderIndex) { + return false; + } else { + keyCode = typedCodeQueue[typedQueueReaderIndex]; + keyChar = typedCharQueue[typedQueueReaderIndex]; + typedQueueReaderIndex = typedQueueReaderIndex + 1 & 0x7F; + return true; + } + } + } + + @OriginalMember(owner = "client!kk", name = "a", descriptor = "(ZLjava/awt/event/KeyEvent;)I") + public static int getKeyChar(@OriginalArg(1) KeyEvent event) { + @Pc(6) int c = event.getKeyChar(); + if (c == 8364) { + return 128; + } else { + if (c <= 0 || c >= 256) { + c = -1; + } + return c; + } + } + + @OriginalMember(owner = "client!mf", name = "e", descriptor = "(I)V") + public static void init() { + if (SignLink.javaVendor.toLowerCase().contains("microsoft")) { + CODE_MAP[187] = 27; + CODE_MAP[223] = 28; + CODE_MAP[221] = 43; + CODE_MAP[188] = 71; + CODE_MAP[222] = 59; + CODE_MAP[192] = 58; + CODE_MAP[191] = 73; + CODE_MAP[219] = 42; + CODE_MAP[190] = 72; + CODE_MAP[186] = 57; + CODE_MAP[220] = 74; + CODE_MAP[189] = 26; + return; + } + + if (SignLink.setFocusTraversalKeysEnabled == null) { + CODE_MAP[KeyEvent.VK_BACK_QUOTE] = 58; + CODE_MAP[KeyEvent.VK_QUOTE] = 59; + } else { + CODE_MAP[KeyEvent.VK_QUOTE] = 58; + CODE_MAP[KeyEvent.VK_BACK_QUOTE] = 28; + CODE_MAP[520] = 59; + } + + CODE_MAP[KeyEvent.VK_MINUS] = 26; + CODE_MAP[KeyEvent.VK_EQUALS] = 27; + CODE_MAP[KeyEvent.VK_OPEN_BRACKET] = 42; + CODE_MAP[KeyEvent.VK_SEMICOLON] = 57; + CODE_MAP[KeyEvent.VK_CLOSE_BRACKET] = 43; + CODE_MAP[KeyEvent.VK_COMMA] = 71; + CODE_MAP[KeyEvent.VK_BACK_SLASH] = 74; + CODE_MAP[KeyEvent.VK_PERIOD] = 72; + CODE_MAP[KeyEvent.VK_SLASH] = 73; + } + + @OriginalMember(owner = "client!bi", name = "a", descriptor = "(BLjava/awt/Component;)V") + public static void start(@OriginalArg(1) Component component) { + @Pc(10) Method method = SignLink.setFocusTraversalKeysEnabled; + if (method != null) { + try { + method.invoke(component, Boolean.FALSE); + } catch (@Pc(25) Throwable ex) { + } + } + component.addKeyListener(instance); + component.addFocusListener(instance); + } + + @OriginalMember(owner = "client!ag", name = "h", descriptor = "(I)V") + public static void quit() { + if (instance != null) { + @Pc(4) Keyboard local4 = instance; + synchronized (instance) { + instance = null; + } + } + } + + @OriginalMember(owner = "client!pk", name = "f", descriptor = "(B)I") + public static int getIdleLoops() { + return idleLoops; + } + + @OriginalMember(owner = "client!uf", name = "keyPressed", descriptor = "(Ljava/awt/event/KeyEvent;)V") + @Override + public final synchronized void keyPressed(@OriginalArg(0) KeyEvent event) { + if (instance == null) { + return; + } + + idleLoops = 0; + @Pc(7) int code = event.getKeyCode(); + if (code >= 0 && CODE_MAP.length > code) { + code = CODE_MAP[code]; + if ((code & 0x80) != 0) { + code = -1; + } + } else { + code = -1; + } + + if (eventQueueWriterIndex >= 0 && code >= 0) { + eventQueue[eventQueueWriterIndex] = code; + eventQueueWriterIndex = eventQueueWriterIndex + 1 & 0x7F; + if (eventQueueWriterIndex == eventQueueReaderIndex) { + eventQueueWriterIndex = -1; + } + } + + if (code >= 0) { + @Pc(68) int index = typedQueueWriterIndex + 1 & 0x7F; + if (index != typedQueueReaderIndex) { + typedCodeQueue[typedQueueWriterIndex] = code; + typedCharQueue[typedQueueWriterIndex] = -1; + typedQueueWriterIndex = index; + } + } + + int modifiers = event.getModifiersEx(); + if ((modifiers & 0xA) != 0 || code == KEY_BACK_SPACE || code == KEY_ENTER) { + event.consume(); + } + } + + @OriginalMember(owner = "client!uf", name = "keyTyped", descriptor = "(Ljava/awt/event/KeyEvent;)V") + @Override + public final void keyTyped(@OriginalArg(0) KeyEvent event) { + if (instance != null) { + @Pc(9) int c = getKeyChar(event); + if (c >= 0) { + @Pc(21) int index = typedQueueWriterIndex + 1 & 0x7F; + if (typedQueueReaderIndex != index) { + typedCodeQueue[typedQueueWriterIndex] = -1; + typedCharQueue[typedQueueWriterIndex] = c; + typedQueueWriterIndex = index; + } + } + } + event.consume(); + } + + @OriginalMember(owner = "client!uf", name = "focusLost", descriptor = "(Ljava/awt/event/FocusEvent;)V") + @Override + public final synchronized void focusLost(@OriginalArg(0) FocusEvent event) { + if (instance != null) { + eventQueueWriterIndex = -1; + } + } + + @OriginalMember(owner = "client!uf", name = "keyReleased", descriptor = "(Ljava/awt/event/KeyEvent;)V") + @Override + public final synchronized void keyReleased(@OriginalArg(0) KeyEvent event) { + if (instance != null) { + idleLoops = 0; + @Pc(11) int c = event.getKeyCode(); + if (c >= 0 && CODE_MAP.length > c) { + c = CODE_MAP[c] & 0xFFFFFF7F; + } else { + c = -1; + } + if (eventQueueWriterIndex >= 0 && c >= 0) { + eventQueue[eventQueueWriterIndex] = ~c; + eventQueueWriterIndex = eventQueueWriterIndex + 1 & 0x7F; + if (eventQueueReaderIndex == eventQueueWriterIndex) { + eventQueueWriterIndex = -1; + } + } + } + event.consume(); + } + + @OriginalMember(owner = "client!uf", name = "focusGained", descriptor = "(Ljava/awt/event/FocusEvent;)V") + @Override + public final void focusGained(@OriginalArg(0) FocusEvent event) { + } +} diff --git a/client/src/main/java/rt4/LangUtils.java b/client/src/main/java/rt4/LangUtils.java new file mode 100644 index 0000000..75c0110 --- /dev/null +++ b/client/src/main/java/rt4/LangUtils.java @@ -0,0 +1,30 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public final class LangUtils { + + @OriginalMember(owner = "client!mc", name = "fb", descriptor = "Lclient!na;") + private static final JagString LANG_PT = JagString.parse("pt"); + @OriginalMember(owner = "client!mc", name = "mb", descriptor = "Lclient!na;") + private static final JagString LANG_EN = JagString.parse("en"); + @OriginalMember(owner = "client!mc", name = "vb", descriptor = "Lclient!na;") + private static final JagString LANG_DE = JagString.parse("de"); + @OriginalMember(owner = "client!mc", name = "pb", descriptor = "Lclient!na;") + private static final JagString LANG_FR = JagString.parse("fr"); + @OriginalMember(owner = "client!mc", name = "ob", descriptor = "[Lclient!na;") + public static final JagString[] LANGUAGES = new JagString[]{LANG_EN, LANG_DE, LANG_FR, LANG_PT}; + + @OriginalMember(owner = "client!hm", name = "a", descriptor = "(Lclient!na;B)I") + public static int method2053(@OriginalArg(0) JagString arg0) { + for (@Pc(12) int local12 = 0; local12 < LANGUAGES.length; local12++) { + if (LANGUAGES[local12].equalsIgnoreCase(arg0)) { + return local12; + } + } + return -1; + } + +} diff --git a/client/src/main/java/rt4/Light.java b/client/src/main/java/rt4/Light.java new file mode 100644 index 0000000..3b2cbae --- /dev/null +++ b/client/src/main/java/rt4/Light.java @@ -0,0 +1,249 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!gi") +public final class Light { + + @OriginalMember(owner = "client!f", name = "P", descriptor = "[I") + public static int[] NOISE; + @OriginalMember(owner = "client!gi", name = "a", descriptor = "Z") + public final boolean aBoolean124; + + @OriginalMember(owner = "client!gi", name = "d", descriptor = "I") + private int alphaMax; + + @OriginalMember(owner = "client!gi", name = "e", descriptor = "I") + private int anInt2233; + + @OriginalMember(owner = "client!gi", name = "i", descriptor = "I") + public int y; + + @OriginalMember(owner = "client!gi", name = "j", descriptor = "I") + public final int radius; + + @OriginalMember(owner = "client!gi", name = "p", descriptor = "I") + private int alphaMin; + + @OriginalMember(owner = "client!gi", name = "q", descriptor = "I") + public int x; + + @OriginalMember(owner = "client!gi", name = "r", descriptor = "I") + public int level; + + @OriginalMember(owner = "client!gi", name = "t", descriptor = "I") + public final int anInt2243; + + @OriginalMember(owner = "client!gi", name = "u", descriptor = "[S") + public final short[] aShortArray30; + + @OriginalMember(owner = "client!gi", name = "w", descriptor = "F") + public float alpha; + + @OriginalMember(owner = "client!gi", name = "x", descriptor = "I") + public int z; + + @OriginalMember(owner = "client!gi", name = "y", descriptor = "I") + private int anInt2246; + + @OriginalMember(owner = "client!gi", name = "z", descriptor = "F") + public float aFloat9; + + @OriginalMember(owner = "client!gi", name = "A", descriptor = "Z") + public final boolean aBoolean126; + + @OriginalMember(owner = "client!gi", name = "B", descriptor = "Lclient!fj;") + public Light_Class45 aClass45_1; + + @OriginalMember(owner = "client!gi", name = "C", descriptor = "I") + public final int color; + + @OriginalMember(owner = "client!gi", name = "E", descriptor = "I") + private final int anInt2249; + + @OriginalMember(owner = "client!gi", name = "g", descriptor = "Z") + public boolean aBoolean125 = false; + + @OriginalMember(owner = "client!gi", name = "I", descriptor = "[F") + public final float[] diffuse = new float[4]; + + @OriginalMember(owner = "client!gi", name = "", descriptor = "(Lclient!wa;)V") + public Light(@OriginalArg(0) Buffer arg0) { + if (NOISE == null) { + init(); + } + this.level = arg0.g1(); + this.aBoolean124 = (this.level & 0x10) != 0; + this.aBoolean126 = (this.level & 0x8) != 0; + this.level &= 0x7; + this.x = arg0.g2(); + this.z = arg0.g2(); + this.y = arg0.g2(); + this.radius = arg0.g1(); + this.method1763(); + this.aShortArray30 = new short[this.radius * 2 + 1]; + @Pc(87) int local87; + for (local87 = 0; local87 < this.aShortArray30.length; local87++) { + this.aShortArray30[local87] = (short) arg0.g2(); + } + this.color = Rasteriser.palette[arg0.g2()]; + local87 = arg0.g1(); + this.anInt2249 = (local87 & 0xE0) << 3; + this.anInt2243 = local87 & 0x1F; + if (this.anInt2243 != 31) { + this.method1766(); + } + } + + @OriginalMember(owner = "client!gk", name = "b", descriptor = "(B)V") + public static void init() { + NOISE = craeteNoise(0.4F); + } + + @OriginalMember(owner = "client!qk", name = "a", descriptor = "(ZIIIIFII)[I") + public static int[] craeteNoise(@OriginalArg(5) float arg0) { + @Pc(11) int[] local11 = new int[2048]; + @Pc(15) TextureOp34 local15 = new TextureOp34(); + local15.anInt646 = 8; + local15.anInt642 = 4; + local15.anInt650 = 35; + local15.anInt641 = 8; + local15.anInt648 = (int) (arg0 * 4096.0F); + local15.aBoolean44 = true; + local15.postDecode(); + Texture.setSize(1, 2048); + local15.method584(0, local11); + return local11; + } + + @OriginalMember(owner = "client!gi", name = "a", descriptor = "(BIIII)V") + public final void method1762(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + this.anInt2233 = arg0; + this.alphaMin = arg2; + this.alphaMax = arg3; + this.anInt2246 = arg1; + } + + @OriginalMember(owner = "client!gi", name = "a", descriptor = "(I)V") + private void method1763() { + @Pc(10) int local10 = (this.radius << 7) + 64; + this.aFloat9 = 1.0F / (float) (local10 * local10); + } + + @OriginalMember(owner = "client!gi", name = "a", descriptor = "(ZII)V") + public final void method1765(@OriginalArg(0) boolean disableFlicker, @OriginalArg(1) int arg1) { + @Pc(26) int t = this.anInt2249 + arg1 * this.anInt2246 / 50 & 0x7FF; + @Pc(29) int local29 = this.anInt2233; + @Pc(62) int alpha; + if (local29 == 1) { + alpha = (MathUtils.sin[t] >> 6) + 1024; + } else if (local29 == 3) { + alpha = NOISE[t] >> 1; + } else if (local29 == 4) { + alpha = t >> 10 << 11; + } else if (local29 == 2) { + alpha = t; + } else if (local29 == 5) { + alpha = (t < 1024 ? t : 2048 - t) << 1; + } else { + alpha = 2048; + } + if (disableFlicker) { + alpha = 2048; + } + this.alpha = (float) (this.alphaMax + (alpha * this.alphaMin >> 11)) / 2048.0F; + @Pc(123) float local123 = this.alpha / 255.0F; + this.diffuse[0] = (float) (this.color >> 16 & 0xFF) * local123; + this.diffuse[2] = local123 * (float) (this.color & 0xFF); + this.diffuse[1] = (float) (this.color >> 8 & 0xFF) * local123; + } + + @OriginalMember(owner = "client!gi", name = "c", descriptor = "(I)V") + private void method1766() { + @Pc(4) int local4 = this.anInt2243; + if (local4 == 2) { + this.alphaMin = 2048; + this.alphaMax = 0; + this.anInt2233 = 1; + this.anInt2246 = 2048; + } else if (local4 == 3) { + this.alphaMax = 0; + this.anInt2246 = 4096; + this.anInt2233 = 1; + this.alphaMin = 2048; + } else if (local4 == 4) { + this.alphaMax = 0; + this.alphaMin = 2048; + this.anInt2233 = 4; + this.anInt2246 = 2048; + } else if (local4 == 5) { + this.anInt2233 = 4; + this.alphaMin = 2048; + this.anInt2246 = 8192; + this.alphaMax = 0; + } else if (local4 == 12) { + this.alphaMin = 2048; + this.anInt2233 = 2; + this.anInt2246 = 2048; + this.alphaMax = 0; + } else if (local4 == 13) { + this.anInt2246 = 8192; + this.alphaMin = 2048; + this.anInt2233 = 2; + this.alphaMax = 0; + } else if (local4 == 10) { + this.alphaMin = 512; + this.anInt2233 = 3; + this.alphaMax = 1536; + this.anInt2246 = 2048; + } else if (local4 == 11) { + this.anInt2233 = 3; + this.anInt2246 = 4096; + this.alphaMin = 512; + this.alphaMax = 1536; + } else if (local4 == 6) { + this.alphaMin = 768; + this.alphaMax = 1280; + this.anInt2233 = 3; + this.anInt2246 = 2048; + } else if (local4 == 7) { + this.alphaMin = 768; + this.alphaMax = 1280; + this.anInt2246 = 4096; + this.anInt2233 = 3; + } else if (local4 == 8) { + this.anInt2246 = 2048; + this.anInt2233 = 3; + this.alphaMin = 1024; + this.alphaMax = 1024; + } else if (local4 == 9) { + this.anInt2246 = 4096; + this.alphaMax = 1024; + this.alphaMin = 1024; + this.anInt2233 = 3; + } else if (local4 == 14) { + this.anInt2246 = 2048; + this.alphaMax = 1280; + this.anInt2233 = 1; + this.alphaMin = 768; + } else if (local4 == 15) { + this.alphaMin = 512; + this.anInt2246 = 4096; + this.alphaMax = 1536; + this.anInt2233 = 1; + } else if (local4 == 16) { + this.anInt2246 = 8192; + this.alphaMax = 1792; + this.anInt2233 = 1; + this.alphaMin = 256; + } else { + this.anInt2246 = 2048; + this.alphaMax = 0; + this.alphaMin = 2048; + this.anInt2233 = 0; + } + } +} diff --git a/client/src/main/java/rt4/LightType.java b/client/src/main/java/rt4/LightType.java new file mode 100644 index 0000000..4014381 --- /dev/null +++ b/client/src/main/java/rt4/LightType.java @@ -0,0 +1,46 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ic") +public final class LightType { + + @OriginalMember(owner = "client!ic", name = "g", descriptor = "I") + public int anInt2867 = 2048; + + @OriginalMember(owner = "client!ic", name = "c", descriptor = "I") + public int anInt2865 = 0; + + @OriginalMember(owner = "client!ic", name = "o", descriptor = "I") + public int anInt2872 = 0; + + @OriginalMember(owner = "client!ic", name = "p", descriptor = "I") + public int anInt2873 = 2048; + + @OriginalMember(owner = "client!ic", name = "a", descriptor = "(ILclient!wa;I)V") + public final void decode(@OriginalArg(1) Buffer arg0, @OriginalArg(2) int arg1) { + while (true) { + @Pc(5) int local5 = arg0.g1(); + if (local5 == 0) { + return; + } + this.method2258(local5, arg0, arg1); + } + } + + @OriginalMember(owner = "client!ic", name = "a", descriptor = "(ILclient!wa;IZ)V") + private void method2258(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1, @OriginalArg(2) int arg2) { + if (arg0 == 1) { + this.anInt2865 = arg1.g1(); + } else if (arg0 == 2) { + this.anInt2873 = arg1.g2(); + } else if (arg0 == 3) { + this.anInt2867 = arg1.g2(); + } else if (arg0 == 4) { + this.anInt2872 = arg1.g2b(); + } + } +} diff --git a/client/src/main/java/rt4/LightTypeList.java b/client/src/main/java/rt4/LightTypeList.java new file mode 100644 index 0000000..fd08b4b --- /dev/null +++ b/client/src/main/java/rt4/LightTypeList.java @@ -0,0 +1,47 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class LightTypeList { + @OriginalMember(owner = "client!rm", name = "d", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + @OriginalMember(owner = "client!gl", name = "a", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!id", name = "a", descriptor = "(Lclient!ve;B)V") + public static void init(@OriginalArg(0) Js5 arg0) { + archive = arg0; + } + + @OriginalMember(owner = "client!la", name = "a", descriptor = "(II)Lclient!ic;") + public static LightType get(@OriginalArg(1) int arg0) { + @Pc(10) LightType local10 = (LightType) types.get(arg0); + if (local10 != null) { + return local10; + } + @Pc(26) byte[] local26 = archive.fetchFile(31, arg0); + local10 = new LightType(); + if (local26 != null) { + local10.decode(new Buffer(local26), arg0); + } + types.put(local10, arg0); + return local10; + } + + @OriginalMember(owner = "client!c", name = "c", descriptor = "(II)V") + public static void clean() { + types.clean(5); + } + + @OriginalMember(owner = "client!gd", name = "b", descriptor = "(I)V") + public static void clear() { + types.clear(); + } + + @OriginalMember(owner = "client!hd", name = "a", descriptor = "(I)V") + public static void removeSoft() { + types.removeSoft(); + } +} diff --git a/client/src/main/java/rt4/Light_Class45.java b/client/src/main/java/rt4/Light_Class45.java new file mode 100644 index 0000000..9a3fd94 --- /dev/null +++ b/client/src/main/java/rt4/Light_Class45.java @@ -0,0 +1,213 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!fj") +public final class Light_Class45 { + + @OriginalMember(owner = "client!fj", name = "a", descriptor = "Lclient!vi;") + private GlVertexBufferObject aClass155_1; + + @OriginalMember(owner = "client!fj", name = "b", descriptor = "[I") + private int[] anIntArray177; + + @OriginalMember(owner = "client!fj", name = "c", descriptor = "[B") + private byte[] aByteArray23; + + @OriginalMember(owner = "client!fj", name = "d", descriptor = "[I") + private int[] anIntArray178; + + @OriginalMember(owner = "client!fj", name = "e", descriptor = "Lclient!vi;") + private GlVertexBufferObject aClass155_2; + + @OriginalMember(owner = "client!fj", name = "f", descriptor = "Ljava/nio/ByteBuffer;") + private ByteBuffer aByteBuffer1; + + @OriginalMember(owner = "client!fj", name = "g", descriptor = "[I") + private int[] anIntArray179; + + @OriginalMember(owner = "client!fj", name = "h", descriptor = "[I") + private int[] anIntArray180; + + @OriginalMember(owner = "client!fj", name = "i", descriptor = "[B") + private byte[] aByteArray24; + + @OriginalMember(owner = "client!fj", name = "j", descriptor = "I") + public int anInt2016; + + @OriginalMember(owner = "client!fj", name = "k", descriptor = "Ljava/nio/ByteBuffer;") + private ByteBuffer aByteBuffer2; + + @OriginalMember(owner = "client!fj", name = "l", descriptor = "I") + public int anInt2017; + + @OriginalMember(owner = "client!fj", name = "m", descriptor = "[B") + private byte[] aByteArray25; + + @OriginalMember(owner = "client!fj", name = "n", descriptor = "I") + public int anInt2018; + + @OriginalMember(owner = "client!fj", name = "o", descriptor = "Lclient!sc;") + private HashTable aClass133_4; + + @OriginalMember(owner = "client!fj", name = "p", descriptor = "I") + public int anInt2019; + + @OriginalMember(owner = "client!fj", name = "a", descriptor = "(Lclient!gi;IIIFFF)I") + public final int method1553(@OriginalArg(0) Light arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) float arg4, @OriginalArg(5) float arg5, @OriginalArg(6) float arg6) { + @Pc(1) long local1 = 0L; + if ((arg1 & 0x7F) == 0 || (arg3 & 0x7F) == 0) { + local1 = arg1 + (arg3 << 16); + @Pc(23) IntNode local23 = (IntNode) this.aClass133_4.get(local1); + if (local23 != null) { + return local23.value; + } + } + @Pc(31) int local31 = arg0.color; + @Pc(37) float local37 = (float) (arg0.x - arg1); + @Pc(43) float local43 = (float) (arg0.y - arg2); + @Pc(49) float local49 = (float) (arg0.z - arg3); + @Pc(64) float local64 = (float) Math.sqrt(local37 * local37 + local43 * local43 + local49 * local49); + @Pc(68) float local68 = 1.0F / local64; + @Pc(72) float local72 = local37 * local68; + @Pc(76) float local76 = local43 * local68; + @Pc(80) float local80 = local49 * local68; + @Pc(90) float local90 = local64 / (float) ((arg0.radius << 7) + 64); + @Pc(96) float local96 = 1.0F - local90 * local90; + if (local96 < 0.0F) { + local96 = 0.0F; + } + @Pc(114) float local114 = local72 * arg4 + local76 * arg5 + local80 * arg6; + if (local114 < 0.0F) { + local114 = 0.0F; + } + @Pc(126) float local126 = local114 * local96 * 2.0F; + if (local126 > 1.0F) { + local126 = 1.0F; + } + @Pc(142) int local142 = (int) (local126 * (float) (local31 >> 16 & 0xFF)); + if (local142 > 255) { + local142 = 255; + } + @Pc(157) int local157 = (int) (local126 * (float) (local31 >> 8 & 0xFF)); + if (local157 > 255) { + local157 = 255; + } + @Pc(170) int local170 = (int) (local126 * (float) (local31 & 0xFF)); + if (local170 > 255) { + local170 = 255; + } + this.aByteArray25[this.anInt2017] = (byte) local142; + this.aByteArray23[this.anInt2017] = (byte) local157; + this.aByteArray24[this.anInt2017] = (byte) local170; + this.anIntArray178[this.anInt2017] = arg1; + this.anIntArray180[this.anInt2017] = arg2; + this.anIntArray179[this.anInt2017] = arg3; + this.aClass133_4.put(new IntNode(this.anInt2017), local1); + return this.anInt2017++; + } + + @OriginalMember(owner = "client!fj", name = "a", descriptor = "()V") + public final void method1554() { + @Pc(7) Buffer local7 = new Buffer(this.anInt2018 * 4); + @Pc(15) Buffer local15 = new Buffer(this.anInt2017 * 16); + @Pc(19) int local19; + if (GlRenderer.bigEndian) { + for (local19 = 0; local19 < this.anInt2017; local19++) { + local15.p1(this.aByteArray25[local19]); + local15.p1(this.aByteArray23[local19]); + local15.p1(this.aByteArray24[local19]); + local15.p1(255); + local15.pFloat((float) this.anIntArray178[local19]); + local15.pFloat((float) this.anIntArray180[local19]); + local15.pFloat((float) this.anIntArray179[local19]); + } + for (local19 = 0; local19 < this.anInt2018; local19++) { + local7.p4(this.anIntArray177[local19]); + } + } else { + for (local19 = 0; local19 < this.anInt2017; local19++) { + local15.p1(this.aByteArray25[local19]); + local15.p1(this.aByteArray23[local19]); + local15.p1(this.aByteArray24[local19]); + local15.p1(255); + local15.gFloat((float) this.anIntArray178[local19]); + local15.gFloat((float) this.anIntArray180[local19]); + local15.gFloat((float) this.anIntArray179[local19]); + } + for (local19 = 0; local19 < this.anInt2018; local19++) { + local7.ip4(this.anIntArray177[local19]); + } + } + if (GlRenderer.arbVboSupported) { + this.aClass155_1 = new GlVertexBufferObject(); + @Pc(173) ByteBuffer local173 = ByteBuffer.wrap(local15.data); + this.aClass155_1.setArrayBuffer(local173); + this.aClass155_2 = new GlVertexBufferObject(); + @Pc(186) ByteBuffer local186 = ByteBuffer.wrap(local7.data); + this.aClass155_2.setElementArrayBuffer(local186); + } else { + this.aByteBuffer1 = ByteBuffer.allocateDirect(local15.offset); + this.aByteBuffer1.put(local15.data); + this.aByteBuffer1.flip(); + this.aByteBuffer2 = ByteBuffer.allocateDirect(local7.offset); + this.aByteBuffer2.put(local7.data); + this.aByteBuffer2.flip(); + } + this.anIntArray178 = null; + this.anIntArray180 = null; + this.anIntArray179 = null; + this.aByteArray25 = null; + this.aByteArray23 = null; + this.aByteArray24 = null; + this.anIntArray177 = null; + this.aClass133_4 = null; + } + + @OriginalMember(owner = "client!fj", name = "b", descriptor = "()V") + public final void method1555() { + this.anIntArray177 = new int[this.anInt2016]; + this.anIntArray178 = new int[this.anInt2019]; + this.anIntArray180 = new int[this.anInt2019]; + this.anIntArray179 = new int[this.anInt2019]; + this.aByteArray25 = new byte[this.anInt2019]; + this.aByteArray23 = new byte[this.anInt2019]; + this.aByteArray24 = new byte[this.anInt2019]; + this.aClass133_4 = new HashTable(IntUtils.clp2(this.anInt2019)); + } + + @OriginalMember(owner = "client!fj", name = "c", descriptor = "()V") + public final void method1556() { + @Pc(1) GL2 gl = GlRenderer.gl; + if (GlRenderer.arbVboSupported) { + this.aClass155_1.bindArray(); + gl.glInterleavedArrays(GL2.GL_C4UB_V3F, 16, 0L); + GlRenderer.normalArrayEnabled = false; + this.aClass155_2.bindElementArray(); + gl.glDrawElements(GL2.GL_TRIANGLES, this.anInt2018, GL2.GL_UNSIGNED_INT, 0L); + return; + } + if (GlRenderer.arbVboSupported) { + gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, 0); + gl.glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, 0); + } + gl.glInterleavedArrays(GL2.GL_C4UB_V3F, 16, this.aByteBuffer1); + GlRenderer.normalArrayEnabled = false; + gl.glDrawElements(GL2.GL_TRIANGLES, this.anInt2018, GL2.GL_UNSIGNED_INT, this.aByteBuffer2); + } + + @OriginalMember(owner = "client!fj", name = "a", descriptor = "([I)V") + public final void method1557(@OriginalArg(0) int[] arg0) { + for (@Pc(1) int local1 = 1; local1 < arg0.length - 1; local1++) { + this.anIntArray177[this.anInt2018++] = arg0[0]; + this.anIntArray177[this.anInt2018++] = arg0[local1]; + this.anIntArray177[this.anInt2018++] = arg0[local1 + 1]; + } + } +} diff --git a/client/src/main/java/rt4/LightingManager.java b/client/src/main/java/rt4/LightingManager.java new file mode 100644 index 0000000..3120545 --- /dev/null +++ b/client/src/main/java/rt4/LightingManager.java @@ -0,0 +1,465 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class LightingManager { + @OriginalMember(owner = "client!jf", name = "b", descriptor = "[F") + private static final float[] aFloatArray17 = new float[]{0.0F, 0.0F, 0.0F, 1.0F}; + @OriginalMember(owner = "client!jf", name = "l", descriptor = "I") + public static int lightCount = 0; + @OriginalMember(owner = "client!jf", name = "a", descriptor = "[Lclient!gi;") + public static Light[] lights; + @OriginalMember(owner = "client!rh", name = "d", descriptor = "I") + public static int anInt4866; + @OriginalMember(owner = "client!aa", name = "m", descriptor = "I") + public static int anInt15; + @OriginalMember(owner = "client!gf", name = "M", descriptor = "I") + public static int anInt4698; + @OriginalMember(owner = "client!ch", name = "w", descriptor = "I") + public static int anInt987; + @OriginalMember(owner = "client!id", name = "b", descriptor = "I") + public static int anInt2875 = -1; + @OriginalMember(owner = "client!jf", name = "c", descriptor = "[I") + private static int[] anIntArray283; + @OriginalMember(owner = "client!jf", name = "d", descriptor = "I") + private static int anInt3029; + @OriginalMember(owner = "client!jf", name = "e", descriptor = "I") + private static int anInt3030; + @OriginalMember(owner = "client!jf", name = "f", descriptor = "[Z") + private static boolean[] enabledLights; + @OriginalMember(owner = "client!jf", name = "g", descriptor = "[[[I") + private static int[][][] anIntArrayArrayArray11; + @OriginalMember(owner = "client!jf", name = "h", descriptor = "[I") + private static int[] anIntArray284; + @OriginalMember(owner = "client!jf", name = "i", descriptor = "I") + private static int anInt3031; + @OriginalMember(owner = "client!jf", name = "j", descriptor = "I") + private static int anInt3032; + @OriginalMember(owner = "client!jf", name = "k", descriptor = "I") + private static int anInt3033; + @OriginalMember(owner = "client!jf", name = "m", descriptor = "[Z") + private static boolean[] aBooleanArray66; + @OriginalMember(owner = "client!jf", name = "n", descriptor = "I") + private static int anInt3035; + @OriginalMember(owner = "client!jf", name = "o", descriptor = "I") + private static int length; + @OriginalMember(owner = "client!jf", name = "p", descriptor = "I") + private static int width; + + @OriginalMember(owner = "client!jf", name = "a", descriptor = "(IIIIIII)V") + public static void method2388(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6) { + if (!Preferences.highDetailLighting) { + return; + } + if (arg0 == 1 && arg5 > 0) { + method2393(arg1, arg2, arg3, arg4, arg5 - 1, arg6); + } else if (arg0 == 4 && arg5 < width - 1) { + method2393(arg1, arg2, arg3, arg4, arg5 + 1, arg6); + } else if (arg0 == 8 && arg6 > 0) { + method2393(arg1, arg2, arg3, arg4, arg5, arg6 - 1); + } else if (arg0 == 2 && arg6 < length - 1) { + method2393(arg1, arg2, arg3, arg4, arg5, arg6 + 1); + } else if (arg0 == 16 && arg5 > 0 && arg6 < length - 1) { + method2393(arg1, arg2, arg3, arg4, arg5 - 1, arg6 + 1); + } else if (arg0 == 32 && arg5 < width - 1 && arg6 < length - 1) { + method2393(arg1, arg2, arg3, arg4, arg5 + 1, arg6 + 1); + } else if (arg0 == 128 && arg5 > 0 && arg6 > 0) { + method2393(arg1, arg2, arg3, arg4, arg5 - 1, arg6 - 1); + } else if (arg0 == 64 && arg5 < width - 1 && arg6 > 0) { + method2393(arg1, arg2, arg3, arg4, arg5 + 1, arg6 - 1); + } + } + + @OriginalMember(owner = "client!jf", name = "a", descriptor = "(Lclient!gi;)V") + public static void method2389(@OriginalArg(0) Light arg0) { + if (lightCount >= 255) { + System.out.println("Number of lights added exceeds maximum!"); + } else { + lights[lightCount++] = arg0; + } + } + + @OriginalMember(owner = "client!jf", name = "a", descriptor = "()V") + public static void method2390() { + for (@Pc(1) int local1 = 0; local1 < 4; local1++) { + anIntArray284[local1] = -1; + disableLight(local1); + } + } + + @OriginalMember(owner = "client!jf", name = "a", descriptor = "(IIIIIIII)V") + public static void method2391(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7) { + if (!Preferences.highDetailLighting || anInt3031 == arg3 && anInt3033 == arg4 && anInt3029 == arg5 && anInt3035 == arg6 && anInt3030 == arg7) { + return; + } + @Pc(20) int local20; + for (local20 = 0; local20 < 4; local20++) { + aBooleanArray66[local20] = false; + } + local20 = 0; + @Pc(33) int local33 = 0; + @Pc(35) int local35; + @Pc(40) int local40; + label112: + for (local35 = arg4; local35 <= arg6; local35++) { + label110: + for (local40 = arg5; local40 <= arg7; local40++) { + @Pc(51) int local51 = anIntArrayArrayArray11[arg3][local35][local40]; + while (true) { + while (true) { + label96: + while (true) { + if (local51 == 0) { + continue label110; + } + @Pc(59) int local59 = (local51 & 0xFF) - 1; + local51 >>>= 0x8; + @Pc(65) int local65; + for (local65 = 0; local65 < local33; local65++) { + if (local59 == anIntArray283[local65]) { + continue label96; + } + } + for (local65 = 0; local65 < 4; local65++) { + if (local59 == anIntArray284[local65]) { + if (!aBooleanArray66[local65]) { + aBooleanArray66[local65] = true; + local20++; + if (local20 == 4) { + break label112; + } + } + continue label96; + } + } + anIntArray283[local33++] = local59; + local20++; + if (local20 == 4) { + break label112; + } + } + } + } + } + } + for (local35 = 0; local35 < local33; local35++) { + for (local40 = 0; local40 < 4; local40++) { + if (!aBooleanArray66[local40]) { + anIntArray284[local40] = anIntArray283[local35]; + aBooleanArray66[local40] = true; + method2403(local40, lights[anIntArray283[local35]], arg0, arg1, arg2); + break; + } + } + } + for (local35 = 0; local35 < 4; local35++) { + if (!aBooleanArray66[local35]) { + anIntArray284[local35] = -1; + disableLight(local35); + } + } + anInt3031 = arg3; + anInt3033 = arg4; + anInt3029 = arg5; + anInt3035 = arg6; + anInt3030 = arg7; + } + + @OriginalMember(owner = "client!jf", name = "a", descriptor = "(III)V") + public static void method2392() { + anInt3032 = 4; + width = 104; + length = 104; + anIntArrayArrayArray11 = new int[anInt3032][width][length]; + } + + @OriginalMember(owner = "client!jf", name = "a", descriptor = "(IIIIII)V") + public static void method2393(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + if (!Preferences.highDetailLighting || anInt3031 == arg3 && anInt3033 == arg4 && anInt3029 == arg5 && anInt3035 == arg4 && anInt3030 == arg5) { + return; + } + @Pc(20) int local20; + for (local20 = 0; local20 < 4; local20++) { + aBooleanArray66[local20] = false; + } + local20 = 0; + @Pc(39) int local39 = anIntArrayArrayArray11[arg3][arg4][arg5]; + while (true) { + @Pc(47) int local47; + @Pc(53) int local53; + label72: + while (local39 != 0) { + local47 = (local39 & 0xFF) - 1; + local39 >>>= 0x8; + for (local53 = 0; local53 < 4; local53++) { + if (local47 == anIntArray284[local53]) { + aBooleanArray66[local53] = true; + continue label72; + } + } + anIntArray283[local20++] = local47; + } + for (local47 = 0; local47 < local20; local47++) { + for (local53 = 0; local53 < 4; local53++) { + if (!aBooleanArray66[local53]) { + anIntArray284[local53] = anIntArray283[local47]; + aBooleanArray66[local53] = true; + method2403(local53, lights[anIntArray283[local47]], arg0, arg1, arg2); + break; + } + } + } + for (local47 = 0; local47 < 4; local47++) { + if (!aBooleanArray66[local47]) { + anIntArray284[local47] = -1; + disableLight(local47); + } + } + anInt3031 = arg3; + anInt3033 = arg4; + anInt3029 = arg5; + anInt3035 = arg4; + anInt3030 = arg5; + return; + } + } + + @OriginalMember(owner = "client!jf", name = "a", descriptor = "(IZ)V") + public static void method2394(@OriginalArg(0) int arg0, @OriginalArg(1) boolean arg1) { + for (@Pc(1) int local1 = 0; local1 < lightCount; local1++) { + lights[local1].method1765(arg1, arg0); + } + anInt3031 = -1; + anInt3033 = -1; + anInt3029 = -1; + anInt3035 = -1; + anInt3030 = -1; + } + + @OriginalMember(owner = "client!jf", name = "b", descriptor = "()V") + public static void method2395() { + for (@Pc(1) int local1 = 0; local1 < lightCount; local1++) { + @Pc(8) Light local8 = lights[local1]; + @Pc(11) int local11 = local8.level; + if (local8.aBoolean124) { + local11 = 0; + } + @Pc(19) int local19 = local8.level; + if (local8.aBoolean126) { + local19 = 3; + } + for (@Pc(26) int local26 = local11; local26 <= local19; local26++) { + @Pc(31) int local31 = 0; + @Pc(39) int local39 = (local8.z >> 7) - local8.radius; + if (local39 < 0) { + local31 = -local39; + local39 = 0; + } + @Pc(55) int local55 = (local8.z >> 7) + local8.radius; + if (local55 > length - 1) { + local55 = length - 1; + } + for (@Pc(66) int local66 = local39; local66 <= local55; local66++) { + @Pc(75) short local75 = local8.aShortArray30[local31++]; + @Pc(87) int local87 = (local8.x >> 7) + (local75 >> 8) - local8.radius; + @Pc(95) int local95 = local87 + (local75 & 0xFF) - 1; + if (local87 < 0) { + local87 = 0; + } + if (local95 > width - 1) { + local95 = width - 1; + } + for (@Pc(110) int local110 = local87; local110 <= local95; local110++) { + @Pc(121) int local121 = anIntArrayArrayArray11[local26][local110][local66]; + if ((local121 & 0xFF) == 0) { + anIntArrayArrayArray11[local26][local110][local66] = local121 | local1 + 1; + } else if ((local121 & 0xFF00) == 0) { + anIntArrayArrayArray11[local26][local110][local66] = local121 | local1 + 1 << 8; + } else if ((local121 & 0xFF0000) == 0) { + anIntArrayArrayArray11[local26][local110][local66] = local121 | local1 + 1 << 16; + } else if ((local121 & 0xFF000000) == 0) { + anIntArrayArrayArray11[local26][local110][local66] = local121 | local1 + 1 << 24; + } + } + } + } + } + } + + @OriginalMember(owner = "client!jf", name = "a", descriptor = "(I)V") + private static void disableLight(@OriginalArg(0) int i) { + if (enabledLights[i]) { + enabledLights[i] = false; + @Pc(14) int light = i + 16384 + 4; + @Pc(16) GL2 gl = GlRenderer.gl; + gl.glDisable(light); + } + } + + @OriginalMember(owner = "client!jf", name = "a", descriptor = "(IIIII)V") + public static void method2397(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (!Preferences.highDetailLighting) { + return; + } + label43: + for (@Pc(4) int local4 = 0; local4 < 4; local4++) { + if (anIntArray284[local4] != -1) { + @Pc(20) int local20 = anIntArrayArrayArray11[arg0][arg1][arg2]; + @Pc(28) int local28; + while (local20 != 0) { + local28 = (local20 & 0xFF) - 1; + local20 >>>= 0x8; + if (local28 == anIntArray284[local4]) { + continue label43; + } + } + local20 = anIntArrayArrayArray11[arg0][arg3][arg4]; + while (local20 != 0) { + local28 = (local20 & 0xFF) - 1; + local20 >>>= 0x8; + if (local28 == anIntArray284[local4]) { + continue label43; + } + } + } + anIntArray284[local4] = -1; + disableLight(local4); + } + } + + @OriginalMember(owner = "client!jf", name = "c", descriptor = "()V") + public static void method2398() { + lights = null; + anIntArray284 = null; + enabledLights = null; + anIntArray283 = null; + aBooleanArray66 = null; + anIntArrayArrayArray11 = null; + } + + @OriginalMember(owner = "client!jf", name = "e", descriptor = "()V") + public static void method2400() { + @Pc(1) GL2 gl = GlRenderer.gl; + @Pc(3) int local3; + for (local3 = 0; local3 < 4; local3++) { + @Pc(10) int local10 = local3 + 16388; + gl.glLightfv(local10, GL2.GL_AMBIENT, new float[]{0.0F, 0.0F, 0.0F, 1.0F}, 0); + gl.glLightf(local10, GL2.GL_LINEAR_ATTENUATION, 0.0F); + gl.glLightf(local10, GL2.GL_CONSTANT_ATTENUATION, 0.0F); + } + for (local3 = 0; local3 < 4; local3++) { + anIntArray284[local3] = -1; + disableLight(local3); + } + } + + @OriginalMember(owner = "client!jf", name = "f", descriptor = "()V") + public static void method2401() { + lights = new Light[255]; + anIntArray284 = new int[4]; + enabledLights = new boolean[4]; + anIntArray283 = new int[4]; + aBooleanArray66 = new boolean[4]; + anIntArrayArrayArray11 = new int[anInt3032][width][length]; + } + + @OriginalMember(owner = "client!jf", name = "a", descriptor = "(II[[[Lclient!bj;)V") + public static void method2402(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) Tile[][][] arg2) { + if (!Preferences.highDetailLighting) { + return; + } + @Pc(4) GL2 gl = GlRenderer.gl; + MaterialManager.setMaterial(0, 0); + GlRenderer.setTextureCombineRgbMode(0); + GlRenderer.resetTextureMatrix(); + GlRenderer.setTextureId(GlRenderer.anInt5328); + gl.glDepthMask(false); + GlRenderer.setLightingEnabled(false); + gl.glBlendFunc(GL2.GL_DST_COLOR, GL2.GL_ONE); + gl.glFogfv(GL2.GL_FOG_COLOR, new float[]{0.0F, 0.0F, 0.0F, 0.0F}, 0); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_CONSTANT); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_OPERAND0_RGB, GL2.GL_SRC_ALPHA); + label71: + for (@Pc(56) int local56 = 0; local56 < lightCount; local56++) { + @Pc(63) Light local63 = lights[local56]; + @Pc(66) int local66 = local63.level; + if (local63.aBoolean125) { + local66--; + } + if (local63.aClass45_1 != null) { + @Pc(76) int local76 = 0; + @Pc(84) int local84 = (local63.z >> 7) - local63.radius; + @Pc(92) int local92 = (local63.z >> 7) + local63.radius; + if (local92 >= anInt4866) { + local92 = anInt4866 - 1; + } + if (local84 < anInt4698) { + local76 = anInt4698 - local84; + local84 = anInt4698; + } + for (@Pc(112) int local112 = local84; local112 <= local92; local112++) { + @Pc(121) short local121 = local63.aShortArray30[local76++]; + @Pc(133) int local133 = (local63.x >> 7) + (local121 >> 8) - local63.radius; + @Pc(141) int local141 = local133 + (local121 & 0xFF) - 1; + if (local133 < anInt987) { + local133 = anInt987; + } + if (local141 >= anInt15) { + local141 = anInt15 - 1; + } + for (@Pc(155) int local155 = local133; local155 <= local141; local155++) { + @Pc(160) Tile local160 = null; + if (local66 >= 0) { + local160 = arg2[local66][local155][local112]; + } + if (local66 < 0 || local160 != null && local160.aBoolean45) { + GlRenderer.method4159(201.5F - (float) local63.level * 50.0F - 1.5F); + gl.glTexEnvfv(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_COLOR, new float[]{0.0F, 0.0F, 0.0F, local63.alpha}, 0); + local63.aClass45_1.method1556(); + continue label71; + } + } + } + } + } + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_TEXTURE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_OPERAND0_RGB, GL2.GL_SRC_COLOR); + gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA); + gl.glDepthMask(true); + gl.glFogfv(GL2.GL_FOG_COLOR, FogManager.fogColor, 0); + gl.glEnableClientState(GL2.GL_TEXTURE_COORD_ARRAY); + GlRenderer.restoreLighting(); + } + + @OriginalMember(owner = "client!jf", name = "a", descriptor = "(ILclient!gi;III)V") + private static void method2403(@OriginalArg(0) int arg0, @OriginalArg(1) Light arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + @Pc(5) int local5 = arg0 + 16384 + 4; + @Pc(7) GL2 gl = GlRenderer.gl; + if (!enabledLights[arg0]) { + gl.glEnable(local5); + enabledLights[arg0] = true; + } + gl.glLightf(local5, GL2.GL_QUADRATIC_ATTENUATION, arg1.aFloat9); + gl.glLightfv(local5, GL2.GL_DIFFUSE, arg1.diffuse, 0); + aFloatArray17[0] = arg1.x - arg2; + aFloatArray17[1] = arg1.y - arg3; + aFloatArray17[2] = arg1.z - arg4; + gl.glLightfv(local5, GL2.GL_POSITION, aFloatArray17, 0); + } + + @OriginalMember(owner = "client!jf", name = "g", descriptor = "()V") + public static void method2404() { + lightCount = 0; + for (@Pc(3) int local3 = 0; local3 < anInt3032; local3++) { + for (@Pc(8) int local8 = 0; local8 < width; local8++) { + for (@Pc(13) int local13 = 0; local13 < length; local13++) { + anIntArrayArrayArray11[local3][local8][local13] = 0; + } + } + } + } + +} diff --git a/client/src/main/java/rt4/LinkedList.java b/client/src/main/java/rt4/LinkedList.java new file mode 100644 index 0000000..86f0aa0 --- /dev/null +++ b/client/src/main/java/rt4/LinkedList.java @@ -0,0 +1,115 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ih") +public final class LinkedList { + + @OriginalMember(owner = "client!ih", name = "p", descriptor = "Lclient!ab;") + private Node aClass3_110; + + @OriginalMember(owner = "client!ih", name = "m", descriptor = "Lclient!ab;") + public final Node aClass3_109 = new Node(); + + @OriginalMember(owner = "client!ih", name = "", descriptor = "()V") + public LinkedList() { + this.aClass3_109.previousNode = this.aClass3_109; + this.aClass3_109.nextNode = this.aClass3_109; + } + + @OriginalMember(owner = "client!ih", name = "a", descriptor = "(I)V") + public final void clear() { + while (true) { + @Pc(5) Node local5 = this.aClass3_109.nextNode; + if (local5 == this.aClass3_109) { + this.aClass3_110 = null; + return; + } + local5.unlink(); + } + } + + @OriginalMember(owner = "client!ih", name = "b", descriptor = "(I)Lclient!ab;") + public final Node tail() { + @Pc(7) Node local7 = this.aClass3_109.previousNode; + if (this.aClass3_109 == local7) { + this.aClass3_110 = null; + return null; + } else { + this.aClass3_110 = local7.previousNode; + return local7; + } + } + + @OriginalMember(owner = "client!ih", name = "a", descriptor = "(ZLclient!ab;)V") + public final void addTail(@OriginalArg(1) Node arg0) { + if (arg0.previousNode != null) { + arg0.unlink(); + } + arg0.nextNode = this.aClass3_109; + arg0.previousNode = this.aClass3_109.previousNode; + arg0.previousNode.nextNode = arg0; + arg0.nextNode.previousNode = arg0; + } + + @OriginalMember(owner = "client!ih", name = "a", descriptor = "(ILclient!ab;)V") + public final void addHead(@OriginalArg(1) Node arg0) { + if (arg0.previousNode != null) { + arg0.unlink(); + } + arg0.nextNode = this.aClass3_109.nextNode; + arg0.previousNode = this.aClass3_109; + arg0.previousNode.nextNode = arg0; + arg0.nextNode.previousNode = arg0; + } + + @OriginalMember(owner = "client!ih", name = "d", descriptor = "(I)Lclient!ab;") + public final Node prev() { + @Pc(13) Node local13 = this.aClass3_110; + if (this.aClass3_109 == local13) { + this.aClass3_110 = null; + return null; + } else { + this.aClass3_110 = local13.previousNode; + return local13; + } + } + + @OriginalMember(owner = "client!ih", name = "a", descriptor = "(B)Lclient!ab;") + public final Node removeHead() { + @Pc(3) Node local3 = this.aClass3_109.nextNode; + if (this.aClass3_109 == local3) { + return null; + } else { + local3.unlink(); + return local3; + } + } + + @OriginalMember(owner = "client!ih", name = "e", descriptor = "(I)Lclient!ab;") + public final Node next() { + @Pc(12) Node local12 = this.aClass3_110; + if (local12 == this.aClass3_109) { + this.aClass3_110 = null; + return null; + } else { + this.aClass3_110 = local12.nextNode; + return local12; + } + } + + @OriginalMember(owner = "client!ih", name = "f", descriptor = "(I)Lclient!ab;") + public final Node head() { + @Pc(3) Node local3 = this.aClass3_109.nextNode; + if (this.aClass3_109 == local3) { + this.aClass3_110 = null; + return null; + } else { + this.aClass3_110 = local3.nextNode; + return local3; + } + } +} diff --git a/client/src/main/java/rt4/LiquidMaterialRenderer.java b/client/src/main/java/rt4/LiquidMaterialRenderer.java new file mode 100644 index 0000000..0a6b8df --- /dev/null +++ b/client/src/main/java/rt4/LiquidMaterialRenderer.java @@ -0,0 +1,210 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; + +@OriginalClass("client!rd") +public final class LiquidMaterialRenderer implements MaterialRenderer { + + @OriginalMember(owner = "client!rd", name = "d", descriptor = "[F") + public static final float[] aFloatArray24 = new float[4]; + @OriginalMember(owner = "client!rd", name = "a", descriptor = "I") + private int anInt4829 = -1; + + @OriginalMember(owner = "client!rd", name = "e", descriptor = "I") + private int anInt4831 = -1; + + @OriginalMember(owner = "client!rd", name = "c", descriptor = "I") + private int anInt4830; + + @OriginalMember(owner = "client!rd", name = "b", descriptor = "Ljava/nio/FloatBuffer;") + private FloatBuffer aFloatBuffer1; + + @OriginalMember(owner = "client!rd", name = "", descriptor = "()V") + public LiquidMaterialRenderer() { + if (this.anInt4831 < 0 && (GlRenderer.arbVertexProgramSupported && GlRenderer.maxTextureUnits >= 2)) { + @Pc(19) int[] local19 = new int[1]; + @Pc(21) GL2 gl = GlRenderer.gl; + gl.glGenProgramsARB(1, local19, 0); + this.anInt4830 = local19[0]; + @Pc(42) int[][] local42 = method874(0.4F); + @Pc(53) int[][] local53 = method874(0.4F); + @Pc(58) Buffer local58 = new Buffer(262144); + for (@Pc(60) int local60 = 0; local60 < 256; local60++) { + @Pc(67) int[] local67 = local42[local60]; + @Pc(71) int[] local71 = local53[local60]; + for (@Pc(73) int local73 = 0; local73 < 64; local73++) { + if (GlRenderer.bigEndian) { + local58.pFloat((float) local67[local73] / 4096.0F); + local58.pFloat((float) local71[local73] / 4096.0F); + local58.pFloat(1.0F); + local58.pFloat(1.0F); + } else { + local58.gFloat((float) local67[local73] / 4096.0F); + local58.gFloat((float) local71[local73] / 4096.0F); + local58.gFloat(1.0F); + local58.gFloat(1.0F); + } + } + } + @Pc(141) ByteBuffer local141 = ByteBuffer.allocateDirect(local58.offset).order(ByteOrder.nativeOrder()); + local141.put(local58.data, 0, local58.offset); + local141.flip(); + this.aFloatBuffer1 = local141.asFloatBuffer().asReadOnlyBuffer(); + this.method3719(); + this.method3720(); + } + } + + @OriginalMember(owner = "client!cj", name = "a", descriptor = "(ZIIIIIIFB)[[I") + public static int[][] method874(@OriginalArg(7) float arg0) { + @Pc(15) int[][] local15 = new int[256][64]; + @Pc(19) TextureOp34 local19 = new TextureOp34(); + local19.anInt648 = (int) (arg0 * 4096.0F); + local19.anInt642 = 3; + local19.anInt641 = 4; + local19.aBoolean44 = false; + local19.anInt646 = 8; + local19.postDecode(); + Texture.setSize(256, 64); + for (@Pc(46) int local46 = 0; local46 < 256; local46++) { + local19.method584(local46, local15[local46]); + } + return local15; + } + + @OriginalMember(owner = "client!rd", name = "a", descriptor = "()V") + @Override + public final void unbind() { + if (this.anInt4831 >= 0) { + @Pc(5) GL2 gl = GlRenderer.gl; + gl.glCallList(this.anInt4831 + 1); + } + } + + @OriginalMember(owner = "client!rd", name = "c", descriptor = "()I") + @Override + public final int getFlags() { + return 0; + } + + @OriginalMember(owner = "client!rd", name = "b", descriptor = "()V") + @Override + public final void bind() { + if (this.anInt4831 < 0) { + return; + } + @Pc(5) GL2 gl = GlRenderer.gl; + gl.glCallList(this.anInt4831); + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glMatrixMode(GL2.GL_TEXTURE); + gl.glTranslatef((float) MaterialManager.anInt406, (float) MaterialManager.anInt4675, (float) MaterialManager.anInt5158); + gl.glRotatef(-((float) MaterialManager.anInt1815 * 360.0F) / 2048.0F, 0.0F, 1.0F, 0.0F); + gl.glRotatef(-((float) MaterialManager.anInt5559 * 360.0F) / 2048.0F, 1.0F, 0.0F, 0.0F); + gl.glRotatef(-180.0F, 1.0F, 0.0F, 0.0F); + gl.glMatrixMode(GL2.GL_MODELVIEW); + if (!MaterialManager.allows3DTextureMapping) { + gl.glBindTexture(GL2.GL_TEXTURE_2D, MaterialManager.anIntArray341[(int) ((float) (GlRenderer.anInt5323 * 64) * 0.005F) % 64]); + } + gl.glActiveTexture(GL2.GL_TEXTURE0); + if (this.anInt4829 == GlRenderer.anInt5323) { + return; + } + @Pc(85) int local85 = (GlRenderer.anInt5323 & 0xFF) * 256; + for (@Pc(87) int local87 = 0; local87 < 64; local87++) { + this.aFloatBuffer1.position(local85); + gl.glProgramLocalParameter4fvARB(GL2.GL_VERTEX_PROGRAM_ARB, local87, this.aFloatBuffer1); + local85 += 4; + } + if (MaterialManager.allows3DTextureMapping) { + gl.glProgramLocalParameter4fARB(GL2.GL_VERTEX_PROGRAM_ARB, 65, (float) GlRenderer.anInt5323 * 0.005F, 0.0F, 0.0F, 1.0F); + } else { + gl.glProgramLocalParameter4fARB(GL2.GL_VERTEX_PROGRAM_ARB, 65, 0.0F, 0.0F, 0.0F, 1.0F); + } + this.anInt4829 = GlRenderer.anInt5323; + } + + @OriginalMember(owner = "client!rd", name = "e", descriptor = "()V") + private void method3719() { + @Pc(1) GL2 gl = GlRenderer.gl; + this.anInt4831 = gl.glGenLists(2); + gl.glNewList(this.anInt4831, GL2.GL_COMPILE); + gl.glActiveTexture(GL2.GL_TEXTURE1); + if (MaterialManager.allows3DTextureMapping) { + gl.glBindTexture(GL2.GL_TEXTURE_3D, MaterialManager.texture3D); + } + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_ADD); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_REPLACE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_PREVIOUS); + gl.glActiveTexture(GL2.GL_TEXTURE0); + gl.glBindProgramARB(GL2.GL_VERTEX_PROGRAM_ARB, this.anInt4830); + gl.glEnable(GL2.GL_VERTEX_PROGRAM_ARB); + gl.glEndList(); + gl.glNewList(this.anInt4831 + 1, GL2.GL_COMPILE); + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glMatrixMode(GL2.GL_TEXTURE); + gl.glLoadIdentity(); + gl.glMatrixMode(GL2.GL_MODELVIEW); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_TEXTURE); + gl.glDisable(MaterialManager.allows3DTextureMapping ? GL2.GL_TEXTURE_3D : GL2.GL_TEXTURE_2D); + gl.glActiveTexture(GL2.GL_TEXTURE0); + gl.glBindProgramARB(GL2.GL_VERTEX_PROGRAM_ARB, 0); + gl.glDisable(GL2.GL_VERTEX_PROGRAM_ARB); + gl.glDisable(GL2.GL_FRAGMENT_PROGRAM_ARB); + gl.glEndList(); + } + + @OriginalMember(owner = "client!rd", name = "f", descriptor = "()V") + private void method3720() { + if (this.anInt4831 < 0) { + return; + } + @Pc(4) GL2 gl = GlRenderer.gl; + @Pc(7) int[] local7 = new int[1]; + gl.glBindProgramARB(GL2.GL_VERTEX_PROGRAM_ARB, this.anInt4830); + gl.glProgramStringARB(GL2.GL_VERTEX_PROGRAM_ARB, GL2.GL_PROGRAM_FORMAT_ASCII_ARB, "!!ARBvp1.0\nATTRIB iPos = vertex.position;\nATTRIB iColour = vertex.color;\nOUTPUT oPos = result.position;\nOUTPUT oColour = result.color;\nOUTPUT oTexCoord0 = result.texcoord[0];\nOUTPUT oTexCoord1 = result.texcoord[1];\nOUTPUT oFogCoord = result.fogcoord;\nPARAM time = program.local[65];\nPARAM turbulence = program.local[64];\nPARAM lightAmbient = program.local[66]; \nPARAM pMatrix[4] = { state.matrix.projection };\nPARAM mvMatrix[4] = { state.matrix.modelview };\nPARAM ivMatrix[4] = { state.matrix.texture[1] };\nPARAM fNoise[64] = { program.local[0..63] };\nTEMP noise, clipPos, viewPos, worldPos;\nADDRESS noiseAddr;\nDP4 viewPos.x, mvMatrix[0], iPos;\nDP4 viewPos.y, mvMatrix[1], iPos;\nDP4 viewPos.z, mvMatrix[2], iPos;\nDP4 viewPos.w, mvMatrix[3], iPos;\nDP4 worldPos.x, ivMatrix[0], viewPos;\nDP4 worldPos.y, ivMatrix[1], viewPos;\nDP4 worldPos.z, ivMatrix[2], viewPos;\nDP4 worldPos.w, ivMatrix[3], viewPos;\nADD noise.x, worldPos.x, worldPos.z;SUB noise.y, worldPos.z, worldPos.x;MUL noise, noise, 0.0001220703125;\nFRC noise, noise;\nMUL noise, noise, 64;\nARL noiseAddr.x, noise.x;\nMOV noise.x, fNoise[noiseAddr.x].x;\nARL noiseAddr.x, noise.y;\nMOV noise.y, fNoise[noiseAddr.x].y;\nMUL noise, noise, turbulence.x;\nMAD oTexCoord0, worldPos.xzww, 0.0078125, noise;\nMOV oTexCoord0.w, 1;\nMUL oTexCoord1.xy, worldPos.xzww, 0.0009765625;\nMOV oTexCoord1.zw, time.xxxw;\nDP4 clipPos.x, pMatrix[0], viewPos;\nDP4 clipPos.y, pMatrix[1], viewPos;\nDP4 clipPos.z, pMatrix[2], viewPos;\nDP4 clipPos.w, pMatrix[3], viewPos;\nMUL oColour.xyz, iColour, lightAmbient;\nMOV oColour.w, 1;\nMOV oFogCoord.x, clipPos.z;\nMOV oPos, clipPos; \nEND".length(), "!!ARBvp1.0\nATTRIB iPos = vertex.position;\nATTRIB iColour = vertex.color;\nOUTPUT oPos = result.position;\nOUTPUT oColour = result.color;\nOUTPUT oTexCoord0 = result.texcoord[0];\nOUTPUT oTexCoord1 = result.texcoord[1];\nOUTPUT oFogCoord = result.fogcoord;\nPARAM time = program.local[65];\nPARAM turbulence = program.local[64];\nPARAM lightAmbient = program.local[66]; \nPARAM pMatrix[4] = { state.matrix.projection };\nPARAM mvMatrix[4] = { state.matrix.modelview };\nPARAM ivMatrix[4] = { state.matrix.texture[1] };\nPARAM fNoise[64] = { program.local[0..63] };\nTEMP noise, clipPos, viewPos, worldPos;\nADDRESS noiseAddr;\nDP4 viewPos.x, mvMatrix[0], iPos;\nDP4 viewPos.y, mvMatrix[1], iPos;\nDP4 viewPos.z, mvMatrix[2], iPos;\nDP4 viewPos.w, mvMatrix[3], iPos;\nDP4 worldPos.x, ivMatrix[0], viewPos;\nDP4 worldPos.y, ivMatrix[1], viewPos;\nDP4 worldPos.z, ivMatrix[2], viewPos;\nDP4 worldPos.w, ivMatrix[3], viewPos;\nADD noise.x, worldPos.x, worldPos.z;SUB noise.y, worldPos.z, worldPos.x;MUL noise, noise, 0.0001220703125;\nFRC noise, noise;\nMUL noise, noise, 64;\nARL noiseAddr.x, noise.x;\nMOV noise.x, fNoise[noiseAddr.x].x;\nARL noiseAddr.x, noise.y;\nMOV noise.y, fNoise[noiseAddr.x].y;\nMUL noise, noise, turbulence.x;\nMAD oTexCoord0, worldPos.xzww, 0.0078125, noise;\nMOV oTexCoord0.w, 1;\nMUL oTexCoord1.xy, worldPos.xzww, 0.0009765625;\nMOV oTexCoord1.zw, time.xxxw;\nDP4 clipPos.x, pMatrix[0], viewPos;\nDP4 clipPos.y, pMatrix[1], viewPos;\nDP4 clipPos.z, pMatrix[2], viewPos;\nDP4 clipPos.w, pMatrix[3], viewPos;\nMUL oColour.xyz, iColour, lightAmbient;\nMOV oColour.w, 1;\nMOV oFogCoord.x, clipPos.z;\nMOV oPos, clipPos; \nEND"); + gl.glGetIntegerv(GL2.GL_PROGRAM_ERROR_POSITION_ARB, local7, 0); + if (local7[0] != -1) { + return; + } + } + + @OriginalMember(owner = "client!rd", name = "a", descriptor = "(I)V") + @Override + public final void setArgument(@OriginalArg(0) int arg0) { + if (this.anInt4831 < 0) { + return; + } + @Pc(5) GL2 gl = GlRenderer.gl; + gl.glActiveTexture(GL2.GL_TEXTURE1); + if ((arg0 & 0x80) == 0) { + gl.glEnable(MaterialManager.allows3DTextureMapping ? GL2.GL_TEXTURE_3D : GL2.GL_TEXTURE_2D); + } else { + gl.glDisable(MaterialManager.allows3DTextureMapping ? GL2.GL_TEXTURE_3D : GL2.GL_TEXTURE_2D); + } + gl.glActiveTexture(GL2.GL_TEXTURE0); + if ((arg0 & 0x40) == 0) { + gl.glGetFloatv(GL2.GL_LIGHT_MODEL_AMBIENT, aFloatArray24, 0); + gl.glProgramLocalParameter4fvARB(GL2.GL_VERTEX_PROGRAM_ARB, 66, aFloatArray24, 0); + } else { + gl.glProgramLocalParameter4fARB(GL2.GL_VERTEX_PROGRAM_ARB, 66, 1.0F, 1.0F, 1.0F, 1.0F); + } + @Pc(58) int local58 = arg0 & 0x3; + if (local58 == 2) { + gl.glProgramLocalParameter4fARB(GL2.GL_VERTEX_PROGRAM_ARB, 64, 0.05F, 1.0F, 1.0F, 1.0F); + } else if (local58 == 3) { + gl.glProgramLocalParameter4fARB(GL2.GL_VERTEX_PROGRAM_ARB, 64, 0.1F, 1.0F, 1.0F, 1.0F); + } else { + gl.glProgramLocalParameter4fARB(GL2.GL_VERTEX_PROGRAM_ARB, 64, 0.025F, 1.0F, 1.0F, 1.0F); + } + } +} diff --git a/client/src/main/java/rt4/LoadingBar.java b/client/src/main/java/rt4/LoadingBar.java new file mode 100644 index 0000000..63d1467 --- /dev/null +++ b/client/src/main/java/rt4/LoadingBar.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class LoadingBar { + @OriginalMember(owner = "client!oj", name = "a", descriptor = "(BZLclient!rk;)V") + public static void render(@OriginalArg(1) boolean arg0, @OriginalArg(2) Font arg1) { + @Pc(9) int local9; + if (GlRenderer.enabled || arg0) { + local9 = GameShell.canvasHeight; + @Pc(15) int local15 = local9 * 956 / 503; + TitleScreen.titleBg.renderResized((GameShell.canvasWidth - local15) / 2, 0, local15, local9); + TitleScreen.logo.renderTransparent(GameShell.canvasWidth / 2 - TitleScreen.logo.width / 2, 18); + } + arg1.renderCenter(LocalizedText.GAME0_LOADING, GameShell.canvasWidth / 2, GameShell.canvasHeight / 2 - 26, 16777215, -1); + local9 = GameShell.canvasHeight / 2 - 18; + if (GlRenderer.enabled) { + GlRaster.drawRect(GameShell.canvasWidth / 2 - 152, local9, 304, 34, 9179409); + GlRaster.drawRect(GameShell.canvasWidth / 2 - 151, local9 - -1, 302, 32, 0); + GlRaster.fillRect(GameShell.canvasWidth / 2 - 150, local9 + 2, client.mainLoadPercentage * 3, 30, 9179409); + GlRaster.fillRect(GameShell.canvasWidth / 2 + client.mainLoadPercentage * 3 - 150, local9 + 2, 300 - client.mainLoadPercentage * 3, 30, 0); + } else { + SoftwareRaster.drawRect(GameShell.canvasWidth / 2 - 152, local9, 304, 34, 9179409); + SoftwareRaster.drawRect(GameShell.canvasWidth / 2 - 151, local9 + 1, 302, 32, 0); + SoftwareRaster.fillRect(GameShell.canvasWidth / 2 - 150, local9 + 2, client.mainLoadPercentage * 3, 30, 9179409); + SoftwareRaster.fillRect(client.mainLoadPercentage * 3 + GameShell.canvasWidth / 2 - 150, local9 + 2, 300 - client.mainLoadPercentage * 3, 30, 0); + } + arg1.renderCenter(client.mainLoadSecondaryText, GameShell.canvasWidth / 2, GameShell.canvasHeight / 2 + 4, 16777215, -1); + } +} diff --git a/client/src/main/java/rt4/LoadingBarAwt.java b/client/src/main/java/rt4/LoadingBarAwt.java new file mode 100644 index 0000000..e22862f --- /dev/null +++ b/client/src/main/java/rt4/LoadingBarAwt.java @@ -0,0 +1,79 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.Font; +import java.awt.*; + +public class LoadingBarAwt { + @OriginalMember(owner = "client!tg", name = "a", descriptor = "Ljava/awt/FontMetrics;") + public static FontMetrics fontMetrics; + + @OriginalMember(owner = "client!lj", name = "y", descriptor = "Ljava/awt/Image;") + public static Image loadingBar; + + @OriginalMember(owner = "client!sa", name = "R", descriptor = "Ljava/awt/Font;") + public static Font font; + + @OriginalMember(owner = "client!bc", name = "a", descriptor = "(Ljava/awt/Color;ZZLclient!na;I)V") + public static void render(@OriginalArg(0) Color color, @OriginalArg(2) boolean redraw, @OriginalArg(3) JagString text, @OriginalArg(4) int arg3) { + try { + @Pc(6) Graphics g = GameShell.canvas.getGraphics(); + if (font == null) { + font = new Font("Helvetica", 1, 13); + fontMetrics = GameShell.canvas.getFontMetrics(font); + } + if (redraw) { + g.setColor(Color.black); + g.fillRect(0, 0, GameShell.canvasWidth, GameShell.canvasHeight); + } + if (color == null) { + color = new Color(140, 17, 17); + } + try { + if (loadingBar == null) { + loadingBar = GameShell.canvas.createImage(304, 34); + } + @Pc(56) Graphics loadingBarGraphics = loadingBar.getGraphics(); + loadingBarGraphics.setColor(color); + loadingBarGraphics.drawRect(0, 0, 303, 33); + loadingBarGraphics.fillRect(2, 2, arg3 * 3, 30); + loadingBarGraphics.setColor(Color.black); + loadingBarGraphics.drawRect(1, 1, 301, 31); + loadingBarGraphics.fillRect(arg3 * 3 + 2, 2, 300 - arg3 * 3, 30); + loadingBarGraphics.setFont(font); + loadingBarGraphics.setColor(Color.white); + text.drawString(22, (304 - text.stringWidth(fontMetrics)) / 2, loadingBarGraphics); + g.drawImage(loadingBar, GameShell.canvasWidth / 2 - 152, GameShell.canvasHeight / 2 + -18, null); + } catch (@Pc(134) Exception ignored) { + @Pc(140) int x = GameShell.canvasWidth / 2 - 152; + @Pc(146) int y = GameShell.canvasHeight / 2 - 18; + g.setColor(color); + g.drawRect(x, y, 303, 33); + g.fillRect(x + 2, y + 2, arg3 * 3, 30); + g.setColor(Color.black); + g.drawRect(x + 1, y - -1, 301, 31); + g.fillRect(arg3 * 3 + x + 2, y + 2, 300 - arg3 * 3, 30); + g.setFont(font); + g.setColor(Color.white); + text.drawString(y + 22, x + (-text.stringWidth(fontMetrics) + 304) / 2, g); + } + if (client.mainLoadPrimaryText != null) { + g.setFont(font); + g.setColor(Color.white); + client.mainLoadPrimaryText.drawString(GameShell.canvasHeight / 2 - 26, GameShell.canvasWidth / 2 - client.mainLoadPrimaryText.stringWidth(fontMetrics) / 2, g); + } + } catch (@Pc(252) Exception ignored) { + GameShell.canvas.repaint(); + } + } + + @OriginalMember(owner = "client!n", name = "a", descriptor = "(B)V") + public static void clear() { + fontMetrics = null; + font = null; + loadingBar = null; + } +} diff --git a/client/src/main/java/rt4/Loc.java b/client/src/main/java/rt4/Loc.java new file mode 100644 index 0000000..61b4537 --- /dev/null +++ b/client/src/main/java/rt4/Loc.java @@ -0,0 +1,394 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!dc") +public final class Loc extends Entity { + + @OriginalMember(owner = "client!kf", name = "h", descriptor = "[I") + public static final int[] LAYERS = new int[]{0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3}; + + @OriginalMember(owner = "client!ci", name = "q", descriptor = "Lclient!ek;") + public static SoftwareIndexedSprite sprite1 = null; + + @OriginalMember(owner = "client!dc", name = "U", descriptor = "Lclient!ga;") + private ParticleSystem particles; + + @OriginalMember(owner = "client!dc", name = "x", descriptor = "I") + private int anInt1296 = 0; + + @OriginalMember(owner = "client!dc", name = "t", descriptor = "Z") + private boolean aBoolean80 = false; + + @OriginalMember(owner = "client!dc", name = "s", descriptor = "I") + private int anInt1294 = 0; + + @OriginalMember(owner = "client!dc", name = "B", descriptor = "Z") + private boolean aBoolean81 = true; + + @OriginalMember(owner = "client!dc", name = "Q", descriptor = "Lclient!ek;") + private SoftwareIndexedSprite sprite2 = null; + + @OriginalMember(owner = "client!dc", name = "T", descriptor = "I") + private final int anInt1311 = -32768; + + @OriginalMember(owner = "client!dc", name = "eb", descriptor = "I") + private int anInt1319 = 0; + + @OriginalMember(owner = "client!dc", name = "gb", descriptor = "I") + private int anInt1321 = -1; + + @OriginalMember(owner = "client!dc", name = "ib", descriptor = "I") + private int anInt1322 = -1; + + @OriginalMember(owner = "client!dc", name = "H", descriptor = "I") + private final int anInt1303; + + @OriginalMember(owner = "client!dc", name = "w", descriptor = "I") + private final int anInt1295; + + @OriginalMember(owner = "client!dc", name = "N", descriptor = "I") + private final int anInt1308; + + @OriginalMember(owner = "client!dc", name = "L", descriptor = "I") + private final int anInt1307; + + @OriginalMember(owner = "client!dc", name = "C", descriptor = "I") + private final int anInt1299; + + @OriginalMember(owner = "client!dc", name = "D", descriptor = "I") + private final int anInt1300; + + @OriginalMember(owner = "client!dc", name = "u", descriptor = "Lclient!tk;") + private SeqType aClass144_2; + + @OriginalMember(owner = "client!dc", name = "y", descriptor = "I") + private int anInt1297; + + @OriginalMember(owner = "client!dc", name = "I", descriptor = "I") + private int anInt1304; + + @OriginalMember(owner = "client!dc", name = "bb", descriptor = "I") + private int anInt1317; + + @OriginalMember(owner = "client!dc", name = "fb", descriptor = "I") + private int anInt1320; + + @OriginalMember(owner = "client!dc", name = "", descriptor = "(IIIIIIIZLclient!th;)V") + public Loc(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int seqId, @OriginalArg(7) boolean arg7, @OriginalArg(8) Entity arg8) { + this.anInt1303 = arg3; + this.anInt1295 = arg2; + this.anInt1308 = arg4; + this.anInt1307 = arg1; + this.anInt1299 = arg0; + this.anInt1300 = arg5; + @Pc(67) LocType local67; + if (GlRenderer.enabled && arg8 != null) { + if (arg8 instanceof Loc) { + ((Loc) arg8).method1046(); + } else { + local67 = LocTypeList.get(this.anInt1299); + if (local67.multiLocs != null) { + local67 = local67.getMultiLoc(); + } + if (local67 != null) { + method181(local67, 0, this.anInt1295, 0, this.anInt1307, this.anInt1308, this.anInt1300, this.anInt1303); + } + } + } + if (seqId != -1) { + this.aClass144_2 = SeqTypeList.get(seqId); + this.anInt1297 = 0; + if (this.aClass144_2.frames.length <= 1) { + this.anInt1304 = 0; + } else { + this.anInt1304 = 1; + } + this.anInt1317 = 1; + this.anInt1320 = client.loop - 1; + if (this.aClass144_2.exactmove == 0 && arg8 != null && arg8 instanceof Loc) { + @Pc(142) Loc local142 = (Loc) arg8; + if (this.aClass144_2 == local142.aClass144_2) { + this.anInt1297 = local142.anInt1297; + this.anInt1320 = local142.anInt1320; + this.anInt1317 = local142.anInt1317; + this.anInt1304 = local142.anInt1304; + return; + } + } + if (arg7 && this.aClass144_2.replayoff != -1) { + this.anInt1297 = (int) (Math.random() * (double) this.aClass144_2.frames.length); + this.anInt1304 = this.anInt1297 + 1; + if (this.anInt1304 >= this.aClass144_2.frames.length) { + this.anInt1304 -= this.aClass144_2.replayoff; + if (this.anInt1304 < 0 || this.anInt1304 >= this.aClass144_2.frames.length) { + this.anInt1304 = -1; + } + } + this.anInt1317 = (int) (Math.random() * (double) this.aClass144_2.frameDelay[this.anInt1297]) + 1; + this.anInt1320 = client.loop - this.anInt1317; + } + } + if (GlRenderer.enabled && arg8 != null) { + this.method1048(true); + } + if (arg8 == null) { + local67 = LocTypeList.get(this.anInt1299); + if (local67.multiLocs != null) { + this.aBoolean80 = true; + } + } + } + + @OriginalMember(owner = "client!al", name = "a", descriptor = "(Lclient!pb;BIIIIIII)V") + public static void method181(@OriginalArg(0) LocType arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7) { + @Pc(5) int local5 = arg2 & 0x3; + @Pc(28) int local28; + @Pc(31) int local31; + if (local5 == 1 || local5 == 3) { + local28 = arg0.length; + local31 = arg0.width; + } else { + local31 = arg0.length; + local28 = arg0.width; + } + @Pc(53) int local53; + @Pc(51) int local51; + if (arg6 + local31 > 104) { + local51 = arg6 + 1; + local53 = arg6; + } else { + local53 = arg6 + (local31 >> 1); + local51 = arg6 + (local31 + 1 >> 1); + } + @Pc(80) int local80 = (arg5 << 7) + (local28 << 6); + @Pc(88) int local88 = (arg6 << 7) + (local31 << 6); + @Pc(96) int local96; + @Pc(100) int local100; + if (arg5 + local28 > 104) { + local96 = arg5; + local100 = arg5 + 1; + } else { + local96 = arg5 + (local28 >> 1); + local100 = (local28 + 1 >> 1) + arg5; + } + @Pc(120) int[][] local120 = SceneGraph.tileHeights[arg7]; + @Pc(122) int local122 = 0; + @Pc(148) int local148 = local120[local96][local51] + local120[local96][local53] + local120[local100][local53] + local120[local100][local51] >> 2; + @Pc(158) int[][] local158; + if (arg7 != 0) { + local158 = SceneGraph.tileHeights[0]; + local122 = local148 - (local158[local96][local51] + local158[local100][local53] + local158[local96][local53] + local158[local100][local51] >> 2); + } + local158 = null; + if (arg7 < 3) { + local158 = SceneGraph.tileHeights[arg7 + 1]; + } + @Pc(215) LocEntity local215 = arg0.method3428(arg2, local80, local120, arg4, local148, local158, false, null, true, local88); + ShadowManager.method4207(local215.sprite, local80 - arg3, local122, local88 - arg1); + } + + @OriginalMember(owner = "client!dc", name = "a", descriptor = "(IIIII)V") + @Override + public final void method4545(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (GlRenderer.enabled) { + this.method1048(true); + } else { + this.method1047(arg4, arg3); + } + } + + @OriginalMember(owner = "client!dc", name = "a", descriptor = "(IIIIIIIIJILclient!ga;)V") + @Override + public final void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) long arg8, @OriginalArg(9) int arg9, @OriginalArg(10) ParticleSystem arg10) { + @Pc(3) Entity local3 = this.method1049(); + if (local3 != null) { + local3.render(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, this.particles); + } + } + + @OriginalMember(owner = "client!dc", name = "c", descriptor = "(I)V") + public final void method1046() { + if (this.sprite2 != null) { + ShadowManager.method4207(this.sprite2, this.anInt1296, this.anInt1294, this.anInt1319); + } + this.anInt1321 = -1; + this.anInt1322 = -1; + this.sprite2 = null; + } + + @OriginalMember(owner = "client!dc", name = "finalize", descriptor = "()V") + @Override + public final void finalize() { + } + + @OriginalMember(owner = "client!dc", name = "b", descriptor = "(III)V") + private void method1047(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + if (this.aClass144_2 == null) { + return; + } + @Pc(10) int local10 = client.loop - this.anInt1320; + if (local10 > 100 && this.aClass144_2.replayoff > 0) { + @Pc(29) int local29 = this.aClass144_2.frames.length - this.aClass144_2.replayoff; + while (this.anInt1297 < local29 && this.aClass144_2.frameDelay[this.anInt1297] < local10) { + local10 -= this.aClass144_2.frameDelay[this.anInt1297]; + this.anInt1297++; + } + if (this.anInt1297 >= local29) { + @Pc(77) int local77 = 0; + for (@Pc(79) int local79 = local29; local79 < this.aClass144_2.frames.length; local79++) { + local77 += this.aClass144_2.frameDelay[local79]; + } + local10 %= local77; + } + this.anInt1304 = this.anInt1297 + 1; + if (this.anInt1304 >= this.aClass144_2.frames.length) { + this.anInt1304 -= this.aClass144_2.replayoff; + if (this.anInt1304 < 0 || this.aClass144_2.frames.length <= this.anInt1304) { + this.anInt1304 = -1; + } + } + } + while (local10 > this.aClass144_2.frameDelay[this.anInt1297]) { + SoundPlayer.playSeqSound(arg0, this.aClass144_2, arg1, false, this.anInt1297); + local10 -= this.aClass144_2.frameDelay[this.anInt1297]; + this.anInt1297++; + if (this.aClass144_2.frames.length <= this.anInt1297) { + this.anInt1297 -= this.aClass144_2.replayoff; + if (this.anInt1297 < 0 || this.aClass144_2.frames.length <= this.anInt1297) { + this.aClass144_2 = null; + break; + } + } + this.anInt1304 = this.anInt1297 + 1; + if (this.aClass144_2.frames.length <= this.anInt1304) { + this.anInt1304 -= this.aClass144_2.replayoff; + if (this.anInt1304 < 0 || this.anInt1304 >= this.aClass144_2.frames.length) { + this.anInt1304 = -1; + } + } + } + this.anInt1317 = local10; + this.anInt1320 = client.loop - local10; + } + + @OriginalMember(owner = "client!dc", name = "a", descriptor = "(ZI)Lclient!th;") + private Entity method1048(@OriginalArg(0) boolean arg0) { + @Pc(12) boolean local12 = SceneGraph.surfaceTileHeights != SceneGraph.tileHeights; + @Pc(19) LocType local19 = LocTypeList.get(this.anInt1299); + @Pc(22) int local22 = local19.anim; + if (local19.multiLocs != null) { + local19 = local19.getMultiLoc(); + } + if (local19 == null) { + if (GlRenderer.enabled && !local12) { + this.method1046(); + } + return null; + } + @Pc(69) int local69; + if (client.game != 0 && this.aBoolean80 && (this.aClass144_2 == null || this.aClass144_2 != null && this.aClass144_2.id != local19.anim)) { + local69 = local19.anim; + if (local19.anim == -1) { + local69 = local22; + } + if (local69 == -1) { + this.aClass144_2 = null; + } else { + this.aClass144_2 = SeqTypeList.get(local69); + } + if (this.aClass144_2 != null) { + if (local19.allowrandomizedanimation && this.aClass144_2.replayoff != -1) { + this.anInt1297 = (int) (Math.random() * (double) this.aClass144_2.frames.length); + this.anInt1320 -= (int) (Math.random() * (double) this.aClass144_2.frameDelay[this.anInt1297]); + } else { + this.anInt1297 = 0; + this.anInt1320 = client.loop - 1; + } + } + } + local69 = this.anInt1295 & 0x3; + @Pc(160) int local160; + @Pc(157) int local157; + if (local69 == 1 || local69 == 3) { + local157 = local19.width; + local160 = local19.length; + } else { + local160 = local19.width; + local157 = local19.length; + } + @Pc(178) int local178 = this.anInt1308 + (local160 + 1 >> 1); + @Pc(185) int local185 = (local160 >> 1) + this.anInt1308; + @Pc(192) int local192 = (local157 >> 1) + this.anInt1300; + @Pc(201) int local201 = (local157 + 1 >> 1) + this.anInt1300; + this.method1047(local192 * 128, local185 * 128); + @Pc(256) boolean local256 = !local12 && local19.castshadow && (local19.id != this.anInt1321 || (this.anInt1297 != this.anInt1322 || this.aClass144_2 != null && (this.aClass144_2.aBoolean280 || SeqType.applyTweening) && this.anInt1297 != this.anInt1304) && Preferences.sceneryShadowsType >= 2); + if (arg0 && !local256) { + return null; + } + @Pc(267) int[][] local267 = SceneGraph.tileHeights[this.anInt1303]; + @Pc(293) int local293 = local267[local178][local201] + local267[local185][local201] + local267[local185][local192] + local267[local178][local192] >> 2; + @Pc(302) int local302 = (local160 << 6) + (this.anInt1308 << 7); + @Pc(311) int local311 = (local157 << 6) + (this.anInt1300 << 7); + @Pc(314) int[][] local314 = null; + if (local12) { + local314 = SceneGraph.surfaceTileHeights[0]; + } else if (this.anInt1303 < 3) { + local314 = SceneGraph.tileHeights[this.anInt1303 + 1]; + } + if (GlRenderer.enabled && local256) { + ShadowManager.method4207(this.sprite2, this.anInt1296, this.anInt1294, this.anInt1319); + } + @Pc(356) boolean local356 = this.sprite2 == null; + @Pc(389) LocEntity local389; + if (this.aClass144_2 == null) { + local389 = local19.method3428(this.anInt1295, local302, local267, this.anInt1307, local293, local314, false, local356 ? sprite1 : this.sprite2, local256, local311); + } else { + local389 = local19.method3429(local311, local302, local356 ? sprite1 : this.sprite2, local293, this.aClass144_2, this.anInt1295, local267, local256, this.anInt1297, local314, this.anInt1304, this.anInt1307, this.anInt1317); + } + if (local389 == null) { + return null; + } + if (GlRenderer.enabled && local256) { + if (local356) { + sprite1 = local389.sprite; + } + @Pc(429) int local429 = 0; + if (this.anInt1303 != 0) { + @Pc(439) int[][] local439 = SceneGraph.tileHeights[0]; + local429 = local293 - (local439[local178][local192] + local439[local185][local192] + local439[local185][local201] + local439[local178][local201] >> 2); + } + @Pc(471) SoftwareIndexedSprite local471 = local389.sprite; + if (this.aBoolean81 && ShadowManager.method4209(local471, local302, local429, local311)) { + this.aBoolean81 = false; + } + if (!this.aBoolean81) { + ShadowManager.method4211(local471, local302, local429, local311); + this.sprite2 = local471; + this.anInt1319 = local311; + if (local356) { + sprite1 = null; + } + this.anInt1294 = local429; + this.anInt1296 = local302; + } + this.anInt1321 = local19.id; + this.anInt1322 = this.anInt1297; + } + return local389.model; + } + + @OriginalMember(owner = "client!dc", name = "d", descriptor = "(I)Lclient!th;") + public final Entity method1049() { + return this.method1048(false); + } + + @OriginalMember(owner = "client!dc", name = "b", descriptor = "()I") + @Override + public final int getMinY() { + return this.anInt1311; + } +} diff --git a/client/src/main/java/rt4/LocEntity.java b/client/src/main/java/rt4/LocEntity.java new file mode 100644 index 0000000..5d84ee3 --- /dev/null +++ b/client/src/main/java/rt4/LocEntity.java @@ -0,0 +1,15 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!sm") +public final class LocEntity { + + @OriginalMember(owner = "client!sm", name = "a", descriptor = "Lclient!ek;") + public SoftwareIndexedSprite sprite; + + @OriginalMember(owner = "client!sm", name = "j", descriptor = "Lclient!th;") + public Entity model; + +} diff --git a/client/src/main/java/rt4/LocType.java b/client/src/main/java/rt4/LocType.java new file mode 100644 index 0000000..c7a47e2 --- /dev/null +++ b/client/src/main/java/rt4/LocType.java @@ -0,0 +1,949 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!pb") +public final class LocType { + + // Loc Shapes + public static final int WALL_STRAIGHT = 0; + public static final int WALL_DIAGONALCORNER = 1; + public static final int WALL_L = 2; + public static final int WALL_SQUARECORNER = 3; + public static final int WALL_DIAGONAL = 9; + + public static final int WALLDECOR_STRAIGHT_XOFFSET = 4; + public static final int WALLDECOR_STRAIGHT_ZOFFSET = 5; + public static final int WALLDECOR_DIAGONAL_XOFFSET = 6; + public static final int WALLDECOR_DIAGONAL_ZOFFSET = 7; + public static final int WALLDECOR_DIAGONAL_BOTH = 8; + + public static final int ROOF_STRAIGHT = 12; + public static final int ROOF_DIAGONAL_WITH_ROOFEDGE = 13; + public static final int ROOF_DIAGONAL = 14; + public static final int ROOF_L_CONCAVE = 15; + public static final int ROOF_L_CONVEX = 16; + public static final int ROOF_FLAT = 17; + + public static final int ROOFEDGE_STRAIGHT = 18; + public static final int ROOFEDGE_DIAGONALCORNER = 19; + public static final int ROOFEDGE_L = 20; + public static final int ROOFEDGE_SQUARECORNER = 21; + + public static final int CENTREPIECE_STRAIGHT = 10; + public static final int CENTREPIECE_DIAGONAL = 11; + public static final int GROUNDDECOR = 22; + + @OriginalMember(owner = "client!wf", name = "o", descriptor = "[Lclient!gb;") + public static final RawModel[] tempModels = new RawModel[4]; + + @OriginalMember(owner = "client!ni", name = "n", descriptor = "Lclient!sm;") + public static LocEntity aClass139_1 = new LocEntity(); + + @OriginalMember(owner = "client!pb", name = "a", descriptor = "[S") + private short[] retex_s; + + @OriginalMember(owner = "client!pb", name = "b", descriptor = "[S") + private short[] recol_s; + + @OriginalMember(owner = "client!pb", name = "n", descriptor = "[I") + private int[] shapes; + + @OriginalMember(owner = "client!pb", name = "v", descriptor = "[S") + private short[] retex_d; + + @OriginalMember(owner = "client!pb", name = "B", descriptor = "Lclient!sc;") + private HashTable params; + + @OriginalMember(owner = "client!pb", name = "H", descriptor = "[S") + private short[] recol_d; + + @OriginalMember(owner = "client!pb", name = "P", descriptor = "[B") + public byte[] recol_p; + + @OriginalMember(owner = "client!pb", name = "X", descriptor = "[I") + private int[] models; + + @OriginalMember(owner = "client!pb", name = "db", descriptor = "[I") + public int[] multiLocs; + + @OriginalMember(owner = "client!pb", name = "hb", descriptor = "I") + public int id; + + @OriginalMember(owner = "client!pb", name = "wb", descriptor = "[I") + public int[] bgsounds; + + @OriginalMember(owner = "client!pb", name = "e", descriptor = "I") + public int width = 1; + + @OriginalMember(owner = "client!pb", name = "i", descriptor = "Z") + public boolean forcedecor = false; + + @OriginalMember(owner = "client!pb", name = "l", descriptor = "I") + public int length = 1; + + @OriginalMember(owner = "client!pb", name = "C", descriptor = "Z") + public boolean aBoolean211 = false; + + @OriginalMember(owner = "client!pb", name = "u", descriptor = "I") + private int ambient = 0; + + @OriginalMember(owner = "client!gg", name = "W", descriptor = "Lclient!na;") + public static final JagString aClass100_475 = JagString.parse("null"); + @OriginalMember(owner = "client!pb", name = "E", descriptor = "Lclient!na;") + public JagString name = aClass100_475; + + @OriginalMember(owner = "client!pb", name = "D", descriptor = "Z") + public boolean castshadow = true; + + @OriginalMember(owner = "client!pb", name = "t", descriptor = "I") + public int cursor1Op = -1; + + @OriginalMember(owner = "client!pb", name = "R", descriptor = "I") + public int bgsoundmax = 0; + + @OriginalMember(owner = "client!pb", name = "S", descriptor = "I") + public int mapscene = -1; + + @OriginalMember(owner = "client!pb", name = "G", descriptor = "B") + private byte hillskewType = 0; + + @OriginalMember(owner = "client!pb", name = "r", descriptor = "Z") + public boolean members = false; + + @OriginalMember(owner = "client!pb", name = "T", descriptor = "I") + public int cursor1 = -1; + + @OriginalMember(owner = "client!pb", name = "w", descriptor = "I") + private int xoff = 0; + + @OriginalMember(owner = "client!pb", name = "W", descriptor = "I") + public int bgsoundmin = 0; + + @OriginalMember(owner = "client!pb", name = "h", descriptor = "I") + public int mapfunction = -1; + + @OriginalMember(owner = "client!pb", name = "L", descriptor = "Z") + public boolean aBoolean214 = false; + + @OriginalMember(owner = "client!pb", name = "Y", descriptor = "I") + public int cursor2Op = -1; + + @OriginalMember(owner = "client!pb", name = "A", descriptor = "S") + public short hillskewAmount = -1; + + @OriginalMember(owner = "client!pb", name = "g", descriptor = "I") + private int resizez = 128; + + @OriginalMember(owner = "client!pb", name = "z", descriptor = "[Lclient!na;") + public JagString[] ops = new JagString[5]; + + @OriginalMember(owner = "client!pb", name = "d", descriptor = "I") + private int resizex = 128; + + @OriginalMember(owner = "client!pb", name = "s", descriptor = "Z") + public boolean allowrandomizedanimation = true; + + @OriginalMember(owner = "client!pb", name = "o", descriptor = "I") + private int resizey = 128; + + @OriginalMember(owner = "client!pb", name = "y", descriptor = "Z") + public boolean breakroutefinding = false; + + @OriginalMember(owner = "client!pb", name = "kb", descriptor = "I") + public int interactable = -1; + + @OriginalMember(owner = "client!pb", name = "lb", descriptor = "Z") + public boolean render = false; + + @OriginalMember(owner = "client!pb", name = "fb", descriptor = "Z") + public boolean active = true; + + @OriginalMember(owner = "client!pb", name = "nb", descriptor = "I") + private int multiLocVarp = -1; + + @OriginalMember(owner = "client!pb", name = "bb", descriptor = "I") + public int cursor2 = -1; + + @OriginalMember(owner = "client!pb", name = "pb", descriptor = "I") + public int blocksides = 0; + + @OriginalMember(owner = "client!pb", name = "m", descriptor = "Z") + public boolean blockrange = true; + + @OriginalMember(owner = "client!pb", name = "qb", descriptor = "I") + private int zoff = 0; + + @OriginalMember(owner = "client!pb", name = "c", descriptor = "I") + public int mapSceneAngleOffset = 0; + + @OriginalMember(owner = "client!pb", name = "jb", descriptor = "I") + public int walloff = 16; + + @OriginalMember(owner = "client!pb", name = "tb", descriptor = "Z") + public boolean mapSceneRotated = false; + + @OriginalMember(owner = "client!pb", name = "N", descriptor = "I") + private int yoff = 0; + + @OriginalMember(owner = "client!pb", name = "k", descriptor = "I") + public int bgsoundrange = 0; + + @OriginalMember(owner = "client!pb", name = "p", descriptor = "I") + private int contrast = 0; + + @OriginalMember(owner = "client!pb", name = "mb", descriptor = "I") + public int anim = -1; + + @OriginalMember(owner = "client!pb", name = "I", descriptor = "Z") + public boolean hasanimation = false; + + @OriginalMember(owner = "client!pb", name = "O", descriptor = "I") + public int bgsound = -1; + + @OriginalMember(owner = "client!pb", name = "ub", descriptor = "I") + public int blockwalk = 2; + + @OriginalMember(owner = "client!pb", name = "sb", descriptor = "Z") + private boolean mirror = false; + + @OriginalMember(owner = "client!pb", name = "gb", descriptor = "I") + private int multiLocVarbit = -1; + + @OriginalMember(owner = "client!pb", name = "yb", descriptor = "I") + public int supportitems = -1; + + @OriginalMember(owner = "client!pb", name = "zb", descriptor = "Z") + private boolean computeVertexColors = false; + + @OriginalMember(owner = "client!pb", name = "Ab", descriptor = "Z") + public boolean occlude = false; + + @OriginalMember(owner = "client!pb", name = "a", descriptor = "(II)Z") + public boolean isReady(@OriginalArg(1) int shape) { + if (this.shapes != null) { + for (@Pc(18) int i = 0; i < this.shapes.length; i++) { + if (shape == this.shapes[i]) { + return LocTypeList.modelsArchive.isFileReady(0, this.models[i] & 0xFFFF); + } + } + return true; + } else if (this.models == null) { + return true; + } else if (shape == LocType.CENTREPIECE_STRAIGHT) { + @Pc(71) boolean ready = true; + for (@Pc(73) int i = 0; i < this.models.length; i++) { + ready &= LocTypeList.modelsArchive.isFileReady(0, this.models[i] & 0xFFFF); + } + return ready; + } else { + return true; + } + } + + @OriginalMember(owner = "client!pb", name = "a", descriptor = "(I)Lclient!pb;") + public LocType getMultiLoc() { + @Pc(26) int local26 = -1; + if (this.multiLocVarbit != -1) { + local26 = VarpDomain.getVarbit(this.multiLocVarbit); + } else if (this.multiLocVarp != -1) { + local26 = VarpDomain.activeVarps[this.multiLocVarp]; + } + if (local26 < 0 || local26 >= this.multiLocs.length - 1 || this.multiLocs[local26] == -1) { + @Pc(84) int local84 = this.multiLocs[this.multiLocs.length - 1]; + return local84 == -1 ? null : LocTypeList.get(local84); + } else { + return LocTypeList.get(this.multiLocs[local26]); + } + } + + @OriginalMember(owner = "client!pb", name = "a", descriptor = "(III)Lclient!gb;") + private RawModel getRawModel(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(7) RawModel local7 = null; + @Pc(10) boolean local10 = this.mirror; + if (arg1 == 2 && arg0 > 3) { + local10 = !local10; + } + @Pc(46) int local46; + @Pc(48) int local48; + if (this.shapes == null) { + if (arg1 != 10) { + return null; + } + if (this.models == null) { + return null; + } + local46 = this.models.length; + for (local48 = 0; local48 < local46; local48++) { + @Pc(60) int local60 = this.models[local48]; + if (local10) { + local60 += 65536; + } + local7 = (RawModel) LocTypeList.aClass99_24.get(local60); + if (local7 == null) { + local7 = RawModel.create(LocTypeList.modelsArchive, local60 & 0xFFFF); + if (local7 == null) { + return null; + } + if (local10) { + local7.method1673(); + } + LocTypeList.aClass99_24.put(local7, local60); + } + if (local46 > 1) { + tempModels[local48] = local7; + } + } + if (local46 > 1) { + local7 = new RawModel(tempModels, local46); + } + } else { + local46 = -1; + for (local48 = 0; local48 < this.shapes.length; local48++) { + if (arg1 == this.shapes[local48]) { + local46 = local48; + break; + } + } + if (local46 == -1) { + return null; + } + local48 = this.models[local46]; + if (local10) { + local48 += 65536; + } + local7 = (RawModel) LocTypeList.aClass99_24.get(local48); + if (local7 == null) { + local7 = RawModel.create(LocTypeList.modelsArchive, local48 & 0xFFFF); + if (local7 == null) { + return null; + } + if (local10) { + local7.method1673(); + } + LocTypeList.aClass99_24.put(local7, local48); + } + } + @Pc(211) boolean local211; + local211 = this.resizex != 128 || this.resizey != 128 || this.resizez != 128; + @Pc(230) boolean local230; + local230 = this.xoff != 0 || this.yoff != 0 || this.zoff != 0; + @Pc(265) RawModel local265 = new RawModel(local7, arg0 == 0 && !local211 && !local230, this.recol_s == null, this.retex_s == null, true); + if (arg1 == 4 && arg0 > 3) { + local265.method1682(); + local265.translate(45, 0, -45); + } + @Pc(285) int local285 = arg0 & 0x3; + if (local285 == 1) { + local265.swapXz(); + } else if (local285 == 2) { + local265.negateXz(); + } else if (local285 == 3) { + local265.method1689(); + } + @Pc(315) int local315; + if (this.recol_s != null) { + for (local315 = 0; local315 < this.recol_s.length; local315++) { + if (this.recol_p == null || this.recol_p.length <= local315) { + local265.recolor(this.recol_s[local315], this.recol_d[local315]); + } else { + local265.recolor(this.recol_s[local315], client.aShortArray19[this.recol_p[local315] & 0xFF]); + } + } + } + if (this.retex_s != null) { + for (local315 = 0; local315 < this.retex_s.length; local315++) { + local265.retexture(this.retex_s[local315], this.retex_d[local315]); + } + } + if (local211) { + local265.resize(this.resizex, this.resizey, this.resizez); + } + if (local230) { + local265.translate(this.xoff, this.yoff, this.zoff); + } + return local265; + } + + @OriginalMember(owner = "client!pb", name = "c", descriptor = "(I)V") + public void postDecode() { + if (this.interactable == -1) { + this.interactable = 0; + if (this.models != null && (this.shapes == null || this.shapes[0] == LocType.CENTREPIECE_STRAIGHT)) { + this.interactable = 1; + } + for (@Pc(30) int i = 0; i < 5; i++) { + if (this.ops[i] != null) { + this.interactable = 1; + break; + } + } + } + if (this.supportitems == -1) { + this.supportitems = this.blockwalk == 0 ? 0 : 1; + } + } + + @OriginalMember(owner = "client!pb", name = "d", descriptor = "(I)Z") + public boolean hasAreaSound() { + if (this.multiLocs == null) { + return this.bgsound != -1 || this.bgsounds != null; + } + for (@Pc(44) int i = 0; i < this.multiLocs.length; i++) { + if (this.multiLocs[i] != -1) { + @Pc(70) LocType type = LocTypeList.get(this.multiLocs[i]); + if (type.bgsound != -1 || type.bgsounds != null) { + return true; + } + } + } + return false; + } + + @OriginalMember(owner = "client!pb", name = "a", descriptor = "(IIB)I") + public int getParam(@OriginalArg(0) int defaultValue, @OriginalArg(1) int key) { + if (this.params == null) { + return defaultValue; + } else { + @Pc(21) IntNode value = (IntNode) this.params.get(key); + return value == null ? defaultValue : value.value; + } + } + + @OriginalMember(owner = "client!pb", name = "a", descriptor = "(ILclient!wa;)V") + public void decode(@OriginalArg(1) Buffer buffer) { + while (true) { + @Pc(9) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(buffer, opcode); + } + } + + @OriginalMember(owner = "client!pb", name = "a", descriptor = "(Lclient!wa;II)V") + private void decode(@OriginalArg(0) Buffer buffer, @OriginalArg(1) int opcode) { + @Pc(18) int count; + @Pc(38) int len; + if (opcode == 1) { + count = buffer.g1(); + if (count > 0) { + if (this.models == null || SceneGraph.aBoolean130) { + this.shapes = new int[count]; + this.models = new int[count]; + for (len = 0; len < count; len++) { + this.models[len] = buffer.g2(); + this.shapes[len] = buffer.g1(); + } + } else { + buffer.offset += count * 3; + } + } + } else if (opcode == 2) { + this.name = buffer.gjstr(); + } else if (opcode == 5) { + count = buffer.g1(); + if (count > 0) { + if (this.models == null || SceneGraph.aBoolean130) { + this.models = new int[count]; + this.shapes = null; + for (len = 0; len < count; len++) { + this.models[len] = buffer.g2(); + } + } else { + buffer.offset += count * 2; + } + } + } else if (opcode == 14) { + this.width = buffer.g1(); + } else if (opcode == 15) { + this.length = buffer.g1(); + } else if (opcode == 17) { + this.blockwalk = 0; + this.blockrange = false; + } else if (opcode == 18) { + this.blockrange = false; + } else if (opcode == 19) { + this.interactable = buffer.g1(); + } else if (opcode == 21) { + this.hillskewType = 1; + } else if (opcode == 22) { // sharelight + this.computeVertexColors = true; + } else if (opcode == 23) { + this.occlude = true; + } else if (opcode == 24) { + this.anim = buffer.g2(); + if (this.anim == 65535) { + this.anim = -1; + } + } else if (opcode == 27) { + this.blockwalk = 1; + } else if (opcode == 28) { + this.walloff = buffer.g1(); + } else if (opcode == 29) { + this.ambient = buffer.g1b(); + } else if (opcode == 39) { + this.contrast = buffer.g1b() * 5; + } else if (opcode >= 30 && opcode < 35) { + this.ops[opcode - 30] = buffer.gjstr(); + if (this.ops[opcode - 30].equalsIgnoreCase(LocalizedText.HIDDEN)) { + this.ops[opcode - 30] = null; + } + } else if (opcode == 40) { + count = buffer.g1(); + this.recol_s = new short[count]; + this.recol_d = new short[count]; + for (len = 0; len < count; len++) { + this.recol_s[len] = (short) buffer.g2(); + this.recol_d[len] = (short) buffer.g2(); + } + } else if (opcode == 41) { + count = buffer.g1(); + this.retex_d = new short[count]; + this.retex_s = new short[count]; + for (len = 0; len < count; len++) { + this.retex_s[len] = (short) buffer.g2(); + this.retex_d[len] = (short) buffer.g2(); + } + } else if (opcode == 42) { + count = buffer.g1(); + this.recol_p = new byte[count]; + for (len = 0; len < count; len++) { + this.recol_p[len] = buffer.g1b(); + } + } else if (opcode == 60) { + this.mapfunction = buffer.g2(); + } else if (opcode == 62) { + this.mirror = true; + } else if (opcode == 64) { + this.active = false; + } else if (opcode == 65) { + this.resizex = buffer.g2(); + } else if (opcode == 66) { + this.resizey = buffer.g2(); + } else if (opcode == 67) { + this.resizez = buffer.g2(); + } else if (opcode == 69) { + this.blocksides = buffer.g1(); + } else if (opcode == 70) { + this.xoff = buffer.g2b(); + } else if (opcode == 71) { + this.yoff = buffer.g2b(); + } else if (opcode == 72) { + this.zoff = buffer.g2b(); + } else if (opcode == 73) { + this.forcedecor = true; + } else if (opcode == 74) { + this.breakroutefinding = true; + } else if (opcode == 75) { + this.supportitems = buffer.g1(); + } else if (opcode == 77 || opcode == 92) { + count = -1; + this.multiLocVarbit = buffer.g2(); + if (this.multiLocVarbit == 65535) { + this.multiLocVarbit = -1; + } + this.multiLocVarp = buffer.g2(); + if (this.multiLocVarp == 65535) { + this.multiLocVarp = -1; + } + if (opcode == 92) { + count = buffer.g2(); + if (count == 65535) { + count = -1; + } + } + len = buffer.g1(); + this.multiLocs = new int[len + 2]; + for (@Pc(790) int i = 0; i <= len; i++) { + this.multiLocs[i] = buffer.g2(); + if (this.multiLocs[i] == 65535) { + this.multiLocs[i] = -1; + } + } + this.multiLocs[len + 1] = count; + } else if (opcode == 78) { + this.bgsound = buffer.g2(); + this.bgsoundrange = buffer.g1(); + } else if (opcode == 79) { + this.bgsoundmin = buffer.g2(); // interval + this.bgsoundmax = buffer.g2(); // interval + this.bgsoundrange = buffer.g1(); + + count = buffer.g1(); + this.bgsounds = new int[count]; + for (len = 0; len < count; len++) { + this.bgsounds[len] = buffer.g2(); + } + } else if (opcode == 81) { // sethillskew + this.hillskewType = 2; + this.hillskewAmount = (short) (buffer.g1() * 256); + } else if (opcode == 82) { + this.render = true; + } else if (opcode == 88) { + this.castshadow = false; + } else if (opcode == 89) { + this.allowrandomizedanimation = false; + } else if (opcode == 90) { + this.aBoolean211 = true; + } else if (opcode == 91) { + this.members = true; + } else if (opcode == 93) { + this.hillskewType = 3; + this.hillskewAmount = (short) buffer.g2(); + } else if (opcode == 94) { + this.hillskewType = 4; + } else if (opcode == 95) { + this.hillskewType = 5; + } else if (opcode == 96) { + this.hasanimation = true; + } else if (opcode == 97) { + this.mapSceneRotated = true; + } else if (opcode == 98) { + this.aBoolean214 = true; + } else if (opcode == 99) { + this.cursor1Op = buffer.g1(); + this.cursor1 = buffer.g2(); + } else if (opcode == 100) { + this.cursor2Op = buffer.g1(); + this.cursor2 = buffer.g2(); + } else if (opcode == 101) { + this.mapSceneAngleOffset = buffer.g1(); + } else if (opcode == 102) { + this.mapscene = buffer.g2(); + } else if (opcode == 249) { + count = buffer.g1(); + if (this.params == null) { + len = IntUtils.clp2(count); + this.params = new HashTable(len); + } + for (len = 0; len < count; len++) { + @Pc(576) boolean isString = buffer.g1() == 1; + @Pc(580) int key = buffer.g3(); + @Pc(589) Node value; + if (isString) { + value = new StringNode(buffer.gjstr()); + } else { + value = new IntNode(buffer.g4()); + } + this.params.put(value, key); + } + } + } + + @OriginalMember(owner = "client!pb", name = "a", descriptor = "(Z)Z") + public boolean isReady() { + if (this.models == null) { + return true; + } + @Pc(13) boolean ready = true; + for (@Pc(15) int i = 0; i < this.models.length; i++) { + ready &= LocTypeList.modelsArchive.isFileReady(0, this.models[i] & 0xFFFF); + } + return ready; + } + + @OriginalMember(owner = "client!pb", name = "a", descriptor = "(IZZI)Lclient!td;") + private GlModel getGlModel(@OriginalArg(0) int arg0, @OriginalArg(1) boolean arg1, @OriginalArg(3) int arg2) { + @Pc(10) int local10 = this.ambient + 64; + @Pc(17) int local17 = this.contrast * 5 + 768; + @Pc(79) GlModel local79; + @Pc(24) int local24; + @Pc(177) int local177; + if (this.shapes == null) { + if (arg2 != 10) { + return null; + } + if (this.models == null) { + return null; + } + local24 = this.models.length; + if (local24 == 0) { + return null; + } + @Pc(135) long local135 = 0L; + for (@Pc(137) int local137 = 0; local137 < local24; local137++) { + local135 = (long) this.models[local137] + local135 * 67783L; + } + if (arg1) { + local135 = ~local135; + } + local79 = (GlModel) LocTypeList.aClass99_24.get(local135); + if (local79 == null) { + @Pc(175) RawModel local175 = null; + for (local177 = 0; local177 < local24; local177++) { + local175 = RawModel.create(LocTypeList.modelsArchive, this.models[local177] & 0xFFFF); + if (local175 == null) { + return null; + } + if (local24 > 1) { + tempModels[local177] = local175; + } + } + if (local24 > 1) { + local175 = new RawModel(tempModels, local24); + } + local79 = new GlModel(local175, local10, local17, arg1); + LocTypeList.aClass99_24.put(local79, local135); + } + } else { + local24 = -1; + @Pc(26) int local26; + for (local26 = 0; local26 < this.shapes.length; local26++) { + if (this.shapes[local26] == arg2) { + local24 = local26; + break; + } + } + if (local24 == -1) { + return null; + } + local26 = this.models[local24]; + if (arg1) { + local26 += 65536; + } + local79 = (GlModel) LocTypeList.aClass99_24.get(local26); + if (local79 == null) { + @Pc(90) RawModel local90 = RawModel.create(LocTypeList.modelsArchive, local26 & 0xFFFF); + if (local90 == null) { + return null; + } + local79 = new GlModel(local90, local10, local17, arg1); + LocTypeList.aClass99_24.put(local79, local26); + } + } + @Pc(236) boolean local236 = this.mirror; + if (arg2 == 2 && arg0 > 3) { + local236 = !local236; + } + @Pc(264) boolean local264 = this.resizey == 128 && this.yoff == 0; + @Pc(294) boolean local294 = arg0 == 0 && this.resizex == 128 && this.resizez == 128 && this.xoff == 0 && this.zoff == 0 && !local236; + @Pc(351) GlModel local351 = local79.method4117(local294, local264, this.recol_s == null, local79.method4094() == local10, arg0 == 0 && !local236, true, local17 == local79.method4115(), !local236, this.retex_s == null); + if (local236) { + local351.method4122(); + } + if (arg2 == 4 && arg0 > 3) { + local351.method4123(); + local351.translate(45, 0, -45); + } + @Pc(374) int local374 = arg0 & 0x3; + if (local374 == 1) { + local351.method4116(); + } else if (local374 == 2) { + local351.method4102(); + } else if (local374 == 3) { + local351.method4093(); + } + if (this.recol_s != null) { + for (local177 = 0; local177 < this.recol_s.length; local177++) { + local351.method4109(this.recol_s[local177], this.recol_d[local177]); + } + } + if (this.retex_s != null) { + for (local177 = 0; local177 < this.retex_s.length; local177++) { + local351.method4107(this.retex_s[local177], this.retex_d[local177]); + } + } + if (this.resizex != 128 || this.resizey != 128 || this.resizez != 128) { + local351.resize(this.resizex, this.resizey, this.resizez); + } + if (this.xoff != 0 || this.yoff != 0 || this.zoff != 0) { + local351.translate(this.xoff, this.yoff, this.zoff); + } + if (local10 != local351.method4094()) { + local351.method4105(local10); + } + if (local351.method4115() != local17) { + local351.method4100(local17); + } + return local351; + } + + @OriginalMember(owner = "client!pb", name = "a", descriptor = "(II[[III[[IZLclient!ek;BZI)Lclient!sm;") + public LocEntity method3428(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int[][] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int[][] arg5, @OriginalArg(6) boolean arg6, @OriginalArg(7) SoftwareIndexedSprite arg7, @OriginalArg(9) boolean arg8, @OriginalArg(10) int arg9) { + @Pc(29) long local29; + if (GlRenderer.enabled) { + if (this.shapes == null) { + local29 = (this.id << 10) + arg0; + } else { + local29 = arg0 + (this.id << 10) + (arg3 << 3); + } + @Pc(225) LocEntity local225 = (LocEntity) LocTypeList.aClass99_14.get(local29); + @Pc(235) GlModel local235; + @Pc(265) SoftwareIndexedSprite local265; + if (local225 == null) { + local235 = this.getGlModel(arg0, false, arg3); + if (local235 == null) { + aClass139_1.model = null; + aClass139_1.sprite = null; + return aClass139_1; + } + if (arg3 == 10 && arg0 > 3) { + local235.rotateY(256); + } + if (arg8) { + local265 = local235.method4124(arg7); + } else { + local265 = null; + } + local225 = new LocEntity(); + local225.model = local235; + local225.sprite = local265; + LocTypeList.aClass99_14.put(local225, local29); + } else { + local235 = (GlModel) local225.model; + local265 = local225.sprite; + } + @Pc(298) boolean local298 = this.computeVertexColors & arg6; + @Pc(330) GlModel local330 = local235.method4117(this.hillskewType != 3, this.hillskewType == 0, true, true, true, !local298, true, true, true); + if (this.hillskewType != 0) { + local330.method4110(this.hillskewType, this.hillskewAmount, local235, arg2, arg5, arg1, arg4, arg9); + } + local330.method4111(this.interactable == 0 && !this.aBoolean214, true, true, this.interactable == 0, true, false); + aClass139_1.model = local330; + local330.aBoolean259 = local298; + aClass139_1.sprite = local265; + return aClass139_1; + } + if (this.shapes == null) { + local29 = (this.id << 10) + arg0; + } else { + local29 = (arg3 << 3) + ((this.id << 10) + arg0); + } + @Pc(50) boolean local50; + if (arg6 && this.computeVertexColors) { + local29 |= Long.MIN_VALUE; + local50 = true; + } else { + local50 = false; + } + @Pc(60) Entity local60 = (Entity) LocTypeList.aClass99_14.get(local29); + if (local60 == null) { + @Pc(69) RawModel local69 = this.getRawModel(arg0, arg3); + if (local69 == null) { + aClass139_1.model = null; + return aClass139_1; + } + local69.resetBones(); + if (arg3 == 10 && arg0 > 3) { + local69.method1682(); + } + if (local50) { + local69.aShort19 = (short) (this.ambient + 64); + local60 = local69; + local69.aShort18 = (short) (this.contrast * 5 + 768); + local69.calculateNormals(); + } else { + local60 = new SoftwareModel(local69, this.ambient + 64, this.contrast * 5 + 768, -50, -10, -50); + } + LocTypeList.aClass99_14.put(local60, local29); + } + if (local50) { + local60 = ((RawModel) local60).method1675(); + } + if (this.hillskewType != 0) { + if (local60 instanceof SoftwareModel) { + local60 = ((SoftwareModel) local60).method4586(this.hillskewType, this.hillskewAmount, arg2, arg5, arg1, arg4, arg9, true); + } else if (local60 instanceof RawModel) { + local60 = ((RawModel) local60).method1670(this.hillskewType, this.hillskewAmount, arg2, arg5, arg1, arg4, arg9); + } + } + aClass139_1.model = local60; + return aClass139_1; + } + + @OriginalMember(owner = "client!pb", name = "a", descriptor = "(IILclient!ek;ILclient!tk;I[[IZII[[IIII)Lclient!sm;") + public LocEntity method3429(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) SoftwareIndexedSprite arg2, @OriginalArg(3) int arg3, @OriginalArg(4) SeqType arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int[][] arg6, @OriginalArg(7) boolean arg7, @OriginalArg(8) int arg8, @OriginalArg(10) int[][] arg9, @OriginalArg(11) int arg10, @OriginalArg(12) int arg11, @OriginalArg(13) int arg12) { + @Pc(30) long local30; + if (!GlRenderer.enabled) { + if (this.shapes == null) { + local30 = (this.id << 10) + arg5; + } else { + local30 = arg5 + (this.id << 10) + (arg11 << 3); + } + @Pc(195) SoftwareModel local195 = (SoftwareModel) LocTypeList.aClass99_36.get(local30); + if (local195 == null) { + @Pc(204) RawModel local204 = this.getRawModel(arg5, arg11); + if (local204 == null) { + return null; + } + local195 = new SoftwareModel(local204, this.ambient + 64, this.contrast * 5 + 768, -50, -10, -50); + LocTypeList.aClass99_36.put(local195, local30); + } + @Pc(234) boolean local234 = false; + if (arg4 != null) { + local234 = true; + local195 = (SoftwareModel) arg4.method4214(arg8, arg10, local195, arg5, arg12); + } + if (arg11 == 10 && arg5 > 3) { + if (!local234) { + local234 = true; + local195 = (SoftwareModel) local195.method4568(true, true, true); + } + local195.rotateY(256); + } + if (this.hillskewType != 0) { + if (!local234) { + local195 = (SoftwareModel) local195.method4568(true, true, true); + } + local195 = local195.method4586(this.hillskewType, this.hillskewAmount, arg6, arg9, arg1, arg3, arg0, false); + } + aClass139_1.model = local195; + return aClass139_1; + } + if (this.shapes == null) { + local30 = arg5 + (this.id << 10); + } else { + local30 = (arg11 << 3) + ((this.id << 10) + arg5); + } + @Pc(46) GlModel local46 = (GlModel) LocTypeList.aClass99_36.get(local30); + if (local46 == null) { + local46 = this.getGlModel(arg5, true, arg11); + if (local46 == null) { + return null; + } + local46.createBones(); + local46.method4111(false, false, false, false, false, true); + LocTypeList.aClass99_36.put(local46, local30); + } + @Pc(80) boolean local80 = false; + @Pc(82) GlModel local82 = local46; + if (arg4 != null) { + local82 = (GlModel) arg4.method4216(arg10, arg8, arg12, arg5, local46); + local80 = true; + } + if (arg11 == 10 && arg5 > 3) { + if (!local80) { + local82 = (GlModel) local82.method4568(true, true, true); + local80 = true; + } + local82.rotateY(256); + } + if (arg7) { + aClass139_1.sprite = local82.method4124(arg2); + } else { + aClass139_1.sprite = null; + } + if (this.hillskewType != 0) { + if (!local80) { + local82 = (GlModel) local82.method4568(true, true, true); + } + local82.method4110(this.hillskewType, this.hillskewAmount, local46, arg6, arg9, arg1, arg3, arg0); + } + aClass139_1.model = local82; + return aClass139_1; + } + + @OriginalMember(owner = "client!pb", name = "a", descriptor = "(Lclient!na;II)Lclient!na;") + public JagString getParam(@OriginalArg(0) JagString defaultValue, @OriginalArg(2) int key) { + if (this.params == null) { + return defaultValue; + } else { + @Pc(26) StringNode value = (StringNode) this.params.get(key); + return value == null ? defaultValue : value.value; + } + } +} diff --git a/client/src/main/java/rt4/LocTypeList.java b/client/src/main/java/rt4/LocTypeList.java new file mode 100644 index 0000000..ded143b --- /dev/null +++ b/client/src/main/java/rt4/LocTypeList.java @@ -0,0 +1,95 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class LocTypeList { + @OriginalMember(owner = "client!oe", name = "j", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + @OriginalMember(owner = "client!nf", name = "f", descriptor = "Lclient!n;") + public static final SoftLruHashTable aClass99_24 = new SoftLruHashTable(500); + @OriginalMember(owner = "client!he", name = "fb", descriptor = "Lclient!n;") + public static final SoftLruHashTable aClass99_14 = new SoftLruHashTable(30); + @OriginalMember(owner = "client!vf", name = "l", descriptor = "Lclient!n;") + public static final SoftLruHashTable aClass99_36 = new SoftLruHashTable(50); + @OriginalMember(owner = "client!cg", name = "c", descriptor = "Z") + public static boolean allowMembers; + @OriginalMember(owner = "client!lg", name = "g", descriptor = "Lclient!ve;") + public static Js5 locsArchive; + @OriginalMember(owner = "client!jg", name = "j", descriptor = "Lclient!ve;") + public static Js5 modelsArchive; + + @OriginalMember(owner = "client!wc", name = "a", descriptor = "(II)Lclient!pb;") + public static LocType get(@OriginalArg(1) int id) { + @Pc(15) LocType loc = (LocType) types.get(id); + if (loc != null) { + return loc; + } + @Pc(30) byte[] data = locsArchive.fetchFile(getGroupId(id), getFileId(id)); + loc = new LocType(); + loc.id = id; + if (data != null) { + loc.decode(new Buffer(data)); + } + loc.postDecode(); + if (!allowMembers && loc.members) { + loc.ops = null; + } + if (loc.breakroutefinding) { + loc.blockwalk = 0; + loc.blockrange = false; + } + types.put(loc, id); + return loc; + } + + @OriginalMember(owner = "client!ui", name = "c", descriptor = "(II)I") + public static int getGroupId(@OriginalArg(0) int id) { + return id >>> 8; + } + + @OriginalMember(owner = "client!cj", name = "a", descriptor = "(IB)I") + public static int getFileId(@OriginalArg(0) int id) { + return id & 0xFF; + } + + @OriginalMember(owner = "client!oi", name = "a", descriptor = "(ILclient!ve;Lclient!ve;Z)V") + public static void init(@OriginalArg(1) Js5 arg0, @OriginalArg(2) Js5 arg1) { + allowMembers = true; + modelsArchive = arg1; + locsArchive = arg0; + } + + @OriginalMember(owner = "client!oe", name = "b", descriptor = "(I)V") + public static void removeSoft() { + types.removeSoft(); + aClass99_24.removeSoft(); + aClass99_14.removeSoft(); + aClass99_36.removeSoft(); + } + + @OriginalMember(owner = "client!va", name = "b", descriptor = "(II)V") + public static void clean() { + types.clean(5); + aClass99_24.clean(5); + aClass99_14.clean(5); + aClass99_36.clean(5); + } + + @OriginalMember(owner = "client!hb", name = "c", descriptor = "(I)V") + public static void clear() { + types.clear(); + aClass99_24.clear(); + aClass99_14.clear(); + aClass99_36.clear(); + } + + @OriginalMember(owner = "client!pe", name = "a", descriptor = "(BZ)V") + public static void setAllowMembers(@OriginalArg(1) boolean arg0) { + if (arg0 != allowMembers) { + allowMembers = arg0; + clear(); + } + } +} diff --git a/client/src/main/java/rt4/LocalizedText.java b/client/src/main/java/rt4/LocalizedText.java new file mode 100644 index 0000000..7a9ba9e --- /dev/null +++ b/client/src/main/java/rt4/LocalizedText.java @@ -0,0 +1,1325 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; + +public class LocalizedText { + //region English Translations + @OriginalMember(owner = "client!ui", name = "ob", descriptor = "Lclient!na;") + private static final JagString ENG_ATTACK = JagString.parse("Attack"); + + @OriginalMember(owner = "client!vf", name = "d", descriptor = "Lclient!na;") + private static final JagString ENG_ATTEMPT_TO_REESTABLISH = JagString.parse("Please wait )2 attempting to reestablish)3"); + + @OriginalMember(owner = "client!wb", name = "i", descriptor = "Lclient!na;") + private static final JagString ENG_CANCEL = JagString.parse("Cancel"); + + @OriginalMember(owner = "client!bk", name = "I", descriptor = "Lclient!na;") + private static final JagString ENG_CHATCOL0 = JagString.parse("yellow:"); + + @OriginalMember(owner = "client!lb", name = "x", descriptor = "Lclient!na;") + private static final JagString ENG_CHATCOL1 = JagString.parse("red:"); + + @OriginalMember(owner = "client!h", name = "Bb", descriptor = "Lclient!na;") + private static final JagString ENG_CHATCOL2 = JagString.parse("green:"); + + @OriginalMember(owner = "client!client", name = "eb", descriptor = "Lclient!na;") + private static final JagString ENG_CHATCOL3 = JagString.parse("cyan:"); + + @OriginalMember(owner = "client!hd", name = "h", descriptor = "Lclient!na;") + private static final JagString ENG_CHATCOL4 = JagString.parse("purple:"); + + @OriginalMember(owner = "client!bf", name = "y", descriptor = "Lclient!na;") + private static final JagString ENG_CHATCOL5 = JagString.parse("white:"); + + @OriginalMember(owner = "client!mg", name = "U", descriptor = "Lclient!na;") + private static final JagString ENG_CHATCOL6 = JagString.parse("flash1:"); + + @OriginalMember(owner = "client!tm", name = "n", descriptor = "Lclient!na;") + private static final JagString ENG_CHATCOL7 = JagString.parse("flash2:"); + + @OriginalMember(owner = "client!km", name = "Cc", descriptor = "Lclient!na;") + private static final JagString ENG_CHATCOL8 = JagString.parse("flash3:"); + + @OriginalMember(owner = "client!aa", name = "r", descriptor = "Lclient!na;") + private static final JagString ENG_CHATCOL9 = JagString.parse("glow1:"); + + @OriginalMember(owner = "client!vf", name = "j", descriptor = "Lclient!na;") + private static final JagString ENG_CHATCOL10 = JagString.parse("glow2:"); + + @OriginalMember(owner = "client!ah", name = "m", descriptor = "Lclient!na;") + private static final JagString ENG_CHATCOL11 = JagString.parse("glow3:"); + + @OriginalMember(owner = "client!dc", name = "E", descriptor = "Lclient!na;") + private static final JagString ENG_CHATEFFECT1 = JagString.parse("wave:"); + + @OriginalMember(owner = "client!pg", name = "ib", descriptor = "Lclient!na;") + private static final JagString ENG_CHATEFFECT2 = JagString.parse("wave2:"); + + @OriginalMember(owner = "client!rm", name = "h", descriptor = "Lclient!na;") + private static final JagString ENG_CHATEFFECT3 = JagString.parse("shake:"); + + @OriginalMember(owner = "client!ef", name = "m", descriptor = "Lclient!na;") + private static final JagString ENG_CHATEFFECT4 = JagString.parse("scroll:"); + + @OriginalMember(owner = "client!eg", name = "B", descriptor = "Lclient!na;") + private static final JagString ENG_CHATEFFECT5 = JagString.parse("slide:"); + + @OriginalMember(owner = "client!bm", name = "d", descriptor = "Lclient!na;") + private static final JagString ENG_CHECKING_FOR_UPDATES = JagString.parse("Checking for updates )2 "); + + @OriginalMember(owner = "client!ta", name = "q", descriptor = "Lclient!na;") + private static final JagString ENG_CHOOSE_OPTION = JagString.parse("Choose Option"); + + @OriginalMember(owner = "client!d", name = "fb", descriptor = "Lclient!na;") + private static final JagString ENG_CLOSE = JagString.parse("Close"); + + @OriginalMember(owner = "client!sm", name = "f", descriptor = "Lclient!na;") + private static final JagString ENG_CONLOST = JagString.parse("Connection lost)3"); + + @OriginalMember(owner = "client!ig", name = "c", descriptor = "Lclient!na;") + private static final JagString ENG_CONTINUE = JagString.parse("Continue"); + + @OriginalMember(owner = "client!dc", name = "R", descriptor = "Lclient!na;") + private static final JagString ENG_DROP = JagString.parse("Drop"); + + @OriginalMember(owner = "client!li", name = "u", descriptor = "Lclient!na;") + private static final JagString ENG_EXAMINE = JagString.parse("Examine"); + + @OriginalMember(owner = "client!sd", name = "M", descriptor = "Lclient!na;") + private static final JagString ENG_FACEHERE = JagString.parse("Face here"); + + @OriginalMember(owner = "client!ii", name = "g", descriptor = "Lclient!na;") + private static final JagString ENG_FRIENDCANTADDSELF = JagString.parse("You can(Wt add yourself to your own friend list)3"); + + @OriginalMember(owner = "client!lk", name = "S", descriptor = "Lclient!na;") + private static final JagString ENG_FRIENDLISTDUPE = JagString.parse(" is already on your friend list)3"); + + @OriginalMember(owner = "client!t", name = "B", descriptor = "Lclient!na;") + private static final JagString ENG_FRIENDLISTFULL = JagString.parse("Your friend list is full)3 Max of 100 for free users)1 and 200 for members)3"); + + @OriginalMember(owner = "client!c", name = "W", descriptor = "Lclient!na;") + private static final JagString ENG_FRIENDLOGIN = JagString.parse(" has logged in)3"); + + @OriginalMember(owner = "client!hd", name = "o", descriptor = "Lclient!na;") + private static final JagString ENG_FRIENDLOGOUT = JagString.parse(" has logged out)3"); + + @OriginalMember(owner = "client!ec", name = "r", descriptor = "Lclient!na;") + private static final JagString ENG_GAME0_LOADING = JagString.parse("RuneScape is loading )2 please wait)3)3)3"); + + @OriginalMember(owner = "client!an", name = "Z", descriptor = "Lclient!na;") + private static final JagString ENG_HIDDEN = JagString.parse("Hidden"); + + @OriginalMember(owner = "client!nb", name = "b", descriptor = "Lclient!na;") + private static final JagString ENG_IGNORECANTADDSELF = JagString.parse("You can(Wt add yourself to your own ignore list)3"); + + @OriginalMember(owner = "client!ol", name = "X", descriptor = "Lclient!na;") + private static final JagString ENG_IGNORELISTDUPE = JagString.parse(" is already on your ignore list)3"); + + @OriginalMember(owner = "client!u", name = "l", descriptor = "Lclient!na;") + private static final JagString ENG_IGNORELISTFULL = JagString.parse("Your ignore list is full)3 Max of 100 users)3"); + + @OriginalMember(owner = "client!ck", name = "b", descriptor = "Lclient!na;") + private static final JagString ENG_LENT_ITEM_RETURN = JagString.parse("Discard"); + + @OriginalMember(owner = "client!ef", name = "s", descriptor = "Lclient!na;") + private static final JagString ENG_LEVEL = JagString.parse("level: "); + + @OriginalMember(owner = "client!nh", name = "bb", descriptor = "Lclient!na;") + private static final JagString ENG_LOADING = JagString.parse("Loading )2 please wait)3"); + + @OriginalMember(owner = "client!dm", name = "B", descriptor = "Lclient!na;") + private static final JagString ENG_LOADINGDOTDOTDOT = JagString.parse("Loading)3)3)3"); + + @OriginalMember(owner = "client!kd", name = "kb", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD0 = JagString.parse("Allocating memory"); + + @OriginalMember(owner = "client!na", name = "ob", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD0B = JagString.parse("Allocated memory"); + + @OriginalMember(owner = "client!il", name = "J", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD10B = JagString.parse("Created gameworld"); + + @OriginalMember(owner = "client!vj", name = "h", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD30 = JagString.parse("Connecting to update server"); + + @OriginalMember(owner = "client!od", name = "b", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD30B = JagString.parse("Connected to update server"); + + @OriginalMember(owner = "client!ba", name = "s", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD40B = JagString.parse("Loaded update list"); + + @OriginalMember(owner = "client!se", name = "b", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD45B = JagString.parse("Prepared sound engine"); + + @OriginalMember(owner = "client!lk", name = "P", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD50 = JagString.parse("Loading fonts )2 "); + + @OriginalMember(owner = "client!tl", name = "e", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD50B = JagString.parse("Loaded fonts"); + + @OriginalMember(owner = "client!dm", name = "v", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD60 = JagString.parse("Loading title screen )2 "); + + @OriginalMember(owner = "client!cb", name = "gb", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD60B = JagString.parse("Loaded title screen"); + + @OriginalMember(owner = "client!dl", name = "j", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD65B = JagString.parse("Opened title screen"); + + @OriginalMember(owner = "client!bk", name = "K", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD70 = JagString.parse("Loading config )2 "); + + @OriginalMember(owner = "client!fn", name = "P", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD70B = JagString.parse("Loaded config"); + + @OriginalMember(owner = "client!vc", name = "X", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD80 = JagString.parse("Loading sprites )2 "); + + @OriginalMember(owner = "client!sc", name = "w", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD80B = JagString.parse("Loaded sprites"); + + @OriginalMember(owner = "client!ub", name = "n", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD90 = JagString.parse("Loading textures )2 "); + + @OriginalMember(owner = "client!gm", name = "fb", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD90B = JagString.parse("Loaded textures"); + + @OriginalMember(owner = "client!ni", name = "p", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD110B = JagString.parse("Loaded input handler"); + + @OriginalMember(owner = "client!li", name = "b", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD120 = JagString.parse("Loading wordpack )2 "); + + @OriginalMember(owner = "client!pl", name = "b", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD120B = JagString.parse("Loaded wordpack"); + + @OriginalMember(owner = "client!bg", name = "O", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD130 = JagString.parse("Loading interfaces )2 "); + + @OriginalMember(owner = "client!wa", name = "D", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD130B = JagString.parse("Loaded interfaces"); + + @OriginalMember(owner = "client!r", name = "c", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD135 = JagString.parse("Loading world list data"); + + @OriginalMember(owner = "client!ck", name = "o", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD135B = JagString.parse("Loaded world list data"); + + @OriginalMember(owner = "client!cn", name = "J", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD140 = JagString.parse("Starting 3d Library"); + + @OriginalMember(owner = "client!rg", name = "u", descriptor = "Lclient!na;") + private static final JagString ENG_MAINLOAD150B = JagString.parse("Started 3d Library"); + + @OriginalMember(owner = "client!qc", name = "Z", descriptor = "Lclient!na;") + private static final JagString ENG_MEMBERS_OBJECT = JagString.parse("Members object"); + + @OriginalMember(owner = "client!fh", name = "W", descriptor = "Lclient!na;") + private static final JagString ENG_MILLION_SUFFIX = JagString.parse("M"); + + @OriginalMember(owner = "client!qk", name = "l", descriptor = "Lclient!na;") + private static final JagString ENG_MINISEPARATOR = JagString.parse(" "); + + @OriginalMember(owner = "client!ui", name = "ab", descriptor = "Lclient!na;") + private static final JagString ENG_MOREOPTIONS = JagString.parse(" more options"); + + @OriginalMember(owner = "client!ph", name = "c", descriptor = "Lclient!na;") + private static final JagString ENG_OK = JagString.parse("Ok"); + + @OriginalMember(owner = "client!bj", name = "z", descriptor = "Lclient!na;") + private static final JagString ENG_PLEASEWAIT = JagString.parse("Please wait)3)3)3"); + + @OriginalMember(owner = "client!mf", name = "T", descriptor = "Lclient!na;") + private static final JagString ENG_RATING = JagString.parse("rating: "); + + @OriginalMember(owner = "client!pm", name = "gb", descriptor = "Lclient!na;") + private static final JagString ENG_REMOVEFRIEND = JagString.parse(" from your friend list first)3"); + + @OriginalMember(owner = "client!rc", name = "v", descriptor = "Lclient!na;") + private static final JagString ENG_REMOVEIGNORE = JagString.parse(" from your ignore list first)3"); + + @OriginalMember(owner = "client!fk", name = "b", descriptor = "Lclient!na;") + private static final JagString ENG_REMOVESOCIAL = JagString.parse("Please remove "); + + @OriginalMember(owner = "client!se", name = "o", descriptor = "Lclient!na;") + private static final JagString ENG_SELECT = JagString.parse("Select"); + + @OriginalMember(owner = "client!ef", name = "k", descriptor = "Lclient!na;") + private static final JagString ENG_SKILL = JagString.parse("skill: "); + + @OriginalMember(owner = "client!si", name = "hb", descriptor = "Lclient!na;") + private static final JagString ENG_TAKE = JagString.parse("Take"); + + @OriginalMember(owner = "client!cl", name = "N", descriptor = "Lclient!na;") + private static final JagString ENG_THOUSAND_SUFFIX = JagString.parse("K"); + + @OriginalMember(owner = "client!ea", name = "q", descriptor = "Lclient!na;") + private static final JagString ENG_TRADEREQ = JagString.parse("wishes to trade with you)3"); + + @OriginalMember(owner = "client!gi", name = "f", descriptor = "Lclient!na;") + private static final JagString ENG_UNABLETOFIND = JagString.parse("Unable to find "); + + @OriginalMember(owner = "client!sa", name = "U", descriptor = "Lclient!na;") + private static final JagString ENG_USE = JagString.parse("Use"); + + @OriginalMember(owner = "client!ib", name = "m", descriptor = "Lclient!na;") + private static final JagString ENG_WALKHERE = JagString.parse("Walk here"); + //endregion + + //region Stable Translations (chat effects/colors) + @OriginalMember(owner = "client!bk", name = "R", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATCOL0 = ENG_CHATCOL0; + + @OriginalMember(owner = "client!lb", name = "D", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATCOL1 = ENG_CHATCOL1; + + @OriginalMember(owner = "client!h", name = "wb", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATCOL2 = ENG_CHATCOL2; + + @OriginalMember(owner = "client!client", name = "cb", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATCOL3 = ENG_CHATCOL3; + + @OriginalMember(owner = "client!hd", name = "p", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATCOL4 = ENG_CHATCOL4; + + @OriginalMember(owner = "client!bf", name = "N", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATCOL5 = ENG_CHATCOL5; + + @OriginalMember(owner = "client!mg", name = "T", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATCOL6 = ENG_CHATCOL6; + + @OriginalMember(owner = "client!tm", name = "k", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATCOL7 = ENG_CHATCOL7; + + @OriginalMember(owner = "client!km", name = "wc", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATCOL8 = ENG_CHATCOL8; + + @OriginalMember(owner = "client!aa", name = "d", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATCOL9 = ENG_CHATCOL9; + + @OriginalMember(owner = "client!vf", name = "h", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATCOL10 = ENG_CHATCOL10; + + @OriginalMember(owner = "client!ah", name = "r", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATCOL11 = ENG_CHATCOL11; + + @OriginalMember(owner = "client!dc", name = "S", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATEFFECT1 = ENG_CHATEFFECT1; + + @OriginalMember(owner = "client!pg", name = "X", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATEFFECT2 = ENG_CHATEFFECT2; + + @OriginalMember(owner = "client!rm", name = "k", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATEFFECT3 = ENG_CHATEFFECT3; + + @OriginalMember(owner = "client!ef", name = "t", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATEFFECT4 = ENG_CHATEFFECT4; + + @OriginalMember(owner = "client!eg", name = "u", descriptor = "Lclient!na;") + public static final JagString STABLE_CHATEFFECTC5 = ENG_CHATEFFECT5; + //endregion + + // TODO: unsorted + //region Active + @OriginalMember(owner = "client!vj", name = "b", descriptor = "Lclient!na;") + public static JagString MAINLOAD30 = ENG_MAINLOAD30; + + @OriginalMember(owner = "client!lb", name = "q", descriptor = "Lclient!na;") + public static JagString CHATCOL1 = ENG_CHATCOL1; + + @OriginalMember(owner = "client!sd", name = "O", descriptor = "Lclient!na;") + public static JagString FACEHERE = ENG_FACEHERE; + + @OriginalMember(owner = "client!vc", name = "Q", descriptor = "Lclient!na;") + public static JagString MAINLOAD80 = ENG_MAINLOAD80; + + @OriginalMember(owner = "client!mf", name = "U", descriptor = "Lclient!na;") + public static JagString RATING = ENG_RATING; + + @OriginalMember(owner = "client!qc", name = "Y", descriptor = "Lclient!na;") + public static JagString MEMBERS_OBJECT = ENG_MEMBERS_OBJECT; + + @OriginalMember(owner = "client!si", name = "db", descriptor = "Lclient!na;") + public static JagString TAKE = ENG_TAKE; + + @OriginalMember(owner = "client!ni", name = "j", descriptor = "Lclient!na;") + public static JagString MAINLOAD110B = ENG_MAINLOAD110B; + + @OriginalMember(owner = "client!ib", name = "j", descriptor = "Lclient!na;") + public static JagString WALKHERE = ENG_WALKHERE; + + @OriginalMember(owner = "client!qk", name = "i", descriptor = "Lclient!na;") + public static JagString MINISEPARATOR = ENG_MINISEPARATOR; + + @OriginalMember(owner = "client!gi", name = "b", descriptor = "Lclient!na;") + public static JagString UNABLETOFIND = ENG_UNABLETOFIND; + + @OriginalMember(owner = "client!nb", name = "c", descriptor = "Lclient!na;") + public static JagString IGNORECANTADDSELF = ENG_IGNORECANTADDSELF; + + @OriginalMember(owner = "client!ph", name = "d", descriptor = "Lclient!na;") + public static JagString OK = ENG_OK; + + @OriginalMember(owner = "client!rg", name = "E", descriptor = "Lclient!na;") + public static JagString MAINLOAD150B = ENG_MAINLOAD150B; + + @OriginalMember(owner = "client!rc", name = "s", descriptor = "Lclient!na;") + public static JagString REMOVEIGNORE = ENG_REMOVEIGNORE; + + @OriginalMember(owner = "client!tm", name = "p", descriptor = "Lclient!na;") + public static JagString CHATCOL7 = ENG_CHATCOL7; + + @OriginalMember(owner = "client!ta", name = "w", descriptor = "Lclient!na;") + public static JagString CHOOSE_OPTION = ENG_CHOOSE_OPTION; + + @OriginalMember(owner = "client!vf", name = "i", descriptor = "Lclient!na;") + public static JagString CHATCOL10 = ENG_CHATCOL10; + + @OriginalMember(owner = "client!vf", name = "e", descriptor = "Lclient!na;") + public static JagString ATTEMPT_TO_REESTABLISH = ENG_ATTEMPT_TO_REESTABLISH; + + @OriginalMember(owner = "client!ig", name = "g", descriptor = "Lclient!na;") + public static JagString CONTINUE = ENG_CONTINUE; + + @OriginalMember(owner = "client!sc", name = "r", descriptor = "Lclient!na;") + public static JagString MAINLOAD80B = ENG_MAINLOAD80B; + + @OriginalMember(owner = "client!r", name = "a", descriptor = "Lclient!na;") + public static JagString MAINLOAD135 = ENG_MAINLOAD135; + + @OriginalMember(owner = "client!sa", name = "X", descriptor = "Lclient!na;") + public static JagString USE = ENG_USE; + + @OriginalMember(owner = "client!ub", name = "e", descriptor = "Lclient!na;") + public static JagString MAINLOAD90 = ENG_MAINLOAD90; + + @OriginalMember(owner = "client!hd", name = "f", descriptor = "Lclient!na;") + public static JagString CHATCOL4 = ENG_CHATCOL4; + + @OriginalMember(owner = "client!hd", name = "c", descriptor = "Lclient!na;") + public static JagString FRIENDLOGOUT = ENG_FRIENDLOGOUT; + + @OriginalMember(owner = "client!nh", name = "W", descriptor = "Lclient!na;") + public static JagString LOADING = ENG_LOADING; + + @OriginalMember(owner = "client!h", name = "zb", descriptor = "Lclient!na;") + public static JagString CHATCOL2 = ENG_CHATCOL2; + + @OriginalMember(owner = "client!wa", name = "eb", descriptor = "Lclient!na;") + public static JagString MAINLOAD130B = ENG_MAINLOAD130B; + + @OriginalMember(owner = "client!u", name = "f", descriptor = "Lclient!na;") + public static JagString IGNORELISTFULL = ENG_IGNORELISTFULL; + + @OriginalMember(owner = "client!sm", name = "d", descriptor = "Lclient!na;") + public static JagString CONLOST = ENG_CONLOST; + + @OriginalMember(owner = "client!il", name = "M", descriptor = "Lclient!na;") + public static JagString MAINLOAD10B = ENG_MAINLOAD10B; + + @OriginalMember(owner = "client!wb", name = "h", descriptor = "Lclient!na;") + public static JagString CANCEL = ENG_CANCEL; + + @OriginalMember(owner = "client!t", name = "D", descriptor = "Lclient!na;") + public static JagString FRIENDLISTFULL = ENG_FRIENDLISTFULL; + + @OriginalMember(owner = "client!km", name = "Dc", descriptor = "Lclient!na;") + public static JagString CHATCOL8 = ENG_CHATCOL8; + + @OriginalMember(owner = "client!mg", name = "W", descriptor = "Lclient!na;") + public static JagString CHATCOL6 = ENG_CHATCOL6; + + @OriginalMember(owner = "client!kd", name = "Ab", descriptor = "Lclient!na;") + public static JagString MAINLOAD0 = ENG_MAINLOAD0; + + @OriginalMember(owner = "client!rm", name = "j", descriptor = "Lclient!na;") + public static JagString CHATEFFECT3 = ENG_CHATEFFECT3; + + @OriginalMember(owner = "client!pm", name = "fb", descriptor = "Lclient!na;") + public static JagString REMOVEFRIEND = ENG_REMOVEFRIEND; + + @OriginalMember(owner = "client!tl", name = "h", descriptor = "Lclient!na;") + public static JagString MAINLOAD50B = ENG_MAINLOAD50B; + + @OriginalMember(owner = "client!dm", name = "d", descriptor = "Lclient!na;") + public static JagString MAINLOAD60 = ENG_MAINLOAD60; + + @OriginalMember(owner = "client!se", name = "v", descriptor = "Lclient!na;") + public static JagString MAINLOAD45B = ENG_MAINLOAD45B; + + @OriginalMember(owner = "client!se", name = "k", descriptor = "Lclient!na;") + public static JagString SELECT = ENG_SELECT; + + @OriginalMember(owner = "client!li", name = "i", descriptor = "Lclient!na;") + public static JagString MAINLOAD120 = ENG_MAINLOAD120; + + @OriginalMember(owner = "client!li", name = "f", descriptor = "Lclient!na;") + public static JagString EXAMINE = ENG_EXAMINE; + + @OriginalMember(owner = "client!gm", name = "cb", descriptor = "Lclient!na;") + public static JagString MAINLOAD90B = ENG_MAINLOAD90B; + + @OriginalMember(owner = "client!ii", name = "q", descriptor = "Lclient!na;") + public static JagString FRIENDCANTADDSELF = ENG_FRIENDCANTADDSELF; + + @OriginalMember(owner = "client!pl", name = "g", descriptor = "Lclient!na;") + public static JagString MAINLOAD120B = ENG_MAINLOAD120B; + + @OriginalMember(owner = "client!ol", name = "db", descriptor = "Lclient!na;") + public static JagString IGNORELISTDUPE = ENG_IGNORELISTDUPE; + + @OriginalMember(owner = "client!lk", name = "X", descriptor = "Lclient!na;") + public static JagString MAINLOAD50 = ENG_MAINLOAD50; + + @OriginalMember(owner = "client!lk", name = "ab", descriptor = "Lclient!na;") + public static JagString FRIENDLISTDUPE = ENG_FRIENDLISTDUPE; + + @OriginalMember(owner = "client!pg", name = "hb", descriptor = "Lclient!na;") + public static JagString CHATEFFECT2 = ENG_CHATEFFECT2; + + @OriginalMember(owner = "client!od", name = "h", descriptor = "Lclient!na;") + public static JagString MAINLOAD30B = ENG_MAINLOAD30B; + + @OriginalMember(owner = "client!na", name = "D", descriptor = "Lclient!na;") + public static JagString MAINLOAD0B = ENG_MAINLOAD0B; + + @OriginalMember(owner = "client!fk", name = "h", descriptor = "Lclient!na;") + public static JagString REMOVESOCIAL1 = ENG_REMOVESOCIAL; + + @OriginalMember(owner = "client!ui", name = "Y", descriptor = "Lclient!na;") + public static JagString ATTACK = ENG_ATTACK; + + @OriginalMember(owner = "client!ui", name = "V", descriptor = "Lclient!na;") + public static JagString MOREOPTIONS = ENG_MOREOPTIONS; + + @OriginalMember(owner = "client!fn", name = "R", descriptor = "Lclient!na;") + public static JagString MAINLOAD70B = ENG_MAINLOAD70B; + + @OriginalMember(owner = "client!fk", name = "o", descriptor = "Lclient!na;") + public static JagString REMOVESOCIAL2 = ENG_REMOVESOCIAL; + + @OriginalMember(owner = "client!fh", name = "bb", descriptor = "Lclient!na;") + public static JagString MILLION_SHORT = ENG_MILLION_SUFFIX; + + @OriginalMember(owner = "client!fh", name = "T", descriptor = "Lclient!na;") + public static JagString MILLION = ENG_MILLION_SUFFIX; + + @OriginalMember(owner = "client!eg", name = "z", descriptor = "Lclient!na;") + public static JagString CHATEFFECT5 = ENG_CHATEFFECT5; + + @OriginalMember(owner = "client!ef", name = "q", descriptor = "Lclient!na;") + public static JagString LEVEL = ENG_LEVEL; + + @OriginalMember(owner = "client!ef", name = "n", descriptor = "Lclient!na;") + public static JagString SKILL = ENG_SKILL; + + @OriginalMember(owner = "client!ef", name = "o", descriptor = "Lclient!na;") + public static JagString CHATEFFECT4 = ENG_CHATEFFECT4; + + @OriginalMember(owner = "client!ec", name = "k", descriptor = "Lclient!na;") + public static JagString GAME0_LOADING = ENG_GAME0_LOADING; + + @OriginalMember(owner = "client!ea", name = "p", descriptor = "Lclient!na;") + public static JagString TRADEREQ = ENG_TRADEREQ; + + @OriginalMember(owner = "client!dm", name = "e", descriptor = "Lclient!na;") + public static JagString LOADINGDOTDOTDOT = ENG_LOADINGDOTDOTDOT; + + @OriginalMember(owner = "client!dl", name = "k", descriptor = "Lclient!na;") + public static JagString MAINLOAD65B = ENG_MAINLOAD65B; + + @OriginalMember(owner = "client!dc", name = "hb", descriptor = "Lclient!na;") + public static JagString CHATEFFECT1 = ENG_CHATEFFECT1; + + @OriginalMember(owner = "client!dc", name = "Y", descriptor = "Lclient!na;") + public static JagString DROP = ENG_DROP; + + @OriginalMember(owner = "client!d", name = "gb", descriptor = "Lclient!na;") + public static JagString CLOSE = ENG_CLOSE; + + @OriginalMember(owner = "client!cn", name = "q", descriptor = "Lclient!na;") + public static JagString MAINLOAD140 = ENG_MAINLOAD140; + + @OriginalMember(owner = "client!client", name = "X", descriptor = "Lclient!na;") + public static JagString CHATCOL3 = ENG_CHATCOL3; + + @OriginalMember(owner = "client!cl", name = "T", descriptor = "Lclient!na;") + public static JagString THOUSAND_SHORT = ENG_THOUSAND_SUFFIX; + + @OriginalMember(owner = "client!cl", name = "Q", descriptor = "Lclient!na;") + public static JagString THOUSAND = ENG_THOUSAND_SUFFIX; + + @OriginalMember(owner = "client!ck", name = "y", descriptor = "Lclient!na;") + public static JagString MAINLOAD135B = ENG_MAINLOAD135B; + + @OriginalMember(owner = "client!ck", name = "i", descriptor = "Lclient!na;") + public static JagString LENT_ITEM_RETURN = ENG_LENT_ITEM_RETURN; + + @OriginalMember(owner = "client!cb", name = "db", descriptor = "Lclient!na;") + public static JagString MAINLOAD60B = ENG_MAINLOAD60B; + + @OriginalMember(owner = "client!c", name = "Z", descriptor = "Lclient!na;") + public static JagString FRIENDLOGIN = ENG_FRIENDLOGIN; + + @OriginalMember(owner = "client!bm", name = "l", descriptor = "Lclient!na;") + public static JagString CHECKING_FOR_UPDATES = ENG_CHECKING_FOR_UPDATES; + + @OriginalMember(owner = "client!bk", name = "L", descriptor = "Lclient!na;") + public static JagString CHATCOL0 = ENG_CHATCOL0; + + @OriginalMember(owner = "client!bk", name = "N", descriptor = "Lclient!na;") + public static JagString MAINLOAD70 = ENG_MAINLOAD70; + + @OriginalMember(owner = "client!bj", name = "q", descriptor = "Lclient!na;") + public static JagString PLEASEWAIT = ENG_PLEASEWAIT; + + @OriginalMember(owner = "client!bg", name = "P", descriptor = "Lclient!na;") + public static JagString MAINLOAD130 = ENG_MAINLOAD130; + + @OriginalMember(owner = "client!bf", name = "D", descriptor = "Lclient!na;") + public static JagString CHATCOL5 = ENG_CHATCOL5; + + @OriginalMember(owner = "client!ba", name = "z", descriptor = "Lclient!na;") + public static JagString MAINLOAD40B = ENG_MAINLOAD40B; + + @OriginalMember(owner = "client!an", name = "cb", descriptor = "Lclient!na;") + public static JagString HIDDEN = ENG_HIDDEN; + + @OriginalMember(owner = "client!ah", name = "q", descriptor = "Lclient!na;") + public static JagString CHATCOL11 = ENG_CHATCOL11; + + @OriginalMember(owner = "client!aa", name = "g", descriptor = "Lclient!na;") + public static JagString CHATCOL9 = ENG_CHATCOL9; + //endregion + + // TODO: unsorted + //region German Translations + @OriginalMember(owner = "client!vk", name = "l", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD135 = JagString.parse("Lade Liste der Welten"); + + @OriginalMember(owner = "client!eg", name = "A", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD80B = JagString.parse("Sprites geladen)3"); + + @OriginalMember(owner = "client!eh", name = "h", descriptor = "Lclient!na;") + public static final JagString GER_TRADEREQ = JagString.parse("m-Ochte mit Ihnen handeln)3"); + + @OriginalMember(owner = "client!eh", name = "i", descriptor = "Lclient!na;") + public static final JagString GER_REMOVEFRIEND = JagString.parse(" zuerst von Ihrer Freunde)2Liste(Q"); + + @OriginalMember(owner = "client!ed", name = "r", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD120B = JagString.parse("Wordpack geladen)3"); + + @OriginalMember(owner = "client!dk", name = "i", descriptor = "Lclient!na;") + public static final JagString GER_CHATCOL6 = JagString.parse("blinken1:"); + + @OriginalMember(owner = "client!dm", name = "h", descriptor = "Lclient!na;") + public static final JagString GER_REMOVESOCIAL = JagString.parse("Bitte entfernen Sie "); + + @OriginalMember(owner = "client!ck", name = "c", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD70 = JagString.parse("Lade Konfiguration )2 "); + + @OriginalMember(owner = "client!cm", name = "h", descriptor = "Lclient!na;") + public static final JagString GER_CONLOST = JagString.parse("Verbindung abgebrochen)3"); + + @OriginalMember(owner = "client!cn", name = "s", descriptor = "Lclient!na;") + public static final JagString GER_CHATCOL4 = JagString.parse("lila:"); + + @OriginalMember(owner = "client!cn", name = "C", descriptor = "Lclient!na;") + public static final JagString GER_CHATCOL1 = JagString.parse("rot:"); + + @OriginalMember(owner = "client!cd", name = "y", descriptor = "Lclient!na;") + public static final JagString GER_CHECKING_FOR_UPDATES = JagString.parse("Suche nach Updates )2 "); + + @OriginalMember(owner = "client!cd", name = "D", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD120 = JagString.parse("Lade Wordpack )2 "); + + @OriginalMember(owner = "client!ce", name = "m", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD90 = JagString.parse("Lade Texturen )2 "); + + @OriginalMember(owner = "client!cg", name = "d", descriptor = "Lclient!na;") + public static final JagString GER_LENT_ITEM_RETURN = JagString.parse("Ablegen"); + + @OriginalMember(owner = "client!bj", name = "p", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD70B = JagString.parse("Konfig geladen)3"); + + @OriginalMember(owner = "client!bj", name = "U", descriptor = "Lclient!na;") + public static final JagString GER_CHATEFFECT2 = JagString.parse("welle2:"); + + @OriginalMember(owner = "client!bk", name = "P", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD0 = JagString.parse("Speicher wird zugewiesen)3"); + + @OriginalMember(owner = "client!bd", name = "d", descriptor = "Lclient!na;") + public static final JagString GER_SELECT = JagString.parse("Ausw-=hlen"); + + @OriginalMember(owner = "client!bb", name = "N", descriptor = "Lclient!na;") + public static final JagString GER_CHATCOL0 = JagString.parse("gelb:"); + + @OriginalMember(owner = "client!an", name = "eb", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD50 = JagString.parse("Lade Schrifts-=tze )2 "); + + @OriginalMember(owner = "client!ba", name = "E", descriptor = "Lclient!na;") + public static final JagString GER_LEVEL = JagString.parse("Stufe: "); + + @OriginalMember(owner = "client!af", name = "f", descriptor = "Lclient!na;") + public static final JagString GER_MEMBERS_OBJECT = JagString.parse("Gegenstand f-Ur Mitglieder"); + + @OriginalMember(owner = "client!be", name = "Zc", descriptor = "Lclient!na;") + public static final JagString GER_TAKE = JagString.parse("Nehmen"); + + @OriginalMember(owner = "client!se", name = "s", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD110B = JagString.parse("Eingabeprozedur geladen)3"); + + @OriginalMember(owner = "client!gm", name = "eb", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD80 = JagString.parse("Lade Sprites )2 "); + + @OriginalMember(owner = "client!qj", name = "h", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD90B = JagString.parse("Texturen geladen)3"); + + @OriginalMember(owner = "client!rb", name = "e", descriptor = "Lclient!na;") + public static final JagString GER_HIDDEN = JagString.parse("Versteckt"); + + @OriginalMember(owner = "client!tk", name = "x", descriptor = "Lclient!na;") + public static final JagString GER_FRIENDLISTDUPE = JagString.parse(" steht bereits auf Ihrer Freunde)2Liste(Q"); + + @OriginalMember(owner = "client!nk", name = "o", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD65B = JagString.parse("Titelbild ge-Offnet)3"); + + @OriginalMember(owner = "client!nm", name = "R", descriptor = "Lclient!na;") + public static final JagString GER_CLOSE = JagString.parse("Schlie-8en"); + + @OriginalMember(owner = "client!s", name = "j", descriptor = "Lclient!na;") + public static final JagString GER_FRIENDCANTADDSELF = JagString.parse("Sie k-Onnen sich selbst nicht auf Ihre Freunde)2Liste setzen(Q"); + + @OriginalMember(owner = "client!oe", name = "k", descriptor = "Lclient!na;") + public static final JagString GER_CHATCOL11 = JagString.parse("leuchten3:"); + + @OriginalMember(owner = "client!pg", name = "W", descriptor = "Lclient!na;") + public static final JagString GER_FRIENDLOGIN = JagString.parse(" loggt sich ein)3"); + + @OriginalMember(owner = "client!pg", name = "Y", descriptor = "Lclient!na;") + public static final JagString GER_CHATCOL9 = JagString.parse("leuchten1:"); + + @OriginalMember(owner = "client!g", name = "b", descriptor = "Lclient!na;") + public static final JagString GER_FRIENDLISTFULL = JagString.parse("Ihre Freunde)2Liste ist voll(Q Maximale Eintr-=ge: Mitglieder 200)4freie Spieler 100"); + + @OriginalMember(owner = "client!ui", name = "hb", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD50B = JagString.parse("Schrifts-=tze geladen)3"); + + @OriginalMember(owner = "client!na", name = "p", descriptor = "Lclient!na;") + public static final JagString GER_ATTEMPT_TO_REESTABLISH = JagString.parse("Bitte warten Sie )2 es wird versucht)1 die Verbindung wiederherzustellen)3"); + + @OriginalMember(owner = "client!fc", name = "d", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD130 = JagString.parse("Lade Benutzeroberfl-=che )2 "); + + @OriginalMember(owner = "client!em", name = "A", descriptor = "Lclient!na;") + public static final JagString GER_CHATCOL8 = JagString.parse("blinken3:"); + + @OriginalMember(owner = "client!q", name = "b", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD30B = JagString.parse("Verbindung zum Update)2Server hergestellt)3"); + + @OriginalMember(owner = "client!gi", name = "l", descriptor = "Lclient!na;") + public static final JagString GER_CHATCOL3 = JagString.parse("blaugr-Un:"); + + @OriginalMember(owner = "client!jm", name = "w", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD150B = JagString.parse("3D)2Softwarebibliothek gestartet)3"); + + @OriginalMember(owner = "client!ig", name = "e", descriptor = "Lclient!na;") + public static final JagString GER_LOADING = JagString.parse("Ladevorgang )2 bitte warten Sie)3"); + + @OriginalMember(owner = "client!ta", name = "m", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD0B = JagString.parse("Zugewiesener Speicher)3"); + + @OriginalMember(owner = "client!sc", name = "k", descriptor = "Lclient!na;") + public static final JagString GER_FACEHERE = JagString.parse("Hierhin drehen"); + + @OriginalMember(owner = "client!ub", name = "a", descriptor = "Lclient!na;") + public static final JagString GER_CHATCOL7 = JagString.parse("blinken2:"); + + @OriginalMember(owner = "client!h", name = "yb", descriptor = "Lclient!na;") + public static final JagString GER_REMOVEIGNORE = JagString.parse(" zuerst von Ihrer Ignorieren)2Liste(Q"); + + @OriginalMember(owner = "client!nh", name = "S", descriptor = "Lclient!na;") + public static final JagString GER_LOADINGDOTDOTDOT = JagString.parse("Lade)3)3)3"); + + @OriginalMember(owner = "client!nh", name = "V", descriptor = "Lclient!na;") + public static final JagString GER_CHATEFFECT3 = JagString.parse("sch-Utteln:"); + + @OriginalMember(owner = "client!pi", name = "bb", descriptor = "Lclient!na;") + public static final JagString GER_IGNORECANTADDSELF = JagString.parse("Sie k-Onnen sich selbst nicht selbst auf Ihre Ignorieren)2Liste setzen(Q"); + + @OriginalMember(owner = "client!ug", name = "f", descriptor = "Lclient!na;") + public static final JagString GER_CHATCOL5 = JagString.parse("weiss:"); + + @OriginalMember(owner = "client!nc", name = "d", descriptor = "Lclient!na;") + public static final JagString GER_RATING = JagString.parse("Kampfstufe: "); + + @OriginalMember(owner = "client!pk", name = "eb", descriptor = "Lclient!na;") + public static final JagString GER_ATTACK = JagString.parse("Angreifen"); + + @OriginalMember(owner = "client!pf", name = "l", descriptor = "Lclient!na;") + public static final JagString GER_MOREOPTIONS = JagString.parse(" weitere Optionen"); + + @OriginalMember(owner = "client!la", name = "g", descriptor = "Lclient!na;") + public static final JagString GER_IGNORELISTDUPE = JagString.parse(" steht bereits auf Ihrer Ignorieren)2Liste(Q"); + + @OriginalMember(owner = "client!jg", name = "k", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD60B = JagString.parse("Titelbild geladen)3"); + + @OriginalMember(owner = "client!lg", name = "j", descriptor = "Lclient!na;") + public static final JagString GER_CHATCOL2 = JagString.parse("gr-Un:"); + + @OriginalMember(owner = "client!nd", name = "u", descriptor = "Lclient!na;") + public static final JagString GER_CANCEL = JagString.parse("Abbrechen"); + + @OriginalMember(owner = "client!uh", name = "fb", descriptor = "Lclient!na;") + public static final JagString GER_GAME0_LOADING = JagString.parse("RuneScape wird geladen )2 bitte warten)3)3)3"); + + @OriginalMember(owner = "client!hb", name = "p", descriptor = "Lclient!na;") + public static final JagString GER_MILLION_SUFFIX = JagString.parse("M"); + + @OriginalMember(owner = "client!hb", name = "x", descriptor = "Lclient!na;") + public static final JagString GER_PLEASEWAIT = JagString.parse("Bitte warten Sie)3)3)3"); + + @OriginalMember(owner = "client!lj", name = "q", descriptor = "Lclient!na;") + public static final JagString GER_DROP = JagString.parse("Fallen lassen"); + + @OriginalMember(owner = "client!uh", name = "O", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD130B = JagString.parse("Benutzeroberfl-=che geladen)3"); + + @OriginalMember(owner = "client!pe", name = "q", descriptor = "Lclient!na;") + public static final JagString GER_MINISEPARATOR = JagString.parse(": "); + + @OriginalMember(owner = "client!pe", name = "d", descriptor = "Lclient!na;") + public static final JagString GER_CHATEFFECT1 = JagString.parse("welle:"); + + @OriginalMember(owner = "client!si", name = "ib", descriptor = "Lclient!na;") + public static final JagString GER_CONTINUE = JagString.parse("Weiter"); + + @OriginalMember(owner = "client!ic", name = "i", descriptor = "Lclient!na;") + public static final JagString GER_IGNORELISTFULL = JagString.parse("Ihre Ignorieren)2Liste ist voll)1 Sie k-Onnen nur 100 Spieler darauf eintragen)3"); + + @OriginalMember(owner = "client!mf", name = "S", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD140 = JagString.parse("Starte 3D)2Softwarebibliothek)3"); + + @OriginalMember(owner = "client!lh", name = "x", descriptor = "Lclient!na;") + public static final JagString GER_CHATEFFECT4 = JagString.parse("scrollen:"); + + @OriginalMember(owner = "client!sk", name = "cb", descriptor = "Lclient!na;") + public static final JagString GER_EXAMINE = JagString.parse("Untersuchen"); + + @OriginalMember(owner = "client!sk", name = "eb", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD45B = JagString.parse("Musik)2Engine vorbereitet)3"); + + @OriginalMember(owner = "client!sd", name = "P", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD135B = JagString.parse("Liste der Welten geladen"); + + @OriginalMember(owner = "client!vh", name = "i", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD30 = JagString.parse("Verbindung mit Update)2Server)3)3)3"); + + @OriginalMember(owner = "client!re", name = "r", descriptor = "Lclient!na;") + public static final JagString GER_WALKHERE = JagString.parse("Hierhin gehen"); + + @OriginalMember(owner = "client!qf", name = "U", descriptor = "Lclient!na;") + public static final JagString GER_CHOOSE_OPTION = JagString.parse("W-=hlen Sie eine Option"); + + @OriginalMember(owner = "client!hj", name = "i", descriptor = "Lclient!na;") + public static final JagString GER_USE = JagString.parse("Benutzen"); + + @OriginalMember(owner = "client!ql", name = "k", descriptor = "Lclient!na;") + public static final JagString GER_CHATEFFECT5 = JagString.parse("gleiten:"); + + @OriginalMember(owner = "client!ok", name = "g", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD60 = JagString.parse("Lade Titelbild )2 "); + + @OriginalMember(owner = "client!gk", name = "a", descriptor = "Lclient!na;") + public static final JagString GER_CHATCOL10 = JagString.parse("leuchten2:"); + + @OriginalMember(owner = "client!wd", name = "c", descriptor = "Lclient!na;") + public static final JagString GER_UNABLETOFIND = JagString.parse("Spieler kann nicht gefunden werden: "); + + @OriginalMember(owner = "client!og", name = "h", descriptor = "Lclient!na;") + public static final JagString GER_FRIENDLOGOUT = JagString.parse(" loggt sich aus)3"); + + @OriginalMember(owner = "client!ml", name = "S", descriptor = "Lclient!na;") + public static final JagString GER_THOUSAND_SUFFIX = JagString.parse("T"); + + @OriginalMember(owner = "client!va", name = "v", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD10B = JagString.parse("Spielwelt erstellt)3"); + + @OriginalMember(owner = "client!mf", name = "q", descriptor = "Lclient!na;") + public static final JagString GER_OK = JagString.parse("Okay"); + + @OriginalMember(owner = "client!ob", name = "c", descriptor = "Lclient!na;") + public static final JagString GER_SKILL = JagString.parse("Fertigkeit: "); + + @OriginalMember(owner = "client!wf", name = "h", descriptor = "Lclient!na;") + public static final JagString GER_MAINLOAD40B = JagString.parse("Update)2Liste geladen)3"); + + @OriginalMember(owner = "client!lk", name = "a", descriptor = "(Z)V") + public static void switchToGerman() { + CHATEFFECT1 = GER_CHATEFFECT1; + MOREOPTIONS = GER_MOREOPTIONS; + REMOVESOCIAL1 = GER_REMOVESOCIAL; + MAINLOAD70B = GER_MAINLOAD70B; + MAINLOAD50B = GER_MAINLOAD50B; + REMOVEFRIEND = GER_REMOVEFRIEND; + TRADEREQ = GER_TRADEREQ; + CHATCOL8 = GER_CHATCOL8; + FRIENDLISTFULL = GER_FRIENDLISTFULL; + IGNORECANTADDSELF = GER_IGNORECANTADDSELF; + CHECKING_FOR_UPDATES = GER_CHECKING_FOR_UPDATES; + CHATCOL5 = GER_CHATCOL5; + DROP = GER_DROP; + FRIENDLOGIN = GER_FRIENDLOGIN; + RATING = GER_RATING; + THOUSAND_SHORT = GER_THOUSAND_SUFFIX; + MAINLOAD135 = GER_MAINLOAD135; + MINISEPARATOR = GER_MINISEPARATOR; + CHATCOL2 = GER_CHATCOL2; + CHATCOL9 = GER_CHATCOL9; + MAINLOAD110B = GER_MAINLOAD110B; + CHATCOL1 = GER_CHATCOL1; + OK = GER_OK; + GAME0_LOADING = GER_GAME0_LOADING; + CHATCOL4 = GER_CHATCOL4; + MAINLOAD10B = GER_MAINLOAD10B; + REMOVESOCIAL2 = GER_REMOVESOCIAL; + MAINLOAD50 = GER_MAINLOAD50; + CANCEL = GER_CANCEL; + CHATEFFECT3 = GER_CHATEFFECT3; + IGNORELISTFULL = GER_IGNORELISTFULL; + CONTINUE = GER_CONTINUE; + LOADING = GER_LOADING; + ATTACK = GER_ATTACK; + MAINLOAD80B = GER_MAINLOAD80B; + MAINLOAD90 = GER_MAINLOAD90; + CHATCOL3 = GER_CHATCOL3; + EXAMINE = GER_EXAMINE; + CONLOST = GER_CONLOST; + SKILL = GER_SKILL; + MEMBERS_OBJECT = GER_MEMBERS_OBJECT; + MAINLOAD135B = GER_MAINLOAD135B; + REMOVEIGNORE = GER_REMOVEIGNORE; + PLEASEWAIT = GER_PLEASEWAIT; + FRIENDLOGOUT = GER_FRIENDLOGOUT; + MAINLOAD140 = GER_MAINLOAD140; + THOUSAND = GER_THOUSAND_SUFFIX; + SELECT = GER_SELECT; + CHATCOL10 = GER_CHATCOL10; + TAKE = GER_TAKE; + UNABLETOFIND = GER_UNABLETOFIND; + MAINLOAD60 = GER_MAINLOAD60; + MAINLOAD30 = GER_MAINLOAD30; + WALKHERE = GER_WALKHERE; + FACEHERE = GER_FACEHERE; + MAINLOAD80 = GER_MAINLOAD80; + MILLION_SHORT = GER_MILLION_SUFFIX; + CHOOSE_OPTION = GER_CHOOSE_OPTION; + MAINLOAD150B = GER_MAINLOAD150B; + USE = GER_USE; + MAINLOAD0 = GER_MAINLOAD0; + ATTEMPT_TO_REESTABLISH = GER_ATTEMPT_TO_REESTABLISH; + MAINLOAD130B = GER_MAINLOAD130B; + CHATEFFECT5 = GER_CHATEFFECT5; + MAINLOAD40B = GER_MAINLOAD40B; + CHATCOL0 = GER_CHATCOL0; + CHATCOL7 = GER_CHATCOL7; + CHATCOL6 = GER_CHATCOL6; + LOADINGDOTDOTDOT = GER_LOADINGDOTDOTDOT; + MILLION = GER_MILLION_SUFFIX; + MAINLOAD70 = GER_MAINLOAD70; + MAINLOAD0B = GER_MAINLOAD0B; + MAINLOAD60B = GER_MAINLOAD60B; + CHATCOL11 = GER_CHATCOL11; + FRIENDCANTADDSELF = GER_FRIENDCANTADDSELF; + MAINLOAD120B = GER_MAINLOAD120B; + IGNORELISTDUPE = GER_IGNORELISTDUPE; + MAINLOAD30B = GER_MAINLOAD30B; + LENT_ITEM_RETURN = GER_LENT_ITEM_RETURN; + HIDDEN = GER_HIDDEN; + CHATEFFECT2 = GER_CHATEFFECT2; + MAINLOAD130 = GER_MAINLOAD130; + FRIENDLISTDUPE = GER_FRIENDLISTDUPE; + MAINLOAD65B = GER_MAINLOAD65B; + CLOSE = GER_CLOSE; + CHATEFFECT4 = GER_CHATEFFECT4; + MAINLOAD90B = GER_MAINLOAD90B; + MAINLOAD120 = GER_MAINLOAD120; + MAINLOAD45B = GER_MAINLOAD45B; + LEVEL = GER_LEVEL; + } + //endregion + + // TODO: unsorted + //region French Translations + @OriginalMember(owner = "client!kc", name = "r", descriptor = "Lclient!na;") + public static final JagString FR_THOUSAND_SUFFIX = JagString.parse("K"); + + @OriginalMember(owner = "client!qj", name = "g", descriptor = "Lclient!na;") + public static final JagString FR_CHATCOL1 = JagString.parse("rouge:"); + + @OriginalMember(owner = "client!oe", name = "m", descriptor = "Lclient!na;") + public static final JagString FR_GAME0_LOADING = JagString.parse("Chargement de RuneScape en cours )2 veuillez patienter)3)3)3"); + + @OriginalMember(owner = "client!ii", name = "j", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD130B = JagString.parse("Interfaces charg-Bes"); + + @OriginalMember(owner = "client!pl", name = "d", descriptor = "Lclient!na;") + public static final JagString FR_RATING = JagString.parse("classement "); + + @OriginalMember(owner = "client!ol", name = "S", descriptor = "Lclient!na;") + public static final JagString FR_CONLOST = JagString.parse("Connexion perdue)3"); + + @OriginalMember(owner = "client!ui", name = "nb", descriptor = "Lclient!na;") + public static final JagString FR_CHATCOL0 = JagString.parse("jaune:"); + + @OriginalMember(owner = "client!fm", name = "T", descriptor = "Lclient!na;") + public static final JagString FR_MINISEPARATOR = JagString.parse(" "); + + @OriginalMember(owner = "client!fk", name = "c", descriptor = "Lclient!na;") + public static final JagString FR_CHECKING_FOR_UPDATES = JagString.parse("V-Brification des mises -9 jour )2 "); + + @OriginalMember(owner = "client!fk", name = "p", descriptor = "Lclient!na;") + public static final JagString FR_CHATEFFECT2 = JagString.parse("ondulation2:"); + + @OriginalMember(owner = "client!fh", name = "V", descriptor = "Lclient!na;") + public static final JagString FR_CHATCOL2 = JagString.parse("vert:"); + + @OriginalMember(owner = "client!fc", name = "g", descriptor = "Lclient!na;") + public static final JagString FR_USE = JagString.parse("Utiliser"); + + @OriginalMember(owner = "client!ab", name = "m", descriptor = "Lclient!na;") + public static final JagString FR_MEMBERS_OBJECT = JagString.parse("Objet d(Wabonn-Bs"); + + @OriginalMember(owner = "client!ah", name = "u", descriptor = "Lclient!na;") + public static final JagString FR_REMOVESOCIAL = JagString.parse("Veuillez commencer par supprimer "); + + @OriginalMember(owner = "client!bf", name = "A", descriptor = "Lclient!na;") + public static final JagString FR_CHATCOL10 = JagString.parse("brillant2:"); + + @OriginalMember(owner = "client!bg", name = "n", descriptor = "Lclient!na;") + public static final JagString FR_FRIENDLISTFULL = JagString.parse("Votre liste d(Wamis est pleine (X100 noms maximum pour la version gratuite et 200 pour les abonn-Bs(Y)3"); + + @OriginalMember(owner = "client!bm", name = "h", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD60B = JagString.parse(",Mcran)2titre charg-B"); + + @OriginalMember(owner = "client!ca", name = "bb", descriptor = "Lclient!na;") + public static final JagString FR_EXAMINE = JagString.parse("Examiner"); + + @OriginalMember(owner = "client!cd", name = "v", descriptor = "Lclient!na;") + public static final JagString FR_WALKHERE = JagString.parse("Atteindre"); + + @OriginalMember(owner = "client!cj", name = "b", descriptor = "Lclient!na;") + public static final JagString FR_CHATCOL5 = JagString.parse("blanc:"); + + @OriginalMember(owner = "client!cl", name = "P", descriptor = "Lclient!na;") + public static final JagString FR_CHATCOL11 = JagString.parse("brillant3:"); + + @OriginalMember(owner = "client!cl", name = "R", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD65B = JagString.parse(",Mcran)2titre ouvert"); + + @OriginalMember(owner = "client!cm", name = "e", descriptor = "Lclient!na;") + public static final JagString FR_FRIENDCANTADDSELF = JagString.parse("Vous ne pouvez pas ajouter votre nom -9 votre liste d(Wamis)3"); + + @OriginalMember(owner = "client!cm", name = "i", descriptor = "Lclient!na;") + public static final JagString FR_SKILL = JagString.parse("comp-Btence "); + + @OriginalMember(owner = "client!cn", name = "x", descriptor = "Lclient!na;") + public static final JagString FR_IGNORECANTADDSELF = JagString.parse("Vous ne pouvez pas ajouter votre nom -9 votre liste noire)3"); + + @OriginalMember(owner = "client!e", name = "vc", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD110B = JagString.parse("Gestionnaire de saisie charg-B"); + + @OriginalMember(owner = "client!ef", name = "l", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD130 = JagString.parse("Chargement des interfaces )2 "); + + @OriginalMember(owner = "client!eg", name = "y", descriptor = "Lclient!na;") + public static final JagString FR_LENT_ITEM_RETURN = JagString.parse("Jeter"); + + @OriginalMember(owner = "client!ej", name = "cb", descriptor = "Lclient!na;") + public static final JagString FR_CHATCOL7 = JagString.parse("clignotant2:"); + + @OriginalMember(owner = "client!fb", name = "k", descriptor = "Lclient!na;") + public static final JagString FR_MILLION_SUFFIX = JagString.parse("M"); + + @OriginalMember(owner = "client!rc", name = "D", descriptor = "Lclient!na;") + public static final JagString FR_FRIENDLOGOUT = JagString.parse(" s(West d-Bconnect-B)3"); + + @OriginalMember(owner = "client!tm", name = "o", descriptor = "Lclient!na;") + public static final JagString FR_CANCEL = JagString.parse("Annuler"); + + @OriginalMember(owner = "client!wa", name = "tb", descriptor = "Lclient!na;") + public static final JagString FR_CHATEFFECT4 = JagString.parse("d-Broulement:"); + + @OriginalMember(owner = "client!wa", name = "H", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD50B = JagString.parse("Polices charg-Bes"); + + @OriginalMember(owner = "client!il", name = "Q", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD90B = JagString.parse("Textures charg-Bes"); + + @OriginalMember(owner = "client!il", name = "R", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD135B = JagString.parse("Liste des serveurs charg-Be"); + + @OriginalMember(owner = "client!u", name = "d", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD150B = JagString.parse("Librairie 3D d-Bmarr-Be"); + + @OriginalMember(owner = "client!kd", name = "tb", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD30B = JagString.parse("Connect-B au serveur de mise -9 jour"); + + @OriginalMember(owner = "client!mg", name = "Y", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD0B = JagString.parse("M-Bmoire attribu-Be"); + + @OriginalMember(owner = "client!km", name = "Ic", descriptor = "Lclient!na;") + public static final JagString FR_CHATEFFECT1 = JagString.parse("ondulation:"); + + @OriginalMember(owner = "client!tl", name = "g", descriptor = "Lclient!na;") + public static final JagString FR_CHATEFFECT3 = JagString.parse("tremblement:"); + + @OriginalMember(owner = "client!gm", name = "hb", descriptor = "Lclient!na;") + public static final JagString FR_FACEHERE = JagString.parse("Regarder dans cette direction"); + + @OriginalMember(owner = "client!li", name = "e", descriptor = "Lclient!na;") + public static final JagString FR_PLEASEWAIT = JagString.parse("Veuillez patienter)3)3)3"); + + @OriginalMember(owner = "client!gi", name = "o", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD135 = JagString.parse("Chargement de la liste des serveurs"); + + @OriginalMember(owner = "client!jm", name = "t", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD120B = JagString.parse("Module texte charg-B"); + + @OriginalMember(owner = "client!pb", name = "J", descriptor = "Lclient!na;") + public static final JagString FR_CHOOSE_OPTION = JagString.parse("Choisir une option"); + + @OriginalMember(owner = "client!pb", name = "K", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD90 = JagString.parse("Chargement des textures )2 "); + + @OriginalMember(owner = "client!pb", name = "cb", descriptor = "Lclient!na;") + public static final JagString FR_LOADING = JagString.parse("Chargement en cours)3 Veuillez patienter)3"); + + @OriginalMember(owner = "client!gi", name = "k", descriptor = "Lclient!na;") + public static final JagString FR_CHATCOL8 = JagString.parse("clignotant3:"); + + @OriginalMember(owner = "client!q", name = "f", descriptor = "Lclient!na;") + public static final JagString FR_HIDDEN = JagString.parse("Cach-B"); + + @OriginalMember(owner = "client!q", name = "g", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD50 = JagString.parse("Chargement des polices )2 "); + + @OriginalMember(owner = "client!gl", name = "c", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD10B = JagString.parse("Monde de jeu cr-B-B"); + + @OriginalMember(owner = "client!me", name = "T", descriptor = "Lclient!na;") + public static final JagString FR_CHATCOL4 = JagString.parse("violet:"); + + @OriginalMember(owner = "client!me", name = "kb", descriptor = "Lclient!na;") + public static final JagString FR_IGNORELISTFULL = JagString.parse("Votre liste noire est pleine (X100 noms maximum(Y)3"); + + @OriginalMember(owner = "client!ud", name = "I", descriptor = "Lclient!na;") + public static final JagString FR_LOADINGDOTDOTDOT = JagString.parse("Chargement en cours)3)3)3"); + + @OriginalMember(owner = "client!ud", name = "L", descriptor = "Lclient!na;") + public static final JagString FR_CHATCOL6 = JagString.parse("clignotant1:"); + + @OriginalMember(owner = "client!ja", name = "o", descriptor = "Lclient!na;") + public static final JagString FR_TRADEREQ = JagString.parse("voudrait faire un -Bchange avec vous)3"); + + @OriginalMember(owner = "client!ja", name = "p", descriptor = "Lclient!na;") + public static final JagString FR_FRIENDSLISTDUPE = JagString.parse(" est d-Bj-9 dans votre liste d(Wamis)3"); + + @OriginalMember(owner = "client!ja", name = "b", descriptor = "Lclient!na;") + public static final JagString FR_SELECT = JagString.parse("S-Blectionner"); + + @OriginalMember(owner = "client!ja", name = "d", descriptor = "Lclient!na;") + public static final JagString FR_LEVEL = JagString.parse("niveau "); + + @OriginalMember(owner = "client!md", name = "X", descriptor = "Lclient!na;") + public static final JagString FR_UNABLETOFIND = JagString.parse("Impossible de trouver "); + + @OriginalMember(owner = "client!md", name = "J", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD140 = JagString.parse("D-Bmarrage de la librairie 3D"); + + @OriginalMember(owner = "client!md", name = "O", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD70B = JagString.parse("Fichiers config charg-Bs"); + + @OriginalMember(owner = "client!md", name = "P", descriptor = "Lclient!na;") + public static final JagString FR_CLOSE = JagString.parse("Fermer"); + + @OriginalMember(owner = "client!vj", name = "l", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD70 = JagString.parse("Chargement des fichiers config )2 "); + + @OriginalMember(owner = "client!sd", name = "J", descriptor = "Lclient!na;") + public static final JagString FR_ATTEMPT_TO_REESTABLISH = JagString.parse("Veuillez patienter )2 tentative de r-Btablissement)3"); + + @OriginalMember(owner = "client!k", name = "n", descriptor = "Lclient!na;") + public static final JagString FR_CHATCOL9 = JagString.parse("brillant1:"); + + @OriginalMember(owner = "client!k", name = "u", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD80 = JagString.parse("Chargement des sprites )2 "); + + @OriginalMember(owner = "client!ij", name = "n", descriptor = "Lclient!na;") + public static final JagString FR_REMOVEIGNORE = JagString.parse(" de votre liste noire)3"); + + @OriginalMember(owner = "client!ic", name = "d", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD40B = JagString.parse("Liste des mises -9 jour charg-Be"); + + @OriginalMember(owner = "client!ic", name = "m", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD80B = JagString.parse("Sprites charg-Bs"); + + @OriginalMember(owner = "client!mf", name = "K", descriptor = "Lclient!na;") + public static final JagString FR_DROP = JagString.parse("Poser"); + + @OriginalMember(owner = "client!rh", name = "q", descriptor = "Lclient!na;") + public static final JagString FR_OK = JagString.parse("OK"); + + @OriginalMember(owner = "client!pk", name = "Q", descriptor = "Lclient!na;") + public static final JagString FR_CHATEFFECT5 = JagString.parse("glissement:"); + + @OriginalMember(owner = "client!kh", name = "a", descriptor = "Lclient!na;") + public static final JagString FR_ATTACK = JagString.parse("Attaquer"); + + @OriginalMember(owner = "client!tc", name = "b", descriptor = "Lclient!na;") + public static final JagString FR_TAKE = JagString.parse("Prendre"); + + @OriginalMember(owner = "client!tc", name = "c", descriptor = "Lclient!na;") + public static final JagString FR_REMOVEFRIEND = JagString.parse(" de votre liste d(Wamis)3"); + + @OriginalMember(owner = "client!hm", name = "lb", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD45B = JagString.parse("Moteur son pr-Bpar-B"); + + @OriginalMember(owner = "client!kk", name = "a", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD0 = JagString.parse("M-Bmoire en cours d(Wattribution"); + + @OriginalMember(owner = "client!wj", name = "k", descriptor = "Lclient!na;") + public static final JagString FR_CONTINUE = JagString.parse("Continuer"); + + @OriginalMember(owner = "client!oi", name = "k", descriptor = "Lclient!na;") + public static final JagString FR_CHATCOL3 = JagString.parse("cyan:"); + + @OriginalMember(owner = "client!sj", name = "x", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD30 = JagString.parse("Connexion au serveur de mise -9 jour en cours"); + + @OriginalMember(owner = "client!la", name = "k", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOLAD120 = JagString.parse("Chargement du module texte )2 "); + + @OriginalMember(owner = "client!hi", name = "h", descriptor = "Lclient!na;") + public static final JagString FR_MAINLOAD60 = JagString.parse("Chargement de l(W-Bcran)2titre )2 "); + + @OriginalMember(owner = "client!gg", name = "jb", descriptor = "Lclient!na;") + public static final JagString FR_IGNORELISTDUPE = JagString.parse(" est d-Bj-9 dans votre liste noire)3"); + + @OriginalMember(owner = "client!uf", name = "d", descriptor = "Lclient!na;") + public static final JagString FR_MOREOPTIONS = JagString.parse(" autres options"); + + @OriginalMember(owner = "client!gg", name = "Q", descriptor = "Lclient!na;") + public static final JagString FR_FRIENDLOGIN = JagString.parse(" s(West connect-B)3"); + + @OriginalMember(owner = "client!bb", name = "a", descriptor = "(B)V") + public static void switchToFrench() { + MAINLOAD70B = FR_MAINLOAD70B; + MAINLOAD70 = FR_MAINLOAD70; + CHATCOL4 = FR_CHATCOL4; + CONTINUE = FR_CONTINUE; + SKILL = FR_SKILL; + EXAMINE = FR_EXAMINE; + MAINLOAD120 = FR_MAINLOLAD120; + CHATCOL10 = FR_CHATCOL10; + MILLION_SHORT = FR_MILLION_SUFFIX; + CHATCOL7 = FR_CHATCOL7; + CHATEFFECT2 = FR_CHATEFFECT2; + ATTACK = FR_ATTACK; + FRIENDLISTFULL = FR_FRIENDLISTFULL; + IGNORELISTDUPE = FR_IGNORELISTDUPE; + MAINLOAD135B = FR_MAINLOAD135B; + MAINLOAD110B = FR_MAINLOAD110B; + CHATCOL1 = FR_CHATCOL1; + CHATEFFECT1 = FR_CHATEFFECT1; + MAINLOAD30 = FR_MAINLOAD30; + FRIENDLISTDUPE = FR_FRIENDSLISTDUPE; + CHATEFFECT3 = FR_CHATEFFECT3; + MAINLOAD60 = FR_MAINLOAD60; + MOREOPTIONS = FR_MOREOPTIONS; + MAINLOAD65B = FR_MAINLOAD65B; + MAINLOAD150B = FR_MAINLOAD150B; + PLEASEWAIT = FR_PLEASEWAIT; + FACEHERE = FR_FACEHERE; + MILLION = FR_MILLION_SUFFIX; + FRIENDLOGIN = FR_FRIENDLOGIN; + CHATCOL3 = FR_CHATCOL3; + MAINLOAD50 = FR_MAINLOAD50; + CHATCOL8 = FR_CHATCOL8; + OK = FR_OK; + IGNORECANTADDSELF = FR_IGNORECANTADDSELF; + MAINLOAD90B = FR_MAINLOAD90B; + CHATCOL11 = FR_CHATCOL11; + MAINLOAD140 = FR_MAINLOAD140; + CHECKING_FOR_UPDATES = FR_CHECKING_FOR_UPDATES; + ATTEMPT_TO_REESTABLISH = FR_ATTEMPT_TO_REESTABLISH; + CHATEFFECT5 = FR_CHATEFFECT5; + MAINLOAD0 = FR_MAINLOAD0; + MAINLOAD45B = FR_MAINLOAD45B; + MAINLOAD0B = FR_MAINLOAD0B; + DROP = FR_DROP; + MINISEPARATOR = FR_MINISEPARATOR; + WALKHERE = FR_WALKHERE; + UNABLETOFIND = FR_UNABLETOFIND; + MAINLOAD60B = FR_MAINLOAD60B; + REMOVEFRIEND = FR_REMOVEFRIEND; + MAINLOAD80 = FR_MAINLOAD80; + MEMBERS_OBJECT = FR_MEMBERS_OBJECT; + MAINLOAD40B = FR_MAINLOAD40B; + MAINLOAD50B = FR_MAINLOAD50B; + TAKE = FR_TAKE; + RATING = FR_RATING; + LENT_ITEM_RETURN = FR_LENT_ITEM_RETURN; + CLOSE = FR_CLOSE; + TRADEREQ = FR_TRADEREQ; + CHATCOL0 = FR_CHATCOL0; + REMOVEIGNORE = FR_REMOVEIGNORE; + CHATCOL9 = FR_CHATCOL9; + CHOOSE_OPTION = FR_CHOOSE_OPTION; + LOADINGDOTDOTDOT = FR_LOADINGDOTDOTDOT; + CHATCOL5 = FR_CHATCOL5; + MAINLOAD80B = FR_MAINLOAD80B; + MAINLOAD130 = FR_MAINLOAD130; + FRIENDCANTADDSELF = FR_FRIENDCANTADDSELF; + REMOVESOCIAL1 = FR_REMOVESOCIAL; + CANCEL = FR_CANCEL; + MAINLOAD120B = FR_MAINLOAD120B; + MAINLOAD10B = FR_MAINLOAD10B; + THOUSAND = FR_THOUSAND_SUFFIX; + LEVEL = FR_LEVEL; + THOUSAND_SHORT = FR_THOUSAND_SUFFIX; + SELECT = FR_SELECT; + CONLOST = FR_CONLOST; + IGNORELISTFULL = FR_IGNORELISTFULL; + MAINLOAD130B = FR_MAINLOAD130B; + GAME0_LOADING = FR_GAME0_LOADING; + CHATCOL6 = FR_CHATCOL6; + REMOVESOCIAL2 = FR_REMOVESOCIAL; + CHATCOL2 = FR_CHATCOL2; + HIDDEN = FR_HIDDEN; + LOADING = FR_LOADING; + MAINLOAD30B = FR_MAINLOAD30B; + FRIENDLOGOUT = FR_FRIENDLOGOUT; + MAINLOAD90 = FR_MAINLOAD90; + USE = FR_USE; + CHATEFFECT4 = FR_CHATEFFECT4; + MAINLOAD135 = FR_MAINLOAD135; + } + + @OriginalMember(owner = "client!ab", name = "a", descriptor = "(II)V") + public static void setLanguage(@OriginalArg(1) int arg0) { + if (arg0 == 0) { + return; + } + if (arg0 == 1) { + switchToGerman(); + } else if (arg0 == 2) { + switchToFrench(); + } else { + throw new RuntimeException(); + } + } + //endregion +} diff --git a/client/src/main/java/rt4/LoginManager.java b/client/src/main/java/rt4/LoginManager.java new file mode 100644 index 0000000..a8e2270 --- /dev/null +++ b/client/src/main/java/rt4/LoginManager.java @@ -0,0 +1,1546 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; +import plugin.PluginRepository; + +import java.io.IOException; +import java.net.Socket; + +public class LoginManager { + @OriginalMember(owner = "client!bg", name = "g", descriptor = "Lclient!i;") + public static final Packet buffer = new Packet(5000); + @OriginalMember(owner = "client!nd", name = "r", descriptor = "Lclient!na;") + public static final JagString ZAP = JagString.parse("zap"); + @OriginalMember(owner = "client!ef", name = "h", descriptor = "Lclient!na;") + public static final JagString UNZAP = JagString.parse("unzap"); + @OriginalMember(owner = "client!wj", name = "f", descriptor = "Lclient!na;") + public static final JagString aClass100_1103 = JagString.parse("ul"); + @OriginalMember(owner = "client!i", name = "ic", descriptor = "Lclient!na;") + public static final JagString aClass100_558 = JagString.parse("m"); + @OriginalMember(owner = "client!wb", name = "e", descriptor = "Lclient!na;") + public static final JagString aClass100_1090 = JagString.parse("l"); + @OriginalMember(owner = "client!oe", name = "o", descriptor = "Lclient!na;") + public static final JagString aClass100_807 = JagString.parse("n"); + @OriginalMember(owner = "client!nb", name = "a", descriptor = "Lclient!na;") + public static final JagString aClass100_772 = JagString.parse("um"); + @OriginalMember(owner = "client!gm", name = "W", descriptor = "Lclient!na;") + public static final JagString UNDERSCORE = JagString.parse("_"); + @OriginalMember(owner = "client!gd", name = "h", descriptor = "[I") + public static final int[] anIntArray204 = new int[]{16, 32, 64, 128}; + @OriginalMember(owner = "client!rj", name = "Z", descriptor = "[I") + public static final int[] anIntArray434 = new int[64]; + @OriginalMember(owner = "client!e", name = "Dc", descriptor = "Lclient!na;") + public static final JagString aClass100_363 = JagString.parse("_labels"); + @OriginalMember(owner = "client!bh", name = "C", descriptor = "Lclient!na;") + public static final JagString COMPLETE_PERCENT = JagString.parse("
(X100(U(Y"); + @OriginalMember(owner = "client!rl", name = "X", descriptor = "I") + public static int anInt4937 = 0; + @OriginalMember(owner = "client!sd", name = "X", descriptor = "Z") + public static boolean aBoolean247 = false; + @OriginalMember(owner = "client!sk", name = "ib", descriptor = "I") + public static int hopTime = 0; + @OriginalMember(owner = "client!vk", name = "b", descriptor = "I") + public static int reply = -2; + @OriginalMember(owner = "client!hd", name = "a", descriptor = "I") + public static int loops = 0; + @OriginalMember(owner = "client!ol", name = "V", descriptor = "I") + public static int step = 0; + @OriginalMember(owner = "client!qi", name = "A", descriptor = "I") + public static int disallowResult = -1; + @OriginalMember(owner = "client!wh", name = "s", descriptor = "I") + public static int errors = 0; + @OriginalMember(owner = "client!bj", name = "Y", descriptor = "I") + public static int anInt673 = 0; + @OriginalMember(owner = "client!pl", name = "i", descriptor = "I") + public static int anInt4587 = 0; + @OriginalMember(owner = "client!pi", name = "P", descriptor = "J") + public static long serverKey = 0L; + @OriginalMember(owner = "client!af", name = "c", descriptor = "I") + public static int anInt39 = -1; + @OriginalMember(owner = "client!pg", name = "S", descriptor = "I") + public static int staffModLevel = 0; + @OriginalMember(owner = "client!ud", name = "O", descriptor = "I") + public static int blackmarks = 0; + @OriginalMember(owner = "client!jk", name = "G", descriptor = "Z") + public static boolean playerUnderage = false; + @OriginalMember(owner = "client!ql", name = "c", descriptor = "Z") + public static boolean parentalChatConsent = false; + @OriginalMember(owner = "client!qg", name = "W", descriptor = "Z") + public static boolean playerMember = false; + @OriginalMember(owner = "client!aa", name = "l", descriptor = "Z") + public static boolean mapMembers = false; + @OriginalMember(owner = "client!gm", name = "bb", descriptor = "Z") + public static boolean mapQuickChat = false; + @OriginalMember(owner = "client!c", name = "hb", descriptor = "Z") + public static boolean parentalAdvertConsent = false; + @OriginalMember(owner = "client!we", name = "H", descriptor = "[[B") + public static byte[][] mapFilesBuffer; + @OriginalMember(owner = "client!mf", name = "O", descriptor = "[[B") + public static byte[][] locationMapFilesBuffer; + @OriginalMember(owner = "client!cl", name = "V", descriptor = "[I") + public static int[] underWaterLocationsMapFileIds; + @OriginalMember(owner = "client!pg", name = "jb", descriptor = "[[B") + public static byte[][] npcSpawnsFilesBuffer; + @OriginalMember(owner = "client!client", name = "lb", descriptor = "[I") + public static int[] mapFileIds; + @OriginalMember(owner = "client!pa", name = "L", descriptor = "[[B") + public static byte[][] underWaterMapFilesBuffer; + @OriginalMember(owner = "client!fl", name = "D", descriptor = "[[I") + public static int[][] regionsXteaKeys; + @OriginalMember(owner = "client!te", name = "H", descriptor = "[I") + public static int[] regionBitPacked; + @OriginalMember(owner = "client!nm", name = "P", descriptor = "[I") + public static int[] npcSpawnsFileIds; + @OriginalMember(owner = "client!hk", name = "bb", descriptor = "[I") + public static int[] underWaterMapFileIds; + @OriginalMember(owner = "client!nj", name = "j", descriptor = "[I") + public static int[] locationsMapFileIds; + @OriginalMember(owner = "client!bi", name = "Y", descriptor = "[[B") + public static byte[][] underWaterLocationsMapFilesBuffer; + @OriginalMember(owner = "client!mh", name = "hb", descriptor = "Lclient!bn;") + public static Map map; + @OriginalMember(owner = "client!tb", name = "X", descriptor = "Lclient!se;") + public static MapElementList mapElementList; + @OriginalMember(owner = "client!ja", name = "n", descriptor = "I") + public static int mapFlagX = 0; + @OriginalMember(owner = "client!gk", name = "h", descriptor = "I") + public static int mapFlagZ = 0; + @OriginalMember(owner = "client!qf", name = "M", descriptor = "I") + public static int anInt1862 = 0; + @OriginalMember(owner = "client!nm", name = "U", descriptor = "I") + public static int mapFilesMissingCount = 0; + @OriginalMember(owner = "client!t", name = "y", descriptor = "I") + public static int loadingScreenState = 0; + @OriginalMember(owner = "client!sk", name = "lb", descriptor = "Z") + public static boolean aBoolean252 = false; + @OriginalMember(owner = "client!mg", name = "Q", descriptor = "I") + public static int anInt3811 = 0; + @OriginalMember(owner = "client!mf", name = "X", descriptor = "I") + public static int loginScreenId; + @OriginalMember(owner = "client!hd", name = "e", descriptor = "Lclient!qf;") + public static Sprite aClass3_Sub2_Sub1_6; + @OriginalMember(owner = "client!d", name = "ib", descriptor = "Lclient!qf;") + public static Sprite aClass3_Sub2_Sub1_1; + @OriginalMember(owner = "client!oi", name = "h", descriptor = "Lclient!qf;") + public static Sprite aClass3_Sub2_Sub1_9; + @OriginalMember(owner = "client!qi", name = "z", descriptor = "Lclient!qf;") + public static Sprite aClass3_Sub2_Sub1_10; + @OriginalMember(owner = "client!nb", name = "i", descriptor = "Lclient!qf;") + public static Sprite aClass3_Sub2_Sub1_8; + @OriginalMember(owner = "client!qf", name = "X", descriptor = "Lclient!be;") + public static Component aClass13_13 = null; + @OriginalMember(owner = "client!vf", name = "c", descriptor = "I") + public static int anInt5752; + @OriginalMember(owner = "client!pk", name = "Y", descriptor = "I") + public static int anInt4581; + @OriginalMember(owner = "client!da", name = "ab", descriptor = "I") + public static int anInt1275; + @OriginalMember(owner = "client!ii", name = "y", descriptor = "I") + public static int anInt2910; + @OriginalMember(owner = "client!ug", name = "p", descriptor = "I") + public static int anInt5457; + @OriginalMember(owner = "client!sm", name = "b", descriptor = "I") + public static int anInt5208; + @OriginalMember(owner = "client!ee", name = "c", descriptor = "I") + public static int anInt1736; + @OriginalMember(owner = "client!gl", name = "d", descriptor = "I") + public static int anInt2261; + @OriginalMember(owner = "client!nf", name = "e", descriptor = "I") + public static int anInt4073; + @OriginalMember(owner = "client!kk", name = "i", descriptor = "I") + public static int anInt3324; + @OriginalMember(owner = "client!uj", name = "E", descriptor = "I") + public static int anInt5556; + @OriginalMember(owner = "client!wc", name = "g", descriptor = "I") + public static int anInt5804 = 0; + + @OriginalMember(owner = "client!dm", name = "d", descriptor = "(I)V") + public static void clear() { + aBoolean247 = false; + hopTime = 0; + reply = -3; + loops = 0; + step = 1; + errors = 0; + disallowResult = -1; + } + + @OriginalMember(owner = "client!ch", name = "b", descriptor = "(B)V") + public static void loopAuto() { + if (anInt4937 == 0) { + return; + } + try { + if (++anInt673 > 1500) { + if (Protocol.socket != null) { + Protocol.socket.close(); + Protocol.socket = null; + } + if (anInt4587 >= 1) { + reply = -5; + anInt4937 = 0; + return; + } + anInt673 = 0; + anInt4587++; + anInt4937 = 1; + if (client.worldListPort == client.worldListDefaultPort) { + client.worldListPort = client.worldListAlternatePort; + } else { + client.worldListPort = client.worldListDefaultPort; + } + } + if (anInt4937 == 1) { + Protocol.socketRequest = GameShell.signLink.openSocket(client.worldListHostname, client.worldListPort); + anInt4937 = 2; + } + @Pc(126) int local126; + if (anInt4937 == 2) { + if (Protocol.socketRequest.status == 2) { + throw new IOException(); + } + if (Protocol.socketRequest.status != 1) { + return; + } + Protocol.socket = new BufferedSocket((Socket) Protocol.socketRequest.result, GameShell.signLink); + Protocol.socketRequest = null; + Protocol.socket.write(Protocol.outboundBuffer.data, Protocol.outboundBuffer.offset); + if (client.musicChannel != null) { + client.musicChannel.method3571(); + } + if (client.soundChannel != null) { + client.soundChannel.method3571(); + } + local126 = Protocol.socket.read(); + if (client.musicChannel != null) { + client.musicChannel.method3571(); + } + if (client.soundChannel != null) { + client.soundChannel.method3571(); + } + if (local126 != 101) { + reply = local126; + anInt4937 = 0; + Protocol.socket.close(); + Protocol.socket = null; + return; + } + anInt4937 = 3; + } + if (anInt4937 == 3) { + if (Protocol.socket.available() < 2) { + return; + } + local126 = Protocol.socket.read() << 8 | Protocol.socket.read(); + WorldList.hopWorld(local126); + if (Player.worldId == -1) { + anInt4937 = 0; + reply = 6; + Protocol.socket.close(); + Protocol.socket = null; + return; + } + anInt4937 = 0; + Protocol.socket.close(); + Protocol.socket = null; + clear(); + } + } catch (@Pc(210) IOException local210) { + if (Protocol.socket != null) { + Protocol.socket.close(); + Protocol.socket = null; + } + if (anInt4587 < 1) { + if (client.worldListPort == client.worldListDefaultPort) { + client.worldListPort = client.worldListAlternatePort; + } else { + client.worldListPort = client.worldListDefaultPort; + } + anInt4937 = 1; + anInt673 = 0; + anInt4587++; + } else { + reply = -4; + anInt4937 = 0; + } + } + } + + @OriginalMember(owner = "client!ri", name = "a", descriptor = "(B)V") + public static void loop() { + if (step == 0 || step == 5) { + return; + } + try { + if (++loops > 2000) { + if (Protocol.socket != null) { + Protocol.socket.close(); + Protocol.socket = null; + } + if (errors >= 1) { + reply = -5; + step = 0; + return; + } + loops = 0; + if (client.port == client.defaultPort) { + client.port = client.alternatePort; + } else { + client.port = client.defaultPort; + } + step = 1; + errors++; + } + if (step == 1) { + if (GlobalJsonConfig.instance != null) { + client.hostname = GlobalJsonConfig.instance.ip_management; + client.port = GlobalJsonConfig.instance.server_port + client.worldListId; + } + Protocol.socketRequest = GameShell.signLink.openSocket(client.hostname, client.port); + step = 2; + } + if (step == 2) { + if (Protocol.socketRequest.status == 2) { + throw new IOException(); + } + if (Protocol.socketRequest.status != 1) { + return; + } + Protocol.socket = new BufferedSocket((Socket) Protocol.socketRequest.result, GameShell.signLink); + Protocol.socketRequest = null; + @Pc(106) long local106 = Player.name37 = Player.usernameInput.encode37(); + Protocol.outboundBuffer.offset = 0; + Protocol.outboundBuffer.p1(14); + @Pc(120) int local120 = (int) (local106 >> 16 & 0x1FL); + Protocol.outboundBuffer.p1(local120); + Protocol.socket.write(Protocol.outboundBuffer.data, 2); + if (client.musicChannel != null) { + client.musicChannel.method3571(); + } + if (client.soundChannel != null) { + client.soundChannel.method3571(); + } + @Pc(150) int local150 = Protocol.socket.read(); + if (client.musicChannel != null) { + client.musicChannel.method3571(); + } + if (client.soundChannel != null) { + client.soundChannel.method3571(); + } + if (local150 != 0) { + reply = local150; + step = 0; + Protocol.socket.close(); + Protocol.socket = null; + return; + } + step = 3; + } + if (step == 3) { + if (Protocol.socket.available() < 8) { + return; + } + Protocol.socket.read(0, 8, Protocol.inboundBuffer.data); + Protocol.inboundBuffer.offset = 0; + serverKey = Protocol.inboundBuffer.g8(); + @Pc(210) int[] key = new int[4]; + Protocol.outboundBuffer.offset = 0; + key[2] = (int) (serverKey >> 32); + key[3] = (int) serverKey; + key[1] = (int) (Math.random() * 9.9999999E7D); + key[0] = (int) (Math.random() * 9.9999999E7D); + Protocol.outboundBuffer.p1(10); + Protocol.outboundBuffer.p4(key[0]); + Protocol.outboundBuffer.p4(key[1]); + Protocol.outboundBuffer.p4(key[2]); + Protocol.outboundBuffer.p4(key[3]); + Protocol.outboundBuffer.p8(Player.usernameInput.encode37()); + Protocol.outboundBuffer.pjstr(Player.password); + if (GlobalConfig.LOGIN_EXTRA_INFO) { + Protocol.outboundBuffer.pjstr(JagString.parse("")); + Protocol.outboundBuffer.pjstr(JagString.parse("")); + Protocol.outboundBuffer.pjstr(JagString.parse("")); + } + Protocol.outboundBuffer.rsaenc(GlobalConfig.RSA_EXPONENT, GlobalConfig.RSA_MODULUS); + buffer.offset = 0; + if (client.gameState == 40) { + buffer.p1(18); + } else { + buffer.p1(16); + } + int offset = 0; + if (GlobalConfig.LOGIN_FAKE_IDX28) { + // pretend that we're loading the archive so we don't throw the packet size off + offset = 4; + } + buffer.p2(Protocol.outboundBuffer.offset + Buffer.gjstrlen(client.settings) + (159 + offset)); + buffer.p4(530); + buffer.p1(anInt39); + buffer.p1(client.advertSuppressed ? 1 : 0); + buffer.p1(1); + buffer.p1(DisplayMode.getWindowMode()); + buffer.p2(GameShell.canvasWidth); + buffer.p2(GameShell.canvasHeight); + buffer.p1(Preferences.antiAliasingMode); + client.writeUid(buffer); + buffer.pjstr(client.settings); + buffer.p4(client.affiliate); + buffer.p4(Preferences.toInt()); + Preferences.sentToServer = true; + buffer.p2(Protocol.verifyId); + buffer.p4(client.js5Archive0.getChecksum()); + buffer.p4(client.js5Archive1.getChecksum()); + buffer.p4(client.js5Archive2.getChecksum()); + buffer.p4(client.js5Archive3.getChecksum()); + buffer.p4(client.js5Archive4.getChecksum()); + buffer.p4(client.js5Archive5.getChecksum()); + buffer.p4(client.js5Archive6.getChecksum()); + buffer.p4(client.js5Archive7.getChecksum()); + buffer.p4(client.js5Archive8.getChecksum()); + buffer.p4(client.js5Archive9.getChecksum()); + buffer.p4(client.js5Archive10.getChecksum()); + buffer.p4(client.js5Archive11.getChecksum()); + buffer.p4(client.js5Archive12.getChecksum()); + buffer.p4(client.js5Archive13.getChecksum()); + buffer.p4(client.js5Archive14.getChecksum()); + buffer.p4(client.js5Archive15.getChecksum()); + buffer.p4(client.js5Archive16.getChecksum()); + buffer.p4(client.js5Archive17.getChecksum()); + buffer.p4(client.js5Archive18.getChecksum()); + buffer.p4(client.js5Archive19.getChecksum()); + buffer.p4(client.js5Archive20.getChecksum()); + buffer.p4(client.js5Archive21.getChecksum()); + buffer.p4(client.js5Archive22.getChecksum()); + buffer.p4(client.js5Archive23.getChecksum()); + buffer.p4(client.js5Archive24.getChecksum()); + buffer.p4(client.js5Archive25.getChecksum()); + buffer.p4(client.js5Archive26.getChecksum()); + buffer.p4(client.js5Archive27.getChecksum()); + if (GlobalConfig.LOGIN_FAKE_IDX28) { + buffer.p4(0); + } + buffer.pdata(Protocol.outboundBuffer.data, Protocol.outboundBuffer.offset); + Protocol.socket.write(buffer.data, buffer.offset); + Protocol.outboundBuffer.setKey(key); + for (@Pc(583) int i = 0; i < 4; i++) { + key[i] += 50; + } + Protocol.inboundBuffer.setKey(key); + step = 4; + } + if (step == 4) { + if (Protocol.socket.available() < 1) { + return; + } + @Pc(623) int reply = Protocol.socket.read(); + if (reply == 21) { + step = 7; + } else if (reply == 29) { + step = 10; + } else if (reply == 1) { + step = 5; + LoginManager.reply = reply; + return; + } else if (reply == 2) { + step = 8; + } else if (reply == 15) { + step = 0; + LoginManager.reply = reply; + return; + } else if (reply == 23 && errors < 1) { + step = 1; + errors++; + loops = 0; + Protocol.socket.close(); + Protocol.socket = null; + return; + } else { + LoginManager.reply = reply; + step = 0; + Protocol.socket.close(); + Protocol.socket = null; + return; + } + } + if (step == 6) { + Protocol.outboundBuffer.offset = 0; + Protocol.outboundBuffer.p1isaac(17); + Protocol.socket.write(Protocol.outboundBuffer.data, Protocol.outboundBuffer.offset); + step = 4; + return; + } + if (step == 7) { + if (Protocol.socket.available() >= 1) { + hopTime = (Protocol.socket.read() + 3) * 60; + step = 0; + reply = 21; + Protocol.socket.close(); + Protocol.socket = null; + return; + } + return; + } + if (step == 10) { + if (Protocol.socket.available() >= 1) { + disallowResult = Protocol.socket.read(); + step = 0; + reply = 29; + Protocol.socket.close(); + Protocol.socket = null; + return; + } + return; + } + if (step == 8) { + if (Protocol.socket.available() < 14) { + return; + } + Protocol.socket.read(0, 14, Protocol.inboundBuffer.data); + Protocol.inboundBuffer.offset = 0; + staffModLevel = Protocol.inboundBuffer.g1(); + blackmarks = Protocol.inboundBuffer.g1(); + playerUnderage = Protocol.inboundBuffer.g1() == 1; + parentalChatConsent = Protocol.inboundBuffer.g1() == 1; + parentalAdvertConsent = Protocol.inboundBuffer.g1() == 1; + mapQuickChat = Protocol.inboundBuffer.g1() == 1; + MouseRecorder.enabled = Protocol.inboundBuffer.g1() == 1; + PlayerList.selfId = Protocol.inboundBuffer.g2(); + playerMember = Protocol.inboundBuffer.g1() == 1; + mapMembers = Protocol.inboundBuffer.g1() == 1; + LocTypeList.setAllowMembers(mapMembers); + ObjTypeList.setAllowMembers(mapMembers); + if (!client.advertSuppressed) { + if (playerUnderage && !parentalAdvertConsent || playerMember) { + try { + ZAP.browserControlCall(GameShell.signLink.applet); + } catch (@Pc(910) Throwable ignored) { + } + } else { + try { + UNZAP.browserControlCall(GameShell.signLink.applet); + } catch (@Pc(920) Throwable ignored) { + } + } + } + Protocol.opcode = Protocol.inboundBuffer.g1isaac(); + Protocol.length = Protocol.inboundBuffer.g2(); + step = 9; + } + if (step == 9) { + if (Protocol.socket.available() < Protocol.length) { + return; + } + Protocol.inboundBuffer.offset = 0; + Protocol.socket.read(0, Protocol.length, Protocol.inboundBuffer.data); + reply = 2; + step = 0; + client.method4221(); + SceneGraph.centralZoneX = -1; + Protocol.readRebuildPacket(false); + Protocol.opcode = -1; + } + } catch (@Pc(977) IOException ex) { + if (Protocol.socket != null) { + Protocol.socket.close(); + Protocol.socket = null; + } + if (errors >= 1) { + step = 0; + reply = -4; + } else { + step = 1; + loops = 0; + errors++; + if (client.defaultPort == client.port) { + client.port = client.alternatePort; + } else { + client.port = client.defaultPort; + } + } + } + } + + @OriginalMember(owner = "client!p", name = "a", descriptor = "(I)V") + public static void method3395() { + if (step == 5) { + step = 6; + } + } + + @OriginalMember(owner = "client!se", name = "a", descriptor = "(Lclient!na;Lclient!na;IB)V") + public static void method3896(@OriginalArg(0) JagString arg0, @OriginalArg(1) JagString arg1, @OriginalArg(2) int arg2) { + Player.password = arg1; + anInt39 = arg2; + Player.usernameInput = arg0; + if (Player.usernameInput.strEquals(JagString.EMPTY) || Player.password.strEquals(JagString.EMPTY)) { + reply = 3; + } else if (Player.worldId == -1) { + anInt673 = 0; + anInt4587 = 0; + reply = -3; + anInt4937 = 1; + @Pc(43) Buffer local43 = new Buffer(128); + local43.p1(10); + local43.p2((int) (Math.random() * 99999.0D)); + local43.p2(530); + local43.p8(Player.usernameInput.encode37()); + local43.p4((int) (Math.random() * 9.9999999E7D)); + local43.pjstr(Player.password); + local43.p4((int) (Math.random() * 9.9999999E7D)); + local43.rsaenc(GlobalConfig.RSA_EXPONENT, GlobalConfig.RSA_MODULUS); + Protocol.outboundBuffer.offset = 0; + Protocol.outboundBuffer.p1(210); + Protocol.outboundBuffer.p1(local43.offset); + Protocol.outboundBuffer.pdata(local43.data, local43.offset); + } else { + clear(); + } + } + + @OriginalMember(owner = "client!ca", name = "h", descriptor = "(I)V") + public static void setupLoadingScreenRegion() { + @Pc(10) int local10 = (Camera.renderX >> 10) + (Camera.originX >> 3); + @Pc(23) int local23 = (Camera.renderZ >> 10) + (Camera.originZ >> 3); + locationMapFilesBuffer = new byte[18][]; + underWaterLocationsMapFileIds = new int[18]; + npcSpawnsFilesBuffer = new byte[18][]; + mapFileIds = new int[18]; + regionsXteaKeys = new int[18][4]; + underWaterMapFilesBuffer = new byte[18][]; + regionBitPacked = new int[18]; + mapFilesBuffer = new byte[18][]; + npcSpawnsFileIds = new int[18]; + underWaterMapFileIds = new int[18]; + locationsMapFileIds = new int[18]; + underWaterLocationsMapFilesBuffer = new byte[18][]; + @Pc(74) int local74 = 0; + @Pc(80) int local80; + for (local80 = (local10 - 6) / 8; local80 <= (local10 + 6) / 8; local80++) { + for (@Pc(97) int local97 = (local23 - 6) / 8; local97 <= (local23 + 6) / 8; local97++) { + @Pc(115) int local115 = (local80 << 8) + local97; + regionBitPacked[local74] = local115; + mapFileIds[local74] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{aClass100_558, JagString.parseInt(local80), UNDERSCORE, JagString.parseInt(local97)})); + locationsMapFileIds[local74] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{aClass100_1090, JagString.parseInt(local80), UNDERSCORE, JagString.parseInt(local97)})); + npcSpawnsFileIds[local74] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{aClass100_807, JagString.parseInt(local80), UNDERSCORE, JagString.parseInt(local97)})); + underWaterMapFileIds[local74] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{aClass100_772, JagString.parseInt(local80), UNDERSCORE, JagString.parseInt(local97)})); + underWaterLocationsMapFileIds[local74] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{aClass100_1103, JagString.parseInt(local80), UNDERSCORE, JagString.parseInt(local97)})); + if (npcSpawnsFileIds[local74] == -1) { + mapFileIds[local74] = -1; + locationsMapFileIds[local74] = -1; + underWaterMapFileIds[local74] = -1; + underWaterLocationsMapFileIds[local74] = -1; + } + local74++; + } + } + for (local80 = local74; local80 < npcSpawnsFileIds.length; local80++) { + npcSpawnsFileIds[local80] = -1; + mapFileIds[local80] = -1; + locationsMapFileIds[local80] = -1; + underWaterMapFileIds[local80] = -1; + underWaterLocationsMapFileIds[local80] = -1; + } + method2463(0, local23, local10, 8, true, 8); + } + + @OriginalMember(owner = "client!wj", name = "b", descriptor = "(B)V") + public static void processLogout() { + if (Protocol.socket != null) { + Protocol.socket.close(); + Protocol.socket = null; + } + client.unload(); + SceneGraph.clear(); + @Pc(19) int i; + for (i = 0; i < 4; i++) { + PathFinder.collisionMaps[i].clear(); + } + WorldMap.clear(false); + System.gc(); + MidiPlayer.playFadeOut(); + MidiPlayer.jingle = false; + MusicPlayer.groupId = -1; + AreaSoundManager.clear(true); + SceneGraph.dynamicMapRegion = false; + Camera.originZ = 0; + SceneGraph.centralZoneX = 0; + SceneGraph.centralZoneZ = 0; + Camera.originX = 0; + for (i = 0; i < MiniMap.hintMapMarkers.length; i++) { + MiniMap.hintMapMarkers[i] = null; + } + PlayerList.size = 0; + NpcList.size = 0; + for (i = 0; i < 2048; i++) { + PlayerList.players[i] = null; + PlayerList.appearanceCache[i] = null; + } + for (i = 0; i < 32768; i++) { + NpcList.npcs[i] = null; + } + for (int level = 0; level < 4; level++) { + for (@Pc(115) int x = 0; x < 104; x++) { + for (@Pc(122) int z = 0; z < 104; z++) { + SceneGraph.objStacks[level][x][z] = null; + } + } + } + Camera.resetCameraEffects(); + Protocol.verifyId = 0; + VarpDomain.reset(); + InterfaceList.method1596(true); + PluginRepository.OnLogout(); + } + + @OriginalMember(owner = "client!k", name = "a", descriptor = "(IIIIZIZ)V") + public static void method2463(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) boolean arg4, @OriginalArg(5) int arg5) { + if (SceneGraph.centralZoneX == arg2 && arg1 == SceneGraph.centralZoneZ && (SceneGraph.centralPlane == arg0 || SceneGraph.allLevelsAreVisible())) { + return; + } + SceneGraph.centralZoneX = arg2; + SceneGraph.centralZoneZ = arg1; + SceneGraph.centralPlane = arg0; + if (SceneGraph.allLevelsAreVisible()) { + SceneGraph.centralPlane = 0; + } + if (arg4) { + client.setGameState(28); + } else { + client.setGameState(25); + } + Fonts.drawTextOnScreen(true, LocalizedText.LOADING); + @Pc(53) int local53 = Camera.originZ; + @Pc(55) int local55 = Camera.originX; + Camera.originZ = arg1 * 8 - 48; + Camera.originX = (arg2 - 6) * 8; + map = MapList.getContainingSource(SceneGraph.centralZoneX * 8, SceneGraph.centralZoneZ * 8); + @Pc(81) int local81 = Camera.originZ - local53; + @Pc(86) int local86 = Camera.originX - local55; + mapElementList = null; + @Pc(96) int local96; + @Pc(103) Npc local103; + @Pc(109) int local109; + if (arg4) { + NpcList.size = 0; + for (local96 = 0; local96 < 32768; local96++) { + local103 = NpcList.npcs[local96]; + if (local103 != null) { + local103.xFine -= local86 * 128; + local103.zFine -= local81 * 128; + if (local103.xFine >= 0 && local103.xFine <= 13184 && local103.zFine >= 0 && local103.zFine <= 13184) { + for (local109 = 0; local109 < 10; local109++) { + local103.movementQueueX[local109] -= local86; + local103.movementQueueZ[local109] -= local81; + } + NpcList.ids[NpcList.size++] = local96; + } else { + NpcList.npcs[local96].setNpcType(null); + NpcList.npcs[local96] = null; + } + } + } + } else { + for (local96 = 0; local96 < 32768; local96++) { + local103 = NpcList.npcs[local96]; + if (local103 != null) { + for (local109 = 0; local109 < 10; local109++) { + local103.movementQueueX[local109] -= local86; + local103.movementQueueZ[local109] -= local81; + } + local103.xFine -= local86 * 128; + local103.zFine -= local81 * 128; + } + } + } + for (local96 = 0; local96 < 2048; local96++) { + @Pc(265) Player local265 = PlayerList.players[local96]; + if (local265 != null) { + for (local109 = 0; local109 < 10; local109++) { + local265.movementQueueX[local109] -= local86; + local265.movementQueueZ[local109] -= local81; + } + local265.xFine -= local86 * 128; + local265.zFine -= local81 * 128; + } + } + Player.plane = arg0; + PlayerList.self.teleport(arg5, false, arg3); + @Pc(322) byte local322 = 104; + @Pc(324) byte local324 = 0; + @Pc(326) byte local326 = 0; + @Pc(328) byte local328 = 1; + @Pc(330) byte local330 = 104; + @Pc(332) byte local332 = 1; + if (local81 < 0) { + local328 = -1; + local330 = -1; + local326 = 103; + } + if (local86 < 0) { + local332 = -1; + local324 = 103; + local322 = -1; + } + for (@Pc(358) int local358 = local324; local358 != local322; local358 += local332) { + for (@Pc(367) int local367 = local326; local367 != local330; local367 += local328) { + @Pc(378) int local378 = local86 + local358; + @Pc(382) int local382 = local367 + local81; + for (@Pc(384) int local384 = 0; local384 < 4; local384++) { + if (local378 >= 0 && local382 >= 0 && local378 < 104 && local382 < 104) { + SceneGraph.objStacks[local384][local358][local367] = SceneGraph.objStacks[local384][local378][local382]; + } else { + SceneGraph.objStacks[local384][local358][local367] = null; + } + } + } + } + for (@Pc(451) ChangeLocRequest local451 = (ChangeLocRequest) ChangeLocRequest.queue.head(); local451 != null; local451 = (ChangeLocRequest) ChangeLocRequest.queue.next()) { + local451.z -= local81; + local451.x -= local86; + if (local451.x < 0 || local451.z < 0 || local451.x >= 104 || local451.z >= 104) { + local451.unlink(); + } + } + if (arg4) { + Camera.renderX -= local86 * 128; + Camera.renderZ -= local81 * 128; + Camera.anInt4232 -= local81; + Camera.anInt5449 -= local86; + Camera.anInt5765 -= local81; + Camera.anInt5375 -= local86; + } else { + Camera.cameraType = 1; + } + SoundPlayer.size = 0; + if (mapFlagX != 0) { + mapFlagZ -= local81; + mapFlagX -= local86; + } + if (GlRenderer.enabled && arg4 && (Math.abs(local86) > 104 || Math.abs(local81) > 104)) { + FogManager.setInstantFade(); + } + LightingManager.anInt2875 = -1; + SceneGraph.spotanims.clear(); + SceneGraph.projectiles.clear(); + } + + @OriginalMember(owner = "client!dh", name = "a", descriptor = "(Z)V") + public static void reconnect() { + Protocol.outboundBuffer.offset = 0; + Protocol.opcode3 = -1; + Cs1ScriptRunner.aBoolean108 = false; + Protocol.length = 0; + mapFlagX = 0; + MiniMenu.size = 0; + Protocol.opcode2 = -1; + MiniMap.state = 0; + Player.rebootTimer = 0; + Protocol.opcode4 = -1; + Protocol.inboundBuffer.offset = 0; + anInt1862 = 0; + Protocol.opcode = -1; + @Pc(35) int i; + for (i = 0; i < PlayerList.players.length; i++) { + if (PlayerList.players[i] != null) { + PlayerList.players[i].faceEntity = -1; + } + } + for (i = 0; i < NpcList.npcs.length; i++) { + if (NpcList.npcs[i] != null) { + NpcList.npcs[i].faceEntity = -1; + } + } + Inv.clear(); + Camera.cameraType = 1; + client.setGameState(30); + for (i = 0; i < 100; i++) { + InterfaceList.aBooleanArray100[i] = true; + } + ClientProt.sendWindowDetails(); + } + + @OriginalMember(owner = "client!ca", name = "a", descriptor = "(ZI)V") + public static void method743(@OriginalArg(0) boolean arg0) { + @Pc(13) int local13 = mapFilesBuffer.length; + @Pc(19) byte[][] local19; + if (GlRenderer.enabled && arg0) { + local19 = underWaterLocationsMapFilesBuffer; + } else { + local19 = locationMapFilesBuffer; + } + for (@Pc(25) int local25 = 0; local25 < local13; local25++) { + @Pc(32) byte[] local32 = local19[local25]; + if (local32 != null) { + @Pc(45) int local45 = (regionBitPacked[local25] >> 8) * 64 - Camera.originX; + @Pc(56) int local56 = (regionBitPacked[local25] & 0xFF) * 64 - Camera.originZ; + client.audioLoop(); + SceneGraph.readLocs(local45, arg0, local32, local56, PathFinder.collisionMaps); + } + } + } + + @OriginalMember(owner = "client!gd", name = "c", descriptor = "(I)V") + public static void rebuildMap() { + ClientProt.ping(false); + mapFilesMissingCount = 0; + @Pc(12) boolean fileExists = true; + @Pc(14) int id; + for (id = 0; id < mapFilesBuffer.length; id++) { + if (mapFileIds[id] != -1 && mapFilesBuffer[id] == null) { + mapFilesBuffer[id] = client.js5Archive5.fetchFile(mapFileIds[id], 0); + if (mapFilesBuffer[id] == null) { + mapFilesMissingCount++; + fileExists = false; + } + } + if (locationsMapFileIds[id] != -1 && locationMapFilesBuffer[id] == null) { + locationMapFilesBuffer[id] = client.js5Archive5.fetchFile(locationsMapFileIds[id], regionsXteaKeys[id], 0); + if (locationMapFilesBuffer[id] == null) { + fileExists = false; + mapFilesMissingCount++; + } + } + + if (GlRenderer.enabled) { + if (underWaterMapFileIds[id] != -1 && underWaterMapFilesBuffer[id] == null) { + underWaterMapFilesBuffer[id] = client.js5Archive5.fetchFile(underWaterMapFileIds[id], 0); + if (underWaterMapFilesBuffer[id] == null) { + fileExists = false; + mapFilesMissingCount++; + } + } + if (underWaterLocationsMapFileIds[id] != -1 && underWaterLocationsMapFilesBuffer[id] == null) { + underWaterLocationsMapFilesBuffer[id] = client.js5Archive5.fetchFile(underWaterLocationsMapFileIds[id], 0); + if (underWaterLocationsMapFilesBuffer[id] == null) { + mapFilesMissingCount++; + fileExists = false; + } + } + } + + if (npcSpawnsFileIds != null && npcSpawnsFilesBuffer[id] == null && npcSpawnsFileIds[id] != -1) { + npcSpawnsFilesBuffer[id] = client.js5Archive5.fetchFile(npcSpawnsFileIds[id], regionsXteaKeys[id], 0); + if (npcSpawnsFilesBuffer[id] == null) { + mapFilesMissingCount++; + fileExists = false; + } + } + } + + if (mapElementList == null) { + if (map == null || !client.js5Archive23.isGroupNameValid(JagString.concatenate(new JagString[]{map.group, aClass100_363}))) { + mapElementList = new MapElementList(0); + } else if (client.js5Archive23.isGroupReady(JagString.concatenate(new JagString[]{map.group, aClass100_363}))) { + mapElementList = MapElementList.create(JagString.concatenate(new JagString[]{map.group, aClass100_363}), client.js5Archive23); + } else { + fileExists = false; + mapFilesMissingCount++; + } + } + + if (!fileExists) { + loadingScreenState = 1; + return; + } + + anInt5804 = 0; + fileExists = true; + @Pc(320) int chunkX; + @Pc(309) int chunkZ; + for (id = 0; id < mapFilesBuffer.length; id++) { + @Pc(294) byte[] local294 = locationMapFilesBuffer[id]; + if (local294 != null) { + chunkZ = (regionBitPacked[id] & 0xFF) * 64 - Camera.originZ; + chunkX = (regionBitPacked[id] >> 8) * 64 - Camera.originX; + if (SceneGraph.dynamicMapRegion) { + chunkZ = 10; + chunkX = 10; + } + fileExists &= method1201(chunkX, chunkZ, local294); + } + if (GlRenderer.enabled) { + local294 = underWaterLocationsMapFilesBuffer[id]; + if (local294 != null) { + chunkX = (regionBitPacked[id] >> 8) * 64 - Camera.originX; + chunkZ = (regionBitPacked[id] & 0xFF) * 64 - Camera.originZ; + if (SceneGraph.dynamicMapRegion) { + chunkZ = 10; + chunkX = 10; + } + fileExists &= method1201(chunkX, chunkZ, local294); + } + } + } + if (!fileExists) { + loadingScreenState = 2; + return; + } + + if (loadingScreenState != 0) { + Fonts.drawTextOnScreen(true, JagString.concatenate(new JagString[]{LocalizedText.LOADING, COMPLETE_PERCENT})); + } + + client.audioLoop(); + client.unload(); + @Pc(420) boolean hasUnderWaterMap = false; + @Pc(427) int i; + if (GlRenderer.enabled && Preferences.highWaterDetail) { + for (i = 0; i < mapFilesBuffer.length; i++) { + if (underWaterLocationsMapFilesBuffer[i] != null || underWaterMapFilesBuffer[i] != null) { + hasUnderWaterMap = true; + break; + } + } + } + SceneGraph.init(GlRenderer.enabled ? GlobalConfig.TILE_DISTANCE : 25, hasUnderWaterMap); + for (i = 0; i < 4; i++) { + PathFinder.collisionMaps[i].clear(); + } + for (i = 0; i < 4; i++) { + for (chunkX = 0; chunkX < 104; chunkX++) { + for (chunkZ = 0; chunkZ < 104; chunkZ++) { + SceneGraph.renderFlags[i][chunkX][chunkZ] = 0; + } + } + } + AreaSoundManager.clear(false); + if (GlRenderer.enabled) { + ShadowManager.shadowMapImage.clear(); + for (i = 0; i < 13; i++) { + for (chunkX = 0; chunkX < 13; chunkX++) { + ShadowManager.shadows[i][chunkX].outputToSprite = true; + } + } + } + if (GlRenderer.enabled) { + LightingManager.method2404(); + } + if (GlRenderer.enabled) { + FogManager.setDefaultChunksAtmosphere(); + } + client.audioLoop(); + System.gc(); + ClientProt.ping(true); + SceneGraph.load(false); + if (!SceneGraph.dynamicMapRegion) { + method1805(false); + ClientProt.ping(true); + if (GlRenderer.enabled) { + i = PlayerList.self.movementQueueX[0] >> 3; + chunkX = PlayerList.self.movementQueueZ[0] >> 3; + FogManager.setLightPosition(chunkX, i); + } + method743(false); + if (npcSpawnsFilesBuffer != null) { + decodeNpcFiles(); + } + } + if (SceneGraph.dynamicMapRegion) { + method1835(false); + ClientProt.ping(true); + if (GlRenderer.enabled) { + i = PlayerList.self.movementQueueX[0] >> 3; + chunkX = PlayerList.self.movementQueueZ[0] >> 3; + FogManager.setLightPosition(chunkX, i); + } + method4002(false); + } + client.unload(); + ClientProt.ping(true); + SceneGraph.method1169(PathFinder.collisionMaps, false); + if (GlRenderer.enabled) { + LightingManager.method2395(); + } + ClientProt.ping(true); + i = SceneGraph.firstVisibleLevel; + if (i > Player.plane) { + i = Player.plane; + } + if (i < Player.plane - 1) { + } + if (SceneGraph.allLevelsAreVisible()) { + SceneGraph.method2750(0); + } else { + SceneGraph.method2750(SceneGraph.firstVisibleLevel); + } + SceneGraph.unload(); + if (GlRenderer.enabled && hasUnderWaterMap) { + SceneGraph.setUnderwater(true); + SceneGraph.load(true); + if (!SceneGraph.dynamicMapRegion) { + method1805(true); + ClientProt.ping(true); + method743(true); + } + if (SceneGraph.dynamicMapRegion) { + method1835(true); + ClientProt.ping(true); + method4002(true); + } + client.unload(); + ClientProt.ping(true); + SceneGraph.method1169(PathFinder.collisionMaps, true); + ClientProt.ping(true); + SceneGraph.unload(); + SceneGraph.setUnderwater(false); + } + if (GlRenderer.enabled) { + for (chunkX = 0; chunkX < 13; chunkX++) { + for (chunkZ = 0; chunkZ < 13; chunkZ++) { + ShadowManager.shadows[chunkX][chunkZ].method4676(SceneGraph.tileHeights[0], chunkX * 8, chunkZ * 8); + } + } + } + for (chunkX = 0; chunkX < 104; chunkX++) { + for (chunkZ = 0; chunkZ < 104; chunkZ++) { + Protocol.spawnGroundObject(chunkZ, chunkX); + } + } + ScriptRunner.method2218(); + client.audioLoop(); + ChangeLocRequest.flush(); + client.unload(); + aBoolean252 = false; + if (GameShell.frame != null && Protocol.socket != null && client.gameState == 25) { + Protocol.outboundBuffer.p1isaac(20); + Protocol.outboundBuffer.p4(1057001181); + } + if (!SceneGraph.dynamicMapRegion) { + @Pc(815) int local815 = (SceneGraph.centralZoneZ + 6) / 8; + @Pc(821) int local821 = (SceneGraph.centralZoneZ - 6) / 8; + chunkX = (SceneGraph.centralZoneX - 6) / 8; + chunkZ = (SceneGraph.centralZoneX + 6) / 8; + for (@Pc(837) int local837 = chunkX - 1; local837 <= chunkZ + 1; local837++) { + for (@Pc(850) int local850 = local821 - 1; local850 <= local815 + 1; local850++) { + if (local837 < chunkX || local837 > chunkZ || local850 < local821 || local850 > local815) { + client.js5Archive5.prefetchGroup(JagString.concatenate(new JagString[]{aClass100_558, JagString.parseInt(local837), UNDERSCORE, JagString.parseInt(local850)})); + client.js5Archive5.prefetchGroup(JagString.concatenate(new JagString[]{aClass100_1090, JagString.parseInt(local837), UNDERSCORE, JagString.parseInt(local850)})); + } + } + } + } + if (client.gameState == 28) { + client.setGameState(10); + } else { + client.setGameState(30); + if (Protocol.socket != null) { + Protocol.outboundBuffer.p1isaac(110); + } + } + WorldMap.method2720(); + client.audioLoop(); + GameShell.resetTimer(); + } + + @OriginalMember(owner = "client!dm", name = "a", descriptor = "(BII[B)Z") + public static boolean method1201(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) byte[] arg2) { + @Pc(15) boolean local15 = true; + @Pc(17) int local17 = -1; + @Pc(22) Buffer local22 = new Buffer(arg2); + label70: + while (true) { + @Pc(26) int local26 = local22.gVarSmart(); + if (local26 == 0) { + return local15; + } + @Pc(33) int local33 = 0; + local17 += local26; + @Pc(39) boolean local39 = false; + while (true) { + @Pc(78) int local78; + @Pc(95) LocType local95; + do { + @Pc(72) int local72; + @Pc(68) int local68; + do { + do { + do { + do { + @Pc(45) int local45; + while (local39) { + local45 = local22.gsmarts(); + if (local45 == 0) { + continue label70; + } + local22.g1(); + } + local45 = local22.gsmarts(); + if (local45 == 0) { + continue label70; + } + local33 += local45 - 1; + @Pc(58) int local58 = local33 & 0x3F; + @Pc(64) int local64 = local33 >> 6 & 0x3F; + local68 = arg1 + local58; + local72 = arg0 + local64; + local78 = local22.g1() >> 2; + } while (local72 <= 0); + } while (local68 <= 0); + } while (local72 >= 103); + } while (local68 >= 103); + local95 = LocTypeList.get(local17); + } while (local78 == 22 && !Preferences.showGroundDecorations && local95.interactable == 0 && local95.blockwalk != 1 && !local95.forcedecor); + local39 = true; + if (!local95.isReady()) { + local15 = false; + anInt5804++; + } + } + } + } + + @OriginalMember(owner = "client!t", name = "a", descriptor = "(ZB)V") + public static void method4002(@OriginalArg(0) boolean arg0) { + @Pc(19) byte local19; + @Pc(21) byte[][] local21; + if (GlRenderer.enabled && arg0) { + local21 = underWaterLocationsMapFilesBuffer; + local19 = 1; + } else { + local19 = 4; + local21 = locationMapFilesBuffer; + } + for (@Pc(29) int local29 = 0; local29 < local19; local29++) { + client.audioLoop(); + for (@Pc(36) int local36 = 0; local36 < 13; local36++) { + for (@Pc(43) int local43 = 0; local43 < 13; local43++) { + @Pc(56) int local56 = Protocol.anIntArrayArrayArray18[local29][local36][local43]; + if (local56 != -1) { + @Pc(67) int local67 = local56 >> 24 & 0x3; + if (!arg0 || local67 == 0) { + @Pc(77) int local77 = local56 >> 1 & 0x3; + @Pc(83) int local83 = local56 >> 14 & 0x3FF; + @Pc(89) int local89 = local56 >> 3 & 0x7FF; + @Pc(99) int local99 = local89 / 8 + (local83 / 8 << 8); + for (@Pc(101) int local101 = 0; local101 < regionBitPacked.length; local101++) { + if (regionBitPacked[local101] == local99 && local21[local101] != null) { + method3771(PathFinder.collisionMaps, local29, local21[local101], local67, local77, local36 * 8, local43 * 8, arg0, (local83 & 0x7) * 8, (local89 & 0x7) * 8); + break; + } + } + } + } + } + } + } + } + + @OriginalMember(owner = "client!rj", name = "a", descriptor = "([Lclient!mj;I[BIIIIZIIB)V") + public static void method3771(@OriginalArg(0) CollisionMap[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) byte[] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) boolean arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9) { + @Pc(7) int local7 = -1; + @Pc(12) Buffer local12 = new Buffer(arg2); + while (true) { + @Pc(20) int local20 = local12.gVarSmart(); + if (local20 == 0) { + return; + } + local7 += local20; + @Pc(31) int local31 = 0; + while (true) { + @Pc(35) int local35 = local12.gsmarts(); + if (local35 == 0) { + break; + } + local31 += local35 - 1; + @Pc(50) int local50 = local31 & 0x3F; + @Pc(56) int local56 = local31 >> 6 & 0x3F; + @Pc(60) int local60 = local31 >> 12; + @Pc(64) int local64 = local12.g1(); + @Pc(68) int local68 = local64 >> 2; + @Pc(72) int local72 = local64 & 0x3; + if (arg3 == local60 && local56 >= arg8 && local56 < arg8 + 8 && arg9 <= local50 && arg9 + 8 > local50) { + @Pc(103) LocType local103 = LocTypeList.get(local7); + @Pc(120) int local120 = method1286(local50 & 0x7, arg4, local72, local103.length, local103.width, local56 & 0x7) + arg5; + @Pc(137) int local137 = method4541(local103.width, arg4, local103.length, local56 & 0x7, local72, local50 & 0x7) + arg6; + if (local120 > 0 && local137 > 0 && local120 < 103 && local137 < 103) { + @Pc(154) CollisionMap local154 = null; + if (!arg7) { + @Pc(159) int local159 = arg1; + if ((SceneGraph.renderFlags[1][local120][local137] & 0x2) == 2) { + local159 = arg1 - 1; + } + if (local159 >= 0) { + local154 = arg0[local159]; + } + } + SceneGraph.addLoc(arg1, !arg7, arg1, arg7, local154, local7, local68, local120, local137, local72 + arg4 & 0x3); + } + } + } + } + } + + @OriginalMember(owner = "client!eb", name = "a", descriptor = "(IIIIIII)I") + public static int method1286(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(6) int arg5) { + if ((arg2 & 0x1) == 1) { + @Pc(10) int local10 = arg4; + arg4 = arg3; + arg3 = local10; + } + @Pc(18) int local18 = arg1 & 0x3; + if (local18 == 0) { + return arg5; + } else if (local18 == 1) { + return arg0; + } else if (local18 == 2) { + return 7 + 1 - arg5 - arg4; + } else { + return 7 + 1 - arg0 - arg3; + } + } + + @OriginalMember(owner = "client!th", name = "a", descriptor = "(IIBIIII)I") + public static int method4541(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5) { + if ((arg4 & 0x1) == 1) { + @Pc(9) int local9 = arg0; + arg0 = arg2; + arg2 = local9; + } + @Pc(29) int local29 = arg1 & 0x3; + if (local29 == 0) { + return arg5; + } else if (local29 == 1) { + return 7 + 1 - arg3 - arg0; + } else if (local29 == 2) { + return 1 + 7 - arg2 - arg5; + } else { + return arg3; + } + } + + @OriginalMember(owner = "client!mh", name = "h", descriptor = "(B)V") + public static void decodeNpcFiles() { + @Pc(10) int local10 = npcSpawnsFilesBuffer.length; + for (@Pc(16) int local16 = 0; local16 < local10; local16++) { + if (npcSpawnsFilesBuffer[local16] != null) { + @Pc(25) int local25 = -1; + for (@Pc(27) int local27 = 0; local27 < anInt3811; local27++) { + if (anIntArray434[local27] == regionBitPacked[local16]) { + local25 = local27; + break; + } + } + if (local25 == -1) { + anIntArray434[anInt3811] = regionBitPacked[local16]; + local25 = anInt3811++; + } + @Pc(67) int local67 = 0; + @Pc(74) Buffer local74 = new Buffer(npcSpawnsFilesBuffer[local16]); + while (local74.offset < npcSpawnsFilesBuffer[local16].length && local67 < 511) { + @Pc(97) int local97 = local67++ << 6 | local25; + @Pc(103) int local103 = local74.g2(); + @Pc(107) int local107 = local103 >> 14; + @Pc(113) int local113 = local103 >> 7 & 0x3F; + @Pc(125) int local125 = local113 + (regionBitPacked[local16] >> 8) * 64 - Camera.originX; + @Pc(129) int local129 = local103 & 0x3F; + @Pc(142) int local142 = local129 + (regionBitPacked[local16] & 0xFF) * 64 - Camera.originZ; + @Pc(148) NpcType local148 = NpcTypeList.get(local74.g2()); + if (NpcList.npcs[local97] == null && (local148.loginscreenproperties & 0x1) > 0 && local107 == SceneGraph.centralPlane && local125 >= 0 && local148.size + local125 < 104 && local142 >= 0 && local142 + local148.size < 104) { + NpcList.npcs[local97] = new Npc(); + @Pc(198) Npc local198 = NpcList.npcs[local97]; + NpcList.ids[NpcList.size++] = local97; + local198.lastSeenLoop = client.loop; + local198.setNpcType(local148); + local198.setSize(local198.type.size); + local198.anInt3400 = local198.anInt3381 = PathingEntity.ANGLES[local198.type.spawndirection]; + local198.anInt3376 = local198.type.rotationspeed; + if (local198.anInt3376 == 0) { + local198.anInt3381 = 0; + } + local198.anInt3365 = local198.type.bastypeid; + local198.method2683(local198.getSize(), local125, local142, true); + } + } + } + } + } + + @OriginalMember(owner = "client!ha", name = "a", descriptor = "(ZB)V") + public static void method1835(@OriginalArg(0) boolean arg0) { + @Pc(11) byte local11; + @Pc(13) byte[][] local13; + if (GlRenderer.enabled && arg0) { + local11 = 1; + local13 = underWaterMapFilesBuffer; + } else { + local13 = mapFilesBuffer; + local11 = 4; + } + for (@Pc(21) int local21 = 0; local21 < local11; local21++) { + client.audioLoop(); + for (@Pc(32) int local32 = 0; local32 < 13; local32++) { + for (@Pc(39) int local39 = 0; local39 < 13; local39++) { + @Pc(52) int local52 = Protocol.anIntArrayArrayArray18[local21][local32][local39]; + @Pc(54) boolean local54 = false; + if (local52 != -1) { + @Pc(65) int local65 = local52 >> 24 & 0x3; + if (!arg0 || local65 == 0) { + @Pc(76) int local76 = local52 >> 3 & 0x7FF; + @Pc(82) int local82 = local52 >> 1 & 0x3; + @Pc(88) int local88 = local52 >> 14 & 0x3FF; + @Pc(98) int local98 = (local88 / 8 << 8) + local76 / 8; + for (@Pc(100) int local100 = 0; local100 < regionBitPacked.length; local100++) { + if (regionBitPacked[local100] == local98 && local13[local100] != null) { + SceneGraph.method4228(local82, local32 * 8, local21, PathFinder.collisionMaps, local39 * 8, local13[local100], local65, (local76 & 0x7) * 8, (local88 & 0x7) * 8, arg0); + local54 = true; + break; + } + } + } + } + if (!local54) { + SceneGraph.method645(local21, local39 * 8, local32 * 8, 8, 8); + } + } + } + } + } + + @OriginalMember(owner = "client!ha", name = "a", descriptor = "(I)V") + public static void method1841() { + if (!Cs1ScriptRunner.aBoolean108) { + if (MiniMenu.anInt3953 != 0) { + ScriptRunner.anInt3751 = Mouse.anInt5850; + ScriptRunner.anInt1892 = Mouse.anInt5895; + } else if (Mouse.clickButton == 0) { + ScriptRunner.anInt3751 = Mouse.lastMouseX; + ScriptRunner.anInt1892 = Mouse.lastMouseY; + } else { + ScriptRunner.anInt3751 = Mouse.clickX; + ScriptRunner.anInt1892 = Mouse.clickY; + } + MiniMenu.size = 1; + MiniMenu.ops[0] = LocalizedText.CANCEL; + MiniMenu.opBases[0] = JagString.EMPTY; + MiniMenu.actions[0] = 1005; + MiniMenu.cursors[0] = MiniMenu.anInt1092; + } + if (InterfaceList.topLevelInterface != -1) { + InterfaceList.method1949(InterfaceList.topLevelInterface); + } + @Pc(60) int local60; + for (local60 = 0; local60 < InterfaceList.rectangles; local60++) { + if (InterfaceList.aBooleanArray100[local60]) { + InterfaceList.rectangleRedraw[local60] = true; + } + InterfaceList.aBooleanArray116[local60] = InterfaceList.aBooleanArray100[local60]; + InterfaceList.aBooleanArray100[local60] = false; + } + aClass13_13 = null; + Cs1ScriptRunner.anInt2503 = -1; + InterfaceList.anInt5574 = -1; + InterfaceList.mouseOverInventoryInterface = null; + if (GlRenderer.enabled) { + ScriptRunner.aBoolean299 = true; + } + InterfaceList.anInt4311 = client.loop; + if (InterfaceList.topLevelInterface != -1) { + InterfaceList.rectangles = 0; + Cs1ScriptRunner.method182(); + } + if (GlRenderer.enabled) { + GlRaster.method1177(); + } else { + SoftwareRaster.method2503(); + } + if (!Cs1ScriptRunner.aBoolean108) { + PluginRepository.OnMiniMenuCreate(); + } + MiniMenu.sort(); + if (Cs1ScriptRunner.aBoolean108) { + if (InterfaceList.aBoolean298) { + MiniMenu.drawB(); + } else { + MiniMenu.drawA(); + } + } else if (aClass13_13 != null) { + MiniMenu.method1207(aClass13_13, Cs1ScriptRunner.anInt3484, Cs1ScriptRunner.anInt3260); + } else if (Cs1ScriptRunner.anInt2503 != -1) { + MiniMenu.method1207(null, InterfaceList.anInt5574, Cs1ScriptRunner.anInt2503); + } + local60 = Cs1ScriptRunner.aBoolean108 ? -1 : method4044(); + if (local60 == -1) { + local60 = ScriptRunner.anInt5794; + } + InterfaceList.method1750(local60); + if (MiniMenu.anInt3096 == 1) { + MiniMenu.anInt3096 = 2; + } + if (Protocol.anInt4422 == 1) { + Protocol.anInt4422 = 2; + } + if (Cheat.rectDebug == 3) { + for (@Pc(189) int local189 = 0; local189 < InterfaceList.rectangles; local189++) { + if (InterfaceList.aBooleanArray116[local189]) { + if (GlRenderer.enabled) { + GlRaster.fillRectAlpha(InterfaceList.rectangleX[local189], InterfaceList.rectangleY[local189], InterfaceList.rectangleWidth[local189], InterfaceList.rectangleHeight[local189], 16711935, 128); + } else { + SoftwareRaster.fillRectAlpha(InterfaceList.rectangleX[local189], InterfaceList.rectangleY[local189], InterfaceList.rectangleWidth[local189], InterfaceList.rectangleHeight[local189], 16711935, 128); + } + } else if (InterfaceList.rectangleRedraw[local189]) { + if (GlRenderer.enabled) { + GlRaster.fillRectAlpha(InterfaceList.rectangleX[local189], InterfaceList.rectangleY[local189], InterfaceList.rectangleWidth[local189], InterfaceList.rectangleHeight[local189], 16711680, 128); + } else { + SoftwareRaster.fillRectAlpha(InterfaceList.rectangleX[local189], InterfaceList.rectangleY[local189], InterfaceList.rectangleWidth[local189], InterfaceList.rectangleHeight[local189], 16711680, 128); + } + } + } + } + AreaSoundManager.redraw(Protocol.sceneDelta, PlayerList.self.xFine, PlayerList.self.zFine, Player.plane); + Protocol.sceneDelta = 0; + } + + @OriginalMember(owner = "client!tb", name = "h", descriptor = "(I)I") + public static int method4044() { + return Cheat.shiftClick && Keyboard.pressedKeys[Keyboard.KEY_SHIFT] && MiniMenu.size > 2 ? MiniMenu.cursors[MiniMenu.size - 2] : MiniMenu.cursors[MiniMenu.size - 1]; + } + + @OriginalMember(owner = "client!gn", name = "a", descriptor = "(ZI)V") + public static void method1805(@OriginalArg(0) boolean arg0) { + @Pc(7) byte local7; + @Pc(9) byte[][] local9; + if (GlRenderer.enabled && arg0) { + local7 = 1; + local9 = underWaterMapFilesBuffer; + } else { + local7 = 4; + local9 = mapFilesBuffer; + } + @Pc(18) int local18 = local9.length; + @Pc(20) int local20; + @Pc(38) int local38; + @Pc(49) int local49; + @Pc(53) byte[] local53; + for (local20 = 0; local20 < local18; local20++) { + local38 = (regionBitPacked[local20] >> 8) * 64 - Camera.originX; + local49 = (regionBitPacked[local20] & 0xFF) * 64 - Camera.originZ; + local53 = local9[local20]; + if (local53 != null) { + client.audioLoop(); + SceneGraph.method2203(PathFinder.collisionMaps, arg0, SceneGraph.centralZoneX * 8 - 48, local49, local38, (SceneGraph.centralZoneZ - 6) * 8, local53); + } + } + for (local20 = 0; local20 < local18; local20++) { + local38 = (regionBitPacked[local20] >> 8) * 64 - Camera.originX; + local49 = (regionBitPacked[local20] & 0xFF) * 64 - Camera.originZ; + local53 = local9[local20]; + if (local53 == null && SceneGraph.centralZoneZ < 800) { + client.audioLoop(); + for (@Pc(130) int local130 = 0; local130 < local7; local130++) { + SceneGraph.method645(local130, local49, local38, 64, 64); + } + } + } + } + + @OriginalMember(owner = "client!j", name = "g", descriptor = "(I)V") + public static void method4637() { + aClass3_Sub2_Sub1_8 = null; + aClass3_Sub2_Sub1_1 = null; + aClass3_Sub2_Sub1_6 = null; + aClass3_Sub2_Sub1_9 = null; + aClass3_Sub2_Sub1_10 = null; + } +} diff --git a/client/src/main/java/rt4/LongNode.java b/client/src/main/java/rt4/LongNode.java new file mode 100644 index 0000000..e2035e1 --- /dev/null +++ b/client/src/main/java/rt4/LongNode.java @@ -0,0 +1,17 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!eb") +public final class LongNode extends Node { + + @OriginalMember(owner = "client!eb", name = "v", descriptor = "J") + public long value; + + @OriginalMember(owner = "client!eb", name = "", descriptor = "(J)V") + public LongNode(@OriginalArg(0) long arg0) { + this.value = arg0; + } +} diff --git a/client/src/main/java/rt4/LruHashTable.java b/client/src/main/java/rt4/LruHashTable.java new file mode 100644 index 0000000..3883bc6 --- /dev/null +++ b/client/src/main/java/rt4/LruHashTable.java @@ -0,0 +1,81 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!gn") +public final class LruHashTable { + + @OriginalMember(owner = "client!gn", name = "l", descriptor = "Lclient!rg;") + private SecondaryNode aClass3_Sub2_37 = new SecondaryNode(); + + @OriginalMember(owner = "client!gn", name = "s", descriptor = "Lclient!ce;") + private final SecondaryLinkedList queue = new SecondaryLinkedList(); + + @OriginalMember(owner = "client!gn", name = "u", descriptor = "I") + private int available; + + @OriginalMember(owner = "client!gn", name = "r", descriptor = "I") + private final int capacity; + + @OriginalMember(owner = "client!gn", name = "q", descriptor = "Lclient!sc;") + private final HashTable table; + + @OriginalMember(owner = "client!gn", name = "", descriptor = "(I)V") + public LruHashTable(@OriginalArg(0) int arg0) { + @Pc(13) int local13 = 1; + this.available = arg0; + while (arg0 > local13 + local13) { + local13 += local13; + } + this.capacity = arg0; + this.table = new HashTable(local13); + } + + @OriginalMember(owner = "client!gn", name = "a", descriptor = "(JI)Lclient!rg;") + public final SecondaryNode get(@OriginalArg(0) long arg0) { + @Pc(16) SecondaryNode local16 = (SecondaryNode) this.table.get(arg0); + if (local16 != null) { + this.queue.addTail(local16); + } + return local16; + } + + @OriginalMember(owner = "client!gn", name = "a", descriptor = "(I)Lclient!ab;") + public final Node method1808() { + return this.table.head(); + } + + @OriginalMember(owner = "client!gn", name = "a", descriptor = "(Lclient!rg;JB)V") + public final void put(@OriginalArg(0) SecondaryNode arg0, @OriginalArg(1) long arg1) { + if (this.available == 0) { + @Pc(14) SecondaryNode local14 = this.queue.removeHead(); + local14.unlink(); + local14.unlinkSecondary(); + if (this.aClass3_Sub2_37 == local14) { + local14 = this.queue.removeHead(); + local14.unlink(); + local14.unlinkSecondary(); + } + } else { + this.available--; + } + this.table.put(arg0, arg1); + this.queue.addTail(arg0); + } + + @OriginalMember(owner = "client!gn", name = "b", descriptor = "(I)Lclient!ab;") + public final Node next() { + return this.table.next(); + } + + @OriginalMember(owner = "client!gn", name = "c", descriptor = "(I)V") + public final void clear() { + this.queue.clear(); + this.table.clear(); + this.aClass3_Sub2_37 = new SecondaryNode(); + this.available = this.capacity; + } +} diff --git a/client/src/main/java/rt4/Map.java b/client/src/main/java/rt4/Map.java new file mode 100644 index 0000000..e360740 --- /dev/null +++ b/client/src/main/java/rt4/Map.java @@ -0,0 +1,107 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!bn") +public final class Map extends SecondaryNode { + + @OriginalMember(owner = "client!bn", name = "K", descriptor = "I") + public int displayMinZ = 0; + + @OriginalMember(owner = "client!bn", name = "L", descriptor = "I") + public int backgroundColor = -1; + + @OriginalMember(owner = "client!bn", name = "S", descriptor = "I") + public int displayMinX = 12800; + + @OriginalMember(owner = "client!bn", name = "Z", descriptor = "I") + public int displayMaxZ = 0; + + @OriginalMember(owner = "client!bn", name = "cb", descriptor = "I") + public int displayMaxX = 12800; + + @OriginalMember(owner = "client!bn", name = "P", descriptor = "Z") + public boolean valid = true; + + @OriginalMember(owner = "client!bn", name = "db", descriptor = "I") + public int defaultZoom = -1; + + @OriginalMember(owner = "client!bn", name = "T", descriptor = "I") + public final int originZ; + + @OriginalMember(owner = "client!bn", name = "bb", descriptor = "Lclient!na;") + public final JagString group; + + @OriginalMember(owner = "client!bn", name = "Q", descriptor = "Lclient!na;") + public final JagString name; + + @OriginalMember(owner = "client!bn", name = "Y", descriptor = "I") + public final int originX; + + @OriginalMember(owner = "client!bn", name = "ab", descriptor = "Lclient!ih;") + public final LinkedList chunks; + + @OriginalMember(owner = "client!bn", name = "", descriptor = "(Lclient!na;Lclient!na;IIIZI)V") + public Map(@OriginalArg(0) JagString arg0, @OriginalArg(1) JagString arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) boolean arg5, @OriginalArg(6) int arg6) { + this.originZ = arg3; + this.backgroundColor = arg4; + this.valid = arg5; + this.group = arg0; + this.name = arg1; + this.defaultZoom = arg6; + this.originX = arg2; + if (this.defaultZoom == 255) { + this.defaultZoom = 0; + } + this.chunks = new LinkedList(); + } + + @OriginalMember(owner = "client!rb", name = "a", descriptor = "(Lclient!wa;Z)Lclient!bn;") + public static Map create(@OriginalArg(0) Buffer buffer) { + @Pc(35) Map map = new Map(buffer.gjstr(), buffer.gjstr(), buffer.g2(), buffer.g2(), buffer.g4(), buffer.g1() == 1, buffer.g1()); + @Pc(39) int len = buffer.g1(); + for (@Pc(41) int i = 0; i < len; i++) { + map.chunks.addTail(new MapChunk(buffer.g2(), buffer.g2(), buffer.g2(), buffer.g2())); + } + map.computeBounds(); + return map; + } + + @OriginalMember(owner = "client!bn", name = "a", descriptor = "(IBI)Z") + public final boolean method664(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + if (this.displayMinX > arg1 || arg1 > this.displayMaxZ || arg0 < this.displayMaxX || arg0 > this.displayMinZ) { + return false; + } + for (@Pc(33) MapChunk chunk = (MapChunk) this.chunks.head(); chunk != null; chunk = (MapChunk) this.chunks.next()) { + if (chunk.containsDisplay(arg0, arg1)) { + return true; + } + } + return false; + } + + @OriginalMember(owner = "client!bn", name = "f", descriptor = "(B)V") + public final void computeBounds() { + this.displayMaxX = 12800; + this.displayMaxZ = 0; + this.displayMinZ = 0; + this.displayMinX = 12800; + for (@Pc(29) MapChunk local29 = (MapChunk) this.chunks.head(); local29 != null; local29 = (MapChunk) this.chunks.next()) { + if (local29.displayMaxX < this.displayMaxX) { + this.displayMaxX = local29.displayMaxX; + } + if (local29.displayMinX < this.displayMinX) { + this.displayMinX = local29.displayMinX; + } + if (local29.displayMaxZ > this.displayMaxZ) { + this.displayMaxZ = local29.displayMaxZ; + } + if (this.displayMinZ < local29.displayMinZ) { + this.displayMinZ = local29.displayMinZ; + } + } + } +} diff --git a/client/src/main/java/rt4/MapChunk.java b/client/src/main/java/rt4/MapChunk.java new file mode 100644 index 0000000..b8d3c09 --- /dev/null +++ b/client/src/main/java/rt4/MapChunk.java @@ -0,0 +1,34 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!lh") +public final class MapChunk extends Node { + + @OriginalMember(owner = "client!lh", name = "y", descriptor = "I") + public final int displayMinZ; + + @OriginalMember(owner = "client!lh", name = "v", descriptor = "I") + public final int displayMaxX; + + @OriginalMember(owner = "client!lh", name = "w", descriptor = "I") + public final int displayMaxZ; + + @OriginalMember(owner = "client!lh", name = "t", descriptor = "I") + public final int displayMinX; + + @OriginalMember(owner = "client!lh", name = "", descriptor = "(IIII)V") + public MapChunk(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + this.displayMinZ = arg3; + this.displayMaxX = arg1; + this.displayMaxZ = arg2; + this.displayMinX = arg0; + } + + @OriginalMember(owner = "client!lh", name = "a", descriptor = "(BII)Z") + public final boolean containsDisplay(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + return arg1 >= this.displayMinX && this.displayMaxZ >= arg1 && this.displayMaxX <= arg0 && arg0 <= this.displayMinZ; + } +} diff --git a/client/src/main/java/rt4/MapElement.java b/client/src/main/java/rt4/MapElement.java new file mode 100644 index 0000000..ca788b4 --- /dev/null +++ b/client/src/main/java/rt4/MapElement.java @@ -0,0 +1,17 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!oj") +public final class MapElement extends Node { + + @OriginalMember(owner = "client!oj", name = "q", descriptor = "I") + public int anInt4307; + + @OriginalMember(owner = "client!oj", name = "r", descriptor = "I") + public int id; + + @OriginalMember(owner = "client!oj", name = "A", descriptor = "I") + public int anInt4314; +} diff --git a/client/src/main/java/rt4/MapElementList.java b/client/src/main/java/rt4/MapElementList.java new file mode 100644 index 0000000..5b35f38 --- /dev/null +++ b/client/src/main/java/rt4/MapElementList.java @@ -0,0 +1,77 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!se") +public final class MapElementList { + + @OriginalMember(owner = "client!se", name = "i", descriptor = "I") + public final int anInt5074; + + @OriginalMember(owner = "client!se", name = "j", descriptor = "[Lclient!na;") + public final JagString[] aClass100Array153; + + @OriginalMember(owner = "client!se", name = "d", descriptor = "[S") + public final short[] aShortArray72; + + @OriginalMember(owner = "client!se", name = "n", descriptor = "[I") + public final int[] anIntArray444; + + @OriginalMember(owner = "client!se", name = "u", descriptor = "[B") + public final byte[] aByteArray69; + + @OriginalMember(owner = "client!se", name = "q", descriptor = "[S") + public final short[] aShortArray73; + + @OriginalMember(owner = "client!se", name = "", descriptor = "(I)V") + public MapElementList(@OriginalArg(0) int arg0) { + this.anInt5074 = arg0; + this.aClass100Array153 = new JagString[this.anInt5074]; + this.aShortArray72 = new short[this.anInt5074]; + this.anIntArray444 = new int[this.anInt5074]; + this.aByteArray69 = new byte[this.anInt5074]; + this.aShortArray73 = new short[this.anInt5074]; + } + + @OriginalMember(owner = "client!la", name = "a", descriptor = "(ILclient!na;Lclient!ve;)Lclient!se;") + public static MapElementList create(@OriginalArg(1) JagString arg0, @OriginalArg(2) Js5 arg1) { + @Pc(10) int local10 = arg1.getGroupId(arg0); + if (local10 == -1) { + return new MapElementList(0); + } + @Pc(29) int[] local29 = arg1.getFileIds(local10); + @Pc(35) MapElementList local35 = new MapElementList(local29.length); + for (@Pc(37) int local37 = 0; local37 < local35.anInt5074; local37++) { + @Pc(56) Buffer local56 = new Buffer(arg1.fetchFile(local10, local29[local37])); + local35.aClass100Array153[local37] = local56.gjstr(); + local35.aByteArray69[local37] = local56.g1b(); + local35.aShortArray73[local37] = (short) local56.g2(); + local35.aShortArray72[local37] = (short) local56.g2(); + local35.anIntArray444[local37] = local56.g4(); + } + return local35; + } + + @OriginalMember(owner = "client!se", name = "a", descriptor = "(IB)Z") + public final boolean method3890(@OriginalArg(0) int arg0) { + return (this.aByteArray69[arg0] & 0x8) != 0; + } + + @OriginalMember(owner = "client!se", name = "a", descriptor = "(II)Z") + public final boolean method3892(@OriginalArg(0) int arg0) { + return (this.aByteArray69[arg0] & 0x4) != 0; + } + + @OriginalMember(owner = "client!se", name = "b", descriptor = "(II)I") + public final int method3894(@OriginalArg(0) int arg0) { + return this.aByteArray69[arg0] & 0x3; + } + + @OriginalMember(owner = "client!se", name = "c", descriptor = "(II)Z") + public final boolean method3897(@OriginalArg(0) int arg0) { + return (this.aByteArray69[arg0] & 0x10) == 0; + } +} diff --git a/client/src/main/java/rt4/MapList.java b/client/src/main/java/rt4/MapList.java new file mode 100644 index 0000000..eb4b849 --- /dev/null +++ b/client/src/main/java/rt4/MapList.java @@ -0,0 +1,63 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class MapList { + @OriginalMember(owner = "client!sh", name = "a", descriptor = "Lclient!ih;") + public static final LinkedList aClass69_120 = new LinkedList(); + @OriginalMember(owner = "client!ed", name = "D", descriptor = "Lclient!na;") + public static final JagString aClass100_374 = JagString.parse("details"); + @OriginalMember(owner = "client!je", name = "W", descriptor = "Lclient!ve;") + public static Js5 archive; + @OriginalMember(owner = "client!th", name = "p", descriptor = "[Lclient!mm;") + public static SoftwareSprite[] sprites; + @OriginalMember(owner = "client!va", name = "G", descriptor = "[Z") + public static boolean[] aBooleanArray130; + + @OriginalMember(owner = "client!ta", name = "a", descriptor = "([Lclient!mm;ILclient!ve;)V") + public static void init(@OriginalArg(0) SoftwareSprite[] arg0, @OriginalArg(2) Js5 arg1) { + archive = arg1; + sprites = arg0; + aBooleanArray130 = new boolean[sprites.length]; + aClass69_120.clear(); + @Pc(25) int local25 = archive.getGroupId(aClass100_374); + @Pc(30) int[] local30 = archive.getFileIds(local25); + for (@Pc(32) int local32 = 0; local32 < local30.length; local32++) { + aClass69_120.addTail(Map.create(new Buffer(archive.fetchFile(local25, local30[local32])))); + } + } + + @OriginalMember(owner = "client!jk", name = "a", descriptor = "(ILclient!na;)Lclient!bn;") + public static Map get(@OriginalArg(1) JagString arg0) { + for (@Pc(15) Map local15 = (Map) aClass69_120.head(); local15 != null; local15 = (Map) aClass69_120.next()) { + if (local15.group.strEquals(arg0)) { + return local15; + } + } + return null; + } + + @OriginalMember(owner = "client!ce", name = "a", descriptor = "(IBI)Lclient!bn;") + public static Map getContainingSource(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + for (@Pc(10) Map local10 = (Map) aClass69_120.head(); local10 != null; local10 = (Map) aClass69_120.next()) { + if (local10.valid && local10.method664(arg1, arg0)) { + return local10; + } + } + return null; + } + + @OriginalMember(owner = "client!hb", name = "b", descriptor = "(II)Z") + public static boolean method1855(@OriginalArg(0) int arg0) { + return arg0 >= 0 && aBooleanArray130.length > arg0 && aBooleanArray130[arg0]; + } + + @OriginalMember(owner = "client!ui", name = "d", descriptor = "(II)V") + public static void method4332(@OriginalArg(0) int arg0) { + if (arg0 >= 0 && aBooleanArray130.length > arg0) { + aBooleanArray130[arg0] = !aBooleanArray130[arg0]; + } + } +} diff --git a/client/src/main/java/rt4/MapMarker.java b/client/src/main/java/rt4/MapMarker.java new file mode 100644 index 0000000..bfcbc01 --- /dev/null +++ b/client/src/main/java/rt4/MapMarker.java @@ -0,0 +1,35 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!nc") +public final class MapMarker { + + @OriginalMember(owner = "client!nc", name = "b", descriptor = "I") + public int anInt4045; + + @OriginalMember(owner = "client!nc", name = "c", descriptor = "I") + public int anInt4046; + + @OriginalMember(owner = "client!nc", name = "f", descriptor = "I") + public int anInt4047; + + @OriginalMember(owner = "client!nc", name = "g", descriptor = "I") + public int anInt4048; + + @OriginalMember(owner = "client!nc", name = "i", descriptor = "I") + public int anInt4050; + + @OriginalMember(owner = "client!nc", name = "l", descriptor = "I") + public int targetX; + + @OriginalMember(owner = "client!nc", name = "p", descriptor = "I") + public int actorTargetId; + + @OriginalMember(owner = "client!nc", name = "q", descriptor = "I") + public int type; + + @OriginalMember(owner = "client!nc", name = "k", descriptor = "I") + public int playerModelId = -1; +} diff --git a/client/src/main/java/rt4/MaterialManager.java b/client/src/main/java/rt4/MaterialManager.java new file mode 100644 index 0000000..877cba3 --- /dev/null +++ b/client/src/main/java/rt4/MaterialManager.java @@ -0,0 +1,233 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +public class MaterialManager { + public static final int WATER = 4; + + @OriginalMember(owner = "client!dl", name = "c", descriptor = "I") + public static int currentType = 0; + @OriginalMember(owner = "client!je", name = "R", descriptor = "Z") + public static boolean renderingUnderwater = false; + @OriginalMember(owner = "client!aa", name = "t", descriptor = "[Lclient!pc;") + public static MaterialRenderer[] renderers; + @OriginalMember(owner = "client!mh", name = "eb", descriptor = "I") + public static int currentArg = 0; + @OriginalMember(owner = "client!sj", name = "D", descriptor = "I") + public static int anInt5158; + @OriginalMember(owner = "client!ej", name = "X", descriptor = "I") + public static int anInt1815; + @OriginalMember(owner = "client!uj", name = "H", descriptor = "I") + public static int anInt5559; + @OriginalMember(owner = "client!bb", name = "M", descriptor = "I") + public static int anInt406; + @OriginalMember(owner = "client!qc", name = "cb", descriptor = "I") + public static int anInt4675; + @OriginalMember(owner = "client!lm", name = "e", descriptor = "Z") + public static boolean allows3DTextureMapping; + @OriginalMember(owner = "client!lm", name = "a", descriptor = "[I") + public static int[] waterfallTextures = null; + @OriginalMember(owner = "client!lm", name = "b", descriptor = "[I") + public static int[] anIntArray341 = null; + @OriginalMember(owner = "client!lm", name = "f", descriptor = "I") + public static int texture3D = -1; + @OriginalMember(owner = "client!lm", name = "g", descriptor = "I") + public static int waterfallTextureId = -1; + @OriginalMember(owner = "client!lm", name = "c", descriptor = "Ljava/nio/ByteBuffer;") + private static ByteBuffer aByteBuffer6; + @OriginalMember(owner = "client!lm", name = "d", descriptor = "Ljava/nio/ByteBuffer;") + private static ByteBuffer textureBuffer; + + @OriginalMember(owner = "client!cb", name = "b", descriptor = "(III)V") + public static void setMaterial(@OriginalArg(1) int arg, @OriginalArg(2) int type) { + if (type == 4 && !Preferences.highWaterDetail) { + type = 2; + arg = 2; + } + if (currentType != type) { + if (renderingUnderwater) { + return; + } + if (currentType != 0) { + renderers[currentType].unbind(); + } + if (type != 0) { + @Pc(61) MaterialRenderer renderer = renderers[type]; + renderer.bind(); + renderer.setArgument(arg); + } + currentType = type; + currentArg = arg; + } else if (type != 0 && arg != currentArg) { + renderers[type].setArgument(arg); + currentArg = arg; + } + } + + @OriginalMember(owner = "client!ka", name = "b", descriptor = "(II)V") + public static void resetArgument(@OriginalArg(1) int arg0) { + if (arg0 == currentType) { + @Pc(12) MaterialRenderer local12 = renderers[arg0]; + local12.setArgument(currentArg); + } + } + + @OriginalMember(owner = "client!ef", name = "a", descriptor = "(I)I") + public static int getFlags() { + return currentType == 0 ? 0 : renderers[currentType].getFlags(); + } + + @OriginalMember(owner = "client!nj", name = "a", descriptor = "(I)V") + public static void quit() { + renderers = null; + method2808(); + } + + @OriginalMember(owner = "client!te", name = "e", descriptor = "(I)V") + public static void init() { + method2809(); + renderers = new MaterialRenderer[7]; + renderers[1] = new SpecularMaterialRenderer(); + renderers[2] = new LiquidMaterialRenderer(); + renderers[3] = new UnderwaterMaterialRenderer(); + renderers[4] = new WaterMaterialRenderer(); + renderers[5] = new WaterfallMaterialRenderer(); + renderers[6] = new UnlitMaterialRenderer(); + } + + @OriginalMember(owner = "client!ld", name = "a", descriptor = "(IIIIZI)V") + public static void method2731(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(5) int arg4) { + anInt5158 = arg1; + anInt1815 = arg4; + anInt5559 = arg0; + anInt406 = arg3; + anInt4675 = arg2; + } + + @OriginalMember(owner = "client!lm", name = "a", descriptor = "()V") + public static void method2807() { + @Pc(11) byte[] local11; + if (textureBuffer == null) { + @Pc(5) MaterialManager_Class106_Sub1_Sub1 local5 = new MaterialManager_Class106_Sub1_Sub1(); + local11 = local5.method3215(); + textureBuffer = ByteBuffer.allocateDirect(local11.length); + textureBuffer.position(0); + textureBuffer.put(local11); + textureBuffer.flip(); + } + if (aByteBuffer6 == null) { + @Pc(32) MaterialManager_Class106_Sub2_Sub1 local32 = new MaterialManager_Class106_Sub2_Sub1(); + local11 = local32.method3854(); + aByteBuffer6 = ByteBuffer.allocateDirect(local11.length); + aByteBuffer6.position(0); + aByteBuffer6.put(local11); + aByteBuffer6.flip(); + } + } + + @OriginalMember(owner = "client!lm", name = "b", descriptor = "()V") + public static void method2808() { + @Pc(4) GL2 gl; + @Pc(11) int[] local11; + if (texture3D != -1) { + gl = GlRenderer.gl; + local11 = new int[]{texture3D}; + gl.glDeleteTextures(1, local11, 0); + texture3D = -1; + GlCleaner.onCardTexture -= textureBuffer.limit() * 2; + } + if (anIntArray341 != null) { + gl = GlRenderer.gl; + gl.glDeleteTextures(64, anIntArray341, 0); + anIntArray341 = null; + GlCleaner.onCardTexture -= textureBuffer.limit() * 2; + } + if (waterfallTextureId != -1) { + gl = GlRenderer.gl; + local11 = new int[]{waterfallTextureId}; + gl.glDeleteTextures(1, local11, 0); + waterfallTextureId = -1; + GlCleaner.onCardTexture -= aByteBuffer6.limit() * 2; + } + if (waterfallTextures != null) { + gl = GlRenderer.gl; + gl.glDeleteTextures(64, waterfallTextures, 0); + waterfallTextures = null; + GlCleaner.onCardTexture -= aByteBuffer6.limit() * 2; + } + } + + @OriginalMember(owner = "client!lm", name = "c", descriptor = "()V") + public static void method2809() { + allows3DTextureMapping = GlRenderer.extTexture3dSupported; + method2807(); + method2811(); + method2812(); + } + + @OriginalMember(owner = "client!lm", name = "e", descriptor = "()V") + private static void method2811() { + @Pc(1) GL2 gl = GlRenderer.gl; + if (allows3DTextureMapping) { + @Pc(6) int[] local6 = new int[1]; + gl.glGenTextures(1, local6, 0); + gl.glBindTexture(GL2.GL_TEXTURE_3D, local6[0]); + textureBuffer.position(0); + gl.glTexImage3D(GL2.GL_TEXTURE_3D, 0, GL2.GL_LUMINANCE_ALPHA, 64, 64, 64, 0, GL2.GL_LUMINANCE_ALPHA, GL2.GL_UNSIGNED_BYTE, textureBuffer); + gl.glTexParameteri(GL2.GL_TEXTURE_3D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_3D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + texture3D = local6[0]; + GlCleaner.onCardTexture += textureBuffer.limit() * 2; + } else { + anIntArray341 = new int[64]; + gl.glGenTextures(64, anIntArray341, 0); + for (@Pc(65) int local65 = 0; local65 < 64; local65++) { + GlRenderer.setTextureId(anIntArray341[local65]); + textureBuffer.position(local65 * 64 * 64 * 2); + gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_LUMINANCE_ALPHA, 64, 64, 0, GL2.GL_LUMINANCE_ALPHA, GL2.GL_UNSIGNED_BYTE, textureBuffer); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + } + GlCleaner.onCardTexture += textureBuffer.limit() * 2; + } + } + + @OriginalMember(owner = "client!lm", name = "f", descriptor = "()V") + private static void method2812() { + @Pc(1) GL2 gl = GlRenderer.gl; + if (allows3DTextureMapping) { + @Pc(6) int[] local6 = new int[1]; + gl.glGenTextures(1, local6, 0); + gl.glBindTexture(GL2.GL_TEXTURE_3D, local6[0]); + aByteBuffer6.position(0); + gl.glTexImage3D(GL2.GL_TEXTURE_3D, 0, GL2.GL_LUMINANCE_ALPHA, 64, 64, 64, 0, GL2.GL_LUMINANCE_ALPHA, GL2.GL_UNSIGNED_BYTE, aByteBuffer6); + gl.glTexParameteri(GL2.GL_TEXTURE_3D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_3D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + waterfallTextureId = local6[0]; + GlCleaner.onCardTexture += aByteBuffer6.limit() * 2; + return; + } + waterfallTextures = new int[64]; + gl.glGenTextures(64, waterfallTextures, 0); + for (@Pc(65) int local65 = 0; local65 < 64; local65++) { + GlRenderer.setTextureId(waterfallTextures[local65]); + aByteBuffer6.position(local65 * 64 * 64 * 2); + gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_LUMINANCE_ALPHA, 64, 64, 0, GL2.GL_LUMINANCE_ALPHA, GL2.GL_UNSIGNED_BYTE, aByteBuffer6); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + } + GlCleaner.onCardTexture += aByteBuffer6.limit() * 2; + } + + @OriginalMember(owner = "client!lh", name = "b", descriptor = "(II)V") + public static void method2761(@OriginalArg(0) int arg0) { + UnderwaterMaterialRenderer.anInt3241 = arg0; + resetArgument(3); + resetArgument(4); + } +} diff --git a/client/src/main/java/rt4/MaterialManager_Class106.java b/client/src/main/java/rt4/MaterialManager_Class106.java new file mode 100644 index 0000000..4df7f4c --- /dev/null +++ b/client/src/main/java/rt4/MaterialManager_Class106.java @@ -0,0 +1,176 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.util.Random; + +@OriginalClass("client!wf") +public abstract class MaterialManager_Class106 { + + @OriginalMember(owner = "client!wf", name = "c", descriptor = "[S") + private short[] aShortArray70; + + @OriginalMember(owner = "client!wf", name = "a", descriptor = "[S") + private final short[] aShortArray69 = new short[512]; + + @OriginalMember(owner = "client!wf", name = "i", descriptor = "I") + private int anInt5000 = 0; + + @OriginalMember(owner = "client!wf", name = "m", descriptor = "I") + private int anInt5003 = 4; + + @OriginalMember(owner = "client!wf", name = "l", descriptor = "I") + private int anInt5002 = 4; + + @OriginalMember(owner = "client!wf", name = "r", descriptor = "I") + private int anInt5007 = 4; + + @OriginalMember(owner = "client!wf", name = "t", descriptor = "I") + protected int anInt5008 = 4; + + @OriginalMember(owner = "client!wf", name = "", descriptor = "(IIIII)V") + protected MaterialManager_Class106(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + this.anInt5002 = arg3; + this.anInt5008 = arg1; + this.anInt5000 = arg0; + this.anInt5007 = arg4; + this.anInt5003 = arg2; + this.method3843(); + this.method3847(); + } + + @OriginalMember(owner = "client!se", name = "a", descriptor = "(IIIIZ)I") + public static int method3891(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(8) int local8 = arg3 & 0xF; + @Pc(29) int local29 = local8 >= 4 ? (local8 == 12 || local8 == 14 ? arg0 : arg1) : arg2; + @Pc(42) int local42 = local8 < 8 ? arg0 : arg2; + return ((local8 & 0x1) == 0 ? local42 : -local42) + ((local8 & 0x2) == 0 ? local29 : -local29); + } + + @OriginalMember(owner = "client!wf", name = "a", descriptor = "(IIII)V") + protected final void method3841() { + @Pc(8) int[] local8 = new int[64]; + @Pc(11) int[] local11 = new int[64]; + @Pc(14) int[] local14 = new int[64]; + @Pc(16) int local16; + for (local16 = 0; local16 < 64; local16++) { + local8[local16] = (local16 << 12) / 64; + } + for (local16 = 0; local16 < 64; local16++) { + local11[local16] = (local16 << 12) / 64; + } + for (local16 = 0; local16 < 64; local16++) { + local14[local16] = (local16 << 12) / 64; + } + this.method3844(); + for (@Pc(77) int local77 = 0; local77 < 64; local77++) { + for (@Pc(82) int local82 = 0; local82 < 64; local82++) { + for (@Pc(91) int local91 = 0; local91 < 64; local91++) { + for (@Pc(96) int local96 = 0; local96 < this.anInt5008; local96++) { + local16 = this.aShortArray70[local96] << 12; + @Pc(118) int local118 = this.anInt5003 * local16 >> 12; + @Pc(126) int local126 = local16 * local14[local77] >> 12; + @Pc(133) int local133 = local16 * this.anInt5002 >> 12; + @Pc(138) int local138 = local126 * this.anInt5007; + @Pc(145) int local145 = local16 * this.anInt5007 >> 12; + @Pc(153) int local153 = local8[local91] * local16 >> 12; + @Pc(158) int local158 = local153 * this.anInt5003; + @Pc(162) int local162 = local158 >> 12; + @Pc(166) int local166 = local158 & 0xFFF; + @Pc(170) int local170 = local138 >> 12; + @Pc(174) int local174 = local166 - 4096; + @Pc(178) int local178 = local162 + 1; + @Pc(182) int local182 = local170 + 1; + @Pc(190) int local190 = local11[local82] * local16 >> 12; + @Pc(194) int local194 = MonochromeImageCache.anIntArray1[local166]; + @Pc(199) int local199 = local190 * this.anInt5002; + @Pc(203) int local203 = local170 & 0xFF; + @Pc(207) int local207 = local162 & 0xFF; + if (local145 <= local182) { + local182 = 0; + } else { + local182 &= 0xFF; + } + @Pc(222) int local222 = local199 >> 12; + @Pc(227) short local227 = this.aShortArray69[local203]; + @Pc(232) short local232 = this.aShortArray69[local182]; + @Pc(236) int local236 = local222 + 1; + if (local133 > local236) { + local236 &= 0xFF; + } else { + local236 = 0; + } + local190 = local199 & 0xFFF; + @Pc(259) short local259 = this.aShortArray69[local236 + local232]; + local126 = local138 & 0xFFF; + local222 &= 0xFF; + @Pc(271) int local271 = MonochromeImageCache.anIntArray1[local126]; + @Pc(278) short local278 = this.aShortArray69[local222 + local232]; + @Pc(285) short local285 = this.aShortArray69[local227 + local222]; + if (local118 <= local178) { + local178 = 0; + } else { + local178 &= 0xFF; + } + @Pc(300) int local300 = local190 - 4096; + @Pc(304) int local304 = MonochromeImageCache.anIntArray1[local190]; + @Pc(308) int local308 = local126 - 4096; + @Pc(315) short local315 = this.aShortArray69[local227 + local236]; + @Pc(327) int local327 = method3891(local166, local126, local190, this.aShortArray69[local285 + local207]); + @Pc(340) int local340 = method3891(local174, local126, local190, this.aShortArray69[local178 + local285]); + @Pc(351) int local351 = local327 + (local194 * (local340 - local327) >> 12); + @Pc(363) int local363 = method3891(local166, local126, local300, this.aShortArray69[local315 + local207]); + @Pc(375) int local375 = method3891(local174, local126, local300, this.aShortArray69[local178 + local315]); + @Pc(386) int local386 = local363 + (local194 * (local375 - local363) >> 12); + @Pc(397) int local397 = ((local386 - local351) * local304 >> 12) + local351; + @Pc(409) int local409 = method3891(local166, local308, local190, this.aShortArray69[local207 + local278]); + @Pc(421) int local421 = method3891(local174, local308, local190, this.aShortArray69[local178 + local278]); + @Pc(432) int local432 = (local194 * (local421 - local409) >> 12) + local409; + @Pc(445) int local445 = method3891(local166, local308, local300, this.aShortArray69[local207 + local259]); + @Pc(457) int local457 = method3891(local174, local308, local300, this.aShortArray69[local178 + local259]); + @Pc(468) int local468 = local445 + ((local457 - local445) * local194 >> 12); + @Pc(480) int local480 = local432 + ((local468 - local432) * local304 >> 12); + this.method3848(((local480 - local397) * local271 >> 12) + local397, local96); + } + this.method3842(); + } + } + } + } + + @OriginalMember(owner = "client!wf", name = "a", descriptor = "(B)V") + protected abstract void method3842(); + + @OriginalMember(owner = "client!wf", name = "b", descriptor = "(B)V") + private void method3843() { + this.aShortArray70 = new short[this.anInt5008]; + for (@Pc(12) int local12 = 0; local12 < this.anInt5008; local12++) { + this.aShortArray70[local12] = (short) Math.pow(2.0D, local12); + } + } + + @OriginalMember(owner = "client!wf", name = "a", descriptor = "(I)V") + protected abstract void method3844(); + + @OriginalMember(owner = "client!wf", name = "c", descriptor = "(I)V") + private void method3847() { + @Pc(12) Random local12 = new Random(this.anInt5000); + @Pc(14) int local14; + for (local14 = 0; local14 < 255; local14++) { + this.aShortArray69[local14] = (short) local14; + } + for (local14 = 0; local14 < 255; local14++) { + @Pc(41) int local41 = 255 - local14; + @Pc(46) int local46 = RandomUtils.nextInt(local41, local12); + @Pc(51) short local51 = this.aShortArray69[local46]; + this.aShortArray69[local46] = this.aShortArray69[local41]; + this.aShortArray69[local41] = this.aShortArray69[local41 + 256] = local51; + } + } + + @OriginalMember(owner = "client!wf", name = "a", descriptor = "(III)V") + protected abstract void method3848(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1); +} diff --git a/client/src/main/java/rt4/MaterialManager_Class106_Sub1.java b/client/src/main/java/rt4/MaterialManager_Class106_Sub1.java new file mode 100644 index 0000000..160755f --- /dev/null +++ b/client/src/main/java/rt4/MaterialManager_Class106_Sub1.java @@ -0,0 +1,93 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!we") +public class MaterialManager_Class106_Sub1 extends MaterialManager_Class106 { + + @OriginalMember(owner = "client!we", name = "B", descriptor = "I") + private int anInt4135; + + @OriginalMember(owner = "client!we", name = "D", descriptor = "I") + private int anInt4137; + + @OriginalMember(owner = "client!we", name = "F", descriptor = "[B") + private byte[] aByteArray57; + + @OriginalMember(owner = "client!we", name = "J", descriptor = "I") + private int anInt4141; + + @OriginalMember(owner = "client!we", name = "L", descriptor = "I") + private int anInt4143; + + @OriginalMember(owner = "client!we", name = "A", descriptor = "I") + private final int anInt4134; + + @OriginalMember(owner = "client!we", name = "G", descriptor = "I") + private final int anInt4139; + + @OriginalMember(owner = "client!we", name = "z", descriptor = "I") + private final int anInt4133; + + @OriginalMember(owner = "client!we", name = "u", descriptor = "I") + private int anInt4129; + + @OriginalMember(owner = "client!we", name = "", descriptor = "(IIIIIFFF)V") + protected MaterialManager_Class106_Sub1(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) float arg5, @OriginalArg(6) float arg6, @OriginalArg(7) float arg7) { + super(arg0, arg1, arg2, arg3, arg4); + this.anInt4134 = (int) (arg7 * 4096.0F); + this.anInt4139 = (int) (arg6 * 4096.0F); + this.anInt4129 = this.anInt4133 = (int) (Math.pow(0.5D, -arg5) * 4096.0D); + } + + @OriginalMember(owner = "client!we", name = "a", descriptor = "(IB)V") + protected void method3209(@OriginalArg(0) int arg0, @OriginalArg(1) byte arg1) { + this.aByteArray57[arg0] = arg1; + } + + @OriginalMember(owner = "client!we", name = "a", descriptor = "(B)V") + @Override + protected final void method3842() { + this.anInt4129 = this.anInt4133; + this.anInt4143 >>= 0x4; + if (this.anInt4143 < 0) { + this.anInt4143 = 0; + } else if (this.anInt4143 > 255) { + this.anInt4143 = 255; + } + this.method3209(this.anInt4141++, (byte) this.anInt4143); + this.anInt4143 = 0; + } + + @OriginalMember(owner = "client!we", name = "a", descriptor = "(III)V") + @Override + protected final void method3848(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + if (arg1 == 0) { + this.anInt4135 = 4096; + this.anInt4137 = this.anInt4139 - (arg0 >= 0 ? arg0 : -arg0); + this.anInt4137 = this.anInt4137 * this.anInt4137 >> 12; + this.anInt4143 = this.anInt4137; + return; + } + this.anInt4135 = this.anInt4134 * this.anInt4137 >> 12; + if (this.anInt4135 < 0) { + this.anInt4135 = 0; + } else if (this.anInt4135 > 4096) { + this.anInt4135 = 4096; + } + this.anInt4137 = this.anInt4139 - (arg0 >= 0 ? arg0 : -arg0); + this.anInt4137 = this.anInt4137 * this.anInt4137 >> 12; + this.anInt4137 = this.anInt4137 * this.anInt4135 >> 12; + this.anInt4143 += this.anInt4129 * this.anInt4137 >> 12; + this.anInt4129 = this.anInt4133 * this.anInt4129 >> 12; + } + + @OriginalMember(owner = "client!we", name = "a", descriptor = "(I)V") + @Override + protected final void method3844() { + this.anInt4141 = 0; + this.anInt4143 = 0; + } +} diff --git a/client/src/main/java/rt4/MaterialManager_Class106_Sub1_Sub1.java b/client/src/main/java/rt4/MaterialManager_Class106_Sub1_Sub1.java new file mode 100644 index 0000000..719aa54 --- /dev/null +++ b/client/src/main/java/rt4/MaterialManager_Class106_Sub1_Sub1.java @@ -0,0 +1,36 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ng") +public final class MaterialManager_Class106_Sub1_Sub1 extends MaterialManager_Class106_Sub1 { + + @OriginalMember(owner = "client!ng", name = "O", descriptor = "[B") + private byte[] aByteArray58; + + @OriginalMember(owner = "client!ng", name = "", descriptor = "()V") + public MaterialManager_Class106_Sub1_Sub1() { + super(8, 5, 8, 8, 2, 0.1F, 0.55F, 3.0F); + } + + @OriginalMember(owner = "client!ng", name = "b", descriptor = "(III)[B") + public final byte[] method3215() { + this.aByteArray58 = new byte[524288]; + this.method3841(); + return this.aByteArray58; + } + + @OriginalMember(owner = "client!ng", name = "a", descriptor = "(IB)V") + @Override + protected final void method3209(@OriginalArg(0) int arg0, @OriginalArg(1) byte arg1) { + @Pc(3) int local3 = arg0 * 2; + @Pc(7) int local7 = arg1 & 0xFF; + @Pc(10) int local10 = local3; + @Pc(11) int local11 = local3 + 1; + this.aByteArray58[local10] = (byte) (local7 * 3 >> 5); + this.aByteArray58[local11] = (byte) (local7 >> 2); + } +} diff --git a/client/src/main/java/rt4/MaterialManager_Class106_Sub2.java b/client/src/main/java/rt4/MaterialManager_Class106_Sub2.java new file mode 100644 index 0000000..4ba045f --- /dev/null +++ b/client/src/main/java/rt4/MaterialManager_Class106_Sub2.java @@ -0,0 +1,59 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!vd") +public class MaterialManager_Class106_Sub2 extends MaterialManager_Class106 { + + @OriginalMember(owner = "client!vd", name = "x", descriptor = "I") + private int anInt5010; + + @OriginalMember(owner = "client!vd", name = "H", descriptor = "[B") + private byte[] aByteArray67; + + @OriginalMember(owner = "client!vd", name = "J", descriptor = "I") + private int anInt5017; + + @OriginalMember(owner = "client!vd", name = "G", descriptor = "[I") + private final int[] anIntArray441 = new int[this.anInt5008]; + + @OriginalMember(owner = "client!vd", name = "", descriptor = "(IIIIIF)V") + protected MaterialManager_Class106_Sub2(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) float arg5) { + super(arg0, arg1, arg2, arg3, arg4); + for (@Pc(15) int local15 = 0; local15 < this.anInt5008; local15++) { + this.anIntArray441[local15] = (short) (Math.pow(arg5, local15) * 4096.0D); + } + } + + @OriginalMember(owner = "client!vd", name = "a", descriptor = "(III)V") + @Override + protected final void method3848(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + this.anInt5010 += arg0 * this.anIntArray441[arg1] >> 12; + } + + @OriginalMember(owner = "client!vd", name = "a", descriptor = "(I)V") + @Override + protected final void method3844() { + this.anInt5017 = 0; + this.anInt5010 = 0; + } + + @OriginalMember(owner = "client!vd", name = "a", descriptor = "(IB)V") + protected void method3853(@OriginalArg(0) int arg0, @OriginalArg(1) byte arg1) { + this.aByteArray67[this.anInt5017++] = (byte) ((arg1 >> 1 & 0x7F) + 127); + } + + @OriginalMember(owner = "client!vd", name = "a", descriptor = "(B)V") + @Override + protected final void method3842() { + this.anInt5010 = Math.abs(this.anInt5010); + if (this.anInt5010 >= 4096) { + this.anInt5010 = 4095; + } + this.method3853(this.anInt5017++, (byte) (this.anInt5010 >> 4)); + this.anInt5010 = 0; + } +} diff --git a/client/src/main/java/rt4/MaterialManager_Class106_Sub2_Sub1.java b/client/src/main/java/rt4/MaterialManager_Class106_Sub2_Sub1.java new file mode 100644 index 0000000..39f02ab --- /dev/null +++ b/client/src/main/java/rt4/MaterialManager_Class106_Sub2_Sub1.java @@ -0,0 +1,36 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!sb") +public final class MaterialManager_Class106_Sub2_Sub1 extends MaterialManager_Class106_Sub2 { + + @OriginalMember(owner = "client!sb", name = "I", descriptor = "[B") + private byte[] aByteArray68; + + @OriginalMember(owner = "client!sb", name = "", descriptor = "()V") + public MaterialManager_Class106_Sub2_Sub1() { + super(12, 5, 16, 2, 2, 0.45F); + } + + @OriginalMember(owner = "client!sb", name = "a", descriptor = "(IB)V") + @Override + protected final void method3853(@OriginalArg(0) int arg0, @OriginalArg(1) byte arg1) { + @Pc(3) int local3 = arg0 * 2; + @Pc(12) byte local12 = (byte) ((arg1 >> 1 & 0x7F) + 127); + @Pc(15) int local15 = local3; + @Pc(16) int local16 = local3 + 1; + this.aByteArray68[local15] = local12; + this.aByteArray68[local16] = local12; + } + + @OriginalMember(owner = "client!sb", name = "b", descriptor = "(III)[B") + public final byte[] method3854() { + this.aByteArray68 = new byte[524288]; + this.method3841(); + return this.aByteArray68; + } +} diff --git a/client/src/main/java/rt4/MaterialRenderer.java b/client/src/main/java/rt4/MaterialRenderer.java new file mode 100644 index 0000000..1850ac9 --- /dev/null +++ b/client/src/main/java/rt4/MaterialRenderer.java @@ -0,0 +1,21 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!pc") +public interface MaterialRenderer { + + @OriginalMember(owner = "client!pc", name = "a", descriptor = "()V") + void unbind(); + + @OriginalMember(owner = "client!pc", name = "b", descriptor = "()V") + void bind(); + + @OriginalMember(owner = "client!pc", name = "a", descriptor = "(I)V") + void setArgument(@OriginalArg(0) int arg0); + + @OriginalMember(owner = "client!pc", name = "c", descriptor = "()I") + int getFlags(); +} diff --git a/client/src/main/java/rt4/MathUtils.java b/client/src/main/java/rt4/MathUtils.java new file mode 100644 index 0000000..d95678d --- /dev/null +++ b/client/src/main/java/rt4/MathUtils.java @@ -0,0 +1,39 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!hf") +public final class MathUtils { + + @OriginalMember(owner = "client!hf", name = "g", descriptor = "[I") + public static final int[] sin = new int[2048]; + + @OriginalMember(owner = "client!hf", name = "h", descriptor = "[I") + public static final int[] reciprical16 = new int[2048]; + + @OriginalMember(owner = "client!hf", name = "f", descriptor = "[I") + private static final int[] reciprical15 = new int[512]; + + @OriginalMember(owner = "client!hf", name = "r", descriptor = "[I") + public static final int[] cos = new int[2048]; + + static { + @Pc(33) int i; + for (i = 1; i < 512; i++) { + reciprical15[i] = 32768 / i; + } + for (i = 1; i < 2048; i++) { + reciprical16[i] = 65536 / i; + } + for (i = 0; i < 2048; i++) { + sin[i] = (int) (Math.sin((double) i * 0.0030679615D) * 65536.0D); + cos[i] = (int) (Math.cos((double) i * 0.0030679615D) * 65536.0D); + } + } + + public static int clamp(int min, int max, int value) { + return Math.max(min, Math.min(max, value)); + } +} diff --git a/client/src/main/java/rt4/MidiDecoder.java b/client/src/main/java/rt4/MidiDecoder.java new file mode 100644 index 0000000..9dc6fae --- /dev/null +++ b/client/src/main/java/rt4/MidiDecoder.java @@ -0,0 +1,219 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ki") +public final class MidiDecoder { + + @OriginalMember(owner = "client!ki", name = "e", descriptor = "[B") + public static final byte[] STATUS_LENGTHS = new byte[]{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + @OriginalMember(owner = "client!ki", name = "b", descriptor = "[I") + public int[] times; + + @OriginalMember(owner = "client!ki", name = "c", descriptor = "[I") + private int[] positions; + + @OriginalMember(owner = "client!ki", name = "d", descriptor = "I") + public int division; + + @OriginalMember(owner = "client!ki", name = "f", descriptor = "[I") + private int[] startPositions; + + @OriginalMember(owner = "client!ki", name = "g", descriptor = "J") + private long startMillis; + + @OriginalMember(owner = "client!ki", name = "h", descriptor = "[I") + private int[] statuses; + + @OriginalMember(owner = "client!ki", name = "i", descriptor = "I") + private int tempo; + + @OriginalMember(owner = "client!ki", name = "a", descriptor = "Lclient!wa;") + private final Buffer buffer = new Buffer(null); + + @OriginalMember(owner = "client!ki", name = "", descriptor = "()V") + public MidiDecoder() { + } + + @OriginalMember(owner = "client!ki", name = "", descriptor = "([B)V") + public MidiDecoder(@OriginalArg(0) byte[] bytes) { + this.init(bytes); + } + + @OriginalMember(owner = "client!ki", name = "a", descriptor = "(I)J") + public final long getTimeMillis(@OriginalArg(0) int time) { + return this.startMillis + (long) time * (long) this.tempo; + } + + @OriginalMember(owner = "client!ki", name = "b", descriptor = "()Z") + public final boolean hasNextTrack() { + @Pc(3) int tracks = this.positions.length; + for (@Pc(5) int i = 0; i < tracks; i++) { + if (this.positions[i] >= 0) { + return false; + } + } + return true; + } + + @OriginalMember(owner = "client!ki", name = "a", descriptor = "(J)V") + public final void setStartMillis(@OriginalArg(0) long millis) { + this.startMillis = millis; + @Pc(6) int tracks = this.positions.length; + for (@Pc(8) int i = 0; i < tracks; i++) { + this.times[i] = 0; + this.statuses[i] = 0; + this.buffer.offset = this.startPositions[i]; + this.addDeltaTime(i); + this.positions[i] = this.buffer.offset; + } + } + + @OriginalMember(owner = "client!ki", name = "c", descriptor = "()Z") + public final boolean isValid() { + return this.buffer.data != null; + } + + @OriginalMember(owner = "client!ki", name = "d", descriptor = "()I") + public final int getTrackCount() { + return this.positions.length; + } + + @OriginalMember(owner = "client!ki", name = "b", descriptor = "(I)I") + public final int getNextEvent(@OriginalArg(0) int track) { + return this.getNextEventInternal(track); + } + + @OriginalMember(owner = "client!ki", name = "c", descriptor = "(I)V") + public final void loadTrackPosition(@OriginalArg(0) int track) { + this.buffer.offset = this.positions[track]; + } + + @OriginalMember(owner = "client!ki", name = "d", descriptor = "(I)V") + public final void addDeltaTime(@OriginalArg(0) int track) { + @Pc(4) int deltaTime = this.buffer.gVarInt(); + this.times[track] += deltaTime; + } + + @OriginalMember(owner = "client!ki", name = "a", descriptor = "(II)I") + private int getNextEvent(@OriginalArg(0) int track, @OriginalArg(1) int status) { + if (status != 255) { + @Pc(78) byte len = STATUS_LENGTHS[status - 128]; + int event = status; + if (len >= 1) { + event = status | this.buffer.g1() << 8; + } + if (len >= 2) { + event |= this.buffer.g1() << 16; + } + return event; + } + @Pc(7) int type = this.buffer.g1(); + int skipBytes = this.buffer.gVarInt(); + if (type == 47) { + this.buffer.offset += skipBytes; + return 1; + } else if (type == 81) { + @Pc(32) int tempo = this.buffer.g3(); + skipBytes -= 3; + @Pc(38) int time = this.times[track]; + this.startMillis += (long) time * (long) (this.tempo - tempo); + this.tempo = tempo; + this.buffer.offset += skipBytes; + return 2; + } else { + this.buffer.offset += skipBytes; + return 3; + } + } + + @OriginalMember(owner = "client!ki", name = "e", descriptor = "(I)I") + private int getNextEventInternal(@OriginalArg(0) int track) { + @Pc(7) byte statusByte = this.buffer.data[this.buffer.offset]; + @Pc(13) int status; + if (statusByte < 0) { + status = statusByte & 0xFF; + this.statuses[track] = status; + this.buffer.offset++; + } else { + status = this.statuses[track]; + } + if (status != 240 && status != 247) { + return this.getNextEvent(track, status); + } + @Pc(42) int len = this.buffer.gVarInt(); + if (status == 247 && len > 0) { + @Pc(57) int status2 = this.buffer.data[this.buffer.offset] & 0xFF; + if (status2 >= 241 && status2 <= 243 || status2 == 246 || status2 == 248 || status2 >= 250 && status2 <= 252 || status2 == 254) { + this.buffer.offset++; + this.statuses[track] = status2; + return this.getNextEvent(track, status2); + } + } + this.buffer.offset += len; + return 0; + } + + @OriginalMember(owner = "client!ki", name = "a", descriptor = "([B)V") + public final void init(@OriginalArg(0) byte[] bytes) { + this.buffer.data = bytes; + this.buffer.offset = 10; + @Pc(12) int tracks = this.buffer.g2(); + this.division = this.buffer.g2(); + this.tempo = 500000; + this.startPositions = new int[tracks]; + @Pc(27) int i = 0; + while (i < tracks) { + @Pc(35) int id = this.buffer.g4(); + @Pc(40) int len = this.buffer.g4(); + if (id == 1297379947) { + this.startPositions[i] = this.buffer.offset; + i++; + } + this.buffer.offset += len; + } + this.startMillis = 0L; + this.positions = new int[tracks]; + for (i = 0; i < tracks; i++) { + this.positions[i] = this.startPositions[i]; + } + this.times = new int[tracks]; + this.statuses = new int[tracks]; + } + + @OriginalMember(owner = "client!ki", name = "f", descriptor = "(I)V") + public final void saveTrackPosition(@OriginalArg(0) int track) { + this.positions[track] = this.buffer.offset; + } + + @OriginalMember(owner = "client!ki", name = "e", descriptor = "()I") + public final int getNextTrack() { + @Pc(3) int tracks = this.positions.length; + @Pc(5) int track = -1; + @Pc(7) int minTime = Integer.MAX_VALUE; + for (@Pc(9) int i = 0; i < tracks; i++) { + if (this.positions[i] >= 0 && this.times[i] < minTime) { + track = i; + minTime = this.times[i]; + } + } + return track; + } + + @OriginalMember(owner = "client!ki", name = "f", descriptor = "()V") + public final void release() { + this.buffer.data = null; + this.startPositions = null; + this.positions = null; + this.times = null; + this.statuses = null; + } + + @OriginalMember(owner = "client!ki", name = "g", descriptor = "()V") + public final void loadEndOfTrackPosition() { + this.buffer.offset = -1; + } +} diff --git a/client/src/main/java/rt4/MidiInstrument.java b/client/src/main/java/rt4/MidiInstrument.java new file mode 100644 index 0000000..a13ff7b --- /dev/null +++ b/client/src/main/java/rt4/MidiInstrument.java @@ -0,0 +1,434 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!jk") +public final class MidiInstrument extends Node { + + @OriginalMember(owner = "client!jk", name = "r", descriptor = "[B") + public final byte[] aByteArray43 = new byte[128]; + + @OriginalMember(owner = "client!jk", name = "s", descriptor = "[I") + private int[] anIntArray289 = new int[128]; + + @OriginalMember(owner = "client!jk", name = "u", descriptor = "I") + public final int anInt3078; + + @OriginalMember(owner = "client!jk", name = "w", descriptor = "[B") + public final byte[] aByteArray44; + + @OriginalMember(owner = "client!jk", name = "C", descriptor = "[B") + public final byte[] aByteArray45 = new byte[128]; + + @OriginalMember(owner = "client!jk", name = "D", descriptor = "[Lclient!kj;") + public final PcmSound[] aClass3_Sub16_Sub1Array1 = new PcmSound[128]; + + @OriginalMember(owner = "client!jk", name = "H", descriptor = "[S") + public final short[] aShortArray36 = new short[128]; + + @OriginalMember(owner = "client!jk", name = "I", descriptor = "[Lclient!wh;") + public final Midi_Class162[] aClass162Array1 = new Midi_Class162[128]; + + @OriginalMember(owner = "client!jk", name = "", descriptor = "([B)V") + public MidiInstrument(@OriginalArg(0) byte[] arg0) { + @Pc(29) int local29 = 0; + this.aByteArray44 = new byte[128]; + @Pc(38) Buffer local38 = new Buffer(arg0); + while (local38.data[local29 + local38.offset] != 0) { + local29++; + } + @Pc(55) byte[] local55 = new byte[local29]; + @Pc(57) int local57; + for (local57 = 0; local57 < local29; local57++) { + local55[local57] = local38.g1b(); + } + local38.offset++; + local29++; + local57 = local38.offset; + local38.offset += local29; + @Pc(91) int local91; + for (local91 = 0; local38.data[local38.offset + local91] != 0; local91++) { + } + @Pc(106) byte[] local106 = new byte[local91]; + @Pc(108) int local108; + for (local108 = 0; local108 < local91; local108++) { + local106[local108] = local38.g1b(); + } + local38.offset++; + local91++; + @Pc(133) int local133 = 0; + local108 = local38.offset; + local38.offset += local91; + while (local38.data[local133 + local38.offset] != 0) { + local133++; + } + @Pc(159) byte[] local159 = new byte[local133]; + for (@Pc(161) int local161 = 0; local161 < local133; local161++) { + local159[local161] = local38.g1b(); + } + local38.offset++; + local133++; + @Pc(187) byte[] local187 = new byte[local133]; + @Pc(194) int local194; + @Pc(206) int local206; + if (local133 <= 1) { + local194 = local133; + } else { + local194 = 2; + local187[1] = 1; + @Pc(204) int local204 = 1; + for (local206 = 2; local206 < local133; local206++) { + @Pc(217) int local217 = local38.g1(); + if (local217 == 0) { + local204 = local194++; + } else { + if (local217 <= local204) { + local217--; + } + local204 = local217; + } + local187[local206] = (byte) local204; + } + } + @Pc(242) Midi_Class162[] local242 = new Midi_Class162[local194]; + for (local206 = 0; local206 < local242.length; local206++) { + @Pc(256) Midi_Class162 local256 = local242[local206] = new Midi_Class162(); + @Pc(260) int local260 = local38.g1(); + if (local260 > 0) { + local256.aByteArray80 = new byte[local260 * 2]; + } + local260 = local38.g1(); + if (local260 > 0) { + local256.aByteArray81 = new byte[local260 * 2 + 2]; + local256.aByteArray81[1] = 64; + } + } + local206 = local38.g1(); + @Pc(311) byte[] local311 = local206 > 0 ? new byte[local206 * 2] : null; + local206 = local38.g1(); + @Pc(327) byte[] local327 = local206 > 0 ? new byte[local206 * 2] : null; + @Pc(329) int local329; + for (local329 = 0; local38.data[local329 + local38.offset] != 0; local329++) { + } + @Pc(346) byte[] local346 = new byte[local329]; + @Pc(348) int local348; + for (local348 = 0; local348 < local329; local348++) { + local346[local348] = local38.g1b(); + } + local38.offset++; + local329++; + local348 = 0; + @Pc(375) int local375; + for (local375 = 0; local375 < 128; local375++) { + local348 += local38.g1(); + this.aShortArray36[local375] = (short) local348; + } + local348 = 0; + for (local375 = 0; local375 < 128; local375++) { + local348 += local38.g1(); + this.aShortArray36[local375] = (short) (this.aShortArray36[local375] + (local348 << 8)); + } + local375 = 0; + @Pc(428) int local428 = 0; + @Pc(430) int local430 = 0; + @Pc(432) int local432; + for (local432 = 0; local432 < 128; local432++) { + if (local375 == 0) { + if (local346.length > local428) { + local375 = local346[local428++]; + } else { + local375 = -1; + } + local430 = local38.gVarInt(); + } + this.aShortArray36[local432] = (short) (this.aShortArray36[local432] + ((local430 - 1 & 0x2) << 14)); + this.anIntArray289[local432] = local430; + local375--; + } + local375 = 0; + local432 = 0; + local428 = 0; + @Pc(496) int local496; + for (local496 = 0; local496 < 128; local496++) { + if (this.anIntArray289[local496] != 0) { + if (local375 == 0) { + local432 = local38.data[local57++] - 1; + if (local55.length > local428) { + local375 = local55[local428++]; + } else { + local375 = -1; + } + } + local375--; + this.aByteArray44[local496] = (byte) local432; + } + } + local375 = 0; + local428 = 0; + local496 = 0; + for (@Pc(550) int local550 = 0; local550 < 128; local550++) { + if (this.anIntArray289[local550] != 0) { + if (local375 == 0) { + local496 = local38.data[local108++] + 16 << 2; + if (local428 < local106.length) { + local375 = local106[local428++]; + } else { + local375 = -1; + } + } + local375--; + this.aByteArray43[local550] = (byte) local496; + } + } + local428 = 0; + local375 = 0; + @Pc(609) Midi_Class162 local609 = null; + @Pc(611) int local611; + for (local611 = 0; local611 < 128; local611++) { + if (this.anIntArray289[local611] != 0) { + if (local375 == 0) { + local609 = local242[local187[local428]]; + if (local428 >= local159.length) { + local375 = -1; + } else { + local375 = local159[local428++]; + } + } + this.aClass162Array1[local611] = local609; + local375--; + } + } + local375 = 0; + local428 = 0; + local611 = 0; + @Pc(664) int local664; + for (local664 = 0; local664 < 128; local664++) { + if (local375 == 0) { + if (local428 < local346.length) { + local375 = local346[local428++]; + } else { + local375 = -1; + } + if (this.anIntArray289[local664] > 0) { + local611 = local38.g1() + 1; + } + } + local375--; + this.aByteArray45[local664] = (byte) local611; + } + this.anInt3078 = local38.g1() + 1; + @Pc(729) Midi_Class162 local729; + @Pc(734) int local734; + for (local664 = 0; local664 < local194; local664++) { + local729 = local242[local664]; + if (local729.aByteArray80 != null) { + for (local734 = 1; local734 < local729.aByteArray80.length; local734 += 2) { + local729.aByteArray80[local734] = local38.g1b(); + } + } + if (local729.aByteArray81 != null) { + for (local734 = 3; local734 < local729.aByteArray81.length - 2; local734 += 2) { + local729.aByteArray81[local734] = local38.g1b(); + } + } + } + if (local311 != null) { + for (local664 = 1; local664 < local311.length; local664 += 2) { + local311[local664] = local38.g1b(); + } + } + if (local327 != null) { + for (local664 = 1; local664 < local327.length; local664 += 2) { + local327[local664] = local38.g1b(); + } + } + for (local664 = 0; local664 < local194; local664++) { + local729 = local242[local664]; + if (local729.aByteArray81 != null) { + local348 = 0; + for (local734 = 2; local734 < local729.aByteArray81.length; local734 += 2) { + local348 -= -local38.g1() - 1; + local729.aByteArray81[local734] = (byte) local348; + } + } + } + for (local664 = 0; local664 < local194; local664++) { + local729 = local242[local664]; + if (local729.aByteArray80 != null) { + local348 = 0; + for (local734 = 2; local734 < local729.aByteArray80.length; local734 += 2) { + local348 = local348 + local38.g1() + 1; + local729.aByteArray80[local734] = (byte) local348; + } + } + } + @Pc(995) byte local995; + @Pc(1014) int local1014; + @Pc(1016) int local1016; + @Pc(1031) int local1031; + @Pc(1066) int local1066; + @Pc(954) byte local954; + if (local311 != null) { + local348 = local38.g1(); + local311[0] = (byte) local348; + for (local664 = 2; local664 < local311.length; local664 += 2) { + local348 = local348 + local38.g1() + 1; + local311[local664] = (byte) local348; + } + local954 = local311[0]; + @Pc(958) byte local958 = local311[1]; + for (local734 = 0; local734 < local954; local734++) { + this.aByteArray45[local734] = (byte) (local958 * this.aByteArray45[local734] + 32 >> 6); + } + local734 = 2; + while (local734 < local311.length) { + local995 = local311[local734]; + @Pc(1001) byte local1001 = local311[local734 + 1]; + local734 += 2; + local1014 = (local995 - local954) * local958 + (local995 - local954) / 2; + for (local1016 = local954; local1016 < local995; local1016++) { + local1031 = method3825(local1014, local995 - local954); + local1014 += local1001 - local958; + this.aByteArray45[local1016] = (byte) (local1031 * this.aByteArray45[local1016] + 32 >> 6); + } + local958 = local1001; + local954 = local995; + } + for (local1066 = local954; local1066 < 128; local1066++) { + this.aByteArray45[local1066] = (byte) (this.aByteArray45[local1066] * local958 + 32 >> 6); + } + } + if (local327 != null) { + local348 = local38.g1(); + local327[0] = (byte) local348; + for (local664 = 2; local664 < local327.length; local664 += 2) { + local348 = local348 + local38.g1() + 1; + local327[local664] = (byte) local348; + } + local954 = local327[0]; + @Pc(1133) int local1133 = local327[1] << 1; + for (local734 = 0; local734 < local954; local734++) { + local1066 = local1133 + (this.aByteArray43[local734] & 0xFF); + if (local1066 < 0) { + local1066 = 0; + } + if (local1066 > 128) { + local1066 = 128; + } + this.aByteArray43[local734] = (byte) local1066; + } + local734 = 2; + @Pc(1207) int local1207; + while (local734 < local327.length) { + local995 = local327[local734]; + local1014 = (local995 - local954) * local1133 + (local995 - local954) / 2; + local1207 = local327[local734 + 1] << 1; + local734 += 2; + for (local1016 = local954; local1016 < local995; local1016++) { + local1031 = method3825(local1014, local995 - local954); + local1014 += local1207 - local1133; + @Pc(1237) int local1237 = local1031 + (this.aByteArray43[local1016] & 0xFF); + if (local1237 < 0) { + local1237 = 0; + } + if (local1237 > 128) { + local1237 = 128; + } + this.aByteArray43[local1016] = (byte) local1237; + } + local954 = local995; + local1133 = local1207; + } + for (local1066 = local954; local1066 < 128; local1066++) { + local1207 = (this.aByteArray43[local1066] & 0xFF) + local1133; + if (local1207 < 0) { + local1207 = 0; + } + if (local1207 > 128) { + local1207 = 128; + } + this.aByteArray43[local1066] = (byte) local1207; + } + } + for (local664 = 0; local664 < local194; local664++) { + local242[local664].anInt5815 = local38.g1(); + } + for (local664 = 0; local664 < local194; local664++) { + local729 = local242[local664]; + if (local729.aByteArray80 != null) { + local729.anInt5810 = local38.g1(); + } + if (local729.aByteArray81 != null) { + local729.anInt5813 = local38.g1(); + } + if (local729.anInt5815 > 0) { + local729.anInt5807 = local38.g1(); + } + } + for (local664 = 0; local664 < local194; local664++) { + local242[local664].anInt5814 = local38.g1(); + } + for (local664 = 0; local664 < local194; local664++) { + local729 = local242[local664]; + if (local729.anInt5814 > 0) { + local729.anInt5809 = local38.g1(); + } + } + for (local664 = 0; local664 < local194; local664++) { + local729 = local242[local664]; + if (local729.anInt5809 > 0) { + local729.anInt5811 = local38.g1(); + } + } + } + + @OriginalMember(owner = "client!sa", name = "c", descriptor = "(III)I") + public static int method3825(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(12) int local12 = arg0 >>> 31; + return (arg0 + local12) / arg1 - local12; + } + + @OriginalMember(owner = "client!jb", name = "a", descriptor = "(ILclient!ve;I)Lclient!jk;") + public static MidiInstrument method2320(@OriginalArg(1) Js5 arg0, @OriginalArg(2) int arg1) { + @Pc(9) byte[] local9 = arg0.fetchFile(arg1); + return local9 == null ? null : new MidiInstrument(local9); + } + + @OriginalMember(owner = "client!jk", name = "d", descriptor = "(B)V") + public final void method2432() { + this.anIntArray289 = null; + } + + @OriginalMember(owner = "client!jk", name = "a", descriptor = "(I[ILclient!le;[B)Z") + public final boolean method2436(@OriginalArg(1) int[] arg0, @OriginalArg(2) SoundBank arg1, @OriginalArg(3) byte[] arg2) { + @Pc(8) int local8 = 0; + @Pc(10) PcmSound local10 = null; + @Pc(16) boolean local16 = true; + for (@Pc(18) int local18 = 0; local18 < 128; local18++) { + if (arg2 == null || arg2[local18] != 0) { + @Pc(35) int local35 = this.anIntArray289[local18]; + if (local35 != 0) { + if (local8 != local35) { + local8 = local35--; + if ((local35 & 0x1) == 0) { + local10 = arg1.getSynthSound(local35 >> 2, arg0); + } else { + local10 = arg1.getVorbisSound(local35 >> 2, arg0); + } + if (local10 == null) { + local16 = false; + } + } + if (local10 != null) { + this.aClass3_Sub16_Sub1Array1[local18] = local10; + this.anIntArray289[local18] = 0; + } + } + } + } + return local16; + } +} diff --git a/client/src/main/java/rt4/MidiNote.java b/client/src/main/java/rt4/MidiNote.java new file mode 100644 index 0000000..ebc3fe4 --- /dev/null +++ b/client/src/main/java/rt4/MidiNote.java @@ -0,0 +1,79 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!mf") +public final class MidiNote extends Node { + + @OriginalMember(owner = "client!mf", name = "s", descriptor = "I") + public int anInt3763; + + @OriginalMember(owner = "client!mf", name = "t", descriptor = "I") + public int anInt3764; + + @OriginalMember(owner = "client!mf", name = "u", descriptor = "I") + public int anInt3765; + + @OriginalMember(owner = "client!mf", name = "w", descriptor = "Lclient!wh;") + public Midi_Class162 aClass162_1; + + @OriginalMember(owner = "client!mf", name = "y", descriptor = "I") + public int anInt3767; + + @OriginalMember(owner = "client!mf", name = "z", descriptor = "Lclient!b;") + public SoundPcmStream stream; + + @OriginalMember(owner = "client!mf", name = "A", descriptor = "I") + public int anInt3768; + + @OriginalMember(owner = "client!mf", name = "B", descriptor = "Lclient!kj;") + public PcmSound sound; + + @OriginalMember(owner = "client!mf", name = "C", descriptor = "I") + public int anInt3769; + + @OriginalMember(owner = "client!mf", name = "D", descriptor = "I") + public int anInt3770; + + @OriginalMember(owner = "client!mf", name = "E", descriptor = "I") + public int anInt3771; + + @OriginalMember(owner = "client!mf", name = "F", descriptor = "I") + public int anInt3772; + + @OriginalMember(owner = "client!mf", name = "G", descriptor = "I") + public int channel; + + @OriginalMember(owner = "client!mf", name = "H", descriptor = "I") + public int anInt3774; + + @OriginalMember(owner = "client!mf", name = "I", descriptor = "I") + public int anInt3775; + + @OriginalMember(owner = "client!mf", name = "J", descriptor = "I") + public int anInt3776; + + @OriginalMember(owner = "client!mf", name = "L", descriptor = "I") + public int anInt3777; + + @OriginalMember(owner = "client!mf", name = "N", descriptor = "I") + public int anInt3779; + + @OriginalMember(owner = "client!mf", name = "Q", descriptor = "I") + public int anInt3781; + + @OriginalMember(owner = "client!mf", name = "R", descriptor = "I") + public int anInt3782; + + @OriginalMember(owner = "client!mf", name = "V", descriptor = "Lclient!jk;") + public MidiInstrument instrument; + + @OriginalMember(owner = "client!mf", name = "d", descriptor = "(I)V") + public final void release() { + this.aClass162_1 = null; + this.sound = null; + this.stream = null; + this.instrument = null; + } +} diff --git a/client/src/main/java/rt4/MidiNoteStream.java b/client/src/main/java/rt4/MidiNoteStream.java new file mode 100644 index 0000000..6b88872 --- /dev/null +++ b/client/src/main/java/rt4/MidiNoteStream.java @@ -0,0 +1,160 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!te") +public final class MidiNoteStream extends PcmStream { + + @OriginalMember(owner = "client!te", name = "w", descriptor = "Lclient!ih;") + public final LinkedList notes = new LinkedList(); + + @OriginalMember(owner = "client!te", name = "K", descriptor = "Lclient!ei;") + public final MixerPcmStream mixer = new MixerPcmStream(); + + @OriginalMember(owner = "client!te", name = "E", descriptor = "Lclient!va;") + private final MidiPcmStream parent; + + @OriginalMember(owner = "client!te", name = "", descriptor = "(Lclient!va;)V") + public MidiNoteStream(@OriginalArg(0) MidiPcmStream parent) { + this.parent = parent; + } + + @OriginalMember(owner = "client!te", name = "d", descriptor = "()Lclient!qb;") + @Override + public final PcmStream nextSubStream() { + @Pc(9) MidiNote note; + do { + note = (MidiNote) this.notes.next(); + if (note == null) { + return null; + } + } while (note.stream == null); + return note.stream; + } + + @OriginalMember(owner = "client!te", name = "b", descriptor = "()Lclient!qb;") + @Override + public final PcmStream firstSubStream() { + @Pc(9) MidiNote note = (MidiNote) this.notes.head(); + if (note == null) { + return null; + } else if (note.stream == null) { + return this.nextSubStream(); + } else { + return note.stream; + } + } + + @OriginalMember(owner = "client!te", name = "a", descriptor = "(Lclient!mf;II)V") + private void skip(@OriginalArg(0) MidiNote instrument, @OriginalArg(2) int len) { + if ((this.parent.channelFlags[instrument.channel] & 0x4) != 0 && instrument.anInt3767 < 0) { + @Pc(27) int local27 = this.parent.anIntArray503[instrument.channel] / AudioChannel.sampleRate; + @Pc(37) int local37 = (local27 + 1048575 - instrument.anInt3775) / local27; + instrument.anInt3775 = local27 * len + instrument.anInt3775 & 0xFFFFF; + if (len >= local37) { + if (this.parent.anIntArray509[instrument.channel] == 0) { + instrument.stream = SoundPcmStream.create(instrument.sound, instrument.stream.method405(), instrument.stream.getVolume(), instrument.stream.getPan()); + } else { + instrument.stream = SoundPcmStream.create(instrument.sound, instrument.stream.method405(), 0, instrument.stream.getPan()); + this.parent.method4442(instrument, instrument.instrument.aShortArray36[instrument.anInt3779] < 0); + } + if (instrument.instrument.aShortArray36[instrument.anInt3779] < 0) { + instrument.stream.setLoops(-1); + } + len = instrument.anInt3775 / local27; + } + } + instrument.stream.skip(len); + } + + @OriginalMember(owner = "client!te", name = "a", descriptor = "()I") + @Override + public final int method4404() { + return 0; + } + + @OriginalMember(owner = "client!te", name = "c", descriptor = "(I)V") + @Override + public final void skip(@OriginalArg(0) int len) { + this.mixer.skip(len); + for (@Pc(15) MidiNote note = (MidiNote) this.notes.head(); note != null; note = (MidiNote) this.notes.next()) { + if (!this.parent.method4445(note)) { + @Pc(27) int len2 = len; + do { + if (len2 <= note.anInt3771) { + this.skip(note, len2); + note.anInt3771 -= len2; + break; + } + this.skip(note, note.anInt3771); + len2 -= note.anInt3771; + } while (!this.parent.method4433(len2, 0, note, null)); + } + } + } + + @OriginalMember(owner = "client!te", name = "b", descriptor = "([III)V") + @Override + public final void read(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + this.mixer.read(arg0, arg1, arg2); + for (@Pc(17) MidiNote local17 = (MidiNote) this.notes.head(); local17 != null; local17 = (MidiNote) this.notes.next()) { + if (!this.parent.method4445(local17)) { + @Pc(29) int local29 = arg2; + @Pc(31) int local31 = arg1; + do { + if (local29 <= local17.anInt3771) { + this.method4146(arg0, local17, local31, local29, local31 + local29); + local17.anInt3771 -= local29; + break; + } + this.method4146(arg0, local17, local31, local17.anInt3771, local29 + local31); + local29 -= local17.anInt3771; + local31 += local17.anInt3771; + } while (!this.parent.method4433(local29, local31, local17, arg0)); + } + } + } + + @OriginalMember(owner = "client!te", name = "a", descriptor = "([ILclient!mf;IIIB)V") + private void method4146(@OriginalArg(0) int[] arg0, @OriginalArg(1) MidiNote arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if ((this.parent.channelFlags[arg1.channel] & 0x4) != 0 && arg1.anInt3767 < 0) { + @Pc(26) int local26 = this.parent.anIntArray503[arg1.channel] / AudioChannel.sampleRate; + while (true) { + @Pc(36) int local36 = (local26 + 1048575 - arg1.anInt3775) / local26; + if (arg3 < local36) { + arg1.anInt3775 += arg3 * local26; + break; + } + arg3 -= local36; + arg1.stream.read(arg0, arg2, local36); + @Pc(55) int local55 = AudioChannel.sampleRate / 100; + @Pc(58) SoundPcmStream local58 = arg1.stream; + @Pc(62) int local62 = 262144 / local26; + if (local62 < local55) { + local55 = local62; + } + arg1.anInt3775 += local26 * local36 - 1048576; + if (this.parent.anIntArray509[arg1.channel] == 0) { + arg1.stream = SoundPcmStream.create(arg1.sound, local58.method405(), local58.getVolume(), local58.getPan()); + } else { + arg1.stream = SoundPcmStream.create(arg1.sound, local58.method405(), 0, local58.getPan()); + this.parent.method4442(arg1, arg1.instrument.aShortArray36[arg1.anInt3779] < 0); + arg1.stream.method398(local55, local58.getVolume()); + } + if (arg1.instrument.aShortArray36[arg1.anInt3779] < 0) { + arg1.stream.setLoops(-1); + } + arg2 += local36; + local58.method384(local55); + local58.read(arg0, arg2, arg4 - arg2); + if (local58.method412()) { + this.mixer.addSubStream(local58); + } + } + } + arg1.stream.read(arg0, arg2, arg3); + } +} diff --git a/client/src/main/java/rt4/MidiPcmStream.java b/client/src/main/java/rt4/MidiPcmStream.java new file mode 100644 index 0000000..e5bf85d --- /dev/null +++ b/client/src/main/java/rt4/MidiPcmStream.java @@ -0,0 +1,869 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!va") +public final class MidiPcmStream extends PcmStream { + + @OriginalMember(owner = "client!va", name = "Kb", descriptor = "Z") + private boolean aBoolean293; + + @OriginalMember(owner = "client!va", name = "Lb", descriptor = "J") + private long aLong188; + + @OriginalMember(owner = "client!va", name = "Mb", descriptor = "I") + private int anInt5674; + + @OriginalMember(owner = "client!va", name = "Nb", descriptor = "I") + private int anInt5675; + + @OriginalMember(owner = "client!va", name = "Ob", descriptor = "J") + private long aLong189; + + @OriginalMember(owner = "client!va", name = "Qb", descriptor = "Lclient!rf;") + private Song aClass3_Sub29_2; + + @OriginalMember(owner = "client!va", name = "Rb", descriptor = "I") + private int anInt5676; + + @OriginalMember(owner = "client!va", name = "Sb", descriptor = "Z") + private boolean aBoolean294; + + @OriginalMember(owner = "client!va", name = "z", descriptor = "[I") + private final int[] anIntArray496 = new int[16]; + + @OriginalMember(owner = "client!va", name = "D", descriptor = "[I") + private final int[] anIntArray499 = new int[16]; + + @OriginalMember(owner = "client!va", name = "F", descriptor = "[I") + private final int[] anIntArray500 = new int[16]; + + @OriginalMember(owner = "client!va", name = "B", descriptor = "[I") + private final int[] anIntArray497 = new int[16]; + + @OriginalMember(owner = "client!va", name = "ab", descriptor = "I") + private final int anInt5646 = 1000000; + + @OriginalMember(owner = "client!va", name = "cb", descriptor = "[[Lclient!mf;") + private final MidiNote[][] aClass3_Sub25ArrayArray2 = new MidiNote[16][128]; + + @OriginalMember(owner = "client!va", name = "kb", descriptor = "[I") + private final int[] anIntArray506 = new int[16]; + + @OriginalMember(owner = "client!va", name = "C", descriptor = "[I") + private final int[] anIntArray498 = new int[16]; + + @OriginalMember(owner = "client!va", name = "U", descriptor = "[I") + public final int[] anIntArray503 = new int[16]; + + @OriginalMember(owner = "client!va", name = "x", descriptor = "[I") + private final int[] anIntArray495 = new int[16]; + + @OriginalMember(owner = "client!va", name = "ib", descriptor = "[I") + private final int[] anIntArray505 = new int[16]; + + @OriginalMember(owner = "client!va", name = "tb", descriptor = "[I") + public final int[] channelFlags = new int[16]; + + @OriginalMember(owner = "client!va", name = "mb", descriptor = "[I") + private final int[] anIntArray507 = new int[16]; + + @OriginalMember(owner = "client!va", name = "Cb", descriptor = "[I") + private final int[] anIntArray510 = new int[16]; + + @OriginalMember(owner = "client!va", name = "N", descriptor = "[I") + private final int[] anIntArray502 = new int[16]; + + @OriginalMember(owner = "client!va", name = "Bb", descriptor = "[I") + public final int[] anIntArray509 = new int[16]; + + @OriginalMember(owner = "client!va", name = "bb", descriptor = "[[Lclient!mf;") + private final MidiNote[][] aClass3_Sub25ArrayArray1 = new MidiNote[16][128]; + + @OriginalMember(owner = "client!va", name = "Eb", descriptor = "I") + private int anInt5668 = 256; + + @OriginalMember(owner = "client!va", name = "H", descriptor = "[I") + private final int[] anIntArray501 = new int[16]; + + @OriginalMember(owner = "client!va", name = "Z", descriptor = "[I") + private final int[] anIntArray504 = new int[16]; + + @OriginalMember(owner = "client!va", name = "K", descriptor = "Lclient!ki;") + private final MidiDecoder aClass84_1 = new MidiDecoder(); + + @OriginalMember(owner = "client!va", name = "Pb", descriptor = "Lclient!te;") + private final MidiNoteStream aClass3_Sub3_Sub3_1 = new MidiNoteStream(this); + + @OriginalMember(owner = "client!va", name = "P", descriptor = "Lclient!sc;") + private final HashTable aClass133_23 = new HashTable(128); + + @OriginalMember(owner = "client!va", name = "", descriptor = "()V") + public MidiPcmStream() { + this.method4424(); + this.method4441(true); + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(Lclient!rf;ILclient!ve;Lclient!le;I)Z") + public final synchronized boolean isSongReady(@OriginalArg(0) Song arg0, @OriginalArg(2) Js5 arg1, @OriginalArg(3) SoundBank arg2) { + arg0.createPrograms(); + @Pc(5) boolean local5 = true; + @Pc(20) int[] local20 = new int[]{GlobalConfig.AUDIO_SAMPLE_RATE}; + for (@Pc(34) ByteArrayNode local34 = (ByteArrayNode) arg0.programs.head(); local34 != null; local34 = (ByteArrayNode) arg0.programs.next()) { + @Pc(40) int local40 = (int) local34.key; + @Pc(48) MidiInstrument local48 = (MidiInstrument) this.aClass133_23.get(local40); + if (local48 == null) { + local48 = MidiInstrument.method2320(arg1, local40); + if (local48 == null) { + local5 = false; + continue; + } + this.aClass133_23.put(local48, local40); + } + if (!local48.method2436(local20, arg2, local34.value)) { + local5 = false; + } + } + if (local5) { + arg0.releasePrograms(); + } + return local5; + } + + @OriginalMember(owner = "client!va", name = "d", descriptor = "(B)V") + public final synchronized void releaseInstruments() { + for (@Pc(15) MidiInstrument local15 = (MidiInstrument) this.aClass133_23.head(); local15 != null; local15 = (MidiInstrument) this.aClass133_23.next()) { + local15.method2432(); + } + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(III)V") + private void method4413() { + this.anIntArray499[9] = 128; + this.anIntArray502[9] = 128; + this.method4425(128, 9); + } + + @OriginalMember(owner = "client!va", name = "d", descriptor = "(I)Z") + public final synchronized boolean isValid() { + return this.aClass84_1.isValid(); + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(ZLclient!rf;ZB)V") + private synchronized void method4416(@OriginalArg(0) boolean arg0, @OriginalArg(1) Song arg1, @OriginalArg(2) boolean arg2) { + this.method4448(arg2); + this.aClass84_1.init(arg1.midiBytes); + this.aBoolean293 = arg0; + this.aLong189 = 0L; + @Pc(24) int local24 = this.aClass84_1.getTrackCount(); + for (@Pc(26) int local26 = 0; local26 < local24; local26++) { + this.aClass84_1.loadTrackPosition(local26); + this.aClass84_1.addDeltaTime(local26); + this.aClass84_1.saveTrackPosition(local26); + } + this.anInt5675 = this.aClass84_1.getNextTrack(); + this.anInt5674 = this.aClass84_1.times[this.anInt5675]; + this.aLong188 = this.aClass84_1.getTimeMillis(this.anInt5674); + } + + @OriginalMember(owner = "client!va", name = "b", descriptor = "(III)V") + private void method4417(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + this.anIntArray497[arg0] = arg1; + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "()I") + @Override + public final synchronized int method4404() { + return 0; + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(IZI)V") + private void method4419(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(BII)V") + public final synchronized void init() { + this.method4413(); + } + + @OriginalMember(owner = "client!va", name = "c", descriptor = "(II)V") + private void method4421(@OriginalArg(1) int arg0) { + if (arg0 < 0) { + for (@Pc(10) int local10 = 0; local10 < 16; local10++) { + this.method4421(local10); + } + return; + } + this.anIntArray495[arg0] = 12800; + this.anIntArray496[arg0] = 8192; + this.anIntArray505[arg0] = 16383; + this.anIntArray497[arg0] = 8192; + this.anIntArray500[arg0] = 0; + this.anIntArray504[arg0] = 8192; + this.method4443(arg0); + this.method4438(arg0); + this.channelFlags[arg0] = 0; + this.anIntArray498[arg0] = 32767; + this.anIntArray501[arg0] = 256; + this.anIntArray509[arg0] = 0; + this.method4423(arg0, 8192); + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(BI)V") + private void method4422(@OriginalArg(1) int arg0) { + for (@Pc(20) MidiNote local20 = (MidiNote) this.aClass3_Sub3_Sub3_1.notes.head(); local20 != null; local20 = (MidiNote) this.aClass3_Sub3_Sub3_1.notes.next()) { + if (arg0 < 0 || local20.channel == arg0) { + if (local20.stream != null) { + local20.stream.method384(AudioChannel.sampleRate / 100); + if (local20.stream.method412()) { + this.aClass3_Sub3_Sub3_1.mixer.addSubStream(local20.stream); + } + local20.release(); + } + if (local20.anInt3767 < 0) { + this.aClass3_Sub25ArrayArray1[local20.channel][local20.anInt3779] = null; + } + local20.unlink(); + } + } + } + + @OriginalMember(owner = "client!va", name = "b", descriptor = "(BII)V") + private void method4423(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + this.anIntArray510[arg0] = arg1; + this.anIntArray503[arg0] = (int) (Math.pow(2.0D, (double) arg1 * 5.4931640625E-4D) * 2097152.0D + 0.5D); + } + + @OriginalMember(owner = "client!va", name = "c", descriptor = "(III)V") + private synchronized void method4424() { + for (@Pc(5) int local5 = 0; local5 < 16; local5++) { + this.anIntArray507[local5] = 256; + } + } + + @OriginalMember(owner = "client!va", name = "d", descriptor = "(III)V") + private void method4425(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + if (this.anIntArray506[arg1] != arg0) { + this.anIntArray506[arg1] = arg0; + for (@Pc(21) int local21 = 0; local21 < 128; local21++) { + this.aClass3_Sub25ArrayArray2[arg1][local21] = null; + } + } + } + + @OriginalMember(owner = "client!va", name = "e", descriptor = "(I)V") + public final synchronized void clearInstruments() { + for (@Pc(7) MidiInstrument local7 = (MidiInstrument) this.aClass133_23.head(); local7 != null; local7 = (MidiInstrument) this.aClass133_23.next()) { + local7.unlink(); + } + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(IIII)V") + private void method4427(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2) { + this.method4434(arg2, 64, arg1); + if ((this.channelFlags[arg1] & 0x2) != 0) { + for (@Pc(28) MidiNote local28 = (MidiNote) this.aClass3_Sub3_Sub3_1.notes.tail(); local28 != null; local28 = (MidiNote) this.aClass3_Sub3_Sub3_1.notes.prev()) { + if (arg1 == local28.channel && local28.anInt3767 < 0) { + this.aClass3_Sub25ArrayArray1[arg1][local28.anInt3779] = null; + this.aClass3_Sub25ArrayArray1[arg1][arg2] = local28; + @Pc(72) int local72 = local28.anInt3769 + (local28.anInt3764 * local28.anInt3781 >> 12); + local28.anInt3764 = 4096; + local28.anInt3769 += arg2 - local28.anInt3779 << 8; + local28.anInt3781 = local72 - local28.anInt3769; + local28.anInt3779 = arg2; + return; + } + } + } + @Pc(118) MidiInstrument local118 = (MidiInstrument) this.aClass133_23.get(this.anIntArray506[arg1]); + if (local118 == null) { + return; + } + @Pc(126) PcmSound local126 = local118.aClass3_Sub16_Sub1Array1[arg2]; + if (local126 == null) { + return; + } + @Pc(133) MidiNote local133 = new MidiNote(); + local133.sound = local126; + local133.instrument = local118; + local133.channel = arg1; + local133.aClass162_1 = local118.aClass162Array1[arg2]; + local133.anInt3776 = local118.aByteArray44[arg2]; + local133.anInt3779 = arg2; + local133.anInt3772 = local118.aByteArray45[arg2] * arg0 * arg0 * local118.anInt3078 + 1024 >> 11; + local133.anInt3765 = local118.aByteArray43[arg2] & 0xFF; + local133.anInt3769 = (arg2 << 8) - (local118.aShortArray36[arg2] & 0x7FFF); + local133.anInt3767 = -1; + local133.anInt3770 = 0; + local133.anInt3777 = 0; + local133.anInt3782 = 0; + local133.anInt3763 = 0; + if (this.anIntArray509[arg1] == 0) { + local133.stream = SoundPcmStream.create(local126, this.method4439(local133), this.method4449(local133), this.method4437(local133)); + } else { + local133.stream = SoundPcmStream.create(local126, this.method4439(local133), 0, this.method4437(local133)); + this.method4442(local133, local118.aShortArray36[arg2] < 0); + } + if (local118.aShortArray36[arg2] < 0) { + local133.stream.setLoops(-1); + } + if (local133.anInt3776 >= 0) { + @Pc(289) MidiNote local289 = this.aClass3_Sub25ArrayArray2[arg1][local133.anInt3776]; + if (local289 != null && local289.anInt3767 < 0) { + this.aClass3_Sub25ArrayArray1[arg1][local289.anInt3779] = null; + local289.anInt3767 = 0; + } + this.aClass3_Sub25ArrayArray2[arg1][local133.anInt3776] = local133; + } + this.aClass3_Sub3_Sub3_1.notes.addTail(local133); + this.aClass3_Sub25ArrayArray1[arg1][arg2] = local133; + } + + @OriginalMember(owner = "client!va", name = "b", descriptor = "(BI)V") + private void method4429(@OriginalArg(1) int arg0) { + @Pc(9) int local9 = arg0 & 0xF0; + @Pc(20) int local20; + @Pc(32) int local32; + @Pc(26) int local26; + if (local9 == 128) { + local20 = arg0 & 0xF; + local26 = arg0 >> 16 & 0x7F; + local32 = arg0 >> 8 & 0x7F; + this.method4434(local32, local26, local20); + } else if (local9 == 144) { + local32 = arg0 >> 8 & 0x7F; + local20 = arg0 & 0xF; + local26 = arg0 >> 16 & 0x7F; + if (local26 > 0) { + this.method4427(local26, local20, local32); + } else { + this.method4434(local32, 64, local20); + } + } else if (local9 == 160) { + local20 = arg0 & 0xF; + local32 = arg0 >> 8 & 0x7F; + local26 = arg0 >> 16 & 0x7F; + this.method4436(local26, local32, local20); + } else if (local9 == 176) { + local32 = arg0 >> 8 & 0x7F; + local20 = arg0 & 0xF; + local26 = arg0 >> 16 & 0x7F; + if (local32 == 0) { + this.anIntArray502[local20] = (local26 << 14) + (this.anIntArray502[local20] & 0xFFE03FFF); + } + if (local32 == 32) { + this.anIntArray502[local20] = (this.anIntArray502[local20] & 0xFFFFC07F) + (local26 << 7); + } + if (local32 == 1) { + this.anIntArray500[local20] = (local26 << 7) + (this.anIntArray500[local20] & 0xFFFFC07F); + } + if (local32 == 33) { + this.anIntArray500[local20] = (this.anIntArray500[local20] & 0xFFFFFF80) + local26; + } + if (local32 == 5) { + this.anIntArray504[local20] = (this.anIntArray504[local20] & 0xFFFFC07F) + (local26 << 7); + } + if (local32 == 37) { + this.anIntArray504[local20] = local26 + (this.anIntArray504[local20] & 0xFFFFFF80); + } + if (local32 == 7) { + this.anIntArray495[local20] = (local26 << 7) + (this.anIntArray495[local20] & 0xFFFFC07F); + } + if (local32 == 39) { + this.anIntArray495[local20] = (this.anIntArray495[local20] & 0xFFFFFF80) + local26; + } + if (local32 == 10) { + this.anIntArray496[local20] = (this.anIntArray496[local20] & 0xFFFFC07F) + (local26 << 7); + } + if (local32 == 42) { + this.anIntArray496[local20] = local26 + (this.anIntArray496[local20] & 0xFFFFFF80); + } + if (local32 == 11) { + this.anIntArray505[local20] = (this.anIntArray505[local20] & 0xFFFFC07F) + (local26 << 7); + } + if (local32 == 43) { + this.anIntArray505[local20] = local26 + (this.anIntArray505[local20] & 0xFFFFFF80); + } + if (local32 == 64) { + if (local26 >= 64) { + this.channelFlags[local20] |= 0x1; + } else { + this.channelFlags[local20] &= 0xFFFFFFFE; + } + } + if (local32 == 65) { + if (local26 < 64) { + this.method4443(local20); + this.channelFlags[local20] &= 0xFFFFFFFD; + } else { + this.channelFlags[local20] |= 0x2; + } + } + if (local32 == 99) { + this.anIntArray498[local20] = (local26 << 7) + (this.anIntArray498[local20] & 0x7F); + } + if (local32 == 98) { + this.anIntArray498[local20] = (this.anIntArray498[local20] & 0x3F80) + local26; + } + if (local32 == 101) { + this.anIntArray498[local20] = (local26 << 7) + (this.anIntArray498[local20] & 0x7F) + 16384; + } + if (local32 == 100) { + this.anIntArray498[local20] = local26 + (this.anIntArray498[local20] & 0x3F80) + 16384; + } + if (local32 == 120) { + this.method4422(local20); + } + if (local32 == 121) { + this.method4421(local20); + } + if (local32 == 123) { + this.method4430(local20); + } + @Pc(522) int local522; + if (local32 == 6) { + local522 = this.anIntArray498[local20]; + if (local522 == 16384) { + this.anIntArray501[local20] = (this.anIntArray501[local20] & 0xFFFFC07F) + (local26 << 7); + } + } + if (local32 == 38) { + local522 = this.anIntArray498[local20]; + if (local522 == 16384) { + this.anIntArray501[local20] = (this.anIntArray501[local20] & 0xFFFFFF80) + local26; + } + } + if (local32 == 16) { + this.anIntArray509[local20] = (this.anIntArray509[local20] & 0xFFFFC07F) + (local26 << 7); + } + if (local32 == 48) { + this.anIntArray509[local20] = (this.anIntArray509[local20] & 0xFFFFFF80) + local26; + } + if (local32 == 81) { + if (local26 >= 64) { + this.channelFlags[local20] |= 0x4; + } else { + this.method4438(local20); + this.channelFlags[local20] &= 0xFFFFFFFB; + } + } + if (local32 == 17) { + this.method4423(local20, (local26 << 7) + (this.anIntArray510[local20] & 0xFFFFC07F)); + } + if (local32 == 49) { + this.method4423(local20, (this.anIntArray510[local20] & 0xFFFFFF80) + local26); + } + } else if (local9 == 192) { + local32 = arg0 >> 8 & 0x7F; + local20 = arg0 & 0xF; + this.method4425(this.anIntArray502[local20] + local32, local20); + } else if (local9 == 208) { + local20 = arg0 & 0xF; + local32 = arg0 >> 8 & 0x7F; + this.method4419(local20, local32); + } else if (local9 == 224) { + local20 = arg0 & 0xF; + local32 = (arg0 >> 9 & 0x3F80) + ((arg0 & 0x7FBE) >> 8); + this.method4417(local20, local32); + } else { + local9 = arg0 & 0xFF; + if (local9 == 255) { + this.method4441(true); + } + } + } + + @OriginalMember(owner = "client!va", name = "d", descriptor = "(II)V") + private void method4430(@OriginalArg(1) int arg0) { + for (@Pc(12) MidiNote local12 = (MidiNote) this.aClass3_Sub3_Sub3_1.notes.head(); local12 != null; local12 = (MidiNote) this.aClass3_Sub3_Sub3_1.notes.next()) { + if ((arg0 < 0 || arg0 == local12.channel) && local12.anInt3767 < 0) { + this.aClass3_Sub25ArrayArray1[local12.channel][local12.anInt3779] = null; + local12.anInt3767 = 0; + } + } + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(ZLclient!rf;I)V") + public final synchronized void method4431(@OriginalArg(0) boolean arg0, @OriginalArg(1) Song arg1) { + this.method4416(arg0, arg1, true); + } + + @OriginalMember(owner = "client!va", name = "b", descriptor = "([III)V") + @Override + public final synchronized void read(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + if (this.aClass84_1.isValid()) { + @Pc(18) int local18 = this.aClass84_1.division * this.anInt5646 / AudioChannel.sampleRate; + do { + @Pc(28) long local28 = this.aLong189 + (long) arg2 * (long) local18; + if (this.aLong188 - local28 >= 0L) { + this.aLong189 = local28; + break; + } + @Pc(59) int local59 = (int) ((this.aLong188 + (long) local18 - this.aLong189 - 1L) / (long) local18); + this.aLong189 += (long) local18 * (long) local59; + this.aClass3_Sub3_Sub3_1.read(arg0, arg1, local59); + arg2 -= local59; + arg1 += local59; + this.method4435(); + } while (this.aClass84_1.isValid()); + } + this.aClass3_Sub3_Sub3_1.read(arg0, arg1, arg2); + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(IILclient!mf;B[I)Z") + public final boolean method4433(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) MidiNote arg2, @OriginalArg(4) int[] arg3) { + arg2.anInt3771 = AudioChannel.sampleRate / 100; + if (arg2.anInt3767 >= 0 && (arg2.stream == null || arg2.stream.method411())) { + arg2.release(); + arg2.unlink(); + if (arg2.anInt3776 > 0 && arg2 == this.aClass3_Sub25ArrayArray2[arg2.channel][arg2.anInt3776]) { + this.aClass3_Sub25ArrayArray2[arg2.channel][arg2.anInt3776] = null; + } + return true; + } + @Pc(54) int local54 = arg2.anInt3764; + if (local54 > 0) { + local54 -= (int) (Math.pow(2.0D, (double) this.anIntArray504[arg2.channel] * 4.921259842519685E-4D) * 16.0D + 0.5D); + if (local54 < 0) { + local54 = 0; + } + arg2.anInt3764 = local54; + } + arg2.stream.method410(this.method4439(arg2)); + @Pc(103) Midi_Class162 local103 = arg2.aClass162_1; + arg2.anInt3768 += local103.anInt5814; + arg2.anInt3774++; + @Pc(134) double local134 = (double) ((arg2.anInt3779 - 60 << 8) + (arg2.anInt3764 * arg2.anInt3781 >> 12)) * 5.086263020833333E-6D; + @Pc(136) boolean local136 = false; + if (local103.anInt5815 > 0) { + if (local103.anInt5807 > 0) { + arg2.anInt3782 += (int) (Math.pow(2.0D, local134 * (double) local103.anInt5807) * 128.0D + 0.5D); + } else { + arg2.anInt3782 += 128; + } + if (arg2.anInt3782 * local103.anInt5815 >= 819200) { + local136 = true; + } + } + if (local103.aByteArray80 != null) { + if (local103.anInt5810 <= 0) { + arg2.anInt3770 += 128; + } else { + arg2.anInt3770 += (int) (Math.pow(2.0D, (double) local103.anInt5810 * local134) * 128.0D + 0.5D); + } + while (arg2.anInt3763 < local103.aByteArray80.length - 2 && arg2.anInt3770 > (local103.aByteArray80[arg2.anInt3763 + 2] & 0xFF) << 8) { + arg2.anInt3763 += 2; + } + if (local103.aByteArray80.length - 2 == arg2.anInt3763 && local103.aByteArray80[arg2.anInt3763 + 1] == 0) { + local136 = true; + } + } + if (arg2.anInt3767 >= 0 && local103.aByteArray81 != null && (this.channelFlags[arg2.channel] & 0x1) == 0 && (arg2.anInt3776 < 0 || this.aClass3_Sub25ArrayArray2[arg2.channel][arg2.anInt3776] != arg2)) { + if (local103.anInt5813 > 0) { + arg2.anInt3767 += (int) (Math.pow(2.0D, (double) local103.anInt5813 * local134) * 128.0D + 0.5D); + } else { + arg2.anInt3767 += 128; + } + while (local103.aByteArray81.length - 2 > arg2.anInt3777 && (local103.aByteArray81[arg2.anInt3777 + 2] & 0xFF) << 8 < arg2.anInt3767) { + arg2.anInt3777 += 2; + } + if (arg2.anInt3777 == local103.aByteArray81.length - 2) { + local136 = true; + } + } + if (!local136) { + arg2.stream.method417(arg2.anInt3771, this.method4449(arg2), this.method4437(arg2)); + return false; + } + arg2.stream.method384(arg2.anInt3771); + if (arg3 == null) { + arg2.stream.skip(arg0); + } else { + arg2.stream.read(arg3, arg1, arg0); + } + if (arg2.stream.method412()) { + this.aClass3_Sub3_Sub3_1.mixer.addSubStream(arg2.stream); + } + arg2.release(); + if (arg2.anInt3767 >= 0) { + arg2.unlink(); + if (arg2.anInt3776 > 0 && this.aClass3_Sub25ArrayArray2[arg2.channel][arg2.anInt3776] == arg2) { + this.aClass3_Sub25ArrayArray2[arg2.channel][arg2.anInt3776] = null; + } + } + return true; + } + + @OriginalMember(owner = "client!va", name = "b", descriptor = "()Lclient!qb;") + @Override + public final synchronized PcmStream firstSubStream() { + return this.aClass3_Sub3_Sub3_1; + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(BIII)V") + private void method4434(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + @Pc(12) MidiNote local12 = this.aClass3_Sub25ArrayArray1[arg2][arg0]; + if (local12 == null) { + return; + } + this.aClass3_Sub25ArrayArray1[arg2][arg0] = null; + if ((this.channelFlags[arg2] & 0x2) == 0) { + local12.anInt3767 = 0; + return; + } + for (@Pc(44) MidiNote local44 = (MidiNote) this.aClass3_Sub3_Sub3_1.notes.head(); local44 != null; local44 = (MidiNote) this.aClass3_Sub3_Sub3_1.notes.next()) { + if (local44.channel == local12.channel && local44.anInt3767 < 0 && local44 != local12) { + local12.anInt3767 = 0; + break; + } + } + } + + @OriginalMember(owner = "client!va", name = "f", descriptor = "(I)V") + private void method4435() { + @Pc(8) int local8 = this.anInt5675; + @Pc(11) int local11 = this.anInt5674; + @Pc(20) long local20 = this.aLong188; + if (this.aClass3_Sub29_2 != null && local11 == this.anInt5676) { + this.method4416(this.aBoolean293, this.aClass3_Sub29_2, this.aBoolean294); + this.method4435(); + return; + } + while (this.anInt5674 == local11) { + while (local11 == this.aClass84_1.times[local8]) { + this.aClass84_1.loadTrackPosition(local8); + @Pc(64) int local64 = this.aClass84_1.getNextEvent(local8); + if (local64 == 1) { + this.aClass84_1.loadEndOfTrackPosition(); + this.aClass84_1.saveTrackPosition(local8); + if (this.aClass84_1.hasNextTrack()) { + if (this.aClass3_Sub29_2 != null) { + this.method4431(this.aBoolean293, this.aClass3_Sub29_2); + this.method4435(); + return; + } + if (!this.aBoolean293 || local11 == 0) { + this.method4441(true); + this.aClass84_1.release(); + return; + } + this.aClass84_1.setStartMillis(local20); + } + break; + } + if ((local64 & 0x80) != 0) { + this.method4429(local64); + } + this.aClass84_1.addDeltaTime(local8); + this.aClass84_1.saveTrackPosition(local8); + } + local8 = this.aClass84_1.getNextTrack(); + local11 = this.aClass84_1.times[local8]; + local20 = this.aClass84_1.getTimeMillis(local11); + } + this.anInt5675 = local8; + this.aLong188 = local20; + this.anInt5674 = local11; + if (this.aClass3_Sub29_2 != null && local11 > this.anInt5676) { + this.anInt5675 = -1; + this.anInt5674 = this.anInt5676; + this.aLong188 = this.aClass84_1.getTimeMillis(this.anInt5674); + } + } + + @OriginalMember(owner = "client!va", name = "b", descriptor = "(IIII)V") + private void method4436(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2) { + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(ILclient!mf;)I") + private int method4437(@OriginalArg(1) MidiNote arg0) { + @Pc(5) int local5 = this.anIntArray496[arg0.channel]; + return local5 < 8192 ? arg0.anInt3765 * local5 + 32 >> 6 : 16384 - ((128 - arg0.anInt3765) * (-local5 + 16384) + 32 >> 6); + } + + @OriginalMember(owner = "client!va", name = "c", descriptor = "(I)V") + @Override + public final synchronized void skip(@OriginalArg(0) int arg0) { + if (this.aClass84_1.isValid()) { + @Pc(15) int local15 = this.aClass84_1.division * this.anInt5646 / AudioChannel.sampleRate; + do { + @Pc(25) long local25 = this.aLong189 + (long) arg0 * (long) local15; + if (this.aLong188 - local25 >= 0L) { + this.aLong189 = local25; + break; + } + @Pc(57) int local57 = (int) (((long) local15 + this.aLong188 - this.aLong189 - 1L) / (long) local15); + arg0 -= local57; + this.aLong189 += (long) local57 * (long) local15; + this.aClass3_Sub3_Sub3_1.skip(local57); + this.method4435(); + } while (this.aClass84_1.isValid()); + } + this.aClass3_Sub3_Sub3_1.skip(arg0); + } + + @OriginalMember(owner = "client!va", name = "e", descriptor = "(II)V") + private void method4438(@OriginalArg(0) int arg0) { + if ((this.channelFlags[arg0] & 0x4) == 0) { + return; + } + for (@Pc(24) MidiNote local24 = (MidiNote) this.aClass3_Sub3_Sub3_1.notes.head(); local24 != null; local24 = (MidiNote) this.aClass3_Sub3_Sub3_1.notes.next()) { + if (local24.channel == arg0) { + local24.anInt3775 = 0; + } + } + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(BLclient!mf;)I") + private int method4439(@OriginalArg(1) MidiNote arg0) { + @Pc(6) Midi_Class162 local6 = arg0.aClass162_1; + @Pc(17) int local17 = (arg0.anInt3781 * arg0.anInt3764 >> 12) + arg0.anInt3769; + local17 += this.anIntArray501[arg0.channel] * (this.anIntArray497[arg0.channel] - 8192) >> 12; + @Pc(62) int local62; + if (local6.anInt5814 > 0 && (local6.anInt5809 > 0 || this.anIntArray500[arg0.channel] > 0)) { + local62 = local6.anInt5809 << 2; + @Pc(67) int local67 = local6.anInt5811 << 1; + if (local67 > arg0.anInt3774) { + local62 = arg0.anInt3774 * local62 / local67; + } + local62 += this.anIntArray500[arg0.channel] >> 7; + @Pc(102) double local102 = Math.sin((double) (arg0.anInt3768 & 0x1FF) * 0.01227184630308513D); + local17 += (int) ((double) local62 * local102); + } + local62 = (int) ((double) (arg0.sound.rate * 256) * Math.pow(2.0D, (double) local17 * 3.255208333333333E-4D) / (double) AudioChannel.sampleRate + 0.5D); + return local62 >= 1 ? local62 : 1; + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(Z)I") + public final int getVolume() { + return this.anInt5668; + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(ZB)V") + private void method4441(@OriginalArg(0) boolean arg0) { + if (arg0) { + this.method4422(-1); + } else { + this.method4430(-1); + } + this.method4421(-1); + @Pc(29) int local29; + for (local29 = 0; local29 < 16; local29++) { + this.anIntArray506[local29] = this.anIntArray499[local29]; + } + for (local29 = 0; local29 < 16; local29++) { + this.anIntArray502[local29] = this.anIntArray499[local29] & 0xFFFFFF80; + } + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(Lclient!mf;ZB)V") + public final void method4442(@OriginalArg(0) MidiNote arg0, @OriginalArg(1) boolean arg1) { + @Pc(8) int local8 = arg0.sound.samples.length; + @Pc(27) int local27; + if (arg1 && arg0.sound.aBoolean165) { + @Pc(37) int local37 = local8 + local8 - arg0.sound.start; + local8 <<= 0x8; + local27 = (int) ((long) local37 * (long) this.anIntArray509[arg0.channel] >> 6); + if (local27 >= local8) { + arg0.stream.method409(); + local27 = local8 + local8 - local27 - 1; + } + } else { + local27 = (int) ((long) local8 * (long) this.anIntArray509[arg0.channel] >> 6); + } + arg0.stream.method401(local27); + } + + @OriginalMember(owner = "client!va", name = "f", descriptor = "(II)V") + private void method4443(@OriginalArg(0) int arg0) { + if ((this.channelFlags[arg0] & 0x2) == 0) { + return; + } + for (@Pc(20) MidiNote local20 = (MidiNote) this.aClass3_Sub3_Sub3_1.notes.head(); local20 != null; local20 = (MidiNote) this.aClass3_Sub3_Sub3_1.notes.next()) { + if (arg0 == local20.channel && this.aClass3_Sub25ArrayArray1[arg0][local20.anInt3779] == null && local20.anInt3767 < 0) { + local20.anInt3767 = 0; + } + } + } + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(Lclient!mf;I)Z") + public final boolean method4445(@OriginalArg(0) MidiNote arg0) { + if (arg0.stream != null) { + return false; + } + if (arg0.anInt3767 >= 0) { + arg0.unlink(); + if (arg0.anInt3776 > 0 && this.aClass3_Sub25ArrayArray2[arg0.channel][arg0.anInt3776] == arg0) { + this.aClass3_Sub25ArrayArray2[arg0.channel][arg0.anInt3776] = null; + } + } + return true; + } + + @OriginalMember(owner = "client!va", name = "f", descriptor = "(B)V") + public final synchronized void method4446() { + this.method4448(true); + } + + @OriginalMember(owner = "client!va", name = "g", descriptor = "(II)V") + public final synchronized void setVolume(@OriginalArg(1) int arg0) { + this.anInt5668 = arg0; + } + + @OriginalMember(owner = "client!va", name = "b", descriptor = "(ZB)V") + private synchronized void method4448(@OriginalArg(0) boolean arg0) { + this.aClass84_1.release(); + this.aClass3_Sub29_2 = null; + this.method4441(arg0); + } + + @OriginalMember(owner = "client!va", name = "b", descriptor = "(BLclient!mf;)I") + private int method4449(@OriginalArg(1) MidiNote arg0) { + if (this.anIntArray507[arg0.channel] == 0) { + return 0; + } + @Pc(21) Midi_Class162 local21 = arg0.aClass162_1; + @Pc(37) int local37 = this.anIntArray495[arg0.channel] * this.anIntArray505[arg0.channel] + 4096 >> 13; + @Pc(45) int local45 = local37 * local37 + 16384 >> 15; + @Pc(54) int local54 = arg0.anInt3772 * local45 + 16384 >> 15; + @Pc(63) int local63 = local54 * this.anInt5668 + 128 >> 8; + local37 = this.anIntArray507[arg0.channel] * local63 + 128 >> 8; + if (local21.anInt5815 > 0) { + local37 = (int) (Math.pow(0.5D, (double) arg0.anInt3782 * 1.953125E-5D * (double) local21.anInt5815) * (double) local37 + 0.5D); + } + @Pc(105) int local105; + @Pc(113) int local113; + @Pc(143) int local143; + @Pc(133) int local133; + if (local21.aByteArray80 != null) { + local105 = arg0.anInt3770; + local113 = local21.aByteArray80[arg0.anInt3763 + 1]; + if (local21.aByteArray80.length - 2 > arg0.anInt3763) { + local133 = (local21.aByteArray80[arg0.anInt3763 + 2] & 0xFF) << 8; + local143 = (local21.aByteArray80[arg0.anInt3763] & 0xFF) << 8; + local113 += (local21.aByteArray80[arg0.anInt3763 + 3] - local113) * (local105 - local143) / (local133 - local143); + } + local37 = local113 * local37 + 32 >> 6; + } + if (arg0.anInt3767 > 0 && local21.aByteArray81 != null) { + local105 = arg0.anInt3767; + local113 = local21.aByteArray81[arg0.anInt3777 + 1]; + if (local21.aByteArray81.length - 2 > arg0.anInt3777) { + local143 = (local21.aByteArray81[arg0.anInt3777] & 0xFF) << 8; + local133 = (local21.aByteArray81[arg0.anInt3777 + 2] & 0xFF) << 8; + local113 += (local105 - local143) * (-local113 + local21.aByteArray81[arg0.anInt3777 + 3]) / (local133 - local143); + } + local37 = local37 * local113 + 32 >> 6; + } + return local37; + } + + @OriginalMember(owner = "client!va", name = "d", descriptor = "()Lclient!qb;") + @Override + public final synchronized PcmStream nextSubStream() { + return null; + } +} diff --git a/client/src/main/java/rt4/MidiPlayer.java b/client/src/main/java/rt4/MidiPlayer.java new file mode 100644 index 0000000..609f96c --- /dev/null +++ b/client/src/main/java/rt4/MidiPlayer.java @@ -0,0 +1,167 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class MidiPlayer { + @OriginalMember(owner = "client!le", name = "k", descriptor = "Z") + public static boolean jingle = false; + @OriginalMember(owner = "client!cb", name = "hb", descriptor = "Lclient!le;") + public static SoundBank soundBank; + @OriginalMember(owner = "client!bd", name = "i", descriptor = "I") + public static int state = 0; + @OriginalMember(owner = "client!uh", name = "P", descriptor = "Lclient!ve;") + public static Js5 vorbisArchive; + @OriginalMember(owner = "client!ui", name = "R", descriptor = "I") + public static int volume; + @OriginalMember(owner = "client!wi", name = "ab", descriptor = "I") + public static int songGroupId; + @OriginalMember(owner = "client!eg", name = "t", descriptor = "I") + public static int volumeFadeRate; + @OriginalMember(owner = "client!fl", name = "u", descriptor = "Z") + public static boolean aBoolean116; + @OriginalMember(owner = "client!rb", name = "f", descriptor = "Lclient!ve;") + public static Js5 instrumentsArchive; + @OriginalMember(owner = "client!gd", name = "m", descriptor = "Lclient!ve;") + public static Js5 synthArchive; + @OriginalMember(owner = "client!le", name = "c", descriptor = "Lclient!rf;") + public static Song song; + @OriginalMember(owner = "client!nj", name = "g", descriptor = "Lclient!ve;") + public static Js5 songArchive; + @OriginalMember(owner = "client!nj", name = "e", descriptor = "Lclient!va;") + public static MidiPcmStream stream; + @OriginalMember(owner = "client!sf", name = "j", descriptor = "I") + public static int songFileId; + + @OriginalMember(owner = "client!km", name = "c", descriptor = "(Z)Z") + public static boolean method2699() { + try { + if (state == 2) { + if (song == null) { + song = Song.create(songArchive, songGroupId, songFileId); + if (song == null) { + return false; + } + } + if (soundBank == null) { + soundBank = new SoundBank(synthArchive, vorbisArchive); + } + if (stream.isSongReady(song, instrumentsArchive, soundBank)) { + stream.releaseInstruments(); + stream.setVolume(volume); + stream.method4431(aBoolean116, song); + state = 0; + song = null; + soundBank = null; + songArchive = null; + return true; + } + } + } catch (@Pc(68) Exception ex) { + ex.printStackTrace(); + stream.method4446(); + songArchive = null; + song = null; + state = 0; + soundBank = null; + } + return false; + } + + @OriginalMember(owner = "client!ce", name = "a", descriptor = "(II)V") + public static void playFadeOut() { + volume = 0; + songFileId = -1; + state = 1; + volumeFadeRate = 2; + aBoolean116 = false; + songArchive = null; + songGroupId = -1; + } + + @OriginalMember(owner = "client!v", name = "a", descriptor = "(ZIILclient!ve;ZII)V") + public static void playFadeOut(@OriginalArg(1) int group, @OriginalArg(3) Js5 archive, @OriginalArg(5) int arg2) { + songArchive = archive; + songFileId = 0; + songGroupId = group; + aBoolean116 = false; + state = 1; + volumeFadeRate = 2; + volume = arg2; + } + + @OriginalMember(owner = "client!ck", name = "a", descriptor = "(ILclient!va;Lclient!ve;Lclient!ve;Lclient!ve;)Z") + public static boolean init(@OriginalArg(1) MidiPcmStream pcmStream, @OriginalArg(2) Js5 instruments, @OriginalArg(3) Js5 vorbis, @OriginalArg(4) Js5 synth) { + instrumentsArchive = instruments; + synthArchive = synth; + vorbisArchive = vorbis; + stream = pcmStream; + return true; + } + + @OriginalMember(owner = "client!sj", name = "a", descriptor = "(Z)V") + public static void loop() { + try { + if (state == 1) { + @Pc(16) int volume = stream.getVolume(); + if (volume > 0 && stream.isValid()) { + volume -= volumeFadeRate; + if (volume < 0) { + volume = 0; + } + stream.setVolume(volume); + return; + } + stream.method4446(); + stream.clearInstruments(); + song = null; + soundBank = null; + if (songArchive == null) { + state = 0; + } else { + state = 2; + } + } + } catch (@Pc(62) Exception ex) { + ex.printStackTrace(); + stream.method4446(); + songArchive = null; + song = null; + state = 0; + soundBank = null; + } + } + + @OriginalMember(owner = "client!kk", name = "a", descriptor = "(I)Z") + public static boolean isPlaying() { + return state != 0 || stream.isValid(); + } + + @OriginalMember(owner = "client!jh", name = "a", descriptor = "(Lclient!ve;ZIIZI)V") + public static void playImmediate(@OriginalArg(0) Js5 archive, @OriginalArg(2) int group, @OriginalArg(5) int vol) { + songArchive = archive; + state = 1; + volume = vol; + songFileId = 0; + songGroupId = group; + aBoolean116 = false; + volumeFadeRate = 10000; + } + + @OriginalMember(owner = "client!th", name = "a", descriptor = "(Z)V") + public static void method4548() { + stream.method4446(); + state = 1; + songArchive = null; + } + + @OriginalMember(owner = "client!sj", name = "c", descriptor = "(II)V") + public static void method3956(@OriginalArg(0) int arg0) { + if (state == 0) { + stream.setVolume(arg0); + } else { + volume = arg0; + } + } +} diff --git a/client/src/main/java/rt4/Midi_Class162.java b/client/src/main/java/rt4/Midi_Class162.java new file mode 100644 index 0000000..51ea743 --- /dev/null +++ b/client/src/main/java/rt4/Midi_Class162.java @@ -0,0 +1,35 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!wh") +public final class Midi_Class162 { + + @OriginalMember(owner = "client!wh", name = "a", descriptor = "I") + public int anInt5807; + + @OriginalMember(owner = "client!wh", name = "b", descriptor = "[B") + public byte[] aByteArray80; + + @OriginalMember(owner = "client!wh", name = "e", descriptor = "I") + public int anInt5809; + + @OriginalMember(owner = "client!wh", name = "f", descriptor = "I") + public int anInt5810; + + @OriginalMember(owner = "client!wh", name = "h", descriptor = "I") + public int anInt5811; + + @OriginalMember(owner = "client!wh", name = "k", descriptor = "I") + public int anInt5813; + + @OriginalMember(owner = "client!wh", name = "p", descriptor = "[B") + public byte[] aByteArray81; + + @OriginalMember(owner = "client!wh", name = "q", descriptor = "I") + public int anInt5814; + + @OriginalMember(owner = "client!wh", name = "r", descriptor = "I") + public int anInt5815; +} diff --git a/client/src/main/java/rt4/MillisTimer.java b/client/src/main/java/rt4/MillisTimer.java new file mode 100644 index 0000000..0aa7130 --- /dev/null +++ b/client/src/main/java/rt4/MillisTimer.java @@ -0,0 +1,94 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!lj") +public final class MillisTimer extends Timer { + + @OriginalMember(owner = "client!lj", name = "o", descriptor = "I") + private int anInt3549; + + @OriginalMember(owner = "client!lj", name = "x", descriptor = "[J") + private final long[] aLongArray4 = new long[10]; + + @OriginalMember(owner = "client!lj", name = "r", descriptor = "I") + private int anInt3550 = 256; + + @OriginalMember(owner = "client!lj", name = "u", descriptor = "I") + private int anInt3552 = 1; + + @OriginalMember(owner = "client!lj", name = "v", descriptor = "I") + private int anInt3553 = 0; + + @OriginalMember(owner = "client!lj", name = "k", descriptor = "J") + private long aLong122 = MonotonicClock.currentTimeMillis(); + + @OriginalMember(owner = "client!lj", name = "", descriptor = "()V") + public MillisTimer() { + for (@Pc(22) int local22 = 0; local22 < 10; local22++) { + this.aLongArray4[local22] = this.aLong122; + } + } + + @OriginalMember(owner = "client!lj", name = "b", descriptor = "(I)V") + @Override + public final void reset() { + for (@Pc(7) int local7 = 0; local7 < 10; local7++) { + this.aLongArray4[local7] = 0L; + } + } + + @OriginalMember(owner = "client!lj", name = "a", descriptor = "(III)I") + @Override + public final int sleep(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + @Pc(17) int local17 = this.anInt3552; + @Pc(20) int local20 = this.anInt3550; + this.anInt3550 = 300; + this.anInt3552 = 1; + this.aLong122 = MonotonicClock.currentTimeMillis(); + if (this.aLongArray4[this.anInt3549] == 0L) { + this.anInt3550 = local20; + this.anInt3552 = local17; + } else if (this.aLongArray4[this.anInt3549] < this.aLong122) { + this.anInt3550 = (int) ((long) (arg1 * 2560) / (this.aLong122 - this.aLongArray4[this.anInt3549])); + } + if (this.anInt3550 < 25) { + this.anInt3550 = 25; + } + if (this.anInt3550 > 256) { + this.anInt3550 = 256; + this.anInt3552 = (int) ((long) arg1 - (this.aLong122 - this.aLongArray4[this.anInt3549]) / 10L); + } + if (arg1 < this.anInt3552) { + this.anInt3552 = arg1; + } + this.aLongArray4[this.anInt3549] = this.aLong122; + this.anInt3549 = (this.anInt3549 + 1) % 10; + @Pc(139) int local139; + if (this.anInt3552 > 1) { + for (local139 = 0; local139 < 10; local139++) { + if (this.aLongArray4[local139] != 0L) { + this.aLongArray4[local139] += this.anInt3552; + } + } + } + if (arg0 > this.anInt3552) { + this.anInt3552 = arg0; + } + ThreadUtils.sleep(this.anInt3552); + local139 = 0; + while (this.anInt3553 < 256) { + this.anInt3553 += this.anInt3550; + local139++; + } + this.anInt3553 &= 0xFF; + return local139; + } + + public int count(int arg0, int arg1) { + return 1; + } +} diff --git a/client/src/main/java/rt4/MiniMap.java b/client/src/main/java/rt4/MiniMap.java new file mode 100644 index 0000000..bcc5ef6 --- /dev/null +++ b/client/src/main/java/rt4/MiniMap.java @@ -0,0 +1,652 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class MiniMap { + @OriginalMember(owner = "client!ke", name = "T", descriptor = "[[I") + public static final int[][] anIntArrayArray24 = new int[][]{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1}, {1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1}, {1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1}}; + @OriginalMember(owner = "client!wc", name = "h", descriptor = "[[I") + public static final int[][] anIntArrayArray46 = new int[][]{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, {12, 8, 4, 0, 13, 9, 5, 1, 14, 10, 6, 2, 15, 11, 7, 3}, {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, {3, 7, 11, 15, 2, 6, 10, 14, 1, 5, 9, 13, 0, 4, 8, 12}}; + @OriginalMember(owner = "client!qc", name = "ab", descriptor = "[I") + public static final int[] locId = new int[1000]; + @OriginalMember(owner = "client!lf", name = "d", descriptor = "[I") + public static final int[] locX = new int[1000]; + @OriginalMember(owner = "client!he", name = "eb", descriptor = "[I") + public static final int[] locZ = new int[1000]; + @OriginalMember(owner = "client!ld", name = "b", descriptor = "[Lclient!nc;") + public static final MapMarker[] hintMapMarkers = new MapMarker[4]; + @OriginalMember(owner = "client!ld", name = "d", descriptor = "Lclient!na;") + public static final JagString aClass100_668 = JagString.parse("Hidden)2use"); + @OriginalMember(owner = "client!ef", name = "j", descriptor = "Lclient!mm;") + public static SoftwareSprite softwareSprite; + @OriginalMember(owner = "client!ha", name = "i", descriptor = "Lclient!qf;") + public static Sprite sprite; + @OriginalMember(owner = "client!ug", name = "m", descriptor = "I") + public static int locs = 0; + @OriginalMember(owner = "client!wb", name = "d", descriptor = "I") + public static int state = 0; + @OriginalMember(owner = "client!we", name = "w", descriptor = "I") + public static int anInt4130 = 0; + @OriginalMember(owner = "client!ej", name = "W", descriptor = "I") + public static int anInt1814 = 0; + @OriginalMember(owner = "client!vg", name = "d", descriptor = "I") + public static int anInt5755 = 2; + @OriginalMember(owner = "client!oe", name = "n", descriptor = "I") + public static int anInt4262 = 1; + @OriginalMember(owner = "client!gi", name = "H", descriptor = "I") + public static int anInt2252 = 0; + @OriginalMember(owner = "client!nf", name = "i", descriptor = "I") + public static int anInt4075 = -1; + @OriginalMember(owner = "client!se", name = "h", descriptor = "I") + public static int anInt5073 = -1; + @OriginalMember(owner = "client!sd", name = "R", descriptor = "I") + public static int anInt5062; + + @OriginalMember(owner = "client!ma", name = "a", descriptor = "([IIIIII)V") + public static void renderTile(@OriginalArg(0) int[] pixels, @OriginalArg(1) int index, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + @Pc(7) Tile local7 = SceneGraph.tiles[arg2][arg3][arg4]; + if (local7 == null) { + return; + } + @Pc(13) PlainTile local13 = local7.plainTile; + @Pc(23) int local23; + if (local13 != null) { + @Pc(18) int local18 = local13.anInt4871; + if (local18 != 0) { + for (local23 = 0; local23 < 4; local23++) { + pixels[index] = local18; + pixels[index + 1] = local18; + pixels[index + 2] = local18; + pixels[index + 3] = local18; + index += 512; + } + } + return; + } + @Pc(58) ShapedTile local58 = local7.shapedTile; + if (local58 == null) { + return; + } + local23 = local58.anInt1966; + @Pc(67) int local67 = local58.anInt1967; + @Pc(70) int local70 = local58.anInt1969; + @Pc(73) int local73 = local58.anInt1968; + @Pc(77) int[] local77 = anIntArrayArray24[local23]; + @Pc(81) int[] local81 = anIntArrayArray46[local67]; + @Pc(83) int local83 = 0; + @Pc(87) int local87; + if (local70 != 0) { + for (local87 = 0; local87 < 4; local87++) { + pixels[index] = local77[local81[local83++]] == 0 ? local70 : local73; + pixels[index + 1] = local77[local81[local83++]] == 0 ? local70 : local73; + pixels[index + 2] = local77[local81[local83++]] == 0 ? local70 : local73; + pixels[index + 3] = local77[local81[local83++]] == 0 ? local70 : local73; + index += 512; + } + return; + } + for (local87 = 0; local87 < 4; local87++) { + if (local77[local81[local83++]] != 0) { + pixels[index] = local73; + } + if (local77[local81[local83++]] != 0) { + pixels[index + 1] = local73; + } + if (local77[local81[local83++]] != 0) { + pixels[index + 2] = local73; + } + if (local77[local81[local83++]] != 0) { + pixels[index + 3] = local73; + } + index += 512; + } + } + + @OriginalMember(owner = "client!kl", name = "b", descriptor = "(II)Z") + public static boolean renderMap(@OriginalArg(1) int arg0) { + @Pc(35) int local35; + @Pc(37) int local37; + @Pc(76) int local76; + @Pc(80) int local80; + if (softwareSprite == null) { + if (GlRenderer.enabled || sprite == null) { + softwareSprite = new SoftwareSprite(512, 512); + } else { + softwareSprite = (SoftwareSprite) sprite; + } + @Pc(32) int[] local32 = softwareSprite.pixels; + local35 = local32.length; + for (local37 = 0; local37 < local35; local37++) { + local32[local37] = 1; + } + for (local37 = 1; local37 < 103; local37++) { + local76 = 4 * 512 * (103 - local37) + 24628; + for (local80 = 1; local80 < 103; local80++) { + if ((SceneGraph.renderFlags[arg0][local80][local37] & 0x18) == 0) { + renderTile(local32, local76, arg0, local80, local37); + } + if (arg0 < 3 && (SceneGraph.renderFlags[arg0 + 1][local80][local37] & 0x8) != 0) { + renderTile(local32, local76, arg0 + 1, local80, local37); + } + local76 += 4; + } + } + locs = 0; + for (local37 = 0; local37 < 104; local37++) { + for (local76 = 0; local76 < 104; local76++) { + @Pc(169) long local169 = SceneGraph.getGroundDecorKey(Player.plane, local37 + 0, local76); + if (local169 != 0L) { + @Pc(184) LocType local184 = LocTypeList.get((int) (local169 >>> 32) & Integer.MAX_VALUE); + @Pc(187) int local187 = local184.mapfunction; + @Pc(194) int local194; + if (local184.multiLocs != null) { + for (local194 = 0; local194 < local184.multiLocs.length; local194++) { + if (local184.multiLocs[local194] != -1) { + @Pc(216) LocType local216 = LocTypeList.get(local184.multiLocs[local194]); + if (local216.mapfunction >= 0) { + local187 = local216.mapfunction; + break; + } + } + } + } + if (local187 >= 0) { + @Pc(237) int local237 = local76; + local194 = local37; + if (local187 != 22 && local187 != 29 && local187 != 34 && local187 != 36 && local187 != 46 && local187 != 47 && local187 != 48) { + @Pc(269) int[][] local269 = PathFinder.collisionMaps[Player.plane].flags; + for (@Pc(271) int local271 = 0; local271 < 10; local271++) { + @Pc(281) int local281 = (int) (Math.random() * 4.0D); + if (local281 == 0 && local194 > 0 && local37 - 3 < local194 && (local269[local194 - 1][local237] & 0x12C0108) == 0) { + local194--; + } + if (local281 == 1 && local194 < 103 && local37 + 3 > local194 && (local269[local194 + 1][local237] & 0x12C0180) == 0) { + local194++; + } + if (local281 == 2 && local237 > 0 && local76 - 3 < local237 && (local269[local194][local237 - 1] & 0x12C0102) == 0) { + local237--; + } + if (local281 == 3 && local237 < 103 && local237 < local76 + 3 && (local269[local194][local237 + 1] & 0x12C0120) == 0) { + local237++; + } + } + } + locId[locs] = local184.id; + locX[locs] = local194; + locZ[locs] = local237; + locs++; + } + } + } + } + } + softwareSprite.makeTarget(); + @Pc(455) int local455 = ((int) (Math.random() * 20.0D) + 238 - 10 << 8) + ((int) (Math.random() * 20.0D) + 238 - 10 << 16) + (int) (Math.random() * 20.0D) + 228; + local35 = (int) (Math.random() * 20.0D) + 238 - 10 << 16; + for (local37 = 1; local37 < 103; local37++) { + for (local76 = 1; local76 < 103; local76++) { + if ((SceneGraph.renderFlags[arg0][local76][local37] & 0x18) == 0 && !method3109(local76, local455, local37, local35, arg0)) { + if (GlRenderer.enabled) { + SoftwareRaster.pixels = null; + } else { + SoftwareRaster.frameBuffer.makeTarget(); + } + return false; + } + if (arg0 < 3 && (SceneGraph.renderFlags[arg0 + 1][local76][local37] & 0x8) != 0 && !method3109(local76, local455, local37, local35, arg0 + 1)) { + if (GlRenderer.enabled) { + SoftwareRaster.pixels = null; + } else { + SoftwareRaster.frameBuffer.makeTarget(); + } + return false; + } + } + } + if (GlRenderer.enabled) { + @Pc(576) int[] local576 = softwareSprite.pixels; + local76 = local576.length; + for (local80 = 0; local80 < local76; local80++) { + if (local576[local80] == 0) { + local576[local80] = 1; + } + } + sprite = new GlSprite(softwareSprite); + } else { + sprite = softwareSprite; + } + if (GlRenderer.enabled) { + SoftwareRaster.pixels = null; + } else { + SoftwareRaster.frameBuffer.makeTarget(); + } + softwareSprite = null; + return true; + } + + @OriginalMember(owner = "client!ed", name = "a", descriptor = "(IBIILclient!be;)V") + public static void render(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) Component arg3) { + client.audioLoop(); + if (GlRenderer.enabled) { + GlRaster.setClip(arg2, arg1, arg2 + arg3.width, arg1 + arg3.height); + } else { + SoftwareRaster.setClip(arg2, arg1, arg2 + arg3.width, arg1 + arg3.height); + } + if (state != 2 && state != 5 && sprite != null) { + @Pc(48) int local48 = anInt1814 + (int) Camera.yawTarget & 0x7FF; + @Pc(57) int local57 = PlayerList.self.xFine / 32 + 48; + @Pc(67) int local67 = 464 - PlayerList.self.zFine / 32; + if (GlRenderer.enabled) { + ((GlSprite) sprite).renderRotatedTransparent(arg2, arg1, arg3.width, arg3.height, local57, local67, local48, anInt4130 + 256, (GlSprite) arg3.method489(false)); + } else { + ((SoftwareSprite) sprite).renderRotated(arg2, arg1, arg3.width, arg3.height, local57, local67, local48, anInt4130 + 256, arg3.anIntArray37, arg3.anIntArray45); + } + @Pc(146) int local146; + @Pc(181) int local181; + @Pc(150) int local150; + @Pc(154) int local154; + @Pc(231) int local231; + @Pc(200) int local200; + @Pc(239) int local239; + @Pc(271) int local271; + if (LoginManager.mapElementList != null) { + for (@Pc(117) int local117 = 0; local117 < LoginManager.mapElementList.anInt5074; local117++) { + if (LoginManager.mapElementList.method3892(local117)) { + local146 = (LoginManager.mapElementList.aShortArray73[local117] - Camera.originX) * 4 + 2 - PlayerList.self.xFine / 32; + local150 = MathUtils.sin[local48]; + local154 = MathUtils.cos[local48]; + @Pc(156) Font local156 = Fonts.p11Full; + @Pc(164) int local164 = local150 * 256 / (anInt4130 + 256); + local181 = (LoginManager.mapElementList.aShortArray72[local117] - Camera.originZ) * 4 + 2 - PlayerList.self.zFine / 32; + @Pc(189) int local189 = local154 * 256 / (anInt4130 + 256); + local200 = local181 * local189 - local146 * local164 >> 16; + if (LoginManager.mapElementList.method3894(local117) == 1) { + local156 = Fonts.p12Full; + } + if (LoginManager.mapElementList.method3894(local117) == 2) { + local156 = Fonts.b12Full; + } + local231 = local164 * local181 + local189 * local146 >> 16; + local239 = local156.getMaxLineWidth(LoginManager.mapElementList.aClass100Array153[local117], 100); + @Pc(245) int local245 = local231 - local239 / 2; + if (local245 >= -arg3.width && local245 <= arg3.width && local200 >= -arg3.height && local200 <= arg3.height) { + local271 = 16777215; + if (LoginManager.mapElementList.anIntArray444[local117] != -1) { + local271 = LoginManager.mapElementList.anIntArray444[local117]; + } + if (GlRenderer.enabled) { + GlFont.method1188((GlSprite) arg3.method489(false)); + } else { + SoftwareRaster.method2486(arg3.anIntArray37, arg3.anIntArray45); + } + local156.renderParagraphAlpha(LoginManager.mapElementList.aClass100Array153[local117], arg2 + local245 + arg3.width / 2, arg1 + arg3.height / 2 + -local200, local239, 50, local271, 0, 1, 0, 0); + if (GlRenderer.enabled) { + GlFont.method1173(); + } else { + SoftwareRaster.method2482(); + } + } + } + } + } + for (local146 = 0; local146 < locs; local146++) { + local181 = locX[local146] * 4 + 2 - PlayerList.self.xFine / 32; + local150 = locZ[local146] * 4 + 2 - PlayerList.self.zFine / 32; + @Pc(382) LocType local382 = LocTypeList.get(locId[local146]); + if (local382.multiLocs != null) { + local382 = local382.getMultiLoc(); + if (local382 == null || local382.mapfunction == -1) { + continue; + } + } + method1446(arg3, Sprites.mapfuncs[local382.mapfunction], local150, local181, arg1, arg2); + } + for (local146 = 0; local146 < 104; local146++) { + for (local181 = 0; local181 < 104; local181++) { + @Pc(439) LinkedList local439 = SceneGraph.objStacks[Player.plane][local146][local181]; + if (local439 != null) { + local154 = local146 * 4 + 2 - PlayerList.self.xFine / 32; + local231 = local181 * 4 + 2 - PlayerList.self.zFine / 32; + method1446(arg3, Sprites.mapdots[0], local231, local154, arg1, arg2); + } + } + } + for (local146 = 0; local146 < NpcList.size; local146++) { + @Pc(498) Npc local498 = NpcList.npcs[NpcList.ids[local146]]; + if (local498 != null && local498.isVisible()) { + @Pc(507) NpcType local507 = local498.type; + if (local507 != null && local507.multiNpcs != null) { + local507 = local507.getMultiNpc(); + } + if (local507 != null && local507.minimapdisplay && local507.interactive) { + local154 = local498.xFine / 32 - PlayerList.self.xFine / 32; + local231 = local498.zFine / 32 - PlayerList.self.zFine / 32; + if (local507.minimapmarkerobjectentry == -1) { + method1446(arg3, Sprites.mapdots[1], local231, local154, arg1, arg2); + } else { + method1446(arg3, Sprites.mapfuncs[local507.minimapmarkerobjectentry], local231, local154, arg1, arg2); + } + } + } + } + for (local146 = 0; local146 < PlayerList.size; local146++) { + @Pc(591) Player local591 = PlayerList.players[PlayerList.ids[local146]]; + if (local591 != null && local591.isVisible()) { + local154 = local591.zFine / 32 - PlayerList.self.zFine / 32; + local150 = local591.xFine / 32 - PlayerList.self.xFine / 32; + @Pc(624) long local624 = local591.username.encode37(); + @Pc(626) boolean local626 = false; + for (local239 = 0; local239 < FriendsList.size; local239++) { + if (local624 == FriendsList.encodedUsernames[local239] && FriendsList.worlds[local239] != 0) { + local626 = true; + break; + } + } + @Pc(660) boolean local660 = false; + for (local271 = 0; local271 < ClanChat.size; local271++) { + if (local624 == ClanChat.members[local271].key) { + local660 = true; + break; + } + } + @Pc(682) boolean local682 = PlayerList.self.anInt1650 != 0 && local591.anInt1650 != 0 && local591.anInt1650 == PlayerList.self.anInt1650; + if (local626) { + method1446(arg3, Sprites.mapdots[3], local154, local150, arg1, arg2); + } else if (local660) { + method1446(arg3, Sprites.mapdots[5], local154, local150, arg1, arg2); + } else if (local682) { + method1446(arg3, Sprites.mapdots[4], local154, local150, arg1, arg2); + } else { + method1446(arg3, Sprites.mapdots[2], local154, local150, arg1, arg2); + } + } + } + @Pc(756) MapMarker[] local756 = hintMapMarkers; + for (local181 = 0; local181 < local756.length; local181++) { + @Pc(770) MapMarker local770 = local756[local181]; + if (local770 != null && local770.type != 0 && client.loop % 20 < 10) { + if (local770.type == 1 && local770.actorTargetId >= 0 && local770.actorTargetId < NpcList.npcs.length) { + @Pc(804) Npc local804 = NpcList.npcs[local770.actorTargetId]; + if (local804 != null) { + local231 = local804.xFine / 32 - PlayerList.self.xFine / 32; + local200 = local804.zFine / 32 - PlayerList.self.zFine / 32; + method1960(local770.anInt4048, arg1, arg2, local231, local200, arg3); + } + } + if (local770.type == 2) { + local154 = (local770.targetX - Camera.originX) * 4 + 2 - PlayerList.self.xFine / 32; + local231 = (-Camera.originZ + local770.anInt4046) * 4 + 2 - PlayerList.self.zFine / 32; + method1960(local770.anInt4048, arg1, arg2, local154, local231, arg3); + } + if (local770.type == 10 && local770.actorTargetId >= 0 && PlayerList.players.length > local770.actorTargetId) { + @Pc(905) Player local905 = PlayerList.players[local770.actorTargetId]; + if (local905 != null) { + local200 = local905.zFine / 32 - PlayerList.self.zFine / 32; + local231 = local905.xFine / 32 - PlayerList.self.xFine / 32; + method1960(local770.anInt4048, arg1, arg2, local231, local200, arg3); + } + } + } + } + if (LoginManager.mapFlagX != 0) { + local146 = LoginManager.mapFlagX * 4 + 2 - PlayerList.self.xFine / 32; + local181 = LoginManager.mapFlagZ * 4 + 2 - PlayerList.self.zFine / 32; + method1446(arg3, Sprites.mapflags, local181, local146, arg1, arg2); + } + if (GlRenderer.enabled) { + GlRaster.fillRect(arg2 + arg3.width / 2 - 1, arg1 + -1 - -(arg3.height / 2), 3, 3, 16777215); + } else { + SoftwareRaster.fillRect(arg3.width / 2 + arg2 - 1, arg3.height / 2 + -1 + arg1, 3, 3, 16777215); + } + } else if (GlRenderer.enabled) { + @Pc(1041) Sprite local1041 = arg3.method489(false); + if (local1041 != null) { + local1041.render(arg2, arg1); + } + } else { + SoftwareRaster.method2504(arg2, arg1, arg3.anIntArray37, arg3.anIntArray45); + } + InterfaceList.rectangleRedraw[arg0] = true; + } + + @OriginalMember(owner = "client!em", name = "a", descriptor = "(Lclient!be;Lclient!qf;IIIBI)V") + public static void method1446(@OriginalArg(0) Component arg0, @OriginalArg(1) Sprite arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(6) int arg5) { + if (arg1 == null) { + return; + } + @Pc(21) int local21 = arg3 * arg3 + arg2 * arg2; + @Pc(27) int local27 = anInt1814 + (int) Camera.yawTarget & 0x7FF; + @Pc(39) int local39 = Math.max(arg0.width / 2, arg0.height / 2) + 10; + if (local39 * local39 < local21) { + return; + } + @Pc(50) int local50 = MathUtils.sin[local27]; + @Pc(58) int local58 = local50 * 256 / (anInt4130 + 256); + @Pc(62) int local62 = MathUtils.cos[local27]; + @Pc(70) int local70 = local62 * 256 / (anInt4130 + 256); + @Pc(81) int local81 = local58 * arg2 + arg3 * local70 >> 16; + @Pc(92) int local92 = local70 * arg2 - arg3 * local58 >> 16; + if (GlRenderer.enabled) { + ((GlSprite) arg1).method1425(arg0.width / 2 + arg5 + local81 - arg1.anInt1860 / 2, arg0.height / 2 + arg4 - (local92 + arg1.anInt1866 / 2), (GlSprite) arg0.method489(false)); + } else { + ((SoftwareSprite) arg1).method312(arg0.width / 2 + arg5 + local81 - arg1.anInt1860 / 2, -(arg1.anInt1866 / 2) + arg0.height / 2 + arg4 + -local92, arg0.anIntArray37, arg0.anIntArray45); + } + } + + @OriginalMember(owner = "client!hi", name = "a", descriptor = "(IIIIILclient!be;Z)V") + public static void method1960(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) Component arg5) { + @Pc(13) int local13 = arg3 * arg3 + arg4 * arg4; + if (local13 > 360000) { + return; + } + @Pc(30) int local30 = Math.min(arg5.width / 2, arg5.height / 2); + if (local30 * local30 >= local13) { + method1446(arg5, Sprites.mapmarkhints[arg0], arg4, arg3, arg1, arg2); + return; + } + local30 -= 10; + @Pc(58) int local58 = anInt1814 + (int) Camera.yawTarget & 0x7FF; + @Pc(62) int local62 = MathUtils.cos[local58]; + @Pc(66) int local66 = MathUtils.sin[local58]; + @Pc(74) int local74 = local66 * 256 / (anInt4130 + 256); + @Pc(82) int local82 = local62 * 256 / (anInt4130 + 256); + @Pc(93) int local93 = arg4 * local74 + local82 * arg3 >> 16; + @Pc(104) int local104 = arg4 * local82 - local74 * arg3 >> 16; + @Pc(110) double local110 = Math.atan2(local93, local104); + @Pc(117) int local117 = (int) (Math.sin(local110) * (double) local30); + @Pc(124) int local124 = (int) (Math.cos(local110) * (double) local30); + if (GlRenderer.enabled) { + ((GlSprite) Sprites.hintMapEdge[arg0]).method1428((arg5.width / 2 + arg2 + local117) * 16, (arg5.height / 2 + arg1 - local124) * 16, (int) (local110 * 10430.378D)); + } else { + ((SoftwareSprite) Sprites.hintMapEdge[arg0]).method306(local117 + arg5.width / 2 + arg2 - 10, arg5.height / 2 + -10 + arg1 + -local124, local110); + } + } + + @OriginalMember(owner = "client!hi", name = "a", descriptor = "(Lclient!be;B)Lclient!na;") + public static JagString getTargetVerb(@OriginalArg(0) Component arg0) { + if (InterfaceList.getServerActiveProperties(arg0).getTargetMask() == 0) { + return null; + } else if (arg0.optionCircumfix == null || arg0.optionCircumfix.trim().length() == 0) { + return Cheat.qaOpTest ? aClass100_668 : null; + } else { + return arg0.optionCircumfix; + } + } + + @OriginalMember(owner = "client!cj", name = "a", descriptor = "(ILclient!pb;ZIIII)Z") + public static boolean renderScenery(@OriginalArg(0) int arg0, @OriginalArg(1) LocType arg1, @OriginalArg(5) int arg2, @OriginalArg(6) int arg3) { + @Pc(10) MsiType msiType = MsiTypeList.get(arg1.mapscene); + if (msiType.spriteId == -1) { + return true; + } + if (arg1.mapSceneRotated) { + @Pc(24) int local24 = arg3 + arg1.mapSceneAngleOffset; + arg3 = local24 & 0x3; + } else { + arg3 = 0; + } + @Pc(42) SoftwareIndexedSprite local42 = msiType.getSprite(arg3); + if (local42 == null) { + return false; + } + @Pc(49) int local49 = arg1.width; + @Pc(52) int local52 = arg1.length; + if ((arg3 & 0x1) == 1) { + local49 = arg1.length; + local52 = arg1.width; + } + @Pc(66) int local66 = local42.innerWidth; + @Pc(69) int local69 = local42.innerHeight; + if (msiType.aBoolean2) { + local69 = local52 * 4; + local66 = local49 * 4; + } + if (msiType.anInt11 == 0) { + local42.method1398(arg0 * 4 + 48, (-local52 + -arg2 + 104) * 4 + 48, local66, local69); + } else { + local42.method1390(arg0 * 4 + 48, (-local52 + -arg2 + 104) * 4 + 48, local66, local69, msiType.anInt11); + } + return true; + } + + @OriginalMember(owner = "client!t", name = "a", descriptor = "(IIIZIII)V") + public static void method4000(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5) { + @Pc(3) int local3 = 0; + @Pc(5) MapMarker[] local5 = hintMapMarkers; + while (local5.length > local3) { + @Pc(17) MapMarker local17 = local5[local3]; + if (local17 != null && local17.type == 2) { + ScriptRunner.method1026(arg0 >> 1, arg4, (local17.anInt4046 - Camera.originZ << 7) + local17.anInt4047, local17.anInt4050 * 2, arg2 >> 1, local17.anInt4045 + (local17.targetX - Camera.originX << 7), arg3); + if (ScriptRunner.anInt1951 > -1 && client.loop % 20 < 10) { + Sprites.headhints[local17.anInt4048].render(arg1 + ScriptRunner.anInt1951 - 12, arg5 + -28 - -ScriptRunner.anInt548); + } + } + local3++; + } + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(IIIIIIIZ)Z") + public static boolean method3109(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(6) int arg4) { + @Pc(14) long local14 = SceneGraph.getWallKey(arg4, arg0 + 0, arg2); + @Pc(28) int local28; + @Pc(35) int local35; + @Pc(42) int local42; + @Pc(46) LocType local46; + @Pc(65) int local65; + @Pc(75) int[] local75; + @Pc(90) int local90; + if (local14 != 0L) { + local28 = (int) local14 >> 20 & 0x3; + local35 = (int) local14 >> 14 & 0x1F; + local42 = Integer.MAX_VALUE & (int) (local14 >>> 32); + local46 = LocTypeList.get(local42); + if (local46.mapscene == -1) { + local65 = arg1; + if (local14 > 0L) { + local65 = arg3; + } + local75 = SoftwareRaster.pixels; + local90 = (52736 - arg2 * 512) * 4 + arg0 * 4 + 24624; + if (local35 == 0 || local35 == 2) { + if (local28 == 0) { + local75[local90] = local65; + local75[local90 + 512] = local65; + local75[local90 + 1024] = local65; + local75[local90 + 1536] = local65; + } else if (local28 == 1) { + local75[local90] = local65; + local75[local90 + 1] = local65; + local75[local90 + 2] = local65; + local75[local90 + 3] = local65; + } else if (local28 == 2) { + local75[local90 + 3] = local65; + local75[local90 + 3 + 512] = local65; + local75[local90 + 3 + 1024] = local65; + local75[local90 + 3 + 1536] = local65; + } else if (local28 == 3) { + local75[local90 + 1536] = local65; + local75[local90 + 1536 + 1] = local65; + local75[local90 + 1538] = local65; + local75[local90 + 3 + 1536] = local65; + } + } + if (local35 == 3) { + if (local28 == 0) { + local75[local90] = local65; + } else if (local28 == 1) { + local75[local90 + 3] = local65; + } else if (local28 == 2) { + local75[local90 + 3 + 1536] = local65; + } else if (local28 == 3) { + local75[local90 + 1536] = local65; + } + } + if (local35 == 2) { + if (local28 == 3) { + local75[local90] = local65; + local75[local90 + 512] = local65; + local75[local90 + 1024] = local65; + local75[local90 + 1536] = local65; + } else if (local28 == 0) { + local75[local90] = local65; + local75[local90 + 1] = local65; + local75[local90 + 2] = local65; + local75[local90 + 3] = local65; + } else if (local28 == 1) { + local75[local90 + 3] = local65; + local75[local90 + 512 + 3] = local65; + local75[local90 + 1024 + 3] = local65; + local75[local90 + 1536 + 3] = local65; + } else if (local28 == 2) { + local75[local90 + 1536] = local65; + local75[local90 + 1536 + 1] = local65; + local75[local90 + 1536 + 2] = local65; + local75[local90 + 1539] = local65; + } + } + } else if (!renderScenery(arg0, local46, arg2, local28)) { + return false; + } + } + local14 = SceneGraph.getSceneryKey(arg4, arg0 + 0, arg2); + if (local14 != 0L) { + local28 = (int) local14 >> 20 & 0x3; + local35 = (int) local14 >> 14 & 0x1F; + local42 = (int) (local14 >>> 32) & Integer.MAX_VALUE; + local46 = LocTypeList.get(local42); + if (local46.mapscene == -1) { + if (local35 == 9) { + local65 = 15658734; + if (local14 > 0L) { + local65 = 15597568; + } + local90 = arg0 * 4 + (103 - arg2) * 2048 + 24624; + local75 = SoftwareRaster.pixels; + if (local28 == 0 || local28 == 2) { + local75[local90 + 1536] = local65; + local75[local90 + 1025] = local65; + local75[local90 + 512 + 2] = local65; + local75[local90 + 3] = local65; + } else { + local75[local90] = local65; + local75[local90 + 512 + 1] = local65; + local75[local90 + 1024 + 2] = local65; + local75[local90 + 1536 + 3] = local65; + } + } + } else if (!renderScenery(arg0, local46, arg2, local28)) { + return false; + } + } + local14 = SceneGraph.getGroundDecorKey(arg4, arg0 + 0, arg2); + if (local14 != 0L) { + local28 = (int) local14 >> 20 & 0x3; + local35 = (int) (local14 >>> 32) & Integer.MAX_VALUE; + @Pc(586) LocType local586 = LocTypeList.get(local35); + return local586.mapscene == -1 || renderScenery(arg0, local586, arg2, local28); + } + return true; + } +} diff --git a/client/src/main/java/rt4/MiniMenu.java b/client/src/main/java/rt4/MiniMenu.java new file mode 100644 index 0000000..519c68b --- /dev/null +++ b/client/src/main/java/rt4/MiniMenu.java @@ -0,0 +1,1827 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; +import plugin.PluginRepository; +import plugin.api.API; +import plugin.api.MiniMenuEntry; + +public class MiniMenu { + @OriginalMember(owner = "client!df", name = "l", descriptor = "Lclient!na;") + public static final JagString COLOR_GREEN = JagString.parse(""); + @OriginalMember(owner = "client!sc", name = "g", descriptor = "Lclient!na;") + public static final JagString aClass100_947 = JagString.parse(" )2> "); + @OriginalMember(owner = "client!uj", name = "C", descriptor = "[Lclient!na;") + public static final JagString[] ops = new JagString[500]; + @OriginalMember(owner = "client!t", name = "v", descriptor = "[Lclient!na;") + public static final JagString[] opBases = new JagString[500]; + @OriginalMember(owner = "client!d", name = "eb", descriptor = "[S") + public static final short[] actions = new short[500]; + @OriginalMember(owner = "client!pf", name = "r", descriptor = "[I") + public static final int[] cursors = new int[500]; + @OriginalMember(owner = "client!mi", name = "U", descriptor = "[J") + public static final long[] keys = new long[500]; + @OriginalMember(owner = "client!pl", name = "e", descriptor = "[I") + public static final int[] intArgs1 = new int[500]; + @OriginalMember(owner = "client!ef", name = "c", descriptor = "[I") + public static final int[] intArgs2 = new int[500]; + @OriginalMember(owner = "client!nm", name = "bb", descriptor = "Lclient!na;") + public static final JagString COLOR_RED = JagString.parse(""); + @OriginalMember(owner = "client!fb", name = "p", descriptor = "Lclient!na;") + public static final JagString COLOR_LIGHT_RED = JagString.parse(""); + @OriginalMember(owner = "client!sc", name = "D", descriptor = "Lclient!na;") + public static final JagString COLOR_ORANGE = JagString.parse(""); + @OriginalMember(owner = "client!si", name = "Z", descriptor = "Lclient!na;") + public static final JagString COLOR_LIGHT_ORANGE = JagString.parse(""); + @OriginalMember(owner = "client!ag", name = "bb", descriptor = "Lclient!na;") + public static final JagString COLOR_LIGHT_GREEN = JagString.parse(""); + @OriginalMember(owner = "client!dc", name = "v", descriptor = "Lclient!na;") + public static final JagString COLOR_YELLOW_GREEN = JagString.parse(""); + @OriginalMember(owner = "client!sf", name = "g", descriptor = "Lclient!na;") + public static final JagString COLOR_YELLOW = JagString.parse(""); + @OriginalMember(owner = "client!vg", name = "f", descriptor = "Lclient!na;") + public static final JagString COLOR_BRIGHT_GREEN = JagString.parse(""); + @OriginalMember(owner = "client!r", name = "d", descriptor = "Z") + public static final boolean aBoolean237 = false; + @OriginalMember(owner = "client!se", name = "m", descriptor = "Lclient!na;") + public static final JagString aClass100_961 = JagString.parse(" )2>"); + @OriginalMember(owner = "client!a", name = "j", descriptor = "Lclient!na;") + public static final JagString aClass100_2 = JagString.parse(" )4 "); + @OriginalMember(owner = "client!cb", name = "fb", descriptor = "Lclient!na;") + public static final JagString aClass100_168 = JagString.parse(": "); + @OriginalMember(owner = "client!qf", name = "Q", descriptor = "Lclient!na;") + public static final JagString aClass100_407 = JagString.parse(" )2> "); + @OriginalMember(owner = "client!qf", name = "R", descriptor = "Lclient!na;") + public static final JagString aClass100_408 = JagString.parse(" )2> "); + @OriginalMember(owner = "client!aj", name = "R", descriptor = "Lclient!na;") + public static final JagString aClass100_32 = JagString.parse(""); + @OriginalMember(owner = "client!fl", name = "V", descriptor = "Lclient!na;") + public static final JagString CLOSE_PARENTHESIS = JagString.parse("(Y"); + @OriginalMember(owner = "client!gd", name = "c", descriptor = "Lclient!na;") + public static final JagString PLUS = JagString.parse(")0"); + @OriginalMember(owner = "client!jj", name = "g", descriptor = "Lclient!na;") + public static final JagString OPEN_PARENTHESIS = JagString.parse(" (X"); + @OriginalMember(owner = "client!qi", name = "B", descriptor = "Lclient!na;") + public static final JagString COLOR_WHITE = JagString.parse(""); + @OriginalMember(owner = "client!cb", name = "ab", descriptor = "Lclient!na;") + public static final JagString aClass100_164 = JagString.parse(" )2> "); + @OriginalMember(owner = "client!ud", name = "Q", descriptor = "Lclient!na;") + public static final JagString aClass100_1039 = JagString.parse(" x "); + @OriginalMember(owner = "client!hd", name = "l", descriptor = "Lclient!na;") + public static final JagString NULL = JagString.parse("null"); + @OriginalMember(owner = "client!ib", name = "k", descriptor = "Lclient!na;") + public static final JagString aClass100_561 = JagString.parse(" )2> "); + @OriginalMember(owner = "client!tg", name = "e", descriptor = "Lclient!na;") + public static final JagString aClass100_1008 = JagString.parse(""); + @OriginalMember(owner = "client!uf", name = "q", descriptor = "Lclient!na;") + public static final JagString aClass100_1042 = JagString.parse("Null"); + @OriginalMember(owner = "client!e", name = "pc", descriptor = "[I") + public static final int[] anIntArray132 = new int[4]; + @OriginalMember(owner = "client!af", name = "l", descriptor = "[S") + public static final short[] aShortArray2 = new short[]{30, 6, 31, 29, 10, 44, 37, 57}; + @OriginalMember(owner = "client!ck", name = "D", descriptor = "Lclient!na;") + public static JagString aClass100_203 = null; + @OriginalMember(owner = "client!hn", name = "W", descriptor = "Lclient!na;") + public static JagString aClass100_545 = null; + @OriginalMember(owner = "client!sk", name = "kb", descriptor = "I") + public static int size = 0; + @OriginalMember(owner = "client!v", name = "b", descriptor = "Lclient!be;") + public static Component pressedInventoryComponent; + @OriginalMember(owner = "client!gd", name = "i", descriptor = "Lclient!na;") + public static JagString aClass100_466 = null; + @OriginalMember(owner = "client!vd", name = "C", descriptor = "I") + public static int anInt5014 = 0; + @OriginalMember(owner = "client!wf", name = "f", descriptor = "I") + public static int anInt4999; + @OriginalMember(owner = "client!wf", name = "d", descriptor = "I") + public static int anInt4997; + @OriginalMember(owner = "client!be", name = "Ec", descriptor = "I") + public static int anInt506 = -1; + @OriginalMember(owner = "client!fl", name = "P", descriptor = "I") + public static int anInt2043 = 0; + @OriginalMember(owner = "client!hj", name = "e", descriptor = "I") + public static int anInt2512; + @OriginalMember(owner = "client!mh", name = "Y", descriptor = "Z") + public static boolean aBoolean187 = false; + @OriginalMember(owner = "client!mj", name = "i", descriptor = "I") + public static int anInt3902 = 0; + @OriginalMember(owner = "client!ha", name = "q", descriptor = "I") + public static int anInt2388 = 0; + @OriginalMember(owner = "client!kd", name = "zb", descriptor = "I") + public static int anInt3259 = 0; + @OriginalMember(owner = "client!ef", name = "g", descriptor = "I") + public static int anInt1742 = -1; + @OriginalMember(owner = "client!jb", name = "p", descriptor = "I") + public static int anInt2954 = -1; + @OriginalMember(owner = "client!id", name = "k", descriptor = "I") + public static int anInt2878; + @OriginalMember(owner = "client!u", name = "i", descriptor = "I") + public static int anInt5393; + @OriginalMember(owner = "client!uf", name = "t", descriptor = "I") + public static int anInt5444 = 0; + @OriginalMember(owner = "client!pk", name = "bb", descriptor = "Lclient!na;") + public static JagString walkText; + @OriginalMember(owner = "client!jl", name = "v", descriptor = "I") + public static int anInt3096 = 0; + @OriginalMember(owner = "client!aa", name = "a", descriptor = "I") + public static int anInt7 = 0; + @OriginalMember(owner = "client!cl", name = "Y", descriptor = "I") + public static int anInt1092 = -1; + @OriginalMember(owner = "client!p", name = "e", descriptor = "I") + public static int anInt4370; + @OriginalMember(owner = "client!jg", name = "b", descriptor = "I") + public static int anInt3039; + @OriginalMember(owner = "client!th", name = "n", descriptor = "Z") + public static boolean aBoolean302 = false; + @OriginalMember(owner = "client!bh", name = "t", descriptor = "I") + public static int clickedInventoryIndex = 0; + @OriginalMember(owner = "client!em", name = "D", descriptor = "I") + public static int gregorianDateSeed; + @OriginalMember(owner = "client!ml", name = "Q", descriptor = "I") + public static int anInt3953 = 0; + + /*********************** + * Action Constants * + ***********************/ + /* Tiles */ + public static final int WALK_HERE = 60; + /* NPCs */ + public static final int NPC_ACTION_1 = 17; + public static final int NPC_ACTION_2 = 16; + public static final int NPC_ACTION_3 = 4; + public static final int NPC_ACTION_4 = 19; + public static final int NPC_ACTION_5 = 2; + public static final int NPC_EXAMINE = 1007; + /* Players */ + public static final int PLAYER_ACTION_1 = 30; + public static final int PLAYER_ACTION_BLOCK = 34; + public static final int PLAYER_ACTION_TRADE = 29; + public static final int PLAYER_REQ_ASSIST_ACTION = 37; + public static final int PLAYER_FOLLOW_ACTION = 31; + public static final int PLAYER_ACTION_5 = 57; + /* Objects */ + public static final int OBJ_ACTION_1 = 47; + public static final int OBJ_EQUIP_ACTION = 5; + public static final int OBJ_ACTION_4 = 35; + public static final int OBJ_OPERATE_ACTION = 23; + public static final int OBJ_ACTION_5 = 58; + public static final int OBJ_EXAMINE = 1002; + public static final int OBJ_PLAYER_ACTION = 1; + public static final int OBJ_OBJSTACK_ACTION = 33; + public static final int OBJ_NPC_ACTION = 26; + public static final int OBJ_LOC_ACTION = 14; + public static final int OBJ_OBJ_ACTION = 40; + /* Object Stacks */ + public static final int OBJSTACK_ACTION_1 = 18; + public static final int OBJSTACK_ACTION_2 = 20; + /* Locations */ + public static final int LOC_ACTION_1 = 42; + public static final int LOC_ACTION_2 = 50; + public static final int LOC_ACTION_3 = 49; + public static final int LOC_ACTION_4 = 46; + public static final int LOC_ACTION_5 = 1001; + public static final int LOC_ACTION_EXAMINE = 1004; + /* Components */ + public static final int COMPONENT_ACTION_CLOSE = 28; + public static final int COMPONENT_OBJSTACK_ACTION = 39; + public static final int OBJ_IN_COMPONENT_ACTION_4 = 43; + public static final int COMPONENT_LOC_ACTION = 38; + public static final int LOGOUT_ACTION_2 = 59; + public static final int LOGOUT_ACTION = 51; + public static final int OBJ_IN_COMPONENT_ACTION_1 = 25; + public static final int COMPONENT_PLAYER_ACTION = 15; + public static final int COMPONENT_OBJ_ACTION = 3; + public static final int COMPONENT_NPC_ACTION = 45; + public static final int OBJ_EXAMINE_IN_COMPONENT = 1006; + /* Unknown/Unidentified */ + public static final int UNKNOWN_13 = 13; + public static final int UNKNOWN_22 = 22; + public static final int UNKNOWN_48 = 48; + public static final int UNKNOWN_12 = 12; + public static final int UNKNOWN_36 = 36; + public static final int UNKNOWN_6 = 6; + public static final int UNKNOWN_24 = 24; + public static final int UNKNOWN_7 = 7; + public static final int UNKNOWN_8 = 8; + public static final int UNKNOWN_11 = 11; + public static final int UNKNOWN_32 = 32; + public static final int UNKNOWN_21 = 21; + public static final int UNKNOWN_9 = 9; + public static final int UNKNOWN_1003 = 1003; + public static final int UNKNOWN_41 = 41; + public static final int UNKNOWN_10 = 10; + public static final int UNKNOWN_44 = 44; + + + @OriginalMember(owner = "client!va", name = "a", descriptor = "(IZILclient!be;)V") + public static void addComponentEntries(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) Component component) { + if (component.buttonType == 1) { + add(-1, 0L, JagString.EMPTY, 0, (short) 8, component.option, component.id); + } + @Pc(47) JagString local47; + if (component.buttonType == 2 && !aBoolean302) { + local47 = MiniMap.getTargetVerb(component); + if (local47 != null) { + add(-1, 0L, JagString.concatenate(new JagString[]{COLOR_GREEN, component.optionSuffix}), -1, (short) 32, local47, component.id); + } + } + if (component.buttonType == 3) { + add(-1, 0L, JagString.EMPTY, 0, (short) 28, LocalizedText.CLOSE, component.id); + } + if (component.buttonType == 4) { + add(-1, 0L, JagString.EMPTY, 0, (short) 59, component.option, component.id); + } + if (component.buttonType == 5) { + add(-1, 0L, JagString.EMPTY, 0, (short) 51, component.option, component.id); + } + if (component.buttonType == 6 && Cs1ScriptRunner.aClass13_10 == null) { + add(-1, 0L, JagString.EMPTY, -1, (short) 41, component.option, component.id); + } + @Pc(173) int local173; + @Pc(171) int local171; + if (component.type == 2) { + local171 = 0; + for (local173 = 0; local173 < component.baseHeight; local173++) { + for (@Pc(183) int local183 = 0; local183 < component.baseWidth; local183++) { + @Pc(195) int local195 = (component.invMarginX + 32) * local183; + @Pc(202) int local202 = (component.invMarginY + 32) * local173; + if (local171 < 20) { + local202 += component.invOffsetY[local171]; + local195 += component.invOffsetX[local171]; + } + if (arg1 >= local195 && local202 <= arg0 && local195 + 32 > arg1 && local202 + 32 > arg0) { + InterfaceList.mouseOverInventoryInterface = component; + clickedInventoryIndex = local171; + if (component.objTypes[local171] > 0) { + @Pc(267) ServerActiveProperties local267 = InterfaceList.getServerActiveProperties(component); + @Pc(276) ObjType local276 = ObjTypeList.get(component.objTypes[local171] - 1); + if (anInt5014 == 1 && local267.isObjOpsEnabled()) { + if (MiniMap.anInt5062 != component.id || anInt4370 != local171) { + add(-1, local276.id, JagString.concatenate(new JagString[]{aClass100_203, aClass100_947, local276.name}), local171, (short) 40, LocalizedText.USE, component.id); + } + } else if (aBoolean302 && local267.isObjOpsEnabled()) { + @Pc(596) ParamType local596 = anInt3039 == -1 ? null : ParamTypeList.get(anInt3039); + if ((anInt4999 & 0x10) != 0 && (local596 == null || local276.getParam(local596.defaultInt, anInt3039) != local596.defaultInt)) { + add(anInt5393, local276.id, JagString.concatenate(new JagString[]{aClass100_466, aClass100_947, local276.name}), local171, (short) 3, aClass100_545, component.id); + } + } else { + @Pc(296) JagString[] local296 = local276.iops; + if (aBoolean237) { + local296 = annotateOps(local296); + } + @Pc(309) int local309; + @Pc(334) byte local334; + if (local267.isObjOpsEnabled()) { + for (local309 = 4; local309 >= 3; local309--) { + if (local296 != null && local296[local309] != null) { + if (local309 == 3) { + local334 = 35; + } else { + local334 = 58; + } + add(-1, local276.id, JagString.concatenate(new JagString[]{aClass100_32, local276.name}), local171, local334, local296[local309], component.id); + } + } + } + if (local267.isObjUseEnabled()) { + add(MiniMap.anInt4075, local276.id, JagString.concatenate(new JagString[]{aClass100_32, local276.name}), local171, (short) 22, LocalizedText.USE, component.id); + } + if (local267.isObjOpsEnabled() && local296 != null) { + for (local309 = 2; local309 >= 0; local309--) { + if (local296[local309] != null) { + local334 = 0; + if (local309 == 0) { + local334 = 47; + } + if (local309 == 1) { + local334 = 5; + } + if (local309 == 2) { + local334 = 43; + } + add(-1, local276.id, JagString.concatenate(new JagString[]{aClass100_32, local276.name}), local171, local334, local296[local309], component.id); + } + } + } + local296 = component.invOptions; + if (aBoolean237) { + local296 = annotateOps(local296); + } + if (local296 != null) { + for (local309 = 4; local309 >= 0; local309--) { + if (local296[local309] != null) { + local334 = 0; + if (local309 == 0) { + local334 = 25; + } + if (local309 == 1) { + local334 = 23; + } + if (local309 == 2) { + local334 = 48; + } + if (local309 == 3) { + local334 = 7; + } + if (local309 == 4) { + local334 = 13; + } + add(-1, local276.id, JagString.concatenate(new JagString[]{aClass100_32, local276.name}), local171, local334, local296[local309], component.id); + } + } + } + add(MiniMap.anInt5073, local276.id, JagString.concatenate(new JagString[]{aClass100_32, local276.name}), local171, (short) 1006, LocalizedText.EXAMINE, component.id); + } + } + } + local171++; + } + } + } + if (!component.if3) { + return; + } + if (!aBoolean302) { + for (local171 = 9; local171 >= 5; local171--) { + @Pc(765) JagString local765 = InterfaceList.getOp(component, local171); + if (local765 != null) { + add(getOpCursor(local171, component), local171 + 1, component.optionBase, component.createdComponentId, (short) 1003, local765, component.id); + } + } + local47 = MiniMap.getTargetVerb(component); + if (local47 != null) { + add(-1, 0L, component.optionBase, component.createdComponentId, (short) 32, local47, component.id); + } + for (local173 = 4; local173 >= 0; local173--) { + @Pc(828) JagString local828 = InterfaceList.getOp(component, local173); + if (local828 != null) { + add(getOpCursor(local173, component), local173 + 1, component.optionBase, component.createdComponentId, (short) 9, local828, component.id); + } + } + if (InterfaceList.getServerActiveProperties(component).isResumePauseButtonEnabled()) { + add(-1, 0L, JagString.EMPTY, component.createdComponentId, (short) 41, LocalizedText.CONTINUE, component.id); + } + } else if (InterfaceList.getServerActiveProperties(component).isUseTarget() && (anInt4999 & 0x20) != 0) { + add(anInt5393, 0L, JagString.concatenate(new JagString[]{aClass100_466, aClass100_408, component.optionBase}), component.createdComponentId, (short) 12, aClass100_545, component.id); + } + } + + @OriginalMember(owner = "client!hj", name = "a", descriptor = "(IJBLclient!na;ISLclient!na;I)V") + public static void add(@OriginalArg(0) int cursor, @OriginalArg(1) long arg1, @OriginalArg(3) JagString opName, @OriginalArg(4) int arg3, @OriginalArg(5) short arg4, @OriginalArg(6) JagString arg5, @OriginalArg(7) int arg6) { + if (Cs1ScriptRunner.aBoolean108 || size >= 500) { + return; + } + ops[size] = arg5; + opBases[size] = opName; + cursors[size] = cursor == -1 ? anInt1092 : cursor; + actions[size] = arg4; + keys[size] = arg1; + intArgs1[size] = arg3; + intArgs2[size] = arg6; + PluginRepository.DrawMiniMenu(new MiniMenuEntry(size)); + size++; + } + + @OriginalMember(owner = "client!wl", name = "b", descriptor = "(I)V") + public static void sort() { + @Pc(3) boolean sorted = false; + while (!sorted) { + sorted = true; + for (@Pc(13) int i = 0; i < size - 1; i++) { + if ((actions[i] < 1000 && actions[i + 1] > 1000) || (actions[i] > 7000 && actions[i + 1] > actions[i])) { + @Pc(41) JagString local41 = opBases[i]; + sorted = false; + opBases[i] = opBases[i + 1]; + opBases[i + 1] = local41; + @Pc(61) JagString local61 = ops[i]; + ops[i] = ops[i + 1]; + ops[i + 1] = local61; + @Pc(79) int local79 = intArgs1[i]; + intArgs1[i] = intArgs1[i + 1]; + intArgs1[i + 1] = local79; + @Pc(97) int local97 = intArgs2[i]; + intArgs2[i] = intArgs2[i + 1]; + intArgs2[i + 1] = local97; + @Pc(115) int local115 = cursors[i]; + cursors[i] = cursors[i + 1]; + cursors[i + 1] = local115; + @Pc(133) short local133 = actions[i]; + actions[i] = actions[i + 1]; + actions[i + 1] = local133; + @Pc(151) long local151 = keys[i]; + keys[i] = keys[i + 1]; + keys[i + 1] = local151; + } + } + } + } + + @OriginalMember(owner = "client!qe", name = "b", descriptor = "(II)V") + public static void remove(@OriginalArg(1) int i) { + size--; + if (size == i) { + return; + } + ArrayUtils.copy(ops, i + 1, ops, i, size - i); + ArrayUtils.copy(opBases, i + 1, opBases, i, size - i); + ArrayUtils.copy(cursors, i + 1, cursors, i, size - i); + ArrayUtils.copy(actions, i + 1, actions, i, size - i); + ArrayUtils.copy(keys, i + 1, keys, i, size - i); + ArrayUtils.copy(intArgs1, i + 1, intArgs1, i, size - i); + ArrayUtils.copy(intArgs2, i + 1, intArgs2, i, size - i); + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(IZ)Lclient!na;") + public static JagString getOp(@OriginalArg(0) int i) { + try { + return opBases[i].length() > 0 ? JagString.concatenate(new JagString[]{ops[i], LocalizedText.MINISEPARATOR, opBases[i]}) : ops[i]; + } catch (NullPointerException npe) { + int ui = 4; + return JagString.EMPTY; + } + } + + @OriginalMember(owner = "client!i", name = "p", descriptor = "(II)V") + public static void doAction(@OriginalArg(1) int arg0) { + if (arg0 < 0) { + return; + } + @Pc(15) int local15 = intArgs1[arg0]; + @Pc(19) int local19 = intArgs2[arg0]; + @Pc(23) int actionCode = actions[arg0]; + if (actionCode >= 2000) { + actionCode -= 2000; + } + @Pc(31) long local31 = keys[arg0]; + @Pc(36) int local36 = (int) keys[arg0]; + @Pc(43) Player local43; + if (actionCode == PLAYER_FOLLOW_ACTION) { + local43 = PlayerList.players[local36]; + if (local43 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local43.movementQueueX[0], 1, 0, 2, local43.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.type = 2; + Cross.milliseconds = 0; + Cross.x = Mouse.clickX; + Cross.y = Mouse.clickY; + Protocol.outboundBuffer.p1isaac(71); + Protocol.outboundBuffer.ip2add(local36); + } + } + if (actionCode == LOC_ACTION_4) { + PathFinder.findPathToLoc(local31, local19, local15); + Protocol.outboundBuffer.p1isaac(247); + Protocol.outboundBuffer.ip2(Camera.originZ + local19); + Protocol.outboundBuffer.ip2add(local15 + Camera.originX); + Protocol.outboundBuffer.p2(Integer.MAX_VALUE & (int) (local31 >>> 32)); + } + if (actionCode == OBJ_OBJ_ACTION) { + Protocol.outboundBuffer.p1isaac(27); + Protocol.outboundBuffer.p2(anInt4370); + Protocol.outboundBuffer.ip4(local19); + Protocol.outboundBuffer.ip2(local15); + Protocol.outboundBuffer.ip4(MiniMap.anInt5062); + Protocol.outboundBuffer.ip2add(anInt4997); + Protocol.outboundBuffer.ip2add(local36); + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + @Pc(192) Npc local192; + if (actionCode == NPC_ACTION_4) { + local192 = NpcList.npcs[local36]; + if (local192 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local192.movementQueueX[0], 1, 0, 2, local192.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.x = Mouse.clickX; + Cross.type = 2; + Cross.milliseconds = 0; + Cross.y = Mouse.clickY; + Protocol.outboundBuffer.p1isaac(30); + Protocol.outboundBuffer.p2(local36); + } + } + if (actionCode == NPC_ACTION_1) { + local192 = NpcList.npcs[local36]; + if (local192 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local192.movementQueueX[0], 1, 0, 2, local192.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.x = Mouse.clickX; + Cross.milliseconds = 0; + Cross.type = 2; + Cross.y = Mouse.clickY; + Protocol.outboundBuffer.p1isaac(78); + Protocol.outboundBuffer.ip2(local36); + } + } + if (actionCode == UNKNOWN_44) { + local43 = PlayerList.players[local36]; + if (local43 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local43.movementQueueX[0], 1, 0, 2, local43.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.x = Mouse.clickX; + Cross.type = 2; + Cross.y = Mouse.clickY; + Cross.milliseconds = 0; + Protocol.outboundBuffer.p1isaac(133); + Protocol.outboundBuffer.ip2(local36); + } + } + if (actionCode == OBJ_ACTION_5) { + Protocol.outboundBuffer.p1isaac(135); + Protocol.outboundBuffer.p2add(local36); + Protocol.outboundBuffer.p2add(local15); + Protocol.outboundBuffer.mp4(local19); + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + if (actionCode == LOC_ACTION_1) { + PathFinder.findPathToLoc(local31, local19, local15); + Protocol.outboundBuffer.p1isaac(254); + Protocol.outboundBuffer.ip2(local15 + Camera.originX); + Protocol.outboundBuffer.p2add((int) (local31 >>> 32) & Integer.MAX_VALUE); + Protocol.outboundBuffer.p2(local19 + Camera.originZ); + } + if (actionCode == COMPONENT_ACTION_CLOSE) { + ClientProt.closeWidget(); + } + if (actionCode == COMPONENT_NPC_ACTION) { + local192 = NpcList.npcs[local36]; + if (local192 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local192.movementQueueX[0], 1, 0, 2, local192.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.x = Mouse.clickX; + Cross.type = 2; + Cross.milliseconds = 0; + Cross.y = Mouse.clickY; + Protocol.outboundBuffer.p1isaac(239); + Protocol.outboundBuffer.ip4(anInt2512); + Protocol.outboundBuffer.p2add(anInt506); + Protocol.outboundBuffer.ip2add(local36); + } + } + @Pc(560) boolean local560; + if (actionCode == OBJSTACK_ACTION_1) { + if (client.game == 1) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local15, 1, 0, 2, local19, PlayerList.self.movementQueueX[0]); + } else { + local560 = PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 0, false, 0, local15, 0, 0, 2, local19, PlayerList.self.movementQueueX[0]); + if (!local560) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local15, 1, 0, 2, local19, PlayerList.self.movementQueueX[0]); + } + } + Cross.x = Mouse.clickX; + Cross.milliseconds = 0; + Cross.type = 2; + Cross.y = Mouse.clickY; + Protocol.outboundBuffer.p1isaac(66); + Protocol.outboundBuffer.ip2(Camera.originX + local15); + Protocol.outboundBuffer.p2(local36); + Protocol.outboundBuffer.ip2add(local19 + Camera.originZ); + } + if (actionCode == LOC_ACTION_5) { + PathFinder.findPathToLoc(local31, local19, local15); + Protocol.outboundBuffer.p1isaac(170); + Protocol.outboundBuffer.ip2add(Integer.MAX_VALUE & (int) (local31 >>> 32)); + Protocol.outboundBuffer.ip2add(local15 + Camera.originX); + Protocol.outboundBuffer.ip2add(local19 + Camera.originZ); + } + if (actionCode == OBJ_EXAMINE) { + Cross.type = 2; + Cross.x = Mouse.clickX; + Cross.y = Mouse.clickY; + Cross.milliseconds = 0; + Protocol.outboundBuffer.p1isaac(92); + Protocol.outboundBuffer.ip2add(local36); + } + @Pc(693) Component local693; + if (actionCode == OBJ_EXAMINE_IN_COMPONENT) { + local693 = InterfaceList.getComponent(local19); + if (local693 == null || local693.objCounts[local15] < 100000) { + Protocol.outboundBuffer.p1isaac(92); + Protocol.outboundBuffer.ip2add(local36); + } else { + Chat.add(JagString.EMPTY, 0, JagString.concatenate(new JagString[]{JagString.parseInt(local693.objCounts[local15]), aClass100_1039, ObjTypeList.get(local36).name})); + } + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + if (actionCode == WALK_HERE) { + if (local36 == 0) { + method3556(Player.plane, local15, local19); + } else if (local36 == 1) { + if (LoginManager.staffModLevel > 0 && Keyboard.pressedKeys[Keyboard.KEY_CTRL] && Keyboard.pressedKeys[Keyboard.KEY_SHIFT]) { + Cheat.teleport(Camera.originX + local15, Camera.originZ + local19, Player.plane); + } else if (PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 0, true, 0, local15, 0, 0, 1, local19, PlayerList.self.movementQueueX[0])) { + Protocol.outboundBuffer.p1(InterfaceList.anInt5); + Protocol.outboundBuffer.p1(anInt2878); + Protocol.outboundBuffer.p2((int) Camera.yawTarget); + Protocol.outboundBuffer.p1(57); + Protocol.outboundBuffer.p1(MiniMap.anInt1814); + Protocol.outboundBuffer.p1(MiniMap.anInt4130); + Protocol.outboundBuffer.p1(89); + Protocol.outboundBuffer.p2(PlayerList.self.xFine); + Protocol.outboundBuffer.p2(PlayerList.self.zFine); + Protocol.outboundBuffer.p1(PathFinder.anInt4364); + Protocol.outboundBuffer.p1(63); + } + } + } + if (actionCode == NPC_EXAMINE) { + Cross.milliseconds = 0; + Cross.type = 2; + Cross.y = Mouse.clickY; + Cross.x = Mouse.clickX; + local192 = NpcList.npcs[local36]; + if (local192 != null) { + @Pc(884) NpcType local884 = local192.type; + if (local884.multiNpcs != null) { + local884 = local884.getMultiNpc(); + } + if (local884 != null) { + Protocol.outboundBuffer.p1isaac(72); + Protocol.outboundBuffer.p2(local884.id); + } + } + } + if (actionCode == OBJ_ACTION_1) { + Protocol.outboundBuffer.p1isaac(156); + Protocol.outboundBuffer.ip2add(local15); + Protocol.outboundBuffer.p2add(local36); + Protocol.outboundBuffer.ip4(local19); + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + if (actionCode == COMPONENT_OBJ_ACTION) { + Protocol.outboundBuffer.p1isaac(253); + Protocol.outboundBuffer.ip4(anInt2512); + Protocol.outboundBuffer.ip2add(local15); + Protocol.outboundBuffer.ip4(local19); + Protocol.outboundBuffer.p2add(local36); + Protocol.outboundBuffer.ip2(anInt506); + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + if (actionCode == UNKNOWN_10) { + local43 = PlayerList.players[local36]; + if (local43 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local43.movementQueueX[0], 1, 0, 2, local43.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.type = 2; + Cross.y = Mouse.clickY; + Cross.x = Mouse.clickX; + Cross.milliseconds = 0; + Protocol.outboundBuffer.p1isaac(4); + Protocol.outboundBuffer.ip2(local36); + } + } + if (actionCode == UNKNOWN_41 && Cs1ScriptRunner.aClass13_10 == null) { + method10(local15, local19); + Cs1ScriptRunner.aClass13_10 = InterfaceList.method1418(local19, local15); + InterfaceList.redraw(Cs1ScriptRunner.aClass13_10); + } + if (actionCode == LOC_ACTION_3) { + PathFinder.findPathToLoc(local31, local19, local15); + Protocol.outboundBuffer.p1isaac(84); + Protocol.outboundBuffer.ip2add(Integer.MAX_VALUE & (int) (local31 >>> 32)); + Protocol.outboundBuffer.ip2add(Camera.originZ + local19); + Protocol.outboundBuffer.ip2(local15 + Camera.originX); + } + if (actionCode == OBJ_OPERATE_ACTION) { + Protocol.outboundBuffer.p1isaac(206); + Protocol.outboundBuffer.p2add(local36); + Protocol.outboundBuffer.ip2(local15); + Protocol.outboundBuffer.ip4(local19); + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + if (actionCode == OBJ_LOC_ACTION && PathFinder.findPathToLoc(local31, local19, local15)) { + Protocol.outboundBuffer.p1isaac(134); + Protocol.outboundBuffer.p2add(Camera.originX + local15); + Protocol.outboundBuffer.p2(anInt4997); + Protocol.outboundBuffer.ip2(local19 + Camera.originZ); + Protocol.outboundBuffer.p2(anInt4370); + Protocol.outboundBuffer.mp4(MiniMap.anInt5062); + Protocol.outboundBuffer.p2add((int) (local31 >>> 32) & Integer.MAX_VALUE); + } + if (actionCode == PLAYER_REQ_ASSIST_ACTION) { + local43 = PlayerList.players[local36]; + if (local43 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local43.movementQueueX[0], 1, 0, 2, local43.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.milliseconds = 0; + Cross.type = 2; + Cross.y = Mouse.clickY; + Cross.x = Mouse.clickX; + Protocol.outboundBuffer.p1isaac(114); + Protocol.outboundBuffer.ip2add(local36); + } + } + if (actionCode == UNKNOWN_9 || actionCode == UNKNOWN_1003) { + ClientProt.method4512(opBases[arg0], local15, local36, local19); + } + if (actionCode == OBJ_EQUIP_ACTION) { + Protocol.outboundBuffer.p1isaac(55); + Protocol.outboundBuffer.ip2(local36); + Protocol.outboundBuffer.p2add(local15); + Protocol.outboundBuffer.imp4(local19); + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + if (actionCode == UNKNOWN_21) { + if (client.game == 1) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local15, 1, 0, 2, local19, PlayerList.self.movementQueueX[0]); + } else { + local560 = PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 0, false, 0, local15, 0, 0, 2, local19, PlayerList.self.movementQueueX[0]); + if (!local560) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local15, 1, 0, 2, local19, PlayerList.self.movementQueueX[0]); + } + } + Cross.type = 2; + Cross.x = Mouse.clickX; + Cross.milliseconds = 0; + Cross.y = Mouse.clickY; + Protocol.outboundBuffer.p1isaac(228); + Protocol.outboundBuffer.p2(local36); + Protocol.outboundBuffer.ip2(Camera.originX + local15); + Protocol.outboundBuffer.ip2add(Camera.originZ + local19); + } + if (actionCode == NPC_ACTION_3) { + local192 = NpcList.npcs[local36]; + if (local192 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local192.movementQueueX[0], 1, 0, 2, local192.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.type = 2; + Cross.milliseconds = 0; + Cross.y = Mouse.clickY; + Cross.x = Mouse.clickX; + Protocol.outboundBuffer.p1isaac(148); + Protocol.outboundBuffer.p2add(local36); + } + } + if (actionCode == UNKNOWN_32) { + local693 = InterfaceList.method1418(local19, local15); + if (local693 != null) { + method1294(); + @Pc(1493) ServerActiveProperties local1493 = InterfaceList.getServerActiveProperties(local693); + method4246(local19, local15, local1493.getTargetMask(), local1493.targetParam, local693.anInt499, local693.anInt484); + anInt5014 = 0; + aClass100_545 = MiniMap.getTargetVerb(local693); + if (aClass100_545 == null) { + aClass100_545 = aClass100_1042; + } + if (local693.if3) { + aClass100_466 = JagString.concatenate(new JagString[]{local693.optionBase, COLOR_WHITE}); + } else { + aClass100_466 = JagString.concatenate(new JagString[]{COLOR_GREEN, local693.optionSuffix, COLOR_WHITE}); + } + } + return; + } + if (actionCode == PLAYER_ACTION_TRADE) { + local43 = PlayerList.players[local36]; + if (local43 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local43.movementQueueX[0], 1, 0, 2, local43.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.y = Mouse.clickY; + Cross.milliseconds = 0; + Cross.type = 2; + Cross.x = Mouse.clickX; + Protocol.outboundBuffer.p1isaac(180); + Protocol.outboundBuffer.ip2add(local36); + } + } + if (actionCode == OBJ_ACTION_4) { + Protocol.outboundBuffer.p1isaac(161); + Protocol.outboundBuffer.ip4(local19); + Protocol.outboundBuffer.ip2add(local36); + Protocol.outboundBuffer.ip2add(local15); + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + if (actionCode == COMPONENT_PLAYER_ACTION) { + local43 = PlayerList.players[local36]; + if (local43 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local43.movementQueueX[0], 1, 0, 2, local43.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.milliseconds = 0; + Cross.type = 2; + Cross.x = Mouse.clickX; + Cross.y = Mouse.clickY; + Protocol.outboundBuffer.p1isaac(195); + Protocol.outboundBuffer.p2add(anInt506); + Protocol.outboundBuffer.ip4(anInt2512); + Protocol.outboundBuffer.ip2add(local36); + } + } + if (actionCode == PLAYER_ACTION_BLOCK) { + if (client.game == 1) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local15, 1, 0, 2, local19, PlayerList.self.movementQueueX[0]); + } else { + local560 = PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 0, false, 0, local15, 0, 0, 2, local19, PlayerList.self.movementQueueX[0]); + if (!local560) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local15, 1, 0, 2, local19, PlayerList.self.movementQueueX[0]); + } + } + Cross.x = Mouse.clickX; + Cross.type = 2; + Cross.y = Mouse.clickY; + Cross.milliseconds = 0; + Protocol.outboundBuffer.p1isaac(109); + Protocol.outboundBuffer.ip2(local19 + Camera.originZ); + Protocol.outboundBuffer.p2(local15 + Camera.originX); + Protocol.outboundBuffer.ip2add(local36); + } + if (actionCode == OBJ_IN_COMPONENT_ACTION_1) { + Protocol.outboundBuffer.p1isaac(81); + Protocol.outboundBuffer.p2add(local15); + Protocol.outboundBuffer.p2(local36); + Protocol.outboundBuffer.imp4(local19); + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + if (actionCode == NPC_ACTION_5) { + local192 = NpcList.npcs[local36]; + if (local192 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local192.movementQueueX[0], 1, 0, 2, local192.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.y = Mouse.clickY; + Cross.type = 2; + Cross.x = Mouse.clickX; + Cross.milliseconds = 0; + Protocol.outboundBuffer.p1isaac(218); + Protocol.outboundBuffer.ip2(local36); + } + } + @Pc(1955) int local1955; + if (actionCode == LOGOUT_ACTION) { + Protocol.outboundBuffer.p1isaac(10); + Protocol.outboundBuffer.p4(local19); + local693 = InterfaceList.getComponent(local19); + if (local693.cs1Scripts != null && local693.cs1Scripts[0][0] == 5) { + local1955 = local693.cs1Scripts[0][1]; + if (VarpDomain.activeVarps[local1955] != local693.cs1ComparisonOperands[0]) { + VarpDomain.activeVarps[local1955] = local693.cs1ComparisonOperands[0]; + VarpDomain.refreshMagicVarp(local1955); + } + } + } + if (actionCode == OBJ_NPC_ACTION) { + local192 = NpcList.npcs[local36]; + if (local192 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local192.movementQueueX[0], 1, 0, 2, local192.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.type = 2; + Cross.milliseconds = 0; + Cross.y = Mouse.clickY; + Cross.x = Mouse.clickX; + Protocol.outboundBuffer.p1isaac(115); + Protocol.outboundBuffer.mp4(MiniMap.anInt5062); + Protocol.outboundBuffer.ip2(anInt4370); + Protocol.outboundBuffer.ip2(local36); + Protocol.outboundBuffer.ip2add(anInt4997); + } + } + if (actionCode == LOGOUT_ACTION_2) { + Protocol.outboundBuffer.p1isaac(10); + Protocol.outboundBuffer.p4(local19); + local693 = InterfaceList.getComponent(local19); + if (local693.cs1Scripts != null && local693.cs1Scripts[0][0] == 5) { + local1955 = local693.cs1Scripts[0][1]; + VarpDomain.activeVarps[local1955] = 1 - VarpDomain.activeVarps[local1955]; + VarpDomain.refreshMagicVarp(local1955); + } + } + if (actionCode == OBJ_OBJSTACK_ACTION) { + local560 = PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 0, false, 0, local15, 0, 0, 2, local19, PlayerList.self.movementQueueX[0]); + if (!local560) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local15, 1, 0, 2, local19, PlayerList.self.movementQueueX[0]); + } + Cross.x = Mouse.clickX; + Cross.milliseconds = 0; + Cross.y = Mouse.clickY; + Cross.type = 2; + Protocol.outboundBuffer.p1isaac(101); + Protocol.outboundBuffer.ip2add(local15 + Camera.originX); + Protocol.outboundBuffer.ip2(anInt4370); + Protocol.outboundBuffer.ip2(anInt4997); + Protocol.outboundBuffer.ip2(local36); + Protocol.outboundBuffer.ip2add(Camera.originZ + local19); + Protocol.outboundBuffer.mp4(MiniMap.anInt5062); + } + if (actionCode == LOC_ACTION_EXAMINE) { + Cross.milliseconds = 0; + Cross.x = Mouse.clickX; + Cross.type = 2; + Cross.y = Mouse.clickY; + Protocol.outboundBuffer.p1isaac(94); + Protocol.outboundBuffer.ip2add(local36); + } + if (actionCode == UNKNOWN_11) { + if (local36 == 0) { + anInt3096 = 1; + method3556(Player.plane, local15, local19); + } else if (local36 == 1) { + Protocol.outboundBuffer.p1isaac(131); + Protocol.outboundBuffer.mp4(anInt2512); + Protocol.outboundBuffer.p2add(Camera.originX + local15); + Protocol.outboundBuffer.ip2add(anInt506); + Protocol.outboundBuffer.p2add(local19 + Camera.originZ); + } + } + if (actionCode == UNKNOWN_8) { + local693 = InterfaceList.getComponent(local19); + @Pc(2287) boolean local2287 = true; + if (local693.clientCode > 0) { + local2287 = method4265(local693); + } + if (local2287) { + Protocol.outboundBuffer.p1isaac(10); + Protocol.outboundBuffer.p4(local19); + } + } + if (actionCode == OBJ_PLAYER_ACTION) { + local43 = PlayerList.players[local36]; + if (local43 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local43.movementQueueX[0], 1, 0, 2, local43.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.milliseconds = 0; + Cross.y = Mouse.clickY; + Cross.type = 2; + Cross.x = Mouse.clickX; + Protocol.outboundBuffer.p1isaac(248); + Protocol.outboundBuffer.ip2add(local36); + Protocol.outboundBuffer.p2(anInt4997); + Protocol.outboundBuffer.p2(anInt4370); + Protocol.outboundBuffer.mp4(MiniMap.anInt5062); + } + } + if (actionCode == UNKNOWN_7) { + Protocol.outboundBuffer.p1isaac(85); + Protocol.outboundBuffer.imp4(local19); + Protocol.outboundBuffer.p2(local15); + Protocol.outboundBuffer.p2add(local36); + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + if (actionCode == UNKNOWN_24) { + if (client.game == 1) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local15, 1, 0, 2, local19, PlayerList.self.movementQueueX[0]); + } else { + local560 = PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 0, false, 0, local15, 0, 0, 2, local19, PlayerList.self.movementQueueX[0]); + if (!local560) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local15, 1, 0, 2, local19, PlayerList.self.movementQueueX[0]); + } + } + Cross.type = 2; + Cross.y = Mouse.clickY; + Cross.x = Mouse.clickX; + Cross.milliseconds = 0; + Protocol.outboundBuffer.p1isaac(48); + Protocol.outboundBuffer.p2add(local15 + Camera.originX); + Protocol.outboundBuffer.ip2add(local36); + Protocol.outboundBuffer.ip2(Camera.originZ + local19); + } + if (actionCode == COMPONENT_LOC_ACTION && PathFinder.findPathToLoc(local31, local19, local15)) { + Protocol.outboundBuffer.p1isaac(233); + Protocol.outboundBuffer.ip2add(local19 + Camera.originZ); + Protocol.outboundBuffer.p2add(Camera.originX + local15); + Protocol.outboundBuffer.ip2add(anInt506); + Protocol.outboundBuffer.imp4(anInt2512); + Protocol.outboundBuffer.p2add((int) (local31 >>> 32) & Integer.MAX_VALUE); + } + if (actionCode == UNKNOWN_13) { + Protocol.outboundBuffer.p1isaac(6); + Protocol.outboundBuffer.p4(local19); + Protocol.outboundBuffer.p2add(local15); + Protocol.outboundBuffer.ip2(local36); + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + if (actionCode == PLAYER_ACTION_5) { + local43 = PlayerList.players[local36]; + if (local43 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local43.movementQueueX[0], 1, 0, 2, local43.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.type = 2; + Cross.y = Mouse.clickY; + Cross.x = Mouse.clickX; + Cross.milliseconds = 0; + Protocol.outboundBuffer.p1isaac(175); + Protocol.outboundBuffer.p2add(local36); + } + } + if (actionCode == UNKNOWN_22) { + method1294(); + local693 = InterfaceList.getComponent(local19); + MiniMap.anInt5062 = local19; + anInt4370 = local15; + anInt5014 = 1; + anInt4997 = local36; + InterfaceList.redraw(local693); + aClass100_203 = JagString.concatenate(new JagString[]{aClass100_32, ObjTypeList.get(local36).name, COLOR_WHITE}); + if (aClass100_203 == null) { + aClass100_203 = NULL; + } + return; + } + if (actionCode == LOC_ACTION_2) { + PathFinder.findPathToLoc(local31, local19, local15); + Protocol.outboundBuffer.p1isaac(194); + Protocol.outboundBuffer.ip2add(local19 + Camera.originZ); + Protocol.outboundBuffer.ip2(Camera.originX + local15); + Protocol.outboundBuffer.p2((int) (local31 >>> 32) & Integer.MAX_VALUE); + } + if (actionCode == UNKNOWN_48) { + Protocol.outboundBuffer.p1isaac(154); + Protocol.outboundBuffer.ip2(local15); + Protocol.outboundBuffer.imp4(local19); + Protocol.outboundBuffer.ip2add(local36); + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + if (actionCode == PLAYER_ACTION_1) { + local43 = PlayerList.players[local36]; + if (local43 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local43.movementQueueX[0], 1, 0, 2, local43.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.milliseconds = 0; + Cross.x = Mouse.clickX; + Cross.y = Mouse.clickY; + Cross.type = 2; + Protocol.outboundBuffer.p1isaac(68); + Protocol.outboundBuffer.ip2add(local36); + } + } + if (actionCode == OBJ_IN_COMPONENT_ACTION_4) { + Protocol.outboundBuffer.p1isaac(153); + Protocol.outboundBuffer.ip4(local19); + Protocol.outboundBuffer.ip2(local15); + Protocol.outboundBuffer.ip2(local36); + anInt2043 = 0; + pressedInventoryComponent = InterfaceList.getComponent(local19); + anInt5444 = local15; + } + if (actionCode == COMPONENT_OBJSTACK_ACTION) { + local560 = PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 0, false, 0, local15, 0, 0, 2, local19, PlayerList.self.movementQueueX[0]); + if (!local560) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local15, 1, 0, 2, local19, PlayerList.self.movementQueueX[0]); + } + Cross.y = Mouse.clickY; + Cross.x = Mouse.clickX; + Cross.type = 2; + Cross.milliseconds = 0; + Protocol.outboundBuffer.p1isaac(73); + Protocol.outboundBuffer.imp4(anInt2512); + Protocol.outboundBuffer.p2(Camera.originZ + local19); + Protocol.outboundBuffer.ip2add(local36); + Protocol.outboundBuffer.ip2add(local15 + Camera.originX); + Protocol.outboundBuffer.ip2(anInt506); + } + if (actionCode == UNKNOWN_12) { + Protocol.outboundBuffer.p1isaac(82); + Protocol.outboundBuffer.p2(anInt506); + Protocol.outboundBuffer.imp4(local19); + Protocol.outboundBuffer.p4(anInt2512); + Protocol.outboundBuffer.ip2add(local15); + } + if (actionCode == UNKNOWN_36) { + if (local36 == 0) { + Protocol.anInt4422 = 1; + method3556(Player.plane, local15, local19); + } else if (LoginManager.staffModLevel > 0 && Keyboard.pressedKeys[Keyboard.KEY_CTRL] && Keyboard.pressedKeys[Keyboard.KEY_SHIFT]) { + Cheat.teleport(local15 + Camera.originX, Camera.originZ - -local19, Player.plane); + } else { + Protocol.outboundBuffer.p1isaac(179); + Protocol.outboundBuffer.p2(local19 + Camera.originZ); + Protocol.outboundBuffer.p2(local15 + Camera.originX); + } + } + if (actionCode == UNKNOWN_6) { + local43 = PlayerList.players[local36]; + if (local43 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local43.movementQueueX[0], 1, 0, 2, local43.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.y = Mouse.clickY; + Cross.milliseconds = 0; + Cross.type = 2; + Cross.x = Mouse.clickX; + Protocol.outboundBuffer.p1isaac(106); + Protocol.outboundBuffer.p2(local36); + } + } + if (actionCode == OBJSTACK_ACTION_2) { + if (client.game == 1) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local15, 1, 0, 2, local19, PlayerList.self.movementQueueX[0]); + } else { + local560 = PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 0, false, 0, local15, 0, 0, 2, local19, PlayerList.self.movementQueueX[0]); + if (!local560) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local15, 1, 0, 2, local19, PlayerList.self.movementQueueX[0]); + } + } + Cross.y = Mouse.clickY; + Cross.milliseconds = 0; + Cross.x = Mouse.clickX; + Cross.type = 2; + Protocol.outboundBuffer.p1isaac(33); + Protocol.outboundBuffer.p2(local36); + Protocol.outboundBuffer.p2(Camera.originX + local15); + Protocol.outboundBuffer.ip2(Camera.originZ + local19); + } + if (actionCode == NPC_ACTION_2) { + local192 = NpcList.npcs[local36]; + if (local192 != null) { + PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 1, false, 0, local192.movementQueueX[0], 1, 0, 2, local192.movementQueueZ[0], PlayerList.self.movementQueueX[0]); + Cross.x = Mouse.clickX; + Cross.milliseconds = 0; + Cross.y = Mouse.clickY; + Cross.type = 2; + Protocol.outboundBuffer.p1isaac(3); + Protocol.outboundBuffer.ip2add(local36); + } + } + if (actionCode >= 7990 && actionCode <= 7999) { + int index = actionCode - 7990; + API.miniMenuCustomActions[index].run(); + } + if (anInt5014 != 0) { + anInt5014 = 0; + InterfaceList.redraw(InterfaceList.getComponent(MiniMap.anInt5062)); + } + if (aBoolean302) { + method1294(); + } + if (pressedInventoryComponent != null && anInt2043 == 0) { + InterfaceList.redraw(pressedInventoryComponent); + } + } + + @OriginalMember(owner = "client!jj", name = "a", descriptor = "(IBI)Lclient!na;") + public static JagString getCombatLevelColor(@OriginalArg(0) int otherLevel, @OriginalArg(2) int selfLevel) { + @Pc(4) int delta = selfLevel - otherLevel; + if (delta < -9) { + return COLOR_RED; + } else if (delta < -6) { + return COLOR_LIGHT_RED; + } else if (delta < -3) { + return COLOR_ORANGE; + } else if (delta < 0) { + return COLOR_LIGHT_ORANGE; + } else if (delta > 9) { + return COLOR_GREEN; + } else if (delta > 6) { + return COLOR_LIGHT_GREEN; + } else if (delta <= 3) { + return delta > 0 ? COLOR_YELLOW_GREEN : COLOR_YELLOW; + } else { + return COLOR_BRIGHT_GREEN; + } + } + + @OriginalMember(owner = "client!ob", name = "a", descriptor = "(IIIIIIB)V") + public static void addEntries(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + @Pc(15) int local15; + @Pc(47) int x; + if (anInt5014 == 0) { + @Pc(13) int local13 = Rasteriser.screenUpperY; + local15 = Rasteriser.screenLowerY; + @Pc(17) int local17 = Rasteriser.screenUpperX; + @Pc(19) int local19 = Rasteriser.screenLowerX; + @Pc(33) int local33 = (arg5 - arg3) * (local17 - local19) / arg1 + local19; + x = local15 + (local13 - local15) * (arg4 - arg0) / arg2; + if (aBoolean302 && (anInt4999 & 0x40) != 0) { + @Pc(61) Component local61 = InterfaceList.method1418(anInt2512, anInt506); + if (local61 == null) { + method1294(); + } else { + add(anInt5393, 0L, aClass100_961, local33, (short) 11, aClass100_545, x); + } + } else { + if (client.game == 1) { + add(-1, 0L, JagString.EMPTY, local33, (short) 36, LocalizedText.FACEHERE, x); + } + add(-1, 0L, JagString.EMPTY, local33, (short) 60, walkText, x); + } + } + @Pc(112) long local112 = -1L; + for (local15 = 0; local15 < anInt7; local15++) { + @Pc(121) long local121 = Model.aLongArray11[local15]; + x = (int) local121 & 0x7F; + @Pc(133) int local133 = (int) local121 >> 29 & 0x3; + @Pc(140) int local140 = (int) (local121 >>> 32) & Integer.MAX_VALUE; + @Pc(147) int z = (int) local121 >> 7 & 0x7F; + if (local121 != local112) { + local112 = local121; + @Pc(240) int local240; + if (local133 == 2 && SceneGraph.isLocValid(Player.plane, x, z, local121)) { + @Pc(172) LocType local172 = LocTypeList.get(local140); + if (local172.multiLocs != null) { + local172 = local172.getMultiLoc(); + } + if (local172 == null) { + continue; + } + if (anInt5014 == 1) { + add(MiniMap.anInt4075, local121, JagString.concatenate(new JagString[]{aClass100_203, aClass100_164, local172.name}), x, (short) 14, LocalizedText.USE, z); + } else if (aBoolean302) { + @Pc(363) ParamType local363 = anInt3039 == -1 ? null : ParamTypeList.get(anInt3039); + if ((anInt4999 & 0x4) != 0 && (local363 == null || local172.getParam(local363.defaultInt, anInt3039) != local363.defaultInt)) { + add(anInt5393, local121, JagString.concatenate(new JagString[]{aClass100_466, aClass100_164, local172.name}), x, (short) 38, aClass100_545, z); + } + } else { + @Pc(228) JagString[] local228 = local172.ops; + if (aBoolean237) { + local228 = annotateOps(local228); + } + if (local228 != null) { + for (local240 = 4; local240 >= 0; local240--) { + if (local228[local240] != null) { + @Pc(254) short local254 = 0; + if (local240 == 0) { + local254 = 42; + } + if (local240 == 1) { + local254 = 50; + } + @Pc(268) int local268 = -1; + if (local240 == 2) { + local254 = 49; + } + if (local172.cursor1Op == local240) { + local268 = local172.cursor1; + } + if (local240 == 3) { + local254 = 46; + } + if (local240 == local172.cursor2Op) { + local268 = local172.cursor2; + } + if (local240 == 4) { + local254 = 1001; + } + add(local268, local121, JagString.concatenate(new JagString[]{aClass100_1008, local172.name}), x, local254, local228[local240], z); + } + } + } + add(MiniMap.anInt5073, local172.id, JagString.concatenate(new JagString[]{aClass100_1008, local172.name}), x, (short) 1004, LocalizedText.EXAMINE, z); + } + } + @Pc(514) int local514; + @Pc(526) int local526; + @Pc(479) int local479; + @Pc(493) int local493; + @Pc(502) Npc local502; + @Pc(597) Player local597; + if (local133 == 1) { + @Pc(421) Npc local421 = NpcList.npcs[local140]; + if ((local421.type.size & 0x1) == 0 && (local421.xFine & 0x7F) == 0 && (local421.zFine & 0x7F) == 0 || (local421.type.size & 0x1) == 1 && (local421.xFine & 0x7F) == 64 && (local421.zFine & 0x7F) == 64) { + local479 = local421.xFine + 64 - local421.type.size * 64; + local240 = local421.zFine - (local421.type.size - 1) * 64; + for (local493 = 0; local493 < NpcList.size; local493++) { + local502 = NpcList.npcs[NpcList.ids[local493]]; + local514 = local502.xFine + 64 - local502.type.size * 64; + local526 = local502.zFine + 64 - local502.type.size * 64; + if (local502 != null && local421 != local502 && local514 >= local479 && local421.type.size - (local514 - local479 >> 7) >= local502.type.size && local240 <= local526 && local502.type.size <= local421.type.size - (local526 - local240 >> 7)) { + addNpcEntries(local502.type, x, NpcList.ids[local493], z); + } + } + for (local493 = 0; local493 < PlayerList.size; local493++) { + local597 = PlayerList.players[PlayerList.ids[local493]]; + local514 = local597.xFine + 64 - local597.getSize() * 64; + local526 = local597.zFine + 64 - local597.getSize() * 64; + if (local597 != null && local514 >= local479 && local597.getSize() <= local421.type.size - (local514 - local479 >> 7) && local526 >= local240 && local597.getSize() <= local421.type.size - (local526 - local240 >> 7)) { + addPlayerEntries(PlayerList.ids[local493], z, local597, x); + } + } + } + addNpcEntries(local421.type, x, local140, z); + } + if (local133 == 0) { + @Pc(688) Player player = PlayerList.players[local140]; + if ((player.xFine & 0x7F) == 64 && (player.zFine & 0x7F) == 64) { + local479 = player.xFine - (player.getSize() - 1) * 64; + local240 = player.zFine + 64 - player.getSize() * 64; + for (local493 = 0; local493 < NpcList.size; local493++) { + local502 = NpcList.npcs[NpcList.ids[local493]]; + local514 = local502.xFine + 64 - local502.type.size * 64; + local526 = local502.zFine + 64 - local502.type.size * 64; + if (local502 != null && local514 >= local479 && local502.type.size <= player.getSize() - (local514 - local479 >> 7) && local526 >= local240 && local502.type.size <= player.getSize() - (local526 - local240 >> 7)) { + addNpcEntries(local502.type, x, NpcList.ids[local493], z); + } + } + for (local493 = 0; local493 < PlayerList.size; local493++) { + local597 = PlayerList.players[PlayerList.ids[local493]]; + local514 = local597.xFine - (local597.getSize() - 1) * 64; + local526 = local597.zFine + 64 - local597.getSize() * 64; + if (local597 != null && local597 != player && local479 <= local514 && local597.getSize() <= player.getSize() - (local514 - local479 >> 7) && local526 >= local240 && local597.getSize() <= player.getSize() - (local526 - local240 >> 7)) { + addPlayerEntries(PlayerList.ids[local493], z, local597, x); + } + } + } + addPlayerEntries(local140, z, player, x); + } + if (local133 == 3) { + @Pc(931) LinkedList objStacks = SceneGraph.objStacks[Player.plane][x][z]; + if (objStacks != null) { + for (@Pc(940) ObjStackNode node = (ObjStackNode) objStacks.tail(); node != null; node = (ObjStackNode) objStacks.prev()) { + local240 = node.value.type; + @Pc(951) ObjType local951 = ObjTypeList.get(local240); + if (anInt5014 == 1) { + add(MiniMap.anInt4075, local240, JagString.concatenate(new JagString[]{aClass100_203, aClass100_947, local951.name}), x, (short) 33, LocalizedText.USE, z); + } else if (aBoolean302) { + @Pc(1142) ParamType local1142 = anInt3039 == -1 ? null : ParamTypeList.get(anInt3039); + if ((anInt4999 & 0x1) != 0 && (local1142 == null || local951.getParam(local1142.defaultInt, anInt3039) != local1142.defaultInt)) { + add(anInt5393, local240, JagString.concatenate(new JagString[]{aClass100_466, aClass100_947, local951.name}), x, (short) 39, aClass100_545, z); + } + } else { + @Pc(997) JagString[] local997 = local951.ops; + if (aBoolean237) { + local997 = annotateOps(local997); + } + for (local514 = 4; local514 >= 0; local514--) { + if (local997 != null && local997[local514] != null) { + @Pc(1025) byte local1025 = 0; + if (local514 == 0) { + local1025 = 21; + } + if (local514 == 1) { + local1025 = 34; + } + @Pc(1041) int local1041 = -1; + if (local514 == local951.cursor1Op) { + local1041 = local951.cursor1; + } + if (local514 == 2) { + local1025 = 18; + } + if (local951.cursor2Op == local514) { + local1041 = local951.cursor2; + } + if (local514 == 3) { + local1025 = 20; + } + if (local514 == 4) { + local1025 = 24; + } + add(local1041, local240, JagString.concatenate(new JagString[]{aClass100_32, local951.name}), x, local1025, local997[local514], z); + } + } + add(MiniMap.anInt5073, local240, JagString.concatenate(new JagString[]{aClass100_32, local951.name}), x, (short) 1002, LocalizedText.EXAMINE, z); + } + } + } + } + } + } + } + + @OriginalMember(owner = "client!bc", name = "f", descriptor = "(B)Lclient!na;") + public static JagString method471() { + @Pc(32) JagString local32; + if (anInt5014 == 1 && size < 2) { + local32 = JagString.concatenate(new JagString[]{LocalizedText.USE, LocalizedText.MINISEPARATOR, aClass100_203, aClass100_961}); + } else if (aBoolean302 && size < 2) { + local32 = JagString.concatenate(new JagString[]{aClass100_545, LocalizedText.MINISEPARATOR, aClass100_466, aClass100_961}); + } else if (Cheat.shiftClick && Keyboard.pressedKeys[Keyboard.KEY_SHIFT] && size > 2) { + local32 = getOp(size - 2); + } else { + local32 = getOp(size - 1); + } + if (size > 2) { + local32 = JagString.concatenate(new JagString[]{local32, aClass100_2, JagString.parseInt(size - 2), LocalizedText.MOREOPTIONS}); + } + return local32; + } + + @OriginalMember(owner = "client!wk", name = "a", descriptor = "(I[Lclient!na;)[Lclient!na;") + public static JagString[] annotateOps(@OriginalArg(1) JagString[] ops) { + @Pc(8) JagString[] annotatedOps = new JagString[5]; + for (@Pc(15) int i = 0; i < 5; i++) { + annotatedOps[i] = JagString.concatenate(new JagString[]{JagString.parseInt(i), aClass100_168}); + if (ops != null && ops[i] != null) { + annotatedOps[i] = JagString.concatenate(new JagString[]{annotatedOps[i], ops[i]}); + } + } + return annotatedOps; + } + + @OriginalMember(owner = "client!u", name = "a", descriptor = "(Lclient!me;IIII)V") + public static void addNpcEntries(@OriginalArg(0) NpcType arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + if (size >= 400) { + return; + } + if (arg0.multiNpcs != null) { + arg0 = arg0.getMultiNpc(); + } + if (arg0 == null || !arg0.interactive) { + return; + } + @Pc(35) JagString local35 = arg0.name; + if (arg0.combatLevel != 0) { + @Pc(47) JagString local47 = client.game == 1 ? LocalizedText.RATING : LocalizedText.LEVEL; + local35 = JagString.concatenate(new JagString[]{local35, getCombatLevelColor(arg0.combatLevel, PlayerList.self.combatLevel), OPEN_PARENTHESIS, local47, JagString.parseInt(arg0.combatLevel), CLOSE_PARENTHESIS}); + } + if (anInt5014 == 1) { + add(MiniMap.anInt4075, arg2, JagString.concatenate(new JagString[]{aClass100_203, aClass100_407, local35}), arg1, (short) 26, LocalizedText.USE, arg3); + } else if (aBoolean302) { + @Pc(378) ParamType local378 = anInt3039 == -1 ? null : ParamTypeList.get(anInt3039); + if ((anInt4999 & 0x2) != 0 && (local378 == null || arg0.getParam(anInt3039, local378.defaultInt) != local378.defaultInt)) { + add(anInt5393, arg2, JagString.concatenate(new JagString[]{aClass100_466, aClass100_407, local35}), arg1, (short) 45, aClass100_545, arg3); + } + } else { + @Pc(129) JagString[] local129 = arg0.ops; + if (aBoolean237) { + local129 = annotateOps(local129); + } + @Pc(140) int local140; + if (local129 != null) { + for (local140 = 4; local140 >= 0; local140--) { + if (local129[local140] != null && (client.game != 0 || !local129[local140].equalsIgnoreCase(LocalizedText.ATTACK))) { + @Pc(161) byte local161 = 0; + if (local140 == 0) { + local161 = 17; + } + if (local140 == 1) { + local161 = 16; + } + @Pc(176) int local176 = -1; + if (local140 == 2) { + local161 = 4; + } + if (local140 == 3) { + local161 = 19; + } + if (arg0.cursor1Op == local140) { + local176 = arg0.cursor1; + } + if (local140 == arg0.cursor2Op) { + local176 = arg0.cursor2; + } + if (local140 == 4) { + local161 = 2; + } + add(local176, arg2, JagString.concatenate(new JagString[]{ COLOR_YELLOW, local35}), arg1, local161, local129[local140], arg3); + } + } + } + if (client.game == 0 && local129 != null) { + for (local140 = 4; local140 >= 0; local140--) { + if (local129[local140] != null && local129[local140].equalsIgnoreCase(LocalizedText.ATTACK)) { + @Pc(271) short local271 = 0; + if (arg0.combatLevel > PlayerList.self.combatLevel) { + local271 = 2000; //THIS iS FOR LEFT CLICK ATTACK + } + @Pc(281) short local281 = 0; + if (local140 == 0) { + local281 = 17; + } + if (local140 == 1) { + local281 = 16; + } + if (local140 == 2) { + local281 = 4; + } + if (local140 == 3) { + local281 = 19; + } + if (local140 == 4) { + local281 = 2; + } + if (local281 != 0) { + local281 += local271; + } + add(arg0.attackCursor, arg2, JagString.concatenate(new JagString[]{ COLOR_YELLOW, local35}), arg1, local281, local129[local140], arg3); + } + } + } + add(MiniMap.anInt5073, arg2, JagString.concatenate(new JagString[]{ COLOR_YELLOW, local35}), arg1, (short) 1007, LocalizedText.EXAMINE, arg3); + } + } + + @OriginalMember(owner = "client!rj", name = "a", descriptor = "(IIILclient!e;I)V") + public static void addPlayerEntries(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) Player other, @OriginalArg(4) int arg3) { + if (PlayerList.self == other || size >= 400) { + return; + } + @Pc(158) JagString string; + if (other.skill == 0) { + @Pc(22) boolean withinCombatRange = true; + if (PlayerList.self.combatRange != -1 && other.combatRange != -1) { + //combat range calculation for PvP worlds + @Pc(43) int highestCombatLevel = Math.max(other.combatLevel, PlayerList.self.combatLevel); + @Pc(58) int highestCombatRange = Math.min(other.combatRange, PlayerList.self.combatRange); + @Pc(69) int calc = (highestCombatLevel * 10) / 100 + highestCombatRange + 5; + @Pc(76) int combatDelta = PlayerList.self.combatLevel - other.combatLevel; + if (combatDelta < 0) { + combatDelta = -combatDelta; + } + if (calc < combatDelta) { + withinCombatRange = false; + } + } + @Pc(95) JagString local95 = client.game == 1 ? LocalizedText.RATING : LocalizedText.LEVEL; + if (other.combatLevelWithSummoning > other.combatLevel) { + string = JagString.concatenate(new JagString[]{other.getName(), withinCombatRange ? getCombatLevelColor(other.combatLevel, PlayerList.self.combatLevel) : COLOR_WHITE, OPEN_PARENTHESIS, local95, JagString.parseInt(other.combatLevel), PLUS, JagString.parseInt(other.combatLevelWithSummoning - other.combatLevel), CLOSE_PARENTHESIS}); + } else { + string = JagString.concatenate(new JagString[]{other.getName(), withinCombatRange ? getCombatLevelColor(other.combatLevel, PlayerList.self.combatLevel) : COLOR_WHITE, OPEN_PARENTHESIS, local95, JagString.parseInt(other.combatLevel), CLOSE_PARENTHESIS}); + } + } else { + string = JagString.concatenate(new JagString[]{other.getName(), OPEN_PARENTHESIS, LocalizedText.SKILL, JagString.parseInt(other.skill), CLOSE_PARENTHESIS}); + } + @Pc(275) int local275; + if (anInt5014 == 1) { + add(MiniMap.anInt4075, arg0, JagString.concatenate(new JagString[]{aClass100_203, aClass100_561, string}), arg3, (short) 1, LocalizedText.USE, arg1); + } else if (!aBoolean302) { + for (local275 = 7; local275 >= 0; local275--) { + if (Player.options[local275] != null) { + @Pc(291) short local291 = 0; + if (client.game == 0 && Player.options[local275].equalsIgnoreCase(LocalizedText.ATTACK)) { + if (other.combatLevel > PlayerList.self.combatLevel) { + local291 = 2000; + } + if (PlayerList.self.anInt1650 != 0 && other.anInt1650 != 0) { + if (PlayerList.self.anInt1650 == other.anInt1650) { + local291 = 2000; + } else { + local291 = 0; + } + } + } else if (Player.secondaryOptions[local275]) { + local291 = 2000; + } + @Pc(353) short local353 = aShortArray2[local275]; + @Pc(358) short local358 = (short) (local353 + local291); + add(Player.cursors[local275], arg0, JagString.concatenate(new JagString[]{COLOR_WHITE, string}), arg3, local358, Player.options[local275], arg1); + } + } + } else if ((anInt4999 & 0x8) != 0) { + add(anInt5393, arg0, JagString.concatenate(new JagString[]{aClass100_466, aClass100_561, string}), arg3, (short) 15, aClass100_545, arg1); + } + for (local275 = 0; local275 < size; local275++) { + if (actions[local275] == 60) { + opBases[local275] = JagString.concatenate(new JagString[]{COLOR_WHITE, string}); + break; + } + } + } + + @OriginalMember(owner = "client!aj", name = "a", descriptor = "(BILclient!be;)I") + public static int getOpCursor(@OriginalArg(1) int arg0, @OriginalArg(2) Component arg1) { + if (!InterfaceList.getServerActiveProperties(arg1).isButtonEnabled(arg0) && arg1.onOptionClick == null) { + return -1; + } else if (arg1.anIntArray39 == null || arg0 >= arg1.anIntArray39.length) { + return -1; + } else { + return arg1.anIntArray39[arg0]; + } + } + + @OriginalMember(owner = "client!il", name = "a", descriptor = "(III)V") + public static void method3556(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + aBoolean187 = true; + anInt3902 = arg0; + anInt2388 = arg1; + anInt3259 = arg2; + anInt1742 = -1; + anInt2954 = -1; + } + + @OriginalMember(owner = "client!wi", name = "c", descriptor = "(II)Z") + public static boolean method4640(@OriginalArg(0) int arg0) { + if (arg0 < 0) { + return false; + } + @Pc(12) int local12 = actions[arg0]; + if (local12 >= 2000) { + local12 -= 2000; + } + return local12 == 1003; + } + + @OriginalMember(owner = "client!ud", name = "a", descriptor = "(ILclient!be;)Z") + public static boolean method4265(@OriginalArg(1) Component arg0) { + if (arg0.clientCode == 205) { + Protocol.anInt5775 = 250; + return true; + } else { + return false; + } + } + + @OriginalMember(owner = "client!ec", name = "a", descriptor = "(B)V") + public static void method1294() { + if (!aBoolean302) { + return; + } + @Pc(19) Component local19 = InterfaceList.method1418(anInt2512, anInt506); + if (local19 != null && local19.onUseWith != null) { + @Pc(29) HookRequest local29 = new HookRequest(); + local29.arguments = local19.onUseWith; + local29.source = local19; + ScriptRunner.run(local29); + } + aBoolean302 = false; + anInt1092 = -1; + InterfaceList.redraw(local19); + } + + @OriginalMember(owner = "client!ub", name = "b", descriptor = "(IIIIIII)V") + public static void method4246(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(6) int arg5) { + @Pc(8) Component local8 = InterfaceList.method1418(arg0, arg1); + if (local8 != null && local8.onUse != null) { + @Pc(19) HookRequest local19 = new HookRequest(); + local19.source = local8; + local19.arguments = local8.onUse; + ScriptRunner.run(local19); + } + anInt506 = arg1; + anInt3039 = arg3; + anInt2512 = arg0; + anInt4999 = arg2; + aBoolean302 = true; + anInt5393 = arg4; + anInt1092 = arg5; + InterfaceList.redraw(local8); + } + + @OriginalMember(owner = "client!dm", name = "a", descriptor = "(Lclient!be;III)V") + public static void method1207(@OriginalArg(0) Component arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + if (size < 2 && anInt5014 == 0 && !aBoolean302) { + return; + } + @Pc(24) JagString local24 = method471(); + if (arg0 == null) { + @Pc(40) int local40 = Fonts.b12Full.method2859(local24, arg2 + 4, arg1 - -15, client.aRandom1, gregorianDateSeed); + InterfaceList.redrawScreen(arg2 + 4, Fonts.b12Full.getStringWidth(local24) + local40, arg1, 15); + return; + } + @Pc(59) Font local59 = arg0.method491(Sprites.nameIcons); + if (local59 == null) { + local59 = Fonts.b12Full; + } + local59.method2878(local24, arg2, arg1, arg0.width, arg0.height, arg0.color, arg0.shadowColor, arg0.halign, arg0.valign, client.aRandom1, gregorianDateSeed, anIntArray132); + InterfaceList.redrawScreen(anIntArray132[0], anIntArray132[2], anIntArray132[1], anIntArray132[3]); + } + + @OriginalMember(owner = "client!ej", name = "h", descriptor = "(I)V") + public static void method1372() { + if (anInt3953 == 2) { + if (ScriptRunner.anInt3751 == Mouse.anInt5850 && ScriptRunner.anInt1892 == Mouse.anInt5895) { + anInt3953 = 0; + if (Cheat.shiftClick && Keyboard.pressedKeys[Keyboard.KEY_SHIFT] && size > 2) { + doAction(size - 2); + } else { + doAction(size - 1); + } + } + } else if (ScriptRunner.anInt3751 == Mouse.clickX && ScriptRunner.anInt1892 == Mouse.clickY) { + anInt3953 = 0; + if (Cheat.shiftClick && Keyboard.pressedKeys[Keyboard.KEY_SHIFT] && size > 2) { + doAction(size - 2); + } else { + doAction(size - 1); + } + } else { + Mouse.anInt5895 = Mouse.clickY; + anInt3953 = 2; + Mouse.anInt5850 = Mouse.clickX; + } + } + + @OriginalMember(owner = "client!aa", name = "a", descriptor = "(IZI)V") + public static void method10(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + Protocol.outboundBuffer.p1isaac(132); + Protocol.outboundBuffer.imp4(arg1); + Protocol.outboundBuffer.ip2(arg0); + } + + @OriginalMember(owner = "client!lf", name = "b", descriptor = "(I)V") + public static void drawA() { + @Pc(3) int local3 = InterfaceList.anInt5138; + @Pc(9) int local9 = InterfaceList.anInt761; + @Pc(11) int local11 = InterfaceList.anInt4271; + @Pc(15) int local15 = InterfaceList.anInt436; + if (GlRenderer.enabled) { + GlRaster.fillRect(local11, local3, local9, local15, 6116423); + GlRaster.fillRect(local11 + 1, local3 + 1, local9 - 2, 16, 0); + GlRaster.drawRect(local11 + 1, local3 + 18, local9 - 2, local15 + -19, 0); + } else { + SoftwareRaster.fillRect(local11, local3, local9, local15, 6116423); + SoftwareRaster.fillRect(local11 + 1, local3 + 1, local9 - 2, 16, 0); + SoftwareRaster.drawRect(local11 + 1, local3 + 18, local9 - 2, local15 + -19, 0); + } + Fonts.b12Full.renderLeft(LocalizedText.CHOOSE_OPTION, local11 + 3, local3 + 14, 6116423, -1); + @Pc(96) int local96 = Mouse.lastMouseY; + @Pc(98) int local98 = Mouse.lastMouseX; + for (@Pc(107) int local107 = 0; local107 < size; local107++) { + @Pc(127) int local127 = (size - local107 - 1) * 15 + local3 + 31; + @Pc(129) int color = 16777215; //WHITE + if (local11 < local98 && local98 < local11 + local9 && local127 - 13 < local96 && local96 < local127 + 3) { + color = 16776960; //YELLOW + } + Fonts.b12Full.renderLeft(getOp(local107), local11 + 3, local127, color, 0); + } + InterfaceList.forceRedrawScreen(InterfaceList.anInt4271, InterfaceList.anInt5138, InterfaceList.anInt436, InterfaceList.anInt761); + } + + @OriginalMember(owner = "client!ij", name = "a", descriptor = "(B)V") + public static void drawB() { + @Pc(3) int local3 = InterfaceList.anInt4271; + @Pc(9) int local9 = InterfaceList.anInt5138; + @Pc(11) int local11 = InterfaceList.anInt436; + @Pc(13) int local13 = InterfaceList.anInt761; + if (LoginManager.aClass3_Sub2_Sub1_1 == null || LoginManager.aClass3_Sub2_Sub1_9 == null) { + if (client.js5Archive8.isFileReady(LoginManager.anInt1736) && client.js5Archive8.isFileReady(LoginManager.anInt4073)) { + LoginManager.aClass3_Sub2_Sub1_1 = SoftwareSprite.loadSoftwareAlphaSprite(client.js5Archive8, LoginManager.anInt1736); + LoginManager.aClass3_Sub2_Sub1_9 = SoftwareSprite.loadSoftwareAlphaSprite(client.js5Archive8, LoginManager.anInt4073); + if (GlRenderer.enabled) { + if (LoginManager.aClass3_Sub2_Sub1_1 instanceof SoftwareAlphaSprite) { + LoginManager.aClass3_Sub2_Sub1_1 = new GlAlphaSprite((SoftwareSprite) LoginManager.aClass3_Sub2_Sub1_1); + } else { + LoginManager.aClass3_Sub2_Sub1_1 = new GlSprite((SoftwareSprite) LoginManager.aClass3_Sub2_Sub1_1); + } + if (LoginManager.aClass3_Sub2_Sub1_9 instanceof SoftwareAlphaSprite) { + LoginManager.aClass3_Sub2_Sub1_9 = new GlAlphaSprite((SoftwareSprite) LoginManager.aClass3_Sub2_Sub1_9); + } else { + LoginManager.aClass3_Sub2_Sub1_9 = new GlSprite((SoftwareSprite) LoginManager.aClass3_Sub2_Sub1_9); + } + } + } else if (GlRenderer.enabled) { + GlRaster.fillRectAlpha(local3, local9, local13, 20, LoginManager.anInt1275, 256 - LoginManager.anInt2910); + } else { + SoftwareRaster.fillRectAlpha(local3, local9, local13, 20, LoginManager.anInt1275, 256 - LoginManager.anInt2910); + } + } + @Pc(112) int local112; + @Pc(114) int local114; + if (LoginManager.aClass3_Sub2_Sub1_1 != null && LoginManager.aClass3_Sub2_Sub1_9 != null) { + local112 = local13 / LoginManager.aClass3_Sub2_Sub1_1.width; + for (local114 = 0; local114 < local112; local114++) { + LoginManager.aClass3_Sub2_Sub1_1.render(local114 * LoginManager.aClass3_Sub2_Sub1_1.width + local3, local9); + } + LoginManager.aClass3_Sub2_Sub1_9.render(local3, local9); + LoginManager.aClass3_Sub2_Sub1_9.renderHorizontalFlip(local3 + local13 - LoginManager.aClass3_Sub2_Sub1_9.width, local9); + } + Fonts.b12Full.renderLeft(LocalizedText.CHOOSE_OPTION, local3 + 3, local9 + 14, LoginManager.anInt4581, -1); + if (GlRenderer.enabled) { + GlRaster.fillRectAlpha(local3, local9 + 20, local13, local11 - 20, LoginManager.anInt1275, 256 - LoginManager.anInt2910); + } else { + SoftwareRaster.fillRectAlpha(local3, local9 + 20, local13, local11 - 20, LoginManager.anInt1275, 256 - LoginManager.anInt2910); + } + local114 = Mouse.lastMouseY; + local112 = Mouse.lastMouseX; + @Pc(203) int local203; + @Pc(219) int local219; + for (local203 = 0; local203 < size; local203++) { + local219 = (size - local203 - 1) * 15 + local9 + 35; + if (local3 < local112 && local112 < local3 + local13 && local114 > local219 - 13 && local114 < local219 + 3) { + if (GlRenderer.enabled) { + GlRaster.fillRectAlpha(local3, local219 - 13, local13, 16, LoginManager.anInt5457, 256 - LoginManager.anInt5208); + } else { + SoftwareRaster.fillRectAlpha(local3, local219 - 13, local13, 16, LoginManager.anInt5457, 256 - LoginManager.anInt5208); + } + } + } + if ((LoginManager.aClass3_Sub2_Sub1_8 == null || LoginManager.aClass3_Sub2_Sub1_6 == null || LoginManager.aClass3_Sub2_Sub1_10 == null) && client.js5Archive8.isFileReady(LoginManager.anInt2261) && client.js5Archive8.isFileReady(LoginManager.anInt3324) && client.js5Archive8.isFileReady(LoginManager.anInt5556)) { + LoginManager.aClass3_Sub2_Sub1_8 = SoftwareSprite.loadSoftwareAlphaSprite(client.js5Archive8, LoginManager.anInt2261); + LoginManager.aClass3_Sub2_Sub1_6 = SoftwareSprite.loadSoftwareAlphaSprite(client.js5Archive8, LoginManager.anInt3324); + LoginManager.aClass3_Sub2_Sub1_10 = SoftwareSprite.loadSoftwareAlphaSprite(client.js5Archive8, LoginManager.anInt5556); + if (GlRenderer.enabled) { + if (LoginManager.aClass3_Sub2_Sub1_8 instanceof SoftwareAlphaSprite) { + LoginManager.aClass3_Sub2_Sub1_8 = new GlAlphaSprite((SoftwareSprite) LoginManager.aClass3_Sub2_Sub1_8); + } else { + LoginManager.aClass3_Sub2_Sub1_8 = new GlSprite((SoftwareSprite) LoginManager.aClass3_Sub2_Sub1_8); + } + if (LoginManager.aClass3_Sub2_Sub1_6 instanceof SoftwareAlphaSprite) { + LoginManager.aClass3_Sub2_Sub1_6 = new GlAlphaSprite((SoftwareSprite) LoginManager.aClass3_Sub2_Sub1_6); + } else { + LoginManager.aClass3_Sub2_Sub1_6 = new GlSprite((SoftwareSprite) LoginManager.aClass3_Sub2_Sub1_6); + } + if (LoginManager.aClass3_Sub2_Sub1_10 instanceof SoftwareAlphaSprite) { + LoginManager.aClass3_Sub2_Sub1_10 = new GlAlphaSprite((SoftwareSprite) LoginManager.aClass3_Sub2_Sub1_10); + } else { + LoginManager.aClass3_Sub2_Sub1_10 = new GlSprite((SoftwareSprite) LoginManager.aClass3_Sub2_Sub1_10); + } + } + } + @Pc(418) int local418; + if (LoginManager.aClass3_Sub2_Sub1_8 != null && LoginManager.aClass3_Sub2_Sub1_6 != null && LoginManager.aClass3_Sub2_Sub1_10 != null) { + local203 = local13 / LoginManager.aClass3_Sub2_Sub1_8.width; + for (local219 = 0; local219 < local203; local219++) { + LoginManager.aClass3_Sub2_Sub1_8.render(local3 + LoginManager.aClass3_Sub2_Sub1_8.width * local219, local11 + local9 + -LoginManager.aClass3_Sub2_Sub1_8.height); + } + local219 = (local11 - 20) / LoginManager.aClass3_Sub2_Sub1_6.height; + for (local418 = 0; local418 < local219; local418++) { + LoginManager.aClass3_Sub2_Sub1_6.render(local3, local9 + local418 * LoginManager.aClass3_Sub2_Sub1_6.height + 20); + LoginManager.aClass3_Sub2_Sub1_6.renderHorizontalFlip(local3 + local13 - LoginManager.aClass3_Sub2_Sub1_6.width, local9 + 20 + local418 * LoginManager.aClass3_Sub2_Sub1_6.height); + } + LoginManager.aClass3_Sub2_Sub1_10.render(local3, local11 + local9 - LoginManager.aClass3_Sub2_Sub1_10.height); + LoginManager.aClass3_Sub2_Sub1_10.renderHorizontalFlip(local3 + local13 - LoginManager.aClass3_Sub2_Sub1_10.width, local9 - -local11 + -LoginManager.aClass3_Sub2_Sub1_10.height); + } + for (local203 = 0; local203 < size; local203++) { + local219 = (size - local203 - 1) * 15 + local9 + 35; + local418 = LoginManager.anInt4581; + if (local3 < local112 && local13 + local3 > local112 && local219 - 13 < local114 && local114 < local219 + 3) { + local418 = LoginManager.anInt5752; + } + Fonts.b12Full.renderLeft(getOp(local203), local3 + 3, local219, local418, 0); + } + InterfaceList.forceRedrawScreen(InterfaceList.anInt4271, InterfaceList.anInt5138, InterfaceList.anInt436, InterfaceList.anInt761); + } +} diff --git a/client/src/main/java/rt4/MixerListener.java b/client/src/main/java/rt4/MixerListener.java new file mode 100644 index 0000000..9c376fe --- /dev/null +++ b/client/src/main/java/rt4/MixerListener.java @@ -0,0 +1,18 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!cc") +public abstract class MixerListener extends Node { + + @OriginalMember(owner = "client!cc", name = "p", descriptor = "I") + public int anInt905; + + @OriginalMember(owner = "client!cc", name = "a", descriptor = "(Lclient!ei;)I") + public abstract int method779(@OriginalArg(0) MixerPcmStream arg0); + + @OriginalMember(owner = "client!cc", name = "a", descriptor = "()V") + public abstract void method780(); +} diff --git a/client/src/main/java/rt4/MixerPcmStream.java b/client/src/main/java/rt4/MixerPcmStream.java new file mode 100644 index 0000000..f97937e --- /dev/null +++ b/client/src/main/java/rt4/MixerPcmStream.java @@ -0,0 +1,173 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ei") +public final class MixerPcmStream extends PcmStream { + + @OriginalMember(owner = "client!ei", name = "t", descriptor = "Lclient!ih;") + private final LinkedList aClass69_43 = new LinkedList(); + + @OriginalMember(owner = "client!ei", name = "u", descriptor = "Lclient!ih;") + private final LinkedList aClass69_44 = new LinkedList(); + + @OriginalMember(owner = "client!ei", name = "v", descriptor = "I") + private int anInt1780 = 0; + + @OriginalMember(owner = "client!ei", name = "w", descriptor = "I") + private int anInt1781 = -1; + + @OriginalMember(owner = "client!ok", name = "a", descriptor = "(Lclient!ab;Lclient!ab;I)V") + public static void method3331(@OriginalArg(0) Node arg0, @OriginalArg(1) Node arg1) { + if (arg0.previousNode != null) { + arg0.unlink(); + } + arg0.nextNode = arg1; + arg0.previousNode = arg1.previousNode; + arg0.previousNode.nextNode = arg0; + arg0.nextNode.previousNode = arg0; + } + + @OriginalMember(owner = "client!ei", name = "a", descriptor = "(Lclient!cc;)V") + private void method1342(@OriginalArg(0) MixerListener arg0) { + arg0.unlink(); + arg0.method780(); + @Pc(9) Node local9 = this.aClass69_44.aClass3_109.nextNode; + if (local9 == this.aClass69_44.aClass3_109) { + this.anInt1781 = -1; + } else { + this.anInt1781 = ((MixerListener) local9).anInt905; + } + } + + @OriginalMember(owner = "client!ei", name = "a", descriptor = "(Lclient!qb;)V") + public final synchronized void addSubStream(@OriginalArg(0) PcmStream arg0) { + this.aClass69_43.addHead(arg0); + } + + @OriginalMember(owner = "client!ei", name = "b", descriptor = "([III)V") + @Override + public final synchronized void read(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + do { + if (this.anInt1781 < 0) { + this.method1346(arg0, arg1, arg2); + return; + } + if (this.anInt1780 + arg2 < this.anInt1781) { + this.anInt1780 += arg2; + this.method1346(arg0, arg1, arg2); + return; + } + @Pc(33) int local33 = this.anInt1781 - this.anInt1780; + this.method1346(arg0, arg1, local33); + arg1 += local33; + arg2 -= local33; + this.anInt1780 += local33; + this.method1344(); + @Pc(60) MixerListener local60 = (MixerListener) this.aClass69_44.head(); + synchronized (local60) { + @Pc(68) int local68 = local60.method779(this); + if (local68 < 0) { + local60.anInt905 = 0; + this.method1342(local60); + } else { + local60.anInt905 = local68; + this.method1348(local60.nextNode, local60); + } + } + } while (arg2 != 0); + } + + @OriginalMember(owner = "client!ei", name = "e", descriptor = "()V") + private void method1344() { + if (this.anInt1780 <= 0) { + return; + } + for (@Pc(8) MixerListener local8 = (MixerListener) this.aClass69_44.head(); local8 != null; local8 = (MixerListener) this.aClass69_44.next()) { + local8.anInt905 -= this.anInt1780; + } + this.anInt1781 -= this.anInt1780; + this.anInt1780 = 0; + } + + @OriginalMember(owner = "client!ei", name = "b", descriptor = "()Lclient!qb;") + @Override + public final PcmStream firstSubStream() { + return (PcmStream) this.aClass69_43.head(); + } + + @OriginalMember(owner = "client!ei", name = "d", descriptor = "(I)V") + private void method1345(@OriginalArg(0) int arg0) { + for (@Pc(5) PcmStream local5 = (PcmStream) this.aClass69_43.head(); local5 != null; local5 = (PcmStream) this.aClass69_43.next()) { + local5.skip(arg0); + } + } + + @OriginalMember(owner = "client!ei", name = "c", descriptor = "([III)V") + private void method1346(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + for (@Pc(5) PcmStream local5 = (PcmStream) this.aClass69_43.head(); local5 != null; local5 = (PcmStream) this.aClass69_43.next()) { + local5.readIfActive(arg0, arg1, arg2); + } + } + + @OriginalMember(owner = "client!ei", name = "b", descriptor = "(Lclient!qb;)V") + public final synchronized void removeSubStream(@OriginalArg(0) PcmStream arg0) { + arg0.unlink(); + } + + @OriginalMember(owner = "client!ei", name = "a", descriptor = "()I") + @Override + public final int method4404() { + return 0; + } + + @OriginalMember(owner = "client!ei", name = "c", descriptor = "(I)V") + @Override + public final synchronized void skip(@OriginalArg(0) int arg0) { + do { + if (this.anInt1781 < 0) { + this.method1345(arg0); + return; + } + if (this.anInt1780 + arg0 < this.anInt1781) { + this.anInt1780 += arg0; + this.method1345(arg0); + return; + } + @Pc(29) int local29 = this.anInt1781 - this.anInt1780; + this.method1345(local29); + arg0 -= local29; + this.anInt1780 += local29; + this.method1344(); + @Pc(50) MixerListener local50 = (MixerListener) this.aClass69_44.head(); + synchronized (local50) { + @Pc(58) int local58 = local50.method779(this); + if (local58 < 0) { + local50.anInt905 = 0; + this.method1342(local50); + } else { + local50.anInt905 = local58; + this.method1348(local50.nextNode, local50); + } + } + } while (arg0 != 0); + } + + @OriginalMember(owner = "client!ei", name = "d", descriptor = "()Lclient!qb;") + @Override + public final PcmStream nextSubStream() { + return (PcmStream) this.aClass69_43.next(); + } + + @OriginalMember(owner = "client!ei", name = "a", descriptor = "(Lclient!ab;Lclient!cc;)V") + private void method1348(@OriginalArg(0) Node arg0, @OriginalArg(1) MixerListener arg1) { + while (arg0 != this.aClass69_44.aClass3_109 && ((MixerListener) arg0).anInt905 <= arg1.anInt905) { + arg0 = arg0.nextNode; + } + method3331(arg1, arg0); + this.anInt1781 = ((MixerListener) this.aClass69_44.aClass3_109.nextNode).anInt905; + } +} diff --git a/client/src/main/java/rt4/Model.java b/client/src/main/java/rt4/Model.java new file mode 100644 index 0000000..401f783 --- /dev/null +++ b/client/src/main/java/rt4/Model.java @@ -0,0 +1,381 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ak") +public abstract class Model extends Entity { + + @OriginalMember(owner = "client!vc", name = "V", descriptor = "[J") + public static final long[] aLongArray11 = new long[1000]; + + @OriginalMember(owner = "client!ak", name = "s", descriptor = "Z") + public boolean pickable = false; + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "([[III)I") + public static int method4556(@OriginalArg(0) int[][] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(3) int local3 = arg1 >> 7; + @Pc(7) int local7 = arg2 >> 7; + if (local3 < 0 || local7 < 0 || local3 >= arg0.length || local7 >= arg0[0].length) { + return 0; + } + @Pc(27) int local27 = arg1 & 0x7F; + @Pc(31) int local31 = arg2 & 0x7F; + @Pc(53) int local53 = arg0[local3][local7] * (128 - local27) + arg0[local3 + 1][local7] * local27 >> 7; + @Pc(79) int local79 = arg0[local3][local7 + 1] * (128 - local27) + arg0[local3 + 1][local7 + 1] * local27 >> 7; + return local53 * (128 - local31) + local79 * local31 >> 7; + } + + @OriginalMember(owner = "client!ak", name = "c", descriptor = "()I") + public abstract int getMaxZ(); + + @OriginalMember(owner = "client!ak", name = "b", descriptor = "()I") + public abstract int getMinY(); + + @OriginalMember(owner = "client!ak", name = "d", descriptor = "()Z") + protected abstract boolean method4551(); + + @OriginalMember(owner = "client!ak", name = "e", descriptor = "()V") + public abstract void method4552(); + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "(Lclient!jm;Lclient!ne;Lclient!ne;II[ZZZI[I)V") + private void method4553(@OriginalArg(0) AnimBase arg0, @OriginalArg(1) AnimFrame arg1, @OriginalArg(2) AnimFrame arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) boolean[] arg5, @OriginalArg(6) boolean arg6, @OriginalArg(7) boolean arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int[] arg9) { + @Pc(5) int local5; + if (arg2 == null || arg3 == 0) { + for (local5 = 0; local5 < arg1.length; local5++) { + @Pc(14) short local14 = arg1.indices[local5]; + if (arg5 == null || arg5[local14] == arg6 || arg0.types[local14] == 0) { + @Pc(32) short local32 = arg1.prevOriginIndices[local5]; + @Pc(42) int local42; + if (local32 != -1) { + local42 = arg8 & arg0.parts[local32]; + if (local42 == 65535) { + this.method4569(0, arg0.bones[local32], 0, 0, 0, arg7); + } else { + this.method4577(0, arg0.bones[local32], 0, 0, 0, arg7, local42, arg9); + } + } + local42 = arg8 & arg0.parts[local14]; + if (local42 == 65535) { + this.method4569(arg0.types[local14], arg0.bones[local14], arg1.x[local5], arg1.y[local5], arg1.z[local5], arg7); + } else { + this.method4577(arg0.types[local14], arg0.bones[local14], arg1.x[local5], arg1.y[local5], arg1.z[local5], arg7, local42, arg9); + } + } + } + return; + } + local5 = 0; + @Pc(136) int local136 = 0; + for (@Pc(138) int local138 = 0; local138 < arg0.transforms; local138++) { + @Pc(144) boolean local144 = local5 < arg1.length && arg1.indices[local5] == local138; + @Pc(158) boolean local158 = local136 < arg2.length && arg2.indices[local136] == local138; + if (local144 || local158) { + if (arg5 == null || arg5[local138] == arg6 || arg0.types[local138] == 0) { + @Pc(196) short local196 = 0; + @Pc(201) int local201 = arg0.types[local138]; + if (local201 == 3) { + local196 = 128; + } + @Pc(213) short local213; + @Pc(218) short local218; + @Pc(223) short local223; + @Pc(228) short local228; + @Pc(233) byte local233; + if (local144) { + local213 = arg1.x[local5]; + local218 = arg1.y[local5]; + local223 = arg1.z[local5]; + local228 = arg1.prevOriginIndices[local5]; + local233 = arg1.flags[local5]; + local5++; + } else { + local213 = local196; + local218 = local196; + local223 = local196; + local228 = -1; + local233 = 0; + } + @Pc(252) short local252; + @Pc(257) short local257; + @Pc(262) short local262; + @Pc(267) short local267; + @Pc(272) byte local272; + if (local158) { + local252 = arg2.x[local136]; + local257 = arg2.y[local136]; + local262 = arg2.z[local136]; + local267 = arg2.prevOriginIndices[local136]; + local272 = arg2.flags[local136]; + local136++; + } else { + local252 = local196; + local257 = local196; + local262 = local196; + local267 = -1; + local272 = 0; + } + @Pc(294) int local294; + @Pc(296) int local296; + @Pc(298) int local298; + @Pc(308) int local308; + if ((local233 & 0x2) != 0 || (local272 & 0x1) != 0) { + local294 = local213; + local296 = local218; + local298 = local223; + } else if (local201 == 2) { + local308 = local252 - local213 & 0x7FF; + @Pc(314) int local314 = local257 - local218 & 0x7FF; + @Pc(320) int local320 = local262 - local223 & 0x7FF; + if (local308 >= 1024) { + local308 -= 2048; + } + if (local314 >= 1024) { + local314 -= 2048; + } + if (local320 >= 1024) { + local320 -= 2048; + } + local294 = local213 + local308 * arg3 / arg4 & 0x7FF; + local296 = local218 + local314 * arg3 / arg4 & 0x7FF; + local298 = local223 + local320 * arg3 / arg4 & 0x7FF; + } else if (local201 == 7) { + local308 = local252 - local213 & 0x3F; + if (local308 >= 32) { + local308 -= 64; + } + local294 = local213 + local308 * arg3 / arg4 & 0x3F; + local296 = local218 + (local257 - local218) * arg3 / arg4; + local298 = local223 + (local262 - local223) * arg3 / arg4; + } else { + local294 = local213 + (local252 - local213) * arg3 / arg4; + local296 = local218 + (local257 - local218) * arg3 / arg4; + local298 = local223 + (local262 - local223) * arg3 / arg4; + } + if (local228 != -1) { + local308 = arg8 & arg0.parts[local228]; + if (local308 == 65535) { + this.method4569(0, arg0.bones[local228], 0, 0, 0, arg7); + } else { + this.method4577(0, arg0.bones[local228], 0, 0, 0, arg7, local308, arg9); + } + } else if (local267 != -1) { + local308 = arg8 & arg0.parts[local267]; + if (local308 == 65535) { + this.method4569(0, arg0.bones[local267], 0, 0, 0, arg7); + } else { + this.method4577(0, arg0.bones[local267], 0, 0, 0, arg7, local308, arg9); + } + } + local308 = arg8 & arg0.parts[local138]; + if (local308 == 65535) { + this.method4569(local201, arg0.bones[local138], local294, local296, local298, arg7); + } else { + this.method4577(local201, arg0.bones[local138], local294, local296, local298, arg7, local308, arg9); + } + } else { + if (local144) { + local5++; + } + if (local158) { + local136++; + } + } + } + } + } + + @OriginalMember(owner = "client!ak", name = "b", descriptor = "(I)V") + public abstract void rotateY(@OriginalArg(0) int arg0); + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "(Lclient!cl;I)V") + public final void method4555(@OriginalArg(0) AnimFrameset arg0, @OriginalArg(1) int arg1) { + if (arg1 == -1 || !this.method4551()) { + return; + } + @Pc(12) AnimFrame local12 = arg0.frames[arg1]; + @Pc(15) AnimBase local15 = local12.base; + for (@Pc(17) int local17 = 0; local17 < local12.length; local17++) { + @Pc(26) short local26 = local12.indices[local17]; + if (local15.shadow[local26]) { + if (local12.prevOriginIndices[local17] != -1) { + this.method4567(0, 0, 0, 0); + } + this.method4567(local15.types[local26], local12.x[local17], local12.y[local17], local12.z[local17]); + } + } + this.method4557(); + } + + @OriginalMember(owner = "client!ak", name = "f", descriptor = "()V") + protected abstract void method4557(); + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "(Lclient!cl;ILclient!cl;IIIZ)V") + public final void method4558(@OriginalArg(0) AnimFrameset arg0, @OriginalArg(1) int arg1, @OriginalArg(2) AnimFrameset arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) boolean arg6) { + if (arg1 == -1 || !this.method4551()) { + return; + } + @Pc(12) AnimFrame local12 = arg0.frames[arg1]; + @Pc(15) AnimBase local15 = local12.base; + @Pc(17) AnimFrame local17 = null; + if (arg2 != null) { + local17 = arg2.frames[arg3]; + if (local17.base != local15) { + local17 = null; + } + } + this.method4553(local15, local12, local17, arg4, arg5, null, false, arg6, 65535, null); + this.method4557(); + } + + @OriginalMember(owner = "client!ak", name = "b", descriptor = "(III)V") + public abstract void resize(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2); + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "(ZZZ)Lclient!ak;") + public abstract Model method4560(@OriginalArg(0) boolean arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) boolean arg2); + + @OriginalMember(owner = "client!ak", name = "g", descriptor = "()I") + public abstract int getMaxX(); + + @OriginalMember(owner = "client!ak", name = "h", descriptor = "()I") + public abstract int getMinX(); + + @OriginalMember(owner = "client!ak", name = "i", descriptor = "()V") + public abstract void rotateCounterClockwise(); + + @OriginalMember(owner = "client!ak", name = "c", descriptor = "(I)V") + public abstract void rotateZ(@OriginalArg(0) int arg0); + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "(Lclient!cl;ILclient!cl;IIIIZ[I)V") + public final void method4565(@OriginalArg(0) AnimFrameset arg0, @OriginalArg(1) int arg1, @OriginalArg(2) AnimFrameset arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) boolean arg7, @OriginalArg(8) int[] arg8) { + if (arg1 == -1 || !this.method4551()) { + return; + } + @Pc(12) AnimFrame local12 = arg0.frames[arg1]; + @Pc(15) AnimBase local15 = local12.base; + @Pc(17) AnimFrame local17 = null; + if (arg2 != null) { + local17 = arg2.frames[arg3]; + if (local17.base != local15) { + local17 = null; + } + } + this.method4553(local15, local12, local17, arg4, arg5, null, false, arg7, arg6, arg8); + this.method4557(); + } + + @OriginalMember(owner = "client!ak", name = "j", descriptor = "()I") + public abstract int getLengthXZ(); + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "(IIII)V") + protected abstract void method4567(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3); + + @OriginalMember(owner = "client!ak", name = "b", descriptor = "(ZZZ)Lclient!ak;") + public abstract Model method4568(@OriginalArg(0) boolean arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) boolean arg2); + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "(I[IIIIZ)V") + protected abstract void method4569(@OriginalArg(0) int arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) boolean arg5); + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "(Lclient!cl;ILclient!cl;IIILclient!cl;ILclient!cl;III[ZZ)V") + public final void method4570(@OriginalArg(0) AnimFrameset arg0, @OriginalArg(1) int arg1, @OriginalArg(2) AnimFrameset arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) AnimFrameset arg6, @OriginalArg(7) int arg7, @OriginalArg(8) AnimFrameset arg8, @OriginalArg(9) int arg9, @OriginalArg(10) int arg10, @OriginalArg(11) int arg11, @OriginalArg(12) boolean[] arg12, @OriginalArg(13) boolean arg13) { + if (arg1 == -1) { + return; + } + if (arg12 == null || arg7 == -1) { + this.method4558(arg0, arg1, arg2, arg3, arg4, arg5, arg13); + } else if (this.method4551()) { + @Pc(27) AnimFrame local27 = arg0.frames[arg1]; + @Pc(30) AnimBase local30 = local27.base; + @Pc(32) AnimFrame local32 = null; + if (arg2 != null) { + local32 = arg2.frames[arg3]; + if (local32.base != local30) { + local32 = null; + } + } + @Pc(50) AnimFrame local50 = arg6.frames[arg7]; + @Pc(52) AnimFrame local52 = null; + if (arg8 != null) { + local52 = arg8.frames[arg9]; + if (local52.base != local30) { + local52 = null; + } + } + this.method4553(local30, local27, local32, arg4, arg5, arg12, false, arg13, 65535, null); + this.method4569(0, new int[0], 0, 0, 0, arg13); + this.method4553(local30, local50, local52, arg10, arg11, arg12, true, arg13, 65535, null); + this.method4557(); + } + } + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "(IIIIIIIJ)V") + public abstract void setCamera(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) long arg6); + + @OriginalMember(owner = "client!ak", name = "c", descriptor = "(ZZZ)Lclient!ak;") + public abstract Model method4572(@OriginalArg(0) boolean arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) boolean arg2); + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "([[IIIIII)V") + protected final void method4573(@OriginalArg(0) int[][] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + @Pc(10) int local10 = -arg4 / 2; + @Pc(15) int local15 = -arg5 / 2; + @Pc(24) int local24 = method4556(arg0, arg1 + local10, arg3 + local15); + @Pc(28) int local28 = arg4 / 2; + @Pc(33) int local33 = -arg5 / 2; + @Pc(42) int local42 = method4556(arg0, arg1 + local28, arg3 + local33); + @Pc(47) int local47 = -arg4 / 2; + @Pc(51) int local51 = arg5 / 2; + @Pc(60) int local60 = method4556(arg0, arg1 + local47, arg3 + local51); + @Pc(64) int local64 = arg4 / 2; + @Pc(68) int local68 = arg5 / 2; + @Pc(77) int local77 = method4556(arg0, arg1 + local64, arg3 + local68); + @Pc(84) int local84 = local24 < local42 ? local24 : local42; + @Pc(91) int local91 = local60 < local77 ? local60 : local77; + @Pc(98) int local98 = local42 < local77 ? local42 : local77; + @Pc(105) int local105 = local24 < local60 ? local24 : local60; + if (arg5 != 0) { + @Pc(120) int local120 = (int) (Math.atan2(local84 - local91, arg5) * 325.95D) & 0x7FF; + if (local120 != 0) { + this.rotateX(local120); + } + } + if (arg4 != 0) { + @Pc(140) int local140 = (int) (Math.atan2(local105 - local98, arg4) * 325.95D) & 0x7FF; + if (local140 != 0) { + this.rotateZ(local140); + } + } + @Pc(149) int local149 = local24 + local77; + if (local42 + local60 < local149) { + local149 = local42 + local60; + } + local149 = (local149 >> 1) - arg2; + if (local149 != 0) { + this.translate(0, local149, 0); + } + } + + @OriginalMember(owner = "client!ak", name = "d", descriptor = "(I)V") + public abstract void rotateX(@OriginalArg(0) int arg0); + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "(IIIII)V") + @Override + public final void method4545(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + } + + @OriginalMember(owner = "client!ak", name = "c", descriptor = "(III)V") + public abstract void translate(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2); + + @OriginalMember(owner = "client!ak", name = "k", descriptor = "()I") + public abstract int getMinZ(); + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "(IIIIIIIIJILclient!ga;)V") + public abstract void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) long arg8, @OriginalArg(9) int arg9, @OriginalArg(10) ParticleSystem arg10); + + @OriginalMember(owner = "client!ak", name = "a", descriptor = "(I[IIIIZI[I)V") + protected abstract void method4577(@OriginalArg(0) int arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) boolean arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int[] arg7); + + @OriginalMember(owner = "client!ak", name = "l", descriptor = "()V") + public abstract void method4578(); +} diff --git a/client/src/main/java/rt4/MonochromeImageCache.java b/client/src/main/java/rt4/MonochromeImageCache.java new file mode 100644 index 0000000..6f3fca3 --- /dev/null +++ b/client/src/main/java/rt4/MonochromeImageCache.java @@ -0,0 +1,129 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!nd") +public final class MonochromeImageCache { + + @OriginalMember(owner = "client!nd", name = "c", descriptor = "[B") + public static final byte[] aByteArray53 = new byte[32896]; + + @OriginalMember(owner = "client!a", name = "b", descriptor = "[I") + public static final int[] anIntArray1 = new int[4096]; + + @OriginalMember(owner = "client!bc", name = "N", descriptor = "Lclient!lb;") + public static final MonochromeImageCacheEntry entry = new MonochromeImageCacheEntry(0, 0); + + @OriginalMember(owner = "client!nd", name = "f", descriptor = "I") + private int singleRow = -1; + + @OriginalMember(owner = "client!nd", name = "k", descriptor = "I") + private int size = 0; + + @OriginalMember(owner = "client!nd", name = "g", descriptor = "Lclient!ih;") + private LinkedList recentlyUsed = new LinkedList(); + + @OriginalMember(owner = "client!nd", name = "w", descriptor = "Z") + public boolean invalid = false; + + @OriginalMember(owner = "client!nd", name = "l", descriptor = "I") + private final int height; + + @OriginalMember(owner = "client!nd", name = "i", descriptor = "I") + private final int capacity; + + @OriginalMember(owner = "client!nd", name = "o", descriptor = "[Lclient!lb;") + private MonochromeImageCacheEntry[] entries; + + @OriginalMember(owner = "client!nd", name = "a", descriptor = "[[[I") + private int[][][] pixels; + + static { + @Pc(8) int local8 = 0; + for (@Pc(10) int local10 = 0; local10 < 256; local10++) { + for (@Pc(15) int local15 = 0; local15 <= local10; local15++) { + aByteArray53[local8++] = (byte) (255.0D / Math.sqrt((float) (local15 * local15 + local10 * local10 + 65535) / 65535.0F)); + } + } + + for (@Pc(4) int local4 = 0; local4 < 4096; local4++) { + anIntArray1[local4] = method3211(local4); + } + } + + @OriginalMember(owner = "client!nd", name = "", descriptor = "(III)V") + public MonochromeImageCache(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int width) { + this.height = arg1; + this.capacity = arg0; + this.entries = new MonochromeImageCacheEntry[this.height]; + this.pixels = new int[this.capacity][3][width]; + } + + @OriginalMember(owner = "client!we", name = "a", descriptor = "(BI)I") + public static int method3211(@OriginalArg(1) int arg0) { + @Pc(13) int local13 = arg0 * (arg0 * arg0 >> 12) >> 12; + @Pc(26) int local26 = arg0 * 6 - 61440; + @Pc(34) int local34 = (arg0 * local26 >> 12) + 40960; + return local13 * local34 >> 12; + } + + @OriginalMember(owner = "client!nd", name = "a", descriptor = "(B)[[[I") + public final int[][][] get() { + if (this.height != this.capacity) { + throw new RuntimeException("Can only retrieve a full image cache"); + } + for (@Pc(27) int local27 = 0; local27 < this.capacity; local27++) { + this.entries[local27] = entry; + } + return this.pixels; + } + + @OriginalMember(owner = "client!nd", name = "b", descriptor = "(B)V") + public final void clear() { + for (@Pc(7) int local7 = 0; local7 < this.capacity; local7++) { + this.pixels[local7][0] = null; + this.pixels[local7][1] = null; + this.pixels[local7][2] = null; + this.pixels[local7] = null; + } + this.entries = null; + this.pixels = null; + this.recentlyUsed.clear(); + this.recentlyUsed = null; + } + + @OriginalMember(owner = "client!nd", name = "a", descriptor = "(BI)[[I") + public final int[][] get(@OriginalArg(1) int arg0) { + if (this.capacity == this.height) { + this.invalid = this.entries[arg0] == null; + this.entries[arg0] = entry; + return this.pixels[arg0]; + } else if (this.capacity == 1) { + this.invalid = this.singleRow != arg0; + this.singleRow = arg0; + return this.pixels[0]; + } else { + @Pc(44) MonochromeImageCacheEntry local44 = this.entries[arg0]; + if (local44 == null) { + this.invalid = true; + if (this.size < this.capacity) { + local44 = new MonochromeImageCacheEntry(arg0, this.size); + this.size++; + } else { + @Pc(80) MonochromeImageCacheEntry local80 = (MonochromeImageCacheEntry) this.recentlyUsed.tail(); + local44 = new MonochromeImageCacheEntry(arg0, local80.row); + this.entries[local80.index] = null; + local80.unlink(); + } + this.entries[arg0] = local44; + } else { + this.invalid = false; + } + this.recentlyUsed.addHead(local44); + return this.pixels[local44.row]; + } + } +} diff --git a/client/src/main/java/rt4/MonochromeImageCacheEntry.java b/client/src/main/java/rt4/MonochromeImageCacheEntry.java new file mode 100644 index 0000000..d4dee69 --- /dev/null +++ b/client/src/main/java/rt4/MonochromeImageCacheEntry.java @@ -0,0 +1,21 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!lb") +public final class MonochromeImageCacheEntry extends Node { + + @OriginalMember(owner = "client!lb", name = "t", descriptor = "I") + public final int row; + + @OriginalMember(owner = "client!lb", name = "C", descriptor = "I") + public final int index; + + @OriginalMember(owner = "client!lb", name = "", descriptor = "(II)V") + public MonochromeImageCacheEntry(@OriginalArg(0) int index, @OriginalArg(1) int row) { + this.row = row; + this.index = index; + } +} diff --git a/client/src/main/java/rt4/Mouse.java b/client/src/main/java/rt4/Mouse.java new file mode 100644 index 0000000..bc759db --- /dev/null +++ b/client/src/main/java/rt4/Mouse.java @@ -0,0 +1,224 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import javax.swing.*; +import java.awt.Component; +import java.awt.event.*; + +@OriginalClass("client!ug") +public final class Mouse implements MouseListener, MouseMotionListener, FocusListener { + + @OriginalMember(owner = "client!ah", name = "s", descriptor = "I") + public static int clickX = 0; + @OriginalMember(owner = "client!em", name = "y", descriptor = "I") + public static int clickY = 0; + @OriginalMember(owner = "client!sc", name = "v", descriptor = "I") + public static int lastMouseY = 0; + @OriginalMember(owner = "client!rh", name = "o", descriptor = "I") + public static int lastMouseX = 0; + @OriginalMember(owner = "client!he", name = "bb", descriptor = "Lclient!ug;") + public static Mouse instance = new Mouse(); + @OriginalMember(owner = "client!he", name = "Y", descriptor = "I") + public static volatile int anInt2467 = 0; + @OriginalMember(owner = "client!lk", name = "Z", descriptor = "I") + public static int clickButton = 0; + @OriginalMember(owner = "client!bl", name = "Q", descriptor = "I") + public static int pressedButton = 0; + @OriginalMember(owner = "client!ra", name = "jb", descriptor = "J") + public static volatile long aLong161 = 0L; + @OriginalMember(owner = "client!ck", name = "k", descriptor = "I") + public static volatile int anInt1034 = 0; + @OriginalMember(owner = "client!eg", name = "w", descriptor = "I") + public static volatile int anInt1759 = 0; + @OriginalMember(owner = "client!kf", name = "c", descriptor = "J") + public static long clickTime = 0L; + @OriginalMember(owner = "client!dc", name = "W", descriptor = "I") + public static volatile int anInt1313 = 0; + @OriginalMember(owner = "client!nb", name = "j", descriptor = "I") + public static volatile int currentMouseY = -1; + @OriginalMember(owner = "client!lh", name = "u", descriptor = "I") + public static volatile int currentMouseX = -1; + @OriginalMember(owner = "client!sa", name = "Y", descriptor = "I") + public static volatile int anInt4973 = 0; + @OriginalMember(owner = "client!wi", name = "W", descriptor = "I") + public static int anInt5850 = 0; + @OriginalMember(owner = "client!ok", name = "f", descriptor = "J") + public static long prevClickTime = 0L; + @OriginalMember(owner = "client!wl", name = "u", descriptor = "I") + public static int anInt5895 = 0; + + @OriginalMember(owner = "client!sc", name = "a", descriptor = "(ILjava/awt/Component;)V") + public static void stop(@OriginalArg(1) Component arg0) { + arg0.removeMouseListener(instance); + arg0.removeMouseMotionListener(instance); + arg0.removeFocusListener(instance); + anInt1759 = 0; + } + + @OriginalMember(owner = "client!ug", name = "a", descriptor = "(I)V") + public static void quit() { + if (instance != null) { + @Pc(5) Mouse local5 = instance; + synchronized (instance) { + instance = null; + } + } + } + + @OriginalMember(owner = "client!ii", name = "b", descriptor = "(I)V") + public static void loop() { + @Pc(2) Mouse local2 = instance; + synchronized (instance) { + pressedButton = anInt1759; + lastMouseX = currentMouseX; + lastMouseY = currentMouseY; + clickButton = anInt1313; + clickX = anInt1034; + anInt2467++; + clickY = anInt4973; + clickTime = aLong161; + anInt1313 = 0; + } + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(Ljava/awt/Component;Z)V") + public static void start(@OriginalArg(0) Component arg0) { + arg0.addMouseListener(instance); + arg0.addMouseMotionListener(instance); + arg0.addFocusListener(instance); + } + + @OriginalMember(owner = "client!lc", name = "a", descriptor = "(B)I") + public static int getIdleLoops() { + return anInt2467; + } + + @OriginalMember(owner = "client!dl", name = "a", descriptor = "(II)V") + public static void setIdleLoops(@OriginalArg(1) int arg0) { + @Pc(10) Mouse local10 = instance; + synchronized (instance) { + anInt2467 = arg0; + } + } + + @OriginalMember(owner = "client!ug", name = "mouseMoved", descriptor = "(Ljava/awt/event/MouseEvent;)V") + @Override + public final synchronized void mouseMoved(@OriginalArg(0) MouseEvent arg0) { + if (instance != null) { + anInt2467 = 0; + currentMouseX = arg0.getX(); + currentMouseY = arg0.getY(); + } + } + + @OriginalMember(owner = "client!ug", name = "focusLost", descriptor = "(Ljava/awt/event/FocusEvent;)V") + @Override + public final synchronized void focusLost(@OriginalArg(0) FocusEvent arg0) { + if (instance != null) { + anInt1759 = 0; + } + } + + @OriginalMember(owner = "client!ug", name = "mouseDragged", descriptor = "(Ljava/awt/event/MouseEvent;)V") + @Override + public final synchronized void mouseDragged(@OriginalArg(0) MouseEvent event) { + int x = event.getX(); + int y = event.getY(); + + if (SwingUtilities.isMiddleMouseButton(event)) return; + + if (instance != null) { + anInt2467 = 0; + currentMouseX = x; + currentMouseY = y; + } + } + + @OriginalMember(owner = "client!ug", name = "mouseReleased", descriptor = "(Ljava/awt/event/MouseEvent;)V") + @Override + public final synchronized void mouseReleased(@OriginalArg(0) MouseEvent arg0) { + if (instance != null) { + anInt2467 = 0; + anInt1759 = 0; + @Pc(14) int local14 = arg0.getModifiers(); + if ((local14 & 0x10) == 0) { + } + if ((local14 & 0x4) == 0) { + } + if ((local14 & 0x8) == 0) { + } + } + if (arg0.isPopupTrigger()) { + arg0.consume(); + } + } + + @OriginalMember(owner = "client!ug", name = "mouseClicked", descriptor = "(Ljava/awt/event/MouseEvent;)V") + @Override + public final void mouseClicked(@OriginalArg(0) MouseEvent arg0) { + if (arg0.isPopupTrigger()) { + arg0.consume(); + } + } + + @OriginalMember(owner = "client!ug", name = "focusGained", descriptor = "(Ljava/awt/event/FocusEvent;)V") + @Override + public final void focusGained(@OriginalArg(0) FocusEvent arg0) { + } + + @OriginalMember(owner = "client!ug", name = "mousePressed", descriptor = "(Ljava/awt/event/MouseEvent;)V") + @Override + public final synchronized void mousePressed(@OriginalArg(0) MouseEvent event) { + if (SwingUtilities.isMiddleMouseButton(event)) { + return; + } + + if (instance != null) { + anInt2467 = 0; + anInt1034 = event.getX(); + anInt4973 = event.getY(); + aLong161 = MonotonicClock.currentTimeMillis(); + if ((event.getModifiersEx() & MouseEvent.BUTTON3_DOWN_MASK) == 0) { + anInt1313 = 1; + anInt1759 = 1; + } else { + anInt1313 = 2; + anInt1759 = 2; + } + @Pc(29) int local29 = event.getModifiers(); + if ((local29 & 0x10) == 0) { + } + if ((local29 & 0x4) != 0) { + } + if ((local29 & 0x8) != 0) { + } + } + if (event.isPopupTrigger()) { + event.consume(); + } + } + + @OriginalMember(owner = "client!ug", name = "mouseExited", descriptor = "(Ljava/awt/event/MouseEvent;)V") + @Override + public final synchronized void mouseExited(@OriginalArg(0) MouseEvent arg0) { + if (instance != null) { + anInt2467 = 0; + currentMouseX = -1; + currentMouseY = -1; + } + } + + @OriginalMember(owner = "client!ug", name = "mouseEntered", descriptor = "(Ljava/awt/event/MouseEvent;)V") + @Override + public final synchronized void mouseEntered(@OriginalArg(0) MouseEvent arg0) { + if (instance != null) { + anInt2467 = 0; + currentMouseX = arg0.getX(); + currentMouseY = arg0.getY(); + } + } +} diff --git a/client/src/main/java/rt4/MouseRecorder.java b/client/src/main/java/rt4/MouseRecorder.java new file mode 100644 index 0000000..2dc8a69 --- /dev/null +++ b/client/src/main/java/rt4/MouseRecorder.java @@ -0,0 +1,48 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!jd") +public final class MouseRecorder implements Runnable { + + @OriginalMember(owner = "client!od", name = "f", descriptor = "Lclient!jd;") + public static MouseRecorder instance; + @OriginalMember(owner = "client!tm", name = "e", descriptor = "Z") + public static boolean enabled = false; + @OriginalMember(owner = "client!oe", name = "a", descriptor = "I") + public static int mouseRecorderPrevY = 0; + @OriginalMember(owner = "client!vh", name = "s", descriptor = "I") + public static int mouseRecorderPrevX = 0; + @OriginalMember(owner = "client!jd", name = "e", descriptor = "Z") + public boolean running = true; + + @OriginalMember(owner = "client!jd", name = "f", descriptor = "Ljava/lang/Object;") + public final Object lock = new Object(); + + @OriginalMember(owner = "client!jd", name = "k", descriptor = "I") + public int samples = 0; + + @OriginalMember(owner = "client!jd", name = "l", descriptor = "[I") + public final int[] y = new int[500]; + + @OriginalMember(owner = "client!jd", name = "n", descriptor = "[I") + public final int[] x = new int[500]; + + @OriginalMember(owner = "client!jd", name = "run", descriptor = "()V") + @Override + public final void run() { + while (this.running) { + @Pc(12) Object local12 = this.lock; + synchronized (this.lock) { + if (this.samples < 500) { + this.x[this.samples] = Mouse.lastMouseX; + this.y[this.samples] = Mouse.lastMouseY; + this.samples++; + } + } + ThreadUtils.sleep(50L); + } + } +} diff --git a/client/src/main/java/rt4/MouseWheel.java b/client/src/main/java/rt4/MouseWheel.java new file mode 100644 index 0000000..40b1964 --- /dev/null +++ b/client/src/main/java/rt4/MouseWheel.java @@ -0,0 +1,33 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.Component; + +@OriginalClass("client!uc") +public abstract class MouseWheel { + + @OriginalMember(owner = "client!eh", name = "j", descriptor = "I") + public static int wheelRotation = 0; + + @OriginalMember(owner = "client!dh", name = "a", descriptor = "(B)Lclient!uc;") + public static MouseWheel create() { + try { + return new JavaMouseWheel(); + } catch (@Pc(15) Throwable local15) { + return null; + } + } + + @OriginalMember(owner = "client!uc", name = "a", descriptor = "(I)I") + public abstract int getRotation(); + + @OriginalMember(owner = "client!uc", name = "a", descriptor = "(ZLjava/awt/Component;)V") + public abstract void stop(@OriginalArg(1) Component arg0); + + @OriginalMember(owner = "client!uc", name = "a", descriptor = "(Ljava/awt/Component;I)V") + public abstract void start(@OriginalArg(0) Component arg0); +} diff --git a/client/src/main/java/rt4/MsiType.java b/client/src/main/java/rt4/MsiType.java new file mode 100644 index 0000000..7f24b83 --- /dev/null +++ b/client/src/main/java/rt4/MsiType.java @@ -0,0 +1,63 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!aa") +public final class MsiType { + + @OriginalMember(owner = "client!aa", name = "f", descriptor = "I") + public int anInt11; + + @OriginalMember(owner = "client!aa", name = "i", descriptor = "I") + public int spriteId; + + @OriginalMember(owner = "client!aa", name = "s", descriptor = "Z") + public boolean aBoolean2 = false; + + @OriginalMember(owner = "client!aa", name = "a", descriptor = "(BLclient!wa;I)V") + public final void decode(@OriginalArg(1) Buffer arg0, @OriginalArg(2) int arg1) { + while (true) { + @Pc(5) int local5 = arg0.g1(); + if (local5 == 0) { + return; + } + this.method11(local5, arg0, arg1); + } + } + + @OriginalMember(owner = "client!aa", name = "a", descriptor = "(IB)Lclient!ek;") + public final SoftwareIndexedSprite getSprite(@OriginalArg(0) int arg0) { + @Pc(17) SoftwareIndexedSprite local17 = (SoftwareIndexedSprite) MsiTypeList.sprites.get(arg0 << 16 | this.spriteId); + if (local17 != null) { + return local17; + } + MsiTypeList.spritesArchive.isFileReady(this.spriteId); + local17 = SpriteLoader.loadSoftwareIndexedSprite(this.spriteId, MsiTypeList.spritesArchive); + if (local17 != null) { + local17.adjustPalette(MsiTypeList.redDelta, MsiTypeList.greenDelta, MsiTypeList.blueDelta); + local17.innerWidth = local17.width; + local17.innerHeight = local17.height; + for (@Pc(59) int local59 = 0; local59 < arg0; local59++) { + local17.flipVertical(); + } + MsiTypeList.sprites.put(local17, arg0 << 16 | this.spriteId); + } + return local17; + } + + @OriginalMember(owner = "client!aa", name = "a", descriptor = "(ILclient!wa;II)V") + private void method11(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1, @OriginalArg(2) int arg2) { + if (arg0 == 1) { + this.spriteId = arg1.g2(); + } else if (arg0 == 2) { + this.anInt11 = arg1.g3(); + } else if (arg0 == 3) { + this.aBoolean2 = true; + } else if (arg0 == 4) { + this.spriteId = -1; + } + } +} diff --git a/client/src/main/java/rt4/MsiTypeList.java b/client/src/main/java/rt4/MsiTypeList.java new file mode 100644 index 0000000..538d6c7 --- /dev/null +++ b/client/src/main/java/rt4/MsiTypeList.java @@ -0,0 +1,69 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class MsiTypeList { + @OriginalMember(owner = "client!sk", name = "hb", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + @OriginalMember(owner = "client!rl", name = "P", descriptor = "Lclient!n;") + public static final SoftLruHashTable sprites = new SoftLruHashTable(64); + @OriginalMember(owner = "client!hj", name = "m", descriptor = "Lclient!ve;") + public static Js5 archive; + @OriginalMember(owner = "client!uf", name = "r", descriptor = "Lclient!ve;") + public static Js5 spritesArchive; + @OriginalMember(owner = "client!vk", name = "o", descriptor = "I") + public static int blueDelta; + @OriginalMember(owner = "client!gl", name = "e", descriptor = "I") + public static int greenDelta; + @OriginalMember(owner = "client!nk", name = "E", descriptor = "I") + public static int redDelta; + + @OriginalMember(owner = "client!da", name = "c", descriptor = "(II)Lclient!aa;") + public static MsiType get(@OriginalArg(0) int arg0) { + @Pc(10) MsiType local10 = (MsiType) types.get(arg0); + if (local10 != null) { + return local10; + } + @Pc(20) byte[] local20 = archive.fetchFile(34, arg0); + local10 = new MsiType(); + if (local20 != null) { + local10.decode(new Buffer(local20), arg0); + } + types.put(local10, arg0); + return local10; + } + + @OriginalMember(owner = "client!og", name = "a", descriptor = "(Lclient!ve;Lclient!ve;B)V") + public static void init(@OriginalArg(0) Js5 arg0, @OriginalArg(1) Js5 arg1) { + spritesArchive = arg1; + @Pc(12) int local12 = (int) (Math.random() * 21.0D) - 10; + archive = arg0; + @Pc(21) int local21 = (int) (Math.random() * 21.0D) - 10; + archive.getGroupCapacity(34); + @Pc(33) int local33 = (int) (Math.random() * 21.0D) - 10; + @Pc(40) int local40 = (int) (Math.random() * 41.0D) - 20; + blueDelta = local40 + local21; + greenDelta = local12 + local40; + redDelta = local40 + local33; + } + + @OriginalMember(owner = "client!qg", name = "h", descriptor = "(I)V") + public static void clear() { + types.clear(); + sprites.clear(); + } + + @OriginalMember(owner = "client!vl", name = "b", descriptor = "(I)V") + public static void removeSoft() { + types.removeSoft(); + sprites.removeSoft(); + } + + @OriginalMember(owner = "client!wh", name = "a", descriptor = "(II)V") + public static void clean() { + types.clean(5); + sprites.clean(5); + } +} diff --git a/client/src/main/java/rt4/MusicPlayer.java b/client/src/main/java/rt4/MusicPlayer.java new file mode 100644 index 0000000..e0cf67d --- /dev/null +++ b/client/src/main/java/rt4/MusicPlayer.java @@ -0,0 +1,29 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; + +public class MusicPlayer { + @OriginalMember(owner = "client!s", name = "c", descriptor = "I") + public static int groupId = -1; + @OriginalMember(owner = "client!uf", name = "m", descriptor = "I") + public static int titleSong; + + @OriginalMember(owner = "client!li", name = "a", descriptor = "(ZI)V") + public static void playSong(@OriginalArg(1) int arg0) { + if (arg0 == -1 && !MidiPlayer.jingle) { + MidiPlayer.method4548(); + } else if (arg0 != -1 && (groupId != arg0 || !MidiPlayer.isPlaying()) && Preferences.musicVolume != 0 && !MidiPlayer.jingle) { + MidiPlayer.playFadeOut(arg0, client.js5Archive6, Preferences.musicVolume); + } + groupId = arg0; + } + + @OriginalMember(owner = "client!wj", name = "a", descriptor = "(IIB)V") + public static void playJingle(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + if (Preferences.musicVolume != 0 && arg1 != -1) { + MidiPlayer.playImmediate(client.js5Archive11, arg1, Preferences.musicVolume); + MidiPlayer.jingle = true; + } + } +} diff --git a/client/src/main/java/rt4/NanoTimer.java b/client/src/main/java/rt4/NanoTimer.java new file mode 100644 index 0000000..6d4be6b --- /dev/null +++ b/client/src/main/java/rt4/NanoTimer.java @@ -0,0 +1,59 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!om") +public final class NanoTimer extends Timer { + + @OriginalMember(owner = "client!om", name = "k", descriptor = "J") + private long aLong142 = System.nanoTime(); + + @OriginalMember(owner = "client!om", name = "b", descriptor = "(I)V") + @Override + public final void reset() { + this.aLong142 = System.nanoTime(); + } + + @OriginalMember(owner = "client!om", name = "a", descriptor = "(III)I") + @Override + public final int sleep(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + @Pc(9) long local9 = (long) arg0 * 1000000L; + @Pc(14) long local14 = this.aLong142 - System.nanoTime(); + if (local9 > local14) { + local14 = local9; + } + ThreadUtils.sleep(local14 / 1000000L); + @Pc(31) int local31 = 0; + @Pc(33) long local33 = System.nanoTime(); + while (local31 < 10 && (local31 < 1 || this.aLong142 < local33)) { + local31++; + this.aLong142 += (long) arg1 * 1000000L; + } + if (local33 > this.aLong142) { + this.aLong142 = local33; + } + return local31; + } + + @Override + public int count(int arg0, int arg1) { + @Pc(9) long local9 = (long) arg0 * 1000000L; + @Pc(14) long local14 = this.aLong142 - System.nanoTime(); + if (local9 > local14) { + local14 = local9; + } + @Pc(31) int local31 = 0; + @Pc(33) long local33 = System.nanoTime(); + while (local31 < 10 && (local31 < 1 || this.aLong142 < local33)) { + local31++; + this.aLong142 += (long) arg1 * 1000000L; + } + if (local33 > this.aLong142) { + this.aLong142 = local33; + } + return local31; + } +} diff --git a/client/src/main/java/rt4/Node.java b/client/src/main/java/rt4/Node.java new file mode 100644 index 0000000..dfb0dfe --- /dev/null +++ b/client/src/main/java/rt4/Node.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!ab") +public class Node { + + @OriginalMember(owner = "client!ab", name = "a", descriptor = "J") + public long key; + + @OriginalMember(owner = "client!ab", name = "d", descriptor = "Lclient!ab;") + public Node nextNode; + + @OriginalMember(owner = "client!ab", name = "l", descriptor = "Lclient!ab;") + public Node previousNode; + + @OriginalMember(owner = "client!ab", name = "a", descriptor = "(I)Z") + public final boolean isLinked() { + return this.previousNode != null; + } + + @OriginalMember(owner = "client!ab", name = "b", descriptor = "(I)V") + public final void unlink() { + if (this.previousNode != null) { + this.previousNode.nextNode = this.nextNode; + this.nextNode.previousNode = this.previousNode; + this.previousNode = null; + this.nextNode = null; + } + } +} diff --git a/client/src/main/java/rt4/Npc.java b/client/src/main/java/rt4/Npc.java new file mode 100644 index 0000000..828f963 --- /dev/null +++ b/client/src/main/java/rt4/Npc.java @@ -0,0 +1,165 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!km") +public final class Npc extends PathingEntity { + + @OriginalMember(owner = "client!km", name = "rc", descriptor = "Lclient!me;") + public NpcType type; + + @OriginalMember(owner = "client!ij", name = "a", descriptor = "(Lclient!km;I)I") + public static int getSound(@OriginalArg(0) Npc npc) { + @Pc(13) NpcType npcType = npc.type; + if (npcType.multiNpcs != null) { + npcType = npcType.getMultiNpc(); + if (npcType == null) { + return -1; + } + } + @Pc(29) int sound = npcType.walkSound; + @Pc(33) BasType npcBas = npc.getBasType(); + if (npcBas.idleAnimationId == npc.movementSeqId) { + sound = npcType.idleSound; + } else if (npc.movementSeqId == npcBas.runAnimationId || npcBas.runFullTurnAnimationId == npc.movementSeqId || npc.movementSeqId == npcBas.runCWTurnAnimationId || npc.movementSeqId == npcBas.runCCWTurnAnimationId) { + sound = npcType.runSound; + } else if (npcBas.slowWalkAnimationId == npc.movementSeqId || npc.movementSeqId == npcBas.slowWalkFullTurnAnimationId || npc.movementSeqId == npcBas.slowWalkCWTurnAnimationId || npc.movementSeqId == npcBas.slowWalkCCWTurnAnimationId) { + sound = npcType.crawlSound; + } + return sound; + } + + @OriginalMember(owner = "client!km", name = "finalize", descriptor = "()V") + @Override + public final void finalize() { + } + + @OriginalMember(owner = "client!km", name = "b", descriptor = "()I") + @Override + public final int getMinY() { + return this.minY; + } + + @OriginalMember(owner = "client!km", name = "a", descriptor = "(IIIIIIIIJILclient!ga;)V") + @Override + public final void render(@OriginalArg(0) int orientation, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int x, @OriginalArg(6) int z, @OriginalArg(7) int y, @OriginalArg(8) long key, @OriginalArg(9) int arg9, @OriginalArg(10) ParticleSystem arg10) { + if (this.type == null) { + return; + } + + @Pc(29) SeqType local29 = this.seqId != -1 && this.anInt3420 == 0 ? SeqTypeList.get(this.seqId) : null; + @Pc(53) SeqType local53 = this.movementSeqId == -1 || this.movementSeqId == this.getBasType().idleAnimationId && local29 != null ? null : SeqTypeList.get(this.movementSeqId); + @Pc(74) Model body = this.type.getBodyModel(this.aClass147Array3, this.anInt3388, this.anInt3407, this.anInt3373, this.anInt3360, this.anInt3425, local53, this.anInt3396, local29); + if (body == null) { + return; + } + + this.minY = body.getMinY(); + @Pc(84) NpcType local84 = this.type; + if (local84.multiNpcs != null) { + local84 = local84.getMultiNpc(); + } + + @Pc(140) Model model; + if (Preferences.characterShadowsOn && local84.hasshadow) { + model = ShadowModelList.method1043(this.type.shadowcolormodifier1, this.aBoolean171, local53 == null ? local29 : local53, this.xFine, this.type.shadowcolor2, this.zFine, this.type.shadowcolor1, this.type.size, body, orientation, local53 == null ? this.anInt3425 : this.anInt3407, this.anInt3424, this.type.shadowcolormodifier2); + if (GlRenderer.enabled) { + @Pc(144) float local144 = GlRenderer.method4179(); + @Pc(146) float local146 = GlRenderer.method4166(); + GlRenderer.disableDepthMask(); + GlRenderer.method4152(local144, local146 - 150.0F); + model.render(0, arg1, arg2, arg3, arg4, x, z, y, -1L, arg9, this.particleSystem); + GlRenderer.enableDepthMask(); + GlRenderer.method4152(local144, local146); + } else { + model.render(0, arg1, arg2, arg3, arg4, x, z, y, -1L, arg9, this.particleSystem); + } + } + + this.method2687(body); + this.method2685(body, orientation); + + model = null; + if (this.spotAnimId != -1 && this.anInt3399 != -1) { + @Pc(211) SpotAnimType spotAnimType = SpotAnimTypeList.get(this.spotAnimId); + model = spotAnimType.constructModel(this.anInt3418, this.anInt3399, this.anInt3361); + if (model != null) { + model.translate(0, -this.spotAnimY, 0); + + if (spotAnimType.aBoolean100) { + if (PathingEntity.anInt2640 != 0) { + model.rotateX(PathingEntity.anInt2640); + } + if (PathingEntity.anInt2680 != 0) { + model.rotateZ(PathingEntity.anInt2680); + } + if (PathingEntity.anInt1938 != 0) { + model.translate(0, PathingEntity.anInt1938, 0); + } + } + } + } + + if (!GlRenderer.enabled) { + if (model != null) { + body = ((SoftwareModel) body).method4588(model); + } + + if (this.type.size == 1) { + body.pickable = true; + } + + body.render(orientation, arg1, arg2, arg3, arg4, x, z, y, key, arg9, this.particleSystem); + return; + } + + if (this.type.size == 1) { + body.pickable = true; + } + + body.render(orientation, arg1, arg2, arg3, arg4, x, z, y, key, arg9, this.particleSystem); + if (model != null) { + if (this.type.size == 1) { + model.pickable = true; + } + + model.render(orientation, arg1, arg2, arg3, arg4, x, z, y, key, arg9, this.particleSystem); + } + } + + @OriginalMember(owner = "client!km", name = "b", descriptor = "(I)I") + @Override + public final int getBasId() { + if (client.game != 0 && this.type.multiNpcs != null) { + @Pc(17) NpcType local17 = this.type.getMultiNpc(); + if (local17 != null && local17.bastypeid != -1) { + return local17.bastypeid; + } + } + return this.anInt3365; + } + + @OriginalMember(owner = "client!km", name = "a", descriptor = "(IIIII)V") + @Override + public final void method4545(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (this.type == null) { + } + } + + @OriginalMember(owner = "client!km", name = "a", descriptor = "(B)Z") + @Override + public final boolean isVisible() { + return this.type != null; + } + + @OriginalMember(owner = "client!km", name = "a", descriptor = "(ILclient!me;)V") + public final void setNpcType(@OriginalArg(1) NpcType arg0) { + this.type = arg0; + if (this.particleSystem != null) { + this.particleSystem.method1646(); + } + } +} diff --git a/client/src/main/java/rt4/NpcList.java b/client/src/main/java/rt4/NpcList.java new file mode 100644 index 0000000..56613b2 --- /dev/null +++ b/client/src/main/java/rt4/NpcList.java @@ -0,0 +1,622 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class NpcList { + @OriginalMember(owner = "client!nm", name = "S", descriptor = "[Lclient!km;") + public static final Npc[] npcs = new Npc[32768]; + @OriginalMember(owner = "client!cj", name = "i", descriptor = "[I") + public static final int[] ids = new int[32768]; + @OriginalMember(owner = "client!wd", name = "g", descriptor = "I") + public static int size = 0; + + @OriginalMember(owner = "client!ig", name = "a", descriptor = "(I)V") + public static void method2274() { + for (@Pc(7) int local7 = 0; local7 < size; local7++) { + @Pc(18) int local18 = ids[local7]; + @Pc(22) Npc local22 = npcs[local18]; + if (local22 != null) { + method4514(local22.type.size, local22); + } + } + } + + @OriginalMember(owner = "client!vg", name = "a", descriptor = "(IILclient!fe;)V") + public static void method4514(@OriginalArg(0) int arg0, @OriginalArg(2) PathingEntity arg1) { + if (client.loop < arg1.forceMoveCyclesToStart) { + lerpToForceMoveStart(arg1); + } else if (arg1.forceMoveCyclesToDest >= client.loop) { + lerpToForceMoveDest(arg1); + } else { + method2247(arg1); + } + if (arg1.xFine < 128 || arg1.zFine < 128 || arg1.xFine >= 13184 || arg1.zFine >= 13184) { + arg1.seqId = -1; + arg1.spotAnimId = -1; + arg1.forceMoveCyclesToStart = 0; + arg1.forceMoveCyclesToDest = 0; + arg1.xFine = arg1.movementQueueX[0] * 128 + arg1.getSize() * 64; + arg1.zFine = arg1.movementQueueZ[0] * 128 + arg1.getSize() * 64; + arg1.method2689(); + } + if (arg1 == PlayerList.self && (arg1.xFine < 1536 || arg1.zFine < 1536 || arg1.xFine >= 11776 || arg1.zFine >= 11776)) { + arg1.spotAnimId = -1; + arg1.forceMoveCyclesToStart = 0; + arg1.forceMoveCyclesToDest = 0; + arg1.seqId = -1; + arg1.xFine = arg1.movementQueueX[0] * 128 + arg1.getSize() * 64; + arg1.zFine = arg1.movementQueueZ[0] * 128 + arg1.getSize() * 64; + arg1.method2689(); + } + method949(arg1); + method879(arg1); + } + + @OriginalMember(owner = "client!bh", name = "a", descriptor = "(Lclient!fe;Z)V") + public static void lerpToForceMoveStart(@OriginalArg(0) PathingEntity arg0) { + @Pc(8) int toStartCyclesLeft = arg0.forceMoveCyclesToStart - client.loop; + @Pc(20) int startXFine = arg0.forceMoveStartX * 128 + arg0.getSize() * 64; + @Pc(36) int startYFine = arg0.forceMoveStartY * 128 + arg0.getSize() * 64; + if (arg0.forceMoveDirection == 0) { + arg0.anInt3400 = 1024; + } + arg0.xFine += (startXFine - arg0.xFine) / toStartCyclesLeft; + arg0.zFine += (startYFine - arg0.zFine) / toStartCyclesLeft; + if (arg0.forceMoveDirection == 1) { + arg0.anInt3400 = 1536; + } + arg0.anInt3417 = 0; + if (arg0.forceMoveDirection == 2) { + arg0.anInt3400 = 0; + } + if (arg0.forceMoveDirection == 3) { + arg0.anInt3400 = 512; + } + } + + @OriginalMember(owner = "client!wl", name = "a", descriptor = "(Lclient!fe;B)V") + public static void lerpToForceMoveDest(@OriginalArg(0) PathingEntity arg0) { + if (client.loop == arg0.forceMoveCyclesToDest || arg0.seqId == -1 || arg0.anInt3420 != 0 || arg0.anInt3360 + 1 > SeqTypeList.get(arg0.seqId).frameDelay[arg0.anInt3425]) { + @Pc(35) int cyclesDiff = arg0.forceMoveCyclesToDest - arg0.forceMoveCyclesToStart; + @Pc(41) int lerpCyclesRemaining = client.loop - arg0.forceMoveCyclesToStart; + @Pc(52) int startXFine = arg0.forceMoveStartX * 128 + arg0.getSize() * 64; + @Pc(64) int startYFine = arg0.forceMoveStartY * 128 + arg0.getSize() * 64; + @Pc(75) int destXFine = arg0.forceMoveDestX * 128 + arg0.getSize() * 64; + @Pc(86) int destYFine = arg0.forceMoveDestY * 128 + arg0.getSize() * 64; + arg0.xFine = (lerpCyclesRemaining * destXFine + startXFine * (cyclesDiff - lerpCyclesRemaining)) / cyclesDiff; + arg0.zFine = (destYFine * lerpCyclesRemaining + startYFine * (cyclesDiff - lerpCyclesRemaining)) / cyclesDiff; + } + arg0.anInt3417 = 0; + if (arg0.forceMoveDirection == 0) { + arg0.anInt3400 = 1024; + } + if (arg0.forceMoveDirection == 1) { + arg0.anInt3400 = 1536; + } + if (arg0.forceMoveDirection == 2) { + arg0.anInt3400 = 0; + } + if (arg0.forceMoveDirection == 3) { + arg0.anInt3400 = 512; + } + arg0.anInt3381 = arg0.anInt3400; + } + + @OriginalMember(owner = "client!ia", name = "a", descriptor = "(BLclient!fe;)V") + public static void method2247(@OriginalArg(1) PathingEntity arg0) { + @Pc(9) BasType local9 = arg0.getBasType(); + arg0.movementSeqId = local9.idleAnimationId; + if (arg0.movementQueueSize == 0) { + arg0.anInt3417 = 0; + return; + } + if (arg0.seqId != -1 && arg0.anInt3420 == 0) { + @Pc(40) SeqType local40 = SeqTypeList.get(arg0.seqId); + if (arg0.anInt3405 > 0 && local40.looptype == 0) { + arg0.anInt3417++; + return; + } + if (arg0.anInt3405 <= 0 && local40.movetype == 0) { + arg0.anInt3417++; + return; + } + } + @Pc(79) int local79 = arg0.xFine; + @Pc(82) int local82 = arg0.zFine; + @Pc(99) int local99 = arg0.movementQueueX[arg0.movementQueueSize - 1] * 128 + arg0.getSize() * 64; + @Pc(116) int local116 = arg0.movementQueueZ[arg0.movementQueueSize - 1] * 128 + arg0.getSize() * 64; + if (local99 - local79 > 256 || local99 - local79 < -256 || local116 - local82 > 256 || local116 - local82 < -256) { + arg0.xFine = local99; + arg0.zFine = local116; + return; + } + if (local99 <= local79) { + if (local79 <= local99) { + if (local116 > local82) { + arg0.anInt3400 = 1024; + } else if (local82 > local116) { + arg0.anInt3400 = 0; + } + } else if (local116 > local82) { + arg0.anInt3400 = 768; + } else if (local116 < local82) { + arg0.anInt3400 = 256; + } else { + arg0.anInt3400 = 512; + } + } else if (local116 > local82) { + arg0.anInt3400 = 1280; + } else if (local82 > local116) { + arg0.anInt3400 = 1792; + } else { + arg0.anInt3400 = 1536; + } + @Pc(224) int local224 = arg0.anInt3400 - arg0.anInt3381 & 0x7FF; + @Pc(227) int local227 = local9.walkFullTurnAnimationId; + if (local224 > 1024) { + local224 -= 2048; + } + @Pc(233) boolean local233 = true; + @Pc(235) byte local235 = 1; + if (local224 >= -256 && local224 <= 256) { + local227 = local9.walkAnimation; + } else if (local224 >= 256 && local224 < 768) { + local227 = local9.walkCWTurnAnimationId; + } else if (local224 >= -768 && local224 <= -256) { + local227 = local9.walkCCWTurnAnimationId; + } + @Pc(273) int local273 = 4; + if (local227 == -1) { + local227 = local9.walkAnimation; + } + arg0.movementSeqId = local227; + if (arg0 instanceof Npc) { + local233 = ((Npc) arg0).type.rotationflag; + } + if (local233) { + if (arg0.anInt3381 != arg0.anInt3400 && arg0.faceEntity == -1 && arg0.anInt3376 != 0) { + local273 = 2; + } + if (arg0.movementQueueSize > 2) { + local273 = 6; + } + if (arg0.movementQueueSize > 3) { + local273 = 8; + } + if (arg0.anInt3417 > 0 && arg0.movementQueueSize > 1) { + local273 = 8; + arg0.anInt3417--; + } + } else { + if (arg0.movementQueueSize > 1) { + local273 = 6; + } + if (arg0.movementQueueSize > 2) { + local273 = 8; + } + if (arg0.anInt3417 > 0 && arg0.movementQueueSize > 1) { + arg0.anInt3417--; + local273 = 8; + } + } + if (arg0.movementQueueSpeed[arg0.movementQueueSize - 1] == 2) { + local273 <<= 0x1; + local235 = 2; + } else if (arg0.movementQueueSpeed[arg0.movementQueueSize - 1] == 0) { + local235 = 0; + local273 >>= 0x1; + } + if (local273 < 8 || local9.runAnimationId == -1) { + if (local9.slowWalkAnimationId != -1 && local235 == 0) { + if (local9.walkFullTurnAnimationId == arg0.movementSeqId && local9.slowWalkFullTurnAnimationId != -1) { + arg0.movementSeqId = local9.slowWalkFullTurnAnimationId; + } else if (local9.walkCCWTurnAnimationId == arg0.movementSeqId && local9.slowWalkCCWTurnAnimationId != -1) { + arg0.movementSeqId = local9.slowWalkCCWTurnAnimationId; + } else if (local9.walkCWTurnAnimationId == arg0.movementSeqId && local9.slowWalkCWTurnAnimationId != -1) { + arg0.movementSeqId = local9.slowWalkCWTurnAnimationId; + } else { + arg0.movementSeqId = local9.slowWalkAnimationId; + } + } + } else if (local9.walkFullTurnAnimationId == arg0.movementSeqId && local9.runFullTurnAnimationId != -1) { + arg0.movementSeqId = local9.runFullTurnAnimationId; + } else if (arg0.movementSeqId == local9.walkCCWTurnAnimationId && local9.runCCWTurnAnimationId != -1) { + arg0.movementSeqId = local9.runCCWTurnAnimationId; + } else if (arg0.movementSeqId == local9.walkCWTurnAnimationId && local9.runCWTurnAnimationId != -1) { + arg0.movementSeqId = local9.runCWTurnAnimationId; + } else { + arg0.movementSeqId = local9.runAnimationId; + } + if (local9.movementAcceleration != -1) { + local273 <<= 0x7; + if (arg0.movementQueueSize == 1) { + @Pc(594) int local594 = (local99 >= arg0.xFine ? local99 - arg0.xFine : -local99 + arg0.xFine) << 7; + @Pc(600) int local600 = arg0.anInt3358 * arg0.anInt3358; + @Pc(622) int local622 = (local116 < arg0.zFine ? arg0.zFine - local116 : -arg0.zFine + local116) << 7; + @Pc(629) int local629 = local594 > local622 ? local594 : local622; + @Pc(636) int local636 = local9.movementAcceleration * 2 * local629; + if (local636 < local600) { + arg0.anInt3358 /= 2; + } else if (local629 < local600 / 2) { + arg0.anInt3358 -= local9.movementAcceleration; + if (arg0.anInt3358 < 0) { + arg0.anInt3358 = 0; + } + } else if (arg0.anInt3358 < local273) { + arg0.anInt3358 += local9.movementAcceleration; + if (arg0.anInt3358 > local273) { + arg0.anInt3358 = local273; + } + } + } else if (local273 > arg0.anInt3358) { + arg0.anInt3358 += local9.movementAcceleration; + if (local273 < arg0.anInt3358) { + arg0.anInt3358 = local273; + } + } else if (arg0.anInt3358 > 0) { + arg0.anInt3358 -= local9.movementAcceleration; + if (arg0.anInt3358 < 0) { + arg0.anInt3358 = 0; + } + } + local273 = arg0.anInt3358 >> 7; + if (local273 < 1) { + local273 = 1; + } + } + if (local79 < local99) { + arg0.xFine += local273; + if (local99 < arg0.xFine) { + arg0.xFine = local99; + } + } else if (local79 > local99) { + arg0.xFine -= local273; + if (local99 > arg0.xFine) { + arg0.xFine = local99; + } + } + if (local82 < local116) { + arg0.zFine += local273; + if (arg0.zFine > local116) { + arg0.zFine = local116; + } + } else if (local116 < local82) { + arg0.zFine -= local273; + if (local116 > arg0.zFine) { + arg0.zFine = local116; + } + } + if (arg0.xFine == local99 && local116 == arg0.zFine) { + arg0.movementQueueSize--; + if (arg0.anInt3405 > 0) { + arg0.anInt3405--; + } + } + } + + @OriginalMember(owner = "client!cm", name = "a", descriptor = "(ILclient!fe;)V") + public static void method949(@OriginalArg(1) PathingEntity arg0) { + if (arg0.anInt3376 == 0) { + return; + } + @Pc(13) BasType local13 = arg0.getBasType(); + @Pc(43) int local43; + @Pc(36) int local36; + if (arg0.faceEntity != -1 && arg0.faceEntity < 32768) { + @Pc(26) Npc local26 = npcs[arg0.faceEntity]; + if (local26 != null) { + local36 = arg0.zFine - local26.zFine; + local43 = arg0.xFine - local26.xFine; + if (local43 != 0 || local36 != 0) { + arg0.anInt3400 = (int) (Math.atan2(local43, local36) * 325.949D) & 0x7FF; + } + } + } + @Pc(94) int local94; + @Pc(70) int local70; + if (arg0.faceEntity >= 32768) { + local70 = arg0.faceEntity - 32768; + if (local70 == PlayerList.selfId) { + local70 = 2047; + } + @Pc(83) Player local83 = PlayerList.players[local70]; + if (local83 != null) { + local94 = arg0.zFine - local83.zFine; + local36 = arg0.xFine - local83.xFine; + if (local36 != 0 || local94 != 0) { + arg0.anInt3400 = (int) (Math.atan2(local36, local94) * 325.949D) & 0x7FF; + } + } + } + if ((arg0.faceX != 0 || arg0.faceY != 0) && (arg0.movementQueueSize == 0 || arg0.anInt3417 > 0)) { + local70 = arg0.xFine - (arg0.faceX - Camera.originX - Camera.originX) * 64; + local43 = arg0.zFine - (arg0.faceY - Camera.originZ - Camera.originZ) * 64; + if (local70 != 0 || local43 != 0) { + arg0.anInt3400 = (int) (Math.atan2(local70, local43) * 325.949D) & 0x7FF; + } + arg0.faceY = 0; + arg0.faceX = 0; + } + local70 = arg0.anInt3400 - arg0.anInt3381 & 0x7FF; + if (local70 == 0) { + arg0.anInt3385 = 0; + arg0.anInt3414 = 0; + } else if (local13.yawAcceleration == 0) { + arg0.anInt3385++; + @Pc(226) boolean local226; + if (local70 > 1024) { + arg0.anInt3381 -= arg0.anInt3376; + local226 = true; + if (local70 < arg0.anInt3376 || local70 > 2048 - arg0.anInt3376) { + arg0.anInt3381 = arg0.anInt3400; + local226 = false; + } + if (local13.idleAnimationId == arg0.movementSeqId && (arg0.anInt3385 > 25 || local226)) { + if (local13.standingCCWTurn == -1) { + arg0.movementSeqId = local13.walkAnimation; + } else { + arg0.movementSeqId = local13.standingCCWTurn; + } + } + } else { + local226 = true; + arg0.anInt3381 += arg0.anInt3376; + if (arg0.anInt3376 > local70 || local70 > 2048 - arg0.anInt3376) { + local226 = false; + arg0.anInt3381 = arg0.anInt3400; + } + if (local13.idleAnimationId == arg0.movementSeqId && (arg0.anInt3385 > 25 || local226)) { + if (local13.standingCWTurn == -1) { + arg0.movementSeqId = local13.walkAnimation; + } else { + arg0.movementSeqId = local13.standingCWTurn; + } + } + } + arg0.anInt3381 &= 0x7FF; + } else { + if (local13.idleAnimationId == arg0.movementSeqId && arg0.anInt3385 > 25) { + if (local13.standingCWTurn == -1) { + arg0.movementSeqId = local13.walkAnimation; + } else { + arg0.movementSeqId = local13.standingCWTurn; + } + } + local43 = arg0.anInt3400 << 5; + if (local43 != arg0.anInt3402) { + arg0.anInt3387 = 0; + arg0.anInt3402 = local43; + local36 = local43 - arg0.anInt3377 & 0xFFFF; + local94 = arg0.anInt3414 * arg0.anInt3414 / (local13.yawAcceleration * 2); + @Pc(471) int local471; + if (arg0.anInt3414 > 0 && local36 >= local94 && local36 - local94 < 32768) { + arg0.anInt3397 = local36 / 2; + arg0.aBoolean167 = true; + local471 = local13.yawMaxSpeed * local13.yawMaxSpeed / (local13.yawAcceleration * 2); + if (local471 > 32767) { + local471 = 32767; + } + if (local471 < arg0.anInt3397) { + arg0.anInt3397 = local36 - local471; + } + } else if (arg0.anInt3414 < 0 && local94 <= 65536 - local36 && 65536 - local36 - local94 < 32768) { + arg0.anInt3397 = (65536 - local36) / 2; + arg0.aBoolean167 = true; + local471 = local13.yawMaxSpeed * local13.yawMaxSpeed / (local13.yawAcceleration * 2); + if (local471 > 32767) { + local471 = 32767; + } + if (local471 < arg0.anInt3397) { + arg0.anInt3397 = 65536 - local36 - local471; + } + } else { + arg0.aBoolean167 = false; + } + } + if (arg0.anInt3414 == 0) { + local36 = arg0.anInt3402 - arg0.anInt3377 & 0xFFFF; + if (local36 < local13.yawAcceleration) { + arg0.anInt3377 = arg0.anInt3402; + } else { + arg0.anInt3387 = 0; + local94 = local13.yawMaxSpeed * local13.yawMaxSpeed / (local13.yawAcceleration * 2); + arg0.aBoolean167 = true; + if (local94 > 32767) { + local94 = 32767; + } + if (local36 >= 32768) { + arg0.anInt3414 = -local13.yawAcceleration; + arg0.anInt3397 = (65536 - local36) / 2; + if (local94 < arg0.anInt3397) { + arg0.anInt3397 = 65536 - local36 - local94; + } + } else { + arg0.anInt3414 = local13.yawAcceleration; + arg0.anInt3397 = local36 / 2; + if (local94 < arg0.anInt3397) { + arg0.anInt3397 = local36 - local94; + } + } + } + } else if (arg0.anInt3414 <= 0) { + if (arg0.anInt3387 >= arg0.anInt3397) { + arg0.aBoolean167 = false; + } + if (!arg0.aBoolean167) { + arg0.anInt3414 += local13.yawAcceleration; + if (arg0.anInt3414 > 0) { + arg0.anInt3414 = 0; + } + } else if (-local13.yawMaxSpeed < arg0.anInt3414) { + arg0.anInt3414 -= local13.yawAcceleration; + } + } else { + if (arg0.anInt3397 <= arg0.anInt3387) { + arg0.aBoolean167 = false; + } + if (!arg0.aBoolean167) { + arg0.anInt3414 -= local13.yawAcceleration; + if (arg0.anInt3414 < 0) { + arg0.anInt3414 = 0; + } + } else if (arg0.anInt3414 < local13.yawMaxSpeed) { + arg0.anInt3414 += local13.yawAcceleration; + } + } + arg0.anInt3377 += arg0.anInt3414; + arg0.anInt3377 &= 0xFFFF; + if (arg0.anInt3414 <= 0) { + arg0.anInt3387 -= arg0.anInt3414; + } else { + arg0.anInt3387 += arg0.anInt3414; + } + arg0.anInt3381 = arg0.anInt3377 >> 5; + } + } + + @OriginalMember(owner = "client!ck", name = "a", descriptor = "(Lclient!fe;I)V") + public static void method879(@OriginalArg(0) PathingEntity entity) { + entity.aBoolean171 = false; + @Pc(18) SeqType local18; + if (entity.movementSeqId != -1) { + local18 = SeqTypeList.get(entity.movementSeqId); + if (local18 == null || local18.frames == null) { + entity.movementSeqId = -1; + } else { + entity.anInt3396++; + if (local18.frames.length > entity.anInt3407 && entity.anInt3396 > local18.frameDelay[entity.anInt3407]) { + entity.anInt3396 = 1; + entity.anInt3407++; + entity.anInt3388++; + SoundPlayer.playSeqSound(entity.zFine, local18, entity.xFine, entity == PlayerList.self, entity.anInt3407); + } + if (entity.anInt3407 >= local18.frames.length) { + entity.anInt3407 = 0; + entity.anInt3396 = 0; + SoundPlayer.playSeqSound(entity.zFine, local18, entity.xFine, PlayerList.self == entity, entity.anInt3407); + } + entity.anInt3388 = entity.anInt3407 + 1; + if (entity.anInt3388 >= local18.frames.length) { + entity.anInt3388 = 0; + } + } + } + @Pc(156) int local156; + if (entity.spotAnimId != -1 && client.loop >= entity.spotAnimStart) { + local156 = SpotAnimTypeList.get(entity.spotAnimId).seqId; + if (local156 == -1) { + entity.spotAnimId = -1; + } else { + @Pc(165) SeqType local165 = SeqTypeList.get(local156); + if (local165 == null || local165.frames == null) { + entity.spotAnimId = -1; + } else { + if (entity.anInt3399 < 0) { + entity.anInt3399 = 0; + SoundPlayer.playSeqSound(entity.zFine, local165, entity.xFine, PlayerList.self == entity, 0); + } + entity.anInt3361++; + if (entity.anInt3399 < local165.frames.length && local165.frameDelay[entity.anInt3399] < entity.anInt3361) { + entity.anInt3399++; + entity.anInt3361 = 1; + SoundPlayer.playSeqSound(entity.zFine, local165, entity.xFine, PlayerList.self == entity, entity.anInt3399); + } + if (entity.anInt3399 >= local165.frames.length) { + entity.spotAnimId = -1; + } + entity.anInt3418 = entity.anInt3399 + 1; + if (local165.frames.length <= entity.anInt3418) { + entity.anInt3418 = -1; + } + } + } + } + if (entity.seqId != -1 && entity.anInt3420 <= 1) { + local18 = SeqTypeList.get(entity.seqId); + if (local18.looptype == 1 && entity.anInt3405 > 0 && client.loop >= entity.forceMoveCyclesToStart && client.loop > entity.forceMoveCyclesToDest) { + entity.anInt3420 = 1; + return; + } + } + if (entity.seqId != -1 && entity.anInt3420 == 0) { + local18 = SeqTypeList.get(entity.seqId); + if (local18 == null || local18.frames == null) { + entity.seqId = -1; + } else { + entity.anInt3360++; + if (entity.anInt3425 < local18.frames.length && entity.anInt3360 > local18.frameDelay[entity.anInt3425]) { + entity.anInt3360 = 1; + entity.anInt3425++; + SoundPlayer.playSeqSound(entity.zFine, local18, entity.xFine, entity == PlayerList.self, entity.anInt3425); + } + if (local18.frames.length <= entity.anInt3425) { + entity.anInt3425 -= local18.replayoff; + entity.anInt3371++; + if (entity.anInt3371 >= local18.replaycount) { + entity.seqId = -1; + } else if (entity.anInt3425 >= 0 && local18.frames.length > entity.anInt3425) { + SoundPlayer.playSeqSound(entity.zFine, local18, entity.xFine, PlayerList.self == entity, entity.anInt3425); + } else { + entity.seqId = -1; + } + } + entity.anInt3373 = entity.anInt3425 + 1; + if (entity.anInt3373 >= local18.frames.length) { + entity.anInt3373 -= local18.replayoff; + if (local18.replaycount <= entity.anInt3371 + 1) { + entity.anInt3373 = -1; + } else if (entity.anInt3373 < 0 || entity.anInt3373 >= local18.frames.length) { + entity.anInt3373 = -1; + } + } + entity.aBoolean171 = local18.stretches; + } + } + if (entity.anInt3420 > 0) { + entity.anInt3420--; + } + + for (local156 = 0; local156 < entity.aClass147Array3.length; local156++) { + @Pc(545) PathingEntity_Class147 c147 = entity.aClass147Array3[local156]; + if (c147 != null) { + if (c147.anInt5408 > 0) { + c147.anInt5408--; + } else { + @Pc(570) SeqType local570 = SeqTypeList.get(c147.anInt5396); + if (local570 == null || local570.frames == null) { + entity.aClass147Array3[local156] = null; + } else { + c147.anInt5404++; + if (c147.anInt5399 < local570.frames.length && c147.anInt5404 > local570.frameDelay[c147.anInt5399]) { + c147.anInt5399++; + c147.anInt5404 = 1; + SoundPlayer.playSeqSound(entity.zFine, local570, entity.xFine, entity == PlayerList.self, c147.anInt5399); + } + if (local570.frames.length <= c147.anInt5399) { + c147.anInt5400++; + c147.anInt5399 -= local570.replayoff; + if (local570.replaycount <= c147.anInt5400) { + entity.aClass147Array3[local156] = null; + } else if (c147.anInt5399 >= 0 && c147.anInt5399 < local570.frames.length) { + SoundPlayer.playSeqSound(entity.zFine, local570, entity.xFine, PlayerList.self == entity, c147.anInt5399); + } else { + entity.aClass147Array3[local156] = null; + } + } + c147.anInt5398 = c147.anInt5399 + 1; + if (local570.frames.length <= c147.anInt5398) { + c147.anInt5398 -= local570.replayoff; + if (c147.anInt5400 + 1 >= local570.replaycount) { + c147.anInt5398 = -1; + } else if (c147.anInt5398 < 0 || local570.frames.length <= c147.anInt5398) { + c147.anInt5398 = -1; + } + } + } + } + } + } + } +} diff --git a/client/src/main/java/rt4/NpcType.java b/client/src/main/java/rt4/NpcType.java new file mode 100644 index 0000000..da0ac1e --- /dev/null +++ b/client/src/main/java/rt4/NpcType.java @@ -0,0 +1,754 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!me") +public final class NpcType { + + @OriginalMember(owner = "client!id", name = "e", descriptor = "[I") + public static final int[] anIntArray259 = new int[14]; + @OriginalMember(owner = "client!lg", name = "c", descriptor = "[Lclient!tk;") + public static final SeqType[] aClass144Array1 = new SeqType[14]; + @OriginalMember(owner = "client!ag", name = "cb", descriptor = "[Lclient!cl;") + public static final AnimFrameset[] aClass3_Sub2_Sub7Array1 = new AnimFrameset[14]; + @OriginalMember(owner = "client!fk", name = "k", descriptor = "[I") + public static final int[] anIntArray147 = new int[14]; + @OriginalMember(owner = "client!rg", name = "A", descriptor = "[I") + public static final int[] anIntArray492 = new int[14]; + @OriginalMember(owner = "client!kd", name = "mb", descriptor = "[Lclient!cl;") + public static final AnimFrameset[] aClass3_Sub2_Sub7Array5 = new AnimFrameset[14]; + @OriginalMember(owner = "client!en", name = "t", descriptor = "[I") + public static final int[] anIntArray148 = new int[14]; + @OriginalMember(owner = "client!me", name = "b", descriptor = "[S") + private short[] retex_d; + + @OriginalMember(owner = "client!me", name = "c", descriptor = "[B") + private byte[] recol_p; + + @OriginalMember(owner = "client!me", name = "d", descriptor = "[S") + private short[] recol_s; + + @OriginalMember(owner = "client!me", name = "g", descriptor = "[I") + private int[] headmodels; + + @OriginalMember(owner = "client!me", name = "o", descriptor = "[S") + private short[] recol_d; + + @OriginalMember(owner = "client!me", name = "t", descriptor = "[[I") + private int[][] anIntArrayArray28; + + @OriginalMember(owner = "client!me", name = "z", descriptor = "[[I") + private int[][] modeloffsets; + + @OriginalMember(owner = "client!me", name = "J", descriptor = "[S") + private short[] retex_s; + + @OriginalMember(owner = "client!me", name = "K", descriptor = "Lclient!sc;") + private HashTable params; + + @OriginalMember(owner = "client!me", name = "X", descriptor = "I") + public int id; + + @OriginalMember(owner = "client!me", name = "cb", descriptor = "[I") + private int[] modelIndices; + + @OriginalMember(owner = "client!me", name = "hb", descriptor = "[I") + public int[] multiNpcs; + + @OriginalMember(owner = "client!me", name = "A", descriptor = "I") + public int idleSound = -1; + + @OriginalMember(owner = "client!me", name = "I", descriptor = "Z") + public boolean interactive = true; + + @OriginalMember(owner = "client!me", name = "a", descriptor = "I") + public int size = 1; + + @OriginalMember(owner = "client!me", name = "q", descriptor = "Z") + public boolean rotationflag = true; + + @OriginalMember(owner = "client!me", name = "O", descriptor = "I") + public int runSound = -1; + + @OriginalMember(owner = "client!me", name = "r", descriptor = "S") + public short shadowcolor2 = 0; + + @OriginalMember(owner = "client!vk", name = "d", descriptor = "Lclient!na;") + public static final JagString aClass100_1010 = JagString.parse("null"); + @OriginalMember(owner = "client!me", name = "L", descriptor = "Lclient!na;") + public JagString name = aClass100_1010; + + @OriginalMember(owner = "client!me", name = "x", descriptor = "I") + public int combatLevel = -1; + + @OriginalMember(owner = "client!me", name = "Z", descriptor = "Z") + public boolean minimapdisplay = true; + + @OriginalMember(owner = "client!me", name = "l", descriptor = "I") + public int cursor1 = -1; + + @OriginalMember(owner = "client!me", name = "U", descriptor = "I") + private int contrast = 0; + + @OriginalMember(owner = "client!me", name = "V", descriptor = "I") + public int minimapmarkerobjectentry = -1; + + @OriginalMember(owner = "client!me", name = "C", descriptor = "I") + private int resizeX = 128; + + @OriginalMember(owner = "client!me", name = "N", descriptor = "B") + public byte shadowcolormodifier2 = -16; + + @OriginalMember(owner = "client!me", name = "H", descriptor = "I") + public int headicon = -1; + + @OriginalMember(owner = "client!me", name = "F", descriptor = "B") + public byte loginscreenproperties = 0; + + @OriginalMember(owner = "client!me", name = "e", descriptor = "Z") + public boolean hasshadow = true; + + @OriginalMember(owner = "client!me", name = "ab", descriptor = "S") + public short shadowcolor1 = 0; + + @OriginalMember(owner = "client!me", name = "db", descriptor = "I") + public int cursor2Op = -1; + + @OriginalMember(owner = "client!me", name = "R", descriptor = "I") + public int hitBarId = -1; + + @OriginalMember(owner = "client!me", name = "h", descriptor = "I") + private int ambient = 0; + + @OriginalMember(owner = "client!me", name = "B", descriptor = "Z") + public boolean toprenderpriority = false; + + @OriginalMember(owner = "client!me", name = "M", descriptor = "I") + public int rotationspeed = 32; + + @OriginalMember(owner = "client!me", name = "u", descriptor = "[Lclient!na;") + public final JagString[] ops = new JagString[5]; + + @OriginalMember(owner = "client!me", name = "ib", descriptor = "I") + public int walkSound = -1; + + @OriginalMember(owner = "client!me", name = "bb", descriptor = "B") + public byte shadowcolormodifier1 = -96; + + @OriginalMember(owner = "client!me", name = "G", descriptor = "B") + public byte spawndirection = 7; + + @OriginalMember(owner = "client!me", name = "S", descriptor = "I") + public int bastypeid = -1; + + @OriginalMember(owner = "client!me", name = "mb", descriptor = "I") + public int cursor1Op = -1; + + @OriginalMember(owner = "client!me", name = "gb", descriptor = "I") + public int soundRadius = 0; + + @OriginalMember(owner = "client!me", name = "E", descriptor = "I") + private int resizeY = 128; + + @OriginalMember(owner = "client!me", name = "s", descriptor = "I") + public int multiNpcVarbit = -1; + + @OriginalMember(owner = "client!me", name = "fb", descriptor = "I") + public int crawlSound = -1; + + @OriginalMember(owner = "client!me", name = "D", descriptor = "I") + public int iconHeight = -1; + + @OriginalMember(owner = "client!me", name = "Q", descriptor = "I") + public int cursor2 = -1; + + @OriginalMember(owner = "client!me", name = "lb", descriptor = "I") + private int multiNpcVarp = -1; + + @OriginalMember(owner = "client!me", name = "ob", descriptor = "I") + public int attackCursor = -1; + + @OriginalMember(owner = "client!me", name = "a", descriptor = "(B)Lclient!me;") + public final NpcType getMultiNpc() { + @Pc(5) int local5 = -1; + if (this.multiNpcVarbit != -1) { + local5 = VarpDomain.getVarbit(this.multiNpcVarbit); + } else if (this.multiNpcVarp != -1) { + local5 = VarpDomain.activeVarps[this.multiNpcVarp]; + } + if (local5 < 0 || local5 >= this.multiNpcs.length - 1 || this.multiNpcs[local5] == -1) { + @Pc(55) int local55 = this.multiNpcs[this.multiNpcs.length - 1]; + return local55 == -1 ? null : NpcTypeList.get(local55); + } else { + return NpcTypeList.get(this.multiNpcs[local5]); + } + } + + @OriginalMember(owner = "client!me", name = "b", descriptor = "(B)Z") + public final boolean isMultiNpcValid() { + if (this.multiNpcs == null) { + return true; + } + @Pc(16) int local16 = -1; + if (this.multiNpcVarbit != -1) { + local16 = VarpDomain.getVarbit(this.multiNpcVarbit); + } else if (this.multiNpcVarp != -1) { + local16 = VarpDomain.activeVarps[this.multiNpcVarp]; + } + if (local16 < 0 || local16 >= this.multiNpcs.length - 1 || this.multiNpcs[local16] == -1) { + @Pc(62) int local62 = this.multiNpcs[this.multiNpcs.length - 1]; + return local62 != -1; + } else { + return true; + } + } + + @OriginalMember(owner = "client!me", name = "a", descriptor = "(I)Z") + public final boolean hasAreaSound() { + if (this.multiNpcs == null) { + return this.idleSound != -1 || this.walkSound != -1 || this.runSound != -1; + } + for (@Pc(35) int local35 = 0; local35 < this.multiNpcs.length; local35++) { + if (this.multiNpcs[local35] != -1) { + @Pc(60) NpcType local60 = NpcTypeList.get(this.multiNpcs[local35]); + if (local60.idleSound != -1 || local60.walkSound != -1 || local60.runSound != -1) { + return true; + } + } + } + return false; + } + + @OriginalMember(owner = "client!me", name = "a", descriptor = "(III)I") + public final int getParam(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + if (this.params == null) { + return arg1; + } else { + @Pc(18) IntNode local18 = (IntNode) this.params.get(arg0); + return local18 == null ? arg1 : local18.value; + } + } + + @OriginalMember(owner = "client!me", name = "a", descriptor = "([Lclient!ub;IBIIIILclient!tk;ILclient!tk;)Lclient!ak;") + public final Model getBodyModel(@OriginalArg(0) PathingEntity_Class147[] seqs, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) SeqType seqType1, @OriginalArg(8) int arg7, @OriginalArg(9) SeqType seqType2) { + if (this.multiNpcs != null) { + @Pc(13) NpcType local13 = this.getMultiNpc(); + return local13 == null ? null : local13.getBodyModel(seqs, arg1, arg2, arg3, arg4, arg5, seqType1, arg7, seqType2); + } + @Pc(40) Model local40 = (Model) NpcTypeList.models.get(this.id); + @Pc(46) boolean local46; + @Pc(173) int local173; + @Pc(235) int local235; + @Pc(221) int local221; + @Pc(200) int local200; + @Pc(207) int local207; + @Pc(214) int local214; + @Pc(228) int local228; + @Pc(300) int local300; + @Pc(324) int local324; + @Pc(318) int local318; + @Pc(330) int local330; + if (local40 == null) { + local46 = false; + for (@Pc(48) int local48 = 0; local48 < this.modelIndices.length; local48++) { + if (this.modelIndices[local48] != -1 && !NpcTypeList.modelsArchive.isFileReady(0, this.modelIndices[local48])) { + local46 = true; + } + } + if (local46) { + return null; + } + @Pc(84) RawModel[] local84 = new RawModel[this.modelIndices.length]; + for (@Pc(86) int local86 = 0; local86 < this.modelIndices.length; local86++) { + if (this.modelIndices[local86] != -1) { + local84[local86] = RawModel.create(NpcTypeList.modelsArchive, this.modelIndices[local86]); + if (this.modeloffsets != null && this.modeloffsets[local86] != null && local84[local86] != null) { + local84[local86].translate(this.modeloffsets[local86][0], this.modeloffsets[local86][1], this.modeloffsets[local86][2]); + } + } + } + @Pc(156) BasType local156 = null; + if (this.bastypeid != -1) { + local156 = BasTypeList.get(this.bastypeid); + } + if (local156 != null && local156.modelRotateTranslate != null) { + for (local173 = 0; local173 < local156.modelRotateTranslate.length; local173++) { + if (local156.modelRotateTranslate[local173] != null && local84.length > local173 && local84[local173] != null) { + local200 = local156.modelRotateTranslate[local173][2]; + local207 = local156.modelRotateTranslate[local173][3]; + local214 = local156.modelRotateTranslate[local173][4]; + local221 = local156.modelRotateTranslate[local173][1]; + local228 = local156.modelRotateTranslate[local173][5]; + local235 = local156.modelRotateTranslate[local173][0]; + if (this.anIntArrayArray28 == null) { + this.anIntArrayArray28 = new int[local156.modelRotateTranslate.length][]; + } + if (this.anIntArrayArray28[local173] == null) { + @Pc(259) int[] local259 = this.anIntArrayArray28[local173] = new int[15]; + if (local207 == 0 && local214 == 0 && local228 == 0) { + local259[13] = -local221; + local259[14] = -local200; + local259[0] = local259[4] = local259[8] = 32768; + local259[12] = -local235; + } else { + local300 = MathUtils.cos[local207] >> 1; + @Pc(306) int local306 = MathUtils.sin[local207] >> 1; + @Pc(312) int local312 = MathUtils.cos[local214] >> 1; + local318 = MathUtils.cos[local228] >> 1; + local324 = MathUtils.sin[local214] >> 1; + local330 = MathUtils.sin[local228] >> 1; + local259[3] = local300 * local330 + 16384 >> 15; + local259[8] = local300 * local312 + 16384 >> 15; + local259[5] = -local306; + @Pc(363) int local363 = local306 * local330 + 16384 >> 15; + @Pc(371) int local371 = local318 * local306 + 16384 >> 15; + local259[1] = -local330 * local312 + local371 * local324 + 16384 >> 15; + local259[2] = local324 * local300 + 16384 >> 15; + local259[6] = -local324 * local318 + local363 * local312 + 16384 >> 15; + local259[14] = local259[8] * -local200 + -local221 * local259[5] + local259[2] * -local235 + 16384 >> 15; + local259[4] = local300 * local318 + 16384 >> 15; + local259[7] = -local324 * -local330 + local371 * local312 + 16384 >> 15; + local259[0] = local324 * local363 + local312 * local318 + 16384 >> 15; + local259[12] = local259[6] * -local200 + local259[3] * -local221 + -local235 * local259[0] + 16384 >> 15; + local259[13] = -local200 * local259[7] + -local235 * local259[1] + -local221 * local259[4] + 16384 >> 15; + } + local259[10] = local221; + local259[9] = local235; + local259[11] = local200; + } + if (local207 != 0 || local214 != 0 || local228 != 0) { + local84[local173].method1684(local207, local214, local228); + } + if (local235 != 0 || local221 != 0 || local200 != 0) { + local84[local173].translate(local235, local221, local200); + } + } + } + } + @Pc(593) RawModel local593; + if (local84.length == 1) { + local593 = local84[0]; + } else { + local593 = new RawModel(local84, local84.length); + } + if (this.recol_s != null) { + for (local173 = 0; local173 < this.recol_s.length; local173++) { + if (this.recol_p == null || this.recol_p.length <= local173) { + local593.recolor(this.recol_s[local173], this.recol_d[local173]); + } else { + local593.recolor(this.recol_s[local173], client.aShortArray74[this.recol_p[local173] & 0xFF]); + } + } + } + if (this.retex_s != null) { + for (local173 = 0; local173 < this.retex_s.length; local173++) { + local593.retexture(this.retex_s[local173], this.retex_d[local173]); + } + } + local40 = local593.createModel(this.ambient + 64, this.contrast + 850, -30, -50, -30); + if (GlRenderer.enabled) { + ((GlModel) local40).method4111(false, false, false, false, false, true); + } + NpcTypeList.models.put(local40, this.id); + } + local46 = false; + @Pc(721) boolean local721 = false; + @Pc(723) boolean local723 = false; + @Pc(725) boolean local725 = false; + local173 = seqs == null ? 0 : seqs.length; + for (local235 = 0; local235 < local173; local235++) { + if (seqs[local235] != null) { + @Pc(753) SeqType local753 = SeqTypeList.get(seqs[local235].anInt5396); + if (local753.frames != null) { + aClass144Array1[local235] = local753; + local207 = seqs[local235].anInt5398; + local46 = true; + local200 = seqs[local235].anInt5399; + local214 = local753.frames[local200]; + aClass3_Sub2_Sub7Array1[local235] = SeqTypeList.getAnimFrameset(local214 >>> 16); + local214 &= 0xFFFF; + anIntArray259[local235] = local214; + if (aClass3_Sub2_Sub7Array1[local235] != null) { + local723 |= aClass3_Sub2_Sub7Array1[local235].isColorTransformed(local214); + local721 |= aClass3_Sub2_Sub7Array1[local235].isAlphaTransformed(local214); + local725 |= local753.aBoolean278; + } + if ((local753.tween || SeqType.applyTweening) && local207 != -1 && local753.frames.length > local207) { + anIntArray147[local235] = local753.frameDelay[local200]; + anIntArray492[local235] = seqs[local235].anInt5404; + local228 = local753.frames[local207]; + aClass3_Sub2_Sub7Array5[local235] = SeqTypeList.getAnimFrameset(local228 >>> 16); + local228 &= 0xFFFF; + anIntArray148[local235] = local228; + if (aClass3_Sub2_Sub7Array5[local235] != null) { + local723 |= aClass3_Sub2_Sub7Array5[local235].isColorTransformed(local228); + local721 |= aClass3_Sub2_Sub7Array5[local235].isAlphaTransformed(local228); + } + } else { + anIntArray147[local235] = 0; + anIntArray492[local235] = 0; + aClass3_Sub2_Sub7Array5[local235] = null; + anIntArray148[local235] = -1; + } + } + } + } + if (!local46 && seqType2 == null && seqType1 == null) { + @Pc(933) Model local933 = local40.method4572(true, true, true); + if (this.resizeX != 128 || this.resizeY != 128) { + local933.resize(this.resizeX, this.resizeY, this.resizeX); + } + return local933; + } + local221 = -1; + local235 = -1; + local200 = 0; + @Pc(962) AnimFrameset local962 = null; + @Pc(964) AnimFrameset local964 = null; + @Pc(1040) int local1040; + if (seqType2 != null) { + local235 = seqType2.frames[arg5]; + local228 = local235 >>> 16; + local235 &= 0xFFFF; + local962 = SeqTypeList.getAnimFrameset(local228); + if (local962 != null) { + local723 |= local962.isColorTransformed(local235); + local721 |= local962.isAlphaTransformed(local235); + local725 |= seqType2.aBoolean278; + } + if ((seqType2.tween || SeqType.applyTweening) && arg3 != -1 && seqType2.frames.length > arg3) { + local200 = seqType2.frameDelay[arg5]; + local221 = seqType2.frames[arg3]; + local1040 = local221 >>> 16; + local221 &= 0xFFFF; + if (local228 == local1040) { + local964 = local962; + } else { + local964 = SeqTypeList.getAnimFrameset(local221 >>> 16); + } + if (local964 != null) { + local723 |= local964.isColorTransformed(local221); + local721 |= local964.isAlphaTransformed(local221); + } + } + } + local228 = -1; + local1040 = -1; + @Pc(1088) AnimFrameset local1088 = null; + local300 = 0; + @Pc(1092) AnimFrameset local1092 = null; + if (seqType1 != null) { + local228 = seqType1.frames[arg2]; + local324 = local228 >>> 16; + local228 &= 0xFFFF; + local1088 = SeqTypeList.getAnimFrameset(local324); + if (local1088 != null) { + local723 |= local1088.isColorTransformed(local228); + local721 |= local1088.isAlphaTransformed(local228); + local725 |= seqType1.aBoolean278; + } + if ((seqType1.tween || SeqType.applyTweening) && arg1 != -1 && arg1 < seqType1.frames.length) { + local300 = seqType1.frameDelay[arg2]; + local1040 = seqType1.frames[arg1]; + local318 = local1040 >>> 16; + local1040 &= 0xFFFF; + if (local318 == local324) { + local1092 = local1088; + } else { + local1092 = SeqTypeList.getAnimFrameset(local1040 >>> 16); + } + if (local1092 != null) { + local723 |= local1092.isColorTransformed(local1040); + local721 |= local1092.isAlphaTransformed(local1040); + } + } + } + @Pc(1218) Model local1218 = local40.method4572(!local721, !local723, !local725); + local330 = 1; + for (local318 = 0; local318 < local173; local318++) { + if (aClass3_Sub2_Sub7Array1[local318] != null) { + local1218.method4565(aClass3_Sub2_Sub7Array1[local318], anIntArray259[local318], aClass3_Sub2_Sub7Array5[local318], anIntArray148[local318], anIntArray492[local318] - 1, anIntArray147[local318], local330, aClass144Array1[local318].aBoolean278, this.anIntArrayArray28[local318]); + } + local330 <<= 0x1; + } + if (local962 != null && local1088 != null) { + local1218.method4570(local962, local235, local964, local221, arg4 - 1, local200, local1088, local228, local1092, local1040, arg7 - 1, local300, seqType2.framegroup, seqType2.aBoolean278 | seqType1.aBoolean278); + } else if (local962 != null) { + local1218.method4558(local962, local235, local964, local221, arg4 - 1, local200, seqType2.aBoolean278); + } else if (local1088 != null) { + local1218.method4558(local1088, local228, local1092, local1040, arg7 - 1, local300, seqType1.aBoolean278); + } + for (local318 = 0; local318 < local173; local318++) { + aClass3_Sub2_Sub7Array1[local318] = null; + aClass3_Sub2_Sub7Array5[local318] = null; + aClass144Array1[local318] = null; + } + if (this.resizeX != 128 || this.resizeY != 128) { + local1218.resize(this.resizeX, this.resizeY, this.resizeX); + } + return local1218; + } + + @OriginalMember(owner = "client!me", name = "a", descriptor = "(ILclient!na;Z)Lclient!na;") + public final JagString getParam(@OriginalArg(0) int arg0, @OriginalArg(1) JagString arg1) { + if (this.params == null) { + return arg1; + } else { + @Pc(18) StringNode local18 = (StringNode) this.params.get(arg0); + return local18 == null ? arg1 : local18.value; + } + } + + @OriginalMember(owner = "client!me", name = "a", descriptor = "(Lclient!wa;I)V") + public final void decode(@OriginalArg(0) Buffer buffer) { + while (true) { + @Pc(9) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(opcode, buffer); + } + } + + @OriginalMember(owner = "client!me", name = "b", descriptor = "(I)V") + public final void method2942() { + } + + @OriginalMember(owner = "client!me", name = "a", descriptor = "(Lclient!tk;IIII)Lclient!ak;") + public final Model getHeadModel(@OriginalArg(0) SeqType arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3) { + if (this.multiNpcs != null) { + @Pc(13) NpcType local13 = this.getMultiNpc(); + return local13 == null ? null : local13.getHeadModel(arg0, arg1, arg2, arg3); + } else if (this.headmodels == null) { + return null; + } else { + @Pc(41) Model local41 = (Model) NpcTypeList.headModels.get(this.id); + if (local41 == null) { + @Pc(46) boolean local46 = false; + for (@Pc(48) int local48 = 0; local48 < this.headmodels.length; local48++) { + if (!NpcTypeList.modelsArchive.isFileReady(0, this.headmodels[local48])) { + local46 = true; + } + } + if (local46) { + return null; + } + @Pc(82) RawModel[] local82 = new RawModel[this.headmodels.length]; + for (@Pc(84) int local84 = 0; local84 < this.headmodels.length; local84++) { + local82[local84] = RawModel.create(NpcTypeList.modelsArchive, this.headmodels[local84]); + } + @Pc(119) RawModel local119; + if (local82.length == 1) { + local119 = local82[0]; + } else { + local119 = new RawModel(local82, local82.length); + } + @Pc(130) int local130; + if (this.recol_s != null) { + for (local130 = 0; local130 < this.recol_s.length; local130++) { + if (this.recol_p == null || local130 >= this.recol_p.length) { + local119.recolor(this.recol_s[local130], this.recol_d[local130]); + } else { + local119.recolor(this.recol_s[local130], client.aShortArray74[this.recol_p[local130] & 0xFF]); + } + } + } + if (this.retex_s != null) { + for (local130 = 0; local130 < this.retex_s.length; local130++) { + local119.retexture(this.retex_s[local130], this.retex_d[local130]); + } + } + local41 = local119.createModel(64, 768, -50, -10, -50); + NpcTypeList.headModels.put(local41, this.id); + } + if (arg0 != null) { + local41 = arg0.method4215(local41, arg2, arg1, arg3); + } + return local41; + } + } + + @OriginalMember(owner = "client!me", name = "a", descriptor = "(IILclient!wa;)V") + private void decode(@OriginalArg(1) int opcode, @OriginalArg(2) Buffer buffer) { + @Pc(12) int count; + @Pc(18) int i; + if (opcode == 1) { + count = buffer.g1(); + this.modelIndices = new int[count]; + for (i = 0; i < count; i++) { + this.modelIndices[i] = buffer.g2(); + if (this.modelIndices[i] == 65535) { + this.modelIndices[i] = -1; + } + } + } else if (opcode == 2) { + this.name = buffer.gjstr(); + } else if (opcode == 12) { + this.size = buffer.g1(); + } else if (opcode >= 30 && opcode < 35) { + this.ops[opcode - 30] = buffer.gjstr(); + if (this.ops[opcode - 30].equalsIgnoreCase(LocalizedText.HIDDEN)) { + this.ops[opcode - 30] = null; + } + } else if (opcode == 40) { + count = buffer.g1(); + this.recol_d = new short[count]; + this.recol_s = new short[count]; + for (i = 0; i < count; i++) { + this.recol_s[i] = (short) buffer.g2(); + this.recol_d[i] = (short) buffer.g2(); + } + } else if (opcode == 41) { + count = buffer.g1(); + this.retex_d = new short[count]; + this.retex_s = new short[count]; + for (i = 0; i < count; i++) { + this.retex_s[i] = (short) buffer.g2(); + this.retex_d[i] = (short) buffer.g2(); + } + } else if (opcode == 42) { + count = buffer.g1(); + this.recol_p = new byte[count]; + for (i = 0; i < count; i++) { + this.recol_p[i] = buffer.g1b(); + } + } else if (opcode == 60) { + count = buffer.g1(); + this.headmodels = new int[count]; + for (i = 0; i < count; i++) { + this.headmodels[i] = buffer.g2(); + } + } else if (opcode == 93) { + this.minimapdisplay = false; + } else if (opcode == 95) { + this.combatLevel = buffer.g2(); + } else if (opcode == 97) { + this.resizeX = buffer.g2(); + } else if (opcode == 98) { + this.resizeY = buffer.g2(); + } else if (opcode == 99) { + this.toprenderpriority = true; + } else if (opcode == 100) { + this.ambient = buffer.g1b(); + } else if (opcode == 101) { + this.contrast = buffer.g1b() * 5; + } else if (opcode == 102) { + this.headicon = buffer.g2(); + } else if (opcode == 103) { + this.rotationspeed = buffer.g2(); + } else { + @Pc(297) int local297; + if (opcode == 106 || opcode == 118) { + this.multiNpcVarbit = buffer.g2(); + count = -1; + if (this.multiNpcVarbit == 65535) { + this.multiNpcVarbit = -1; + } + this.multiNpcVarp = buffer.g2(); + if (this.multiNpcVarp == 65535) { + this.multiNpcVarp = -1; + } + if (opcode == 118) { + count = buffer.g2(); + if (count == 65535) { + count = -1; + } + } + i = buffer.g1(); + this.multiNpcs = new int[i + 2]; + for (local297 = 0; local297 <= i; local297++) { + this.multiNpcs[local297] = buffer.g2(); + if (this.multiNpcs[local297] == 65535) { + this.multiNpcs[local297] = -1; + } + } + this.multiNpcs[i + 1] = count; + } else if (opcode == 107) { + this.interactive = false; + } else if (opcode == 109) { + this.rotationflag = false; + } else if (opcode == 111) { + this.hasshadow = false; + } else if (opcode == 113) { + this.shadowcolor1 = (short) buffer.g2(); + this.shadowcolor2 = (short) buffer.g2(); + } else if (opcode == 114) { + this.shadowcolormodifier1 = buffer.g1b(); + this.shadowcolormodifier2 = buffer.g1b(); + } else if (opcode == 115) { + buffer.g1(); + buffer.g1(); + } else if (opcode == 119) { + this.loginscreenproperties = buffer.g1b(); + } else if (opcode == 121) { + this.modeloffsets = new int[this.modelIndices.length][]; + count = buffer.g1(); + for (i = 0; i < count; i++) { + local297 = buffer.g1(); + @Pc(439) int[] tempArray = this.modeloffsets[local297] = new int[3]; + tempArray[0] = buffer.g1b(); + tempArray[1] = buffer.g1b(); + tempArray[2] = buffer.g1b(); + } + } else if (opcode == 122) { + this.hitBarId = buffer.g2(); + } else if (opcode == 123) { + this.iconHeight = buffer.g2(); + } else if (opcode == 125) { + this.spawndirection = buffer.g1b(); + } else if (opcode == 126) { + this.minimapmarkerobjectentry = buffer.g2(); + } else if (opcode == 127) { + this.bastypeid = buffer.g2(); + } else if (opcode == 128) { + buffer.g1(); + } else if (opcode == 134) { + this.idleSound = buffer.g2(); + if (this.idleSound == 65535) { + this.idleSound = -1; + } + this.crawlSound = buffer.g2(); + if (this.crawlSound == 65535) { + this.crawlSound = -1; + } + this.walkSound = buffer.g2(); + if (this.walkSound == 65535) { + this.walkSound = -1; + } + this.runSound = buffer.g2(); + if (this.runSound == 65535) { + this.runSound = -1; + } + this.soundRadius = buffer.g1(); + } else if (opcode == 135) { + this.cursor1Op = buffer.g1(); + this.cursor1 = buffer.g2(); + } else if (opcode == 136) { + this.cursor2Op = buffer.g1(); + this.cursor2 = buffer.g2(); + } else if (opcode == 137) { + this.attackCursor = buffer.g2(); + } else if (opcode == 249) { + count = buffer.g1(); + if (this.params == null) { + i = IntUtils.clp2(count); + this.params = new HashTable(i); + } + for (i = 0; i < count; i++) { + @Pc(592) boolean isString = buffer.g1() == 1; + @Pc(596) int key = buffer.g3(); + @Pc(605) Node value; + if (isString) { + value = new StringNode(buffer.gjstr()); + } else { + value = new IntNode(buffer.g4()); + } + this.params.put(value, key); + } + } + } + } +} diff --git a/client/src/main/java/rt4/NpcTypeList.java b/client/src/main/java/rt4/NpcTypeList.java new file mode 100644 index 0000000..871330d --- /dev/null +++ b/client/src/main/java/rt4/NpcTypeList.java @@ -0,0 +1,82 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class NpcTypeList { + @OriginalMember(owner = "client!he", name = "V", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + @OriginalMember(owner = "client!jl", name = "x", descriptor = "Lclient!n;") + public static final SoftLruHashTable models = new SoftLruHashTable(50); + @OriginalMember(owner = "client!vf", name = "k", descriptor = "Lclient!n;") + public static final SoftLruHashTable headModels = new SoftLruHashTable(5); + @OriginalMember(owner = "client!gm", name = "ib", descriptor = "Lclient!ve;") + public static Js5 modelsArchive; + @OriginalMember(owner = "client!eh", name = "f", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(Lclient!ve;Lclient!ve;Z)V") + public static void init(@OriginalArg(0) Js5 arg0, @OriginalArg(1) Js5 arg1) { + modelsArchive = arg0; + archive = arg1; + } + + @OriginalMember(owner = "client!rg", name = "b", descriptor = "(II)Lclient!me;") + public static NpcType get(@OriginalArg(0) int id) { + @Pc(10) NpcType npc = (NpcType) types.get(id); + if (npc != null) { + return npc; + } + @Pc(26) byte[] data = archive.fetchFile(getGroupId(id), getFileId(id)); + npc = new NpcType(); + npc.id = id; + if (data != null) { + npc.decode(new Buffer(data)); + } + npc.method2942(); + types.put(npc, id); + return npc; + } + + @OriginalMember(owner = "client!t", name = "b", descriptor = "(B)V") + public static void removeSoft() { + types.removeSoft(); + models.removeSoft(); + headModels.removeSoft(); + } + + @OriginalMember(owner = "client!qi", name = "e", descriptor = "(B)V") + public static void clear() { + types.clear(); + models.clear(); + headModels.clear(); + } + + @OriginalMember(owner = "client!ra", name = "c", descriptor = "(BI)V") + public static void clean() { + types.clean(5); + models.clean(5); + headModels.clean(5); + } + + @OriginalMember(owner = "client!em", name = "a", descriptor = "(II)I") + public static int getGroupId(@OriginalArg(0) int id) { + return id >>> 7; + } + + @OriginalMember(owner = "client!oe", name = "a", descriptor = "(IZ)I") + public static int getFileId(@OriginalArg(0) int id) { + return id & 0x7F; + } + + @OriginalMember(owner = "client!wj", name = "b", descriptor = "(I)V") + public static void clearModels() { + models.clear(); + } + + @OriginalMember(owner = "client!ba", name = "e", descriptor = "(I)V") + public static void clearHeadModels() { + headModels.clear(); + } +} diff --git a/client/src/main/java/rt4/ObjStack.java b/client/src/main/java/rt4/ObjStack.java new file mode 100644 index 0000000..39a047e --- /dev/null +++ b/client/src/main/java/rt4/ObjStack.java @@ -0,0 +1,40 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!uj") +public final class ObjStack extends Entity { + + @OriginalMember(owner = "client!uj", name = "v", descriptor = "I") + public int amount; + + @OriginalMember(owner = "client!uj", name = "D", descriptor = "I") + public int type; + + @OriginalMember(owner = "client!uj", name = "z", descriptor = "I") + private int minY = -32768; + + @OriginalMember(owner = "client!uj", name = "a", descriptor = "(IIIII)V") + @Override + public final void method4545(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + } + + @OriginalMember(owner = "client!uj", name = "a", descriptor = "(IIIIIIIIJILclient!ga;)V") + @Override + public final void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) long arg8, @OriginalArg(9) int arg9, @OriginalArg(10) ParticleSystem arg10) { + @Pc(16) Model local16 = ObjTypeList.get(this.type).getModel(-1, 0, null, this.amount, 0); + if (local16 != null) { + local16.render(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); + this.minY = local16.getMinY(); + } + } + + @OriginalMember(owner = "client!uj", name = "b", descriptor = "()I") + @Override + public final int getMinY() { + return this.minY; + } +} diff --git a/client/src/main/java/rt4/ObjStackEntity.java b/client/src/main/java/rt4/ObjStackEntity.java new file mode 100644 index 0000000..85f55bd --- /dev/null +++ b/client/src/main/java/rt4/ObjStackEntity.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!jj") +public final class ObjStackEntity { + + @OriginalMember(owner = "client!jj", name = "a", descriptor = "Lclient!th;") + public Entity secondary; + + @OriginalMember(owner = "client!jj", name = "b", descriptor = "I") + public int anInt3057; + + @OriginalMember(owner = "client!jj", name = "c", descriptor = "Lclient!th;") + public Entity tertiary; + + @OriginalMember(owner = "client!jj", name = "h", descriptor = "Lclient!th;") + public Entity primary; + + @OriginalMember(owner = "client!jj", name = "k", descriptor = "I") + public int zFine; + + @OriginalMember(owner = "client!jj", name = "n", descriptor = "I") + public int anInt3063; + + @OriginalMember(owner = "client!jj", name = "o", descriptor = "I") + public int xFine; + + @OriginalMember(owner = "client!jj", name = "r", descriptor = "J") + public long key; +} diff --git a/client/src/main/java/rt4/ObjStackNode.java b/client/src/main/java/rt4/ObjStackNode.java new file mode 100644 index 0000000..87b8911 --- /dev/null +++ b/client/src/main/java/rt4/ObjStackNode.java @@ -0,0 +1,17 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!pa") +public final class ObjStackNode extends SecondaryNode { + + @OriginalMember(owner = "client!pa", name = "T", descriptor = "Lclient!uj;") + public final ObjStack value; + + @OriginalMember(owner = "client!pa", name = "", descriptor = "(Lclient!uj;)V") + public ObjStackNode(@OriginalArg(0) ObjStack arg0) { + this.value = arg0; + } +} diff --git a/client/src/main/java/rt4/ObjType.java b/client/src/main/java/rt4/ObjType.java new file mode 100644 index 0000000..b43379c --- /dev/null +++ b/client/src/main/java/rt4/ObjType.java @@ -0,0 +1,687 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!h") +public final class ObjType { + + @OriginalMember(owner = "client!h", name = "a", descriptor = "[S") + private short[] retex_d; + + @OriginalMember(owner = "client!h", name = "g", descriptor = "I") + private int model; + + @OriginalMember(owner = "client!h", name = "y", descriptor = "[S") + private short[] retex_s; + + @OriginalMember(owner = "client!h", name = "z", descriptor = "[I") + public int[] countco; + + @OriginalMember(owner = "client!h", name = "G", descriptor = "[S") + private short[] recol_d; + + @OriginalMember(owner = "client!h", name = "I", descriptor = "[S") + private short[] recol_s; + + @OriginalMember(owner = "client!h", name = "W", descriptor = "[B") + private byte[] recol_p; + + @OriginalMember(owner = "client!h", name = "Y", descriptor = "I") + public int id; + + @OriginalMember(owner = "client!h", name = "nb", descriptor = "Lclient!sc;") + public HashTable params; + + @OriginalMember(owner = "client!h", name = "tb", descriptor = "[I") + public int[] countobj; + + @OriginalMember(owner = "client!h", name = "h", descriptor = "I") + public int cursor2 = -1; + + @OriginalMember(owner = "client!h", name = "K", descriptor = "I") + private int womanwear3 = -1; + + @OriginalMember(owner = "client!h", name = "l", descriptor = "I") + public int cost = 1; + + @OriginalMember(owner = "client!h", name = "e", descriptor = "I") + private int womanhead2 = -1; + + @OriginalMember(owner = "client!h", name = "q", descriptor = "I") + private int manWearXOff = 0; + + @OriginalMember(owner = "client!h", name = "H", descriptor = "I") + private int womanhead = -1; + + @OriginalMember(owner = "client!h", name = "T", descriptor = "I") + public int team = 0; + + @OriginalMember(owner = "client!gd", name = "b", descriptor = "Lclient!na;") + public static final JagString aClass100_464 = JagString.parse("null"); + @OriginalMember(owner = "client!h", name = "E", descriptor = "Lclient!na;") + public JagString name = aClass100_464; + + @OriginalMember(owner = "client!h", name = "J", descriptor = "I") + private int manWearZOff = 0; + + @OriginalMember(owner = "client!h", name = "V", descriptor = "I") + private int ambient = 0; + + @OriginalMember(owner = "client!h", name = "C", descriptor = "I") + private int manwear3 = -1; + + @OriginalMember(owner = "client!h", name = "ib", descriptor = "I") + private int manhead2 = -1; + + @OriginalMember(owner = "client!h", name = "cb", descriptor = "I") + public int certtemplate = -1; + + @OriginalMember(owner = "client!h", name = "M", descriptor = "I") + private int womanWearXOff = 0; + + @OriginalMember(owner = "client!h", name = "R", descriptor = "I") + private int resizeY = 128; + + @OriginalMember(owner = "client!h", name = "A", descriptor = "I") + public int cursor1Op = -1; + + @OriginalMember(owner = "client!h", name = "n", descriptor = "I") + public int cursor1 = -1; + + @OriginalMember(owner = "client!h", name = "B", descriptor = "I") + public int zAngle2D = 0; + + @OriginalMember(owner = "client!h", name = "u", descriptor = "I") + public int lentTemplate = -1; + + @OriginalMember(owner = "client!h", name = "hb", descriptor = "I") + public int lentLink = -1; + + @OriginalMember(owner = "client!h", name = "r", descriptor = "I") + public int womanwear = -1; + + @OriginalMember(owner = "client!h", name = "F", descriptor = "I") + private int manwear2 = -1; + + @OriginalMember(owner = "client!h", name = "f", descriptor = "I") + public int yOffset2D = 0; + + @OriginalMember(owner = "client!h", name = "X", descriptor = "I") + public int xAngle2D = 0; + + @OriginalMember(owner = "client!h", name = "ob", descriptor = "I") + public int yAngle2D = 0; + + @OriginalMember(owner = "client!h", name = "pb", descriptor = "I") + public int dummyItem = 0; + + @OriginalMember(owner = "client!h", name = "w", descriptor = "I") + public int stackable = 0; + + @OriginalMember(owner = "client!h", name = "ab", descriptor = "I") + public int certlink = -1; + + @OriginalMember(owner = "client!h", name = "fb", descriptor = "I") + private int womanwear2 = -1; + + @OriginalMember(owner = "client!h", name = "Z", descriptor = "I") + public int cursor2Op = -1; + + @OriginalMember(owner = "client!h", name = "mb", descriptor = "I") + private int resizeZ = 128; + + @OriginalMember(owner = "client!h", name = "P", descriptor = "Z") + public boolean members = false; + + @OriginalMember(owner = "client!h", name = "b", descriptor = "I") + private int womanWearZOff = 0; + + @OriginalMember(owner = "client!h", name = "db", descriptor = "I") + public int xOffset2D = 0; + + @OriginalMember(owner = "client!h", name = "sb", descriptor = "I") + private int manhead = -1; + + @OriginalMember(owner = "client!h", name = "rb", descriptor = "I") + private int womanWearYOff = 0; + + @OriginalMember(owner = "client!h", name = "eb", descriptor = "I") + public int manwear = -1; + + @OriginalMember(owner = "client!h", name = "qb", descriptor = "[Lclient!na;") + public JagString[] ops = new JagString[]{null, null, LocalizedText.TAKE, null, null}; + + @OriginalMember(owner = "client!h", name = "ub", descriptor = "I") + private int resizeX = 128; + + @OriginalMember(owner = "client!h", name = "bb", descriptor = "I") + private int contrast = 0; + + @OriginalMember(owner = "client!h", name = "N", descriptor = "I") + private int manWearYOff = 0; + + @OriginalMember(owner = "client!h", name = "U", descriptor = "[Lclient!na;") + public JagString[] iops = new JagString[]{null, null, null, null, LocalizedText.DROP}; + + @OriginalMember(owner = "client!h", name = "Ab", descriptor = "I") + public int zoom2d = 2000; + + @OriginalMember(owner = "client!h", name = "xb", descriptor = "Z") + public boolean stockMarket = false; + + /* + * This method gets the stackable obj models dependent on the defined amount "trigger" values. + * An example of this would be coins/arrows. + */ + @OriginalMember(owner = "client!h", name = "a", descriptor = "(II)Lclient!h;") + public final ObjType method1820(@OriginalArg(0) int count) { + if (this.countobj != null && count > 1) { + @Pc(23) int countId = -1; + for (@Pc(25) int i = 0; i < 10; i++) { + if (this.countco[i] <= count && this.countco[i] != 0) { + countId = this.countobj[i]; + } + } + if (countId != -1) { + return ObjTypeList.get(countId); + } + } + return this; + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(ILclient!wa;)V") + public final void decode(@OriginalArg(1) Buffer buffer) { + while (true) { + @Pc(5) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(buffer, opcode); + } + } + + @OriginalMember(owner = "client!h", name = "c", descriptor = "(I)V") + public final void postDecode() { + } + + public static class Opcodes { + + public static final int model = 1; + public static final int name = 2; + public static final int zoom2d = 4; + public static final int xan2d = 5; + public static final int yan2d = 6; + public static final int xof2d = 7; + public static final int yof2d = 8; + public static final int stackable_yes = 11; + public static final int cost = 12; + public static final int members = 16; + public static final int manwear = 23; + public static final int manwear2 = 24; + public static final int womanwear = 25; + public static final int womanwear2 = 26; + public static final int op1 = 30; + public static final int op5 = 34; + public static final int iop1 = 35; + public static final int iop5 = 39; + public static final int recol = 40; + public static final int retex = 41; + public static final int stockmarket_yes = 65; + public static final int manwear3 = 78; + public static final int womanwear3 = 79; + public static final int manhead = 90; + public static final int womanhead = 91; + public static final int manhead2 = 92; + public static final int womanhead2 = 93; + public static final int zan2d = 95; + public static final int certlink = 97; + public static final int certtemplate = 98; + public static final int countobj1 = 100; + public static final int countobj10 = 109; + public static final int resizex = 110; + public static final int resizey = 111; + public static final int resizez = 112; + public static final int ambient = 113; + public static final int contrast = 114; + public static final int team = 115; + public static final int params = 249; + + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(BLclient!wa;I)V") + private void decode(@OriginalArg(1) Buffer buffer, @OriginalArg(2) int opcode) { + if (opcode == Opcodes.model) { // 1 + this.model = buffer.g2(); + } else if (opcode == Opcodes.name) { // 2 + this.name = buffer.gjstr(); + } else if (opcode == Opcodes.zoom2d) { // 4 + this.zoom2d = buffer.g2(); + } else if (opcode == Opcodes.xan2d) { // 5 + this.xAngle2D = buffer.g2(); + } else if (opcode == Opcodes.yan2d) { // 6 + this.yAngle2D = buffer.g2(); + } else if (opcode == Opcodes.xof2d) { // 7 + this.xOffset2D = buffer.g2(); + if (this.xOffset2D > 32767) { + this.xOffset2D -= 65536; + } + } else if (opcode == Opcodes.yof2d) { // 8 + this.yOffset2D = buffer.g2(); + if (this.yOffset2D > 32767) { + this.yOffset2D -= 65536; + } + } else if (opcode == Opcodes.stackable_yes) { // 11 + this.stackable = 1; + } else if (opcode == Opcodes.cost) { // 12 + this.cost = buffer.g4(); + } else if (opcode == Opcodes.members) { // 16 + this.members = true; + } else if (opcode == Opcodes.manwear) { // 23 + this.manwear = buffer.g2(); + } else if (opcode == Opcodes.manwear2) { // 24 + this.manwear2 = buffer.g2(); + } else if (opcode == Opcodes.womanwear) { // 25 + this.womanwear = buffer.g2(); + } else if (opcode == Opcodes.womanwear2) { // 26 + this.womanwear2 = buffer.g2(); + } else if (opcode >= Opcodes.op1 && opcode <= Opcodes.op5) { // 30-34 + this.ops[opcode - Opcodes.op1] = buffer.gjstr(); + if (this.ops[opcode - Opcodes.op1].equalsIgnoreCase(LocalizedText.HIDDEN)) { + this.ops[opcode - Opcodes.op1] = null; + } + } else if (opcode >= Opcodes.iop1 && opcode <= Opcodes.iop5) { // 35-39 + this.iops[opcode - Opcodes.iop1] = buffer.gjstr(); + } else { + @Pc(169) int count; + @Pc(179) int i; + if (opcode == Opcodes.recol) { // 40 + count = buffer.g1(); + this.recol_d = new short[count]; + this.recol_s = new short[count]; + for (i = 0; i < count; i++) { + this.recol_s[i] = (short) buffer.g2(); + this.recol_d[i] = (short) buffer.g2(); + } + } else if (opcode == Opcodes.retex) { // 41 + count = buffer.g1(); + this.retex_d = new short[count]; + this.retex_s = new short[count]; + for (i = 0; i < count; i++) { + this.retex_s[i] = (short) buffer.g2(); + this.retex_d[i] = (short) buffer.g2(); + } + } else if (opcode == 42) { + count = buffer.g1(); + this.recol_p = new byte[count]; + for (i = 0; i < count; i++) { + this.recol_p[i] = buffer.g1b(); + } + } else if (opcode == Opcodes.stockmarket_yes) { // 65 + this.stockMarket = true; + } else if (opcode == Opcodes.manwear3) { // 78 + this.manwear3 = buffer.g2(); + } else if (opcode == Opcodes.womanwear3) { // 79 + this.womanwear3 = buffer.g2(); + } else if (opcode == Opcodes.manhead) { // 90 + this.manhead = buffer.g2(); + } else if (opcode == Opcodes.womanhead) { // 91 + this.womanhead = buffer.g2(); + } else if (opcode == Opcodes.manhead2) { // 92 + this.manhead2 = buffer.g2(); + } else if (opcode == Opcodes.womanhead2) { // 93 + this.womanhead2 = buffer.g2(); + } else if (opcode == Opcodes.zan2d) { // 95 + this.zAngle2D = buffer.g2(); + } else if (opcode == 96) { + this.dummyItem = buffer.g1(); + } else if (opcode == Opcodes.certlink) { // 97 + this.certlink = buffer.g2(); + } else if (opcode == Opcodes.certtemplate) { // 98 + this.certtemplate = buffer.g2(); + } else if (opcode >= Opcodes.countobj1 && opcode <= Opcodes.countobj10) { // 100-109 + if (this.countobj == null) { + this.countobj = new int[10]; + this.countco = new int[10]; + } + this.countobj[opcode - Opcodes.countobj1] = buffer.g2(); + this.countco[opcode - Opcodes.countobj1] = buffer.g2(); + } else if (opcode == Opcodes.resizex) { // 110 + this.resizeX = buffer.g2(); + } else if (opcode == Opcodes.resizey) { // 111 + this.resizeY = buffer.g2(); + } else if (opcode == Opcodes.resizez) { // 112 + this.resizeZ = buffer.g2(); + } else if (opcode == Opcodes.ambient) { // 113 + this.ambient = buffer.g1b(); + } else if (opcode == Opcodes.contrast) { // 114 + this.contrast = buffer.g1b() * 5; + } else if (opcode == Opcodes.team) { // 115 + this.team = buffer.g1(); + } else if (opcode == 121) { + this.lentLink = buffer.g2(); + } else if (opcode == 122) { + this.lentTemplate = buffer.g2(); + } else if (opcode == 125) { + this.manWearXOff = buffer.g1b(); + this.manWearYOff = buffer.g1b(); + this.manWearZOff = buffer.g1b(); + } else if (opcode == 126) { + this.womanWearXOff = buffer.g1b(); + this.womanWearYOff = buffer.g1b(); + this.womanWearZOff = buffer.g1b(); + } else if (opcode == 127) { + this.cursor1Op = buffer.g1(); + this.cursor1 = buffer.g2(); + } else if (opcode == 128) { + this.cursor2Op = buffer.g1(); + this.cursor2 = buffer.g2(); + } else if (opcode == 129) { + buffer.g1(); + buffer.g2(); + } else if (opcode == 130) { + buffer.g1(); + buffer.g2(); + } else if (opcode == Opcodes.params) { + int size = buffer.g1(); + if (this.params == null) { + i = IntUtils.clp2(size); + this.params = new HashTable(i); + } + for (i = 0; i < size; i++) { + @Pc(510) boolean isString = buffer.g1() == 1; + @Pc(514) int key = buffer.g3(); + @Pc(523) Node value; + if (isString) { + value = new StringNode(buffer.gjstr()); + } else { + value = new IntNode(buffer.g4()); + } + this.params.put(value, key); + } + } + } + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(III)I") + public final int getParam(@OriginalArg(0) int defaultValue, @OriginalArg(2) int id) { + if (this.params == null) { + return defaultValue; + } else { + @Pc(25) IntNode node = (IntNode) this.params.get(id); + return node == null ? defaultValue : node.value; + } + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(ILclient!na;I)Lclient!na;") + public final JagString getParam(@OriginalArg(1) JagString defaultValue, @OriginalArg(2) int id) { + if (this.params == null) { + return defaultValue; + } else { + @Pc(21) StringNode node = (StringNode) this.params.get(id); + return node == null ? defaultValue : node.value; + } + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(Lclient!h;Lclient!h;Z)V") + public final void generateCertificate(@OriginalArg(0) ObjType link, @OriginalArg(1) ObjType template) { + this.name = link.name; + this.zoom2d = template.zoom2d; + this.recol_s = template.recol_s; + this.recol_d = template.recol_d; + this.xAngle2D = template.xAngle2D; + this.yAngle2D = template.yAngle2D; + this.retex_d = template.retex_d; + this.model = template.model; + this.recol_p = template.recol_p; + this.zAngle2D = template.zAngle2D; + this.cost = link.cost; + this.stackable = 1; + this.yOffset2D = template.yOffset2D; + this.xOffset2D = template.xOffset2D; + this.retex_s = template.retex_s; + this.members = link.members; + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(BLclient!h;Lclient!h;)V") + public final void generateLent(@OriginalArg(1) ObjType link, @OriginalArg(2) ObjType template) { + this.recol_p = link.recol_p; + this.manWearYOff = link.manWearYOff; + this.params = link.params; + this.manwear3 = link.manwear3; + this.womanwear = link.womanwear; + this.manWearZOff = link.manWearZOff; + this.iops = new JagString[5]; + this.model = template.model; + this.zoom2d = template.zoom2d; + this.cost = 0; + this.team = link.team; + this.womanhead = link.womanhead; + this.recol_s = link.recol_s; + this.zAngle2D = template.zAngle2D; + this.manwear2 = link.manwear2; + this.yAngle2D = template.yAngle2D; + this.manhead = link.manhead; + this.manhead2 = link.manhead2; + this.manWearXOff = link.manWearXOff; + this.xAngle2D = template.xAngle2D; + this.yOffset2D = template.yOffset2D; + this.womanhead2 = link.womanhead2; + this.womanWearXOff = link.womanWearXOff; + this.recol_d = link.recol_d; + this.womanWearYOff = link.womanWearYOff; + this.womanWearZOff = link.womanWearZOff; + this.xOffset2D = template.xOffset2D; + this.manwear = link.manwear; + this.womanwear2 = link.womanwear2; + this.name = link.name; + this.retex_d = link.retex_d; + this.retex_s = link.retex_s; + this.ops = link.ops; + this.members = link.members; + this.womanwear3 = link.womanwear3; + if (link.iops != null) { + for (@Pc(157) int local157 = 0; local157 < 4; local157++) { + this.iops[local157] = link.iops[local157]; + } + } + this.iops[4] = LocalizedText.LENT_ITEM_RETURN; + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(ZZ)Z") + public final boolean isHeadModelReady(@OriginalArg(0) boolean female) { + @Pc(6) int headModel = this.manhead; + @Pc(9) int headModelAccessory = this.manhead2; + if (female) { + headModel = this.womanhead; + headModelAccessory = this.womanhead2; + } + if (headModel == -1) { + return true; + } + @Pc(33) boolean ready = ObjTypeList.modelsArchive.isFileReady(0, headModel); + if (headModelAccessory != -1 && !ObjTypeList.modelsArchive.isFileReady(0, headModelAccessory)) { + ready = false; + } + return ready; + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(BZ)Z") + public final boolean isWearModelReady(@OriginalArg(1) boolean female) { + @Pc(6) int wear2 = this.manwear2; + @Pc(9) int wear1 = this.manwear; + @Pc(20) int wear3 = this.manwear3; + if (female) { + wear3 = this.womanwear3; + wear1 = this.womanwear; + wear2 = this.womanwear2; + } + if (wear1 == -1) { + return true; + } + @Pc(41) boolean ready = ObjTypeList.modelsArchive.isFileReady(0, wear1); + if (wear2 != -1 && !ObjTypeList.modelsArchive.isFileReady(0, wear2)) { + ready = false; + } + if (wear3 != -1 && !ObjTypeList.modelsArchive.isFileReady(0, wear3)) { + ready = false; + } + return ready; + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(IIILclient!tk;II)Lclient!ak;") + public final Model getModel(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) SeqType seqType, @OriginalArg(4) int count, @OriginalArg(5) int arg4) { + if (this.countobj != null && count > 1) { + @Pc(22) int countId = -1; + for (@Pc(24) int i = 0; i < 10; i++) { + if (count >= this.countco[i] && this.countco[i] != 0) { + countId = this.countobj[i]; + } + } + if (countId != -1) { + return ObjTypeList.get(countId).getModel(arg0, arg1, seqType, 1, arg4); + } + } + @Pc(76) Model model = (Model) ObjTypeList.models.get(this.id); + if (model == null) { + @Pc(85) RawModel model2 = RawModel.create(ObjTypeList.modelsArchive, this.model); + if (model2 == null) { + return null; + } + @Pc(97) int i; + if (this.recol_s != null) { + for (i = 0; i < this.recol_s.length; i++) { + if (this.recol_p == null || i >= this.recol_p.length) { + model2.recolor(this.recol_s[i], this.recol_d[i]); + } else { + model2.recolor(this.recol_s[i], client.aShortArray87[this.recol_p[i] & 0xFF]); + } + } + } + if (this.retex_s != null) { + for (i = 0; i < this.retex_s.length; i++) { + model2.retexture(this.retex_s[i], this.retex_d[i]); + } + } + model = model2.createModel(this.ambient + 64, this.contrast + 768, -50, -10, -50); + if (this.resizeX != 128 || this.resizeY != 128 || this.resizeZ != 128) { + model.resize(this.resizeX, this.resizeY, this.resizeZ); + } + model.pickable = true; + if (GlRenderer.enabled) { + ((GlModel) model).method4111(false, false, false, false, false, true); + } + ObjTypeList.models.put(model, this.id); + } + if (seqType != null) { + model = seqType.method4215(model, arg0, arg1, arg4); + } + return model; + } + + @OriginalMember(owner = "client!h", name = "d", descriptor = "(I)Lclient!w;") + public final SoftwareModel getInvModel() { + @Pc(11) RawModel model = RawModel.create(ObjTypeList.modelsArchive, this.model); + if (model == null) { + return null; + } + @Pc(21) int i; + if (this.recol_s != null) { + for (i = 0; i < this.recol_s.length; i++) { + if (this.recol_p == null || i >= this.recol_p.length) { + model.recolor(this.recol_s[i], this.recol_d[i]); + } else { + model.recolor(this.recol_s[i], client.aShortArray87[this.recol_p[i] & 0xFF]); + } + } + } + if (this.retex_s != null) { + for (i = 0; i < this.retex_s.length; i++) { + model.retexture(this.retex_s[i], this.retex_d[i]); + } + } + @Pc(107) SoftwareModel softwareModel = model.createSoftwareModel(this.ambient + 64, 768 - -this.contrast); + if (this.resizeX != 128 || this.resizeY != 128 || this.resizeZ != 128) { + softwareModel.resize(this.resizeX, this.resizeY, this.resizeZ); + } + return softwareModel; + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(ZB)Lclient!gb;") + public final RawModel getHeadModel(@OriginalArg(0) boolean female) { + @Pc(4) int head2 = this.manhead2; + @Pc(17) int head = this.manhead; + if (female) { + head2 = this.womanhead2; + head = this.womanhead; + } + if (head == -1) { + return null; + } + @Pc(36) RawModel model = RawModel.create(ObjTypeList.modelsArchive, head); + if (head2 != -1) { + @Pc(44) RawModel model2 = RawModel.create(ObjTypeList.modelsArchive, head2); + @Pc(55) RawModel[] models = new RawModel[]{model, model2}; + model = new RawModel(models, 2); + } + @Pc(66) int i; + if (this.recol_s != null) { + for (i = 0; i < this.recol_s.length; i++) { + model.recolor(this.recol_s[i], this.recol_d[i]); + } + } + if (this.retex_s != null) { + for (i = 0; i < this.retex_s.length; i++) { + model.retexture(this.retex_s[i], this.retex_d[i]); + } + } + return model; + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(ZI)Lclient!gb;") + public final RawModel getBodyModel(@OriginalArg(0) boolean female) { + @Pc(4) int wear1 = this.manwear; + @Pc(18) int wear2 = this.manwear2; + @Pc(21) int wear3 = this.manwear3; + if (female) { + wear3 = this.womanwear3; + wear1 = this.womanwear; + wear2 = this.womanwear2; + } + if (wear1 == -1) { + return null; + } + @Pc(43) RawModel model = RawModel.create(ObjTypeList.modelsArchive, wear1); + if (wear2 != -1) { + @Pc(54) RawModel model2 = RawModel.create(ObjTypeList.modelsArchive, wear2); + if (wear3 == -1) { + @Pc(68) RawModel[] models = new RawModel[]{model, model2}; + model = new RawModel(models, 2); + } else { + @Pc(81) RawModel model3 = RawModel.create(ObjTypeList.modelsArchive, wear3); + @Pc(96) RawModel[] models = new RawModel[]{model, model2, model3}; + model = new RawModel(models, 3); + } + } + if (!female && (this.manWearXOff != 0 || this.manWearYOff != 0 || this.manWearZOff != 0)) { + model.translate(this.manWearXOff, this.manWearYOff, this.manWearZOff); + } + if (female && (this.womanWearXOff != 0 || this.womanWearYOff != 0 || this.womanWearZOff != 0)) { + model.translate(this.womanWearXOff, this.womanWearYOff, this.womanWearZOff); + } + @Pc(165) int i; + if (this.recol_s != null) { + for (i = 0; i < this.recol_s.length; i++) { + model.recolor(this.recol_s[i], this.recol_d[i]); + } + } + if (this.retex_s != null) { + for (i = 0; i < this.retex_s.length; i++) { + model.retexture(this.retex_s[i], this.retex_d[i]); + } + } + return model; + } +} diff --git a/client/src/main/java/rt4/ObjTypeList.java b/client/src/main/java/rt4/ObjTypeList.java new file mode 100644 index 0000000..f1498bb --- /dev/null +++ b/client/src/main/java/rt4/ObjTypeList.java @@ -0,0 +1,119 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class ObjTypeList { + @OriginalMember(owner = "client!cb", name = "Y", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + @OriginalMember(owner = "client!tl", name = "c", descriptor = "Lclient!n;") + public static final SoftLruHashTable models = new SoftLruHashTable(50); + @OriginalMember(owner = "client!jd", name = "c", descriptor = "Lclient!n;") + public static final SoftLruHashTable objectSpriteCache = new SoftLruHashTable(100); + @OriginalMember(owner = "client!tg", name = "f", descriptor = "Z") + public static boolean aBoolean276; + @OriginalMember(owner = "client!sj", name = "r", descriptor = "Lclient!ve;") + public static Js5 modelsArchive; + @OriginalMember(owner = "client!um", name = "U", descriptor = "Lclient!dd;") + public static SoftwareFont font; + @OriginalMember(owner = "client!wa", name = "X", descriptor = "[Lclient!na;") + public static JagString[] aClass100Array87 = null; + @OriginalMember(owner = "client!ld", name = "g", descriptor = "[Lclient!na;") + public static JagString[] aClass100Array104 = null; + @OriginalMember(owner = "client!nh", name = "eb", descriptor = "I") + public static int capacity; + @OriginalMember(owner = "client!nd", name = "n", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!th", name = "a", descriptor = "(ZBLclient!ve;Lclient!dd;Lclient!ve;)V") + public static void init(@OriginalArg(2) Js5 arg0, @OriginalArg(3) SoftwareFont arg1, @OriginalArg(4) Js5 arg2) { + aBoolean276 = true; + modelsArchive = arg2; + archive = arg0; + @Pc(23) int local23 = archive.capacity() - 1; + capacity = archive.getGroupCapacity(local23) + local23 * 256; + aClass100Array104 = new JagString[]{null, null, null, null, LocalizedText.DROP}; + aClass100Array87 = new JagString[]{null, null, LocalizedText.TAKE, null, null}; + font = arg1; + } + + @OriginalMember(owner = "client!fk", name = "a", descriptor = "(IB)Lclient!h;") + public static ObjType get(@OriginalArg(0) int id) { + @Pc(6) ObjType obj = (ObjType) types.get(id); + if (obj != null) { + return obj; + } + @Pc(25) byte[] data = archive.fetchFile(getGroupId(id), getFileId(id)); + obj = new ObjType(); + obj.id = id; + if (data != null) { + obj.decode(new Buffer(data)); + } + obj.postDecode(); + if (obj.certtemplate != -1) { + obj.generateCertificate(get(obj.certlink), get(obj.certtemplate)); + } + if (obj.lentTemplate != -1) { + obj.generateLent(get(obj.lentLink), get(obj.lentTemplate)); + } + if (!aBoolean276 && obj.members) { + obj.name = LocalizedText.MEMBERS_OBJECT; + obj.team = 0; + obj.iops = aClass100Array104; + obj.stockMarket = false; + obj.ops = aClass100Array87; + } + types.put(obj, id); + return obj; + } + + @OriginalMember(owner = "client!i", name = "r", descriptor = "(I)V") + public static void removeSoft() { + types.removeSoft(); + models.removeSoft(); + objectSpriteCache.removeSoft(); + } + + @OriginalMember(owner = "client!ob", name = "a", descriptor = "(B)V") + public static void clear() { + types.clear(); + models.clear(); + objectSpriteCache.clear(); + } + + @OriginalMember(owner = "client!pf", name = "c", descriptor = "(II)V") + public static void clean() { + types.clean(5); + models.clean(5); + objectSpriteCache.clean(5); + } + + @OriginalMember(owner = "client!al", name = "a", descriptor = "(ZI)V") + public static void setAllowMembers(@OriginalArg(0) boolean arg0) { + if (arg0 != aBoolean276) { + aBoolean276 = arg0; + clear(); + } + } + + @OriginalMember(owner = "client!rc", name = "a", descriptor = "(Z)V") + public static void clearModels() { + models.clear(); + } + + @OriginalMember(owner = "client!wa", name = "e", descriptor = "(B)V") + public static void clearSprites() { + objectSpriteCache.clear(); + } + + @OriginalMember(owner = "client!ub", name = "a", descriptor = "(IB)I") + public static int getFileId(@OriginalArg(0) int id) { + return id & 0xFF; + } + + @OriginalMember(owner = "client!bh", name = "a", descriptor = "(IB)I") + public static int getGroupId(@OriginalArg(0) int id) { + return id >>> 8; + } +} diff --git a/client/src/main/java/rt4/OverheadChat.java b/client/src/main/java/rt4/OverheadChat.java new file mode 100644 index 0000000..6d82918 --- /dev/null +++ b/client/src/main/java/rt4/OverheadChat.java @@ -0,0 +1,69 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class OverheadChat { + @OriginalMember(owner = "client!bf", name = "I", descriptor = "[I") + public static final int[] COLORS = new int[]{16776960, 16711680, 65280, 65535, 16711935, 16777215}; + + @OriginalMember(owner = "client!pg", name = "fb", descriptor = "I") + public static final int CAPACITY = 50; + + @OriginalMember(owner = "client!pg", name = "cb", descriptor = "[I") + public static final int[] anIntArray389 = new int[CAPACITY]; + + @OriginalMember(owner = "client!pg", name = "Z", descriptor = "[I") + public static final int[] anIntArray387 = new int[CAPACITY]; + + @OriginalMember(owner = "client!pg", name = "kb", descriptor = "[I") + public static final int[] effects = new int[CAPACITY]; + + @OriginalMember(owner = "client!pg", name = "Q", descriptor = "[I") + public static final int[] loops = new int[CAPACITY]; + + @OriginalMember(owner = "client!pg", name = "eb", descriptor = "[I") + public static final int[] colors = new int[CAPACITY]; + + @OriginalMember(owner = "client!pg", name = "lb", descriptor = "[I") + public static final int[] anIntArray392 = new int[CAPACITY]; + + @OriginalMember(owner = "client!pg", name = "R", descriptor = "[I") + public static final int[] anIntArray385 = new int[CAPACITY]; + + @OriginalMember(owner = "client!pg", name = "P", descriptor = "[Lclient!na;") + public static final JagString[] messages = new JagString[CAPACITY]; + + @OriginalMember(owner = "client!wi", name = "bb", descriptor = "I") + public static int size = 0; + + @OriginalMember(owner = "client!bi", name = "f", descriptor = "(B)V") + public static void loop() { + @Pc(11) int i; + for (i = -1; i < PlayerList.size; i++) { + @Pc(22) int id; + if (i == -1) { + id = 2047; + } else { + id = PlayerList.ids[i]; + } + @Pc(30) Player player = PlayerList.players[id]; + if (player != null && player.chatLoops > 0) { + player.chatLoops--; + if (player.chatLoops == 0) { + player.chatMessage = null; + } + } + } + for (i = 0; i < NpcList.size; i++) { + @Pc(68) int id = NpcList.ids[i]; + @Pc(72) Npc npc = NpcList.npcs[id]; + if (npc != null && npc.chatLoops > 0) { + npc.chatLoops--; + if (npc.chatLoops == 0) { + npc.chatMessage = null; + } + } + } + } +} diff --git a/client/src/main/java/rt4/Packet.java b/client/src/main/java/rt4/Packet.java new file mode 100644 index 0000000..8132a51 --- /dev/null +++ b/client/src/main/java/rt4/Packet.java @@ -0,0 +1,80 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!i") +public final class Packet extends Buffer { + + @OriginalMember(owner = "client!bh", name = "G", descriptor = "[I") + public static final int[] BIT_MASKS = new int[]{0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215, 33554431, 67108863, 134217727, 268435455, 536870911, 1073741823, Integer.MAX_VALUE, -1}; + + @OriginalMember(owner = "client!i", name = "Xb", descriptor = "Lclient!ij;") + private IsaacRandom isaac; + + @OriginalMember(owner = "client!i", name = "fc", descriptor = "I") + private int bitOffset; + + @OriginalMember(owner = "client!i", name = "", descriptor = "(I)V") + public Packet(@OriginalArg(0) int arg0) { + super(arg0); + } + + @OriginalMember(owner = "client!i", name = "q", descriptor = "(B)V") + public final void accessBits() { + this.bitOffset = this.offset * 8; + } + + @OriginalMember(owner = "client!i", name = "a", descriptor = "(BI[BI)V") + public final void gBytesIsaac(@OriginalArg(2) byte[] arg0, @OriginalArg(3) int arg1) { + for (@Pc(17) int local17 = 0; local17 < arg1; local17++) { + arg0[local17] = (byte) (this.data[this.offset++] - this.isaac.getNextKey()); + } + } + + @OriginalMember(owner = "client!i", name = "f", descriptor = "(BI)I") + public final int gBits(@OriginalArg(1) int arg0) { + @Pc(6) int local6 = this.bitOffset >> 3; + @Pc(14) int local14 = 8 - (this.bitOffset & 0x7); + @Pc(16) int local16 = 0; + this.bitOffset += arg0; + while (local14 < arg0) { + local16 += (BIT_MASKS[local14] & this.data[local6++]) << arg0 - local14; + arg0 -= local14; + local14 = 8; + } + if (local14 == arg0) { + local16 += this.data[local6] & BIT_MASKS[local14]; + } else { + local16 += this.data[local6] >> local14 - arg0 & BIT_MASKS[arg0]; + } + return local16; + } + + @OriginalMember(owner = "client!i", name = "a", descriptor = "([IZ)V") + public final void setKey(@OriginalArg(0) int[] arg0) { + this.isaac = new IsaacRandom(arg0); + } + + @OriginalMember(owner = "client!i", name = "q", descriptor = "(II)I") + public final int method2241(@OriginalArg(0) int arg0) { + return arg0 * 8 - this.bitOffset; + } + + @OriginalMember(owner = "client!i", name = "r", descriptor = "(II)V") + public final void p1isaac(@OriginalArg(1) int arg0) { + this.data[this.offset++] = (byte) (arg0 + this.isaac.getNextKey()); + } + + @OriginalMember(owner = "client!i", name = "s", descriptor = "(I)I") + public final int g1isaac() { + return this.data[this.offset++] - this.isaac.getNextKey() & 0xFF; + } + + @OriginalMember(owner = "client!i", name = "h", descriptor = "(Z)V") + public final void accessBytes() { + this.offset = (this.bitOffset + 7) / 8; + } +} diff --git a/client/src/main/java/rt4/ParamType.java b/client/src/main/java/rt4/ParamType.java new file mode 100644 index 0000000..06dae43 --- /dev/null +++ b/client/src/main/java/rt4/ParamType.java @@ -0,0 +1,46 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!hn") +public final class ParamType extends SecondaryNode { + + @OriginalMember(owner = "client!hn", name = "I", descriptor = "I") + public int defaultInt; + + @OriginalMember(owner = "client!hn", name = "L", descriptor = "I") + private int type; + + @OriginalMember(owner = "client!hn", name = "Q", descriptor = "Lclient!na;") + public JagString defaultString; + + @OriginalMember(owner = "client!hn", name = "a", descriptor = "(ILclient!wa;)V") + public final void decode(@OriginalArg(1) Buffer buffer) { + while (true) { + @Pc(13) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(opcode, buffer); + } + } + + @OriginalMember(owner = "client!hn", name = "a", descriptor = "(ILclient!wa;I)V") + private void decode(@OriginalArg(0) int opcode, @OriginalArg(1) Buffer buffer) { + if (opcode == 1) { + this.type = buffer.g1(); + } else if (opcode == 2) { + this.defaultInt = buffer.g4(); + } else if (opcode == 5) { + this.defaultString = buffer.gjstr(); + } + } + + @OriginalMember(owner = "client!hn", name = "f", descriptor = "(I)Z") + public final boolean isString() { + return this.type == 115; + } +} diff --git a/client/src/main/java/rt4/ParamTypeList.java b/client/src/main/java/rt4/ParamTypeList.java new file mode 100644 index 0000000..29b575b --- /dev/null +++ b/client/src/main/java/rt4/ParamTypeList.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class ParamTypeList { + @OriginalMember(owner = "client!wd", name = "a", descriptor = "Lclient!gn;") + public static final LruHashTable types = new LruHashTable(64); + @OriginalMember(owner = "client!d", name = "hb", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!sf", name = "a", descriptor = "(BLclient!ve;)V") + public static void init(@OriginalArg(1) Js5 arg0) { + archive = arg0; + } + + @OriginalMember(owner = "client!ih", name = "a", descriptor = "(II)Lclient!hn;") + public static ParamType get(@OriginalArg(1) int id) { + @Pc(6) ParamType paramType = (ParamType) types.get(id); + if (paramType != null) { + return paramType; + } + @Pc(30) byte[] data = archive.fetchFile(11, id); + paramType = new ParamType(); + if (data != null) { + paramType.decode(new Buffer(data)); + } + types.put(paramType, id); + return paramType; + } +} diff --git a/client/src/main/java/rt4/ParticleNode.java b/client/src/main/java/rt4/ParticleNode.java new file mode 100644 index 0000000..e41e56e --- /dev/null +++ b/client/src/main/java/rt4/ParticleNode.java @@ -0,0 +1,7 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; + +@OriginalClass("client!ri") +public class ParticleNode { +} diff --git a/client/src/main/java/rt4/ParticleSystem.java b/client/src/main/java/rt4/ParticleSystem.java new file mode 100644 index 0000000..3bfc8c1 --- /dev/null +++ b/client/src/main/java/rt4/ParticleSystem.java @@ -0,0 +1,44 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.FloatBuffer; + +@OriginalClass("client!ga") +public final class ParticleSystem extends ParticleNode { + + static { + new SecondaryHashTable(8); + new Buffer(131056); + } + + @OriginalMember(owner = "client!ga", name = "a", descriptor = "()V") + public static void load() { + @Pc(1) GL2 gl = GlRenderer.gl; + if (gl.isExtensionAvailable("GL_ARB_point_parameters")) { + @Pc(20) float[] coefficients = new float[]{1.0F, 0.0F, 5.0E-4F}; + gl.glPointParameterfv(GL2.GL_POINT_DISTANCE_ATTENUATION, coefficients, 0); + @Pc(28) FloatBuffer buffer = FloatBuffer.allocate(1); + gl.glGetFloatv(GL2.GL_POINT_SIZE_MAX, buffer); + @Pc(36) float pointSizeMax = buffer.get(0); + if (pointSizeMax > 1024.0F) { + pointSizeMax = 1024.0F; + } + gl.glPointParameterf(GL2.GL_POINT_SIZE_MIN, 1.0F); + gl.glPointParameterf(GL2.GL_POINT_SIZE_MAX, pointSizeMax); + } + if (gl.isExtensionAvailable("GL_ARB_point_sprite")) { + } + } + + @OriginalMember(owner = "client!ga", name = "b", descriptor = "()V") + public static void quit() { + } + + @OriginalMember(owner = "client!ga", name = "d", descriptor = "()V") + public final void method1646() { + } +} diff --git a/client/src/main/java/rt4/PathFinder.java b/client/src/main/java/rt4/PathFinder.java new file mode 100644 index 0000000..1099042 --- /dev/null +++ b/client/src/main/java/rt4/PathFinder.java @@ -0,0 +1,654 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class PathFinder { + @OriginalMember(owner = "client!li", name = "h", descriptor = "[Lclient!mj;") + public static final CollisionMap[] collisionMaps = new CollisionMap[4]; + @OriginalMember(owner = "client!lf", name = "a", descriptor = "[[I") + public static final int[][] parents = new int[104][104]; + @OriginalMember(owner = "client!nd", name = "q", descriptor = "[[I") + public static final int[][] costs = new int[104][104]; + @OriginalMember(owner = "client!vc", name = "eb", descriptor = "[I") + public static final int[] queueX = new int[4096]; + @OriginalMember(owner = "client!gk", name = "c", descriptor = "[I") + public static final int[] queueZ = new int[4096]; + @OriginalMember(owner = "client!s", name = "d", descriptor = "I") + public static int anInt4364 = 0; + + @OriginalMember(owner = "client!hn", name = "a", descriptor = "(IIIZIIIIIIII)Z") + public static boolean findPath(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) boolean arg3, @OriginalArg(4) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8, @OriginalArg(10) int arg9, @OriginalArg(11) int arg10) { + if (PlayerList.self.getSize() == 2) { + return findPath2(arg6, arg7, arg4, arg0, arg9, arg3, arg2, arg1, arg5, arg8, arg10); + } else if (PlayerList.self.getSize() <= 2) { + return findPathN(arg5, arg4, arg10, arg9, arg8, arg2, arg1, arg3, arg7, arg0, arg6); + } else { + return findPath1(arg9, arg6, arg8, arg1, PlayerList.self.getSize(), arg5, arg7, arg4, arg10, arg2, arg3, arg0); + } + } + + @OriginalMember(owner = "client!aa", name = "a", descriptor = "(IIIIIZIIIIII)Z") + public static boolean findPath2(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) boolean arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9, @OriginalArg(11) int arg10) { + @Pc(3) int x; + @Pc(8) int z; + for (x = 0; x < 104; x++) { + for (z = 0; z < 104; z++) { + parents[x][z] = 0; + costs[x][z] = 99999999; + } + } + parents[arg10][arg3] = 99; + costs[arg10][arg3] = 0; + z = arg3; + x = arg10; + @Pc(53) byte local53 = 0; + queueX[0] = arg10; + @Pc(59) boolean local59 = false; + @Pc(61) int local61 = 0; + @Pc(64) int queueWriterIndex = local53 + 1; + queueZ[0] = arg3; + @Pc(71) int[][] flags = collisionMaps[Player.plane].flags; + @Pc(193) int cost; + while (local61 != queueWriterIndex) { + x = queueX[local61]; + z = queueZ[local61]; + local61 = local61 + 1 & 0xFFF; + if (arg8 == x && arg4 == z) { + local59 = true; + break; + } + if (arg1 != 0) { + if ((arg1 < 5 || arg1 == 10) && collisionMaps[Player.plane].isAtWall(arg4, x, z, arg8, arg1 - 1, 2, arg7)) { + local59 = true; + break; + } + if (arg1 < 10 && collisionMaps[Player.plane].isAtWallDecor(arg4, arg1 - 1, arg8, z, 2, arg7, x)) { + local59 = true; + break; + } + } + if (arg0 != 0 && arg6 != 0 && collisionMaps[Player.plane].isInsideOrOutsideRect(arg8, z, x, 2, arg0, arg2, arg4, arg6)) { + local59 = true; + break; + } + cost = costs[x][z] + 1; + if (x > 0 && parents[x - 1][z] == 0 && (flags[x - 1][z] & 0x12C010E) == 0 && (flags[x - 1][z + 1] & 0x12C0138) == 0) { + queueX[queueWriterIndex] = x - 1; + queueZ[queueWriterIndex] = z; + queueWriterIndex = queueWriterIndex + 1 & 0xFFF; + parents[x - 1][z] = 2; + costs[x - 1][z] = cost; + } + if (x < 102 && parents[x + 1][z] == 0 && (flags[x + 2][z] & 0x12C0183) == 0 && (flags[x + 2][z + 1] & 0x12C01E0) == 0) { + queueX[queueWriterIndex] = x + 1; + queueZ[queueWriterIndex] = z; + queueWriterIndex = queueWriterIndex + 1 & 0xFFF; + parents[x + 1][z] = 8; + costs[x + 1][z] = cost; + } + if (z > 0 && parents[x][z - 1] == 0 && (flags[x][z - 1] & 0x12C010E) == 0 && (flags[x + 1][z - 1] & 0x12C0183) == 0) { + queueX[queueWriterIndex] = x; + queueZ[queueWriterIndex] = z - 1; + parents[x][z - 1] = 1; + costs[x][z - 1] = cost; + queueWriterIndex = queueWriterIndex + 1 & 0xFFF; + } + if (z < 102 && parents[x][z + 1] == 0 && (flags[x][z + 2] & 0x12C0138) == 0 && (flags[x + 1][z + 2] & 0x12C01E0) == 0) { + queueX[queueWriterIndex] = x; + queueZ[queueWriterIndex] = z + 1; + parents[x][z + 1] = 4; + queueWriterIndex = queueWriterIndex + 1 & 0xFFF; + costs[x][z + 1] = cost; + } + if (x > 0 && z > 0 && parents[x - 1][z - 1] == 0 && (flags[x - 1][z] & 0x12C0138) == 0 && (flags[x - 1][z - 1] & 0x12C010E) == 0 && (flags[x][z - 1] & 0x12C0183) == 0) { + queueX[queueWriterIndex] = x - 1; + queueZ[queueWriterIndex] = z - 1; + parents[x - 1][z - 1] = 3; + costs[x - 1][z - 1] = cost; + queueWriterIndex = queueWriterIndex + 1 & 0xFFF; + } + if (x < 102 && z > 0 && parents[x + 1][z - 1] == 0 && (flags[x + 1][z - 1] & 0x12C010E) == 0 && (flags[x + 2][z - 1] & 0x12C0183) == 0 && (flags[x + 2][z] & 0x12C01E0) == 0) { + queueX[queueWriterIndex] = x + 1; + queueZ[queueWriterIndex] = z - 1; + queueWriterIndex = queueWriterIndex + 1 & 0xFFF; + parents[x + 1][z - 1] = 9; + costs[x + 1][z - 1] = cost; + } + if (x > 0 && z < 102 && parents[x - 1][z + 1] == 0 && (flags[x - 1][z + 1] & 0x12C010E) == 0 && (flags[x - 1][z + 2] & 0x12C0138) == 0 && (flags[x][z + 2] & 0x12C01E0) == 0) { + queueX[queueWriterIndex] = x - 1; + queueZ[queueWriterIndex] = z + 1; + parents[x - 1][z + 1] = 6; + costs[x - 1][z + 1] = cost; + queueWriterIndex = queueWriterIndex + 1 & 0xFFF; + } + if (x < 102 && z < 102 && parents[x + 1][z + 1] == 0 && (flags[x + 1][z + 2] & 0x12C0138) == 0 && (flags[x + 2][z + 2] & 0x12C01E0) == 0 && (flags[x + 2][z + 1] & 0x12C0183) == 0) { + queueX[queueWriterIndex] = x + 1; + queueZ[queueWriterIndex] = z + 1; + queueWriterIndex = queueWriterIndex + 1 & 0xFFF; + parents[x + 1][z + 1] = 12; + costs[x + 1][z + 1] = cost; + } + } + anInt4364 = 0; + @Pc(921) int local921; + if (!local59) { + if (!arg5) { + return false; + } + cost = 1000; + local921 = 100; + for (@Pc(928) int local928 = arg8 - 10; local928 <= arg8 + 10; local928++) { + for (@Pc(942) int local942 = arg4 - 10; local942 <= arg4 + 10; local942++) { + if (local928 >= 0 && local942 >= 0 && local928 < 104 && local942 < 104 && costs[local928][local942] < 100) { + @Pc(978) int local978 = 0; + @Pc(980) int local980 = 0; + if (local928 < arg8) { + local978 = arg8 - local928; + } else if (local928 > arg0 + arg8 - 1) { + local978 = local928 + 1 - arg0 - arg8; + } + if (arg4 > local942) { + local980 = arg4 - local942; + } else if (local942 > arg4 + arg6 - 1) { + local980 = local942 + 1 - arg4 - arg6; + } + @Pc(1057) int local1057 = local978 * local978 + local980 * local980; + if (local1057 < cost || cost == local1057 && costs[local928][local942] < local921) { + z = local942; + local921 = costs[local928][local942]; + cost = local1057; + x = local928; + } + } + } + } + if (cost == 1000) { + return false; + } + if (arg10 == x && z == arg3) { + return false; + } + anInt4364 = 1; + } + @Pc(1121) byte local1121 = 0; + queueX[0] = x; + local61 = local1121 + 1; + queueZ[0] = z; + cost = local921 = parents[x][z]; + while (arg10 != x || arg3 != z) { + if (local921 != cost) { + queueX[local61] = x; + queueZ[local61++] = z; + local921 = cost; + } + if ((cost & 0x2) != 0) { + x++; + } else if ((cost & 0x8) != 0) { + x--; + } + if ((cost & 0x1) != 0) { + z++; + } else if ((cost & 0x4) != 0) { + z--; + } + cost = parents[x][z]; + } + if (local61 > 0) { + ClientProt.method3502(local61, arg9); + return true; + } else return arg9 != 1; + } + + @OriginalMember(owner = "client!di", name = "a", descriptor = "(IIIIIIIIZIII)Z") + public static boolean findPathN(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) boolean arg7, @OriginalArg(9) int arg8, @OriginalArg(10) int arg9, @OriginalArg(11) int arg10) { + @Pc(3) int local3; + @Pc(10) int local10; + for (local3 = 0; local3 < 104; local3++) { + for (local10 = 0; local10 < 104; local10++) { + parents[local3][local10] = 0; + costs[local3][local10] = 99999999; + } + } + local3 = arg2; + parents[arg2][arg9] = 99; + local10 = arg9; + costs[arg2][arg9] = 0; + @Pc(51) byte local51 = 0; + @Pc(53) boolean local53 = false; + @Pc(64) int local64 = 0; + queueX[0] = arg2; + @Pc(71) int local71 = local51 + 1; + queueZ[0] = arg9; + @Pc(78) int[][] local78 = collisionMaps[Player.plane].flags; + @Pc(198) int local198; + while (local71 != local64) { + local10 = queueZ[local64]; + local3 = queueX[local64]; + local64 = local64 + 1 & 0xFFF; + if (local3 == arg0 && local10 == arg3) { + local53 = true; + break; + } + if (arg8 != 0) { + if ((arg8 < 5 || arg8 == 10) && collisionMaps[Player.plane].isAtWall(arg3, local3, local10, arg0, arg8 - 1, 1, arg6)) { + local53 = true; + break; + } + if (arg8 < 10 && collisionMaps[Player.plane].isAtWallDecor(arg3, arg8 - 1, arg0, local10, 1, arg6, local3)) { + local53 = true; + break; + } + } + if (arg10 != 0 && arg5 != 0 && collisionMaps[Player.plane].isInsideOrOutsideRect(arg0, local10, local3, 1, arg10, arg1, arg3, arg5)) { + local53 = true; + break; + } + local198 = costs[local3][local10] + 1; + if (local3 > 0 && parents[local3 - 1][local10] == 0 && (local78[local3 - 1][local10] & 0x12C0108) == 0) { + queueX[local71] = local3 - 1; + queueZ[local71] = local10; + local71 = local71 + 1 & 0xFFF; + parents[local3 - 1][local10] = 2; + costs[local3 - 1][local10] = local198; + } + if (local3 < 103 && parents[local3 + 1][local10] == 0 && (local78[local3 + 1][local10] & 0x12C0180) == 0) { + queueX[local71] = local3 + 1; + queueZ[local71] = local10; + local71 = local71 + 1 & 0xFFF; + parents[local3 + 1][local10] = 8; + costs[local3 + 1][local10] = local198; + } + if (local10 > 0 && parents[local3][local10 - 1] == 0 && (local78[local3][local10 - 1] & 0x12C0102) == 0) { + queueX[local71] = local3; + queueZ[local71] = local10 - 1; + parents[local3][local10 - 1] = 1; + local71 = local71 + 1 & 0xFFF; + costs[local3][local10 - 1] = local198; + } + if (local10 < 103 && parents[local3][local10 + 1] == 0 && (local78[local3][local10 + 1] & 0x12C0120) == 0) { + queueX[local71] = local3; + queueZ[local71] = local10 + 1; + local71 = local71 + 1 & 0xFFF; + parents[local3][local10 + 1] = 4; + costs[local3][local10 + 1] = local198; + } + if (local3 > 0 && local10 > 0 && parents[local3 - 1][local10 - 1] == 0 && (local78[local3 - 1][local10 - 1] & 0x12C010E) == 0 && (local78[local3 - 1][local10] & 0x12C0108) == 0 && (local78[local3][local10 - 1] & 0x12C0102) == 0) { + queueX[local71] = local3 - 1; + queueZ[local71] = local10 - 1; + local71 = local71 + 1 & 0xFFF; + parents[local3 - 1][local10 - 1] = 3; + costs[local3 - 1][local10 - 1] = local198; + } + if (local3 < 103 && local10 > 0 && parents[local3 + 1][local10 - 1] == 0 && (local78[local3 + 1][local10 - 1] & 0x12C0183) == 0 && (local78[local3 + 1][local10] & 0x12C0180) == 0 && (local78[local3][local10 - 1] & 0x12C0102) == 0) { + queueX[local71] = local3 + 1; + queueZ[local71] = local10 - 1; + local71 = local71 + 1 & 0xFFF; + parents[local3 + 1][local10 - 1] = 9; + costs[local3 + 1][local10 - 1] = local198; + } + if (local3 > 0 && local10 < 103 && parents[local3 - 1][local10 + 1] == 0 && (local78[local3 - 1][local10 + 1] & 0x12C0138) == 0 && (local78[local3 - 1][local10] & 0x12C0108) == 0 && (local78[local3][local10 + 1] & 0x12C0120) == 0) { + queueX[local71] = local3 - 1; + queueZ[local71] = local10 + 1; + parents[local3 - 1][local10 + 1] = 6; + local71 = local71 + 1 & 0xFFF; + costs[local3 - 1][local10 + 1] = local198; + } + if (local3 < 103 && local10 < 103 && parents[local3 + 1][local10 + 1] == 0 && (local78[local3 + 1][local10 + 1] & 0x12C01E0) == 0 && (local78[local3 + 1][local10] & 0x12C0180) == 0 && (local78[local3][local10 + 1] & 0x12C0120) == 0) { + queueX[local71] = local3 + 1; + queueZ[local71] = local10 + 1; + parents[local3 + 1][local10 + 1] = 12; + local71 = local71 + 1 & 0xFFF; + costs[local3 + 1][local10 + 1] = local198; + } + } + anInt4364 = 0; + @Pc(839) int local839; + if (!local53) { + if (!arg7) { + return false; + } + local198 = 1000; + local839 = 100; + for (@Pc(846) int local846 = arg0 - 10; local846 <= arg0 + 10; local846++) { + for (@Pc(856) int local856 = arg3 - 10; local856 <= arg3 + 10; local856++) { + if (local846 >= 0 && local856 >= 0 && local846 < 104 && local856 < 104 && costs[local846][local856] < 100) { + @Pc(894) int local894 = 0; + if (local856 < arg3) { + local894 = arg3 - local856; + } else if (arg5 + arg3 - 1 < local856) { + local894 = local856 + 1 - arg3 - arg5; + } + @Pc(927) int local927 = 0; + if (local846 < arg0) { + local927 = arg0 - local846; + } else if (local846 > arg10 + arg0 - 1) { + local927 = local846 + 1 - arg10 - arg0; + } + @Pc(968) int local968 = local894 * local894 + local927 * local927; + if (local968 < local198 || local968 == local198 && costs[local846][local856] < local839) { + local10 = local856; + local198 = local968; + local3 = local846; + local839 = costs[local846][local856]; + } + } + } + } + if (local198 == 1000) { + return false; + } + if (arg2 == local3 && local10 == arg9) { + return false; + } + anInt4364 = 1; + } + @Pc(1032) byte local1032 = 0; + queueX[0] = local3; + local64 = local1032 + 1; + queueZ[0] = local10; + local198 = local839 = parents[local3][local10]; + while (arg2 != local3 || local10 != arg9) { + if (local839 != local198) { + local839 = local198; + queueX[local64] = local3; + queueZ[local64++] = local10; + } + if ((local198 & 0x2) != 0) { + local3++; + } else if ((local198 & 0x8) != 0) { + local3--; + } + if ((local198 & 0x1) != 0) { + local10++; + } else if ((local198 & 0x4) != 0) { + local10--; + } + local198 = parents[local3][local10]; + } + if (local64 > 0) { + ClientProt.method3502(local64, arg4); + return true; + } else return arg4 != 1; + } + + @OriginalMember(owner = "client!hh", name = "a", descriptor = "(IBIIIIIIIIIZI)Z") + public static boolean findPath1(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8, @OriginalArg(10) int arg9, @OriginalArg(11) boolean arg10, @OriginalArg(12) int arg11) { + @Pc(3) int local3; + @Pc(10) int local10; + for (local3 = 0; local3 < 104; local3++) { + for (local10 = 0; local10 < 104; local10++) { + parents[local3][local10] = 0; + costs[local3][local10] = 99999999; + } + } + local3 = arg8; + local10 = arg11; + parents[arg8][arg11] = 99; + costs[arg8][arg11] = 0; + @Pc(53) byte local53 = 0; + queueX[0] = arg8; + @Pc(65) int local65 = local53 + 1; + queueZ[0] = arg11; + @Pc(69) int local69 = 0; + @Pc(71) boolean local71 = false; + @Pc(76) int[][] local76 = collisionMaps[Player.plane].flags; + @Pc(201) int local201; + @Pc(242) int local242; + label397: + while (local69 != local65) { + local3 = queueX[local69]; + local10 = queueZ[local69]; + local69 = local69 + 1 & 0xFFF; + if (arg5 == local3 && local10 == arg0) { + local71 = true; + break; + } + if (arg6 != 0) { + if ((arg6 < 5 || arg6 == 10) && collisionMaps[Player.plane].isAtWall(arg0, local3, local10, arg5, arg6 - 1, arg4, arg3)) { + local71 = true; + break; + } + if (arg6 < 10 && collisionMaps[Player.plane].isAtWallDecor(arg0, arg6 - 1, arg5, local10, arg4, arg3, local3)) { + local71 = true; + break; + } + } + if (arg1 != 0 && arg9 != 0 && collisionMaps[Player.plane].isInsideOrOutsideRect(arg5, local10, local3, arg4, arg1, arg7, arg0, arg9)) { + local71 = true; + break; + } + local201 = costs[local3][local10] + 1; + if (local3 > 0 && parents[local3 - 1][local10] == 0 && (local76[local3 - 1][local10] & 0x12C010E) == 0 && (local76[local3 - 1][arg4 + local10 - 1] & 0x12C0138) == 0) { + local242 = 1; + while (true) { + if (arg4 - 1 <= local242) { + queueX[local65] = local3 - 1; + queueZ[local65] = local10; + parents[local3 - 1][local10] = 2; + local65 = local65 + 1 & 0xFFF; + costs[local3 - 1][local10] = local201; + break; + } + if ((local76[local3 - 1][local10 + local242] & 0x12C013E) != 0) { + break; + } + local242++; + } + } + if (local3 < 102 && parents[local3 + 1][local10] == 0 && (local76[local3 + arg4][local10] & 0x12C0183) == 0 && (local76[arg4 + local3][local10 + arg4 - 1] & 0x12C01E0) == 0) { + local242 = 1; + while (true) { + if (local242 >= arg4 - 1) { + queueX[local65] = local3 + 1; + queueZ[local65] = local10; + parents[local3 + 1][local10] = 8; + costs[local3 + 1][local10] = local201; + local65 = local65 + 1 & 0xFFF; + break; + } + if ((local76[arg4 + local3][local10 + local242] & 0x12C01E3) != 0) { + break; + } + local242++; + } + } + if (local10 > 0 && parents[local3][local10 - 1] == 0 && (local76[local3][local10 - 1] & 0x12C010E) == 0 && (local76[arg4 + local3 - 1][local10 - 1] & 0x12C0183) == 0) { + local242 = 1; + while (true) { + if (arg4 - 1 <= local242) { + queueX[local65] = local3; + queueZ[local65] = local10 - 1; + parents[local3][local10 - 1] = 1; + local65 = local65 + 1 & 0xFFF; + costs[local3][local10 - 1] = local201; + break; + } + if ((local76[local3 + local242][local10 - 1] & 0x12C018F) != 0) { + break; + } + local242++; + } + } + if (local10 < 102 && parents[local3][local10 + 1] == 0 && (local76[local3][local10 + arg4] & 0x12C0138) == 0 && (local76[local3 + arg4 - 1][arg4 + local10] & 0x12C01E0) == 0) { + local242 = 1; + while (true) { + if (local242 >= arg4 - 1) { + queueX[local65] = local3; + queueZ[local65] = local10 + 1; + parents[local3][local10 + 1] = 4; + costs[local3][local10 + 1] = local201; + local65 = local65 + 1 & 0xFFF; + break; + } + if ((local76[local3 + local242][arg4 + local10] & 0x12C01F8) != 0) { + break; + } + local242++; + } + } + if (local3 > 0 && local10 > 0 && parents[local3 - 1][local10 - 1] == 0 && (local76[local3 - 1][arg4 + local10 - 1 - 1] & 0x12C0138) == 0 && (local76[local3 - 1][local10 - 1] & 0x12C010E) == 0 && (local76[arg4 + local3 - 1 - 1][local10 - 1] & 0x12C0183) == 0) { + local242 = 1; + while (true) { + if (arg4 - 1 <= local242) { + queueX[local65] = local3 - 1; + queueZ[local65] = local10 - 1; + local65 = local65 + 1 & 0xFFF; + parents[local3 - 1][local10 - 1] = 3; + costs[local3 - 1][local10 - 1] = local201; + break; + } + if ((local76[local3 - 1][local10 + local242 - 1] & 0x12C013E) != 0 || (local76[local242 + local3 - 1][local10 - 1] & 0x12C018F) != 0) { + break; + } + local242++; + } + } + if (local3 < 102 && local10 > 0 && parents[local3 + 1][local10 - 1] == 0 && (local76[local3 + 1][local10 - 1] & 0x12C010E) == 0 && (local76[arg4 + local3][local10 - 1] & 0x12C0183) == 0 && (local76[local3 + arg4][local10 + arg4 - 1 - 1] & 0x12C01E0) == 0) { + local242 = 1; + while (true) { + if (local242 >= arg4 - 1) { + queueX[local65] = local3 + 1; + queueZ[local65] = local10 - 1; + local65 = local65 + 1 & 0xFFF; + parents[local3 + 1][local10 - 1] = 9; + costs[local3 + 1][local10 - 1] = local201; + break; + } + if ((local76[local3 + arg4][local10 + local242 - 1] & 0x12C01E3) != 0 || (local76[local242 + local3 + 1][local10 - 1] & 0x12C018F) != 0) { + break; + } + local242++; + } + } + if (local3 > 0 && local10 < 102 && parents[local3 - 1][local10 + 1] == 0 && (local76[local3 - 1][local10 + 1] & 0x12C010E) == 0 && (local76[local3 - 1][local10 + arg4] & 0x12C0138) == 0 && (local76[local3][local10 + arg4] & 0x12C01E0) == 0) { + local242 = 1; + while (true) { + if (arg4 - 1 <= local242) { + queueX[local65] = local3 - 1; + queueZ[local65] = local10 + 1; + local65 = local65 + 1 & 0xFFF; + parents[local3 - 1][local10 + 1] = 6; + costs[local3 - 1][local10 + 1] = local201; + break; + } + if ((local76[local3 - 1][local10 + local242 + 1] & 0x12C013E) != 0 || (local76[local242 + local3 - 1][arg4 + local10] & 0x12C01F8) != 0) { + break; + } + local242++; + } + } + if (local3 < 102 && local10 < 102 && parents[local3 + 1][local10 + 1] == 0 && (local76[local3 + 1][local10 + arg4] & 0x12C0138) == 0 && (local76[local3 + arg4][local10 + arg4] & 0x12C01E0) == 0 && (local76[arg4 + local3][local10 + 1] & 0x12C0183) == 0) { + for (local242 = 1; local242 < arg4 - 1; local242++) { + if ((local76[local242 + local3 + 1][local10 + arg4] & 0x12C01F8) != 0 || (local76[arg4 + local3][local242 + local10 + 1] & 0x12C01E3) != 0) { + continue label397; + } + } + queueX[local65] = local3 + 1; + queueZ[local65] = local10 + 1; + parents[local3 + 1][local10 + 1] = 12; + costs[local3 + 1][local10 + 1] = local201; + local65 = local65 + 1 & 0xFFF; + } + } + anInt4364 = 0; + if (!local71) { + if (!arg10) { + return false; + } + local201 = 1000; + local242 = 100; + for (@Pc(1247) int local1247 = arg5 - 10; local1247 <= arg5 + 10; local1247++) { + for (@Pc(1257) int local1257 = arg0 - 10; local1257 <= arg0 + 10; local1257++) { + if (local1247 >= 0 && local1257 >= 0 && local1247 < 104 && local1257 < 104 && costs[local1247][local1257] < 100) { + @Pc(1295) int local1295 = 0; + if (arg5 > local1247) { + local1295 = arg5 - local1247; + } else if (arg5 + arg1 - 1 < local1247) { + local1295 = local1247 + 1 - arg1 - arg5; + } + @Pc(1334) int local1334 = 0; + if (local1257 < arg0) { + local1334 = arg0 - local1257; + } else if (arg0 + arg9 - 1 < local1257) { + local1334 = local1257 + 1 - arg0 - arg9; + } + @Pc(1377) int local1377 = local1295 * local1295 + local1334 * local1334; + if (local1377 < local201 || local1377 == local201 && local242 > costs[local1247][local1257]) { + local242 = costs[local1247][local1257]; + local3 = local1247; + local201 = local1377; + local10 = local1257; + } + } + } + } + if (local201 == 1000) { + return false; + } + if (local3 == arg8 && arg11 == local10) { + return false; + } + anInt4364 = 1; + } + @Pc(1438) byte local1438 = 0; + queueX[0] = local3; + local69 = local1438 + 1; + queueZ[0] = local10; + local201 = local242 = parents[local3][local10]; + while (local3 != arg8 || arg11 != local10) { + if (local242 != local201) { + queueX[local69] = local3; + local242 = local201; + queueZ[local69++] = local10; + } + if ((local201 & 0x2) != 0) { + local3++; + } else if ((local201 & 0x8) != 0) { + local3--; + } + if ((local201 & 0x1) != 0) { + local10++; + } else if ((local201 & 0x4) != 0) { + local10--; + } + local201 = parents[local3][local10]; + } + if (local69 > 0) { + ClientProt.method3502(local69, arg2); + return true; + } else return arg2 != 1; + } + + @OriginalMember(owner = "client!t", name = "a", descriptor = "(BJII)Z") + public static boolean findPathToLoc(@OriginalArg(1) long key, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + @Pc(12) int shape = (int) key >> 14 & 0x1F; + @Pc(24) int angle = (int) key >> 20 & 0x3; + @Pc(31) int id = (int) (key >>> 32) & Integer.MAX_VALUE; + if (shape == 10 || shape == 11 || shape == 22) { + @Pc(46) LocType local46 = LocTypeList.get(id); + @Pc(62) int local62; + @Pc(59) int local59; + if (angle == 0 || angle == 2) { + local59 = local46.length; + local62 = local46.width; + } else { + local59 = local46.width; + local62 = local46.length; + } + @Pc(73) int local73 = local46.blocksides; + if (angle != 0) { + local73 = (local73 << angle & 0xF) + (local73 >> 4 - angle); + } + findPath(PlayerList.self.movementQueueZ[0], 0, local59, true, local73, arg2, local62, 0, 2, arg1, PlayerList.self.movementQueueX[0]); + } else { + findPath(PlayerList.self.movementQueueZ[0], angle, 0, true, 0, arg2, 0, shape + 1, 2, arg1, PlayerList.self.movementQueueX[0]); + } + Cross.y = Mouse.clickY; + Cross.milliseconds = 0; + Cross.type = 2; + Cross.x = Mouse.clickX; + return true; + } +} diff --git a/client/src/main/java/rt4/PathingEntity.java b/client/src/main/java/rt4/PathingEntity.java new file mode 100644 index 0000000..8ccc32e --- /dev/null +++ b/client/src/main/java/rt4/PathingEntity.java @@ -0,0 +1,653 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!fe") +public abstract class PathingEntity extends Entity { + + @OriginalMember(owner = "client!ef", name = "a", descriptor = "[I") + public static final int[] ANGLES = new int[]{768, 1024, 1280, 512, 1536, 256, 0, 1792}; + + @OriginalMember(owner = "client!hn", name = "Y", descriptor = "I") + public static int anInt2680 = 0; + + @OriginalMember(owner = "client!hm", name = "ab", descriptor = "I") + public static int anInt2640 = 0; + + @OriginalMember(owner = "client!f", name = "V", descriptor = "I") + public static int anInt1938 = 0; + + @OriginalMember(owner = "client!fe", name = "A", descriptor = "I") + public int spotAnimStart; + + @OriginalMember(owner = "client!fe", name = "S", descriptor = "I") + public int hitpointsBar; + + @OriginalMember(owner = "client!fe", name = "U", descriptor = "I") + public int attachmentZ0; + + @OriginalMember(owner = "client!fe", name = "Z", descriptor = "I") + public int attachmentXFine; + + @OriginalMember(owner = "client!fe", name = "bb", descriptor = "I") + public int forceMoveStartX; + + @OriginalMember(owner = "client!fe", name = "cb", descriptor = "I") + public int anInt3381; + + @OriginalMember(owner = "client!fe", name = "fb", descriptor = "I") + public int atachmentX0; + + @OriginalMember(owner = "client!fe", name = "hb", descriptor = "I") + public int forceMoveCyclesToDest; + + @OriginalMember(owner = "client!fe", name = "nb", descriptor = "Ljava/lang/Object;") + public Object attachment; + + @OriginalMember(owner = "client!fe", name = "rb", descriptor = "I") + public int forceMoveDestY; + + @OriginalMember(owner = "client!fe", name = "tb", descriptor = "I") + public int spotAnimY; + + @OriginalMember(owner = "client!fe", name = "ub", descriptor = "I") + public int forceMoveCyclesToStart; + + @OriginalMember(owner = "client!fe", name = "vb", descriptor = "Lclient!ga;") + protected ParticleSystem particleSystem; + + @OriginalMember(owner = "client!fe", name = "Ab", descriptor = "I") + public int anInt3400; + + @OriginalMember(owner = "client!fe", name = "Jb", descriptor = "I") + public int attachmentY; + + @OriginalMember(owner = "client!fe", name = "Ob", descriptor = "I") + public int attachmentZ1; + + @OriginalMember(owner = "client!fe", name = "Pb", descriptor = "I") + public int attachmentX1; + + @OriginalMember(owner = "client!fe", name = "Qb", descriptor = "I") + public int xFine; + + @OriginalMember(owner = "client!fe", name = "Ub", descriptor = "I") + public int forceMoveDestX; + + @OriginalMember(owner = "client!fe", name = "ac", descriptor = "I") + public int zFine; + + @OriginalMember(owner = "client!fe", name = "dc", descriptor = "I") + public int anInt3424; + + @OriginalMember(owner = "client!fe", name = "fc", descriptor = "I") + public int attachmentZFine; + + @OriginalMember(owner = "client!fe", name = "hc", descriptor = "I") + public int forceMoveStartY; + + @OriginalMember(owner = "client!fe", name = "mc", descriptor = "I") + public int forceMoveDirection; + + @OriginalMember(owner = "client!fe", name = "w", descriptor = "[I") + public final int[] movementQueueZ = new int[10]; + + @OriginalMember(owner = "client!fe", name = "z", descriptor = "I") + public int anInt3358 = 0; + + @OriginalMember(owner = "client!fe", name = "J", descriptor = "I") + private int anInt3367 = 0; + + @OriginalMember(owner = "client!fe", name = "L", descriptor = "[I") + public final int[] hitVisibleUntil = new int[4]; + + @OriginalMember(owner = "client!fe", name = "K", descriptor = "[I") + public final int[] movementQueueX = new int[10]; + + @OriginalMember(owner = "client!fe", name = "B", descriptor = "I") + public int anInt3360 = 0; + + @OriginalMember(owner = "client!fe", name = "O", descriptor = "I") + public int seqId = -1; + + @OriginalMember(owner = "client!fe", name = "ab", descriptor = "Z") + private boolean aBoolean169 = false; + + @OriginalMember(owner = "client!fe", name = "M", descriptor = "Z") + public boolean aBoolean167 = false; + + @OriginalMember(owner = "client!fe", name = "db", descriptor = "I") + public int faceX = 0; + + @OriginalMember(owner = "client!fe", name = "Q", descriptor = "I") + public int anInt3371 = 0; + + @OriginalMember(owner = "client!fe", name = "E", descriptor = "I") + public int faceY = 0; + + @OriginalMember(owner = "client!fe", name = "yb", descriptor = "I") + private int anInt3398 = 0; + + @OriginalMember(owner = "client!fe", name = "G", descriptor = "I") + public int anInt3365 = -1; + + @OriginalMember(owner = "client!fe", name = "gb", descriptor = "I") + public int anInt3385 = 0; + + @OriginalMember(owner = "client!fe", name = "pb", descriptor = "I") + public int attachmentSetAt = 0; + + @OriginalMember(owner = "client!fe", name = "mb", descriptor = "[B") + public final byte[] movementQueueSpeed = new byte[10]; + + @OriginalMember(owner = "client!fe", name = "W", descriptor = "I") + public int anInt3376 = 32; + + @OriginalMember(owner = "client!fe", name = "P", descriptor = "I") + public int faceEntity = -1; + + @OriginalMember(owner = "client!fe", name = "Bb", descriptor = "Z") + private boolean aBoolean170 = false; + + @OriginalMember(owner = "client!fe", name = "eb", descriptor = "I") + private int anInt3383 = 0; + + @OriginalMember(owner = "client!fe", name = "ib", descriptor = "I") + public int anInt3387 = 0; + + @OriginalMember(owner = "client!fe", name = "X", descriptor = "I") + public int anInt3377 = 0; + + @OriginalMember(owner = "client!fe", name = "Eb", descriptor = "[Lclient!ub;") + public final PathingEntity_Class147[] aClass147Array3 = new PathingEntity_Class147[12]; + + @OriginalMember(owner = "client!fe", name = "Lb", descriptor = "I") + public int chatLoops = 100; + + @OriginalMember(owner = "client!fe", name = "V", descriptor = "I") + public int attachmentResetAt = 0; + + @OriginalMember(owner = "client!fe", name = "Y", descriptor = "I") + public int hitpointsBarVisibleUntil = -1000; + + @OriginalMember(owner = "client!fe", name = "Rb", descriptor = "I") + protected int minY = -32768; + + @OriginalMember(owner = "client!fe", name = "Nb", descriptor = "I") + public int movementQueueSize = 0; + + @OriginalMember(owner = "client!fe", name = "Zb", descriptor = "I") + public int anInt3420 = 0; + + @OriginalMember(owner = "client!fe", name = "cc", descriptor = "I") + private int anInt3423 = 0; + + @OriginalMember(owner = "client!fe", name = "C", descriptor = "I") + public int anInt3361 = 0; + + @OriginalMember(owner = "client!fe", name = "Yb", descriptor = "I") + private int anInt3419 = 0; + + @OriginalMember(owner = "client!fe", name = "v", descriptor = "I") + private int anInt3355 = 0; + + @OriginalMember(owner = "client!fe", name = "Mb", descriptor = "[I") + public final int[] hitTypes = new int[4]; + + @OriginalMember(owner = "client!fe", name = "zb", descriptor = "I") + public int anInt3399 = 0; + + @OriginalMember(owner = "client!fe", name = "Db", descriptor = "I") + public int anInt3402 = 0; + + @OriginalMember(owner = "client!fe", name = "Vb", descriptor = "I") + public int anInt3417 = 0; + + @OriginalMember(owner = "client!fe", name = "s", descriptor = "I") + public int chatEffect = 0; + + @OriginalMember(owner = "client!fe", name = "T", descriptor = "I") + public int anInt3373 = -1; + + @OriginalMember(owner = "client!fe", name = "Fb", descriptor = "Z") + public boolean aBoolean171 = false; + + @OriginalMember(owner = "client!fe", name = "xb", descriptor = "I") + public int anInt3397 = 0; + + @OriginalMember(owner = "client!fe", name = "kb", descriptor = "I") + public int anInt3388 = -1; + + @OriginalMember(owner = "client!fe", name = "Sb", descriptor = "I") + public int anInt3414 = 0; + + @OriginalMember(owner = "client!fe", name = "H", descriptor = "I") + public int movementSeqId = -1; + + @OriginalMember(owner = "client!fe", name = "gc", descriptor = "I") + private int anInt3427 = 0; + + @OriginalMember(owner = "client!fe", name = "Tb", descriptor = "I") + private int size = 1; + + @OriginalMember(owner = "client!fe", name = "Kb", descriptor = "I") + public int anInt3407 = 0; + + @OriginalMember(owner = "client!fe", name = "ic", descriptor = "[I") + public final int[] hitDamages = new int[4]; + + @OriginalMember(owner = "client!fe", name = "Ib", descriptor = "I") + public int anInt3405 = 0; + + @OriginalMember(owner = "client!fe", name = "y", descriptor = "I") + private int anInt3357 = 0; + + @OriginalMember(owner = "client!fe", name = "wb", descriptor = "I") + public int anInt3396 = 0; + + @OriginalMember(owner = "client!fe", name = "jc", descriptor = "I") + public int chatColor = 0; + + @OriginalMember(owner = "client!fe", name = "kc", descriptor = "I") + public int lastSeenLoop = 0; + + @OriginalMember(owner = "client!fe", name = "ec", descriptor = "I") + public int anInt3425 = 0; + + @OriginalMember(owner = "client!fe", name = "Wb", descriptor = "Lclient!na;") + public JagString chatMessage = null; + + @OriginalMember(owner = "client!fe", name = "oc", descriptor = "I") + public int spotAnimId = -1; + + @OriginalMember(owner = "client!fe", name = "Xb", descriptor = "I") + public int anInt3418 = -1; + + @OriginalMember(owner = "client!fe", name = "b", descriptor = "(Z)Lclient!ck;") + public final BasType getBasType() { + @Pc(7) int basId = this.getBasId(); + return basId == -1 ? BasType.DEFAULT : BasTypeList.get(basId); + } + + @OriginalMember(owner = "client!fe", name = "a", descriptor = "(B)Z") + public boolean isVisible() { + return false; + } + + @OriginalMember(owner = "client!fe", name = "a", descriptor = "(IIIIZ)V") + public final void method2683(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) boolean arg3) { + if (this.seqId != -1 && SeqTypeList.get(this.seqId).movetype == 1) { + this.seqId = -1; + } + if (!arg3) { + @Pc(32) int local32 = arg1 - this.movementQueueX[0]; + @Pc(40) int local40 = arg2 - this.movementQueueZ[0]; + if (local32 >= -8 && local32 <= 8 && local40 >= -8 && local40 <= 8) { + if (this.movementQueueSize < 9) { + this.movementQueueSize++; + } + for (@Pc(72) int local72 = this.movementQueueSize; local72 > 0; local72--) { + this.movementQueueX[local72] = this.movementQueueX[local72 - 1]; + this.movementQueueZ[local72] = this.movementQueueZ[local72 - 1]; + this.movementQueueSpeed[local72] = this.movementQueueSpeed[local72 - 1]; + } + this.movementQueueSpeed[0] = 1; + this.movementQueueX[0] = arg1; + this.movementQueueZ[0] = arg2; + return; + } + } + this.anInt3417 = 0; + this.movementQueueX[0] = arg1; + this.movementQueueZ[0] = arg2; + this.movementQueueSize = 0; + this.anInt3405 = 0; + this.zFine = arg0 * 64 + this.movementQueueZ[0] * 128; + this.xFine = arg0 * 64 + this.movementQueueX[0] * 128; + if (GlRenderer.enabled && PlayerList.self == this) { + FogManager.setInstantFade(); + } + } + + @OriginalMember(owner = "client!fe", name = "a", descriptor = "(IBI)V") + public final void move(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(10) int local10 = this.movementQueueX[0]; + @Pc(15) int local15 = this.movementQueueZ[0]; + if (arg1 == 0) { + local10--; + local15++; + } + if (this.seqId != -1 && SeqTypeList.get(this.seqId).movetype == 1) { + this.seqId = -1; + } + if (this.movementQueueSize < 9) { + this.movementQueueSize++; + } + for (@Pc(50) int local50 = this.movementQueueSize; local50 > 0; local50--) { + this.movementQueueX[local50] = this.movementQueueX[local50 - 1]; + this.movementQueueZ[local50] = this.movementQueueZ[local50 - 1]; + this.movementQueueSpeed[local50] = this.movementQueueSpeed[local50 - 1]; + } + if (arg1 == 1) { + local15++; + } + this.movementQueueSpeed[0] = (byte) arg0; + if (arg1 == 2) { + local15++; + local10++; + } + if (arg1 == 3) { + local10--; + } + if (arg1 == 4) { + local10++; + } + if (arg1 == 5) { + local15--; + local10--; + } + if (arg1 == 6) { + local15--; + } + if (arg1 == 7) { + local15--; + local10++; + } + this.movementQueueX[0] = local10; + this.movementQueueZ[0] = local15; + } + + @OriginalMember(owner = "client!fe", name = "a", descriptor = "(BLclient!ak;I)V") + protected final void method2685(@OriginalArg(1) Model arg0, @OriginalArg(2) int arg1) { + anInt2680 = 0; + anInt2640 = 0; + anInt1938 = 0; + @Pc(21) BasType type = this.getBasType(); + @Pc(24) int local24 = type.anInt1059; + @Pc(27) int local27 = type.anInt1050; + if (local24 == 0 || local27 == 0) { + return; + } + @Pc(39) int local39 = MathUtils.sin[arg1]; + @Pc(43) int local43 = MathUtils.cos[arg1]; + @Pc(48) int local48 = -local24 / 2; + @Pc(53) int local53 = -local27 / 2; + @Pc(64) int local64 = local53 * local43 - local48 * local39 >> 16; + @Pc(75) int local75 = local39 * local53 + local43 * local48 >> 16; + @Pc(87) int local87 = SceneGraph.getTileHeight(Player.plane, local75 + this.xFine, this.zFine + local64); + @Pc(91) int local91 = local24 / 2; + @Pc(96) int local96 = -local27 / 2; + @Pc(106) int local106 = local91 * local43 + local96 * local39 >> 16; + @Pc(110) int local110 = local27 / 2; + @Pc(121) int local121 = local96 * local43 - local91 * local39 >> 16; + @Pc(134) int local134 = SceneGraph.getTileHeight(Player.plane, local106 + this.xFine, this.zFine - -local121); + @Pc(139) int local139 = -local24 / 2; + @Pc(150) int local150 = local110 * local43 - local39 * local139 >> 16; + @Pc(154) int local154 = local27 / 2; + @Pc(158) int local158 = local24 / 2; + @Pc(169) int local169 = local39 * local110 + local43 * local139 >> 16; + @Pc(179) int local179 = local154 * local43 - local39 * local158 >> 16; + @Pc(189) int local189 = local39 * local154 + local43 * local158 >> 16; + @Pc(201) int local201 = SceneGraph.getTileHeight(Player.plane, this.xFine + local169, local150 + this.zFine); + @Pc(212) int local212 = local134 > local87 ? local87 : local134; + @Pc(224) int local224 = SceneGraph.getTileHeight(Player.plane, local189 + this.xFine, local179 + this.zFine); + @Pc(231) int local231 = local224 > local201 ? local201 : local224; + @Pc(238) int local238 = local224 > local134 ? local134 : local224; + @Pc(245) int local245 = local201 <= local87 ? local201 : local87; + anInt2640 = (int) (Math.atan2(local212 - local231, local27) * 325.95D) & 0x7FF; + if (anInt2640 != 0) { + arg0.rotateX(anInt2640); + } + anInt2680 = (int) (Math.atan2(local245 - local238, local24) * 325.95D) & 0x7FF; + if (anInt2680 != 0) { + arg0.rotateZ(anInt2680); + } + anInt1938 = local224 + local87; + if (local201 + local134 < anInt1938) { + anInt1938 = local201 + local134; + } + anInt1938 = (anInt1938 >> 1) - this.anInt3424; + if (anInt1938 != 0) { + arg0.translate(0, anInt1938, 0); + } + } + + @OriginalMember(owner = "client!fe", name = "a", descriptor = "(IIII)V") + public final void addHit(@OriginalArg(0) int type, @OriginalArg(2) int loop, @OriginalArg(3) int damage) { + for (@Pc(11) int i = 0; i < 4; i++) { + if (loop >= this.hitVisibleUntil[i]) { + this.hitDamages[i] = damage; + this.hitTypes[i] = type; + this.hitVisibleUntil[i] = loop + 70; + return; + } + } + } + + @OriginalMember(owner = "client!fe", name = "a", descriptor = "(Lclient!ak;B)V") + protected final void method2687(@OriginalArg(0) Model arg0) { + @Pc(16) BasType local16 = this.getBasType(); + if (local16.rollTargetAngle == 0 && local16.pitchTargetAngle == 0) { + return; + } + @Pc(26) int local26 = 0; + @Pc(28) int local28 = 0; + if (this.aBoolean167 && this.anInt3414 != 0) { + local28 = local16.pitchTargetAngle; + if (this.anInt3414 >= 0) { + local26 = local16.rollTargetAngle; + } else { + local26 = -local16.rollTargetAngle; + } + } + @Pc(101) int local101; + @Pc(106) int local106; + @Pc(134) int local134; + @Pc(138) int local138; + if (this.anInt3419 != local26) { + this.anInt3419 = local26; + if (this.anInt3355 > 0 && this.anInt3383 < local26) { + local101 = this.anInt3355 * this.anInt3355 / (local16.rollAcceleration * 2); + local106 = local26 - this.anInt3383; + if (local101 <= local106) { + this.aBoolean170 = true; + this.anInt3398 = (local26 + this.anInt3383 - local101) / 2; + local134 = local16.rollMaxSpeed * local16.rollMaxSpeed / (local16.rollAcceleration * 2); + local138 = local26 - local134; + if (this.anInt3398 < local138) { + this.anInt3398 = local138; + } + } else { + this.aBoolean170 = false; + } + } else if (this.anInt3355 < 0 && this.anInt3383 > local26) { + local101 = this.anInt3355 * this.anInt3355 / (local16.rollAcceleration * 2); + local106 = local26 - this.anInt3383; + if (local106 >= local101) { + this.aBoolean170 = true; + this.anInt3398 = (this.anInt3383 + local101 + local26) / 2; + local134 = local16.rollMaxSpeed * local16.rollMaxSpeed / (local16.rollAcceleration * 2); + local138 = local134 + local26; + if (this.anInt3398 > local138) { + this.anInt3398 = local138; + } + } else { + this.aBoolean170 = false; + } + } else { + this.aBoolean170 = false; + } + } + if (this.anInt3355 == 0) { + local101 = this.anInt3419 - this.anInt3383; + if (-local16.rollAcceleration < local101 && local16.rollAcceleration > local101) { + this.anInt3383 = this.anInt3419; + } else { + this.aBoolean170 = true; + local106 = local16.rollMaxSpeed * local16.rollMaxSpeed / (local16.rollAcceleration * 2); + this.anInt3398 = (this.anInt3419 + this.anInt3383) / 2; + if (local101 >= 0) { + local134 = this.anInt3419 - local106; + this.anInt3355 = local16.rollAcceleration; + if (local134 > this.anInt3398) { + this.anInt3398 = local134; + } + } else { + this.anInt3355 = -local16.rollAcceleration; + local134 = local106 + this.anInt3419; + if (this.anInt3398 > local134) { + this.anInt3398 = local134; + } + } + } + } else if (this.anInt3355 > 0) { + if (this.anInt3383 >= this.anInt3398) { + this.aBoolean170 = false; + } + if (!this.aBoolean170) { + this.anInt3355 -= local16.rollAcceleration; + if (this.anInt3355 < 0) { + this.anInt3355 = 0; + } + } else if (local16.rollMaxSpeed > this.anInt3355) { + this.anInt3355 += local16.rollAcceleration; + } + } else { + if (this.anInt3398 >= this.anInt3383) { + this.aBoolean170 = false; + } + if (!this.aBoolean170) { + this.anInt3355 += local16.rollAcceleration; + if (this.anInt3355 > 0) { + this.anInt3355 = 0; + } + } else if (this.anInt3355 > -local16.rollMaxSpeed) { + this.anInt3355 -= local16.rollAcceleration; + } + } + this.anInt3383 += this.anInt3355; + if (this.anInt3383 != 0) { + local101 = this.anInt3383 >> 5 & 0x7FF; + local106 = arg0.getMinY() / 2; + arg0.translate(0, -local106, 0); + arg0.rotateZ(local101); + arg0.translate(0, local106, 0); + } + if (local28 != this.anInt3367) { + this.anInt3367 = local28; + if (this.anInt3423 > 0 && this.anInt3427 < local28) { + local101 = this.anInt3423 * this.anInt3423 / (local16.pitchAcceleration * 2); + local106 = local28 - this.anInt3427; + if (local101 > local106) { + this.aBoolean169 = false; + } else { + this.anInt3357 = (this.anInt3427 + local28 - local101) / 2; + this.aBoolean169 = true; + local134 = local16.pitchMaxSpeed * local16.pitchMaxSpeed / (local16.pitchAcceleration * 2); + local138 = local28 - local134; + if (this.anInt3357 < local138) { + this.anInt3357 = local138; + } + } + } else if (this.anInt3423 < 0 && this.anInt3427 > local28) { + local106 = local28 - this.anInt3427; + local101 = this.anInt3423 * this.anInt3423 / (local16.pitchAcceleration * 2); + if (local106 >= local101) { + this.anInt3357 = (local101 + this.anInt3427 + local28) / 2; + this.aBoolean169 = true; + local134 = local16.pitchMaxSpeed * local16.pitchMaxSpeed / (local16.pitchAcceleration * 2); + local138 = local134 + local28; + if (local138 < this.anInt3357) { + this.anInt3357 = local138; + } + } else { + this.aBoolean169 = false; + } + } else { + this.aBoolean169 = false; + } + } + if (this.anInt3423 == 0) { + local101 = this.anInt3367 - this.anInt3427; + if (local101 > -local16.pitchAcceleration && local16.pitchAcceleration > local101) { + this.anInt3427 = this.anInt3367; + } else { + this.anInt3357 = (this.anInt3367 + this.anInt3427) / 2; + this.aBoolean169 = true; + local106 = local16.pitchMaxSpeed * local16.pitchMaxSpeed / (local16.pitchAcceleration * 2); + if (local101 < 0) { + this.anInt3423 = -local16.pitchAcceleration; + local134 = local106 + this.anInt3367; + if (this.anInt3357 > local134) { + this.anInt3357 = local134; + } + } else { + this.anInt3423 = local16.pitchAcceleration; + local134 = this.anInt3367 - local106; + if (this.anInt3357 < local134) { + this.anInt3357 = local134; + } + } + } + } else if (this.anInt3423 > 0) { + if (this.anInt3427 >= this.anInt3357) { + this.aBoolean169 = false; + } + if (!this.aBoolean169) { + this.anInt3423 -= local16.pitchAcceleration; + if (this.anInt3423 < 0) { + this.anInt3423 = 0; + } + } else if (this.anInt3423 < local16.pitchMaxSpeed) { + this.anInt3423 += local16.pitchAcceleration; + } + } else { + if (this.anInt3357 >= this.anInt3427) { + this.aBoolean169 = false; + } + if (!this.aBoolean169) { + this.anInt3423 += local16.pitchAcceleration; + if (this.anInt3423 > 0) { + this.anInt3423 = 0; + } + } else if (-local16.pitchMaxSpeed < this.anInt3423) { + this.anInt3423 -= local16.pitchAcceleration; + } + } + this.anInt3427 += this.anInt3423; + if (this.anInt3427 != 0) { + local101 = this.anInt3427 >> 5 & 0x7FF; + local106 = arg0.getMinY() / 2; + arg0.translate(0, -local106, 0); + arg0.rotateX(local101); + arg0.translate(0, local106, 0); + } + } + + @OriginalMember(owner = "client!fe", name = "b", descriptor = "(I)I") + public abstract int getBasId(); + + @OriginalMember(owner = "client!fe", name = "c", descriptor = "(I)V") + public final void method2689() { + this.movementQueueSize = 0; + this.anInt3405 = 0; + } + + @OriginalMember(owner = "client!fe", name = "d", descriptor = "(I)I") + public final int method2691() { + return this.minY == -32768 ? 200 : -this.minY; + } + + @OriginalMember(owner = "client!fe", name = "a", descriptor = "(II)V") + public final void setSize(@OriginalArg(0) int size) { + this.size = size; + } + + @OriginalMember(owner = "client!fe", name = "c", descriptor = "(B)I") + public int getSize() { + return this.size; + } +} diff --git a/client/src/main/java/rt4/PathingEntity_Class147.java b/client/src/main/java/rt4/PathingEntity_Class147.java new file mode 100644 index 0000000..3d4bc8e --- /dev/null +++ b/client/src/main/java/rt4/PathingEntity_Class147.java @@ -0,0 +1,26 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!ub") +public final class PathingEntity_Class147 { + + @OriginalMember(owner = "client!ub", name = "b", descriptor = "I") + public int anInt5396; + + @OriginalMember(owner = "client!ub", name = "d", descriptor = "I") + public int anInt5398; + + @OriginalMember(owner = "client!ub", name = "f", descriptor = "I") + public int anInt5399; + + @OriginalMember(owner = "client!ub", name = "g", descriptor = "I") + public int anInt5400; + + @OriginalMember(owner = "client!ub", name = "l", descriptor = "I") + public int anInt5404; + + @OriginalMember(owner = "client!ub", name = "q", descriptor = "I") + public int anInt5408; +} diff --git a/client/src/main/java/rt4/PcmResampler.java b/client/src/main/java/rt4/PcmResampler.java new file mode 100644 index 0000000..adb5d84 --- /dev/null +++ b/client/src/main/java/rt4/PcmResampler.java @@ -0,0 +1,119 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!vj") +public final class PcmResampler { + + @OriginalMember(owner = "client!vj", name = "k", descriptor = "I") + private int outputRate; + + @OriginalMember(owner = "client!vj", name = "i", descriptor = "[[I") + private int[][] anIntArrayArray40; + + @OriginalMember(owner = "client!vj", name = "e", descriptor = "I") + private int inputRate; + + @OriginalMember(owner = "client!vj", name = "", descriptor = "(II)V") + public PcmResampler(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + if (arg1 != arg0) { + @Pc(12) int local12 = gcd(arg1, arg0); + @Pc(16) int local16 = arg1 / local12; + this.outputRate = local16; + @Pc(23) int local23 = arg0 / local12; + this.anIntArrayArray40 = new int[local23][14]; + this.inputRate = local23; + for (@Pc(33) int local33 = 0; local33 < local23; local33++) { + @Pc(41) int[] local41 = this.anIntArrayArray40[local33]; + @Pc(49) double local49 = (double) local33 / (double) local23 + 6.0D; + @Pc(55) double local55 = (double) local16 / (double) local23; + @Pc(63) int local63 = (int) Math.floor(local49 + 1.0D - 7.0D); + @Pc(69) int local69 = (int) Math.ceil(local49 + 7.0D); + if (local63 < 0) { + local63 = 0; + } + if (local69 > 14) { + local69 = 14; + } + while (local63 < local69) { + @Pc(91) double local91 = ((double) local63 - local49) * 3.141592653589793D; + @Pc(93) double local93 = local55; + if (-1.0E-4D > local91 || local91 > 1.0E-4D) { + local93 = local55 * (Math.sin(local91) / local91); + } + local93 *= Math.cos(((double) local63 - local49) * 0.2243994752564138D) * 0.46D + 0.54D; + local41[local63] = (int) Math.floor(local93 * 65536.0D + 0.5D); + local63++; + } + } + } + } + + @OriginalMember(owner = "client!og", name = "a", descriptor = "(III)I") + public static int gcd(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + if (arg0 > GlobalConfig.AUDIO_SAMPLE_RATE) { + arg1 = arg0; + arg0 = GlobalConfig.AUDIO_SAMPLE_RATE; + } + while (arg0 != 0) { + @Pc(21) int local21 = arg1 % arg0; + arg1 = arg0; + arg0 = local21; + } + return arg1; + } + + @OriginalMember(owner = "client!vj", name = "a", descriptor = "([BB)[B") + public final byte[] method4520(@OriginalArg(0) byte[] arg0) { + if (this.anIntArrayArray40 != null) { + @Pc(31) int local31 = (int) ((long) arg0.length * (long) this.outputRate / (long) this.inputRate) + 14; + @Pc(34) int[] local34 = new int[local31]; + @Pc(36) int local36 = 0; + @Pc(38) int local38 = 0; + @Pc(40) int local40; + for (local40 = 0; local40 < arg0.length; local40++) { + @Pc(53) int[] local53 = this.anIntArrayArray40[local38]; + @Pc(57) byte local57 = arg0[local40]; + @Pc(59) int local59; + for (local59 = 0; local59 < 14; local59++) { + local34[local36 + local59] += local53[local59] * local57; + } + local38 += this.outputRate; + local59 = local38 / this.inputRate; + local36 += local59; + local38 -= local59 * this.inputRate; + } + arg0 = new byte[local31]; + for (local40 = 0; local40 < local31; local40++) { + @Pc(119) int local119 = local34[local40] + 32768 >> 16; + if (local119 < -128) { + arg0[local40] = -128; + } else if (local119 <= 127) { + arg0[local40] = (byte) local119; + } else { + arg0[local40] = 127; + } + } + } + return arg0; + } + + @OriginalMember(owner = "client!vj", name = "a", descriptor = "(IB)I") + public final int scaleRate(@OriginalArg(0) int arg0) { + if (this.anIntArrayArray40 != null) { + arg0 = (int) ((long) this.outputRate * (long) arg0 / (long) this.inputRate); + } + return arg0; + } + + @OriginalMember(owner = "client!vj", name = "a", descriptor = "(ZI)I") + public final int scalePosition(@OriginalArg(1) int arg0) { + if (this.anIntArrayArray40 != null) { + arg0 = (int) ((long) this.outputRate * (long) arg0 / (long) this.inputRate) + 6; + } + return arg0; + } +} diff --git a/client/src/main/java/rt4/PcmSound.java b/client/src/main/java/rt4/PcmSound.java new file mode 100644 index 0000000..c5e06d5 --- /dev/null +++ b/client/src/main/java/rt4/PcmSound.java @@ -0,0 +1,57 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!kj") +public final class PcmSound extends Sound { + + @OriginalMember(owner = "client!kj", name = "r", descriptor = "Z") + public boolean aBoolean165; + + @OriginalMember(owner = "client!kj", name = "u", descriptor = "I") + public int rate; + + @OriginalMember(owner = "client!kj", name = "q", descriptor = "[B") + public byte[] samples; + + @OriginalMember(owner = "client!kj", name = "t", descriptor = "I") + public int start; + + @OriginalMember(owner = "client!kj", name = "s", descriptor = "I") + public int end; + + @OriginalMember(owner = "client!kj", name = "", descriptor = "(I[BII)V") + public PcmSound(@OriginalArg(0) int arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + this.rate = arg0; + this.samples = arg1; + this.start = arg2; + this.end = arg3; + } + + @OriginalMember(owner = "client!kj", name = "", descriptor = "(I[BIIZ)V") + public PcmSound(@OriginalArg(0) int arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) boolean arg4) { + this.rate = arg0; + this.samples = arg1; + this.start = arg2; + this.end = arg3; + this.aBoolean165 = arg4; + } + + @OriginalMember(owner = "client!kj", name = "a", descriptor = "(Lclient!vj;)Lclient!kj;") + public final PcmSound resample(@OriginalArg(0) PcmResampler arg0) { + this.samples = arg0.method4520(this.samples); + this.rate = arg0.scaleRate(this.rate); + if (this.start == this.end) { + this.start = this.end = arg0.scalePosition(this.start); + } else { + this.start = arg0.scalePosition(this.start); + this.end = arg0.scalePosition(this.end); + if (this.start == this.end) { + this.start--; + } + } + return this; + } +} diff --git a/client/src/main/java/rt4/PcmStream.java b/client/src/main/java/rt4/PcmStream.java new file mode 100644 index 0000000..5fa65e8 --- /dev/null +++ b/client/src/main/java/rt4/PcmStream.java @@ -0,0 +1,50 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!qb") +public abstract class PcmStream extends Node { + + @OriginalMember(owner = "client!qb", name = "p", descriptor = "I") + public int anInt5626; + + @OriginalMember(owner = "client!qb", name = "q", descriptor = "Lclient!ik;") + public Sound sound; + + @OriginalMember(owner = "client!qb", name = "s", descriptor = "Lclient!qb;") + public PcmStream aClass3_Sub3_8; + + @OriginalMember(owner = "client!qb", name = "r", descriptor = "Z") + public volatile boolean active = true; + + @OriginalMember(owner = "client!qb", name = "a", descriptor = "()I") + public abstract int method4404(); + + @OriginalMember(owner = "client!qb", name = "a", descriptor = "([III)V") + protected final void readIfActive(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + if (this.active) { + this.read(arg0, arg1, arg2); + } else { + this.skip(arg2); + } + } + + @OriginalMember(owner = "client!qb", name = "b", descriptor = "()Lclient!qb;") + public abstract PcmStream firstSubStream(); + + @OriginalMember(owner = "client!qb", name = "c", descriptor = "()I") + public int method4407() { + return 255; + } + + @OriginalMember(owner = "client!qb", name = "b", descriptor = "([III)V") + public abstract void read(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2); + + @OriginalMember(owner = "client!qb", name = "d", descriptor = "()Lclient!qb;") + public abstract PcmStream nextSubStream(); + + @OriginalMember(owner = "client!qb", name = "c", descriptor = "(I)V") + public abstract void skip(@OriginalArg(0) int arg0); +} diff --git a/client/src/main/java/rt4/PerlinNoise.java b/client/src/main/java/rt4/PerlinNoise.java new file mode 100644 index 0000000..8bc822e --- /dev/null +++ b/client/src/main/java/rt4/PerlinNoise.java @@ -0,0 +1,56 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class PerlinNoise { + @OriginalMember(owner = "client!fc", name = "a", descriptor = "(III)I") + public static int getTileHeight(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(36) int local36 = interpolatedNoise(4, arg1 + 45365, arg0 - -91923) + (interpolatedNoise(2, arg1 + 10294, arg0 + 37821) - 128 >> 1) + (interpolatedNoise(1, arg1, arg0) + -128 >> 2) - 128; + local36 = (int) ((double) local36 * 0.3D) + 35; + if (local36 < 10) { + local36 = 10; + } else if (local36 > 60) { + local36 = 60; + } + return local36; + } + + @OriginalMember(owner = "client!ja", name = "a", descriptor = "(IIII)I") + public static int interpolatedNoise(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(7) int local7 = arg1 / arg0; + @Pc(11) int local11 = arg2 / arg0; + @Pc(17) int local17 = arg2 & arg0 - 1; + @Pc(23) int local23 = arg0 - 1 & arg1; + @Pc(28) int local28 = smoothNoise(local7, local11); + @Pc(35) int local35 = smoothNoise(local7 + 1, local11); + @Pc(42) int local42 = smoothNoise(local7, local11 + 1); + @Pc(56) int local56 = smoothNoise(local7 + 1, local11 + 1); + @Pc(63) int local63 = interpolate(local28, local35, local23, arg0); + @Pc(70) int local70 = interpolate(local42, local56, local23, arg0); + return interpolate(local63, local70, local17, arg0); + } + + @OriginalMember(owner = "client!bn", name = "a", descriptor = "(IIB)I") + public static int smoothNoise(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(47) int local47 = noise(arg0 - 1, arg1 + -1) + noise(arg0 + 1, arg1 + -1) + noise(arg0 + -1, arg1 - -1) + noise(arg0 + 1, arg1 - -1); + @Pc(76) int local76 = noise(arg0 - 1, arg1) + noise(arg0 + 1, arg1) + noise(arg0, arg1 + -1) + noise(arg0, arg1 + 1); + @Pc(81) int local81 = noise(arg0, arg1); + return local76 / 8 + local47 / 16 + local81 / 4; + } + + @OriginalMember(owner = "client!nh", name = "a", descriptor = "(IIIII)I") + public static int interpolate(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3) { + @Pc(22) int local22 = 65536 - MathUtils.cos[arg2 * 1024 / arg3] >> 1; + return (arg0 * (65536 - local22) >> 16) + (arg1 * local22 >> 16); + } + + @OriginalMember(owner = "client!km", name = "b", descriptor = "(III)I") + public static int noise(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(14) int local14 = arg1 * 57 + arg0; + @Pc(20) int local20 = local14 ^ local14 << 13; + @Pc(34) int local34 = Integer.MAX_VALUE & (local20 * local20 * 15731 + 789221) * local20 + 1376312589; + return local34 >> 19 & 0xFF; + } +} diff --git a/client/src/main/java/rt4/PlainTile.java b/client/src/main/java/rt4/PlainTile.java new file mode 100644 index 0000000..6f58a9f --- /dev/null +++ b/client/src/main/java/rt4/PlainTile.java @@ -0,0 +1,41 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!rh") +public final class PlainTile { + + @OriginalMember(owner = "client!rh", name = "m", descriptor = "Z") + public boolean aBoolean241 = true; + + @OriginalMember(owner = "client!rh", name = "f", descriptor = "I") + public final int anInt4867; + + @OriginalMember(owner = "client!rh", name = "c", descriptor = "I") + public final int anInt4865; + + @OriginalMember(owner = "client!rh", name = "n", descriptor = "I") + public final int anInt4872; + + @OriginalMember(owner = "client!rh", name = "l", descriptor = "I") + public final int anInt4871; + + @OriginalMember(owner = "client!rh", name = "b", descriptor = "I") + public final int anInt4864; + + @OriginalMember(owner = "client!rh", name = "i", descriptor = "I") + public final int anInt4869; + + @OriginalMember(owner = "client!rh", name = "", descriptor = "(IIIIIIZ)V") + public PlainTile(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) boolean arg6) { + this.anInt4867 = arg1; + this.anInt4865 = arg2; + this.anInt4872 = arg0; + this.anInt4871 = arg5; + this.aBoolean241 = arg6; + this.anInt4864 = arg3; + this.anInt4869 = arg4; + } +} diff --git a/client/src/main/java/rt4/Player.java b/client/src/main/java/rt4/Player.java new file mode 100644 index 0000000..580cb4a --- /dev/null +++ b/client/src/main/java/rt4/Player.java @@ -0,0 +1,614 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!e") +public final class Player extends PathingEntity { + + @OriginalMember(owner = "client!mj", name = "d", descriptor = "[Lclient!na;") + public static final JagString[] options = new JagString[8]; + @OriginalMember(owner = "client!pg", name = "ab", descriptor = "[I") + public static final int[] cursors = new int[8]; + @OriginalMember(owner = "client!a", name = "f", descriptor = "[Z") + public static final boolean[] secondaryOptions = new boolean[8]; + @OriginalMember(owner = "client!pa", name = "P", descriptor = "Lclient!na;") + public static JagString password = JagString.EMPTY; + @OriginalMember(owner = "client!pa", name = "S", descriptor = "Lclient!na;") + public static JagString usernameInput = JagString.EMPTY; + @OriginalMember(owner = "client!ba", name = "w", descriptor = "I") + public static int inTutorialIsland = 0; + @OriginalMember(owner = "client!ee", name = "b", descriptor = "I") + public static int plane; + @OriginalMember(owner = "client!bb", name = "E", descriptor = "I") + public static int runEnergy = 0; + @OriginalMember(owner = "client!ug", name = "o", descriptor = "I") + public static int weight = 0; + @OriginalMember(owner = "client!jl", name = "H", descriptor = "I") + public static int worldId = -1; + @OriginalMember(owner = "client!em", name = "B", descriptor = "I") + public static int rebootTimer = 0; + @OriginalMember(owner = "client!hm", name = "gb", descriptor = "J") + public static long name37; + @OriginalMember(owner = "client!sm", name = "k", descriptor = "Lsignlink!im;") + public static PrivilegedRequest lastLogAddress; + @OriginalMember(owner = "client!ib", name = "l", descriptor = "I") + public static int anInt2863 = 0; + @OriginalMember(owner = "client!ea", name = "r", descriptor = "[[B") + public static byte[][] aByteArrayArray8; + @OriginalMember(owner = "client!e", name = "Bc", descriptor = "Lclient!hh;") + public PlayerAppearance appearance; + + @OriginalMember(owner = "client!e", name = "Mc", descriptor = "Lclient!na;") + public JagString username; + + @OriginalMember(owner = "client!e", name = "tc", descriptor = "I") + public int anInt1649 = -1; + + @OriginalMember(owner = "client!e", name = "wc", descriptor = "I") + private int anInt1651 = 0; + + @OriginalMember(owner = "client!e", name = "uc", descriptor = "I") + public int anInt1650 = 0; + + @OriginalMember(owner = "client!e", name = "yc", descriptor = "I") + public int combatLevel = 0; + + @OriginalMember(owner = "client!e", name = "Fc", descriptor = "I") + public int combatLevelWithSummoning = 0; + + @OriginalMember(owner = "client!e", name = "Cc", descriptor = "I") + public int anInt1654 = -1; + + @OriginalMember(owner = "client!e", name = "qc", descriptor = "I") + public int anInt1648 = -1; + + @OriginalMember(owner = "client!e", name = "Pc", descriptor = "I") + public int soundRadius = 0; + + @OriginalMember(owner = "client!e", name = "Hc", descriptor = "I") + public int anInt1658 = -1; + + @OriginalMember(owner = "client!e", name = "Sc", descriptor = "I") + public int combatRange = -1; + + @OriginalMember(owner = "client!e", name = "Oc", descriptor = "Z") + public boolean aBoolean98 = false; + + @OriginalMember(owner = "client!e", name = "Xc", descriptor = "I") + public int skill = 0; + + @OriginalMember(owner = "client!e", name = "Vc", descriptor = "I") + public int anInt1669 = -1; + + @OriginalMember(owner = "client!e", name = "Wc", descriptor = "I") + public int anInt1670 = -1; + + @OriginalMember(owner = "client!pa", name = "a", descriptor = "(IIILclient!e;)V") + public static void animate(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) Player arg2) { + if (arg1 == arg2.seqId && arg1 != -1) { + @Pc(89) SeqType local89 = SeqTypeList.get(arg1); + @Pc(92) int local92 = local89.exactmove; + if (local92 == 1) { + arg2.anInt3420 = arg0; + arg2.anInt3360 = 0; + arg2.anInt3373 = 1; + arg2.anInt3425 = 0; + arg2.anInt3371 = 0; + SoundPlayer.playSeqSound(arg2.zFine, local89, arg2.xFine, PlayerList.self == arg2, arg2.anInt3425); + } + if (local92 == 2) { + arg2.anInt3371 = 0; + } + } else if (arg1 == -1 || arg2.seqId == -1 || SeqTypeList.get(arg1).priority >= SeqTypeList.get(arg2.seqId).priority) { + arg2.anInt3373 = 1; + arg2.anInt3425 = 0; + arg2.anInt3420 = arg0; + arg2.anInt3405 = arg2.movementQueueSize; + arg2.anInt3371 = 0; + arg2.anInt3360 = 0; + arg2.seqId = arg1; + if (arg2.seqId != -1) { + SoundPlayer.playSeqSound(arg2.zFine, SeqTypeList.get(arg2.seqId), arg2.xFine, arg2 == PlayerList.self, arg2.anInt3425); + } + } + } + + @OriginalMember(owner = "client!ci", name = "a", descriptor = "([I[ILclient!e;B[I)V") + public static void method865(@OriginalArg(0) int[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) Player arg2, @OriginalArg(4) int[] arg3) { + for (@Pc(7) int local7 = 0; local7 < arg1.length; local7++) { + @Pc(20) int local20 = arg1[local7]; + @Pc(24) int local24 = arg3[local7]; + @Pc(28) int local28 = arg0[local7]; + @Pc(30) int local30 = 0; + while (local24 != 0 && local30 < arg2.aClass147Array3.length) { + if ((local24 & 0x1) != 0) { + if (local20 == -1) { + arg2.aClass147Array3[local30] = null; + } else { + @Pc(68) SeqType local68 = SeqTypeList.get(local20); + @Pc(71) int local71 = local68.exactmove; + @Pc(76) PathingEntity_Class147 local76 = arg2.aClass147Array3[local30]; + if (local76 != null) { + if (local20 == local76.anInt5396) { + if (local71 == 0) { + local76 = arg2.aClass147Array3[local30] = null; + } else if (local71 == 1) { + local76.anInt5400 = 0; + local76.anInt5398 = 1; + local76.anInt5399 = 0; + local76.anInt5408 = local28; + local76.anInt5404 = 0; + SoundPlayer.playSeqSound(arg2.zFine, local68, arg2.xFine, arg2 == PlayerList.self, 0); + } else if (local71 == 2) { + local76.anInt5400 = 0; + } + } else if (local68.priority >= SeqTypeList.get(local76.anInt5396).priority) { + local76 = arg2.aClass147Array3[local30] = null; + } + } + if (local76 == null) { + local76 = arg2.aClass147Array3[local30] = new PathingEntity_Class147(); + local76.anInt5396 = local20; + local76.anInt5398 = 1; + local76.anInt5404 = 0; + local76.anInt5408 = local28; + local76.anInt5399 = 0; + local76.anInt5400 = 0; + SoundPlayer.playSeqSound(arg2.zFine, local68, arg2.xFine, arg2 == PlayerList.self, 0); + } + } + } + local30++; + local24 >>>= 0x1; + } + } + } + + @OriginalMember(owner = "client!la", name = "a", descriptor = "(ILclient!e;)I") + public static int getSound(@OriginalArg(1) Player arg0) { + @Pc(14) int local14 = arg0.anInt1654; + @Pc(18) BasType local18 = arg0.getBasType(); + if (local18.idleAnimationId == arg0.movementSeqId) { + local14 = arg0.anInt1648; + } else if (local18.runAnimationId == arg0.movementSeqId || arg0.movementSeqId == local18.runFullTurnAnimationId || arg0.movementSeqId == local18.runCWTurnAnimationId || local18.runCCWTurnAnimationId == arg0.movementSeqId) { + local14 = arg0.anInt1670; + } else if (arg0.movementSeqId == local18.slowWalkAnimationId || arg0.movementSeqId == local18.slowWalkFullTurnAnimationId || arg0.movementSeqId == local18.slowWalkCWTurnAnimationId || arg0.movementSeqId == local18.slowWalkCCWTurnAnimationId) { + local14 = arg0.anInt1658; + } + return local14; + } + + @OriginalMember(owner = "client!um", name = "a", descriptor = "(Z)V") + public static void setTutorialIsland() { + inTutorialIsland = 0; + @Pc(17) int local17 = Camera.originX + (PlayerList.self.xFine >> 7); + @Pc(25) int local25 = (PlayerList.self.zFine >> 7) + Camera.originZ; + if (local17 >= 3053 && local17 <= 3156 && local25 >= 3056 && local25 <= 3136) { + inTutorialIsland = 1; + } + if (local17 >= 3072 && local17 <= 3118 && local25 >= 9492 && local25 <= 9535) { + inTutorialIsland = 1; + } + if (inTutorialIsland == 1 && local17 >= 3139 && local17 <= 3199 && local25 >= 3008 && local25 <= 3062) { + inTutorialIsland = 0; + } + } + + @OriginalMember(owner = "client!rg", name = "a", descriptor = "(Lclient!e;I)V") + public static void method4359(@OriginalArg(0) Player arg0) { + @Pc(12) AreaSound local12 = (AreaSound) AreaSoundManager.playerSounds.get(arg0.username.encode37()); + if (local12 == null) { + AreaSoundManager.add(arg0.movementQueueZ[0], null, 0, null, arg0.movementQueueX[0], plane, arg0); + } else { + local12.update(); + } + } + + @OriginalMember(owner = "client!bf", name = "c", descriptor = "(I)V") + public static void method501() { + if (!GlRenderer.enabled || LoginManager.aBoolean252) { + return; + } + @Pc(14) Tile[][][] local14 = SceneGraph.tiles; + for (@Pc(22) int local22 = 0; local22 < local14.length; local22++) { + @Pc(30) Tile[][] local30 = local14[local22]; + for (@Pc(32) int local32 = 0; local32 < local30.length; local32++) { + for (@Pc(42) int local42 = 0; local42 < local30[local32].length; local42++) { + @Pc(54) Tile local54 = local30[local32][local42]; + if (local54 != null) { + @Pc(71) GlModel local71; + if (local54.groundDecor != null && local54.groundDecor.entity instanceof GlModel) { + local71 = (GlModel) local54.groundDecor.entity; + if ((local54.groundDecor.key & Long.MIN_VALUE) == 0L) { + local71.method4111(false, true, true, false, true, true); + } else { + local71.method4111(true, true, true, true, true, true); + } + } + if (local54.wallDecor != null) { + if (local54.wallDecor.primary instanceof GlModel) { + local71 = (GlModel) local54.wallDecor.primary; + if ((local54.wallDecor.key & Long.MIN_VALUE) == 0L) { + local71.method4111(false, true, true, false, true, true); + } else { + local71.method4111(true, true, true, true, true, true); + } + } + if (local54.wallDecor.secondary instanceof GlModel) { + local71 = (GlModel) local54.wallDecor.secondary; + if ((Long.MIN_VALUE & local54.wallDecor.key) == 0L) { + local71.method4111(false, true, true, false, true, true); + } else { + local71.method4111(true, true, true, true, true, true); + } + } + } + if (local54.wall != null) { + if (local54.wall.primary instanceof GlModel) { + local71 = (GlModel) local54.wall.primary; + if ((local54.wall.key & Long.MIN_VALUE) == 0L) { + local71.method4111(false, true, true, false, true, true); + } else { + local71.method4111(true, true, true, true, true, true); + } + } + if (local54.wall.secondary instanceof GlModel) { + local71 = (GlModel) local54.wall.secondary; + if ((Long.MIN_VALUE & local54.wall.key) == 0L) { + local71.method4111(false, true, true, false, true, true); + } else { + local71.method4111(true, true, true, true, true, true); + } + } + } + for (@Pc(270) int local270 = 0; local270 < local54.sceneryLen; local270++) { + if (local54.scenery[local270].entity instanceof GlModel) { + @Pc(293) GlModel local293 = (GlModel) local54.scenery[local270].entity; + if ((Long.MIN_VALUE & local54.scenery[local270].key) == 0L) { + local293.method4111(false, true, true, false, true, true); + } else { + local293.method4111(true, true, true, true, true, true); + } + } + } + } + } + } + } + LoginManager.aBoolean252 = true; + } + + @OriginalMember(owner = "client!ja", name = "a", descriptor = "(IIIIB)V") + public static void method2310(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (Cross.type == 1) { + Sprites.crosses[Cross.milliseconds / 100].render(Cross.x - 8, Cross.y + -8); + } + if (Cross.type == 2) { + Sprites.crosses[Cross.milliseconds / 100 + 4].render(Cross.x - 8, Cross.y + -8); + } + setTutorialIsland(); + } + + @OriginalMember(owner = "client!e", name = "c", descriptor = "(B)I") + @Override + public final int getSize() { + return this.appearance == null || this.appearance.npcId == -1 ? super.getSize() : NpcTypeList.get(this.appearance.npcId).size; + } + + @OriginalMember(owner = "client!e", name = "b", descriptor = "(I)I") + @Override + public final int getBasId() { + return this.anInt3365; + } + + @OriginalMember(owner = "client!e", name = "a", descriptor = "(ILclient!wa;)V") + public final void decodeAppearance(@OriginalArg(1) Buffer arg0) { + arg0.offset = 0; + @Pc(20) int local20 = arg0.g1(); + @Pc(22) int local22 = -1; + @Pc(26) int local26 = local20 & 0x1; + @Pc(37) boolean showSkillLevel = (local20 & 0x4) != 0; + @Pc(41) int local41 = super.getSize(); + @Pc(44) int[] local44 = new int[12]; + this.setSize((local20 >> 3 & 0x7) + 1); + this.anInt1651 = local20 >> 6 & 0x3; + this.xFine += (this.getSize() - local41) * 64; + this.zFine += (this.getSize() - local41) * 64; + this.anInt1669 = arg0.g1b(); + this.anInt1649 = arg0.g1b(); + this.anInt1650 = 0; + @Pc(111) int local111; + @Pc(127) int local127; + @Pc(134) int local134; + @Pc(175) int local175; + for (@Pc(102) int local102 = 0; local102 < 12; local102++) { + local111 = arg0.g1(); + if (local111 == 0) { + local44[local102] = 0; + } else { + local127 = arg0.g1(); + local134 = (local111 << 8) + local127; + if (local102 == 0 && local134 == 65535) { + local22 = arg0.g2(); + this.anInt1650 = arg0.g1(); + break; + } + if (local134 >= 32768) { + local134 = Equipment.objIds[local134 - 32768]; + local44[local102] = local134 | 0x40000000; + local175 = ObjTypeList.get(local134).team; + if (local175 != 0) { + this.anInt1650 = local175; + } + } else { + local44[local102] = local134 - 256 | Integer.MIN_VALUE; + } + } + } + @Pc(197) int[] local197 = new int[5]; + for (local111 = 0; local111 < 5; local111++) { + local127 = arg0.g1(); + if (local127 < 0 || local127 >= PlayerAppearance.destinationBodyColors[local111].length) { + local127 = 0; + } + local197[local111] = local127; + } + this.anInt3365 = arg0.g2(); + @Pc(236) long local236 = arg0.g8(); + this.username = Base37.decode37(local236).toTitleCase(); + this.combatLevel = arg0.g1(); + if (showSkillLevel) { + this.skill = arg0.g2(); + this.combatLevelWithSummoning = this.combatLevel; + this.combatRange = -1; + } else { + this.skill = 0; + this.combatLevelWithSummoning = arg0.g1(); + this.combatRange = arg0.g1(); + if (this.combatRange == 255) { + this.combatRange = -1; + } + } + local134 = this.soundRadius; + this.soundRadius = arg0.g1(); + if (this.soundRadius == 0) { + AreaSoundManager.remove(this); + } else { + @Pc(309) int local309 = this.anInt1658; + @Pc(312) int local312 = this.anInt1654; + @Pc(315) int local315 = this.anInt1670; + local175 = this.anInt1648; + this.anInt1648 = arg0.g2(); + this.anInt1658 = arg0.g2(); + this.anInt1654 = arg0.g2(); + this.anInt1670 = arg0.g2(); + if (this.soundRadius != local134 || this.anInt1648 != local175 || this.anInt1658 != local309 || local312 != this.anInt1654 || this.anInt1670 != local315) { + method4359(this); + } + } + if (this.appearance == null) { + this.appearance = new PlayerAppearance(); + } + local175 = this.appearance.npcId; + this.appearance.set(local197, local22, local26 == 1, local44, this.anInt3365); + if (local175 != local22) { + this.xFine = this.movementQueueX[0] * 128 + this.getSize() * 64; + this.zFine = this.movementQueueZ[0] * 128 + this.getSize() * 64; + } + if (this.particleSystem != null) { + this.particleSystem.method1646(); + } + } + + @OriginalMember(owner = "client!e", name = "a", descriptor = "(IIIIIIIIJILclient!ga;)V") + @Override + public final void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) long arg8, @OriginalArg(9) int arg9, @OriginalArg(10) ParticleSystem arg10) { + if (this.appearance == null) { + return; + } + @Pc(25) SeqType local25 = this.seqId != -1 && this.anInt3420 == 0 ? SeqTypeList.get(this.seqId) : null; + @Pc(54) SeqType local54 = this.movementSeqId == -1 || this.aBoolean98 || this.movementSeqId == this.getBasType().idleAnimationId && local25 != null ? null : SeqTypeList.get(this.movementSeqId); + @Pc(76) Model local76 = this.appearance.method1954(this.aClass147Array3, this.anInt3373, local54, local25, this.anInt3396, this.anInt3388, this.anInt3360, this.anInt3425, this.anInt3407); + @Pc(79) int local79 = PlayerAppearance.getModelCacheSize(); + if (GlRenderer.enabled && GameShell.maxMemory < 96 && local79 > 50) { + method501(); + } + @Pc(102) int local102; + if (client.modeWhat != 0 && local79 < 50) { + local102 = 50 - local79; + while (anInt2863 < local102) { + aByteArrayArray8[anInt2863] = new byte[102400]; + anInt2863++; + } + while (anInt2863 > local102) { + anInt2863--; + aByteArrayArray8[anInt2863] = null; + } + } + if (local76 == null) { + return; + } + this.minY = local76.getMinY(); + @Pc(184) Model local184; + if (Preferences.characterShadowsOn && (this.appearance.npcId == -1 || NpcTypeList.get(this.appearance.npcId).hasshadow)) { + local184 = ShadowModelList.method1043(160, this.aBoolean171, local54 == null ? local25 : local54, this.xFine, 0, this.zFine, 0, 1, local76, arg0, local54 == null ? this.anInt3425 : this.anInt3407, this.anInt3424, 240); + if (GlRenderer.enabled) { + @Pc(188) float local188 = GlRenderer.method4179(); + @Pc(190) float local190 = GlRenderer.method4166(); + GlRenderer.disableDepthMask(); + GlRenderer.method4152(local188, local190 - 150.0F); + local184.render(0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, -1L, arg9, null); + GlRenderer.enableDepthMask(); + GlRenderer.method4152(local188, local190); + } else { + local184.render(0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, -1L, arg9, null); + } + } + if (PlayerList.self == this) { + for (local102 = MiniMap.hintMapMarkers.length - 1; local102 >= 0; local102--) { + @Pc(245) MapMarker local245 = MiniMap.hintMapMarkers[local102]; + if (local245 != null && local245.playerModelId != -1) { + @Pc(291) int local291; + @Pc(302) int local302; + if (local245.type == 1 && local245.actorTargetId >= 0 && NpcList.npcs.length > local245.actorTargetId) { + @Pc(278) Npc local278 = NpcList.npcs[local245.actorTargetId]; + if (local278 != null) { + local291 = local278.xFine / 32 - PlayerList.self.xFine / 32; + local302 = local278.zFine / 32 - PlayerList.self.zFine / 32; + this.method1263(null, local302, local76, local291, arg5, arg9, arg0, arg7, arg4, arg3, arg1, local245.playerModelId, arg2, arg6); + } + } + if (local245.type == 2) { + @Pc(340) int local340 = (local245.targetX - Camera.originX) * 4 + 2 - PlayerList.self.xFine / 32; + local291 = (local245.anInt4046 - Camera.originZ) * 4 + 2 - PlayerList.self.zFine / 32; + this.method1263(null, local291, local76, local340, arg5, arg9, arg0, arg7, arg4, arg3, arg1, local245.playerModelId, arg2, arg6); + } + if (local245.type == 10 && local245.actorTargetId >= 0 && PlayerList.players.length > local245.actorTargetId) { + @Pc(395) Player local395 = PlayerList.players[local245.actorTargetId]; + if (local395 != null) { + local291 = local395.xFine / 32 - PlayerList.self.xFine / 32; + local302 = local395.zFine / 32 - PlayerList.self.zFine / 32; + this.method1263(null, local302, local76, local291, arg5, arg9, arg0, arg7, arg4, arg3, arg1, local245.playerModelId, arg2, arg6); + } + } + } + } + } + this.method2687(local76); + this.method2685(local76, arg0); + local184 = null; + if (!this.aBoolean98 && this.spotAnimId != -1 && this.anInt3399 != -1) { + @Pc(471) SpotAnimType local471 = SpotAnimTypeList.get(this.spotAnimId); + local184 = local471.constructModel(this.anInt3418, this.anInt3399, this.anInt3361); + if (local184 != null) { + local184.translate(0, -this.spotAnimY, 0); + if (local471.aBoolean100) { + if (PathingEntity.anInt2640 != 0) { + local184.rotateX(PathingEntity.anInt2640); + } + if (PathingEntity.anInt2680 != 0) { + local184.rotateZ(PathingEntity.anInt2680); + } + if (PathingEntity.anInt1938 != 0) { + local184.translate(0, PathingEntity.anInt1938, 0); + } + } + } + } + @Pc(515) Model local515 = null; + if (!this.aBoolean98 && this.attachment != null) { + if (client.loop >= this.attachmentResetAt) { + this.attachment = null; + } + if (this.attachmentSetAt <= client.loop && this.attachmentResetAt > client.loop) { + if (this.attachment instanceof Loc) { + local515 = (Model) ((Loc) this.attachment).method1049(); + } else { + local515 = (Model) this.attachment; + } + local515.translate(this.attachmentXFine - this.xFine, this.attachmentY + -this.anInt3424, this.attachmentZFine - this.zFine); + if (this.anInt3400 == 512) { + local515.method4578(); + } else if (this.anInt3400 == 1024) { + local515.method4552(); + } else if (this.anInt3400 == 1536) { + local515.rotateCounterClockwise(); + } + } + } + if (GlRenderer.enabled) { + local76.pickable = true; + local76.render(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, this.particleSystem); + if (local184 != null) { + local184.pickable = true; + local184.render(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, this.particleSystem); + } + } else { + if (local184 != null) { + local76 = ((SoftwareModel) local76).method4588(local184); + } + if (local515 != null) { + local76 = ((SoftwareModel) local76).method4588(local515); + } + local76.pickable = true; + local76.render(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, this.particleSystem); + } + if (local515 == null) { + return; + } + if (this.anInt3400 == 512) { + local515.rotateCounterClockwise(); + } else if (this.anInt3400 == 1024) { + local515.method4552(); + } else if (this.anInt3400 == 1536) { + local515.method4578(); + } + local515.translate(this.xFine - this.attachmentXFine, -this.attachmentY + this.anInt3424, this.zFine - this.attachmentZFine); + } + + @OriginalMember(owner = "client!e", name = "a", descriptor = "(Lclient!ga;ILclient!ak;IIIIIIIIIIII)V") + private void method1263(@OriginalArg(0) ParticleSystem arg0, @OriginalArg(1) int arg1, @OriginalArg(2) Model arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8, @OriginalArg(10) int arg9, @OriginalArg(11) int arg10, @OriginalArg(12) int arg11, @OriginalArg(13) int arg12, @OriginalArg(14) int arg13) { + @Pc(12) int local12 = arg3 * arg3 + arg1 * arg1; + if (local12 < 16 || local12 > 360000) { + return; + } + @Pc(34) int local34 = (int) (Math.atan2(arg3, arg1) * 325.949D) & 0x7FF; + @Pc(46) Model local46 = HintArrowManager.getModel(local34, this.zFine, arg11, this.xFine, arg2, this.anInt3424); + if (local46 == null) { + return; + } + if (!GlRenderer.enabled) { + local46.render(0, arg10, arg12, arg9, arg8, arg4, arg13, arg7, -1L, arg5, arg0); + return; + } + @Pc(52) float local52 = GlRenderer.method4179(); + @Pc(54) float local54 = GlRenderer.method4166(); + GlRenderer.disableDepthMask(); + GlRenderer.method4152(local52, local54 - 150.0F); + local46.render(0, arg10, arg12, arg9, arg8, arg4, arg13, arg7, -1L, arg5, arg0); + GlRenderer.enableDepthMask(); + GlRenderer.method4152(local52, local54); + } + + @OriginalMember(owner = "client!e", name = "a", descriptor = "(B)Z") + @Override + public final boolean isVisible() { + return this.appearance != null; + } + + @OriginalMember(owner = "client!e", name = "e", descriptor = "(I)Lclient!na;") + public final JagString getName() { + @Pc(2) JagString local2 = this.username; + if (PlayerList.playerNames != null) { + local2 = JagString.concatenate(new JagString[]{PlayerList.playerNames[this.anInt1651], local2}); + } + if (PlayerList.playerNames2 != null) { + local2 = JagString.concatenate(new JagString[]{local2, PlayerList.playerNames2[this.anInt1651]}); + } + return local2; + } + + @OriginalMember(owner = "client!e", name = "a", descriptor = "(IIIII)V") + @Override + public final void method4545(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + } + + @OriginalMember(owner = "client!e", name = "a", descriptor = "(BIZI)V") + public final void teleport(@OriginalArg(1) int arg0, @OriginalArg(2) boolean arg1, @OriginalArg(3) int arg2) { + super.method2683(this.getSize(), arg0, arg2, arg1); + } + + @OriginalMember(owner = "client!e", name = "finalize", descriptor = "()V") + @Override + public final void finalize() { + } + + @OriginalMember(owner = "client!e", name = "b", descriptor = "()I") + @Override + public final int getMinY() { + return this.minY; + } +} diff --git a/client/src/main/java/rt4/PlayerAppearance.java b/client/src/main/java/rt4/PlayerAppearance.java new file mode 100644 index 0000000..01b9a0c --- /dev/null +++ b/client/src/main/java/rt4/PlayerAppearance.java @@ -0,0 +1,594 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!hh") +public final class PlayerAppearance { + + @OriginalMember(owner = "client!md", name = "V", descriptor = "[[S") + public static final short[][] GAME0_DESTINATION_BODY_COLORS = new short[][]{{6798, 107, 10283, 16, 4797, 7744, 5799, 4634, -31839, 22433, 2983, -11343, 8, 5281, 10438, 3650, -27322, -21845, 200, 571, 908, 21830, 28946, -15701, -14010}, {8741, 12, -1506, -22374, 7735, 8404, 1701, -27106, 24094, 10153, -8915, 4783, 1341, 16578, -30533, 25239, 8, 5281, 10438, 3650, -27322, -21845, 200, 571, 908, 21830, 28946, -15701, -14010}, {25238, 8742, 12, -1506, -22374, 7735, 8404, 1701, -27106, 24094, 10153, -8915, 4783, 1341, 16578, -30533, 8, 5281, 10438, 3650, -27322, -21845, 200, 571, 908, 21830, 28946, -15701, -14010}, {4626, 11146, 6439, 12, 4758, 10270}, {4550, 4537, 5681, 5673, 5790, 6806, 8076, 4574}}; + + @OriginalMember(owner = "client!dg", name = "c", descriptor = "[[S") + public static final short[][] GAME0_DESTINATION_SKIN_COLORS = new short[][]{{6554, 115, 10304, 28, 5702, 7756, 5681, 4510, -31835, 22437, 2859, -11339, 16, 5157, 10446, 3658, -27314, -21965, 472, 580, 784, 21966, 28950, -15697, -14002}, {9104, 10275, 7595, 3610, 7975, 8526, 918, -26734, 24466, 10145, -6882, 5027, 1457, 16565, -30545, 25486, 24, 5392, 10429, 3673, -27335, -21957, 192, 687, 412, 21821, 28835, -15460, -14019}, new short[0], new short[0], new short[0]}; + + @OriginalMember(owner = "client!pk", name = "V", descriptor = "[S") + public static final short[] GAME0_SOURCE_SKIN_COLORS = new short[]{-10304, 9104, -1, -1, -1}; + + @OriginalMember(owner = "client!vd", name = "B", descriptor = "[S") + public static final short[] GAME0_SOURCE_BODY_COLORS = new short[]{6798, 8741, 25238, 4626, 4550}; + + @OriginalMember(owner = "client!bj", name = "t", descriptor = "[S") + public static final short[] GAME1_SOURCE_SKIN_COLORS = new short[]{-4160, -4163, -8256, -8259, 22461}; + + @OriginalMember(owner = "client!aa", name = "h", descriptor = "[S") + public static final short[] GAME1_SOURCE_BODY_COLORS = new short[]{960, 957, -21568, -21571, 22464}; + + @OriginalMember(owner = "client!ci", name = "u", descriptor = "[[S") + public static final short[][] GAME1_DESTINATION_SKIN_COLORS = new short[][]{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 24, 44, 64, 84, 104, 304, 678, 698, 550, 934, 954, 6448, 6946, 6966, 2352, 2726, 2746, 10544, 10918, 10938, 10304, 10550, 10570, 14640, 15014, 15034, 19760, 20134, 20154, -29392, -29018, -28998, 31024, 31270, 31290, -24272, -23898, -23878, -19152, -18778, -18758, -14032, -13658, -13638, -6864, -6490, -6470, 516, 536, 6788, 6808, 11012, 11032, 14980, 15000, 21124, 21144, -28924, -28904, -22012, -21992, -12924, -12904}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10339, 10574, 10425, 10398, 10345, 7512, 8507, 7378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 24, 44, 64, 84, 104, 304, 678, 698, 550, 934, 954, 6448, 6946, 6966, 2352, 2726, 2746, 10544, 10918, 10938, 10304, 10550, 10570, 14640, 15014, 15034, 19760, 20134, 20154, -29392, -29018, -28998, 31024, 31270, 31290, -24272, -23898, -23878, -19152, -18778, -18758, -14032, -13658, -13638, -6864, -6490, -6470, 516, 536, 6788, 6808, 11012, 11032, 14980, 15000, 21124, 21144, -28924, -28904, -22012, -21992, -12924, -12904}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13753, 13737, 13719, 13883, 13863, 13974, 19643, 18601, 16532, 23993, 25121, 24980, 26944, 26921, 24854, 27191, 27171, 26130, 26941, 28696, 30100, 12477, 10407, 10388, 10685, 10665, 10646, 6711, 6693, 6674, 6965, 7073, 7056, 2361, 4387, 3346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 24, 44, 64, 84, 104, 304, 678, 698, 550, 934, 954, 6448, 6946, 6966, 2352, 2726, 2746, 10544, 10918, 10938, 10304, 10550, 10570, 14640, 15014, 15034, 19760, 20134, 20154, -29392, -29018, -28998, 31024, 31270, 31290, -24272, -23898, -23878, -19152, -18778, -18758, -14032, -13658, -13638, -6864, -6490, -6470, 516, 536, 6788, 6808, 11012, 11032, 14980, 15000, 21124, 21144, -28924, -28904, -22012, -21992, -12924, -12904}}; + + @OriginalMember(owner = "client!q", name = "d", descriptor = "[[S") + public static final short[][] GAME1_DESTINATION_BODY_COLORS = new short[][]{{10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898}, {10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10347, 10582, 10429, 10407, 10359, 8414, 9540, 10456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898}, {4300, 3294, 3303, 3264, 4506, 4382, 4387, 5293, 7622, 7384, 8412, 7496, 86, 123, 111, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 13766, 13745, 13726, 13890, 13743, 13852, 17602, 18605, 21660, 24000, 24997, 24088, 27972, 25903, 26904, 27193, 27175, 27156, 30020, 28975, 29976, 12482, 13485, 10392, 10692, 10669, 10776, 6717, 6695, 7830, 6971, 6951, 5910, 3389, 3369, 3356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898, 10, 30, 50, 70, 90, 110, 310, 684, 704, 556, 940, 960, 6454, 6952, 6972, 2358, 2732, 2752, 10550, 10924, 10944, 10310, 10556, 10576, 14646, 15020, 15040, 19766, 20140, 20160, -29386, -29012, -28992, 31030, 31276, 31296, -24266, -23892, -23872, -19146, -18772, -18752, -14026, -13652, -13632, -6858, -6484, -6464, 522, 542, 6794, 6814, 11018, 11038, 14986, 15006, 21130, 21150, -28918, -28898, -22006, -21986, -12918, -12898}}; + + @OriginalMember(owner = "client!wd", name = "d", descriptor = "[I") + public static final int[] BASE_PART_MAP = new int[]{8, 11, 4, 6, 9, 7, 10, 0}; + + @OriginalMember(owner = "client!r", name = "b", descriptor = "[Lclient!tk;") + public static final SeqType[] aClass144Array2 = new SeqType[14]; + + @OriginalMember(owner = "client!ri", name = "b", descriptor = "[I") + public static final int[] anIntArray187 = new int[14]; + + @OriginalMember(owner = "client!uf", name = "j", descriptor = "Lclient!n;") + public static final SoftLruHashTable bodyModels = new SoftLruHashTable(260); + + @OriginalMember(owner = "client!l", name = "b", descriptor = "Lclient!n;") + public static final SoftLruHashTable headModels = new SoftLruHashTable(5); + + @OriginalMember(owner = "client!qi", name = "x", descriptor = "[I") + public static final int[] MALE_FEATURES = new int[]{0, 1, 2, 3, 4, 5, 6, 14}; + + @OriginalMember(owner = "client!kh", name = "g", descriptor = "Lclient!hh;") + public static final PlayerAppearance DEFAULT = new PlayerAppearance(); + + @OriginalMember(owner = "client!mc", name = "ab", descriptor = "[I") + public static final int[] FEMALE_FEATURES = new int[]{7, 8, 9, 10, 11, 12, 13, 15}; + + @OriginalMember(owner = "client!wh", name = "j", descriptor = "[Lclient!cl;") + public static final AnimFrameset[] aClass3_Sub2_Sub7Array8 = new AnimFrameset[14]; + + @OriginalMember(owner = "client!vf", name = "g", descriptor = "[I") + public static final int[] anIntArray515 = new int[14]; + + @OriginalMember(owner = "client!kf", name = "d", descriptor = "[Lclient!cl;") + public static final AnimFrameset[] aClass3_Sub2_Sub7Array7 = new AnimFrameset[14]; + + @OriginalMember(owner = "client!fm", name = "fb", descriptor = "[I") + public static final int[] anIntArray183 = new int[14]; + @OriginalMember(owner = "client!th", name = "i", descriptor = "[I") + public static final int[] anIntArray520 = new int[14]; + + @OriginalMember(owner = "client!cj", name = "e", descriptor = "[[S") + public static short[][] destinationBodyColors; + + @OriginalMember(owner = "client!nj", name = "m", descriptor = "[[S") + public static short[][] destinationSkinColors; + + @OriginalMember(owner = "client!qe", name = "r", descriptor = "[S") + public static short[] aShortArray65; + + @OriginalMember(owner = "client!mj", name = "C", descriptor = "[S") + public static short[] aShortArray41; + + @OriginalMember(owner = "client!hh", name = "e", descriptor = "I") + public int npcId; + + @OriginalMember(owner = "client!hh", name = "i", descriptor = "J") + private long prevChecksum; + + @OriginalMember(owner = "client!hh", name = "l", descriptor = "[I") + private int[] identikit; + + @OriginalMember(owner = "client!hh", name = "m", descriptor = "I") + private int basId; + + @OriginalMember(owner = "client!hh", name = "q", descriptor = "J") + private long checksum; + + @OriginalMember(owner = "client!hh", name = "t", descriptor = "[I") + private int[] colors; + + @OriginalMember(owner = "client!hh", name = "w", descriptor = "[[I") + private int[][] anIntArrayArray19; + + @OriginalMember(owner = "client!hh", name = "x", descriptor = "Z") + public boolean gender; + + @OriginalMember(owner = "client!wk", name = "b", descriptor = "(II)V") + public static void clean() { + bodyModels.clean(5); + headModels.clean(5); + } + + @OriginalMember(owner = "client!ph", name = "b", descriptor = "(B)V") + public static void removeSoft() { + bodyModels.removeSoft(); + headModels.removeSoft(); + } + + @OriginalMember(owner = "client!sj", name = "c", descriptor = "(I)V") + public static void clear() { + bodyModels.clear(); + headModels.clear(); + } + + @OriginalMember(owner = "client!q", name = "a", descriptor = "(B)I") + public static int getModelCacheSize() { + return bodyModels.size(); + } + + @OriginalMember(owner = "client!hh", name = "a", descriptor = "(IIIILclient!tk;III)Lclient!ak;") + public final Model method1946(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) SeqType arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6) { + @Pc(24) long local24 = (long) arg2 | ((long) arg6 << 16) | (long) arg1 << 32; + @Pc(30) Model local30 = (Model) headModels.get(local24); + if (local30 == null) { + @Pc(36) RawModel[] local36 = new RawModel[3]; + @Pc(38) int local38 = 0; + if (!IdkTypeList.get(arg2).isHeadModelReady() || !IdkTypeList.get(arg6).isHeadModelReady() || !IdkTypeList.get(arg1).isHeadModelReady()) { + return null; + } + @Pc(66) RawModel local66 = IdkTypeList.get(arg2).getHeadModel(); + if (local66 != null) { + local38++; + local36[0] = local66; + } + local66 = IdkTypeList.get(arg6).getHeadModel(); + if (local66 != null) { + local36[local38++] = local66; + } + local66 = IdkTypeList.get(arg1).getHeadModel(); + if (local66 != null) { + local36[local38++] = local66; + } + local66 = new RawModel(local36, local38); + for (@Pc(110) int local110 = 0; local110 < 5; local110++) { + if (this.colors[local110] < destinationBodyColors[local110].length) { + local66.recolor(aShortArray65[local110], destinationBodyColors[local110][this.colors[local110]]); + } + if (destinationSkinColors[local110].length > this.colors[local110]) { + local66.recolor(aShortArray41[local110], destinationSkinColors[local110][this.colors[local110]]); + } + } + local30 = local66.createModel(64, 768, -50, -10, -50); + headModels.put(local30, local24); + } + if (arg4 != null) { + local30 = arg4.method4215(local30, arg0, arg3, arg5); + } + return local30; + } + + @OriginalMember(owner = "client!hh", name = "a", descriptor = "(I)V") + private void updateChecksum() { + @Pc(8) long previousChecksum = this.checksum; + this.checksum = -1L; + @Pc(13) long[] CRC64_TABLE = Buffer.CRC64_TABLE; + this.checksum = CRC64_TABLE[(int) (((long) (this.basId >> 8) ^ this.checksum) & 0xFFL)] ^ this.checksum >>> 8; + this.checksum = CRC64_TABLE[(int) ((this.checksum ^ (long) this.basId) & 0xFFL)] ^ this.checksum >>> 8; + for (int body = 0; body < 12; body++) { + this.checksum = this.checksum >>> 8 ^ CRC64_TABLE[(int) ((this.checksum ^ (long) (this.identikit[body] >> 24)) & 0xFFL)]; + this.checksum = this.checksum >>> 8 ^ CRC64_TABLE[(int) ((this.checksum ^ (long) (this.identikit[body] >> 16)) & 0xFFL)]; + this.checksum = CRC64_TABLE[(int) (((long) (this.identikit[body] >> 8) ^ this.checksum) & 0xFFL)] ^ this.checksum >>> 8; + this.checksum = this.checksum >>> 8 ^ CRC64_TABLE[(int) ((this.checksum ^ (long) this.identikit[body]) & 0xFFL)]; + } + for (int color = 0; color < 5; color++) { + this.checksum = CRC64_TABLE[(int) (((long) this.colors[color] ^ this.checksum) & 0xFFL)] ^ this.checksum >>> 8; + } + this.checksum = CRC64_TABLE[(int) (((long) (this.gender ? 1 : 0) ^ this.checksum) & 0xFFL)] ^ this.checksum >>> 8; + if (previousChecksum != 0L && this.checksum != previousChecksum) { + bodyModels.remove(previousChecksum); + } + } + + @OriginalMember(owner = "client!hh", name = "a", descriptor = "(ZZ)V") + public final void setGender(@OriginalArg(0) boolean female) { + this.gender = female; + this.updateChecksum(); + } + + @OriginalMember(owner = "client!hh", name = "a", descriptor = "([IIZI[II)V") + public final void set(@OriginalArg(0) int[] colors, @OriginalArg(1) int npcId, @OriginalArg(2) boolean female, @OriginalArg(4) int[] identikit, @OriginalArg(5) int arg4) { + if (arg4 != this.basId) { + this.basId = arg4; + this.anIntArrayArray19 = null; + } + if (identikit == null) { + identikit = new int[12]; + for (@Pc(24) int i = 0; i < 8; i++) { + for (@Pc(31) int id = 0; id < IdkTypeList.count; id++) { + @Pc(38) IdkType type = IdkTypeList.get(id); + if (type != null && !type.disable && type.feature == (female ? FEMALE_FEATURES[i] : MALE_FEATURES[i])) { + identikit[BASE_PART_MAP[i]] = Integer.MIN_VALUE | id; + break; + } + } + } + } + this.npcId = npcId; + this.gender = female; + this.colors = colors; + this.identikit = identikit; + this.updateChecksum(); + } + + @OriginalMember(owner = "client!hh", name = "a", descriptor = "(IZI)V") + public final void setColor(@OriginalArg(0) int i, @OriginalArg(2) int color) { + this.colors[i] = color; + this.updateChecksum(); + } + + @OriginalMember(owner = "client!hh", name = "b", descriptor = "(I)I") + public final int method1952() { + return this.npcId == -1 ? (this.identikit[8] << 10) + ((this.colors[0] << 25) + (this.colors[4] << 20)) + (this.identikit[0] << 15) + (this.identikit[11] << 5) + this.identikit[1] : NpcTypeList.get(this.npcId).id + 305419896; + } + + @OriginalMember(owner = "client!hh", name = "a", descriptor = "(III)V") + public final void setIdentikit(@OriginalArg(0) int arg0, @OriginalArg(1) int identikit) { + @Pc(7) int part = BASE_PART_MAP[arg0]; + if (0 != this.identikit[part] && IdkTypeList.get(identikit) != null) { + this.identikit[part] = identikit | Integer.MIN_VALUE; + this.updateChecksum(); + } + } + + @OriginalMember(owner = "client!hh", name = "a", descriptor = "([Lclient!ub;ILclient!tk;Lclient!tk;IIIIZII)Lclient!ak;") + public final Model method1954(@OriginalArg(0) PathingEntity_Class147[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) SeqType arg2, @OriginalArg(3) SeqType arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(7) int arg6, @OriginalArg(9) int arg7, @OriginalArg(10) int arg8) { + if (this.npcId != -1) { + return NpcTypeList.get(this.npcId).getBodyModel(arg0, arg5, arg8, arg1, arg6, arg7, arg2, arg4, arg3); + } + @Pc(38) int[] local38 = this.identikit; + @Pc(41) long local41 = this.checksum; + if (arg3 != null && (arg3.mainhand >= 0 || arg3.offhand >= 0)) { + local38 = new int[12]; + for (@Pc(61) int local61 = 0; local61 < 12; local61++) { + local38[local61] = this.identikit[local61]; + } + if (arg3.mainhand >= 0) { + if (arg3.mainhand == 65535) { + local41 ^= 0xFFFFFFFF00000000L; + local38[5] = 0; + } else { + local38[5] = arg3.mainhand | 0x40000000; + local41 ^= (long) local38[5] << 32; + } + } + if (arg3.offhand >= 0) { + if (arg3.offhand == 65535) { + local38[3] = 0; + local41 ^= 0xFFFFFFFFL; + } else { + local38[3] = arg3.offhand | 0x40000000; + local41 ^= local38[3]; + } + } + } + @Pc(154) Model local154 = (Model) bodyModels.get(local41); + @Pc(158) boolean local158; + @Pc(353) int local353; + @Pc(360) int local360; + @Pc(374) int local374; + @Pc(367) int local367; + @Pc(381) int local381; + @Pc(451) int local451; + @Pc(457) int local457; + @Pc(475) int local475; + @Pc(481) int local481; + @Pc(598) int local598; + @Pc(346) int local346; + if (local154 == null) { + local158 = false; + @Pc(169) int local169; + for (@Pc(160) int local160 = 0; local160 < 12; local160++) { + local169 = local38[local160]; + if ((local169 & 0x40000000) == 0) { + if ((local169 & Integer.MIN_VALUE) != 0 && !IdkTypeList.get(local169 & 0x3FFFFFFF).isBodyModelReady()) { + local158 = true; + } + } else if (!ObjTypeList.get(local169 & 0x3FFFFFFF).isWearModelReady(this.gender)) { + local158 = true; + } + } + if (local158) { + if (this.prevChecksum != -1L) { + local154 = (Model) bodyModels.get(this.prevChecksum); + } + if (local154 == null) { + return null; + } + } + if (local154 == null) { + @Pc(239) RawModel[] local239 = new RawModel[12]; + @Pc(250) int local250; + for (local169 = 0; local169 < 12; local169++) { + local250 = local38[local169]; + @Pc(272) RawModel local272; + if ((local250 & 0x40000000) != 0) { + local272 = ObjTypeList.get(local250 & 0x3FFFFFFF).getBodyModel(this.gender); + if (local272 != null) { + local239[local169] = local272; + } + } else if ((Integer.MIN_VALUE & local250) != 0) { + local272 = IdkTypeList.get(local250 & 0x3FFFFFFF).getBodyModel(); + if (local272 != null) { + local239[local169] = local272; + } + } + } + @Pc(303) BasType local303 = null; + if (this.basId != -1) { + local303 = BasTypeList.get(this.basId); + } + if (local303 != null && local303.modelRotateTranslate != null) { + for (local250 = 0; local250 < local303.modelRotateTranslate.length; local250++) { + if (local303.modelRotateTranslate[local250] != null && local239[local250] != null) { + local346 = local303.modelRotateTranslate[local250][0]; + local353 = local303.modelRotateTranslate[local250][1]; + local360 = local303.modelRotateTranslate[local250][2]; + local367 = local303.modelRotateTranslate[local250][4]; + local374 = local303.modelRotateTranslate[local250][3]; + local381 = local303.modelRotateTranslate[local250][5]; + if (this.anIntArrayArray19 == null) { + this.anIntArrayArray19 = new int[local303.modelRotateTranslate.length][]; + } + if (this.anIntArrayArray19[local250] == null) { + @Pc(404) int[] local404 = this.anIntArrayArray19[local250] = new int[15]; + if (local374 == 0 && local367 == 0 && local381 == 0) { + local404[12] = -local346; + local404[13] = -local353; + local404[0] = local404[4] = local404[8] = 32768; + local404[14] = -local360; + } else { + local451 = MathUtils.cos[local374] >> 1; + local457 = MathUtils.sin[local374] >> 1; + @Pc(463) int local463 = MathUtils.cos[local367] >> 1; + @Pc(469) int local469 = MathUtils.sin[local367] >> 1; + local475 = MathUtils.cos[local381] >> 1; + local481 = MathUtils.sin[local381] >> 1; + local404[4] = local451 * local475 + 16384 >> 15; + local404[5] = -local457; + local404[3] = local481 * local451 + 16384 >> 15; + local404[2] = local451 * local469 + 16384 >> 15; + local404[8] = local463 * local451 + 16384 >> 15; + @Pc(534) int local534 = local481 * local457 + 16384 >> 15; + local404[0] = local469 * local534 + local475 * local463 + 16384 >> 15; + local404[14] = local404[8] * -local360 + -local353 * local404[5] + local404[2] * -local346 + 16384 >> 15; + local404[6] = local463 * local534 + local475 * -local469 + 16384 >> 15; + local598 = local475 * local457 + 16384 >> 15; + local404[7] = -local481 * -local469 + local598 * local463 + 16384 >> 15; + local404[1] = local469 * local598 + local463 * -local481 + 16384 >> 15; + local404[12] = -local353 * local404[3] + local404[0] * -local346 + -local360 * local404[6] + 16384 >> 15; + local404[13] = -local353 * local404[4] + local404[1] * -local346 + -local360 * local404[7] + 16384 >> 15; + } + local404[9] = local346; + local404[11] = local360; + local404[10] = local353; + } + if (local374 != 0 || local367 != 0 || local381 != 0) { + local239[local250].method1684(local374, local367, local381); + } + if (local346 != 0 || local353 != 0 || local360 != 0) { + local239[local250].translate(local346, local353, local360); + } + } + } + } + @Pc(740) RawModel local740 = new RawModel(local239, local239.length); + for (local346 = 0; local346 < 5; local346++) { + if (destinationBodyColors[local346].length > this.colors[local346]) { + local740.recolor(aShortArray65[local346], destinationBodyColors[local346][this.colors[local346]]); + } + if (destinationSkinColors[local346].length > this.colors[local346]) { + local740.recolor(aShortArray41[local346], destinationSkinColors[local346][this.colors[local346]]); + } + } + local154 = local740.createModel(64, 850, -30, -50, -30); + if (GlRenderer.enabled) { + ((GlModel) local154).method4111(false, false, true, false, false, true); + } + bodyModels.put(local154, local41); + this.prevChecksum = local41; + } + } + local158 = false; + @Pc(827) boolean local827 = false; + local346 = arg0 == null ? 0 : arg0.length; + @Pc(836) boolean local836 = false; + @Pc(838) boolean local838 = false; + @Pc(979) int local979; + for (local353 = 0; local353 < local346; local353++) { + if (arg0[local353] != null) { + @Pc(858) SeqType local858 = SeqTypeList.get(arg0[local353].anInt5396); + if (local858.frames != null) { + local158 = true; + aClass144Array2[local353] = local858; + local374 = arg0[local353].anInt5399; + local367 = arg0[local353].anInt5398; + local381 = local858.frames[local374]; + aClass3_Sub2_Sub7Array8[local353] = SeqTypeList.getAnimFrameset(local381 >>> 16); + local381 &= 0xFFFF; + anIntArray520[local353] = local381; + if (aClass3_Sub2_Sub7Array8[local353] != null) { + local836 |= aClass3_Sub2_Sub7Array8[local353].isColorTransformed(local381); + local827 |= aClass3_Sub2_Sub7Array8[local353].isAlphaTransformed(local381); + local838 |= local858.aBoolean278; + } + if ((local858.tween || SeqType.applyTweening) && local367 != -1 && local367 < local858.frames.length) { + anIntArray515[local353] = local858.frameDelay[local374]; + anIntArray183[local353] = arg0[local353].anInt5404; + local979 = local858.frames[local367]; + aClass3_Sub2_Sub7Array7[local353] = SeqTypeList.getAnimFrameset(local979 >>> 16); + @Pc(991) int local991 = local979 & 0xFFFF; + anIntArray187[local353] = local991; + if (aClass3_Sub2_Sub7Array7[local353] != null) { + local836 |= aClass3_Sub2_Sub7Array7[local353].isColorTransformed(local991); + local827 |= aClass3_Sub2_Sub7Array7[local353].isAlphaTransformed(local991); + } + } else { + anIntArray515[local353] = 0; + anIntArray183[local353] = 0; + aClass3_Sub2_Sub7Array7[local353] = null; + anIntArray187[local353] = -1; + } + } + } + } + if (!local158 && arg3 == null && arg2 == null) { + return local154; + } + local353 = -1; + local360 = -1; + local374 = 0; + @Pc(1040) AnimFrameset local1040 = null; + @Pc(1042) AnimFrameset local1042 = null; + if (arg3 != null) { + local353 = arg3.frames[arg7]; + local979 = local353 >>> 16; + local1042 = SeqTypeList.getAnimFrameset(local979); + local353 &= 0xFFFF; + if (local1042 != null) { + local836 |= local1042.isColorTransformed(local353); + local827 |= local1042.isAlphaTransformed(local353); + local838 |= arg3.aBoolean278; + } + if ((arg3.tween || SeqType.applyTweening) && arg1 != -1 && arg3.frames.length > arg1) { + local360 = arg3.frames[arg1]; + local451 = local360 >>> 16; + local360 &= 0xFFFF; + local374 = arg3.frameDelay[arg7]; + if (local979 == local451) { + local1040 = local1042; + } else { + local1040 = SeqTypeList.getAnimFrameset(local360 >>> 16); + } + if (local1040 != null) { + local836 |= local1040.isColorTransformed(local360); + local827 |= local1040.isAlphaTransformed(local360); + } + } + } + local979 = -1; + local451 = -1; + @Pc(1154) AnimFrameset local1154 = null; + @Pc(1156) AnimFrameset local1156 = null; + local457 = 0; + if (arg2 != null) { + local979 = arg2.frames[arg8]; + local475 = local979 >>> 16; + local979 &= 0xFFFF; + local1154 = SeqTypeList.getAnimFrameset(local475); + if (local1154 != null) { + local836 |= local1154.isColorTransformed(local979); + local827 |= local1154.isAlphaTransformed(local979); + local838 |= arg2.aBoolean278; + } + if ((arg2.tween || SeqType.applyTweening) && arg5 != -1 && arg2.frames.length > arg5) { + local457 = arg2.frameDelay[arg8]; + local451 = arg2.frames[arg5]; + local481 = local451 >>> 16; + local451 &= 0xFFFF; + if (local475 == local481) { + local1156 = local1154; + } else { + local1156 = SeqTypeList.getAnimFrameset(local451 >>> 16); + } + if (local1156 != null) { + local836 |= local1156.isColorTransformed(local451); + local827 |= local1156.isAlphaTransformed(local451); + } + } + } + @Pc(1284) Model local1284 = local154.method4572(!local827, !local836, !local838); + local481 = 0; + local598 = 1; + while (local481 < local346) { + if (aClass3_Sub2_Sub7Array8[local481] != null) { + local1284.method4565(aClass3_Sub2_Sub7Array8[local481], anIntArray520[local481], aClass3_Sub2_Sub7Array7[local481], anIntArray187[local481], anIntArray183[local481] - 1, anIntArray515[local481], local598, aClass144Array2[local481].aBoolean278, this.anIntArrayArray19[local481]); + } + local481++; + local598 <<= 0x1; + } + if (local1042 != null && local1154 != null) { + local1284.method4570(local1042, local353, local1040, local360, arg6 - 1, local374, local1154, local979, local1156, local451, arg4 - 1, local457, arg3.framegroup, arg3.aBoolean278 | arg2.aBoolean278); + } else if (local1042 != null) { + local1284.method4558(local1042, local353, local1040, local360, arg6 - 1, local374, arg3.aBoolean278); + } else if (local1154 != null) { + local1284.method4558(local1154, local979, local1156, local451, arg4 - 1, local457, arg2.aBoolean278); + } + for (local481 = 0; local481 < local346; local481++) { + aClass3_Sub2_Sub7Array8[local481] = null; + aClass3_Sub2_Sub7Array7[local481] = null; + aClass144Array2[local481] = null; + } + return local1284; + } + + @OriginalMember(owner = "client!hh", name = "a", descriptor = "(IBLclient!tk;II)Lclient!ak;") + public final Model method1956(@OriginalArg(0) int arg0, @OriginalArg(2) SeqType arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + if (this.npcId != -1) { + return NpcTypeList.get(this.npcId).getHeadModel(arg1, arg0, arg3, arg2); + } + @Pc(30) Model local30 = (Model) headModels.get(this.checksum); + if (local30 == null) { + @Pc(42) boolean local42 = false; + @Pc(52) int local52; + for (@Pc(44) int local44 = 0; local44 < 12; local44++) { + local52 = this.identikit[local44]; + if ((local52 & 0x40000000) == 0) { + if ((local52 & Integer.MIN_VALUE) != 0 && !IdkTypeList.get(local52 & 0x3FFFFFFF).isHeadModelReady()) { + local42 = true; + } + } else if (!ObjTypeList.get(local52 & 0x3FFFFFFF).isHeadModelReady(this.gender)) { + local42 = true; + } + } + if (local42) { + return null; + } + @Pc(100) RawModel[] local100 = new RawModel[12]; + local52 = 0; + @Pc(114) int local114; + for (@Pc(104) int local104 = 0; local104 < 12; local104++) { + local114 = this.identikit[local104]; + @Pc(134) RawModel local134; + if ((local114 & 0x40000000) != 0) { + local134 = ObjTypeList.get(local114 & 0x3FFFFFFF).getHeadModel(this.gender); + if (local134 != null) { + local100[local52++] = local134; + } + } else if ((Integer.MIN_VALUE & local114) != 0) { + local134 = IdkTypeList.get(local114 & 0x3FFFFFFF).getHeadModel(); + if (local134 != null) { + local100[local52++] = local134; + } + } + } + @Pc(171) RawModel local171 = new RawModel(local100, local52); + for (local114 = 0; local114 < 5; local114++) { + if (destinationBodyColors[local114].length > this.colors[local114]) { + local171.recolor(aShortArray65[local114], destinationBodyColors[local114][this.colors[local114]]); + } + if (destinationSkinColors[local114].length > this.colors[local114]) { + local171.recolor(aShortArray41[local114], destinationSkinColors[local114][this.colors[local114]]); + } + } + local30 = local171.createModel(64, 768, -50, -10, -50); + headModels.put(local30, this.checksum); + } + if (arg1 != null) { + local30 = arg1.method4215(local30, arg3, arg0, arg2); + } + return local30; + } +} diff --git a/client/src/main/java/rt4/PlayerList.java b/client/src/main/java/rt4/PlayerList.java new file mode 100644 index 0000000..7b59a8e --- /dev/null +++ b/client/src/main/java/rt4/PlayerList.java @@ -0,0 +1,41 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class PlayerList { + @OriginalMember(owner = "client!ja", name = "l", descriptor = "[Lclient!wa;") + public static final Buffer[] appearanceCache = new Buffer[2048]; + @OriginalMember(owner = "client!mi", name = "S", descriptor = "[Lclient!e;") + public static final Player[] players = new Player[2048]; + @OriginalMember(owner = "client!ib", name = "f", descriptor = "[I") + public static final int[] ids = new int[2048]; + @OriginalMember(owner = "client!ke", name = "Y", descriptor = "[I") + public static final int[] anIntArray309 = new int[]{1, 4}; + @OriginalMember(owner = "client!nk", name = "O", descriptor = "Lclient!e;") + public static Player self; + @OriginalMember(owner = "client!bf", name = "E", descriptor = "I") + public static int selfId = -1; + @OriginalMember(owner = "client!vl", name = "j", descriptor = "I") + public static int size = 0; + @OriginalMember(owner = "client!i", name = "Ub", descriptor = "[Lclient!na;") + public static JagString[] playerNames; + @OriginalMember(owner = "client!vg", name = "a", descriptor = "[Lclient!na;") + public static JagString[] playerNames2; + + @OriginalMember(owner = "client!fk", name = "b", descriptor = "(I)V") + public static void method1444() { + for (@Pc(7) int local7 = -1; local7 < size; local7++) { + @Pc(21) int local21; + if (local7 == -1) { + local21 = 2047; + } else { + local21 = ids[local7]; + } + @Pc(31) Player local31 = players[local21]; + if (local31 != null) { + NpcList.method4514(local31.getSize(), local31); + } + } + } +} diff --git a/client/src/main/java/rt4/PlayerSkillXpTable.java b/client/src/main/java/rt4/PlayerSkillXpTable.java new file mode 100644 index 0000000..0436683 --- /dev/null +++ b/client/src/main/java/rt4/PlayerSkillXpTable.java @@ -0,0 +1,39 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class PlayerSkillXpTable { + + @OriginalMember(owner = "client!ud", name = "T", descriptor = "[I") + public static final int[] updatedStats = new int[32]; + + @OriginalMember(owner = "client!lb", name = "p", descriptor = "[I") + public static final int[] baseLevels = new int[25]; + + @OriginalMember(owner = "client!hk", name = "fb", descriptor = "[I") + public static final int[] boostedLevels = new int[25]; + + @OriginalMember(owner = "client!sg", name = "b", descriptor = "[I") + public static final int[] experience = new int[25]; + + @OriginalMember(owner = "client!h", name = "S", descriptor = "[I") + public static final int[] xpLevelLookup = new int[99]; + + @OriginalMember(owner = "client!oj", name = "z", descriptor = "[Z") + public static final boolean[] ENABLED_SKILLS = new boolean[]{true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false}; + + @OriginalMember(owner = "client!ha", name = "m", descriptor = "I") + public static int updatedStatsWriterIndex = 0; + + static { + @Pc(4) int local4 = 0; + for (@Pc(6) int local6 = 0; local6 < 99; local6++) { + @Pc(13) int local13 = local6 + 1; + @Pc(26) int local26 = (int) (Math.pow(2.0D, (double) local13 / 7.0D) * 300.0D + (double) local13); + local4 += local26; + PlayerSkillXpTable.xpLevelLookup[local6] = local4 / 4; + } + } + +} diff --git a/client/src/main/java/rt4/Preferences.java b/client/src/main/java/rt4/Preferences.java new file mode 100644 index 0000000..c837012 --- /dev/null +++ b/client/src/main/java/rt4/Preferences.java @@ -0,0 +1,328 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.io.IOException; + +public class Preferences { + @OriginalMember(owner = "client!pa", name = "N", descriptor = "I") + public static int antiAliasingMode = 0; + @OriginalMember(owner = "client!na", name = "h", descriptor = "Z") + public static boolean safeMode = false; + @OriginalMember(owner = "client!il", name = "I", descriptor = "I") + public static int brightness = 3; + @OriginalMember(owner = "client!gf", name = "N", descriptor = "Z") + public static boolean removeRoofsSelectively = true; + @OriginalMember(owner = "client!hk", name = "eb", descriptor = "Z") + public static boolean stereo = true; + @OriginalMember(owner = "client!rm", name = "g", descriptor = "Z") + public static boolean highWaterDetail = true; + @OriginalMember(owner = "client!hn", name = "X", descriptor = "I") + public static int windowMode = 0; + @OriginalMember(owner = "client!bl", name = "W", descriptor = "I") + public static int fullScreenHeight = 0; + @OriginalMember(owner = "client!uf", name = "b", descriptor = "Z") + public static boolean showGroundDecorations = true; + @OriginalMember(owner = "client!ba", name = "x", descriptor = "Z") + public static boolean flickeringEffectsOn = true; + @OriginalMember(owner = "client!be", name = "Kb", descriptor = "Z") + public static boolean manyIdleAnimations = true; + @OriginalMember(owner = "client!cg", name = "f", descriptor = "I") + public static int ambientSoundsVolume = 127; + @OriginalMember(owner = "client!fk", name = "g", descriptor = "Z") + public static boolean fogEnabled = true; + @OriginalMember(owner = "client!ra", name = "R", descriptor = "Z") + public static boolean characterShadowsOn = true; + @OriginalMember(owner = "client!j", name = "v", descriptor = "I") + public static int fullScreenWidth = 0; + @OriginalMember(owner = "client!l", name = "k", descriptor = "I") + public static int sceneryShadowsType = 2; + @OriginalMember(owner = "client!mi", name = "ab", descriptor = "Z") + public static boolean manyGroundTextures = true; + @OriginalMember(owner = "client!od", name = "c", descriptor = "Z") + public static boolean highDetailLighting = true; + @OriginalMember(owner = "client!bb", name = "n", descriptor = "I") + public static int musicVolume = 255; + @OriginalMember(owner = "client!ec", name = "n", descriptor = "Z") + public static boolean highDetailTextures = true; + @OriginalMember(owner = "client!jl", name = "J", descriptor = "I") + public static int soundEffectVolume = 127; + @OriginalMember(owner = "client!na", name = "o", descriptor = "I") + public static int lastWorldId = 0; + @OriginalMember(owner = "client!lb", name = "A", descriptor = "I") + public static int buildArea = 0; + @OriginalMember(owner = "client!ml", name = "ab", descriptor = "Z") + public static boolean allLevelsVisible = true; + @OriginalMember(owner = "client!cj", name = "h", descriptor = "Z") + public static boolean aBoolean63; + @OriginalMember(owner = "client!fb", name = "m", descriptor = "Z") + public static boolean cursorsEnabled = true; + @OriginalMember(owner = "client!k", name = "c", descriptor = "Z") + public static boolean hdr = false; + @OriginalMember(owner = "client!rg", name = "F", descriptor = "I") + public static int favoriteWorlds = 0; + @OriginalMember(owner = "client!bh", name = "z", descriptor = "Z") + public static boolean sentToServer = true; + @OriginalMember(owner = "client!ga", name = "e", descriptor = "I") + static int particles = 2; + + @OriginalMember(owner = "client!qh", name = "a", descriptor = "(Lsignlink!ll;B)V") + public static void write(@OriginalArg(0) SignLink arg0) { + @Pc(11) FileOnDisk local11 = null; + try { + @Pc(16) PrivilegedRequest local16 = arg0.openPreferences("runescape"); + while (local16.status == 0) { + ThreadUtils.sleep(1L); + } + if (local16.status == 1) { + local11 = (FileOnDisk) local16.result; + @Pc(39) Buffer local39 = encode(); + local11.write(local39.data, local39.offset, 0); + } + } catch (@Pc(49) Exception local49) { + } + try { + if (local11 != null) { + local11.close(); + } + } catch (@Pc(56) Exception local56) { + } + } + + @OriginalMember(owner = "client!gf", name = "a", descriptor = "(Lsignlink!ll;I)V") + public static void read(@OriginalArg(0) SignLink arg0) { + brightness = 3; + setAllVisibleLevels(true); + removeRoofsSelectively = true; + stereo = true; + highWaterDetail = true; + windowMode = 0; + fullScreenHeight = 0; + showGroundDecorations = true; + flickeringEffectsOn = true; + manyIdleAnimations = true; + ambientSoundsVolume = 127; + fogEnabled = true; + characterShadowsOn = true; + fullScreenWidth = 0; + sceneryShadowsType = 2; + manyGroundTextures = true; + highDetailLighting = true; + musicVolume = 255; + highDetailTextures = true; + antiAliasingMode = 0; + @Pc(48) FileOnDisk local48 = null; + soundEffectVolume = 127; + if (GameShell.maxMemory >= 96) { + setParticles(2); + } else { + setParticles(0); + } + lastWorldId = 0; + buildArea = 0; + aBoolean63 = false; + cursorsEnabled = true; + safeMode = false; + hdr = false; + favoriteWorlds = 0; + try { + @Pc(78) PrivilegedRequest request = arg0.openPreferences("runescape"); + while (request.status == 0) { + ThreadUtils.sleep(1L); + } + if (request.status == 1) { + local48 = (FileOnDisk) request.result; + @Pc(106) byte[] local106 = new byte[(int) local48.length()]; + @Pc(128) int local128; + for (@Pc(108) int local108 = 0; local108 < local106.length; local108 += local128) { + local128 = local48.read(local108, local106.length - local108, local106); + if (local128 == -1) { + throw new IOException("EOF"); + } + } + decode(new Buffer(local106)); + } + } catch (@Pc(151) Exception local151) { + } + try { + if (local48 != null) { + local48.close(); + } + } catch (@Pc(158) Exception local158) { + } + } + + @OriginalMember(owner = "client!ec", name = "a", descriptor = "(IZ)V") + public static void setAllVisibleLevels(@OriginalArg(1) boolean arg0) { + allLevelsVisible = arg0; + SceneGraph.aBoolean130 = !SceneGraph.allLevelsAreVisible(); + } + + @OriginalMember(owner = "client!ga", name = "b", descriptor = "(I)V") + public static void setParticles(@OriginalArg(0) int arg0) { + particles = arg0; + } + + @OriginalMember(owner = "client!ga", name = "c", descriptor = "()I") + public static int getParticleSetting() { + return particles; + } + + @OriginalMember(owner = "client!kk", name = "b", descriptor = "(Lclient!wa;I)V") + public static void decode(@OriginalArg(0) Buffer buffer) { + if (buffer.data.length - buffer.offset < 1) { + return; + } + @Pc(21) int version = buffer.g1(); + if (version < 0 || version > 11) { + return; + } + @Pc(34) byte len; + if (version == 11) { + len = 33; + } else if (version == 10) { + len = 32; + } else if (version == 9) { + len = 31; + } else if (version == 8) { + len = 30; + } else if (version == 7) { + len = 29; + } else if (version == 6) { + len = 28; + } else if (version == 5) { + len = 28; + } else if (version == 4) { + len = 24; + } else if (version == 3) { + len = 23; + } else if (version == 2) { + len = 22; + } else if (version == 1) { + len = 23; + } else { + len = 19; + } + if (buffer.data.length - buffer.offset < len) { + return; + } + brightness = buffer.g1(); + if (brightness < 1) { + brightness = 1; + } else if (brightness > 4) { + brightness = 4; + } + setAllVisibleLevels(buffer.g1() == 1); + removeRoofsSelectively = buffer.g1() == 1; + showGroundDecorations = buffer.g1() == 1; + highDetailTextures = buffer.g1() == 1; + manyIdleAnimations = buffer.g1() == 1; + flickeringEffectsOn = buffer.g1() == 1; + manyGroundTextures = buffer.g1() == 1; + characterShadowsOn = buffer.g1() == 1; + sceneryShadowsType = buffer.g1(); + if (sceneryShadowsType > 2) { + sceneryShadowsType = 2; + } + if (version < 2) { + highDetailLighting = buffer.g1() == 1; + buffer.g1(); + } else { + highDetailLighting = buffer.g1() == 1; + } + highWaterDetail = buffer.g1() == 1; + fogEnabled = buffer.g1() == 1; + windowMode = buffer.g1(); + if (windowMode > 2) { + windowMode = 2; + } + antiAliasingMode = windowMode; + stereo = buffer.g1() == 1; + soundEffectVolume = buffer.g1(); + if (soundEffectVolume > 127) { + soundEffectVolume = 127; + } + musicVolume = buffer.g1(); + ambientSoundsVolume = buffer.g1(); + if (ambientSoundsVolume > 127) { + ambientSoundsVolume = 127; + } + if (version >= 1) { + fullScreenWidth = buffer.g2(); + fullScreenHeight = buffer.g2(); + } + if (version >= 3 && version < 6) { + buffer.g1(); + } + if (version >= 4) { + @Pc(386) int particles = buffer.g1(); + if (GameShell.maxMemory < 96) { + particles = 0; + } + setParticles(particles); + } + if (version >= 5) { + lastWorldId = buffer.g4(); + } + if (version >= 6) { + favoriteWorlds = buffer.g1(); + } + if (version >= 7) { + safeMode = buffer.g1() == 1; + } + if (version >= 8) { + aBoolean63 = buffer.g1() == 1; + } + if (version >= 9) { + buildArea = buffer.g1(); + } + if (version >= 10) { + hdr = buffer.g1() != 0; + } + if (version >= 11) { + cursorsEnabled = buffer.g1() != 0; + } + } + + @OriginalMember(owner = "client!dl", name = "a", descriptor = "(B)Lclient!wa;") + public static Buffer encode() { + @Pc(4) Buffer local4 = new Buffer(34); + local4.p1(11); + local4.p1(brightness); + local4.p1(allLevelsVisible ? 1 : 0); + local4.p1(removeRoofsSelectively ? 1 : 0); + local4.p1(showGroundDecorations ? 1 : 0); + local4.p1(highDetailTextures ? 1 : 0); + local4.p1(manyIdleAnimations ? 1 : 0); + local4.p1(flickeringEffectsOn ? 1 : 0); + local4.p1(manyGroundTextures ? 1 : 0); + local4.p1(characterShadowsOn ? 1 : 0); + local4.p1(sceneryShadowsType); + local4.p1(highDetailLighting ? 1 : 0); + local4.p1(highWaterDetail ? 1 : 0); + local4.p1(fogEnabled ? 1 : 0); + local4.p1(windowMode); + local4.p1(stereo ? 1 : 0); + local4.p1(soundEffectVolume); + local4.p1(musicVolume); + local4.p1(ambientSoundsVolume); + local4.p2(fullScreenWidth); + local4.p2(fullScreenHeight); + local4.p1(getParticleSetting()); + local4.p4(lastWorldId); + local4.p1(favoriteWorlds); + local4.p1(safeMode ? 1 : 0); + local4.p1(aBoolean63 ? 1 : 0); + local4.p1(buildArea); + local4.p1(hdr ? 1 : 0); + local4.p1(cursorsEnabled ? 1 : 0); + return local4; + } + + @OriginalMember(owner = "client!lf", name = "c", descriptor = "(I)I") + public static int toInt() { + return ((stereo ? 1 : 0) << 19) + (((fogEnabled ? 1 : 0) << 16) + ((highWaterDetail ? 1 : 0) << 15) + ((highDetailLighting ? 1 : 0) << 13) + ((characterShadowsOn ? 1 : 0) << 10) + ((manyGroundTextures ? 1 : 0) << 9) + ((manyIdleAnimations ? 1 : 0) << 7) + ((highDetailTextures ? 1 : 0) << 6) + ((showGroundDecorations ? 1 : 0) << 5) + (((allLevelsVisible ? 1 : 0) << 3) + (brightness & 0x7) - (-((removeRoofsSelectively ? 1 : 0) << 4) + -((flickeringEffectsOn ? 1 : 0) << 8)) - (-((sceneryShadowsType & 0x3) << 11) + -((soundEffectVolume == 0 ? 0 : 1) << 20) - (((musicVolume == 0 ? 0 : 1) << 21) + ((ambientSoundsVolume == 0 ? 0 : 1) << 22)))) + (getParticleSetting() << 23)); + } +} diff --git a/client/src/main/java/rt4/ProjAnim.java b/client/src/main/java/rt4/ProjAnim.java new file mode 100644 index 0000000..5a69147 --- /dev/null +++ b/client/src/main/java/rt4/ProjAnim.java @@ -0,0 +1,213 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ra") +public final class ProjAnim extends Entity { + + @OriginalMember(owner = "client!ra", name = "u", descriptor = "D") + private double velocityX; + + @OriginalMember(owner = "client!ra", name = "A", descriptor = "D") + public double y; + + @OriginalMember(owner = "client!ra", name = "N", descriptor = "D") + private double accelerationZ; + + @OriginalMember(owner = "client!ra", name = "Q", descriptor = "Lclient!ga;") + private ParticleSystem particleSystem; + + @OriginalMember(owner = "client!ra", name = "U", descriptor = "D") + private double velocityZ; + + @OriginalMember(owner = "client!ra", name = "X", descriptor = "D") + public double z; + + @OriginalMember(owner = "client!ra", name = "ab", descriptor = "I") + private int pitch; + + @OriginalMember(owner = "client!ra", name = "bb", descriptor = "D") + private double velocityY; + + @OriginalMember(owner = "client!ra", name = "db", descriptor = "D") + public double x; + + @OriginalMember(owner = "client!ra", name = "eb", descriptor = "D") + private double velocity; + + @OriginalMember(owner = "client!ra", name = "hb", descriptor = "I") + public int yaw; + + @OriginalMember(owner = "client!ra", name = "v", descriptor = "I") + private int frameCycle = 0; + + @OriginalMember(owner = "client!ra", name = "I", descriptor = "Z") + private boolean isMobile = false; + + @OriginalMember(owner = "client!ra", name = "x", descriptor = "I") + private int anInt4798 = -1; + + @OriginalMember(owner = "client!ra", name = "fb", descriptor = "I") + private int seqFrame = 0; + + @OriginalMember(owner = "client!ra", name = "T", descriptor = "I") + private int minY = -32768; + + @OriginalMember(owner = "client!ra", name = "z", descriptor = "I") + public final int lastCycle; + + @OriginalMember(owner = "client!ra", name = "E", descriptor = "I") + private final int sourceX; + + @OriginalMember(owner = "client!ra", name = "cb", descriptor = "I") + public final int targetIndex; + + @OriginalMember(owner = "client!ra", name = "Y", descriptor = "I") + private final int spotanimId; + + @OriginalMember(owner = "client!ra", name = "M", descriptor = "I") + public final int currentPlane; + + @OriginalMember(owner = "client!ra", name = "mb", descriptor = "I") + private final int elevationPitch; + + @OriginalMember(owner = "client!ra", name = "Z", descriptor = "I") + private final int sourceY; + + @OriginalMember(owner = "client!ra", name = "F", descriptor = "I") + public final int baseZ; + + @OriginalMember(owner = "client!ra", name = "w", descriptor = "I") + private final int arcScale; + + @OriginalMember(owner = "client!ra", name = "ib", descriptor = "I") + public final int firstCycle; + + @OriginalMember(owner = "client!ra", name = "S", descriptor = "I") + private final int sourceZ; + + @OriginalMember(owner = "client!ra", name = "gb", descriptor = "Lclient!tk;") + private final SeqType seq; + + @OriginalMember(owner = "client!ra", name = "", descriptor = "(IIIIIIIIIII)V") + public ProjAnim(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9, @OriginalArg(10) int arg10) { + this.lastCycle = arg6; + this.sourceX = arg2; + this.targetIndex = arg9; + this.spotanimId = arg0; + this.currentPlane = arg1; + this.elevationPitch = arg7; + this.sourceY = arg3; + this.isMobile = false; + this.baseZ = arg10; + this.arcScale = arg8; + this.firstCycle = arg5; + this.sourceZ = arg4; + @Pc(58) int seqId = SpotAnimTypeList.get(this.spotanimId).seqId; + if (seqId == -1) { + this.seq = null; + } else { + this.seq = SeqTypeList.get(seqId); + } + } + + @OriginalMember(owner = "client!ra", name = "a", descriptor = "(IIIII)V") + @Override + public final void method4545(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + } + + @OriginalMember(owner = "client!ra", name = "b", descriptor = "(I)Lclient!ak;") + private Model method3703() { + @Pc(14) SpotAnimType seq = SpotAnimTypeList.get(this.spotanimId); + @Pc(24) Model model = seq.constructModel(this.anInt4798, this.seqFrame, this.frameCycle); + if (model == null) { + return null; + } else { + model.rotateX(this.pitch); + return model; + } + } + + @OriginalMember(owner = "client!ra", name = "b", descriptor = "(BI)V") + public final void update(@OriginalArg(1) int arg0) { + this.x += this.velocityX * (double) arg0; + this.y += this.velocityY * (double) arg0; + this.isMobile = true; + if (this.elevationPitch == -1) { + this.z += this.velocityZ * (double) arg0; + } else { + this.z += (double) arg0 * this.accelerationZ * 0.5D * (double) arg0 + (double) arg0 * this.velocityZ; + this.velocityZ += this.accelerationZ * (double) arg0; + } + this.yaw = (int) (Math.atan2(this.velocityX, this.velocityY) * 325.949D) + 1024 & 0x7FF; + this.pitch = (int) (Math.atan2(this.velocityZ, this.velocity) * 325.949D) & 0x7FF; + if (this.seq == null) { + return; + } + this.frameCycle += arg0; + while (true) { + do { + do { + if (this.frameCycle <= this.seq.frameDelay[this.seqFrame]) { + return; + } + this.frameCycle -= this.seq.frameDelay[this.seqFrame]; + this.seqFrame++; + if (this.seqFrame >= this.seq.frames.length) { + this.seqFrame -= this.seq.replayoff; + if (this.seqFrame < 0 || this.seq.frames.length <= this.seqFrame) { + this.seqFrame = 0; + } + } + this.anInt4798 = this.seqFrame + 1; + } while (this.seq.frames.length > this.anInt4798); + this.anInt4798 -= this.seq.replayoff; + } while (this.anInt4798 >= 0 && this.anInt4798 < this.seq.frames.length); + this.anInt4798 = -1; + } + } + + @OriginalMember(owner = "client!ra", name = "b", descriptor = "(IIIII)V") + public final void setTarget(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + @Pc(17) double local17; + if (!this.isMobile) { + @Pc(10) double local10 = arg0 - this.sourceY; + local17 = arg3 - this.sourceX; + @Pc(26) double local26 = Math.sqrt(local17 * local17 + local10 * local10); + this.z = this.sourceZ; + this.y = local10 * (double) this.arcScale / local26 + (double) this.sourceY; + this.x = (double) this.arcScale * local17 / local26 + (double) this.sourceX; + } + local17 = this.lastCycle + 1 - arg1; + this.velocityY = ((double) arg0 - this.y) / local17; + this.velocityX = ((double) arg3 - this.x) / local17; + this.velocity = Math.sqrt(this.velocityY * this.velocityY + this.velocityX * this.velocityX); + if (this.elevationPitch == -1) { + this.velocityZ = ((double) arg2 - this.z) / local17; + } else { + if (!this.isMobile) { + this.velocityZ = -this.velocity * Math.tan((double) this.elevationPitch * 0.02454369D); + } + this.accelerationZ = ((double) arg2 - this.z - this.velocityZ * local17) * 2.0D / (local17 * local17); + } + } + + @OriginalMember(owner = "client!ra", name = "a", descriptor = "(IIIIIIIIJILclient!ga;)V") + @Override + public final void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) long arg8, @OriginalArg(9) int arg9, @OriginalArg(10) ParticleSystem arg10) { + @Pc(3) Model local3 = this.method3703(); + if (local3 != null) { + local3.render(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, this.particleSystem); + this.minY = local3.getMinY(); + } + } + + @OriginalMember(owner = "client!ra", name = "b", descriptor = "()I") + @Override + public final int getMinY() { + return this.minY; + } +} diff --git a/client/src/main/java/rt4/ProjAnimNode.java b/client/src/main/java/rt4/ProjAnimNode.java new file mode 100644 index 0000000..46b87c7 --- /dev/null +++ b/client/src/main/java/rt4/ProjAnimNode.java @@ -0,0 +1,17 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!ud") +public final class ProjAnimNode extends SecondaryNode { + + @OriginalMember(owner = "client!ud", name = "R", descriptor = "Lclient!ra;") + public final ProjAnim value; + + @OriginalMember(owner = "client!ud", name = "", descriptor = "(Lclient!ra;)V") + public ProjAnimNode(@OriginalArg(0) ProjAnim value) { + this.value = value; + } +} diff --git a/client/src/main/java/rt4/Protocol.java b/client/src/main/java/rt4/Protocol.java new file mode 100644 index 0000000..1550121 --- /dev/null +++ b/client/src/main/java/rt4/Protocol.java @@ -0,0 +1,3589 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; +import plugin.PluginRepository; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +public class Protocol { + @OriginalMember(owner = "client!eg", name = "e", descriptor = "Lclient!i;") + public static final Packet inboundBuffer = new Packet(65536); + @OriginalMember(owner = "client!wb", name = "f", descriptor = "Lclient!wa;") + public static final Buffer chatBuffer = new Buffer(new byte[5000]); + @OriginalMember(owner = "client!ag", name = "P", descriptor = "Lclient!i;") + public static final Packet outboundBuffer = new Packet(5000); + @OriginalMember(owner = "client!eb", name = "p", descriptor = "[I") + public static final int[] removedIds = new int[1000]; + @OriginalMember(owner = "client!dh", name = "d", descriptor = "[I") + public static final int[] extendedIds = new int[2048]; + @OriginalMember(owner = "client!ta", name = "z", descriptor = "[I") + public static final int[] PACKET_LENGTHS = new int[]{-1, 0, 8, 0, 2, 0, 0, 0, 0, 12, 0, 1, 0, 3, 7, 0, 15, 6, 0, 0, 4, 7, -2, -1, 2, 0, 2, 8, 0, 0, 0, 0, -2, 5, 0, 0, 8, 3, 6, 0, 0, 0, -1, 0, -1, 0, 0, 6, -2, 0, 12, 0, 0, 0, -1, -2, 10, 0, 0, 0, 3, 0, -1, 0, 0, 5, 6, 0, 0, 8, -1, -1, 0, 8, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 6, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, -2, 0, 0, 0, 0, 0, 12, 2, 0, -2, -2, 20, 0, 0, 10, 0, 15, 0, -1, 0, 8, -2, 0, 0, 0, 8, 0, 12, 0, 0, 7, 0, 0, 0, 0, 0, -1, -1, 0, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 8, 9, 0, 0, 0, 2, -1, 0, -2, 0, 4, 14, 0, 0, 0, 24, 0, -2, 5, 0, 0, 0, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 2, 1, 0, 0, 2, -1, 1, 0, 0, 0, 0, 14, 0, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, -2, 0, 0, 9, 0, 0, 8, 0, 0, 0, 0, -2, 6, 0, 0, 0, -2, 0, 3, 0, 1, 7, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 3, 0, 0}; + @OriginalMember(owner = "client!tl", name = "f", descriptor = "Lclient!na;") + public static final JagString ASSIST = JagString.parse(":assist:"); + @OriginalMember(owner = "client!pl", name = "f", descriptor = "Lclient!na;") + public static final JagString TRADEREQ = JagString.parse(":tradereq:"); + @OriginalMember(owner = "client!lb", name = "s", descriptor = "Lclient!na;") + public static final JagString CLAN = JagString.parse(":clan:"); + @OriginalMember(owner = "client!ij", name = "a", descriptor = "Lclient!na;") + public static final JagString DUELFRIEND = JagString.parse(":duelfriend:"); + @OriginalMember(owner = "client!km", name = "Sc", descriptor = "Lclient!na;") + public static final JagString TRADE = JagString.parse(":trade:"); + @OriginalMember(owner = "client!pb", name = "x", descriptor = "[[[I") + public static final int[][][] anIntArrayArrayArray18 = new int[4][13][13]; + @OriginalMember(owner = "client!fc", name = "f", descriptor = "Lclient!na;") + public static final JagString IMG0 = JagString.parse(""); + @OriginalMember(owner = "client!en", name = "h", descriptor = "Lclient!na;") + public static final JagString CHALREQ = JagString.parse(":chalreq:"); + @OriginalMember(owner = "client!ef", name = "f", descriptor = "Lclient!na;") + public static final JagString DUELSTAKE = JagString.parse(":duelstake:"); + @OriginalMember(owner = "client!wd", name = "e", descriptor = "Lclient!na;") + public static final JagString aClass100_989 = JagString.parse("cookieprefix"); + @OriginalMember(owner = "client!u", name = "g", descriptor = "Lclient!na;") + public static final JagString aClass100_1029 = JagString.parse("cookiehost"); + @OriginalMember(owner = "client!lc", name = "m", descriptor = "Lclient!na;") + public static final JagString aClass100_667 = JagString.parse("settings="); + @OriginalMember(owner = "client!wh", name = "n", descriptor = "Lclient!na;") + public static final JagString aClass100_1095 = JagString.parse("; version=1; path=)4; domain="); + @OriginalMember(owner = "client!tm", name = "d", descriptor = "Lclient!na;") + public static final JagString aClass100_1018 = JagString.parse("; Expires=Thu)1 01)2Jan)21970 00:00:00 GMT; Max)2Age=0"); + @OriginalMember(owner = "client!vg", name = "h", descriptor = "Lclient!na;") + public static final JagString aClass100_1082 = JagString.parse("; Expires="); + @OriginalMember(owner = "client!s", name = "g", descriptor = "Lclient!na;") + public static final JagString aClass100_821 = JagString.parse("document)3cookie=(R"); + @OriginalMember(owner = "client!sc", name = "f", descriptor = "Lclient!na;") + public static final JagString aClass100_946 = JagString.parse("(R"); + @OriginalMember(owner = "client!fb", name = "i", descriptor = "Lclient!na;") + public static final JagString aClass100_431 = JagString.parse("; Max)2Age="); + @OriginalMember(owner = "client!ch", name = "z", descriptor = "[I") + public static final int[] anIntArray76 = new int[5]; + @OriginalMember(owner = "client!pg", name = "db", descriptor = "Lclient!na;") + public static final JagString ASSISTREQ = JagString.parse(":assistreq:"); + @OriginalMember(owner = "client!rj", name = "ab", descriptor = "Lclient!na;") + public static final JagString aClass100_916 = JagString.parse(":clanreq:"); + @OriginalMember(owner = "client!na", name = "cb", descriptor = "Lclient!na;") + public static final JagString aClass100_770 = JagString.parse(":allyreq:"); + @OriginalMember(owner = "client!dh", name = "i", descriptor = "Lclient!na;") + public static final JagString IMG1 = JagString.parse(""); + @OriginalMember(owner = "client!jk", name = "B", descriptor = "Lclient!ma;") + public static BufferedSocket socket; + @OriginalMember(owner = "client!fl", name = "C", descriptor = "Lsignlink!im;") + public static PrivilegedRequest socketRequest; + @OriginalMember(owner = "client!pe", name = "a", descriptor = "I") + public static int verifyId = 0; + @OriginalMember(owner = "client!na", name = "l", descriptor = "I") + public static int opcode = 0; + @OriginalMember(owner = "client!sc", name = "o", descriptor = "I") + public static int length = 0; + @OriginalMember(owner = "client!jb", name = "m", descriptor = "I") + public static int extendedCount = 0; + @OriginalMember(owner = "client!tg", name = "h", descriptor = "I") + public static int removedCount = 0; + @OriginalMember(owner = "client!qi", name = "t", descriptor = "I") + public static int anInt4762 = 0; + @OriginalMember(owner = "client!ck", name = "eb", descriptor = "Z") + public static boolean verifyIdChanged = false; + @OriginalMember(owner = "client!dm", name = "q", descriptor = "I") + public static int opcode4 = 0; + @OriginalMember(owner = "client!af", name = "k", descriptor = "I") + public static int opcode3 = 0; + @OriginalMember(owner = "client!sj", name = "t", descriptor = "I") + public static int opcode2 = 0; + @OriginalMember(owner = "client!bj", name = "r", descriptor = "I") + public static int anInt659 = 2; + @OriginalMember(owner = "client!dg", name = "h", descriptor = "Lclient!be;") + public static Component aClass13_11; + @OriginalMember(owner = "client!ld", name = "i", descriptor = "I") + public static int anInt3486 = 0; + @OriginalMember(owner = "client!kf", name = "l", descriptor = "I") + public static int anInt5235 = 0; + @OriginalMember(owner = "client!pm", name = "ab", descriptor = "Z") + public static boolean aBoolean228 = true; + @OriginalMember(owner = "client!vl", name = "k", descriptor = "I") + public static int anInt5775 = 0; + @OriginalMember(owner = "client!t", name = "l", descriptor = "Lclient!ma;") + public static BufferedSocket aClass95_4; + @OriginalMember(owner = "client!od", name = "i", descriptor = "I") + public static int sceneDelta = 0; + @OriginalMember(owner = "client!bf", name = "G", descriptor = "I") + public static int anInt551 = 0; + @OriginalMember(owner = "client!pb", name = "ab", descriptor = "I") + public static int anInt4422 = 0; + @OriginalMember(owner = "client!fe", name = "R", descriptor = "Z") + public static boolean prevFocus = true; + @OriginalMember(owner = "client!rm", name = "c", descriptor = "I") + public static int anInt4941 = 1; + @OriginalMember(owner = "client!cj", name = "n", descriptor = "Lsignlink!im;") + public static PrivilegedRequest openUrlRequest; + @OriginalMember(owner = "client!na", name = "W", descriptor = "Z") + public static boolean newTab; + @OriginalMember(owner = "client!kd", name = "ob", descriptor = "I") + public static int anInt3251 = 0; + + @OriginalMember(owner = "client!g", name = "b", descriptor = "(B)V") + public static void readZonePacket() { + if (opcode == ServerProt.LOC_DEL) { + int local15 = inboundBuffer.g1neg(); + int local19 = local15 & 0x3; + int local23 = local15 >> 2; + int local27 = Loc.LAYERS[local23]; + int local31 = inboundBuffer.g1(); + int local39 = (local31 >> 4 & 0x7) + SceneGraph.currentChunkX; + int local45 = (local31 & 0x7) + SceneGraph.currentChunkZ; + if (local39 >= 0 && local45 >= 0 && local39 < 104 && local45 < 104) { + ChangeLocRequest.push(Player.plane, local45, local19, local39, -1, -1, local27, local23, 0); + } + } else if (opcode == ServerProt.OBJ_REVEAL) { + int local15 = inboundBuffer.ig2(); + int local23 = inboundBuffer.g1(); + int local27 = (local23 & 0x7) + SceneGraph.currentChunkZ; + int local19 = (local23 >> 4 & 0x7) + SceneGraph.currentChunkX; + int local31 = inboundBuffer.g2add(); + if (local19 >= 0 && local27 >= 0 && local19 < 104 && local27 < 104) { + @Pc(122) ObjStack local122 = new ObjStack(); + local122.amount = local31; + local122.type = local15; + if (SceneGraph.objStacks[Player.plane][local19][local27] == null) { + SceneGraph.objStacks[Player.plane][local19][local27] = new LinkedList(); + } + SceneGraph.objStacks[Player.plane][local19][local27].addTail(new ObjStackNode(local122)); + spawnGroundObject(local27, local19); + } + } else if (opcode == ServerProt.MAP_PROJANIM_3) { + int local15 = inboundBuffer.g1(); + int local23 = SceneGraph.currentChunkX * 2 + (local15 >> 4 & 0xF); + int local19 = (local15 & 0xF) + SceneGraph.currentChunkZ * 2; + int local27 = local23 + inboundBuffer.g1b(); + int local31 = inboundBuffer.g1b() + local19; + int local39 = inboundBuffer.g2b(); + int local45 = inboundBuffer.g2(); + int local218 = inboundBuffer.g1() * 4; + int local224 = inboundBuffer.g1() * 4; + int local228 = inboundBuffer.g2(); + int local232 = inboundBuffer.g2(); + int local236 = inboundBuffer.g1(); + if (local236 == 255) { + local236 = -1; + } + int local247 = inboundBuffer.g1(); + if (local23 >= 0 && local19 >= 0 && local23 < 208 && local19 < 208 && local27 >= 0 && local31 >= 0 && local27 < 208 && local31 < 208 && local45 != 65535) { + local31 *= 64; + local27 = local27 * 64; + local19 = local19 * 64; + local23 = local23 * 64; + ProjAnim local317 = new ProjAnim(local45, Player.plane, local23, local19, SceneGraph.getTileHeight(Player.plane, local23, local19) - local218, client.loop + local228, local232 + client.loop, local236, local247, local39, local224); + local317.setTarget(local31, client.loop + local228, -local224 + SceneGraph.getTileHeight(Player.plane, local27, local31), local27); + SceneGraph.projectiles.addTail(new ProjAnimNode(local317)); + } + } else if (opcode == ServerProt.SPOTANIM_SPECIFIC) { + int local15 = inboundBuffer.g1(); + int local23 = SceneGraph.currentChunkX + (local15 >> 4 & 0x7); + int local19 = SceneGraph.currentChunkZ + (local15 & 0x7); + int local27 = inboundBuffer.g2(); + int local31 = inboundBuffer.g1(); + int local39 = inboundBuffer.g2(); + if (local23 >= 0 && local19 >= 0 && local23 < 104 && local19 < 104) { + local23 = local23 * 128 + 64; + local19 = local19 * 128 + 64; + @Pc(427) SpotAnim local427 = new SpotAnim(local27, Player.plane, local23, local19, SceneGraph.getTileHeight(Player.plane, local23, local19) - local31, local39, client.loop); + SceneGraph.spotanims.addTail(new SpotAnimNode(local427)); + } + } else if (opcode == ServerProt.LOC_ADD) { + int local15 = inboundBuffer.g1add(); + int local23 = local15 >> 2; + int local19 = local15 & 0x3; + int local27 = Loc.LAYERS[local23]; + int local31 = inboundBuffer.g1(); + int local39 = SceneGraph.currentChunkX + (local31 >> 4 & 0x7); + int local45 = (local31 & 0x7) + SceneGraph.currentChunkZ; + int local218 = inboundBuffer.g2add(); + if (local39 >= 0 && local45 >= 0 && local39 < 104 && local45 < 104) { + ChangeLocRequest.push(Player.plane, local45, local19, local39, -1, local218, local27, local23, 0); + } + } else if (opcode == ServerProt.LOC_ANIM) { + int local15 = inboundBuffer.g1sub(); + int local23 = (local15 >> 4 & 0x7) + SceneGraph.currentChunkX; + int local19 = SceneGraph.currentChunkZ + (local15 & 0x7); + int local27 = inboundBuffer.g1sub(); + int local31 = local27 >> 2; + int local39 = local27 & 0x3; + int local45 = Loc.LAYERS[local31]; + int local218 = inboundBuffer.ig2(); + if (local218 == 65535) { + local218 = -1; + } + SceneGraph.method1881(Player.plane, local39, local31, local19, local45, local23, local218); + } else if (opcode == ServerProt.LOC_ADD_CHANGE) { + int local15 = inboundBuffer.g1(); + int local23 = local15 >> 2; + int local19 = local15 & 0x3; + int local27 = inboundBuffer.g1(); + int local31 = (local27 >> 4 & 0x7) + SceneGraph.currentChunkX; + int local39 = (local27 & 0x7) + SceneGraph.currentChunkZ; + @Pc(605) byte local605 = inboundBuffer.g1badd(); + @Pc(609) byte local609 = inboundBuffer.g1badd(); + @Pc(613) byte local613 = inboundBuffer.g1bsub(); + int local228 = inboundBuffer.g2add(); + int local232 = inboundBuffer.ig2(); + @Pc(625) byte local625 = inboundBuffer.g1b(); + int local247 = inboundBuffer.g2(); + int local633 = inboundBuffer.ig2badd(); + if (!GlRenderer.enabled) { + AttachLocRequest.push(local625, local247, local633, local232, local39, local613, local19, local605, local31, local23, local609, local228); + } + } else if (opcode == ServerProt.OBJ_COUNT) { + int local15 = inboundBuffer.g1(); + int local19 = SceneGraph.currentChunkZ + (local15 & 0x7); + int local23 = (local15 >> 4 & 0x7) + SceneGraph.currentChunkX; + int local27 = inboundBuffer.g2(); + int local31 = inboundBuffer.g2(); + int local39 = inboundBuffer.g2(); + if (local23 >= 0 && local19 >= 0 && local23 < 104 && local19 < 104) { + @Pc(710) LinkedList local710 = SceneGraph.objStacks[Player.plane][local23][local19]; + if (local710 != null) { + for (@Pc(718) ObjStackNode local718 = (ObjStackNode) local710.head(); local718 != null; local718 = (ObjStackNode) local710.next()) { + @Pc(723) ObjStack local723 = local718.value; + if ((local27 & 0x7FFF) == local723.type && local31 == local723.amount) { + local723.amount = local39; + break; + } + } + spawnGroundObject(local19, local23); + } + } + } else if (opcode == ServerProt.OBJ_ADD) { + int local15 = inboundBuffer.ig2add(); + int local23 = inboundBuffer.g1neg(); + int local27 = SceneGraph.currentChunkZ + (local23 & 0x7); + int local19 = (local23 >> 4 & 0x7) + SceneGraph.currentChunkX; + int local31 = inboundBuffer.ig2(); + int local39 = inboundBuffer.ig2(); + if (local19 >= 0 && local27 >= 0 && local19 < 104 && local27 < 104 && PlayerList.selfId != local15) { + @Pc(812) ObjStack local812 = new ObjStack(); + local812.amount = local31; + local812.type = local39; + if (SceneGraph.objStacks[Player.plane][local19][local27] == null) { + SceneGraph.objStacks[Player.plane][local19][local27] = new LinkedList(); + } + SceneGraph.objStacks[Player.plane][local19][local27].addTail(new ObjStackNode(local812)); + spawnGroundObject(local27, local19); + } + } else if (opcode == ServerProt.MAP_PROJANIM_2) { + int local15 = inboundBuffer.g1(); + int local23 = SceneGraph.currentChunkX + (local15 >> 4 & 0x7); + int local19 = (local15 & 0x7) + SceneGraph.currentChunkZ; + int local27 = local23 + inboundBuffer.g1b(); + int local31 = inboundBuffer.g1b() + local19; + int local39 = inboundBuffer.g2b(); + int local45 = inboundBuffer.g2(); + int local218 = inboundBuffer.g1() * 4; + int local224 = inboundBuffer.g1() * 4; + int local228 = inboundBuffer.g2(); + int local232 = inboundBuffer.g2(); + int local236 = inboundBuffer.g1(); + int local247 = inboundBuffer.g1(); + if (local236 == 255) { + local236 = -1; + } + if (local23 >= 0 && local19 >= 0 && local23 < 104 && local19 < 104 && local27 >= 0 && local31 >= 0 && local27 < 104 && local31 < 104 && local45 != 65535) { + local31 = local31 * 128 + 64; + local19 = local19 * 128 + 64; + local23 = local23 * 128 + 64; + local27 = local27 * 128 + 64; + ProjAnim local317 = new ProjAnim(local45, Player.plane, local23, local19, SceneGraph.getTileHeight(Player.plane, local23, local19) - local218, local228 + client.loop, local232 + client.loop, local236, local247, local39, local224); + local317.setTarget(local31, client.loop + local228, SceneGraph.getTileHeight(Player.plane, local27, local31) - local224, local27); + SceneGraph.projectiles.addTail(new ProjAnimNode(local317)); + } + } else if (opcode == ServerProt.MAP_PROJANIM) { + int local15 = inboundBuffer.g1(); + int local19 = SceneGraph.currentChunkZ * 2 + (local15 & 0xF); + int local23 = SceneGraph.currentChunkX * 2 + (local15 >> 4 & 0xF); + int local27 = inboundBuffer.g1b() + local23; + int local31 = inboundBuffer.g1b() + local19; + int local39 = inboundBuffer.g2b(); + int local45 = inboundBuffer.g2b(); + int local218 = inboundBuffer.g2(); + int local224 = inboundBuffer.g1b(); + int local228 = inboundBuffer.g1() * 4; + int local232 = inboundBuffer.g2(); + int local236 = inboundBuffer.g2(); + int local247 = inboundBuffer.g1(); + int local633 = inboundBuffer.g1(); + if (local247 == 255) { + local247 = -1; + } + if (local23 >= 0 && local19 >= 0 && local23 < 208 && local19 < 208 && local27 >= 0 && local31 >= 0 && local27 < 208 && local31 < 208 && local218 != 65535) { + local27 = local27 * 64; + local23 *= 64; + local31 *= 64; + local19 *= 64; + if (local39 != 0) { + @Pc(1194) int local1194; + @Pc(1198) PathingEntity local1198; + @Pc(1184) int local1184; + @Pc(1188) int local1188; + if (local39 >= 0) { + local1184 = local39 - 1; + local1188 = local1184 & 0x7FF; + local1194 = local1184 >> 11 & 0xF; + local1198 = NpcList.npcs[local1188]; + } else { + local1184 = -local39 - 1; + local1194 = local1184 >> 11 & 0xF; + local1188 = local1184 & 0x7FF; + if (PlayerList.selfId == local1188) { + local1198 = PlayerList.self; + } else { + local1198 = PlayerList.players[local1188]; + } + } + if (local1198 != null) { + @Pc(1232) BasType local1232 = local1198.getBasType(); + if (local1232.modelRotateTranslate != null && local1232.modelRotateTranslate[local1194] != null) { + local1188 = local1232.modelRotateTranslate[local1194][0]; + local224 -= local1232.modelRotateTranslate[local1194][1]; + @Pc(1264) int local1264 = local1232.modelRotateTranslate[local1194][2]; + @Pc(1269) int local1269 = MathUtils.sin[local1198.anInt3381]; + @Pc(1274) int local1274 = MathUtils.cos[local1198.anInt3381]; + @Pc(1284) int local1284 = local1188 * local1274 + local1264 * local1269 >> 16; + @Pc(1295) int local1295 = local1274 * local1264 - local1188 * local1269 >> 16; + local19 += local1295; + local23 += local1284; + } + } + } + @Pc(1331) ProjAnim local1331 = new ProjAnim(local218, Player.plane, local23, local19, SceneGraph.getTileHeight(Player.plane, local23, local19) - local224, local232 + client.loop, local236 + client.loop, local247, local633, local45, local228); + local1331.setTarget(local31, local232 + client.loop, -local228 + SceneGraph.getTileHeight(Player.plane, local27, local31), local27); + SceneGraph.projectiles.addTail(new ProjAnimNode(local1331)); + } + } else if (opcode == ServerProt.SOUND_AREA) { + int local15 = inboundBuffer.g1(); + int local23 = SceneGraph.currentChunkX + (local15 >> 4 & 0x7); + int local19 = SceneGraph.currentChunkZ + (local15 & 0x7); + int local27 = inboundBuffer.g2(); + if (local27 == 65535) { + local27 = -1; + } + int local31 = inboundBuffer.g1(); + int local39 = local31 >> 4 & 0xF; + int local218 = inboundBuffer.g1(); + int local45 = local31 & 0x7; + if (local23 >= 0 && local19 >= 0 && local23 < 104 && local19 < 104) { + int local224 = local39 + 1; + if (PlayerList.self.movementQueueX[0] >= local23 - local224 && local224 + local23 >= PlayerList.self.movementQueueX[0] && PlayerList.self.movementQueueZ[0] >= local19 - local224 && PlayerList.self.movementQueueZ[0] <= local224 + local19 && Preferences.ambientSoundsVolume != 0 && local45 > 0 && SoundPlayer.size < 50 && local27 != -1) { + SoundPlayer.ids[SoundPlayer.size] = local27; + SoundPlayer.loops[SoundPlayer.size] = local45; + SoundPlayer.delays[SoundPlayer.size] = local218; + SoundPlayer.sounds[SoundPlayer.size] = null; + SoundPlayer.positions[SoundPlayer.size] = local39 + (local23 << 16) + (local19 << 8); + SoundPlayer.size++; + } + } + } else if (opcode == ServerProt.OBJ_DEL) { + int local15 = inboundBuffer.g1sub(); + int local19 = SceneGraph.currentChunkZ + (local15 & 0x7); + int local23 = (local15 >> 4 & 0x7) + SceneGraph.currentChunkX; + int local27 = inboundBuffer.g2(); + if (local23 >= 0 && local19 >= 0 && local23 < 104 && local19 < 104) { + @Pc(1565) LinkedList local1565 = SceneGraph.objStacks[Player.plane][local23][local19]; + if (local1565 != null) { + for (@Pc(1572) ObjStackNode local1572 = (ObjStackNode) local1565.head(); local1572 != null; local1572 = (ObjStackNode) local1565.next()) { + if (local1572.value.type == (local27 & 0x7FFF)) { + local1572.unlink(); + break; + } + } + if (local1565.head() == null) { + SceneGraph.objStacks[Player.plane][local23][local19] = null; + } + spawnGroundObject(local19, local23); + } + } + } + } + + @OriginalMember(owner = "client!g", name = "a", descriptor = "(IZ)V") + public static void readRebuildPacket(@OriginalArg(1) boolean arg0) { + SceneGraph.dynamicMapRegion = arg0; + @Pc(13) int local13; + @Pc(20) int local20; + @Pc(26) int local26; + @Pc(31) int local31; + @Pc(60) int local60; + @Pc(64) int local64; + @Pc(138) int local138; + @Pc(151) int local151; + @Pc(169) int local169; + if (!SceneGraph.dynamicMapRegion) { + local13 = inboundBuffer.g2add(); + local20 = (length - inboundBuffer.offset) / 16; + LoginManager.regionsXteaKeys = new int[local20][4]; + for (local26 = 0; local26 < local20; local26++) { + for (local31 = 0; local31 < 4; local31++) { + LoginManager.regionsXteaKeys[local26][local31] = inboundBuffer.mg4(); + } + } + local26 = inboundBuffer.g1sub(); + local31 = inboundBuffer.g2(); + local60 = inboundBuffer.g2add(); + local64 = inboundBuffer.g2add(); + LoginManager.regionBitPacked = new int[local20]; + LoginManager.mapFilesBuffer = new byte[local20][]; + LoginManager.npcSpawnsFilesBuffer = null; + LoginManager.underWaterMapFileIds = new int[local20]; + LoginManager.locationMapFilesBuffer = new byte[local20][]; + LoginManager.underWaterLocationsMapFilesBuffer = new byte[local20][]; + LoginManager.npcSpawnsFileIds = null; + LoginManager.mapFileIds = new int[local20]; + LoginManager.underWaterMapFilesBuffer = new byte[local20][]; + LoginManager.locationsMapFileIds = new int[local20]; + LoginManager.underWaterLocationsMapFileIds = new int[local20]; + local20 = 0; + @Pc(100) boolean local100 = (local31 / 8 == 48 || local31 / 8 == 49) && local60 / 8 == 48; + if (local31 / 8 == 48 && local60 / 8 == 148) { + local100 = true; + } + for (local138 = (local31 - 6) / 8; local138 <= (local31 + 6) / 8; local138++) { + for (local151 = (local60 - 6) / 8; local151 <= (local60 + 6) / 8; local151++) { + local169 = (local138 << 8) + local151; + if (local100 && (local151 == 49 || local151 == 149 || local151 == 147 || local138 == 50 || local138 == 49 && local151 == 47)) { + LoginManager.regionBitPacked[local20] = local169; + LoginManager.mapFileIds[local20] = -1; + LoginManager.locationsMapFileIds[local20] = -1; + LoginManager.underWaterMapFileIds[local20] = -1; + LoginManager.underWaterLocationsMapFileIds[local20] = -1; + } else { + LoginManager.regionBitPacked[local20] = local169; + LoginManager.mapFileIds[local20] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{LoginManager.aClass100_558, JagString.parseInt(local138), LoginManager.UNDERSCORE, JagString.parseInt(local151)})); + LoginManager.locationsMapFileIds[local20] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{LoginManager.aClass100_1090, JagString.parseInt(local138), LoginManager.UNDERSCORE, JagString.parseInt(local151)})); + LoginManager.underWaterMapFileIds[local20] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{LoginManager.aClass100_772, JagString.parseInt(local138), LoginManager.UNDERSCORE, JagString.parseInt(local151)})); + LoginManager.underWaterLocationsMapFileIds[local20] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{LoginManager.aClass100_1103, JagString.parseInt(local138), LoginManager.UNDERSCORE, JagString.parseInt(local151)})); + } + local20++; + } + } + LoginManager.method2463(local26, local60, local31, local64, false, local13); + return; + } + local13 = inboundBuffer.ig2add(); + local20 = inboundBuffer.ig2add(); + local26 = inboundBuffer.g1sub(); + local31 = inboundBuffer.ig2add(); + inboundBuffer.accessBits(); + @Pc(391) int local391; + for (local60 = 0; local60 < 4; local60++) { + for (local64 = 0; local64 < 13; local64++) { + for (local391 = 0; local391 < 13; local391++) { + local138 = inboundBuffer.gBits(1); + if (local138 == 1) { + anIntArrayArrayArray18[local60][local64][local391] = inboundBuffer.gBits(26); + } else { + anIntArrayArrayArray18[local60][local64][local391] = -1; + } + } + } + } + inboundBuffer.accessBytes(); + local60 = (length - inboundBuffer.offset) / 16; + LoginManager.regionsXteaKeys = new int[local60][4]; + for (local64 = 0; local64 < local60; local64++) { + for (local391 = 0; local391 < 4; local391++) { + LoginManager.regionsXteaKeys[local64][local391] = inboundBuffer.mg4(); + } + } + local64 = inboundBuffer.g2(); + LoginManager.underWaterLocationsMapFileIds = new int[local60]; + LoginManager.locationsMapFileIds = new int[local60]; + LoginManager.mapFileIds = new int[local60]; + LoginManager.underWaterLocationsMapFilesBuffer = new byte[local60][]; + LoginManager.npcSpawnsFileIds = null; + LoginManager.underWaterMapFileIds = new int[local60]; + LoginManager.locationMapFilesBuffer = new byte[local60][]; + LoginManager.mapFilesBuffer = new byte[local60][]; + LoginManager.regionBitPacked = new int[local60]; + LoginManager.npcSpawnsFilesBuffer = null; + LoginManager.underWaterMapFilesBuffer = new byte[local60][]; + local60 = 0; + for (local391 = 0; local391 < 4; local391++) { + for (local138 = 0; local138 < 13; local138++) { + for (local151 = 0; local151 < 13; local151++) { + local169 = anIntArrayArrayArray18[local391][local138][local151]; + if (local169 != -1) { + @Pc(555) int local555 = local169 >> 14 & 0x3FF; + @Pc(561) int local561 = local169 >> 3 & 0x7FF; + @Pc(571) int local571 = local561 / 8 + (local555 / 8 << 8); + @Pc(573) int local573; + for (local573 = 0; local573 < local60; local573++) { + if (local571 == LoginManager.regionBitPacked[local573]) { + local571 = -1; + break; + } + } + if (local571 != -1) { + LoginManager.regionBitPacked[local60] = local571; + @Pc(609) int local609 = local571 & 0xFF; + local573 = local571 >> 8 & 0xFF; + LoginManager.mapFileIds[local60] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{LoginManager.aClass100_558, JagString.parseInt(local573), LoginManager.UNDERSCORE, JagString.parseInt(local609)})); + LoginManager.locationsMapFileIds[local60] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{LoginManager.aClass100_1090, JagString.parseInt(local573), LoginManager.UNDERSCORE, JagString.parseInt(local609)})); + LoginManager.underWaterMapFileIds[local60] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{LoginManager.aClass100_772, JagString.parseInt(local573), LoginManager.UNDERSCORE, JagString.parseInt(local609)})); + LoginManager.underWaterLocationsMapFileIds[local60] = client.js5Archive5.getGroupId(JagString.concatenate(new JagString[]{LoginManager.aClass100_1103, JagString.parseInt(local573), LoginManager.UNDERSCORE, JagString.parseInt(local609)})); + local60++; + } + } + } + } + } + LoginManager.method2463(local26, local64, local20, local31, false, local13); + } + + @OriginalMember(owner = "client!gk", name = "a", descriptor = "(IIBLclient!e;)V") + public static void readExtendedPlayerInfo(@OriginalArg(0) int flags, @OriginalArg(1) int id, @OriginalArg(3) Player player) { + @Pc(13) int int1; + @Pc(17) int int2; + @Pc(24) int local24; + if ((flags & 0x80) != 0) { + int1 = inboundBuffer.ig2(); + int2 = inboundBuffer.g1(); + @Pc(21) int local21 = inboundBuffer.g1(); + local24 = inboundBuffer.offset; + @Pc(35) boolean local35 = (int1 & 0x8000) != 0; + if (player.username != null && player.appearance != null) { + @Pc(48) long local48 = player.username.encode37(); + @Pc(50) boolean ignore = false; + if (int2 <= 1) { + if (!local35 && (LoginManager.playerUnderage && !LoginManager.parentalChatConsent || LoginManager.mapQuickChat)) { + ignore = true; + } else { + for (@Pc(69) int local69 = 0; local69 < IgnoreList.size; local69++) { + if (IgnoreList.encodedUsernames[local69] == local48) { + ignore = true; + break; + } + } + } + } + if (!ignore && Player.inTutorialIsland == 0) { + chatBuffer.offset = 0; + inboundBuffer.igdata(local21, chatBuffer.data); + chatBuffer.offset = 0; + @Pc(106) int local106 = -1; + @Pc(127) JagString message; + if (local35) { + @Pc(112) QuickChatPhrase phrase = QuickChatPhraseType.method3568(chatBuffer); + int1 &= 0x7FFF; + local106 = phrase.id; + message = phrase.type.decodeMessage(chatBuffer); + } else { + message = Font.escape(formatChatMessage(chatBuffer).encodeMessage()); + } + player.chatMessage = message.trim(); + player.chatEffect = int1 & 0xFF; + player.chatLoops = 150; + player.chatColor = int1 >> 8; + if (int2 != 0) + Chat.add(local106, local35 ? 17 : 1, message, null, JagString.concatenate(new JagString[]{getChatIcon(int2), player.getName()})); + else + Chat.add(local106, local35 ? 17 : 2, message, null, player.getName()); + } + } + inboundBuffer.offset = local24 + local21; + } + if ((flags & 0x1) != 0) { + int1 = inboundBuffer.gsmarts(); + int2 = inboundBuffer.g1add(); + player.addHit(int2, client.loop, int1); + player.hitpointsBarVisibleUntil = client.loop + 300; + player.hitpointsBar = inboundBuffer.g1sub(); + } + if ((flags & 0x8) != 0) { + int1 = inboundBuffer.g2(); + if (int1 == 65535) { + int1 = -1; + } + int2 = inboundBuffer.g1(); + Player.animate(int2, int1, player); + } + if ((flags & 0x4) != 0) { + int1 = inboundBuffer.g1add(); + @Pc(309) byte[] bytes = new byte[int1]; + @Pc(314) Buffer buffer = new Buffer(bytes); + inboundBuffer.gdata(int1, bytes); + PlayerList.appearanceCache[id] = buffer; + player.decodeAppearance(buffer); + } + if ((flags & 0x2) != 0) { + player.faceEntity = inboundBuffer.g2add(); + if (player.faceEntity == 65535) { + player.faceEntity = -1; + } + } + if ((flags & 0x400) != 0) { + player.forceMoveStartX = inboundBuffer.g1neg(); + player.forceMoveStartY = inboundBuffer.g1(); + player.forceMoveDestX = inboundBuffer.g1add(); + player.forceMoveDestY = inboundBuffer.g1(); + player.forceMoveCyclesToStart = inboundBuffer.ig2() + client.loop; + player.forceMoveCyclesToDest = inboundBuffer.ig2() + client.loop; + player.forceMoveDirection = inboundBuffer.g1neg(); + player.movementQueueSize = 1; + player.anInt3405 = 0; + } + if ((flags & 0x20) != 0) { + player.chatMessage = inboundBuffer.gjstr(); + if (player.chatMessage.charAt(0) == 126) { + player.chatMessage = player.chatMessage.substring(1); + Chat.add(player.getName(), 2, player.chatMessage); + } else if (player == PlayerList.self) { + Chat.add(player.getName(), 2, player.chatMessage); + } + player.chatEffect = 0; + player.chatColor = 0; + player.chatLoops = 150; + } + if ((flags & 0x200) != 0) { + int1 = inboundBuffer.gsmarts(); + int2 = inboundBuffer.g1sub(); + player.addHit(int2, client.loop, int1); + } + if ((flags & 0x800) != 0) { + int1 = inboundBuffer.g1neg(); + @Pc(502) int[] seqIds = new int[int1]; + @Pc(505) int[] delays = new int[int1]; + @Pc(508) int[] slotMasks = new int[int1]; + for (@Pc(510) int i = 0; i < int1; i++) { + @Pc(521) int seqId = inboundBuffer.ig2(); + if (seqId == 65535) { + seqId = -1; + } + seqIds[i] = seqId; + delays[i] = inboundBuffer.g1add(); + slotMasks[i] = inboundBuffer.g2(); + } + Player.method865(delays, seqIds, player, slotMasks); + } + if ((flags & 0x100) != 0) { + int1 = inboundBuffer.ig2(); + if (int1 == 65535) { + int1 = -1; + } + int2 = inboundBuffer.mg4(); + @Pc(573) boolean local573 = int1 == -1 || player.spotAnimId == -1 || SeqTypeList.get(SpotAnimTypeList.get(int1).seqId).priority >= SeqTypeList.get(SpotAnimTypeList.get(player.spotAnimId).seqId).priority; + if (local573) { + player.spotAnimStart = (int2 & 0xFFFF) + client.loop; + player.anInt3361 = 0; + player.anInt3399 = 0; + player.spotAnimId = int1; + if (player.spotAnimStart > client.loop) { + player.anInt3399 = -1; + } + player.spotAnimY = int2 >> 16; + player.anInt3418 = 1; + if (player.spotAnimId != -1 && client.loop == player.spotAnimStart) { + local24 = SpotAnimTypeList.get(player.spotAnimId).seqId; + if (local24 != -1) { + @Pc(663) SeqType local663 = SeqTypeList.get(local24); + if (local663 != null && local663.frames != null) { + SoundPlayer.playSeqSound(player.zFine, local663, player.xFine, player == PlayerList.self, 0); + } + } + } + } + } + if ((flags & 0x40) != 0) { + player.faceX = inboundBuffer.g2(); + player.faceY = inboundBuffer.ig2add(); + } + } + + @OriginalMember(owner = "client!fb", name = "b", descriptor = "(B)V") + public static void readPlayerInfoPacket() { + extendedCount = 0; + removedCount = 0; + readSelfPlayerInfo(); + readPlayerInfo(); + readNewPlayerInfo(); + readExtendedPlayerInfo(); + @Pc(23) int i; + for (i = 0; i < removedCount; i++) { + @Pc(30) int local30 = removedIds[i]; + if (client.loop != PlayerList.players[local30].lastSeenLoop) { + if (PlayerList.players[local30].soundRadius > 0) { + AreaSoundManager.remove(PlayerList.players[local30]); + } + PlayerList.players[local30] = null; + } + } + if (length != inboundBuffer.offset) { + throw new RuntimeException("gpp1 pos:" + inboundBuffer.offset + " psize:" + length); + } + for (i = 0; i < PlayerList.size; i++) { + if (PlayerList.players[PlayerList.ids[i]] == null) { + throw new RuntimeException("gpp2 pos:" + i + " size:" + PlayerList.size); + } + } + } + + @OriginalMember(owner = "client!bg", name = "a", descriptor = "(B)V") + public static void readSelfPlayerInfo() { + inboundBuffer.accessBits(); + @Pc(11) int upated = inboundBuffer.gBits(1); + if (upated == 0) { + return; + } + @Pc(23) int type = inboundBuffer.gBits(2); + if (type == 0) { + extendedIds[extendedCount++] = 2047; + return; + } + @Pc(54) int local54; + @Pc(64) int local64; + if (type == 1) { + local54 = inboundBuffer.gBits(3); + PlayerList.self.move(1, local54); + local64 = inboundBuffer.gBits(1); + if (local64 == 1) { + extendedIds[extendedCount++] = 2047; + } + } else if (type == 2) { + if (inboundBuffer.gBits(1) == 1) { + local54 = inboundBuffer.gBits(3); + PlayerList.self.move(2, local54); + local64 = inboundBuffer.gBits(3); + PlayerList.self.move(2, local64); + } else { + local54 = inboundBuffer.gBits(3); + PlayerList.self.move(0, local54); + } + local54 = inboundBuffer.gBits(1); + if (local54 == 1) { + extendedIds[extendedCount++] = 2047; + } + } else if (type == 3) { + local54 = inboundBuffer.gBits(7); + local64 = inboundBuffer.gBits(1); + Player.plane = inboundBuffer.gBits(2); + @Pc(163) int local163 = inboundBuffer.gBits(1); + if (local163 == 1) { + extendedIds[extendedCount++] = 2047; + } + @Pc(181) int x = inboundBuffer.gBits(7); + PlayerList.self.teleport(x, local64 == 1, local54); + } + } + + @OriginalMember(owner = "client!dc", name = "b", descriptor = "(Z)V") + public static void readPlayerInfo() { + @Pc(6) int local6 = inboundBuffer.gBits(8); + @Pc(20) int local20; + if (PlayerList.size > local6) { + for (local20 = local6; local20 < PlayerList.size; local20++) { + removedIds[removedCount++] = PlayerList.ids[local20]; + } + } + if (local6 > PlayerList.size) { + throw new RuntimeException("gppov1"); + } + PlayerList.size = 0; + for (local20 = 0; local20 < local6; local20++) { + @Pc(75) int local75 = PlayerList.ids[local20]; + @Pc(79) Player local79 = PlayerList.players[local75]; + @Pc(84) int local84 = inboundBuffer.gBits(1); + if (local84 == 0) { + PlayerList.ids[PlayerList.size++] = local75; + local79.lastSeenLoop = client.loop; + } else { + @Pc(107) int local107 = inboundBuffer.gBits(2); + if (local107 == 0) { + PlayerList.ids[PlayerList.size++] = local75; + local79.lastSeenLoop = client.loop; + extendedIds[extendedCount++] = local75; + } else { + @Pc(153) int local153; + @Pc(163) int local163; + if (local107 == 1) { + PlayerList.ids[PlayerList.size++] = local75; + local79.lastSeenLoop = client.loop; + local153 = inboundBuffer.gBits(3); + local79.move(1, local153); + local163 = inboundBuffer.gBits(1); + if (local163 == 1) { + extendedIds[extendedCount++] = local75; + } + } else if (local107 == 2) { + PlayerList.ids[PlayerList.size++] = local75; + local79.lastSeenLoop = client.loop; + if (inboundBuffer.gBits(1) == 1) { + local153 = inboundBuffer.gBits(3); + local79.move(2, local153); + local163 = inboundBuffer.gBits(3); + local79.move(2, local163); + } else { + local153 = inboundBuffer.gBits(3); + local79.move(0, local153); + } + local153 = inboundBuffer.gBits(1); + if (local153 == 1) { + extendedIds[extendedCount++] = local75; + } + } else if (local107 == 3) { + removedIds[removedCount++] = local75; + } + } + } + } + } + + @OriginalMember(owner = "client!se", name = "a", descriptor = "(I)V") + public static void readNewPlayerInfo() { + while (true) { + if (inboundBuffer.method2241(length) >= 11) { + @Pc(20) int local20 = inboundBuffer.gBits(11); + if (local20 != 2047) { + @Pc(27) boolean local27 = false; + if (PlayerList.players[local20] == null) { + PlayerList.players[local20] = new Player(); + local27 = true; + if (PlayerList.appearanceCache[local20] != null) { + PlayerList.players[local20].decodeAppearance(PlayerList.appearanceCache[local20]); + } + } + PlayerList.ids[PlayerList.size++] = local20; + @Pc(65) Player local65 = PlayerList.players[local20]; + local65.lastSeenLoop = client.loop; + @Pc(73) int local73 = inboundBuffer.gBits(1); + if (local73 == 1) { + extendedIds[extendedCount++] = local20; + } + @Pc(92) int local92 = inboundBuffer.gBits(5); + @Pc(99) int local99 = PathingEntity.ANGLES[inboundBuffer.gBits(3)]; + if (local92 > 15) { + local92 -= 32; + } + if (local27) { + local65.anInt3400 = local65.anInt3381 = local99; + } + @Pc(116) int local116 = inboundBuffer.gBits(1); + @Pc(121) int local121 = inboundBuffer.gBits(5); + if (local121 > 15) { + local121 -= 32; + } + local65.teleport(local92 + PlayerList.self.movementQueueX[0], local116 == 1, PlayerList.self.movementQueueZ[0] + local121); + continue; + } + } + inboundBuffer.accessBytes(); + return; + } + } + + @OriginalMember(owner = "client!tm", name = "a", descriptor = "(I)V") + public static void readExtendedPlayerInfo() { + for (@Pc(7) int i = 0; i < extendedCount; i++) { + @Pc(31) int id = extendedIds[i]; + @Pc(35) Player player = PlayerList.players[id]; + @Pc(39) int flags = inboundBuffer.g1(); + if ((flags & 0x10) != 0) { + flags += inboundBuffer.g1() << 8; + } + readExtendedPlayerInfo(flags, id, player); + } + } + + @OriginalMember(owner = "client!ac", name = "a", descriptor = "(B)Z") + public static boolean readPacketInternal() throws IOException { + if (socket == null) { + return false; + } + + @Pc(14) int available = socket.available(); + if (available == 0) { + return false; + } + + if (opcode == -1) { + available--; + socket.read(0, 1, inboundBuffer.data); + inboundBuffer.offset = 0; + opcode = inboundBuffer.g1isaac(); + length = PACKET_LENGTHS[opcode]; + } + + if (length == -1) { + if (available <= 0) { + return false; + } + socket.read(0, 1, inboundBuffer.data); + available--; + length = inboundBuffer.data[0] & 0xFF; + } else if (length == -2) { + if (available <= 1) { + return false; + } + available -= 2; + socket.read(0, 2, inboundBuffer.data); + inboundBuffer.offset = 0; + length = inboundBuffer.g2(); + } + + if (length > available) { + return false; + } + + inboundBuffer.offset = 0; + socket.read(0, length, inboundBuffer.data); + opcode4 = opcode3; + opcode3 = opcode2; + opcode2 = opcode; + LoginManager.anInt1862 = 0; + + if (opcode == ServerProt.VARP_SMALL) { + int id = inboundBuffer.g2add(); + @Pc(137) byte value = inboundBuffer.g1bneg(); + VarpDomain.set(value, id); + opcode = -1; + return true; + } else if (opcode == ServerProt.RUN_CS2) { + int tracknum = inboundBuffer.g2(); + JagString argTypes = inboundBuffer.gjstr(); + @Pc(163) Object[] scriptArgs = new Object[argTypes.length() + 1]; + for (int i = argTypes.length() - 1; i >= 0; i--) { + if (argTypes.charAt(i) == 115) { + scriptArgs[i + 1] = inboundBuffer.gjstr(); + } else { + scriptArgs[i + 1] = inboundBuffer.g4(); + } + } + scriptArgs[0] = inboundBuffer.g4(); + setVerifyId(tracknum); + @Pc(226) HookRequest request = new HookRequest(); + request.arguments = scriptArgs; + ScriptRunner.run(request); + opcode = -1; + return true; + } else if (opcode == ServerProt.MESSAGE_GAME) { + @Pc(245) JagString message = inboundBuffer.gjstr(); + if (message.endsWith(TRADEREQ)) { + JagString name = message.substring(message.indexOf(JagString.COLON), 0); + long name37 = name.encode37(); + boolean ignored = false; + for (int i = 0; i < IgnoreList.size; i++) { + if (IgnoreList.encodedUsernames[i] == name37) { + ignored = true; + break; + } + } + if (!ignored && Player.inTutorialIsland == 0) { + Chat.add(name, 4, LocalizedText.TRADEREQ); + } + } else if (message.endsWith(CHALREQ)) { + JagString name = message.substring(message.indexOf(JagString.COLON), 0); + long name37 = name.encode37(); + boolean ignored = false; + for (int i = 0; i < IgnoreList.size; i++) { + if (IgnoreList.encodedUsernames[i] == name37) { + ignored = true; + break; + } + } + if (!ignored && Player.inTutorialIsland == 0) { + JagString local506 = message.substring(message.length() - 9, message.indexOf(JagString.COLON) + 1); + Chat.add(name, 8, local506); + } + } else if (message.endsWith(ASSISTREQ)) { + JagString name = message.substring(message.indexOf(JagString.COLON), 0); + long name37 = name.encode37(); + boolean ignored = false; + for (int i = 0; i < IgnoreList.size; i++) { + if (name37 == IgnoreList.encodedUsernames[i]) { + ignored = true; + break; + } + } + if (!ignored && Player.inTutorialIsland == 0) { + Chat.add(name, 10, JagString.EMPTY); + } + } else if (message.endsWith(CLAN)) { + JagString name = message.substring(message.indexOf(CLAN), 0); + Chat.add(JagString.EMPTY, 11, name); + } else if (message.endsWith(TRADE)) { + JagString name = message.substring(message.indexOf(TRADE), 0); + if (Player.inTutorialIsland == 0) { + Chat.add(JagString.EMPTY, 12, name); + } + } else if (message.endsWith(ASSIST)) { + JagString name = message.substring(message.indexOf(ASSIST), 0); + if (Player.inTutorialIsland == 0) { + Chat.add(JagString.EMPTY, 13, name); + } + } else if (message.endsWith(DUELSTAKE)) { + JagString name = message.substring(message.indexOf(JagString.COLON), 0); + long name37 = name.encode37(); + boolean ignored = false; + for (int i = 0; i < IgnoreList.size; i++) { + if (name37 == IgnoreList.encodedUsernames[i]) { + ignored = true; + break; + } + } + if (!ignored && Player.inTutorialIsland == 0) { + Chat.add(name, 14, JagString.EMPTY); + } + } else if (message.endsWith(DUELFRIEND)) { + JagString name = message.substring(message.indexOf(JagString.COLON), 0); + long name37 = name.encode37(); + boolean ignored = false; + for (int local277 = 0; local277 < IgnoreList.size; local277++) { + if (IgnoreList.encodedUsernames[local277] == name37) { + ignored = true; + break; + } + } + if (!ignored && Player.inTutorialIsland == 0) { + Chat.add(name, 15, JagString.EMPTY); + } + } else if (message.endsWith(aClass100_916)) { + JagString name = message.substring(message.indexOf(JagString.COLON), 0); + long name37 = name.encode37(); + boolean ignored = false; + for (int i = 0; i < IgnoreList.size; i++) { + if (name37 == IgnoreList.encodedUsernames[i]) { + ignored = true; + break; + } + } + if (!ignored && Player.inTutorialIsland == 0) { + Chat.add(name, 16, JagString.EMPTY); + } + } else if (message.endsWith(aClass100_770)) { + JagString name = message.substring(message.indexOf(JagString.COLON), 0); + long name37 = name.encode37(); + boolean ignored = false; + for (int i = 0; i < IgnoreList.size; i++) { + if (IgnoreList.encodedUsernames[i] == name37) { + ignored = true; + break; + } + } + if (!ignored && Player.inTutorialIsland == 0) { + JagString local506 = message.substring(message.length() - 9, message.indexOf(JagString.COLON) + 1); + Chat.add(name, 21, local506); + } + } else { + Chat.add(JagString.EMPTY, 0, message); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_SETTEXT3) { + int id = inboundBuffer.ig2(); + int tracknum = inboundBuffer.g2add(); + JagString value = inboundBuffer.gjstr(); + setVerifyId(tracknum); + DelayedStateChange.method3498(value, id); + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_ZONE_PARTIAL_ENCLOSED) { + SceneGraph.currentChunkZ = inboundBuffer.g1add(); + SceneGraph.currentChunkX = inboundBuffer.g1sub(); + while (length > inboundBuffer.offset) { + opcode = inboundBuffer.g1(); + readZonePacket(); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.CLEAR_MINIMAP_FLAG) { + opcode = -1; + LoginManager.mapFlagX = 0; + return true; + } else if (opcode == ServerProt.IF_SETSCROLLPOS) { + int id = inboundBuffer.mg4(); + int pos = inboundBuffer.ig2(); + int tracknum = inboundBuffer.g2(); + setVerifyId(tracknum); + DelayedStateChange.method3938(pos, id); + opcode = -1; + return true; + } else if (opcode == ServerProt.CLAN_QUICK_CHAT) { + long name37 = inboundBuffer.g8(); + inboundBuffer.g1b(); + long clan37 = inboundBuffer.g8(); + int top = inboundBuffer.g2(); + int bot = inboundBuffer.g3(); + int rights = inboundBuffer.g1(); + int quickchatId = inboundBuffer.g2(); + + @Pc(910) boolean ignored = false; + @Pc(922) long messageId = ((long) top << 32) + bot; + @Pc(924) int n = 0; + + check: + while (true) { + if (n < 100) { + if (messageId != Chat.recentMessages[n]) { + n++; + continue; + } + ignored = true; + break; + } + if (rights <= 1) { + for (n = 0; n < IgnoreList.size; n++) { + if (IgnoreList.encodedUsernames[n] == name37) { + ignored = true; + break check; + } + } + } + break; + } + if (!ignored && Player.inTutorialIsland == 0) { + Chat.recentMessages[Chat.messageCounter] = messageId; + Chat.messageCounter = (Chat.messageCounter + 1) % 100; + @Pc(999) JagString message = QuickChatPhraseTypeList.get(quickchatId).decodeMessage(inboundBuffer); + Chat.add(quickchatId, 20, message, Base37.decode37(clan37).toTitleCase(), JagString.concatenate(new JagString[]{getChatIcon(rights), Base37.decode37(name37).toTitleCase()})); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.JOIN_CLAN_CHAT) { + ClanChat.transmitAt = InterfaceList.transmitTimer; + long owner37 = inboundBuffer.g8(); + if (owner37 == 0L) { + ClanChat.owner = null; + opcode = -1; + ClanChat.name = null; + ClanChat.members = null; + ClanChat.size = 0; + return true; + } + + long name37 = inboundBuffer.g8(); + ClanChat.name = Base37.decode37(name37); + ClanChat.owner = Base37.decode37(owner37); + ClanChat.minKick = inboundBuffer.g1b(); + int clanSize = inboundBuffer.g1(); + if (clanSize == 255) { + opcode = -1; + return true; + } + + ClanChat.size = clanSize; + @Pc(1158) ClanMember[] members = new ClanMember[100]; + for (int i = 0; i < ClanChat.size; i++) { + members[i] = new ClanMember(); + members[i].key = inboundBuffer.g8(); + members[i].username = Base37.decode37(members[i].key); + members[i].world = inboundBuffer.g2(); + members[i].rank = inboundBuffer.g1b(); + members[i].worldName = inboundBuffer.gjstr(); + if (members[i].key == Player.name37) { + ClanChat.rank = members[i].rank; + } + } + + int count = ClanChat.size; + while (count > 0) { + boolean local1245 = true; + count--; + for (int i = 0; i < count; i++) { + if (members[i].username.method3139(members[i + 1].username) > 0) { + local1245 = false; + @Pc(1279) ClanMember member = members[i]; + members[i] = members[i + 1]; + members[i + 1] = member; + } + } + if (local1245) { + break; + } + } + ClanChat.members = members; + opcode = -1; + return true; + } else if (opcode == ServerProt.LAST_LOGIN_INFO) { + int ip32 = inboundBuffer.img4(); + Player.lastLogAddress = GameShell.signLink.getReverseDns(ip32); + opcode = -1; + return true; + } else if (opcode == ServerProt.PLAYER_INFO) { + readPlayerInfoPacket(); + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_SETTEXT2) { + int tracknum = inboundBuffer.g2(); + JagString text = inboundBuffer.gjstr(); + int id = inboundBuffer.ig2add(); + setVerifyId(tracknum); + DelayedStateChange.method3498(text, id); + opcode = -1; + return true; + } else if (opcode == ServerProt.CHAT_FILTER_SETTINGS) { + Chat.publicFilter = inboundBuffer.g1(); + Chat.privateFilter = inboundBuffer.g1(); + Chat.tradeFilter = inboundBuffer.g1(); + opcode = -1; + return true; + } else if (opcode == ServerProt.SET_INTERACTION) { + int cursor = inboundBuffer.ig2add(); + if (cursor == 65535) { + cursor = -1; + } + int top = inboundBuffer.g1(); + int optId = inboundBuffer.g1(); + JagString option = inboundBuffer.gjstr(); + if (optId >= 1 && optId <= 8) { + if (option.equalsIgnoreCase(MiniMenu.NULL)) { + option = null; + } + Player.options[optId - 1] = option; + Player.cursors[optId - 1] = cursor; + Player.secondaryOptions[optId - 1] = top == 0; + } + opcode = -1; + return true; + } else if (opcode == ServerProt.VARP_LARGE) { + int value = inboundBuffer.g4(); + int id = inboundBuffer.g2add(); + VarpDomain.set(value, id); + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_SETHIDE) { + int parent = inboundBuffer.g1neg(); + int tracknum = inboundBuffer.g2(); + int reset = inboundBuffer.ig4(); + setVerifyId(tracknum); + DelayedStateChange.method2905(reset, parent); + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_OPENSUB) { + int parent = inboundBuffer.ig2add(); + int reset = inboundBuffer.g1add(); + int tracknum = inboundBuffer.ig2add(); + setVerifyId(tracknum); + if (reset == 2) { + WorldMap.reset(); + } + InterfaceList.topLevelInterface = parent; + InterfaceList.method1753(parent); + InterfaceList.method3712(false); + InterfaceList.method1626(InterfaceList.topLevelInterface); + for (int i = 0; i < 100; i++) { + InterfaceList.aBooleanArray100[i] = true; + } + opcode = -1; + return true; + } else if (opcode == ServerProt.CLIENT_SETVARC_LARGE) { + int tracknum = inboundBuffer.ig2add(); + int value = inboundBuffer.g4(); + int id = inboundBuffer.g2add(); + setVerifyId(tracknum); + DelayedStateChange.updateVarC(id, value); + opcode = -1; + return true; + } else if (opcode == ServerProt.MESSAGE_QUICKCHAT_PRIVATE_ECHO) { + long name37 = inboundBuffer.g8(); + int chatId = inboundBuffer.g2(); + JagString message = QuickChatPhraseTypeList.get(chatId).decodeMessage(inboundBuffer); + Chat.add(chatId, 19, message, null, Base37.decode37(name37).toTitleCase()); + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_UID192) { + writeRandom(inboundBuffer); + opcode = -1; + return true; + } else if (opcode == ServerProt.RESET_CLIENT_VARCACHE) { + VarpDomain.reset(); + InterfaceList.redrawActiveInterfaces(); + VarpDomain.updatedVarpsWriterIndex += 32; + opcode = -1; + return true; + } else if (opcode == ServerProt.CAM_LOOKAT) { + int tracknum = inboundBuffer.g2(); + int tx = inboundBuffer.g1(); + int tz = inboundBuffer.g1(); + int cy = inboundBuffer.g2(); + int step = inboundBuffer.g1(); + int dur = inboundBuffer.g1(); + setVerifyId(tracknum); + Camera.method3849(cy, tz, step, tx, dur); + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_SETANIM) { + int id = inboundBuffer.mg4(); + int value = inboundBuffer.ig2b(); + int tracknum = inboundBuffer.g2add(); + setVerifyId(tracknum); + DelayedStateChange.method3893(id, value); + opcode = -1; + return true; + } else if (opcode == ServerProt.WIDGETSTRUCT_SETTING) { + int value = inboundBuffer.ig2add(); + int parent = inboundBuffer.ig4(); + int tracknum = inboundBuffer.g2add(); + int end = inboundBuffer.ig2(); + if (end == 65535) { + end = -1; + } + int start = inboundBuffer.g2add(); + if (start == 65535) { + start = -1; + } + setVerifyId(tracknum); + ServerActiveProperties properties; + for (int slot = start; slot <= end; slot++) { + long ptr = (long) slot + ((long) parent << 32); + ServerActiveProperties prev = (ServerActiveProperties) InterfaceList.properties.get(ptr); + if (prev != null) { + properties = new ServerActiveProperties(prev.events, value); + prev.unlink(); + } else if (slot == -1) { + properties = new ServerActiveProperties(InterfaceList.getComponent(parent).properties.events, value); + } else { + properties = new ServerActiveProperties(0, value); + } + InterfaceList.properties.put(properties, ptr); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.SPOTANIM_ENTITY) { + int delay = inboundBuffer.g2(); + int height = inboundBuffer.ig2(); + int target = inboundBuffer.img4(); + int gfxId = inboundBuffer.ig2add(); + if (target >> 30 == 0) { + @Pc(1994) SeqType seq; + if (target >> 29 != 0) { + int npcId = target & 0xFFFF; + @Pc(1894) Npc npc = NpcList.npcs[npcId]; + if (npc != null) { + if (gfxId == 65535) { + gfxId = -1; + } + boolean animated = gfxId == -1 || npc.spotAnimId == -1 || SeqTypeList.get(SpotAnimTypeList.get(gfxId).seqId).priority >= SeqTypeList.get(SpotAnimTypeList.get(npc.spotAnimId).seqId).priority; + if (animated) { + npc.anInt3361 = 0; + npc.spotAnimId = gfxId; + npc.spotAnimStart = client.loop + delay; + npc.anInt3399 = 0; + if (npc.spotAnimStart > client.loop) { + npc.anInt3399 = -1; + } + npc.spotAnimY = height; + npc.anInt3418 = 1; + if (npc.spotAnimId != -1 && client.loop == npc.spotAnimStart) { + int seqId = SpotAnimTypeList.get(npc.spotAnimId).seqId; + if (seqId != -1) { + seq = SeqTypeList.get(seqId); + if (seq.frames != null) { + SoundPlayer.playSeqSound(npc.zFine, seq, npc.xFine, false, 0); + } + } + } + } + } + } else if (target >> 28 != 0) { + int playerId = target & 0xFFFF; + @Pc(2033) Player player; + if (PlayerList.selfId == playerId) { + player = PlayerList.self; + } else { + player = PlayerList.players[playerId]; + } + if (player != null) { + if (gfxId == 65535) { + gfxId = -1; + } + boolean animated = gfxId == -1 || player.spotAnimId == -1 || SeqTypeList.get(SpotAnimTypeList.get(gfxId).seqId).priority >= SeqTypeList.get(SpotAnimTypeList.get(player.spotAnimId).seqId).priority; + if (animated) { + player.spotAnimStart = delay + client.loop; + player.spotAnimY = height; + player.spotAnimId = gfxId; + player.anInt3418 = 1; + player.anInt3361 = 0; + player.anInt3399 = 0; + if (player.spotAnimStart > client.loop) { + player.anInt3399 = -1; + } + if (player.spotAnimId != -1 && player.spotAnimStart == client.loop) { + int seqId = SpotAnimTypeList.get(player.spotAnimId).seqId; + if (seqId != -1) { + seq = SeqTypeList.get(seqId); + if (seq.frames != null) { + SoundPlayer.playSeqSound(player.zFine, seq, player.xFine, player == PlayerList.self, 0); + } + } + } + } + } + } + } else { + int plane = target >> 28 & 0x3; + int posX = (target >> 14 & 0x3FFF) - Camera.originX; + int posZ = (target & 0x3FFF) - Camera.originZ; + if (posX >= 0 && posZ >= 0 && posX < 104 && posZ < 104) { + posZ = posZ * 128 + 64; + posX = posX * 128 + 64; + @Pc(2241) SpotAnim spotAnim = new SpotAnim(gfxId, plane, posX, posZ, SceneGraph.getTileHeight(plane, posX, posZ) - height, delay, client.loop); + SceneGraph.spotanims.addTail(new SpotAnimNode(spotAnim)); + } + } + opcode = -1; + return true; + } else if (opcode == ServerProt.INTERFACE_ANIMATE_ROTATE) { + int ptr = inboundBuffer.mg4(); + int tracknum = inboundBuffer.g2add(); + int pitchStep = inboundBuffer.g2(); + int yawStep = inboundBuffer.g2add(); + setVerifyId(tracknum); + DelayedStateChange.setComponentModelRotationSpeedServer(yawStep + (pitchStep << 16), ptr); + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_STAT) { + InterfaceList.redrawActiveInterfaces(); + int level = inboundBuffer.g1add(); + int xp = inboundBuffer.img4(); + int skill = inboundBuffer.g1(); + PlayerSkillXpTable.experience[skill] = xp; + PlayerSkillXpTable.boostedLevels[skill] = level; + PlayerSkillXpTable.baseLevels[skill] = 1; + for (int i = 0; i < 98; i++) { + if (PlayerSkillXpTable.xpLevelLookup[i] <= xp) { + PlayerSkillXpTable.baseLevels[skill] = i + 2; + } + } + PluginRepository.OnXPUpdate(skill, xp); + PlayerSkillXpTable.updatedStats[PlayerSkillXpTable.updatedStatsWriterIndex++ & 0x1F] = skill; + opcode = -1; + return true; + } else if (opcode == ServerProt.MAP_PROJANIM || opcode == ServerProt.MAP_PROJANIM_3 || opcode == ServerProt.SOUND_AREA || opcode == ServerProt.OBJ_COUNT || opcode == ServerProt.LOC_ADD_CHANGE || opcode == ServerProt.OBJ_ADD || opcode == ServerProt.SPOTANIM_SPECIFIC || opcode == ServerProt.MAP_PROJANIM_2 || opcode == ServerProt.OBJ_DEL || opcode == ServerProt.OBJ_REVEAL || opcode == ServerProt.LOC_ANIM || opcode == ServerProt.LOC_DEL || opcode == ServerProt.LOC_ADD) { + readZonePacket(); + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_CLOSESUB) { + int tracknum = inboundBuffer.g2(); + int id = inboundBuffer.g4(); + setVerifyId(tracknum); + @Pc(2441) ComponentPointer pointer = (ComponentPointer) InterfaceList.openInterfaces.get(id); + if (pointer != null) { + InterfaceList.closeInterface(true, pointer); + } + if (Cs1ScriptRunner.aClass13_10 != null) { + InterfaceList.redraw(Cs1ScriptRunner.aClass13_10); + Cs1ScriptRunner.aClass13_10 = null; + } + opcode = -1; + return true; + } else if (opcode == ServerProt.CAM_FORCEANGLE) { + int yaw = inboundBuffer.ig2(); + int tracknum = inboundBuffer.g2(); + int pitch = inboundBuffer.g2(); + setVerifyId(tracknum); + Camera.yawTarget = yaw; + Camera.pitchTarget = pitch; + if (Camera.cameraType == 2) { + Camera.cameraPitch = (int) Camera.pitchTarget; + Camera.cameraYaw = (int) Camera.yawTarget; + } + Camera.clampCameraAngle(); + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_SETANGLE) { + int pitch = inboundBuffer.g2(); + int tracknum = inboundBuffer.g2add(); + int scale = inboundBuffer.ig2add(); + int yaw = inboundBuffer.ig2add(); + int ptr = inboundBuffer.g4(); + setVerifyId(tracknum); + DelayedStateChange.updateView(scale, ptr, yaw, pitch); + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_ZONE_FULL_FOLLOWS) { + SceneGraph.currentChunkX = inboundBuffer.g1(); + SceneGraph.currentChunkZ = inboundBuffer.g1neg(); + for (int x = SceneGraph.currentChunkX; x < SceneGraph.currentChunkX + 8; x++) { + for (int z = SceneGraph.currentChunkZ; z < SceneGraph.currentChunkZ + 8; z++) { + if (SceneGraph.objStacks[Player.plane][x][z] != null) { + SceneGraph.objStacks[Player.plane][x][z] = null; + spawnGroundObject(z, x); + } + } + } + for (@Pc(2604) ChangeLocRequest loc = (ChangeLocRequest) ChangeLocRequest.queue.head(); loc != null; loc = (ChangeLocRequest) ChangeLocRequest.queue.next()) { + if (loc.x >= SceneGraph.currentChunkX && SceneGraph.currentChunkX + 8 > loc.x && loc.z >= SceneGraph.currentChunkZ && loc.z < SceneGraph.currentChunkZ + 8 && loc.level == Player.plane) { + loc.resetLoops = 0; + } + } + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_INV_CLEAR) { + int id = inboundBuffer.mg4(); + @Pc(2666) Component component = InterfaceList.getComponent(id); + for (int i = 0; i < component.objTypes.length; i++) { + component.objTypes[i] = -1; + component.objTypes[i] = 0; + } + InterfaceList.redraw(component); + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_SETMODEL) { + int id = inboundBuffer.ig4(); + int tracknum = inboundBuffer.ig2add(); + int modelId = inboundBuffer.g2add(); + if (modelId == 65535) { + modelId = -1; + } + setVerifyId(tracknum); + DelayedStateChange.updateComponentModel(-1, 1, id, modelId); + opcode = -1; + return true; + } else if (opcode == ServerProt.SET_MINIMAP_STATE) { + MiniMap.state = inboundBuffer.g1(); + opcode = -1; + return true; + } else if (opcode == ServerProt.TELEPORT_LOCAL_PLAYER) { + int pos1 = inboundBuffer.g1sub(); + int flags = inboundBuffer.g1add(); + int pos2 = inboundBuffer.g1(); + Player.plane = flags >> 1; + PlayerList.self.teleport(pos1, (flags & 0x1) == 1, pos2); + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_FRIENDLIST) { + long name37 = inboundBuffer.g8(); + int worldId = inboundBuffer.g2(); + int x = inboundBuffer.g1(); + boolean ignored = true; + if (name37 < 0L) { + name37 &= Long.MAX_VALUE; + ignored = false; + } + JagString worldName = JagString.EMPTY; + if (worldId > 0) { + worldName = inboundBuffer.gjstr(); + } + @Pc(2834) JagString name = Base37.decode37(name37).toTitleCase(); + for (int i = 0; i < FriendsList.size; i++) { + if (name37 == FriendsList.encodedUsernames[i]) { + if (worldId != FriendsList.worlds[i]) { + FriendsList.worlds[i] = worldId; + if (worldId > 0) { + Chat.add(JagString.EMPTY, 5, JagString.concatenate(new JagString[]{name, LocalizedText.FRIENDLOGIN})); + } + if (worldId == 0) { + Chat.add(JagString.EMPTY, 5, JagString.concatenate(new JagString[]{name, LocalizedText.FRIENDLOGOUT})); + } + } + FriendsList.worldNames[i] = worldName; + FriendsList.ranks[i] = x; + name = null; + FriendsList.sameGame[i] = ignored; + break; + } + } + if (name != null && FriendsList.size < 200) { + FriendsList.encodedUsernames[FriendsList.size] = name37; + FriendsList.usernames[FriendsList.size] = name; + FriendsList.worlds[FriendsList.size] = worldId; + FriendsList.worldNames[FriendsList.size] = worldName; + FriendsList.ranks[FriendsList.size] = x; + FriendsList.sameGame[FriendsList.size] = ignored; + FriendsList.size++; + } + FriendsList.transmitAt = InterfaceList.transmitTimer; + int friendCount = FriendsList.size; + while (friendCount > 0) { + friendCount--; + @Pc(2961) boolean sorting = true; + for (int i = 0; i < friendCount; i++) { + if (FriendsList.worlds[i] != Player.worldId && Player.worldId == FriendsList.worlds[i + 1] || FriendsList.worlds[i] == 0 && FriendsList.worlds[i + 1] != 0) { + sorting = false; + int local3002 = FriendsList.worlds[i]; + FriendsList.worlds[i] = FriendsList.worlds[i + 1]; + FriendsList.worlds[i + 1] = local3002; + JagString local3020 = FriendsList.worldNames[i]; + FriendsList.worldNames[i] = FriendsList.worldNames[i + 1]; + FriendsList.worldNames[i + 1] = local3020; + JagString local3038 = FriendsList.usernames[i]; + FriendsList.usernames[i] = FriendsList.usernames[i + 1]; + FriendsList.usernames[i + 1] = local3038; + @Pc(3056) long local3056 = FriendsList.encodedUsernames[i]; + FriendsList.encodedUsernames[i] = FriendsList.encodedUsernames[i + 1]; + FriendsList.encodedUsernames[i + 1] = local3056; + @Pc(3074) int local3074 = FriendsList.ranks[i]; + FriendsList.ranks[i] = FriendsList.ranks[i + 1]; + FriendsList.ranks[i + 1] = local3074; + @Pc(3092) boolean local3092 = FriendsList.sameGame[i]; + FriendsList.sameGame[i] = FriendsList.sameGame[i + 1]; + FriendsList.sameGame[i + 1] = local3092; + } + } + if (sorting) { + break; + } + } + opcode = -1; + return true; + } else if (opcode == ServerProt.SET_WALK_TEXT) { + if (length == 0) { + MiniMenu.walkText = LocalizedText.WALKHERE; + } else { + MiniMenu.walkText = inboundBuffer.gjstr(); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.FORCE_VARP_REFRESH) { + for (int i = 0; i < VarpDomain.activeVarps.length; i++) { + if (VarpDomain.varp[i] != VarpDomain.activeVarps[i]) { + VarpDomain.activeVarps[i] = VarpDomain.varp[i]; + VarpDomain.refreshMagicVarp(i); + VarpDomain.updatedVarps[VarpDomain.updatedVarpsWriterIndex++ & 0x1F] = i; + } + } + opcode = -1; + return true; + } else if (opcode == ServerProt.CAMERA_DETACH) { + int tracknum = inboundBuffer.g2(); + int local786 = inboundBuffer.g1(); + int modelId = inboundBuffer.g1(); + int counter = inboundBuffer.g2(); + int local1146 = inboundBuffer.g1(); + int local277 = inboundBuffer.g1(); + setVerifyId(tracknum); + Camera.method2722(true, local1146, counter, local277, modelId, local786); + opcode = -1; + return true; + } else if (opcode == ServerProt.MESSAGE_QUICKCHAT_PRIVATE) { + long name = inboundBuffer.g8(); + int top = inboundBuffer.g2(); + int bot = inboundBuffer.g3(); + int rights = inboundBuffer.g1(); + int chatId = inboundBuffer.g2(); + + @Pc(3263) boolean ignore = false; + @Pc(3270) long messageId = ((long) top << 32) + bot; + @Pc(3272) int ix = 0; + + check: + while (true) { + if (ix < 100) { + if (messageId != Chat.recentMessages[ix]) { + ix++; + continue; + } + ignore = true; + break; + } + if (rights <= 1) { + for (ix = 0; ix < IgnoreList.size; ix++) { + if (name == IgnoreList.encodedUsernames[ix]) { + ignore = true; + break check; + } + } + } + break; + } + if (!ignore && Player.inTutorialIsland == 0) { + Chat.recentMessages[Chat.messageCounter] = messageId; + Chat.messageCounter = (Chat.messageCounter + 1) % 100; + JagString message = QuickChatPhraseTypeList.get(chatId).decodeMessage(inboundBuffer); + Chat.add(chatId, 18, message, null, JagString.concatenate(new JagString[]{getChatIcon(rights), Base37.decode37(name).toTitleCase()})); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.SWITCH_WIDGET) { + int source = inboundBuffer.img4(); + int tracknum = inboundBuffer.g2add(); + int target = inboundBuffer.img4(); + setVerifyId(tracknum); + @Pc(3449) ComponentPointer src = (ComponentPointer) InterfaceList.openInterfaces.get(source); + ComponentPointer tgt = (ComponentPointer) InterfaceList.openInterfaces.get(target); + if (tgt != null) { + InterfaceList.closeInterface(src == null || tgt.interfaceId != src.interfaceId, tgt); + } + if (src != null) { + src.unlink(); + InterfaceList.openInterfaces.put(src, target); + } + @Pc(3490) Component component = InterfaceList.getComponent(source); + if (component != null) { + InterfaceList.redraw(component); + } + component = InterfaceList.getComponent(target); + if (component != null) { + InterfaceList.redraw(component); + InterfaceList.method531(component, true); + } + if (InterfaceList.topLevelInterface != -1) { + InterfaceList.runScripts(1, InterfaceList.topLevelInterface); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.CAM_SHAKE) { + int tracknum = inboundBuffer.g2(); + int cameraId = inboundBuffer.g1(); + int jitter = inboundBuffer.g1(); + int amplitude = inboundBuffer.g1(); + int frequency = inboundBuffer.g1(); + int shake4 = inboundBuffer.g2(); + setVerifyId(tracknum); + Camera.customCameraActive[cameraId] = true; + Camera.cameraJitter[cameraId] = jitter; + Camera.cameraAmplitude[cameraId] = amplitude; + Camera.cameraFrequency[cameraId] = frequency; + anIntArray76[cameraId] = shake4; + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_SETCOLOUR) { + int id = inboundBuffer.img4(); + int tracknum = inboundBuffer.g2add(); + int color = inboundBuffer.ig2add(); + setVerifyId(tracknum); + DelayedStateChange.setColor(color, id); + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_REBOOT_TIMER) { + Player.rebootTimer = inboundBuffer.g2() * 30; + opcode = -1; + InterfaceList.miscTransmitAt = InterfaceList.transmitTimer; + return true; + } else if (opcode == ServerProt.REFLECTION_CHEAT_CHECK) { + ReflectionCheck.push(GameShell.signLink, inboundBuffer, length); + opcode = -1; + return true; + } else if (opcode == ServerProt.CLIENT_SETVARC_SMALL) { + int tracknum = inboundBuffer.ig2(); + int value = inboundBuffer.g1neg(); + int id = inboundBuffer.ig2add(); + setVerifyId(tracknum); + DelayedStateChange.updateVarC(id, value); + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_RUNENERGY) { + InterfaceList.redrawActiveInterfaces(); + Player.runEnergy = inboundBuffer.g1(); + InterfaceList.miscTransmitAt = InterfaceList.transmitTimer; + opcode = -1; + return true; + } else if (opcode == ServerProt.GAME_FRAME_UNK) { + if (InterfaceList.topLevelInterface != -1) { + InterfaceList.runScripts(0, InterfaceList.topLevelInterface); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.DELETE_INVENTORY) { + int id = inboundBuffer.ig2(); + Inv.delete(id); + Inv.updatedInventories[Inv.updatedInventoriesWriterIndex++ & 0x1F] = id & 0x7FFF; + opcode = -1; + return true; + } else if (opcode == ServerProt.NPC_ANIM_SPECIFIC) { + int npcId = inboundBuffer.ig2(); + int value = inboundBuffer.g1sub(); + int seqId = inboundBuffer.g2(); + @Pc(3766) Npc npc = NpcList.npcs[npcId]; + if (npc != null) { + animateNpc(value, seqId, npc); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_RUNWEIGHT) { + InterfaceList.redrawActiveInterfaces(); + Player.weight = inboundBuffer.g2b(); + InterfaceList.miscTransmitAt = InterfaceList.transmitTimer; + opcode = -1; + return true; + } else if (opcode == ServerProt.MESSAGE_PRIVATE_ECHO) { + long name37 = inboundBuffer.g8(); + JagString message = Font.escape(formatChatMessage(inboundBuffer).encodeMessage()); + Chat.add(Base37.decode37(name37).toTitleCase(), 6, message); + opcode = -1; + return true; + } else if (opcode == ServerProt.URL_OPEN) { + if (GameShell.fullScreenFrame != null) { + DisplayMode.setWindowMode(false, Preferences.favoriteWorlds, -1, -1); + } + @Pc(3848) byte[] data = new byte[length]; + inboundBuffer.gBytesIsaac(data, length); + JagString url = JagString.decodeString(data, length, 0); + if (GameShell.frame == null && (SignLink.anInt5928 == 3 || !SignLink.osName.startsWith("win") || client.haveIe6)) { + ScriptRunner.openUrl(url, true); + } else { + ScriptRunner.url = url; + newTab = true; + openUrlRequest = GameShell.signLink.openUrl(new String(url.method3148(), StandardCharsets.ISO_8859_1)); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.GENERATE_CHAT_HEAD_FROM_BODY) { + int tracknum = inboundBuffer.g2add(); + int id = inboundBuffer.mg4(); + int value1 = inboundBuffer.ig2add(); + int value2 = inboundBuffer.ig2(); + int value3 = inboundBuffer.ig2add(); + setVerifyId(tracknum); + DelayedStateChange.updateComponentModel(value1, 7, id, value2 << 16 | value3); + opcode = -1; + return true; + } else if (opcode == ServerProt.VARBIT_SMALL) { + int value = inboundBuffer.g1add(); + int id = inboundBuffer.ig2(); + VarpDomain.setVarbit(value, id); + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_OPENTOP) { + int type = inboundBuffer.g1(); + int pointer = inboundBuffer.mg4(); + int tracknum = inboundBuffer.g2add(); + int component = inboundBuffer.g2(); + setVerifyId(tracknum); + ComponentPointer ptr = (ComponentPointer) InterfaceList.openInterfaces.get(pointer); + if (ptr != null) { + InterfaceList.closeInterface(ptr.interfaceId != component, ptr); + } + method1148(component, pointer, type); + opcode = -1; + return true; + } else if (opcode == ServerProt.RESET_ANIMS) { + for (int i = 0; i < PlayerList.players.length; i++) { + if (PlayerList.players[i] != null) { + PlayerList.players[i].seqId = -1; + } + } + for (int i = 0; i < NpcList.npcs.length; i++) { + if (NpcList.npcs[i] != null) { + NpcList.npcs[i].seqId = -1; + } + } + opcode = -1; + return true; + } else if (opcode == ServerProt.HINT_ARROW) { + int flags = inboundBuffer.g1(); + @Pc(4084) MapMarker mapMarker = new MapMarker(); + int slot = flags >> 6; + mapMarker.type = flags & 0x3F; + mapMarker.anInt4048 = inboundBuffer.g1(); + if (mapMarker.anInt4048 >= 0 && mapMarker.anInt4048 < Sprites.headhints.length) { + if (mapMarker.type == 1 || mapMarker.type == 10) { + mapMarker.actorTargetId = inboundBuffer.g2(); + inboundBuffer.offset += 3; + } else if (mapMarker.type >= 2 && mapMarker.type <= 6) { + if (mapMarker.type == 2) { + mapMarker.anInt4045 = 64; + mapMarker.anInt4047 = 64; + } + if (mapMarker.type == 3) { + mapMarker.anInt4045 = 0; + mapMarker.anInt4047 = 64; + } + if (mapMarker.type == 4) { + mapMarker.anInt4045 = 128; + mapMarker.anInt4047 = 64; + } + if (mapMarker.type == 5) { + mapMarker.anInt4045 = 64; + mapMarker.anInt4047 = 0; + } + if (mapMarker.type == 6) { + mapMarker.anInt4045 = 64; + mapMarker.anInt4047 = 128; + } + mapMarker.type = 2; + mapMarker.targetX = inboundBuffer.g2(); + mapMarker.anInt4046 = inboundBuffer.g2(); + mapMarker.anInt4050 = inboundBuffer.g1(); + } + mapMarker.playerModelId = inboundBuffer.g2(); + if (mapMarker.playerModelId == 65535) { + mapMarker.playerModelId = -1; + } + MiniMap.hintMapMarkers[slot] = mapMarker; + } + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_IGNORELIST) { + IgnoreList.size = length / 8; + for (int i = 0; i < IgnoreList.size; i++) { + IgnoreList.encodedUsernames[i] = inboundBuffer.g8(); + IgnoreList.usernames[i] = Base37.decode37(IgnoreList.encodedUsernames[i]); + } + FriendsList.transmitAt = InterfaceList.transmitTimer; + opcode = -1; + return true; + } else if (opcode == ServerProt.NPC_INFO) { + readNpcPacket(); + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_SETPOSITION) { + int tracknum = inboundBuffer.g2add(); + int ptr = inboundBuffer.ig4(); + int x = inboundBuffer.g2b(); + int y = inboundBuffer.g2badd(); + setVerifyId(tracknum); + DelayedStateChange.method4666(x, ptr, y); + opcode = -1; + return true; + } else if (opcode == ServerProt.LOC_ANIM_SPECIFIC) { + int slot = inboundBuffer.g1sub(); + int type = slot >> 2; + int rotation = slot & 0x3; + int type2 = Loc.LAYERS[type]; + int seqId = inboundBuffer.g2(); + int pos = inboundBuffer.g4(); + if (seqId == 65535) { + seqId = -1; + } + int z = pos & 0x3FFF; + int x = pos >> 14 & 0x3FFF; + x -= Camera.originX; + z -= Camera.originZ; + int plane = pos >> 28 & 0x3; + SceneGraph.method1881(plane, rotation, type, z, type2, x, seqId); + opcode = -1; + return true; + } else if (opcode == ServerProt.MESSAGE_PRIVATE) { + long name37 = inboundBuffer.g8(); + int top = inboundBuffer.g2(); + int bot = inboundBuffer.g3(); + int rights = inboundBuffer.g1(); + @Pc(4425) boolean ignored = false; + @Pc(4431) long messageId = bot + ((long) top << 32); + int ix = 0; + check: + while (true) { + if (ix >= 100) { + if (rights <= 1) { + if (LoginManager.playerUnderage && !LoginManager.parentalChatConsent || LoginManager.mapQuickChat) { + ignored = true; + } else { + for (ix = 0; ix < IgnoreList.size; ix++) { + if (name37 == IgnoreList.encodedUsernames[ix]) { + ignored = true; + break check; + } + } + } + } + break; + } + if (messageId == Chat.recentMessages[ix]) { + ignored = true; + break; + } + ix++; + } + if (!ignored && Player.inTutorialIsland == 0) { + Chat.recentMessages[Chat.messageCounter] = messageId; + Chat.messageCounter = (Chat.messageCounter + 1) % 100; + @Pc(4518) JagString message = Font.escape(formatChatMessage(inboundBuffer).encodeMessage()); + if (rights != 0) { + Chat.add(JagString.concatenate(new JagString[]{getChatIcon(rights), Base37.decode37(name37).toTitleCase()}), 7, message); + } else { + Chat.add(Base37.decode37(name37).toTitleCase(), 3, message); + } + } + opcode = -1; + return true; + } else if (opcode == ServerProt.MESSAGE_CLANCHANNEL) { + long name37 = inboundBuffer.g8(); + inboundBuffer.g1b(); + long chat37 = inboundBuffer.g8(); + int top = inboundBuffer.g2(); + int bot = inboundBuffer.g3(); + @Pc(4626) long local4626 = ((long) top << 32) + bot; + int rights = inboundBuffer.g1(); + @Pc(4632) boolean ignored = false; + @Pc(4634) int ix = 0; + check: + while (true) { + if (ix >= 100) { + if (rights <= 1) { + if (LoginManager.playerUnderage && !LoginManager.parentalChatConsent || LoginManager.mapQuickChat) { + ignored = true; + } else { + for (ix = 0; ix < IgnoreList.size; ix++) { + if (IgnoreList.encodedUsernames[ix] == name37) { + ignored = true; + break check; + } + } + } + } + break; + } + if (Chat.recentMessages[ix] == local4626) { + ignored = true; + break; + } + ix++; + } + if (!ignored && Player.inTutorialIsland == 0) { + Chat.recentMessages[Chat.messageCounter] = local4626; + Chat.messageCounter = (Chat.messageCounter + 1) % 100; + JagString message = Font.escape(formatChatMessage(inboundBuffer).encodeMessage()); + Chat.method1598(message, JagString.concatenate(new JagString[]{getChatIcon(rights), Base37.decode37(name37).toTitleCase()}), Base37.decode37(chat37).toTitleCase()); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.REBUILD_REGION) { + readRebuildPacket(true); + opcode = -1; + return true; + } else if (opcode == ServerProt.SYNTH_SOUND) { + int trackId = inboundBuffer.g2(); + int volume = inboundBuffer.g1(); + if (trackId == 65535) { + trackId = -1; + } + int delay = inboundBuffer.g2(); + SoundPlayer.play(volume, trackId, delay); + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_SETPLAYERHEAD) { + int tracknum = inboundBuffer.ig2add(); + int id = inboundBuffer.img4(); + setVerifyId(tracknum); + int set = 0; + if (PlayerList.self.appearance != null) { + set = PlayerList.self.appearance.method1952(); + } + DelayedStateChange.updateComponentModel(-1, 3, id, set); + opcode = -1; + return true; + } else if (opcode == ServerProt.IF_SETTEXT1) { + int id = inboundBuffer.mg4(); + JagString text = inboundBuffer.gjstr(); + int tracknum = inboundBuffer.g2add(); + setVerifyId(tracknum); + DelayedStateChange.method3617(text, id); + opcode = -1; + return true; + } else if (opcode == ServerProt.VARBIT_LARGE) { + int value = inboundBuffer.ig4(); + int id = inboundBuffer.ig2add(); + VarpDomain.setVarbit(value, id); + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_INV_PARTIAL) { + int componentHash = inboundBuffer.g4(); + int containerId = inboundBuffer.g2(); + if (componentHash < -70000) { + containerId += 32768; + } + Component component; + if (componentHash < 0) { + component = null; + } else { + component = InterfaceList.getComponent(componentHash); + } + while (inboundBuffer.offset < length) { + int slot = inboundBuffer.gsmarts(); + int amount = inboundBuffer.g2(); + int id = 0; + if (amount != 0) { + id = inboundBuffer.g1(); + if (id == 255) { + id = inboundBuffer.g4(); + } + } + if (component != null && slot >= 0 && component.objTypes.length > slot) { + component.objTypes[slot] = amount; + component.objCounts[slot] = id; + } + Inv.updateContainer(amount - 1, slot, id, containerId); + } + if (component != null) { + InterfaceList.redraw(component); + } + InterfaceList.redrawActiveInterfaces(); + Inv.updatedInventories[Inv.updatedInventoriesWriterIndex++ & 0x1F] = containerId & 0x7FFF; + opcode = -1; + return true; + } else if (opcode == ServerProt.CAM_RESET) { + int tracknum = inboundBuffer.g2(); + setVerifyId(tracknum); + Camera.resetCameraEffects(); + opcode = -1; + return true; + } else if (opcode == ServerProt.LOGOUT) { + LoginManager.processLogout(); + opcode = -1; + return false; + } else if (opcode == ServerProt.GRAND_EXCHANGE_OFFERS) { + int offer = inboundBuffer.g1(); + if (inboundBuffer.g1() == 0) { + StockMarketManager.offers[offer] = new StockMarketOffer(); + } else { + inboundBuffer.offset--; + StockMarketManager.offers[offer] = new StockMarketOffer(inboundBuffer); + } + opcode = -1; + StockMarketManager.transmitAt = InterfaceList.transmitTimer; + return true; + } else if (opcode == ServerProt.IF_SETNPCHEAD) { + int npcId = inboundBuffer.g2add(); + int id = inboundBuffer.ig4(); + if (npcId == 65535) { + npcId = -1; + } + int tracknum = inboundBuffer.ig2(); + setVerifyId(tracknum); + DelayedStateChange.updateComponentModel(-1, 2, id, npcId); + opcode = -1; + return true; + } else if (opcode == ServerProt.REBUILD_NORMAL) { + readRebuildPacket(false); + opcode = -1; + return true; + } else if (opcode == ServerProt.SET_INTERFACE_SETTINGS) { + int tracknum = inboundBuffer.ig2(); + int end = inboundBuffer.ig2(); + if (end == 65535) { + end = -1; + } + int pointer = inboundBuffer.g4(); + int start = inboundBuffer.g2add(); + int accessMask = inboundBuffer.img4(); + if (start == 65535) { + start = -1; + } + setVerifyId(tracknum); + for (int local277 = start; local277 <= end; local277++) { + long local904 = ((long) pointer << 32) + ((long) local277); + ServerActiveProperties properties = (ServerActiveProperties) InterfaceList.properties.get(local904); + ServerActiveProperties target; + if (properties != null) { + target = new ServerActiveProperties(accessMask, properties.targetParam); + properties.unlink(); + } else if (local277 == -1) { + target = new ServerActiveProperties(accessMask, InterfaceList.getComponent(pointer).properties.targetParam); + } else { + target = new ServerActiveProperties(accessMask, -1); + } + InterfaceList.properties.put(target, local904); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.FRIENDLIST_LOADED) { + FriendsList.state = inboundBuffer.g1(); + FriendsList.transmitAt = InterfaceList.transmitTimer; + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_CLAN) { + long name37 = inboundBuffer.g8(); + int worldId = inboundBuffer.g2(); + @Pc(5325) byte rights = inboundBuffer.g1b(); + boolean ignored = (Long.MIN_VALUE & name37) != 0L; + if (ignored) { + if (ClanChat.size == 0) { + opcode = -1; + return true; + } + name37 &= Long.MAX_VALUE; + int i; + for (i = 0; ClanChat.size > i && (name37 != ClanChat.members[i].key || worldId != ClanChat.members[i].world); i++) { + } + if (i < ClanChat.size) { + while (ClanChat.size - 1 > i) { + ClanChat.members[i] = ClanChat.members[i + 1]; + i++; + } + ClanChat.size--; + ClanChat.members[ClanChat.size] = null; + } + } else { + JagString worldName = inboundBuffer.gjstr(); + @Pc(5347) ClanMember member = new ClanMember(); + member.key = name37; + member.username = Base37.decode37(member.key); + member.rank = rights; + member.worldName = worldName; + member.world = worldId; + int n; + for (n = ClanChat.size - 1; n >= 0; n--) { + int m = ClanChat.members[n].username.method3139(member.username); + if (m == 0) { + ClanChat.members[n].world = worldId; + ClanChat.members[n].rank = rights; + ClanChat.members[n].worldName = worldName; + if (name37 == Player.name37) { + ClanChat.rank = rights; + } + ClanChat.transmitAt = InterfaceList.transmitTimer; + opcode = -1; + return true; + } + if (m < 0) { + break; + } + } + if (ClanChat.members.length <= ClanChat.size) { + opcode = -1; + return true; + } + for (int i = ClanChat.size - 1; i > n; i--) { + ClanChat.members[i + 1] = ClanChat.members[i]; + } + if (ClanChat.size == 0) { + ClanChat.members = new ClanMember[100]; + } + ClanChat.members[n + 1] = member; + if (Player.name37 == name37) { + ClanChat.rank = rights; + } + ClanChat.size++; + } + opcode = -1; + ClanChat.transmitAt = InterfaceList.transmitTimer; + return true; + } else if (opcode == ServerProt.IF_SETOBJECT) { + int slot = inboundBuffer.g4(); + int id = inboundBuffer.mg4(); + int itemId = inboundBuffer.ig2add(); + if (itemId == 65535) { + itemId = -1; + } + int tracknum = inboundBuffer.ig2(); + setVerifyId(tracknum); + @Pc(5603) Component component = InterfaceList.getComponent(id); + @Pc(5615) ObjType objType; + if (component.if3) { + DelayedStateChange.method3707(id, slot, itemId); + objType = ObjTypeList.get(itemId); + DelayedStateChange.updateView(objType.zoom2d, id, objType.yAngle2D, objType.xAngle2D); + DelayedStateChange.method2745(id, objType.zAngle2D, objType.yOffset2D, objType.xOffset2D); + } else if (itemId == -1) { + component.modelType = 0; + opcode = -1; + return true; + } else { + objType = ObjTypeList.get(itemId); + component.modelXAngle = objType.xAngle2D; + component.modelZoom = objType.zoom2d * 100 / slot; + component.modelType = 4; + component.modelId = itemId; + component.modelYAngle = objType.yAngle2D; + InterfaceList.redraw(component); + } + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_INV_FULL) { + int componentHash = inboundBuffer.g4(); + int containerId = inboundBuffer.g2(); + if (componentHash < -70000) { + containerId += 32768; + } + Component component; + if (componentHash >= 0) { + component = InterfaceList.getComponent(componentHash); + } else { + component = null; + } + if (component != null) { + for (int i = 0; i < component.objTypes.length; i++) { + component.objTypes[i] = 0; + component.objCounts[i] = 0; + } + } + Inv.method475(containerId); + int total = inboundBuffer.g2(); + for (int slot = 0; slot < total; slot++) { + int amount = inboundBuffer.g1sub(); + if (amount == 255) { + amount = inboundBuffer.g4(); + } + int itemId = inboundBuffer.g2(); + if (component != null && slot < component.objTypes.length) { + component.objTypes[slot] = itemId; + component.objCounts[slot] = amount; + } + Inv.updateContainer(itemId - 1, slot, amount, containerId); + } + if (component != null) { + InterfaceList.redraw(component); + } + InterfaceList.redrawActiveInterfaces(); + Inv.updatedInventories[Inv.updatedInventoriesWriterIndex++ & 0x1F] = containerId & 0x7FFF; + opcode = -1; + return true; + } else if (opcode == ServerProt.SET_SETTINGS_STRING) { + method3954(inboundBuffer.gjstr()); + opcode = -1; + return true; + } else if (opcode == ServerProt.UPDATE_ZONE_PARTIAL_FOLLOWS) { + SceneGraph.currentChunkX = inboundBuffer.g1neg(); + SceneGraph.currentChunkZ = inboundBuffer.g1(); + opcode = -1; + return true; + } else if (opcode == ServerProt.MIDI_SONG) { + int id = inboundBuffer.ig2add(); + if (id == 65535) { + id = -1; + } + MusicPlayer.playSong(id); + opcode = -1; + return true; + } else if (opcode == ServerProt.MIDI_JINGLE) { + int volume = inboundBuffer.ig3(); + int id = inboundBuffer.ig2(); + if (id == 65535) { + id = -1; + } + MusicPlayer.playJingle(volume, id); + opcode = -1; + return true; + } else { + TracingException.report("T1 - " + opcode + "," + opcode3 + "," + opcode4 + " - " + length, null); + LoginManager.processLogout(); + return true; + } + } + + @OriginalMember(owner = "client!an", name = "h", descriptor = "(I)Z") + public static boolean readPacket() { + try { + return readPacketInternal(); + } catch (@Pc(14) IOException ex) { + ex.printStackTrace(); + method3279(); + return true; + } catch (@Pc(19) Exception ex) { + ex.printStackTrace(); + @Pc(61) String local61 = "T2 - " + opcode + "," + opcode3 + "," + opcode4 + " - " + length + "," + (Camera.originX + PlayerList.self.movementQueueX[0]) + "," + (PlayerList.self.movementQueueZ[0] + Camera.originZ) + " - "; + for (@Pc(63) int local63 = 0; local63 < length && local63 < 50; local63++) { + local61 = local61 + inboundBuffer.data[local63] + ","; + } + TracingException.report(local61, ex); + LoginManager.processLogout(); + return true; + } + } + + @OriginalMember(owner = "client!gg", name = "a", descriptor = "(Z)V") + public static void method1756() { + // todo: consolidate/rename static classes + if (anInt5775 > 0) { + anInt5775--; + } + if (Player.rebootTimer > 1) { + Player.rebootTimer--; + InterfaceList.miscTransmitAt = InterfaceList.transmitTimer; + } + if (LoginManager.aBoolean247) { + LoginManager.aBoolean247 = false; + method3279(); + return; + } + for (@Pc(34) int i = 0; i < 100 && readPacket(); i++) { + } + if (client.gameState != 30) { + return; + } + ReflectionCheck.loop(outboundBuffer); + @Pc(60) Object mouseRecorder = MouseRecorder.instance.lock; + @Pc(86) int offset; + @Pc(79) int type; + @Pc(88) int i; + @Pc(106) int y; + @Pc(111) int x; + @Pc(182) int dx; + @Pc(189) int dy; + synchronized (mouseRecorder) { + if (!MouseRecorder.enabled) { + MouseRecorder.instance.samples = 0; + } else if (Mouse.clickButton != 0 || MouseRecorder.instance.samples >= 40) { + outboundBuffer.p1isaac(ClientProt.EVENT_MOUSE_MOVE); + type = 0; + outboundBuffer.p1(0); + offset = outboundBuffer.offset; + for (i = 0; MouseRecorder.instance.samples > i && outboundBuffer.offset - offset < 240; i++) { + type++; + y = MouseRecorder.instance.y[i]; + x = MouseRecorder.instance.x[i]; + if (y < 0) { + y = 0; + } else if (y > 65534) { + y = 65534; + } + if (x < 0) { + x = 0; + } else if (x > 65534) { + x = 65534; + } + @Pc(142) boolean outsideWindow = false; + if (MouseRecorder.instance.y[i] == -1 && MouseRecorder.instance.x[i] == -1) { + outsideWindow = true; + y = -1; + x = -1; + } + if (MouseRecorder.mouseRecorderPrevX != x || y != MouseRecorder.mouseRecorderPrevY) { + dx = x - MouseRecorder.mouseRecorderPrevX; + MouseRecorder.mouseRecorderPrevX = x; + dy = y - MouseRecorder.mouseRecorderPrevY; + MouseRecorder.mouseRecorderPrevY = y; + if (anInt4762 < 8 && dx >= -32 && dx <= 31 && dy >= -32 && dy <= 31) { + dy += 32; + dx += 32; + outboundBuffer.p2(dy + (anInt4762 << 12) + (dx << 6)); + anInt4762 = 0; + } else if (anInt4762 < 32 && dx >= -128 && dx <= 127 && dy >= -128 && dy <= 127) { + outboundBuffer.p1(anInt4762 + 128); + dy += 128; + dx += 128; + outboundBuffer.p2((dx << 8) + dy); + anInt4762 = 0; + } else if (anInt4762 < 32) { + outboundBuffer.p1(anInt4762 + 192); + if (outsideWindow) { + outboundBuffer.p4(Integer.MIN_VALUE); + } else { + outboundBuffer.p4(x | y << 16); + } + anInt4762 = 0; + } else { + outboundBuffer.p2(anInt4762 + 57344); + if (outsideWindow) { + outboundBuffer.p4(Integer.MIN_VALUE); + } else { + outboundBuffer.p4(x | y << 16); + } + anInt4762 = 0; + } + } else if (anInt4762 < 2047) { + anInt4762++; + } + } + outboundBuffer.psize1(outboundBuffer.offset - offset); + if (MouseRecorder.instance.samples > type) { + MouseRecorder.instance.samples -= type; + for (i = 0; i < MouseRecorder.instance.samples; i++) { + MouseRecorder.instance.x[i] = MouseRecorder.instance.x[type + i]; + MouseRecorder.instance.y[i] = MouseRecorder.instance.y[type + i]; + } + } else { + MouseRecorder.instance.samples = 0; + } + } + } + if (Mouse.clickButton != 0) { + @Pc(411) long loops = (Mouse.clickTime - Mouse.prevClickTime) / 50L; + type = Mouse.clickY; + if (type < 0) { + type = 0; + } else if (type > 65535) { + type = 65535; + } + if (loops > 32767L) { + loops = 32767L; + } + i = Mouse.clickX; + Mouse.prevClickTime = Mouse.clickTime; + @Pc(437) byte button = 0; + if (i < 0) { + i = 0; + } else if (i > 65535) { + i = 65535; + } + x = (int) loops; + if (Mouse.clickButton == 2) { + button = 1; + } + outboundBuffer.p1isaac(ClientProt.EVENT_MOUSE_CLICK); + outboundBuffer.ip2add(button << 15 | x); + outboundBuffer.mp4(i | type << 16); + } + if (anInt551 > 0) { + anInt551--; + } + if (Preferences.aBoolean63) { + for (i = 0; i < InterfaceList.keyQueueSize; i++) { + offset = InterfaceList.keyCodes[i]; + if (offset == 98 || offset == 99 || offset == 96 || offset == 97) { + aBoolean228 = true; + break; + } + } + } else if (Keyboard.pressedKeys[Keyboard.KEY_LEFT] || Keyboard.pressedKeys[Keyboard.KEY_RIGHT] || Keyboard.pressedKeys[Keyboard.KEY_UP] || Keyboard.pressedKeys[Keyboard.KEY_DOWN]) { + aBoolean228 = true; + } + if (aBoolean228 && anInt551 <= 0) { + anInt551 = 20; + aBoolean228 = false; + outboundBuffer.p1isaac(ClientProt.EVENT_CAMERA_POSITION); + outboundBuffer.p2add((int) Camera.pitchTarget); + outboundBuffer.ip2((int) Camera.yawTarget); + } + if (GameShell.focus && !prevFocus) { + prevFocus = true; + outboundBuffer.p1isaac(ClientProt.EVENT_APPLET_FOCUS); + outboundBuffer.p1(1); + } + if (!GameShell.focus && prevFocus) { + prevFocus = false; + outboundBuffer.p1isaac(ClientProt.EVENT_APPLET_FOCUS); + outboundBuffer.p1(0); + } + if (!Preferences.sentToServer) { + outboundBuffer.p1isaac(98); + outboundBuffer.p4(Preferences.toInt()); + Preferences.sentToServer = true; + } + SceneGraph.method846(); + if (client.gameState != 30) { + return; + } + ChangeLocRequest.loop(); + AttachLocRequest.loop(); + SoundPlayer.loop(); + LoginManager.anInt1862++; + if (LoginManager.anInt1862 > 750) { + method3279(); + return; + } + PlayerList.method1444(); + NpcList.method2274(); + OverheadChat.loop(); + if (WorldMap.component != null) { + WorldMap.method447(); + } + // VarpDomain + for (i = VarpDomain.poll(true); i != -1; i = VarpDomain.poll(false)) { + VarpDomain.refreshMagicVarp(i); + VarpDomain.updatedVarps[VarpDomain.updatedVarpsWriterIndex++ & 0x1F] = i; + } + @Pc(782) int modelId; + // DelayedStateChange + for (@Pc(709) DelayedStateChange change = DelayedStateChange.poll(); change != null; change = DelayedStateChange.poll()) { + type = change.getType(); + i = change.getId(); + if (type == 1) { + VarcDomain.varcs[i] = change.intArg1; + VarcDomain.updatedVarcs[VarcDomain.updatedVarcsWriterIndex++ & 0x1F] = i; + } else if (type == 2) { + VarcDomain.varcstrs[i] = change.stringArg; + VarcDomain.updatedVarcstrs[VarcDomain.updatedVarcstrsWriterIndex++ & 0x1F] = i; + } else { + @Pc(773) Component component; + if (type == 3) { + component = InterfaceList.getComponent(i); + if (!change.stringArg.strEquals(component.text)) { + component.text = change.stringArg; + InterfaceList.redraw(component); + } + } else if (type == 4) { + component = InterfaceList.getComponent(i); + x = change.intArg1; + dx = change.intArg2; + modelId = change.intArg3; + if (component.modelType != x || component.modelId != modelId || dx != component.anInt498) { + component.modelId = modelId; + component.anInt498 = dx; + component.modelType = x; + InterfaceList.redraw(component); + } + } else if (type == 5) { + component = InterfaceList.getComponent(i); + if (component.modelSeqId != change.intArg1 || change.intArg1 == -1) { + component.anInt496 = 1; + component.anInt500 = 0; + component.modelSeqId = change.intArg1; + component.anInt510 = 0; + InterfaceList.redraw(component); + } + } else if (type == 6) { + y = change.intArg1; + x = y >> 10 & 0x1F; + dx = y & 0x1F; + modelId = y >> 5 & 0x1F; + @Pc(1189) Component local1189 = InterfaceList.getComponent(i); + dy = (dx << 3) + (modelId << 11) + (x << 19); + if (dy != local1189.color) { + local1189.color = dy; + InterfaceList.redraw(local1189); + } + } else if (type == 7) { + component = InterfaceList.getComponent(i); + @Pc(1145) boolean hidden = change.intArg1 == 1; + if (component != null && hidden != component.hidden) { + component.hidden = hidden; + InterfaceList.redraw(component); + } + } else if (type == 8) { + component = InterfaceList.getComponent(i); + if (change.intArg1 != component.modelXAngle || component.modelYAngle != change.intArg3 || change.intArg2 != component.modelZoom) { + component.modelXAngle = change.intArg1; + component.modelZoom = change.intArg2; + component.modelYAngle = change.intArg3; + if (component.objId != -1) { + if (component.anInt451 > 0) { + component.modelZoom = component.modelZoom * 32 / component.anInt451; + } else if (component.baseWidth > 0) { + component.modelZoom = component.modelZoom * 32 / component.baseWidth; + } + } + InterfaceList.redraw(component); + } + } else if (type == 9) { + component = InterfaceList.getComponent(i); + if (change.intArg1 != component.objId || component.objCount != change.intArg3) { + component.objId = change.intArg1; + component.objCount = change.intArg3; + InterfaceList.redraw(component); + } + } else if (type == 10) { + component = InterfaceList.getComponent(i); + if (component.modelXOffset != change.intArg1 || change.intArg3 != component.modelZOffset || component.modelYOffset != change.intArg2) { + component.modelZOffset = change.intArg3; + component.modelYOffset = change.intArg2; + component.modelXOffset = change.intArg1; + InterfaceList.redraw(component); + } + } else if (type == 11) { + component = InterfaceList.getComponent(i); + component.x = component.baseX = change.intArg1; + component.yMode = 0; + component.xMode = 0; + component.y = component.baseY = change.intArg3; + InterfaceList.redraw(component); + } else if (type == 12) { + component = InterfaceList.getComponent(i); + int scrollY = change.intArg1; + if (component != null && component.type == 0) { + if (scrollY > component.scrollMaxV - component.height) { + scrollY = component.scrollMaxV - component.height; + } + if (scrollY < 0) { + scrollY = 0; + } + if (scrollY != component.scrollY) { + component.scrollY = scrollY; + InterfaceList.redraw(component); + } + } + } else if (type == 13) { + component = InterfaceList.getComponent(i); + component.modelRotationSpeed = change.intArg1; + } + } + } + if (Cross.type != 0) { + Cross.milliseconds += 20; + if (Cross.milliseconds >= 400) { + Cross.type = 0; + } + } + sceneDelta++; + if (MiniMenu.pressedInventoryComponent != null) { + MiniMenu.anInt2043++; + if (MiniMenu.anInt2043 >= 15) { + InterfaceList.redraw(MiniMenu.pressedInventoryComponent); + MiniMenu.pressedInventoryComponent = null; + } + } + + @Pc(1361) Component component; + if (InterfaceList.clickedInventoryComponent != null) { + InterfaceList.redraw(InterfaceList.clickedInventoryComponent); + if (InterfaceList.clickedInventoryComponentX + 5 < Mouse.lastMouseX || Mouse.lastMouseX < InterfaceList.clickedInventoryComponentX - 5 || InterfaceList.clickedInventoryComponentY + 5 < Mouse.lastMouseY || InterfaceList.clickedInventoryComponentY - 5 > Mouse.lastMouseY) { + InterfaceList.draggingClickedInventoryObject = true; + } + InterfaceList.clickedInventoryComponentCycle++; + + if (Mouse.pressedButton == 0) { + if (InterfaceList.draggingClickedInventoryObject && InterfaceList.clickedInventoryComponentCycle >= 5) { + if (InterfaceList.clickedInventoryComponent == InterfaceList.mouseOverInventoryInterface && InterfaceList.mouseOverInventoryObjectIndex != MiniMenu.clickedInventoryIndex) { + component = InterfaceList.clickedInventoryComponent; + @Pc(1363) byte inserting = 0; + + if (VarpDomain.inserting == 1 && component.clientCode == 206) { + inserting = 1; + } + + if (component.objTypes[MiniMenu.clickedInventoryIndex] <= 0) { + inserting = 0; + } + + if (InterfaceList.getServerActiveProperties(component).isObjReplaceEnabled()) { + int newIndex = InterfaceList.mouseOverInventoryObjectIndex; + int currentIndex = MiniMenu.clickedInventoryIndex; + component.objTypes[currentIndex] = component.objTypes[newIndex]; + component.objCounts[currentIndex] = component.objCounts[newIndex]; + component.objTypes[newIndex] = -1; + component.objCounts[newIndex] = 0; + } else if (inserting == 1) { + int currentIndex = MiniMenu.clickedInventoryIndex; + int newIndex = InterfaceList.mouseOverInventoryObjectIndex; + while (currentIndex != newIndex) { + if (currentIndex > newIndex) { + component.swapObjs(currentIndex - 1, currentIndex); + currentIndex--; + } else { + component.swapObjs(currentIndex + 1, currentIndex); + currentIndex++; + } + } + } else { + component.swapObjs(MiniMenu.clickedInventoryIndex, InterfaceList.mouseOverInventoryObjectIndex); + } + outboundBuffer.p1isaac(231); + outboundBuffer.p2(InterfaceList.mouseOverInventoryObjectIndex); + outboundBuffer.ip4(InterfaceList.clickedInventoryComponent.id); + outboundBuffer.p2add(MiniMenu.clickedInventoryIndex); + outboundBuffer.p1sub(inserting); + } + } else if ((VarpDomain.anInt2952 == 1 || MiniMenu.method4640(MiniMenu.size - 1)) && MiniMenu.size > 2) { + ScriptRunner.method3901(); + } else if (MiniMenu.size > 0) { + MiniMenu.method1372(); + } + Mouse.clickButton = 0; + MiniMenu.anInt2043 = 10; + InterfaceList.clickedInventoryComponent = null; + } + } + InterfaceList.aBoolean174 = false; + InterfaceList.aClass13_12 = null; + InterfaceList.aBoolean83 = false; + InterfaceList.keyQueueSize = 0; + component = InterfaceList.aClass13_22; + InterfaceList.aClass13_22 = null; + @Pc(1508) Component local1508 = aClass13_11; + aClass13_11 = null; + while (Keyboard.nextKey() && InterfaceList.keyQueueSize < 128) { + InterfaceList.keyCodes[InterfaceList.keyQueueSize] = Keyboard.keyCode; + InterfaceList.keyChars[InterfaceList.keyQueueSize] = Keyboard.keyChar; + InterfaceList.keyQueueSize++; + } + WorldMap.component = null; + if (InterfaceList.topLevelInterface != -1) { + InterfaceList.method1320(0, 0, 0, GameShell.canvasWidth, InterfaceList.topLevelInterface, 0, GameShell.canvasHeight); + } + InterfaceList.transmitTimer++; + while (true) { + @Pc(1569) Component priorityComponent; + @Pc(1560) Component prioritySource; + @Pc(1555) HookRequest priorityRequest; + do { + priorityRequest = (HookRequest) InterfaceList.highPriorityRequests.removeHead(); + if (priorityRequest == null) { + while (true) { + do { + priorityRequest = (HookRequest) InterfaceList.mediumPriorityRequests.removeHead(); + if (priorityRequest == null) { + while (true) { + do { + priorityRequest = (HookRequest) InterfaceList.lowPriorityRequests.removeHead(); + if (priorityRequest == null) { + if (WorldMap.component == null) { + InterfaceList.anInt3337 = 0; + } + if (Cs1ScriptRunner.aClass13_14 != null) { + Cs1ScriptRunner.method28(); + } + if (LoginManager.staffModLevel > 0 && Keyboard.pressedKeys[Keyboard.KEY_CTRL] && Keyboard.pressedKeys[Keyboard.KEY_SHIFT] && MouseWheel.wheelRotation != 0) { + y = Player.plane - MouseWheel.wheelRotation; + if (y < 0) { + y = 0; + } else if (y > 3) { + y = 3; + } + // Cheat + Cheat.teleport(PlayerList.self.movementQueueX[0] + Camera.originX, PlayerList.self.movementQueueZ[0] + Camera.originZ, y); + } + if (LoginManager.staffModLevel > 0 && Keyboard.pressedKeys[Keyboard.KEY_CTRL] && Keyboard.pressedKeys[Keyboard.KEY_SHIFT]) { + if (MiniMenu.anInt1742 != -1) { + Cheat.teleport(Camera.originX + MiniMenu.anInt1742, Camera.originZ - -MiniMenu.anInt2954, Player.plane); + } + anInt4422 = 0; + MiniMenu.anInt3096 = 0; + } else if (MiniMenu.anInt3096 == 2) { + if (MiniMenu.anInt1742 != -1) { + outboundBuffer.p1isaac(131); + outboundBuffer.mp4(MiniMenu.anInt2512); + outboundBuffer.p2add(Camera.originX + MiniMenu.anInt1742); + outboundBuffer.ip2add(MiniMenu.anInt506); + outboundBuffer.p2add(MiniMenu.anInt2954 + Camera.originZ); + Cross.type = 1; + Cross.milliseconds = 0; + Cross.y = Mouse.clickY; + Cross.x = Mouse.clickX; + } + MiniMenu.anInt3096 = 0; + } else if (anInt4422 == 2) { + if (MiniMenu.anInt1742 != -1) { + outboundBuffer.p1isaac(179); + outboundBuffer.p2(Camera.originZ + MiniMenu.anInt2954); + outboundBuffer.p2(MiniMenu.anInt1742 + Camera.originX); + Cross.milliseconds = 0; + Cross.type = 1; + Cross.x = Mouse.clickX; + Cross.y = Mouse.clickY; + } + anInt4422 = 0; + } else if (MiniMenu.anInt1742 != -1 && MiniMenu.anInt3096 == 0 && anInt4422 == 0) { + @Pc(1871) boolean local1871 = PathFinder.findPath(PlayerList.self.movementQueueZ[0], 0, 0, true, 0, MiniMenu.anInt1742, 0, 0, 0, MiniMenu.anInt2954, PlayerList.self.movementQueueX[0]); + if (local1871) { + Cross.y = Mouse.clickY; + Cross.milliseconds = 0; + Cross.x = Mouse.clickX; + Cross.type = 1; + } + } + MiniMenu.anInt1742 = -1; + method843(); + if (InterfaceList.aClass13_22 != component) { + if (component != null) { + InterfaceList.redraw(component); + } + if (InterfaceList.aClass13_22 != null) { + InterfaceList.redraw(InterfaceList.aClass13_22); + } + } + if (local1508 != aClass13_11 && Cs1ScriptRunner.anInt4504 == anInt5235) { + if (local1508 != null) { + InterfaceList.redraw(local1508); + } + if (aClass13_11 != null) { + InterfaceList.redraw(aClass13_11); + } + } + if (aClass13_11 == null) { + if (anInt5235 > 0) { + anInt5235--; + } + } else if (anInt5235 < Cs1ScriptRunner.anInt4504) { + anInt5235++; + if (Cs1ScriptRunner.anInt4504 == anInt5235) { + InterfaceList.redraw(aClass13_11); + } + } + if (Camera.cameraType == 1) { + Camera.method4273(); + } else if (Camera.cameraType == 2) { + Camera.updateLockedCamera(); + } else { + Camera.updateLoginScreenCamera(); + } + for (y = 0; y < 5; y++) { + @Pc(2001) int local2001 = anIntArray76[y]++; + } + y = Mouse.getIdleLoops(); + x = Keyboard.getIdleLoops(); + if (y > 15000 && x > 15000) { + anInt5775 = 250; + Mouse.setIdleLoops(14500); + outboundBuffer.p1isaac(245); + } + if (openUrlRequest != null && openUrlRequest.status == 1) { + if (openUrlRequest.result != null) { + ScriptRunner.openUrl(ScriptRunner.url, newTab); + } + ScriptRunner.url = null; + openUrlRequest = null; + newTab = false; + } + anInt3251++; + MiniMap.anInt2252++; + anInt3486++; + if (anInt3486 > 500) { + anInt3486 = 0; + modelId = (int) (Math.random() * 8.0D); + if ((modelId & 0x4) == 4) { + Camera.anInt5161 += anInt4941; + } + if ((modelId & 0x2) == 2) { + Camera.anInt4774 += anInt659; + } + if ((modelId & 0x1) == 1) { + Camera.anInt3291 += Camera.anInt4229; + } + } + if (MiniMap.anInt2252 > 500) { + MiniMap.anInt2252 = 0; + modelId = (int) (Math.random() * 8.0D); + if ((modelId & 0x1) == 1) { + MiniMap.anInt1814 += MiniMap.anInt5755; + } + if ((modelId & 0x2) == 2) { + MiniMap.anInt4130 += MiniMap.anInt4262; + } + } + if (Camera.anInt3291 < -50) { + Camera.anInt4229 = 2; + } + if (MiniMap.anInt1814 < -60) { + MiniMap.anInt5755 = 2; + } + if (MiniMap.anInt4130 < -20) { + MiniMap.anInt4262 = 1; + } + if (Camera.anInt4774 < -55) { + anInt659 = 2; + } + if (Camera.anInt4774 > 55) { + anInt659 = -2; + } + if (Camera.anInt5161 < -40) { + anInt4941 = 1; + } + if (Camera.anInt3291 > 50) { + Camera.anInt4229 = -2; + } + if (Camera.anInt5161 > 40) { + anInt4941 = -1; + } + if (MiniMap.anInt4130 > 10) { + MiniMap.anInt4262 = -1; + } + if (MiniMap.anInt1814 > 60) { + MiniMap.anInt5755 = -2; + } + if (anInt3251 > 50) { + outboundBuffer.p1isaac(93); + } + if (verifyIdChanged) { + transmitVerifyId(); + verifyIdChanged = false; + } + try { + if (socket != null && outboundBuffer.offset > 0) { + socket.write(outboundBuffer.data, outboundBuffer.offset); + anInt3251 = 0; + outboundBuffer.offset = 0; + } + } catch (@Pc(2266) IOException local2266) { + method3279(); + } + return; + } + prioritySource = priorityRequest.source; + if (prioritySource.createdComponentId < 0) { + break; + } + priorityComponent = InterfaceList.getComponent(prioritySource.overlayer); + } while (priorityComponent == null || priorityComponent.createdComponents == null || prioritySource.createdComponentId >= priorityComponent.createdComponents.length || prioritySource != priorityComponent.createdComponents[prioritySource.createdComponentId]); + ScriptRunner.run(priorityRequest); + } + } + prioritySource = priorityRequest.source; + if (prioritySource.createdComponentId < 0) { + break; + } + priorityComponent = InterfaceList.getComponent(prioritySource.overlayer); + } while (priorityComponent == null || priorityComponent.createdComponents == null || priorityComponent.createdComponents.length <= prioritySource.createdComponentId || priorityComponent.createdComponents[prioritySource.createdComponentId] != prioritySource); + ScriptRunner.run(priorityRequest); + } + } + prioritySource = priorityRequest.source; + if (prioritySource.createdComponentId < 0) { + break; + } + priorityComponent = InterfaceList.getComponent(prioritySource.overlayer); + } while (priorityComponent == null || priorityComponent.createdComponents == null || prioritySource.createdComponentId >= priorityComponent.createdComponents.length || priorityComponent.createdComponents[prioritySource.createdComponentId] != prioritySource); + ScriptRunner.run(priorityRequest); + } + } + + @OriginalMember(owner = "client!ta", name = "a", descriptor = "(I)V") + public static void npcCombat() { + for (@Pc(3) int i = 0; i < extendedCount; i++) { + @Pc(10) int extendedId = extendedIds[i]; + @Pc(14) Npc npc = NpcList.npcs[extendedId]; + @Pc(18) int local18 = inboundBuffer.g1(); + @Pc(43) int local43; + @Pc(47) int local47; + + //idk + if ((local18 & 0x8) != 0) { + local18 += inboundBuffer.g1() << 8; + } + + boolean hasHitsplat = (local18 & 0x40) != 0; + if (hasHitsplat) { + local43 = inboundBuffer.g1(); // Hit value + local47 = inboundBuffer.g1neg(); // Color + npc.addHit(local47, client.loop, local43); + npc.hitpointsBarVisibleUntil = client.loop + 300; + npc.hitpointsBar = inboundBuffer.g1sub(); + } + + boolean hasSecondaryHitsplat = (local18 & 0x2) != 0; + if (hasSecondaryHitsplat) { + local43 = inboundBuffer.g1neg(); // Hit value + local47 = inboundBuffer.g1sub(); // Color + npc.addHit(local47, client.loop, local43); + } + + boolean hasAnimation = (local18 & 0x10) != 0; + if (hasAnimation) { + local43 = inboundBuffer.g2(); // Animation ID + local47 = inboundBuffer.g1(); // Sequence + if (local43 == 65535) { + local43 = -1; + } + animateNpc(local47, local43, npc); + } + + boolean hasFaceEntity = (local18 & 0x4) != 0; + if (hasFaceEntity) { + npc.faceEntity = inboundBuffer.g2add(); + if (npc.faceEntity == 65535) { + npc.faceEntity = -1; + } + } + + boolean isKillingBlow = (local18 & 0x80) != 0; + if (isKillingBlow) { + PluginRepository.OnKillingBlowNPC(npc.type.id,npc.movementQueueX[0],npc.movementQueueZ[0]); + local43 = inboundBuffer.g2add(); + if (local43 == 65535) { + local43 = -1; + } + local47 = inboundBuffer.ig4(); + @Pc(147) boolean local147 = local43 == -1 || npc.spotAnimId == -1 || SeqTypeList.get(SpotAnimTypeList.get(local43).seqId).priority >= SeqTypeList.get(SpotAnimTypeList.get(npc.spotAnimId).seqId).priority; + if (local147) { + npc.spotAnimId = local43; + npc.spotAnimStart = (local47 & 0xFFFF) + client.loop; + npc.anInt3361 = 0; + npc.anInt3399 = 0; + npc.spotAnimY = local47 >> 16; + npc.anInt3418 = 1; + if (npc.spotAnimStart > client.loop) { + npc.anInt3399 = -1; + } + if (npc.spotAnimId != -1 && npc.spotAnimStart == client.loop) { + @Pc(227) int seqId = SpotAnimTypeList.get(npc.spotAnimId).seqId; + if (seqId != -1) { + @Pc(236) SeqType seqType = SeqTypeList.get(seqId); + if (seqType.frames != null) { + SoundPlayer.playSeqSound(npc.zFine, seqType, npc.xFine, false, 0); + } + } + } + } + } + + boolean hasSound = (local18 & 0x1) != 0; + if (hasSound) { + if (npc.type.hasAreaSound()) { + AreaSoundManager.remove(npc); + } + npc.setNpcType(NpcTypeList.get(inboundBuffer.ig2())); + npc.setSize(npc.type.size); + npc.anInt3365 = npc.type.bastypeid; + if (npc.type.hasAreaSound()) { + AreaSoundManager.add(npc.movementQueueZ[0], null, 0, npc, npc.movementQueueX[0], Player.plane, null); + } + } + + boolean hasChatMessage = (local18 & 0x20) != 0; + if (hasChatMessage) { + npc.chatMessage = inboundBuffer.gjstr(); + npc.chatLoops = 100; + } + if ((local18 & 0x100) != 0) { + local43 = inboundBuffer.g1neg(); + @Pc(331) int[] local331 = new int[local43]; + @Pc(334) int[] local334 = new int[local43]; + @Pc(337) int[] local337 = new int[local43]; + for (@Pc(339) int i1 = 0; i1 < local43; i1++) { + @Pc(350) int local350 = inboundBuffer.ig2(); + if (local350 == 65535) { + local350 = -1; + } + local331[i1] = local350; + local334[i1] = inboundBuffer.g1sub(); + local337[i1] = inboundBuffer.g2(); + } + method3037(local337, npc, local334, local331); + } + + boolean hasFaceLocation = (local18 & 0x200) != 0; + if (hasFaceLocation) { + npc.faceX = inboundBuffer.g2add(); + npc.faceY = inboundBuffer.g2(); + } + } + } + + @OriginalMember(owner = "client!gm", name = "h", descriptor = "(I)V") + public static void readNpcPacket() { + extendedCount = 0; + removedCount = 0; + clearAreaNPCs(); + loadAreaNPCs(); + npcCombat(); + @Pc(19) int i; + for (i = 0; i < removedCount; i++) { + @Pc(30) int removedId = removedIds[i]; + if (NpcList.npcs[removedId].lastSeenLoop != client.loop) { + if (NpcList.npcs[removedId].type.hasAreaSound()) { + AreaSoundManager.remove(NpcList.npcs[removedId]); + } + NpcList.npcs[removedId].setNpcType(null); + NpcList.npcs[removedId] = null; + } + } + if (length != inboundBuffer.offset) { + throw new RuntimeException("gnp1 pos:" + inboundBuffer.offset + " psize:" + length); + } + for (i = 0; i < NpcList.size; i++) { + if (NpcList.npcs[NpcList.ids[i]] == null) { + throw new RuntimeException("gnp2 pos:" + i + " size:" + NpcList.size); + } + } + } + + @OriginalMember(owner = "client!dm", name = "a", descriptor = "(B)V") + public static void clearAreaNPCs() { + inboundBuffer.accessBits(); + @Pc(13) int npcsInArea = inboundBuffer.gBits(8); + @Pc(22) int i; + if (NpcList.size > npcsInArea) { + for (i = npcsInArea; i < NpcList.size; i++) { + removedIds[removedCount++] = NpcList.ids[i]; + } + } + if (NpcList.size < npcsInArea) { + throw new RuntimeException("gnpov1"); + } + NpcList.size = 0; + for (i = 0; i < npcsInArea; i++) { + @Pc(61) int id = NpcList.ids[i]; + @Pc(65) Npc npc = NpcList.npcs[id]; + @Pc(70) int local70 = inboundBuffer.gBits(1); + if (local70 == 0) { + NpcList.ids[NpcList.size++] = id; + npc.lastSeenLoop = client.loop; + } else { + @Pc(92) int local92 = inboundBuffer.gBits(2); + if (local92 == 0) { + NpcList.ids[NpcList.size++] = id; + npc.lastSeenLoop = client.loop; + extendedIds[extendedCount++] = id; + } else { + @Pc(139) int local139; + @Pc(149) int local149; + if (local92 == 1) { + NpcList.ids[NpcList.size++] = id; + npc.lastSeenLoop = client.loop; + local139 = inboundBuffer.gBits(3); + npc.move(1, local139); + local149 = inboundBuffer.gBits(1); + if (local149 == 1) { + extendedIds[extendedCount++] = id; + } + } else if (local92 == 2) { + NpcList.ids[NpcList.size++] = id; + npc.lastSeenLoop = client.loop; + if (inboundBuffer.gBits(1) == 1) { + local139 = inboundBuffer.gBits(3); + npc.move(2, local139); + local149 = inboundBuffer.gBits(3); + npc.move(2, local149); + } else { + local139 = inboundBuffer.gBits(3); + npc.move(0, local139); + } + local139 = inboundBuffer.gBits(1); + if (local139 == 1) { + extendedIds[extendedCount++] = id; + } + } else if (local92 == 3) { + removedIds[removedCount++] = id; + } + } + } + } + } + + @OriginalMember(owner = "client!wj", name = "a", descriptor = "(I)V") + public static void loadAreaNPCs() { + while (true) { + if (inboundBuffer.method2241(length) >= 27) { + @Pc(14) int npcIndex = inboundBuffer.gBits(15); + if (npcIndex != 32767) { + @Pc(19) boolean local19 = false; + if (NpcList.npcs[npcIndex] == null) { + local19 = true; + NpcList.npcs[npcIndex] = new Npc(); + } + @Pc(37) Npc npc = NpcList.npcs[npcIndex]; + NpcList.ids[NpcList.size++] = npcIndex; + npc.lastSeenLoop = client.loop; + if (npc.type != null && npc.type.hasAreaSound()) { + AreaSoundManager.remove(npc); + } + @Pc(66) int local66 = inboundBuffer.gBits(1); + @Pc(73) int angle = PathingEntity.ANGLES[inboundBuffer.gBits(3)]; + if (local19) { + npc.anInt3400 = npc.anInt3381 = angle; + } + @Pc(86) int local86 = inboundBuffer.gBits(1); + if (local86 == 1) { + extendedIds[extendedCount++] = npcIndex; + } + @Pc(105) int local105 = inboundBuffer.gBits(5); + npc.setNpcType(NpcTypeList.get(inboundBuffer.gBits(14))); + if (local105 > 15) { + local105 -= 32; + } + @Pc(124) int local124 = inboundBuffer.gBits(5); + if (local124 > 15) { + local124 -= 32; + } + npc.setSize(npc.type.size); + npc.anInt3365 = npc.type.bastypeid; + npc.anInt3376 = npc.type.rotationspeed; + if (npc.anInt3376 == 0) { + npc.anInt3381 = 0; + } + npc.method2683(npc.getSize(), PlayerList.self.movementQueueX[0] + local124, local105 + PlayerList.self.movementQueueZ[0], local66 == 1); + if (npc.type.hasAreaSound()) { + AreaSoundManager.add(npc.movementQueueZ[0], null, 0, npc, npc.movementQueueX[0], Player.plane, null); + } + continue; + } + } + inboundBuffer.accessBytes(); + return; + } + } + + @OriginalMember(owner = "client!uc", name = "a", descriptor = "(IB)Z") + public static boolean setVerifyId(@OriginalArg(0) int arg0) { + verifyId = arg0 + 1 & 0xFFFF; + verifyIdChanged = true; + return true; + } + + @OriginalMember(owner = "client!fk", name = "c", descriptor = "(I)V") + public static void transmitVerifyId() { + outboundBuffer.p1isaac(ClientProt.TRANSMITVAR_VERIFYID); + outboundBuffer.p2(verifyId); + } + + @OriginalMember(owner = "client!wc", name = "a", descriptor = "(Lclient!wa;I)V") + public static void writeRandom(@OriginalArg(0) Buffer buffer) { + if (client.uid != null) { + try { + client.uid.seek(0L); + client.uid.write(buffer.data, buffer.offset, 24); + } catch (@Pc(16) Exception local16) { + } + } + buffer.offset += 24; + } + + @OriginalMember(owner = "client!nm", name = "a", descriptor = "(Z)V") + public static void method3279() { + if (anInt5775 > 0) { + LoginManager.processLogout(); + } else { + aClass95_4 = socket; + socket = null; + client.setGameState(40); + } + } + + @OriginalMember(owner = "client!fc", name = "a", descriptor = "(Lclient!wa;I)Lclient!na;") + public static JagString formatChatMessage(@OriginalArg(0) Buffer arg0) { + return method4350(arg0); + } + + public static JagString getChatIcon (int rights) { + switch (rights) { + case 1: + case 2: + case 3: + case 5: + case 6: + case 7: + return JagString.parse(""); + default: + return JagString.parse(""); + } + } + + @OriginalMember(owner = "client!uj", name = "a", descriptor = "(Lclient!wa;II)Lclient!na;") + public static JagString method4350(@OriginalArg(0) Buffer arg0) { + try { + @Pc(7) int local7 = arg0.gsmarts(); + if (local7 > 32767) { + local7 = 32767; + } + @Pc(15) byte[] local15 = new byte[local7]; + arg0.offset += WordPack.codec.decode(0, local7, local15, arg0.data, arg0.offset); + return JagString.decodeString(local15, local7, 0); + } catch (@Pc(47) Exception local47) { + return WordPack.CABBAGE; + } + } + + @OriginalMember(owner = "client!mi", name = "a", descriptor = "([IBLclient!km;[I[I)V") + public static void method3037(@OriginalArg(0) int[] arg0, @OriginalArg(2) Npc arg1, @OriginalArg(3) int[] arg2, @OriginalArg(4) int[] arg3) { + for (@Pc(3) int local3 = 0; local3 < arg3.length; local3++) { + @Pc(15) int local15 = arg3[local3]; + @Pc(19) int local19 = arg0[local3]; + @Pc(23) int local23 = arg2[local3]; + for (@Pc(25) int local25 = 0; local19 != 0 && arg1.aClass147Array3.length > local25; local25++) { + if ((local19 & 0x1) != 0) { + if (local15 == -1) { + arg1.aClass147Array3[local25] = null; + } else { + @Pc(60) SeqType local60 = SeqTypeList.get(local15); + @Pc(65) PathingEntity_Class147 local65 = arg1.aClass147Array3[local25]; + @Pc(68) int local68 = local60.exactmove; + if (local65 != null) { + if (local15 == local65.anInt5396) { + if (local68 == 0) { + local65 = arg1.aClass147Array3[local25] = null; + } else if (local68 == 1) { + local65.anInt5399 = 0; + local65.anInt5400 = 0; + local65.anInt5398 = 1; + local65.anInt5404 = 0; + local65.anInt5408 = local23; + SoundPlayer.playSeqSound(arg1.zFine, local60, arg1.xFine, false, 0); + } else if (local68 == 2) { + local65.anInt5400 = 0; + } + } else if (local60.priority >= SeqTypeList.get(local65.anInt5396).priority) { + local65 = arg1.aClass147Array3[local25] = null; + } + } + if (local65 == null) { + local65 = arg1.aClass147Array3[local25] = new PathingEntity_Class147(); + local65.anInt5398 = 1; + local65.anInt5404 = 0; + local65.anInt5408 = local23; + local65.anInt5396 = local15; + local65.anInt5400 = 0; + local65.anInt5399 = 0; + SoundPlayer.playSeqSound(arg1.zFine, local60, arg1.xFine, false, 0); + } + } + } + local19 >>>= 0x1; + } + } + } + + @OriginalMember(owner = "client!sc", name = "a", descriptor = "(IIILclient!km;)V") + public static void animateNpc(@OriginalArg(0) int arg0, @OriginalArg(1) int animationId, @OriginalArg(3) Npc npc) { + if (npc.seqId == animationId && animationId != -1) { + @Pc(10) SeqType seqType = SeqTypeList.get(animationId); + @Pc(13) int local13 = seqType.exactmove; + if (local13 == 1) { + npc.anInt3373 = 1; + npc.anInt3425 = 0; + npc.anInt3360 = 0; + npc.anInt3371 = 0; + npc.anInt3420 = arg0; + SoundPlayer.playSeqSound(npc.zFine, seqType, npc.xFine, false, npc.anInt3425); + } + if (local13 == 2) { + npc.anInt3371 = 0; + } + } else if (animationId == -1 || npc.seqId == -1 || SeqTypeList.get(animationId).priority >= SeqTypeList.get(npc.seqId).priority) { + npc.anInt3360 = 0; + npc.seqId = animationId; + npc.anInt3373 = 1; + npc.anInt3371 = 0; + npc.anInt3420 = arg0; + npc.anInt3405 = npc.movementQueueSize; + npc.anInt3425 = 0; + if (npc.seqId != -1) { + SoundPlayer.playSeqSound(npc.zFine, SeqTypeList.get(npc.seqId), npc.xFine, false, npc.anInt3425); + } + } + } + + @OriginalMember(owner = "client!sj", name = "a", descriptor = "(ILclient!na;)V") + public static void method3954(@OriginalArg(1) JagString arg0) { + client.settings = arg0; + if (GameShell.signLink.applet == null) { + return; + } + try { + @Pc(17) JagString local17 = aClass100_989.fromParameters(GameShell.signLink.applet); + @Pc(23) JagString local23 = aClass100_1029.fromParameters(GameShell.signLink.applet); + @Pc(48) JagString local48 = JagString.concatenate(new JagString[]{local17, aClass100_667, arg0, aClass100_1095, local23}); + if (arg0.length() == 0) { + local48 = JagString.concatenate(new JagString[]{local48, aClass100_1018}); + } else { + local48 = JagString.concatenate(new JagString[]{local48, aClass100_1082, DateUtil.getDateString(MonotonicClock.currentTimeMillis() + 94608000000L), aClass100_431, JagString.method2929(94608000L)}); + } + JagString.concatenate(new JagString[]{aClass100_821, local48, aClass100_946}).method3134(GameShell.signLink.applet); + } catch (@Pc(124) Throwable local124) { + } + } + + @OriginalMember(owner = "client!rm", name = "a", descriptor = "(IBI)V") + public static void spawnGroundObject(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(9) LinkedList local9 = SceneGraph.objStacks[Player.plane][arg1][arg0]; + if (local9 == null) { + SceneGraph.removeObjStack(Player.plane, arg1, arg0); + return; + } + @Pc(28) int local28 = -99999999; + @Pc(30) ObjStackNode local30 = null; + @Pc(35) ObjStackNode local35; + for (local35 = (ObjStackNode) local9.head(); local35 != null; local35 = (ObjStackNode) local9.next()) { + @Pc(44) ObjType local44 = ObjTypeList.get(local35.value.type); + @Pc(47) int local47 = local44.cost; + if (local44.stackable == 1) { + local47 *= local35.value.amount + 1; + } + if (local28 < local47) { + local28 = local47; + local30 = local35; + } + } + if (local30 == null) { + SceneGraph.removeObjStack(Player.plane, arg1, arg0); + return; + } + local9.addHead(local30); + @Pc(89) ObjStack local89 = null; + @Pc(91) ObjStack local91 = null; + for (local35 = (ObjStackNode) local9.head(); local35 != null; local35 = (ObjStackNode) local9.next()) { + @Pc(103) ObjStack local103 = local35.value; + if (local103.type != local30.value.type) { + if (local89 == null) { + local89 = local103; + } + if (local103.type != local89.type && local91 == null) { + local91 = local103; + } + } + } + @Pc(152) long local152 = (arg0 << 7) + arg1 + 1610612736; + SceneGraph.setObjStack(Player.plane, arg1, arg0, SceneGraph.getTileHeight(Player.plane, arg1 * 128 + 64, arg0 * 128 + 64), local30.value, local152, local89, local91); + } + + @OriginalMember(owner = "client!dh", name = "a", descriptor = "(IIII)Lclient!wk;") + public static ComponentPointer method1148(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + @Pc(9) ComponentPointer local9 = new ComponentPointer(); + local9.anInt5879 = arg2; + local9.interfaceId = arg0; + InterfaceList.openInterfaces.put(local9, arg1); + InterfaceList.method1753(arg0); + @Pc(28) Component local28 = InterfaceList.getComponent(arg1); + if (local28 != null) { + InterfaceList.redraw(local28); + } + if (Cs1ScriptRunner.aClass13_10 != null) { + InterfaceList.redraw(Cs1ScriptRunner.aClass13_10); + Cs1ScriptRunner.aClass13_10 = null; + } + @Pc(45) int local45 = MiniMenu.size; + @Pc(53) int local53; + for (local53 = 0; local53 < local45; local53++) { + if (InterfaceList.method5(MiniMenu.actions[local53])) { + MiniMenu.remove(local53); + } + } + if (MiniMenu.size == 1) { + Cs1ScriptRunner.aBoolean108 = false; + InterfaceList.redrawScreen(InterfaceList.anInt4271, InterfaceList.anInt761, InterfaceList.anInt5138, InterfaceList.anInt436); + } else { + InterfaceList.redrawScreen(InterfaceList.anInt4271, InterfaceList.anInt761, InterfaceList.anInt5138, InterfaceList.anInt436); + local53 = Fonts.b12Full.getStringWidth(LocalizedText.CHOOSE_OPTION); + for (@Pc(95) int local95 = 0; local95 < MiniMenu.size; local95++) { + @Pc(104) int local104 = Fonts.b12Full.getStringWidth(MiniMenu.getOp(local95)); + if (local104 > local53) { + local53 = local104; + } + } + InterfaceList.anInt761 = local53 + 8; + InterfaceList.anInt436 = MiniMenu.size * 15 + (InterfaceList.aBoolean298 ? 26 : 22); + } + if (local28 != null) { + InterfaceList.method531(local28, false); + } + InterfaceList.method1626(arg0); + if (InterfaceList.topLevelInterface != -1) { + InterfaceList.runScripts(1, InterfaceList.topLevelInterface); + } + return local9; + } + + @OriginalMember(owner = "client!ah", name = "b", descriptor = "(I)V") + public static void method843() { + if (InterfaceList.clickedInventoryComponent != null || Cs1ScriptRunner.aClass13_14 != null) { + return; + } + @Pc(20) int local20 = Mouse.clickButton; + @Pc(93) int local93; + @Pc(99) int local99; + if (!Cs1ScriptRunner.aBoolean108) { + if (local20 == 1 && MiniMenu.size > 0) { + @Pc(37) short local37 = MiniMenu.actions[MiniMenu.size - 1]; + if (local37 == 25 || local37 == 23 || local37 == 48 || local37 == 7 || local37 == 13 || local37 == 47 || local37 == 5 || local37 == 43 || local37 == 35 || local37 == 58 || local37 == 22 || local37 == 1006) { + local93 = MiniMenu.intArgs1[MiniMenu.size - 1]; + local99 = MiniMenu.intArgs2[MiniMenu.size - 1]; + @Pc(103) Component local103 = InterfaceList.getComponent(local99); + @Pc(106) ServerActiveProperties local106 = InterfaceList.getServerActiveProperties(local103); + if (local106.isObjSwapEnabled() || local106.isObjReplaceEnabled()) { + InterfaceList.clickedInventoryComponentCycle = 0; + InterfaceList.draggingClickedInventoryObject = false; + if (InterfaceList.clickedInventoryComponent != null) { + InterfaceList.redraw(InterfaceList.clickedInventoryComponent); + } + InterfaceList.clickedInventoryComponent = InterfaceList.getComponent(local99); + InterfaceList.clickedInventoryComponentX = Mouse.clickX; + InterfaceList.clickedInventoryComponentY = Mouse.clickY; + InterfaceList.mouseOverInventoryObjectIndex = local93; + InterfaceList.redraw(InterfaceList.clickedInventoryComponent); + return; + } + } + } + if (local20 == 1 && (VarpDomain.anInt2952 == 1 && MiniMenu.size > 2 || MiniMenu.method4640(MiniMenu.size - 1))) { + local20 = 2; + } + if (local20 == 2 && MiniMenu.size > 0 || MiniMenu.anInt3953 == 1) { + ScriptRunner.method3901(); + } + if (local20 == 1 && MiniMenu.size > 0 || MiniMenu.anInt3953 == 2) { + MiniMenu.method1372(); + } + return; + } + @Pc(204) int local204; + if (local20 != 1) { + local93 = Mouse.lastMouseY; + local204 = Mouse.lastMouseX; + if (local204 < InterfaceList.anInt4271 - 10 || local204 > InterfaceList.anInt761 + InterfaceList.anInt4271 + 10 || InterfaceList.anInt5138 - 10 > local93 || local93 > InterfaceList.anInt436 + InterfaceList.anInt5138 + 10) { + Cs1ScriptRunner.aBoolean108 = false; + InterfaceList.redrawScreen(InterfaceList.anInt4271, InterfaceList.anInt761, InterfaceList.anInt5138, InterfaceList.anInt436); + } + } + if (local20 != 1) { + return; + } + local204 = InterfaceList.anInt4271; + local93 = InterfaceList.anInt5138; + local99 = InterfaceList.anInt761; + @Pc(265) int local265 = Mouse.clickX; + @Pc(267) int local267 = Mouse.clickY; + @Pc(269) int local269 = -1; + for (@Pc(271) int local271 = 0; local271 < MiniMenu.size; local271++) { + @Pc(289) int local289; + if (InterfaceList.aBoolean298) { + local289 = (MiniMenu.size - local271 - 1) * 15 + local93 + 35; + } else { + local289 = (MiniMenu.size - local271 - 1) * 15 + local93 + 31; + } + if (local265 > local204 && local204 + local99 > local265 && local289 - 13 < local267 && local289 + 3 > local267) { + local269 = local271; + } + } + if (local269 != -1) { + MiniMenu.doAction(local269); + } + Cs1ScriptRunner.aBoolean108 = false; + InterfaceList.redrawScreen(InterfaceList.anInt4271, InterfaceList.anInt761, InterfaceList.anInt5138, InterfaceList.anInt436); + } +} diff --git a/client/src/main/java/rt4/QuickChatCatType.java b/client/src/main/java/rt4/QuickChatCatType.java new file mode 100644 index 0000000..6e63097 --- /dev/null +++ b/client/src/main/java/rt4/QuickChatCatType.java @@ -0,0 +1,110 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!bc") +public final class QuickChatCatType extends SecondaryNode { + + @OriginalMember(owner = "client!bc", name = "O", descriptor = "[I") + public int[] phraseShortcuts; + + @OriginalMember(owner = "client!bc", name = "P", descriptor = "[I") + public int[] subcategories; + + @OriginalMember(owner = "client!bc", name = "T", descriptor = "[I") + public int[] subcategoryShortcuts; + + @OriginalMember(owner = "client!bc", name = "Y", descriptor = "Lclient!na;") + public JagString description; + + @OriginalMember(owner = "client!bc", name = "ab", descriptor = "[I") + public int[] phrases; + + @OriginalMember(owner = "client!si", name = "a", descriptor = "(ZB)I") + public static int method3933(@OriginalArg(1) byte arg0) { + return arg0 & 0xFF; + } + + @OriginalMember(owner = "client!bc", name = "d", descriptor = "(I)V") + public final void method465() { + @Pc(8) int local8; + if (this.phrases != null) { + for (local8 = 0; local8 < this.phrases.length; local8++) { + this.phrases[local8] |= 0x8000; + } + } + if (this.subcategories != null) { + for (local8 = 0; local8 < this.subcategories.length; local8++) { + this.subcategories[local8] |= 0x8000; + } + } + } + + @OriginalMember(owner = "client!bc", name = "c", descriptor = "(II)I") + public final int getPhraseByShortcut(@OriginalArg(0) int arg0) { + if (this.phrases == null) { + return -1; + } + for (@Pc(13) int local13 = 0; local13 < this.phrases.length; local13++) { + if (arg0 == this.phraseShortcuts[local13]) { + return this.phrases[local13]; + } + } + return -1; + } + + @OriginalMember(owner = "client!bc", name = "a", descriptor = "(Lclient!wa;II)V") + private void decode(@OriginalArg(0) Buffer buffer, @OriginalArg(2) int opcode) { + if (opcode == 1) { + this.description = buffer.gjstr(); + return; + } + @Pc(28) int local28; + @Pc(38) int local38; + if (opcode == 2) { + local28 = buffer.g1(); + this.subcategories = new int[local28]; + this.subcategoryShortcuts = new int[local28]; + for (local38 = 0; local38 < local28; local38++) { + this.subcategories[local38] = buffer.g2(); + this.subcategoryShortcuts[local38] = method3933(buffer.g1b()); + } + } else if (opcode == 3) { + local28 = buffer.g1(); + this.phrases = new int[local28]; + this.phraseShortcuts = new int[local28]; + for (local38 = 0; local38 < local28; local38++) { + this.phrases[local38] = buffer.g2(); + this.phraseShortcuts[local38] = method3933(buffer.g1b()); + } + } else if (opcode == 4) { + } + } + + @OriginalMember(owner = "client!bc", name = "a", descriptor = "(BI)I") + public final int getSubcategoryByShortcut(@OriginalArg(1) int arg0) { + if (this.subcategories == null) { + return -1; + } + for (@Pc(21) int local21 = 0; local21 < this.subcategories.length; local21++) { + if (this.subcategoryShortcuts[local21] == arg0) { + return this.subcategories[local21]; + } + } + return -1; + } + + @OriginalMember(owner = "client!bc", name = "a", descriptor = "(Lclient!wa;B)V") + public final void decode(@OriginalArg(0) Buffer buffer) { + while (true) { + @Pc(12) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(buffer, opcode); + } + } +} diff --git a/client/src/main/java/rt4/QuickChatCatTypeList.java b/client/src/main/java/rt4/QuickChatCatTypeList.java new file mode 100644 index 0000000..e8fa4f3 --- /dev/null +++ b/client/src/main/java/rt4/QuickChatCatTypeList.java @@ -0,0 +1,43 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class QuickChatCatTypeList { + @OriginalMember(owner = "client!fm", name = "db", descriptor = "Lclient!gn;") + public static final LruHashTable types = new LruHashTable(64); + @OriginalMember(owner = "client!gn", name = "t", descriptor = "Lclient!ve;") + public static Js5 archive1; + @OriginalMember(owner = "client!ce", name = "d", descriptor = "Lclient!ve;") + public static Js5 archive2; + + @OriginalMember(owner = "client!ja", name = "a", descriptor = "(Lclient!ve;Lclient!ve;I)V") + public static void init(@OriginalArg(0) Js5 arg0, @OriginalArg(1) Js5 arg1) { + archive1 = arg1; + archive2 = arg0; + } + + @OriginalMember(owner = "client!tb", name = "b", descriptor = "(IB)Lclient!bc;") + public static QuickChatCatType get(@OriginalArg(0) int id) { + @Pc(10) QuickChatCatType quickChatCat = (QuickChatCatType) types.get(id); + if (quickChatCat != null) { + return quickChatCat; + } + @Pc(24) byte[] data; + if (id < 32768) { + data = archive1.fetchFile(0, id); + } else { + data = archive2.fetchFile(0, id & 0x7FFF); + } + quickChatCat = new QuickChatCatType(); + if (data != null) { + quickChatCat.decode(new Buffer(data)); + } + if (id >= 32768) { + quickChatCat.method465(); + } + types.put(quickChatCat, id); + return quickChatCat; + } +} diff --git a/client/src/main/java/rt4/QuickChatCommandDecoder.java b/client/src/main/java/rt4/QuickChatCommandDecoder.java new file mode 100644 index 0000000..fd3177d --- /dev/null +++ b/client/src/main/java/rt4/QuickChatCommandDecoder.java @@ -0,0 +1,12 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!of") +public interface QuickChatCommandDecoder { + + @OriginalMember(owner = "client!of", name = "a", descriptor = "(I[IIJ)Lclient!na;") + JagString decode(@OriginalArg(0) int arg0, @OriginalArg(1) int[] arg1, @OriginalArg(3) long arg2); +} diff --git a/client/src/main/java/rt4/QuickChatPhrase.java b/client/src/main/java/rt4/QuickChatPhrase.java new file mode 100644 index 0000000..83ea2de --- /dev/null +++ b/client/src/main/java/rt4/QuickChatPhrase.java @@ -0,0 +1,17 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!bd") +public final class QuickChatPhrase { + + @OriginalMember(owner = "client!bd", name = "c", descriptor = "I") + public int id; + + @OriginalMember(owner = "client!bd", name = "f", descriptor = "Lclient!cb;") + public QuickChatPhraseType type; + + @OriginalMember(owner = "client!bd", name = "h", descriptor = "[I") + public int[] values; +} diff --git a/client/src/main/java/rt4/QuickChatPhraseType.java b/client/src/main/java/rt4/QuickChatPhraseType.java new file mode 100644 index 0000000..1fc2ce6 --- /dev/null +++ b/client/src/main/java/rt4/QuickChatPhraseType.java @@ -0,0 +1,155 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!cb") +public final class QuickChatPhraseType extends SecondaryNode { + + @OriginalMember(owner = "client!ld", name = "a", descriptor = "[I") + public static final int[] DYNAMIC_COMMAND_ENCODE_BYTES = new int[]{2, 2, 4, 0, 1, 8, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0}; + @OriginalMember(owner = "client!rc", name = "I", descriptor = "Lclient!na;") + public static final JagString aClass100_231 = JagString.parse(")3)3)3"); + @OriginalMember(owner = "client!bf", name = "C", descriptor = "[I") + public static final int[] anIntArray51 = new int[]{2, 2, 4, 2, 1, 8, 4, 1, 4, 4, 2, 1, 1, 1, 4, 1}; + @OriginalMember(owner = "client!qg", name = "U", descriptor = "Lclient!na;") + public static final JagString aClass100_891 = JagString.parse(""); + @OriginalMember(owner = "client!vh", name = "p", descriptor = "[I") + public static final int[] anIntArray412 = new int[]{1, 0, 0, 0, 1, 0, 2, 1, 1, 1, 0, 2, 0, 0, 1, 0}; + @OriginalMember(owner = "client!cb", name = "L", descriptor = "[I") + private int[] anIntArray71; + + @OriginalMember(owner = "client!cb", name = "M", descriptor = "[I") + public int[] automaticResponses; + + @OriginalMember(owner = "client!cb", name = "U", descriptor = "[[I") + private int[][] anIntArrayArray5; + + @OriginalMember(owner = "client!cb", name = "V", descriptor = "[Lclient!na;") + private JagString[] aClass100Array35; + + @OriginalMember(owner = "client!cb", name = "O", descriptor = "Z") + public boolean aBoolean60 = true; + + @OriginalMember(owner = "client!vh", name = "a", descriptor = "(ILclient!wa;)Lclient!bd;") + public static QuickChatPhrase method3568(@OriginalArg(1) Buffer arg0) { + @Pc(3) QuickChatPhrase local3 = new QuickChatPhrase(); + local3.id = arg0.g2(); + local3.type = QuickChatPhraseTypeList.get(local3.id); + return local3; + } + + @OriginalMember(owner = "client!cb", name = "a", descriptor = "(Lclient!wa;[IZ)V") + public final void encodeMessage(@OriginalArg(0) Buffer arg0, @OriginalArg(1) int[] arg1) { + if (this.anIntArray71 == null) { + return; + } + for (@Pc(14) int local14 = 0; this.anIntArray71.length > local14 && local14 < arg1.length; local14++) { + @Pc(38) int local38 = DYNAMIC_COMMAND_ENCODE_BYTES[this.getDynamicCommand(local14)]; + if (local38 > 0) { + arg0.pVarLong(local38, arg1[local14]); + } + } + } + + @OriginalMember(owner = "client!cb", name = "a", descriptor = "(Lclient!wa;I)V") + public final void decode(@OriginalArg(0) Buffer buffer) { + while (true) { + @Pc(9) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(buffer, opcode); + } + } + + @OriginalMember(owner = "client!cb", name = "e", descriptor = "(I)V") + public final void method763() { + if (this.automaticResponses != null) { + for (@Pc(7) int local7 = 0; local7 < this.automaticResponses.length; local7++) { + this.automaticResponses[local7] |= 0x8000; + } + } + } + + @OriginalMember(owner = "client!cb", name = "a", descriptor = "(III)I") + public final int getDynamicCommandParam(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + if (this.anIntArray71 == null || arg1 < 0 || arg1 > this.anIntArray71.length) { + return -1; + } else if (this.anIntArrayArray5[arg1] == null || arg0 < 0 || arg0 > this.anIntArrayArray5[arg1].length) { + return -1; + } else { + return this.anIntArrayArray5[arg1][arg0]; + } + } + + @OriginalMember(owner = "client!cb", name = "c", descriptor = "(II)I") + public final int getDynamicCommand(@OriginalArg(1) int arg0) { + return this.anIntArray71 == null || arg0 < 0 || arg0 > this.anIntArray71.length ? -1 : this.anIntArray71[arg0]; + } + + @OriginalMember(owner = "client!cb", name = "a", descriptor = "(Z)I") + public final int getDynamicCommandCount() { + return this.anIntArray71 == null ? 0 : this.anIntArray71.length; + } + + @OriginalMember(owner = "client!cb", name = "a", descriptor = "(Lclient!wa;II)V") + private void decode(@OriginalArg(0) Buffer buffer, @OriginalArg(1) int opcode) { + if (opcode == 1) { + this.aClass100Array35 = buffer.gjstr().split(60); + return; + } + @Pc(32) int local32; + @Pc(42) int local42; + if (opcode == 2) { + local32 = buffer.g1(); + this.automaticResponses = new int[local32]; + for (local42 = 0; local42 < local32; local42++) { + this.automaticResponses[local42] = buffer.g2(); + } + } else if (opcode == 3) { + local32 = buffer.g1(); + this.anIntArray71 = new int[local32]; + this.anIntArrayArray5 = new int[local32][]; + for (local42 = 0; local42 < local32; local42++) { + @Pc(49) int local49 = buffer.g2(); + this.anIntArray71[local42] = local49; + this.anIntArrayArray5[local42] = new int[anIntArray412[local49]]; + for (@Pc(64) int local64 = 0; local64 < anIntArray412[local49]; local64++) { + this.anIntArrayArray5[local42][local64] = buffer.g2(); + } + } + } else if (opcode == 4) { + this.aBoolean60 = false; + } + } + + @OriginalMember(owner = "client!cb", name = "f", descriptor = "(I)Lclient!na;") + public final JagString getText() { + @Pc(15) JagString local15 = JagString.allocate(80); + if (this.aClass100Array35 == null) { + return aClass100_891; + } + local15.method3113(this.aClass100Array35[0]); + for (@Pc(31) int local31 = 1; local31 < this.aClass100Array35.length; local31++) { + local15.method3113(aClass100_231); + local15.method3113(this.aClass100Array35[local31]); + } + return local15.method3156(); + } + + @OriginalMember(owner = "client!cb", name = "a", descriptor = "(ILclient!wa;)Lclient!na;") + public final JagString decodeMessage(@OriginalArg(1) Buffer arg0) { + @Pc(17) JagString local17 = JagString.allocate(80); + if (this.anIntArray71 != null) { + for (@Pc(22) int local22 = 0; local22 < this.anIntArray71.length; local22++) { + local17.method3113(this.aClass100Array35[local22]); + local17.method3113(QuickChatPhraseTypeList.method1838(this.anIntArrayArray5[local22], arg0.gVarLong(anIntArray51[this.anIntArray71[local22]]), this.anIntArray71[local22])); + } + } + local17.method3113(this.aClass100Array35[this.aClass100Array35.length - 1]); + return local17.method3156(); + } +} diff --git a/client/src/main/java/rt4/QuickChatPhraseTypeList.java b/client/src/main/java/rt4/QuickChatPhraseTypeList.java new file mode 100644 index 0000000..6cbc448 --- /dev/null +++ b/client/src/main/java/rt4/QuickChatPhraseTypeList.java @@ -0,0 +1,67 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class QuickChatPhraseTypeList { + @OriginalMember(owner = "client!ud", name = "P", descriptor = "Lclient!gn;") + public static final LruHashTable types = new LruHashTable(64); + @OriginalMember(owner = "client!vf", name = "n", descriptor = "Lclient!ve;") + public static Js5 archive2; + @OriginalMember(owner = "client!id", name = "j", descriptor = "Lclient!of;") + public static QuickChatCommandDecoder decoder = null; + @OriginalMember(owner = "client!te", name = "y", descriptor = "Lclient!ve;") + public static Js5 archive1; + @OriginalMember(owner = "client!le", name = "e", descriptor = "I") + public static int anInt3490 = 0; + @OriginalMember(owner = "client!ck", name = "C", descriptor = "I") + public static int anInt1047 = 0; + + @OriginalMember(owner = "client!ej", name = "a", descriptor = "(Lclient!ve;ILclient!ve;Lclient!of;)V") + public static void init(@OriginalArg(0) Js5 arg0, @OriginalArg(2) Js5 arg1, @OriginalArg(3) QuickChatCommandDecoder arg2) { + archive2 = arg0; + decoder = arg2; + archive1 = arg1; + if (archive1 != null) { + anInt3490 = archive1.getGroupCapacity(1); + } + if (archive2 != null) { + anInt1047 = archive2.getGroupCapacity(1); + } + } + + @OriginalMember(owner = "client!sj", name = "b", descriptor = "(II)Lclient!cb;") + public static QuickChatPhraseType get(@OriginalArg(1) int id) { + @Pc(10) QuickChatPhraseType quickChatPhrase = (QuickChatPhraseType) types.get(id); + if (quickChatPhrase != null) { + return quickChatPhrase; + } + @Pc(27) byte[] data; + if (id < 32768) { + data = archive1.fetchFile(1, id); + } else { + data = archive2.fetchFile(1, id & 0x7FFF); + } + quickChatPhrase = new QuickChatPhraseType(); + if (data != null) { + quickChatPhrase.decode(new Buffer(data)); + } + if (id >= 32768) { + quickChatPhrase.method763(); + } + types.put(quickChatPhrase, id); + return quickChatPhrase; + } + + @OriginalMember(owner = "client!ha", name = "a", descriptor = "([IJIZ)Lclient!na;") + public static JagString method1838(@OriginalArg(0) int[] arg0, @OriginalArg(1) long arg1, @OriginalArg(2) int arg2) { + if (decoder != null) { + @Pc(17) JagString local17 = decoder.decode(arg2, arg0, arg1); + if (local17 != null) { + return local17; + } + } + return JagString.method2929(arg1); + } +} diff --git a/client/src/main/java/rt4/RandomUtils.java b/client/src/main/java/rt4/RandomUtils.java new file mode 100644 index 0000000..bdeb287 --- /dev/null +++ b/client/src/main/java/rt4/RandomUtils.java @@ -0,0 +1,31 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.util.Random; + +public class RandomUtils { + @OriginalMember(owner = "client!d", name = "c", descriptor = "(III)I") + public static int shuffle(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(11) int local11 = arg1 - 1 & arg0 >> 31; + return local11 + (arg0 + (arg0 >>> 31)) % arg1; + } + + @OriginalMember(owner = "client!ni", name = "a", descriptor = "(BILjava/util/Random;)I") + public static int nextInt(@OriginalArg(1) int arg0, @OriginalArg(2) Random arg1) { + if (arg0 <= 0) { + throw new IllegalArgumentException(); + } else if (IntUtils.isPowerOfTwo(arg0)) { + return (int) (((long) arg1.nextInt() & 0xFFFFFFFFL) * (long) arg0 >> 32); + } else { + @Pc(38) int local38 = Integer.MIN_VALUE - (int) (0x100000000L % (long) arg0); + @Pc(41) int local41; + do { + local41 = arg1.nextInt(); + } while (local38 <= local41); + return shuffle(local41, arg0); + } + } +} diff --git a/client/src/main/java/rt4/Rasteriser.java b/client/src/main/java/rt4/Rasteriser.java new file mode 100644 index 0000000..228d5fe --- /dev/null +++ b/client/src/main/java/rt4/Rasteriser.java @@ -0,0 +1,3777 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public final class Rasteriser { + + @OriginalMember(owner = "client!hf", name = "b", descriptor = "I") + public static int centerY; + + @OriginalMember(owner = "client!hf", name = "e", descriptor = "Lclient!m;") + public static TextureProvider textureProvider; + + @OriginalMember(owner = "client!tg", name = "c", descriptor = "I") + public static int screenLowerX; + + @OriginalMember(owner = "client!ub", name = "m", descriptor = "I") + public static int screenUpperX; + + @OriginalMember(owner = "client!a", name = "g", descriptor = "I") + public static int screenLowerY; + + @OriginalMember(owner = "client!li", name = "x", descriptor = "I") + public static int screenUpperY; + + @OriginalMember(owner = "client!hf", name = "k", descriptor = "I") + private static int height; + + @OriginalMember(owner = "client!hf", name = "m", descriptor = "I") + public static int centerX; + + @OriginalMember(owner = "client!hf", name = "n", descriptor = "I") + public static int width; + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "[I") + public static final int[] palette = new int[65536]; + + @OriginalMember(owner = "client!hf", name = "c", descriptor = "[I") + private static int[] offsets = new int[1024]; + + @OriginalMember(owner = "client!hf", name = "d", descriptor = "Z") + public static boolean textureHasTransparency = false; + + @OriginalMember(owner = "client!hf", name = "i", descriptor = "Z") + private static boolean opaque = false; + + @OriginalMember(owner = "client!hf", name = "j", descriptor = "Z") + public static boolean jagged = true; + + @OriginalMember(owner = "client!hf", name = "l", descriptor = "Z") + private static boolean lowDetail = false; + + @OriginalMember(owner = "client!hf", name = "o", descriptor = "F") + private static float brightness = 1.0F; + + @OriginalMember(owner = "client!hf", name = "p", descriptor = "Z") + public static boolean testX = false; + + @OriginalMember(owner = "client!hf", name = "q", descriptor = "I") + public static int alpha = 0; + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "()V") + public static void prepare() { + prepareOffsets(SoftwareRaster.clipLeft, SoftwareRaster.clipTop, SoftwareRaster.clipRight, SoftwareRaster.clipBottom); + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "(IIIIIIIIIIIIIIIIIII)V") + public static void fillTexturedTriangle(@OriginalArg(0) int yA, @OriginalArg(1) int yB, @OriginalArg(2) int yC, @OriginalArg(3) int xA, @OriginalArg(4) int xB, @OriginalArg(5) int xC, @OriginalArg(6) int colorA, @OriginalArg(7) int colorB, @OriginalArg(8) int colorC, @OriginalArg(9) int viewXA, @OriginalArg(10) int viewXB, @OriginalArg(11) int viewXC, @OriginalArg(12) int viewYA, @OriginalArg(13) int viewYB, @OriginalArg(14) int viewYC, @OriginalArg(15) int viewZA, @OriginalArg(16) int viewZB, @OriginalArg(17) int viewZC, @OriginalArg(18) int textureId) { + @Pc(5) int[] texels = textureProvider.method3232(textureId, brightness); + if (texels == null) { + int averageColor = textureProvider.getAverageColor(textureId); + fillGouraudTriangle(yA, yB, yC, xA, xB, xC, ColorUtils.multiplyLightness(averageColor, colorA), ColorUtils.multiplyLightness(averageColor, colorB), ColorUtils.multiplyLightness(averageColor, colorC)); + return; + } + + lowDetail = textureProvider.isLowDetail(textureId); + opaque = textureProvider.isOpaque(textureId); + @Pc(12) int dxAB = xB - xA; + @Pc(47) int dyAB = yB - yA; + @Pc(51) int dxAC = xC - xA; + @Pc(55) int dyAC = yC - yA; + @Pc(59) int colorStepAB = colorB - colorA; + @Pc(63) int colorStepAC = colorC - colorA; + + @Pc(65) int xStepAB = 0; + if (yB != yA) { + xStepAB = (xB - xA << 16) / (yB - yA); + } + + @Pc(80) int xStepBC = 0; + if (yC != yB) { + xStepBC = (xC - xB << 16) / (yC - yB); + } + + @Pc(95) int xStepAC = 0; + if (yC != yA) { + xStepAC = (xA - xC << 16) / (yA - yC); + } + + @Pc(116) int length = dxAB * dyAC - dxAC * dyAB; + if (length == 0) { + return; + } + + @Pc(131) int colorStepA = (colorStepAB * dyAC - colorStepAC * dyAB << 9) / length; + @Pc(143) int colorStepB = (colorStepAC * dxAB - colorStepAB * dxAC << 9) / length; + + @Pc(147) int local147 = viewXA - viewXB; + @Pc(151) int local151 = viewYA - viewYB; + @Pc(155) int local155 = viewZA - viewZB; + + @Pc(159) int local159 = viewXC - viewXA; + @Pc(163) int local163 = viewYC - viewYA; + @Pc(167) int local167 = viewZC - viewZA; + + @Pc(177) int local177 = local159 * viewYA - local163 * viewXA << 14; + @Pc(187) int local187 = local163 * viewZA - local167 * viewYA << 5; + @Pc(197) int local197 = local167 * viewXA - local159 * viewZA << 5; + + @Pc(207) int local207 = local147 * viewYA - local151 * viewXA << 14; + @Pc(217) int local217 = local151 * viewZA - local155 * viewYA << 5; + @Pc(227) int local227 = local155 * viewXA - local147 * viewZA << 5; + + @Pc(237) int local237 = local151 * local159 - local147 * local163 << 14; + @Pc(247) int local247 = local155 * local163 - local151 * local167 << 5; + @Pc(257) int local257 = local147 * local167 - local155 * local159 << 5; + @Pc(336) int local336; + + if (yA <= yB && yA <= yC) { + if (yA < height) { + if (yB > height) { + yB = height; + } + + if (yC > height) { + yC = height; + } + + colorA = (colorA << 9) + colorStepA - colorStepA * xA; + if (yB < yC) { + xC = xA <<= 0x10; + if (yA < 0) { + xC -= xStepAC * yA; + xA -= xStepAB * yA; + colorA -= colorStepB * yA; + yA = 0; + } + + xB <<= 0x10; + if (yB < 0) { + xB -= xStepBC * yB; + yB = 0; + } + + local336 = yA - centerY; + local177 += local197 * local336; + local207 += local227 * local336; + local237 += local257 * local336; + if (yA != yB && xStepAC < xStepAB || yA == yB && xStepAC > xStepBC) { + yC -= yB; + yB -= yA; + yA = offsets[yA]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yA, xC >> 16, xB >> 16, colorA, colorStepA, local177, local207, local237, local187, local217, local247); + xC += xStepAC; + xB += xStepBC; + colorA += colorStepB; + yA += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yA, xC >> 16, xA >> 16, colorA, colorStepA, local177, local207, local237, local187, local217, local247); + xC += xStepAC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } else { + yC -= yB; + yB -= yA; + yA = offsets[yA]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yA, xB >> 16, xC >> 16, colorA, colorStepA, local177, local207, local237, local187, local217, local247); + xC += xStepAC; + xB += xStepBC; + colorA += colorStepB; + yA += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yA, xA >> 16, xC >> 16, colorA, colorStepA, local177, local207, local237, local187, local217, local247); + xC += xStepAC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + } else { + xB = xA <<= 0x10; + if (yA < 0) { + xB -= xStepAC * yA; + xA -= xStepAB * yA; + colorA -= colorStepB * yA; + yA = 0; + } + + xC <<= 0x10; + if (yC < 0) { + xC -= xStepBC * yC; + yC = 0; + } + + local336 = yA - centerY; + local177 += local197 * local336; + local207 += local227 * local336; + local237 += local257 * local336; + if ((yA == yC || xStepAC >= xStepAB) && (yA != yC || xStepBC <= xStepAB)) { + yB -= yC; + yC -= yA; + yA = offsets[yA]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + drawTexturedScanline(SoftwareRaster.pixels, texels, yA, xA >> 16, xC >> 16, colorA, colorStepA, local177, local207, local237, local187, local217, local247); + xC += xStepBC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yA, xA >> 16, xB >> 16, colorA, colorStepA, local177, local207, local237, local187, local217, local247); + xB += xStepAC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } else { + yB -= yC; + yC -= yA; + yA = offsets[yA]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yA, xC >> 16, xA >> 16, colorA, colorStepA, local177, local207, local237, local187, local217, local247); + xC += xStepBC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yA, xB >> 16, xA >> 16, colorA, colorStepA, local177, local207, local237, local187, local217, local247); + xB += xStepAC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + } + } + } else if (yB <= yC) { + if (yB < height) { + if (yC > height) { + yC = height; + } + + if (yA > height) { + yA = height; + } + + colorB = (colorB << 9) + colorStepA - colorStepA * xB; + if (yC < yA) { + xA = xB <<= 0x10; + if (yB < 0) { + xA -= xStepAB * yB; + xB -= xStepBC * yB; + colorB -= colorStepB * yB; + yB = 0; + } + + xC <<= 0x10; + if (yC < 0) { + xC -= xStepAC * yC; + yC = 0; + } + + local336 = yB - centerY; + local177 += local197 * local336; + local207 += local227 * local336; + local237 += local257 * local336; + if (yB != yC && xStepAB < xStepBC || yB == yC && xStepAB > xStepAC) { + yA -= yC; + yC -= yB; + yB = offsets[yB]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yB, xA >> 16, xC >> 16, colorB, colorStepA, local177, local207, local237, local187, local217, local247); + xA += xStepAB; + xC += xStepAC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yB, xA >> 16, xB >> 16, colorB, colorStepA, local177, local207, local237, local187, local217, local247); + xA += xStepAB; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } else { + yA -= yC; + yC -= yB; + yB = offsets[yB]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yB, xC >> 16, xA >> 16, colorB, colorStepA, local177, local207, local237, local187, local217, local247); + xA += xStepAB; + xC += xStepAC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yB, xB >> 16, xA >> 16, colorB, colorStepA, local177, local207, local237, local187, local217, local247); + xA += xStepAB; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + } else { + xC = xB <<= 0x10; + if (yB < 0) { + xC -= xStepAB * yB; + xB -= xStepBC * yB; + colorB -= colorStepB * yB; + yB = 0; + } + + xA <<= 0x10; + if (yA < 0) { + xA -= xStepAC * yA; + yA = 0; + } + + local336 = yB - centerY; + local177 += local197 * local336; + local207 += local227 * local336; + local237 += local257 * local336; + if (xStepAB < xStepBC) { + yC -= yA; + yA -= yB; + yB = offsets[yB]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yB, xA >> 16, xB >> 16, colorB, colorStepA, local177, local207, local237, local187, local217, local247); + xA += xStepAC; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yB, xC >> 16, xB >> 16, colorB, colorStepA, local177, local207, local237, local187, local217, local247); + xC += xStepAB; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } else { + yC -= yA; + yA -= yB; + yB = offsets[yB]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yB, xB >> 16, xA >> 16, colorB, colorStepA, local177, local207, local237, local187, local217, local247); + xA += xStepAC; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yB, xB >> 16, xC >> 16, colorB, colorStepA, local177, local207, local237, local187, local217, local247); + xC += xStepAB; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + } + } + } else if (yC < height) { + if (yA > height) { + yA = height; + } + + if (yB > height) { + yB = height; + } + + colorC = (colorC << 9) + colorStepA - colorStepA * xC; + if (yA < yB) { + xB = xC <<= 0x10; + if (yC < 0) { + xB -= xStepBC * yC; + xC -= xStepAC * yC; + colorC -= colorStepB * yC; + yC = 0; + } + + xA <<= 0x10; + if (yA < 0) { + xA -= xStepAB * yA; + yA = 0; + } + + local336 = yC - centerY; + local177 += local197 * local336; + local207 += local227 * local336; + local237 += local257 * local336; + if (xStepBC < xStepAC) { + yB -= yA; + yA -= yC; + yC = offsets[yC]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yC, xB >> 16, xA >> 16, colorC, colorStepA, local177, local207, local237, local187, local217, local247); + xB += xStepBC; + xA += xStepAB; + colorC += colorStepB; + yC += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yC, xB >> 16, xC >> 16, colorC, colorStepA, local177, local207, local237, local187, local217, local247); + xB += xStepBC; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } else { + yB -= yA; + yA -= yC; + yC = offsets[yC]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yC, xA >> 16, xB >> 16, colorC, colorStepA, local177, local207, local237, local187, local217, local247); + xB += xStepBC; + xA += xStepAB; + colorC += colorStepB; + yC += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yC, xC >> 16, xB >> 16, colorC, colorStepA, local177, local207, local237, local187, local217, local247); + xB += xStepBC; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + } else { + xA = xC <<= 0x10; + if (yC < 0) { + xA -= xStepBC * yC; + xC -= xStepAC * yC; + colorC -= colorStepB * yC; + yC = 0; + } + + xB <<= 0x10; + if (yB < 0) { + xB -= xStepAB * yB; + yB = 0; + } + + local336 = yC - centerY; + local177 += local197 * local336; + local207 += local227 * local336; + local237 += local257 * local336; + if (xStepBC < xStepAC) { + yA -= yB; + yB -= yC; + yC = offsets[yC]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yC, xB >> 16, xC >> 16, colorC, colorStepA, local177, local207, local237, local187, local217, local247); + xB += xStepAB; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yC, xA >> 16, xC >> 16, colorC, colorStepA, local177, local207, local237, local187, local217, local247); + xA += xStepBC; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } else { + yA -= yB; + yB -= yC; + yC = offsets[yC]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yC, xC >> 16, xB >> 16, colorC, colorStepA, local177, local207, local237, local187, local217, local247); + xB += xStepAB; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + + drawTexturedScanline(SoftwareRaster.pixels, texels, yC, xC >> 16, xA >> 16, colorC, colorStepA, local177, local207, local237, local187, local217, local247); + xA += xStepBC; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + local177 += local197; + local207 += local227; + local237 += local257; + } + } + } + } + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "(F)V") + public static void setBrightness(@OriginalArg(0) float brightness) { + randBrightness(brightness); + calculateBrightness(); + } + + @OriginalMember(owner = "client!hf", name = "b", descriptor = "(IIIIIIIIIIIIIIIIIII)V") + public static void fillTexturedAlphaTriangle(@OriginalArg(0) int yA, @OriginalArg(1) int yB, @OriginalArg(2) int yC, @OriginalArg(3) int xA, @OriginalArg(4) int xB, @OriginalArg(5) int xC, @OriginalArg(6) int colorA, @OriginalArg(7) int colorB, @OriginalArg(8) int colorC, @OriginalArg(9) int viewXA, @OriginalArg(10) int viewXB, @OriginalArg(11) int viewXC, @OriginalArg(12) int viewYA, @OriginalArg(13) int viewYB, @OriginalArg(14) int viewYC, @OriginalArg(15) int viewZA, @OriginalArg(16) int viewZB, @OriginalArg(17) int viewZC, @OriginalArg(18) int textureId) { + @Pc(5) int[] texels = textureProvider.method3232(textureId, brightness); + if (texels == null || alpha > 10) { + int average = textureProvider.getAverageColor(textureId); + textureHasTransparency = true; + fillGouraudTriangle(yA, yB, yC, xA, xB, xC, ColorUtils.multiplyLightness(average, colorA), ColorUtils.multiplyLightness(average, colorB), ColorUtils.multiplyLightness(average, colorC)); + return; + } + + lowDetail = textureProvider.isLowDetail(textureId); + opaque = textureProvider.isOpaque(textureId); + @Pc(15) int dxAB = xB - xA; + @Pc(52) int dyAB = yB - yA; + @Pc(56) int dxAC = xC - xA; + @Pc(60) int dyAC = yC - yA; + @Pc(64) int colorStepAB = colorB - colorA; + @Pc(68) int colorStepAC = colorC - colorA; + + @Pc(70) int xStepAB = 0; + if (yB != yA) { + xStepAB = (xB - xA << 16) / (yB - yA); + } + + @Pc(85) int xStepBC = 0; + if (yC != yB) { + xStepBC = (xC - xB << 16) / (yC - yB); + } + + @Pc(100) int xStepAC = 0; + if (yC != yA) { + xStepAC = (xA - xC << 16) / (yA - yC); + } + + @Pc(121) int length = dxAB * dyAC - dxAC * dyAB; + if (length == 0) { + return; + } + + @Pc(136) int colorStepA = (colorStepAB * dyAC - colorStepAC * dyAB << 9) / length; + @Pc(148) int colorStepB = (colorStepAC * dxAB - colorStepAB * dxAC << 9) / length; + + @Pc(152) int local152 = viewXA - viewXB; + @Pc(156) int local156 = viewYA - viewYB; + @Pc(160) int local160 = viewZA - viewZB; + + @Pc(164) int local164 = viewXC - viewXA; + @Pc(168) int local168 = viewYC - viewYA; + @Pc(172) int local172 = viewZC - viewZA; + + @Pc(182) int local182 = local164 * viewYA - local168 * viewXA << 14; + @Pc(192) int local192 = local168 * viewZA - local172 * viewYA << 8; + @Pc(202) int local202 = local172 * viewXA - local164 * viewZA << 5; + @Pc(212) int local212 = local152 * viewYA - local156 * viewXA << 14; + @Pc(222) int local222 = local156 * viewZA - local160 * viewYA << 8; + @Pc(232) int local232 = local160 * viewXA - local152 * viewZA << 5; + @Pc(242) int local242 = local156 * local164 - local152 * local168 << 14; + @Pc(252) int local252 = local160 * local168 - local156 * local172 << 8; + @Pc(262) int local262 = local152 * local172 - local160 * local164 << 5; + @Pc(341) int local341; + + if (yA <= yB && yA <= yC) { + if (yA < height) { + if (yB > height) { + yB = height; + } + if (yC > height) { + yC = height; + } + + colorA = (colorA << 9) + colorStepA - colorStepA * xA; + if (yB < yC) { + xC = xA <<= 0x10; + if (yA < 0) { + xC -= xStepAC * yA; + xA -= xStepAB * yA; + colorA -= colorStepB * yA; + yA = 0; + } + + xB <<= 0x10; + if (yB < 0) { + xB -= xStepBC * yB; + yB = 0; + } + + local341 = yA - centerY; + local182 += local202 * local341; + local212 += local232 * local341; + local242 += local262 * local341; + if (yA != yB && xStepAC < xStepAB || yA == yB && xStepAC > xStepBC) { + yC -= yB; + yB -= yA; + yA = offsets[yA]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yA, xC >> 16, xB >> 16, colorA, colorStepA, local182, local212, local242, local192, local222, local252); + xC += xStepAC; + xB += xStepBC; + colorA += colorStepB; + yA += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yA, xC >> 16, xA >> 16, colorA, colorStepA, local182, local212, local242, local192, local222, local252); + xC += xStepAC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } else { + yC -= yB; + yB -= yA; + yA = offsets[yA]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yA, xB >> 16, xC >> 16, colorA, colorStepA, local182, local212, local242, local192, local222, local252); + xC += xStepAC; + xB += xStepBC; + colorA += colorStepB; + yA += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yA, xA >> 16, xC >> 16, colorA, colorStepA, local182, local212, local242, local192, local222, local252); + xC += xStepAC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + } else { + xB = xA <<= 0x10; + if (yA < 0) { + xB -= xStepAC * yA; + xA -= xStepAB * yA; + colorA -= colorStepB * yA; + yA = 0; + } + + xC <<= 0x10; + if (yC < 0) { + xC -= xStepBC * yC; + yC = 0; + } + + local341 = yA - centerY; + local182 += local202 * local341; + local212 += local232 * local341; + local242 += local262 * local341; + if ((yA == yC || xStepAC >= xStepAB) && (yA != yC || xStepBC <= xStepAB)) { + yB -= yC; + yC -= yA; + yA = offsets[yA]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yA, xA >> 16, xC >> 16, colorA, colorStepA, local182, local212, local242, local192, local222, local252); + xC += xStepBC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yA, xA >> 16, xB >> 16, colorA, colorStepA, local182, local212, local242, local192, local222, local252); + xB += xStepAC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } else { + yB -= yC; + yC -= yA; + yA = offsets[yA]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yA, xC >> 16, xA >> 16, colorA, colorStepA, local182, local212, local242, local192, local222, local252); + xC += xStepBC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yA, xB >> 16, xA >> 16, colorA, colorStepA, local182, local212, local242, local192, local222, local252); + xB += xStepAC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + } + } + } else if (yB <= yC) { + if (yB < height) { + if (yC > height) { + yC = height; + } + if (yA > height) { + yA = height; + } + + colorB = (colorB << 9) + colorStepA - colorStepA * xB; + if (yC < yA) { + xA = xB <<= 0x10; + if (yB < 0) { + xA -= xStepAB * yB; + xB -= xStepBC * yB; + colorB -= colorStepB * yB; + yB = 0; + } + xC <<= 0x10; + if (yC < 0) { + xC -= xStepAC * yC; + yC = 0; + } + + local341 = yB - centerY; + local182 += local202 * local341; + local212 += local232 * local341; + local242 += local262 * local341; + if (yB != yC && xStepAB < xStepBC || yB == yC && xStepAB > xStepAC) { + yA -= yC; + yC -= yB; + yB = offsets[yB]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yB, xA >> 16, xC >> 16, colorB, colorStepA, local182, local212, local242, local192, local222, local252); + xA += xStepAB; + xC += xStepAC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yB, xA >> 16, xB >> 16, colorB, colorStepA, local182, local212, local242, local192, local222, local252); + xA += xStepAB; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } else { + yA -= yC; + yC -= yB; + yB = offsets[yB]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yB, xC >> 16, xA >> 16, colorB, colorStepA, local182, local212, local242, local192, local222, local252); + xA += xStepAB; + xC += xStepAC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yB, xB >> 16, xA >> 16, colorB, colorStepA, local182, local212, local242, local192, local222, local252); + xA += xStepAB; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + } else { + xC = xB <<= 0x10; + if (yB < 0) { + xC -= xStepAB * yB; + xB -= xStepBC * yB; + colorB -= colorStepB * yB; + yB = 0; + } + + xA <<= 0x10; + if (yA < 0) { + xA -= xStepAC * yA; + yA = 0; + } + + local341 = yB - centerY; + local182 += local202 * local341; + local212 += local232 * local341; + local242 += local262 * local341; + if (xStepAB < xStepBC) { + yC -= yA; + yA -= yB; + yB = offsets[yB]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yB, xA >> 16, xB >> 16, colorB, colorStepA, local182, local212, local242, local192, local222, local252); + xA += xStepAC; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yB, xC >> 16, xB >> 16, colorB, colorStepA, local182, local212, local242, local192, local222, local252); + xC += xStepAB; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } else { + yC -= yA; + yA -= yB; + yB = offsets[yB]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yB, xB >> 16, xA >> 16, colorB, colorStepA, local182, local212, local242, local192, local222, local252); + xA += xStepAC; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yB, xB >> 16, xC >> 16, colorB, colorStepA, local182, local212, local242, local192, local222, local252); + xC += xStepAB; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + } + } + } else if (yC < height) { + if (yA > height) { + yA = height; + } + if (yB > height) { + yB = height; + } + + colorC = (colorC << 9) + colorStepA - colorStepA * xC; + if (yA < yB) { + xB = xC <<= 0x10; + if (yC < 0) { + xB -= xStepBC * yC; + xC -= xStepAC * yC; + colorC -= colorStepB * yC; + yC = 0; + } + xA <<= 0x10; + if (yA < 0) { + xA -= xStepAB * yA; + yA = 0; + } + + local341 = yC - centerY; + local182 += local202 * local341; + local212 += local232 * local341; + local242 += local262 * local341; + if (xStepBC < xStepAC) { + yB -= yA; + yA -= yC; + yC = offsets[yC]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yC, xB >> 16, xA >> 16, colorC, colorStepA, local182, local212, local242, local192, local222, local252); + xB += xStepBC; + xA += xStepAB; + colorC += colorStepB; + yC += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yC, xB >> 16, xC >> 16, colorC, colorStepA, local182, local212, local242, local192, local222, local252); + xB += xStepBC; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } else { + yB -= yA; + yA -= yC; + yC = offsets[yC]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yC, xA >> 16, xB >> 16, colorC, colorStepA, local182, local212, local242, local192, local222, local252); + xB += xStepBC; + xA += xStepAB; + colorC += colorStepB; + yC += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yC, xC >> 16, xB >> 16, colorC, colorStepA, local182, local212, local242, local192, local222, local252); + xB += xStepBC; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + } else { + xA = xC <<= 0x10; + if (yC < 0) { + xA -= xStepBC * yC; + xC -= xStepAC * yC; + colorC -= colorStepB * yC; + yC = 0; + } + + xB <<= 0x10; + if (yB < 0) { + xB -= xStepAB * yB; + yB = 0; + } + + local341 = yC - centerY; + local182 += local202 * local341; + local212 += local232 * local341; + local242 += local262 * local341; + if (xStepBC < xStepAC) { + yA -= yB; + yB -= yC; + yC = offsets[yC]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yC, xB >> 16, xC >> 16, colorC, colorStepA, local182, local212, local242, local192, local222, local252); + xB += xStepAB; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yC, xA >> 16, xC >> 16, colorC, colorStepA, local182, local212, local242, local192, local222, local252); + xA += xStepBC; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } else { + yA -= yB; + yB -= yC; + yC = offsets[yC]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yC, xC >> 16, xB >> 16, colorC, colorStepA, local182, local212, local242, local192, local222, local252); + xB += xStepAB; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + + drawTexturedAlphaScanline(SoftwareRaster.pixels, texels, yC, xC >> 16, xA >> 16, colorC, colorStepA, local182, local212, local242, local192, local222, local252); + xA += xStepBC; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + local182 += local202; + local212 += local232; + local242 += local262; + } + } + } + } + } + + @OriginalMember(owner = "client!hf", name = "b", descriptor = "()I") + public static int getOffsetRemainder() { + return offsets[0] % SoftwareRaster.width; + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "(Lclient!m;)V") + public static void unpackTextures(@OriginalArg(0) TextureProvider provider) { + textureProvider = provider; + } + + @OriginalMember(owner = "client!hf", name = "c", descriptor = "()V") + public static void prepareOffsets() { + centerX = width / 2; + centerY = height / 2; + screenLowerX = -centerX; + screenUpperX = width - centerX; + screenLowerY = -centerY; + screenUpperY = height - centerY; + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "([I[IIIIIIIIIIIIII)V") + private static void drawTexturedAlphaScanline(@OriginalArg(0) int[] dst, @OriginalArg(1) int[] texels, @OriginalArg(4) int offset, @OriginalArg(5) int xA, @OriginalArg(6) int xB, @OriginalArg(7) int lightnessA, @OriginalArg(8) int lightnessB, @OriginalArg(9) int verticalA, @OriginalArg(10) int verticalB, @OriginalArg(11) int verticalC, @OriginalArg(12) int horizontalA, @OriginalArg(13) int horizontalB, @OriginalArg(14) int horizontalC) { + if (testX) { + if (xB > width) { + xB = width; + } + + if (xA < 0) { + xA = 0; + } + } + + if (xA >= xB) { + return; + } + + offset += xA; + lightnessA += lightnessB * xA; + + @Pc(28) int length = xB - xA; + @Pc(140) int lightness; + @Pc(128) int uvStep; + @Pc(68) int uA; + @Pc(72) int vA; + @Pc(99) int uB; + @Pc(103) int vB; + @Pc(62) int c; + @Pc(34) int delta; + @Pc(154) int color; + @Pc(114) int uv; + + if (!lowDetail) { + delta = xA - centerX; + verticalA += (horizontalA >> 3) * delta; + verticalB += (horizontalB >> 3) * delta; + verticalC += (horizontalC >> 3) * delta; + + c = verticalC >> 14; + if (c == 0) { + uA = 0; + vA = 0; + } else { + uA = verticalA / c; + vA = verticalB / c; + } + + verticalA = verticalA + horizontalA; + verticalB = verticalB + horizontalB; + verticalC = verticalC + horizontalC; + c = verticalC >> 14; + if (c == 0) { + uB = 0; + vB = 0; + } else { + uB = verticalA / c; + vB = verticalB / c; + } + + uv = (uA << 18) + vA; + uvStep = (uB - uA >> 3 << 18) + (vB - vA >> 3); + length >>= 3; + lightnessB <<= 3; + lightness = lightnessA >> 8; + if (opaque) { + if (length > 0) { + do { + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + + uA = uB; + vA = vB; + + verticalA += horizontalA; + verticalB += horizontalB; + verticalC += horizontalC; + + c = verticalC >> 14; + if (c == 0) { + uB = 0; + vB = 0; + } else { + uB = verticalA / c; + vB = verticalB / c; + } + + uv = (uA << 18) + vA; + uvStep = (uB - uA >> 3 << 18) + (vB - vA >> 3); + lightnessA += lightnessB; + lightness = lightnessA >> 8; + length--; + } while (length > 0); + } + + length = xB - xA & 0x7; + if (length > 0) { + do { + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + length--; + } while (length > 0); + } + } else { + if (length > 0) { + do { + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + + uv += uvStep; + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + + uA = uB; + vA = vB; + verticalA += horizontalA; + verticalB += horizontalB; + verticalC += horizontalC; + + c = verticalC >> 14; + if (c == 0) { + uB = 0; + vB = 0; + } else { + uB = verticalA / c; + vB = verticalB / c; + } + + uv = (uA << 18) + vA; + uvStep = (uB - uA >> 3 << 18) + (vB - vA >> 3); + lightnessA += lightnessB; + lightness = lightnessA >> 8; + length--; + } while (length > 0); + } + + length = xB - xA & 0x7; + if (length > 0) { + do { + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + length--; + } while (length > 0); + } + } + return; + } + + delta = xA - centerX; + verticalA = verticalA + (horizontalA >> 3) * delta; + verticalB = verticalB + (horizontalB >> 3) * delta; + verticalC = verticalC + (horizontalC >> 3) * delta; + + c = verticalC >> 12; + if (c == 0) { + uA = 0; + vA = 0; + } else { + uA = verticalA / c; + vA = verticalB / c; + } + + verticalA = verticalA + horizontalA; + verticalB = verticalB + horizontalB; + verticalC = verticalC + horizontalC; + + c = verticalC >> 12; + if (c == 0) { + uB = 0; + vB = 0; + } else { + uB = verticalA / c; + vB = verticalB / c; + } + + uv = (uA << 20) + vA; + uvStep = (uB - uA >> 3 << 20) + (vB - vA >> 3); + length >>= 0x3; + lightnessB <<= 3; + lightness = lightnessA >> 8; + + if (opaque) { + if (length > 0) { + do { + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + + uA = uB; + vA = vB; + verticalA += horizontalA; + verticalB += horizontalB; + verticalC += horizontalC; + + c = verticalC >> 12; + if (c == 0) { + uB = 0; + vB = 0; + } else { + uB = verticalA / c; + vB = verticalB / c; + } + + uv = (uA << 20) + vA; + uvStep = (uB - uA >> 3 << 20) + (vB - vA >> 3); + lightnessA += lightnessB; + lightness = lightnessA >> 8; + length--; + } while (length > 0); + } + + length = xB - xA & 0x7; + if (length > 0) { + do { + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + length--; + } while (length > 0); + } + return; + } + + if (length > 0) { + do { + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + + uA = uB; + vA = vB; + verticalA += horizontalA; + verticalB += horizontalB; + verticalC += horizontalC; + + c = verticalC >> 12; + if (c == 0) { + uB = 0; + vB = 0; + } else { + uB = verticalA / c; + vB = verticalB / c; + } + + uv = (uA << 20) + vA; + uvStep = (uB - uA >> 3 << 20) + (vB - vA >> 3); + lightnessA += lightnessB; + lightness = lightnessA >> 8; + length--; + } while (length > 0); + } + + length = xB - xA & 0x7; + if (length <= 0) { + return; + } + + do { + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + length--; + } while (length > 0); + } + + @OriginalMember(owner = "client!hf", name = "b", descriptor = "([I[IIIIIIIIIIIIII)V") + private static void drawTexturedScanline(@OriginalArg(0) int[] dst, @OriginalArg(1) int[] texels, @OriginalArg(4) int offset, @OriginalArg(5) int xA, @OriginalArg(6) int xB, @OriginalArg(7) int lightnessA, @OriginalArg(8) int lightnessB, @OriginalArg(9) int verticalA, @OriginalArg(10) int verticalB, @OriginalArg(11) int verticalC, @OriginalArg(12) int horizontalA, @OriginalArg(13) int horizontalB, @OriginalArg(14) int horizontalC) { + if (testX) { + if (xB > width) { + xB = width; + } + + if (xA < 0) { + xA = 0; + } + } + + if (xA >= xB) { + return; + } + + offset += xA; + lightnessA += lightnessB * xA; + + @Pc(28) int length = xB - xA; + @Pc(140) int lightness; + @Pc(128) int uvStep; + @Pc(62) int uA; + @Pc(66) int vA; + @Pc(99) int uB; + @Pc(103) int vB; + @Pc(56) int c; + @Pc(34) int delta; + @Pc(154) int color; + @Pc(114) int uv; + + if (!lowDetail) { + delta = xA - centerX; + verticalA += horizontalA * delta; + verticalB += horizontalB * delta; + verticalC += horizontalC * delta; + + c = verticalC >> 14; + if (c == 0) { + uA = 0; + vA = 0; + } else { + uA = verticalA / c; + vA = verticalB / c; + } + + verticalA += horizontalA * length; + verticalB += horizontalB * length; + verticalC += horizontalC * length; + + c = verticalC >> 14; + if (c == 0) { + uB = 0; + vB = 0; + } else { + uB = verticalA / c; + vB = verticalB / c; + } + + uv = (uA << 18) + vA; + uvStep = ((uB - uA) / length << 18) + (vB - vA) / length; + length >>= 0x3; + lightnessB <<= 3; + lightness = lightnessA >> 8; + + if (opaque) { + if (length > 0) { + do { + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + lightnessA += lightnessB; + lightness = lightnessA >> 8; + length--; + } while (length > 0); + } + + length = xB - xA & 0x7; + if (length > 0) { + do { + color = texels[(uv & 0x3F80) + (uv >>> 25)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + length--; + } while (length > 0); + } + } else { + if (length > 0) { + do { + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + lightnessA += lightnessB; + lightness = lightnessA >> 8; + length--; + } while (length > 0); + } + + length = xB - xA & 0x7; + if (length > 0) { + do { + if ((color = texels[(uv & 0x3F80) + (uv >>> 25)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + + uv += uvStep; + length--; + } while (length > 0); + } + } + return; + } + + delta = xA - centerX; + verticalA = verticalA + horizontalA * delta; + verticalB = verticalB + horizontalB * delta; + verticalC = verticalC + horizontalC * delta; + + c = verticalC >> 12; + if (c == 0) { + uA = 0; + vA = 0; + } else { + uA = verticalA / c; + vA = verticalB / c; + } + + verticalA += horizontalA * length; + verticalB += horizontalB * length; + verticalC += horizontalC * length; + c = verticalC >> 12; + if (c == 0) { + uB = 0; + vB = 0; + } else { + uB = verticalA / c; + vB = verticalB / c; + } + + uv = (uA << 20) + vA; + uvStep = ((uB - uA) / length << 20) + (vB - vA) / length; + length >>= 0x3; + lightnessB = lightnessB << 3; + lightness = lightnessA >> 8; + + if (opaque) { + if (length > 0) { + do { + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + + lightnessA += lightnessB; + lightness = lightnessA >> 8; + length--; + } while (length > 0); + } + + length = xB - xA & 0x7; + if (length > 0) { + do { + color = texels[(uv & 0xFC0) + (uv >>> 26)]; + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + uv += uvStep; + length--; + } while (length > 0); + } + return; + } + + if (length > 0) { + do { + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + offset++; + uv += uvStep; + + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + uv += uvStep; + + lightnessA += lightnessB; + lightness = lightnessA >> 8; + length--; + } while (length > 0); + } + + length = xB - xA & 0x7; + if (length <= 0) { + return; + } + + do { + if ((color = texels[(uv & 0xFC0) + (uv >>> 26)]) != 0) { + dst[offset++] = ((color & 0xFF00FF) * lightness & 0xFF00FF00) + ((color & 0xFF00) * lightness & 0xFF0000) >> 8; + } + + uv += uvStep; + length--; + } while (length > 0); + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "(IIIIIII)V") + public static void fillTriangle(@OriginalArg(0) int yA, @OriginalArg(1) int yB, @OriginalArg(2) int yC, @OriginalArg(3) int xA, @OriginalArg(4) int xB, @OriginalArg(5) int xC, @OriginalArg(6) int color) { + @Pc(1) int mAB = 0; + if (yB != yA) { + mAB = (xB - xA << 16) / (yB - yA); + } + + @Pc(16) int mBC = 0; + if (yC != yB) { + mBC = (xC - xB << 16) / (yC - yB); + } + + @Pc(31) int mAC = 0; + if (yC != yA) { + mAC = (xA - xC << 16) / (yA - yC); + } + + if (yA <= yB && yA <= yC) { + if (yA < height) { + if (yB > height) { + yB = height; + } + + if (yC > height) { + yC = height; + } + + if (yB < yC) { + xC = xA <<= 0x10; + if (yA < 0) { + xC -= mAC * yA; + xA -= mAB * yA; + yA = 0; + } + + xB <<= 0x10; + if (yB < 0) { + xB -= mBC * yB; + yB = 0; + } + + if (yA != yB && mAC < mAB || yA == yB && mAC > mBC) { + yC -= yB; + yB -= yA; + yA = offsets[yA]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawScanline(SoftwareRaster.pixels, yA, color, xC >> 16, xB >> 16); + xC += mAC; + xB += mBC; + yA += SoftwareRaster.width; + } + } + + drawScanline(SoftwareRaster.pixels, yA, color, xC >> 16, xA >> 16); + xC += mAC; + xA += mAB; + yA += SoftwareRaster.width; + } + } else { + yC -= yB; + yB -= yA; + yA = offsets[yA]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawScanline(SoftwareRaster.pixels, yA, color, xB >> 16, xC >> 16); + xC += mAC; + xB += mBC; + yA += SoftwareRaster.width; + } + } + + drawScanline(SoftwareRaster.pixels, yA, color, xA >> 16, xC >> 16); + xC += mAC; + xA += mAB; + yA += SoftwareRaster.width; + } + } + } else { + xB = xA <<= 0x10; + if (yA < 0) { + xB -= mAC * yA; + xA -= mAB * yA; + yA = 0; + } + + xC <<= 0x10; + if (yC < 0) { + xC -= mBC * yC; + yC = 0; + } + + if (yA != yC && mAC < mAB || yA == yC && mBC > mAB) { + yB -= yC; + yC -= yA; + yA = offsets[yA]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawScanline(SoftwareRaster.pixels, yA, color, xC >> 16, xA >> 16); + xC += mBC; + xA += mAB; + yA += SoftwareRaster.width; + } + } + + drawScanline(SoftwareRaster.pixels, yA, color, xB >> 16, xA >> 16); + xB += mAC; + xA += mAB; + yA += SoftwareRaster.width; + } + } else { + yB -= yC; + yC -= yA; + yA = offsets[yA]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawScanline(SoftwareRaster.pixels, yA, color, xA >> 16, xC >> 16); + xC += mBC; + xA += mAB; + yA += SoftwareRaster.width; + } + } + + drawScanline(SoftwareRaster.pixels, yA, color, xA >> 16, xB >> 16); + xB += mAC; + xA += mAB; + yA += SoftwareRaster.width; + } + } + } + } + } else if (yB <= yC) { + if (yB < height) { + if (yC > height) { + yC = height; + } + + if (yA > height) { + yA = height; + } + + if (yC < yA) { + xA = xB <<= 0x10; + if (yB < 0) { + xA -= mAB * yB; + xB -= mBC * yB; + yB = 0; + } + + xC <<= 0x10; + if (yC < 0) { + xC -= mAC * yC; + yC = 0; + } + + if (yB != yC && mAB < mBC || yB == yC && mAB > mAC) { + yA -= yC; + yC -= yB; + yB = offsets[yB]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawScanline(SoftwareRaster.pixels, yB, color, xA >> 16, xC >> 16); + xA += mAB; + xC += mAC; + yB += SoftwareRaster.width; + } + } + + drawScanline(SoftwareRaster.pixels, yB, color, xA >> 16, xB >> 16); + xA += mAB; + xB += mBC; + yB += SoftwareRaster.width; + } + } else { + yA -= yC; + yC -= yB; + yB = offsets[yB]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawScanline(SoftwareRaster.pixels, yB, color, xC >> 16, xA >> 16); + xA += mAB; + xC += mAC; + yB += SoftwareRaster.width; + } + } + + drawScanline(SoftwareRaster.pixels, yB, color, xB >> 16, xA >> 16); + xA += mAB; + xB += mBC; + yB += SoftwareRaster.width; + } + } + } else { + xC = xB <<= 0x10; + if (yB < 0) { + xC -= mAB * yB; + xB -= mBC * yB; + yB = 0; + } + + xA <<= 0x10; + if (yA < 0) { + xA -= mAC * yA; + yA = 0; + } + + if (mAB < mBC) { + yC -= yA; + yA -= yB; + yB = offsets[yB]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawScanline(SoftwareRaster.pixels, yB, color, xA >> 16, xB >> 16); + xA += mAC; + xB += mBC; + yB += SoftwareRaster.width; + } + } + + drawScanline(SoftwareRaster.pixels, yB, color, xC >> 16, xB >> 16); + xC += mAB; + xB += mBC; + yB += SoftwareRaster.width; + } + } else { + yC -= yA; + yA -= yB; + yB = offsets[yB]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawScanline(SoftwareRaster.pixels, yB, color, xB >> 16, xA >> 16); + xA += mAC; + xB += mBC; + yB += SoftwareRaster.width; + } + } + + drawScanline(SoftwareRaster.pixels, yB, color, xB >> 16, xC >> 16); + xC += mAB; + xB += mBC; + yB += SoftwareRaster.width; + } + } + } + } + } else if (yC < height) { + if (yA > height) { + yA = height; + } + + if (yB > height) { + yB = height; + } + + if (yA < yB) { + xB = xC <<= 0x10; + if (yC < 0) { + xB -= mBC * yC; + xC -= mAC * yC; + yC = 0; + } + + xA <<= 0x10; + if (yA < 0) { + xA -= mAB * yA; + yA = 0; + } + + if (mBC < mAC) { + yB -= yA; + yA -= yC; + yC = offsets[yC]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawScanline(SoftwareRaster.pixels, yC, color, xB >> 16, xA >> 16); + xB += mBC; + xA += mAB; + yC += SoftwareRaster.width; + } + } + + drawScanline(SoftwareRaster.pixels, yC, color, xB >> 16, xC >> 16); + xB += mBC; + xC += mAC; + yC += SoftwareRaster.width; + } + } else { + yB -= yA; + yA -= yC; + yC = offsets[yC]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawScanline(SoftwareRaster.pixels, yC, color, xA >> 16, xB >> 16); + xB += mBC; + xA += mAB; + yC += SoftwareRaster.width; + } + } + + drawScanline(SoftwareRaster.pixels, yC, color, xC >> 16, xB >> 16); + xB += mBC; + xC += mAC; + yC += SoftwareRaster.width; + } + } + } else { + xA = xC <<= 0x10; + if (yC < 0) { + xA -= mBC * yC; + xC -= mAC * yC; + yC = 0; + } + + xB <<= 0x10; + if (yB < 0) { + xB -= mAB * yB; + yB = 0; + } + + if (mBC < mAC) { + yA -= yB; + yB -= yC; + yC = offsets[yC]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawScanline(SoftwareRaster.pixels, yC, color, xB >> 16, xC >> 16); + xB += mAB; + xC += mAC; + yC += SoftwareRaster.width; + } + } + + drawScanline(SoftwareRaster.pixels, yC, color, xA >> 16, xC >> 16); + xA += mBC; + xC += mAC; + yC += SoftwareRaster.width; + } + } else { + yA -= yB; + yB -= yC; + yC = offsets[yC]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawScanline(SoftwareRaster.pixels, yC, color, xC >> 16, xB >> 16); + xB += mAB; + xC += mAC; + yC += SoftwareRaster.width; + } + } + + drawScanline(SoftwareRaster.pixels, yC, color, xC >> 16, xA >> 16); + xA += mBC; + xC += mAC; + yC += SoftwareRaster.width; + } + } + } + } + } + + @OriginalMember(owner = "client!hf", name = "b", descriptor = "(II)V") + public static void setBounds(@OriginalArg(0) int right, @OriginalArg(1) int bottom) { + @Pc(3) int offset = offsets[0]; + @Pc(7) int top = offset / SoftwareRaster.width; + @Pc(13) int left = offset - top * SoftwareRaster.width; + centerX = right - left; + centerY = bottom - top; + screenLowerX = -centerX; + screenUpperX = width - centerX; + screenLowerY = -centerY; + screenUpperY = height - centerY; + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "([IIIIIIII)V") + private static void drawGouraudScanline(@OriginalArg(0) int[] pixels, @OriginalArg(1) int offset, @OriginalArg(4) int xA, @OriginalArg(5) int xB, @OriginalArg(6) int colorA, @OriginalArg(7) int colorStep) { + if (testX) { + if (xB > width) { + xB = width; + } + + if (xA < 0) { + xA = 0; + } + } + + if (xA >= xB) { + return; + } + + offset += xA; + colorA += colorStep * xA; + @Pc(98) int alpha; + @Pc(102) int invAlpha; + @Pc(138) int srcColor; + @Pc(32) int length; + @Pc(46) int color; + + if (!jagged) { + length = xB - xA; + if (Rasteriser.alpha == 0) { + do { + pixels[offset++] = palette[colorA >> 8]; + colorA += colorStep; + length--; + } while (length > 0); + } else { + alpha = Rasteriser.alpha; + invAlpha = 256 - Rasteriser.alpha; + + do { + color = palette[colorA >> 8]; + + colorA += colorStep; + color = ((color & 0xFF00FF) * invAlpha >> 8 & 0xFF00FF) + ((color & 0xFF00) * invAlpha >> 8 & 0xFF00); + + srcColor = pixels[offset]; + pixels[offset++] = color + ((srcColor & 0xFF00FF) * alpha >> 8 & 0xFF00FF) + ((srcColor & 0xFF00) * alpha >> 8 & 0xFF00); + + length--; + } while (length > 0); + } + } else { + length = xB - xA >> 2; + colorStep <<= 2; + + if (Rasteriser.alpha == 0) { + if (length > 0) { + do { + color = palette[colorA >> 8]; + colorA += colorStep; + pixels[offset++] = color; + pixels[offset++] = color; + pixels[offset++] = color; + pixels[offset++] = color; + length--; + } while (length > 0); + } + + length = xB - xA & 0x3; + if (length > 0) { + color = palette[colorA >> 8]; + do { + pixels[offset++] = color; + length--; + } while (length > 0); + } + } else { + alpha = Rasteriser.alpha; + invAlpha = 256 - Rasteriser.alpha; + if (length > 0) { + do { + color = palette[colorA >> 8]; + + colorA += colorStep; + color = ((color & 0xFF00FF) * invAlpha >> 8 & 0xFF00FF) + ((color & 0xFF00) * invAlpha >> 8 & 0xFF00); + + srcColor = pixels[offset]; + pixels[offset++] = color + ((srcColor & 0xFF00FF) * alpha >> 8 & 0xFF00FF) + ((srcColor & 0xFF00) * alpha >> 8 & 0xFF00); + + srcColor = pixels[offset]; + pixels[offset++] = color + ((srcColor & 0xFF00FF) * alpha >> 8 & 0xFF00FF) + ((srcColor & 0xFF00) * alpha >> 8 & 0xFF00); + + srcColor = pixels[offset]; + pixels[offset++] = color + ((srcColor & 0xFF00FF) * alpha >> 8 & 0xFF00FF) + ((srcColor & 0xFF00) * alpha >> 8 & 0xFF00); + + srcColor = pixels[offset]; + pixels[offset++] = color + ((srcColor & 0xFF00FF) * alpha >> 8 & 0xFF00FF) + ((srcColor & 0xFF00) * alpha >> 8 & 0xFF00); + + length--; + } while (length > 0); + } + + length = xB - xA & 0x3; + if (length <= 0) { + return; + } + + color = palette[colorA >> 8]; + color = ((color & 0xFF00FF) * invAlpha >> 8 & 0xFF00FF) + ((color & 0xFF00) * invAlpha >> 8 & 0xFF00); + do { + srcColor = pixels[offset]; + pixels[offset++] = color + ((srcColor & 0xFF00FF) * alpha >> 8 & 0xFF00FF) + ((srcColor & 0xFF00) * alpha >> 8 & 0xFF00); + length--; + } while (length > 0); + } + } + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "([BIIIIIII)V") + public static void fillSpriteTriangle(@OriginalArg(0) byte[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7) { + @Pc(1) int local1 = 0; + if (arg2 != arg1) { + local1 = (arg5 - arg4 << 16) / (arg2 - arg1); + } + + @Pc(16) int local16 = 0; + if (arg3 != arg2) { + local16 = (arg6 - arg5 << 16) / (arg3 - arg2); + } + + @Pc(31) int local31 = 0; + if (arg3 != arg1) { + local31 = (arg4 - arg6 << 16) / (arg1 - arg3); + } + + if (arg1 <= arg2 && arg1 <= arg3) { + if (arg2 < arg3) { + arg6 = arg4 <<= 0x10; + if (arg1 < 0) { + arg6 -= local31 * arg1; + arg4 -= local1 * arg1; + arg1 = 0; + } + + arg5 <<= 0x10; + if (arg2 < 0) { + arg5 -= local16 * arg2; + arg2 = 0; + } + + if ((arg1 == arg2 || local31 >= local1) && (arg1 != arg2 || local31 <= local16)) { + arg3 -= arg2; + arg2 -= arg1; + arg1 *= arg7; + while (true) { + arg2--; + if (arg2 < 0) { + while (true) { + arg3--; + if (arg3 < 0) { + return; + } + drawSpriteScanline(arg0, arg1, arg5 >> 16, arg6 >> 16); + arg6 += local31; + arg5 += local16; + arg1 += arg7; + } + } + + drawSpriteScanline(arg0, arg1, arg4 >> 16, arg6 >> 16); + arg6 += local31; + arg4 += local1; + arg1 += arg7; + } + } else { + arg3 -= arg2; + arg2 -= arg1; + arg1 *= arg7; + while (true) { + arg2--; + if (arg2 < 0) { + while (true) { + arg3--; + if (arg3 < 0) { + return; + } + drawSpriteScanline(arg0, arg1, arg6 >> 16, arg5 >> 16); + arg6 += local31; + arg5 += local16; + arg1 += arg7; + } + } + + drawSpriteScanline(arg0, arg1, arg6 >> 16, arg4 >> 16); + arg6 += local31; + arg4 += local1; + arg1 += arg7; + } + } + } else { + arg5 = arg4 <<= 0x10; + if (arg1 < 0) { + arg5 -= local31 * arg1; + arg4 -= local1 * arg1; + arg1 = 0; + } + + arg6 <<= 0x10; + if (arg3 < 0) { + arg6 -= local16 * arg3; + arg3 = 0; + } + + if ((arg1 == arg3 || local31 >= local1) && (arg1 != arg3 || local16 <= local1)) { + arg2 -= arg3; + arg3 -= arg1; + arg1 *= arg7; + while (true) { + arg3--; + if (arg3 < 0) { + while (true) { + arg2--; + if (arg2 < 0) { + return; + } + + drawSpriteScanline(arg0, arg1, arg4 >> 16, arg6 >> 16); + arg6 += local16; + arg4 += local1; + arg1 += arg7; + } + } + + drawSpriteScanline(arg0, arg1, arg4 >> 16, arg5 >> 16); + arg5 += local31; + arg4 += local1; + arg1 += arg7; + } + } else { + arg2 -= arg3; + arg3 -= arg1; + arg1 *= arg7; + while (true) { + arg3--; + if (arg3 < 0) { + while (true) { + arg2--; + if (arg2 < 0) { + return; + } + + drawSpriteScanline(arg0, arg1, arg6 >> 16, arg4 >> 16); + arg6 += local16; + arg4 += local1; + arg1 += arg7; + } + } + + drawSpriteScanline(arg0, arg1, arg5 >> 16, arg4 >> 16); + arg5 += local31; + arg4 += local1; + arg1 += arg7; + } + } + } + } else if (arg2 <= arg3) { + if (arg3 < arg1) { + arg4 = arg5 <<= 0x10; + if (arg2 < 0) { + arg4 -= local1 * arg2; + arg5 -= local16 * arg2; + arg2 = 0; + } + + arg6 <<= 0x10; + if (arg3 < 0) { + arg6 -= local31 * arg3; + arg3 = 0; + } + + if (arg2 != arg3 && local1 < local16 || arg2 == arg3 && local1 > local31) { + arg1 -= arg3; + arg3 -= arg2; + arg2 *= arg7; + while (true) { + arg3--; + if (arg3 < 0) { + while (true) { + arg1--; + if (arg1 < 0) { + return; + } + drawSpriteScanline(arg0, arg2, arg4 >> 16, arg6 >> 16); + arg4 += local1; + arg6 += local31; + arg2 += arg7; + } + } + + drawSpriteScanline(arg0, arg2, arg4 >> 16, arg5 >> 16); + arg4 += local1; + arg5 += local16; + arg2 += arg7; + } + } else { + arg1 -= arg3; + arg3 -= arg2; + arg2 *= arg7; + while (true) { + arg3--; + if (arg3 < 0) { + while (true) { + arg1--; + if (arg1 < 0) { + return; + } + + drawSpriteScanline(arg0, arg2, arg6 >> 16, arg4 >> 16); + arg4 += local1; + arg6 += local31; + arg2 += arg7; + } + } + + drawSpriteScanline(arg0, arg2, arg5 >> 16, arg4 >> 16); + arg4 += local1; + arg5 += local16; + arg2 += arg7; + } + } + } else { + arg6 = arg5 <<= 0x10; + if (arg2 < 0) { + arg6 -= local1 * arg2; + arg5 -= local16 * arg2; + arg2 = 0; + } + + arg4 <<= 0x10; + if (arg1 < 0) { + arg4 -= local31 * arg1; + arg1 = 0; + } + + if (local1 < local16) { + arg3 -= arg1; + arg1 -= arg2; + arg2 *= arg7; + while (true) { + arg1--; + if (arg1 < 0) { + while (true) { + arg3--; + if (arg3 < 0) { + return; + } + + drawSpriteScanline(arg0, arg2, arg4 >> 16, arg5 >> 16); + arg4 += local31; + arg5 += local16; + arg2 += arg7; + } + } + + drawSpriteScanline(arg0, arg2, arg6 >> 16, arg5 >> 16); + arg6 += local1; + arg5 += local16; + arg2 += arg7; + } + } else { + arg3 -= arg1; + arg1 -= arg2; + arg2 *= arg7; + while (true) { + arg1--; + if (arg1 < 0) { + while (true) { + arg3--; + if (arg3 < 0) { + return; + } + + drawSpriteScanline(arg0, arg2, arg5 >> 16, arg4 >> 16); + arg4 += local31; + arg5 += local16; + arg2 += arg7; + } + } + + drawSpriteScanline(arg0, arg2, arg5 >> 16, arg6 >> 16); + arg6 += local1; + arg5 += local16; + arg2 += arg7; + } + } + } + } else if (arg1 < arg2) { + arg5 = arg6 <<= 0x10; + if (arg3 < 0) { + arg5 -= local16 * arg3; + arg6 -= local31 * arg3; + arg3 = 0; + } + + arg4 <<= 0x10; + if (arg1 < 0) { + arg4 -= local1 * arg1; + arg1 = 0; + } + + if (local16 < local31) { + arg2 -= arg1; + arg1 -= arg3; + arg3 *= arg7; + while (true) { + arg1--; + if (arg1 < 0) { + while (true) { + arg2--; + if (arg2 < 0) { + return; + } + + drawSpriteScanline(arg0, arg3, arg5 >> 16, arg4 >> 16); + arg5 += local16; + arg4 += local1; + arg3 += arg7; + } + } + + drawSpriteScanline(arg0, arg3, arg5 >> 16, arg6 >> 16); + arg5 += local16; + arg6 += local31; + arg3 += arg7; + } + } else { + arg2 -= arg1; + arg1 -= arg3; + arg3 *= arg7; + while (true) { + arg1--; + if (arg1 < 0) { + while (true) { + arg2--; + if (arg2 < 0) { + return; + } + + drawSpriteScanline(arg0, arg3, arg4 >> 16, arg5 >> 16); + arg5 += local16; + arg4 += local1; + arg3 += arg7; + } + } + + drawSpriteScanline(arg0, arg3, arg6 >> 16, arg5 >> 16); + arg5 += local16; + arg6 += local31; + arg3 += arg7; + } + } + } else { + arg4 = arg6 <<= 0x10; + if (arg3 < 0) { + arg4 -= local16 * arg3; + arg6 -= local31 * arg3; + arg3 = 0; + } + + arg5 <<= 0x10; + if (arg2 < 0) { + arg5 -= local1 * arg2; + arg2 = 0; + } + + if (local16 < local31) { + arg1 -= arg2; + arg2 -= arg3; + arg3 *= arg7; + while (true) { + arg2--; + if (arg2 < 0) { + while (true) { + arg1--; + if (arg1 < 0) { + return; + } + + drawSpriteScanline(arg0, arg3, arg5 >> 16, arg6 >> 16); + arg5 += local1; + arg6 += local31; + arg3 += arg7; + } + } + + drawSpriteScanline(arg0, arg3, arg4 >> 16, arg6 >> 16); + arg4 += local16; + arg6 += local31; + arg3 += arg7; + } + } else { + arg1 -= arg2; + arg2 -= arg3; + arg3 *= arg7; + while (true) { + arg2--; + if (arg2 < 0) { + while (true) { + arg1--; + if (arg1 < 0) { + return; + } + + drawSpriteScanline(arg0, arg3, arg6 >> 16, arg5 >> 16); + arg5 += local1; + arg6 += local31; + arg3 += arg7; + } + } + + drawSpriteScanline(arg0, arg3, arg6 >> 16, arg4 >> 16); + arg4 += local16; + arg6 += local31; + arg3 += arg7; + } + } + } + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "(III)V") + public static void testPoints(@OriginalArg(0) int a, @OriginalArg(1) int b, @OriginalArg(2) int c) { + testX = a < 0 || a > width || b < 0 || b > width || c < 0 || c > width; + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "([IIIIII)V") + private static void drawScanline(@OriginalArg(0) int[] pixels, @OriginalArg(1) int offset, @OriginalArg(2) int color, @OriginalArg(4) int xA, @OriginalArg(5) int xB) { + if (testX) { + if (xB > width) { + xB = width; + } + if (xA < 0) { + xA = 0; + } + } + + if (xA >= xB) { + return; + } + + offset += xA; + @Pc(24) int length = xB - xA >> 2; + if (alpha == 0) { + while (true) { + length--; + if (length < 0) { + length = xB - xA & 0x3; + while (true) { + length--; + if (length < 0) { + return; + } + pixels[offset++] = color; + } + } + + pixels[offset++] = color; + pixels[offset++] = color; + pixels[offset++] = color; + pixels[offset++] = color; + } + } else if (alpha == 254) { + while (true) { + length--; + if (length < 0) { + length = xB - xA & 0x3; + while (true) { + length--; + if (length < 0) { + return; + } + pixels[offset++] = pixels[offset]; + } + } + + pixels[offset++] = color; + pixels[offset++] = color; + pixels[offset++] = color; + pixels[offset++] = color; + } + } else { + @Pc(119) int alpha = Rasteriser.alpha; + @Pc(123) int invAlpha = 256 - Rasteriser.alpha; + @Pc(143) int sample = ((color & 0xFF00FF) * invAlpha >> 8 & 0xFF00FF) + ((color & 0xFF00) * invAlpha >> 8 & 0xFF00); + + while (true) { + length--; + @Pc(150) int srcColor; + + if (length < 0) { + length = xB - xA & 0x3; + while (true) { + length--; + if (length < 0) { + return; + } + + srcColor = pixels[offset]; + pixels[offset++] = sample + ((srcColor & 0xFF00FF) * alpha >> 8 & 0xFF00FF) + ((srcColor & 0xFF00) * alpha >> 8 & 0xFF00); + } + } + + srcColor = pixels[offset]; + pixels[offset++] = sample + ((srcColor & 0xFF00FF) * alpha >> 8 & 0xFF00FF) + ((srcColor & 0xFF00) * alpha >> 8 & 0xFF00); + srcColor = pixels[offset]; + pixels[offset++] = sample + ((srcColor & 0xFF00FF) * alpha >> 8 & 0xFF00FF) + ((srcColor & 0xFF00) * alpha >> 8 & 0xFF00); + srcColor = pixels[offset]; + pixels[offset++] = sample + ((srcColor & 0xFF00FF) * alpha >> 8 & 0xFF00FF) + ((srcColor & 0xFF00) * alpha >> 8 & 0xFF00); + srcColor = pixels[offset]; + pixels[offset++] = sample + ((srcColor & 0xFF00FF) * alpha >> 8 & 0xFF00FF) + ((srcColor & 0xFF00) * alpha >> 8 & 0xFF00); + } + } + } + + @OriginalMember(owner = "client!hf", name = "c", descriptor = "(II)V") + private static void calculateBrightness() { + @Pc(3) int offset = 0; + + for (@Pc(5) int y = 0; y < 512; y++) { + @Pc(17) double hue = (double) (y >> 3) / 64.0D + 0.0078125D; + @Pc(26) double saturation = (double) (y & 0x7) / 8.0D + 0.0625D; + + for (@Pc(28) int x = 0; x < 128; x++) { + @Pc(36) double lightness = (double) x / 128.0D; + + @Pc(38) double r = lightness; + @Pc(40) double g = lightness; + @Pc(42) double b = lightness; + + if (saturation != 0.0D) { + @Pc(56) double q; + if (lightness < 0.5D) { + q = lightness * (saturation + 1.0D); + } else { + q = lightness + saturation - lightness * saturation; + } + + @Pc(71) double p = lightness * 2.0D - q; + @Pc(75) double t = hue + 0.3333333333333333D; + if (t > 1.0D) { + t--; + } + + @Pc(89) double d11 = hue - 0.3333333333333333D; + if (d11 < 0.0D) { + d11++; + } + + if (t * 6.0D < 1.0D) { + r = p + (q - p) * 6.0D * t; + } else if (t * 2.0D < 1.0D) { + r = q; + } else if (t * 3.0D < 2.0D) { + r = p + (q - p) * (0.6666666666666666D - t) * 6.0D; + } else { + r = p; + } + + if (hue * 6.0D < 1.0D) { + g = p + (q - p) * 6.0D * hue; + } else if (hue * 2.0D < 1.0D) { + g = q; + } else if (hue * 3.0D < 2.0D) { + g = p + (q - p) * (0.6666666666666666D - hue) * 6.0D; + } else { + g = p; + } + + if (d11 * 6.0D < 1.0D) { + b = p + (q - p) * 6.0D * d11; + } else if (d11 * 2.0D < 1.0D) { + b = q; + } else if (d11 * 3.0D < 2.0D) { + b = p + (q - p) * (0.6666666666666666D - d11) * 6.0D; + } else { + b = p; + } + } + + r = Math.pow(r, brightness); + g = Math.pow(g, brightness); + b = Math.pow(b, brightness); + + @Pc(258) int intR = (int) (r * 256.0D); + @Pc(263) int intG = (int) (g * 256.0D); + @Pc(268) int intB = (int) (b * 256.0D); + + @Pc(278) int rgb = (intR << 16) + (intG << 8) + intB; + if (rgb == 0) { + rgb = 1; + } + palette[offset++] = rgb; + } + } + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "(IIII)V") + private static void prepareOffsets(@OriginalArg(0) int left, @OriginalArg(1) int top, @OriginalArg(2) int right, @OriginalArg(3) int bottom) { + width = right - left; + height = bottom - top; + prepareOffsets(); + if (offsets.length < height) { + offsets = new int[IntUtils.clp2(height)]; + } + @Pc(23) int x = top * SoftwareRaster.width + left; + for (@Pc(25) int y = 0; y < height; y++) { + offsets[y] = x; + x += SoftwareRaster.width; + } + } + + @OriginalMember(owner = "client!hf", name = "b", descriptor = "(F)V") + private static void randBrightness(@OriginalArg(0) float start) { + brightness = start; + brightness = (float) ((double) brightness + Math.random() * 0.03D - 0.015D); + } + + @OriginalMember(owner = "client!hf", name = "d", descriptor = "()I") + public static int getOffset() { + return offsets[0] / SoftwareRaster.width; + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "(IIIIIIIII)V") + public static void fillGouraudTriangle(@OriginalArg(0) int yA, @OriginalArg(1) int yB, @OriginalArg(2) int yC, @OriginalArg(3) int xA, @OriginalArg(4) int xB, @OriginalArg(5) int xC, @OriginalArg(6) int colorA, @OriginalArg(7) int colorB, @OriginalArg(8) int colorC) { + @Pc(3) int dxAB = xB - xA; + @Pc(7) int dyAB = yB - yA; + @Pc(11) int dxAC = xC - xA; + @Pc(15) int dyAC = yC - yA; + @Pc(19) int colorStepAB = colorB - colorA; + @Pc(23) int colorStepAC = colorC - colorA; + + @Pc(36) int xStepBC; + if (yC == yB) { + xStepBC = 0; + } else { + xStepBC = (xC - xB << 16) / (yC - yB); + } + + @Pc(48) int xStepAB; + if (yB == yA) { + xStepAB = 0; + } else { + xStepAB = (dxAB << 16) / dyAB; + } + + @Pc(60) int xStepAC; + if (yC == yA) { + xStepAC = 0; + } else { + xStepAC = (dxAC << 16) / dyAC; + } + + @Pc(71) int length = dxAB * dyAC - dxAC * dyAB; + if (length == 0) { + return; + } + + @Pc(86) int colorStepA = (colorStepAB * dyAC - colorStepAC * dyAB << 8) / length; + @Pc(98) int colorStepB = (colorStepAC * dxAB - colorStepAB * dxAC << 8) / length; + if (yA <= yB && yA <= yC) { + if (yA < height) { + if (yB > height) { + yB = height; + } + if (yC > height) { + yC = height; + } + + colorA = (colorA << 8) + colorStepA - colorStepA * xA; + if (yB < yC) { + xC = xA <<= 0x10; + if (yA < 0) { + xC -= xStepAC * yA; + xA -= xStepAB * yA; + colorA -= colorStepB * yA; + yA = 0; + } + + xB <<= 0x10; + if (yB < 0) { + xB -= xStepBC * yB; + yB = 0; + } + + if ((yA == yB || xStepAC >= xStepAB) && (yA != yB || xStepAC <= xStepBC)) { + yC -= yB; + yB -= yA; + yA = offsets[yA]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawGouraudScanline(SoftwareRaster.pixels, yA, xB >> 16, xC >> 16, colorA, colorStepA); + xC += xStepAC; + xB += xStepBC; + colorA += colorStepB; + yA += SoftwareRaster.width; + } + } + + drawGouraudScanline(SoftwareRaster.pixels, yA, xA >> 16, xC >> 16, colorA, colorStepA); + xC += xStepAC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + } + } else { + yC -= yB; + yB -= yA; + yA = offsets[yA]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawGouraudScanline(SoftwareRaster.pixels, yA, xC >> 16, xB >> 16, colorA, colorStepA); + xC += xStepAC; + xB += xStepBC; + colorA += colorStepB; + yA += SoftwareRaster.width; + } + } + + drawGouraudScanline(SoftwareRaster.pixels, yA, xC >> 16, xA >> 16, colorA, colorStepA); + xC += xStepAC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + } + } + } else { + xB = xA <<= 0x10; + if (yA < 0) { + xB -= xStepAC * yA; + xA -= xStepAB * yA; + colorA -= colorStepB * yA; + yA = 0; + } + + xC <<= 0x10; + if (yC < 0) { + xC -= xStepBC * yC; + yC = 0; + } + + if (yA != yC && xStepAC < xStepAB || yA == yC && xStepBC > xStepAB) { + yB -= yC; + yC -= yA; + yA = offsets[yA]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawGouraudScanline(SoftwareRaster.pixels, yA, xC >> 16, xA >> 16, colorA, colorStepA); + xC += xStepBC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + } + } + + drawGouraudScanline(SoftwareRaster.pixels, yA, xB >> 16, xA >> 16, colorA, colorStepA); + xB += xStepAC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + } + } else { + yB -= yC; + yC -= yA; + yA = offsets[yA]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawGouraudScanline(SoftwareRaster.pixels, yA, xA >> 16, xC >> 16, colorA, colorStepA); + xC += xStepBC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + } + } + + drawGouraudScanline(SoftwareRaster.pixels, yA, xA >> 16, xB >> 16, colorA, colorStepA); + xB += xStepAC; + xA += xStepAB; + colorA += colorStepB; + yA += SoftwareRaster.width; + } + } + } + } + } else if (yB <= yC) { + if (yB < height) { + if (yC > height) { + yC = height; + } + if (yA > height) { + yA = height; + } + + colorB = (colorB << 8) + colorStepA - colorStepA * xB; + if (yC < yA) { + xA = xB <<= 0x10; + if (yB < 0) { + xA -= xStepAB * yB; + xB -= xStepBC * yB; + colorB -= colorStepB * yB; + yB = 0; + } + xC <<= 0x10; + if (yC < 0) { + xC -= xStepAC * yC; + yC = 0; + } + if ((yB == yC || xStepAB >= xStepBC) && (yB != yC || xStepAB <= xStepAC)) { + yA -= yC; + yC -= yB; + yB = offsets[yB]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawGouraudScanline(SoftwareRaster.pixels, yB, xC >> 16, xA >> 16, colorB, colorStepA); + xA += xStepAB; + xC += xStepAC; + colorB += colorStepB; + yB += SoftwareRaster.width; + } + } + + drawGouraudScanline(SoftwareRaster.pixels, yB, xB >> 16, xA >> 16, colorB, colorStepA); + xA += xStepAB; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + } + } else { + yA -= yC; + yC -= yB; + yB = offsets[yB]; + while (true) { + yC--; + if (yC < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawGouraudScanline(SoftwareRaster.pixels, yB, xA >> 16, xC >> 16, colorB, colorStepA); + xA += xStepAB; + xC += xStepAC; + colorB += colorStepB; + yB += SoftwareRaster.width; + } + } + + drawGouraudScanline(SoftwareRaster.pixels, yB, xA >> 16, xB >> 16, colorB, colorStepA); + xA += xStepAB; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + } + } + } else { + xC = xB <<= 0x10; + if (yB < 0) { + xC -= xStepAB * yB; + xB -= xStepBC * yB; + colorB -= colorStepB * yB; + yB = 0; + } + + xA <<= 0x10; + if (yA < 0) { + xA -= xStepAC * yA; + yA = 0; + } + + if (xStepAB < xStepBC) { + yC -= yA; + yA -= yB; + yB = offsets[yB]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawGouraudScanline(SoftwareRaster.pixels, yB, xA >> 16, xB >> 16, colorB, colorStepA); + xA += xStepAC; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + } + } + + drawGouraudScanline(SoftwareRaster.pixels, yB, xC >> 16, xB >> 16, colorB, colorStepA); + xC += xStepAB; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + } + } else { + yC -= yA; + yA -= yB; + yB = offsets[yB]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yC--; + if (yC < 0) { + return; + } + + drawGouraudScanline(SoftwareRaster.pixels, yB, xB >> 16, xA >> 16, colorB, colorStepA); + xA += xStepAC; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + } + } + + drawGouraudScanline(SoftwareRaster.pixels, yB, xB >> 16, xC >> 16, colorB, colorStepA); + xC += xStepAB; + xB += xStepBC; + colorB += colorStepB; + yB += SoftwareRaster.width; + } + } + } + } + } else if (yC < height) { + if (yA > height) { + yA = height; + } + if (yB > height) { + yB = height; + } + + colorC = (colorC << 8) + colorStepA - colorStepA * xC; + if (yA < yB) { + xB = xC <<= 0x10; + if (yC < 0) { + xB -= xStepBC * yC; + xC -= xStepAC * yC; + colorC -= colorStepB * yC; + yC = 0; + } + + xA <<= 0x10; + if (yA < 0) { + xA -= xStepAB * yA; + yA = 0; + } + + if (xStepBC < xStepAC) { + yB -= yA; + yA -= yC; + yC = offsets[yC]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawGouraudScanline(SoftwareRaster.pixels, yC, xB >> 16, xA >> 16, colorC, colorStepA); + xB += xStepBC; + xA += xStepAB; + colorC += colorStepB; + yC += SoftwareRaster.width; + } + } + + drawGouraudScanline(SoftwareRaster.pixels, yC, xB >> 16, xC >> 16, colorC, colorStepA); + xB += xStepBC; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + } + } else { + yB -= yA; + yA -= yC; + yC = offsets[yC]; + while (true) { + yA--; + if (yA < 0) { + while (true) { + yB--; + if (yB < 0) { + return; + } + + drawGouraudScanline(SoftwareRaster.pixels, yC, xA >> 16, xB >> 16, colorC, colorStepA); + xB += xStepBC; + xA += xStepAB; + colorC += colorStepB; + yC += SoftwareRaster.width; + } + } + + drawGouraudScanline(SoftwareRaster.pixels, yC, xC >> 16, xB >> 16, colorC, colorStepA); + xB += xStepBC; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + } + } + } else { + xA = xC <<= 0x10; + if (yC < 0) { + xA -= xStepBC * yC; + xC -= xStepAC * yC; + colorC -= colorStepB * yC; + yC = 0; + } + + xB <<= 0x10; + if (yB < 0) { + xB -= xStepAB * yB; + yB = 0; + } + + if (xStepBC < xStepAC) { + yA -= yB; + yB -= yC; + yC = offsets[yC]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawGouraudScanline(SoftwareRaster.pixels, yC, xB >> 16, xC >> 16, colorC, colorStepA); + xB += xStepAB; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + } + } + + drawGouraudScanline(SoftwareRaster.pixels, yC, xA >> 16, xC >> 16, colorC, colorStepA); + xA += xStepBC; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + } + } else { + yA -= yB; + yB -= yC; + yC = offsets[yC]; + while (true) { + yB--; + if (yB < 0) { + while (true) { + yA--; + if (yA < 0) { + return; + } + + drawGouraudScanline(SoftwareRaster.pixels, yC, xC >> 16, xB >> 16, colorC, colorStepA); + xB += xStepAB; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + } + } + + drawGouraudScanline(SoftwareRaster.pixels, yC, xC >> 16, xA >> 16, colorC, colorStepA); + xA += xStepBC; + xC += xStepAC; + colorC += colorStepB; + yC += SoftwareRaster.width; + } + } + } + } + } + + @OriginalMember(owner = "client!hf", name = "a", descriptor = "([BIIII)V") + private static void drawSpriteScanline(@OriginalArg(0) byte[] dst, @OriginalArg(1) int off, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + if (arg2 >= arg3) { + return; + } + + off += arg2; + @Pc(13) int local13 = arg3 - arg2 >> 2; + while (true) { + local13--; + if (local13 < 0) { + local13 = arg3 - arg2 & 0x3; + while (true) { + local13--; + if (local13 < 0) { + return; + } + dst[off++] = 1; + } + } + + dst[off++] = 1; + dst[off++] = 1; + dst[off++] = 1; + dst[off++] = 1; + } + } +} diff --git a/client/src/main/java/rt4/RawModel.java b/client/src/main/java/rt4/RawModel.java new file mode 100644 index 0000000..12a4359 --- /dev/null +++ b/client/src/main/java/rt4/RawModel.java @@ -0,0 +1,1898 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!gb") +public final class RawModel extends Entity { + + @OriginalMember(owner = "client!gb", name = "V", descriptor = "[I") + public static final int[] SIN = MathUtils.sin; + + @OriginalMember(owner = "client!gb", name = "N", descriptor = "[I") + public static final int[] COS = MathUtils.cos; + + @OriginalMember(owner = "client!gb", name = "L", descriptor = "[I") + public static final int[] anIntArray194 = new int[10000]; + + @OriginalMember(owner = "client!gb", name = "Z", descriptor = "[I") + public static final int[] anIntArray199 = new int[10000]; + + @OriginalMember(owner = "client!gb", name = "S", descriptor = "I") + public static int anInt2138 = 0; + + @OriginalMember(owner = "client!ck", name = "K", descriptor = "I") + public static int anInt1053 = 0; + + @OriginalMember(owner = "client!d", name = "db", descriptor = "Z") + public static boolean allowInput = false; + + @OriginalMember(owner = "client!gb", name = "s", descriptor = "[B") + public byte[] triangleAlpha; + + @OriginalMember(owner = "client!gb", name = "t", descriptor = "S") + private short maxY; + + @OriginalMember(owner = "client!gb", name = "u", descriptor = "[B") + public byte[] textureRotationY; + + @OriginalMember(owner = "client!gb", name = "v", descriptor = "[S") + public short[] textureFacesM; + + @OriginalMember(owner = "client!gb", name = "w", descriptor = "[I") + public int[] triangleBones; + + @OriginalMember(owner = "client!gb", name = "z", descriptor = "S") + private short minX; + + @OriginalMember(owner = "client!gb", name = "A", descriptor = "[S") + public short[] texturesScaleZ; + + @OriginalMember(owner = "client!gb", name = "B", descriptor = "[B") + public byte[] aByteArray28; + + @OriginalMember(owner = "client!gb", name = "D", descriptor = "S") + private short minY; + + @OriginalMember(owner = "client!gb", name = "E", descriptor = "[S") + public short[] triangleSources; + + @OriginalMember(owner = "client!gb", name = "F", descriptor = "[[I") + public int[][] boneTriangles; + + @OriginalMember(owner = "client!gb", name = "G", descriptor = "[B") + public byte[] textureTypes; + + @OriginalMember(owner = "client!gb", name = "H", descriptor = "[S") + public short[] triangleTextures; + + @OriginalMember(owner = "client!gb", name = "I", descriptor = "[B") + public byte[] triangleInfo; + + @OriginalMember(owner = "client!gb", name = "J", descriptor = "[I") + public int[] vertexBones; + + @OriginalMember(owner = "client!gb", name = "M", descriptor = "I") + public int texturedCount; + + @OriginalMember(owner = "client!gb", name = "O", descriptor = "[I") + public int[] triangleVertexC; + + @OriginalMember(owner = "client!gb", name = "P", descriptor = "[I") + public int[] triangleVertexA; + + @OriginalMember(owner = "client!gb", name = "Q", descriptor = "[B") + public byte[] triangleTextureIndex; + + @OriginalMember(owner = "client!gb", name = "R", descriptor = "[B") + public byte[] aByteArray32; + + @OriginalMember(owner = "client!gb", name = "T", descriptor = "[B") + public byte[] aByteArray33; + + @OriginalMember(owner = "client!gb", name = "U", descriptor = "[S") + public short[] triangleColors; + + @OriginalMember(owner = "client!gb", name = "W", descriptor = "[Lclient!hd;") + public VertexNormal[] vertexNormals; + + @OriginalMember(owner = "client!gb", name = "X", descriptor = "S") + private short maxX; + + @OriginalMember(owner = "client!gb", name = "Y", descriptor = "S") + private short maxZ; + + @OriginalMember(owner = "client!gb", name = "ab", descriptor = "S") + public short aShort18; + + @OriginalMember(owner = "client!gb", name = "bb", descriptor = "[B") + public byte[] aByteArray34; + + @OriginalMember(owner = "client!gb", name = "cb", descriptor = "[I") + public int[] triangleVertexB; + + @OriginalMember(owner = "client!gb", name = "db", descriptor = "S") + public short aShort19; + + @OriginalMember(owner = "client!gb", name = "eb", descriptor = "S") + private short minZ; + + @OriginalMember(owner = "client!gb", name = "fb", descriptor = "[I") + public int[] vertexY; + + @OriginalMember(owner = "client!gb", name = "gb", descriptor = "[S") + public short[] texturesScaleY; + + @OriginalMember(owner = "client!gb", name = "hb", descriptor = "[Lclient!hd;") + public VertexNormal[] aClass57Array2; + + @OriginalMember(owner = "client!gb", name = "ib", descriptor = "[S") + public short[] textureFacesP; + + @OriginalMember(owner = "client!gb", name = "jb", descriptor = "[I") + public int[] vertexX; + + @OriginalMember(owner = "client!gb", name = "kb", descriptor = "[Lclient!qj;") + public TriangleNormal[] triangleNormals; + + @OriginalMember(owner = "client!gb", name = "mb", descriptor = "[S") + public short[] texturesScaleX; + + @OriginalMember(owner = "client!gb", name = "nb", descriptor = "[B") + public byte[] trianglePriorities; + + @OriginalMember(owner = "client!gb", name = "ob", descriptor = "[[I") + public int[][] boneVertices; + + @OriginalMember(owner = "client!gb", name = "pb", descriptor = "[S") + public short[] textureFacesN; + + @OriginalMember(owner = "client!gb", name = "qb", descriptor = "[I") + public int[] vertexZ; + + @OriginalMember(owner = "client!gb", name = "rb", descriptor = "[S") + public short[] vertexSources; + + @OriginalMember(owner = "client!gb", name = "C", descriptor = "Z") + private boolean boundsValid = false; + + @OriginalMember(owner = "client!gb", name = "y", descriptor = "I") + public int triangleCount = 0; + + @OriginalMember(owner = "client!gb", name = "x", descriptor = "B") + public byte priority = 0; + + @OriginalMember(owner = "client!gb", name = "lb", descriptor = "I") + public int vertexCount = 0; + + @OriginalMember(owner = "client!gb", name = "", descriptor = "()V") + private RawModel() { + } + + @OriginalMember(owner = "client!gb", name = "", descriptor = "([B)V") + public RawModel(@OriginalArg(0) byte[] src) { + if (src[src.length - 1] == -1 && src[src.length - 2] == -1) { + this.decodeNew(src); + } else { + this.decodeOld(src); + } + } + + @OriginalMember(owner = "client!gb", name = "", descriptor = "(III)V") + public RawModel(@OriginalArg(0) int vertexCount, @OriginalArg(1) int triangleCount, @OriginalArg(2) int arg2) { + this.vertexX = new int[vertexCount]; + this.vertexY = new int[vertexCount]; + this.vertexZ = new int[vertexCount]; + this.vertexBones = new int[vertexCount]; + this.triangleVertexA = new int[triangleCount]; + this.triangleVertexB = new int[triangleCount]; + this.triangleVertexC = new int[triangleCount]; + this.triangleInfo = new byte[triangleCount]; + this.trianglePriorities = new byte[triangleCount]; + this.triangleAlpha = new byte[triangleCount]; + this.triangleColors = new short[triangleCount]; + this.triangleTextures = new short[triangleCount]; + this.triangleTextureIndex = new byte[triangleCount]; + this.triangleBones = new int[triangleCount]; + } + + @OriginalMember(owner = "client!gb", name = "", descriptor = "([Lclient!gb;I)V") + public RawModel(@OriginalArg(0) RawModel[] models, @OriginalArg(1) int count) { + @Pc(15) boolean keepInfo = false; + @Pc(17) boolean keepPriorities = false; + @Pc(19) boolean keepAlpha = false; + @Pc(21) boolean keepBones = false; + @Pc(23) boolean keepTextures = false; + @Pc(25) boolean keepTextureIndex = false; + + this.vertexCount = 0; + this.triangleCount = 0; + this.texturedCount = 0; + this.priority = -1; + + @Pc(43) int i; + for (i = 0; i < count; i++) { + @Pc(50) RawModel local50 = models[i]; + if (local50 != null) { + this.vertexCount += local50.vertexCount; + this.triangleCount += local50.triangleCount; + this.texturedCount += local50.texturedCount; + if (local50.trianglePriorities == null) { + if (this.priority == -1) { + this.priority = local50.priority; + } + if (this.priority != local50.priority) { + keepPriorities = true; + } + } else { + keepPriorities = true; + } + keepInfo |= local50.triangleInfo != null; + keepAlpha |= local50.triangleAlpha != null; + keepBones |= local50.triangleBones != null; + keepTextures |= local50.triangleTextures != null; + keepTextureIndex |= local50.triangleTextureIndex != null; + } + } + + this.vertexX = new int[this.vertexCount]; + this.vertexY = new int[this.vertexCount]; + this.vertexZ = new int[this.vertexCount]; + + this.vertexBones = new int[this.vertexCount]; + this.vertexSources = new short[this.vertexCount]; + + this.triangleVertexA = new int[this.triangleCount]; + this.triangleVertexB = new int[this.triangleCount]; + this.triangleVertexC = new int[this.triangleCount]; + + if (keepInfo) { + this.triangleInfo = new byte[this.triangleCount]; + } + + if (keepPriorities) { + this.trianglePriorities = new byte[this.triangleCount]; + } + + if (keepAlpha) { + this.triangleAlpha = new byte[this.triangleCount]; + } + + if (keepBones) { + this.triangleBones = new int[this.triangleCount]; + } + + if (keepTextures) { + this.triangleTextures = new short[this.triangleCount]; + } + + if (keepTextureIndex) { + this.triangleTextureIndex = new byte[this.triangleCount]; + } + + this.triangleColors = new short[this.triangleCount]; + this.triangleSources = new short[this.triangleCount]; + + if (this.texturedCount > 0) { + this.textureTypes = new byte[this.texturedCount]; + this.textureFacesP = new short[this.texturedCount]; + this.textureFacesM = new short[this.texturedCount]; + this.textureFacesN = new short[this.texturedCount]; + this.texturesScaleX = new short[this.texturedCount]; + this.texturesScaleY = new short[this.texturedCount]; + this.texturesScaleZ = new short[this.texturedCount]; + this.textureRotationY = new byte[this.texturedCount]; + this.aByteArray32 = new byte[this.texturedCount]; + this.aByteArray34 = new byte[this.texturedCount]; + this.aByteArray28 = new byte[this.texturedCount]; + this.aByteArray33 = new byte[this.texturedCount]; + } + + this.vertexCount = 0; + this.triangleCount = 0; + this.texturedCount = 0; + + for (i = 0; i < count; i++) { + @Pc(323) short local323 = (short) (0x1 << i); + @Pc(327) RawModel other = models[i]; + + if (other != null) { + @Pc(331) int t; + for (t = 0; t < other.triangleCount; t++) { + if (keepInfo && other.triangleInfo != null) { + this.triangleInfo[this.triangleCount] = other.triangleInfo[t]; + } + + if (keepPriorities) { + if (other.trianglePriorities == null) { + this.trianglePriorities[this.triangleCount] = other.priority; + } else { + this.trianglePriorities[this.triangleCount] = other.trianglePriorities[t]; + } + } + + if (keepAlpha && other.triangleAlpha != null) { + this.triangleAlpha[this.triangleCount] = other.triangleAlpha[t]; + } + + if (keepBones && other.triangleBones != null) { + this.triangleBones[this.triangleCount] = other.triangleBones[t]; + } + + if (keepTextures) { + if (other.triangleTextures == null) { + this.triangleTextures[this.triangleCount] = -1; + } else { + this.triangleTextures[this.triangleCount] = other.triangleTextures[t]; + } + } + + if (keepTextureIndex) { + if (other.triangleTextureIndex == null || other.triangleTextureIndex[t] == -1) { + this.triangleTextureIndex[this.triangleCount] = -1; + } else { + this.triangleTextureIndex[this.triangleCount] = (byte) (other.triangleTextureIndex[t] + this.texturedCount); + } + } + + this.triangleColors[this.triangleCount] = other.triangleColors[t]; + this.triangleSources[this.triangleCount] = local323; + this.triangleVertexA[this.triangleCount] = this.addVertex(other, other.triangleVertexA[t], local323); + this.triangleVertexB[this.triangleCount] = this.addVertex(other, other.triangleVertexB[t], local323); + this.triangleVertexC[this.triangleCount] = this.addVertex(other, other.triangleVertexC[t], local323); + this.triangleCount++; + } + + for (t = 0; t < other.texturedCount; t++) { + @Pc(530) byte type = this.textureTypes[this.texturedCount] = other.textureTypes[t]; + if (type == 0) { + this.textureFacesP[this.texturedCount] = (short) this.addVertex(other, other.textureFacesP[t], local323); + this.textureFacesM[this.texturedCount] = (short) this.addVertex(other, other.textureFacesM[t], local323); + this.textureFacesN[this.texturedCount] = (short) this.addVertex(other, other.textureFacesN[t], local323); + } else if (type >= 1 && type <= 3) { + this.textureFacesP[this.texturedCount] = other.textureFacesP[t]; + this.textureFacesM[this.texturedCount] = other.textureFacesM[t]; + this.textureFacesN[this.texturedCount] = other.textureFacesN[t]; + this.texturesScaleX[this.texturedCount] = other.texturesScaleX[t]; + this.texturesScaleY[this.texturedCount] = other.texturesScaleY[t]; + this.texturesScaleZ[this.texturedCount] = other.texturesScaleZ[t]; + this.textureRotationY[this.texturedCount] = other.textureRotationY[t]; + this.aByteArray32[this.texturedCount] = other.aByteArray32[t]; + this.aByteArray34[this.texturedCount] = other.aByteArray34[t]; + } else if (type == 2) { + this.aByteArray28[this.texturedCount] = other.aByteArray28[t]; + this.aByteArray33[this.texturedCount] = other.aByteArray33[t]; + } + this.texturedCount++; + } + } + } + } + + @OriginalMember(owner = "client!gb", name = "", descriptor = "(Lclient!gb;ZZZZ)V") + public RawModel(@OriginalArg(0) RawModel other, @OriginalArg(1) boolean reuseVertices, @OriginalArg(2) boolean reuseColors, @OriginalArg(3) boolean reuseTextures, @OriginalArg(4) boolean arg4) { + this.vertexCount = other.vertexCount; + this.triangleCount = other.triangleCount; + this.texturedCount = other.texturedCount; + + if (reuseVertices) { + this.vertexX = other.vertexX; + this.vertexY = other.vertexY; + this.vertexZ = other.vertexZ; + } else { + // otherwise, copy them + + this.vertexX = new int[this.vertexCount]; + this.vertexY = new int[this.vertexCount]; + this.vertexZ = new int[this.vertexCount]; + + System.arraycopy(other.vertexX, 0, this.vertexX, 0, this.vertexCount); + System.arraycopy(other.vertexY, 0, this.vertexY, 0, this.vertexCount); + System.arraycopy(other.vertexZ, 0, this.vertexZ, 0, this.vertexCount); + } + + if (reuseColors) { + this.triangleColors = other.triangleColors; + } else { + this.triangleColors = new short[this.triangleCount]; + System.arraycopy(other.triangleColors, 0, this.triangleColors, 0, this.triangleCount); + } + + if (reuseTextures || other.triangleTextures == null) { + this.triangleTextures = other.triangleTextures; + } else { + this.triangleTextures = new short[this.triangleCount]; + System.arraycopy(other.triangleTextures, 0, this.triangleTextures, 0, this.triangleCount); + } + + this.triangleAlpha = other.triangleAlpha; + this.triangleVertexA = other.triangleVertexA; + this.triangleVertexB = other.triangleVertexB; + this.triangleVertexC = other.triangleVertexC; + this.triangleInfo = other.triangleInfo; + this.trianglePriorities = other.trianglePriorities; + this.triangleTextureIndex = other.triangleTextureIndex; + this.priority = other.priority; + this.textureTypes = other.textureTypes; + this.textureFacesP = other.textureFacesP; + this.textureFacesM = other.textureFacesM; + this.textureFacesN = other.textureFacesN; + this.texturesScaleX = other.texturesScaleX; + this.texturesScaleY = other.texturesScaleY; + this.texturesScaleZ = other.texturesScaleZ; + this.textureRotationY = other.textureRotationY; + this.aByteArray32 = other.aByteArray32; + this.aByteArray34 = other.aByteArray34; + this.aByteArray28 = other.aByteArray28; + this.aByteArray33 = other.aByteArray33; + this.vertexBones = other.vertexBones; + this.triangleBones = other.triangleBones; + this.boneVertices = other.boneVertices; + this.boneTriangles = other.boneTriangles; + this.vertexNormals = other.vertexNormals; + this.triangleNormals = other.triangleNormals; + this.aClass57Array2 = other.aClass57Array2; + this.aShort19 = other.aShort19; + this.aShort18 = other.aShort18; + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "([[III)I") + public static int method1680(@OriginalArg(0) int[][] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(3) int local3 = arg1 >> 7; + @Pc(7) int local7 = arg2 >> 7; + if (local3 < 0 || local7 < 0 || local3 >= arg0.length || local7 >= arg0[0].length) { + return 0; + } + @Pc(27) int local27 = arg1 & 0x7F; + @Pc(31) int local31 = arg2 & 0x7F; + @Pc(53) int local53 = arg0[local3][local7] * (128 - local27) + arg0[local3 + 1][local7] * local27 >> 7; + @Pc(79) int local79 = arg0[local3][local7 + 1] * (128 - local27) + arg0[local3 + 1][local7 + 1] * local27 >> 7; + return local53 * (128 - local31) + local79 * local31 >> 7; + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "(Lclient!ve;II)Lclient!gb;") + public static RawModel create(@OriginalArg(0) Js5 archive, @OriginalArg(1) int id) { + @Pc(5) byte[] data = archive.fetchFile(id, 0); + return data == null ? null : new RawModel(data); + } + + @OriginalMember(owner = "client!gb", name = "c", descriptor = "()V") + public final void negateXz() { + for (@Pc(1) int v = 0; v < this.vertexCount; v++) { + this.vertexX[v] = -this.vertexX[v]; + this.vertexZ[v] = -this.vertexZ[v]; + } + this.invalidate(); + } + + @OriginalMember(owner = "client!gb", name = "e", descriptor = "()V") + public final void swapXz() { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + @Pc(10) int temp = this.vertexX[local1]; + this.vertexX[local1] = this.vertexZ[local1]; + this.vertexZ[local1] = -temp; + } + this.invalidate(); + } + + @OriginalMember(owner = "client!gb", name = "b", descriptor = "(I)V") + private void rotate(@OriginalArg(0) int theta) { + @Pc(3) int sin = SIN[theta]; + @Pc(7) int cos = COS[theta]; + for (@Pc(9) int v = 0; v < this.vertexCount; v++) { + @Pc(29) int temp = this.vertexY[v] * sin + this.vertexX[v] * cos >> 16; + this.vertexY[v] = this.vertexY[v] * cos - this.vertexX[v] * sin >> 16; + this.vertexX[v] = temp; + } + this.invalidate(); + } + + @OriginalMember(owner = "client!gb", name = "f", descriptor = "()V") + private void calculateBounds() { + if (this.boundsValid) { + return; + } + + this.boundsValid = true; + + @Pc(8) int minX = 32767; + @Pc(10) int minY = 32767; + @Pc(12) int minZ = 32767; + @Pc(14) int maxX = -32768; + @Pc(16) int maxY = -32768; + @Pc(18) int maxZ = -32768; + + for (@Pc(20) int v = 0; v < this.vertexCount; v++) { + @Pc(29) int x = this.vertexX[v]; + @Pc(34) int y = this.vertexY[v]; + @Pc(39) int z = this.vertexZ[v]; + + if (x < minX) { + minX = x; + } + + if (x > maxX) { + maxX = x; + } + + if (y < minY) { + minY = y; + } + + if (y > maxY) { + maxY = y; + } + + if (z < minZ) { + minZ = z; + } + + if (z > maxZ) { + maxZ = z; + } + } + + this.minX = (short) minX; + this.maxX = (short) maxX; + this.minY = (short) minY; + this.maxY = (short) maxY; + this.minZ = (short) minZ; + this.maxZ = (short) maxZ; + } + + @OriginalMember(owner = "client!gb", name = "b", descriptor = "(III)V") + public final void resize(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int z) { + for (@Pc(1) int v = 0; v < this.vertexCount; v++) { + this.vertexX[v] = this.vertexX[v] * x / 128; + this.vertexY[v] = this.vertexY[v] * y / 128; + this.vertexZ[v] = this.vertexZ[v] * z / 128; + } + this.invalidate(); + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "(III)Lclient!th;") + @Override + public final Entity createModel() { + return this.createModel(this.aShort19, this.aShort18, -50, -10, -50); + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "(Lclient!gb;IS)I") + private int addVertex(@OriginalArg(0) RawModel m, @OriginalArg(1) int vertex, @OriginalArg(2) short source) { + @Pc(4) int x = m.vertexX[vertex]; + @Pc(9) int y = m.vertexY[vertex]; + @Pc(14) int z = m.vertexZ[vertex]; + + for (@Pc(16) int i = 0; i < this.vertexCount; i++) { + if (x == this.vertexX[i] && y == this.vertexY[i] && z == this.vertexZ[i]) { + this.vertexSources[i] |= source; + return i; + } + } + + this.vertexX[this.vertexCount] = x; + this.vertexY[this.vertexCount] = y; + this.vertexZ[this.vertexCount] = z; + this.vertexSources[this.vertexCount] = source; + + if (m.vertexBones != null) { + this.vertexBones[this.vertexCount] = m.vertexBones[vertex]; + } + + return this.vertexCount++; + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "([[IIIIII)V") + private void method1667(@OriginalArg(0) int[][] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + @Pc(10) int local10 = -arg4 / 2; + @Pc(15) int local15 = -arg5 / 2; + @Pc(24) int local24 = method1680(arg0, arg1 + local10, arg3 + local15); + @Pc(28) int local28 = arg4 / 2; + @Pc(33) int local33 = -arg5 / 2; + @Pc(42) int local42 = method1680(arg0, arg1 + local28, arg3 + local33); + @Pc(47) int local47 = -arg4 / 2; + @Pc(51) int local51 = arg5 / 2; + @Pc(60) int local60 = method1680(arg0, arg1 + local47, arg3 + local51); + @Pc(64) int local64 = arg4 / 2; + @Pc(68) int local68 = arg5 / 2; + @Pc(77) int local77 = method1680(arg0, arg1 + local64, arg3 + local68); + @Pc(84) int local84 = local24 < local42 ? local24 : local42; + @Pc(91) int local91 = local60 < local77 ? local60 : local77; + @Pc(98) int local98 = local42 < local77 ? local42 : local77; + @Pc(105) int local105 = local24 < local60 ? local24 : local60; + if (arg5 != 0) { + @Pc(120) int local120 = (int) (Math.atan2(local84 - local91, arg5) * 325.95D) & 0x7FF; + if (local120 != 0) { + this.method1677(local120); + } + } + if (arg4 != 0) { + @Pc(140) int local140 = (int) (Math.atan2(local105 - local98, arg4) * 325.95D) & 0x7FF; + if (local140 != 0) { + this.rotate(local140); + } + } + @Pc(149) int local149 = local24 + local77; + if (local42 + local60 < local149) { + local149 = local42 + local60; + } + local149 = (local149 >> 1) - arg2; + if (local149 != 0) { + this.translate(0, local149, 0); + } + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "(IIIIIIIIJILclient!ga;)V") + @Override + public final void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) long arg8, @OriginalArg(9) int arg9, @OriginalArg(10) ParticleSystem arg10) { + } + + @OriginalMember(owner = "client!gb", name = "g", descriptor = "()V") + public final void calculateNormals() { + if (this.vertexNormals != null) { + return; + } + + this.vertexNormals = new VertexNormal[this.vertexCount]; + + @Pc(10) int local10; + for (local10 = 0; local10 < this.vertexCount; local10++) { + this.vertexNormals[local10] = new VertexNormal(); + } + + for (local10 = 0; local10 < this.triangleCount; local10++) { + @Pc(34) int local34 = this.triangleVertexA[local10]; + @Pc(39) int local39 = this.triangleVertexB[local10]; + @Pc(44) int local44 = this.triangleVertexC[local10]; + @Pc(54) int local54 = this.vertexX[local39] - this.vertexX[local34]; + @Pc(64) int local64 = this.vertexY[local39] - this.vertexY[local34]; + @Pc(74) int local74 = this.vertexZ[local39] - this.vertexZ[local34]; + @Pc(84) int local84 = this.vertexX[local44] - this.vertexX[local34]; + @Pc(94) int local94 = this.vertexY[local44] - this.vertexY[local34]; + @Pc(104) int local104 = this.vertexZ[local44] - this.vertexZ[local34]; + @Pc(112) int local112 = local64 * local104 - local94 * local74; + @Pc(120) int local120 = local74 * local84 - local104 * local54; + + @Pc(128) int local128; + for (local128 = local54 * local94 - local84 * local64; local112 > 8192 || local120 > 8192 || local128 > 8192 || local112 < -8192 || local120 < -8192 || local128 < -8192; local128 >>= 0x1) { + local112 >>= 0x1; + local120 >>= 0x1; + } + + @Pc(174) int local174 = (int) Math.sqrt(local112 * local112 + local120 * local120 + local128 * local128); + if (local174 <= 0) { + local174 = 1; + } + + local112 = local112 * 256 / local174; + local120 = local120 * 256 / local174; + local128 = local128 * 256 / local174; + + @Pc(201) byte info; + if (this.triangleInfo == null) { + info = 0; + } else { + info = this.triangleInfo[local10]; + } + + if (info == 0) { + @Pc(214) VertexNormal n1 = this.vertexNormals[local34]; + n1.x += local112; + n1.y += local120; + n1.z += local128; + n1.magnitude++; + @Pc(243) VertexNormal n2 = this.vertexNormals[local39]; + n2.x += local112; + n2.y += local120; + n2.z += local128; + n2.magnitude++; + @Pc(272) VertexNormal n3 = this.vertexNormals[local44]; + n3.x += local112; + n3.y += local120; + n3.z += local128; + n3.magnitude++; + } else if (info == 1) { + if (this.triangleNormals == null) { + this.triangleNormals = new TriangleNormal[this.triangleCount]; + } + + @Pc(317) TriangleNormal n = this.triangleNormals[local10] = new TriangleNormal(); + n.anInt4769 = local112; + n.anInt4770 = local120; + n.anInt4767 = local128; + } + } + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "(SS)V") + public final void retexture(@OriginalArg(0) short src, @OriginalArg(1) short dest) { + if (this.triangleTextures == null) { + return; + } + + for (@Pc(5) int i = 0; i < this.triangleCount; i++) { + if (this.triangleTextures[i] == src) { + this.triangleTextures[i] = dest; + } + } + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "(II[[I[[IIIIZZ)Lclient!gb;") + public final RawModel method1670(@OriginalArg(0) int orientation, @OriginalArg(1) int arg1, @OriginalArg(2) int[][] arg2, @OriginalArg(3) int[][] arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6) { + this.calculateBounds(); + @Pc(6) int local6 = arg4 + this.minX; + @Pc(11) int local11 = arg4 + this.maxX; + @Pc(16) int local16 = arg6 + this.minZ; + @Pc(21) int local21 = arg6 + this.maxZ; + if ((orientation == 1 || orientation == 2 || orientation == 3 || orientation == 5) && (local6 < 0 || local11 + 128 >> 7 >= arg2.length || local16 < 0 || local21 + 128 >> 7 >= arg2[0].length)) { + return this; + } + if (orientation == 4 || orientation == 5) { + if (arg3 == null) { + return this; + } + if (local6 < 0 || local11 + 128 >> 7 >= arg3.length || local16 < 0 || local21 + 128 >> 7 >= arg3[0].length) { + return this; + } + } else { + local6 >>= 0x7; + local11 = local11 + 127 >> 7; + local16 >>= 0x7; + local21 = local21 + 127 >> 7; + if (arg2[local6][local16] == arg5 && arg2[local11][local16] == arg5 && arg2[local6][local21] == arg5 && arg2[local11][local21] == arg5) { + return this; + } + } + + @Pc(147) RawModel m = new RawModel(); + m.vertexCount = this.vertexCount; + m.triangleCount = this.triangleCount; + m.texturedCount = this.texturedCount; + m.triangleVertexA = this.triangleVertexA; + m.triangleVertexB = this.triangleVertexB; + m.triangleVertexC = this.triangleVertexC; + m.triangleInfo = this.triangleInfo; + m.trianglePriorities = this.trianglePriorities; + m.triangleAlpha = this.triangleAlpha; + m.triangleTextureIndex = this.triangleTextureIndex; + m.triangleColors = this.triangleColors; + m.triangleTextures = this.triangleTextures; + m.priority = this.priority; + m.textureTypes = this.textureTypes; + m.textureFacesP = this.textureFacesP; + m.textureFacesM = this.textureFacesM; + m.textureFacesN = this.textureFacesN; + m.texturesScaleX = this.texturesScaleX; + m.texturesScaleY = this.texturesScaleY; + m.texturesScaleZ = this.texturesScaleZ; + m.textureRotationY = this.textureRotationY; + m.aByteArray32 = this.aByteArray32; + m.aByteArray34 = this.aByteArray34; + m.aByteArray28 = this.aByteArray28; + m.aByteArray33 = this.aByteArray33; + m.vertexBones = this.vertexBones; + m.triangleBones = this.triangleBones; + m.boneVertices = this.boneVertices; + m.boneTriangles = this.boneTriangles; + m.aShort19 = this.aShort19; + m.aShort18 = this.aShort18; + m.vertexNormals = this.vertexNormals; + m.triangleNormals = this.triangleNormals; + m.aClass57Array2 = this.aClass57Array2; + if (orientation == 3) { + m.vertexX = ArrayUtils.copyOfNullable(this.vertexX); + m.vertexY = ArrayUtils.copyOfNullable(this.vertexY); + m.vertexZ = ArrayUtils.copyOfNullable(this.vertexZ); + } else { + m.vertexX = this.vertexX; + m.vertexY = new int[m.vertexCount]; + m.vertexZ = this.vertexZ; + } + @Pc(326) int local326; + @Pc(337) int local337; + @Pc(344) int local344; + @Pc(348) int local348; + @Pc(352) int local352; + @Pc(356) int local356; + @Pc(360) int local360; + @Pc(382) int local382; + @Pc(408) int local408; + @Pc(420) int local420; + if (orientation == 1) { + for (local326 = 0; local326 < m.vertexCount; local326++) { + local337 = this.vertexX[local326] + arg4; + local344 = this.vertexZ[local326] + arg6; + local348 = local337 & 0x7F; + local352 = local344 & 0x7F; + local356 = local337 >> 7; + local360 = local344 >> 7; + local382 = arg2[local356][local360] * (128 - local348) + arg2[local356 + 1][local360] * local348 >> 7; + local408 = arg2[local356][local360 + 1] * (128 - local348) + arg2[local356 + 1][local360 + 1] * local348 >> 7; + local420 = local382 * (128 - local352) + local408 * local352 >> 7; + m.vertexY[local326] = this.vertexY[local326] + local420 - arg5; + } + } else { + @Pc(547) int local547; + if (orientation == 2) { + for (local326 = 0; local326 < m.vertexCount; local326++) { + local337 = (this.vertexY[local326] << 16) / this.minY; + if (local337 < arg1) { + local344 = this.vertexX[local326] + arg4; + local348 = this.vertexZ[local326] + arg6; + local352 = local344 & 0x7F; + local356 = local348 & 0x7F; + local360 = local344 >> 7; + local382 = local348 >> 7; + local408 = arg2[local360][local382] * (128 - local352) + arg2[local360 + 1][local382] * local352 >> 7; + local420 = arg2[local360][local382 + 1] * (128 - local352) + arg2[local360 + 1][local382 + 1] * local352 >> 7; + local547 = local408 * (128 - local356) + local420 * local356 >> 7; + m.vertexY[local326] = this.vertexY[local326] + (local547 - arg5) * (arg1 - local337) / arg1; + } else { + m.vertexY[local326] = this.vertexY[local326]; + } + } + } else if (orientation == 3) { + local326 = (arg1 & 0xFF) * 4; + local337 = (arg1 >> 8 & 0xFF) * 4; + this.method1667(arg2, arg4, arg5, arg6, local326, local337); + } else if (orientation == 4) { + local326 = this.maxY - this.minY; + for (local337 = 0; local337 < this.vertexCount; local337++) { + local344 = this.vertexX[local337] + arg4; + local348 = this.vertexZ[local337] + arg6; + local352 = local344 & 0x7F; + local356 = local348 & 0x7F; + local360 = local344 >> 7; + local382 = local348 >> 7; + local408 = arg3[local360][local382] * (128 - local352) + arg3[local360 + 1][local382] * local352 >> 7; + local420 = arg3[local360][local382 + 1] * (128 - local352) + arg3[local360 + 1][local382 + 1] * local352 >> 7; + local547 = local408 * (128 - local356) + local420 * local356 >> 7; + m.vertexY[local337] = this.vertexY[local337] + local547 + local326 - arg5; + } + } else if (orientation == 5) { + local326 = this.maxY - this.minY; + for (local337 = 0; local337 < this.vertexCount; local337++) { + local344 = this.vertexX[local337] + arg4; + local348 = this.vertexZ[local337] + arg6; + local352 = local344 & 0x7F; + local356 = local348 & 0x7F; + local360 = local344 >> 7; + local382 = local348 >> 7; + local408 = arg2[local360][local382] * (128 - local352) + arg2[local360 + 1][local382] * local352 >> 7; + local420 = arg2[local360][local382 + 1] * (128 - local352) + arg2[local360 + 1][local382 + 1] * local352 >> 7; + local547 = local408 * (128 - local356) + local420 * local356 >> 7; + local408 = arg3[local360][local382] * (128 - local352) + arg3[local360 + 1][local382] * local352 >> 7; + local420 = arg3[local360][local382 + 1] * (128 - local352) + arg3[local360 + 1][local382 + 1] * local352 >> 7; + @Pc(890) int local890 = local408 * (128 - local356) + local420 * local356 >> 7; + @Pc(894) int local894 = local547 - local890; + m.vertexY[local337] = ((this.vertexY[local337] << 8) / local326 * local894 >> 8) - (arg5 - local547); + } + } + } + this.boundsValid = false; + return m; + } + + @OriginalMember(owner = "client!gb", name = "b", descriptor = "(IIIII)Lclient!w;") + public final SoftwareModel createSoftwareModel(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + return new SoftwareModel(this, arg0, arg1, -50, -10, -50); + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "(IIIII)V") + @Override + public final void method4545(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + } + + @OriginalMember(owner = "client!gb", name = "c", descriptor = "(III)V") + public final void translate(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int z) { + for (@Pc(1) int v = 0; v < this.vertexCount; v++) { + this.vertexX[v] += x; + this.vertexY[v] += y; + this.vertexZ[v] += z; + } + + this.invalidate(); + } + + @OriginalMember(owner = "client!gb", name = "h", descriptor = "()V") + public final void method1673() { + @Pc(1) int local1; + for (local1 = 0; local1 < this.vertexCount; local1++) { + this.vertexZ[local1] = -this.vertexZ[local1]; + } + for (local1 = 0; local1 < this.triangleCount; local1++) { + @Pc(27) int local27 = this.triangleVertexA[local1]; + this.triangleVertexA[local1] = this.triangleVertexC[local1]; + this.triangleVertexC[local1] = local27; + } + this.invalidate(); + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "()Z") + @Override + public final boolean method4543() { + return true; + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "([B)V") + private void decodeNew(@OriginalArg(0) byte[] src) { + // originally Jagex had obhead, obface1-5, obpoint1-5, obvertex1-2, and obaxis... might be possibly to simplify + // these buffer names to that again. But they've also consolidated some + + @Pc(4) Buffer buffer1 = new Buffer(src); + @Pc(9) Buffer buffer2 = new Buffer(src); + @Pc(14) Buffer buffer3 = new Buffer(src); + @Pc(19) Buffer buffer4 = new Buffer(src); + @Pc(24) Buffer buffer5 = new Buffer(src); + @Pc(29) Buffer buffer6 = new Buffer(src); + @Pc(34) Buffer buffer7 = new Buffer(src); + buffer1.offset = src.length - 23; + + @Pc(44) int vertexCount = buffer1.g2(); + @Pc(48) int triangleCount = buffer1.g2(); + @Pc(52) int texturedCount = buffer1.g1(); + + @Pc(56) int hasInfo = buffer1.g1(); + @Pc(65) boolean hasTriangleInfo = (hasInfo & 0x1) == 1; + @Pc(74) boolean hasParticleEmitters = (hasInfo & 0x2) == 2; // not used in 530 + + @Pc(78) int priority = buffer1.g1(); + @Pc(82) int hasAlpha = buffer1.g1(); + @Pc(86) int hasTriangleBones = buffer1.g1(); + @Pc(90) int hasTextures = buffer1.g1(); + @Pc(94) int hasVertexBones = buffer1.g1(); + + @Pc(98) int dxDataLength = buffer1.g2(); + @Pc(102) int dyDataLength = buffer1.g2(); + @Pc(106) int dzDataLength = buffer1.g2(); + @Pc(110) int vertexIndexDataLength = buffer1.g2(); + @Pc(114) int triangleTextureDataLength = buffer1.g2(); + + @Pc(116) int simpleTextureFaceCount = 0; + @Pc(118) int complexTextureFaceCount = 0; + @Pc(120) int cubeTextureFaceCount = 0; + + if (texturedCount > 0) { + this.textureTypes = new byte[texturedCount]; + buffer1.offset = 0; + + for (int i = 0; i < texturedCount; i++) { + @Pc(143) byte type = this.textureTypes[i] = buffer1.g1b(); + if (type == 0) { + simpleTextureFaceCount++; + } else if (type >= 1 && type <= 3) { + complexTextureFaceCount++; + } + if (type == 2) { + cubeTextureFaceCount++; + } + } + } + + int offset = texturedCount + vertexCount; + + @Pc(169) int triangleInfoDataOffset = offset; + if (hasTriangleInfo) { + offset += triangleCount; + } + + @Pc(177) int triangleTypeDataOffset = offset; + offset += triangleCount; + + @Pc(183) int trianglePriorityDataOffset = offset; + if (priority == 255) { + offset += triangleCount; + } + + @Pc(192) int triangleBonesDataOffset = offset; + if (hasTriangleBones == 1) { + offset += triangleCount; + } + + @Pc(201) int vertexBonesDataOffset = offset; + if (hasVertexBones == 1) { + offset += vertexCount; + } + + @Pc(210) int triangleAlphaDataOffset = offset; + if (hasAlpha == 1) { + offset += triangleCount; + } + + @Pc(219) int vertexIndexDataOffset = offset; + offset += vertexIndexDataLength; + + @Pc(225) int triangleTexturesDataOffset = offset; + if (hasTextures == 1) { + offset += triangleCount * 2; + } + + @Pc(236) int triangleTextureIndexDataOffset = offset; + offset += triangleTextureDataLength; + + @Pc(242) int triangleColorDataOffset = offset; + offset += triangleCount * 2; + + @Pc(250) int dxDataOffset = offset; + offset += dxDataLength; + + @Pc(256) int dyDataOffset = offset; + offset += dyDataLength; + + @Pc(262) int dzDataOffset = offset; + offset += dzDataLength; + + @Pc(268) int simplePmnDataOffset = offset; + offset += simpleTextureFaceCount * 6; + + @Pc(276) int complexPmnDataOffset = offset; + offset += complexTextureFaceCount * 6; + + @Pc(284) int complexScaleDataOffset = offset; + offset += complexTextureFaceCount * 6; + + @Pc(292) int complexRotationDataOffset = offset; + offset += complexTextureFaceCount; + + @Pc(298) int cube1DataOffset = offset; + offset += complexTextureFaceCount; + + @Pc(304) int cube2DataOffset = offset; + offset += complexTextureFaceCount + cubeTextureFaceCount * 2; + + this.vertexCount = vertexCount; + this.triangleCount = triangleCount; + this.texturedCount = texturedCount; + + this.vertexX = new int[vertexCount]; + this.vertexY = new int[vertexCount]; + this.vertexZ = new int[vertexCount]; + + this.triangleVertexA = new int[triangleCount]; + this.triangleVertexB = new int[triangleCount]; + this.triangleVertexC = new int[triangleCount]; + + if (hasVertexBones == 1) { + this.vertexBones = new int[vertexCount]; + } + + if (hasTriangleInfo) { + this.triangleInfo = new byte[triangleCount]; + } + + if (priority == 255) { + this.trianglePriorities = new byte[triangleCount]; + } else { + this.priority = (byte) priority; + } + + if (hasAlpha == 1) { + this.triangleAlpha = new byte[triangleCount]; + } + + if (hasTriangleBones == 1) { + this.triangleBones = new int[triangleCount]; + } + + if (hasTextures == 1) { + this.triangleTextures = new short[triangleCount]; + } + + if (hasTextures == 1 && texturedCount > 0) { + this.triangleTextureIndex = new byte[triangleCount]; + } + + this.triangleColors = new short[triangleCount]; + + if (texturedCount > 0) { + this.textureFacesP = new short[texturedCount]; + this.textureFacesM = new short[texturedCount]; + this.textureFacesN = new short[texturedCount]; + + if (complexTextureFaceCount > 0) { + this.texturesScaleX = new short[complexTextureFaceCount]; + this.texturesScaleY = new short[complexTextureFaceCount]; + this.texturesScaleZ = new short[complexTextureFaceCount]; + this.textureRotationY = new byte[complexTextureFaceCount]; + this.aByteArray32 = new byte[complexTextureFaceCount]; + this.aByteArray34 = new byte[complexTextureFaceCount]; + } + + if (cubeTextureFaceCount > 0) { + this.aByteArray28 = new byte[cubeTextureFaceCount]; + this.aByteArray33 = new byte[cubeTextureFaceCount]; + } + } + + buffer1.offset = texturedCount; + buffer2.offset = dxDataOffset; + buffer3.offset = dyDataOffset; + buffer4.offset = dzDataOffset; + buffer5.offset = vertexBonesDataOffset; + + @Pc(473) int prevVertexX = 0; + @Pc(475) int prevVertexY = 0; + @Pc(477) int prevVertexZ = 0; + + for (int v = 0; v < vertexCount; v++) { + int flags = buffer1.g1(); + + int dx = 0; + if ((flags & 0x1) != 0) { + dx = buffer2.gsmart(); + } + + int dy = 0; + if ((flags & 0x2) != 0) { + dy = buffer3.gsmart(); + } + + int dz = 0; + if ((flags & 0x4) != 0) { + dz = buffer4.gsmart(); + } + + this.vertexX[v] = prevVertexX + dx; + this.vertexY[v] = prevVertexY + dy; + this.vertexZ[v] = prevVertexZ + dz; + + prevVertexX = this.vertexX[v]; + prevVertexY = this.vertexY[v]; + prevVertexZ = this.vertexZ[v]; + + if (hasVertexBones == 1) { + this.vertexBones[v] = buffer5.g1(); + } + } + + buffer1.offset = triangleColorDataOffset; + buffer2.offset = triangleInfoDataOffset; + buffer3.offset = trianglePriorityDataOffset; + buffer4.offset = triangleAlphaDataOffset; + buffer5.offset = triangleBonesDataOffset; + buffer6.offset = triangleTexturesDataOffset; + buffer7.offset = triangleTextureIndexDataOffset; + + for (int t = 0; t < triangleCount; t++) { + this.triangleColors[t] = (short) buffer1.g2(); + + if (hasTriangleInfo) { + this.triangleInfo[t] = buffer2.g1b(); + } + + if (priority == 255) { + this.trianglePriorities[t] = buffer3.g1b(); + } + + if (hasAlpha == 1) { + this.triangleAlpha[t] = buffer4.g1b(); + } + + if (hasTriangleBones == 1) { + this.triangleBones[t] = buffer5.g1(); + } + + if (hasTextures == 1) { + this.triangleTextures[t] = (short) (buffer6.g2() - 1); + } + + if (this.triangleTextureIndex != null) { + if (this.triangleTextures[t] == -1) { + this.triangleTextureIndex[t] = -1; + } else { + this.triangleTextureIndex[t] = (byte) (buffer7.g1() - 1); + } + } + } + + buffer1.offset = vertexIndexDataOffset; + buffer2.offset = triangleTypeDataOffset; + + int a = 0; + int b = 0; + int c = 0; + int last = 0; + + for (int t = 0; t < triangleCount; t++) { + int type = buffer2.g1(); + if (type == 1) { + a = buffer1.gsmart() + last; + b = buffer1.gsmart() + a; + c = buffer1.gsmart() + b; + last = c; + this.triangleVertexA[t] = a; + this.triangleVertexB[t] = b; + this.triangleVertexC[t] = c; + } else if (type == 2) { + b = c; + c = buffer1.gsmart() + last; + last = c; + this.triangleVertexA[t] = a; + this.triangleVertexB[t] = b; + this.triangleVertexC[t] = c; + } else if (type == 3) { + a = c; + c = buffer1.gsmart() + last; + last = c; + this.triangleVertexA[t] = a; + this.triangleVertexB[t] = b; + this.triangleVertexC[t] = c; + } else if (type == 4) { + @Pc(803) int b0 = a; + a = b; + b = b0; + c = buffer1.gsmart() + last; + last = c; + this.triangleVertexA[t] = a; + this.triangleVertexB[t] = b0; + this.triangleVertexC[t] = c; + } + } + + buffer1.offset = simplePmnDataOffset; + buffer2.offset = complexPmnDataOffset; + buffer3.offset = complexScaleDataOffset; + buffer4.offset = complexRotationDataOffset; + buffer5.offset = cube1DataOffset; + buffer6.offset = cube2DataOffset; + + for (int t = 0; t < texturedCount; t++) { + int type = this.textureTypes[t] & 0xFF; + if (type == 0) { + this.textureFacesP[t] = (short) buffer1.g2(); + this.textureFacesM[t] = (short) buffer1.g2(); + this.textureFacesN[t] = (short) buffer1.g2(); + } else if (type == 1) { + this.textureFacesP[t] = (short) buffer2.g2(); + this.textureFacesM[t] = (short) buffer2.g2(); + this.textureFacesN[t] = (short) buffer2.g2(); + this.texturesScaleX[t] = (short) buffer3.g2(); + this.texturesScaleY[t] = (short) buffer3.g2(); + this.texturesScaleZ[t] = (short) buffer3.g2(); + this.textureRotationY[t] = buffer4.g1b(); + this.aByteArray32[t] = buffer5.g1b(); + this.aByteArray34[t] = buffer6.g1b(); + } else if (type == 2) { + this.textureFacesP[t] = (short) buffer2.g2(); + this.textureFacesM[t] = (short) buffer2.g2(); + this.textureFacesN[t] = (short) buffer2.g2(); + this.texturesScaleX[t] = (short) buffer3.g2(); + this.texturesScaleY[t] = (short) buffer3.g2(); + this.texturesScaleZ[t] = (short) buffer3.g2(); + this.textureRotationY[t] = buffer4.g1b(); + this.aByteArray32[t] = buffer5.g1b(); + this.aByteArray34[t] = buffer6.g1b(); + this.aByteArray28[t] = buffer6.g1b(); + this.aByteArray33[t] = buffer6.g1b(); + } else if (type == 3) { + this.textureFacesP[t] = (short) buffer2.g2(); + this.textureFacesM[t] = (short) buffer2.g2(); + this.textureFacesN[t] = (short) buffer2.g2(); + this.texturesScaleX[t] = (short) buffer3.g2(); + this.texturesScaleY[t] = (short) buffer3.g2(); + this.texturesScaleZ[t] = (short) buffer3.g2(); + this.textureRotationY[t] = buffer4.g1b(); + this.aByteArray32[t] = buffer5.g1b(); + this.aByteArray34[t] = buffer6.g1b(); + } + } + + if (hasParticleEmitters) { + buffer1.offset = offset; + + int particleEmittersLen = buffer1.g1(); + if (particleEmittersLen > 0) { + buffer1.offset += particleEmittersLen * 4; + } + + int particleEffectorsLen = buffer1.g1(); + if (particleEffectorsLen > 0) { + buffer1.offset += particleEffectorsLen * 4; + } + } + } + + @OriginalMember(owner = "client!gb", name = "i", descriptor = "()Lclient!gb;") + public final RawModel method1675() { + @Pc(3) RawModel m = new RawModel(); + if (this.triangleInfo != null) { + m.triangleInfo = new byte[this.triangleCount]; + System.arraycopy(this.triangleInfo, 0, m.triangleInfo, 0, this.triangleCount); + } + + m.vertexCount = this.vertexCount; + m.triangleCount = this.triangleCount; + m.texturedCount = this.texturedCount; + m.vertexX = this.vertexX; + m.vertexY = this.vertexY; + m.vertexZ = this.vertexZ; + m.triangleVertexA = this.triangleVertexA; + m.triangleVertexB = this.triangleVertexB; + m.triangleVertexC = this.triangleVertexC; + m.trianglePriorities = this.trianglePriorities; + m.triangleAlpha = this.triangleAlpha; + m.triangleTextureIndex = this.triangleTextureIndex; + m.triangleColors = this.triangleColors; + m.triangleTextures = this.triangleTextures; + m.priority = this.priority; + m.textureTypes = this.textureTypes; + m.textureFacesP = this.textureFacesP; + m.textureFacesM = this.textureFacesM; + m.textureFacesN = this.textureFacesN; + m.texturesScaleX = this.texturesScaleX; + m.texturesScaleY = this.texturesScaleY; + m.texturesScaleZ = this.texturesScaleZ; + m.textureRotationY = this.textureRotationY; + m.aByteArray32 = this.aByteArray32; + m.aByteArray34 = this.aByteArray34; + m.aByteArray28 = this.aByteArray28; + m.aByteArray33 = this.aByteArray33; + m.vertexBones = this.vertexBones; + m.triangleBones = this.triangleBones; + m.boneVertices = this.boneVertices; + m.boneTriangles = this.boneTriangles; + m.vertexNormals = this.vertexNormals; + m.triangleNormals = this.triangleNormals; + m.aShort19 = this.aShort19; + m.aShort18 = this.aShort18; + return m; + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "(IIIBSB)I") + public final int addTriangle(@OriginalArg(0) int vertexA, @OriginalArg(1) int vertexB, @OriginalArg(2) int vertexC, @OriginalArg(4) short color, @OriginalArg(5) byte alpha) { + this.triangleVertexA[this.triangleCount] = vertexA; + this.triangleVertexB[this.triangleCount] = vertexB; + this.triangleVertexC[this.triangleCount] = vertexC; + this.triangleInfo[this.triangleCount] = 1; + this.triangleTextureIndex[this.triangleCount] = -1; + this.triangleColors[this.triangleCount] = color; + this.triangleTextures[this.triangleCount] = -1; + this.triangleAlpha[this.triangleCount] = alpha; + return this.triangleCount++; + } + + @OriginalMember(owner = "client!gb", name = "c", descriptor = "(I)V") + private void method1677(@OriginalArg(0) int arg0) { + @Pc(3) int local3 = SIN[arg0]; + @Pc(7) int local7 = COS[arg0]; + for (@Pc(9) int local9 = 0; local9 < this.vertexCount; local9++) { + @Pc(29) int local29 = this.vertexY[local9] * local7 - this.vertexZ[local9] * local3 >> 16; + this.vertexZ[local9] = this.vertexY[local9] * local3 + this.vertexZ[local9] * local7 >> 16; + this.vertexY[local9] = local29; + } + this.invalidate(); + } + + @OriginalMember(owner = "client!gb", name = "j", descriptor = "()V") + private void invalidate() { + this.vertexNormals = null; + this.aClass57Array2 = null; + this.triangleNormals = null; + this.boundsValid = false; + } + + @OriginalMember(owner = "client!gb", name = "c", descriptor = "(IIIII)Lclient!ak;") + public final Model createModel(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (GlRenderer.enabled) { + @Pc(9) GlModel model = new GlModel(this, arg0, arg1, true); + model.createBones(); + return model; + } else { + return new SoftwareModel(this, arg0, arg1, arg2, arg3, arg4); + } + } + + @OriginalMember(owner = "client!gb", name = "b", descriptor = "()I") + @Override + public final int getMinY() { + if (!this.boundsValid) { + this.calculateBounds(); + } + + return this.minY; + } + + @OriginalMember(owner = "client!gb", name = "k", descriptor = "()V") + public final void resetBones() { + this.vertexBones = null; + this.triangleBones = null; + this.boneVertices = null; + this.boneTriangles = null; + } + + @OriginalMember(owner = "client!gb", name = "a", descriptor = "(Lclient!th;IIIZ)V") + @Override + public final void method4544(@OriginalArg(0) Entity arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) boolean arg4) { + @Pc(2) RawModel m = (RawModel) arg0; + m.calculateBounds(); + m.calculateNormals(); + anInt2138++; + @Pc(12) int local12 = 0; + @Pc(15) int[] local15 = m.vertexX; + @Pc(18) int local18 = m.vertexCount; + @Pc(20) int local20; + for (local20 = 0; local20 < this.vertexCount; local20++) { + @Pc(29) VertexNormal local29 = this.vertexNormals[local20]; + if (local29.magnitude != 0) { + @Pc(40) int local40 = this.vertexY[local20] - arg2; + if (local40 >= m.minY && local40 <= m.maxY) { + @Pc(56) int local56 = this.vertexX[local20] - arg1; + if (local56 >= m.minX && local56 <= m.maxX) { + @Pc(72) int local72 = this.vertexZ[local20] - arg3; + if (local72 >= m.minZ && local72 <= m.maxZ) { + for (@Pc(83) int local83 = 0; local83 < local18; local83++) { + @Pc(91) VertexNormal local91 = m.vertexNormals[local83]; + if (local56 == local15[local83] && local72 == m.vertexZ[local83] && local40 == m.vertexY[local83] && local91.magnitude != 0) { + if (this.aClass57Array2 == null) { + this.aClass57Array2 = new VertexNormal[this.vertexCount]; + } + if (m.aClass57Array2 == null) { + m.aClass57Array2 = new VertexNormal[local18]; + } + @Pc(131) VertexNormal local131 = this.aClass57Array2[local20]; + if (local131 == null) { + local131 = this.aClass57Array2[local20] = new VertexNormal(local29); + } + @Pc(148) VertexNormal local148 = m.aClass57Array2[local83]; + if (local148 == null) { + local148 = m.aClass57Array2[local83] = new VertexNormal(local91); + } + local131.x += local91.x; + local131.y += local91.y; + local131.z += local91.z; + local131.magnitude += local91.magnitude; + local148.x += local29.x; + local148.y += local29.y; + local148.z += local29.z; + local148.magnitude += local29.magnitude; + local12++; + anIntArray194[local20] = anInt2138; + anIntArray199[local83] = anInt2138; + } + } + } + } + } + } + } + if (local12 < 3 || !arg4) { + return; + } + for (local20 = 0; local20 < this.triangleCount; local20++) { + if (anIntArray194[this.triangleVertexA[local20]] == anInt2138 && anIntArray194[this.triangleVertexB[local20]] == anInt2138 && anIntArray194[this.triangleVertexC[local20]] == anInt2138) { + if (this.triangleInfo == null) { + this.triangleInfo = new byte[this.triangleCount]; + } + this.triangleInfo[local20] = 2; + } + } + for (local20 = 0; local20 < m.triangleCount; local20++) { + if (anIntArray199[m.triangleVertexA[local20]] == anInt2138 && anIntArray199[m.triangleVertexB[local20]] == anInt2138 && anIntArray199[m.triangleVertexC[local20]] == anInt2138) { + if (m.triangleInfo == null) { + m.triangleInfo = new byte[m.triangleCount]; + } + m.triangleInfo[local20] = 2; + } + } + } + + @OriginalMember(owner = "client!gb", name = "d", descriptor = "(I)V") + public final void method1682() { + @Pc(3) int sin = SIN[256]; + @Pc(7) int cos = COS[256]; + for (@Pc(9) int i = 0; i < this.vertexCount; i++) { + @Pc(29) int y = this.vertexZ[i] * sin + this.vertexX[i] * cos >> 16; + this.vertexZ[i] = this.vertexZ[i] * cos - this.vertexX[i] * sin >> 16; + this.vertexX[i] = y; + } + this.invalidate(); + } + + @OriginalMember(owner = "client!gb", name = "l", descriptor = "()V") + public final void createBones() { + @Pc(5) int[] bonesLen; + @Pc(7) int maxBone; + @Pc(22) int temp; + @Pc(9) int i; + @Pc(18) int bone; + if (this.vertexBones != null) { + bonesLen = new int[256]; + maxBone = 0; + for (i = 0; i < this.vertexCount; i++) { + bone = this.vertexBones[i]; + temp = bonesLen[bone]++; + if (bone > maxBone) { + maxBone = bone; + } + } + this.boneVertices = new int[maxBone + 1][]; + for (i = 0; i <= maxBone; i++) { + this.boneVertices[i] = new int[bonesLen[i]]; + bonesLen[i] = 0; + } + i = 0; + while (i < this.vertexCount) { + bone = this.vertexBones[i]; + this.boneVertices[bone][bonesLen[bone]++] = i++; + } + this.vertexBones = null; + } + if (this.triangleBones == null) { + return; + } + bonesLen = new int[256]; + maxBone = 0; + for (i = 0; i < this.triangleCount; i++) { + bone = this.triangleBones[i]; + temp = bonesLen[bone]++; + if (bone > maxBone) { + maxBone = bone; + } + } + this.boneTriangles = new int[maxBone + 1][]; + for (i = 0; i <= maxBone; i++) { + this.boneTriangles[i] = new int[bonesLen[i]]; + bonesLen[i] = 0; + } + i = 0; + while (i < this.triangleCount) { + bone = this.triangleBones[i]; + this.boneTriangles[bone][bonesLen[bone]++] = i++; + } + this.triangleBones = null; + } + + @OriginalMember(owner = "client!gb", name = "d", descriptor = "(III)V") + public final void method1684(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(5) int local5; + @Pc(9) int local9; + @Pc(11) int local11; + @Pc(31) int local31; + if (arg2 != 0) { + local5 = SIN[arg2]; + local9 = COS[arg2]; + for (local11 = 0; local11 < this.vertexCount; local11++) { + local31 = this.vertexY[local11] * local5 + this.vertexX[local11] * local9 >> 16; + this.vertexY[local11] = this.vertexY[local11] * local9 - this.vertexX[local11] * local5 >> 16; + this.vertexX[local11] = local31; + } + } + if (arg0 != 0) { + local5 = SIN[arg0]; + local9 = COS[arg0]; + for (local11 = 0; local11 < this.vertexCount; local11++) { + local31 = this.vertexY[local11] * local9 - this.vertexZ[local11] * local5 >> 16; + this.vertexZ[local11] = this.vertexY[local11] * local5 + this.vertexZ[local11] * local9 >> 16; + this.vertexY[local11] = local31; + } + } + if (arg1 == 0) { + return; + } + local5 = SIN[arg1]; + local9 = COS[arg1]; + for (local11 = 0; local11 < this.vertexCount; local11++) { + local31 = this.vertexZ[local11] * local5 + this.vertexX[local11] * local9 >> 16; + this.vertexZ[local11] = this.vertexZ[local11] * local9 - this.vertexX[local11] * local5 >> 16; + this.vertexX[local11] = local31; + } + } + + @OriginalMember(owner = "client!gb", name = "e", descriptor = "(III)I") + public final int method1685(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + if (this.vertexX[local1] == arg0 && this.vertexY[local1] == 0 && this.vertexZ[local1] == arg1) { + return local1; + } + } + this.vertexX[this.vertexCount] = arg0; + this.vertexY[this.vertexCount] = 0; + this.vertexZ[this.vertexCount] = arg1; + return this.vertexCount++; + } + + @OriginalMember(owner = "client!gb", name = "b", descriptor = "(SS)V") + public final void recolor(@OriginalArg(0) short src, @OriginalArg(1) short dest) { + for (@Pc(1) int i = 0; i < this.triangleCount; i++) { + if (this.triangleColors[i] == src) { + this.triangleColors[i] = dest; + } + } + } + + @OriginalMember(owner = "client!gb", name = "b", descriptor = "([B)V") + private void decodeOld(@OriginalArg(0) byte[] src) { + @Pc(1) boolean hasTriangleInfo = false; + @Pc(3) boolean hasTextures = false; + + @Pc(8) Buffer buffer1 = new Buffer(src); + @Pc(13) Buffer buffer2 = new Buffer(src); + @Pc(18) Buffer buffer3 = new Buffer(src); + @Pc(23) Buffer buffer4 = new Buffer(src); + @Pc(28) Buffer buffer5 = new Buffer(src); + buffer1.offset = src.length - 18; + + @Pc(38) int vertexCount = buffer1.g2(); + @Pc(42) int triangleCount = buffer1.g2(); + @Pc(46) int texturedCount = buffer1.g1(); + + @Pc(50) int hasInfo = buffer1.g1(); + @Pc(54) int hasPriorities = buffer1.g1(); + @Pc(58) int hasAlpha = buffer1.g1(); + @Pc(62) int hasTriangleBones = buffer1.g1(); + @Pc(66) int hasVertexBones = buffer1.g1(); + + @Pc(70) int dxDataLength = buffer1.g2(); + @Pc(74) int dyDataLength = buffer1.g2(); + @Pc(78) int dzDataLength = buffer1.g2(); + @Pc(82) int vertexIndexDataLength = buffer1.g2(); + + @Pc(90) int offset = vertexCount; + + @Pc(92) int triangleTypeDataOffset = offset; + offset += triangleCount; + + @Pc(98) int trianglePriorityDataOffset = offset; + if (hasPriorities == 255) { + offset += triangleCount; + } + + @Pc(107) int triangleBonesDataOffset = offset; + if (hasTriangleBones == 1) { + offset += triangleCount; + } + + @Pc(116) int triangleInfoDataOffset = offset; + if (hasInfo == 1) { + offset += triangleCount; + } + + @Pc(125) int vertexBonesOffset = offset; + if (hasVertexBones == 1) { + offset += vertexCount; + } + + @Pc(134) int triangleAlphaDataOffset = offset; + if (hasAlpha == 1) { + offset += triangleCount; + } + + @Pc(143) int vertexIndexDataOffset = offset; + offset += vertexIndexDataLength; + + @Pc(149) int triangleColorDataOffset = offset; + offset += triangleCount * 2; + + @Pc(157) int pmnDataOffset = offset; + offset += texturedCount * 6; + + @Pc(165) int dxDataOffset = offset; + offset += dxDataLength; + + @Pc(171) int dyDataOffset = offset; + offset += dyDataLength; + + @Pc(171) int dzDataOffset = offset; + // offset += dzDataLength; + + this.vertexCount = vertexCount; + this.triangleCount = triangleCount; + this.texturedCount = texturedCount; + + this.vertexX = new int[vertexCount]; + this.vertexY = new int[vertexCount]; + this.vertexZ = new int[vertexCount]; + + this.triangleVertexA = new int[triangleCount]; + this.triangleVertexB = new int[triangleCount]; + this.triangleVertexC = new int[triangleCount]; + + if (texturedCount > 0) { + this.textureTypes = new byte[texturedCount]; + this.textureFacesP = new short[texturedCount]; + this.textureFacesM = new short[texturedCount]; + this.textureFacesN = new short[texturedCount]; + } + + if (hasVertexBones == 1) { + this.vertexBones = new int[vertexCount]; + } + + if (hasInfo == 1) { + this.triangleInfo = new byte[triangleCount]; + this.triangleTextureIndex = new byte[triangleCount]; + this.triangleTextures = new short[triangleCount]; + } + + if (hasPriorities == 255) { + this.trianglePriorities = new byte[triangleCount]; + } else { + this.priority = (byte) hasPriorities; + } + + if (hasAlpha == 1) { + this.triangleAlpha = new byte[triangleCount]; + } + + if (hasTriangleBones == 1) { + this.triangleBones = new int[triangleCount]; + } + + this.triangleColors = new short[triangleCount]; + + buffer1.offset = 0; + buffer2.offset = dxDataOffset; + buffer3.offset = dyDataOffset; + buffer4.offset = dzDataOffset; + buffer5.offset = vertexBonesOffset; + + @Pc(301) int prevVertexX = 0; + @Pc(303) int prevVertexY = 0; + @Pc(305) int prevVertexZ = 0; + + for (int v = 0; v < vertexCount; v++) { + int flags = buffer1.g1(); + + int dx = 0; + if ((flags & 0x1) != 0) { + dx = buffer2.gsmart(); + } + + int dy = 0; + if ((flags & 0x2) != 0) { + dy = buffer3.gsmart(); + } + + int dz = 0; + if ((flags & 0x4) != 0) { + dz = buffer4.gsmart(); + } + + this.vertexX[v] = prevVertexX + dx; + this.vertexY[v] = prevVertexY + dy; + this.vertexZ[v] = prevVertexZ + dz; + + prevVertexX = this.vertexX[v]; + prevVertexY = this.vertexY[v]; + prevVertexZ = this.vertexZ[v]; + + if (hasVertexBones == 1) { + this.vertexBones[v] = buffer5.g1(); + } + } + + buffer1.offset = triangleColorDataOffset; + buffer2.offset = triangleInfoDataOffset; + buffer3.offset = trianglePriorityDataOffset; + buffer4.offset = triangleAlphaDataOffset; + buffer5.offset = triangleBonesDataOffset; + + for (int t = 0; t < triangleCount; t++) { + this.triangleColors[t] = (short) buffer1.g2(); + + if (hasInfo == 1) { + int flags = buffer2.g1(); + if ((flags & 0x1) == 1) { + this.triangleInfo[t] = 1; + hasTriangleInfo = true; + } else { + this.triangleInfo[t] = 0; + } + + if ((flags & 0x2) == 2) { + this.triangleTextureIndex[t] = (byte) (flags >> 2); + this.triangleTextures[t] = this.triangleColors[t]; + this.triangleColors[t] = 127; + if (this.triangleTextures[t] != -1) { + hasTextures = true; + } + } else { + this.triangleTextureIndex[t] = -1; + this.triangleTextures[t] = -1; + } + } + + if (hasPriorities == 255) { + this.trianglePriorities[t] = buffer3.g1b(); + } + + if (hasAlpha == 1) { + this.triangleAlpha[t] = buffer4.g1b(); + } + + if (hasTriangleBones == 1) { + this.triangleBones[t] = buffer5.g1(); + } + } + + buffer1.offset = vertexIndexDataOffset; + buffer2.offset = triangleTypeDataOffset; + + int a = 0; + int b = 0; + int c = 0; + int last = 0; + + for (int t = 0; t < triangleCount; t++) { + int type = buffer2.g1(); + if (type == 1) { + a = buffer1.gsmart() + last; + b = buffer1.gsmart() + a; + c = buffer1.gsmart() + b; + last = c; + this.triangleVertexA[t] = a; + this.triangleVertexB[t] = b; + this.triangleVertexC[t] = c; + } else if (type == 2) { + b = c; + c = buffer1.gsmart() + last; + last = c; + this.triangleVertexA[t] = a; + this.triangleVertexB[t] = b; + this.triangleVertexC[t] = c; + } else if (type == 3) { + a = c; + c = buffer1.gsmart() + last; + last = c; + this.triangleVertexA[t] = a; + this.triangleVertexB[t] = b; + this.triangleVertexC[t] = c; + } else if (type == 4) { + int b0 = a; + a = b; + b = b0; + c = buffer1.gsmart() + last; + last = c; + this.triangleVertexA[t] = a; + this.triangleVertexB[t] = b0; + this.triangleVertexC[t] = c; + } + } + + buffer1.offset = pmnDataOffset; + + for (int t = 0; t < texturedCount; t++) { + this.textureTypes[t] = 0; + this.textureFacesP[t] = (short) buffer1.g2(); + this.textureFacesM[t] = (short) buffer1.g2(); + this.textureFacesN[t] = (short) buffer1.g2(); + } + + if (this.triangleTextureIndex != null) { + @Pc(721) boolean hasFaceTextures = false; + for (int i = 0; i < triangleCount; i++) { + int index = this.triangleTextureIndex[i] & 0xFF; + if (index != 255) { + if ((this.textureFacesP[index] & 0xFFFF) == this.triangleVertexA[i] && (this.textureFacesM[index] & 0xFFFF) == this.triangleVertexB[i] && (this.textureFacesN[index] & 0xFFFF) == this.triangleVertexC[i]) { + this.triangleTextureIndex[i] = -1; + } else { + hasFaceTextures = true; + } + } + } + + if (!hasFaceTextures) { + this.triangleTextureIndex = null; + } + } + + if (!hasTextures) { + this.triangleTextures = null; + } + + if (!hasTriangleInfo) { + this.triangleInfo = null; + } + } + + @OriginalMember(owner = "client!gb", name = "m", descriptor = "()V") + public final void method1689() { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + @Pc(10) int local10 = this.vertexZ[local1]; + this.vertexZ[local1] = this.vertexX[local1]; + this.vertexX[local1] = -local10; + } + this.invalidate(); + } +} diff --git a/client/src/main/java/rt4/ReferenceNode.java b/client/src/main/java/rt4/ReferenceNode.java new file mode 100644 index 0000000..85c3fb7 --- /dev/null +++ b/client/src/main/java/rt4/ReferenceNode.java @@ -0,0 +1,18 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!gf") +public abstract class ReferenceNode extends SecondaryNode { + + @OriginalMember(owner = "client!gf", name = "", descriptor = "()V") + protected ReferenceNode() { + } + + @OriginalMember(owner = "client!gf", name = "a", descriptor = "(Z)Ljava/lang/Object;") + public abstract Object get(); + + @OriginalMember(owner = "client!gf", name = "e", descriptor = "(I)Z") + public abstract boolean isSoft(); +} diff --git a/client/src/main/java/rt4/ReferenceNodeFactory.java b/client/src/main/java/rt4/ReferenceNodeFactory.java new file mode 100644 index 0000000..3bbf02f --- /dev/null +++ b/client/src/main/java/rt4/ReferenceNodeFactory.java @@ -0,0 +1,25 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!q") +public abstract class ReferenceNodeFactory { + + @OriginalMember(owner = "client!uh", name = "ab", descriptor = "Lclient!q;") + public static final ReferenceNodeFactory SOFT_REFERENCE_NODE_FACTORY = createSoftReferenceNodeFactory(); + + @OriginalMember(owner = "client!dh", name = "b", descriptor = "(I)Lclient!q;") + public static ReferenceNodeFactory createSoftReferenceNodeFactory() { + try { + return new SoftReferenceNodeFactory(); + } catch (@Pc(15) Throwable local15) { + return null; + } + } + + @OriginalMember(owner = "client!q", name = "a", descriptor = "(Lclient!gf;I)Lclient!gf;") + public abstract ReferenceNode create(@OriginalArg(0) ReferenceNode arg0); +} diff --git a/client/src/main/java/rt4/ReflectionCheck.java b/client/src/main/java/rt4/ReflectionCheck.java new file mode 100644 index 0000000..123f06d --- /dev/null +++ b/client/src/main/java/rt4/ReflectionCheck.java @@ -0,0 +1,254 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.io.*; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +@OriginalClass("client!ed") +public final class ReflectionCheck extends Node { + + @OriginalMember(owner = "client!qi", name = "u", descriptor = "Lclient!ih;") + public static LinkedList queue = new LinkedList(); + + @OriginalMember(owner = "client!ed", name = "p", descriptor = "I") + public int size; + + @OriginalMember(owner = "client!ed", name = "u", descriptor = "[Lsignlink!im;") + public PrivilegedRequest[] methodRequests; + + @OriginalMember(owner = "client!ed", name = "v", descriptor = "[I") + public int[] fieldValues; + + @OriginalMember(owner = "client!ed", name = "w", descriptor = "[I") + public int[] errors; + + @OriginalMember(owner = "client!ed", name = "y", descriptor = "[I") + public int[] types; + + @OriginalMember(owner = "client!ed", name = "B", descriptor = "[[[B") + public byte[][][] methodArguments; + + @OriginalMember(owner = "client!ed", name = "C", descriptor = "[Lsignlink!im;") + public PrivilegedRequest[] fieldRequests; + + @OriginalMember(owner = "client!ed", name = "F", descriptor = "I") + public int id; + + @OriginalMember(owner = "client!t", name = "a", descriptor = "(Lclient!i;II)V") + public static void loop(@OriginalArg(0) Packet arg0) { + while (true) { + @Pc(18) ReflectionCheck local18 = (ReflectionCheck) queue.head(); + if (local18 == null) { + return; + } + @Pc(23) boolean local23 = false; + @Pc(25) int local25; + for (local25 = 0; local25 < local18.size; local25++) { + if (local18.fieldRequests[local25] != null) { + if (local18.fieldRequests[local25].status == 2) { + local18.errors[local25] = -5; + } + if (local18.fieldRequests[local25].status == 0) { + local23 = true; + } + } + if (local18.methodRequests[local25] != null) { + if (local18.methodRequests[local25].status == 2) { + local18.errors[local25] = -6; + } + if (local18.methodRequests[local25].status == 0) { + local23 = true; + } + } + } + if (local23) { + return; + } + arg0.p1isaac(163); + arg0.p1(0); + local25 = arg0.offset; + arg0.p4(local18.id); + for (@Pc(121) int local121 = 0; local121 < local18.size; local121++) { + if (local18.errors[local121] == 0) { + try { + @Pc(151) int local151 = local18.types[local121]; + @Pc(168) Field local168; + @Pc(195) int local195; + if (local151 == 0) { + local168 = (Field) local18.fieldRequests[local121].result; + local195 = local168.getInt(null); + arg0.p1(0); + arg0.p4(local195); + } else if (local151 == 1) { + local168 = (Field) local18.fieldRequests[local121].result; + local168.setInt(null, local18.fieldValues[local121]); + arg0.p1(0); + } else if (local151 == 2) { + local168 = (Field) local18.fieldRequests[local121].result; + local195 = local168.getModifiers(); + arg0.p1(0); + arg0.p4(local195); + } + @Pc(234) Method local234; + if (local151 == 3) { + local234 = (Method) local18.methodRequests[local121].result; + @Pc(239) byte[][] local239 = local18.methodArguments[local121]; + @Pc(243) Object[] local243 = new Object[local239.length]; + for (@Pc(245) int local245 = 0; local245 < local239.length; local245++) { + @Pc(259) ObjectInputStream local259 = new ObjectInputStream(new ByteArrayInputStream(local239[local245])); + local243[local245] = local259.readObject(); + } + @Pc(272) Object local272 = local234.invoke(null, local243); + if (local272 == null) { + arg0.p1(0); + } else if (local272 instanceof Number) { + arg0.p1(1); + arg0.p8(((Number) local272).longValue()); + } else if (local272 instanceof JagString) { + arg0.p1(2); + arg0.pjstr((JagString) local272); + } else { + arg0.p1(4); + } + } else if (local151 == 4) { + local234 = (Method) local18.methodRequests[local121].result; + local195 = local234.getModifiers(); + arg0.p1(0); + arg0.p4(local195); + } + } catch (@Pc(338) ClassNotFoundException local338) { + arg0.p1(-10); + } catch (@Pc(344) InvalidClassException local344) { + arg0.p1(-11); + } catch (@Pc(350) StreamCorruptedException local350) { + arg0.p1(-12); + } catch (@Pc(356) OptionalDataException local356) { + arg0.p1(-13); + } catch (@Pc(362) IllegalAccessException local362) { + arg0.p1(-14); + } catch (@Pc(368) IllegalArgumentException local368) { + arg0.p1(-15); + } catch (@Pc(374) InvocationTargetException local374) { + arg0.p1(-16); + } catch (@Pc(380) SecurityException local380) { + arg0.p1(-17); + } catch (@Pc(386) IOException local386) { + arg0.p1(-18); + } catch (@Pc(392) NullPointerException local392) { + arg0.p1(-19); + } catch (@Pc(398) Exception local398) { + arg0.p1(-20); + } catch (@Pc(404) Throwable local404) { + arg0.p1(-21); + } + } else { + arg0.p1(local18.errors[local121]); + } + } + arg0.addcrc(local25); + arg0.psize1(arg0.offset - local25); + local18.unlink(); + } + } + + @OriginalMember(owner = "client!qg", name = "a", descriptor = "(Lsignlink!ll;Lclient!wa;IB)V") + public static void push(@OriginalArg(0) SignLink arg0, @OriginalArg(1) Buffer arg1, @OriginalArg(2) int arg2) { + @Pc(17) ReflectionCheck check = new ReflectionCheck(); + check.size = arg1.g1(); + check.id = arg1.g4(); + check.methodRequests = new PrivilegedRequest[check.size]; + check.errors = new int[check.size]; + check.methodArguments = new byte[check.size][][]; + check.fieldRequests = new PrivilegedRequest[check.size]; + check.types = new int[check.size]; + check.fieldValues = new int[check.size]; + for (@Pc(59) int local59 = 0; local59 < check.size; local59++) { + try { + @Pc(71) int local71 = arg1.g1(); + @Pc(93) String local93; + @Pc(104) String local104; + @Pc(95) int local95; + if (local71 == 0 || local71 == 1 || local71 == 2) { + local93 = new String(arg1.gjstr().method3148()); + local95 = 0; + local104 = new String(arg1.gjstr().method3148()); + if (local71 == 1) { + local95 = arg1.g4(); + } + check.types[local59] = local71; + check.fieldValues[local59] = local95; + check.fieldRequests[local59] = arg0.getDeclaredField(local104, classForName(local93)); + } else if (local71 == 3 || local71 == 4) { + local93 = new String(arg1.gjstr().method3148()); + local104 = new String(arg1.gjstr().method3148()); + local95 = arg1.g1(); + @Pc(171) String[] local171 = new String[local95]; + for (@Pc(173) int local173 = 0; local173 < local95; local173++) { + local171[local173] = new String(arg1.gjstr().method3148()); + } + @Pc(193) byte[][] local193 = new byte[local95][]; + @Pc(210) int local210; + if (local71 == 3) { + for (@Pc(199) int local199 = 0; local199 < local95; local199++) { + local210 = arg1.g4(); + local193[local199] = new byte[local210]; + arg1.gdata(local210, local193[local199]); + } + } + check.types[local59] = local71; + @Pc(234) Class[] local234 = new Class[local95]; + for (local210 = 0; local210 < local95; local210++) { + local234[local210] = classForName(local171[local210]); + } + check.methodRequests[local59] = arg0.getDeclaredMethod(classForName(local93), local234, local104); + check.methodArguments[local59] = local193; + } + } catch (@Pc(269) ClassNotFoundException local269) { + check.errors[local59] = -1; + } catch (@Pc(276) SecurityException local276) { + check.errors[local59] = -2; + } catch (@Pc(283) NullPointerException local283) { + check.errors[local59] = -3; + } catch (@Pc(290) Exception local290) { + check.errors[local59] = -4; + } catch (@Pc(297) Throwable local297) { + check.errors[local59] = -5; + } + } + queue.addTail(check); + } + + @OriginalMember(owner = "client!j", name = "c", descriptor = "(I)V") + public static void clear() { + queue = new LinkedList(); + } + + @OriginalMember(owner = "client!ag", name = "a", descriptor = "(ILjava/lang/String;)Ljava/lang/Class;") + public static Class classForName(@OriginalArg(1) String name) throws ClassNotFoundException { + if (name.equals("B")) { + return Byte.TYPE; + } else if (name.equals("I")) { + return Integer.TYPE; + } else if (name.equals("S")) { + return Short.TYPE; + } else if (name.equals("J")) { + return Long.TYPE; + } else if (name.equals("Z")) { + return Boolean.TYPE; + } else if (name.equals("F")) { + return Float.TYPE; + } else if (name.equals("D")) { + return Double.TYPE; + } else if (name.equals("C")) { + return Character.TYPE; + } else { + return Class.forName(name); + } + } +} diff --git a/client/src/main/java/rt4/SceneGraph.java b/client/src/main/java/rt4/SceneGraph.java new file mode 100644 index 0000000..d2e22c3 --- /dev/null +++ b/client/src/main/java/rt4/SceneGraph.java @@ -0,0 +1,5508 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class SceneGraph { + + @OriginalMember(owner = "client!bb", name = "g", descriptor = "[[[B") + public static final byte[][][] renderFlags = new byte[4][104][104]; + @OriginalMember(owner = "client!mi", name = "Y", descriptor = "[[[Lclient!ih;") + public static final LinkedList[][][] objStacks = new LinkedList[4][104][104]; + @OriginalMember(owner = "client!te", name = "B", descriptor = "[I") + public static final int[] WALL_DECO_ROT_SIZE_Y_DIR = new int[]{0, -1, 0, 1}; + @OriginalMember(owner = "client!fb", name = "q", descriptor = "[I") + public static final int[] anIntArray154 = new int[]{-1, -1, 1, 1}; + @OriginalMember(owner = "client!j", name = "O", descriptor = "[I") + public static final int[] anIntArray565 = new int[]{1, -1, -1, 1}; + @OriginalMember(owner = "client!vl", name = "e", descriptor = "[I") + public static final int[] WALL_ROTATION_TYPE1 = new int[]{1, 2, 4, 8}; + @OriginalMember(owner = "client!pg", name = "T", descriptor = "[I") + public static final int[] anIntArray386 = new int[]{76, 8, 137, 4, 0, 1, 38, 2, 19}; + @OriginalMember(owner = "client!rj", name = "U", descriptor = "Lclient!ih;") + public static final LinkedList projectiles = new LinkedList(); + @OriginalMember(owner = "client!hk", name = "W", descriptor = "Lclient!ih;") + public static final LinkedList spotanims = new LinkedList(); + @OriginalMember(owner = "client!ec", name = "B", descriptor = "[[I") + public static final int[][] anIntArrayArray8 = new int[][]{new int[0], {128, 0, 128, 128, 0, 128}, {0, 0, 128, 0, 128, 128, 64, 128}, {0, 128, 0, 0, 128, 0, 64, 128}, {0, 0, 64, 128, 0, 128}, {128, 128, 64, 128, 128, 0}, {64, 0, 128, 0, 128, 128, 64, 128}, {128, 0, 128, 128, 0, 128, 0, 64, 64, 0}, {0, 0, 64, 0, 0, 64}, {0, 0, 128, 0, 128, 128, 64, 96, 32, 64}, {0, 128, 0, 0, 32, 64, 64, 96, 128, 128}, {0, 128, 0, 0, 32, 32, 96, 32, 128, 0, 128, 128}}; + @OriginalMember(owner = "client!ck", name = "d", descriptor = "[I") + public static final int[] WALL_DECO_ROT_SIZE_X_DIR = new int[]{1, 0, -1, 0}; + @OriginalMember(owner = "client!ka", name = "t", descriptor = "[I") + public static final int[] anIntArray294 = new int[]{0, 0, 2, 0, 0, 2, 1, 1, 0}; + @OriginalMember(owner = "client!uj", name = "A", descriptor = "[I") + public static final int[] anIntArray489 = new int[]{2, 0, 0, 2, 0, 0, 0, 4, 4}; + @OriginalMember(owner = "client!gm", name = "gb", descriptor = "[I") + public static final int[] anIntArray211 = new int[]{0, 4, 4, 8, 0, 0, 8, 0, 0}; + @OriginalMember(owner = "client!kd", name = "sb", descriptor = "[I") + public static final int[] anIntArray307 = new int[]{1, 1, 0, 0, 0, 8, 0, 0, 8}; + @OriginalMember(owner = "client!hb", name = "t", descriptor = "[I") + public static final int[] anIntArray215 = new int[]{160, 192, 80, 96, 0, 144, 80, 48, 160}; + @OriginalMember(owner = "client!km", name = "Rc", descriptor = "[I") + public static final int[] anIntArray324 = new int[]{19, 55, 38, 155, 255, 110, 137, 205, 76}; + @OriginalMember(owner = "client!fh", name = "U", descriptor = "[[Z") + public static final boolean[][] aBooleanArrayArray2 = new boolean[][]{new boolean[0], {true, false, true}, {true, false, false, true}, {false, false, true, true}, {true, true, false}, {false, true, true}, {true, false, false, true}, {false, false, false, true, true}, {false, true, true}, {true, false, true, true, true}, {false, true, true, true, true}, {false, true, true, true, true, false}}; + @OriginalMember(owner = "client!fg", name = "d", descriptor = "[I") + public static final int[] anIntArray159 = new int[6]; + @OriginalMember(owner = "client!fg", name = "l", descriptor = "[I") + public static final int[] anIntArray164 = new int[6]; + @OriginalMember(owner = "client!fg", name = "m", descriptor = "[I") + public static final int[] anIntArray165 = new int[6]; + @OriginalMember(owner = "client!fg", name = "r", descriptor = "[I") + public static final int[] anIntArray169 = new int[6]; + @OriginalMember(owner = "client!fg", name = "t", descriptor = "[I") + public static final int[] anIntArray170 = new int[6]; + @OriginalMember(owner = "client!ah", name = "p", descriptor = "Lclient!ih;") + public static final LinkedList aClass69_32 = new LinkedList(); + @OriginalMember(owner = "client!sh", name = "i", descriptor = "[[I") + public static final int[][] anIntArrayArray35 = new int[][]{{0, 128, 0, 0, 128, 0, 128, 128}, {0, 128, 0, 0, 128, 0}, {0, 0, 64, 128, 0, 128}, {128, 128, 64, 128, 128, 0}, {0, 0, 128, 0, 128, 128, 64, 128}, {0, 128, 0, 0, 128, 0, 64, 128}, {64, 128, 0, 128, 0, 0, 64, 0}, {0, 0, 64, 0, 0, 64}, {128, 0, 128, 128, 0, 128, 0, 64, 64, 0}, {0, 128, 0, 0, 32, 64, 64, 96, 128, 128}, {0, 0, 128, 0, 128, 128, 64, 96, 32, 64}, {0, 0, 128, 0, 96, 32, 32, 32}}; + @OriginalMember(owner = "client!gf", name = "S", descriptor = "[I") + public static final int[] anIntArray419 = new int[]{0, 2, 2, 2, 1, 1, 2, 2, 1, 3, 1, 1}; + @OriginalMember(owner = "client!kc", name = "s", descriptor = "[I") + public static final int[] anIntArray300 = new int[]{1, 1, 1, 1, 4, 1, 1, 5, 6, 1, 5, 0, 7, 0, 4, 1, 7, 2, 1, 1, 6, 1, 1, 3, 6, 1, 7, 0, 0, 6, 7, 0, 1, 7, 6, 1, 1, 1, 5, 4, 3, 2, 1, 1, 0, 4, 1, 5}; + @OriginalMember(owner = "client!wi", name = "hb", descriptor = "[[Z") + public static final boolean[][] aBooleanArrayArray4 = new boolean[][]{{true, true, true}, {false, false}, {false, true}, {true, false}, {false, true, true}, {true, false, true}, {false, true, false}, {true, false, false}}; + @OriginalMember(owner = "client!kc", name = "o", descriptor = "[[[Lclient!bj;") + public static Tile[][][] tiles; + + @OriginalMember(owner = "client!gj", name = "m", descriptor = "[[[I") + public static int[][][] tileHeights; + @OriginalMember(owner = "client!id", name = "i", descriptor = "[[[I") + public static int[][][] surfaceTileHeights; + @OriginalMember(owner = "client!tg", name = "g", descriptor = "[[[B") + public static byte[][][] tileOverlays; + @OriginalMember(owner = "client!n", name = "h", descriptor = "[[[B") + public static byte[][][] tileShapes; + @OriginalMember(owner = "client!ac", name = "e", descriptor = "[[[B") + public static byte[][][] tileAngles; + @OriginalMember(owner = "client!ui", name = "eb", descriptor = "[[[B") + public static byte[][][] tileUnderlays; + @OriginalMember(owner = "client!em", name = "t", descriptor = "[[[I") + public static int[][][] occludeFlags; + @OriginalMember(owner = "client!ka", name = "r", descriptor = "[I") + public static int[] rowCount; + @OriginalMember(owner = "client!lg", name = "k", descriptor = "I") + public static int firstVisibleLevel = 99; + @OriginalMember(owner = "client!ug", name = "d", descriptor = "[I") + public static int[] rowChroma; + @OriginalMember(owner = "client!l", name = "l", descriptor = "[I") + public static int[] rowSaturation; + @OriginalMember(owner = "client!s", name = "i", descriptor = "[I") + public static int[] rowWeightedHue; + @OriginalMember(owner = "client!jd", name = "d", descriptor = "[[[B") + public static byte[][][] shadowmap; + @OriginalMember(owner = "client!wk", name = "v", descriptor = "[I") + public static int[] rowLightness; + @OriginalMember(owner = "client!ub", name = "h", descriptor = "[Lclient!pe;") + public static SceneGraph_Class120[] aClass120Array2; + @OriginalMember(owner = "client!rh", name = "k", descriptor = "I") + public static int anInt4870 = 0; + @OriginalMember(owner = "client!bl", name = "T", descriptor = "I") + public static int sceneryLen = 0; + @OriginalMember(owner = "client!pm", name = "cb", descriptor = "[[[Lclient!bj;") + public static Tile[][][] surfaceGroundTiles; + @OriginalMember(owner = "client!client", name = "kb", descriptor = "[[Lclient!hg;") + public static GlTile[][] surfaceHdTiles; + @OriginalMember(owner = "client!wh", name = "c", descriptor = "[[[Lclient!bj;") + public static Tile[][][] underWaterGroundTiles; + @OriginalMember(owner = "client!pk", name = "R", descriptor = "[[Lclient!hg;") + public static GlTile[][] underWaterHdTiles; + @OriginalMember(owner = "client!hc", name = "O", descriptor = "[Lclient!pe;") + public static SceneGraph_Class120[] aClass120Array1; + @OriginalMember(owner = "client!ma", name = "i", descriptor = "I") + public static int width; + @OriginalMember(owner = "client!hk", name = "Y", descriptor = "I") + public static int length; + @OriginalMember(owner = "client!cd", name = "s", descriptor = "I") + public static int anInt917; + @OriginalMember(owner = "client!tk", name = "D", descriptor = "[Lclient!ec;") + public static Scenery[] scenery; + @OriginalMember(owner = "client!c", name = "bb", descriptor = "[Lclient!ec;") + public static Scenery[] aClass31Array2; + @OriginalMember(owner = "client!gf", name = "O", descriptor = "[[[I") + public static int[][][] underwaterTileHeights; + @OriginalMember(owner = "client!oj", name = "E", descriptor = "[[Lclient!hg;") + public static GlTile[][] underwaterHdTiles; + @OriginalMember(owner = "client!jm", name = "r", descriptor = "I") + public static int levels; + @OriginalMember(owner = "client!sm", name = "e", descriptor = "[[[B") + public static byte[][][] aByteArrayArrayArray13; + @OriginalMember(owner = "client!wi", name = "db", descriptor = "I") + public static int visibility; + @OriginalMember(owner = "client!f", name = "ab", descriptor = "[[I") + public static int[][] anIntArrayArray11; + @OriginalMember(owner = "client!la", name = "i", descriptor = "[[[I") + public static int[][][] anIntArrayArrayArray12; + @OriginalMember(owner = "client!dl", name = "h", descriptor = "[[Z") + public static boolean[][] aBooleanArrayArray1; + @OriginalMember(owner = "client!ha", name = "k", descriptor = "[[Z") + public static boolean[][] aBooleanArrayArray3; + @OriginalMember(owner = "client!og", name = "b", descriptor = "I") + public static int currentChunkZ; + @OriginalMember(owner = "client!ja", name = "q", descriptor = "I") + public static int currentChunkX; + @OriginalMember(owner = "client!gm", name = "R", descriptor = "I") + public static int anInt2293 = (int) (Math.random() * 17.0D) - 8; + @OriginalMember(owner = "client!ok", name = "c", descriptor = "I") + public static int anInt4272 = (int) (Math.random() * 33.0D) - 16; + @OriginalMember(owner = "client!rj", name = "R", descriptor = "I") + public static int cameraZ; + @OriginalMember(owner = "client!pi", name = "U", descriptor = "I") + public static int anInt4539; + @OriginalMember(owner = "client!sk", name = "mb", descriptor = "I") + public static int anInt5205; + @OriginalMember(owner = "client!bl", name = "X", descriptor = "I") + public static int anInt730 = -1; + @OriginalMember(owner = "client!aj", name = "Z", descriptor = "[I") + public static int[] anIntArray8; + @OriginalMember(owner = "client!jg", name = "a", descriptor = "I") + public static int anInt3038; + @OriginalMember(owner = "client!ma", name = "z", descriptor = "I") + public static int anInt3604 = -1; + @OriginalMember(owner = "client!ig", name = "i", descriptor = "I") + public static int anInt2886; + @OriginalMember(owner = "client!k", name = "l", descriptor = "[I") + public static int[] anIntArray292; + @OriginalMember(owner = "client!ta", name = "o", descriptor = "[I") + public static int[] anIntArray454; + @OriginalMember(owner = "client!qk", name = "c", descriptor = "[I") + public static int[] anIntArray427; + @OriginalMember(owner = "client!hh", name = "p", descriptor = "[I") + public static int[] anIntArray234; + @OriginalMember(owner = "client!ml", name = "K", descriptor = "I") + public static int cameraY; + @OriginalMember(owner = "client!nd", name = "s", descriptor = "I") + public static int anInt4069; + @OriginalMember(owner = "client!lj", name = "B", descriptor = "I") + public static int cameraX; + @OriginalMember(owner = "client!tb", name = "Q", descriptor = "I") + public static int anInt5276 = 0; + @OriginalMember(owner = "client!bc", name = "Z", descriptor = "I") + public static int anInt437; + @OriginalMember(owner = "client!rc", name = "p", descriptor = "I") + public static int anInt1142 = 0; + @OriginalMember(owner = "client!gn", name = "d", descriptor = "Z") + public static boolean aBoolean130 = false; + @OriginalMember(owner = "client!gg", name = "Z", descriptor = "I") + public static int anInt2222; + @OriginalMember(owner = "client!sj", name = "u", descriptor = "Z") + public static boolean dynamicMapRegion = false; + @OriginalMember(owner = "client!gf", name = "R", descriptor = "I") + public static int centralZoneX; + @OriginalMember(owner = "client!eb", name = "u", descriptor = "I") + public static int centralZoneZ; + @OriginalMember(owner = "client!dc", name = "ab", descriptor = "I") + public static int centralPlane = 0; + + @OriginalMember(owner = "client!km", name = "f", descriptor = "(I)Z") + public static boolean allLevelsAreVisible() { + return GlRenderer.enabled || Preferences.allLevelsVisible; + } + + @OriginalMember(owner = "client!ql", name = "a", descriptor = "(IIII)I") + public static int getTileHeight(@OriginalArg(0) int level, @OriginalArg(2) int xFine, @OriginalArg(3) int zFine) { + if (tileHeights == null) { + return 0; + } + @Pc(12) int x = xFine >> 7; + @Pc(16) int z = zFine >> 7; + if (x < 0 || z < 0 || x > 103 || z > 103) { + return 0; + } + @Pc(36) int xFine2 = xFine & 0x7F; + @Pc(40) int zFine2 = zFine & 0x7F; + @Pc(42) int virtualLevel = level; + if (level < 3 && (renderFlags[1][x][z] & 0x2) == 2) { + virtualLevel = level + 1; + } + @Pc(91) int heightZ0 = xFine2 * tileHeights[virtualLevel][x + 1][z + 1] + tileHeights[virtualLevel][x][z + 1] * (128 - xFine2) >> 7; + @Pc(118) int heightZ1 = xFine2 * tileHeights[virtualLevel][x + 1][z] + (128 - xFine2) * tileHeights[virtualLevel][x][z] >> 7; + return zFine2 * heightZ0 + (128 - zFine2) * heightZ1 >> 7; + } + + @OriginalMember(owner = "client!ih", name = "a", descriptor = "(III)Lclient!jh;") + public static Wall removeWall(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(7) Tile local7 = tiles[arg0][arg1][arg2]; + if (local7 == null) { + return null; + } else { + @Pc(14) Wall local14 = local7.wall; + local7.wall = null; + return local14; + } + } + + @OriginalMember(owner = "client!fc", name = "a", descriptor = "()V") + public static void clear() { + @Pc(3) int local3; + @Pc(9) int local9; + @Pc(14) int local14; + if (surfaceGroundTiles != null) { + for (local3 = 0; local3 < surfaceGroundTiles.length; local3++) { + for (local9 = 0; local9 < width; local9++) { + for (local14 = 0; local14 < length; local14++) { + surfaceGroundTiles[local3][local9][local14] = null; + } + } + } + } + surfaceHdTiles = null; + if (underWaterGroundTiles != null) { + for (local3 = 0; local3 < underWaterGroundTiles.length; local3++) { + for (local9 = 0; local9 < width; local9++) { + for (local14 = 0; local14 < length; local14++) { + underWaterGroundTiles[local3][local9][local14] = null; + } + } + } + } + underWaterHdTiles = null; + anInt917 = 0; + if (aClass120Array1 != null) { + for (local3 = 0; local3 < anInt917; local3++) { + aClass120Array1[local3] = null; + } + } + if (scenery != null) { + for (local3 = 0; local3 < sceneryLen; local3++) { + scenery[local3] = null; + } + sceneryLen = 0; + } + if (aClass31Array2 != null) { + for (local3 = 0; local3 < aClass31Array2.length; local3++) { + aClass31Array2[local3] = null; + } + } + } + + @OriginalMember(owner = "client!vf", name = "a", descriptor = "(III)Lclient!jh;") + public static Wall getWall(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z) { + @Pc(7) Tile tile = tiles[level][x][z]; + return tile == null ? null : tile.wall; + } + + @OriginalMember(owner = "client!gj", name = "a", descriptor = "(III)Lclient!df;") + public static WallDecor getWallDecor(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z) { + @Pc(7) Tile tile = tiles[level][x][z]; + return tile == null ? null : tile.wallDecor; + } + + @OriginalMember(owner = "client!kf", name = "b", descriptor = "(III)Lclient!ec;") + public static Scenery getScenery(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z) { + @Pc(7) Tile tile = tiles[level][x][z]; + if (tile == null) { + return null; + } + for (@Pc(13) int i = 0; i < tile.sceneryLen; i++) { + @Pc(22) Scenery scenery = tile.scenery[i]; + if ((scenery.key >> 29 & 0x3L) == 2L && scenery.xMin == x && scenery.zMin == z) { + return scenery; + } + } + return null; + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(III)Lclient!bm;") + public static GroundDecor getGroundDecor(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(7) Tile local7 = tiles[arg0][arg1][arg2]; + return local7 == null || local7.groundDecor == null ? null : local7.groundDecor; + } + + @OriginalMember(owner = "client!v", name = "a", descriptor = "(IIIJ)Z") + public static boolean isLocValid(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) long arg3) { + @Pc(7) Tile tile = tiles[arg0][arg1][arg2]; + if (tile == null) { + return false; + } else if (tile.wall != null && tile.wall.key == arg3) { + return true; + } else if (tile.wallDecor != null && tile.wallDecor.key == arg3) { + return true; + } else if (tile.groundDecor != null && tile.groundDecor.key == arg3) { + return true; + } else { + for (@Pc(46) int local46 = 0; local46 < tile.sceneryLen; local46++) { + if (tile.scenery[local46].key == arg3) { + return true; + } + } + return false; + } + } + + @OriginalMember(owner = "client!pl", name = "a", descriptor = "(ZI)V") + public static void load(@OriginalArg(0) boolean underwater) { + rowWeightedHue = new int[104]; + rowSaturation = new int[104]; + firstVisibleLevel = 99; + rowChroma = new int[104]; + @Pc(14) byte plane; + if (underwater) { + plane = 1; + } else { + plane = 4; + } + tileShapes = new byte[plane][104][104]; + rowCount = new int[104]; + occludeFlags = new int[plane][105][105]; + shadowmap = new byte[plane][105][105]; + tileOverlays = new byte[plane][104][104]; + rowLightness = new int[104]; + tileAngles = new byte[plane][104][104]; + tileUnderlays = new byte[plane][104][104]; + } + + @OriginalMember(owner = "client!ib", name = "b", descriptor = "(I)V") + public static void unload() { + rowChroma = null; + occludeFlags = null; + rowCount = null; + tileShapes = null; + tileAngles = null; + shadowmap = null; + tileOverlays = null; + tileUnderlays = null; + rowSaturation = null; + rowWeightedHue = null; + rowLightness = null; + } + + @OriginalMember(owner = "client!um", name = "c", descriptor = "(III)Z") + public static boolean method4394(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + for (@Pc(1) int local1 = 0; local1 < anInt4870; local1++) { + @Pc(8) SceneGraph_Class120 local8 = aClass120Array2[local1]; + @Pc(17) int local17; + @Pc(29) int local29; + @Pc(39) int local39; + @Pc(49) int local49; + @Pc(59) int local59; + if (local8.anInt4462 == 1) { + local17 = local8.anInt4460 - arg0; + if (local17 > 0) { + local29 = local8.anInt4458 + (local8.anInt4454 * local17 >> 8); + local39 = local8.anInt4449 + (local8.anInt4450 * local17 >> 8); + local49 = local8.anInt4444 + (local8.anInt4459 * local17 >> 8); + local59 = local8.anInt4447 + (local8.anInt4463 * local17 >> 8); + if (arg2 >= local29 && arg2 <= local39 && arg1 >= local49 && arg1 <= local59) { + return true; + } + } + } else if (local8.anInt4462 == 2) { + local17 = arg0 - local8.anInt4460; + if (local17 > 0) { + local29 = local8.anInt4458 + (local8.anInt4454 * local17 >> 8); + local39 = local8.anInt4449 + (local8.anInt4450 * local17 >> 8); + local49 = local8.anInt4444 + (local8.anInt4459 * local17 >> 8); + local59 = local8.anInt4447 + (local8.anInt4463 * local17 >> 8); + if (arg2 >= local29 && arg2 <= local39 && arg1 >= local49 && arg1 <= local59) { + return true; + } + } + } else if (local8.anInt4462 == 3) { + local17 = local8.anInt4458 - arg2; + if (local17 > 0) { + local29 = local8.anInt4460 + (local8.anInt4448 * local17 >> 8); + local39 = local8.anInt4445 + (local8.anInt4456 * local17 >> 8); + local49 = local8.anInt4444 + (local8.anInt4459 * local17 >> 8); + local59 = local8.anInt4447 + (local8.anInt4463 * local17 >> 8); + if (arg0 >= local29 && arg0 <= local39 && arg1 >= local49 && arg1 <= local59) { + return true; + } + } + } else if (local8.anInt4462 == 4) { + local17 = arg2 - local8.anInt4458; + if (local17 > 0) { + local29 = local8.anInt4460 + (local8.anInt4448 * local17 >> 8); + local39 = local8.anInt4445 + (local8.anInt4456 * local17 >> 8); + local49 = local8.anInt4444 + (local8.anInt4459 * local17 >> 8); + local59 = local8.anInt4447 + (local8.anInt4463 * local17 >> 8); + if (arg0 >= local29 && arg0 <= local39 && arg1 >= local49 && arg1 <= local59) { + return true; + } + } + } else if (local8.anInt4462 == 5) { + local17 = arg1 - local8.anInt4444; + if (local17 > 0) { + local29 = local8.anInt4460 + (local8.anInt4448 * local17 >> 8); + local39 = local8.anInt4445 + (local8.anInt4456 * local17 >> 8); + local49 = local8.anInt4458 + (local8.anInt4454 * local17 >> 8); + local59 = local8.anInt4449 + (local8.anInt4450 * local17 >> 8); + if (arg0 >= local29 && arg0 <= local39 && arg2 >= local49 && arg2 <= local59) { + return true; + } + } + } + } + return false; + } + + @OriginalMember(owner = "client!bj", name = "a", descriptor = "(III)J") + public static long getGroundDecorKey(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z) { + @Pc(7) Tile tile = tiles[level][x][z]; + return tile == null || tile.groundDecor == null ? 0L : tile.groundDecor.key; + } + + @OriginalMember(owner = "client!wj", name = "a", descriptor = "(Z)V") + public static void setUnderwater(@OriginalArg(0) boolean underwater) { + if (underwater) { + tiles = underWaterGroundTiles; + tileHeights = underwaterTileHeights; + underwaterHdTiles = underWaterHdTiles; + } else { + tiles = surfaceGroundTiles; + tileHeights = surfaceTileHeights; + underwaterHdTiles = surfaceHdTiles; + } + levels = tiles.length; + } + + @OriginalMember(owner = "client!wj", name = "a", descriptor = "(IIZLclient!wa;IIBII)V") + public static void readTile(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) boolean arg2, @OriginalArg(3) Buffer buffer, @OriginalArg(4) int z, @OriginalArg(5) int x, @OriginalArg(7) int angle, @OriginalArg(8) int level) { + @Pc(32) int opcode; + if (x < 0 || x >= 104 || z < 0 || z >= 104) { + while (true) { + opcode = buffer.g1(); + if (opcode == 0) { + break; + } + if (opcode == 1) { + buffer.g1(); + break; + } + if (opcode <= 49) { + buffer.g1(); + } + } + return; + } + if (!arg2) { + renderFlags[level][x][z] = 0; + } + while (true) { + opcode = buffer.g1(); + if (opcode == 0) { + if (arg2) { + tileHeights[0][x][z] = surfaceTileHeights[0][x][z]; + } else if (level == 0) { + tileHeights[0][x][z] = -PerlinNoise.getTileHeight(z + arg1 + 556238, arg0 + x + 932731) * 8; + } else { + tileHeights[level][x][z] = tileHeights[level - 1][x][z] - 240; + } + break; + } + if (opcode == 1) { + @Pc(111) int height = buffer.g1(); + if (arg2) { + tileHeights[0][x][z] = surfaceTileHeights[0][x][z] + height * 8; + } else { + if (height == 1) { + height = 0; + } + if (level == 0) { + tileHeights[0][x][z] = -height * 8; + } else { + tileHeights[level][x][z] = tileHeights[level - 1][x][z] - height * 8; + } + } + break; + } + if (opcode <= 49) { + tileOverlays[level][x][z] = buffer.g1b(); + tileShapes[level][x][z] = (byte) ((opcode - 2) / 4); + tileAngles[level][x][z] = (byte) (opcode + angle - 2 & 0x3); + } else if (opcode > 81) { + tileUnderlays[level][x][z] = (byte) (opcode - 81); + } else if (!arg2) { + renderFlags[level][x][z] = (byte) (opcode - 49); + } + } + } + + @OriginalMember(owner = "client!hd", name = "a", descriptor = "(IIIIIIII)V") + public static void method1881(@OriginalArg(0) int level, @OriginalArg(2) int arg1, @OriginalArg(3) int shape, @OriginalArg(4) int z, @OriginalArg(5) int layer, @OriginalArg(6) int x, @OriginalArg(7) int arg6) { + if (x < 0 || z < 0 || x >= 103 || z >= 103) { + return; + } + @Pc(38) int locId; + if (layer == 0) { + @Pc(28) Wall wall = getWall(level, x, z); + if (wall != null) { + locId = Integer.MAX_VALUE & (int) (wall.key >>> 32); + if (shape == 2) { + wall.primary = new Loc(locId, 2, arg1 + 4, level, x, z, arg6, false, wall.primary); + wall.secondary = new Loc(locId, 2, arg1 + 1 & 0x3, level, x, z, arg6, false, wall.secondary); + } else { + wall.primary = new Loc(locId, shape, arg1, level, x, z, arg6, false, wall.primary); + } + } + } + if (layer == 1) { + @Pc(106) WallDecor wallDecor = getWallDecor(level, x, z); + if (wallDecor != null) { + locId = (int) (wallDecor.key >>> 32) & Integer.MAX_VALUE; + if (shape == 4 || shape == 5) { + wallDecor.primary = new Loc(locId, 4, arg1, level, x, z, arg6, false, wallDecor.primary); + } else if (shape == 6) { + wallDecor.primary = new Loc(locId, 4, arg1 + 4, level, x, z, arg6, false, wallDecor.primary); + } else if (shape == 7) { + wallDecor.primary = new Loc(locId, 4, (arg1 + 2 & 0x3) + 4, level, x, z, arg6, false, wallDecor.primary); + } else if (shape == 8) { + wallDecor.primary = new Loc(locId, 4, arg1 + 4, level, x, z, arg6, false, wallDecor.primary); + wallDecor.secondary = new Loc(locId, 4, (arg1 + 2 & 0x3) + 4, level, x, z, arg6, false, wallDecor.secondary); + } + } + } + if (layer == 2) { + if (shape == 11) { + shape = 10; + } + @Pc(255) Scenery scenery = getScenery(level, x, z); + if (scenery != null) { + scenery.entity = new Loc((int) (scenery.key >>> 32) & Integer.MAX_VALUE, shape, arg1, level, x, z, arg6, false, scenery.entity); + } + } + if (layer == 3) { + @Pc(290) GroundDecor groundDecor = getGroundDecor(level, x, z); + if (groundDecor != null) { + groundDecor.entity = new Loc(Integer.MAX_VALUE & (int) (groundDecor.key >>> 32), 22, arg1, level, x, z, arg6, false, groundDecor.entity); + } + } + } + + @OriginalMember(owner = "client!nh", name = "a", descriptor = "(IIIILclient!th;JZ)V") + public static void setGroundDecor(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z, @OriginalArg(3) int arg3, @OriginalArg(4) Entity entity, @OriginalArg(5) long key, @OriginalArg(6) boolean arg6) { + if (entity == null) { + return; + } + @Pc(6) GroundDecor groundDecor = new GroundDecor(); + groundDecor.entity = entity; + groundDecor.xFine = x * 128 + 64; + groundDecor.zFine = z * 128 + 64; + groundDecor.anInt733 = arg3; + groundDecor.key = key; + groundDecor.aBoolean49 = arg6; + if (tiles[level][x][z] == null) { + tiles[level][x][z] = new Tile(level, x, z); + } + tiles[level][x][z].groundDecor = groundDecor; + } + + @OriginalMember(owner = "client!ia", name = "a", descriptor = "(IB)I") + public static int method2251(@OriginalArg(0) int arg0) { + @Pc(11) int local11 = arg0 & 0x3F; + @Pc(17) int local17 = arg0 >> 6 & 0x3; + if (local11 == 18) { + if (local17 == 0) { + return 1; + } + if (local17 == 1) { + return 2; + } + if (local17 == 2) { + return 4; + } + if (local17 == 3) { + return 8; + } + } else if (local11 == 19 || local11 == 21) { + if (local17 == 0) { + return 16; + } + if (local17 == 1) { + return 32; + } + if (local17 == 2) { + return 64; + } + if (local17 == 3) { + return 128; + } + } + return 0; + } + + @OriginalMember(owner = "client!vf", name = "a", descriptor = "(IIIILclient!th;Lclient!th;IIJ)V") + public static void setWall(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z, @OriginalArg(3) int arg3, @OriginalArg(4) Entity primary, @OriginalArg(5) Entity secondary, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) long key) { + if (primary == null && secondary == null) { + return; + } + @Pc(8) Wall wall = new Wall(); + wall.key = key; + wall.xFine = x * 128 + 64; + wall.zFine = z * 128 + 64; + wall.anInt3051 = arg3; + wall.primary = primary; + wall.secondary = secondary; + wall.anInt3049 = arg6; + wall.anInt3052 = arg7; + for (@Pc(42) int level0 = level; level0 >= 0; level0--) { + if (tiles[level0][x][z] == null) { + tiles[level0][x][z] = new Tile(level0, x, z); + } + } + tiles[level][x][z].wall = wall; + } + + @OriginalMember(owner = "client!cd", name = "a", descriptor = "(IIIIZ)V") + public static void init(@OriginalArg(3) int tileVisibility, @OriginalArg(4) boolean hasUnderWaterMap) { + width = 104; + length = 104; + visibility = tileVisibility; + surfaceGroundTiles = new Tile[4][width][length]; + surfaceTileHeights = new int[4][width + 1][length + 1]; + if (GlRenderer.enabled) { + surfaceHdTiles = new GlTile[4][]; + } + if (hasUnderWaterMap) { + underWaterGroundTiles = new Tile[1][width][length]; + anIntArrayArray11 = new int[width][length]; + underwaterTileHeights = new int[1][width + 1][length + 1]; + if (GlRenderer.enabled) { + underWaterHdTiles = new GlTile[1][]; + } + } else { + underWaterGroundTiles = null; + anIntArrayArray11 = null; + underwaterTileHeights = null; + underWaterHdTiles = null; + } + setUnderwater(false); + aClass120Array1 = new SceneGraph_Class120[500]; + anInt917 = 0; + aClass120Array2 = new SceneGraph_Class120[500]; + anInt4870 = 0; + anIntArrayArrayArray12 = new int[4][width + 1][length + 1]; + scenery = new Scenery[5000]; + sceneryLen = 0; + aClass31Array2 = new Scenery[100]; + aBooleanArrayArray1 = new boolean[visibility + visibility + 1][visibility + visibility + 1]; + aBooleanArrayArray3 = new boolean[visibility + visibility + 2][visibility + visibility + 2]; + aByteArrayArrayArray13 = new byte[4][width][length]; + } + + @OriginalMember(owner = "client!vj", name = "a", descriptor = "(III)J") + public static long getWallKey(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z) { + @Pc(7) Tile tile = tiles[level][x][z]; + return tile == null || tile.wall == null ? 0L : tile.wall.key; + } + + @OriginalMember(owner = "client!l", name = "a", descriptor = "(III)J") + public static long getWallDecorKey(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z) { + @Pc(7) Tile tile = tiles[level][x][z]; + return tile == null || tile.wallDecor == null ? 0L : tile.wallDecor.key; + } + + @OriginalMember(owner = "client!cl", name = "a", descriptor = "(III)J") + public static long getSceneryKey(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z) { + @Pc(7) Tile tile = tiles[level][x][z]; + if (tile == null) { + return 0L; + } + for (@Pc(13) int i = 0; i < tile.sceneryLen; i++) { + @Pc(22) Scenery scenery = tile.scenery[i]; + if ((scenery.key >> 29 & 0x3L) == 2L && scenery.xMin == x && scenery.zMin == z) { + return scenery.key; + } + } + return 0L; + } + + @OriginalMember(owner = "client!g", name = "a", descriptor = "(III)Lclient!df;") + public static WallDecor removeWallDecor(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z) { + @Pc(7) Tile tile = tiles[level][x][z]; + if (tile == null) { + return null; + } else { + @Pc(14) WallDecor wallDecor = tile.wallDecor; + tile.wallDecor = null; + return wallDecor; + } + } + + @OriginalMember(owner = "client!dk", name = "a", descriptor = "(III)Lclient!ec;") + public static Scenery removeScenery(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z) { + @Pc(7) Tile tile = tiles[level][x][z]; + if (tile == null) { + return null; + } + for (@Pc(13) int i = 0; i < tile.sceneryLen; i++) { + @Pc(22) Scenery scenery = tile.scenery[i]; + if ((scenery.key >> 29 & 0x3L) == 2L && scenery.xMin == x && scenery.zMin == z) { + removeScenery(scenery); + return scenery; + } + } + return null; + } + + @OriginalMember(owner = "client!vl", name = "a", descriptor = "(III)Lclient!bm;") + public static GroundDecor removeGroundDecor(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z) { + @Pc(7) Tile tile = tiles[level][x][z]; + if (tile == null) { + return null; + } else { + @Pc(14) GroundDecor groundDecor = tile.groundDecor; + tile.groundDecor = null; + return groundDecor; + } + } + + @OriginalMember(owner = "client!vk", name = "a", descriptor = "(Lclient!ec;)V") + public static void removeScenery(@OriginalArg(0) Scenery scenery) { + for (@Pc(2) int x = scenery.xMin; x <= scenery.xMax; x++) { + for (@Pc(9) int z = scenery.zMin; z <= scenery.zMax; z++) { + @Pc(22) Tile tile = tiles[scenery.level][x][z]; + if (tile != null) { + @Pc(26) int i; + for (i = 0; i < tile.sceneryLen; i++) { + if (tile.scenery[i] == scenery) { + tile.sceneryLen--; + for (@Pc(44) int j = i; j < tile.sceneryLen; j++) { + tile.scenery[j] = tile.scenery[j + 1]; + tile.interiorFlags[j] = tile.interiorFlags[j + 1]; + } + tile.scenery[tile.sceneryLen] = null; + break; + } + } + tile.allInteriorFlags = 0; + for (i = 0; i < tile.sceneryLen; i++) { + tile.allInteriorFlags |= tile.interiorFlags[i]; + } + } + } + } + } + + @OriginalMember(owner = "client!di", name = "a", descriptor = "([Lclient!mj;ZI)V") + public static void method1169(@OriginalArg(0) CollisionMap[] collisionMaps, @OriginalArg(1) boolean underwater) { + @Pc(10) int level; + @Pc(15) int x; + if (!underwater) { + for (level = 0; level < 4; level++) { + for (x = 0; x < 104; x++) { + for (@Pc(22) int z = 0; z < 104; z++) { + if ((renderFlags[level][x][z] & 0x1) == 1) { + @Pc(43) int transformedLevel = level; + if ((renderFlags[1][x][z] & 0x2) == 2) { + transformedLevel = level - 1; + } + if (transformedLevel >= 0) { + collisionMaps[transformedLevel].flagTile(z, x); + } + } + } + } + } + anInt4272 += (int) (Math.random() * 5.0D) - 2; + if (anInt4272 < -16) { + anInt4272 = -16; + } + if (anInt4272 > 16) { + anInt4272 = 16; + } + anInt2293 += (int) (Math.random() * 5.0D) - 2; + if (anInt2293 < -8) { + anInt2293 = -8; + } + if (anInt2293 > 8) { + anInt2293 = 8; + } + } + @Pc(128) byte levels; + if (underwater) { + levels = 1; + } else { + levels = 4; + } + level = anInt2293 >> 2 << 10; + @Pc(142) int[][] local142 = new int[104][104]; + @Pc(146) int[][] local146 = new int[104][104]; + x = anInt4272 >> 1; + @Pc(152) int local152; + @Pc(168) int local168; + @Pc(173) int local173; + @Pc(178) int local178; + @Pc(194) int overlay; + @Pc(200) int local200; + @Pc(202) int local202; + @Pc(209) int local209; + @Pc(349) int local349; + @Pc(234) int local234; + @Pc(254) int local254; + @Pc(267) int local267; + for (local152 = 0; local152 < levels; local152++) { + @Pc(159) byte[][] local159 = shadowmap[local152]; + @Pc(273) int local273; + @Pc(326) int local326; + @Pc(332) int local332; + @Pc(322) int local322; + if (!GlRenderer.enabled) { + local168 = (int) Math.sqrt(5100.0D); + local173 = local168 * 768 >> 8; + for (local178 = 1; local178 < 103; local178++) { + for (overlay = 1; overlay < 103; overlay++) { + local209 = tileHeights[local152][overlay][local178 + 1] - tileHeights[local152][overlay][local178 - 1]; + local202 = tileHeights[local152][overlay + 1][local178] - tileHeights[local152][overlay - 1][local178]; + local349 = (int) Math.sqrt(local202 * local202 + local209 * local209 + 65536); + local267 = (local209 << 8) / local349; + local254 = -65536 / local349; + local234 = (local202 << 8) / local349; + local273 = (local159[overlay][local178] >> 1) + (local159[overlay][local178 - 1] >> 2) + (local159[overlay - -1][local178] >> 3) + (local159[overlay - 1][local178] >> 2) + (local159[overlay][local178 + 1] >> 3); + local200 = (local267 * -50 + local234 * -50 + local254 * -10) / local173 + 74; + local146[overlay][local178] = local200 - local273; + } + } + } else if (Preferences.highDetailLighting) { + for (local168 = 1; local168 < 103; local168++) { + for (local173 = 1; local173 < 103; local173++) { + overlay = (local159[local173 + 1][local168] >> 3) + (local159[local173 - 1][local168] >> 2) + (local159[local173][local168 + -1] >> 2) + (local159[local173][local168 + 1] >> 3) + (local159[local173][local168] >> 1); + local146[local173][local168] = 74 - overlay; + } + } + } else { + local168 = (int) FogManager.light0Position[0]; + local173 = (int) FogManager.light0Position[1]; + local178 = (int) FogManager.light0Position[2]; + overlay = (int) Math.sqrt(local173 * local173 + local168 * local168 + local178 * local178); + local200 = overlay * 1024 >> 8; + for (local202 = 1; local202 < 103; local202++) { + for (local209 = 1; local209 < 103; local209++) { + local234 = tileHeights[local152][local209 + 1][local202] - tileHeights[local152][local209 - 1][local202]; + local254 = tileHeights[local152][local209][local202 + 1] - tileHeights[local152][local209][local202 - 1]; + local267 = (int) Math.sqrt(local234 * local234 + local254 * local254 + 65536); + local273 = (local234 << 8) / local267; + local322 = (local159[local209][local202 + 1] >> 3) + (local159[local209][local202 - 1] >> 2) + (local159[local209 - 1][local202] >> 2) + (local159[local209 + 1][local202] >> 3) + (local159[local209][local202] >> 1); + local326 = -65536 / local267; + local332 = (local254 << 8) / local267; + local349 = (local178 * local332 + local168 * local273 + local326 * local173) / local200 + 96; + local146[local209][local202] = local349 - (int) ((float) local322 * 1.7F); + } + } + } + for (local168 = 0; local168 < 104; local168++) { + rowWeightedHue[local168] = 0; + rowSaturation[local168] = 0; + rowLightness[local168] = 0; + rowChroma[local168] = 0; + rowCount[local168] = 0; + } + for (local168 = -5; local168 < 104; local168++) { + for (local173 = 0; local173 < 104; local173++) { + local178 = local168 + 5; + @Pc(729) int local729; + if (local178 < 104) { + overlay = tileUnderlays[local152][local178][local173] & 0xFF; + if (overlay > 0) { + @Pc(693) FluType type = FluTypeList.get(overlay - 1); + rowWeightedHue[local173] += type.weightedHue; + rowSaturation[local173] += type.saturation; + rowLightness[local173] += type.lightness; + rowChroma[local173] += type.chroma; + local729 = rowCount[local173]++; + } + } + overlay = local168 - 5; + if (overlay >= 0) { + local200 = tileUnderlays[local152][overlay][local173] & 0xFF; + if (local200 > 0) { + @Pc(758) FluType local758 = FluTypeList.get(local200 - 1); + rowWeightedHue[local173] -= local758.weightedHue; + rowSaturation[local173] -= local758.saturation; + rowLightness[local173] -= local758.lightness; + rowChroma[local173] -= local758.chroma; + local729 = rowCount[local173]--; + } + } + } + if (local168 >= 0) { + local173 = 0; + overlay = 0; + local178 = 0; + local200 = 0; + local202 = 0; + for (local209 = -5; local209 < 104; local209++) { + local349 = local209 + 5; + if (local349 < 104) { + local178 += rowSaturation[local349]; + local202 += rowCount[local349]; + local173 += rowWeightedHue[local349]; + local200 += rowChroma[local349]; + overlay += rowLightness[local349]; + } + local234 = local209 - 5; + if (local234 >= 0) { + local178 -= rowSaturation[local234]; + local200 -= rowChroma[local234]; + local173 -= rowWeightedHue[local234]; + local202 -= rowCount[local234]; + overlay -= rowLightness[local234]; + } + if (local209 >= 0 && local202 > 0) { + local142[local168][local209] = ColorUtils.method1309(overlay / local202, local178 / local202, local173 * 256 / local200); + } + } + } + } + for (local168 = 1; local168 < 103; local168++) { + label771: + for (local173 = 1; local173 < 103; local173++) { + if (underwater || allLevelsAreVisible() || (renderFlags[0][local168][local173] & 0x2) != 0 || (renderFlags[local152][local168][local173] & 0x10) == 0 && getRenderLevel(local173, local168, local152) == centralPlane) { + if (firstVisibleLevel > local152) { + firstVisibleLevel = local152; + } + local178 = tileUnderlays[local152][local168][local173] & 0xFF; + overlay = tileOverlays[local152][local168][local173] & 0xFF; + if (local178 > 0 || overlay > 0) { + local202 = tileHeights[local152][local168 + 1][local173]; + local200 = tileHeights[local152][local168][local173]; + local349 = tileHeights[local152][local168][local173 + 1]; + local209 = tileHeights[local152][local168 + 1][local173 + 1]; + if (local152 > 0) { + @Pc(1067) boolean local1067 = local178 != 0 || tileShapes[local152][local168][local173] == 0; + if (overlay > 0 && !FloTypeList.method4395(overlay - 1).occludeUnderlay) { + local1067 = false; + } + if (local1067 && local200 == local202 && local200 == local209 && local349 == local200) { + occludeFlags[local152][local168][local173] |= 0x4; + } + } + if (local178 <= 0) { + local234 = -1; + local254 = 0; + } else { + local234 = local142[local168][local173]; + local267 = (local234 & 0x7F) + x; + if (local267 < 0) { + local267 = 0; + } else if (local267 > 127) { + local267 = 127; + } + local273 = (local234 & 0x380) + (local234 + level & 0xFC00) + local267; + local254 = Rasteriser.palette[ColorUtils.multiplyLightnessSafe(96, local273)]; + } + local267 = local146[local168][local173]; + local332 = local146[local168][local173 + 1]; + local273 = local146[local168 + 1][local173]; + local326 = local146[local168 + 1][local173 + 1]; + if (overlay == 0) { + setTile(local152, local168, local173, 0, 0, -1, local200, local202, local209, local349, ColorUtils.multiplyLightnessSafe(local267, local234), ColorUtils.multiplyLightnessSafe(local273, local234), ColorUtils.multiplyLightnessSafe(local326, local234), ColorUtils.multiplyLightnessSafe(local332, local234), 0, 0, 0, 0, local254, 0); + if (GlRenderer.enabled && local152 > 0 && local234 != -1 && FluTypeList.get(local178 - 1).blockShadow) { + ShadowManager.method4197(0, 0, true, false, local168, local173, local200 - tileHeights[0][local168][local173], -tileHeights[0][local168 + 1][local173] + local202, local209 - tileHeights[0][local168 + 1][local173 + 1], local349 - tileHeights[0][local168][local173 + 1]); + } + if (GlRenderer.enabled && !underwater && anIntArrayArray11 != null && local152 == 0) { + for (local322 = local168 - 1; local322 <= local168 + 1; local322++) { + for (@Pc(1794) int local1794 = local173 - 1; local1794 <= local173 + 1; local1794++) { + if ((local322 != local168 || local173 != local1794) && local322 >= 0 && local322 < 104 && local1794 >= 0 && local1794 < 104) { + @Pc(1834) int local1834 = tileOverlays[local152][local322][local1794] & 0xFF; + if (local1834 != 0) { + @Pc(1842) FloType local1842 = FloTypeList.method4395(local1834 - 1); + if (local1842.texture != -1 && Rasteriser.textureProvider.getMaterialType(local1842.texture) == MaterialManager.WATER) { + anIntArrayArray11[local168][local173] = local1842.waterColor + (local1842.waterOpacity << 24); + continue label771; + } + } + } + } + } + } + } else { + local322 = tileShapes[local152][local168][local173] + 1; + @Pc(1242) byte local1242 = tileAngles[local152][local168][local173]; + @Pc(1248) FloType local1248 = FloTypeList.method4395(overlay - 1); + @Pc(1301) int local1301; + @Pc(1353) int local1353; + @Pc(1288) int texture; + if (GlRenderer.enabled && !underwater && anIntArrayArray11 != null && local152 == 0) { + if (local1248.texture != -1 && Rasteriser.textureProvider.getMaterialType(local1248.texture) == MaterialManager.WATER) { + anIntArrayArray11[local168][local173] = (local1248.waterOpacity << 24) + local1248.waterColor; + } else { + label737: + for (texture = local168 - 1; texture <= local168 + 1; texture++) { + for (local1301 = local173 - 1; local1301 <= local173 + 1; local1301++) { + if ((local168 != texture || local1301 != local173) && texture >= 0 && texture < 104 && local1301 >= 0 && local1301 < 104) { + local1353 = tileOverlays[local152][texture][local1301] & 0xFF; + if (local1353 != 0) { + @Pc(1366) FloType local1366 = FloTypeList.method4395(local1353 - 1); + if (local1366.texture != -1 && Rasteriser.textureProvider.getMaterialType(local1366.texture) == MaterialManager.WATER) { + anIntArrayArray11[local168][local173] = local1366.waterColor + (local1366.waterOpacity << 24); + break label737; + } + } + } + } + } + } + } + texture = local1248.texture; + if (texture >= 0 && !Rasteriser.textureProvider.method3236(texture)) { + texture = -1; + } + @Pc(1458) int local1458; + @Pc(1429) int local1429; + if (texture >= 0) { + local1301 = -1; + local1353 = Rasteriser.palette[ColorUtils.multiplyLightnessGrayscale(Rasteriser.textureProvider.getAverageColor(texture), 96)]; + } else if (local1248.baseColor == -1) { + local1301 = -2; + local1353 = 0; + } else { + local1301 = local1248.baseColor; + local1429 = x + (local1301 & 0x7F); + if (local1429 < 0) { + local1429 = 0; + } else if (local1429 > 127) { + local1429 = 127; + } + local1458 = (local1301 & 0x380) + ((local1301 + level & 0xFC00) + local1429); + local1353 = Rasteriser.palette[ColorUtils.multiplyLightnessGrayscale(local1458, 96)]; + } + if (local1248.secondaryColor >= 0) { + local1429 = local1248.secondaryColor; + local1458 = x + (local1429 & 0x7F); + if (local1458 < 0) { + local1458 = 0; + } else if (local1458 > 127) { + local1458 = 127; + } + @Pc(1529) int local1529 = (local1429 & 0x380) + ((local1429 + level & 0xFC00) + local1458); + local1353 = Rasteriser.palette[ColorUtils.multiplyLightnessGrayscale(local1529, 96)]; + } + setTile(local152, local168, local173, local322, local1242, texture, local200, local202, local209, local349, ColorUtils.multiplyLightnessSafe(local267, local234), ColorUtils.multiplyLightnessSafe(local273, local234), ColorUtils.multiplyLightnessSafe(local326, local234), ColorUtils.multiplyLightnessSafe(local332, local234), ColorUtils.multiplyLightnessGrayscale(local1301, local267), ColorUtils.multiplyLightnessGrayscale(local1301, local273), ColorUtils.multiplyLightnessGrayscale(local1301, local326), ColorUtils.multiplyLightnessGrayscale(local1301, local332), local254, local1353); + if (GlRenderer.enabled && local152 > 0) { + ShadowManager.method4197(local322, local1242, local1301 == -2 || !local1248.aBoolean311, local234 == -1 || !FluTypeList.get(local178 - 1).blockShadow, local168, local173, local200 - tileHeights[0][local168][local173], local202 - tileHeights[0][local168 + 1][local173], local209 - tileHeights[0][local168 + 1][local173 + 1], -tileHeights[0][local168][local173 + 1] + local349); + } + } + } + } + } + } + if (GlRenderer.enabled) { + @Pc(1888) float[][] local1888 = new float[105][105]; + @Pc(1892) int[][] local1892 = tileHeights[local152]; + @Pc(1896) float[][] local1896 = new float[105][105]; + @Pc(1900) float[][] local1900 = new float[105][105]; + local200 = 1; + while (true) { + if (local200 > 103) { + @Pc(2025) GlTile[] local2025; + if (underwater) { + local2025 = method3501(renderFlags, tileShapes[local152], tileUnderlays[local152], local146, local1896, anIntArrayArray11, tileOverlays[local152], tileAngles[local152], local1888, local152, local1900, local142, tileHeights[local152], surfaceTileHeights[0]); + method2280(local152, local2025); + break; + } + local2025 = method3501(renderFlags, tileShapes[local152], tileUnderlays[local152], local146, local1896, null, tileOverlays[local152], tileAngles[local152], local1888, local152, local1900, local142, tileHeights[local152], null); + @Pc(2049) GlTile[] local2049 = method2(local1896, local1888, tileHeights[local152], local152, local1900, tileAngles[local152], local146, tileShapes[local152], tileUnderlays[local152], tileOverlays[local152], renderFlags); + @Pc(2057) GlTile[] local2057 = new GlTile[local2025.length + local2049.length]; + for (local349 = 0; local349 < local2025.length; local349++) { + local2057[local349] = local2025[local349]; + } + for (local349 = 0; local349 < local2049.length; local349++) { + local2057[local2025.length + local349] = local2049[local349]; + } + method2280(local152, local2057); + method3393(local1900, tileUnderlays[local152], tileAngles[local152], LightingManager.lights, local152, LightingManager.lightCount, local1896, tileShapes[local152], tileOverlays[local152], tileHeights[local152], local1888); + break; + } + for (local202 = 1; local202 <= 103; local202++) { + local349 = local1892[local202][local200 + 1] - local1892[local202][local200 - 1]; + local209 = local1892[local202 + 1][local200] - local1892[local202 - 1][local200]; + @Pc(1962) float local1962 = (float) Math.sqrt(local209 * local209 + local349 * local349 + 65536); + local1888[local202][local200] = (float) local209 / local1962; + local1896[local202][local200] = -256.0F / local1962; + local1900[local202][local200] = (float) local349 / local1962; + } + local200++; + } + } + tileUnderlays[local152] = null; + tileOverlays[local152] = null; + tileShapes[local152] = null; + tileAngles[local152] = null; + shadowmap[local152] = null; + } + method3801(); + if (underwater) { + return; + } + @Pc(2204) int local2204; + for (local152 = 0; local152 < 104; local152++) { + for (local2204 = 0; local2204 < 104; local2204++) { + if ((renderFlags[1][local152][local2204] & 0x2) == 2) { + method3884(local152, local2204); + } + } + } + for (local152 = 0; local152 < 4; local152++) { + for (local2204 = 0; local2204 <= 104; local2204++) { + for (local168 = 0; local168 <= 104; local168++) { + if ((occludeFlags[local152][local168][local2204] & 0x1) != 0) { + local200 = local152; + for (local173 = local2204; local173 > 0 && (occludeFlags[local152][local168][local173 - 1] & 0x1) != 0; local173--) { + } + overlay = local152; + for (local178 = local2204; local178 < 104 && (occludeFlags[local152][local168][local178 + 1] & 0x1) != 0; local178++) { + } + label454: + while (overlay > 0) { + for (local202 = local173; local202 <= local178; local202++) { + if ((occludeFlags[overlay - 1][local168][local202] & 0x1) == 0) { + break label454; + } + } + overlay--; + } + label443: + while (local200 < 3) { + for (local202 = local173; local202 <= local178; local202++) { + if ((occludeFlags[local200 + 1][local168][local202] & 0x1) == 0) { + break label443; + } + } + local200++; + } + local202 = (local200 + 1 - overlay) * (-local173 + (local178 - -1)); + if (local202 >= 8) { + local349 = tileHeights[local200][local168][local173] - 240; + local234 = tileHeights[overlay][local168][local173]; + SceneGraph_Class120.method4647(1, local168 * 128, local168 * 128, local173 * 128, local178 * 128 + 128, local349, local234); + for (local254 = overlay; local254 <= local200; local254++) { + for (local267 = local173; local267 <= local178; local267++) { + occludeFlags[local254][local168][local267] &= 0xFFFFFFFE; + } + } + } + } + if ((occludeFlags[local152][local168][local2204] & 0x2) != 0) { + for (local173 = local168; local173 > 0 && (occludeFlags[local152][local173 - 1][local2204] & 0x2) != 0; local173--) { + } + local200 = local152; + overlay = local152; + for (local178 = local168; local178 < 104 && (occludeFlags[local152][local178 + 1][local2204] & 0x2) != 0; local178++) { + } + label508: + while (overlay > 0) { + for (local202 = local173; local202 <= local178; local202++) { + if ((occludeFlags[overlay - 1][local202][local2204] & 0x2) == 0) { + break label508; + } + } + overlay--; + } + label497: + while (local200 < 3) { + for (local202 = local173; local202 <= local178; local202++) { + if ((occludeFlags[local200 + 1][local202][local2204] & 0x2) == 0) { + break label497; + } + } + local200++; + } + local202 = (local178 + 1 - local173) * (-overlay + local200 - -1); + if (local202 >= 8) { + local349 = tileHeights[local200][local173][local2204] - 240; + local234 = tileHeights[overlay][local173][local2204]; + SceneGraph_Class120.method4647(2, local173 * 128, local178 * 128 + 128, local2204 * 128, local2204 * 128, local349, local234); + for (local254 = overlay; local254 <= local200; local254++) { + for (local267 = local173; local267 <= local178; local267++) { + occludeFlags[local254][local267][local2204] &= 0xFFFFFFFD; + } + } + } + } + if ((occludeFlags[local152][local168][local2204] & 0x4) != 0) { + local173 = local168; + local178 = local168; + for (overlay = local2204; overlay > 0 && (occludeFlags[local152][local168][overlay - 1] & 0x4) != 0; overlay--) { + } + for (local200 = local2204; local200 < 104 && (occludeFlags[local152][local168][local200 + 1] & 0x4) != 0; local200++) { + } + label562: + while (local173 > 0) { + for (local202 = overlay; local202 <= local200; local202++) { + if ((occludeFlags[local152][local173 - 1][local202] & 0x4) == 0) { + break label562; + } + } + local173--; + } + label551: + while (local178 < 104) { + for (local202 = overlay; local202 <= local200; local202++) { + if ((occludeFlags[local152][local178 + 1][local202] & 0x4) == 0) { + break label551; + } + } + local178++; + } + if ((local178 + 1 - local173) * (local200 - (overlay - 1)) >= 4) { + local202 = tileHeights[local152][local173][overlay]; + SceneGraph_Class120.method4647(4, local173 * 128, local178 * 128 + 128, overlay * 128, local200 * 128 + 128, local202, local202); + for (local209 = local173; local209 <= local178; local209++) { + for (local349 = overlay; local349 <= local200; local349++) { + occludeFlags[local152][local209][local349] &= 0xFFFFFFFB; + } + } + } + } + } + } + } + } + + @OriginalMember(owner = "client!ih", name = "a", descriptor = "(I[Lclient!hg;)V") + public static void method2280(@OriginalArg(0) int arg0, @OriginalArg(1) GlTile[] arg1) { + underwaterHdTiles[arg0] = arg1; + } + + @OriginalMember(owner = "client!ob", name = "a", descriptor = "(IIIIIIIIIIIIIIIIIIII)V") + public static void setTile(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9, @OriginalArg(10) int arg10, @OriginalArg(11) int arg11, @OriginalArg(12) int arg12, @OriginalArg(13) int arg13, @OriginalArg(14) int arg14, @OriginalArg(15) int arg15, @OriginalArg(16) int arg16, @OriginalArg(17) int arg17, @OriginalArg(18) int arg18, @OriginalArg(19) int arg19) { + @Pc(12) PlainTile tile; + @Pc(14) int level0; + if (arg3 == 0) { + tile = new PlainTile(arg10, arg11, arg12, arg13, -1, arg18, false); + for (level0 = level; level0 >= 0; level0--) { + if (tiles[level0][x][z] == null) { + tiles[level0][x][z] = new Tile(level0, x, z); + } + } + tiles[level][x][z].plainTile = tile; + } else if (arg3 == 1) { + tile = new PlainTile(arg14, arg15, arg16, arg17, arg5, arg19, arg6 == arg7 && arg6 == arg8 && arg6 == arg9); + for (level0 = level; level0 >= 0; level0--) { + if (tiles[level0][x][z] == null) { + tiles[level0][x][z] = new Tile(level0, x, z); + } + } + tiles[level][x][z].plainTile = tile; + } else { + @Pc(134) ShapedTile local134 = new ShapedTile(arg3, arg4, arg5, x, z, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); + for (level0 = level; level0 >= 0; level0--) { + if (tiles[level0][x][z] == null) { + tiles[level0][x][z] = new Tile(level0, x, z); + } + } + tiles[level][x][z].shapedTile = local134; + } + } + + @OriginalMember(owner = "client!rm", name = "a", descriptor = "(III)V") + public static void method3801() { + for (@Pc(1) int level = 0; level < levels; level++) { + for (@Pc(6) int x = 0; x < width; x++) { + for (@Pc(11) int z = 0; z < length; z++) { + @Pc(22) Tile local22 = tiles[level][x][z]; + if (local22 != null) { + @Pc(27) Wall local27 = local22.wall; + if (local27 != null && local27.primary.method4543()) { + method1544(local27.primary, level, x, z, 1, 1); + if (local27.secondary != null && local27.secondary.method4543()) { + method1544(local27.secondary, level, x, z, 1, 1); + local27.primary.method4544(local27.secondary, 0, 0, 0, false); + local27.secondary = local27.secondary.createModel(); + } + local27.primary = local27.primary.createModel(); + } + for (@Pc(83) int local83 = 0; local83 < local22.sceneryLen; local83++) { + @Pc(92) Scenery local92 = local22.scenery[local83]; + if (local92 != null && local92.entity.method4543()) { + method1544(local92.entity, level, x, z, local92.xMax + 1 - local92.xMin, local92.zMax - local92.zMin + 1); + local92.entity = local92.entity.createModel(); + } + } + @Pc(131) GroundDecor local131 = local22.groundDecor; + if (local131 != null && local131.entity.method4543()) { + method3574(local131.entity, level, x, z); + local131.entity = local131.entity.createModel(); + } + } + } + } + } + } + + @OriginalMember(owner = "client!ib", name = "a", descriptor = "(IIIIIIIILclient!th;IZJ)Z") + public static boolean method2256(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) Entity arg8, @OriginalArg(9) int arg9, @OriginalArg(10) boolean arg10, @OriginalArg(11) long arg11) { + @Pc(6) boolean local6 = tileHeights == underwaterTileHeights; + @Pc(8) int local8 = 0; + @Pc(17) int local17; + for (@Pc(10) int local10 = arg1; local10 < arg1 + arg3; local10++) { + for (local17 = arg2; local17 < arg2 + arg4; local17++) { + if (local10 < 0 || local17 < 0 || local10 >= width || local17 >= length) { + return false; + } + @Pc(42) Tile local42 = tiles[arg0][local10][local17]; + if (local42 != null && local42.sceneryLen >= 5) { + return false; + } + } + } + @Pc(58) Scenery local58 = new Scenery(); + local58.key = arg11; + local58.level = arg0; + local58.anInt1699 = arg5; + local58.anInt1703 = arg6; + local58.anInt1706 = arg7; + local58.entity = arg8; + local58.anInt1714 = arg9; + local58.xMin = arg1; + local58.zMin = arg2; + local58.xMax = arg1 + arg3 - 1; + local58.zMax = arg2 + arg4 - 1; + @Pc(108) int local108; + for (local17 = arg1; local17 < arg1 + arg3; local17++) { + for (local108 = arg2; local108 < arg2 + arg4; local108++) { + @Pc(115) int local115 = 0; + if (local17 > arg1) { + local115++; + } + if (local17 < arg1 + arg3 - 1) { + local115 += 4; + } + if (local108 > arg2) { + local115 += 8; + } + if (local108 < arg2 + arg4 - 1) { + local115 += 2; + } + for (@Pc(141) int local141 = arg0; local141 >= 0; local141--) { + if (tiles[local141][local17][local108] == null) { + tiles[local141][local17][local108] = new Tile(local141, local17, local108); + } + } + @Pc(174) Tile local174 = tiles[arg0][local17][local108]; + local174.scenery[local174.sceneryLen] = local58; + local174.interiorFlags[local174.sceneryLen] = local115; + local174.allInteriorFlags |= local115; + local174.sceneryLen++; + if (local6 && anIntArrayArray11[local17][local108] != 0) { + local8 = anIntArrayArray11[local17][local108]; + } + } + } + if (local6 && local8 != 0) { + for (local17 = arg1; local17 < arg1 + arg3; local17++) { + for (local108 = arg2; local108 < arg2 + arg4; local108++) { + if (anIntArrayArray11[local17][local108] == 0) { + anIntArrayArray11[local17][local108] = local8; + } + } + } + } + if (arg10) { + scenery[sceneryLen++] = local58; + } + return true; + } + + @OriginalMember(owner = "client!dg", name = "a", descriptor = "(IIIIILclient!th;IJZ)Z") + public static boolean add(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) Entity arg5, @OriginalArg(6) int arg6, @OriginalArg(7) long arg7, @OriginalArg(8) boolean arg8) { + if (arg5 == null) { + return true; + } + @Pc(7) int local7 = arg1 - arg4; + @Pc(11) int local11 = arg2 - arg4; + @Pc(15) int local15 = arg1 + arg4; + @Pc(19) int local19 = arg2 + arg4; + if (arg8) { + if (arg6 > 640 && arg6 < 1408) { + local19 += 128; + } + if (arg6 > 1152 && arg6 < 1920) { + local15 += 128; + } + if (arg6 > 1664 || arg6 < 384) { + local11 -= 128; + } + if (arg6 > 128 && arg6 < 896) { + local7 -= 128; + } + } + local7 /= 128; + local11 /= 128; + local15 /= 128; + local19 /= 128; + return method2256(arg0, local7, local11, local15 + 1 - local7, local19 - local11 + 1, arg1, arg2, arg3, arg5, arg6, true, arg7); + } + + @OriginalMember(owner = "client!dg", name = "a", descriptor = "(IIIIIILclient!mj;)V") + public static void method1144(@OriginalArg(1) int z, @OriginalArg(2) int x, @OriginalArg(3) int level, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) CollisionMap collision) { + @Pc(9) long key = 0L; + if (arg3 == 0) { + key = getWallKey(level, x, z); + } else if (arg3 == 1) { + key = getWallDecorKey(level, x, z); + } else if (arg3 == 2) { + key = getSceneryKey(level, x, z); + } else if (arg3 == 3) { + key = getGroundDecorKey(level, x, z); + } + @Pc(57) int shape = (int) key >> 14 & 0x1F; + @Pc(70) int id = (int) (key >>> 32) & Integer.MAX_VALUE; + @Pc(74) LocType type = LocTypeList.get(id); + if (type.hasAreaSound()) { + AreaSoundManager.remove(x, type, z, level); + } + @Pc(92) int angle = (int) key >> 20 & 0x3; + if (key == 0L) { + return; + } + @Pc(100) Entity local100 = null; + @Pc(102) Entity local102 = null; + if (arg3 == 0) { + @Pc(110) Wall wall = removeWall(level, x, z); + if (wall != null) { + local100 = wall.primary; + local102 = wall.secondary; + } + if (type.blockwalk != 0) { + collision.unflagWall(angle, type.blockrange, z, shape, x); + } + } else if (arg3 == 1) { + @Pc(233) WallDecor wallDecor = removeWallDecor(level, x, z); + if (wallDecor != null) { + local100 = wallDecor.primary; + local102 = wallDecor.secondary; + } + } else if (arg3 == 2) { + @Pc(148) Scenery scenery = removeScenery(level, x, z); + if (scenery != null) { + local100 = scenery.entity; + } + if (type.blockwalk != 0 && type.width + x < 104 && type.width + z < 104 && x + type.length < 104 && z + type.length < 104) { + collision.unflagScenery(x, type.width, type.blockrange, angle, type.length, z); + } + } else if (arg3 == 3) { + @Pc(211) GroundDecor groundDecor = removeGroundDecor(level, x, z); + if (groundDecor != null) { + local100 = groundDecor.entity; + } + if (type.blockwalk == 1) { + collision.unflagGroundDecor(z, x); + } + } + if (!GlRenderer.enabled || !type.castshadow) { + return; + } + if (shape == 2) { + if (local100 instanceof Loc) { + ((Loc) local100).method1046(); + } else { + Loc.method181(type, 0, angle + 4, 0, shape, x, z, arg4); + } + if (local102 instanceof Loc) { + ((Loc) local102).method1046(); + } else { + Loc.method181(type, 0, angle + 1 & 0x3, 0, shape, x, z, arg4); + } + } else if (shape == 5) { + if (local100 instanceof Loc) { + ((Loc) local100).method1046(); + } else { + Loc.method181(type, WALL_DECO_ROT_SIZE_Y_DIR[angle] * 8, angle, WALL_DECO_ROT_SIZE_X_DIR[angle] * 8, 4, x, z, arg4); + } + } else if (shape == 6) { + if (local100 instanceof Loc) { + ((Loc) local100).method1046(); + } else { + Loc.method181(type, anIntArray154[angle] * 8, angle + 4, anIntArray565[angle] * 8, 4, x, z, arg4); + } + } else if (shape == 7) { + if (local100 instanceof Loc) { + ((Loc) local100).method1046(); + } else { + Loc.method181(type, 0, (angle + 2 & 0x3) + 4, 0, 4, x, z, arg4); + } + } else if (shape == 8) { + if (local100 instanceof Loc) { + ((Loc) local100).method1046(); + } else { + Loc.method181(type, anIntArray154[angle] * 8, angle + 4, anIntArray565[angle] * 8, 4, x, z, arg4); + } + if (local102 instanceof Loc) { + ((Loc) local102).method1046(); + } else { + Loc.method181(type, anIntArray154[angle] * 8, (angle + 2 & 0x3) + 4, anIntArray565[angle] * 8, 4, x, z, arg4); + } + } else if (shape == 11) { + if (local100 instanceof Loc) { + ((Loc) local100).method1046(); + } else { + Loc.method181(type, 0, angle + 4, 0, 10, x, z, arg4); + } + } else if (local100 instanceof Loc) { + ((Loc) local100).method1046(); + } else { + Loc.method181(type, 0, angle, 0, shape, x, z, arg4); + } + } + + @OriginalMember(owner = "client!sd", name = "c", descriptor = "(II)V") + public static void method3884(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(7) Tile local7 = tiles[0][arg0][arg1]; + for (@Pc(9) int local9 = 0; local9 < 3; local9++) { + @Pc(30) Tile local30 = tiles[local9][arg0][arg1] = tiles[local9 + 1][arg0][arg1]; + if (local30 != null) { + local30.anInt672--; + for (@Pc(40) int local40 = 0; local40 < local30.sceneryLen; local40++) { + @Pc(49) Scenery local49 = local30.scenery[local40]; + if ((local49.key >> 29 & 0x3L) == 2L && local49.xMin == arg0 && local49.zMin == arg1) { + local49.level--; + } + } + } + } + if (tiles[0][arg0][arg1] == null) { + tiles[0][arg0][arg1] = new Tile(0, arg0, arg1); + } + tiles[0][arg0][arg1].aClass3_Sub5_1 = local7; + tiles[3][arg0][arg1] = null; + } + + @OriginalMember(owner = "client!fm", name = "a", descriptor = "(IIIIII)Z") + public static boolean method1599(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + @Pc(16) int local16; + @Pc(20) int local20; + if (arg1 != arg2 || arg3 != arg4) { + for (local16 = arg1; local16 <= arg2; local16++) { + for (local20 = arg3; local20 <= arg4; local20++) { + if (anIntArrayArrayArray12[arg0][local16][local20] == -anInt437) { + return false; + } + } + } + local16 = (arg1 << 7) + 1; + local20 = (arg3 << 7) + 2; + @Pc(156) int local156 = tileHeights[arg0][arg1][arg3] + arg5; + if (!method4394(local16, local156, local20)) { + return false; + } + @Pc(169) int local169 = (arg2 << 7) - 1; + if (!method4394(local169, local156, local20)) { + return false; + } + @Pc(182) int local182 = (arg4 << 7) - 1; + if (!method4394(local16, local156, local182)) { + return false; + } else return method4394(local169, local156, local182); + } else if (method187(arg0, arg1, arg3)) { + local16 = arg1 << 7; + local20 = arg3 << 7; + return method4394(local16 + 1, tileHeights[arg0][arg1][arg3] + arg5, local20 + 1) && method4394(local16 + 128 - 1, tileHeights[arg0][arg1 + 1][arg3] + arg5, local20 + 1) && method4394(local16 + 128 - 1, tileHeights[arg0][arg1 + 1][arg3 + 1] + arg5, local20 + 128 - 1) && method4394(local16 + 1, tileHeights[arg0][arg1][arg3 + 1] + arg5, local20 + 128 - 1); + } else { + return false; + } + } + + @OriginalMember(owner = "client!hc", name = "a", descriptor = "(IIIILclient!th;Lclient!th;IIIIJ)V") + public static void setWallDecor(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z, @OriginalArg(3) int arg3, @OriginalArg(4) Entity primary, @OriginalArg(5) Entity secondary, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int xOffset, @OriginalArg(9) int zOffset, @OriginalArg(10) long key) { + if (primary == null) { + return; + } + @Pc(6) WallDecor wallDecor = new WallDecor(); + wallDecor.key = key; + wallDecor.xFine = x * 128 + 64; + wallDecor.zFine = z * 128 + 64; + wallDecor.anInt1391 = arg3; + wallDecor.primary = primary; + wallDecor.secondary = secondary; + wallDecor.anInt1395 = arg6; + wallDecor.anInt1388 = arg7; + wallDecor.xOffset = xOffset; + wallDecor.zOffset = zOffset; + for (@Pc(46) int level0 = level; level0 >= 0; level0--) { + if (tiles[level0][x][z] == null) { + tiles[level0][x][z] = new Tile(level0, x, z); + } + } + tiles[level][x][z].wallDecor = wallDecor; + } + + @OriginalMember(owner = "client!pb", name = "b", descriptor = "(III)Lclient!jj;") + public static ObjStackEntity removeObjStack(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z) { + @Pc(7) Tile tile = tiles[level][x][z]; + if (tile == null) { + return null; + } else { + @Pc(14) ObjStackEntity entity = tile.objStack; + tile.objStack = null; + return entity; + } + } + + @OriginalMember(owner = "client!ub", name = "a", descriptor = "(Lclient!bj;Z)V") + public static void method4245(@OriginalArg(0) Tile arg0, @OriginalArg(1) boolean arg1) { + aClass69_32.addTail(arg0); + while (true) { + @Pc(8) Tile local8; + @Pc(18) int local18; + @Pc(21) int local21; + @Pc(24) int local24; + @Pc(27) int local27; + @Pc(31) Tile[][] local31; + @Pc(65) int local65; + @Pc(115) int local115; + @Pc(894) int local894; + @Pc(899) int local899; + @Pc(904) int local904; + @Pc(153) Tile local153; + @Pc(1332) int local1332; + do { + do { + do { + do { + do { + do { + while (true) { + @Pc(44) int var9; + @Pc(48) int var10; + @Pc(907) int var17; + @Pc(916) int var18; + @Pc(363) Wall var22; + @Pc(469) boolean var24; + @Pc(425) Scenery var25; + @Pc(1179) Tile var32; + while (true) { + do { + local8 = (Tile) aClass69_32.removeHead(); + if (local8 == null) { + return; + } + } while (!local8.aBoolean46); + local18 = local8.anInt669; + local21 = local8.anInt666; + local24 = local8.anInt672; + local27 = local8.anInt668; + local31 = tiles[local24]; + @Pc(33) float local33 = 0.0F; + if (GlRenderer.enabled) { + if (underwaterTileHeights == tileHeights) { + var9 = anIntArrayArray11[local18][local21]; + var10 = var9 & 0xFFFFFF; + if (var10 != anInt3604) { + anInt3604 = var10; + WaterMaterialRenderer.method619(var10); + FogManager.setFogColor(WaterMaterialRenderer.method2422()); + } + local65 = var9 >>> 24 << 3; + if (local65 != anInt730) { + anInt730 = local65; + MaterialManager.method2761(local65); + } + local115 = surfaceTileHeights[0][local18][local21] + surfaceTileHeights[0][local18 + 1][local21] + surfaceTileHeights[0][local18][local21 + 1] + surfaceTileHeights[0][local18 + 1][local21 + 1] >> 2; + MaterialManager.setMaterial(-local115, 3); + local33 = 201.5F; + GlRenderer.method4159(local33); + } else { + local33 = 201.5F - (float) (local27 + 1) * 50.0F; + GlRenderer.method4159(local33); + } + } + if (!local8.aBoolean45) { + break; + } + if (arg1) { + if (local24 > 0) { + local153 = tiles[local24 - 1][local18][local21]; + if (local153 != null && local153.aBoolean46) { + continue; + } + } + if (local18 <= anInt4069 && local18 > LightingManager.anInt987) { + local153 = local31[local18 - 1][local21]; + if (local153 != null && local153.aBoolean46 && (local153.aBoolean45 || (local8.allInteriorFlags & 0x1) == 0)) { + continue; + } + } + if (local18 >= anInt4069 && local18 < LightingManager.anInt15 - 1) { + local153 = local31[local18 + 1][local21]; + if (local153 != null && local153.aBoolean46 && (local153.aBoolean45 || (local8.allInteriorFlags & 0x4) == 0)) { + continue; + } + } + if (local21 <= anInt4539 && local21 > LightingManager.anInt4698) { + local153 = local31[local18][local21 - 1]; + if (local153 != null && local153.aBoolean46 && (local153.aBoolean45 || (local8.allInteriorFlags & 0x8) == 0)) { + continue; + } + } + if (local21 >= anInt4539 && local21 < LightingManager.anInt4866 - 1) { + local153 = local31[local18][local21 + 1]; + if (local153 != null && local153.aBoolean46 && (local153.aBoolean45 || (local8.allInteriorFlags & 0x2) == 0)) { + continue; + } + } + } else { + arg1 = true; + } + local8.aBoolean45 = false; + if (local8.aClass3_Sub5_1 != null) { + local153 = local8.aClass3_Sub5_1; + if (GlRenderer.enabled) { + GlRenderer.method4159(201.5F - (float) (local153.anInt668 + 1) * 50.0F); + } + if (local153.plainTile == null) { + if (local153.shapedTile != null) { + method2762(local153.shapedTile, anInt2886, anInt3038, anInt5205, anInt2222, local18, local21, method187(0, local18, local21)); + } + } else + method2610(local153.plainTile, 0, anInt2886, anInt3038, anInt5205, anInt2222, local18, local21, method187(0, local18, local21)); + var22 = local153.wall; + if (var22 != null) { + if (GlRenderer.enabled) { + if ((var22.anInt3049 & local8.anInt670) == 0) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } else { + LightingManager.method2388(var22.anInt3049, cameraX, cameraY, cameraZ, local27, local18, local21); + } + } + var22.primary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, var22.xFine - cameraX, var22.anInt3051 - cameraY, var22.zFine - cameraZ, var22.key, local24, null); + } + for (local65 = 0; local65 < local153.sceneryLen; local65++) { + var25 = local153.scenery[local65]; + if (var25 != null) { + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + var25.entity.render(var25.anInt1714, anInt2886, anInt3038, anInt5205, anInt2222, var25.anInt1699 - cameraX, var25.anInt1706 - cameraY, var25.anInt1703 - cameraZ, var25.key, local24, null); + } + } + if (GlRenderer.enabled) { + GlRenderer.method4159(local33); + } + } + var24 = false; + if (local8.plainTile == null) { + if (local8.shapedTile != null) { + if (method187(local27, local18, local21)) { + method2762(local8.shapedTile, anInt2886, anInt3038, anInt5205, anInt2222, local18, local21, true); + } else { + var24 = true; + method2762(local8.shapedTile, anInt2886, anInt3038, anInt5205, anInt2222, local18, local21, false); + } + } + } else if (method187(local27, local18, local21)) { + method2610(local8.plainTile, local27, anInt2886, anInt3038, anInt5205, anInt2222, local18, local21, true); + } else { + var24 = true; + if (local8.plainTile.anInt4865 != 12345678 || MiniMenu.aBoolean187 && local24 <= MiniMenu.anInt3902) { + method2610(local8.plainTile, local27, anInt2886, anInt3038, anInt5205, anInt2222, local18, local21, false); + } + } + if (var24) { + @Pc(549) GroundDecor local549 = local8.groundDecor; + if (local549 != null && (local549.key & 0x80000000L) != 0L) { + if (GlRenderer.enabled && local549.aBoolean49) { + GlRenderer.method4159(local33 + 50.0F - 1.5F); + } + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + local549.entity.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local549.xFine - cameraX, local549.anInt733 - cameraY, local549.zFine - cameraZ, local549.key, local24, null); + if (GlRenderer.enabled && local549.aBoolean49) { + GlRenderer.method4159(local33); + } + } + } + var10 = 0; + local65 = 0; + @Pc(616) Wall local616 = local8.wall; + @Pc(619) WallDecor local619 = local8.wallDecor; + if (local616 != null || local619 != null) { + if (anInt4069 == local18) { + var10++; + } else if (anInt4069 < local18) { + var10 += 2; + } + if (anInt4539 == local21) { + var10 += 3; + } else if (anInt4539 > local21) { + var10 += 6; + } + local65 = anIntArray324[var10]; + local8.anInt670 = anIntArray386[var10]; + } + if (local616 != null) { + if ((local616.anInt3049 & anIntArray215[var10]) == 0) { + local8.anInt663 = 0; + } else if (local616.anInt3049 == 16) { + local8.anInt663 = 3; + local8.anInt665 = anIntArray294[var10]; + local8.anInt667 = 3 - local8.anInt665; + } else if (local616.anInt3049 == 32) { + local8.anInt663 = 6; + local8.anInt665 = anIntArray489[var10]; + local8.anInt667 = 6 - local8.anInt665; + } else if (local616.anInt3049 == 64) { + local8.anInt663 = 12; + local8.anInt665 = anIntArray211[var10]; + local8.anInt667 = 12 - local8.anInt665; + } else { + local8.anInt663 = 9; + local8.anInt665 = anIntArray307[var10]; + local8.anInt667 = 9 - local8.anInt665; + } + if ((local616.anInt3049 & local65) != 0 && !method3850(local27, local18, local21, local616.anInt3049)) { + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + local616.primary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local616.xFine - cameraX, local616.anInt3051 - cameraY, local616.zFine - cameraZ, local616.key, local24, null); + } + if ((local616.anInt3052 & local65) != 0 && !method3850(local27, local18, local21, local616.anInt3052)) { + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + local616.secondary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local616.xFine - cameraX, local616.anInt3051 - cameraY, local616.zFine - cameraZ, local616.key, local24, null); + } + } + if (local619 != null && !method4611(local27, local18, local21, local619.primary.getMinY())) { + if (GlRenderer.enabled) { + GlRenderer.method4159(local33 - 0.5F); + } + if ((local619.anInt1395 & local65) != 0) { + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + local619.primary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local619.xFine + local619.xOffset - cameraX, local619.anInt1391 - cameraY, local619.zFine + local619.zOffset - cameraZ, local619.key, local24, null); + } else if (local619.anInt1395 == 256) { + local894 = local619.xFine - cameraX; + local899 = local619.anInt1391 - cameraY; + local904 = local619.zFine - cameraZ; + var17 = local619.anInt1388; + if (var17 == 1 || var17 == 2) { + var18 = -local894; + } else { + var18 = local894; + } + @Pc(928) int local928; + if (var17 == 2 || var17 == 3) { + local928 = -local904; + } else { + local928 = local904; + } + if (local928 < var18) { + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + local619.primary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local894 + local619.xOffset, local899, local904 + local619.zOffset, local619.key, local24, null); + } else if (local619.secondary != null) { + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + local619.secondary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local894, local899, local904, local619.key, local24, null); + } + } + if (GlRenderer.enabled) { + GlRenderer.method4159(local33); + } + } + if (var24) { + @Pc(1001) GroundDecor local1001 = local8.groundDecor; + if (local1001 != null && (local1001.key & 0x80000000L) == 0L) { + if (GlRenderer.enabled && local1001.aBoolean49) { + GlRenderer.method4159(local33 + 50.0F - 1.5F); + } + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + local1001.entity.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local1001.xFine - cameraX, local1001.anInt733 - cameraY, local1001.zFine - cameraZ, local1001.key, local24, null); + if (GlRenderer.enabled && local1001.aBoolean49) { + GlRenderer.method4159(local33); + } + } + @Pc(1064) ObjStackEntity local1064 = local8.objStack; + if (local1064 != null && local1064.anInt3063 == 0) { + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + if (local1064.secondary != null) { + local1064.secondary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local1064.xFine - cameraX, local1064.anInt3057 - cameraY, local1064.zFine - cameraZ, local1064.key, local24, null); + } + if (local1064.tertiary != null) { + local1064.tertiary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local1064.xFine - cameraX, local1064.anInt3057 - cameraY, local1064.zFine - cameraZ, local1064.key, local24, null); + } + if (local1064.primary != null) { + local1064.primary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local1064.xFine - cameraX, local1064.anInt3057 - cameraY, local1064.zFine - cameraZ, local1064.key, local24, null); + } + } + } + local894 = local8.allInteriorFlags; + if (local894 != 0) { + if (local18 < anInt4069 && (local894 & 0x4) != 0) { + var32 = local31[local18 + 1][local21]; + if (var32 != null && var32.aBoolean46) { + aClass69_32.addTail(var32); + } + } + if (local21 < anInt4539 && (local894 & 0x2) != 0) { + var32 = local31[local18][local21 + 1]; + if (var32 != null && var32.aBoolean46) { + aClass69_32.addTail(var32); + } + } + if (local18 > anInt4069 && (local894 & 0x1) != 0) { + var32 = local31[local18 - 1][local21]; + if (var32 != null && var32.aBoolean46) { + aClass69_32.addTail(var32); + } + } + if (local21 > anInt4539 && (local894 & 0x8) != 0) { + var32 = local31[local18][local21 - 1]; + if (var32 != null && var32.aBoolean46) { + aClass69_32.addTail(var32); + } + } + } + break; + } + if (local8.anInt663 != 0) { + var24 = true; + for (var10 = 0; var10 < local8.sceneryLen; var10++) { + if (local8.scenery[var10].anInt1707 != anInt437 && (local8.interiorFlags[var10] & local8.anInt663) == local8.anInt665) { + var24 = false; + break; + } + } + if (var24) { + var22 = local8.wall; + if (!method3850(local27, local18, local21, var22.anInt3049)) { + if (GlRenderer.enabled) { + label882: + { + if ((var22.key & 0xFC000L) == 16384L) { + local65 = var22.xFine - cameraX; + local115 = var22.zFine - cameraZ; + local1332 = (int) (var22.key >> 20 & 0x3L); + if (local1332 == 0) { + local65 -= 64; + local115 += 64; + if (local115 < local65 && local18 > 0 && local21 < length - 1) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18 - 1, local21 + 1); + break label882; + } + } else if (local1332 == 1) { + local65 += 64; + local115 += 64; + if (local115 < -local65 && local18 < width - 1 && local21 < length - 1) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18 + 1, local21 + 1); + break label882; + } + } else if (local1332 == 2) { + local65 += 64; + local115 -= 64; + if (local115 > local65 && local18 < width - 1 && local21 > 0) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18 + 1, local21 - 1); + break label882; + } + } else if (local1332 == 3) { + local65 -= 64; + local115 -= 64; + if (local115 > -local65 && local18 > 0 && local21 > 0) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18 - 1, local21 - 1); + break label882; + } + } + } + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + } + var22.primary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, var22.xFine - cameraX, var22.anInt3051 - cameraY, var22.zFine - cameraZ, var22.key, local24, null); + } + local8.anInt663 = 0; + } + } + if (!local8.aBoolean47) { + break; + } + try { + var9 = local8.sceneryLen; + local8.aBoolean47 = false; + var10 = 0; + label767: + for (local65 = 0; local65 < var9; local65++) { + var25 = local8.scenery[local65]; + if (var25.anInt1707 != anInt437) { + for (local1332 = var25.xMin; local1332 <= var25.xMax; local1332++) { + for (local894 = var25.zMin; local894 <= var25.zMax; local894++) { + var32 = local31[local1332][local894]; + if (var32.aBoolean45) { + local8.aBoolean47 = true; + continue label767; + } + if (var32.anInt663 != 0) { + local904 = 0; + if (local1332 > var25.xMin) { + local904++; + } + if (local1332 < var25.xMax) { + local904 += 4; + } + if (local894 > var25.zMin) { + local904 += 8; + } + if (local894 < var25.zMax) { + local904 += 2; + } + if ((local904 & var32.anInt663) == local8.anInt667) { + local8.aBoolean47 = true; + continue label767; + } + } + } + } + aClass31Array2[var10++] = var25; + local1332 = anInt4069 - var25.xMin; + local894 = var25.xMax - anInt4069; + if (local894 > local1332) { + local1332 = local894; + } + local899 = anInt4539 - var25.zMin; + local904 = var25.zMax - anInt4539; + if (local904 > local899) { + var25.anInt1705 = local1332 + local904; + } else { + var25.anInt1705 = local1332 + local899; + } + } + } + while (var10 > 0) { + local65 = -50; + local115 = -1; + for (local1332 = 0; local1332 < var10; local1332++) { + @Pc(1628) Scenery local1628 = aClass31Array2[local1332]; + if (local1628.anInt1707 != anInt437) { + if (local1628.anInt1705 > local65) { + local65 = local1628.anInt1705; + local115 = local1332; + } else if (local1628.anInt1705 == local65) { + local899 = local1628.anInt1699 - cameraX; + local904 = local1628.anInt1703 - cameraZ; + var17 = aClass31Array2[local115].anInt1699 - cameraX; + var18 = aClass31Array2[local115].anInt1703 - cameraZ; + if (local899 * local899 + local904 * local904 > var17 * var17 + var18 * var18) { + local115 = local1332; + } + } + } + } + if (local115 == -1) { + break; + } + @Pc(1697) Scenery local1697 = aClass31Array2[local115]; + local1697.anInt1707 = anInt437; + if (!method1599(local27, local1697.xMin, local1697.xMax, local1697.zMin, local1697.zMax, local1697.entity.getMinY())) { + if (GlRenderer.enabled) { + if ((local1697.key & 0xFC000L) == 147456L) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + local894 = local1697.anInt1699 - cameraX; + local899 = local1697.anInt1703 - cameraZ; + local904 = (int) (local1697.key >> 20 & 0x3L); + if (local904 == 1 || local904 == 3) { + if (local899 > -local894) { + LightingManager.method2397(local24, local18, local21 - 1, local18 - 1, local21); + } else { + LightingManager.method2397(local24, local18, local21 + 1, local18 + 1, local21); + } + } else if (local899 > local894) { + LightingManager.method2397(local24, local18, local21 - 1, local18 + 1, local21); + } else { + LightingManager.method2397(local24, local18, local21 + 1, local18 - 1, local21); + } + } else { + LightingManager.method2391(cameraX, cameraY, cameraZ, local24, local1697.xMin, local1697.zMin, local1697.xMax, local1697.zMax); + } + } + local1697.entity.render(local1697.anInt1714, anInt2886, anInt3038, anInt5205, anInt2222, local1697.anInt1699 - cameraX, local1697.anInt1706 - cameraY, local1697.anInt1703 - cameraZ, local1697.key, local24, null); + } + for (local894 = local1697.xMin; local894 <= local1697.xMax; local894++) { + for (local899 = local1697.zMin; local899 <= local1697.zMax; local899++) { + @Pc(1863) Tile local1863 = local31[local894][local899]; + if (local1863.anInt663 != 0) { + aClass69_32.addTail(local1863); + } else if ((local894 != local18 || local899 != local21) && local1863.aBoolean46) { + aClass69_32.addTail(local1863); + } + } + } + } + if (!local8.aBoolean47) { + break; + } + } catch (@Pc(1895) Exception local1895) { + local8.aBoolean47 = false; + break; + } + } + } while (!local8.aBoolean46); + } while (local8.anInt663 != 0); + if (local18 > anInt4069 || local18 <= LightingManager.anInt987) { + break; + } + local153 = local31[local18 - 1][local21]; + } while (local153 != null && local153.aBoolean46); + if (local18 < anInt4069 || local18 >= LightingManager.anInt15 - 1) { + break; + } + local153 = local31[local18 + 1][local21]; + } while (local153 != null && local153.aBoolean46); + if (local21 > anInt4539 || local21 <= LightingManager.anInt4698) { + break; + } + local153 = local31[local18][local21 - 1]; + } while (local153 != null && local153.aBoolean46); + if (local21 < anInt4539 || local21 >= LightingManager.anInt4866 - 1) { + break; + } + local153 = local31[local18][local21 + 1]; + } while (local153 != null && local153.aBoolean46); + local8.aBoolean46 = false; + anInt1142--; + @Pc(1999) ObjStackEntity local1999 = local8.objStack; + if (local1999 != null && local1999.anInt3063 != 0) { + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + if (local1999.secondary != null) { + local1999.secondary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local1999.xFine - cameraX, local1999.anInt3057 - cameraY - local1999.anInt3063, local1999.zFine - cameraZ, local1999.key, local24, null); + } + if (local1999.tertiary != null) { + local1999.tertiary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local1999.xFine - cameraX, local1999.anInt3057 - cameraY - local1999.anInt3063, local1999.zFine - cameraZ, local1999.key, local24, null); + } + if (local1999.primary != null) { + local1999.primary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local1999.xFine - cameraX, local1999.anInt3057 - cameraY - local1999.anInt3063, local1999.zFine - cameraZ, local1999.key, local24, null); + } + } + if (local8.anInt670 != 0) { + @Pc(2109) WallDecor local2109 = local8.wallDecor; + if (local2109 != null && !method4611(local27, local18, local21, local2109.primary.getMinY())) { + if ((local2109.anInt1395 & local8.anInt670) != 0) { + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + local2109.primary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local2109.xFine + local2109.xOffset - cameraX, local2109.anInt1391 - cameraY, local2109.zFine + local2109.zOffset - cameraZ, local2109.key, local24, null); + } else if (local2109.anInt1395 == 256) { + local65 = local2109.xFine - cameraX; + local115 = local2109.anInt1391 - cameraY; + local1332 = local2109.zFine - cameraZ; + local894 = local2109.anInt1388; + if (local894 == 1 || local894 == 2) { + local899 = -local65; + } else { + local899 = local65; + } + if (local894 == 2 || local894 == 3) { + local904 = -local1332; + } else { + local904 = local1332; + } + if (local904 >= local899) { + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + local2109.primary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local65 + local2109.xOffset, local115, local1332 + local2109.zOffset, local2109.key, local24, null); + } else if (local2109.secondary != null) { + if (GlRenderer.enabled) { + LightingManager.method2393(cameraX, cameraY, cameraZ, local24, local18, local21); + } + local2109.secondary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local65, local115, local1332, local2109.key, local24, null); + } + } + } + @Pc(2275) Wall local2275 = local8.wall; + if (local2275 != null) { + if ((local2275.anInt3052 & local8.anInt670) != 0 && !method3850(local27, local18, local21, local2275.anInt3052)) { + if (GlRenderer.enabled) { + LightingManager.method2388(local2275.anInt3052, cameraX, cameraY, cameraZ, local27, local18, local21); + } + local2275.secondary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local2275.xFine - cameraX, local2275.anInt3051 - cameraY, local2275.zFine - cameraZ, local2275.key, local24, null); + } + if ((local2275.anInt3049 & local8.anInt670) != 0 && !method3850(local27, local18, local21, local2275.anInt3049)) { + if (GlRenderer.enabled) { + LightingManager.method2388(local2275.anInt3049, cameraX, cameraY, cameraZ, local27, local18, local21); + } + local2275.primary.render(0, anInt2886, anInt3038, anInt5205, anInt2222, local2275.xFine - cameraX, local2275.anInt3051 - cameraY, local2275.zFine - cameraZ, local2275.key, local24, null); + } + } + } + @Pc(2388) Tile local2388; + if (local24 < levels - 1) { + local2388 = tiles[local24 + 1][local18][local21]; + if (local2388 != null && local2388.aBoolean46) { + aClass69_32.addTail(local2388); + } + } + if (local18 < anInt4069) { + local2388 = local31[local18 + 1][local21]; + if (local2388 != null && local2388.aBoolean46) { + aClass69_32.addTail(local2388); + } + } + if (local21 < anInt4539) { + local2388 = local31[local18][local21 + 1]; + if (local2388 != null && local2388.aBoolean46) { + aClass69_32.addTail(local2388); + } + } + if (local18 > anInt4069) { + local2388 = local31[local18 - 1][local21]; + if (local2388 != null && local2388.aBoolean46) { + aClass69_32.addTail(local2388); + } + } + if (local21 > anInt4539) { + local2388 = local31[local18][local21 - 1]; + if (local2388 != null && local2388.aBoolean46) { + aClass69_32.addTail(local2388); + } + } + } + } + + @OriginalMember(owner = "client!wh", name = "a", descriptor = "(IIII)Z") + public static boolean method4611(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (method187(arg0, arg1, arg2)) { + @Pc(10) int local10 = arg1 << 7; + @Pc(14) int local14 = arg2 << 7; + return method4394(local10 + 1, tileHeights[arg0][arg1][arg2] + arg3, local14 + 1) && method4394(local10 + 128 - 1, tileHeights[arg0][arg1 + 1][arg2] + arg3, local14 + 1) && method4394(local10 + 128 - 1, tileHeights[arg0][arg1 + 1][arg2 + 1] + arg3, local14 + 128 - 1) && method4394(local10 + 1, tileHeights[arg0][arg1][arg2 + 1] + arg3, local14 + 128 - 1); + } else { + return false; + } + } + + @OriginalMember(owner = "client!vd", name = "b", descriptor = "(IIII)Z") + public static boolean method3850(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (!method187(arg0, arg1, arg2)) { + return false; + } + @Pc(10) int local10 = arg1 << 7; + @Pc(14) int local14 = arg2 << 7; + @Pc(24) int local24 = tileHeights[arg0][arg1][arg2] - 1; + @Pc(28) int local28 = local24 - 120; + @Pc(32) int local32 = local24 - 230; + @Pc(36) int local36 = local24 - 238; + if (arg3 < 16) { + if (arg3 == 1) { + if (local10 > cameraX) { + if (!method4394(local10, local24, local14)) { + return false; + } + if (!method4394(local10, local24, local14 + 128)) { + return false; + } + } + if (arg0 > 0) { + if (!method4394(local10, local28, local14)) { + return false; + } + if (!method4394(local10, local28, local14 + 128)) { + return false; + } + } + if (!method4394(local10, local32, local14)) { + return false; + } + return method4394(local10, local32, local14 + 128); + } + if (arg3 == 2) { + if (local14 < cameraZ) { + if (!method4394(local10, local24, local14 + 128)) { + return false; + } + if (!method4394(local10 + 128, local24, local14 + 128)) { + return false; + } + } + if (arg0 > 0) { + if (!method4394(local10, local28, local14 + 128)) { + return false; + } + if (!method4394(local10 + 128, local28, local14 + 128)) { + return false; + } + } + if (!method4394(local10, local32, local14 + 128)) { + return false; + } + return method4394(local10 + 128, local32, local14 + 128); + } + if (arg3 == 4) { + if (local10 < cameraX) { + if (!method4394(local10 + 128, local24, local14)) { + return false; + } + if (!method4394(local10 + 128, local24, local14 + 128)) { + return false; + } + } + if (arg0 > 0) { + if (!method4394(local10 + 128, local28, local14)) { + return false; + } + if (!method4394(local10 + 128, local28, local14 + 128)) { + return false; + } + } + if (!method4394(local10 + 128, local32, local14)) { + return false; + } + return method4394(local10 + 128, local32, local14 + 128); + } + if (arg3 == 8) { + if (local14 > cameraZ) { + if (!method4394(local10, local24, local14)) { + return false; + } + if (!method4394(local10 + 128, local24, local14)) { + return false; + } + } + if (arg0 > 0) { + if (!method4394(local10, local28, local14)) { + return false; + } + if (!method4394(local10 + 128, local28, local14)) { + return false; + } + } + if (!method4394(local10, local32, local14)) { + return false; + } + return method4394(local10 + 128, local32, local14); + } + } + if (!method4394(local10 + 64, local36, local14 + 64)) { + return false; + } else if (arg3 == 16) { + return method4394(local10, local32, local14 + 128); + } else if (arg3 == 32) { + return method4394(local10 + 128, local32, local14 + 128); + } else if (arg3 == 64) { + return method4394(local10 + 128, local32, local14); + } else if (arg3 == 128) { + return method4394(local10, local32, local14); + } else { + return true; + } + } + + @OriginalMember(owner = "client!p", name = "a", descriptor = "(IZIZLclient!mj;IIIBII)V") + public static void addLoc(@OriginalArg(0) int currentPlane, @OriginalArg(1) boolean lowmem, @OriginalArg(2) int plane, @OriginalArg(3) boolean highmem, @OriginalArg(4) CollisionMap map, @OriginalArg(5) int locIndex, @OriginalArg(6) int locType, @OriginalArg(7) int x, @OriginalArg(9) int z, @OriginalArg(10) int orientation) { + if (lowmem && !allLevelsAreVisible() && (renderFlags[0][x][z] & 0x2) == 0) { + if ((renderFlags[plane][x][z] & 0x10) != 0 || getRenderLevel(z, x, plane) != centralPlane) { + return; + } + } + + if (plane < firstVisibleLevel) { + firstVisibleLevel = plane; + } + + @Pc(62) LocType loc = LocTypeList.get(locIndex); + if (GlRenderer.enabled && loc.render) { + return; + } + + @Pc(84) int width; + @Pc(81) int length; + if (orientation == 1 || orientation == 3) { + length = loc.width; + width = loc.length; + } else { + width = loc.width; + length = loc.length; + } + + @Pc(103) int west; + @Pc(112) int east; + if (x + width <= 104) { + west = x + (width >> 1); + east = x + (width + 1 >> 1); + } else { + east = x + 1; + west = x; + } + + @Pc(129) int south; + @Pc(133) int north; + if (length + z > 104) { + south = z; + north = z + 1; + } else { + south = (length >> 1) + z; + north = z + (length + 1 >> 1); + } + + @Pc(153) int[][] currentHeightmap = tileHeights[currentPlane]; + @Pc(165) int local165 = (width << 6) + (x << 7); + @Pc(173) int local173 = (length << 6) + (z << 7); + @Pc(199) int averageY = currentHeightmap[west][north] + currentHeightmap[east][south] + currentHeightmap[west][south] + currentHeightmap[east][north] >> 2; + + @Pc(201) int diffAverageY = 0; + @Pc(213) int[][] heightmap; + if (GlRenderer.enabled && currentPlane != 0) { + heightmap = tileHeights[0]; + diffAverageY = averageY - (heightmap[east][north] + heightmap[east][south] + heightmap[west][south] + heightmap[west][north] >> 2); + } + heightmap = null; + + @Pc(261) long bitset = x | 0x40000000 | (long) z << 7 | (long) locType << 14 | (long) orientation << 20; + + if (highmem) { + heightmap = surfaceTileHeights[0]; + } else if (currentPlane < 3) { + heightmap = tileHeights[currentPlane + 1]; + } + + if (loc.interactable == 0 || highmem) { + bitset |= Long.MIN_VALUE; + } + + if (loc.supportitems == 1) { + bitset |= 0x400000L; + } + + if (loc.hasanimation) { + bitset |= Integer.MIN_VALUE; + } + + if (loc.hasAreaSound()) { + AreaSoundManager.add(z, loc, orientation, null, x, plane, null); + } + + @Pc(330) boolean local330 = loc.castshadow & !highmem; + bitset |= (long) locIndex << 32; + @Pc(387) Entity entity; + @Pc(403) LocEntity local403; + @Pc(1226) int local1226; + @Pc(1889) long local1889; + @Pc(1934) Entity local1934; + @Pc(1950) LocEntity local1950; + + if (locType == LocType.GROUNDDECOR) { + if (Preferences.showGroundDecorations || loc.interactable != 0 || loc.blockwalk == 1 || loc.forcedecor) { + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + local403 = loc.method3428(orientation, local165, currentHeightmap, LocType.GROUNDDECOR, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local403.sprite, local165, diffAverageY, local173); + } + entity = local403.model; + } else { + entity = new Loc(locIndex, LocType.GROUNDDECOR, orientation, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + + setGroundDecor(plane, x, z, averageY, entity, bitset, loc.aBoolean211); + + if (loc.blockwalk == 1 && map != null) { + map.flagGroundDecor(x, z); + } + } + } else if (locType == LocType.CENTREPIECE_STRAIGHT || locType == LocType.CENTREPIECE_DIAGONAL) { + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + local403 = loc.method3428(locType == LocType.CENTREPIECE_DIAGONAL ? orientation + 4 : orientation, local165, currentHeightmap, LocType.CENTREPIECE_STRAIGHT, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local403.sprite, local165, diffAverageY, local173); + } + entity = local403.model; + } else { + entity = new Loc(locIndex, LocType.CENTREPIECE_STRAIGHT, locType == LocType.CENTREPIECE_DIAGONAL ? orientation + 4 : orientation, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + + if (entity != null) { + @Pc(531) boolean local531 = method35(plane, x, z, averageY, width, length, entity, bitset); + if (loc.active && local531 && lowmem) { + @Pc(541) int local541 = 15; + if (entity instanceof Model) { + local541 = ((Model) entity).getLengthXZ() / 4; + if (local541 > 30) { + local541 = 30; + } + } + for (@Pc(560) int local560 = 0; local560 <= width; local560++) { + for (@Pc(565) int local565 = 0; local565 <= length; local565++) { + if (shadowmap[plane][x + local560][local565 + z] < local541) { + shadowmap[plane][x + local560][z + local565] = (byte) local541; + } + } + } + } + } + + if (loc.blockwalk != 0 && map != null) { + map.flagScenery(x, loc.blockrange, z, width, length); + } + } else if (locType >= LocType.ROOF_STRAIGHT) { + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + local403 = loc.method3428(orientation, local165, currentHeightmap, locType, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local403.sprite, local165, diffAverageY, local173); + } + entity = local403.model; + } else { + entity = new Loc(locIndex, locType, orientation, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + + method35(plane, x, z, averageY, 1, 1, entity, bitset); + if (lowmem && locType <= LocType.ROOF_FLAT && locType != LocType.ROOF_DIAGONAL_WITH_ROOFEDGE && plane > 0) { + occludeFlags[plane][x][z] |= 0x4; + } + + if (loc.blockwalk != 0 && map != null) { + map.flagScenery(x, loc.blockrange, z, width, length); + } + } else if (locType == LocType.WALL_STRAIGHT) { + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + local403 = loc.method3428(orientation, local165, currentHeightmap, LocType.WALL_STRAIGHT, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local403.sprite, local165, diffAverageY, local173); + } + entity = local403.model; + } else { + entity = new Loc(locIndex, LocType.WALL_STRAIGHT, orientation, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + + setWall(plane, x, z, averageY, entity, null, WALL_ROTATION_TYPE1[orientation], 0, bitset); + + if (lowmem) { + if (orientation == 0) { + if (loc.active) { + shadowmap[plane][x][z] = 50; + shadowmap[plane][x][z + 1] = 50; + } + + if (loc.occlude) { + occludeFlags[plane][x][z] |= 0x1; + } + } else if (orientation == 1) { + if (loc.active) { + shadowmap[plane][x][z + 1] = 50; + shadowmap[plane][x + 1][z + 1] = 50; + } + + if (loc.occlude) { + occludeFlags[plane][x][z + 1] |= 0x2; + } + } else if (orientation == 2) { + if (loc.active) { + shadowmap[plane][x + 1][z] = 50; + shadowmap[plane][x + 1][z + 1] = 50; + } + + if (loc.occlude) { + occludeFlags[plane][x + 1][z] |= 0x1; + } + } else if (orientation == 3) { + if (loc.active) { + shadowmap[plane][x][z] = 50; + shadowmap[plane][x + 1][z] = 50; + } + + if (loc.occlude) { + occludeFlags[plane][x][z] |= 0x2; + } + } + } + + if (loc.blockwalk != 0 && map != null) { + map.flagWall(orientation, locType, loc.blockrange, z, x); + } + + if (loc.walloff != 16) { + setWallDecoration(plane, x, z, loc.walloff); + } + } else if (locType == LocType.WALL_DIAGONALCORNER) { + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + local403 = loc.method3428(orientation, local165, currentHeightmap, LocType.WALL_DIAGONALCORNER, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local403.sprite, local165, diffAverageY, local173); + } + entity = local403.model; + } else { + entity = new Loc(locIndex, LocType.WALL_DIAGONALCORNER, orientation, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + + setWall(plane, x, z, averageY, entity, null, LoginManager.anIntArray204[orientation], 0, bitset); + if (loc.active && lowmem) { + if (orientation == 0) { + shadowmap[plane][x][z + 1] = 50; + } else if (orientation == 1) { + shadowmap[plane][x + 1][z + 1] = 50; + } else if (orientation == 2) { + shadowmap[plane][x + 1][z] = 50; + } else if (orientation == 3) { + shadowmap[plane][x][z] = 50; + } + } + + if (loc.blockwalk != 0 && map != null) { + map.flagWall(orientation, locType, loc.blockrange, z, x); + } + } else if (locType == LocType.WALL_L) { + local1226 = orientation + 1 & 0x3; + @Pc(1269) Entity local1269; + @Pc(1254) Entity local1254; + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + @Pc(1287) LocEntity local1287 = loc.method3428(orientation + 4, local165, currentHeightmap, LocType.WALL_L, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local1287.sprite, local165, diffAverageY, local173); + } + local1254 = local1287.model; + local1287 = loc.method3428(local1226, local165, currentHeightmap, LocType.WALL_L, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local1287.sprite, local165, diffAverageY, local173); + } + local1269 = local1287.model; + } else { + local1254 = new Loc(locIndex, LocType.WALL_L, orientation + 4, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + local1269 = new Loc(locIndex, LocType.WALL_L, local1226, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + setWall(plane, x, z, averageY, local1254, local1269, WALL_ROTATION_TYPE1[orientation], WALL_ROTATION_TYPE1[local1226], bitset); + if (loc.occlude && lowmem) { + if (orientation == 0) { + occludeFlags[plane][x][z] |= 0x1; + occludeFlags[plane][x][z + 1] |= 0x2; + } else if (orientation == 1) { + occludeFlags[plane][x][z + 1] |= 0x2; + occludeFlags[plane][x + 1][z] |= 0x1; + } else if (orientation == 2) { + occludeFlags[plane][x + 1][z] |= 0x1; + occludeFlags[plane][x][z] |= 0x2; + } else if (orientation == 3) { + occludeFlags[plane][x][z] |= 0x2; + occludeFlags[plane][x][z] |= 0x1; + } + } + if (loc.blockwalk != 0 && map != null) { + map.flagWall(orientation, locType, loc.blockrange, z, x); + } + if (loc.walloff != 16) { + setWallDecoration(plane, x, z, loc.walloff); + } + } else if (locType == LocType.WALL_SQUARECORNER) { + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + local403 = loc.method3428(orientation, local165, currentHeightmap, LocType.WALL_SQUARECORNER, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local403.sprite, local165, diffAverageY, local173); + } + entity = local403.model; + } else { + entity = new Loc(locIndex, LocType.WALL_SQUARECORNER, orientation, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + setWall(plane, x, z, averageY, entity, null, LoginManager.anIntArray204[orientation], 0, bitset); + if (loc.active && lowmem) { + if (orientation == 0) { + shadowmap[plane][x][z + 1] = 50; + } else if (orientation == 1) { + shadowmap[plane][x + 1][z + 1] = 50; + } else if (orientation == 2) { + shadowmap[plane][x + 1][z] = 50; + } else if (orientation == 3) { + shadowmap[plane][x][z] = 50; + } + } + if (loc.blockwalk != 0 && map != null) { + map.flagWall(orientation, locType, loc.blockrange, z, x); + } + } else if (locType == LocType.WALL_DIAGONAL) { + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + local403 = loc.method3428(orientation, local165, currentHeightmap, locType, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local403.sprite, local165, diffAverageY, local173); + } + entity = local403.model; + } else { + entity = new Loc(locIndex, locType, orientation, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + method35(plane, x, z, averageY, 1, 1, entity, bitset); + if (loc.blockwalk != 0 && map != null) { + map.flagScenery(x, loc.blockrange, z, width, length); + } + if (loc.walloff != 16) { + setWallDecoration(plane, x, z, loc.walloff); + } + } else if (locType == LocType.WALLDECOR_STRAIGHT_XOFFSET) { + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + local403 = loc.method3428(orientation, local165, currentHeightmap, 4, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local403.sprite, local165, diffAverageY, local173); + } + entity = local403.model; + } else { + entity = new Loc(locIndex, 4, orientation, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + setWallDecor(plane, x, z, averageY, entity, null, WALL_ROTATION_TYPE1[orientation], 0, 0, 0, bitset); + } else if (locType == LocType.WALLDECOR_STRAIGHT_ZOFFSET) { + local1226 = 16; + local1889 = getWallKey(plane, x, z); + if (local1889 != 0L) { + local1226 = LocTypeList.get(Integer.MAX_VALUE & (int) (local1889 >>> 32)).walloff; + } + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + local1950 = loc.method3428(orientation, local165, currentHeightmap, 4, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local1950.sprite, local165 - WALL_DECO_ROT_SIZE_X_DIR[orientation] * 8, diffAverageY, local173 - WALL_DECO_ROT_SIZE_Y_DIR[orientation] * 8); + } + local1934 = local1950.model; + } else { + local1934 = new Loc(locIndex, 4, orientation, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + setWallDecor(plane, x, z, averageY, local1934, null, WALL_ROTATION_TYPE1[orientation], 0, local1226 * WALL_DECO_ROT_SIZE_X_DIR[orientation], WALL_DECO_ROT_SIZE_Y_DIR[orientation] * local1226, bitset); + } else if (locType == LocType.WALLDECOR_DIAGONAL_XOFFSET) { + local1226 = 8; + local1889 = getWallKey(plane, x, z); + if (local1889 != 0L) { + local1226 = LocTypeList.get(Integer.MAX_VALUE & (int) (local1889 >>> 32)).walloff / 2; + } + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + local1950 = loc.method3428(orientation + 4, local165, currentHeightmap, 4, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local1950.sprite, local165 - anIntArray565[orientation] * 8, diffAverageY, local173 - anIntArray154[orientation] * 8); + } + local1934 = local1950.model; + } else { + local1934 = new Loc(locIndex, 4, orientation + 4, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + setWallDecor(plane, x, z, averageY, local1934, null, 256, orientation, local1226 * anIntArray565[orientation], local1226 * anIntArray154[orientation], bitset); + } else if (locType == LocType.WALLDECOR_DIAGONAL_ZOFFSET) { + @Pc(2137) int local2137 = orientation + 2 & 0x3; + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + @Pc(2183) LocEntity local2183 = loc.method3428(local2137 + 4, local165, currentHeightmap, 4, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local2183.sprite, local165, diffAverageY, local173); + } + entity = local2183.model; + } else { + entity = new Loc(locIndex, 4, local2137 + 4, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + setWallDecor(plane, x, z, averageY, entity, null, 256, local2137, 0, 0, bitset); + } else if (locType == LocType.WALLDECOR_DIAGONAL_BOTH) { + local1226 = 8; + local1889 = getWallKey(plane, x, z); + if (local1889 != 0L) { + local1226 = LocTypeList.get(Integer.MAX_VALUE & (int) (local1889 >>> 32)).walloff / 2; + } + @Pc(2244) int local2244 = orientation + 2 & 0x3; + @Pc(2289) Entity local2289; + if (loc.anim == -1 && loc.multiLocs == null && !loc.aBoolean214) { + @Pc(2297) int local2297 = anIntArray154[orientation] * 8; + @Pc(2303) int local2303 = anIntArray565[orientation] * 8; + @Pc(2319) LocEntity local2319 = loc.method3428(orientation + 4, local165, currentHeightmap, 4, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local2319.sprite, local165 - local2303, diffAverageY, local173 - local2297); + } + local1934 = local2319.model; + local2319 = loc.method3428(local2244 + 4, local165, currentHeightmap, 4, averageY, heightmap, lowmem, null, local330, local173); + if (GlRenderer.enabled && local330) { + ShadowManager.method4211(local2319.sprite, local165 - local2303, diffAverageY, local173 - local2297); + } + local2289 = local2319.model; + } else { + local1934 = new Loc(locIndex, 4, orientation + 4, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + local2289 = new Loc(locIndex, 4, local2244 + 4, currentPlane, x, z, loc.anim, loc.allowrandomizedanimation, null); + } + setWallDecor(plane, x, z, averageY, local1934, local2289, 256, orientation, local1226 * anIntArray565[orientation], anIntArray154[orientation] * local1226, bitset); + } + } + + @OriginalMember(owner = "client!ch", name = "c", descriptor = "(I)V") + public static void method846() { + if (!allLevelsAreVisible() && centralPlane != Player.plane) { + LoginManager.method2463(Player.plane, centralZoneZ, centralZoneX, PlayerList.self.movementQueueZ[0], false, PlayerList.self.movementQueueX[0]); + } else if (Player.plane != LightingManager.anInt2875 && MiniMap.renderMap(Player.plane)) { + LightingManager.anInt2875 = Player.plane; + ScriptRunner.method2218(); + } + } + + @OriginalMember(owner = "client!jk", name = "a", descriptor = "(IZ[BII[Lclient!mj;)V") + public static void readLocs(@OriginalArg(0) int baseX, @OriginalArg(1) boolean highmem, @OriginalArg(2) byte[] src, @OriginalArg(3) int baseZ, @OriginalArg(5) CollisionMap[] maps) { + @Pc(10) Buffer b = new Buffer(src); + + @Pc(12) int locIndex = -1; + while (true) { + @Pc(16) int locOffset = b.gVarSmart(); + if (locOffset == 0) { + return; + } + locIndex += locOffset; + + @Pc(27) int position = 0; + while (true) { + @Pc(31) int posOffset = b.gsmarts(); + if (posOffset == 0) { + break; + } + position += posOffset - 1; + + @Pc(46) int z = position & 0x3F; + @Pc(56) int x = position >> 6 & 0x3F; + @Pc(50) int plane = position >> 12; + + @Pc(60) int flags = b.g1(); + @Pc(64) int type = flags >> 2; + @Pc(68) int orientation = flags & 0x3; + + @Pc(72) int tileX = x + baseX; + @Pc(76) int tileZ = z + baseZ; + if (tileX > 0 && tileZ > 0 && tileX < 103 && tileZ < 103) { + @Pc(90) CollisionMap map = null; + if (!highmem) { + @Pc(95) int markingPlane = plane; + // might be used with bridges? + if ((renderFlags[1][tileX][tileZ] & 0x2) == 2) { + markingPlane--; + } + if (markingPlane >= 0) { + map = maps[markingPlane]; + } + } + + addLoc(plane, !highmem, plane, highmem, map, locIndex, type, tileX, tileZ, orientation); + } + } + } + } + + @OriginalMember(owner = "client!vh", name = "a", descriptor = "(Lclient!th;III)V") + public static void method3574(@OriginalArg(0) Entity arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(12) Tile local12; + if (arg2 < width) { + local12 = tiles[arg1][arg2 + 1][arg3]; + if (local12 != null && local12.groundDecor != null && local12.groundDecor.entity.method4543()) { + arg0.method4544(local12.groundDecor.entity, 128, 0, 0, true); + } + } + if (arg3 < width) { + local12 = tiles[arg1][arg2][arg3 + 1]; + if (local12 != null && local12.groundDecor != null && local12.groundDecor.entity.method4543()) { + arg0.method4544(local12.groundDecor.entity, 0, 0, 128, true); + } + } + if (arg2 < width && arg3 < length) { + local12 = tiles[arg1][arg2 + 1][arg3 + 1]; + if (local12 != null && local12.groundDecor != null && local12.groundDecor.entity.method4543()) { + arg0.method4544(local12.groundDecor.entity, 128, 0, 128, true); + } + } + if (arg2 < width && arg3 > 0) { + local12 = tiles[arg1][arg2 + 1][arg3 - 1]; + if (local12 != null && local12.groundDecor != null && local12.groundDecor.entity.method4543()) { + arg0.method4544(local12.groundDecor.entity, 128, 0, -128, true); + } + } + } + + @OriginalMember(owner = "client!mf", name = "a", descriptor = "(IIIII[[[B[I[I[I[I[IIBII)V") + public static void method2954(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) byte[][][] arg5, @OriginalArg(6) int[] arg6, @OriginalArg(7) int[] arg7, @OriginalArg(8) int[] arg8, @OriginalArg(9) int[] arg9, @OriginalArg(10) int[] arg10, @OriginalArg(11) int arg11, @OriginalArg(12) byte arg12, @OriginalArg(13) int arg13, @OriginalArg(14) int arg14) { + if (arg0 < 0) { + arg0 = 0; + } else if (arg0 >= width * 128) { + arg0 = width * 128 - 1; + } + if (arg2 < 0) { + arg2 = 0; + } else if (arg2 >= length * 128) { + arg2 = length * 128 - 1; + } + anInt2886 = MathUtils.sin[arg3]; + anInt3038 = MathUtils.cos[arg3]; + anInt5205 = MathUtils.sin[arg4]; + anInt2222 = MathUtils.cos[arg4]; + cameraX = arg0; + cameraY = arg1; + cameraZ = arg2; + anInt4069 = arg0 / 128; + anInt4539 = arg2 / 128; + LightingManager.anInt987 = anInt4069 - visibility; + if (LightingManager.anInt987 < 0) { + LightingManager.anInt987 = 0; + } + LightingManager.anInt4698 = anInt4539 - visibility; + if (LightingManager.anInt4698 < 0) { + LightingManager.anInt4698 = 0; + } + LightingManager.anInt15 = anInt4069 + visibility; + if (LightingManager.anInt15 > width) { + LightingManager.anInt15 = width; + } + LightingManager.anInt4866 = anInt4539 + visibility; + if (LightingManager.anInt4866 > length) { + LightingManager.anInt4866 = length; + } + @Pc(99) short local99; + if (GlRenderer.enabled) { + local99 = (short) GlobalConfig.VIEW_DISTANCE; + } else { + local99 = 3500; + } + @Pc(104) int local104; + @Pc(113) int local113; + for (local104 = 0; local104 < visibility + visibility + 2; local104++) { + for (local113 = 0; local113 < visibility + visibility + 2; local113++) { + @Pc(130) int local130 = (local104 - visibility << 7) - (cameraX & 0x7F); + @Pc(140) int local140 = (local113 - visibility << 7) - (cameraZ & 0x7F); + @Pc(146) int local146 = anInt4069 + local104 - visibility; + @Pc(152) int local152 = anInt4539 + local113 - visibility; + if (local146 >= 0 && local152 >= 0 && local146 < width && local152 < length) { + @Pc(176) int local176; + if (underwaterTileHeights == null) { + local176 = surfaceTileHeights[0][local146][local152] + 128 - cameraY; + } else { + local176 = underwaterTileHeights[0][local146][local152] + 128 - cameraY; + } + @Pc(201) int local201 = surfaceTileHeights[3][local146][local152] - cameraY - 1000; + aBooleanArrayArray3[local104][local113] = method3049(local130, local201, local176, local140, local99); + } else { + aBooleanArrayArray3[local104][local113] = false; + } + } + } + for (local104 = 0; local104 < visibility + visibility + 1; local104++) { + for (local113 = 0; local113 < visibility + visibility + 1; local113++) { + aBooleanArrayArray1[local104][local113] = aBooleanArrayArray3[local104][local113] || aBooleanArrayArray3[local104 + 1][local113] || aBooleanArrayArray3[local104][local113 + 1] || aBooleanArrayArray3[local104 + 1][local113 + 1]; + } + } + anIntArray8 = arg6; + anIntArray292 = arg7; + anIntArray234 = arg8; + anIntArray454 = arg9; + anIntArray427 = arg10; + method2419(); + if (underWaterGroundTiles != null) { + setUnderwater(true); + method3292(arg0, arg1, arg2, null, 0, (byte) 0, arg13, arg14); + if (GlRenderer.enabled) { + MaterialManager.renderingUnderwater = false; + MaterialManager.setMaterial(0, 0); + FogManager.setFogColor(null); + LightingManager.method2390(); + } + setUnderwater(false); + } + method3292(arg0, arg1, arg2, arg5, arg11, arg12, arg13, arg14); + } + + @OriginalMember(owner = "client!uc", name = "a", descriptor = "(III[[[BIBII)V") + public static void method3292(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) byte[][][] arg3, @OriginalArg(4) int arg4, @OriginalArg(5) byte arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7) { + anInt437++; + anInt1142 = 0; + @Pc(9) int local9 = arg6 - 16; + @Pc(13) int local13 = arg6 + 16; + @Pc(17) int local17 = arg7 - 16; + @Pc(21) int local21 = arg7 + 16; + @Pc(32) int local32; + @Pc(37) int local37; + @Pc(183) int local183; + for (@Pc(23) int local23 = anInt5276; local23 < levels; local23++) { + @Pc(30) Tile[][] local30 = tiles[local23]; + for (local32 = LightingManager.anInt987; local32 < LightingManager.anInt15; local32++) { + for (local37 = LightingManager.anInt4698; local37 < LightingManager.anInt4866; local37++) { + @Pc(46) Tile local46 = local30[local32][local37]; + if (local46 != null) { + if (aBooleanArrayArray1[local32 + visibility - anInt4069][local37 + visibility - anInt4539] && (arg3 == null || local23 < arg4 || arg3[local23][local32][local37] != arg5)) { + local46.aBoolean45 = true; + local46.aBoolean46 = true; + local46.aBoolean47 = local46.sceneryLen > 0; + anInt1142++; + } else { + local46.aBoolean45 = false; + local46.aBoolean46 = false; + local46.anInt663 = 0; + if (local32 >= local9 && local32 <= local13 && local37 >= local17 && local37 <= local21) { + if (local46.wall != null) { + @Pc(103) Wall local103 = local46.wall; + local103.primary.method4545(0, local23, local103.anInt3051, local103.xFine, local103.zFine); + if (local103.secondary != null) { + local103.secondary.method4545(0, local23, local103.anInt3051, local103.xFine, local103.zFine); + } + } + if (local46.wallDecor != null) { + @Pc(134) WallDecor local134 = local46.wallDecor; + local134.primary.method4545(local134.anInt1388, local23, local134.anInt1391, local134.xFine, local134.zFine); + if (local134.secondary != null) { + local134.secondary.method4545(local134.anInt1388, local23, local134.anInt1391, local134.xFine, local134.zFine); + } + } + if (local46.groundDecor != null) { + @Pc(167) GroundDecor local167 = local46.groundDecor; + local167.entity.method4545(0, local23, local167.anInt733, local167.xFine, local167.zFine); + } + if (local46.scenery != null) { + for (local183 = 0; local183 < local46.sceneryLen; local183++) { + @Pc(192) Scenery local192 = local46.scenery[local183]; + local192.entity.method4545(local192.anInt1714, local23, local192.anInt1706, local192.anInt1699, local192.anInt1703); + } + } + } + } + } + } + } + } + @Pc(240) boolean local240 = tileHeights == underwaterTileHeights; + if (GlRenderer.enabled) { + @Pc(244) GL2 gl = GlRenderer.gl; + gl.glPushMatrix(); + gl.glTranslatef((float) -arg0, (float) -arg1, (float) -arg2); + if (local240) { + UnderwaterMaterialRenderer.applyFogFade(); + MaterialManager.setMaterial(-1, 3); + MaterialManager.renderingUnderwater = true; + UnderwaterMaterialRenderer.method4609(); + anInt3604 = -1; + anInt730 = -1; + for (local32 = 0; local32 < underwaterHdTiles[0].length; local32++) { + @Pc(285) GlTile local285 = underwaterHdTiles[0][local32]; + @Pc(294) float local294 = 251.5F - (local285.blend ? 1.0F : 0.5F); + if (local285.underwaterColor != anInt3604) { + anInt3604 = local285.underwaterColor; + WaterMaterialRenderer.method619(local285.underwaterColor); + FogManager.setFogColor(WaterMaterialRenderer.method2422()); + } + local285.method1944(tiles, local294, false); + } + UnderwaterMaterialRenderer.method4608(); + } else { + local32 = anInt5276; + while (true) { + if (local32 >= levels) { + LightingManager.method2402(anInt4069, anInt4539, tiles); + break; + } + for (local37 = 0; local37 < underwaterHdTiles[local32].length; local37++) { + @Pc(336) GlTile local336 = underwaterHdTiles[local32][local37]; + @Pc(350) float local350 = 201.5F - (float) local32 * 50.0F - (local336.blend ? 1.0F : 0.5F); + if (local336.texture != -1 && Rasteriser.textureProvider.getMaterialType(local336.texture) == MaterialManager.WATER && Preferences.highWaterDetail) { + WaterMaterialRenderer.method619(local336.underwaterColor); + } + local336.method1944(tiles, local350, false); + } + if (local32 == 0 && Preferences.sceneryShadowsType > 0) { + GlRenderer.method4159(101.5F); + ShadowManager.method4198(anInt4069, anInt4539, visibility, arg1, aBooleanArrayArray1, tileHeights[0]); + } + local32++; + } + } + gl.glPopMatrix(); + } + @Pc(434) int local434; + @Pc(438) int local438; + @Pc(450) Tile local450; + @Pc(399) int local399; + @Pc(406) Tile[][] local406; + @Pc(415) int local415; + @Pc(428) int local428; + for (local399 = anInt5276; local399 < levels; local399++) { + local406 = tiles[local399]; + for (local37 = -visibility; local37 <= 0; local37++) { + local415 = anInt4069 + local37; + local183 = anInt4069 - local37; + if (local415 >= LightingManager.anInt987 || local183 < LightingManager.anInt15) { + for (local428 = -visibility; local428 <= 0; local428++) { + local434 = anInt4539 + local428; + local438 = anInt4539 - local428; + if (local415 >= LightingManager.anInt987) { + if (local434 >= LightingManager.anInt4698) { + local450 = local406[local415][local434]; + if (local450 != null && local450.aBoolean45) { + method4245(local450, true); + } + } + if (local438 < LightingManager.anInt4866) { + local450 = local406[local415][local438]; + if (local450 != null && local450.aBoolean45) { + method4245(local450, true); + } + } + } + if (local183 < LightingManager.anInt15) { + if (local434 >= LightingManager.anInt4698) { + local450 = local406[local183][local434]; + if (local450 != null && local450.aBoolean45) { + method4245(local450, true); + } + } + if (local438 < LightingManager.anInt4866) { + local450 = local406[local183][local438]; + if (local450 != null && local450.aBoolean45) { + method4245(local450, true); + } + } + } + if (anInt1142 == 0) { + if (!local240) { + MiniMenu.aBoolean187 = false; + } + return; + } + } + } + } + } + for (local399 = anInt5276; local399 < levels; local399++) { + local406 = tiles[local399]; + for (local37 = -visibility; local37 <= 0; local37++) { + local415 = anInt4069 + local37; + local183 = anInt4069 - local37; + if (local415 >= LightingManager.anInt987 || local183 < LightingManager.anInt15) { + for (local428 = -visibility; local428 <= 0; local428++) { + local434 = anInt4539 + local428; + local438 = anInt4539 - local428; + if (local415 >= LightingManager.anInt987) { + if (local434 >= LightingManager.anInt4698) { + local450 = local406[local415][local434]; + if (local450 != null && local450.aBoolean45) { + method4245(local450, false); + } + } + if (local438 < LightingManager.anInt4866) { + local450 = local406[local415][local438]; + if (local450 != null && local450.aBoolean45) { + method4245(local450, false); + } + } + } + if (local183 < LightingManager.anInt15) { + if (local434 >= LightingManager.anInt4698) { + local450 = local406[local183][local434]; + if (local450 != null && local450.aBoolean45) { + method4245(local450, false); + } + } + if (local438 < LightingManager.anInt4866) { + local450 = local406[local183][local438]; + if (local450 != null && local450.aBoolean45) { + method4245(local450, false); + } + } + } + if (anInt1142 == 0) { + if (!local240) { + MiniMenu.aBoolean187 = false; + } + return; + } + } + } + } + } + MiniMenu.aBoolean187 = false; + } + + @OriginalMember(owner = "client!lg", name = "a", descriptor = "(I)V") + public static void method2750(@OriginalArg(0) int arg0) { + anInt5276 = arg0; + for (@Pc(3) int local3 = 0; local3 < width; local3++) { + for (@Pc(8) int local8 = 0; local8 < length; local8++) { + if (tiles[arg0][local3][local8] == null) { + tiles[arg0][local3][local8] = new Tile(arg0, local3, local8); + } + } + } + } + + @OriginalMember(owner = "client!fh", name = "a", descriptor = "(IIIILclient!th;JLclient!th;Lclient!th;)V") + public static void setObjStack(@OriginalArg(0) int level, @OriginalArg(1) int x, @OriginalArg(2) int z, @OriginalArg(3) int arg3, @OriginalArg(4) Entity primary, @OriginalArg(5) long arg5, @OriginalArg(6) Entity secondary, @OriginalArg(7) Entity tertiary) { + @Pc(3) ObjStackEntity entity = new ObjStackEntity(); + entity.primary = primary; + entity.xFine = x * 128 + 64; + entity.zFine = z * 128 + 64; + entity.anInt3057 = arg3; + entity.key = arg5; + entity.secondary = secondary; + entity.tertiary = tertiary; + @Pc(34) int local34 = 0; + @Pc(42) Tile local42 = tiles[level][x][z]; + if (local42 != null) { + for (@Pc(46) int i = 0; i < local42.sceneryLen; i++) { + @Pc(55) Scenery scenery = local42.scenery[i]; + if ((scenery.key & 0x400000L) == 4194304L) { + @Pc(66) int minY = scenery.entity.getMinY(); + if (minY != -32768 && minY < local34) { + local34 = minY; + } + } + } + } + entity.anInt3063 = -local34; + if (tiles[level][x][z] == null) { + tiles[level][x][z] = new Tile(level, x, z); + } + tiles[level][x][z].objStack = entity; + } + + @OriginalMember(owner = "client!fh", name = "a", descriptor = "(Lclient!th;IIIII)V") + public static void method1544(@OriginalArg(0) Entity arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + @Pc(1) boolean local1 = true; + @Pc(3) int local3 = arg2; + @Pc(7) int local7 = arg2 + arg4; + @Pc(11) int local11 = arg3 - 1; + @Pc(15) int local15 = arg3 + arg5; + for (@Pc(17) int local17 = arg1; local17 <= arg1 + 1; local17++) { + if (local17 != levels) { + for (@Pc(28) int local28 = local3; local28 <= local7; local28++) { + if (local28 >= 0 && local28 < width) { + for (@Pc(39) int local39 = local11; local39 <= local15; local39++) { + if (local39 >= 0 && local39 < length && (!local1 || local28 >= local7 || local39 >= local15 || local39 < arg3 && local28 != arg2)) { + @Pc(71) Tile local71 = tiles[local17][local28][local39]; + if (local71 != null) { + @Pc(158) int local158 = (tileHeights[local17][local28][local39] + tileHeights[local17][local28 + 1][local39] + tileHeights[local17][local28][local39 + 1] + tileHeights[local17][local28 + 1][local39 + 1]) / 4 - (tileHeights[arg1][arg2][arg3] + tileHeights[arg1][arg2 + 1][arg3] + tileHeights[arg1][arg2][arg3 + 1] + tileHeights[arg1][arg2 + 1][arg3 + 1]) / 4; + @Pc(161) Wall local161 = local71.wall; + if (local161 != null) { + if (local161.primary.method4543()) { + arg0.method4544(local161.primary, (local28 - arg2) * 128 + (1 - arg4) * 64, local158, (local39 - arg3) * 128 + (1 - arg5) * 64, local1); + } + if (local161.secondary != null && local161.secondary.method4543()) { + arg0.method4544(local161.secondary, (local28 - arg2) * 128 + (1 - arg4) * 64, local158, (local39 - arg3) * 128 + (1 - arg5) * 64, local1); + } + } + for (@Pc(232) int local232 = 0; local232 < local71.sceneryLen; local232++) { + @Pc(241) Scenery local241 = local71.scenery[local232]; + if (local241 != null && local241.entity.method4543() && (local28 == local241.xMin || local28 == local3) && (local39 == local241.zMin || local39 == local11)) { + @Pc(270) int local270 = local241.xMax + 1 - local241.xMin; + @Pc(278) int local278 = local241.zMax + 1 - local241.zMin; + arg0.method4544(local241.entity, (local241.xMin - arg2) * 128 + (local270 - arg4) * 64, local158, (local241.zMin - arg3) * 128 + (local278 - arg5) * 64, local1); + } + } + } + } + } + } + } + local3--; + local1 = false; + } + } + } + + @OriginalMember(owner = "client!bh", name = "a", descriptor = "(IIII)V") + public static void setWallDecoration(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(7) Tile local7 = tiles[arg0][arg1][arg2]; + if (local7 == null) { + return; + } + @Pc(13) WallDecor local13 = local7.wallDecor; + if (local13 != null) { + local13.xOffset = local13.xOffset * arg3 / 16; + local13.zOffset = local13.zOffset * arg3 / 16; + } + } + + @OriginalMember(owner = "client!s", name = "a", descriptor = "([[F[[B[[B[Lclient!gi;II[[F[[B[[B[[II[[F)V") + public static void method3393(@OriginalArg(0) float[][] arg0, @OriginalArg(1) byte[][] arg1, @OriginalArg(2) byte[][] arg2, @OriginalArg(3) Light[] arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) float[][] arg6, @OriginalArg(7) byte[][] arg7, @OriginalArg(8) byte[][] arg8, @OriginalArg(9) int[][] arg9, @OriginalArg(11) float[][] arg10) { + for (@Pc(7) int local7 = 0; local7 < arg5; local7++) { + @Pc(18) Light local18 = arg3[local7]; + if (local18.level == arg4) { + @Pc(24) int local24 = 0; + @Pc(28) Light_Class45 local28 = new Light_Class45(); + @Pc(37) int local37 = (local18.x >> 7) - local18.radius; + @Pc(46) int local46 = (local18.z >> 7) - local18.radius; + if (local46 < 0) { + local24 = -local46; + local46 = 0; + } + @Pc(65) int local65 = local18.radius + (local18.z >> 7); + if (local65 > 103) { + local65 = 103; + } + @Pc(72) int local72; + @Pc(84) short local84; + @Pc(90) int local90; + @Pc(99) int local99; + @Pc(114) int local114; + @Pc(133) int local133; + @Pc(328) boolean local328; + @Pc(355) int local355; + for (local72 = local46; local72 <= local65; local72++) { + local84 = local18.aShortArray30[local24]; + local90 = local37 + (local84 >> 8); + local99 = local90 + (local84 & 0xFF) - 1; + if (local99 > 103) { + local99 = 103; + } + if (local90 < 0) { + local90 = 0; + } + for (local114 = local90; local114 <= local99; local114++) { + @Pc(125) int local125 = arg1[local114][local72] & 0xFF; + local133 = arg8[local114][local72] & 0xFF; + @Pc(135) boolean local135 = false; + @Pc(151) FloType local151; + @Pc(176) int[] local176; + @Pc(234) int[] local234; + if (local125 == 0) { + if (local133 == 0) { + continue; + } + local151 = FloTypeList.method4395(local133 - 1); + if (local151.baseColor == -1) { + continue; + } + if (arg7[local114][local72] != 0) { + local176 = anIntArrayArray35[arg7[local114][local72]]; + local28.anInt2016 += ((local176.length >> 1) - 2) * 3; + local28.anInt2019 += local176.length >> 1; + continue; + } + } else if (local133 != 0) { + local151 = FloTypeList.method4395(local133 - 1); + @Pc(224) byte local224; + if (local151.baseColor == -1) { + local224 = arg7[local114][local72]; + if (local224 != 0) { + local234 = anIntArrayArray8[local224]; + local28.anInt2016 += ((local234.length >> 1) - 2) * 3; + local28.anInt2019 += local234.length >> 1; + } + continue; + } + local224 = arg7[local114][local72]; + if (local224 != 0) { + local135 = true; + } + } + @Pc(275) Scenery local275 = getScenery(arg4, local114, local72); + if (local275 != null) { + @Pc(287) int local287 = (int) (local275.key >> 14) & 0x3F; + if (local287 == 9) { + local234 = null; + @Pc(302) int local302 = (int) (local275.key >> 20) & 0x3; + @Pc(315) boolean local315; + @Pc(343) short local343; + @Pc(349) int local349; + if ((local302 & 0x1) == 0) { + local328 = local99 >= local114 + 1; + local315 = local114 - 1 >= local90; + if (!local315 && local72 + 1 <= local65) { + local343 = local18.aShortArray30[local24 + 1]; + local349 = local37 + (local343 >> 8); + local355 = local349 + (local343 & 0xFF); + local315 = local349 < local114 && local114 < local355; + } + if (!local328 && local72 - 1 >= local46) { + local343 = local18.aShortArray30[local24 - 1]; + local349 = local37 + (local343 >> 8); + local355 = local349 + (local343 & 0xFF); + local328 = local114 > local349 && local114 < local355; + } + if (local315 && local328) { + local234 = anIntArrayArray35[0]; + } else if (local315) { + local234 = anIntArrayArray35[1]; + } else if (local328) { + local234 = anIntArrayArray35[1]; + } + } else { + local315 = local90 <= local114 - 1; + local328 = local114 + 1 <= local99; + if (!local315 && local72 - 1 >= local46) { + local343 = local18.aShortArray30[local24 - 1]; + local349 = (local343 >> 8) + local37; + local355 = local349 + (local343 & 0xFF); + local315 = local349 < local114 && local114 < local355; + } + if (!local328 && local72 + 1 <= local65) { + local343 = local18.aShortArray30[local24 + 1]; + local349 = (local343 >> 8) + local37; + local355 = local349 + (local343 & 0xFF); + local328 = local349 < local114 && local355 > local114; + } + if (local315 && local328) { + local234 = anIntArrayArray35[0]; + } else if (local315) { + local234 = anIntArrayArray35[1]; + } else if (local328) { + local234 = anIntArrayArray35[1]; + } + } + if (local234 != null) { + local28.anInt2016 += (local234.length >> 1) * 3 - 6; + local28.anInt2019 += local234.length >> 1; + } + continue; + } + } + if (local135) { + local234 = anIntArrayArray8[arg7[local114][local72]]; + local176 = anIntArrayArray35[arg7[local114][local72]]; + local28.anInt2016 += ((local176.length >> 1) - 2) * 3; + local28.anInt2016 += ((local234.length >> 1) - 2) * 3; + local28.anInt2019 += local176.length >> 1; + local28.anInt2019 += local234.length >> 1; + } else { + local176 = anIntArrayArray35[0]; + local28.anInt2016 += ((local176.length >> 1) - 2) * 3; + local28.anInt2019 += local176.length >> 1; + } + } + local24++; + } + local24 = 0; + local28.method1555(); + if ((local18.z >> 7) - local18.radius < 0) { + local24 = local18.radius - (local18.z >> 7); + } + for (local72 = local46; local72 <= local65; local72++) { + local84 = local18.aShortArray30[local24]; + local90 = (local84 >> 8) + local37; + local99 = (local84 & 0xFF) + local90 - 1; + if (local99 > 103) { + local99 = 103; + } + if (local90 < 0) { + local90 = 0; + } + for (local114 = local90; local114 <= local99; local114++) { + @Pc(775) int local775 = arg8[local114][local72] & 0xFF; + local133 = arg1[local114][local72] & 0xFF; + @Pc(789) byte local789 = arg2[local114][local72]; + @Pc(791) boolean local791 = false; + @Pc(805) FloType local805; + if (local133 == 0) { + if (local775 == 0) { + continue; + } + local805 = FloTypeList.method4395(local775 - 1); + if (local805.baseColor == -1) { + continue; + } + if (arg7[local114][local72] != 0) { + method2578(arg0, arg9, local114, arg6, local72, anIntArrayArray35[arg7[local114][local72]], local28, local18, arg10, arg2[local114][local72]); + continue; + } + } else if (local775 != 0) { + local805 = FloTypeList.method4395(local775 - 1); + if (local805.baseColor == -1) { + method2578(arg0, arg9, local114, arg6, local72, anIntArrayArray8[arg7[local114][local72]], local28, local18, arg10, arg2[local114][local72]); + continue; + } + @Pc(815) byte local815 = arg7[local114][local72]; + if (local815 != 0) { + local791 = true; + } + } + @Pc(899) Scenery local899 = getScenery(arg4, local114, local72); + if (local899 != null) { + @Pc(911) int local911 = (int) (local899.key >> 14) & 0x3F; + if (local911 == 9) { + @Pc(917) int[] local917 = null; + @Pc(925) int local925 = (int) (local899.key >> 20) & 0x3; + @Pc(973) int local973; + @Pc(947) boolean local947; + @Pc(961) short local961; + if ((local925 & 0x1) == 0) { + local328 = local114 - 1 >= local90; + local947 = local99 >= local114 + 1; + if (!local328 && local65 >= local72 + 1) { + local961 = local18.aShortArray30[local24 + 1]; + local355 = (local961 >> 8) + local37; + local973 = (local961 & 0xFF) + local355; + local328 = local114 > local355 && local973 > local114; + } + if (!local947 && local72 - 1 >= local46) { + local961 = local18.aShortArray30[local24 - 1]; + local355 = local37 + (local961 >> 8); + local973 = (local961 & 0xFF) + local355; + local947 = local355 < local114 && local973 > local114; + } + if (local328 && local947) { + local917 = anIntArrayArray35[0]; + } else if (local328) { + local917 = anIntArrayArray35[1]; + local789 = 1; + } else if (local947) { + local917 = anIntArrayArray35[1]; + local789 = 3; + } + } else { + local328 = local114 - 1 >= local90; + local947 = local99 >= local114 + 1; + if (!local328 && local46 <= local72 - 1) { + local961 = local18.aShortArray30[local24 - 1]; + local355 = local37 + (local961 >> 8); + local973 = (local961 & 0xFF) + local355; + local328 = local114 > local355 && local973 > local114; + } + if (!local947 && local65 >= local72 + 1) { + local961 = local18.aShortArray30[local24 + 1]; + local355 = local37 + (local961 >> 8); + local973 = (local961 & 0xFF) + local355; + local947 = local114 > local355 && local973 > local114; + } + if (local328 && local947) { + local917 = anIntArrayArray35[0]; + } else if (local328) { + local789 = 0; + local917 = anIntArrayArray35[1]; + } else if (local947) { + local917 = anIntArrayArray35[1]; + local789 = 2; + } + } + if (local917 != null) { + method2578(arg0, arg9, local114, arg6, local72, local917, local28, local18, arg10, local789); + } + continue; + } + } + if (local791) { + method2578(arg0, arg9, local114, arg6, local72, anIntArrayArray8[arg7[local114][local72]], local28, local18, arg10, arg2[local114][local72]); + method2578(arg0, arg9, local114, arg6, local72, anIntArrayArray35[arg7[local114][local72]], local28, local18, arg10, arg2[local114][local72]); + } else { + method2578(arg0, arg9, local114, arg6, local72, anIntArrayArray35[0], local28, local18, arg10, local789); + } + } + local24++; + } + if (local28.anInt2017 > 0 && local28.anInt2018 > 0) { + local28.method1554(); + local18.aClass45_1 = local28; + } + } + } + } + + @OriginalMember(owner = "client!pi", name = "a", descriptor = "([[[B[[B[[B[[I[[F[[I[[B[[B[[FI[[F[[I[[I[[II)[Lclient!hg;") + public static GlTile[] method3501(@OriginalArg(0) byte[][][] arg0, @OriginalArg(1) byte[][] arg1, @OriginalArg(2) byte[][] arg2, @OriginalArg(3) int[][] arg3, @OriginalArg(4) float[][] arg4, @OriginalArg(5) int[][] arg5, @OriginalArg(6) byte[][] arg6, @OriginalArg(7) byte[][] arg7, @OriginalArg(8) float[][] arg8, @OriginalArg(9) int arg9, @OriginalArg(10) float[][] arg10, @OriginalArg(11) int[][] arg11, @OriginalArg(12) int[][] arg12, @OriginalArg(13) int[][] arg13) { + @Pc(9) int[][] local9 = new int[105][105]; + @Pc(16) int local16; + for (@Pc(11) int local11 = 1; local11 <= 103; local11++) { + for (local16 = 1; local16 <= 103; local16++) { + @Pc(25) byte local25 = arg2[local11][local16]; + if (local25 == 0) { + local25 = arg2[local11 - 1][local16]; + } + if (local25 == 0) { + local25 = arg2[local11][local16 - 1]; + } + if (local25 == 0) { + local25 = arg2[local11 - 1][local16 - 1]; + } + if (local25 != 0) { + @Pc(77) FluType local77 = FluTypeList.get((local25 & 0xFF) - 1); + local9[local11][local16] = (local77.texture + 1 << 16) + local77.anInt4156; + } + } + } + @Pc(103) HashTable local103 = new HashTable(128); + @Pc(155) int local155; + @Pc(161) int local161; + @Pc(169) int local169; + @Pc(112) int local112; + for (local16 = 1; local16 <= 102; local16++) { + for (local112 = 1; local112 <= 102; local112++) { + if (arg2[local16][local112] != 0) { + @Pc(135) int[] local135; + if (arg6[local16][local112] == 0) { + local135 = anIntArrayArray35[0]; + } else { + local135 = anIntArrayArray8[arg1[local16][local112]]; + if (local135.length == 0) { + continue; + } + } + local155 = 0; + local161 = local9[local16][local112]; + local169 = local9[local16 + 1][local112]; + if (arg5 != null) { + local155 = arg5[local16][local112] & 0xFFFFFF; + } + @Pc(188) long local188 = (long) local155 | (long) local169 << 32; + @Pc(196) int local196 = local9[local16][local112 + 1]; + @Pc(206) int local206 = local9[local16 + 1][local112 + 1]; + @Pc(214) long local214 = (long) local196 << 32 | (long) local155; + @Pc(219) int local219 = local135.length / 2; + @Pc(227) long local227 = (long) local155 | (long) local161 << 32; + @Pc(233) GlTile local233 = (GlTile) local103.get(local227); + if (local233 == null) { + local233 = new GlTile((local161 >> 16) - 1, (float) (local161 & 0xFFFF), false, arg13 != null, local155); + local103.put(local233, local227); + } + local233.anInt2484++; + local233.anInt2482 += local219; + if (local188 != local227) { + local233 = (GlTile) local103.get(local188); + if (local233 == null) { + local233 = new GlTile((local169 >> 16) - 1, (float) (local169 & 0xFFFF), false, arg13 != null, local155); + local103.put(local233, local188); + } + local233.anInt2484++; + local233.anInt2482 += local219; + } + @Pc(340) long local340 = (long) local206 << 32 | (long) local155; + if (local340 != local227 && local340 != local188) { + local233 = (GlTile) local103.get(local340); + if (local233 == null) { + local233 = new GlTile((local206 >> 16) - 1, (float) (local206 & 0xFFFF), false, arg13 != null, local155); + local103.put(local233, local340); + } + local233.anInt2482 += local219; + local233.anInt2484++; + } + if (local214 != local227 && local188 != local214 && local214 != local340) { + local233 = (GlTile) local103.get(local214); + if (local233 == null) { + local233 = new GlTile((local196 >> 16) - 1, (float) (local196 & 0xFFFF), false, arg13 != null, local155); + local103.put(local233, local214); + } + local233.anInt2484++; + local233.anInt2482 += local219; + } + } + } + } + @Pc(493) GlTile local493; + for (local493 = (GlTile) local103.head(); local493 != null; local493 = (GlTile) local103.next()) { + local493.method1940(); + } + for (local16 = 1; local16 <= 102; local16++) { + for (local112 = 1; local112 <= 102; local112++) { + @Pc(524) byte local524 = arg2[local16][local112]; + if (local524 != 0) { + if ((arg0[arg9][local16][local112] & 0x8) != 0) { + local155 = 0; + } else if ((arg0[1][local16][local112] & 0x2) == 2 && arg9 > 0) { + local155 = arg9 - 1; + } else { + local155 = arg9; + } + local161 = 0; + @Pc(574) boolean[] local574 = null; + local169 = 128; + if (arg5 != null) { + local169 = arg5[local16][local112] >>> 24 << 3; + local161 = arg5[local16][local112] & 0xFFFFFF; + } + @Pc(655) int local655; + @Pc(712) int local712; + @Pc(614) int[] local614; + @Pc(628) byte local628; + @Pc(678) int local678; + @Pc(754) int local754; + if (arg6[local16][local112] == 0) { + local655 = local524 == arg2[local16 - 1][local112 - 1] ? 1 : -1; + local614 = anIntArrayArray35[0]; + local678 = local524 == arg2[local16 + 1][local112 - 1] ? 1 : -1; + if (arg2[local16][local112 - 1] == local524) { + local678++; + local655++; + } else { + local655--; + local678--; + } + local712 = local524 == arg2[local16 + 1][local112 + 1] ? 1 : -1; + if (local524 == arg2[local16 + 1][local112]) { + local712++; + local678++; + } else { + local678--; + local712--; + } + local754 = local524 == arg2[local16 - 1][local112 + 1] ? 1 : -1; + if (arg2[local16][local112 + 1] == local524) { + local754++; + local712++; + } else { + local712--; + local754--; + } + if (arg2[local16 - 1][local112] == local524) { + local754++; + local655++; + } else { + local754--; + local655--; + } + @Pc(789) int local789 = local655 - local712; + @Pc(794) int local794 = local678 - local754; + if (local794 < 0) { + local794 = -local794; + } + if (local789 < 0) { + local789 = -local789; + } + local628 = (byte) (local794 <= local789 ? 0 : 1); + arg7[local16][local112] = local628; + } else { + local614 = anIntArrayArray8[arg1[local16][local112]]; + local574 = aBooleanArrayArray2[arg1[local16][local112]]; + local628 = arg7[local16][local112]; + if (local614.length == 0) { + continue; + } + } + local655 = local9[local16][local112]; + local678 = local9[local16 + 1][local112]; + local712 = local9[local16 + 1][local112 + 1]; + @Pc(861) long local861 = (long) local655 << 32 | (long) local161; + @Pc(869) long local869 = (long) local678 << 32 | (long) local161; + @Pc(877) long local877 = (long) local712 << 32 | (long) local161; + @Pc(883) int local883 = arg11[local16][local112]; + local754 = local9[local16][local112 + 1]; + @Pc(901) int local901 = arg11[local16 + 1][local112 + 1]; + @Pc(909) int local909 = arg11[local16 + 1][local112]; + @Pc(917) long local917 = (long) local161 | (long) local754 << 32; + @Pc(925) int local925 = arg11[local16][local112 + 1]; + @Pc(931) int local931 = arg3[local16][local112]; + @Pc(939) int local939 = arg3[local16 + 1][local112]; + @Pc(949) int local949 = arg3[local16 + 1][local112 + 1]; + @Pc(957) int local957 = arg3[local16][local112 + 1]; + @Pc(963) int local963 = (local678 >> 16) - 1; + @Pc(969) int local969 = (local655 >> 16) - 1; + @Pc(975) int local975 = (local712 >> 16) - 1; + @Pc(981) GlTile local981 = (GlTile) local103.get(local861); + method1291(arg13, local655 <= local655, method588(local969, local883, local931), local981, local614, local112, local155, local16, local655 <= local712, arg8, local754 >= local655, arg4, local169, method588(local969, local925, local957), method588(local969, local901, local949), local655 <= local678, arg12, arg10, local628, method588(local969, local909, local939), local574); + @Pc(1050) int local1050 = (local754 >> 16) - 1; + if (local869 != local861) { + local981 = (GlTile) local103.get(local869); + method1291(arg13, local678 <= local655, method588(local963, local883, local931), local981, local614, local112, local155, local16, local712 >= local678, arg8, local678 <= local754, arg4, local169, method588(local963, local925, local957), method588(local963, local901, local949), local678 <= local678, arg12, arg10, local628, method588(local963, local909, local939), local574); + } + if (local877 != local861 && local877 != local869) { + local981 = (GlTile) local103.get(local877); + method1291(arg13, local655 >= local712, method588(local975, local883, local931), local981, local614, local112, local155, local16, local712 <= local712, arg8, local712 <= local754, arg4, local169, method588(local975, local925, local957), method588(local975, local901, local949), local678 >= local712, arg12, arg10, local628, method588(local975, local909, local939), local574); + } + if (local917 != local861 && local917 != local869 && local917 != local877) { + local981 = (GlTile) local103.get(local917); + method1291(arg13, local754 <= local655, method588(local1050, local883, local931), local981, local614, local112, local155, local16, local754 <= local712, arg8, local754 >= local754, arg4, local169, method588(local1050, local925, local957), method588(local1050, local901, local949), local678 >= local754, arg12, arg10, local628, method588(local1050, local909, local939), local574); + } + } + } + } + for (local493 = (GlTile) local103.head(); local493 != null; local493 = (GlTile) local103.next()) { + if (local493.anInt2483 == 0) { + local493.unlink(); + } else { + local493.method1943(); + } + } + local16 = local103.size(); + @Pc(1348) GlTile[] local1348 = new GlTile[local16]; + local103.method3865(local1348); + @Pc(1358) long[] local1358 = new long[local16]; + for (local155 = 0; local155 < local16; local155++) { + local1358[local155] = local1348[local155].key; + } + ArrayUtils.sort(local1358, local1348); + return local1348; + } + + @OriginalMember(owner = "client!ec", name = "a", descriptor = "([[IZILclient!hg;[IIIIZ[[FZI[[FIIIZ[[I[[FBI[Z)V") + public static void method1291(@OriginalArg(0) int[][] arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) int arg2, @OriginalArg(3) GlTile arg3, @OriginalArg(4) int[] arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) boolean arg8, @OriginalArg(9) float[][] arg9, @OriginalArg(10) boolean arg10, @OriginalArg(12) float[][] arg11, @OriginalArg(13) int arg12, @OriginalArg(14) int arg13, @OriginalArg(15) int arg14, @OriginalArg(16) boolean arg15, @OriginalArg(17) int[][] arg16, @OriginalArg(18) float[][] arg17, @OriginalArg(19) byte arg18, @OriginalArg(20) int arg19, @OriginalArg(21) boolean[] arg20) { + @Pc(11) int local11 = (arg2 << 8) + (arg1 ? 255 : 0); + @Pc(25) int local25 = (arg8 ? 255 : 0) + (arg14 << 8); + @Pc(31) int[] local31 = new int[arg4.length / 2]; + @Pc(41) int local41 = (arg10 ? 255 : 0) + (arg13 << 8); + @Pc(51) int local51 = (arg19 << 8) + (arg15 ? 255 : 0); + for (@Pc(53) int local53 = 0; local53 < local31.length; local53++) { + @Pc(67) int local67 = arg4[local53 + local53]; + @Pc(80) int[][] local80 = arg0 == null || arg20 == null || !arg20[local53] ? arg16 : arg0; + @Pc(88) int local88 = arg4[local53 + local53 + 1]; + local31[local53] = method3683(local41, (float) arg12, local11, local51, arg0, local80, arg7, arg17, local25, arg18, false, arg3, arg9, arg5, local67, arg11, local88); + } + arg3.method1945(arg6, arg7, arg5, local31, null, false); + } + + @OriginalMember(owner = "client!ge", name = "a", descriptor = "(IIIIIIII)V") + public static void method1698(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6) { + if (arg1 < 1 || arg4 < 1 || arg1 > 102 || arg4 > 102) { + return; + } + @Pc(39) int local39; + if (!allLevelsAreVisible() && (renderFlags[0][arg1][arg4] & 0x2) == 0) { + local39 = arg2; + if ((renderFlags[arg2][arg1][arg4] & 0x8) != 0) { + local39 = 0; + } + if (local39 != centralPlane) { + return; + } + } + local39 = arg2; + if (arg2 < 3 && (renderFlags[1][arg1][arg4] & 0x2) == 2) { + local39 = arg2 + 1; + } + method1144(arg4, arg1, arg2, arg6, local39, PathFinder.collisionMaps[arg2]); + if (arg0 >= 0) { + @Pc(92) boolean local92 = Preferences.showGroundDecorations; + Preferences.showGroundDecorations = true; + addLoc(local39, false, arg2, false, PathFinder.collisionMaps[arg2], arg0, arg5, arg1, arg4, arg3); + Preferences.showGroundDecorations = local92; + } + } + + @OriginalMember(owner = "client!af", name = "a", descriptor = "(IIIIIILclient!th;IJ)Z") + public static boolean method35(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) Entity arg6, @OriginalArg(8) long arg7) { + if (arg6 == null) { + return true; + } else { + @Pc(11) int local11 = arg1 * 128 + arg4 * 64; + @Pc(19) int local19 = arg2 * 128 + arg5 * 64; + return method2256(arg0, arg1, arg2, arg4, arg5, local11, local19, arg3, arg6, 0, false, arg7); + } + } + + @OriginalMember(owner = "client!ac", name = "a", descriptor = "(IIII)I") + public static int getRenderLevel(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2) { + if ((renderFlags[arg2][arg1][arg0] & 0x8) == 0) { + return arg2 <= 0 || (renderFlags[1][arg1][arg0] & 0x2) == 0 ? arg2 : arg2 - 1; + } else { + return 0; + } + } + + @OriginalMember(owner = "client!ke", name = "a", descriptor = "(Lclient!rh;IIIIIIIZ)V") + public static void method2610(@OriginalArg(0) PlainTile arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) boolean arg8) { + @Pc(6) int local6; + @Pc(7) int local7 = local6 = (arg6 << 7) - cameraX; + @Pc(14) int local14; + @Pc(15) int local15 = local14 = (arg7 << 7) - cameraZ; + @Pc(20) int local20; + @Pc(21) int local21 = local20 = local7 + 128; + @Pc(26) int local26; + @Pc(27) int local27 = local26 = local15 + 128; + @Pc(37) int local37 = tileHeights[arg1][arg6][arg7] - cameraY; + @Pc(49) int local49 = tileHeights[arg1][arg6 + 1][arg7] - cameraY; + @Pc(63) int local63 = tileHeights[arg1][arg6 + 1][arg7 + 1] - cameraY; + @Pc(75) int local75 = tileHeights[arg1][arg6][arg7 + 1] - cameraY; + @Pc(85) int local85 = local15 * arg4 + local7 * arg5 >> 16; + @Pc(95) int local95 = local15 * arg5 - local7 * arg4 >> 16; + @Pc(97) int local97 = local85; + @Pc(107) int local107 = local37 * arg3 - local95 * arg2 >> 16; + @Pc(117) int local117 = local37 * arg2 + local95 * arg3 >> 16; + @Pc(119) int local119 = local107; + if (local117 < 50) { + return; + } + local85 = local14 * arg4 + local21 * arg5 >> 16; + @Pc(143) int local143 = local14 * arg5 - local21 * arg4 >> 16; + local21 = local85; + local85 = local49 * arg3 - local143 * arg2 >> 16; + @Pc(165) int local165 = local49 * arg2 + local143 * arg3 >> 16; + local49 = local85; + if (local165 < 50) { + return; + } + local85 = local27 * arg4 + local20 * arg5 >> 16; + local27 = local27 * arg5 - local20 * arg4 >> 16; + @Pc(193) int local193 = local85; + local85 = local63 * arg3 - local27 * arg2 >> 16; + local27 = local63 * arg2 + local27 * arg3 >> 16; + local63 = local85; + if (local27 < 50) { + return; + } + local85 = local26 * arg4 + local6 * arg5 >> 16; + @Pc(239) int local239 = local26 * arg5 - local6 * arg4 >> 16; + @Pc(241) int local241 = local85; + local85 = local75 * arg3 - local239 * arg2 >> 16; + @Pc(261) int local261 = local75 * arg2 + local239 * arg3 >> 16; + if (local261 < 50) { + return; + } + @Pc(275) int local275 = Rasteriser.centerX + (local97 << 9) / local117; + @Pc(283) int local283 = Rasteriser.centerY + (local119 << 9) / local117; + @Pc(291) int local291 = Rasteriser.centerX + (local21 << 9) / local165; + @Pc(299) int local299 = Rasteriser.centerY + (local49 << 9) / local165; + @Pc(307) int local307 = Rasteriser.centerX + (local193 << 9) / local27; + @Pc(315) int local315 = Rasteriser.centerY + (local63 << 9) / local27; + @Pc(323) int local323 = Rasteriser.centerX + (local241 << 9) / local261; + @Pc(331) int local331 = Rasteriser.centerY + (local85 << 9) / local261; + Rasteriser.alpha = 0; + @Pc(475) int local475; + if ((local307 - local323) * (local299 - local331) - (local315 - local331) * (local291 - local323) > 0) { + if (MiniMenu.aBoolean187 && method583(MiniMenu.anInt2388 + Rasteriser.centerX, MiniMenu.anInt3259 + Rasteriser.centerY, local315, local331, local299, local307, local323, local291)) { + MiniMenu.anInt1742 = arg6; + MiniMenu.anInt2954 = arg7; + } + if (!GlRenderer.enabled && !arg8) { + Rasteriser.testX = local307 < 0 || local323 < 0 || local291 < 0 || local307 > Rasteriser.width || local323 > Rasteriser.width || local291 > Rasteriser.width; + if (arg0.anInt4869 == -1) { + if (arg0.anInt4865 != 12345678) { + Rasteriser.fillGouraudTriangle(local315, local331, local299, local307, local323, local291, arg0.anInt4865, arg0.anInt4864, arg0.anInt4867); + } + } else if (!Preferences.manyGroundTextures) { + local475 = Rasteriser.textureProvider.getAverageColor(arg0.anInt4869); + Rasteriser.fillGouraudTriangle(local315, local331, local299, local307, local323, local291, ColorUtils.multiplyLightness3(local475, arg0.anInt4865), ColorUtils.multiplyLightness3(local475, arg0.anInt4864), ColorUtils.multiplyLightness3(local475, arg0.anInt4867)); + } else if (arg0.aBoolean241) { + Rasteriser.fillTexturedTriangle(local315, local331, local299, local307, local323, local291, arg0.anInt4865, arg0.anInt4864, arg0.anInt4867, local97, local21, local241, local119, local49, local85, local117, local165, local261, arg0.anInt4869); + } else { + Rasteriser.fillTexturedTriangle(local315, local331, local299, local307, local323, local291, arg0.anInt4865, arg0.anInt4864, arg0.anInt4867, local193, local241, local21, local63, local85, local49, local27, local261, local165, arg0.anInt4869); + } + } + } + if ((local275 - local291) * (local331 - local299) - (local283 - local299) * (local323 - local291) <= 0) { + return; + } + if (MiniMenu.aBoolean187 && method583(MiniMenu.anInt2388 + Rasteriser.centerX, MiniMenu.anInt3259 + Rasteriser.centerY, local283, local299, local331, local275, local291, local323)) { + MiniMenu.anInt1742 = arg6; + MiniMenu.anInt2954 = arg7; + } + if (GlRenderer.enabled || arg8) { + return; + } + Rasteriser.testX = local275 < 0 || local291 < 0 || local323 < 0 || local275 > Rasteriser.width || local291 > Rasteriser.width || local323 > Rasteriser.width; + if (arg0.anInt4869 == -1) { + if (arg0.anInt4872 != 12345678) { + Rasteriser.fillGouraudTriangle(local283, local299, local331, local275, local291, local323, arg0.anInt4872, arg0.anInt4867, arg0.anInt4864); + } + } else if (Preferences.manyGroundTextures) { + Rasteriser.fillTexturedTriangle(local283, local299, local331, local275, local291, local323, arg0.anInt4872, arg0.anInt4867, arg0.anInt4864, local97, local21, local241, local119, local49, local85, local117, local165, local261, arg0.anInt4869); + } else { + local475 = Rasteriser.textureProvider.getAverageColor(arg0.anInt4869); + Rasteriser.fillGouraudTriangle(local283, local299, local331, local275, local291, local323, ColorUtils.multiplyLightness3(local475, arg0.anInt4872), ColorUtils.multiplyLightness3(local475, arg0.anInt4867), ColorUtils.multiplyLightness3(local475, arg0.anInt4864)); + } + } + + @OriginalMember(owner = "client!al", name = "a", descriptor = "(III)Z") + public static boolean method187(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(7) int local7 = anIntArrayArrayArray12[arg0][arg1][arg2]; + if (local7 == -anInt437) { + return false; + } else if (local7 == anInt437) { + return true; + } else { + @Pc(22) int local22 = arg1 << 7; + @Pc(26) int local26 = arg2 << 7; + if (method4394(local22 + 1, tileHeights[arg0][arg1][arg2], local26 + 1) && method4394(local22 + 128 - 1, tileHeights[arg0][arg1 + 1][arg2], local26 + 1) && method4394(local22 + 128 - 1, tileHeights[arg0][arg1 + 1][arg2 + 1], local26 + 128 - 1) && method4394(local22 + 1, tileHeights[arg0][arg1][arg2 + 1], local26 + 128 - 1)) { + anIntArrayArrayArray12[arg0][arg1][arg2] = anInt437; + return true; + } else { + anIntArrayArrayArray12[arg0][arg1][arg2] = -anInt437; + return false; + } + } + } + + @OriginalMember(owner = "client!mj", name = "a", descriptor = "(IIIII)Z") + public static boolean method3049(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + @Pc(9) int local9 = arg3 * anInt5205 + arg0 * anInt2222 >> 16; + @Pc(19) int local19 = arg3 * anInt2222 - arg0 * anInt5205 >> 16; + @Pc(29) int local29 = arg1 * anInt2886 + local19 * anInt3038 >> 16; + @Pc(39) int local39 = arg1 * anInt3038 - local19 * anInt2886 >> 16; + if (local29 < 1) { + local29 = 1; + } + @Pc(50) int local50 = (local9 << 9) / local29; + @Pc(56) int local56 = (local39 << 9) / local29; + @Pc(66) int local66 = arg2 * anInt2886 + local19 * anInt3038 >> 16; + @Pc(76) int local76 = arg2 * anInt3038 - local19 * anInt2886 >> 16; + if (local66 < 1) { + local66 = 1; + } + @Pc(87) int local87 = (local9 << 9) / local66; + @Pc(93) int local93 = (local76 << 9) / local66; + if (local29 < 50 && local66 < 50) { + return false; + } else if (local29 > arg4 && local66 > arg4) { + return false; + } else if (local50 < Rasteriser.screenLowerX && local87 < Rasteriser.screenLowerX) { + return false; + } else if (local50 > Rasteriser.screenUpperX && local87 > Rasteriser.screenUpperX) { + return false; + } else if (local56 < Rasteriser.screenLowerY && local93 < Rasteriser.screenLowerY) { + return false; + } else { + return local56 <= Rasteriser.screenUpperY || local93 <= Rasteriser.screenUpperY; + } + } + + @OriginalMember(owner = "client!kd", name = "a", descriptor = "([[F[[II[[FI[ILclient!fj;BLclient!gi;[[FI)V") + public static void method2578(@OriginalArg(0) float[][] arg0, @OriginalArg(1) int[][] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) float[][] arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int[] arg5, @OriginalArg(6) Light_Class45 arg6, @OriginalArg(8) Light arg7, @OriginalArg(9) float[][] arg8, @OriginalArg(10) int arg9) { + @Pc(7) int[] local7 = new int[arg5.length / 2]; + for (@Pc(13) int local13 = 0; local13 < local7.length; local13++) { + @Pc(27) int local27 = arg5[local13 + local13]; + @Pc(35) int local35 = arg5[local13 + local13 + 1]; + @Pc(53) int local53; + if (arg9 == 1) { + local53 = local27; + local27 = local35; + local35 = 128 - local53; + } else if (arg9 == 2) { + local35 = 128 - local35; + local27 = 128 - local27; + } else if (arg9 == 3) { + local53 = local27; + local27 = 128 - local35; + local35 = local53; + } + @Pc(123) float local123; + @Pc(107) float local107; + @Pc(115) float local115; + if (local27 == 0 && local35 == 0) { + local123 = arg3[arg2][arg4]; + local115 = arg8[arg2][arg4]; + local107 = arg0[arg2][arg4]; + } else if (local27 == 128 && local35 == 0) { + local107 = arg0[arg2 + 1][arg4]; + local115 = arg8[arg2 + 1][arg4]; + local123 = arg3[arg2 + 1][arg4]; + } else if (local27 == 128 && local35 == 128) { + local123 = arg3[arg2 + 1][arg4 + 1]; + local115 = arg8[arg2 + 1][arg4 + 1]; + local107 = arg0[arg2 + 1][arg4 + 1]; + } else if (local27 == 0 && local35 == 128) { + local107 = arg0[arg2][arg4 + 1]; + local123 = arg3[arg2][arg4 + 1]; + local115 = arg8[arg2][arg4 + 1]; + } else { + local115 = arg8[arg2][arg4]; + local107 = arg0[arg2][arg4]; + @Pc(187) float local187 = (float) local27 / 128.0F; + local123 = arg3[arg2][arg4]; + @Pc(208) float local208 = local123 + (arg3[arg2 + 1][arg4] - local123) * local187; + @Pc(222) float local222 = local107 + local187 * (arg0[arg2 + 1][arg4] - local107); + @Pc(237) float local237 = local115 + (arg8[arg2 + 1][arg4] - local115) * local187; + @Pc(245) float local245 = arg8[arg2][arg4 + 1]; + @Pc(261) float local261 = local245 + (arg8[arg2 + 1][arg4 + 1] - local245) * local187; + @Pc(269) float local269 = arg3[arg2][arg4 + 1]; + @Pc(274) float local274 = (float) local35 / 128.0F; + local115 = local237 + (local261 - local237) * local274; + @Pc(291) float local291 = arg0[arg2][arg4 + 1]; + @Pc(307) float local307 = local291 + (arg0[arg2 + 1][arg4 + 1] - local291) * local187; + @Pc(324) float local324 = local269 + (arg3[arg2 + 1][arg4 + 1] - local269) * local187; + local123 = local208 + (local324 - local208) * local274; + local107 = local222 + (local307 - local222) * local274; + } + @Pc(393) int local393 = (arg2 << 7) + local27; + @Pc(400) int local400 = (arg4 << 7) + local35; + @Pc(408) int local408 = method3361(local27, arg4, arg1, arg2, local35); + local7[local13] = arg6.method1553(arg7, local393, local408, local400, local115, local123, local107); + } + arg6.method1557(local7); + } + + @OriginalMember(owner = "client!jj", name = "a", descriptor = "()V") + public static void method2419() { + anInt4870 = 0; + label194: + for (@Pc(3) int local3 = 0; local3 < anInt917; local3++) { + @Pc(10) SceneGraph_Class120 local10 = aClass120Array1[local3]; + @Pc(14) int local14; + if (anIntArray8 != null) { + for (local14 = 0; local14 < anIntArray8.length; local14++) { + if (anIntArray8[local14] != -1000000 && (local10.anInt4444 <= anIntArray8[local14] || local10.anInt4447 <= anIntArray8[local14]) && (local10.anInt4460 <= anIntArray234[local14] || local10.anInt4445 <= anIntArray234[local14]) && (local10.anInt4460 >= anIntArray292[local14] || local10.anInt4445 >= anIntArray292[local14]) && (local10.anInt4458 <= anIntArray454[local14] || local10.anInt4449 <= anIntArray454[local14]) && (local10.anInt4458 >= anIntArray427[local14] || local10.anInt4449 >= anIntArray427[local14])) { + continue label194; + } + } + } + @Pc(115) int local115; + @Pc(126) int local126; + @Pc(158) int local158; + @Pc(137) boolean local137; + if (local10.anInt4453 == 1) { + local14 = local10.anInt4452 + visibility - anInt4069; + if (local14 >= 0 && local14 <= visibility + visibility) { + local115 = local10.anInt4461 + visibility - anInt4539; + if (local115 < 0) { + local115 = 0; + } + local126 = local10.anInt4464 + visibility - anInt4539; + if (local126 > visibility + visibility) { + local126 = visibility + visibility; + } + local137 = false; + while (local115 <= local126) { + if (aBooleanArrayArray1[local14][local115++]) { + local137 = true; + break; + } + } + if (local137) { + local158 = cameraX - local10.anInt4460; + if (local158 > 32) { + local10.anInt4462 = 1; + } else { + if (local158 >= -32) { + continue; + } + local10.anInt4462 = 2; + local158 = -local158; + } + local10.anInt4454 = (local10.anInt4458 - cameraZ << 8) / local158; + local10.anInt4450 = (local10.anInt4449 - cameraZ << 8) / local158; + local10.anInt4459 = (local10.anInt4444 - cameraY << 8) / local158; + local10.anInt4463 = (local10.anInt4447 - cameraY << 8) / local158; + aClass120Array2[anInt4870++] = local10; + } + } + } else if (local10.anInt4453 == 2) { + local14 = local10.anInt4461 + visibility - anInt4539; + if (local14 >= 0 && local14 <= visibility + visibility) { + local115 = local10.anInt4452 + visibility - anInt4069; + if (local115 < 0) { + local115 = 0; + } + local126 = local10.anInt4446 + visibility - anInt4069; + if (local126 > visibility + visibility) { + local126 = visibility + visibility; + } + local137 = false; + while (local115 <= local126) { + if (aBooleanArrayArray1[local115++][local14]) { + local137 = true; + break; + } + } + if (local137) { + local158 = cameraZ - local10.anInt4458; + if (local158 > 32) { + local10.anInt4462 = 3; + } else { + if (local158 >= -32) { + continue; + } + local10.anInt4462 = 4; + local158 = -local158; + } + local10.anInt4448 = (local10.anInt4460 - cameraX << 8) / local158; + local10.anInt4456 = (local10.anInt4445 - cameraX << 8) / local158; + local10.anInt4459 = (local10.anInt4444 - cameraY << 8) / local158; + local10.anInt4463 = (local10.anInt4447 - cameraY << 8) / local158; + aClass120Array2[anInt4870++] = local10; + } + } + } else if (local10.anInt4453 == 4) { + local14 = local10.anInt4444 - cameraY; + if (local14 > 128) { + local115 = local10.anInt4461 + visibility - anInt4539; + if (local115 < 0) { + local115 = 0; + } + local126 = local10.anInt4464 + visibility - anInt4539; + if (local126 > visibility + visibility) { + local126 = visibility + visibility; + } + if (local115 <= local126) { + @Pc(408) int local408 = local10.anInt4452 + visibility - anInt4069; + if (local408 < 0) { + local408 = 0; + } + local158 = local10.anInt4446 + visibility - anInt4069; + if (local158 > visibility + visibility) { + local158 = visibility + visibility; + } + @Pc(430) boolean local430 = false; + label166: + for (@Pc(432) int local432 = local408; local432 <= local158; local432++) { + for (@Pc(437) int local437 = local115; local437 <= local126; local437++) { + if (aBooleanArrayArray1[local432][local437]) { + local430 = true; + break label166; + } + } + } + if (local430) { + local10.anInt4462 = 5; + local10.anInt4448 = (local10.anInt4460 - cameraX << 8) / local14; + local10.anInt4456 = (local10.anInt4445 - cameraX << 8) / local14; + local10.anInt4454 = (local10.anInt4458 - cameraZ << 8) / local14; + local10.anInt4450 = (local10.anInt4449 - cameraZ << 8) / local14; + aClass120Array2[anInt4870++] = local10; + } + } + } + } + } + } + + @OriginalMember(owner = "client!bi", name = "a", descriptor = "(IIIIIIII)Z") + public static boolean method583(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7) { + if (arg1 < arg2 && arg1 < arg3 && arg1 < arg4) { + return false; + } else if (arg1 > arg2 && arg1 > arg3 && arg1 > arg4) { + return false; + } else if (arg0 < arg5 && arg0 < arg6 && arg0 < arg7) { + return false; + } else if (arg0 > arg5 && arg0 > arg6 && arg0 > arg7) { + return false; + } else { + @Pc(59) int local59 = (arg1 - arg2) * (arg6 - arg5) - (arg0 - arg5) * (arg3 - arg2); + @Pc(75) int local75 = (arg1 - arg4) * (arg5 - arg7) - (arg0 - arg7) * (arg2 - arg4); + @Pc(91) int local91 = (arg1 - arg3) * (arg7 - arg6) - (arg0 - arg6) * (arg4 - arg3); + return local59 * local91 > 0 && local91 * local75 > 0; + } + } + + @OriginalMember(owner = "client!lh", name = "a", descriptor = "(Lclient!fg;IIIIIIZ)V") + public static void method2762(@OriginalArg(0) ShapedTile arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) boolean arg7) { + @Pc(3) int local3 = arg0.anIntArray168.length; + @Pc(5) int local5; + @Pc(15) int local15; + @Pc(22) int local22; + @Pc(29) int local29; + @Pc(39) int local39; + for (local5 = 0; local5 < local3; local5++) { + local15 = arg0.anIntArray168[local5] - cameraX; + local22 = arg0.anIntArray160[local5] - cameraY; + local29 = arg0.anIntArray163[local5] - cameraZ; + local39 = local29 * arg3 + local15 * arg4 >> 16; + @Pc(49) int local49 = local29 * arg4 - local15 * arg3 >> 16; + @Pc(61) int local61 = local22 * arg2 - local49 * arg1 >> 16; + @Pc(71) int local71 = local22 * arg1 + local49 * arg2 >> 16; + if (local71 < 50) { + return; + } + if (arg0.anIntArray161 != null) { + anIntArray159[local5] = local39; + anIntArray170[local5] = local61; + anIntArray169[local5] = local71; + } + anIntArray165[local5] = Rasteriser.centerX + (local39 << 9) / local71; + anIntArray164[local5] = Rasteriser.centerY + (local61 << 9) / local71; + } + Rasteriser.alpha = 0; + local3 = arg0.anIntArray166.length; + for (local5 = 0; local5 < local3; local5++) { + local15 = arg0.anIntArray166[local5]; + local22 = arg0.anIntArray162[local5]; + local29 = arg0.anIntArray158[local5]; + local39 = anIntArray165[local15]; + @Pc(148) int local148 = anIntArray165[local22]; + @Pc(152) int local152 = anIntArray165[local29]; + @Pc(156) int local156 = anIntArray164[local15]; + @Pc(160) int local160 = anIntArray164[local22]; + @Pc(164) int local164 = anIntArray164[local29]; + if ((local39 - local148) * (local164 - local160) - (local156 - local160) * (local152 - local148) > 0) { + if (MiniMenu.aBoolean187 && method583(MiniMenu.anInt2388 + Rasteriser.centerX, MiniMenu.anInt3259 + Rasteriser.centerY, local156, local160, local164, local39, local148, local152)) { + MiniMenu.anInt1742 = arg5; + MiniMenu.anInt2954 = arg6; + } + if (!GlRenderer.enabled && !arg7) { + Rasteriser.testX = local39 < 0 || local148 < 0 || local152 < 0 || local39 > Rasteriser.width || local148 > Rasteriser.width || local152 > Rasteriser.width; + if (arg0.anIntArray161 == null || arg0.anIntArray161[local5] == -1) { + if (arg0.anIntArray167[local5] != 12345678) { + Rasteriser.fillGouraudTriangle(local156, local160, local164, local39, local148, local152, arg0.anIntArray167[local5], arg0.anIntArray172[local5], arg0.anIntArray171[local5]); + } + } else if (!Preferences.manyGroundTextures) { + @Pc(373) int local373 = Rasteriser.textureProvider.getAverageColor(arg0.anIntArray161[local5]); + Rasteriser.fillGouraudTriangle(local156, local160, local164, local39, local148, local152, ColorUtils.multiplyLightness3(local373, arg0.anIntArray167[local5]), ColorUtils.multiplyLightness3(local373, arg0.anIntArray172[local5]), ColorUtils.multiplyLightness3(local373, arg0.anIntArray171[local5])); + } else if (arg0.aBoolean113) { + Rasteriser.fillTexturedTriangle(local156, local160, local164, local39, local148, local152, arg0.anIntArray167[local5], arg0.anIntArray172[local5], arg0.anIntArray171[local5], anIntArray159[0], anIntArray159[1], anIntArray159[3], anIntArray170[0], anIntArray170[1], anIntArray170[3], anIntArray169[0], anIntArray169[1], anIntArray169[3], arg0.anIntArray161[local5]); + } else { + Rasteriser.fillTexturedTriangle(local156, local160, local164, local39, local148, local152, arg0.anIntArray167[local5], arg0.anIntArray172[local5], arg0.anIntArray171[local5], anIntArray159[local15], anIntArray159[local22], anIntArray159[local29], anIntArray170[local15], anIntArray170[local22], anIntArray170[local29], anIntArray169[local15], anIntArray169[local22], anIntArray169[local29], arg0.anIntArray161[local5]); + } + } + } + } + } + + @OriginalMember(owner = "client!a", name = "a", descriptor = "([[F[[F[[II[[F[[B[[II[[B[[B[[B[[[B)[Lclient!hg;") + public static GlTile[] method2(@OriginalArg(0) float[][] arg0, @OriginalArg(1) float[][] arg1, @OriginalArg(2) int[][] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) float[][] arg4, @OriginalArg(5) byte[][] arg5, @OriginalArg(6) int[][] arg6, @OriginalArg(8) byte[][] arg7, @OriginalArg(9) byte[][] arg8, @OriginalArg(10) byte[][] arg9, @OriginalArg(11) byte[][][] arg10) { + @Pc(10) HashTable local10 = new HashTable(128); + @Pc(12) int local12; + @Pc(17) int local17; + @Pc(30) int local30; + @Pc(38) int local38; + @Pc(131) int local131; + @Pc(168) int local168; + @Pc(143) int local143; + @Pc(163) int local163; + @Pc(153) int local153; + @Pc(190) int local190; + @Pc(180) int local180; + @Pc(214) int local214; + @Pc(202) int local202; + @Pc(226) int local226; + @Pc(274) byte local274; + @Pc(299) int local299; + @Pc(317) int local317; + @Pc(127) int local127; + @Pc(133) int local133; + @Pc(777) int local777; + @Pc(1035) int local1035; + @Pc(1055) boolean[] local1055; + @Pc(1068) boolean[] local1068; + @Pc(1086) boolean[] local1086; + for (local12 = 1; local12 <= 102; local12++) { + for (local17 = 1; local17 <= 102; local17++) { + local30 = arg8[local12][local17] & 0xFF; + local38 = arg9[local12][local17] & 0xFF; + if (local38 != 0) { + @Pc(50) FloType local50 = FloTypeList.method4395(local38 - 1); + if (local50.baseColor == -1) { + continue; + } + @Pc(61) GlTile local61 = method4212(local10, local50); + @Pc(67) byte local67 = arg7[local12][local17]; + @Pc(71) int[] local71 = anIntArrayArray35[local67]; + local61.anInt2482 += local71.length / 2; + local61.anInt2484++; + if (local50.blendTexture && local30 != 0) { + local61.anInt2482 += anIntArray419[local67]; + } + } + if ((arg8[local12][local17] & 0xFF) != 0 || local38 != 0 && arg7[local12][local17] == 0) { + local127 = 0; + @Pc(129) int local129 = 0; + local131 = 0; + local133 = 0; + local143 = arg9[local12][local17 + 1] & 0xFF; + local153 = arg9[local12][local17 - 1] & 0xFF; + local163 = arg9[local12 - 1][local17] & 0xFF; + @Pc(166) int[] local166 = new int[8]; + local168 = 0; + local180 = arg9[local12 - 1][local17 + 1] & 0xFF; + local190 = arg9[local12 + 1][local17] & 0xFF; + local202 = arg9[local12 + 1][local17 - 1] & 0xFF; + local214 = arg9[local12 - 1][local17 - 1] & 0xFF; + local226 = arg9[local12 + 1][local17 + 1] & 0xFF; + @Pc(242) FloType local242; + @Pc(264) byte local264; + @Pc(287) int local287; + if (local180 != 0 && local38 != local180) { + local242 = FloTypeList.method4395(local180 - 1); + if (local242.blendTexture && local242.baseColor != -1) { + local264 = arg5[local12 - 1][local17 + 1]; + local274 = arg7[local12 - 1][local17 + 1]; + local287 = anIntArray300[local274 * 4 + (local264 + 2 & 0x3)]; + local299 = anIntArray300[(local264 + 3 & 0x3) + local274 * 4]; + if (!aBooleanArrayArray4[local299][1] || !aBooleanArrayArray4[local287][0]) { + for (local317 = 0; local317 < 8; local317++) { + if (local317 == 0) { + local127++; + local166[0] = local180; + break; + } + if (local180 == local166[local317]) { + break; + } + } + } + } + } + if (local214 != 0 && local214 != local38) { + local242 = FloTypeList.method4395(local214 - 1); + if (local242.blendTexture && local242.baseColor != -1) { + local264 = arg5[local12 - 1][local17 - 1]; + local274 = arg7[local12 - 1][local17 - 1]; + local287 = anIntArray300[local274 * 4 + (local264 & 0x3)]; + local299 = anIntArray300[(local264 + 3 & 0x3) + local274 * 4]; + if (!aBooleanArrayArray4[local287][1] || !aBooleanArrayArray4[local299][0]) { + for (local317 = 0; local317 < 8; local317++) { + if (local127 == local317) { + local166[local127++] = local214; + break; + } + if (local166[local317] == local214) { + break; + } + } + } + } + } + if (local202 != 0 && local38 != local202) { + local242 = FloTypeList.method4395(local202 - 1); + if (local242.blendTexture && local242.baseColor != -1) { + local264 = arg5[local12 + 1][local17 - 1]; + local274 = arg7[local12 + 1][local17 - 1]; + local299 = anIntArray300[local274 * 4 + (local264 + 1 & 0x3)]; + local287 = anIntArray300[local274 * 4 + (local264 & 0x3)]; + if (!aBooleanArrayArray4[local299][1] || !aBooleanArrayArray4[local287][0]) { + for (local317 = 0; local317 < 8; local317++) { + if (local127 == local317) { + local166[local127++] = local202; + break; + } + if (local202 == local166[local317]) { + break; + } + } + } + } + } + if (local226 != 0 && local226 != local38) { + local242 = FloTypeList.method4395(local226 - 1); + if (local242.blendTexture && local242.baseColor != -1) { + local264 = arg5[local12 + 1][local17 + 1]; + local274 = arg7[local12 + 1][local17 + 1]; + local299 = anIntArray300[local274 * 4 + (local264 + 1 & 0x3)]; + local287 = anIntArray300[local274 * 4 + (local264 + 2 & 0x3)]; + if (!aBooleanArrayArray4[local287][1] || !aBooleanArrayArray4[local299][0]) { + for (local317 = 0; local317 < 8; local317++) { + if (local127 == local317) { + local166[local127++] = local226; + break; + } + if (local226 == local166[local317]) { + break; + } + } + } + } + } + if (local143 != 0 && local38 != local143) { + local242 = FloTypeList.method4395(local143 - 1); + if (local242.blendTexture && local242.baseColor != -1) { + local129 = anIntArray300[arg7[local12][local17 + 1] * 4 + (arg5[local12][local17 + 1] + 2 & 0x3)]; + for (local777 = 0; local777 < 8; local777++) { + if (local127 == local777) { + local166[local127++] = local143; + break; + } + if (local166[local777] == local143) { + break; + } + } + } + } + if (local163 != 0 && local38 != local163) { + local242 = FloTypeList.method4395(local163 - 1); + if (local242.blendTexture && local242.baseColor != -1) { + local133 = anIntArray300[(arg5[local12 - 1][local17] + 3 & 0x3) + arg7[local12 - 1][local17] * 4]; + for (local777 = 0; local777 < 8; local777++) { + if (local127 == local777) { + local166[local127++] = local163; + break; + } + if (local163 == local166[local777]) { + break; + } + } + } + } + if (local153 != 0 && local38 != local153) { + local242 = FloTypeList.method4395(local153 - 1); + if (local242.blendTexture && local242.baseColor != -1) { + local131 = anIntArray300[(arg5[local12][local17 - 1] & 0x3) + arg7[local12][local17 - 1] * 4]; + for (local777 = 0; local777 < 8; local777++) { + if (local777 == local127) { + local166[local127++] = local153; + break; + } + if (local153 == local166[local777]) { + break; + } + } + } + } + if (local190 != 0 && local38 != local190) { + local242 = FloTypeList.method4395(local190 - 1); + if (local242.blendTexture && local242.baseColor != -1) { + local168 = anIntArray300[(arg5[local12 + 1][local17] + 1 & 0x3) + arg7[local12 + 1][local17] * 4]; + for (local777 = 0; local777 < 8; local777++) { + if (local127 == local777) { + local166[local127++] = local190; + break; + } + if (local166[local777] == local190) { + break; + } + } + } + } + for (local1035 = 0; local1035 < local127; local1035++) { + local777 = local166[local1035]; + local1055 = aBooleanArrayArray4[local163 == local777 ? local133 : 0]; + local1068 = aBooleanArrayArray4[local777 == local153 ? local131 : 0]; + @Pc(1077) boolean[] local1077 = aBooleanArrayArray4[local143 == local777 ? local129 : 0]; + local1086 = aBooleanArrayArray4[local190 == local777 ? local168 : 0]; + @Pc(1092) FloType local1092 = FloTypeList.method4395(local777 - 1); + @Pc(1097) GlTile local1097 = method4212(local10, local1092); + local1097.anInt2482 += 5; + local1097.anInt2482 += local1077.length - 2; + local1097.anInt2482 += local1055.length - 2; + local1097.anInt2482 += local1068.length - 2; + local1097.anInt2482 += local1086.length - 2; + local1097.anInt2484++; + } + } + } + } + @Pc(1161) GlTile local1161; + for (local1161 = (GlTile) local10.head(); local1161 != null; local1161 = (GlTile) local10.next()) { + local1161.method1940(); + } + for (local12 = 1; local12 <= 102; local12++) { + for (local17 = 1; local17 <= 102; local17++) { + local38 = arg8[local12][local17] & 0xFF; + local127 = arg9[local12][local17] & 0xFF; + if ((arg10[arg3][local12][local17] & 0x8) != 0) { + local30 = 0; + } else if ((arg10[1][local12][local17] & 0x2) == 2 && arg3 > 0) { + local30 = arg3 - 1; + } else { + local30 = arg3; + } + if (local127 != 0) { + @Pc(1250) FloType local1250 = FloTypeList.method4395(local127 - 1); + if (local1250.baseColor == -1) { + continue; + } + @Pc(1261) GlTile local1261 = method4212(local10, local1250); + @Pc(1267) byte local1267 = arg7[local12][local17]; + @Pc(1273) byte local1273 = arg5[local12][local17]; + local168 = method588(local1250.texture, local1250.baseColor, arg6[local12][local17]); + local143 = method588(local1250.texture, local1250.baseColor, arg6[local12 + 1][local17]); + local163 = method588(local1250.texture, local1250.baseColor, arg6[local12 + 1][local17 + 1]); + local153 = method588(local1250.texture, local1250.baseColor, arg6[local12][local17 + 1]); + method1324(local168, arg2, arg1, local12, arg0, local143, local1273, local30, local163, local38 != 0 && local1250.blendTexture, local1267, local17, arg4, local153, local1261); + } + if ((arg8[local12][local17] & 0xFF) != 0 || local127 != 0 && arg7[local12][local17] == 0) { + @Pc(1382) int[] local1382 = new int[8]; + local133 = 0; + @Pc(1386) int local1386 = 0; + local131 = 0; + local168 = 0; + local163 = arg9[local12][local17 + 1] & 0xFF; + local143 = 0; + local153 = arg9[local12 - 1][local17] & 0xFF; + local180 = arg9[local12 + 1][local17] & 0xFF; + local190 = arg9[local12][local17 - 1] & 0xFF; + local214 = arg9[local12 - 1][local17 + 1] & 0xFF; + local202 = arg9[local12 - 1][local17 - 1] & 0xFF; + local226 = arg9[local12 + 1][local17 - 1] & 0xFF; + local1035 = arg9[local12 + 1][local17 + 1] & 0xFF; + @Pc(1527) byte local1527; + @Pc(1496) FloType local1496; + @Pc(1571) int local1571; + if (local214 == 0 || local214 == local127) { + local214 = 0; + } else { + local1496 = FloTypeList.method4395(local214 - 1); + if (local1496.blendTexture && local1496.baseColor != -1) { + local274 = arg5[local12 - 1][local17 + 1]; + local1527 = arg7[local12 - 1][local17 + 1]; + local299 = anIntArray300[local1527 * 4 + (local274 + 2 & 0x3)]; + local317 = anIntArray300[local1527 * 4 + (local274 + 3 & 0x3)]; + if (aBooleanArrayArray4[local317][1] && aBooleanArrayArray4[local299][0]) { + local214 = 0; + } else { + for (local1571 = 0; local1571 < 8; local1571++) { + if (local1571 == 0) { + local1386++; + local1382[0] = local214; + break; + } + if (local1382[local1571] == local214) { + break; + } + } + } + } else { + local214 = 0; + } + } + if (local202 == 0 || local127 == local202) { + local202 = 0; + } else { + local1496 = FloTypeList.method4395(local202 - 1); + if (local1496.blendTexture && local1496.baseColor != -1) { + local274 = arg5[local12 - 1][local17 - 1]; + local1527 = arg7[local12 - 1][local17 - 1]; + local299 = anIntArray300[(local274 & 0x3) + local1527 * 4]; + local317 = anIntArray300[(local274 + 3 & 0x3) + local1527 * 4]; + if (aBooleanArrayArray4[local299][1] && aBooleanArrayArray4[local317][0]) { + local202 = 0; + } else { + for (local1571 = 0; local1571 < 8; local1571++) { + if (local1571 == local1386) { + local1382[local1386++] = local202; + break; + } + if (local202 == local1382[local1571]) { + break; + } + } + } + } else { + local202 = 0; + } + } + if (local226 == 0 || local226 == local127) { + local226 = 0; + } else { + local1496 = FloTypeList.method4395(local226 - 1); + if (local1496.blendTexture && local1496.baseColor != -1) { + local274 = arg5[local12 + 1][local17 - 1]; + local1527 = arg7[local12 + 1][local17 - 1]; + local317 = anIntArray300[(local274 + 1 & 0x3) + local1527 * 4]; + local299 = anIntArray300[local1527 * 4 + (local274 & 0x3)]; + if (aBooleanArrayArray4[local317][1] && aBooleanArrayArray4[local299][0]) { + local226 = 0; + } else { + for (local1571 = 0; local1571 < 8; local1571++) { + if (local1571 == local1386) { + local1382[local1386++] = local226; + break; + } + if (local1382[local1571] == local226) { + break; + } + } + } + } else { + local226 = 0; + } + } + if (local1035 == 0 || local127 == local1035) { + local1035 = 0; + } else { + local1496 = FloTypeList.method4395(local1035 - 1); + if (local1496.blendTexture && local1496.baseColor != -1) { + local1527 = arg7[local12 + 1][local17 + 1]; + local274 = arg5[local12 + 1][local17 + 1]; + local299 = anIntArray300[(local274 + 2 & 0x3) + local1527 * 4]; + local317 = anIntArray300[(local274 + 1 & 0x3) + local1527 * 4]; + if (aBooleanArrayArray4[local299][1] && aBooleanArrayArray4[local317][0]) { + local1035 = 0; + } else { + for (local1571 = 0; local1571 < 8; local1571++) { + if (local1571 == local1386) { + local1382[local1386++] = local1035; + break; + } + if (local1382[local1571] == local1035) { + break; + } + } + } + } else { + local1035 = 0; + } + } + @Pc(2003) int local2003; + if (local163 != 0 && local163 != local127) { + local1496 = FloTypeList.method4395(local163 - 1); + if (local1496.blendTexture && local1496.baseColor != -1) { + local133 = anIntArray300[arg7[local12][local17 + 1] * 4 + (arg5[local12][local17 + 1] + 2 & 0x3)]; + for (local2003 = 0; local2003 < 8; local2003++) { + if (local2003 == local1386) { + local1382[local1386++] = local163; + break; + } + if (local1382[local2003] == local163) { + break; + } + } + } + } + if (local153 != 0 && local127 != local153) { + local1496 = FloTypeList.method4395(local153 - 1); + if (local1496.blendTexture && local1496.baseColor != -1) { + local131 = anIntArray300[(arg5[local12 - 1][local17] + 3 & 0x3) + arg7[local12 - 1][local17] * 4]; + for (local2003 = 0; local2003 < 8; local2003++) { + if (local1386 == local2003) { + local1382[local1386++] = local153; + break; + } + if (local153 == local1382[local2003]) { + break; + } + } + } + } + if (local190 != 0 && local190 != local127) { + local1496 = FloTypeList.method4395(local190 - 1); + if (local1496.blendTexture && local1496.baseColor != -1) { + local168 = anIntArray300[(arg5[local12][local17 - 1] & 0x3) + arg7[local12][local17 - 1] * 4]; + for (local2003 = 0; local2003 < 8; local2003++) { + if (local1386 == local2003) { + local1382[local1386++] = local190; + break; + } + if (local190 == local1382[local2003]) { + break; + } + } + } + } + if (local180 != 0 && local180 != local127) { + local1496 = FloTypeList.method4395(local180 - 1); + if (local1496.blendTexture && local1496.baseColor != -1) { + local143 = anIntArray300[arg7[local12 + 1][local17] * 4 + (arg5[local12 + 1][local17] + 1 & 0x3)]; + for (local2003 = 0; local2003 < 8; local2003++) { + if (local2003 == local1386) { + local1382[local1386++] = local180; + break; + } + if (local1382[local2003] == local180) { + break; + } + } + } + } + for (local777 = 0; local777 < local1386; local777++) { + local2003 = local1382[local777]; + local1055 = aBooleanArrayArray4[local2003 == local163 ? local133 : 0]; + local1068 = aBooleanArrayArray4[local153 == local2003 ? local131 : 0]; + local1086 = aBooleanArrayArray4[local2003 == local190 ? local168 : 0]; + @Pc(2318) boolean[] local2318 = aBooleanArrayArray4[local2003 == local180 ? local143 : 0]; + @Pc(2324) FloType local2324 = FloTypeList.method4395(local2003 - 1); + @Pc(2329) GlTile local2329 = method4212(local10, local2324); + @Pc(2345) int local2345 = method588(local2324.texture, local2324.baseColor, arg6[local12][local17]) << 8 | 0xFF; + @Pc(2365) int local2365 = method588(local2324.texture, local2324.baseColor, arg6[local12 + 1][local17]) << 8 | 0xFF; + @Pc(2385) int local2385 = method588(local2324.texture, local2324.baseColor, arg6[local12 + 1][local17 + 1]) << 8 | 0xFF; + @Pc(2403) int local2403 = method588(local2324.texture, local2324.baseColor, arg6[local12][local17 + 1]) << 8 | 0xFF; + @Pc(2422) boolean local2422 = local2003 != local202 && local1086[0] && local1068[1]; + @Pc(2441) boolean local2441 = local2003 != local1035 && local1055[0] && local2318[1]; + @Pc(2456) boolean local2456 = local214 != local2003 && local1068[0] && local1055[1]; + @Pc(2463) int local2463 = local1055.length + 6 - 2; + @Pc(2482) boolean local2482 = local2003 != local226 && local2318[0] && local1086[1]; + @Pc(2489) int local2489 = local2463 + local1068.length - 2; + @Pc(2496) int local2496 = local2489 + local1086.length - 2; + @Pc(2503) int local2503 = local2496 + local2318.length - 2; + @Pc(2524) int local2524 = method3683(local2403, 0.0F, local2345, local2365, null, arg2, local12, arg4, local2385, 0, true, local2329, arg1, local17, 64, arg0, 64); + @Pc(2527) int[] local2527 = new int[local2503]; + @Pc(2529) byte local2529 = 0; + @Pc(2550) int local2550 = method3683(local2403, 0.0F, local2345, local2365, null, arg2, local12, arg4, local2385, 0, local2456, local2329, arg1, local17, 0, arg0, 128); + @Pc(2571) int local2571 = method3683(local2403, 0.0F, local2345, local2365, null, arg2, local12, arg4, local2385, 0, local2441, local2329, arg1, local17, 128, arg0, 128); + @Pc(2592) int local2592 = method3683(local2403, 0.0F, local2345, local2365, null, arg2, local12, arg4, local2385, 0, local2422, local2329, arg1, local17, 0, arg0, 0); + @Pc(2613) int local2613 = method3683(local2403, 0.0F, local2345, local2365, null, arg2, local12, arg4, local2385, 0, local2482, local2329, arg1, local17, 128, arg0, 0); + @Pc(2616) int local2616 = local2529 + 1; + local2527[0] = local2524; + @Pc(2621) int local2621 = local2616 + 1; + local2527[1] = local2571; + if (local1055.length > 2) { + local2621++; + local2527[2] = method3683(local2403, 0.0F, local2345, local2365, null, arg2, local12, arg4, local2385, 0, local1055[2], local2329, arg1, local17, 64, arg0, 128); + } + local2527[local2621++] = local2550; + if (local1068.length > 2) { + local2527[local2621++] = method3683(local2403, 0.0F, local2345, local2365, null, arg2, local12, arg4, local2385, 0, local1068[2], local2329, arg1, local17, 0, arg0, 64); + } + local2527[local2621++] = local2592; + if (local1086.length > 2) { + local2527[local2621++] = method3683(local2403, 0.0F, local2345, local2365, null, arg2, local12, arg4, local2385, 0, local1086[2], local2329, arg1, local17, 64, arg0, 0); + } + local2527[local2621++] = local2613; + if (local2318.length > 2) { + local2527[local2621++] = method3683(local2403, 0.0F, local2345, local2365, null, arg2, local12, arg4, local2385, 0, local2318[2], local2329, arg1, local17, 128, arg0, 64); + } + local2527[local2621++] = local2571; + local2329.method1945(local30, local12, local17, local2527, null, true); + } + } + } + } + for (local1161 = (GlTile) local10.head(); local1161 != null; local1161 = (GlTile) local10.next()) { + if (local1161.anInt2483 == 0) { + local1161.unlink(); + } else { + local1161.method1943(); + } + } + local12 = local10.size(); + @Pc(2823) GlTile[] local2823 = new GlTile[local12]; + @Pc(2826) long[] local2826 = new long[local12]; + local10.method3865(local2823); + for (local38 = 0; local38 < local12; local38++) { + local2826[local38] = local2823[local38].key; + } + ArrayUtils.sort(local2826, local2823); + return local2823; + } + + @OriginalMember(owner = "client!tk", name = "a", descriptor = "(Lclient!sc;ZLclient!wl;)Lclient!hg;") + public static GlTile method4212(@OriginalArg(0) HashTable arg0, @OriginalArg(2) FloType arg1) { + @Pc(23) long local23 = ((long) arg1.texture + 1 << 16) + arg1.anInt5885 + ((long) arg1.textureBrightness << 56) + ((long) arg1.waterColor << 32); + @Pc(38) GlTile local38 = (GlTile) arg0.get(local23); + if (local38 == null) { + local38 = new GlTile(arg1.texture, (float) arg1.anInt5885, true, false, arg1.waterColor); + arg0.put(local38, local23); + } + return local38; + } + + @OriginalMember(owner = "client!bi", name = "a", descriptor = "(IIBI)I") + public static int method588(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2) { + @Pc(19) int local19 = Rasteriser.palette[ColorUtils.multiplyLightness2(arg1, arg2)]; + if (arg0 > 0) { + @Pc(31) int local31 = Rasteriser.textureProvider.method3238(arg0 & 0xFFFF); + @Pc(49) int local49; + @Pc(73) int local73; + if (local31 != 0) { + if (arg2 < 0) { + local49 = 0; + } else if (arg2 > 127) { + local49 = 16777215; + } else { + local49 = arg2 * 131586; + } + if (local31 == 256) { + local19 = local49; + } else { + local73 = 256 - local31; + local19 = ((local49 & 0xFF00) * local31 + local73 * (local19 & 0xFF00) & 0xFF0000) + (local31 * (local49 & 0xFF00FF) + ((local19 & 0xFF00FF) * local73) & 0xFF00FF00) >> 8; + } + } + local49 = Rasteriser.textureProvider.method3229(arg0 & 0xFFFF); + if (local49 != 0) { + local49 += 256; + @Pc(125) int local125 = (local19 >> 16 & 0xFF) * local49; + if (local125 > 65535) { + local125 = 65535; + } + local73 = (local19 >> 8 & 0xFF) * local49; + if (local73 > 65535) { + local73 = 65535; + } + @Pc(150) int local150 = local49 * (local19 & 0xFF); + if (local150 > 65535) { + local150 = 65535; + } + local19 = (local150 >> 8) + (local73 & 0xFF00) + (local125 << 8 & 0xFF001F); + } + } + return local19; + } + + @OriginalMember(owner = "client!eh", name = "a", descriptor = "(I[[I[[FI[[FIBIIBZBI[[FILclient!hg;)V") + public static void method1324(@OriginalArg(0) int arg0, @OriginalArg(1) int[][] arg1, @OriginalArg(2) float[][] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) float[][] arg4, @OriginalArg(5) int arg5, @OriginalArg(6) byte arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(10) boolean arg9, @OriginalArg(11) byte arg10, @OriginalArg(12) int arg11, @OriginalArg(13) float[][] arg12, @OriginalArg(14) int arg13, @OriginalArg(15) GlTile arg14) { + @Pc(11) int local11 = (arg0 << 8) + 255; + @Pc(17) int local17 = (arg5 << 8) + 255; + @Pc(23) int local23 = (arg8 << 8) + 255; + @Pc(29) int local29 = (arg13 << 8) + 255; + @Pc(33) int[] local33 = anIntArrayArray35[arg10]; + @Pc(39) int[] local39 = new int[local33.length >> 1]; + @Pc(41) int local41; + for (local41 = 0; local41 < local39.length; local41++) { + local39[local41] = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, false, arg14, arg2, arg11, local33[local41 + local41], arg4, local33[local41 + local41 + 1]); + } + @Pc(87) int[] local87 = null; + if (arg9) { + @Pc(191) int local191; + if (arg10 == 1) { + local41 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 64, arg4, 128); + local191 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 128, arg4, 64); + local87 = new int[]{local191, local41, local39[2], local41, local39[0], local39[2]}; + } else if (arg10 == 2) { + local87 = new int[6]; + local41 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 128, arg4, 128); + local191 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 64, arg4, 0); + local87[2] = local41; + local87[0] = local39[0]; + local87[5] = local39[0]; + local87[3] = local41; + local87[1] = local191; + local87[4] = local39[1]; + } else if (arg10 == 3) { + local87 = new int[6]; + local41 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 0, arg4, 128); + local191 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 64, arg4, 0); + local87[4] = local191; + local87[1] = local39[1]; + local87[0] = local39[2]; + local87[3] = local41; + local87[2] = local41; + local87[5] = local39[2]; + } else if (arg10 == 4) { + local87 = new int[3]; + local41 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 0, arg4, 128); + local87[0] = local39[3]; + local87[2] = local39[0]; + local87[1] = local41; + } else if (arg10 == 5) { + local87 = new int[3]; + local41 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 128, arg4, 128); + local87[1] = local41; + local87[0] = local39[2]; + local87[2] = local39[3]; + } else if (arg10 == 6) { + local87 = new int[6]; + local41 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 128, arg4, 0); + local191 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 128, arg4, 128); + local87[1] = local41; + local87[0] = local39[3]; + local87[2] = local191; + local87[4] = local39[0]; + local87[3] = local191; + local87[5] = local39[3]; + } else if (arg10 == 7) { + local87 = new int[6]; + local41 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 0, arg4, 128); + local191 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 128, arg4, 0); + local87[3] = local41; + local87[2] = local41; + local87[0] = local39[1]; + local87[4] = local39[2]; + local87[1] = local191; + local87[5] = local39[1]; + } else if (arg10 == 8) { + local87 = new int[3]; + local41 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 0, arg4, 0); + local87[2] = local39[4]; + local87[0] = local39[3]; + local87[1] = local41; + } else if (arg10 == 9) { + local41 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 128, arg4, 64); + local191 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 96, arg4, 32); + @Pc(715) int local715 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 64, arg4, 0); + local87 = new int[]{local191, local41, local39[4], local191, local39[4], local39[3], local191, local39[3], local39[2], local191, local39[2], local39[1], local191, local39[1], local715}; + } else if (arg10 == 10) { + local87 = new int[9]; + local41 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 0, arg4, 128); + local87[0] = local39[2]; + local87[8] = local39[0]; + local87[1] = local41; + local87[4] = local41; + local87[2] = local39[3]; + local87[7] = local41; + local87[3] = local39[3]; + local87[5] = local39[4]; + local87[6] = local39[4]; + } else if (arg10 == 11) { + local87 = new int[12]; + local41 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 0, arg4, 64); + local191 = method3683(local29, 0.0F, local11, local17, null, arg1, arg3, arg12, local23, arg6, true, arg14, arg2, arg11, 128, arg4, 64); + local87[5] = local41; + local87[1] = local41; + local87[8] = local41; + local87[0] = local39[3]; + local87[2] = local39[0]; + local87[11] = local191; + local87[6] = local39[2]; + local87[7] = local191; + local87[10] = local39[1]; + local87[3] = local39[3]; + local87[4] = local39[2]; + local87[9] = local39[2]; + } + } + arg14.method1945(arg7, arg3, arg11, local39, local87, false); + } + + @OriginalMember(owner = "client!ql", name = "a", descriptor = "(IFII[[I[[II[[FIBIZLclient!hg;[[FII[[FI)I") + public static int method3683(@OriginalArg(0) int arg0, @OriginalArg(1) float arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int[][] arg4, @OriginalArg(5) int[][] arg5, @OriginalArg(6) int arg6, @OriginalArg(7) float[][] arg7, @OriginalArg(8) int arg8, @OriginalArg(10) int arg9, @OriginalArg(11) boolean arg10, @OriginalArg(12) GlTile arg11, @OriginalArg(13) float[][] arg12, @OriginalArg(14) int arg13, @OriginalArg(15) int arg14, @OriginalArg(16) float[][] arg15, @OriginalArg(17) int arg16) { + @Pc(20) int local20; + if (arg9 == 1) { + local20 = arg14; + arg14 = arg16; + arg16 = 128 - local20; + } else if (arg9 == 2) { + arg16 = 128 - arg16; + arg14 = 128 - arg14; + } else if (arg9 == 3) { + local20 = arg14; + arg14 = 128 - arg16; + arg16 = local20; + } + @Pc(66) float local66; + @Pc(72) float local72; + @Pc(80) int local80; + @Pc(78) float local78; + if (arg14 == 0 && arg16 == 0) { + local66 = arg15[arg6][arg13]; + local72 = arg7[arg6][arg13]; + local78 = arg12[arg6][arg13]; + local80 = arg2; + } else if (arg14 == 128 && arg16 == 0) { + local80 = arg3; + local66 = arg15[arg6 + 1][arg13]; + local72 = arg7[arg6 + 1][arg13]; + local78 = arg12[arg6 + 1][arg13]; + } else if (arg14 == 128 && arg16 == 128) { + local72 = arg7[arg6 + 1][arg13 + 1]; + local78 = arg12[arg6 + 1][arg13 + 1]; + local66 = arg15[arg6 + 1][arg13 + 1]; + local80 = arg8; + } else if (arg14 == 0 && arg16 == 128) { + local72 = arg7[arg6][arg13 + 1]; + local66 = arg15[arg6][arg13 + 1]; + local78 = arg12[arg6][arg13 + 1]; + local80 = arg0; + } else { + local78 = arg12[arg6][arg13]; + local66 = arg15[arg6][arg13]; + @Pc(219) float local219 = (float) arg16 / 128.0F; + @Pc(224) float local224 = (float) arg14 / 128.0F; + @Pc(238) float local238 = local78 + (arg12[arg6 + 1][arg13] - local78) * local224; + @Pc(253) float local253 = local66 + (arg15[arg6 + 1][arg13] - local66) * local224; + @Pc(261) float local261 = arg12[arg6][arg13 + 1]; + @Pc(269) float local269 = arg15[arg6][arg13 + 1]; + @Pc(286) float local286 = local269 + (arg15[arg6 + 1][arg13 + 1] - local269) * local224; + local72 = arg7[arg6][arg13]; + local66 = local253 + local219 * (local286 - local253); + @Pc(309) float local309 = arg7[arg6][arg13 + 1]; + @Pc(326) float local326 = local261 + (arg12[arg6 + 1][arg13 + 1] - local261) * local224; + local78 = local238 + local219 * (local326 - local238); + @Pc(352) float local352 = local309 + (arg7[arg6 + 1][arg13 + 1] - local309) * local224; + @Pc(367) float local367 = local72 + (arg7[arg6 + 1][arg13] - local72) * local224; + local72 = local367 + (local352 - local367) * local219; + @Pc(382) int local382 = method1540(arg14, arg2, arg3); + @Pc(388) int local388 = method1540(arg14, arg0, arg8); + local80 = method1540(arg16, local382, local388); + } + @Pc(405) int local405 = arg16 + (arg13 << 7); + @Pc(413) int local413 = method3361(arg14, arg13, arg5, arg6, arg16); + @Pc(420) int local420 = (arg6 << 7) + arg14; + return arg11.method1941(local420, local413, local405, local78, local66, local72, arg10 ? local80 & 0xFFFFFF00 : local80, arg4 == null ? 0.0F : (float) (local413 - method3361(arg14, arg13, arg4, arg6, arg16)) / arg1); + } + + @OriginalMember(owner = "client!oj", name = "a", descriptor = "(IBI[[III)I") + public static int method3361(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int[][] arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + @Pc(25) int local25 = arg0 * arg2[arg3 + 1][arg1] + (128 - arg0) * arg2[arg3][arg1] >> 7; + @Pc(52) int local52 = arg2[arg3][arg1 + 1] * (128 - arg0) + arg2[arg3 + 1][arg1 + 1] * arg0 >> 7; + return local25 * (128 - arg4) + arg4 * local52 >> 7; + } + + @OriginalMember(owner = "client!fh", name = "a", descriptor = "(IIII)I") + public static int method1540(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + if (arg1 == arg2) { + return arg1; + } else { + @Pc(17) int local17 = 128 - arg0; + @Pc(50) int local50 = arg0 * (arg2 >>> 7 & 0x1FE01FE) + local17 * (arg1 >>> 7 & 0x1FE01FE) & 0xFF00FF00; + @Pc(65) int local65 = local17 * (arg1 & 0xFF00FF) + (arg2 & 0xFF00FF) * arg0 & 0xFF00FF00; + return local50 + (local65 >> 7); + } + } + + @OriginalMember(owner = "client!bm", name = "a", descriptor = "(IBIIII)V") + public static void method645(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + @Pc(3) int local3; + @Pc(10) int local10; + for (local3 = arg1; local3 <= arg3 + arg1; local3++) { + for (local10 = arg2; local10 <= arg4 + arg2; local10++) { + if (local10 >= 0 && local10 < 104 && local3 >= 0 && local3 < 104) { + shadowmap[arg0][local10][local3] = 127; + } + } + } + for (local3 = arg1; local3 < arg3 + arg1; local3++) { + for (local10 = arg2; local10 < arg2 + arg4; local10++) { + if (local10 >= 0 && local10 < 104 && local3 >= 0 && local3 < 104) { + tileHeights[arg0][local10][local3] = arg0 <= 0 ? 0 : tileHeights[arg0 - 1][local10][local3]; + } + } + } + if (arg2 > 0 && arg2 < 104) { + for (local3 = arg1 + 1; local3 < arg1 + arg3; local3++) { + if (local3 >= 0 && local3 < 104) { + tileHeights[arg0][arg2][local3] = tileHeights[arg0][arg2 - 1][local3]; + } + } + } + if (arg1 > 0 && arg1 < 104) { + for (local3 = arg2 + 1; local3 < arg2 + arg4; local3++) { + if (local3 >= 0 && local3 < 104) { + tileHeights[arg0][local3][arg1] = tileHeights[arg0][local3][arg1 - 1]; + } + } + } + if (arg2 < 0 || arg1 < 0 || arg2 >= 104 || arg1 >= 104) { + return; + } + if (arg0 == 0) { + if (arg2 > 0 && tileHeights[arg0][arg2 - 1][arg1] != 0) { + tileHeights[arg0][arg2][arg1] = tileHeights[arg0][arg2 - 1][arg1]; + } else if (arg1 > 0 && tileHeights[arg0][arg2][arg1 - 1] != 0) { + tileHeights[arg0][arg2][arg1] = tileHeights[arg0][arg2][arg1 - 1]; + } else if (arg2 > 0 && arg1 > 0 && tileHeights[arg0][arg2 - 1][arg1 - 1] != 0) { + tileHeights[arg0][arg2][arg1] = tileHeights[arg0][arg2 - 1][arg1 - 1]; + } + } else if (arg2 > 0 && tileHeights[arg0 - 1][arg2 - 1][arg1] != tileHeights[arg0][arg2 - 1][arg1]) { + tileHeights[arg0][arg2][arg1] = tileHeights[arg0][arg2 - 1][arg1]; + } else if (arg1 > 0 && tileHeights[arg0][arg2][arg1 - 1] != tileHeights[arg0 - 1][arg2][arg1 - 1]) { + tileHeights[arg0][arg2][arg1] = tileHeights[arg0][arg2][arg1 - 1]; + } else if (arg2 > 0 && arg1 > 0 && tileHeights[arg0][arg2 - 1][arg1 - 1] != tileHeights[arg0 - 1][arg2 - 1][arg1 - 1]) { + tileHeights[arg0][arg2][arg1] = tileHeights[arg0][arg2 - 1][arg1 - 1]; + } + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "([Lclient!mj;ZIIIII[B)V") + public static void method2203(@OriginalArg(0) CollisionMap[] arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) byte[] arg6) { + @Pc(14) int local14; + @Pc(21) int local21; + if (!arg1) { + for (@Pc(9) int local9 = 0; local9 < 4; local9++) { + for (local14 = 0; local14 < 64; local14++) { + for (local21 = 0; local21 < 64; local21++) { + if (arg4 + local14 > 0 && local14 + arg4 < 103 && arg3 + local21 > 0 && local21 + arg3 < 103) { + arg0[local9].flags[local14 + arg4][arg3 + local21] &= 0xFEFFFFFF; + } + } + } + } + } + @Pc(95) Buffer local95 = new Buffer(arg6); + @Pc(99) byte local99; + if (arg1) { + local99 = 1; + } else { + local99 = 4; + } + @Pc(117) int local117; + for (local14 = 0; local14 < local99; local14++) { + for (local21 = 0; local21 < 64; local21++) { + for (local117 = 0; local117 < 64; local117++) { + readTile(arg2, arg5, arg1, local95, local117 + arg3, arg4 + local21, 0, local14); + } + } + } + @Pc(146) boolean local146 = false; + @Pc(243) int local243; + @Pc(188) int local188; + @Pc(190) int local190; + @Pc(194) int local194; + while (local95.offset < local95.data.length) { + local21 = local95.g1(); + if (local21 != 129) { + local95.offset--; + break; + } + for (local117 = 0; local117 < 4; local117++) { + @Pc(168) byte local168 = local95.g1b(); + if (local168 == 0) { + local243 = arg4; + if (arg4 < 0) { + local243 = 0; + } else if (arg4 >= 104) { + local243 = 104; + } + local190 = arg3; + if (arg3 < 0) { + local190 = 0; + } else if (arg3 >= 104) { + local190 = 104; + } + local188 = arg4 + 64; + local194 = arg3 + 64; + if (local194 < 0) { + local194 = 0; + } else if (local194 >= 104) { + local194 = 104; + } + if (local188 < 0) { + local188 = 0; + } else if (local188 >= 104) { + local188 = 104; + } + while (local243 < local188) { + while (local190 < local194) { + aByteArrayArrayArray13[local117][local243][local190] = 0; + local190++; + } + local243++; + } + } else if (local168 == 1) { + for (local243 = 0; local243 < 64; local243 += 4) { + for (local188 = 0; local188 < 64; local188 += 4) { + @Pc(305) byte local305 = local95.g1b(); + for (local194 = local243 + arg4; local194 < arg4 + local243 + 4; local194++) { + for (@Pc(320) int local320 = arg3 + local188; local320 < arg3 + local188 + 4; local320++) { + if (local194 >= 0 && local194 < 104 && local320 >= 0 && local320 < 104) { + aByteArrayArrayArray13[local117][local194][local320] = local305; + } + } + } + } + } + } else if (local168 == 2 && local117 > 0) { + local188 = arg4 + 64; + local190 = arg3; + local194 = arg3 + 64; + if (local188 < 0) { + local188 = 0; + } else if (local188 >= 104) { + local188 = 104; + } + if (arg3 < 0) { + local190 = 0; + } else if (arg3 >= 104) { + local190 = 104; + } + if (local194 < 0) { + local194 = 0; + } else if (local194 >= 104) { + local194 = 104; + } + local243 = arg4; + if (arg4 < 0) { + local243 = 0; + } else if (arg4 >= 104) { + local243 = 104; + } + while (local188 > local243) { + while (local190 < local194) { + aByteArrayArrayArray13[local117][local243][local190] = aByteArrayArrayArray13[local117 - 1][local243][local190]; + local190++; + } + local243++; + } + } + } + local146 = true; + } + @Pc(515) int local515; + if (GlRenderer.enabled && !arg1) { + @Pc(490) Environment local490 = null; + label270: + while (true) { + label263: + do { + while (local95.offset < local95.data.length) { + local117 = local95.g1(); + if (local117 != 0) { + if (local117 != 1) { + throw new IllegalStateException(); + } + local515 = local95.g1(); + continue label263; + } + local490 = new Environment(local95); + } + if (local490 == null) { + local490 = new Environment(); + } + for (local117 = 0; local117 < 8; local117++) { + for (local515 = 0; local515 < 8; local515++) { + local243 = local117 + (arg4 >> 3); + local188 = (arg3 >> 3) + local515; + if (local243 >= 0 && local243 < 13 && local188 >= 0 && local188 < 13) { + FogManager.chunksAtmosphere[local243][local188] = local490; + } + } + } + break label270; + } while (local515 <= 0); + for (local243 = 0; local243 < local515; local243++) { + @Pc(529) Light local529 = new Light(local95); + if (local529.anInt2243 == 31) { + @Pc(541) LightType local541 = LightTypeList.get(local95.g2()); + local529.method1762(local541.anInt2865, local541.anInt2873, local541.anInt2867, local541.anInt2872); + } + local529.z += arg3 << 7; + local529.x += arg4 << 7; + local194 = local529.z >> 7; + local190 = local529.x >> 7; + if (local190 >= 0 && local194 >= 0 && local190 < 104 && local194 < 104) { + local529.aBoolean125 = (renderFlags[1][local190][local194] & 0x2) != 0; + local529.y = tileHeights[local529.level][local190][local194] - local529.y; + LightingManager.method2389(local529); + } + } + } + } + if (local146) { + return; + } + for (local21 = 0; local21 < 4; local21++) { + for (local117 = 0; local117 < 16; local117++) { + for (local515 = 0; local515 < 16; local515++) { + local243 = (arg4 >> 2) + local117; + local188 = local515 + (arg3 >> 2); + if (local243 >= 0 && local243 < 26 && local188 >= 0 && local188 < 26) { + aByteArrayArrayArray13[local21][local243][local188] = 0; + } + } + } + } + } + + @OriginalMember(owner = "client!tm", name = "a", descriptor = "(III[Lclient!mj;IB[BIIIZ)V") + public static void method4228(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) CollisionMap[] arg3, @OriginalArg(4) int arg4, @OriginalArg(6) byte[] arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8, @OriginalArg(10) boolean arg9) { + @Pc(17) int local17; + if (!arg9) { + for (@Pc(10) int local10 = 0; local10 < 8; local10++) { + for (local17 = 0; local17 < 8; local17++) { + if (arg1 + local10 > 0 && local10 + arg1 < 103 && local17 + arg4 > 0 && arg4 + local17 < 103) { + arg3[arg2].flags[local10 + arg1][local17 + arg4] &= 0xFEFFFFFF; + } + } + } + } + @Pc(87) byte local87; + if (arg9) { + local87 = 1; + } else { + local87 = 4; + } + @Pc(96) Buffer local96 = new Buffer(arg5); + @Pc(103) int local103; + @Pc(108) int local108; + for (local17 = 0; local17 < local87; local17++) { + for (local103 = 0; local103 < 64; local103++) { + for (local108 = 0; local108 < 64; local108++) { + if (arg6 == local17 && arg8 <= local103 && arg8 + 8 > local103 && arg7 <= local108 && local108 < arg7 + 8) { + readTile(0, 0, arg9, local96, rotateZ(arg0, local103 & 0x7, local108 & 0x7) + arg4, rotateX(arg0, local108 & 0x7, local103 & 0x7) + arg1, arg0, arg2); + } else { + readTile(0, 0, arg9, local96, -1, -1, 0, 0); + } + } + } + } + @Pc(232) int local232; + @Pc(417) int local417; + @Pc(255) int local255; + @Pc(266) int local266; + @Pc(316) int local316; + while (local96.data.length > local96.offset) { + local103 = local96.g1(); + if (local103 != 129) { + local96.offset--; + break; + } + for (local108 = 0; local108 < 4; local108++) { + @Pc(223) byte local223 = local96.g1b(); + @Pc(237) int local237; + if (local223 == 0) { + if (local108 <= arg6) { + local237 = arg1 + 7; + local232 = arg1; + local255 = arg4 + 7; + if (local255 < 0) { + local255 = 0; + } else if (local255 >= 104) { + local255 = 104; + } + if (local237 < 0) { + local237 = 0; + } else if (local237 >= 104) { + local237 = 104; + } + local417 = arg4; + if (arg4 < 0) { + local417 = 0; + } else if (arg4 >= 104) { + local417 = 104; + } + if (arg1 < 0) { + local232 = 0; + } else if (arg1 >= 104) { + local232 = 104; + } + while (local237 > local232) { + while (local417 < local255) { + aByteArrayArrayArray13[arg2][local232][local417] = 0; + local417++; + } + local232++; + } + } + } else if (local223 == 1) { + for (local232 = 0; local232 < 64; local232 += 4) { + for (local237 = 0; local237 < 64; local237 += 4) { + @Pc(246) byte local246 = local96.g1b(); + if (local108 <= arg6) { + for (local255 = local232; local255 < local232 + 4; local255++) { + for (local266 = local237; local266 < local237 + 4; local266++) { + if (local255 >= arg8 && local255 < arg8 + 8 && local266 >= arg7 && arg7 + 8 > arg7) { + local316 = arg1 + rotateX(arg0, local266 & 0x7, local255 & 0x7); + @Pc(328) int local328 = rotateZ(arg0, local255 & 0x7, local266 & 0x7) + arg4; + if (local316 >= 0 && local316 < 104 && local328 >= 0 && local328 < 104) { + aByteArrayArrayArray13[arg2][local316][local328] = local246; + } + } + } + } + } + } + } + } else if (local223 == 2) { + } + } + } + @Pc(497) int local497; + if (GlRenderer.enabled && !arg9) { + @Pc(472) Environment local472 = null; + label207: + while (true) { + label200: + do { + while (local96.data.length > local96.offset) { + local108 = local96.g1(); + if (local108 != 0) { + if (local108 != 1) { + throw new IllegalStateException(); + } + local497 = local96.g1(); + continue label200; + } + local472 = new Environment(local96); + } + if (local472 == null) { + local472 = new Environment(); + } + FogManager.chunksAtmosphere[arg1 >> 3][arg4 >> 3] = local472; + break label207; + } while (local497 <= 0); + for (local232 = 0; local232 < local497; local232++) { + @Pc(517) Light local517 = new Light(local96); + if (local517.anInt2243 == 31) { + @Pc(529) LightType local529 = LightTypeList.get(local96.g2()); + local517.method1762(local529.anInt2865, local529.anInt2873, local529.anInt2867, local529.anInt2872); + } + local417 = local517.x >> 7; + local255 = local517.z >> 7; + if (arg6 == local517.level && local417 >= arg8 && arg8 + 8 > local417 && arg7 <= local255 && arg7 + 8 > local255) { + local266 = rotateXFine(arg0, local517.x & 0x3FF, local517.z & 0x3FF) + (arg1 << 7); + local316 = rotateZFine(local517.x & 0x3FF, arg0, local517.z & 0x3FF) + (arg4 << 7); + local517.x = local266; + local517.z = local316; + local417 = local517.x >> 7; + local255 = local517.z >> 7; + if (local417 >= 0 && local255 >= 0 && local417 < 104 && local255 < 104) { + local517.aBoolean125 = (renderFlags[1][local417][local255] & 0x2) != 0; + local517.y = tileHeights[local517.level][local417][local255] - local517.y; + LightingManager.method2389(local517); + } + } + } + } + } + local103 = arg1 + 7; + local108 = arg4 + 7; + for (local497 = arg1; local497 < local103; local497++) { + for (local232 = arg4; local232 < local108; local232++) { + aByteArrayArrayArray13[arg2][local497][local232] = 0; + } + } + } + + @OriginalMember(owner = "client!rg", name = "a", descriptor = "(IZII)I") + public static int rotateX(@OriginalArg(0) int arg0, @OriginalArg(2) int z, @OriginalArg(3) int x) { + @Pc(3) int angle = arg0 & 0x3; + if (angle == 0) { + return x; + } else if (angle == 1) { + return z; + } else if (angle == 2) { + return 7 - x; + } else { + return 7 - z; + } + } + + @OriginalMember(owner = "client!qg", name = "a", descriptor = "(IBII)I") + public static int rotateZ(@OriginalArg(0) int arg0, @OriginalArg(2) int x, @OriginalArg(3) int z) { + @Pc(3) int angle = arg0 & 0x3; + if (angle == 0) { + return z; + } else if (angle == 1) { + return 7 - x; + } else if (angle == 2) { + return 7 - z; + } else { + return x; + } + } + + @OriginalMember(owner = "client!qi", name = "a", descriptor = "(IIBI)I") + public static int rotateXFine(@OriginalArg(0) int arg0, @OriginalArg(1) int x, @OriginalArg(3) int z) { + @Pc(3) int angle = arg0 & 0x3; + if (angle == 0) { + return x; + } else if (angle == 1) { + return z; + } else if (angle == 2) { + return 1023 - x; + } else { + return 1023 - z; + } + } + + @OriginalMember(owner = "client!ol", name = "a", descriptor = "(IIZI)I") + public static int rotateZFine(@OriginalArg(0) int x, @OriginalArg(1) int arg1, @OriginalArg(3) int z) { + @Pc(3) int angle = arg1 & 0x3; + if (angle == 0) { + return z; + } else if (angle == 1) { + return 1023 - x; + } else if (angle == 2) { + return 1023 - z; + } else { + return x; + } + } +} diff --git a/client/src/main/java/rt4/SceneGraph_Class120.java b/client/src/main/java/rt4/SceneGraph_Class120.java new file mode 100644 index 0000000..6118dde --- /dev/null +++ b/client/src/main/java/rt4/SceneGraph_Class120.java @@ -0,0 +1,81 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!pe") +public final class SceneGraph_Class120 { + + @OriginalMember(owner = "client!pe", name = "b", descriptor = "I") + public int anInt4444; + + @OriginalMember(owner = "client!pe", name = "c", descriptor = "I") + public int anInt4445; + + @OriginalMember(owner = "client!pe", name = "e", descriptor = "I") + public int anInt4446; + + @OriginalMember(owner = "client!pe", name = "f", descriptor = "I") + public int anInt4447; + + @OriginalMember(owner = "client!pe", name = "g", descriptor = "I") + public int anInt4448; + + @OriginalMember(owner = "client!pe", name = "h", descriptor = "I") + public int anInt4449; + + @OriginalMember(owner = "client!pe", name = "i", descriptor = "I") + public int anInt4450; + + @OriginalMember(owner = "client!pe", name = "k", descriptor = "I") + public int anInt4452; + + @OriginalMember(owner = "client!pe", name = "l", descriptor = "I") + public int anInt4453; + + @OriginalMember(owner = "client!pe", name = "m", descriptor = "I") + public int anInt4454; + + @OriginalMember(owner = "client!pe", name = "p", descriptor = "I") + public int anInt4456; + + @OriginalMember(owner = "client!pe", name = "s", descriptor = "I") + public int anInt4458; + + @OriginalMember(owner = "client!pe", name = "t", descriptor = "I") + public int anInt4459; + + @OriginalMember(owner = "client!pe", name = "u", descriptor = "I") + public int anInt4460; + + @OriginalMember(owner = "client!pe", name = "v", descriptor = "I") + public int anInt4461; + + @OriginalMember(owner = "client!pe", name = "w", descriptor = "I") + public int anInt4462; + + @OriginalMember(owner = "client!pe", name = "x", descriptor = "I") + public int anInt4463; + + @OriginalMember(owner = "client!pe", name = "y", descriptor = "I") + public int anInt4464; + + @OriginalMember(owner = "client!wj", name = "a", descriptor = "(IIIIIII)V") + public static void method4647(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6) { + @Pc(3) SceneGraph_Class120 local3 = new SceneGraph_Class120(); + local3.anInt4452 = arg1 / 128; + local3.anInt4446 = arg2 / 128; + local3.anInt4461 = arg3 / 128; + local3.anInt4464 = arg4 / 128; + local3.anInt4453 = arg0; + local3.anInt4460 = arg1; + local3.anInt4445 = arg2; + local3.anInt4458 = arg3; + local3.anInt4449 = arg4; + local3.anInt4444 = arg5; + local3.anInt4447 = arg6; + SceneGraph.aClass120Array1[SceneGraph.anInt917++] = local3; + } +} diff --git a/client/src/main/java/rt4/Scenery.java b/client/src/main/java/rt4/Scenery.java new file mode 100644 index 0000000..9a03d46 --- /dev/null +++ b/client/src/main/java/rt4/Scenery.java @@ -0,0 +1,47 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!ec") +public final class Scenery { + + @OriginalMember(owner = "client!ec", name = "a", descriptor = "I") + public int zMin; + + @OriginalMember(owner = "client!ec", name = "c", descriptor = "Lclient!th;") + public Entity entity; + + @OriginalMember(owner = "client!ec", name = "e", descriptor = "I") + public int zMax; + + @OriginalMember(owner = "client!ec", name = "f", descriptor = "I") + public int anInt1699; + + @OriginalMember(owner = "client!ec", name = "h", descriptor = "I") + public int xMin; + + @OriginalMember(owner = "client!ec", name = "j", descriptor = "I") + public int anInt1703; + + @OriginalMember(owner = "client!ec", name = "m", descriptor = "I") + public int anInt1705; + + @OriginalMember(owner = "client!ec", name = "o", descriptor = "I") + public int anInt1706; + + @OriginalMember(owner = "client!ec", name = "p", descriptor = "I") + public int anInt1707; + + @OriginalMember(owner = "client!ec", name = "s", descriptor = "I") + public int level; + + @OriginalMember(owner = "client!ec", name = "w", descriptor = "I") + public int xMax; + + @OriginalMember(owner = "client!ec", name = "x", descriptor = "I") + public int anInt1714; + + @OriginalMember(owner = "client!ec", name = "A", descriptor = "J") + public long key = 0L; +} diff --git a/client/src/main/java/rt4/ScriptRunner.java b/client/src/main/java/rt4/ScriptRunner.java new file mode 100644 index 0000000..24af9ea --- /dev/null +++ b/client/src/main/java/rt4/ScriptRunner.java @@ -0,0 +1,5945 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; +import plugin.PluginRepository; + +import java.nio.charset.StandardCharsets; +import java.util.Calendar; +import java.util.Date; + +public final class ScriptRunner { + + @OriginalMember(owner = "client!ab", name = "j", descriptor = "[Lclient!na;") + public static final JagString[] stringStack = new JagString[1000]; + @OriginalMember(owner = "client!uj", name = "t", descriptor = "[I") + public static final int[] intStack = new int[1000]; + @OriginalMember(owner = "client!fl", name = "Q", descriptor = "Lclient!na;") + public static final JagString EMPTY_STRING = JagString.parse(""); + @OriginalMember(owner = "client!bb", name = "A", descriptor = "Lclient!na;") + public static final JagString aClass100_74 = JagString.parse("::"); + @OriginalMember(owner = "client!be", name = "ib", descriptor = "Lclient!na;") + public static final JagString EVENT_OPBASE = JagString.parse("event_opbase"); + @OriginalMember(owner = "client!da", name = "O", descriptor = "Lclient!na;") + public static final JagString aClass100_253 = JagString.parse("(U0a )2 via: "); + @OriginalMember(owner = "client!fl", name = "H", descriptor = "Lclient!na;") + public static final JagString aClass100_446 = JagString.parse(""); + @OriginalMember(owner = "client!nd", name = "b", descriptor = "Lclient!na;") + public static final JagString aClass100_780 = JagString.parse("Clientscript error in: "); + @OriginalMember(owner = "client!hm", name = "R", descriptor = "Lclient!na;") + public static final JagString aClass100_537 = JagString.parse(""); + @OriginalMember(owner = "client!hn", name = "K", descriptor = "Ljava/util/Calendar;") + public static final Calendar aCalendar2 = Calendar.getInstance(); + @OriginalMember(owner = "client!kk", name = "m", descriptor = "Lclient!na;") + public static final JagString CS_ERROR = JagString.parse("Clientscript error )2 check log for details"); + @OriginalMember(owner = "client!fe", name = "nc", descriptor = "[Lclient!hj;") + public static final GoSubFrame[] callStack = new GoSubFrame[50]; + @OriginalMember(owner = "client!ee", name = "j", descriptor = "[I") + public static final int[] anIntArray140 = new int[5]; + @OriginalMember(owner = "client!oe", name = "i", descriptor = "[[I") + public static final int[][] anIntArrayArray33 = new int[5][5000]; + @OriginalMember(owner = "client!rl", name = "eb", descriptor = "Lclient!na;") + public static final JagString aClass100_928 = JagString.parse("(U0a )2 in: "); + @OriginalMember(owner = "client!fe", name = "I", descriptor = "Lclient!na;") + public static final JagString aClass100_639 = JagString.parse(" "); + @OriginalMember(owner = "client!dc", name = "M", descriptor = "Lclient!na;") + public static final JagString aClass100_268 = JagString.parse(")4"); + @OriginalMember(owner = "client!he", name = "gb", descriptor = "Lclient!na;") + public static final JagString aClass100_518 = JagString.parse("www"); + @OriginalMember(owner = "client!e", name = "Tc", descriptor = "Lclient!na;") + public static final JagString aClass100_365 = JagString.parse("www)2wtqa"); + @OriginalMember(owner = "client!lk", name = "J", descriptor = "Lclient!na;") + public static final JagString aClass100_687 = JagString.parse(")4p="); + @OriginalMember(owner = "client!en", name = "x", descriptor = "Lclient!na;") + public static final JagString aClass100_424 = JagString.parse("http:)4)4"); + @OriginalMember(owner = "client!gf", name = "I", descriptor = "Lclient!na;") + public static final JagString aClass100_886 = JagString.parse(")3runescape)3com)4l="); + @OriginalMember(owner = "client!v", name = "a", descriptor = "Lclient!na;") + public static final JagString aClass100_98 = JagString.parse(")4a="); + @OriginalMember(owner = "client!ch", name = "C", descriptor = "[[I") + public static final int[][] anIntArrayArray6 = new int[104][104]; + @OriginalMember(owner = "client!n", name = "e", descriptor = "Lclient!na;") + public static final JagString aClass100_767 = JagString.parse(")2"); + @OriginalMember(owner = "client!je", name = "U", descriptor = "Lclient!na;") + public static final JagString aClass100_588 = JagString.parse("showingVideoAd"); + @OriginalMember(owner = "client!ob", name = "p", descriptor = "Lclient!na;") + public static final JagString aClass100_802 = JagString.parse("(U0a )2 non)2existant gosub script)2num: "); + @OriginalMember(owner = "client!af", name = "m", descriptor = "Lclient!na;") + public static final JagString aClass100_10 = JagString.parse("
"); + @OriginalMember(owner = "client!jh", name = "n", descriptor = "Lclient!bd;") + public static QuickChatPhrase activePhrase; + @OriginalMember(owner = "client!wf", name = "j", descriptor = "Lclient!be;") + public static Component staticActiveComponent1; + @OriginalMember(owner = "client!sg", name = "i", descriptor = "Lclient!be;") + public static Component staticActiveComponent2; + @OriginalMember(owner = "client!og", name = "g", descriptor = "[Lclient!na;") + public static JagString[] stringLocals; + @OriginalMember(owner = "client!rh", name = "a", descriptor = "[I") + public static int[] intLocals; + @OriginalMember(owner = "client!km", name = "ad", descriptor = "I") + public static int fp = 0; + @OriginalMember(owner = "client!od", name = "g", descriptor = "S") + public static short aShort25 = 256; + @OriginalMember(owner = "client!an", name = "db", descriptor = "S") + public static short aShort9 = 205; + @OriginalMember(owner = "client!mc", name = "tb", descriptor = "S") + public static short aShort22 = 1; + @OriginalMember(owner = "client!ac", name = "k", descriptor = "S") + public static short aShort1 = 32767; + @OriginalMember(owner = "client!nc", name = "n", descriptor = "I") + public static int anInt4055 = 0; + @OriginalMember(owner = "client!tm", name = "i", descriptor = "I") + public static int anInt5377 = 0; + @OriginalMember(owner = "client!bn", name = "eb", descriptor = "I") + public static int anInt773 = 0; + @OriginalMember(owner = "client!ah", name = "n", descriptor = "I") + public static int anInt983 = 0; + @OriginalMember(owner = "client!sc", name = "p", descriptor = "I") + public static int anInt5029 = 0; + @OriginalMember(owner = "client!kd", name = "yb", descriptor = "S") + public static short aShort21 = 32767; + @OriginalMember(owner = "client!ee", name = "f", descriptor = "S") + public static short aShort12 = 1; + @OriginalMember(owner = "client!kk", name = "j", descriptor = "I") + public static int anInt3325 = 0; + @OriginalMember(owner = "client!bi", name = "jb", descriptor = "Z") + public static boolean aBoolean43 = true; + @OriginalMember(owner = "client!wb", name = "c", descriptor = "I") + public static int anInt5794 = -1; + @OriginalMember(owner = "client!k", name = "m", descriptor = "Z") + public static boolean neverRemoveRoofs = false; + @OriginalMember(owner = "client!vk", name = "f", descriptor = "[[[B") + public static byte[][][] aByteArrayArrayArray15; + @OriginalMember(owner = "client!vg", name = "b", descriptor = "S") + public static short aShort30 = 256; + @OriginalMember(owner = "client!vg", name = "c", descriptor = "Z") + public static boolean aBoolean299 = false; + @OriginalMember(owner = "client!lj", name = "z", descriptor = "[I") + public static int[] anIntArray338 = new int[2]; + @OriginalMember(owner = "client!vl", name = "i", descriptor = "[I") + public static int[] anIntArray518 = new int[2]; + @OriginalMember(owner = "client!tk", name = "K", descriptor = "[I") + public static int[] anIntArray476 = new int[2]; + @OriginalMember(owner = "client!e", name = "xc", descriptor = "[I") + public static int[] anIntArray134 = new int[2]; + @OriginalMember(owner = "client!ge", name = "k", descriptor = "[I") + public static int[] anIntArray205 = new int[2]; + @OriginalMember(owner = "client!nm", name = "W", descriptor = "Lclient!na;") + public static JagString url; + @OriginalMember(owner = "client!bf", name = "B", descriptor = "I") + public static int anInt548 = -1; + @OriginalMember(owner = "client!pb", name = "rb", descriptor = "S") + public static short aShort27 = 320; + @OriginalMember(owner = "client!fc", name = "a", descriptor = "I") + public static int anInt1951 = -1; + @OriginalMember(owner = "client!em", name = "w", descriptor = "I") + public static int anInt1892; + @OriginalMember(owner = "client!me", name = "nb", descriptor = "I") + public static int anInt3751; + + @OriginalMember(owner = "client!ja", name = "a", descriptor = "(IIIIIZ)V") + public static void method2314(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) boolean arg4) { + if (arg0 < 1) { + arg0 = 1; + } + if (arg2 < 1) { + arg2 = 1; + } + if (GlRenderer.enabled) { + @Pc(25) int local25 = arg2 - 334; + if (local25 < 0) { + local25 = 0; + } else if (local25 > 100) { + local25 = 100; + } + @Pc(51) int local51 = local25 * (aShort9 - aShort25) / 100 + aShort25; + if (aShort22 > local51) { + local51 = aShort22; + } else if (aShort1 < local51) { + local51 = aShort1; + } + @Pc(73) int local73 = local51 * arg2 * 512 / (arg0 * 334); + @Pc(115) int local115; + @Pc(122) int local122; + @Pc(86) short local86; + if (local73 < aShort12) { + local86 = aShort12; + local51 = arg0 * 334 * local86 / (arg2 * 512); + if (aShort1 < local51) { + local51 = aShort1; + local115 = arg2 * 512 * local51 / (local86 * 334); + local122 = (arg0 - local115) / 2; + if (arg4) { + GlRaster.method1177(); + GlRaster.fillRect(arg3, arg1, local122, arg2, 0); + GlRaster.fillRect(arg0 + arg3 - local122, arg1, local122, arg2, 0); + } + arg3 += local122; + arg0 -= local122 * 2; + } + } else if (aShort21 < local73) { + local86 = aShort21; + local51 = local86 * arg0 * 334 / (arg2 * 512); + if (aShort22 > local51) { + local51 = aShort22; + local115 = local86 * arg0 * 334 / (local51 * 512); + local122 = (arg2 - local115) / 2; + if (arg4) { + GlRaster.method1177(); + GlRaster.fillRect(arg3, arg1, arg0, local122, 0); + GlRaster.fillRect(arg3, arg1 + arg2 - local122, arg0, local122, 0); + } + arg2 -= local122 * 2; + arg1 += local122; + } + } + anInt5029 = local51 * arg2 / 334; + } + anInt4055 = (short) arg0; + anInt5377 = (short) arg2; + anInt773 = arg1; + anInt983 = arg3; + } + + @OriginalMember(owner = "client!ui", name = "a", descriptor = "(IIZIII)V") + public static void method4326(@OriginalArg(1) int arg0, @OriginalArg(2) boolean arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + anInt3325++; + method3711(); + if (!arg1) { + method964(true); + method3240(true); + method964(false); + } + method3240(false); + if (!arg1) { + updateSceneProjectiles(); + } + method4239(); + if (GlRenderer.enabled) { + method2314(arg3, arg4, arg0, arg2, true); + arg2 = anInt983; + arg4 = anInt773; + arg3 = anInt4055; + arg0 = anInt5377; + } + @Pc(59) int local59; + @Pc(57) int local57; + if (Camera.cameraType == 1) { + local57 = Camera.anInt5161 + (int) Camera.yawTarget & 0x7FF; + local59 = (int) Camera.pitchTarget; + if (local59 < Camera.anInt5245 / 256) { + local59 = Camera.anInt5245 / 256; + } + if (Camera.customCameraActive[4] && Camera.cameraAmplitude[4] + 128 > local59) { + local59 = Camera.cameraAmplitude[4] + 128; + } + Camera.method555(Camera.cameraX, arg0, SceneGraph.getTileHeight(Player.plane, PlayerList.self.xFine, PlayerList.self.zFine) - 50, Camera.ZOOM - -(local59 * 3), local57, Camera.cameraZ, local59); + } + local57 = Camera.anInt40; + local59 = Camera.renderX; + @Pc(121) int local121 = Camera.renderZ; + @Pc(123) int local123 = Camera.cameraPitch; + @Pc(125) int local125 = Camera.cameraYaw; + @Pc(127) int local127; + @Pc(171) int local171; + for (local127 = 0; local127 < 5; local127++) { + if (Camera.customCameraActive[local127]) { + local171 = (int) ((double) -Camera.cameraJitter[local127] + (double) (Camera.cameraJitter[local127] * 2 + 1) * Math.random() + Math.sin((double) Protocol.anIntArray76[local127] * ((double) Camera.cameraFrequency[local127] / 100.0D)) * (double) Camera.cameraAmplitude[local127]); + if (local127 == 3) { + Camera.cameraYaw = local171 + Camera.cameraYaw & 0x7FF; + } + if (local127 == 4) { + Camera.cameraPitch += local171; + if (Camera.cameraPitch < 128) { + Camera.cameraPitch = 128; + } + if (Camera.cameraPitch > 383) { + Camera.cameraPitch = 383; + } + } + if (local127 == 2) { + Camera.renderZ += local171; + } + if (local127 == 1) { + Camera.anInt40 += local171; + } + if (local127 == 0) { + Camera.renderX += local171; + } + } + } + method4302(); + if (GlRenderer.enabled) { + GlRaster.setClip(arg2, arg4, arg2 + arg3, arg4 - -arg0); + @Pc(248) float local248 = (float) Camera.cameraPitch * 0.17578125F; + @Pc(253) float local253 = (float) Camera.cameraYaw * 0.17578125F; + if (Camera.cameraType == 3) { + local248 = Camera.aFloat15 * 360.0F / 6.2831855F; + local253 = Camera.aFloat10 * 360.0F / 6.2831855F; + } + GlRenderer.method4171(arg2, arg4, arg3, arg0, arg3 / 2 + arg2, arg4 - -(arg0 / 2), local248, local253, anInt5029, anInt5029); + } else { + SoftwareRaster.setClip(arg2, arg4, arg3 + arg2, arg0 + arg4); + Rasteriser.prepare(); + } + if (Cs1ScriptRunner.aBoolean108 || anInt3751 < arg2 || anInt3751 >= arg3 + arg2 || arg4 > anInt1892 || arg0 + arg4 <= anInt1892) { + RawModel.allowInput = false; + MiniMenu.anInt7 = 0; + } else { + RawModel.allowInput = true; + MiniMenu.anInt7 = 0; + local171 = Rasteriser.screenUpperX; + @Pc(344) int local344 = Rasteriser.screenLowerY; + local127 = Rasteriser.screenLowerX; + GlModel.anInt3582 = local127 + (local171 - local127) * (-arg2 + anInt3751) / arg3; + @Pc(361) int local361 = Rasteriser.screenUpperY; + RawModel.anInt1053 = (local361 - local344) * (anInt1892 - arg4) / arg0 + local344; + } + client.audioLoop(); + @Pc(387) byte local387 = method4047() == 2 ? (byte) anInt3325 : 1; + if (GlRenderer.enabled) { + GlRenderer.restoreLighting(); + GlRenderer.setDepthTestEnabled(true); + GlRenderer.setFogEnabled(true); + if (client.gameState == 10) { + local171 = FogManager.method2235(Protocol.sceneDelta, Camera.renderZ >> 10, Preferences.brightness, Camera.renderX >> 10); + } else { + local171 = FogManager.method2235(Protocol.sceneDelta, PlayerList.self.movementQueueZ[0] >> 3, Preferences.brightness, PlayerList.self.movementQueueX[0] >> 3); + } + LightingManager.method2394(client.loop, !Preferences.flickeringEffectsOn); + GlRenderer.clearColorAndDepthBuffers(local171); + MaterialManager.method2731(Camera.cameraPitch, Camera.renderZ, Camera.anInt40, Camera.renderX, Camera.cameraYaw); + GlRenderer.anInt5323 = client.loop; + SceneGraph.method2954(Camera.renderX, Camera.anInt40, Camera.renderZ, Camera.cameraPitch, Camera.cameraYaw, aByteArrayArrayArray15, anIntArray205, anIntArray338, anIntArray518, anIntArray134, anIntArray476, Player.plane + 1, local387, PlayerList.self.xFine >> 7, PlayerList.self.zFine >> 7); + aBoolean299 = true; + LightingManager.method2390(); + MaterialManager.method2731(0, 0, 0, 0, 0); + client.audioLoop(); + method3858(); + drawOverheads(arg4, arg3, arg2, anInt5029, arg0, anInt5029); + MiniMap.method4000(arg3, arg2, arg0, anInt5029, anInt5029, arg4); + } else { + SoftwareRaster.fillRect(arg2, arg4, arg3, arg0, 0); + SceneGraph.method2954(Camera.renderX, Camera.anInt40, Camera.renderZ, Camera.cameraPitch, Camera.cameraYaw, aByteArrayArrayArray15, anIntArray205, anIntArray338, anIntArray518, anIntArray134, anIntArray476, Player.plane + 1, local387, PlayerList.self.xFine >> 7, PlayerList.self.zFine >> 7); + client.audioLoop(); + method3858(); + drawOverheads(arg4, arg3, arg2, 256, arg0, 256); + MiniMap.method4000(arg3, arg2, arg0, 256, 256, arg4); + } + ((Js5GlTextureProvider) Rasteriser.textureProvider).method3239(Protocol.sceneDelta); + Player.method2310(arg3, arg4, arg0, arg2); + Camera.cameraPitch = local123; + Camera.renderZ = local121; + Camera.anInt40 = local57; + Camera.renderX = local59; + Camera.cameraYaw = local125; + if (aBoolean43 && client.js5NetQueue.getUrgentRequestCount() == 0) { + aBoolean43 = false; + } + if (aBoolean43) { + if (GlRenderer.enabled) { + GlRaster.fillRect(arg2, arg4, arg3, arg0, 0); + } else { + SoftwareRaster.fillRect(arg2, arg4, arg3, arg0, 0); + } + Fonts.drawTextOnScreen(false, LocalizedText.LOADING); + } + if (!arg1 && !aBoolean43 && !Cs1ScriptRunner.aBoolean108 && arg2 <= anInt3751 && arg3 + arg2 > anInt3751 && arg4 <= anInt1892 && arg0 + arg4 > anInt1892) { + MiniMenu.addEntries(arg4, arg3, arg0, arg2, anInt1892, anInt3751); + } + } + + @OriginalMember(owner = "client!lc", name = "a", descriptor = "(IIIIIII)V") + public static void drawOverheads(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + OverheadChat.size = 0; + @Pc(5) int local5; + @Pc(642) int local642; + @Pc(74) int local74; + @Pc(265) int local265; + @Pc(310) int local310; + @Pc(359) int local359; + @Pc(639) int local639; + for (local5 = -1; local5 < PlayerList.size + NpcList.size; local5++) { + @Pc(17) PathingEntity entity; + if (local5 == -1) { + entity = PlayerList.self; + } else if (PlayerList.size > local5) { + entity = PlayerList.players[PlayerList.ids[local5]]; + } else { + entity = NpcList.npcs[NpcList.ids[local5 - PlayerList.size]]; + } + if (entity != null && entity.isVisible()) { + setOverheadScreenCoordinateOffsets(arg4 >> 1, arg3, entity, arg5, entity.method2691() + 15, arg1 >> 1); + if (local5 >= PlayerList.size) { + PluginRepository.NPCOverheadDraw((Npc) entity,arg2 + anInt1951, arg0 + anInt548); + } else { + PluginRepository.PlayerOverheadDraw((Player) entity,arg2 + anInt1951, arg0 + anInt548); + } + + @Pc(58) NpcType local58; + if (entity instanceof Npc) { + local58 = ((Npc) entity).type; + if (local58.multiNpcs != null) { + local58 = local58.getMultiNpc(); + } + if (local58 == null) { + continue; + } + } + @Pc(161) int local161; + if (local5 >= PlayerList.size) { + local58 = ((Npc) entity).type; + if (local58.multiNpcs != null) { + local58 = local58.getMultiNpc(); + } + if (local58.headicon >= 0 && Sprites.headiconPrayers.length > local58.headicon) { + if (local58.iconHeight == -1) { + local265 = entity.method2691() + 15; + } else { + local265 = local58.iconHeight + 15; + } + setOverheadScreenCoordinateOffsets(arg4 >> 1, arg3, entity, arg5, local265, arg1 >> 1); + if (anInt1951 > -1) { + Sprites.headiconPrayers[local58.headicon].render(arg2 + anInt1951 - 12, arg0 + -30 - -anInt548); + } + } + @Pc(308) MapMarker[] local308 = MiniMap.hintMapMarkers; + for (local310 = 0; local310 < local308.length; local310++) { + @Pc(322) MapMarker local322 = local308[local310]; + if (local322 != null && local322.type == 1 && local322.actorTargetId == NpcList.ids[local5 - PlayerList.size] && client.loop % 20 < 10) { + if (local58.iconHeight == -1) { + local359 = entity.method2691() + 15; + } else { + local359 = local58.iconHeight + 15; + } + setOverheadScreenCoordinateOffsets(arg4 >> 1, arg3, entity, arg5, local359, arg1 >> 1); + if (anInt1951 > -1) { + Sprites.headhints[local322.anInt4048].render(arg2 + anInt1951 - 12, anInt548 + -28 + arg0); + } + } + } + } else { + local74 = 30; + @Pc(77) Player local77 = (Player) entity; + if (local77.anInt1669 != -1 || local77.anInt1649 != -1) { + setOverheadScreenCoordinateOffsets(arg4 >> 1, arg3, entity, arg5, entity.method2691() + 15, arg1 >> 1); + if (anInt1951 > -1) { + if (local77.anInt1669 != -1) { + Sprites.headiconPks[local77.anInt1669].render(anInt1951 + arg2 - 12, arg0 + -30 + anInt548); + local74 += 25; + } + if (local77.anInt1649 != -1) { + Sprites.headiconPrayers[local77.anInt1649].render(arg2 + anInt1951 - 12, arg0 - (-anInt548 + local74)); + local74 += 25; + } + } + } + if (local5 >= 0) { + @Pc(159) MapMarker[] local159 = MiniMap.hintMapMarkers; + for (local161 = 0; local161 < local159.length; local161++) { + @Pc(173) MapMarker local173 = local159[local161]; + if (local173 != null && local173.type == 10 && PlayerList.ids[local5] == local173.actorTargetId) { + setOverheadScreenCoordinateOffsets(arg4 >> 1, arg3, entity, arg5, entity.method2691() + 15, arg1 >> 1); + if (anInt1951 > -1) { + Sprites.headhints[local173.anInt4048].render(arg2 + anInt1951 - 12, arg0 + (anInt548 - local74)); + } + } + } + } + } + if (entity.chatMessage != null && (local5 >= PlayerList.size || Chat.publicFilter == 0 || Chat.publicFilter == 3 || Chat.publicFilter == 1 && FriendsList.contains(((Player) entity).username))) { + setOverheadScreenCoordinateOffsets(arg4 >> 1, arg3, entity, arg5, entity.method2691(), arg1 >> 1); + if (anInt1951 > -1 && OverheadChat.size < OverheadChat.CAPACITY) { + OverheadChat.anIntArray389[OverheadChat.size] = Fonts.b12Full.getStringWidth(entity.chatMessage) / 2; + OverheadChat.anIntArray387[OverheadChat.size] = Fonts.b12Full.lineHeight; + OverheadChat.anIntArray385[OverheadChat.size] = anInt1951; + OverheadChat.anIntArray392[OverheadChat.size] = anInt548; + OverheadChat.colors[OverheadChat.size] = entity.chatColor; + OverheadChat.effects[OverheadChat.size] = entity.chatEffect; + OverheadChat.loops[OverheadChat.size] = entity.chatLoops; + OverheadChat.messages[OverheadChat.size] = entity.chatMessage; + OverheadChat.size++; + } + } + if (entity.hitpointsBarVisibleUntil > client.loop) { + @Pc(508) Sprite local508 = Sprites.hitbars[0]; + @Pc(512) Sprite local512 = Sprites.hitbars[1]; + if (entity instanceof Npc) { + @Pc(518) Npc local518 = (Npc) entity; + @Pc(528) Sprite[] local528 = (Sprite[]) HitBarList.hitBars.get(local518.type.hitBarId); + if (local528 == null) { + local528 = SpriteLoader.loadAlphaSprites(local518.type.hitBarId, client.js5Archive8); + if (local528 != null) { + HitBarList.hitBars.put(local528, local518.type.hitBarId); + } + } + if (local528 != null && local528.length == 2) { + local512 = local528[1]; + local508 = local528[0]; + } + @Pc(571) NpcType local571 = local518.type; + if (local571.iconHeight == -1) { + local310 = entity.method2691(); + } else { + local310 = local571.iconHeight; + } + } else { + local310 = entity.method2691(); + } + setOverheadScreenCoordinateOffsets(arg4 >> 1, arg3, entity, arg5, local508.height + local310 + 10, arg1 >> 1); + if (anInt1951 > -1) { + local161 = anInt1951 + arg2 - (local508.width >> 1); + local359 = anInt548 + arg0 - 3; + local508.render(local161, local359); + local639 = local508.width * entity.hitpointsBar / 255; + local642 = local508.height; + if (GlRenderer.enabled) { + GlRaster.method1183(local161, local359, local161 + local639, local359 + local642); + } else { + SoftwareRaster.method2498(local161, local359, local161 + local639, local642 + local359); + } + local512.render(local161, local359); + if (GlRenderer.enabled) { + GlRaster.setClip(arg2, arg0, arg1 + arg2, arg0 - -arg4); + } else { + SoftwareRaster.setClip(arg2, arg0, arg1 + arg2, arg4 + arg0); + } + } + } + for (local74 = 0; local74 < 4; local74++) { + if (entity.hitVisibleUntil[local74] > client.loop) { + if (entity instanceof Npc) { + @Pc(725) Npc local725 = (Npc) entity; + @Pc(728) NpcType local728 = local725.type; + if (local728.iconHeight == -1) { + local265 = entity.method2691() / 2; + } else { + local265 = local728.iconHeight / 2; + } + } else { + local265 = entity.method2691() / 2; + } + setOverheadScreenCoordinateOffsets(arg4 >> 1, arg3, entity, arg5, local265, arg1 >> 1); + if (anInt1951 > -1) { + if (local74 == 1) { + anInt548 -= 20; + } + if (local74 == 2) { + anInt548 -= 10; + anInt1951 -= 15; + } + if (local74 == 3) { + anInt548 -= 10; + anInt1951 += 15; + } + Sprites.hitmarks[entity.hitTypes[local74]].render(arg2 + anInt1951 - 12, arg0 + anInt548 - 12); + Fonts.p11Full.renderCenter(JagString.parseInt(entity.hitDamages[local74]), anInt1951 + arg2 - 1, anInt548 + 3 + arg0, 16777215, 0); + } + } + } + } + } + for (local5 = 0; local5 < OverheadChat.size; local5++) { + local74 = OverheadChat.anIntArray392[local5]; + @Pc(859) int local859 = OverheadChat.anIntArray385[local5]; + local310 = OverheadChat.anIntArray387[local5]; + local265 = OverheadChat.anIntArray389[local5]; + @Pc(869) boolean local869 = true; + while (local869) { + local869 = false; + for (local359 = 0; local359 < local5; local359++) { + if (OverheadChat.anIntArray392[local359] - OverheadChat.anIntArray387[local359] < local74 + 2 && local74 - local310 < OverheadChat.anIntArray392[local359] - -2 && local859 - local265 < OverheadChat.anIntArray385[local359] + OverheadChat.anIntArray389[local359] && OverheadChat.anIntArray385[local359] - OverheadChat.anIntArray389[local359] < local265 + local859 && OverheadChat.anIntArray392[local359] - OverheadChat.anIntArray387[local359] < local74) { + local74 = OverheadChat.anIntArray392[local359] - OverheadChat.anIntArray387[local359]; + local869 = true; + } + } + } + anInt1951 = OverheadChat.anIntArray385[local5]; + anInt548 = OverheadChat.anIntArray392[local5] = local74; + @Pc(962) JagString local962 = OverheadChat.messages[local5]; + if (VarpDomain.chatEffectsDisabled == 0) { + local639 = 16776960; + if (OverheadChat.colors[local5] < 6) { + local639 = OverheadChat.COLORS[OverheadChat.colors[local5]]; + } + if (OverheadChat.colors[local5] == 6) { + local639 = anInt3325 % 20 >= 10 ? 16776960 : 16711680; + } + if (OverheadChat.colors[local5] == 7) { + local639 = anInt3325 % 20 < 10 ? 255 : 65535; + } + if (OverheadChat.colors[local5] == 8) { + local639 = anInt3325 % 20 >= 10 ? 8454016 : 45056; + } + if (OverheadChat.colors[local5] == 9) { + local642 = 150 - OverheadChat.loops[local5]; + if (local642 < 50) { + local639 = local642 * 1280 + 16711680; + } else if (local642 < 100) { + local639 = 16776960 + 16384000 - local642 * 327680; + } else if (local642 < 150) { + local639 = local642 * 5 + 65280 - 500; + } + } + if (OverheadChat.colors[local5] == 10) { + local642 = 150 - OverheadChat.loops[local5]; + if (local642 < 50) { + local639 = local642 * 5 + 16711680; + } else if (local642 < 100) { + local639 = 16711935 - (local642 - 50) * 327680; + } else if (local642 < 150) { + local639 = local642 * 327680 + 255 + 500 - local642 * 5 - 32768000; + } + } + if (OverheadChat.colors[local5] == 11) { + local642 = 150 - OverheadChat.loops[local5]; + if (local642 < 50) { + local639 = 16777215 - local642 * 327685; + } else if (local642 < 100) { + local639 = local642 * 327685 + 65280 - 16384250; + } else if (local642 < 150) { + local639 = 16777215 + 32768000 - local642 * 327680; + } + } + if (OverheadChat.effects[local5] == 0) { + Fonts.b12Full.renderCenter(local962, anInt1951 + arg2, arg0 + anInt548, local639, 0); + } + if (OverheadChat.effects[local5] == 1) { + Fonts.b12Full.renderWave(local962, arg2 + anInt1951, anInt548 + arg0, local639, anInt3325); + } + if (OverheadChat.effects[local5] == 2) { + Fonts.b12Full.renderWave2(local962, arg2 + anInt1951, arg0 - -anInt548, local639, anInt3325); + } + if (OverheadChat.effects[local5] == 3) { + Fonts.b12Full.renderShake(local962, arg2 + anInt1951, anInt548 + arg0, local639, anInt3325, 150 - OverheadChat.loops[local5]); + } + if (OverheadChat.effects[local5] == 4) { + local642 = (150 - OverheadChat.loops[local5]) * (Fonts.b12Full.getStringWidth(local962) + 100) / 150; + if (GlRenderer.enabled) { + GlRaster.method1183(anInt1951 + arg2 - 50, arg0, anInt1951 + arg2 + 50, arg4 + arg0); + } else { + SoftwareRaster.method2498(arg2 + anInt1951 - 50, arg0, anInt1951 + arg2 + 50, arg4 + arg0); + } + Fonts.b12Full.renderLeft(local962, arg2 + anInt1951 + 50 - local642, arg0 + anInt548, local639, 0); + if (GlRenderer.enabled) { + GlRaster.setClip(arg2, arg0, arg1 + arg2, arg4 + arg0); + } else { + SoftwareRaster.setClip(arg2, arg0, arg2 + arg1, arg0 + arg4); + } + } + if (OverheadChat.effects[local5] == 5) { + @Pc(1372) int local1372 = 0; + local642 = 150 - OverheadChat.loops[local5]; + if (GlRenderer.enabled) { + GlRaster.method1183(arg2, anInt548 + arg0 - Fonts.b12Full.lineHeight - 1, arg1 + arg2, arg0 + anInt548 + 5); + } else { + SoftwareRaster.method2498(arg2, anInt548 + arg0 - Fonts.b12Full.lineHeight - 1, arg2 + arg1, anInt548 + arg0 + 5); + } + if (local642 < 25) { + local1372 = local642 - 25; + } else if (local642 > 125) { + local1372 = local642 - 125; + } + Fonts.b12Full.renderCenter(local962, anInt1951 + arg2, local1372 + arg0 + anInt548, local639, 0); + if (GlRenderer.enabled) { + GlRaster.setClip(arg2, arg0, arg2 + arg1, arg0 + arg4); + } else { + SoftwareRaster.setClip(arg2, arg0, arg2 + arg1, arg0 + arg4); + } + } + } else { + Fonts.b12Full.renderCenter(local962, arg2 + anInt1951, arg0 + anInt548, 16776960, 0); + } + } + } + + @OriginalMember(owner = "client!rb", name = "a", descriptor = "(I)V") + public static void method3711() { + for (@Pc(7) int local7 = 0; local7 < 104; local7++) { + for (@Pc(14) int local14 = 0; local14 < 104; local14++) { + anIntArrayArray6[local7][local14] = 0; + } + } + } + + @OriginalMember(owner = "client!cn", name = "b", descriptor = "(ZI)V") + public static void method964(@OriginalArg(0) boolean arg0) { + @Pc(3) int local3 = PlayerList.size; + if (LoginManager.mapFlagX == PlayerList.self.xFine >> 7 && PlayerList.self.zFine >> 7 == LoginManager.mapFlagZ) { + LoginManager.mapFlagX = 0; + } + if (arg0) { + local3 = 1; + } + @Pc(28) int local28; + @Pc(39) Player local39; + @Pc(82) int local82; + @Pc(182) int local182; + @Pc(200) int local200; + @Pc(214) int local214; + @Pc(223) int local223; + @Pc(106) int local106; + for (local28 = 0; local28 < local3; local28++) { + if (arg0) { + local39 = PlayerList.self; + } else { + local39 = PlayerList.players[PlayerList.ids[local28]]; + } + if (local39 != null && local39.isVisible()) { + @Pc(55) int local55 = local39.getSize(); + @Pc(77) int local77; + if (local55 == 1) { + if ((local39.xFine & 0x7F) == 64 && (local39.zFine & 0x7F) == 64) { + local77 = local39.xFine >> 7; + local82 = local39.zFine >> 7; + if (local77 >= 0 && local77 < 104 && local82 >= 0 && local82 < 104) { + local106 = anIntArrayArray6[local77][local82]++; + } + } + } else if (((local55 & 0x1) != 0 || (local39.xFine & 0x7F) == 0 && (local39.zFine & 0x7F) == 0) && ((local55 & 0x1) != 1 || (local39.xFine & 0x7F) == 64 && (local39.zFine & 0x7F) == 64)) { + local77 = local39.xFine - local55 * 64 >> 7; + local82 = local39.zFine - local55 * 64 >> 7; + local182 = local39.getSize() + local77; + if (local182 > 104) { + local182 = 104; + } + if (local77 < 0) { + local77 = 0; + } + local200 = local82 + local39.getSize(); + if (local82 < 0) { + local82 = 0; + } + if (local200 > 104) { + local200 = 104; + } + for (local214 = local77; local214 < local182; local214++) { + for (local223 = local82; local223 < local200; local223++) { + local106 = anIntArrayArray6[local214][local223]++; + } + } + } + } + } + label220: + for (local28 = 0; local28 < local3; local28++) { + @Pc(272) long local272; + if (arg0) { + local39 = PlayerList.self; + local272 = 8791798054912L; + } else { + local39 = PlayerList.players[PlayerList.ids[local28]]; + local272 = (long) PlayerList.ids[local28] << 32; + } + if (local39 != null && local39.isVisible()) { + local39.aBoolean98 = (Preferences.manyIdleAnimations && PlayerList.size > 200 || PlayerList.size > 50) && !arg0 && local39.movementSeqId == local39.getBasType().idleAnimationId; + local82 = local39.getSize(); + if (local82 == 1) { + if ((local39.xFine & 0x7F) == 64 && (local39.zFine & 0x7F) == 64) { + local182 = local39.xFine >> 7; + local200 = local39.zFine >> 7; + if (local182 < 0 || local182 >= 104 || local200 < 0 || local200 >= 104) { + continue; + } + if (anIntArrayArray6[local182][local200] > 1) { + local106 = anIntArrayArray6[local182][local200]--; + continue; + } + } + } else if ((local82 & 0x1) == 0 && (local39.xFine & 0x7F) == 0 && (local39.zFine & 0x7F) == 0 || (local82 & 0x1) == 1 && (local39.xFine & 0x7F) == 64 && (local39.zFine & 0x7F) == 0) { + local182 = local39.xFine - local82 * 64 >> 7; + local214 = local82 + local182; + local200 = local39.zFine - local82 * 64 >> 7; + if (local214 > 104) { + local214 = 104; + } + if (local182 < 0) { + local182 = 0; + } + local223 = local82 + local200; + if (local200 < 0) { + local200 = 0; + } + @Pc(468) boolean local468 = true; + if (local223 > 104) { + local223 = 104; + } + @Pc(476) int local476; + @Pc(485) int local485; + for (local476 = local182; local476 < local214; local476++) { + for (local485 = local200; local485 < local223; local485++) { + if (anIntArrayArray6[local476][local485] <= 1) { + local468 = false; + break; + } + } + } + if (local468) { + local476 = local182; + while (true) { + if (local476 >= local214) { + continue label220; + } + for (local485 = local200; local485 < local223; local485++) { + local106 = anIntArrayArray6[local476][local485]--; + } + local476++; + } + } + } + if (local39.attachment == null || client.loop < local39.attachmentSetAt || local39.attachmentResetAt <= client.loop) { + local39.anInt3424 = SceneGraph.getTileHeight(Player.plane, local39.xFine, local39.zFine); + SceneGraph.add(Player.plane, local39.xFine, local39.zFine, local39.anInt3424, (local82 - 1) * 64 + 60, local39, local39.anInt3381, local272, local39.aBoolean171); + } else { + local39.aBoolean98 = false; + local39.anInt3424 = SceneGraph.getTileHeight(Player.plane, local39.xFine, local39.zFine); + method3387(Player.plane, local39.xFine, local39.zFine, local39.anInt3424, local39, local39.anInt3381, local272, local39.atachmentX0, local39.attachmentZ0, local39.attachmentX1, local39.attachmentZ1); + } + } + } + } + + @OriginalMember(owner = "client!nk", name = "c", descriptor = "(IZ)V") + public static void method3240(@OriginalArg(1) boolean arg0) { + @Pc(7) int local7; + @Pc(16) Npc local16; + @Pc(107) int local107; + @Pc(113) int local113; + @Pc(133) int local133; + @Pc(149) int local149; + @Pc(158) int local158; + @Pc(171) int local171; + for (local7 = 0; local7 < NpcList.size; local7++) { + local16 = NpcList.npcs[NpcList.ids[local7]]; + if (local16 != null && local16.isVisible() && local16.type.toprenderpriority == arg0 && local16.type.isMultiNpcValid()) { + @Pc(42) int local42 = local16.getSize(); + @Pc(97) int local97; + if (local42 == 1) { + if ((local16.xFine & 0x7F) == 64 && (local16.zFine & 0x7F) == 64) { + local97 = local16.xFine >> 7; + local107 = local16.zFine >> 7; + if (local97 >= 0 && local97 < 104 && local107 >= 0 && local107 < 104) { + local171 = anIntArrayArray6[local97][local107]++; + } + } + } else if (((local42 & 0x1) != 0 || (local16.xFine & 0x7F) == 0 && (local16.zFine & 0x7F) == 0) && ((local42 & 0x1) != 1 || (local16.xFine & 0x7F) == 64 && (local16.zFine & 0x7F) == 64)) { + local97 = local16.xFine - local42 * 64 >> 7; + local107 = local16.zFine - local42 * 64 >> 7; + local113 = local16.getSize() + local97; + if (local97 < 0) { + local97 = 0; + } + if (local113 > 104) { + local113 = 104; + } + local133 = local107 + local16.getSize(); + if (local107 < 0) { + local107 = 0; + } + if (local133 > 104) { + local133 = 104; + } + for (local149 = local97; local149 < local113; local149++) { + for (local158 = local107; local158 < local133; local158++) { + local171 = anIntArrayArray6[local149][local158]++; + } + } + } + } + } + label200: + for (local7 = 0; local7 < NpcList.size; local7++) { + local16 = NpcList.npcs[NpcList.ids[local7]]; + @Pc(262) long local262 = (long) NpcList.ids[local7] << 32 | 0x20000000L; + if (local16 != null && local16.isVisible() && local16.type.toprenderpriority == arg0 && local16.type.isMultiNpcValid()) { + local107 = local16.getSize(); + if (local107 == 1) { + if ((local16.xFine & 0x7F) == 64 && (local16.zFine & 0x7F) == 64) { + local113 = local16.xFine >> 7; + local133 = local16.zFine >> 7; + if (local113 < 0 || local113 >= 104 || local133 < 0 || local133 >= 104) { + continue; + } + if (anIntArrayArray6[local113][local133] > 1) { + local171 = anIntArrayArray6[local113][local133]--; + continue; + } + } + } else if ((local107 & 0x1) == 0 && (local16.xFine & 0x7F) == 0 && (local16.zFine & 0x7F) == 0 || (local107 & 0x1) == 1 && (local16.xFine & 0x7F) == 64 && (local16.zFine & 0x7F) == 64) { + local113 = local16.xFine - local107 * 64 >> 7; + local133 = local16.zFine - local107 * 64 >> 7; + local158 = local133 + local107; + if (local133 < 0) { + local133 = 0; + } + @Pc(368) boolean local368 = true; + local149 = local113 + local107; + if (local158 > 104) { + local158 = 104; + } + if (local113 < 0) { + local113 = 0; + } + if (local149 > 104) { + local149 = 104; + } + @Pc(396) int local396; + @Pc(401) int local401; + for (local396 = local113; local396 < local149; local396++) { + for (local401 = local133; local401 < local158; local401++) { + if (anIntArrayArray6[local396][local401] <= 1) { + local368 = false; + break; + } + } + } + if (local368) { + local396 = local113; + while (true) { + if (local396 >= local149) { + continue label200; + } + for (local401 = local133; local401 < local158; local401++) { + local171 = anIntArrayArray6[local396][local401]--; + } + local396++; + } + } + } + if (!local16.type.interactive) { + local262 |= Long.MIN_VALUE; + } + local16.anInt3424 = SceneGraph.getTileHeight(Player.plane, local16.xFine, local16.zFine); + SceneGraph.add(Player.plane, local16.xFine, local16.zFine, local16.anInt3424, local107 * 64 + 60 - 64, local16, local16.anInt3381, local262, local16.aBoolean171); + } + } + } + + @OriginalMember(owner = "client!pk", name = "i", descriptor = "(I)V") + public static void updateSceneProjectiles() { + for (@Pc(16) ProjAnimNode local16 = (ProjAnimNode) SceneGraph.projectiles.head(); local16 != null; local16 = (ProjAnimNode) SceneGraph.projectiles.next()) { + @Pc(21) ProjAnim local21 = local16.value; + if (Player.plane != local21.currentPlane || local21.lastCycle < client.loop) { + local16.unlink(); + } else if (client.loop >= local21.firstCycle) { + if (local21.targetIndex > 0) { + @Pc(54) Npc local54 = NpcList.npcs[local21.targetIndex - 1]; + if (local54 != null && local54.xFine >= 0 && local54.xFine < 13312 && local54.zFine >= 0 && local54.zFine < 13312) { + local21.setTarget(local54.zFine, client.loop, SceneGraph.getTileHeight(local21.currentPlane, local54.xFine, local54.zFine) - local21.baseZ, local54.xFine); + } + } + if (local21.targetIndex < 0) { + @Pc(102) int local102 = -local21.targetIndex - 1; + @Pc(107) Player local107; + if (PlayerList.selfId == local102) { + local107 = PlayerList.self; + } else { + local107 = PlayerList.players[local102]; + } + if (local107 != null && local107.xFine >= 0 && local107.xFine < 13312 && local107.zFine >= 0 && local107.zFine < 13312) { + local21.setTarget(local107.zFine, client.loop, SceneGraph.getTileHeight(local21.currentPlane, local107.xFine, local107.zFine) - local21.baseZ, local107.xFine); + } + } + local21.update(Protocol.sceneDelta); + SceneGraph.add(Player.plane, (int) local21.x, (int) local21.y, (int) local21.z, 60, local21, local21.yaw, -1L, false); + } + } + } + + @OriginalMember(owner = "client!u", name = "a", descriptor = "(Z)V") + public static void method4239() { + for (@Pc(9) SpotAnimNode local9 = (SpotAnimNode) SceneGraph.spotanims.head(); local9 != null; local9 = (SpotAnimNode) SceneGraph.spotanims.next()) { + @Pc(15) SpotAnim local15 = local9.aClass8_Sub2_1; + if (local15.anInt606 != Player.plane || local15.aBoolean41) { + local9.unlink(); + } else if (local15.anInt590 <= client.loop) { + local15.method558(Protocol.sceneDelta); + if (local15.aBoolean41) { + local9.unlink(); + } else { + SceneGraph.add(local15.anInt606, local15.anInt604, local15.anInt598, local15.anInt599, 60, local15, 0, -1L, false); + } + } + } + } + + @OriginalMember(owner = "client!wa", name = "o", descriptor = "(I)V") + public static void method2218() { + @Pc(8) int local8 = method4047(); + if (local8 == 0) { + aByteArrayArrayArray15 = null; + method3993(0); + } else if (local8 == 1) { + method960((byte) 0); + method3993(512); + method2608(); + } else { + method960((byte) (anInt3325 - 4 & 0xFF)); + method3993(2); + } + } + + @OriginalMember(owner = "client!tc", name = "a", descriptor = "(B)I") + public static int method4047() { + if (neverRemoveRoofs) { + return 0; + } else if (SceneGraph.allLevelsAreVisible()) { + return Preferences.removeRoofsSelectively ? 2 : 1; + } else { + return 1; + } + } + + @OriginalMember(owner = "client!ok", name = "a", descriptor = "(IIB)Lclient!ce;") + public static SecondaryLinkedList method3333(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(9) SecondaryLinkedList local9 = new SecondaryLinkedList(); + for (@Pc(14) Map local14 = (Map) MapList.aClass69_120.head(); local14 != null; local14 = (Map) MapList.aClass69_120.next()) { + if (local14.valid && local14.method664(arg1, arg0)) { + local9.addTail(local14); + } + } + return local9; + } + + @OriginalMember(owner = "client!cn", name = "a", descriptor = "(BB)V") + public static void method960(@OriginalArg(0) byte arg0) { + if (aByteArrayArrayArray15 == null) { + aByteArrayArrayArray15 = new byte[4][104][104]; + } + for (@Pc(20) int local20 = 0; local20 < 4; local20++) { + for (@Pc(25) int local25 = 0; local25 < 104; local25++) { + for (@Pc(32) int local32 = 0; local32 < 104; local32++) { + aByteArrayArrayArray15[local20][local25][local32] = arg0; + } + } + } + } + + @OriginalMember(owner = "client!sm", name = "a", descriptor = "(II)V") + public static void method3993(@OriginalArg(0) int arg0) { + anIntArray338 = new int[arg0]; + anIntArray518 = new int[arg0]; + anIntArray476 = new int[arg0]; + anIntArray134 = new int[arg0]; + anIntArray205 = new int[arg0]; + } + + @OriginalMember(owner = "client!ke", name = "f", descriptor = "(B)V") + public static void method2608() { + @Pc(7) int local7 = 0; + for (@Pc(23) int local23 = 0; local23 < 104; local23++) { + for (@Pc(30) int local30 = 0; local30 < 104; local30++) { + if (method4348(true, local23, local30, SceneGraph.tiles, local7)) { + local7++; + } + if (local7 >= 512) { + return; + } + } + } + } + + @OriginalMember(owner = "client!uj", name = "a", descriptor = "(BZII[[[Lclient!bj;I)Z") + public static boolean method4348(@OriginalArg(1) boolean arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) Tile[][][] arg3, @OriginalArg(5) int arg4) { + @Pc(14) byte local14 = arg0 ? 1 : (byte) (anInt3325 & 0xFF); + if (local14 == aByteArrayArrayArray15[Player.plane][arg1][arg2]) { + return false; + } else if ((SceneGraph.renderFlags[Player.plane][arg1][arg2] & 0x4) == 0) { + return false; + } else { + @Pc(47) int local47 = 0; + @Pc(49) byte local49 = 0; + PathFinder.queueX[0] = arg1; + @Pc(69) int local69 = local49 + 1; + PathFinder.queueZ[0] = arg2; + aByteArrayArrayArray15[Player.plane][arg1][arg2] = local14; + while (local47 != local69) { + @Pc(94) int local94 = PathFinder.queueX[local47] >> 16 & 0xFF; + @Pc(102) int local102 = PathFinder.queueX[local47] >> 24 & 0xFF; + @Pc(108) int local108 = PathFinder.queueX[local47] & 0xFFFF; + @Pc(116) int local116 = PathFinder.queueZ[local47] >> 16 & 0xFF; + @Pc(122) int local122 = PathFinder.queueZ[local47] & 0xFFFF; + local47 = local47 + 1 & 0xFFF; + @Pc(130) boolean local130 = false; + @Pc(132) boolean local132 = false; + if ((SceneGraph.renderFlags[Player.plane][local108][local122] & 0x4) == 0) { + local130 = true; + } + @Pc(150) int local150; + @Pc(191) int local191; + label238: + for (local150 = Player.plane + 1; local150 <= 3; local150++) { + if ((SceneGraph.renderFlags[local150][local108][local122] & 0x8) == 0) { + @Pc(227) int local227; + @Pc(358) int local358; + if (local130 && arg3[local150][local108][local122] != null) { + if (arg3[local150][local108][local122].wall != null) { + local191 = SceneGraph.method2251(local94); + if (arg3[local150][local108][local122].wall.anInt3049 == local191 || arg3[local150][local108][local122].wall.anInt3052 == local191) { + continue; + } + if (local102 != 0) { + local227 = SceneGraph.method2251(local102); + if (local227 == arg3[local150][local108][local122].wall.anInt3049 || arg3[local150][local108][local122].wall.anInt3052 == local227) { + continue; + } + } + if (local116 != 0) { + local227 = SceneGraph.method2251(local116); + if (local227 == arg3[local150][local108][local122].wall.anInt3049 || local227 == arg3[local150][local108][local122].wall.anInt3052) { + continue; + } + } + } + if (arg3[local150][local108][local122].scenery != null) { + for (local191 = 0; local191 < arg3[local150][local108][local122].sceneryLen; local191++) { + local227 = (int) (arg3[local150][local108][local122].scenery[local191].key >> 14 & 0x3FL); + if (local227 == 21) { + local227 = 19; + } + @Pc(352) int local352 = (int) (arg3[local150][local108][local122].scenery[local191].key >> 20 & 0x3L); + local358 = local227 | local352 << 6; + if (local358 == local94 || local102 != 0 && local358 == local102 || local116 != 0 && local116 == local358) { + continue label238; + } + } + } + } + local132 = true; + @Pc(395) Tile local395 = arg3[local150][local108][local122]; + if (local395 != null && local395.sceneryLen > 0) { + for (local227 = 0; local227 < local395.sceneryLen; local227++) { + @Pc(418) Scenery local418 = local395.scenery[local227]; + if (local418.xMax != local418.xMin || local418.zMax != local418.zMin) { + for (local358 = local418.xMin; local358 <= local418.xMax; local358++) { + for (@Pc(450) int local450 = local418.zMin; local450 <= local418.zMax; local450++) { + aByteArrayArrayArray15[local150][local358][local450] = local14; + } + } + } + } + } + aByteArrayArrayArray15[local150][local108][local122] = local14; + } + } + if (local132) { + if (SceneGraph.tileHeights[Player.plane + 1][local108][local122] > anIntArray205[arg4]) { + anIntArray205[arg4] = SceneGraph.tileHeights[Player.plane + 1][local108][local122]; + } + local150 = local108 << 7; + if (local150 < anIntArray338[arg4]) { + anIntArray338[arg4] = local150; + } else if (anIntArray518[arg4] < local150) { + anIntArray518[arg4] = local150; + } + local191 = local122 << 7; + if (anIntArray476[arg4] > local191) { + anIntArray476[arg4] = local191; + } else if (anIntArray134[arg4] < local191) { + anIntArray134[arg4] = local191; + } + } + if (!local130) { + if (local108 >= 1 && aByteArrayArrayArray15[Player.plane][local108 - 1][local122] != local14) { + PathFinder.queueX[local69] = local108 - 1 | 0x120000 | 0xD3000000; + PathFinder.queueZ[local69] = local122 | 0x130000; + local69 = local69 + 1 & 0xFFF; + aByteArrayArrayArray15[Player.plane][local108 - 1][local122] = local14; + } + local122++; + if (local122 < 104) { + if (local108 - 1 >= 0 && local14 != aByteArrayArrayArray15[Player.plane][local108 - 1][local122] && (SceneGraph.renderFlags[Player.plane][local108][local122] & 0x4) == 0 && (SceneGraph.renderFlags[Player.plane][local108 - 1][local122 - 1] & 0x4) == 0) { + PathFinder.queueX[local69] = 0x52000000 | 0x120000 | local108 - 1; + PathFinder.queueZ[local69] = local122 | 0x130000; + aByteArrayArrayArray15[Player.plane][local108 - 1][local122] = local14; + local69 = local69 + 1 & 0xFFF; + } + if (local14 != aByteArrayArrayArray15[Player.plane][local108][local122]) { + PathFinder.queueX[local69] = local108 | 0x13000000 | 0x520000; + PathFinder.queueZ[local69] = local122 | 0x530000; + local69 = local69 + 1 & 0xFFF; + aByteArrayArrayArray15[Player.plane][local108][local122] = local14; + } + if (local108 + 1 < 104 && aByteArrayArrayArray15[Player.plane][local108 + 1][local122] != local14 && (SceneGraph.renderFlags[Player.plane][local108][local122] & 0x4) == 0 && (SceneGraph.renderFlags[Player.plane][local108 + 1][local122 - 1] & 0x4) == 0) { + PathFinder.queueX[local69] = 0x92000000 | 0x520000 | local108 + 1; + PathFinder.queueZ[local69] = local122 | 0x530000; + aByteArrayArrayArray15[Player.plane][local108 + 1][local122] = local14; + local69 = local69 + 1 & 0xFFF; + } + } + local122--; + if (local108 + 1 < 104 && local14 != aByteArrayArrayArray15[Player.plane][local108 + 1][local122]) { + PathFinder.queueX[local69] = local108 + 1 | 0x920000 | 0x53000000; + PathFinder.queueZ[local69] = local122 | 0x930000; + aByteArrayArrayArray15[Player.plane][local108 + 1][local122] = local14; + local69 = local69 + 1 & 0xFFF; + } + local122--; + if (local122 >= 0) { + if (local108 - 1 >= 0 && aByteArrayArrayArray15[Player.plane][local108 - 1][local122] != local14 && (SceneGraph.renderFlags[Player.plane][local108][local122] & 0x4) == 0 && (SceneGraph.renderFlags[Player.plane][local108 - 1][local122 + 1] & 0x4) == 0) { + PathFinder.queueX[local69] = local108 - 1 | 0xD20000 | 0x12000000; + PathFinder.queueZ[local69] = local122 | 0xD30000; + aByteArrayArrayArray15[Player.plane][local108 - 1][local122] = local14; + local69 = local69 + 1 & 0xFFF; + } + if (local14 != aByteArrayArrayArray15[Player.plane][local108][local122]) { + PathFinder.queueX[local69] = local108 | 0xD20000 | 0x93000000; + PathFinder.queueZ[local69] = local122 | 0xD30000; + local69 = local69 + 1 & 0xFFF; + aByteArrayArrayArray15[Player.plane][local108][local122] = local14; + } + if (local108 + 1 < 104 && aByteArrayArrayArray15[Player.plane][local108 + 1][local122] != local14 && (SceneGraph.renderFlags[Player.plane][local108][local122] & 0x4) == 0 && (SceneGraph.renderFlags[Player.plane][local108 + 1][local122 + 1] & 0x4) == 0) { + PathFinder.queueX[local69] = local108 + 1 | 0xD2000000 | 0x920000; + PathFinder.queueZ[local69] = local122 | 0x930000; + aByteArrayArrayArray15[Player.plane][local108 + 1][local122] = local14; + local69 = local69 + 1 & 0xFFF; + } + } + } + } + if (anIntArray205[arg4] != -1000000) { + anIntArray205[arg4] += 10; + anIntArray338[arg4] -= 50; + anIntArray518[arg4] += 50; + anIntArray134[arg4] += 50; + anIntArray476[arg4] -= 50; + } + return true; + } + } + + @OriginalMember(owner = "client!nf", name = "a", descriptor = "(Lclient!na;BZ)V") + public static void openUrl(@OriginalArg(0) JagString arg0, @OriginalArg(2) boolean arg1) { + if (!arg1) { + try { + GameShell.instance.getAppletContext().showDocument(arg0.method3127(GameShell.instance.getCodeBase()), "_top"); + } catch (@Pc(22) Exception local22) { + } + return; + } + if (GlRenderer.enabled && GameShell.openWindowJavaScript) { + try { + BrowserControl.call(GameShell.signLink.applet, "openjs", new Object[]{arg0.method3127(GameShell.instance.getCodeBase()).toString()}); + return; + } catch (@Pc(48) Throwable local48) { + } + } + try { + GameShell.instance.getAppletContext().showDocument(arg0.method3127(GameShell.instance.getCodeBase()), "_blank"); + } catch (@Pc(59) Exception local59) { + } + } + + @OriginalMember(owner = "client!og", name = "a", descriptor = "(BIILclient!fe;III)V") + public static void setOverheadScreenCoordinateOffsets(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) PathingEntity arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5) { + method1026(arg5, arg1, arg2.zFine, arg4, arg0, arg2.xFine, arg3); + } + + @OriginalMember(owner = "client!q", name = "a", descriptor = "(IIIIIIBI)V") + public static void method1026(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(7) int arg6) { + if (arg5 < 128 || arg2 < 128 || arg5 > 13056 || arg2 > 13056) { + anInt548 = -1; + anInt1951 = -1; + return; + } + @Pc(38) int local38 = SceneGraph.getTileHeight(Player.plane, arg5, arg2) - arg3; + @Pc(42) int local42 = arg2 - Camera.renderZ; + @Pc(46) int local46 = local38 - Camera.anInt40; + @Pc(50) int local50 = arg5 - Camera.renderX; + @Pc(54) int local54 = MathUtils.sin[Camera.cameraPitch]; + @Pc(58) int local58 = MathUtils.cos[Camera.cameraPitch]; + @Pc(62) int local62 = MathUtils.sin[Camera.cameraYaw]; + @Pc(66) int local66 = MathUtils.cos[Camera.cameraYaw]; + @Pc(76) int local76 = local50 * local66 + local62 * local42 >> 16; + @Pc(87) int local87 = local42 * local66 - local62 * local50 >> 16; + @Pc(89) int local89 = local76; + @Pc(99) int local99 = local58 * local46 - local87 * local54 >> 16; + @Pc(113) int local113 = local87 * local58 + local46 * local54 >> 16; + if (local113 < 50) { + anInt548 = -1; + anInt1951 = -1; + } else if (GlRenderer.enabled) { + @Pc(150) int local150 = arg1 * 512 >> 8; + anInt1951 = local150 * local89 / local113 + arg0; + @Pc(164) int local164 = arg6 * 512 >> 8; + anInt548 = local164 * local99 / local113 + arg4; + } else { + anInt1951 = (local89 << 9) / local113 + arg0; + anInt548 = (local99 << 9) / local113 + arg4; + } + } + + @OriginalMember(owner = "client!ed", name = "b", descriptor = "(II)Lclient!ba;") + public static World getWorld(@OriginalArg(1) int arg0) { + return WorldList.loaded && arg0 >= WorldList.minId && arg0 <= WorldList.maxId ? WorldList.worlds[arg0 - WorldList.minId] : null; + } + + @OriginalMember(owner = "client!sc", name = "a", descriptor = "()V") + public static void method3858() { + for (@Pc(1) int local1 = 0; local1 < SceneGraph.sceneryLen; local1++) { + @Pc(8) Scenery local8 = SceneGraph.scenery[local1]; + SceneGraph.removeScenery(local8); + SceneGraph.scenery[local1] = null; + } + SceneGraph.sceneryLen = 0; + } + + @OriginalMember(owner = "client!be", name = "a", descriptor = "(Z)Lclient!na;") + public static JagString method479() { + @Pc(8) JagString local8 = aClass100_518; + @Pc(10) JagString local10 = JagString.EMPTY; + if (client.modeWhere != 0) { + local8 = aClass100_365; + } + if (client.settings != null) { + local10 = JagString.concatenate(new JagString[]{aClass100_687, client.settings}); + } + return JagString.concatenate(new JagString[]{aClass100_424, local8, aClass100_886, JagString.parseInt(client.language), aClass100_98, JagString.parseInt(client.affiliate), local10, aClass100_268}); + } + + @OriginalMember(owner = "client!ol", name = "a", descriptor = "(IIIILclient!th;IJIIII)Z") + public static boolean method3387(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) Entity arg4, @OriginalArg(5) int arg5, @OriginalArg(6) long arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9, @OriginalArg(10) int arg10) { + return arg4 == null || SceneGraph.method2256(arg0, arg7, arg8, arg9 + 1 - arg7, arg10 - arg8 + 1, arg1, arg2, arg3, arg4, arg5, true, arg6); + } + + @OriginalMember(owner = "client!vl", name = "a", descriptor = "(I)Z") + public static boolean isShowingVideoAd() { + if (client.objectTag) { + try { + return !((Boolean) aClass100_588.browserControlCall(GameShell.signLink.applet)); + } catch (@Pc(21) Throwable local21) { + } + } + return true; + } + + @OriginalMember(owner = "client!uh", name = "f", descriptor = "(I)V") + public static void method4302() { + if (method4047() != 2) { + return; + } + @Pc(27) byte local27 = (byte) (anInt3325 - 4 & 0xFF); + @Pc(31) int local31 = anInt3325 % 104; + @Pc(33) int local33; + @Pc(40) int local40; + for (local33 = 0; local33 < 4; local33++) { + for (local40 = 0; local40 < 104; local40++) { + aByteArrayArrayArray15[local33][local31][local40] = local27; + } + } + if (Player.plane == 3) { + return; + } + for (local33 = 0; local33 < 2; local33++) { + anIntArray205[local33] = -1000000; + anIntArray338[local33] = 1000000; + anIntArray518[local33] = 0; + anIntArray476[local33] = 1000000; + anIntArray134[local33] = 0; + } + if (Camera.cameraType != 1) { + local33 = SceneGraph.getTileHeight(Player.plane, Camera.renderX, Camera.renderZ); + if (local33 - Camera.anInt40 < 800 && (SceneGraph.renderFlags[Player.plane][Camera.renderX >> 7][Camera.renderZ >> 7] & 0x4) != 0) { + method4348(false, Camera.renderX >> 7, Camera.renderZ >> 7, SceneGraph.tiles, 1); + } + return; + } + if ((SceneGraph.renderFlags[Player.plane][PlayerList.self.xFine >> 7][PlayerList.self.zFine >> 7] & 0x4) != 0) { + method4348(false, PlayerList.self.xFine >> 7, PlayerList.self.zFine >> 7, SceneGraph.tiles, 0); + } + if (Camera.cameraPitch >= 310) { + return; + } + @Pc(135) int local135 = PlayerList.self.zFine >> 7; + local40 = Camera.renderZ >> 7; + @Pc(146) int local146; + if (local40 < local135) { + local146 = local135 - local40; + } else { + local146 = local40 - local135; + } + local33 = Camera.renderX >> 7; + @Pc(162) int local162 = PlayerList.self.xFine >> 7; + @Pc(174) int local174; + if (local162 > local33) { + local174 = local162 - local33; + } else { + local174 = local33 - local162; + } + @Pc(192) int local192; + @Pc(186) int local186; + if (local174 <= local146) { + local186 = 32768; + local192 = local174 * 65536 / local146; + while (local40 != local135) { + if (local40 < local135) { + local40++; + } else if (local40 > local135) { + local40--; + } + if ((SceneGraph.renderFlags[Player.plane][local33][local40] & 0x4) != 0) { + method4348(false, local33, local40, SceneGraph.tiles, 1); + break; + } + local186 += local192; + if (local186 >= 65536) { + if (local162 > local33) { + local33++; + } else if (local162 < local33) { + local33--; + } + local186 -= 65536; + if ((SceneGraph.renderFlags[Player.plane][local33][local40] & 0x4) != 0) { + method4348(false, local33, local40, SceneGraph.tiles, 1); + break; + } + } + } + return; + } + local186 = 32768; + local192 = local146 * 65536 / local174; + while (local162 != local33) { + if (local162 > local33) { + local33++; + } else if (local33 > local162) { + local33--; + } + if ((SceneGraph.renderFlags[Player.plane][local33][local40] & 0x4) != 0) { + method4348(false, local33, local40, SceneGraph.tiles, 1); + break; + } + local186 += local192; + if (local186 >= 65536) { + if (local40 < local135) { + local40++; + } else if (local135 < local40) { + local40--; + } + local186 -= 65536; + if ((SceneGraph.renderFlags[Player.plane][local33][local40] & 0x4) != 0) { + method4348(false, local33, local40, SceneGraph.tiles, 1); + break; + } + } + } + } + + @OriginalMember(owner = "client!lf", name = "a", descriptor = "(I)V") + public static void method2742() { + if (client.gameState == 10 && GlRenderer.enabled) { + client.setGameState(28); + } + if (client.gameState == 30) { + client.setGameState(25); + } + } + + @OriginalMember(owner = "client!sf", name = "b", descriptor = "(B)V") + public static void method3901() { + @Pc(16) int local16 = Fonts.b12Full.getStringWidth(LocalizedText.CHOOSE_OPTION); + @Pc(18) int local18; + @Pc(27) int local27; + for (local18 = 0; local18 < MiniMenu.size; local18++) { + local27 = Fonts.b12Full.getStringWidth(MiniMenu.getOp(local18)); + if (local27 > local16) { + local16 = local27; + } + } + local18 = MiniMenu.size * 15 + 21; + @Pc(43) int local43 = anInt1892; + local16 += 8; + local27 = anInt3751 - local16 / 2; + if (local43 + local18 > GameShell.canvasHeight) { + local43 = GameShell.canvasHeight - local18; + } + if (GameShell.canvasWidth < local27 + local16) { + local27 = GameShell.canvasWidth - local16; + } + if (local27 < 0) { + local27 = 0; + } + if (local43 < 0) { + local43 = 0; + } + if (MiniMenu.anInt3953 == 1) { + if (anInt3751 == Mouse.anInt5850 && Mouse.anInt5895 == anInt1892) { + InterfaceList.anInt436 = MiniMenu.size * 15 + (InterfaceList.aBoolean298 ? 26 : 22); + MiniMenu.anInt3953 = 0; + InterfaceList.anInt5138 = local43; + InterfaceList.anInt4271 = local27; + Cs1ScriptRunner.aBoolean108 = true; + InterfaceList.anInt761 = local16; + } + } else if (anInt3751 == Mouse.clickX && anInt1892 == Mouse.clickY) { + InterfaceList.anInt4271 = local27; + MiniMenu.anInt3953 = 0; + InterfaceList.anInt761 = local16; + InterfaceList.anInt5138 = local43; + InterfaceList.anInt436 = (InterfaceList.aBoolean298 ? 26 : 22) + MiniMenu.size * 15; + Cs1ScriptRunner.aBoolean108 = true; + } else { + Mouse.anInt5895 = Mouse.clickY; + Mouse.anInt5850 = Mouse.clickX; + MiniMenu.anInt3953 = 1; + } + } + + @OriginalMember(owner = "client!gn", name = "b", descriptor = "(Z)V") + public static void method1807() { + for (@Pc(11) int local11 = 0; local11 < 100; local11++) { + InterfaceList.aBooleanArray100[local11] = true; + } + } + + public static class Cs2Opcodes { + // Component setters + public static final int setPosition = 1000; + public static final int setSize = 1001; + public static final int setHidden = 1003; + public static final int setAspect = 1004; + public static final int setNoClickThrough = 1005; + + public static final int setScrollPos = 1100; + public static final int setTrans = 1103; + public static final int setLineWid = 1104; + public static final int setSprite = 1105; + public static final int set2DAngle = 1106; + public static final int setSpriteTiling = 1107; + public static final int setModel = 1108; + public static final int set3DRotation = 1109; + public static final int setAnimation = 1110; + public static final int setModelOrthog = 1111; + public static final int setText = 1112; + public static final int setFont = 1113; + public static final int setTextAlignment = 1114; + public static final int setTextAntiMacro = 1115; + public static final int setOutlineThickness = 1116; + public static final int setShadowColor = 1117; + public static final int setVFlip = 1118; + public static final int setHFlip = 1119; + public static final int setScrollMax = 1120; + public static final int setAlpha = 1122; + public static final int set3DViewDistance = 1123; + + public static final int setItem = 1200; + public static final int setNpcHead = 1201; + public static final int setPlayerHead = 1202; + public static final int setPlayerFull = 1204; + public static final int setItemNoNum = 1205; + + // Component properties + public static final int getX = 1500; + public static final int getY = 1501; + public static final int getWidth = 1502; + public static final int getHeight = 1503; + public static final int getHidden = 1504; + public static final int getLayer = 1505; + + // Bit utilities + public static final int addPercent = 4007; + public static final int flagBit = 4008; + public static final int unflagBit = 4009; + public static final int isBitFlagged = 4010; + public static final int mod = 4011; + public static final int pow = 4012; + public static final int root = 4013; + public static final int bitAnd = 4014; + public static final int bitOr = 4015; + public static final int min = 4016; + public static final int max = 4017; + public static final int multiplyDivide = 4018; + + // String utilities + public static final int concatInt = 4100; + public static final int concatString = 4101; + public static final int concatSignedInt = 4102; + public static final int toLowerStr = 4103; + public static final int timeToStr = 4104; + public static final int strForGender = 4105; + public static final int parseInt = 4106; + public static final int compare = 4107; + public static final int getLineCount = 4108; + public static final int getMaxLineWidth = 4109; + public static final int chooseString = 4110; + public static final int escape = 4111; + public static final int concatChar = 4112; + public static final int isValidChar = 4113; + public static final int isAlphaNumeric = 4114; + public static final int isLetter = 4115; + public static final int isDigit = 4116; + public static final int length = 4117; + public static final int substr = 4118; + public static final int removeTags = 4119; + public static final int indexOfChar = 4120; + public static final int indexOfStr = 4121; + public static final int toLower = 4122; + public static final int toUpper = 4123; + public static final int formatNumber = 4124; + + // Objs + public static final int itemIsMembers = 4207; + public static final int itemAttribute = 4208; + public static final int searchItem = 4210; + + // Params + public static final int getLocParam = 4400; + public static final int getStructParam = 4500; + + // Privacy + public static final int getPublicChatSetting = 5000; + public static final int setChatSettings = 5001; + public static final int getPrivateChatSetting = 5005; + + // Ads + public static final int canShowVideoAd = 6405; + public static final int isShowingVideoAd = 6406; + + // Worlds + public static final int getFirstWorldData = 6501; + public static final int getNextWorldData = 6502; + public static final int setWorldHost = 6503; + public static final int setLastWorld = 6504; + public static final int getLastWorld = 6505; + public static final int sortWorldList = 6507; + + public static final int setChild = 200; + public static final int setChild2 = 201; + public static final int setBaseIdkit = 403; + public static final int setBaseColor = 404; + public static final int setFemale = 410; + public static final int setRGB = 1101; + public static final int setFilled = 1102; + public static final int setContextMenuOption = 1300; + public static final int setDraggable = 1301; + public static final int setDragRenderBehaviour = 1302; + public static final int setDragDeadZone = 1303; + public static final int setDragDeadTime = 1304; + public static final int setOptionBase = 1305; + public static final int setTargetVerb = 1306; + public static final int hookMousePress = 1400; + public static final int hookDraggedOver = 1401; + public static final int hookMouseRelease = 1402; + public static final int hookMouseEnter = 1403; + public static final int hookMouseExit = 1404; + public static final int hookDragStart = 1405; + public static final int hookUseWith = 1406; + public static final int hookVARP = 1407; + public static final int hookFrame = 1408; + public static final int hookOptionClick = 1409; + public static final int hookDragRelease = 1410; + public static final int hookDrag = 1411; + public static final int hookMouseHover = 1412; + public static final int hookContainer = 1414; + public static final int hookSkill = 1415; + public static final int hookOnUse = 1416; + public static final int hookScroll = 1417; + public static final int hookMsg = 1418; + public static final int hookKey = 1419; + public static final int hookFriendList = 1420; + public static final int hookClanList = 1421; + public static final int hookMiscData = 1422; + public static final int hookDialogAbort = 1423; + public static final int hookWidgetsOpenClose = 1424; + public static final int hookGEUpdate = 1425; + public static final int hookMinimapUnlock = 1426; + public static final int hookResize = 1427; + public static final int hookVARC = 1428; + public static final int hookSTRING = 1429; + public static final int getScrollX = 1600; + public static final int getScrollY = 1601; + public static final int getText = 1602; + public static final int getScrollMaxH = 1603; + public static final int getScrollMaxV = 1604; + public static final int get3DDistance = 1605; + public static final int getRotateX = 1606; + public static final int getRotateZ = 1607; + public static final int getRotateY = 1608; + public static final int getAlpha = 1609; + public static final int getModelXOffset = 1610; + public static final int getModelYOffset = 1611; + public static final int getSpriteId = 1612; + public static final int getItemId = 1700; + public static final int getItemAmt = 1701; + public static final int getChildId = 1702; + public static final int getTargetMask = 1800; + public static final int getOption = 1801; + public static final int getOptionBase = 1802; + public static final int getX2 = 2500; + public static final int getY2 = 2501; + public static final int getWidth2 = 2502; + public static final int getHeight2 = 2503; + public static final int isHidden2 = 2504; + public static final int getLayer2 = 2505; + public static final int getScrollX2 = 2600; + public static final int getScrollY2 = 2601; + public static final int getText2 = 2602; + public static final int getScrollMaxH2 = 2603; + public static final int getScrollMaxV2 = 2604; + public static final int get3DDistance2 = 2605; + public static final int getRotateX2 = 2606; + public static final int getRotateZ2 = 2607; + public static final int getRotateY2 = 2608; + public static final int getAlpha2 = 2609; + public static final int getModelXOffset2 = 2610; + public static final int getModelYOffset2 = 2611; + public static final int getSpriteId2 = 2612; + public static final int getItemId2 = 2700; + public static final int getItemAmt2 = 2701; + public static final int hasChild = 2702; + public static final int nextChild = 2703; + public static final int hasChildModal = 2704; + public static final int hasChildOverlay = 2705; + public static final int getTargetMask2 = 2800; + public static final int getOption2 = 2801; + public static final int getOptionBase2 = 2802; + public static final int msg = 3100; + public static final int animateSelf = 3101; + public static final int sendIntegerInput = 3104; + public static final int sendNameInput = 3105; + public static final int sendStringInput = 3106; + public static final int clickPlayerOption = 3107; + public static final int playSoundEffect = 3200; + public static final int playMusic = 3201; + public static final int playMusicEffect = 3202; + public static final int getClientCycle = 3300; + public static final int getItemIdInSlot = 3301; + public static final int getItemAmtInSlot = 3302; + public static final int getItemAmtInContainer = 3303; + public static final int getItemContainerLength = 3304; + public static final int getSkillCurrentLvl = 3305; + public static final int getSkillActualLvl = 3306; + public static final int getSkillXp = 3307; + public static final int getMyLocation = 3308; + public static final int x = 3309; + public static final int z = 3310; + public static final int y = 3311; + public static final int isMember = 3312; + public static final int getItemIdInInpsectingSlot = 3313; + public static final int getItemAmtInInspectingSlot = 3314; + public static final int getItemAmtInInspectingContainer = 3315; + public static final int getClientRights = 3316; + public static final int getSystemUpdateTimer = 3317; + public static final int getWorldId = 3318; + public static final int getRunEnergy = 3321; + public static final int getPlayerWeight = 3322; + public static final int hasMoreThen5Blackmarks = 3323; + public static final int getBlackmarks = 3324; + public static final int isSiteSettingsMembers = 3325; + public static final int getMyCombat = 3326; + public static final int IsFemale = 3327; + public static final int mapQuickchat = 3329; + public static final int getContainerFreeSlots = 3330; + public static final int getContainerIntAttrCountIgnoreStacks = 3331; + public static final int getContainerIntAttrCount = 3332; + public static final int getLoginTypeRelatedMethod3333 = 3333; + public static final int getLanguage = 3335; + public static final int moveCoord = 3336; + public static final int getAffid = 3337; + public static final int datamap = 3400; + public static final int datamap2 = 3408; + public static final int datamapContainsValue = 3409; + public static final int datamapContainsValue2 = 3410; + public static final int datamapSize = 3411; + public static final int getFriendCount = 3600; + public static final int getFriendName = 3601; + public static final int getFriendWorld = 3602; + public static final int getFriendRank = 3603; + public static final int isFriend = 3609; + public static final int getFriendWorldName = 3610; + public static final int clanChatDisplayName = 3611; + public static final int clanGetChatCount = 3612; + public static final int clanChatUsername = 3613; + public static final int clanChatUserWorld = 3614; + public static final int clanChatUserRank = 3615; + public static final int getIgnoreCount = 3621; + public static final int getIgnoreName = 3622; + public static final int getGEIsSelling = 3903; + public static final int getGEItem = 3904; + public static final int getGEItemPrice = 3905; + public static final int getGEItemAmt = 3906; + public static final int getGEItemAmtTransfered = 3907; + public static final int getGECashTransfered = 3908; + public static final int getGENotStarted = 3910; + public static final int getGEIsStatus2 = 3911; + public static final int getGEIsDone = 3912; + public static final int getGEIsStatus1 = 3913; + public static final int add = 4000; + public static final int subtract = 4001; + public static final int multiply = 4002; + public static final int divide = 4003; + public static final int rndExcl = 4004; + public static final int rnd = 4005; + public static final int getItemName = 4200; + public static final int getItemGroundOption = 4201; + public static final int getItemOption = 4202; + public static final int getItemValue = 4203; + public static final int itemIsStackable = 4204; + public static final int getNotedItem = 4205; + public static final int getRealItem = 4206; + public static final int nextSearchResult = 4211; + public static final int getNpcAttribute = 4300; + public static final int getTradeSetting = 5016; + public static final int isHoldingAlt = 5100; + public static final int isHoldingCtrl = 5101; + public static final int isHoldingShift = 5102; + public static final int setWorldmapZoom = 5200; + public static final int getWorldmapZoom = 5201; + public static final int loadDungeonmap = 5205; + public static final int getDungeonmap = 5206; + public static final int getDungeonMapName = 5207; + public static final int getDungeonmapCenter = 5210; + public static final int setPositionInMap = 5214; + public static final int dungeonmapContains = 5215; + public static final int getMapDefaultZoom = 5218; + public static final int getDisplayMode = 5306; + public static final int getLastIp5419 = 5419; + public static final int cameraMoveTo = 5500; + public static final int cameraPointAt = 5501; + public static final int cameraUnlock = 5503; + public static final int cameraGetVrot = 5505; + public static final int cameraGetHrot = 5506; + public static final int directlogin = 5600; + public static final int sendRequestAccount = 5604; + public static final int sendCreateAccount = 5605; + public static final int getGameloginRc = 5607; + public static final int getWorldswitchTimer = 5608; + public static final int getAccountCreateRC = 5609; + public static final int getDetailedRC = 5611; + public static final int getMinute = 6300; + public static final int getCurrentDaysSinceLaunch = 6301; + public static final int getDaysSinceLaunch = 6302; + public static final int getYear = 6303; + public static final int isLeapYear = 6304; + public static final int setNoOptions = 1307; + public static final int sendCloseWidgetPacket = 3103; + public static final int skipLoginstage10 = 5601; + public static final int resetRCs = 5602; + public static final int resetAccountCreateRC = 5606; + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(BILclient!jl;)V") + public static void run(@OriginalArg(1) int maxCycles, @OriginalArg(2) HookRequest request) { + @Pc(4) Object[] local4 = request.arguments; + @Pc(10) int sid = (Integer) local4[0]; + @Pc(14) ClientScript script = ClientScriptList.get(sid); + if (script == null) { + return; + } + fp = 0; + @Pc(26) int ssp = 0; + @Pc(28) int isp = 0; + @Pc(30) int pc = -1; + @Pc(33) int[] intOperands = script.intOperands; + @Pc(36) int[] opcodes = script.opcodes; + @Pc(44) byte op = -1; + @Pc(58) int cycles; + try { + intLocals = new int[script.intLocals]; + @Pc(50) int intLocalIndex = 0; + stringLocals = new JagString[script.stringLocals]; + @Pc(56) int stringLocalIndex = 0; + @Pc(77) int id; + @Pc(194) JagString value; + for (cycles = 1; cycles < local4.length; cycles++) { + if (local4[cycles] instanceof Integer) { + id = (Integer) local4[cycles]; + if (id == 0x80000001) { + id = request.mouseX; + } + if (id == 0x80000002) { + id = request.mouseY; + } + if (id == 0x80000003) { + id = request.source == null ? -1 : request.source.id; + } + if (id == 0x80000004) { + id = request.op; + } + if (id == 0x80000005) { + id = request.source == null ? -1 : request.source.createdComponentId; + } + if (id == 0x80000006) { + id = request.target == null ? -1 : request.target.id; + } + if (id == 0x80000007) { + id = request.target == null ? -1 : request.target.createdComponentId; + } + if (id == 0x80000008) { + id = request.keyCode; + } + if (id == 0x80000009) { + id = request.keyChar; + } + intLocals[intLocalIndex++] = id; + } else if (local4[cycles] instanceof JagString) { + value = (JagString) local4[cycles]; + if (value.strEquals(EVENT_OPBASE)) { + value = request.opBase; + } + stringLocals[stringLocalIndex++] = value; + } + } + cycles = 0; + nextOp: + while (true) { + cycles++; + if (maxCycles < cycles) { + throw new RuntimeException("slow"); + } + pc++; + @Pc(226) int opcode = opcodes[pc]; + @Pc(803) int int3; + @Pc(652) int local652; + @Pc(809) int int1; + @Pc(609) JagString string; + if (opcode < 100) { + if (opcode == 0) { + intStack[isp++] = intOperands[pc]; + continue; + } + if (opcode == 1) { + id = intOperands[pc]; + intStack[isp++] = VarpDomain.activeVarps[id]; + continue; + } + if (opcode == 2) { + id = intOperands[pc]; + isp--; + VarpDomain.method2766(id, intStack[isp]); + continue; + } + if (opcode == 3) { + stringStack[ssp++] = script.stringOperands[pc]; + continue; + } + if (opcode == 6) { + pc += intOperands[pc]; + continue; + } + if (opcode == 7) { + isp -= 2; + if (intStack[isp] != intStack[isp + 1]) { + pc += intOperands[pc]; + } + continue; + } + if (opcode == 8) { + isp -= 2; + if (intStack[isp + 1] == intStack[isp]) { + pc += intOperands[pc]; + } + continue; + } + if (opcode == 9) { + isp -= 2; + if (intStack[isp] < intStack[isp + 1]) { + pc += intOperands[pc]; + } + continue; + } + if (opcode == 10) { + isp -= 2; + if (intStack[isp + 1] < intStack[isp]) { + pc += intOperands[pc]; + } + continue; + } + if (opcode == 21) { + if (fp == 0) { + return; + } + @Pc(423) GoSubFrame frame = callStack[--fp]; + script = frame.script; + intLocals = frame.intLocals; + opcodes = script.opcodes; + pc = frame.pc; + stringLocals = frame.stringLocals; + intOperands = script.intOperands; + continue; + } + if (opcode == 25) { + id = intOperands[pc]; + intStack[isp++] = VarpDomain.getVarbit(id); + continue; + } + if (opcode == 27) { + id = intOperands[pc]; + isp--; + VarpDomain.setVarbitClient(id, intStack[isp]); + continue; + } + if (opcode == 31) { + isp -= 2; + if (intStack[isp + 1] >= intStack[isp]) { + pc += intOperands[pc]; + } + continue; + } + if (opcode == 32) { + isp -= 2; + if (intStack[isp] >= intStack[isp + 1]) { + pc += intOperands[pc]; + } + continue; + } + if (opcode == 33) { + intStack[isp++] = intLocals[intOperands[pc]]; + continue; + } + @Pc(555) int local; + if (opcode == 34) { + local = intOperands[pc]; + isp--; + intLocals[local] = intStack[isp]; + continue; + } + if (opcode == 35) { + stringStack[ssp++] = stringLocals[intOperands[pc]]; + continue; + } + if (opcode == 36) { + local = intOperands[pc]; + ssp--; + stringLocals[local] = stringStack[ssp]; + continue; + } + if (opcode == 37) { + id = intOperands[pc]; + ssp -= id; + string = JagString.method2355(ssp, id, stringStack); + stringStack[ssp++] = string; + continue; + } + if (opcode == 38) { + isp--; + continue; + } + if (opcode == 39) { + ssp--; + continue; + } + if (opcode == 40) { + id = intOperands[pc]; + @Pc(642) ClientScript local642 = ClientScriptList.get(id); + @Pc(646) int[] local646 = new int[local642.intLocals]; + @Pc(650) JagString[] local650 = new JagString[local642.stringLocals]; + for (local652 = 0; local652 < local642.intArgs; local652++) { + local646[local652] = intStack[local652 + isp - local642.intArgs]; + } + for (local652 = 0; local652 < local642.stringArgs; local652++) { + local650[local652] = stringStack[local652 + ssp - local642.stringArgs]; + } + isp -= local642.intArgs; + ssp -= local642.stringArgs; + @Pc(705) GoSubFrame local705 = new GoSubFrame(); + local705.stringLocals = stringLocals; + local705.intLocals = intLocals; + local705.pc = pc; + local705.script = script; + if (fp >= callStack.length) { + throw new RuntimeException(); + } + script = local642; + pc = -1; + callStack[fp++] = local705; + intLocals = local646; + intOperands = local642.intOperands; + opcodes = local642.opcodes; + stringLocals = local650; + continue; + } + if (opcode == 42) { + intStack[isp++] = VarcDomain.varcs[intOperands[pc]]; + continue; + } + if (opcode == 43) { + id = intOperands[pc]; + isp--; + VarcDomain.varcs[id] = intStack[isp]; + DelayedStateChange.method24(id); + continue; + } + if (opcode == 44) { + id = intOperands[pc] >> 16; + isp--; + int3 = intStack[isp]; + int1 = intOperands[pc] & 0xFFFF; + if (int3 >= 0 && int3 <= 5000) { + anIntArray140[id] = int3; + @Pc(828) byte local828 = -1; + if (int1 == 105) { + local828 = 0; + } + local652 = 0; + while (true) { + if (int3 <= local652) { + continue nextOp; + } + anIntArrayArray33[id][local652] = local828; + local652++; + } + } + throw new RuntimeException(); + } + if (opcode == 45) { + id = intOperands[pc]; + isp--; + int1 = intStack[isp]; + if (int1 >= 0 && int1 < anIntArray140[id]) { + intStack[isp++] = anIntArrayArray33[id][int1]; + continue; + } + throw new RuntimeException(); + } + if (opcode == 46) { + id = intOperands[pc]; + isp -= 2; + int1 = intStack[isp]; + if (int1 >= 0 && int1 < anIntArray140[id]) { + anIntArrayArray33[id][int1] = intStack[isp + 1]; + continue; + } + throw new RuntimeException(); + } + if (opcode == 47) { + value = VarcDomain.varcstrs[intOperands[pc]]; + if (value == null) { + value = VarpDomain.aClass100_1061; + } + stringStack[ssp++] = value; + continue; + } + if (opcode == 48) { + id = intOperands[pc]; + ssp--; + VarcDomain.varcstrs[id] = stringStack[ssp]; + DelayedStateChange.method1840(id); + continue; + } + if (opcode == 51) { + @Pc(992) HashTable local992 = script.switchTables[intOperands[pc]]; + isp--; + @Pc(1002) IntNode local1002 = (IntNode) local992.get(intStack[isp]); + if (local1002 != null) { + pc += local1002.value; + } + continue; + } + } + @Pc(1020) boolean local1020; + local1020 = intOperands[pc] == 1; + @Pc(1182) Component component; + @Pc(1052) int int2; + @Pc(1063) Component local1063; + @Pc(1087) int local1087; + @Pc(1256) Component local1256; + if (opcode < 300) { + if (opcode == 100) { + isp -= 3; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + int2 = intStack[isp + 2]; + if (int3 != 0) { + local1063 = InterfaceList.getComponent(int1); + if (local1063.createdComponents == null) { + local1063.createdComponents = new Component[int2 + 1]; + } + if (int2 >= local1063.createdComponents.length) { + @Pc(1085) Component[] local1085 = new Component[int2 + 1]; + for (local1087 = 0; local1087 < local1063.createdComponents.length; local1087++) { + local1085[local1087] = local1063.createdComponents[local1087]; + } + local1063.createdComponents = local1085; + } + if (int2 > 0 && local1063.createdComponents[int2 - 1] == null) { + throw new RuntimeException("Gap at:" + (int2 - 1)); + } + @Pc(1137) Component local1137 = new Component(); + local1137.if3 = true; + local1137.createdComponentId = int2; + local1137.overlayer = local1137.id = local1063.id; + local1137.type = int3; + local1063.createdComponents[int2] = local1137; + if (local1020) { + staticActiveComponent1 = local1137; + } else { + staticActiveComponent2 = local1137; + } + InterfaceList.redraw(local1063); + continue; + } + throw new RuntimeException(); + } + @Pc(1204) Component local1204; + if (opcode == 101) { + component = local1020 ? staticActiveComponent1 : staticActiveComponent2; + if (component.createdComponentId == -1) { + if (!local1020) { + throw new RuntimeException("Tried to cc_delete static active-component!"); + } + throw new RuntimeException("Tried to .cc_delete static .active-component!"); + } + local1204 = InterfaceList.getComponent(component.id); + local1204.createdComponents[component.createdComponentId] = null; + InterfaceList.redraw(local1204); + continue; + } + if (opcode == 102) { + isp--; + component = InterfaceList.getComponent(intStack[isp]); + component.createdComponents = null; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setChild) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + local1256 = InterfaceList.method1418(int1, int3); + if (local1256 != null && int3 != -1) { + intStack[isp++] = 1; + if (local1020) { + staticActiveComponent1 = local1256; + } else { + staticActiveComponent2 = local1256; + } + continue; + } + intStack[isp++] = 0; + continue; + } + if (opcode == Cs2Opcodes.setChild2) { + isp--; + int1 = intStack[isp]; + local1204 = InterfaceList.getComponent(int1); + if (local1204 == null) { + intStack[isp++] = 0; + } else { + intStack[isp++] = 1; + if (local1020) { + staticActiveComponent1 = local1204; + } else { + staticActiveComponent2 = local1204; + } + } + continue; + } + } else { + @Pc(12388) boolean local12388; + if (opcode < 500) { + if (opcode == Cs2Opcodes.setBaseIdkit) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + for (int2 = 0; int2 < PlayerAppearance.MALE_FEATURES.length; int2++) { + if (int1 == PlayerAppearance.MALE_FEATURES[int2]) { + PlayerList.self.appearance.setIdentikit(int2, int3); + continue nextOp; + } + } + int2 = 0; + while (true) { + if (int2 >= PlayerAppearance.FEMALE_FEATURES.length) { + continue nextOp; + } + if (int1 == PlayerAppearance.FEMALE_FEATURES[int2]) { + PlayerList.self.appearance.setIdentikit(int2, int3); + continue nextOp; + } + int2++; + } + } + if (opcode == Cs2Opcodes.setBaseColor) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + PlayerList.self.appearance.setColor(int1, int3); + continue; + } + if (opcode == Cs2Opcodes.setFemale) { + isp--; + local12388 = intStack[isp] != 0; + PlayerList.self.appearance.setGender(local12388); + continue; + } + } else { + @Pc(1552) boolean local1552; + if ((opcode < 1000 || opcode >= 1100) && (opcode < 2000 || opcode >= 2100)) { + @Pc(2522) JagString str1; + if (opcode >= 1100 && opcode < 1200 || !(opcode < 2100 || opcode >= 2200)) { + if (opcode < 2000) { + component = local1020 ? staticActiveComponent1 : staticActiveComponent2; + } else { + opcode -= 1000; + isp--; + component = InterfaceList.getComponent(intStack[isp]); + } + if (opcode == Cs2Opcodes.setScrollPos) { + isp -= 2; + component.scrollX = intStack[isp]; + if (component.scrollX > component.scrollMaxH - component.width) { + component.scrollX = component.scrollMaxH - component.width; + } + if (component.scrollX < 0) { + component.scrollX = 0; + } + component.scrollY = intStack[isp + 1]; + if (component.scrollY > component.scrollMaxV - component.height) { + component.scrollY = component.scrollMaxV - component.height; + } + if (component.scrollY < 0) { + component.scrollY = 0; + } + InterfaceList.redraw(component); + if (component.createdComponentId == -1) { + DelayedStateChange.method2353(component.id); + } + continue; + } + if (opcode == Cs2Opcodes.setRGB) { + isp--; + component.color = intStack[isp]; + InterfaceList.redraw(component); + if (component.createdComponentId == -1) { + DelayedStateChange.method4224(component.id); + } + continue; + } + if (opcode == Cs2Opcodes.setFilled) { + isp--; + component.filled = intStack[isp] == 1; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setTrans) { + isp--; + component.alpha = intStack[isp]; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setLineWid) { + isp--; + component.lineWidth = intStack[isp]; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setSprite) { + isp--; + component.spriteId = intStack[isp]; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.set2DAngle) { + isp--; + component.angle2d = intStack[isp]; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setSpriteTiling) { + isp--; + component.spriteTiling = intStack[isp] == 1; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setModel) { + component.modelType = 1; + isp--; + component.modelId = intStack[isp]; + InterfaceList.redraw(component); + if (component.createdComponentId == -1) { + DelayedStateChange.method4600(component.id); + } + continue; + } + if (opcode == Cs2Opcodes.set3DRotation) { + isp -= 6; + component.modelXOffset = intStack[isp]; + component.modelZOffset = intStack[isp + 1]; + component.modelXAngle = intStack[isp + 2]; + component.modelYAngle = intStack[isp + 3]; + component.modelYOffset = intStack[isp + 4]; + component.modelZoom = intStack[isp + 5]; + InterfaceList.redraw(component); + if (component.createdComponentId == -1) { + DelayedStateChange.setComponentModelAngleClient(component.id); + DelayedStateChange.setComponentModelOffsetClient(component.id); + } + continue; + } + if (opcode == Cs2Opcodes.setAnimation) { + isp--; + int3 = intStack[isp]; + if (component.modelSeqId != int3) { + component.modelSeqId = int3; + component.anInt510 = 0; + component.anInt500 = 0; + component.anInt496 = 1; + InterfaceList.redraw(component); + } + if (component.createdComponentId == -1) { + DelayedStateChange.method3345(component.id); + } + continue; + } + if (opcode == Cs2Opcodes.setModelOrthog) { + isp--; + component.modelOrtho = intStack[isp] == 1; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setText) { + ssp--; + str1 = stringStack[ssp]; + if (!str1.strEquals(component.text)) { + component.text = str1; + InterfaceList.redraw(component); + } + if (component.createdComponentId == -1) { + DelayedStateChange.method3096(component.id); + } + continue; + } + if (opcode == Cs2Opcodes.setFont) { + isp--; + component.font = intStack[isp]; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setTextAlignment) { + isp -= 3; + component.halign = intStack[isp]; + component.valign = intStack[isp + 1]; + component.vpadding = intStack[isp + 2]; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setTextAntiMacro) { + isp--; + component.shadowed = intStack[isp] == 1; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setOutlineThickness) { + isp--; + component.outlineThickness = intStack[isp]; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setShadowColor) { + isp--; + component.shadowColor = intStack[isp]; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setVFlip) { + isp--; + component.vFlip = intStack[isp] == 1; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setHFlip) { + isp--; + component.hFlip = intStack[isp] == 1; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setScrollMax) { + isp -= 2; + component.scrollMaxH = intStack[isp]; + component.scrollMaxV = intStack[isp + 1]; + InterfaceList.redraw(component); + if (component.type == 0) { + InterfaceList.method531(component, false); + } + continue; + } + if (opcode == 1121) { + isp -= 2; + component.aShort11 = (short) intStack[isp]; + component.aShort10 = (short) intStack[isp + 1]; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.setAlpha) { + isp--; + component.hasAlpha = intStack[isp] == 1; + InterfaceList.redraw(component); + continue; + } + if (opcode == Cs2Opcodes.set3DViewDistance) { + isp--; + component.modelZoom = intStack[isp]; + InterfaceList.redraw(component); + if (component.createdComponentId == -1) { + DelayedStateChange.setComponentModelAngleClient(component.id); + } + continue; + } + } else if (opcode >= 1200 && opcode < 1300 || !(opcode < 2200 || opcode >= 2300)) { + if (opcode < 2000) { + component = local1020 ? staticActiveComponent1 : staticActiveComponent2; + } else { + isp--; + component = InterfaceList.getComponent(intStack[isp]); + opcode -= 1000; + } + InterfaceList.redraw(component); + if (opcode == Cs2Opcodes.setItem || opcode == Cs2Opcodes.setItemNoNum) { + isp -= 2; + int2 = intStack[isp + 1]; + int3 = intStack[isp]; + if (component.createdComponentId == -1) { + DelayedStateChange.setComponentObjClient(component.id); + DelayedStateChange.setComponentModelAngleClient(component.id); + DelayedStateChange.setComponentModelOffsetClient(component.id); + } + if (int3 == -1) { + component.modelId = -1; + component.modelType = 1; + component.objId = -1; + } else { + component.objId = int3; + component.objCount = int2; + @Pc(13416) ObjType local13416 = ObjTypeList.get(int3); + component.modelYOffset = local13416.zAngle2D; + component.modelXOffset = local13416.xOffset2D; + component.modelXAngle = local13416.xAngle2D; + component.modelZOffset = local13416.yOffset2D; + component.modelYAngle = local13416.yAngle2D; + component.modelZoom = local13416.zoom2d; + if (component.anInt451 > 0) { + component.modelZoom = component.modelZoom * 32 / component.anInt451; + } else if (component.baseWidth > 0) { + component.modelZoom = component.modelZoom * 32 / component.baseWidth; + } + component.objDrawText = opcode != Cs2Opcodes.setItemNoNum; + } + continue; + } + if (opcode == Cs2Opcodes.setNpcHead) { + component.modelType = 2; + isp--; + component.modelId = intStack[isp]; + if (component.createdComponentId == -1) { + DelayedStateChange.method4600(component.id); + } + continue; + } + if (opcode == 1202) { + component.modelType = 3; + component.modelId = PlayerList.self.appearance.method1952(); + if (component.createdComponentId == -1) { + DelayedStateChange.method4600(component.id); + } + continue; + } + if (opcode == Cs2Opcodes.setPlayerHead) { + component.modelType = 6; + isp--; + component.modelId = intStack[isp]; + if (component.createdComponentId == -1) { + DelayedStateChange.method4600(component.id); + } + continue; + } + if (opcode == Cs2Opcodes.setPlayerFull) { + component.modelType = 5; + isp--; + component.modelId = intStack[isp]; + if (component.createdComponentId == -1) { + DelayedStateChange.method4600(component.id); + } + continue; + } + } else if (opcode >= 1300 && opcode < 1400 || opcode >= 2300 && opcode < 2400) { + if (opcode >= 2000) { + isp--; + component = InterfaceList.getComponent(intStack[isp]); + opcode -= 1000; + } else { + component = local1020 ? staticActiveComponent1 : staticActiveComponent2; + } + if (opcode == Cs2Opcodes.setContextMenuOption) { + isp--; + int3 = intStack[isp] - 1; + if (int3 >= 0 && int3 <= 9) { + ssp--; + component.method480(stringStack[ssp], int3); + continue; + } + ssp--; + continue; + } + if (opcode == Cs2Opcodes.setDraggable) { + isp -= 2; + int2 = intStack[isp + 1]; + int3 = intStack[isp]; + component.aClass13_5 = InterfaceList.method1418(int3, int2); + continue; + } + if (opcode == Cs2Opcodes.setDragRenderBehaviour) { + isp--; + component.dragRenderBehavior = intStack[isp] == 1; + continue; + } + if (opcode == Cs2Opcodes.setDragDeadZone) { + isp--; + component.dragDeadzone = intStack[isp]; + continue; + } + if (opcode == Cs2Opcodes.setDragDeadTime) { + isp--; + component.dragDeadtime = intStack[isp]; + continue; + } + if (opcode == Cs2Opcodes.setOptionBase) { + ssp--; + component.optionBase = stringStack[ssp]; + continue; + } + if (opcode == Cs2Opcodes.setTargetVerb) { + ssp--; + component.optionCircumfix = stringStack[ssp]; + continue; + } + if (opcode == Cs2Opcodes.setNoOptions) { + component.ops = null; + continue; + } + if (opcode == 1308) { + isp--; + component.anInt484 = intStack[isp]; + isp--; + component.anInt499 = intStack[isp]; + continue; + } + if (opcode == 1309) { + isp--; + int3 = intStack[isp]; + isp--; + int2 = intStack[isp]; + if (int2 >= 1 && int2 <= 10) { + component.method477(int2 - 1, int3); + } + continue; + } + } else { + @Pc(4859) int c; + if (opcode >= 1400 && opcode < 1500 || opcode >= 2400 && opcode < 2500) { + if (opcode < 2000) { + component = local1020 ? staticActiveComponent1 : staticActiveComponent2; + } else { + opcode -= 1000; + isp--; + component = InterfaceList.getComponent(intStack[isp]); + } + @Pc(12937) int[] local12937 = null; + ssp--; + str1 = stringStack[ssp]; + if (str1.length() > 0 && str1.charAt(str1.length() - 1) == 89) { + isp--; + local652 = intStack[isp]; + if (local652 > 0) { + local12937 = new int[local652]; + while (local652-- > 0) { + isp--; + local12937[local652] = intStack[isp]; + } + } + str1 = str1.substring(str1.length() - 1, 0); + } + @Pc(13000) Object[] local13000 = new Object[str1.length() + 1]; + for (c = local13000.length - 1; c >= 1; c--) { + if (str1.charAt(c - 1) == 115) { + ssp--; + local13000[c] = stringStack[ssp]; + } else { + isp--; + local13000[c] = intStack[isp]; + } + } + isp--; + c = intStack[isp]; + if (c == -1) { + local13000 = null; + } else { + local13000[0] = c; + } + component.aBoolean25 = true; + if (opcode == Cs2Opcodes.hookMousePress) { + component.onClickRepeat = local13000; + } else if (opcode == Cs2Opcodes.hookDraggedOver) { + component.onHold = local13000; + } else if (opcode == Cs2Opcodes.hookMouseRelease) { + component.onRelease = local13000; + } else if (opcode == Cs2Opcodes.hookMouseEnter) { + component.onMouseOver = local13000; + } else if (opcode == Cs2Opcodes.hookMouseExit) { + component.onMouseLeave = local13000; + } else if (opcode == Cs2Opcodes.hookDragStart) { + component.onDragStart = local13000; + } else if (opcode == Cs2Opcodes.hookUseWith) { + component.onUseWith = local13000; + } else if (opcode == Cs2Opcodes.hookVARP) { + component.varpTriggers = local12937; + component.onVarpTransmit = local13000; + } else if (opcode == Cs2Opcodes.hookFrame) { + component.onTimer = local13000; + } else if (opcode == Cs2Opcodes.hookOptionClick) { + component.onOptionClick = local13000; + } else if (opcode == Cs2Opcodes.hookDragRelease) { + component.onDragRelease = local13000; + } else if (opcode == Cs2Opcodes.hookDrag) { + component.onDrag = local13000; + } else if (opcode == Cs2Opcodes.hookMouseHover) { + component.onMouseRepeat = local13000; + } else if (opcode == Cs2Opcodes.hookContainer) { + component.inventoryTriggers = local12937; + component.onInvTransmit = local13000; + } else if (opcode == Cs2Opcodes.hookSkill) { + component.statTriggers = local12937; + component.onStatTransmit = local13000; + } else if (opcode == Cs2Opcodes.hookOnUse) { + component.onUse = local13000; + } else if (opcode == Cs2Opcodes.hookScroll) { + component.onScroll = local13000; + } else if (opcode == Cs2Opcodes.hookMsg) { + component.onMsg = local13000; + } else if (opcode == Cs2Opcodes.hookKey) { + component.onKey = local13000; + } else if (opcode == Cs2Opcodes.hookFriendList) { + component.onFriendTransmit = local13000; + } else if (opcode == Cs2Opcodes.hookClanList) { + component.onClanTransmit = local13000; + } else if (opcode == Cs2Opcodes.hookMiscData) { + component.onMiscTransmit = local13000; + } else if (opcode == Cs2Opcodes.hookDialogAbort) { + component.onDialogAbort = local13000; + } else if (opcode == Cs2Opcodes.hookWidgetsOpenClose) { + component.onWidgetsOpenClose = local13000; + } else if (opcode == Cs2Opcodes.hookGEUpdate) { // if_setonstocktransmit + component.onStockTransmit = local13000; + } else if (opcode == Cs2Opcodes.hookMinimapUnlock) { + component.onMinimapUnlock = local13000; + } else if (opcode == Cs2Opcodes.hookResize) { + component.onResize = local13000; + } else if (opcode == Cs2Opcodes.hookVARC) { + component.onVarcTransmit = local13000; + component.varcTriggers = local12937; + } else if (opcode == Cs2Opcodes.hookSTRING) { + component.varcstrTriggers = local12937; + component.onVarcstrTransmit = local13000; + } + continue; + } + if (opcode < 1600) { + component = local1020 ? staticActiveComponent1 : staticActiveComponent2; + if (opcode == Cs2Opcodes.getX) { + intStack[isp++] = component.x; + continue; + } + if (opcode == Cs2Opcodes.getY) { + intStack[isp++] = component.y; + continue; + } + if (opcode == Cs2Opcodes.getWidth) { + intStack[isp++] = component.width; + continue; + } + if (opcode == Cs2Opcodes.getHeight) { + intStack[isp++] = component.height; + continue; + } + if (opcode == Cs2Opcodes.getHidden) { + intStack[isp++] = component.hidden ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.getLayer) { + intStack[isp++] = component.overlayer; + continue; + } + } else if (opcode < 1700) { + component = local1020 ? staticActiveComponent1 : staticActiveComponent2; + if (opcode == Cs2Opcodes.getScrollX) { + intStack[isp++] = component.scrollX; + continue; + } + if (opcode == Cs2Opcodes.getScrollY) { + intStack[isp++] = component.scrollY; + continue; + } + if (opcode == Cs2Opcodes.getText) { + stringStack[ssp++] = component.text; + continue; + } + if (opcode == Cs2Opcodes.getScrollMaxH) { + intStack[isp++] = component.scrollMaxH; + continue; + } + if (opcode == Cs2Opcodes.getScrollMaxV) { + intStack[isp++] = component.scrollMaxV; + continue; + } + if (opcode == Cs2Opcodes.get3DDistance) { + intStack[isp++] = component.modelZoom; + continue; + } + if (opcode == Cs2Opcodes.getRotateX) { + intStack[isp++] = component.modelXAngle; + continue; + } + if (opcode == Cs2Opcodes.getRotateZ) { + intStack[isp++] = component.modelYOffset; + continue; + } + if (opcode == Cs2Opcodes.getRotateY) { + intStack[isp++] = component.modelYAngle; + continue; + } + if (opcode == Cs2Opcodes.getAlpha) { + intStack[isp++] = component.alpha; + continue; + } + if (opcode == Cs2Opcodes.getModelXOffset) { + intStack[isp++] = component.modelXOffset; + continue; + } + if (opcode == Cs2Opcodes.getModelYOffset) { + intStack[isp++] = component.modelZOffset; + continue; + } + if (opcode == Cs2Opcodes.getSpriteId) { + intStack[isp++] = component.spriteId; + continue; + } + } else if (opcode < 1800) { + component = local1020 ? staticActiveComponent1 : staticActiveComponent2; + if (opcode == Cs2Opcodes.getItemId) { + intStack[isp++] = component.objId; + continue; + } + if (opcode == Cs2Opcodes.getItemAmt) { + if (component.objId == -1) { + intStack[isp++] = 0; + } else { + intStack[isp++] = component.objCount; + } + continue; + } + if (opcode == Cs2Opcodes.getChildId) { + intStack[isp++] = component.createdComponentId; + continue; + } + } else if (opcode < 1900) { + component = local1020 ? staticActiveComponent1 : staticActiveComponent2; + if (opcode == Cs2Opcodes.getTargetMask) { + intStack[isp++] = InterfaceList.getServerActiveProperties(component).getTargetMask(); + continue; + } + if (opcode == Cs2Opcodes.getOption) { + isp--; + int3 = intStack[isp]; + int3--; + if (component.ops != null && int3 < component.ops.length && component.ops[int3] != null) { + stringStack[ssp++] = component.ops[int3]; + continue; + } + stringStack[ssp++] = EMPTY_STRING; + continue; + } + if (opcode == Cs2Opcodes.getOptionBase) { + if (component.optionBase == null) { + stringStack[ssp++] = EMPTY_STRING; + } else { + stringStack[ssp++] = component.optionBase; + } + continue; + } + } else if (opcode < 2600) { + isp--; + component = InterfaceList.getComponent(intStack[isp]); + if (opcode == Cs2Opcodes.getX2) { + intStack[isp++] = component.x; + continue; + } + if (opcode == Cs2Opcodes.getY2) { + intStack[isp++] = component.y; + continue; + } + if (opcode == Cs2Opcodes.getWidth2) { + intStack[isp++] = component.width; + continue; + } + if (opcode == Cs2Opcodes.getHeight2) { + intStack[isp++] = component.height; + continue; + } + if (opcode == Cs2Opcodes.isHidden2) { + intStack[isp++] = component.hidden ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.getLayer2) { + intStack[isp++] = component.overlayer; + continue; + } + } else if (opcode < 2700) { + isp--; + component = InterfaceList.getComponent(intStack[isp]); + if (opcode == Cs2Opcodes.getScrollX2) { + intStack[isp++] = component.scrollX; + continue; + } + if (opcode == Cs2Opcodes.getScrollY2) { + intStack[isp++] = component.scrollY; + continue; + } + if (opcode == Cs2Opcodes.getText2) { + stringStack[ssp++] = component.text; + continue; + } + if (opcode == Cs2Opcodes.getScrollMaxH2) { + intStack[isp++] = component.scrollMaxH; + continue; + } + if (opcode == Cs2Opcodes.getScrollMaxV2) { + intStack[isp++] = component.scrollMaxV; + continue; + } + if (opcode == Cs2Opcodes.get3DDistance2) { + intStack[isp++] = component.modelZoom; + continue; + } + if (opcode == Cs2Opcodes.getRotateX2) { + intStack[isp++] = component.modelXAngle; + continue; + } + if (opcode == Cs2Opcodes.getRotateZ2) { + intStack[isp++] = component.modelYOffset; + continue; + } + if (opcode == Cs2Opcodes.getRotateY2) { + intStack[isp++] = component.modelYAngle; + continue; + } + if (opcode == Cs2Opcodes.getAlpha2) { + intStack[isp++] = component.alpha; + continue; + } + if (opcode == Cs2Opcodes.getModelXOffset2) { + intStack[isp++] = component.modelXOffset; + continue; + } + if (opcode == Cs2Opcodes.getModelYOffset2) { + intStack[isp++] = component.modelZOffset; + continue; + } + if (opcode == Cs2Opcodes.getSpriteId2) { + intStack[isp++] = component.spriteId; + continue; + } + } else if (opcode < 2800) { + if (opcode == Cs2Opcodes.getItemId2) { + isp--; + component = InterfaceList.getComponent(intStack[isp]); + intStack[isp++] = component.objId; + continue; + } + if (opcode == Cs2Opcodes.getItemAmt2) { + isp--; + component = InterfaceList.getComponent(intStack[isp]); + if (component.objId == -1) { + intStack[isp++] = 0; + } else { + intStack[isp++] = component.objCount; + } + continue; + } + if (opcode == Cs2Opcodes.hasChild) { + isp--; + int1 = intStack[isp]; + @Pc(12566) ComponentPointer local12566 = (ComponentPointer) InterfaceList.openInterfaces.get(int1); + if (local12566 == null) { + intStack[isp++] = 0; + } else { + intStack[isp++] = 1; + } + continue; + } + if (opcode == Cs2Opcodes.nextChild) { + isp--; + component = InterfaceList.getComponent(intStack[isp]); + if (component.createdComponents == null) { + intStack[isp++] = 0; + continue; + } + int3 = component.createdComponents.length; + for (int2 = 0; int2 < component.createdComponents.length; int2++) { + if (component.createdComponents[int2] == null) { + int3 = int2; + break; + } + } + intStack[isp++] = int3; + continue; + } + if (opcode == Cs2Opcodes.hasChildModal || opcode == Cs2Opcodes.hasChildOverlay) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + @Pc(12663) ComponentPointer local12663 = (ComponentPointer) InterfaceList.openInterfaces.get(int1); + if (local12663 != null && local12663.interfaceId == int3) { + intStack[isp++] = 1; + continue; + } + intStack[isp++] = 0; + continue; + } + } else if (opcode < 2900) { + isp--; + component = InterfaceList.getComponent(intStack[isp]); + if (opcode == Cs2Opcodes.getTargetMask2) { + intStack[isp++] = InterfaceList.getServerActiveProperties(component).getTargetMask(); + continue; + } + if (opcode == Cs2Opcodes.getOption2) { + isp--; + int3 = intStack[isp]; + int3--; + if (component.ops != null && component.ops.length > int3 && component.ops[int3] != null) { + stringStack[ssp++] = component.ops[int3]; + continue; + } + stringStack[ssp++] = EMPTY_STRING; + continue; + } + if (opcode == Cs2Opcodes.getOptionBase2) { + if (component.optionBase == null) { + stringStack[ssp++] = EMPTY_STRING; + } else { + stringStack[ssp++] = component.optionBase; + } + continue; + } + } else if (opcode < 3200) { + if (opcode == Cs2Opcodes.msg) { + ssp--; + string = stringStack[ssp]; + Chat.add(EMPTY_STRING, 0, string); + continue; + } + if (opcode == Cs2Opcodes.animateSelf) { + isp -= 2; + Player.animate(intStack[isp + 1], intStack[isp], PlayerList.self); + continue; + } + if (opcode == Cs2Opcodes.sendCloseWidgetPacket) { + ClientProt.closeWidget(); + continue; + } + if (opcode == Cs2Opcodes.sendIntegerInput) { + ssp--; + string = stringStack[ssp]; + int3 = 0; + if (string.isInt()) { + int3 = string.parseInt(); + } + Protocol.outboundBuffer.p1isaac(ClientProt.RESUME_P_COUNTDIALOG); + Protocol.outboundBuffer.p4(int3); + continue; + } + if (opcode == Cs2Opcodes.sendNameInput) { + ssp--; + string = stringStack[ssp]; + Protocol.outboundBuffer.p1isaac(ClientProt.RESUME_P_NAMEDIALOG); + Protocol.outboundBuffer.p8(string.encode37()); + continue; + } + if (opcode == Cs2Opcodes.sendStringInput) { + ssp--; + string = stringStack[ssp]; + Protocol.outboundBuffer.p1isaac(ClientProt.RESUME_P_STRINGDIALOG); + Protocol.outboundBuffer.p1(string.length() + 1); + Protocol.outboundBuffer.pjstr(string); + continue; + } + if (opcode == Cs2Opcodes.clickPlayerOption) { + isp--; + int1 = intStack[isp]; + ssp--; + str1 = stringStack[ssp]; + ClientProt.clickPlayerOption(int1, str1); + continue; + } + if (opcode == 3108) { + isp -= 3; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + int2 = intStack[isp + 2]; + local1063 = InterfaceList.getComponent(int2); + Cs1ScriptRunner.method1015(int3, int1, local1063); + continue; + } + if (opcode == 3109) { + isp -= 2; + int1 = intStack[isp]; + local1256 = local1020 ? staticActiveComponent1 : staticActiveComponent2; + int3 = intStack[isp + 1]; + Cs1ScriptRunner.method1015(int3, int1, local1256); + continue; + } + if (opcode == 3110) { + isp--; + int1 = intStack[isp]; + Protocol.outboundBuffer.p1isaac(111); + Protocol.outboundBuffer.p2(int1); + continue; + } + } else if (opcode < 3300) { + if (opcode == Cs2Opcodes.playSoundEffect) { + isp -= 3; + SoundPlayer.play(intStack[isp + 1], intStack[isp], intStack[isp + 2]); + continue; + } + if (opcode == Cs2Opcodes.playMusic) { + isp--; + MusicPlayer.playSong(intStack[isp]); + continue; + } + if (opcode == Cs2Opcodes.playMusicEffect) { + isp -= 2; + MusicPlayer.playJingle(intStack[isp + 1], intStack[isp]); + continue; + } + } else if (opcode < 3400) { + if (opcode == Cs2Opcodes.getClientCycle) { + intStack[isp++] = client.loop; + continue; + } + if (opcode == Cs2Opcodes.getItemIdInSlot) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + intStack[isp++] = Inv.getItemType(int1, int3); + continue; + } + if (opcode == Cs2Opcodes.getItemAmtInSlot) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + intStack[isp++] = Inv.getItemCount(int1, int3); + continue; + } + if (opcode == Cs2Opcodes.getItemAmtInContainer) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + intStack[isp++] = Inv.getSlotTotal(int1, int3); + continue; + } + if (opcode == Cs2Opcodes.getItemContainerLength) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = InvTypeList.get(int1).size; + continue; + } + if (opcode == Cs2Opcodes.getSkillCurrentLvl) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = PlayerSkillXpTable.boostedLevels[int1]; + continue; + } + if (opcode == Cs2Opcodes.getSkillActualLvl) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = PlayerSkillXpTable.baseLevels[int1]; + continue; + } + if (opcode == Cs2Opcodes.getSkillXp) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = PlayerSkillXpTable.experience[int1]; + continue; + } + if (opcode == Cs2Opcodes.getMyLocation) { + int1 = Player.plane; + int3 = Camera.originX + (PlayerList.self.xFine >> 7); + int2 = (PlayerList.self.zFine >> 7) + Camera.originZ; + intStack[isp++] = (int1 << 28) - (-(int3 << 14) - int2); + continue; + } + if (opcode == Cs2Opcodes.x) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = int1 >> 14 & 0x3FFF; + continue; + } + if (opcode == Cs2Opcodes.z) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = int1 >> 28; + continue; + } + if (opcode == Cs2Opcodes.y) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = int1 & 0x3FFF; + continue; + } + if (opcode == Cs2Opcodes.isMember) { + intStack[isp++] = LoginManager.mapMembers ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.getItemIdInInpsectingSlot) { + isp -= 2; + int1 = intStack[isp] + 32768; + int3 = intStack[isp + 1]; + intStack[isp++] = Inv.getItemType(int1, int3); + continue; + } + if (opcode == Cs2Opcodes.getItemAmtInInspectingSlot) { + isp -= 2; + int1 = intStack[isp] + 32768; + int3 = intStack[isp + 1]; + intStack[isp++] = Inv.getItemCount(int1, int3); + continue; + } + if (opcode == Cs2Opcodes.getItemAmtInInspectingContainer) { + isp -= 2; + int1 = intStack[isp] + 32768; + int3 = intStack[isp + 1]; + intStack[isp++] = Inv.getSlotTotal(int1, int3); + continue; + } + if (opcode == Cs2Opcodes.getClientRights) { + if (LoginManager.staffModLevel < 2) { + intStack[isp++] = 0; + } else { + intStack[isp++] = LoginManager.staffModLevel; + } + continue; + } + if (opcode == Cs2Opcodes.getSystemUpdateTimer) { + intStack[isp++] = Player.rebootTimer; + continue; + } + if (opcode == Cs2Opcodes.getWorldId) { + intStack[isp++] = Player.worldId; + continue; + } + if (opcode == Cs2Opcodes.getRunEnergy) { + intStack[isp++] = Player.runEnergy; + continue; + } + if (opcode == Cs2Opcodes.getPlayerWeight) { + intStack[isp++] = Player.weight; + continue; + } + if (opcode == Cs2Opcodes.hasMoreThen5Blackmarks) { + if (LoginManager.blackmarks >= 5 && LoginManager.blackmarks <= 9) { + intStack[isp++] = 1; + continue; + } + intStack[isp++] = 0; + continue; + } + if (opcode == Cs2Opcodes.getBlackmarks) { + if (LoginManager.blackmarks >= 5 && LoginManager.blackmarks <= 9) { + intStack[isp++] = LoginManager.blackmarks; + continue; + } + intStack[isp++] = 0; + continue; + } + if (opcode == Cs2Opcodes.isSiteSettingsMembers) { + intStack[isp++] = LoginManager.playerMember ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.getMyCombat) { + intStack[isp++] = PlayerList.self.combatLevel; + continue; + } + if (opcode == Cs2Opcodes.IsFemale) { + intStack[isp++] = PlayerList.self.appearance.gender ? 1 : 0; + continue; + } + if (opcode == 3328) { + intStack[isp++] = LoginManager.playerUnderage && !LoginManager.parentalChatConsent ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.mapQuickchat) { + intStack[isp++] = LoginManager.mapQuickChat ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.getContainerFreeSlots) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = Inv.getFreeSpace(int1); + continue; + } + if (opcode == Cs2Opcodes.getContainerIntAttrCountIgnoreStacks) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + intStack[isp++] = Inv.getTotalParam(false, int1, int3); + continue; + } + if (opcode == Cs2Opcodes.getContainerIntAttrCount) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + intStack[isp++] = Inv.getTotalParam(true, int1, int3); + continue; + } + if (opcode == Cs2Opcodes.getLoginTypeRelatedMethod3333) { + intStack[isp++] = LoginManager.anInt39; + continue; + } + if (opcode == Cs2Opcodes.getLanguage) { + intStack[isp++] = client.language; + continue; + } + if (opcode == Cs2Opcodes.moveCoord) { + isp -= 4; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + int1 += int3 << 14; + local652 = intStack[isp + 3]; + int2 = intStack[isp + 2]; + int1 += int2 << 28; + int1 += local652; + intStack[isp++] = int1; + continue; + } + if (opcode == Cs2Opcodes.getAffid) { + intStack[isp++] = client.affiliate; + continue; + } + } else if (opcode < 3500) { + @Pc(3422) EnumType local3422; + if (opcode == Cs2Opcodes.datamap) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + local3422 = EnumTypeList.get(int1); + if (local3422.valueType == 115) { + } + stringStack[ssp++] = local3422.getString(int3); + continue; + } + if (opcode == Cs2Opcodes.datamap2) { + isp -= 4; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + local652 = intStack[isp + 3]; + int2 = intStack[isp + 2]; + @Pc(3469) EnumType local3469 = EnumTypeList.get(int2); + if (local3469.keyType == int1 && local3469.valueType == int3) { + if (int3 == 115) { + stringStack[ssp++] = local3469.getString(local652); + } else { + intStack[isp++] = local3469.getInt(local652); + } + continue; + } + throw new RuntimeException("C3408-1"); + } + if (opcode == Cs2Opcodes.datamapContainsValue) { + isp -= 3; + int3 = intStack[isp + 1]; + int2 = intStack[isp + 2]; + int1 = intStack[isp]; + if (int3 == -1) { + throw new RuntimeException("C3409-2"); + } + @Pc(3549) EnumType local3549 = EnumTypeList.get(int3); + if (local3549.valueType != int1) { + throw new RuntimeException("C3409-1"); + } + intStack[isp++] = local3549.containsValue(int2) ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.datamapContainsValue2) { + isp--; + int1 = intStack[isp]; + ssp--; + str1 = stringStack[ssp]; + if (int1 == -1) { + throw new RuntimeException("C3410-2"); + } + local3422 = EnumTypeList.get(int1); + if (local3422.valueType != 115) { + throw new RuntimeException("C3410-1"); + } + intStack[isp++] = local3422.containsValue(str1) ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.datamapSize) { + isp--; + int1 = intStack[isp]; + @Pc(3645) EnumType local3645 = EnumTypeList.get(int1); + intStack[isp++] = local3645.table.size(); + continue; + } + } else if (opcode < 3700) { + if (opcode == Cs2Opcodes.getFriendCount) { + if (FriendsList.state == 0) { + intStack[isp++] = -2; + } else if (FriendsList.state == 1) { + intStack[isp++] = -1; + } else { + intStack[isp++] = FriendsList.size; + } + continue; + } + if (opcode == Cs2Opcodes.getFriendName) { + isp--; + int1 = intStack[isp]; + if (FriendsList.state == 2 && int1 < FriendsList.size) { + stringStack[ssp++] = FriendsList.usernames[int1]; + continue; + } + stringStack[ssp++] = EMPTY_STRING; + continue; + } + if (opcode == Cs2Opcodes.getFriendWorld) { + isp--; + int1 = intStack[isp]; + if (FriendsList.state == 2 && FriendsList.size > int1) { + intStack[isp++] = FriendsList.worlds[int1]; + continue; + } + intStack[isp++] = 0; + continue; + } + if (opcode == Cs2Opcodes.getFriendRank) { + isp--; + int1 = intStack[isp]; + if (FriendsList.state == 2 && FriendsList.size > int1) { + intStack[isp++] = FriendsList.ranks[int1]; + continue; + } + intStack[isp++] = 0; + continue; + } + if (opcode == 3604) { + isp--; + int3 = intStack[isp]; + ssp--; + string = stringStack[ssp]; + FriendsList.setRank(string, int3); + continue; + } + if (opcode == 3605) { + ssp--; + string = stringStack[ssp]; + FriendsList.add(string.encode37()); + continue; + } + if (opcode == 3606) { + ssp--; + string = stringStack[ssp]; + FriendsList.remove(string.encode37()); + continue; + } + if (opcode == 3607) { + ssp--; + string = stringStack[ssp]; + IgnoreList.add(string.encode37()); + continue; + } + if (opcode == 3608) { + ssp--; + string = stringStack[ssp]; + IgnoreList.remove(string.encode37()); + continue; + } + if (opcode == Cs2Opcodes.isFriend) { + ssp--; + string = stringStack[ssp]; + if (string.startsWith(aClass100_446) || string.startsWith(aClass100_537)) { + string = string.substring(7); + } + intStack[isp++] = FriendsList.contains(string) ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.getFriendWorldName) { + isp--; + int1 = intStack[isp]; + if (FriendsList.state == 2 && FriendsList.size > int1) { + stringStack[ssp++] = FriendsList.worldNames[int1]; + continue; + } + stringStack[ssp++] = EMPTY_STRING; + continue; + } + if (opcode == Cs2Opcodes.clanChatDisplayName) { + if (ClanChat.name == null) { + stringStack[ssp++] = EMPTY_STRING; + } else { + stringStack[ssp++] = ClanChat.name.toTitleCase(); + } + continue; + } + if (opcode == Cs2Opcodes.clanGetChatCount) { + if (ClanChat.name == null) { + intStack[isp++] = 0; + } else { + intStack[isp++] = ClanChat.size; + } + continue; + } + if (opcode == Cs2Opcodes.clanChatUsername) { + isp--; + int1 = intStack[isp]; + if (ClanChat.name != null && ClanChat.size > int1) { + stringStack[ssp++] = ClanChat.members[int1].username.toTitleCase(); + continue; + } + stringStack[ssp++] = EMPTY_STRING; + continue; + } + if (opcode == Cs2Opcodes.clanChatUserWorld) { + isp--; + int1 = intStack[isp]; + if (ClanChat.name != null && int1 < ClanChat.size) { + intStack[isp++] = ClanChat.members[int1].world; + continue; + } + intStack[isp++] = 0; + continue; + } + if (opcode == Cs2Opcodes.clanChatUserRank) { + isp--; + int1 = intStack[isp]; + if (ClanChat.name != null && ClanChat.size > int1) { + intStack[isp++] = ClanChat.members[int1].rank; + continue; + } + intStack[isp++] = 0; + continue; + } + if (opcode == 3616) { + intStack[isp++] = ClanChat.minKick; + continue; + } + if (opcode == 3617) { + ssp--; + string = stringStack[ssp]; + ClanChat.kick(string); + continue; + } + if (opcode == 3618) { + intStack[isp++] = ClanChat.rank; + continue; + } + if (opcode == 3619) { + ssp--; + string = stringStack[ssp]; + ClanChat.join(string.encode37()); + continue; + } + if (opcode == 3620) { + ClanChat.leave(); + continue; + } + if (opcode == Cs2Opcodes.getIgnoreCount) { + if (FriendsList.state == 0) { + intStack[isp++] = -1; + } else { + intStack[isp++] = IgnoreList.size; + } + continue; + } + if (opcode == Cs2Opcodes.getIgnoreName) { + isp--; + int1 = intStack[isp]; + if (FriendsList.state != 0 && IgnoreList.size > int1) { + stringStack[ssp++] = Base37.decode37(IgnoreList.encodedUsernames[int1]).toTitleCase(); + continue; + } + stringStack[ssp++] = EMPTY_STRING; + continue; + } + if (opcode == 3623) { + ssp--; + string = stringStack[ssp]; + if (string.startsWith(aClass100_446) || string.startsWith(aClass100_537)) { + string = string.substring(7); + } + intStack[isp++] = IgnoreList.contains(string) ? 1 : 0; + continue; + } + if (opcode == 3624) { + isp--; + int1 = intStack[isp]; + if (ClanChat.members != null && ClanChat.size > int1 && ClanChat.members[int1].username.equalsIgnoreCase(PlayerList.self.username)) { + intStack[isp++] = 1; + continue; + } + intStack[isp++] = 0; + continue; + } + if (opcode == 3625) { + if (ClanChat.owner == null) { + stringStack[ssp++] = EMPTY_STRING; + } else { + stringStack[ssp++] = ClanChat.owner.toTitleCase(); + } + continue; + } + if (opcode == 3626) { + isp--; + int1 = intStack[isp]; + if (ClanChat.name != null && ClanChat.size > int1) { + stringStack[ssp++] = ClanChat.members[int1].worldName; + continue; + } + stringStack[ssp++] = EMPTY_STRING; + continue; + } + if (opcode == 3627) { + isp--; + int1 = intStack[isp]; + if (FriendsList.state == 2 && int1 >= 0 && int1 < FriendsList.size) { + intStack[isp++] = FriendsList.sameGame[int1] ? 1 : 0; + continue; + } + intStack[isp++] = 0; + continue; + } + if (opcode == 3628) { + ssp--; + string = stringStack[ssp]; + if (string.startsWith(aClass100_446) || string.startsWith(aClass100_537)) { + string = string.substring(7); + } + intStack[isp++] = FriendsList.indexOf(string); + continue; + } + if (opcode == 3629) { + intStack[isp++] = client.country; + continue; + } + } else if (opcode < 4000) { + if (opcode == Cs2Opcodes.getGEIsSelling) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = StockMarketManager.offers[int1].getType(); + continue; + } + if (opcode == Cs2Opcodes.getGEItem) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = StockMarketManager.offers[int1].item; + continue; + } + if (opcode == Cs2Opcodes.getGEItemPrice) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = StockMarketManager.offers[int1].price; + continue; + } + if (opcode == Cs2Opcodes.getGEItemAmt) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = StockMarketManager.offers[int1].count; + continue; + } + if (opcode == Cs2Opcodes.getGEItemAmtTransfered) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = StockMarketManager.offers[int1].completedCount; + continue; + } + if (opcode == Cs2Opcodes.getGECashTransfered) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = StockMarketManager.offers[int1].completedGold; + continue; + } + if (opcode == Cs2Opcodes.getGENotStarted) { + isp--; + int1 = intStack[isp]; + int3 = StockMarketManager.offers[int1].getStatus(); + intStack[isp++] = int3 == 0 ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.getGEIsStatus2) { + isp--; + int1 = intStack[isp]; + int3 = StockMarketManager.offers[int1].getStatus(); + intStack[isp++] = int3 == 2 ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.getGEIsDone) { + isp--; + int1 = intStack[isp]; + int3 = StockMarketManager.offers[int1].getStatus(); + intStack[isp++] = int3 == 5 ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.getGEIsStatus1) { + isp--; + int1 = intStack[isp]; + int3 = StockMarketManager.offers[int1].getStatus(); + intStack[isp++] = int3 == 1 ? 1 : 0; + continue; + } + } else if (opcode < 4100) { + if (opcode == Cs2Opcodes.add) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + intStack[isp++] = int3 + int1; + continue; + } + if (opcode == Cs2Opcodes.subtract) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + intStack[isp++] = int1 - int3; + continue; + } + if (opcode == Cs2Opcodes.multiply) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + intStack[isp++] = int3 * int1; + continue; + } + if (opcode == Cs2Opcodes.divide) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + intStack[isp++] = int1 / int3; + continue; + } + if (opcode == Cs2Opcodes.rndExcl) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = (int) ((double) int1 * Math.random()); + continue; + } + if (opcode == Cs2Opcodes.rnd) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = (int) (Math.random() * (double) (int1 + 1)); + continue; + } + if (opcode == 4006) { + isp -= 5; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + local652 = intStack[isp + 3]; + int2 = intStack[isp + 2]; + c = intStack[isp + 4]; + intStack[isp++] = (int3 - int1) * (c + -int2) / (local652 - int2) + int1; + continue; + } + @Pc(4899) long local4899; + @Pc(4892) long local4892; + if (opcode == Cs2Opcodes.addPercent) { + isp -= 2; + local4892 = intStack[isp]; + local4899 = intStack[isp + 1]; + intStack[isp++] = (int) (local4892 * local4899 / 100L + local4892); + continue; + } + if (opcode == Cs2Opcodes.flagBit) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + intStack[isp++] = int1 | 0x1 << int3; + continue; + } + if (opcode == Cs2Opcodes.unflagBit) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + intStack[isp++] = -(0x1 << int3) - 1 & int1; + continue; + } + if (opcode == Cs2Opcodes.isBitFlagged) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + intStack[isp++] = (int1 & 0x1 << int3) == 0 ? 0 : 1; + continue; + } + if (opcode == Cs2Opcodes.mod) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + intStack[isp++] = int1 % int3; + continue; + } + if (opcode == Cs2Opcodes.pow) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + if (int1 == 0) { + intStack[isp++] = 0; + } else { + intStack[isp++] = (int) Math.pow(int1, int3); + } + continue; + } + if (opcode == Cs2Opcodes.root) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + if (int1 == 0) { + intStack[isp++] = 0; + } else if (int3 == 0) { + intStack[isp++] = Integer.MAX_VALUE; + } else { + intStack[isp++] = (int) Math.pow(int1, 1.0D / (double) int3); + } + continue; + } + if (opcode == Cs2Opcodes.bitAnd) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + intStack[isp++] = int3 & int1; + continue; + } + if (opcode == Cs2Opcodes.bitOr) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + intStack[isp++] = int1 | int3; + continue; + } + if (opcode == Cs2Opcodes.min) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + intStack[isp++] = int1 < int3 ? int1 : int3; + continue; + } + if (opcode == Cs2Opcodes.max) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + intStack[isp++] = int3 >= int1 ? int3 : int1; + continue; + } + if (opcode == Cs2Opcodes.multiplyDivide) { + isp -= 3; + local4892 = intStack[isp]; + local4899 = intStack[isp + 1]; + @Pc(5251) long local5251 = intStack[isp + 2]; + intStack[isp++] = (int) (local4892 * local5251 / local4899); + continue; + } + } else if (opcode >= 4200) { + @Pc(5294) ParamType local5294; + if (opcode < 4300) { + if (opcode == Cs2Opcodes.getItemName) { + isp--; + int1 = intStack[isp]; + stringStack[ssp++] = ObjTypeList.get(int1).name; + continue; + } + @Pc(11269) ObjType local11269; + if (opcode == Cs2Opcodes.getItemGroundOption) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + local11269 = ObjTypeList.get(int1); + if (int3 >= 1 && int3 <= 5 && local11269.ops[int3 - 1] != null) { + stringStack[ssp++] = local11269.ops[int3 - 1]; + continue; + } + stringStack[ssp++] = EMPTY_STRING; + continue; + } + if (opcode == Cs2Opcodes.getItemOption) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + local11269 = ObjTypeList.get(int1); + if (int3 >= 1 && int3 <= 5 && local11269.iops[int3 - 1] != null) { + stringStack[ssp++] = local11269.iops[int3 - 1]; + continue; + } + stringStack[ssp++] = EMPTY_STRING; + continue; + } + if (opcode == Cs2Opcodes.getItemValue) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = ObjTypeList.get(int1).cost; + continue; + } + if (opcode == Cs2Opcodes.itemIsStackable) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = ObjTypeList.get(int1).stackable == 1 ? 1 : 0; + continue; + } + @Pc(11417) ObjType local11417; + if (opcode == Cs2Opcodes.getNotedItem) { + isp--; + int1 = intStack[isp]; + local11417 = ObjTypeList.get(int1); + if (local11417.certtemplate == -1 && local11417.certlink >= 0) { + intStack[isp++] = local11417.certlink; + continue; + } + intStack[isp++] = int1; + continue; + } + if (opcode == Cs2Opcodes.getRealItem) { + isp--; + int1 = intStack[isp]; + local11417 = ObjTypeList.get(int1); + if (local11417.certtemplate >= 0 && local11417.certlink >= 0) { + intStack[isp++] = local11417.certlink; + continue; + } + intStack[isp++] = int1; + continue; + } + if (opcode == Cs2Opcodes.itemIsMembers) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = ObjTypeList.get(int1).members ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.itemAttribute) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + local5294 = ParamTypeList.get(int3); + if (local5294.isString()) { + stringStack[ssp++] = ObjTypeList.get(int1).getParam(local5294.defaultString, int3); + } else { + intStack[isp++] = ObjTypeList.get(int1).getParam(local5294.defaultInt, int3); + } + continue; + } + if (opcode == Cs2Opcodes.searchItem) { + ssp--; + string = stringStack[ssp]; + isp--; + int3 = intStack[isp]; + Find.search(int3 == 1, string); + intStack[isp++] = Find.index; + continue; + } + if (opcode == Cs2Opcodes.nextSearchResult) { + if (Find.results != null && Find.size < Find.index) { + intStack[isp++] = Find.results[Find.size++] & 0xFFFF; + continue; + } + intStack[isp++] = -1; + continue; + } + if (opcode == 4212) { + Find.size = 0; + continue; + } + } else if (opcode < 4400) { + if (opcode == Cs2Opcodes.getNpcAttribute) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + local5294 = ParamTypeList.get(int3); + if (local5294.isString()) { + stringStack[ssp++] = NpcTypeList.get(int1).getParam(int3, local5294.defaultString); + } else { + intStack[isp++] = NpcTypeList.get(int1).getParam(int3, local5294.defaultInt); + } + continue; + } + } else if (opcode >= 4500) { + if (opcode >= 4600) { + if (opcode < 5100) { + if (opcode == Cs2Opcodes.getPublicChatSetting) { + intStack[isp++] = Chat.publicFilter; + continue; + } + if (opcode == Cs2Opcodes.setChatSettings) { + isp -= 3; + Chat.publicFilter = intStack[isp]; + Chat.privateFilter = intStack[isp + 1]; + Chat.tradeFilter = intStack[isp + 2]; + Protocol.outboundBuffer.p1isaac(ClientProt.SET_CHATFILTERSETTINGS); + Protocol.outboundBuffer.p1(Chat.publicFilter); + Protocol.outboundBuffer.p1(Chat.privateFilter); + Protocol.outboundBuffer.p1(Chat.tradeFilter); + continue; + } + if (opcode == 5002) { + ssp--; + string = stringStack[ssp]; + isp -= 2; + int3 = intStack[isp]; + int2 = intStack[isp + 1]; + Protocol.outboundBuffer.p1isaac(ClientProt.BUG_REPORT); + Protocol.outboundBuffer.p8(string.encode37()); + Protocol.outboundBuffer.p1(int3 - 1); + Protocol.outboundBuffer.p1(int2); + continue; + } + if (opcode == 5003) { + str1 = null; + isp--; + int1 = intStack[isp]; + if (int1 < 100) { + str1 = Chat.messages[int1]; + } + if (str1 == null) { + str1 = EMPTY_STRING; + } + stringStack[ssp++] = str1; + continue; + } + if (opcode == 5004) { + isp--; + int1 = intStack[isp]; + int3 = -1; + if (int1 < 100 && Chat.messages[int1] != null) { + int3 = Chat.types[int1]; + } + intStack[isp++] = int3; + continue; + } + if (opcode == Cs2Opcodes.getPrivateChatSetting) { + intStack[isp++] = Chat.privateFilter; + continue; + } + if (opcode == 5008) { + ssp--; + string = stringStack[ssp]; + if (!string.startsWith(aClass100_74)) { + if (LoginManager.staffModLevel == 0 && (LoginManager.playerUnderage && !LoginManager.parentalChatConsent || LoginManager.mapQuickChat)) { + continue; + } + str1 = string.toLowerCase(); + @Pc(5555) byte local5555 = 0; + if (str1.startsWith(LocalizedText.STABLE_CHATCOL0)) { + local5555 = 0; + string = string.substring(LocalizedText.STABLE_CHATCOL0.length()); + } else if (str1.startsWith(LocalizedText.STABLE_CHATCOL1)) { + string = string.substring(LocalizedText.STABLE_CHATCOL1.length()); + local5555 = 1; + } else if (str1.startsWith(LocalizedText.STABLE_CHATCOL2)) { + string = string.substring(LocalizedText.STABLE_CHATCOL2.length()); + local5555 = 2; + } else if (str1.startsWith(LocalizedText.STABLE_CHATCOL3)) { + local5555 = 3; + string = string.substring(LocalizedText.STABLE_CHATCOL3.length()); + } else if (str1.startsWith(LocalizedText.STABLE_CHATCOL4)) { + string = string.substring(LocalizedText.STABLE_CHATCOL4.length()); + local5555 = 4; + } else if (str1.startsWith(LocalizedText.STABLE_CHATCOL5)) { + string = string.substring(LocalizedText.STABLE_CHATCOL5.length()); + local5555 = 5; + } else if (str1.startsWith(LocalizedText.STABLE_CHATCOL6)) { + local5555 = 6; + string = string.substring(LocalizedText.STABLE_CHATCOL6.length()); + } else if (str1.startsWith(LocalizedText.STABLE_CHATCOL7)) { + local5555 = 7; + string = string.substring(LocalizedText.STABLE_CHATCOL7.length()); + } else if (str1.startsWith(LocalizedText.STABLE_CHATCOL8)) { + string = string.substring(LocalizedText.STABLE_CHATCOL8.length()); + local5555 = 8; + } else if (str1.startsWith(LocalizedText.STABLE_CHATCOL9)) { + local5555 = 9; + string = string.substring(LocalizedText.STABLE_CHATCOL9.length()); + } else if (str1.startsWith(LocalizedText.STABLE_CHATCOL10)) { + local5555 = 10; + string = string.substring(LocalizedText.STABLE_CHATCOL10.length()); + } else if (str1.startsWith(LocalizedText.STABLE_CHATCOL11)) { + string = string.substring(LocalizedText.STABLE_CHATCOL11.length()); + local5555 = 11; + } else if (client.language != 0) { + if (str1.startsWith(LocalizedText.CHATCOL0)) { + local5555 = 0; + string = string.substring(LocalizedText.CHATCOL0.length()); + } else if (str1.startsWith(LocalizedText.CHATCOL1)) { + string = string.substring(LocalizedText.CHATCOL1.length()); + local5555 = 1; + } else if (str1.startsWith(LocalizedText.CHATCOL2)) { + string = string.substring(LocalizedText.CHATCOL2.length()); + local5555 = 2; + } else if (str1.startsWith(LocalizedText.CHATCOL3)) { + string = string.substring(LocalizedText.CHATCOL3.length()); + local5555 = 3; + } else if (str1.startsWith(LocalizedText.CHATCOL4)) { + string = string.substring(LocalizedText.CHATCOL4.length()); + local5555 = 4; + } else if (str1.startsWith(LocalizedText.CHATCOL5)) { + local5555 = 5; + string = string.substring(LocalizedText.CHATCOL5.length()); + } else if (str1.startsWith(LocalizedText.CHATCOL6)) { + string = string.substring(LocalizedText.CHATCOL6.length()); + local5555 = 6; + } else if (str1.startsWith(LocalizedText.CHATCOL7)) { + local5555 = 7; + string = string.substring(LocalizedText.CHATCOL7.length()); + } else if (str1.startsWith(LocalizedText.CHATCOL8)) { + local5555 = 8; + string = string.substring(LocalizedText.CHATCOL8.length()); + } else if (str1.startsWith(LocalizedText.CHATCOL9)) { + local5555 = 9; + string = string.substring(LocalizedText.CHATCOL9.length()); + } else if (str1.startsWith(LocalizedText.CHATCOL10)) { + string = string.substring(LocalizedText.CHATCOL10.length()); + local5555 = 10; + } else if (str1.startsWith(LocalizedText.CHATCOL11)) { + string = string.substring(LocalizedText.CHATCOL11.length()); + local5555 = 11; + } + } + @Pc(5943) byte local5943 = 0; + str1 = string.toLowerCase(); + if (str1.startsWith(LocalizedText.STABLE_CHATEFFECT1)) { + string = string.substring(LocalizedText.STABLE_CHATEFFECT1.length()); + local5943 = 1; + } else if (str1.startsWith(LocalizedText.STABLE_CHATEFFECT2)) { + local5943 = 2; + string = string.substring(LocalizedText.STABLE_CHATEFFECT2.length()); + } else if (str1.startsWith(LocalizedText.STABLE_CHATEFFECT3)) { + string = string.substring(LocalizedText.STABLE_CHATEFFECT3.length()); + local5943 = 3; + } else if (str1.startsWith(LocalizedText.STABLE_CHATEFFECT4)) { + local5943 = 4; + string = string.substring(LocalizedText.STABLE_CHATEFFECT4.length()); + } else if (str1.startsWith(LocalizedText.STABLE_CHATEFFECTC5)) { + local5943 = 5; + string = string.substring(LocalizedText.STABLE_CHATEFFECTC5.length()); + } else if (client.language != 0) { + if (str1.startsWith(LocalizedText.CHATEFFECT1)) { + string = string.substring(LocalizedText.CHATEFFECT1.length()); + local5943 = 1; + } else if (str1.startsWith(LocalizedText.CHATEFFECT2)) { + local5943 = 2; + string = string.substring(LocalizedText.CHATEFFECT2.length()); + } else if (str1.startsWith(LocalizedText.CHATEFFECT3)) { + local5943 = 3; + string = string.substring(LocalizedText.CHATEFFECT3.length()); + } else if (str1.startsWith(LocalizedText.CHATEFFECT4)) { + local5943 = 4; + string = string.substring(LocalizedText.CHATEFFECT4.length()); + } else if (str1.startsWith(LocalizedText.CHATEFFECT5)) { + string = string.substring(LocalizedText.CHATEFFECT5.length()); + local5943 = 5; + } + } + Protocol.outboundBuffer.p1isaac(237); + Protocol.outboundBuffer.p1(0); + c = Protocol.outboundBuffer.offset; + Protocol.outboundBuffer.p1(local5555); + Protocol.outboundBuffer.p1(local5943); + WordPack.encode(Protocol.outboundBuffer, string); + Protocol.outboundBuffer.psize1(Protocol.outboundBuffer.offset - c); + continue; + } + Cheat.execute(string); + continue; + } + if (opcode == 5009) { + ssp -= 2; + str1 = stringStack[ssp + 1]; + string = stringStack[ssp]; + if (LoginManager.staffModLevel != 0 || (!LoginManager.playerUnderage || LoginManager.parentalChatConsent) && !LoginManager.mapQuickChat) { + Protocol.outboundBuffer.p1isaac(201); + Protocol.outboundBuffer.p1(0); + int2 = Protocol.outboundBuffer.offset; + Protocol.outboundBuffer.p8(string.encode37()); + WordPack.encode(Protocol.outboundBuffer, str1); + Protocol.outboundBuffer.psize1(Protocol.outboundBuffer.offset - int2); + } + continue; + } + if (opcode == 5010) { + isp--; + int1 = intStack[isp]; + str1 = null; + if (int1 < 100) { + str1 = Chat.names[int1]; + } + if (str1 == null) { + str1 = EMPTY_STRING; + } + stringStack[ssp++] = str1; + continue; + } + if (opcode == 5011) { + isp--; + int1 = intStack[isp]; + str1 = null; + if (int1 < 100) { + str1 = Chat.clans[int1]; + } + if (str1 == null) { + str1 = EMPTY_STRING; + } + stringStack[ssp++] = str1; + continue; + } + if (opcode == 5012) { + isp--; + int1 = intStack[isp]; + int3 = -1; + if (int1 < 100) { + int3 = Chat.phraseIds[int1]; + } + intStack[isp++] = int3; + continue; + } + if (opcode == 5015) { + if (PlayerList.self == null || PlayerList.self.username == null) { + string = Player.usernameInput; + } else { + string = PlayerList.self.getName(); + } + stringStack[ssp++] = string; + continue; + } + if (opcode == Cs2Opcodes.getTradeSetting) { + intStack[isp++] = Chat.tradeFilter; + continue; + } + if (opcode == 5017) { + intStack[isp++] = Chat.size; + continue; + } + if (opcode == 5050) { + isp--; + int1 = intStack[isp]; + stringStack[ssp++] = QuickChatCatTypeList.get(int1).description; + continue; + } + @Pc(6378) QuickChatCatType local6378; + if (opcode == 5051) { + isp--; + int1 = intStack[isp]; + local6378 = QuickChatCatTypeList.get(int1); + if (local6378.subcategories == null) { + intStack[isp++] = 0; + } else { + intStack[isp++] = local6378.subcategories.length; + } + continue; + } + if (opcode == 5052) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + @Pc(6416) QuickChatCatType local6416 = QuickChatCatTypeList.get(int1); + local652 = local6416.subcategories[int3]; + intStack[isp++] = local652; + continue; + } + if (opcode == 5053) { + isp--; + int1 = intStack[isp]; + local6378 = QuickChatCatTypeList.get(int1); + if (local6378.phrases == null) { + intStack[isp++] = 0; + } else { + intStack[isp++] = local6378.phrases.length; + } + continue; + } + if (opcode == 5054) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + intStack[isp++] = QuickChatCatTypeList.get(int1).phrases[int3]; + continue; + } + if (opcode == 5055) { + isp--; + int1 = intStack[isp]; + stringStack[ssp++] = QuickChatPhraseTypeList.get(int1).getText(); + continue; + } + if (opcode == 5056) { + isp--; + int1 = intStack[isp]; + @Pc(6527) QuickChatPhraseType local6527 = QuickChatPhraseTypeList.get(int1); + if (local6527.automaticResponses == null) { + intStack[isp++] = 0; + } else { + intStack[isp++] = local6527.automaticResponses.length; + } + continue; + } + if (opcode == 5057) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + intStack[isp++] = QuickChatPhraseTypeList.get(int1).automaticResponses[int3]; + continue; + } + if (opcode == 5058) { + activePhrase = new QuickChatPhrase(); + isp--; + activePhrase.id = intStack[isp]; + activePhrase.type = QuickChatPhraseTypeList.get(activePhrase.id); + activePhrase.values = new int[activePhrase.type.getDynamicCommandCount()]; + continue; + } + if (opcode == 5059) { + Protocol.outboundBuffer.p1isaac(167); + Protocol.outboundBuffer.p1(0); + int1 = Protocol.outboundBuffer.offset; + Protocol.outboundBuffer.p1(0); + Protocol.outboundBuffer.p2(activePhrase.id); + activePhrase.type.encodeMessage(Protocol.outboundBuffer, activePhrase.values); + Protocol.outboundBuffer.psize1(Protocol.outboundBuffer.offset - int1); + continue; + } + if (opcode == 5060) { + ssp--; + string = stringStack[ssp]; + Protocol.outboundBuffer.p1isaac(178); + Protocol.outboundBuffer.p1(0); + int3 = Protocol.outboundBuffer.offset; + Protocol.outboundBuffer.p8(string.encode37()); + Protocol.outboundBuffer.p2(activePhrase.id); + activePhrase.type.encodeMessage(Protocol.outboundBuffer, activePhrase.values); + Protocol.outboundBuffer.psize1(Protocol.outboundBuffer.offset - int3); + continue; + } + if (opcode == 5061) { + Protocol.outboundBuffer.p1isaac(167); + Protocol.outboundBuffer.p1(0); + int1 = Protocol.outboundBuffer.offset; + Protocol.outboundBuffer.p1(1); + Protocol.outboundBuffer.p2(activePhrase.id); + activePhrase.type.encodeMessage(Protocol.outboundBuffer, activePhrase.values); + Protocol.outboundBuffer.psize1(Protocol.outboundBuffer.offset - int1); + continue; + } + if (opcode == 5062) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + intStack[isp++] = QuickChatCatTypeList.get(int1).subcategoryShortcuts[int3]; + continue; + } + if (opcode == 5063) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + intStack[isp++] = QuickChatCatTypeList.get(int1).phraseShortcuts[int3]; + continue; + } + if (opcode == 5064) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + if (int3 == -1) { + intStack[isp++] = -1; + } else { + intStack[isp++] = QuickChatCatTypeList.get(int1).getSubcategoryByShortcut(int3); + } + continue; + } + if (opcode == 5065) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + if (int3 == -1) { + intStack[isp++] = -1; + } else { + intStack[isp++] = QuickChatCatTypeList.get(int1).getPhraseByShortcut(int3); + } + continue; + } + if (opcode == 5066) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = QuickChatPhraseTypeList.get(int1).getDynamicCommandCount(); + continue; + } + if (opcode == 5067) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + int2 = QuickChatPhraseTypeList.get(int1).getDynamicCommand(int3); + intStack[isp++] = int2; + continue; + } + if (opcode == 5068) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + activePhrase.values[int1] = int3; + continue; + } + if (opcode == 5069) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + activePhrase.values[int1] = int3; + continue; + } + if (opcode == 5070) { + isp -= 3; + int1 = intStack[isp]; + int2 = intStack[isp + 2]; + int3 = intStack[isp + 1]; + @Pc(6996) QuickChatPhraseType type = QuickChatPhraseTypeList.get(int1); + if (type.getDynamicCommand(int3) != 0) { + throw new RuntimeException("bad command"); + } + intStack[isp++] = type.getDynamicCommandParam(int2, int3); + continue; + } + if (opcode == 5071) { + ssp--; + string = stringStack[ssp]; + isp--; + local1552 = intStack[isp] == 1; + Find.findQuickChatPhrases(local1552, string); + intStack[isp++] = Find.index; + continue; + } + if (opcode == 5072) { + if (Find.results != null && Find.size < Find.index) { + intStack[isp++] = Find.results[Find.size++] & 0xFFFF; + continue; + } + intStack[isp++] = -1; + continue; + } + if (opcode == 5073) { + Find.size = 0; + continue; + } + } else if (opcode < 5200) { + if (opcode == Cs2Opcodes.isHoldingAlt) { + if (Keyboard.pressedKeys[Keyboard.KEY_ALT]) { + intStack[isp++] = 1; + } else { + intStack[isp++] = 0; + } + continue; + } + if (opcode == Cs2Opcodes.isHoldingCtrl) { + if (Keyboard.pressedKeys[Keyboard.KEY_CTRL]) { + intStack[isp++] = 1; + } else { + intStack[isp++] = 0; + } + continue; + } + if (opcode == Cs2Opcodes.isHoldingShift) { + if (Keyboard.pressedKeys[Keyboard.KEY_SHIFT]) { + intStack[isp++] = 1; + } else { + intStack[isp++] = 0; + } + continue; + } + } else { + @Pc(7566) boolean local7566; + if (opcode < 5300) { + if (opcode == Cs2Opcodes.setWorldmapZoom) { + isp--; + WorldMap.setTargetZoom(intStack[isp]); + continue; + } + if (opcode == Cs2Opcodes.getWorldmapZoom) { + intStack[isp++] = WorldMap.getTargetZoom(); + continue; + } + if (opcode == 5202) { + isp--; + WorldMap.method4444(intStack[isp]); + continue; + } + if (opcode == 5203) { + ssp--; + WorldMap.method4656(stringStack[ssp]); + continue; + } + if (opcode == 5204) { + stringStack[ssp - 1] = WorldMap.method923(stringStack[ssp - 1]); + continue; + } + if (opcode == Cs2Opcodes.loadDungeonmap) { + ssp--; + WorldMap.method1853(stringStack[ssp]); + continue; + } + if (opcode == Cs2Opcodes.getDungeonmap) { + isp--; + int1 = intStack[isp]; + @Pc(7264) Map local7264 = MapList.getContainingSource(int1 >> 14 & 0x3FFF, int1 & 0x3FFF); + if (local7264 == null) { + stringStack[ssp++] = EMPTY_STRING; + } else { + stringStack[ssp++] = local7264.group; + } + continue; + } + @Pc(7293) Map map; + if (opcode == Cs2Opcodes.getDungeonMapName) { + ssp--; + map = MapList.get(stringStack[ssp]); + if (map != null && map.name != null) { + stringStack[ssp++] = map.name; + continue; + } + stringStack[ssp++] = EMPTY_STRING; + continue; + } + if (opcode == 5208) { + intStack[isp++] = WorldMap.anInt2387; + intStack[isp++] = WorldMap.anInt1176; + continue; + } + if (opcode == 5209) { + intStack[isp++] = WorldMap.originX + WorldMap.anInt435; + intStack[isp++] = WorldMap.originZ + WorldMap.length - WorldMap.anInt919 - 1; + continue; + } + if (opcode == Cs2Opcodes.getDungeonmapCenter) { + map = WorldMap.getCurrentMap(); + if (map == null) { + intStack[isp++] = 0; + intStack[isp++] = 0; + } else { + intStack[isp++] = map.originX * 64; + intStack[isp++] = map.originZ * 64; + } + continue; + } + if (opcode == 5211) { + map = WorldMap.getCurrentMap(); + if (map == null) { + intStack[isp++] = 0; + intStack[isp++] = 0; + } else { + intStack[isp++] = map.displayMaxZ - map.displayMinX; + intStack[isp++] = map.displayMinZ - map.displayMaxX; + } + continue; + } + if (opcode == 5212) { + int1 = WorldMap.method2352(); + int2 = 0; + if (int1 == -1) { + str1 = EMPTY_STRING; + } else { + str1 = WorldMap.labels.aClass100Array153[int1]; + int2 = WorldMap.labels.method3894(int1); + } + str1 = str1.method3140(aClass100_639, aClass100_10); + stringStack[ssp++] = str1; + intStack[isp++] = int2; + continue; + } + if (opcode == 5213) { + int2 = 0; + int1 = WorldMap.method2385(); + if (int1 == -1) { + str1 = EMPTY_STRING; + } else { + str1 = WorldMap.labels.aClass100Array153[int1]; + int2 = WorldMap.labels.method3894(int1); + } + str1 = str1.method3140(aClass100_639, aClass100_10); + stringStack[ssp++] = str1; + intStack[isp++] = int2; + continue; + } + if (opcode == Cs2Opcodes.setPositionInMap) { + isp--; + int1 = intStack[isp]; + WorldMap.method3616(int1 >> 14 & 0x3FFF, int1 & 0x3FFF); + continue; + } + if (opcode == Cs2Opcodes.dungeonmapContains) { + isp--; + int1 = intStack[isp]; + ssp--; + str1 = stringStack[ssp]; + local7566 = false; + @Pc(7577) SecondaryLinkedList local7577 = method3333(int1 >> 14 & 0x3FFF, int1 & 0x3FFF); + for (@Pc(7582) Map local7582 = (Map) local7577.head(); local7582 != null; local7582 = (Map) local7577.next()) { + if (local7582.group.equalsIgnoreCase(str1)) { + local7566 = true; + break; + } + } + if (local7566) { + intStack[isp++] = 1; + } else { + intStack[isp++] = 0; + } + continue; + } + if (opcode == 5216) { + isp--; + int1 = intStack[isp]; + MapList.method4332(int1); + continue; + } + if (opcode == 5217) { + isp--; + int1 = intStack[isp]; + if (MapList.method1855(int1)) { + intStack[isp++] = 1; + } else { + intStack[isp++] = 0; + } + continue; + } + if (opcode == Cs2Opcodes.getMapDefaultZoom) { + map = WorldMap.getCurrentMap(); + if (map == null) { + intStack[isp++] = -1; + } else { + intStack[isp++] = map.defaultZoom; + } + continue; + } + if (opcode == 5219) { + ssp--; + WorldMap.method1149(stringStack[ssp]); + continue; + } + if (opcode == 5220) { + intStack[isp++] = WorldMap.loadPercentage == 100 ? 1 : 0; + continue; + } + } else if (opcode < 5400) { + if (opcode == 5300) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + DisplayMode.setWindowMode(false, 3, int1, int3); + intStack[isp++] = GameShell.fullScreenFrame == null ? 0 : 1; + continue; + } + if (opcode == 5301) { + if (GameShell.fullScreenFrame != null) { + DisplayMode.setWindowMode(false, Preferences.favoriteWorlds, -1, -1); + } + continue; + } + if (opcode == 5302) { + @Pc(7780) DisplayMode[] local7780 = DisplayMode.getDisplayModes(); + intStack[isp++] = local7780.length; + continue; + } + if (opcode == 5303) { + isp--; + int1 = intStack[isp]; + @Pc(7800) DisplayMode[] local7800 = DisplayMode.getDisplayModes(); + intStack[isp++] = local7800[int1].width; + intStack[isp++] = local7800[int1].height; + continue; + } + if (opcode == 5305) { + int3 = Preferences.fullScreenHeight; + int1 = Preferences.fullScreenWidth; + int2 = -1; + @Pc(7833) DisplayMode[] local7833 = DisplayMode.getDisplayModes(); + for (c = 0; c < local7833.length; c++) { + @Pc(7843) DisplayMode local7843 = local7833[c]; + if (int1 == local7843.width && local7843.height == int3) { + int2 = c; + break; + } + } + intStack[isp++] = int2; + continue; + } + if (opcode == Cs2Opcodes.getDisplayMode) { + intStack[isp++] = DisplayMode.getWindowMode(); + continue; + } + if (opcode == 5307) { + isp--; + int1 = intStack[isp]; + if (int1 < 0 || int1 > 2) { + int1 = 0; + } + DisplayMode.setWindowMode(false, int1, -1, -1); + continue; + } + if (opcode == 5308) { + intStack[isp++] = Preferences.favoriteWorlds; + continue; + } + if (opcode == 5309) { + isp--; + int1 = intStack[isp]; + if (int1 < 0 || int1 > 2) { + int1 = 0; + } + Preferences.favoriteWorlds = int1; + Preferences.write(GameShell.signLink); + continue; + } + } else if (opcode < 5500) { + if (opcode == 5400) { + ssp -= 2; + string = stringStack[ssp]; + str1 = stringStack[ssp + 1]; + isp--; + int2 = intStack[isp]; + Protocol.outboundBuffer.p1isaac(117); + Protocol.outboundBuffer.p1(Buffer.gjstrlen(string) + Buffer.gjstrlen(str1) + 1); + Protocol.outboundBuffer.pjstr(string); + Protocol.outboundBuffer.pjstr(str1); + Protocol.outboundBuffer.p1(int2); + continue; + } + if (opcode == 5401) { + isp -= 2; + client.aShortArray88[intStack[isp]] = (short) ColorUtils.rgbToHsl(intStack[isp + 1]); + ObjTypeList.clearModels(); + ObjTypeList.clearSprites(); + NpcTypeList.clearModels(); + NpcTypeList.clearHeadModels(); + method1807(); + continue; + } + if (opcode == 5405) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + if (int1 >= 0 && int1 < 2) { + Camera.anIntArrayArrayArray9[int1] = new int[int3 << 1][4]; + } + continue; + } + if (opcode == 5406) { + isp -= 7; + int1 = intStack[isp]; + int3 = intStack[isp + 1] << 1; + local652 = intStack[isp + 3]; + int2 = intStack[isp + 2]; + c = intStack[isp + 4]; + @Pc(8108) int local8108 = intStack[isp + 6]; + local1087 = intStack[isp + 5]; + if (int1 >= 0 && int1 < 2 && Camera.anIntArrayArrayArray9[int1] != null && int3 >= 0 && Camera.anIntArrayArrayArray9[int1].length > int3) { + Camera.anIntArrayArrayArray9[int1][int3] = new int[]{(int2 >> 14 & 0x3FFF) * 128, local652, (int2 & 0x3FFF) * 128, local8108}; + Camera.anIntArrayArrayArray9[int1][int3 + 1] = new int[]{(c >> 14 & 0x3FFF) * 128, local1087, (c & 0x3FFF) * 128}; + } + continue; + } + if (opcode == 5407) { + isp--; + int1 = Camera.anIntArrayArrayArray9[intStack[isp]].length >> 1; + intStack[isp++] = int1; + continue; + } + if (opcode == 5411) { + if (GameShell.fullScreenFrame != null) { + DisplayMode.setWindowMode(false, Preferences.favoriteWorlds, -1, -1); + } + if (GameShell.frame == null) { + openUrl(method479(), false); + } else { + System.exit(0); + } + continue; + } + if (opcode == Cs2Opcodes.getLastIp5419) { + string = EMPTY_STRING; + if (Player.lastLogAddress != null) { + string = JagString.formatIp(Player.lastLogAddress.intArg2); + if (Player.lastLogAddress.result != null) { + @Pc(8281) byte[] local8281 = ((String) Player.lastLogAddress.result).getBytes(StandardCharsets.ISO_8859_1); + string = JagString.decodeString(local8281, local8281.length, 0); + } + } + stringStack[ssp++] = string; + continue; + } + if (opcode == 5420) { + intStack[isp++] = SignLink.anInt5928 == 3 ? 1 : 0; + continue; + } + if (opcode == 5421) { + if (GameShell.fullScreenFrame != null) { + DisplayMode.setWindowMode(false, Preferences.favoriteWorlds, -1, -1); + } + isp--; + local1552 = intStack[isp] == 1; + ssp--; + string = stringStack[ssp]; + @Pc(8356) JagString local8356 = JagString.concatenate(new JagString[]{method479(), string}); + if (GameShell.frame != null || local1552 && SignLink.anInt5928 != 3 && SignLink.osName.startsWith("win") && !client.haveIe6) { + Protocol.newTab = local1552; + url = local8356; + Protocol.openUrlRequest = GameShell.signLink.openUrl(new String(local8356.method3148(), StandardCharsets.ISO_8859_1)); + continue; + } + openUrl(local8356, local1552); + continue; + } + if (opcode == 5422) { + isp--; + int2 = intStack[isp]; + ssp -= 2; + str1 = stringStack[ssp + 1]; + string = stringStack[ssp]; + if (string.length() > 0) { + if (PlayerList.playerNames == null) { + PlayerList.playerNames = new JagString[PlayerList.anIntArray309[client.game]]; + } + PlayerList.playerNames[int2] = string; + } + if (str1.length() > 0) { + if (PlayerList.playerNames2 == null) { + PlayerList.playerNames2 = new JagString[PlayerList.anIntArray309[client.game]]; + } + PlayerList.playerNames2[int2] = str1; + } + continue; + } + if (opcode == 5423) { + ssp--; + stringStack[ssp].print(); + continue; + } + if (opcode == 5424) { + isp -= 11; + LoginManager.anInt1275 = intStack[isp]; + LoginManager.anInt2910 = intStack[isp + 1]; + LoginManager.anInt5457 = intStack[isp + 2]; + LoginManager.anInt5208 = intStack[isp + 3]; + LoginManager.anInt1736 = intStack[isp + 4]; + LoginManager.anInt4073 = intStack[isp + 5]; + LoginManager.anInt2261 = intStack[isp + 6]; + LoginManager.anInt3324 = intStack[isp + 7]; + LoginManager.anInt5556 = intStack[isp + 8]; + LoginManager.anInt4581 = intStack[isp + 9]; + LoginManager.anInt5752 = intStack[isp + 10]; + client.js5Archive8.isFileReady(LoginManager.anInt1736); + client.js5Archive8.isFileReady(LoginManager.anInt4073); + client.js5Archive8.isFileReady(LoginManager.anInt2261); + client.js5Archive8.isFileReady(LoginManager.anInt3324); + client.js5Archive8.isFileReady(LoginManager.anInt5556); + InterfaceList.aBoolean298 = true; + continue; + } + if (opcode == 5425) { + LoginManager.method4637(); + InterfaceList.aBoolean298 = false; + continue; + } + if (opcode == 5426) { + isp--; + anInt5794 = intStack[isp]; + continue; + } + if (opcode == 5427) { + isp -= 2; + MiniMap.anInt4075 = intStack[isp]; + MiniMap.anInt5073 = intStack[isp + 1]; + continue; + } + } else if (opcode < 5600) { + if (opcode == Cs2Opcodes.cameraMoveTo) { + isp -= 4; + int1 = intStack[isp]; + local652 = intStack[isp + 3]; + int2 = intStack[isp + 2]; + int3 = intStack[isp + 1]; + Camera.method2722(false, int2, int3, local652, (int1 & 0x3FFF) - Camera.originZ, (int1 >> 14 & 0x3FFF) - Camera.originX); + continue; + } + if (opcode == Cs2Opcodes.cameraPointAt) { + isp -= 4; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + local652 = intStack[isp + 3]; + int2 = intStack[isp + 2]; + Camera.method3849(int3, (int1 & 0x3FFF) - Camera.originZ, int2, (int1 >> 14 & 0x3FFF) - Camera.originX, local652); + continue; + } + if (opcode == 5502) { + isp -= 6; + int1 = intStack[isp]; + if (int1 >= 2) { + throw new RuntimeException(); + } + Camera.anInt3718 = int1; + int3 = intStack[isp + 1]; + if (Camera.anIntArrayArrayArray9[Camera.anInt3718].length >> 1 <= int3 + 1) { + throw new RuntimeException(); + } + Camera.anInt3125 = int3; + Camera.anInt5224 = 0; + Camera.anInt5101 = intStack[isp + 2]; + Camera.anInt5843 = intStack[isp + 3]; + int2 = intStack[isp + 4]; + if (int2 >= 2) { + throw new RuntimeException(); + } + Camera.anInt1694 = int2; + local652 = intStack[isp + 5]; + if (Camera.anIntArrayArrayArray9[Camera.anInt1694].length >> 1 <= local652 + 1) { + throw new RuntimeException(); + } + Camera.anInt2119 = local652; + Camera.cameraType = 3; + continue; + } + if (opcode == Cs2Opcodes.cameraUnlock) { + Camera.resetCameraEffects(); + continue; + } + if (opcode == 5504) { + isp -= 2; + Camera.pitchTarget = intStack[isp]; + Camera.yawTarget = intStack[isp + 1]; + if (Camera.cameraType == 2) { + Camera.cameraYaw = (int) Camera.yawTarget; + Camera.cameraPitch = (int) Camera.pitchTarget; + } + Camera.clampCameraAngle(); + continue; + } + if (opcode == Cs2Opcodes.cameraGetVrot) { + intStack[isp++] = (int) Camera.pitchTarget; + continue; + } + if (opcode == Cs2Opcodes.cameraGetHrot) { + intStack[isp++] = (int) Camera.yawTarget; + continue; + } + } else if (opcode < 5700) { + if (opcode == Cs2Opcodes.directlogin) { + ssp -= 2; + string = stringStack[ssp]; + str1 = stringStack[ssp + 1]; + isp--; + int2 = intStack[isp]; + if (client.gameState == 10 && LoginManager.anInt4937 == 0 && LoginManager.step == 0 && CreateManager.step == 0 && WorldList.step == 0) { + LoginManager.method3896(string, str1, int2); + } + continue; + } + if (opcode == Cs2Opcodes.skipLoginstage10) { + LoginManager.method3395(); + continue; + } + if (opcode == Cs2Opcodes.resetRCs) { + if (LoginManager.step == 0) { + LoginManager.reply = -2; + } + continue; + } + if (opcode == 5603) { + isp -= 4; + if (client.gameState == 10 && LoginManager.anInt4937 == 0 && LoginManager.step == 0 && CreateManager.step == 0 && WorldList.step == 0) { + CreateManager.checkInfo(intStack[isp + 2], intStack[isp + 3], intStack[isp], intStack[isp + 1]); + } + continue; + } + if (opcode == Cs2Opcodes.sendRequestAccount) { + ssp--; + if (client.gameState == 10 && LoginManager.anInt4937 == 0 && LoginManager.step == 0 && CreateManager.step == 0 && WorldList.step == 0) { + CreateManager.checkName(stringStack[ssp].encode37()); + } + continue; + } + if (opcode == Cs2Opcodes.sendCreateAccount) { + isp -= 4; + ssp -= 2; + if (client.gameState == 10 && LoginManager.anInt4937 == 0 && LoginManager.step == 0 && CreateManager.step == 0 && WorldList.step == 0) { + CreateManager.createAccount(intStack[isp], intStack[isp + 3], intStack[isp + 1], stringStack[ssp + 1], stringStack[ssp].encode37(), intStack[isp + 2]); + } + continue; + } + if (opcode == Cs2Opcodes.resetAccountCreateRC) { + if (CreateManager.step == 0) { + CreateManager.reply = -2; + } + continue; + } + if (opcode == Cs2Opcodes.getGameloginRc) { + intStack[isp++] = LoginManager.reply; + continue; + } + if (opcode == Cs2Opcodes.getWorldswitchTimer) { + intStack[isp++] = LoginManager.hopTime; + continue; + } + if (opcode == Cs2Opcodes.getAccountCreateRC) { + intStack[isp++] = CreateManager.reply; + continue; + } + if (opcode == 5610) { + for (int1 = 0; int1 < 5; int1++) { + stringStack[ssp++] = CreateManager.suggestedNames.length > int1 ? CreateManager.suggestedNames[int1].toTitleCase() : EMPTY_STRING; + } + CreateManager.suggestedNames = null; + continue; + } + if (opcode == Cs2Opcodes.getDetailedRC) { + intStack[isp++] = LoginManager.disallowResult; + continue; + } + } else if (opcode < 6100) { + if (opcode == 6001) { + isp--; + int1 = intStack[isp]; + if (int1 < 1) { + int1 = 1; + } + if (int1 > 4) { + int1 = 4; + } + Preferences.brightness = int1; + if (!GlRenderer.enabled || !Preferences.highDetailLighting) { + if (Preferences.brightness == 1) { + Rasteriser.setBrightness(0.9F); + } + if (Preferences.brightness == 2) { + Rasteriser.setBrightness(0.8F); + } + if (Preferences.brightness == 3) { + Rasteriser.setBrightness(0.7F); + } + if (Preferences.brightness == 4) { + Rasteriser.setBrightness(0.6F); + } + } + if (GlRenderer.enabled) { + FogManager.setInstantFade(); + if (!Preferences.highDetailLighting) { + method2742(); + } + } + ObjTypeList.clearSprites(); + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6002) { + isp--; + Preferences.setAllVisibleLevels(intStack[isp] == 1); + LocTypeList.clear(); + method2742(); + method2218(); + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6003) { + isp--; + Preferences.removeRoofsSelectively = intStack[isp] == 1; + method2218(); + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6005) { + isp--; + Preferences.showGroundDecorations = intStack[isp] == 1; + method2742(); + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6006) { + isp--; + Preferences.highDetailTextures = intStack[isp] == 1; + ((Js5GlTextureProvider) Rasteriser.textureProvider).method3245(!Preferences.highDetailTextures); + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6007) { + isp--; + Preferences.manyIdleAnimations = intStack[isp] == 1; + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6008) { + isp--; + Preferences.flickeringEffectsOn = intStack[isp] == 1; + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6009) { + isp--; + Preferences.manyGroundTextures = intStack[isp] == 1; + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6010) { + isp--; + Preferences.characterShadowsOn = intStack[isp] == 1; + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6011) { + isp--; + int1 = intStack[isp]; + if (int1 < 0 || int1 > 2) { + int1 = 0; + } + Preferences.sceneryShadowsType = int1; + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6012) { + if (GlRenderer.enabled) { + MaterialManager.setMaterial(0, 0); + } + isp--; + Preferences.highDetailLighting = intStack[isp] == 1; + if (GlRenderer.enabled && Preferences.highDetailLighting) { + Rasteriser.setBrightness(0.7F); + } else { + if (Preferences.brightness == 1) { + Rasteriser.setBrightness(0.9F); + } + if (Preferences.brightness == 2) { + Rasteriser.setBrightness(0.8F); + } + if (Preferences.brightness == 3) { + Rasteriser.setBrightness(0.7F); + } + if (Preferences.brightness == 4) { + Rasteriser.setBrightness(0.6F); + } + } + method2742(); + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6014) { + isp--; + Preferences.highWaterDetail = intStack[isp] == 1; + if (GlRenderer.enabled) { + method2742(); + } + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6015) { + isp--; + Preferences.fogEnabled = intStack[isp] == 1; + if (GlRenderer.enabled) { + FogManager.setInstantFade(); + } + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6016) { + isp--; + int1 = intStack[isp]; + if (GlRenderer.enabled) { + GameShell.replaceCanvas = true; + } + if (int1 < 0 || int1 > 2) { + int1 = 0; + } + Preferences.antiAliasingMode = int1; + continue; + } + if (opcode == 6017) { + isp--; + Preferences.stereo = intStack[isp] == 1; + client.method930(); + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6018) { + isp--; + int1 = intStack[isp]; + if (int1 < 0) { + int1 = 0; + } + if (int1 > 127) { + int1 = 127; + } + Preferences.soundEffectVolume = int1; + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6019) { + isp--; + int1 = intStack[isp]; + if (int1 < 0) { + int1 = 0; + } + if (int1 > 255) { + int1 = 255; + } + if (int1 != Preferences.musicVolume) { + if (Preferences.musicVolume == 0 && MusicPlayer.groupId != -1) { + MidiPlayer.playImmediate(client.js5Archive6, MusicPlayer.groupId, int1); + MidiPlayer.jingle = false; + } else if (int1 == 0) { + MidiPlayer.method4548(); + MidiPlayer.jingle = false; + } else { + MidiPlayer.method3956(int1); + } + Preferences.musicVolume = int1; + } + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6020) { + isp--; + int1 = intStack[isp]; + if (int1 < 0) { + int1 = 0; + } + if (int1 > 127) { + int1 = 127; + } + Preferences.ambientSoundsVolume = int1; + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + continue; + } + if (opcode == 6021) { + isp--; + neverRemoveRoofs = intStack[isp] == 1; + method2218(); + continue; + } + if (opcode == 6023) { + isp--; + int1 = intStack[isp]; + if (int1 < 0) { + int1 = 0; + } + if (int1 > 2) { + int1 = 2; + } + local1552 = false; + if (GameShell.maxMemory < 96) { + local1552 = true; + int1 = 0; + } + Preferences.setParticles(int1); + Preferences.write(GameShell.signLink); + Preferences.sentToServer = false; + intStack[isp++] = local1552 ? 0 : 1; + continue; + } + if (opcode == 6024) { + isp--; + int1 = intStack[isp]; + if (int1 < 0 || int1 > 2) { + int1 = 0; + } + Preferences.windowMode = int1; + Preferences.write(GameShell.signLink); + continue; + } + if (opcode == 6028) { + isp--; + Preferences.cursorsEnabled = intStack[isp] != 0; + Preferences.write(GameShell.signLink); + continue; + } + } else if (opcode < 6200) { + if (opcode == 6101) { + intStack[isp++] = Preferences.brightness; + continue; + } + if (opcode == 6102) { + intStack[isp++] = SceneGraph.allLevelsAreVisible() ? 1 : 0; + continue; + } + if (opcode == 6103) { + intStack[isp++] = Preferences.removeRoofsSelectively ? 1 : 0; + continue; + } + if (opcode == 6105) { + intStack[isp++] = Preferences.showGroundDecorations ? 1 : 0; + continue; + } + if (opcode == 6106) { + intStack[isp++] = Preferences.highDetailTextures ? 1 : 0; + continue; + } + if (opcode == 6107) { + intStack[isp++] = Preferences.manyIdleAnimations ? 1 : 0; + continue; + } + if (opcode == 6108) { + intStack[isp++] = Preferences.flickeringEffectsOn ? 1 : 0; + continue; + } + if (opcode == 6109) { + intStack[isp++] = Preferences.manyGroundTextures ? 1 : 0; + continue; + } + if (opcode == 6110) { + intStack[isp++] = Preferences.characterShadowsOn ? 1 : 0; + continue; + } + if (opcode == 6111) { + intStack[isp++] = Preferences.sceneryShadowsType; + continue; + } + if (opcode == 6112) { + intStack[isp++] = Preferences.highDetailLighting ? 1 : 0; + continue; + } + if (opcode == 6114) { + intStack[isp++] = Preferences.highWaterDetail ? 1 : 0; + continue; + } + if (opcode == 6115) { + intStack[isp++] = Preferences.fogEnabled ? 1 : 0; + continue; + } + if (opcode == 6116) { + intStack[isp++] = Preferences.antiAliasingMode; + continue; + } + if (opcode == 6117) { + intStack[isp++] = Preferences.stereo ? 1 : 0; + continue; + } + if (opcode == 6118) { + intStack[isp++] = Preferences.soundEffectVolume; + continue; + } + if (opcode == 6119) { + intStack[isp++] = Preferences.musicVolume; + continue; + } + if (opcode == 6120) { + intStack[isp++] = Preferences.ambientSoundsVolume; + continue; + } + if (opcode == 6121) { + if (GlRenderer.enabled) { + intStack[isp++] = GlRenderer.arbMultisampleSupported ? 1 : 0; + } else { + intStack[isp++] = 0; + } + continue; + } + if (opcode == 6123) { + intStack[isp++] = Preferences.getParticleSetting(); + continue; + } + if (opcode == 6124) { + intStack[isp++] = Preferences.windowMode; + continue; + } + if (opcode == 6128) { + intStack[isp++] = Preferences.cursorsEnabled ? 1 : 0; + continue; + } + } else if (opcode < 6300) { + if (opcode == 6200) { + isp -= 2; + aShort25 = (short) intStack[isp]; + if (aShort25 <= 0) { + aShort25 = 256; + } + aShort9 = (short) intStack[isp + 1]; + if (aShort9 <= 0) { + aShort9 = 205; + } + continue; + } + if (opcode == 6201) { + isp -= 2; + aShort30 = (short) intStack[isp]; + if (aShort30 <= 0) { + aShort30 = 256; + } + aShort27 = (short) intStack[isp + 1]; + if (aShort27 <= 0) { + aShort27 = 320; + } + continue; + } + if (opcode == 6202) { + isp -= 4; + aShort22 = (short) intStack[isp]; + if (aShort22 <= 0) { + aShort22 = 1; + } + aShort1 = (short) intStack[isp + 1]; + if (aShort1 <= 0) { + aShort1 = 32767; + } else if (aShort22 > aShort1) { + aShort1 = aShort22; + } + aShort12 = (short) intStack[isp + 2]; + if (aShort12 <= 0) { + aShort12 = 1; + } + aShort21 = (short) intStack[isp + 3]; + if (aShort21 <= 0) { + aShort21 = 32767; + } else if (aShort21 < aShort12) { + aShort21 = aShort12; + } + continue; + } + if (opcode == 6203) { + method2314(InterfaceList.aClass13_26.width, 0, InterfaceList.aClass13_26.height, 0, false); + intStack[isp++] = anInt4055; + intStack[isp++] = anInt5377; + continue; + } + if (opcode == 6204) { + intStack[isp++] = aShort30; + intStack[isp++] = aShort27; + continue; + } + if (opcode == 6205) { + intStack[isp++] = aShort25; + intStack[isp++] = aShort9; + continue; + } + } else if (opcode < 6400) { + if (opcode == Cs2Opcodes.getMinute) { + intStack[isp++] = (int) (MonotonicClock.currentTimeMillis() / 60000L); + continue; + } + if (opcode == Cs2Opcodes.getCurrentDaysSinceLaunch) { + intStack[isp++] = (int) (MonotonicClock.currentTimeMillis() / 86400000L) - 11745; + continue; + } + if (opcode == Cs2Opcodes.getDaysSinceLaunch) { + isp -= 3; + int2 = intStack[isp + 2]; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + aCalendar2.clear(); + aCalendar2.set(Calendar.HOUR_OF_DAY, 12); + aCalendar2.set(int2, int3, int1); + intStack[isp++] = (int) (aCalendar2.getTime().getTime() / 86400000L) - 11745; + continue; + } + if (opcode == Cs2Opcodes.getYear) { + aCalendar2.clear(); + aCalendar2.setTime(new Date(MonotonicClock.currentTimeMillis())); + intStack[isp++] = aCalendar2.get(Calendar.YEAR); + continue; + } + if (opcode == Cs2Opcodes.isLeapYear) { + local1552 = true; + isp--; + int1 = intStack[isp]; + if (int1 < 0) { + local1552 = (int1 + 1) % 4 == 0; + } else if (int1 < 1582) { + local1552 = int1 % 4 == 0; + } else if (int1 % 4 != 0) { + local1552 = false; + } else if (int1 % 100 != 0) { + local1552 = true; + } else if (int1 % 400 != 0) { + local1552 = false; + } + intStack[isp++] = local1552 ? 1 : 0; + continue; + } + } else if (opcode < 6500) { + if (opcode == Cs2Opcodes.canShowVideoAd) { + intStack[isp++] = client.showVideoAd() ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.isShowingVideoAd) { + intStack[isp++] = isShowingVideoAd() ? 1 : 0; + continue; + } + } else if (opcode < 6600) { + if (opcode == 6500) { + if (client.gameState == 10 && LoginManager.anInt4937 == 0 && LoginManager.step == 0 && CreateManager.step == 0) { + intStack[isp++] = WorldList.fetch() == -1 ? 0 : 1; + continue; + } + intStack[isp++] = 1; + continue; + } + @Pc(10247) WorldInfo local10247; + @Pc(10191) World world; + if (opcode == Cs2Opcodes.getFirstWorldData) { + world = WorldList.getFirstWorld(); + if (world == null) { + intStack[isp++] = -1; + intStack[isp++] = 0; + stringStack[ssp++] = EMPTY_STRING; + intStack[isp++] = 0; + stringStack[ssp++] = EMPTY_STRING; + intStack[isp++] = 0; + } else { + intStack[isp++] = world.id; + intStack[isp++] = world.flags; + stringStack[ssp++] = world.activity; + local10247 = world.getWorldInfo(); + intStack[isp++] = local10247.flag; + stringStack[ssp++] = local10247.name; + intStack[isp++] = world.players; + } + continue; + } + if (opcode == Cs2Opcodes.getNextWorldData) { + world = WorldList.getNextWorld(); + if (world == null) { + intStack[isp++] = -1; + intStack[isp++] = 0; + stringStack[ssp++] = EMPTY_STRING; + intStack[isp++] = 0; + stringStack[ssp++] = EMPTY_STRING; + intStack[isp++] = 0; + } else { + intStack[isp++] = world.id; + intStack[isp++] = world.flags; + stringStack[ssp++] = world.activity; + local10247 = world.getWorldInfo(); + intStack[isp++] = local10247.flag; + stringStack[ssp++] = local10247.name; + intStack[isp++] = world.players; + } + continue; + } + if (opcode == Cs2Opcodes.setWorldHost) { + isp--; + int1 = intStack[isp]; + if (client.gameState == 10 && LoginManager.anInt4937 == 0 && LoginManager.step == 0 && CreateManager.step == 0) { + intStack[isp++] = WorldList.hopWorld(int1) ? 1 : 0; + continue; + } + intStack[isp++] = 0; + continue; + } + if (opcode == Cs2Opcodes.setLastWorld) { + isp--; + Preferences.lastWorldId = intStack[isp]; + Preferences.write(GameShell.signLink); + continue; + } + if (opcode == Cs2Opcodes.getLastWorld) { + intStack[isp++] = Preferences.lastWorldId; + continue; + } + if (opcode == 6506) { + isp--; + int1 = intStack[isp]; + @Pc(10440) World local10440 = getWorld(int1); + if (local10440 == null) { + intStack[isp++] = -1; + stringStack[ssp++] = EMPTY_STRING; + intStack[isp++] = 0; + stringStack[ssp++] = EMPTY_STRING; + intStack[isp++] = 0; + } else { + intStack[isp++] = local10440.flags; + stringStack[ssp++] = local10440.activity; + @Pc(10458) WorldInfo local10458 = local10440.getWorldInfo(); + intStack[isp++] = local10458.flag; + stringStack[ssp++] = local10458.name; + intStack[isp++] = local10440.players; + } + continue; + } + if (opcode == Cs2Opcodes.sortWorldList) { + isp -= 4; + int2 = intStack[isp + 2]; + int1 = intStack[isp]; + local7566 = intStack[isp + 3] == 1; + local1552 = intStack[isp + 1] == 1; + WorldList.sortWorldList(int2, local1552, int1, local7566); + continue; + } + } else if (opcode < 6700) { + if (opcode == 6600) { + isp--; + Preferences.aBoolean63 = intStack[isp] == 1; + Preferences.write(GameShell.signLink); + continue; + } + if (opcode == 6601) { + intStack[isp++] = Preferences.aBoolean63 ? 1 : 0; + continue; + } + } + } + } else if (opcode == Cs2Opcodes.getStructParam) { + isp -= 2; + int1 = intStack[isp]; + int3 = intStack[isp + 1]; + local5294 = ParamTypeList.get(int3); + if (local5294.isString()) { + stringStack[ssp++] = StructTypeList.get(int1).getParam(local5294.defaultString, int3); + } else { + intStack[isp++] = StructTypeList.get(int1).getParam(int3, local5294.defaultInt); + } + continue; + } + } else if (opcode == Cs2Opcodes.getLocParam) { + isp -= 2; + int3 = intStack[isp + 1]; + int1 = intStack[isp]; + local5294 = ParamTypeList.get(int3); + if (local5294.isString()) { + stringStack[ssp++] = LocTypeList.get(int1).getParam(local5294.defaultString, int3); + } else { + intStack[isp++] = LocTypeList.get(int1).getParam(local5294.defaultInt, int3); + } + continue; + } + } else { + if (opcode == Cs2Opcodes.concatInt) { + ssp--; + string = stringStack[ssp]; + isp--; + int3 = intStack[isp]; + stringStack[ssp++] = JagString.concatenate(new JagString[]{string, JagString.parseInt(int3)}); + continue; + } + if (opcode == Cs2Opcodes.concatString) { + ssp -= 2; + str1 = stringStack[ssp + 1]; + string = stringStack[ssp]; + stringStack[ssp++] = JagString.concatenate(new JagString[]{string, str1}); + continue; + } + if (opcode == Cs2Opcodes.concatSignedInt) { + ssp--; + string = stringStack[ssp]; + isp--; + int3 = intStack[isp]; + stringStack[ssp++] = JagString.concatenate(new JagString[]{string, JagString.parseIntTrue(int3)}); + continue; + } + if (opcode == Cs2Opcodes.toLowerStr) { + ssp--; + string = stringStack[ssp]; + stringStack[ssp++] = string.toLowerCase(); + continue; + } + if (opcode == Cs2Opcodes.timeToStr) { + isp--; + int1 = intStack[isp]; + @Pc(11770) long local11770 = (long) int1 * 86400000L + 1014768000000L; + aCalendar2.setTime(new Date(local11770)); + local652 = aCalendar2.get(Calendar.DATE); + c = aCalendar2.get(Calendar.MONTH); + local1087 = aCalendar2.get(Calendar.YEAR); + stringStack[ssp++] = JagString.concatenate(new JagString[]{JagString.parseInt(local652), aClass100_767, DateUtil.aClass100Array40[c], aClass100_767, JagString.parseInt(local1087)}); + continue; + } + if (opcode == Cs2Opcodes.strForGender) { + ssp -= 2; + str1 = stringStack[ssp + 1]; + string = stringStack[ssp]; + if (PlayerList.self.appearance != null && PlayerList.self.appearance.gender) { + stringStack[ssp++] = str1; + continue; + } + stringStack[ssp++] = string; + continue; + } + if (opcode == Cs2Opcodes.parseInt) { + isp--; + int1 = intStack[isp]; + stringStack[ssp++] = JagString.parseInt(int1); + continue; + } + if (opcode == Cs2Opcodes.compare) { + ssp -= 2; + intStack[isp++] = stringStack[ssp].compare(stringStack[ssp + 1]); + continue; + } + if (opcode == Cs2Opcodes.getLineCount) { + ssp--; + string = stringStack[ssp]; + isp -= 2; + int2 = intStack[isp + 1]; + int3 = intStack[isp]; + intStack[isp++] = FontMetricsList.get(int2).getParagraphLineCount(string, int3); + continue; + } + if (opcode == Cs2Opcodes.getMaxLineWidth) { + isp -= 2; + ssp--; + string = stringStack[ssp]; + int2 = intStack[isp + 1]; + int3 = intStack[isp]; + intStack[isp++] = FontMetricsList.get(int2).getMaxLineWidth(string, int3); + continue; + } + if (opcode == Cs2Opcodes.chooseString) { + ssp -= 2; + string = stringStack[ssp]; + str1 = stringStack[ssp + 1]; + isp--; + if (intStack[isp] == 1) { + stringStack[ssp++] = string; + } else { + stringStack[ssp++] = str1; + } + continue; + } + if (opcode == Cs2Opcodes.escape) { + ssp--; + string = stringStack[ssp]; + stringStack[ssp++] = Font.escape(string); + continue; + } + if (opcode == Cs2Opcodes.concatChar) { + ssp--; + string = stringStack[ssp]; + isp--; + int3 = intStack[isp]; + if (int3 == -1) { + throw new RuntimeException("null char"); + } + stringStack[ssp++] = string.concatChar(int3); + continue; + } + if (opcode == Cs2Opcodes.isValidChar) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = CharUtils.isValidChar(int1) ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.isAlphaNumeric) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = CharUtils.isLetterOrDigit(int1) ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.isLetter) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = CharUtils.isLetter(int1) ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.isDigit) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = CharUtils.isDigit(int1) ? 1 : 0; + continue; + } + if (opcode == Cs2Opcodes.length) { + ssp--; + string = stringStack[ssp]; + if (string == null) { + intStack[isp++] = 0; + } else { + intStack[isp++] = string.length(); + } + continue; + } + if (opcode == Cs2Opcodes.substr) { + isp -= 2; + ssp--; + string = stringStack[ssp]; + int3 = intStack[isp]; + int2 = intStack[isp + 1]; + stringStack[ssp++] = string.substring(int2, int3); + continue; + } + if (opcode == Cs2Opcodes.removeTags) { + ssp--; + string = stringStack[ssp]; + str1 = JagString.allocate(string.length()); + @Pc(12220) boolean local12220 = false; + for (local652 = 0; local652 < string.length(); local652++) { + c = string.charAt(local652); + if (c == 60) { + local12220 = true; + } else if (c == 62) { + local12220 = false; + } else if (!local12220) { + str1.append(c); + } + } + str1.method3156(); + stringStack[ssp++] = str1; + continue; + } + if (opcode == Cs2Opcodes.indexOfChar) { + isp -= 2; + ssp--; + string = stringStack[ssp]; + int3 = intStack[isp]; + int2 = intStack[isp + 1]; + intStack[isp++] = string.indexOf(int3, int2); + continue; + } + if (opcode == Cs2Opcodes.indexOfStr) { + ssp -= 2; + string = stringStack[ssp]; + str1 = stringStack[ssp + 1]; + isp--; + int2 = intStack[isp]; + intStack[isp++] = string.indexOf(str1, int2); + continue; + } + if (opcode == Cs2Opcodes.toLower) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = CharUtils.toLowerCase(int1); + continue; + } + if (opcode == Cs2Opcodes.toUpper) { + isp--; + int1 = intStack[isp]; + intStack[isp++] = CharUtils.toUpperCase(int1); + continue; + } + if (opcode == Cs2Opcodes.formatNumber) { + isp--; + local12388 = intStack[isp] != 0; + isp--; + int3 = intStack[isp]; + stringStack[ssp++] = StringUtils.formatNumber(client.language, local12388, 0, int3); + continue; + } + } + } + } else { + if (opcode < 2000) { + component = local1020 ? staticActiveComponent1 : staticActiveComponent2; + } else { + isp--; + component = InterfaceList.getComponent(intStack[isp]); + opcode -= 1000; + } + if (opcode == Cs2Opcodes.setPosition) { + isp -= 4; + component.baseX = intStack[isp]; + component.baseY = intStack[isp + 1]; + int2 = intStack[isp + 3]; + if (int2 < 0) { + int2 = 0; + } else if (int2 > 5) { + int2 = 5; + } + int3 = intStack[isp + 2]; + if (int3 < 0) { + int3 = 0; + } else if (int3 > 5) { + int3 = 5; + } + component.xMode = (byte) int2; + component.yMode = (byte) int3; + InterfaceList.redraw(component); + InterfaceList.update(component); + if (component.createdComponentId == -1) { + DelayedStateChange.method4675(component.id); + } + continue; + } + if (opcode == Cs2Opcodes.setSize) { + isp -= 4; + component.baseWidth = intStack[isp]; + component.baseHeight = intStack[isp + 1]; + component.anInt451 = 0; + component.anInt526 = 0; + int3 = intStack[isp + 2]; + int2 = intStack[isp + 3]; + if (int2 < 0) { + int2 = 0; + } else if (int2 > 4) { + int2 = 4; + } + component.dynamicHeightValue = (byte) int2; + if (int3 < 0) { + int3 = 0; + } else if (int3 > 4) { + int3 = 4; + } + component.dynamicWidthValue = (byte) int3; + InterfaceList.redraw(component); + InterfaceList.update(component); + if (component.type == 0) { + InterfaceList.method531(component, false); + } + continue; + } + if (opcode == Cs2Opcodes.setHidden) { + isp--; + local1552 = intStack[isp] == 1; + if (local1552 != component.hidden) { + component.hidden = local1552; + InterfaceList.redraw(component); + } + if (component.createdComponentId == -1) { + DelayedStateChange.method1906(component.id); + } + continue; + } + if (opcode == Cs2Opcodes.setAspect) { + isp -= 2; + component.aspectWidth = intStack[isp]; + component.aspectHeight = intStack[isp + 1]; + InterfaceList.redraw(component); + InterfaceList.update(component); + if (component.type == 0) { + InterfaceList.method531(component, false); + } + continue; + } + if (opcode == Cs2Opcodes.setNoClickThrough) { + isp--; + component.noClickThrough = intStack[isp] == 1; + continue; + } + } + } + } + throw new IllegalStateException(); + } + } catch (@Pc(14378) Exception ex) { + if (script.name == null) { + if (client.modeWhere != 0) { + Chat.add(EMPTY_STRING, 0, CS_ERROR); + } + TracingException.report("CS2 - scr:" + script.key + " op:" + op, ex); + } else { + @Pc(14385) JagString str = JagString.allocate(30); + str.method3113(aClass100_928).method3113(script.name); + for (cycles = fp - 1; cycles >= 0; cycles--) { + str.method3113(aClass100_253).method3113(callStack[cycles].script.name); + } + if (op == 40) { + cycles = intOperands[pc]; + str.method3113(aClass100_802).method3113(JagString.parseInt(cycles)); + } + if (client.modeWhere != 0) { + Chat.add(EMPTY_STRING, 0, JagString.concatenate(new JagString[]{aClass100_780, script.name})); + } + TracingException.report("CS2 - scr:" + script.key + " op:" + op + new String(str.method3148()), ex); + } + } + } + + @OriginalMember(owner = "client!gi", name = "a", descriptor = "(ILclient!jl;)V") + public static void run(@OriginalArg(1) HookRequest request) { + run(200000, request); + } + +} diff --git a/client/src/main/java/rt4/SecondaryHashTable.java b/client/src/main/java/rt4/SecondaryHashTable.java new file mode 100644 index 0000000..924eb85 --- /dev/null +++ b/client/src/main/java/rt4/SecondaryHashTable.java @@ -0,0 +1,23 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!rm") +public final class SecondaryHashTable { + + @OriginalMember(owner = "client!rm", name = "e", descriptor = "[Lclient!rg;") + private final SecondaryNode[] buckets; + + @OriginalMember(owner = "client!rm", name = "", descriptor = "(I)V") + public SecondaryHashTable(@OriginalArg(0) int arg0) { + this.buckets = new SecondaryNode[arg0]; + for (@Pc(7) int local7 = 0; local7 < arg0; local7++) { + @Pc(23) SecondaryNode local23 = this.buckets[local7] = new SecondaryNode(); + local23.secondaryPrev = local23; + local23.secondaryNext = local23; + } + } +} diff --git a/client/src/main/java/rt4/SecondaryLinkedList.java b/client/src/main/java/rt4/SecondaryLinkedList.java new file mode 100644 index 0000000..108102d --- /dev/null +++ b/client/src/main/java/rt4/SecondaryLinkedList.java @@ -0,0 +1,102 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ce") +public final class SecondaryLinkedList { + + @OriginalMember(owner = "client!ce", name = "n", descriptor = "Lclient!rg;") + private SecondaryNode cursor; + + @OriginalMember(owner = "client!ce", name = "l", descriptor = "Lclient!rg;") + private final SecondaryNode sentinel = new SecondaryNode(); + + @OriginalMember(owner = "client!ce", name = "", descriptor = "()V") + public SecondaryLinkedList() { + this.sentinel.secondaryNext = this.sentinel; + this.sentinel.secondaryPrev = this.sentinel; + } + + @OriginalMember(owner = "client!gk", name = "a", descriptor = "(Lclient!rg;Lclient!rg;B)V") + public static void insertAfter(@OriginalArg(0) SecondaryNode arg0, @OriginalArg(1) SecondaryNode arg1) { + if (arg1.secondaryPrev != null) { + arg1.unlinkSecondary(); + } + arg1.secondaryPrev = arg0; + arg1.secondaryNext = arg0.secondaryNext; + arg1.secondaryPrev.secondaryNext = arg1; + arg1.secondaryNext.secondaryPrev = arg1; + } + + @OriginalMember(owner = "client!ce", name = "a", descriptor = "(I)I") + public final int size() { + @Pc(3) int local3 = 0; + @Pc(7) SecondaryNode local7 = this.sentinel.secondaryNext; + while (local7 != this.sentinel) { + local7 = local7.secondaryNext; + local3++; + } + return local3; + } + + @OriginalMember(owner = "client!ce", name = "b", descriptor = "(B)Lclient!rg;") + public final SecondaryNode head() { + @Pc(3) SecondaryNode local3 = this.sentinel.secondaryNext; + if (this.sentinel == local3) { + this.cursor = null; + return null; + } else { + this.cursor = local3.secondaryNext; + return local3; + } + } + + @OriginalMember(owner = "client!ce", name = "b", descriptor = "(I)Lclient!rg;") + public final SecondaryNode removeHead() { + @Pc(7) SecondaryNode local7 = this.sentinel.secondaryNext; + if (local7 == this.sentinel) { + return null; + } else { + local7.unlinkSecondary(); + return local7; + } + } + + @OriginalMember(owner = "client!ce", name = "c", descriptor = "(I)Lclient!rg;") + public final SecondaryNode next() { + @Pc(2) SecondaryNode local2 = this.cursor; + if (local2 == this.sentinel) { + this.cursor = null; + return null; + } else { + this.cursor = local2.secondaryNext; + return local2; + } + } + + @OriginalMember(owner = "client!ce", name = "a", descriptor = "(Lclient!rg;B)V") + public final void addTail(@OriginalArg(0) SecondaryNode arg0) { + if (arg0.secondaryPrev != null) { + arg0.unlinkSecondary(); + } + arg0.secondaryPrev = this.sentinel.secondaryPrev; + arg0.secondaryNext = this.sentinel; + arg0.secondaryPrev.secondaryNext = arg0; + arg0.secondaryNext.secondaryPrev = arg0; + } + + @OriginalMember(owner = "client!ce", name = "d", descriptor = "(I)V") + public final void clear() { + while (true) { + @Pc(15) SecondaryNode local15 = this.sentinel.secondaryNext; + if (this.sentinel == local15) { + this.cursor = null; + return; + } + local15.unlinkSecondary(); + } + } +} diff --git a/client/src/main/java/rt4/SecondaryNode.java b/client/src/main/java/rt4/SecondaryNode.java new file mode 100644 index 0000000..5b17943 --- /dev/null +++ b/client/src/main/java/rt4/SecondaryNode.java @@ -0,0 +1,27 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!rg") +public class SecondaryNode extends Node { + + @OriginalMember(owner = "client!rg", name = "v", descriptor = "J") + public long secondaryKey; + + @OriginalMember(owner = "client!rg", name = "w", descriptor = "Lclient!rg;") + public SecondaryNode secondaryPrev; + + @OriginalMember(owner = "client!rg", name = "G", descriptor = "Lclient!rg;") + public SecondaryNode secondaryNext; + + @OriginalMember(owner = "client!rg", name = "e", descriptor = "(B)V") + public final void unlinkSecondary() { + if (this.secondaryPrev != null) { + this.secondaryPrev.secondaryNext = this.secondaryNext; + this.secondaryNext.secondaryPrev = this.secondaryPrev; + this.secondaryNext = null; + this.secondaryPrev = null; + } + } +} diff --git a/client/src/main/java/rt4/SeqType.java b/client/src/main/java/rt4/SeqType.java new file mode 100644 index 0000000..4fbd2d7 --- /dev/null +++ b/client/src/main/java/rt4/SeqType.java @@ -0,0 +1,364 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!tk") +public final class SeqType { + + @OriginalMember(owner = "client!qi", name = "v", descriptor = "Z") + public static boolean applyTweening = GlobalConfig.USE_TWEENING; + + @OriginalMember(owner = "client!tk", name = "g", descriptor = "[I") + public int[] frames; + + @OriginalMember(owner = "client!tk", name = "n", descriptor = "[Z") + public boolean[] framegroup; + + @OriginalMember(owner = "client!tk", name = "y", descriptor = "I") + public int id; + + @OriginalMember(owner = "client!tk", name = "C", descriptor = "[[I") + public int[][] soundeffect; + + @OriginalMember(owner = "client!tk", name = "G", descriptor = "[I") + public int[] frameDelay; + + @OriginalMember(owner = "client!tk", name = "I", descriptor = "[I") + private int[] frameset; + + @OriginalMember(owner = "client!tk", name = "a", descriptor = "I") + public int exactmove = 2; + + @OriginalMember(owner = "client!tk", name = "b", descriptor = "Z") + public boolean tween = false; + + @OriginalMember(owner = "client!tk", name = "f", descriptor = "I") + public int movetype = -1; + + @OriginalMember(owner = "client!tk", name = "e", descriptor = "I") + public int offhand = -1; + + @OriginalMember(owner = "client!tk", name = "d", descriptor = "Z") + public boolean aBoolean278 = false; + + @OriginalMember(owner = "client!tk", name = "t", descriptor = "I") + public int replaycount = 99; + + @OriginalMember(owner = "client!tk", name = "z", descriptor = "I") + public int replayoff = -1; + + @OriginalMember(owner = "client!tk", name = "B", descriptor = "I") + public int looptype = -1; + + @OriginalMember(owner = "client!tk", name = "p", descriptor = "I") + public int priority = 5; + + @OriginalMember(owner = "client!tk", name = "r", descriptor = "Z") + public boolean stretches = false; + + @OriginalMember(owner = "client!tk", name = "l", descriptor = "I") + public int mainhand = -1; + + @OriginalMember(owner = "client!tk", name = "L", descriptor = "Z") + public boolean aBoolean280 = false; + + @OriginalMember(owner = "client!tk", name = "a", descriptor = "(Lclient!wa;B)V") + public void decode(@OriginalArg(0) Buffer buffer) { + while (true) { + @Pc(19) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(opcode, buffer); + } + } + + @OriginalMember(owner = "client!tk", name = "a", descriptor = "(IIILclient!ak;II)Lclient!ak;") + public Model method4214(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) Model arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + @Pc(10) int local10 = this.frameDelay[arg0]; + @Pc(15) int local15 = this.frames[arg0]; + @Pc(23) AnimFrameset local23 = SeqTypeList.getAnimFrameset(local15 >> 16); + @Pc(27) int local27 = local15 & 0xFFFF; + if (local23 == null) { + return arg2.method4568(true, true, true); + } + @Pc(39) int local39 = arg3 & 0x3; + @Pc(41) AnimFrameset local41 = null; + if ((this.tween || applyTweening) && arg1 != -1 && this.frames.length > arg1) { + @Pc(69) int local69 = this.frames[arg1]; + local41 = SeqTypeList.getAnimFrameset(local69 >> 16); + arg1 = local69 & 0xFFFF; + } + @Pc(124) Model local124; + if (local41 == null) { + local124 = arg2.method4568(!local23.isAlphaTransformed(local27), !local23.isColorTransformed(local27), !this.aBoolean278); + } else { + local124 = arg2.method4568(!local23.isAlphaTransformed(local27) & !local41.isAlphaTransformed(arg1), !local23.isColorTransformed(local27) & !local41.isColorTransformed(arg1), !this.aBoolean278); + } + if (GlRenderer.enabled && this.aBoolean278) { + if (local39 == 1) { + ((GlModel) local124).method4093(); + } else if (local39 == 2) { + ((GlModel) local124).method4102(); + } else if (local39 == 3) { + ((GlModel) local124).method4116(); + } + } else if (local39 == 1) { + local124.method4578(); + } else if (local39 == 2) { + local124.method4552(); + } else if (local39 == 3) { + local124.rotateCounterClockwise(); + } + local124.method4558(local23, local27, local41, arg1, arg4 - 1, local10, this.aBoolean278); + if (GlRenderer.enabled && this.aBoolean278) { + if (local39 == 1) { + ((GlModel) local124).method4116(); + } else if (local39 == 2) { + ((GlModel) local124).method4102(); + } else if (local39 == 3) { + ((GlModel) local124).method4093(); + } + } else if (local39 == 1) { + local124.rotateCounterClockwise(); + } else if (local39 == 2) { + local124.method4552(); + } else if (local39 == 3) { + local124.method4578(); + } + return local124; + } + + @OriginalMember(owner = "client!tk", name = "a", descriptor = "(Lclient!ak;BIII)Lclient!ak;") + public Model method4215(@OriginalArg(0) Model arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + @Pc(8) int local8 = this.frames[arg3]; + @Pc(13) int local13 = this.frameDelay[arg3]; + @Pc(19) AnimFrameset local19 = SeqTypeList.getAnimFrameset(local8 >> 16); + @Pc(23) int local23 = local8 & 0xFFFF; + if (local19 == null) { + return arg0.method4572(true, true, true); + } + @Pc(34) AnimFrameset local34 = null; + if ((this.tween || applyTweening) && arg1 != -1 && arg1 < this.frames.length) { + @Pc(59) int local59 = this.frames[arg1]; + local34 = SeqTypeList.getAnimFrameset(local59 >> 16); + arg1 = local59 & 0xFFFF; + } + @Pc(71) AnimFrameset local71 = null; + @Pc(81) AnimFrameset local81 = null; + @Pc(83) int local83 = 0; + @Pc(85) int local85 = 0; + if (this.frameset != null) { + if (this.frameset.length > arg3) { + local83 = this.frameset[arg3]; + if (local83 != 65535) { + local71 = SeqTypeList.getAnimFrameset(local83 >> 16); + local83 &= 0xFFFF; + } + } + if ((this.tween || applyTweening) && arg1 != -1 && this.frameset.length > arg1) { + local85 = this.frameset[arg1]; + if (local85 != 65535) { + local81 = SeqTypeList.getAnimFrameset(local85 >> 16); + local85 &= 0xFFFF; + } + } + } + @Pc(163) boolean local163 = !local19.isAlphaTransformed(local23); + @Pc(172) boolean local172 = !local19.isColorTransformed(local23); + if (local71 != null) { + local163 &= !local71.isAlphaTransformed(local83); + local172 &= !local71.isColorTransformed(local83); + } + if (local34 != null) { + local163 &= !local34.isAlphaTransformed(arg1); + local172 &= !local34.isColorTransformed(arg1); + } + if (local81 != null) { + local163 &= !local81.isAlphaTransformed(local85); + local172 &= !local81.isColorTransformed(local85); + } + @Pc(258) Model local258 = arg0.method4572(local163, local172, !this.aBoolean278); + local258.method4558(local19, local23, local34, arg1, arg2 - 1, local13, this.aBoolean278); + if (local71 != null) { + local258.method4558(local71, local83, local81, local85, arg2 - 1, local13, this.aBoolean278); + } + return local258; + } + + @OriginalMember(owner = "client!tk", name = "a", descriptor = "(IIIILclient!ak;I)Lclient!ak;") + public Model method4216(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) Model arg4) { + @Pc(6) int local6 = this.frameDelay[arg1]; + @Pc(11) int local11 = this.frames[arg1]; + @Pc(19) AnimFrameset local19 = SeqTypeList.getAnimFrameset(local11 >> 16); + @Pc(27) int local27 = local11 & 0xFFFF; + if (local19 == null) { + return arg4.method4572(true, true, true); + } + @Pc(40) int local40 = arg3 & 0x3; + @Pc(42) AnimFrameset local42 = null; + if ((this.tween || applyTweening) && arg0 != -1 && arg0 < this.frames.length) { + @Pc(66) int local66 = this.frames[arg0]; + local42 = SeqTypeList.getAnimFrameset(local66 >> 16); + arg0 = local66 & 0xFFFF; + } + @Pc(106) Model local106; + if (local42 == null) { + local106 = arg4.method4572(!local19.isAlphaTransformed(local27), !local19.isColorTransformed(local27), !this.aBoolean278); + } else { + local106 = arg4.method4572(!local19.isAlphaTransformed(local27) & !local42.isAlphaTransformed(arg0), !local19.isColorTransformed(local27) & !local42.isColorTransformed(arg0), !this.aBoolean278); + } + if (this.aBoolean278 && GlRenderer.enabled) { + if (local40 == 1) { + ((GlModel) local106).method4093(); + } else if (local40 == 2) { + ((GlModel) local106).method4102(); + } else if (local40 == 3) { + ((GlModel) local106).method4116(); + } + } else if (local40 == 1) { + local106.method4578(); + } else if (local40 == 2) { + local106.method4552(); + } else if (local40 == 3) { + local106.rotateCounterClockwise(); + } + local106.method4558(local19, local27, local42, arg0, arg2 - 1, local6, this.aBoolean278); + if (this.aBoolean278 && GlRenderer.enabled) { + if (local40 == 1) { + ((GlModel) local106).method4116(); + } else if (local40 == 2) { + ((GlModel) local106).method4102(); + } else if (local40 == 3) { + ((GlModel) local106).method4093(); + } + } else if (local40 == 1) { + local106.rotateCounterClockwise(); + } else if (local40 == 2) { + local106.method4552(); + } else if (local40 == 3) { + local106.method4578(); + } + return local106; + } + + @OriginalMember(owner = "client!tk", name = "b", descriptor = "(B)V") + public void postDecode() { + if (this.looptype == -1) { + if (this.framegroup == null) { + this.looptype = 0; + } else { + this.looptype = 2; + } + } + + if (this.movetype == -1) { + if (this.framegroup == null) { + this.movetype = 0; + } else { + this.movetype = 2; + } + } + } + + @OriginalMember(owner = "client!tk", name = "a", descriptor = "(IIIBLclient!ak;)Lclient!ak;") + public Model method4219(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) Model arg3) { + @Pc(16) int local16 = this.frameDelay[arg2]; + @Pc(21) int local21 = this.frames[arg2]; + @Pc(27) AnimFrameset local27 = SeqTypeList.getAnimFrameset(local21 >> 16); + @Pc(31) int local31 = local21 & 0xFFFF; + if (local27 == null) { + return arg3.method4560(true, true, true); + } + @Pc(42) AnimFrameset local42 = null; + if ((this.tween || applyTweening) && arg0 != -1 && this.frames.length > arg0) { + @Pc(65) int local65 = this.frames[arg0]; + local42 = SeqTypeList.getAnimFrameset(local65 >> 16); + arg0 = local65 & 0xFFFF; + } + @Pc(103) Model local103; + if (local42 == null) { + local103 = arg3.method4560(!local27.isAlphaTransformed(local31), !local27.isColorTransformed(local31), !this.aBoolean278); + } else { + local103 = arg3.method4560(!local27.isAlphaTransformed(local31) & !local42.isAlphaTransformed(arg0), !local27.isColorTransformed(local31) & !local42.isColorTransformed(arg0), !this.aBoolean278); + } + local103.method4558(local27, local31, local42, arg0, arg1 - 1, local16, this.aBoolean278); + return local103; + } + + @OriginalMember(owner = "client!tk", name = "a", descriptor = "(IBLclient!wa;)V") + private void decode(@OriginalArg(0) int opcode, @OriginalArg(2) Buffer buffer) { + @Pc(8) int count; + @Pc(14) int i; + + if (opcode == 1) { + count = buffer.g2(); + this.frameDelay = new int[count]; + for (i = 0; i < count; i++) { + this.frameDelay[i] = buffer.g2(); + } + this.frames = new int[count]; + for (i = 0; i < count; i++) { + this.frames[i] = buffer.g2(); + } + for (i = 0; i < count; i++) { + this.frames[i] += buffer.g2() << 16; + } + } else if (opcode == 2) { + this.replayoff = buffer.g2(); + } else if (opcode == 3) { + this.framegroup = new boolean[256]; + count = buffer.g1(); + for (i = 0; i < count; i++) { + this.framegroup[buffer.g1()] = true; + } + } else if (opcode == 4) { + this.stretches = true; + } else if (opcode == 5) { + this.priority = buffer.g1(); + } else if (opcode == 6) { + this.mainhand = buffer.g2(); + } else if (opcode == 7) { + this.offhand = buffer.g2(); + } else if (opcode == 8) { + this.replaycount = buffer.g1(); + } else if (opcode == 9) { // TODO: confirm + this.looptype = buffer.g1(); + } else if (opcode == 10) { // TODO: confirm + this.movetype = buffer.g1(); + } else if (opcode == 11) { // TODO: confirm + this.exactmove = buffer.g1(); + } else if (opcode == 12) { // TODO: confirm + count = buffer.g1(); + this.frameset = new int[count]; + for (i = 0; i < count; i++) { + this.frameset[i] = buffer.g2(); + } + for (i = 0; i < count; i++) { + this.frameset[i] += buffer.g2() << 16; + } + } else if (opcode == 13) { + count = buffer.g2(); + this.soundeffect = new int[count][]; + for (i = 0; i < count; i++) { + @Pc(163) int count2 = buffer.g1(); + if (count2 > 0) { + this.soundeffect[i] = new int[count2]; + this.soundeffect[i][0] = buffer.g3(); + for (@Pc(182) int j = 1; j < count2; j++) { + this.soundeffect[i][j] = buffer.g2(); + } + } + } + } else if (opcode == 14) { + this.aBoolean278 = true; + } else if (opcode == 15) { // TODO: (probably) not an authentic name + this.tween = true; + } else if (opcode == 16) { + this.aBoolean280 = true; + } + } +} diff --git a/client/src/main/java/rt4/SeqTypeList.java b/client/src/main/java/rt4/SeqTypeList.java new file mode 100644 index 0000000..1fee131 --- /dev/null +++ b/client/src/main/java/rt4/SeqTypeList.java @@ -0,0 +1,88 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class SeqTypeList { + + @OriginalMember(owner = "client!lc", name = "e", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + + @OriginalMember(owner = "client!vl", name = "a", descriptor = "Lclient!n;") + public static final SoftLruHashTable animFramesets = new SoftLruHashTable(100); + + @OriginalMember(owner = "client!tk", name = "s", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!af", name = "a", descriptor = "Lclient!ve;") + public static Js5 basesArchive; + + @OriginalMember(owner = "client!se", name = "l", descriptor = "Lclient!ve;") + public static Js5 animsArchive; + + @OriginalMember(owner = "client!client", name = "a", descriptor = "(IB)Lclient!tk;") + public static SeqType get(@OriginalArg(0) int id) { + @Pc(17) SeqType sequence = (SeqType) types.get(id); + if (sequence != null) { + return sequence; + } + @Pc(32) byte[] data = archive.fetchFile(getGroupId(id), getFileId(id)); + sequence = new SeqType(); + sequence.id = id; + if (data != null) { + sequence.decode(new Buffer(data)); + } + sequence.postDecode(); + types.put(sequence, id); + return sequence; + } + + @OriginalMember(owner = "client!s", name = "a", descriptor = "(II)I") + public static int getGroupId(@OriginalArg(0) int arg0) { + return arg0 >>> 7; + } + + @OriginalMember(owner = "client!jd", name = "a", descriptor = "(II)I") + public static int getFileId(@OriginalArg(1) int arg0) { + return arg0 & 0x7F; + } + + @OriginalMember(owner = "client!lb", name = "a", descriptor = "(Lclient!ve;Lclient!ve;ILclient!ve;)V") + public static void init(@OriginalArg(0) Js5 arg0, @OriginalArg(1) Js5 arg1, @OriginalArg(3) Js5 arg2) { + archive = arg1; + basesArchive = arg0; + animsArchive = arg2; + } + + @OriginalMember(owner = "client!an", name = "a", descriptor = "(Z)V") + public static void clear() { + types.clear(); + animFramesets.clear(); + } + + @OriginalMember(owner = "client!sg", name = "a", descriptor = "(B)V") + public static void removeSoft() { + types.removeSoft(); + animFramesets.removeSoft(); + } + + @OriginalMember(owner = "client!fl", name = "a", descriptor = "(IB)V") + public static void clean() { + types.clean(5); + animFramesets.clean(5); + } + + @OriginalMember(owner = "client!fl", name = "b", descriptor = "(II)Lclient!cl;") + public static AnimFrameset getAnimFrameset(@OriginalArg(0) int id) { + @Pc(19) AnimFrameset frameset = (AnimFrameset) animFramesets.get(id); + if (frameset != null) { + return frameset; + } + frameset = AnimFrameset.create(animsArchive, basesArchive, id); + if (frameset != null) { + animFramesets.put(frameset, id); + } + return frameset; + } +} diff --git a/client/src/main/java/rt4/ServerActiveProperties.java b/client/src/main/java/rt4/ServerActiveProperties.java new file mode 100644 index 0000000..0fc0a80 --- /dev/null +++ b/client/src/main/java/rt4/ServerActiveProperties.java @@ -0,0 +1,76 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!bf") +public final class ServerActiveProperties extends Node { + + @OriginalMember(owner = "client!bf", name = "q", descriptor = "I") + public final int targetParam; + + @OriginalMember(owner = "client!bf", name = "x", descriptor = "I") + public final int events; + + @OriginalMember(owner = "client!bf", name = "", descriptor = "(II)V") + public ServerActiveProperties(@OriginalArg(0) int events, @OriginalArg(1) int targetParam) { + this.targetParam = targetParam; + this.events = events; + } + + @OriginalMember(owner = "client!qc", name = "a", descriptor = "(BI)I") + public static int getTargetMask(@OriginalArg(1) int events) { + return events >> 11 & 0x7F; + } + + @OriginalMember(owner = "client!bf", name = "a", descriptor = "(IB)Z") + public final boolean isButtonEnabled(@OriginalArg(0) int button) { + return (this.events >> button + 1 & 0x1) != 0; + } + + @OriginalMember(owner = "client!bf", name = "d", descriptor = "(I)Z") + public final boolean isObjReplaceEnabled() { + return (this.events >> 29 & 0x1) != 0; + } + + @OriginalMember(owner = "client!bf", name = "e", descriptor = "(B)I") + public final int getDragDepth() { + return this.events >> 18 & 0x7; + } + + @OriginalMember(owner = "client!bf", name = "e", descriptor = "(I)Z") + public final boolean isResumePauseButtonEnabled() { + return (this.events & 0x1) != 0; + } + + @OriginalMember(owner = "client!bf", name = "f", descriptor = "(I)Z") + public final boolean isObjUseEnabled() { + return (this.events >> 31 & 0x1) != 0; + } + + @OriginalMember(owner = "client!bf", name = "g", descriptor = "(I)Z") + public final boolean isUseTarget() { + return (this.events >> 22 & 0x1) != 0; + } + + @OriginalMember(owner = "client!bf", name = "a", descriptor = "(Z)Z") + public final boolean isDragTarget() { + return (this.events >> 21 & 0x1) != 0; + } + + @OriginalMember(owner = "client!bf", name = "h", descriptor = "(I)Z") + public final boolean isObjOpsEnabled() { + return (this.events >> 30 & 0x1) != 0; + } + + @OriginalMember(owner = "client!bf", name = "f", descriptor = "(B)Z") + public final boolean isObjSwapEnabled() { + return (this.events >> 28 & 0x1) != 0; + } + + @OriginalMember(owner = "client!bf", name = "i", descriptor = "(I)I") + public final int getTargetMask() { + return getTargetMask(this.events); + } +} diff --git a/client/src/main/java/rt4/ServerProt.java b/client/src/main/java/rt4/ServerProt.java new file mode 100644 index 0000000..ff472bb --- /dev/null +++ b/client/src/main/java/rt4/ServerProt.java @@ -0,0 +1,126 @@ +package rt4; + +public class ServerProt { + /// map + public static final int REBUILD_NORMAL = 162; + public static final int REBUILD_REGION = 214; // Dynamic regions + + // zone updates + public static final int UPDATE_ZONE_FULL_FOLLOWS = 112; // NXT naming + public static final int UPDATE_ZONE_PARTIAL_FOLLOWS = 26; // NXT naming + public static final int UPDATE_ZONE_PARTIAL_ENCLOSED = 230; // NXT naming + public static final int OBJ_COUNT = 14; // NXT naming + public static final int MAP_PROJANIM_2 = 16; + public static final int SPOTANIM_SPECIFIC = 17; // NXT naming + public static final int LOC_ANIM = 20; // NXT naming + public static final int OBJ_REVEAL = 33; // NXT naming + public static final int SOUND_AREA = 97; // NXT naming + public static final int MAP_PROJANIM = 104; // NXT naming + public static final int MAP_PROJANIM_3 = 121; + public static final int OBJ_ADD = 135; // NXT naming + public static final int LOC_ADD = 179; // NXT naming + public static final int LOC_DEL = 195; // NXT naming + public static final int LOC_ADD_CHANGE = 202; // NXT naming + public static final int OBJ_DEL = 240; // NXT naming + + /// updates + public static final int NPC_INFO = 32; // NXT naming + public static final int PLAYER_INFO = 225; // NXT naming + + /// var{p,c,bit} + public static final int VARBIT_SMALL = 37; // NXT naming + public static final int VARBIT_LARGE = 84; // NXT naming + public static final int VARP_SMALL = 60; // NXT naming + public static final int VARP_LARGE = 226; // NXT naming + public static final int CLIENT_SETVARC_SMALL = 65; // NXT naming + public static final int CLIENT_SETVARC_LARGE = 69; // NXT naming + public static final int RESET_CLIENT_VARCACHE = 89; // NXT naming (?) + public static final int FORCE_VARP_REFRESH = 128; + + /// chat + public static final int MESSAGE_GAME = 70; // NXT naming + public static final int IF_SETCOLOUR = 2; // NXT naming + public static final int CHAT_FILTER_SETTINGS = 232; // NXT naming + + public static final int MESSAGE_PRIVATE = 0; // NXT naming + public static final int MESSAGE_QUICKCHAT_PRIVATE = 247; // NXT naming + + public static final int MESSAGE_PRIVATE_ECHO = 71; // NXT naming + public static final int MESSAGE_QUICKCHAT_PRIVATE_ECHO = 141; // NXT naming + + public static final int MESSAGE_CLANCHANNEL = 54; // NXT naming + public static final int CLAN_QUICK_CHAT = 81; + + /// {friends,ignore,clan} packets + public static final int JOIN_CLAN_CHAT = 55; + public static final int FRIENDLIST_LOADED = 197; // NXT naming (?) + + public static final int UPDATE_FRIENDLIST = 62; // NXT naming (?) + public static final int UPDATE_IGNORELIST = 126; // NXT naming + + /// interfaces + public static final int IF_SETHIDE = 21; // NXT naming (?) + public static final int IF_SETANIM = 36; // NXT naming (?) + public static final int IF_SETOBJECT = 50; // NXT naming + public static final int IF_SETPLAYERHEAD = 66; // NXT naming (?) - double check if this is correct or if it's IF_SETPLAYERMODEL_SELF etc + public static final int IF_SETNPCHEAD = 73; // NXT naming + public static final int IF_SETMODEL = 130; // NXT naming + public static final int IF_SETPOSITION = 119; // NXT naming + public static final int IF_SETANGLE = 132; // NXT naming + public static final int IF_OPENSUB = 145; // NXT naming (?) + public static final int IF_CLOSESUB = 149; // NXT naming (?) + public static final int IF_OPENTOP = 155; // NXT naming (?) + public static final int SET_INTERFACE_SETTINGS = 165; + public static final int IF_SETSCROLLPOS = 220; // NXT naming + // none of these are exactly NXT naming, need to identify differences and when one would be used over the other + public static final int IF_SETTEXT1 = 171; + public static final int IF_SETTEXT2 = 48; + public static final int IF_SETTEXT3 = 123; + // no clue on original names... yet + public static final int WIDGETSTRUCT_SETTING = 9; + public static final int INTERFACE_ANIMATE_ROTATE = 207; + public static final int GAME_FRAME_UNK = 209; + public static final int DELETE_INVENTORY = 191; + public static final int SWITCH_WIDGET = 176; + public static final int GENERATE_CHAT_HEAD_FROM_BODY = 111; + + /// inventory + public static final int UPDATE_INV_CLEAR = 144; + public static final int UPDATE_INV_PARTIAL = 22; // NXT naming + public static final int UPDATE_INV_FULL = 105; // NXT naming + + /// misc + public static final int LOGOUT = 86; // NXT naming + public static final int UPDATE_RUNENERGY = 234; // NXT naming + public static final int UPDATE_RUNWEIGHT = 159; // NXT naming (?) + public static final int UPDATE_REBOOT_TIMER = 85; // NXT naming + public static final int UPDATE_STAT = 38; // NXT naming + public static final int MIDI_SONG = 4; // NXT naming + public static final int MIDI_JINGLE = 208; // NXT naming + public static final int SYNTH_SOUND = 172; // NXT naming + public static final int HINT_ARROW = 217; // NXT naming (?) + public static final int UPDATE_UID192 = 169; // NXT naming (?) + public static final int URL_OPEN = 42; // NXT naming + public static final int CAM_RESET = 24; // NXT naming + public static final int CAM_SHAKE = 27; // NXT naming + public static final int SPOTANIM_ENTITY = 56; + public static final int NPC_ANIM_SPECIFIC = 102; // NXT naming + public static final int CAM_LOOKAT = 125; // NXT naming + public static final int RESET_ANIMS = 131; // NXT naming + public static final int LAST_LOGIN_INFO = 164; // NXT naming (?) + public static final int CAM_FORCEANGLE = 187; // NXT naming + public static final int LOC_ANIM_SPECIFIC = 235; // NXT naming + + // TODO: + public static final int RUN_CS2 = 115; + public static final int SET_INTERACTION = 44; + public static final int GRAND_EXCHANGE_OFFERS = 116; + public static final int CLEAR_MINIMAP_FLAG = 153; + public static final int SET_MINIMAP_STATE = 192; + public static final int REFLECTION_CHEAT_CHECK = 114; + public static final int TELEPORT_LOCAL_PLAYER = 13; + public static final int SET_SETTINGS_STRING = 142; + public static final int SET_WALK_TEXT = 160; + public static final int CAMERA_DETACH = 154; + public static final int UPDATE_CLAN = 196; +} \ No newline at end of file diff --git a/client/src/main/java/rt4/Shadow.java b/client/src/main/java/rt4/Shadow.java new file mode 100644 index 0000000..f492ae3 --- /dev/null +++ b/client/src/main/java/rt4/Shadow.java @@ -0,0 +1,193 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +@OriginalClass("client!wm") +public final class Shadow { + + @OriginalMember(owner = "client!wm", name = "g", descriptor = "[B") + public static final byte[] pixels = new byte[16384]; + @OriginalMember(owner = "client!wm", name = "a", descriptor = "Lclient!vi;") + private GlVertexBufferObject aClass155_6; + + @OriginalMember(owner = "client!wm", name = "c", descriptor = "Ljava/nio/ByteBuffer;") + private ByteBuffer aByteBuffer11; + + @OriginalMember(owner = "client!wm", name = "e", descriptor = "Ljava/nio/ByteBuffer;") + private ByteBuffer aByteBuffer12; + + @OriginalMember(owner = "client!wm", name = "f", descriptor = "Lclient!vi;") + private GlVertexBufferObject aClass155_7; + + @OriginalMember(owner = "client!wm", name = "b", descriptor = "Z") + public boolean outputToSprite = true; + + @OriginalMember(owner = "client!wm", name = "h", descriptor = "I") + private int anInt5902 = -1; + + @OriginalMember(owner = "client!wm", name = "d", descriptor = "I") + private final int anInt5901; + + @OriginalMember(owner = "client!wm", name = "", descriptor = "()V") + public Shadow() { + @Pc(9) GL2 gl = GlRenderer.gl; + @Pc(12) int[] local12 = new int[1]; + gl.glGenTextures(1, local12, 0); + this.anInt5901 = local12[0]; + GlCleaner.onCardTexture += 16384; + GlRenderer.setTextureId(this.anInt5901); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_CLAMP_TO_EDGE); + gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_T, GL2.GL_CLAMP_TO_EDGE); + } + + @OriginalMember(owner = "client!wm", name = "a", descriptor = "([[III)V") + public final void method4676(@OriginalArg(0) int[][] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(4) Buffer local4 = new Buffer(1620); + @Pc(11) int local11; + for (@Pc(6) int local6 = 0; local6 <= 8; local6++) { + for (local11 = 0; local11 <= 8; local11++) { + if (GlRenderer.bigEndian) { + local4.pFloat((float) local11 / 8.0F); + local4.pFloat((float) local6 / 8.0F); + local4.pFloat((float) (local11 * 128)); + local4.pFloat((float) arg0[local11 + arg1][local6 + arg2]); + local4.pFloat((float) (local6 * 128)); + } else { + local4.gFloat((float) local11 / 8.0F); + local4.gFloat((float) local6 / 8.0F); + local4.gFloat((float) (local11 * 128)); + local4.gFloat((float) arg0[local11 + arg1][local6 + arg2]); + local4.gFloat((float) (local6 * 128)); + } + } + } + if (GlRenderer.arbVboSupported) { + @Pc(112) ByteBuffer local112 = ByteBuffer.wrap(local4.data, 0, local4.offset); + this.aClass155_7 = new GlVertexBufferObject(); + this.aClass155_7.setArrayBuffer(local112); + } else { + this.aByteBuffer12 = ByteBuffer.allocateDirect(local4.offset).order(ByteOrder.nativeOrder()); + this.aByteBuffer12.put(local4.data, 0, local4.offset); + this.aByteBuffer12.flip(); + } + @Pc(147) Buffer local147 = new Buffer(1536); + for (local11 = 0; local11 < 8; local11++) { + for (@Pc(154) int local154 = 0; local154 < 8; local154++) { + if (GlRenderer.bigEndian) { + local147.p4(local154 + (local11 + 1) * 9); + local147.p4(local154 + local11 * 9); + local147.p4(local154 + local11 * 9 + 1); + local147.p4(local154 + (local11 + 1) * 9); + local147.p4(local154 + local11 * 9 + 1); + local147.p4(local154 + (local11 + 1) * 9 + 1); + } else { + local147.ip4(local154 + (local11 + 1) * 9); + local147.ip4(local154 + local11 * 9); + local147.ip4(local154 + local11 * 9 + 1); + local147.ip4(local154 + (local11 + 1) * 9); + local147.ip4(local154 + local11 * 9 + 1); + local147.ip4(local154 + (local11 + 1) * 9 + 1); + } + } + } + if (GlRenderer.arbVboSupported) { + @Pc(293) ByteBuffer local293 = ByteBuffer.wrap(local147.data, 0, local147.offset); + this.aClass155_6 = new GlVertexBufferObject(); + this.aClass155_6.setElementArrayBuffer(local293); + } else { + this.aByteBuffer11 = ByteBuffer.allocateDirect(local147.offset).order(ByteOrder.nativeOrder()); + this.aByteBuffer11.put(local147.data, 0, local147.offset); + this.aByteBuffer11.flip(); + } + } + + @OriginalMember(owner = "client!wm", name = "a", descriptor = "(Lclient!ek;II)Z") + public final boolean method4677(@OriginalArg(0) SoftwareIndexedSprite arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(2) byte[] local2 = arg0.pixels; + @Pc(5) int local5 = arg0.width; + @Pc(19) int local19 = arg1 * 128 + (arg2 * 128 + 1) * local5 + 1; + @Pc(21) int local21 = 0; + @Pc(23) int local23; + @Pc(33) int local33; + for (local23 = -128; local23 < 0; local23++) { + local21 = (local21 << 8) - local21; + for (local33 = -128; local33 < 0; local33++) { + if (local2[local19++] != 0) { + local21++; + } + } + local19 += local5 - 128; + } + if (local21 == this.anInt5902) { + return false; + } + this.anInt5902 = local21; + local19 = arg1 * 128 + (arg2 * 128 + 1) * local5 + 1; + local23 = 0; + for (local33 = -128; local33 < 0; local33++) { + for (@Pc(82) int local82 = -128; local82 < 0; local82++) { + if (local2[local19] == 0) { + @Pc(96) int local96 = 0; + if (local2[local19 - 1] != 0) { + local96++; + } + if (local2[local19 + 1] != 0) { + local96++; + } + if (local2[local19 - local5] != 0) { + local96++; + } + if (local2[local19 + local5] != 0) { + local96++; + } + pixels[local23++] = (byte) (local96 * 17); + } else { + pixels[local23++] = 68; + } + local19++; + } + local19 += local5 - 128; + } + @Pc(145) GL2 gl = GlRenderer.gl; + @Pc(148) ByteBuffer local148 = ByteBuffer.wrap(pixels); + local148.limit(16384); + GlRenderer.setTextureId(this.anInt5901); + gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_ALPHA, 128, 128, 0, GL2.GL_ALPHA, GL2.GL_UNSIGNED_BYTE, local148); + return true; + } + + @OriginalMember(owner = "client!wm", name = "b", descriptor = "()V") + public final void method4679() { + @Pc(1) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureId(this.anInt5901); + if (this.aClass155_7 == null) { + if (GlRenderer.arbVboSupported) { + gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, 0); + } + gl.glInterleavedArrays(GL2.GL_T2F_V3F, 20, this.aByteBuffer12); + GlRenderer.normalArrayEnabled = false; + } else { + this.aClass155_7.bindArray(); + gl.glInterleavedArrays(GL2.GL_T2F_V3F, 20, 0L); + GlRenderer.normalArrayEnabled = false; + } + if (this.aClass155_6 == null) { + if (GlRenderer.arbVboSupported) { + gl.glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, 0); + } + gl.glDrawElements(GL2.GL_TRIANGLES, 384, GL2.GL_UNSIGNED_INT, this.aByteBuffer11); + } else { + this.aClass155_6.bindElementArray(); + gl.glDrawElements(GL2.GL_TRIANGLES, 384, GL2.GL_UNSIGNED_INT, 0L); + } + } +} diff --git a/client/src/main/java/rt4/ShadowManager.java b/client/src/main/java/rt4/ShadowManager.java new file mode 100644 index 0000000..141bdaf --- /dev/null +++ b/client/src/main/java/rt4/ShadowManager.java @@ -0,0 +1,421 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public final class ShadowManager { + + @OriginalMember(owner = "client!tj", name = "a", descriptor = "Lclient!ek;") + public static SoftwareIndexedSprite shadowMapImage; + + @OriginalMember(owner = "client!tj", name = "b", descriptor = "[[Lclient!wm;") + public static Shadow[][] shadows; + + @OriginalMember(owner = "client!tj", name = "c", descriptor = "I") + private static int anInt5345; + + @OriginalMember(owner = "client!tj", name = "e", descriptor = "I") + private static int anInt5346; + + @OriginalMember(owner = "client!tj", name = "a", descriptor = "(Lclient!ek;Lclient!ek;II)V") + private static void method4194(@OriginalArg(0) SoftwareIndexedSprite arg0, @OriginalArg(1) SoftwareIndexedSprite arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + arg2 += arg0.xOffset; + arg3 += arg0.yOffset; + @Pc(16) int local16 = arg2 + arg3 * arg1.width; + @Pc(18) int local18 = 0; + @Pc(21) int local21 = arg0.height; + @Pc(24) int local24 = arg0.width; + @Pc(29) int local29 = arg1.width - local24; + @Pc(31) int local31 = 0; + @Pc(37) int local37; + if (arg3 <= 0) { + local37 = 1 - arg3; + local21 -= local37; + local18 = local37 * local24; + local16 += local37 * arg1.width; + arg3 = 1; + } + if (arg3 + local21 >= arg1.height) { + local37 = arg3 + local21 + 1 - arg1.height; + local21 -= local37; + } + if (arg2 <= 0) { + local37 = 1 - arg2; + local24 -= local37; + local18 += local37; + local16 += local37; + local31 = local37; + local29 += local37; + arg2 = 1; + } + if (arg2 + local24 >= arg1.width) { + local37 = arg2 + local24 + 1 - arg1.width; + local24 -= local37; + local31 += local37; + local29 += local37; + } + if (local24 > 0 && local21 > 0) { + method4204(arg1.pixels, arg0.pixels, local18, local16, local24, local21, local29, local31); + method4196(arg2, arg3, local24, local21); + } + } + + @OriginalMember(owner = "client!tj", name = "a", descriptor = "([B[BIIIIII)V") + private static void method4195(@OriginalArg(0) byte[] arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7) { + @Pc(4) int local4 = -(arg4 >> 2); + @Pc(9) int local9 = -(arg4 & 0x3); + for (@Pc(12) int local12 = -arg5; local12 < 0; local12++) { + @Pc(16) int local16; + @Pc(20) int local20; + for (local16 = local4; local16 < 0; local16++) { + local20 = arg3++; + arg0[local20] -= arg1[arg2++]; + @Pc(32) int local32 = arg3++; + arg0[local32] -= arg1[arg2++]; + @Pc(44) int local44 = arg3++; + arg0[local44] -= arg1[arg2++]; + @Pc(56) int local56 = arg3++; + arg0[local56] -= arg1[arg2++]; + } + for (local16 = local9; local16 < 0; local16++) { + local20 = arg3++; + arg0[local20] -= arg1[arg2++]; + } + arg3 += arg6; + arg2 += arg7; + } + } + + @OriginalMember(owner = "client!tj", name = "a", descriptor = "(IIII)V") + private static void method4196(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(5) int local5 = arg0 - 1 >> 7; + @Pc(15) int local15 = arg0 + arg2 - 1 - 1 >> 7; + @Pc(21) int local21 = arg1 - 1 >> 7; + @Pc(31) int local31 = arg1 + arg3 - 1 - 1 >> 7; + for (@Pc(33) int local33 = local5; local33 <= local15; local33++) { + for (@Pc(38) int local38 = local21; local38 <= local31; local38++) { + shadows[local33][local38].outputToSprite = true; + } + } + } + + @OriginalMember(owner = "client!tj", name = "a", descriptor = "(IIZZIIIIII)V") + public static void method4197(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) boolean arg2, @OriginalArg(3) boolean arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9) { + if (arg2 && arg3 || (arg2 && arg0 == 1 || arg3 && arg0 == 0)) { + return; + } + @Pc(19) int local19 = arg4 << 7; + @Pc(29) int local29 = arg6 + arg7 + arg8 + arg9 >> 2; + @Pc(33) int local33 = arg5 << 7; + @Pc(43) int local43 = local19 - (local29 * FogManager.lightX >> 8) >> 3; + @Pc(53) int local53 = local33 - (local29 * FogManager.lightZ >> 8) >> 3; + if (arg0 != 0 && arg0 != 1 && (arg2 || arg3)) { + method4210(Sprites.floorShadows[arg0], shadowMapImage, local43 + 1, local53 + 1, arg1, arg2); + } else { + method4194(Sprites.floorShadows[1], shadowMapImage, local43 + 1, local53 + 1); + } + } + + @OriginalMember(owner = "client!tj", name = "a", descriptor = "(IIII[[Z[[I)V") + public static void method4198(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) boolean[][] arg4, @OriginalArg(5) int[][] arg5) { + @Pc(1) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureCombineRgbMode(1); + GlRenderer.setTextureCombineAlphaMode(1); + GlRenderer.resetTextureMatrix(); + GlRenderer.setLightingEnabled(false); + MaterialManager.setMaterial(0, 0); + gl.glDepthMask(false); + for (@Pc(17) int local17 = 0; local17 < anInt5346; local17++) { + label52: + for (@Pc(22) int local22 = 0; local22 < anInt5345; local22++) { + for (@Pc(29) int local29 = local17 * 8; local29 < local17 * 8 + 8; local29++) { + if (local29 - arg0 >= -arg2 && local29 - arg0 <= arg2) { + for (@Pc(51) int local51 = local22 * 8; local51 < local22 * 8 + 8; local51++) { + if (local51 - arg1 >= -arg2 && local51 - arg1 <= arg2 && arg4[local29 + arg2 - arg0][local51 + arg2 - arg1]) { + @Pc(89) Shadow local89 = shadows[local17][local22]; + if (local89.outputToSprite) { + local89.method4677(shadowMapImage, local17, local22); + local89.outputToSprite = false; + } + gl.glPushMatrix(); + gl.glTranslatef((float) (local17 * 1024), 0.0F, (float) (local22 * 1024)); + local89.method4679(); + gl.glPopMatrix(); + continue label52; + } + } + } + } + } + } + gl.glEnableClientState(GL2.GL_COLOR_ARRAY); + gl.glDepthMask(true); + GlRenderer.restoreLighting(); + } + + @OriginalMember(owner = "client!tj", name = "a", descriptor = "([BIIIII)Z") + private static boolean method4199(@OriginalArg(0) byte[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + @Pc(3) int local3 = arg2 % 8; + @Pc(9) int local9; + if (local3 == 0) { + local9 = 0; + } else { + local9 = 8 - local3; + } + @Pc(21) int local21 = -((arg3 + 8 - 1) / 8); + @Pc(30) int local30 = -((arg2 + 8 - 1) / 8); + for (@Pc(32) int local32 = local21; local32 < 0; local32++) { + for (@Pc(36) int local36 = local30; local36 < 0; local36++) { + if (arg0[arg1] == 0) { + return true; + } + arg1 += 8; + } + arg1 -= local9; + if (arg0[arg1 - 1] == 0) { + return true; + } + arg1 += arg4; + } + return false; + } + + @OriginalMember(owner = "client!tj", name = "b", descriptor = "(Lclient!ek;Lclient!ek;II)Z") + private static boolean method4200(@OriginalArg(0) SoftwareIndexedSprite arg0, @OriginalArg(1) SoftwareIndexedSprite arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + arg2 += arg0.xOffset; + arg3 += arg0.yOffset; + @Pc(16) int local16 = arg2 + arg3 * arg1.width; + @Pc(19) int local19 = arg0.height; + @Pc(22) int local22 = arg0.width; + @Pc(27) int local27 = arg1.width - local22; + @Pc(33) int local33; + if (arg3 <= 0) { + local33 = 1 - arg3; + local19 -= local33; + local16 += local33 * arg1.width; + arg3 = 1; + } + if (arg3 + local19 >= arg1.height) { + local33 = arg3 + local19 + 1 - arg1.height; + local19 -= local33; + } + if (arg2 <= 0) { + local33 = 1 - arg2; + local22 -= local33; + local16 += local33; + local27 += local33; + arg2 = 1; + } + if (arg2 + local22 >= arg1.width) { + local33 = arg2 + local22 + 1 - arg1.width; + local22 -= local33; + local27 += local33; + } + if (local22 > 0 && local19 > 0) { + local27 += arg1.width * 7; + method4196(arg2, arg3, local22, local19); + return method4199(arg1.pixels, local16, local22, local19, local27); + } else { + return false; + } + } + + @OriginalMember(owner = "client!tj", name = "a", descriptor = "(II)V") + public static void method4201() { + anInt5346 = 13; + anInt5345 = 13; + shadowMapImage = new SoftwareIndexedSprite(anInt5346 * 128 + 2, anInt5345 * 128 + 2, 0); + shadows = new Shadow[anInt5346][anInt5345]; + for (@Pc(32) int local32 = 0; local32 < anInt5346; local32++) { + for (@Pc(37) int local37 = 0; local37 < anInt5345; local37++) { + shadows[local32][local37] = new Shadow(); + } + } + } + + @OriginalMember(owner = "client!tj", name = "c", descriptor = "(Lclient!ek;Lclient!ek;II)V") + private static void method4202(@OriginalArg(0) SoftwareIndexedSprite arg0, @OriginalArg(1) SoftwareIndexedSprite arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + arg2 += arg0.xOffset; + arg3 += arg0.yOffset; + @Pc(16) int local16 = arg2 + arg3 * arg1.width; + @Pc(18) int local18 = 0; + @Pc(21) int local21 = arg0.height; + @Pc(24) int local24 = arg0.width; + @Pc(29) int local29 = arg1.width - local24; + @Pc(31) int local31 = 0; + @Pc(37) int local37; + if (arg3 <= 0) { + local37 = 1 - arg3; + local21 -= local37; + local18 = local37 * local24; + local16 += local37 * arg1.width; + arg3 = 1; + } + if (arg3 + local21 >= arg1.height) { + local37 = arg3 + local21 + 1 - arg1.height; + local21 -= local37; + } + if (arg2 <= 0) { + local37 = 1 - arg2; + local24 -= local37; + local18 += local37; + local16 += local37; + local31 = local37; + local29 += local37; + arg2 = 1; + } + if (arg2 + local24 >= arg1.width) { + local37 = arg2 + local24 + 1 - arg1.width; + local24 -= local37; + local31 += local37; + local29 += local37; + } + if (local24 > 0 && local21 > 0) { + method4195(arg1.pixels, arg0.pixels, local18, local16, local24, local21, local29, local31); + method4196(arg2, arg3, local24, local21); + } + } + + @OriginalMember(owner = "client!tj", name = "a", descriptor = "()V") + public static void method4203() { + shadowMapImage = null; + Sprites.floorShadows = null; + shadows = null; + } + + @OriginalMember(owner = "client!tj", name = "b", descriptor = "([B[BIIIIII)V") + private static void method4204(@OriginalArg(0) byte[] arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7) { + @Pc(4) int local4 = -(arg4 >> 2); + @Pc(9) int local9 = -(arg4 & 0x3); + for (@Pc(12) int local12 = -arg5; local12 < 0; local12++) { + @Pc(16) int local16; + @Pc(20) int local20; + for (local16 = local4; local16 < 0; local16++) { + local20 = arg3++; + arg0[local20] += arg1[arg2++]; + @Pc(32) int local32 = arg3++; + arg0[local32] += arg1[arg2++]; + @Pc(44) int local44 = arg3++; + arg0[local44] += arg1[arg2++]; + @Pc(56) int local56 = arg3++; + arg0[local56] += arg1[arg2++]; + } + for (local16 = local9; local16 < 0; local16++) { + local20 = arg3++; + arg0[local20] += arg1[arg2++]; + } + arg3 += arg6; + arg2 += arg7; + } + } + + @OriginalMember(owner = "client!tj", name = "a", descriptor = "([B[BIIIII)V") + private static void method4206(@OriginalArg(0) byte[] arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6) { + for (@Pc(1) int local1 = -16; local1 < 0; local1++) { + for (@Pc(5) int local5 = -4; local5 < 0; local5++) { + @Pc(9) int local9 = arg3++; + arg0[local9] = (byte) (arg0[local9] + 1 - arg1[arg2]); + arg2 += arg5; + @Pc(26) int local26 = arg3++; + arg0[local26] = (byte) (arg0[local26] + 1 - arg1[arg2]); + arg2 += arg5; + @Pc(43) int local43 = arg3++; + arg0[local43] = (byte) (arg0[local43] + 1 - arg1[arg2]); + arg2 += arg5; + @Pc(60) int local60 = arg3++; + arg0[local60] = (byte) (arg0[local60] + 1 - arg1[arg2]); + arg2 += arg5; + } + arg3 += arg4; + arg2 += arg6; + } + } + + @OriginalMember(owner = "client!tj", name = "a", descriptor = "(Lclient!ek;III)V") + public static void method4207(@OriginalArg(0) SoftwareIndexedSprite arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (arg0 != null) { + @Pc(12) int local12 = arg1 - (arg2 * FogManager.lightX >> 8) >> 3; + @Pc(22) int local22 = arg3 - (arg2 * FogManager.lightZ >> 8) >> 3; + method4202(arg0, shadowMapImage, local12 + 1, local22 + 1); + } + } + + @OriginalMember(owner = "client!tj", name = "b", descriptor = "([B[BIIIII)V") + private static void method4208(@OriginalArg(0) byte[] arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6) { + for (@Pc(1) int local1 = -16; local1 < 0; local1++) { + for (@Pc(5) int local5 = -4; local5 < 0; local5++) { + @Pc(9) int local9 = arg3++; + arg0[local9] += arg1[arg2]; + arg2 += arg5; + @Pc(24) int local24 = arg3++; + arg0[local24] += arg1[arg2]; + arg2 += arg5; + @Pc(39) int local39 = arg3++; + arg0[local39] += arg1[arg2]; + arg2 += arg5; + @Pc(54) int local54 = arg3++; + arg0[local54] += arg1[arg2]; + arg2 += arg5; + } + arg3 += arg4; + arg2 += arg6; + } + } + + @OriginalMember(owner = "client!tj", name = "b", descriptor = "(Lclient!ek;III)Z") + public static boolean method4209(@OriginalArg(0) SoftwareIndexedSprite arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (arg0 == null) { + return false; + } else { + @Pc(13) int local13 = arg1 - (arg2 * FogManager.lightX >> 8) >> 3; + @Pc(23) int local23 = arg3 - (arg2 * FogManager.lightZ >> 8) >> 3; + return method4200(arg0, shadowMapImage, local13 + 1, local23 + 1); + } + } + + @OriginalMember(owner = "client!tj", name = "a", descriptor = "(Lclient!ek;Lclient!ek;IIIZ)V") + private static void method4210(@OriginalArg(0) SoftwareIndexedSprite arg0, @OriginalArg(1) SoftwareIndexedSprite arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) boolean arg5) { + if (arg2 <= 0 || arg3 <= 0 || arg2 + 16 >= arg1.width || arg3 + 16 >= arg1.height) { + return; + } + @Pc(23) int local23 = arg2 + arg3 * arg1.width; + @Pc(28) int local28 = arg1.width - 16; + @Pc(32) short local32; + @Pc(34) byte local34; + @Pc(41) short local41; + if (arg4 == 0) { + local32 = 240; + local34 = 1; + local41 = -32; + } else if (arg4 == 1) { + local32 = 255; + local34 = -16; + local41 = 255; + } else if (arg4 == 2) { + local32 = 15; + local34 = -1; + local41 = 32; + } else { + local32 = 0; + local34 = 16; + local41 = -255; + } + if (arg5) { + method4206(arg1.pixels, arg0.pixels, local32, local23, local28, local34, local41); + } else { + method4208(arg1.pixels, arg0.pixels, local32, local23, local28, local34, local41); + } + method4196(arg2, arg3, 16, 16); + } + + @OriginalMember(owner = "client!tj", name = "c", descriptor = "(Lclient!ek;III)V") + public static void method4211(@OriginalArg(0) SoftwareIndexedSprite arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (arg0 != null) { + @Pc(12) int local12 = arg1 - (arg2 * FogManager.lightX >> 8) >> 3; + @Pc(22) int local22 = arg3 - (arg2 * FogManager.lightZ >> 8) >> 3; + method4194(arg0, shadowMapImage, local12 + 1, local22 + 1); + } + } +} diff --git a/client/src/main/java/rt4/ShadowModelList.java b/client/src/main/java/rt4/ShadowModelList.java new file mode 100644 index 0000000..ac4f5ab --- /dev/null +++ b/client/src/main/java/rt4/ShadowModelList.java @@ -0,0 +1,153 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class ShadowModelList { + @OriginalMember(owner = "client!di", name = "I", descriptor = "Lclient!n;") + public static final SoftLruHashTable SHADOWS = new SoftLruHashTable(32); + + @OriginalMember(owner = "client!kh", name = "a", descriptor = "(II)V") + public static void clean() { + SHADOWS.clean(5); + } + + @OriginalMember(owner = "client!ug", name = "b", descriptor = "(B)V") + public static void removeSoft() { + SHADOWS.removeSoft(); + } + + @OriginalMember(owner = "client!dc", name = "a", descriptor = "(IZLclient!tk;IIIIILclient!ak;IIIIB)Lclient!ak;") + public static Model method1043(@OriginalArg(0) int arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) SeqType arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) Model arg8, @OriginalArg(9) int arg9, @OriginalArg(10) int arg10, @OriginalArg(11) int arg11, @OriginalArg(12) int arg12) { + @Pc(23) long local23 = ((long) arg4 << 48) + (long) (arg7 + (arg0 << 16) + (arg12 << 24)) + ((long) arg6 << 32); + @Pc(33) Model local33 = (Model) SHADOWS.get(local23); + @Pc(109) int local109; + @Pc(115) int local115; + @Pc(126) int local126; + @Pc(130) int local130; + @Pc(162) int local162; + if (local33 == null) { + @Pc(41) byte local41; + if (arg7 == 1) { + local41 = 9; + } else if (arg7 == 2) { + local41 = 12; + } else if (arg7 == 3) { + local41 = 15; + } else if (arg7 == 4) { + local41 = 18; + } else { + local41 = 21; + } + @Pc(83) int[] local83 = new int[]{64, 96, 128}; + @Pc(103) RawModel local103 = new RawModel(local41 * 3 + 1, -local41 + local41 * 3 * 2, 0); + local109 = local103.method1685(0, 0); + @Pc(113) int[][] local113 = new int[3][local41]; + for (local115 = 0; local115 < 3; local115++) { + local126 = local83[local115]; + local130 = local83[local115]; + for (@Pc(132) int local132 = 0; local132 < local41; local132++) { + @Pc(141) int local141 = (local132 << 11) / local41; + @Pc(152) int local152 = arg5 + MathUtils.cos[local141] * local130 >> 16; + local162 = arg3 + MathUtils.sin[local141] * local126 >> 16; + local113[local115][local132] = local103.method1685(local162, local152); + } + } + for (local115 = 0; local115 < 3; local115++) { + local126 = (local115 * 256 + 128) / 3; + local130 = 256 - local126; + @Pc(207) byte local207 = (byte) (arg12 * local126 + arg0 * local130 >> 8); + @Pc(252) short local252 = (short) (((arg6 & 0x7F) * local130 + (arg4 & 0x7F) * local126 & 0x7F00) + (local130 * (arg6 & 0x380) + local126 * (arg4 & 0x380) & 0x38000) + (local126 * (arg4 & 0xFC00) + (arg6 & 0xFC00) * local130 & 0xFC0000) >> 8); + for (local162 = 0; local162 < local41; local162++) { + if (local115 == 0) { + local103.addTriangle(local109, local113[0][(local162 + 1) % local41], local113[0][local162], local252, local207); + } else { + local103.addTriangle(local113[local115 - 1][local162], local113[local115 - 1][(local162 + 1) % local41], local113[local115][(local162 + 1) % local41], local252, local207); + local103.addTriangle(local113[local115 - 1][local162], local113[local115][(local162 + 1) % local41], local113[local115][local162], local252, local207); + } + } + } + local33 = local103.createModel(64, 768, -50, -10, -50); + SHADOWS.put(local33, local23); + } + @Pc(367) int local367 = arg7 * 64 - 1; + @Pc(376) int local376 = -local367; + @Pc(379) int local379 = -local367; + @Pc(381) int local381 = local367; + @Pc(384) int local384 = arg8.getMinX(); + @Pc(386) AnimFrameset local386 = null; + local115 = arg8.getMaxX(); + local126 = arg8.getMinZ(); + local130 = arg8.getMaxZ(); + if (arg2 != null) { + @Pc(403) int local403 = arg2.frames[arg10]; + local386 = SeqTypeList.getAnimFrameset(local403 >> 16); + arg10 = local403 & 0xFFFF; + } + local109 = local367; + if (arg1) { + if (arg9 > 1664 || arg9 < 384) { + local379 -= 128; + } + if (arg9 > 1152 && arg9 < 1920) { + local381 = local367 + 128; + } + if (arg9 > 640 && arg9 < 1408) { + local109 = local367 + 128; + } + if (arg9 > 128 && arg9 < 896) { + local376 -= 128; + } + } + if (local109 < local130) { + local130 = local109; + } + if (local376 > local384) { + local384 = local376; + } + if (local126 < local379) { + local126 = local379; + } + if (local381 < local115) { + local115 = local381; + } + if (local386 == null) { + local33 = local33.method4560(true, true, true); + local33.resize((local115 - local384) / 2, 128, (local130 - local126) / 2); + local33.translate((local384 + local115) / 2, 0, (local126 + local130) / 2); + } else { + local33 = local33.method4560(!local386.isAlphaTransformed(arg10), !local386.isColorTransformed(arg10), true); + local33.resize((local115 - local384) / 2, 128, (local130 - local126) / 2); + local33.translate((local384 + local115) / 2, 0, (local126 + local130) / 2); + local33.method4555(local386, arg10); + } + if (arg9 != 0) { + local33.rotateY(arg9); + } + if (GlRenderer.enabled) { + @Pc(650) GlModel local650 = (GlModel) local33; + if (SceneGraph.getTileHeight(Player.plane, arg3 + local384, local126 + arg5) != arg11 || SceneGraph.getTileHeight(Player.plane, local115 + arg3, arg5 - -local130) != arg11) { + for (local162 = 0; local162 < local650.vertexCount; local162++) { + local650.vertexY[local162] += SceneGraph.getTileHeight(Player.plane, local650.vertexX[local162] + arg3, arg5 + local650.vertexZ[local162]) - arg11; + } + local650.bounds.valid = false; + local650.vertexBuffer.valid = false; + } + } else { + @Pc(574) SoftwareModel local574 = (SoftwareModel) local33; + if (SceneGraph.getTileHeight(Player.plane, arg3 + local384, arg5 - -local126) != arg11 || arg11 != SceneGraph.getTileHeight(Player.plane, arg3 + local115, arg5 - -local130)) { + for (local162 = 0; local162 < local574.vertexCount; local162++) { + local574.vertexY[local162] += SceneGraph.getTileHeight(Player.plane, arg3 + local574.vertexX[local162], arg5 + local574.vertexZ[local162]) - arg11; + } + local574.boundsValid = false; + } + } + return local33; + } + + @OriginalMember(owner = "client!hb", name = "a", descriptor = "(Z)V") + public static void clear() { + SHADOWS.clear(); + } +} diff --git a/client/src/main/java/rt4/ShapedTile.java b/client/src/main/java/rt4/ShapedTile.java new file mode 100644 index 0000000..98e5659 --- /dev/null +++ b/client/src/main/java/rt4/ShapedTile.java @@ -0,0 +1,267 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!fg") +public final class ShapedTile { + + @OriginalMember(owner = "client!fg", name = "i", descriptor = "[[I") + public static final int[][] anIntArrayArray12 = new int[][]{{1, 3, 5, 7}, {1, 3, 5, 7}, {1, 3, 5, 7}, {1, 3, 5, 7, 6}, {1, 3, 5, 7, 6}, {1, 3, 5, 7, 6}, {1, 3, 5, 7, 6}, {1, 3, 5, 7, 2, 6}, {1, 3, 5, 7, 2, 8}, {1, 3, 5, 7, 2, 8}, {1, 3, 5, 7, 11, 12}, {1, 3, 5, 7, 11, 12}, {1, 3, 5, 7, 13, 14}}; + @OriginalMember(owner = "client!fg", name = "j", descriptor = "[[I") + public static final int[][] anIntArrayArray13 = new int[][]{{0, 1, 2, 3, 0, 0, 1, 3}, {1, 1, 2, 3, 1, 0, 1, 3}, {0, 1, 2, 3, 1, 0, 1, 3}, {0, 0, 1, 2, 0, 0, 2, 4, 1, 0, 4, 3}, {0, 0, 1, 4, 0, 0, 4, 3, 1, 1, 2, 4}, {0, 0, 4, 3, 1, 0, 1, 2, 1, 0, 2, 4}, {0, 1, 2, 4, 1, 0, 1, 4, 1, 0, 4, 3}, {0, 4, 1, 2, 0, 4, 2, 5, 1, 0, 4, 5, 1, 0, 5, 3}, {0, 4, 1, 2, 0, 4, 2, 3, 0, 4, 3, 5, 1, 0, 4, 5}, {0, 0, 4, 5, 1, 4, 1, 2, 1, 4, 2, 3, 1, 4, 3, 5}, {0, 0, 1, 5, 0, 1, 4, 5, 0, 1, 2, 4, 1, 0, 5, 3, 1, 5, 4, 3, 1, 4, 2, 3}, {1, 0, 1, 5, 1, 1, 4, 5, 1, 1, 2, 4, 0, 0, 5, 3, 0, 5, 4, 3, 0, 4, 2, 3}, {1, 0, 5, 4, 1, 0, 1, 5, 0, 0, 4, 3, 0, 4, 5, 3, 0, 5, 2, 3, 0, 1, 2, 5}}; + @OriginalMember(owner = "client!fg", name = "s", descriptor = "Z") + public boolean aBoolean113 = true; + + @OriginalMember(owner = "client!fg", name = "a", descriptor = "I") + public final int anInt1966; + + @OriginalMember(owner = "client!fg", name = "b", descriptor = "I") + public final int anInt1967; + + @OriginalMember(owner = "client!fg", name = "p", descriptor = "I") + public final int anInt1969; + + @OriginalMember(owner = "client!fg", name = "k", descriptor = "I") + public final int anInt1968; + + @OriginalMember(owner = "client!fg", name = "q", descriptor = "[I") + public final int[] anIntArray168; + + @OriginalMember(owner = "client!fg", name = "e", descriptor = "[I") + public final int[] anIntArray160; + + @OriginalMember(owner = "client!fg", name = "h", descriptor = "[I") + public final int[] anIntArray163; + + @OriginalMember(owner = "client!fg", name = "n", descriptor = "[I") + public final int[] anIntArray166; + + @OriginalMember(owner = "client!fg", name = "g", descriptor = "[I") + public final int[] anIntArray162; + + @OriginalMember(owner = "client!fg", name = "c", descriptor = "[I") + public final int[] anIntArray158; + + @OriginalMember(owner = "client!fg", name = "o", descriptor = "[I") + public final int[] anIntArray167; + + @OriginalMember(owner = "client!fg", name = "v", descriptor = "[I") + public final int[] anIntArray172; + + @OriginalMember(owner = "client!fg", name = "u", descriptor = "[I") + public final int[] anIntArray171; + + @OriginalMember(owner = "client!fg", name = "f", descriptor = "[I") + public int[] anIntArray161; + + @OriginalMember(owner = "client!fg", name = "", descriptor = "(IIIIIIIIIIIIIIIIIII)V") + public ShapedTile(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9, @OriginalArg(10) int arg10, @OriginalArg(11) int arg11, @OriginalArg(12) int arg12, @OriginalArg(13) int arg13, @OriginalArg(14) int arg14, @OriginalArg(15) int arg15, @OriginalArg(16) int arg16, @OriginalArg(17) int arg17, @OriginalArg(18) int arg18) { + if (arg5 != arg6 || arg5 != arg7 || arg5 != arg8) { + this.aBoolean113 = false; + } + this.anInt1966 = arg0; + this.anInt1967 = arg1; + this.anInt1969 = arg17; + this.anInt1968 = arg18; + @Pc(30) short local30 = 128; + @Pc(34) int local34 = local30 / 2; + @Pc(38) int local38 = local30 / 4; + @Pc(44) int local44 = local30 * 3 / 4; + @Pc(48) int[] local48 = anIntArrayArray12[arg0]; + @Pc(51) int local51 = local48.length; + this.anIntArray168 = new int[local51]; + this.anIntArray160 = new int[local51]; + this.anIntArray163 = new int[local51]; + @Pc(66) int[] local66 = new int[local51]; + @Pc(69) int[] local69 = new int[local51]; + @Pc(73) int local73 = arg3 * local30; + @Pc(77) int local77 = arg4 * local30; + @Pc(86) int local86; + @Pc(142) int local142; + @Pc(144) int local144; + @Pc(146) int local146; + @Pc(148) int local148; + @Pc(150) int local150; + for (@Pc(79) int local79 = 0; local79 < local51; local79++) { + local86 = local48[local79]; + if ((local86 & 0x1) == 0 && local86 <= 8) { + local86 = (local86 - arg1 - arg1 - 1 & 0x7) + 1; + } + if (local86 > 8 && local86 <= 12) { + local86 = (local86 - arg1 - 9 & 0x3) + 9; + } + if (local86 > 12 && local86 <= 16) { + local86 = (local86 - arg1 - 13 & 0x3) + 13; + } + if (local86 == 1) { + local142 = local73; + local144 = local77; + local146 = arg5; + local148 = arg9; + local150 = arg13; + } else if (local86 == 2) { + local142 = local73 + local34; + local144 = local77; + local146 = arg5 + arg6 >> 1; + local148 = arg9 + arg10 >> 1; + local150 = arg13 + arg14 >> 1; + } else if (local86 == 3) { + local142 = local73 + local30; + local144 = local77; + local146 = arg6; + local148 = arg10; + local150 = arg14; + } else if (local86 == 4) { + local142 = local73 + local30; + local144 = local77 + local34; + local146 = arg6 + arg7 >> 1; + local148 = arg10 + arg11 >> 1; + local150 = arg14 + arg15 >> 1; + } else if (local86 == 5) { + local142 = local73 + local30; + local144 = local77 + local30; + local146 = arg7; + local148 = arg11; + local150 = arg15; + } else if (local86 == 6) { + local142 = local73 + local34; + local144 = local77 + local30; + local146 = arg7 + arg8 >> 1; + local148 = arg11 + arg12 >> 1; + local150 = arg15 + arg16 >> 1; + } else if (local86 == 7) { + local142 = local73; + local144 = local77 + local30; + local146 = arg8; + local148 = arg12; + local150 = arg16; + } else if (local86 == 8) { + local142 = local73; + local144 = local77 + local34; + local146 = arg8 + arg5 >> 1; + local148 = arg12 + arg9 >> 1; + local150 = arg16 + arg13 >> 1; + } else if (local86 == 9) { + local142 = local73 + local34; + local144 = local77 + local38; + local146 = arg5 + arg6 >> 1; + local148 = arg9 + arg10 >> 1; + local150 = arg13 + arg14 >> 1; + } else if (local86 == 10) { + local142 = local73 + local44; + local144 = local77 + local34; + local146 = arg6 + arg7 >> 1; + local148 = arg10 + arg11 >> 1; + local150 = arg14 + arg15 >> 1; + } else if (local86 == 11) { + local142 = local73 + local34; + local144 = local77 + local44; + local146 = arg7 + arg8 >> 1; + local148 = arg11 + arg12 >> 1; + local150 = arg15 + arg16 >> 1; + } else if (local86 == 12) { + local142 = local73 + local38; + local144 = local77 + local34; + local146 = arg8 + arg5 >> 1; + local148 = arg12 + arg9 >> 1; + local150 = arg16 + arg13 >> 1; + } else if (local86 == 13) { + local142 = local73 + local38; + local144 = local77 + local38; + local146 = arg5; + local148 = arg9; + local150 = arg13; + } else if (local86 == 14) { + local142 = local73 + local44; + local144 = local77 + local38; + local146 = arg6; + local148 = arg10; + local150 = arg14; + } else if (local86 == 15) { + local142 = local73 + local44; + local144 = local77 + local44; + local146 = arg7; + local148 = arg11; + local150 = arg15; + } else { + local142 = local73 + local38; + local144 = local77 + local44; + local146 = arg8; + local148 = arg12; + local150 = arg16; + } + this.anIntArray168[local79] = local142; + this.anIntArray160[local79] = local146; + this.anIntArray163[local79] = local144; + local66[local79] = local148; + local69[local79] = local150; + } + @Pc(534) int[] local534 = anIntArrayArray13[arg0]; + local86 = local534.length / 4; + this.anIntArray166 = new int[local86]; + this.anIntArray162 = new int[local86]; + this.anIntArray158 = new int[local86]; + this.anIntArray167 = new int[local86]; + this.anIntArray172 = new int[local86]; + this.anIntArray171 = new int[local86]; + if (arg2 != -1) { + this.anIntArray161 = new int[local86]; + } + local142 = 0; + for (local144 = 0; local144 < local86; local144++) { + local146 = local534[local142]; + local148 = local534[local142 + 1]; + local150 = local534[local142 + 2]; + @Pc(599) int local599 = local534[local142 + 3]; + local142 += 4; + if (local148 < 4) { + local148 = local148 - arg1 & 0x3; + } + if (local150 < 4) { + local150 = local150 - arg1 & 0x3; + } + if (local599 < 4) { + local599 = local599 - arg1 & 0x3; + } + this.anIntArray166[local144] = local148; + this.anIntArray162[local144] = local150; + this.anIntArray158[local144] = local599; + if (local146 == 0) { + this.anIntArray167[local144] = local66[local148]; + this.anIntArray172[local144] = local66[local150]; + this.anIntArray171[local144] = local66[local599]; + if (this.anIntArray161 != null) { + this.anIntArray161[local144] = -1; + } + } else { + this.anIntArray167[local144] = local69[local148]; + this.anIntArray172[local144] = local69[local150]; + this.anIntArray171[local144] = local69[local599]; + if (this.anIntArray161 != null) { + this.anIntArray161[local144] = arg2; + } + } + } + local144 = arg5; + local146 = arg6; + if (arg6 < arg5) { + local144 = arg6; + } + if (arg6 > arg6) { + local146 = arg6; + } + if (arg7 < local144) { + local144 = arg7; + } + if (arg7 > arg6) { + local146 = arg7; + } + if (arg8 < local144) { + } + if (arg8 > local146) { + } + } +} diff --git a/client/src/main/java/rt4/SignLinkAudioChannel.java b/client/src/main/java/rt4/SignLinkAudioChannel.java new file mode 100644 index 0000000..e4d5583 --- /dev/null +++ b/client/src/main/java/rt4/SignLinkAudioChannel.java @@ -0,0 +1,62 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +import java.awt.Component; + +@OriginalClass("client!hl") +public final class SignLinkAudioChannel extends AudioChannel { + + @OriginalMember(owner = "client!hl", name = "M", descriptor = "Lsignlink!ai;") + public static AudioSource audioSource; + + @OriginalMember(owner = "client!hl", name = "L", descriptor = "I") + private final int channel; + + @OriginalMember(owner = "client!hl", name = "", descriptor = "(Lsignlink!ll;I)V") + public SignLinkAudioChannel(@OriginalArg(0) SignLink signLink, @OriginalArg(1) int channel) { + audioSource = signLink.getAudioSource(); + this.channel = channel; + } + + @OriginalMember(owner = "client!hl", name = "c", descriptor = "()I") + @Override + protected final int getBufferSize() { + return audioSource.getBufferSize(this.channel); + } + + @OriginalMember(owner = "client!hl", name = "a", descriptor = "()V") + @Override + protected final void write() { + audioSource.write(this.channel, this.samples); + } + + @OriginalMember(owner = "client!hl", name = "a", descriptor = "(Ljava/awt/Component;)V") + @Override + public final void init(@OriginalArg(0) Component component) throws Exception { + audioSource.init(AudioChannel.sampleRate, component, AudioChannel.stereo); + } + + @OriginalMember(owner = "client!hl", name = "b", descriptor = "()V") + @Override + protected final void close() { + audioSource.close(this.channel); + } + + @OriginalMember(owner = "client!hl", name = "a", descriptor = "(I)V") + @Override + public final void open(@OriginalArg(0) int bufferCapacity) throws Exception { + if (bufferCapacity > 32768) { + throw new IllegalArgumentException(); + } + audioSource.open(this.channel, bufferCapacity); + } + + @OriginalMember(owner = "client!hl", name = "d", descriptor = "()V") + @Override + protected final void flush() { + audioSource.flush(this.channel); + } +} diff --git a/client/src/main/java/rt4/SoftLruHashTable.java b/client/src/main/java/rt4/SoftLruHashTable.java new file mode 100644 index 0000000..f23e933 --- /dev/null +++ b/client/src/main/java/rt4/SoftLruHashTable.java @@ -0,0 +1,136 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!n") +public final class SoftLruHashTable { + + @OriginalMember(owner = "client!n", name = "k", descriptor = "Lclient!ce;") + private final SecondaryLinkedList queue = new SecondaryLinkedList(); + + @OriginalMember(owner = "client!n", name = "m", descriptor = "I") + private final int capacity; + + @OriginalMember(owner = "client!n", name = "g", descriptor = "I") + private int available; + + @OriginalMember(owner = "client!n", name = "n", descriptor = "Lclient!sc;") + private final HashTable table; + + @OriginalMember(owner = "client!n", name = "", descriptor = "(I)V") + public SoftLruHashTable(@OriginalArg(0) int arg0) { + this.capacity = arg0; + @Pc(11) int local11; + for (local11 = 1; local11 + local11 < arg0; local11 += local11) { + } + this.available = arg0; + this.table = new HashTable(local11); + } + + @OriginalMember(owner = "client!n", name = "a", descriptor = "(BLjava/lang/Object;J)V") + public final void put(@OriginalArg(1) Object arg0, @OriginalArg(2) long arg1) { + this.remove(arg1); + if (this.available == 0) { + @Pc(26) ReferenceNode local26 = (ReferenceNode) this.queue.removeHead(); + local26.unlink(); + local26.unlinkSecondary(); + } else { + this.available--; + } + @Pc(44) HardReferenceNode local44 = new HardReferenceNode(arg0); + this.table.put(local44, arg1); + this.queue.addTail(local44); + local44.secondaryKey = 0L; + } + + @OriginalMember(owner = "client!n", name = "a", descriptor = "(JB)V") + public final void remove(@OriginalArg(0) long arg0) { + @Pc(6) ReferenceNode local6 = (ReferenceNode) this.table.get(arg0); + if (local6 != null) { + local6.unlink(); + local6.unlinkSecondary(); + this.available++; + } + } + + @OriginalMember(owner = "client!n", name = "a", descriptor = "(I)I") + public final int size() { + @Pc(10) int local10 = 0; + for (@Pc(16) ReferenceNode local16 = (ReferenceNode) this.queue.head(); local16 != null; local16 = (ReferenceNode) this.queue.next()) { + if (!local16.isSoft()) { + local10++; + } + } + return local10; + } + + @OriginalMember(owner = "client!n", name = "c", descriptor = "(II)V") + public final void clean(@OriginalArg(1) int arg0) { + if (ReferenceNodeFactory.SOFT_REFERENCE_NODE_FACTORY == null) { + return; + } + for (@Pc(9) ReferenceNode local9 = (ReferenceNode) this.queue.head(); local9 != null; local9 = (ReferenceNode) this.queue.next()) { + if (local9.isSoft()) { + if (local9.get() == null) { + local9.unlink(); + local9.unlinkSecondary(); + this.available++; + } + } else if (++local9.secondaryKey > (long) arg0) { + @Pc(33) ReferenceNode local33 = ReferenceNodeFactory.SOFT_REFERENCE_NODE_FACTORY.create(local9); + this.table.put(local33, local9.key); + SecondaryLinkedList.insertAfter(local9, local33); + local9.unlink(); + local9.unlinkSecondary(); + } + } + } + + @OriginalMember(owner = "client!n", name = "b", descriptor = "(B)V") + public final void removeSoft() { + for (@Pc(7) ReferenceNode local7 = (ReferenceNode) this.queue.head(); local7 != null; local7 = (ReferenceNode) this.queue.next()) { + if (local7.isSoft()) { + local7.unlink(); + local7.unlinkSecondary(); + this.available++; + } + } + } + + @OriginalMember(owner = "client!n", name = "c", descriptor = "(I)V") + public final void clear() { + this.queue.clear(); + this.table.clear(); + this.available = this.capacity; + } + + @OriginalMember(owner = "client!n", name = "b", descriptor = "(JB)Ljava/lang/Object;") + public final Object get(@OriginalArg(0) long arg0) { + @Pc(12) ReferenceNode local12 = (ReferenceNode) this.table.get(arg0); + if (local12 == null) { + return null; + } + @Pc(27) Object local27 = local12.get(); + if (local27 == null) { + local12.unlink(); + local12.unlinkSecondary(); + this.available++; + return null; + } + if (local12.isSoft()) { + @Pc(53) HardReferenceNode local53 = new HardReferenceNode(local27); + this.table.put(local53, local12.key); + this.queue.addTail(local53); + local53.secondaryKey = 0L; + local12.unlink(); + local12.unlinkSecondary(); + } else { + this.queue.addTail(local12); + local12.secondaryKey = 0L; + } + return local27; + } +} diff --git a/client/src/main/java/rt4/SoftReferenceNode.java b/client/src/main/java/rt4/SoftReferenceNode.java new file mode 100644 index 0000000..8c2c175 --- /dev/null +++ b/client/src/main/java/rt4/SoftReferenceNode.java @@ -0,0 +1,31 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +import java.lang.ref.SoftReference; + +@OriginalClass("client!qd") +public final class SoftReferenceNode extends ReferenceNode { + + @OriginalMember(owner = "client!qd", name = "U", descriptor = "Ljava/lang/ref/SoftReference;") + private final SoftReference reference; + + @OriginalMember(owner = "client!qd", name = "", descriptor = "(Ljava/lang/Object;)V") + public SoftReferenceNode(@OriginalArg(0) Object arg0) { + this.reference = new SoftReference(arg0); + } + + @OriginalMember(owner = "client!qd", name = "a", descriptor = "(Z)Ljava/lang/Object;") + @Override + public final Object get() { + return this.reference.get(); + } + + @OriginalMember(owner = "client!qd", name = "e", descriptor = "(I)Z") + @Override + public final boolean isSoft() { + return true; + } +} diff --git a/client/src/main/java/rt4/SoftReferenceNodeFactory.java b/client/src/main/java/rt4/SoftReferenceNodeFactory.java new file mode 100644 index 0000000..e9574b1 --- /dev/null +++ b/client/src/main/java/rt4/SoftReferenceNodeFactory.java @@ -0,0 +1,15 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!db") +public final class SoftReferenceNodeFactory extends ReferenceNodeFactory { + + @OriginalMember(owner = "client!db", name = "a", descriptor = "(Lclient!gf;I)Lclient!gf;") + @Override + public final ReferenceNode create(@OriginalArg(0) ReferenceNode arg0) { + return new SoftReferenceNode(arg0.get()); + } +} diff --git a/client/src/main/java/rt4/SoftwareAlphaSprite.java b/client/src/main/java/rt4/SoftwareAlphaSprite.java new file mode 100644 index 0000000..9663a24 --- /dev/null +++ b/client/src/main/java/rt4/SoftwareAlphaSprite.java @@ -0,0 +1,940 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!am") +public final class SoftwareAlphaSprite extends SoftwareSprite { + + @OriginalMember(owner = "client!am", name = "", descriptor = "(IIIIII[I)V") + public SoftwareAlphaSprite(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int[] arg6) { + super(arg0, arg1, arg2, arg3, arg4, arg5, arg6); + } + + @OriginalMember(owner = "client!am", name = "b", descriptor = "([I[IIIIIIIIIIII)V") + public static void method317(@OriginalArg(0) int[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8, @OriginalArg(10) int arg9, @OriginalArg(11) int arg10, @OriginalArg(12) int arg11) { + @Pc(1) int local1 = arg2; + for (@Pc(4) int local4 = -arg7; local4 < 0; local4++) { + @Pc(12) int local12 = (arg3 >> 16) * arg10; + for (@Pc(15) int local15 = -arg6; local15 < 0; local15++) { + @Pc(25) int local25 = arg1[(arg2 >> 16) + local12]; + @Pc(29) int local29 = arg0[arg4]; + @Pc(37) int local37 = (local25 >>> 24) * arg11 >> 8; + @Pc(41) int local41 = 256 - local37; + arg0[arg4++] = ((local25 & 0xFF00FF) * local37 + (local29 & 0xFF00FF) * local41 & 0xFF00FF00) + ((local25 & 0xFF00) * local37 + (local29 & 0xFF00) * local41 & 0xFF0000) >>> 8; + arg2 += arg8; + } + arg3 += arg9; + arg2 = local1; + arg4 += arg5; + } + } + + @OriginalMember(owner = "client!am", name = "c", descriptor = "([I[IIIIIIII)V") + public static void method318(@OriginalArg(0) int[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7) { + @Pc(2) int local2 = -arg4; + for (@Pc(5) int local5 = -arg5; local5 < 0; local5++) { + for (@Pc(9) int local9 = local2; local9 < 0; local9++) { + @Pc(16) int local16 = arg1[arg2--]; + @Pc(20) int local20 = local16 >>> 24; + if (local20 == 0) { + arg3++; + } else { + @Pc(26) int local26 = 256 - local20; + @Pc(30) int local30 = arg0[arg3]; + arg0[arg3++] = ((local16 & 0xFF00FF) * local20 + (local30 & 0xFF00FF) * local26 & 0xFF00FF00) + ((local16 & 0xFF00) * local20 + (local30 & 0xFF00) * local26 & 0xFF0000) >>> 8; + } + } + arg3 += arg6; + arg2 += arg7; + } + } + + @OriginalMember(owner = "client!am", name = "d", descriptor = "([I[IIIIIIII)V") + public static void method319(@OriginalArg(0) int[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7) { + @Pc(2) int local2 = -arg4; + for (@Pc(5) int local5 = -arg5; local5 < 0; local5++) { + for (@Pc(9) int local9 = local2; local9 < 0; local9++) { + @Pc(16) int local16 = arg1[arg2++]; + @Pc(20) int local20 = local16 >>> 24; + if (local20 == 0) { + arg3++; + } else { + @Pc(26) int local26 = 256 - local20; + @Pc(30) int local30 = arg0[arg3]; + arg0[arg3++] = ((local16 & 0xFF00FF) * local20 + (local30 & 0xFF00FF) * local26 & 0xFF00FF00) + ((local16 & 0xFF00) * local20 + (local30 & 0xFF00) * local26 & 0xFF0000) >>> 8; + } + } + arg3 += arg6; + arg2 += arg7; + } + } + + @OriginalMember(owner = "client!am", name = "b", descriptor = "([I[IIIIIIIII)V") + public static void method320(@OriginalArg(0) int[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8) { + for (@Pc(2) int local2 = -arg5; local2 < 0; local2++) { + for (@Pc(7) int local7 = -arg4; local7 < 0; local7++) { + @Pc(19) int local19 = (arg1[arg2] >>> 24) * arg8 >> 8; + @Pc(23) int local23 = 256 - local19; + @Pc(28) int local28 = arg1[arg2++]; + @Pc(32) int local32 = arg0[arg3]; + arg0[arg3++] = ((local28 & 0xFF00FF) * local19 + (local32 & 0xFF00FF) * local23 & 0xFF00FF00) + ((local28 & 0xFF00) * local19 + (local32 & 0xFF00) * local23 & 0xFF0000) >>> 8; + } + arg3 += arg6; + arg2 += arg7; + } + } + + @OriginalMember(owner = "client!am", name = "b", descriptor = "([I[IIIIIIIIIII)V") + public static void method321(@OriginalArg(0) int[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8, @OriginalArg(10) int arg9, @OriginalArg(11) int arg10) { + @Pc(1) int local1 = arg2; + for (@Pc(4) int local4 = -arg7; local4 < 0; local4++) { + @Pc(12) int local12 = (arg3 >> 16) * arg10; + for (@Pc(15) int local15 = -arg6; local15 < 0; local15++) { + @Pc(25) int local25 = arg1[(arg2 >> 16) + local12]; + @Pc(29) int local29 = local25 >>> 24; + if (local29 == 0) { + arg4++; + } else { + @Pc(35) int local35 = 256 - local29; + @Pc(39) int local39 = arg0[arg4]; + arg0[arg4++] = ((local25 & 0xFF00FF) * local29 + (local39 & 0xFF00FF) * local35 & 0xFF00FF00) + ((local25 & 0xFF00) * local29 + (local39 & 0xFF00) * local35 & 0xFF0000) >>> 8; + } + arg2 += arg8; + } + arg3 += arg9; + arg2 = local1; + arg4 += arg5; + } + } + + @OriginalMember(owner = "client!am", name = "a", descriptor = "(IIIIIIDI)V") + @Override + public final void method306(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(6) double arg2) { + try { + @Pc(15) int local15 = (int) (Math.sin(arg2) * 65536.0D); + @Pc(21) int local21 = (int) (Math.cos(arg2) * 65536.0D); + @Pc(27) int local27 = local15 * 256 >> 8; + @Pc(33) int local33 = local21 * 256 >> 8; + @Pc(45) int local45 = local27 * -10 + local33 * -10 + 983040; + @Pc(57) int local57 = local33 * -10 + 983040 - local27 * -10; + @Pc(63) int local63 = arg0 + arg1 * SoftwareRaster.width; + for (@Pc(65) int local65 = 0; local65 < 20; local65++) { + @Pc(70) int local70 = local63; + @Pc(72) int local72 = local45; + @Pc(74) int local74 = local57; + for (@Pc(77) int local77 = -20; local77 < 0; local77++) { + @Pc(93) int local93 = this.pixels[(local72 >> 16) + (local74 >> 16) * this.width]; + @Pc(97) int local97 = SoftwareRaster.pixels[local70]; + @Pc(101) int local101 = local93 >>> 24; + @Pc(105) int local105 = 256 - local101; + SoftwareRaster.pixels[local70++] = ((local93 & 0xFF00FF) * local101 + (local97 & 0xFF00FF) * local105 & 0xFF00FF00) + ((local93 & 0xFF00) * local101 + (local97 & 0xFF00) * local105 & 0xFF0000) >>> 8; + local72 += local33; + local74 -= local27; + } + local45 += local27; + local57 += local33; + local63 += SoftwareRaster.width; + } + } catch (@Pc(164) Exception local164) { + } + } + + @OriginalMember(owner = "client!am", name = "e", descriptor = "(II)V") + @Override + public final void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + arg0 += this.anInt1863; + arg1 += this.anInt1861; + @Pc(15) int local15 = arg0 + arg1 * SoftwareRaster.width; + @Pc(17) int local17 = 0; + @Pc(20) int local20 = this.height; + @Pc(23) int local23 = this.width; + @Pc(27) int local27 = SoftwareRaster.width - local23; + @Pc(29) int local29 = 0; + @Pc(36) int local36; + if (arg1 < SoftwareRaster.clipTop) { + local36 = SoftwareRaster.clipTop - arg1; + local20 -= local36; + arg1 = SoftwareRaster.clipTop; + local17 = local36 * local23; + local15 += local36 * SoftwareRaster.width; + } + if (arg1 + local20 > SoftwareRaster.clipBottom) { + local20 -= arg1 + local20 - SoftwareRaster.clipBottom; + } + if (arg0 < SoftwareRaster.clipLeft) { + local36 = SoftwareRaster.clipLeft - arg0; + local23 -= local36; + arg0 = SoftwareRaster.clipLeft; + local17 += local36; + local15 += local36; + local29 = local36; + local27 += local36; + } + if (arg0 + local23 > SoftwareRaster.clipRight) { + local36 = arg0 + local23 - SoftwareRaster.clipRight; + local23 -= local36; + local29 += local36; + local27 += local36; + } + if (local23 > 0 && local20 > 0) { + method319(SoftwareRaster.pixels, this.pixels, local17, local15, local23, local20, local27, local29); + } + } + + @OriginalMember(owner = "client!am", name = "c", descriptor = "(II)V") + @Override + public final void drawPixels(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + arg0 += this.anInt1863; + arg1 += this.anInt1861; + @Pc(15) int local15 = arg0 + arg1 * SoftwareRaster.width; + @Pc(17) int local17 = 0; + @Pc(20) int local20 = this.height; + @Pc(23) int local23 = this.width; + @Pc(27) int local27 = SoftwareRaster.width - local23; + @Pc(29) int local29 = 0; + @Pc(36) int local36; + if (arg1 < SoftwareRaster.clipTop) { + local36 = SoftwareRaster.clipTop - arg1; + local20 -= local36; + arg1 = SoftwareRaster.clipTop; + local17 = local36 * local23; + local15 += local36 * SoftwareRaster.width; + } + if (arg1 + local20 > SoftwareRaster.clipBottom) { + local20 -= arg1 + local20 - SoftwareRaster.clipBottom; + } + if (arg0 < SoftwareRaster.clipLeft) { + local36 = SoftwareRaster.clipLeft - arg0; + local23 -= local36; + arg0 = SoftwareRaster.clipLeft; + local17 += local36; + local15 += local36; + local29 = local36; + local27 += local36; + } + if (arg0 + local23 > SoftwareRaster.clipRight) { + local36 = arg0 + local23 - SoftwareRaster.clipRight; + local23 -= local36; + local29 += local36; + local27 += local36; + } + if (local23 > 0 && local20 > 0) { + method319(SoftwareRaster.pixels, this.pixels, local17, local15, local23, local20, local27, local29); + } + } + + @OriginalMember(owner = "client!am", name = "a", descriptor = "(IIIIII)V") + @Override + protected final void method1416(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + if (arg5 == 0) { + return; + } + @Pc(9) int local9 = arg0 - (this.anInt1863 << 4); + @Pc(16) int local16 = arg1 - (this.anInt1861 << 4); + @Pc(23) double local23 = (double) (arg4 & 0xFFFF) * 9.587379924285257E-5D; + @Pc(33) int local33 = (int) Math.floor(Math.sin(local23) * (double) arg5 + 0.5D); + @Pc(43) int local43 = (int) Math.floor(Math.cos(local23) * (double) arg5 + 0.5D); + @Pc(53) int local53 = -local9 * local43 + -local16 * local33; + @Pc(64) int local64 = --local9 * local33 + -local16 * local43; + @Pc(78) int local78 = ((this.width << 4) - local9) * local43 + -local16 * local33; + @Pc(93) int local93 = -((this.width << 4) - local9) * local33 + -local16 * local43; + @Pc(107) int local107 = -local9 * local43 + ((this.height << 4) - local16) * local33; + @Pc(122) int local122 = --local9 * local33 + ((this.height << 4) - local16) * local43; + @Pc(140) int local140 = ((this.width << 4) - local9) * local43 + ((this.height << 4) - local16) * local33; + @Pc(159) int local159 = -((this.width << 4) - local9) * local33 + ((this.height << 4) - local16) * local43; + @Pc(164) int local164; + @Pc(166) int local166; + if (local53 < local78) { + local164 = local53; + local166 = local78; + } else { + local164 = local78; + local166 = local53; + } + if (local107 < local164) { + local164 = local107; + } + if (local140 < local164) { + local164 = local140; + } + if (local107 > local166) { + local166 = local107; + } + if (local140 > local166) { + local166 = local140; + } + @Pc(196) int local196; + @Pc(198) int local198; + if (local64 < local93) { + local196 = local64; + local198 = local93; + } else { + local196 = local93; + local198 = local64; + } + if (local122 < local196) { + local196 = local122; + } + if (local159 < local196) { + local196 = local159; + } + if (local122 > local198) { + local198 = local122; + } + if (local159 > local198) { + local198 = local159; + } + local164 >>= 0xC; + local166 = local166 + 4095 >> 12; + local196 >>= 0xC; + local198 = local198 + 4095 >> 12; + local164 += arg2; + local166 += arg2; + local196 += arg3; + local198 += arg3; + local164 >>= 0x4; + local166 = local166 + 15 >> 4; + local196 >>= 0x4; + local198 = local198 + 15 >> 4; + if (local164 < SoftwareRaster.clipLeft) { + local164 = SoftwareRaster.clipLeft; + } + if (local166 > SoftwareRaster.clipRight) { + local166 = SoftwareRaster.clipRight; + } + if (local196 < SoftwareRaster.clipTop) { + local196 = SoftwareRaster.clipTop; + } + if (local198 > SoftwareRaster.clipBottom) { + local198 = SoftwareRaster.clipBottom; + } + local166 = local164 - local166; + if (local166 >= 0) { + return; + } + local198 = local196 - local198; + if (local198 >= 0) { + return; + } + @Pc(319) int local319 = local196 * SoftwareRaster.width + local164; + @Pc(324) double local324 = 1.6777216E7D / (double) arg5; + @Pc(333) int local333 = (int) Math.floor(Math.sin(local23) * local324 + 0.5D); + @Pc(342) int local342 = (int) Math.floor(Math.cos(local23) * local324 + 0.5D); + @Pc(350) int local350 = (local164 << 4) + 8 - arg2; + @Pc(358) int local358 = (local196 << 4) + 8 - arg3; + @Pc(368) int local368 = (local9 << 8) - (local358 * local333 >> 4); + @Pc(378) int local378 = (local16 << 8) + (local358 * local342 >> 4); + @Pc(384) int local384; + @Pc(388) int local388; + @Pc(504) int local504; + @Pc(394) int local394; + @Pc(432) int local432; + @Pc(436) int local436; + @Pc(440) int local440; + @Pc(444) int local444; + @Pc(532) int local532; + if (local342 != 0) { + @Pc(802) int local802; + if (local342 < 0) { + if (local333 == 0) { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local802 = local368 + (local350 * local342 >> 4); + local394 = local166; + if (local378 >= 0 && local378 - (this.height << 12) < 0) { + @Pc(825) int local825; + if ((local825 = local802 - (this.width << 12)) >= 0) { + local532 = (local342 - local825) / local342; + local394 = local166 + local532; + local802 += local342 * local532; + local388 = local319 + local532; + } + @Pc(853) int local853; + if ((local853 = (local802 - local342) / local342) > local394) { + local394 = local853; + } + while (local394 < 0) { + local432 = this.pixels[(local378 >> 12) * this.width + (local802 >> 12)]; + local436 = SoftwareRaster.pixels[local388]; + local440 = local432 >>> 24; + local444 = 256 - local440; + SoftwareRaster.pixels[local388++] = ((local432 & 0xFF00FF) * local440 + (local436 & 0xFF00FF) * local444 & 0xFF00FF00) + ((local432 & 0xFF00) * local440 + (local436 & 0xFF00) * local444 & 0xFF0000) >>> 8; + local802 += local342; + local394++; + } + } + local384++; + local378 += local342; + local319 += SoftwareRaster.width; + } + } else if (local333 < 0) { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local802 = local368 + (local350 * local342 >> 4); + local504 = local378 + (local350 * local333 >> 4); + local394 = local166; + @Pc(969) int local969; + if ((local969 = local802 - (this.width << 12)) >= 0) { + local532 = (local342 - local969) / local342; + local394 = local166 + local532; + local802 += local342 * local532; + local504 += local333 * local532; + local388 = local319 + local532; + } + @Pc(1003) int local1003; + if ((local1003 = (local802 - local342) / local342) > local394) { + local394 = local1003; + } + @Pc(1015) int local1015; + if ((local1015 = local504 - (this.height << 12)) >= 0) { + local532 = (local333 - local1015) / local333; + local394 += local532; + local802 += local342 * local532; + local504 += local333 * local532; + local388 += local532; + } + @Pc(1049) int local1049; + if ((local1049 = (local504 - local333) / local333) > local394) { + local394 = local1049; + } + while (local394 < 0) { + local432 = this.pixels[(local504 >> 12) * this.width + (local802 >> 12)]; + local436 = SoftwareRaster.pixels[local388]; + local440 = local432 >>> 24; + local444 = 256 - local440; + SoftwareRaster.pixels[local388++] = ((local432 & 0xFF00FF) * local440 + (local436 & 0xFF00FF) * local444 & 0xFF00FF00) + ((local432 & 0xFF00) * local440 + (local436 & 0xFF00) * local444 & 0xFF0000) >>> 8; + local802 += local342; + local504 += local333; + local394++; + } + local384++; + local368 -= local333; + local378 += local342; + local319 += SoftwareRaster.width; + } + } else { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local802 = local368 + (local350 * local342 >> 4); + local504 = local378 + (local350 * local333 >> 4); + local394 = local166; + @Pc(1171) int local1171; + if ((local1171 = local802 - (this.width << 12)) >= 0) { + local532 = (local342 - local1171) / local342; + local394 = local166 + local532; + local802 += local342 * local532; + local504 += local333 * local532; + local388 = local319 + local532; + } + @Pc(1205) int local1205; + if ((local1205 = (local802 - local342) / local342) > local394) { + local394 = local1205; + } + if (local504 < 0) { + local532 = (local333 - local504 - 1) / local333; + local394 += local532; + local802 += local342 * local532; + local504 += local333 * local532; + local388 += local532; + } + @Pc(1253) int local1253; + if ((local1253 = (local504 + 1 - (this.height << 12) - local333) / local333) > local394) { + local394 = local1253; + } + while (local394 < 0) { + local432 = this.pixels[(local504 >> 12) * this.width + (local802 >> 12)]; + local436 = SoftwareRaster.pixels[local388]; + local440 = local432 >>> 24; + local444 = 256 - local440; + SoftwareRaster.pixels[local388++] = ((local432 & 0xFF00FF) * local440 + (local436 & 0xFF00FF) * local444 & 0xFF00FF00) + ((local432 & 0xFF00) * local440 + (local436 & 0xFF00) * local444 & 0xFF0000) >>> 8; + local802 += local342; + local504 += local333; + local394++; + } + local384++; + local368 -= local333; + local378 += local342; + local319 += SoftwareRaster.width; + } + } + } else if (local333 == 0) { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local802 = local368 + (local350 * local342 >> 4); + local394 = local166; + if (local378 >= 0 && local378 - (this.height << 12) < 0) { + if (local802 < 0) { + local532 = (local342 - local802 - 1) / local342; + local394 = local166 + local532; + local802 += local342 * local532; + local388 = local319 + local532; + } + @Pc(1412) int local1412; + if ((local1412 = (local802 + 1 - (this.width << 12) - local342) / local342) > local394) { + local394 = local1412; + } + while (local394 < 0) { + local432 = this.pixels[(local378 >> 12) * this.width + (local802 >> 12)]; + local436 = SoftwareRaster.pixels[local388]; + local440 = local432 >>> 24; + local444 = 256 - local440; + SoftwareRaster.pixels[local388++] = ((local432 & 0xFF00FF) * local440 + (local436 & 0xFF00FF) * local444 & 0xFF00FF00) + ((local432 & 0xFF00) * local440 + (local436 & 0xFF00) * local444 & 0xFF0000) >>> 8; + local802 += local342; + local394++; + } + } + local384++; + local378 += local342; + local319 += SoftwareRaster.width; + } + } else if (local333 < 0) { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local802 = local368 + (local350 * local342 >> 4); + local504 = local378 + (local350 * local333 >> 4); + local394 = local166; + if (local802 < 0) { + local532 = (local342 - local802 - 1) / local342; + local394 = local166 + local532; + local802 += local342 * local532; + local504 += local333 * local532; + local388 = local319 + local532; + } + @Pc(1564) int local1564; + if ((local1564 = (local802 + 1 - (this.width << 12) - local342) / local342) > local394) { + local394 = local1564; + } + @Pc(1576) int local1576; + if ((local1576 = local504 - (this.height << 12)) >= 0) { + local532 = (local333 - local1576) / local333; + local394 += local532; + local802 += local342 * local532; + local504 += local333 * local532; + local388 += local532; + } + @Pc(1610) int local1610; + if ((local1610 = (local504 - local333) / local333) > local394) { + local394 = local1610; + } + while (local394 < 0) { + local432 = this.pixels[(local504 >> 12) * this.width + (local802 >> 12)]; + local436 = SoftwareRaster.pixels[local388]; + local440 = local432 >>> 24; + local444 = 256 - local440; + SoftwareRaster.pixels[local388++] = ((local432 & 0xFF00FF) * local440 + (local436 & 0xFF00FF) * local444 & 0xFF00FF00) + ((local432 & 0xFF00) * local440 + (local436 & 0xFF00) * local444 & 0xFF0000) >>> 8; + local802 += local342; + local504 += local333; + local394++; + } + local384++; + local368 -= local333; + local378 += local342; + local319 += SoftwareRaster.width; + } + } else { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local802 = local368 + (local350 * local342 >> 4); + local504 = local378 + (local350 * local333 >> 4); + local394 = local166; + if (local802 < 0) { + local532 = (local342 - local802 - 1) / local342; + local394 = local166 + local532; + local802 += local342 * local532; + local504 += local333 * local532; + local388 = local319 + local532; + } + @Pc(1768) int local1768; + if ((local1768 = (local802 + 1 - (this.width << 12) - local342) / local342) > local394) { + local394 = local1768; + } + if (local504 < 0) { + local532 = (local333 - local504 - 1) / local333; + local394 += local532; + local802 += local342 * local532; + local504 += local333 * local532; + local388 += local532; + } + @Pc(1816) int local1816; + if ((local1816 = (local504 + 1 - (this.height << 12) - local333) / local333) > local394) { + local394 = local1816; + } + while (local394 < 0) { + local432 = this.pixels[(local504 >> 12) * this.width + (local802 >> 12)]; + local436 = SoftwareRaster.pixels[local388]; + local440 = local432 >>> 24; + local444 = 256 - local440; + SoftwareRaster.pixels[local388++] = ((local432 & 0xFF00FF) * local440 + (local436 & 0xFF00FF) * local444 & 0xFF00FF00) + ((local432 & 0xFF00) * local440 + (local436 & 0xFF00) * local444 & 0xFF0000) >>> 8; + local802 += local342; + local504 += local333; + local394++; + } + local384++; + local368 -= local333; + local378 += local342; + local319 += SoftwareRaster.width; + } + } + } else if (local333 == 0) { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local394 = local166; + if (local368 >= 0 && local378 >= 0 && local368 - (this.width << 12) < 0 && local378 - (this.height << 12) < 0) { + while (local394 < 0) { + local432 = this.pixels[(local378 >> 12) * this.width + (local368 >> 12)]; + local436 = SoftwareRaster.pixels[local388]; + local440 = local432 >>> 24; + local444 = 256 - local440; + SoftwareRaster.pixels[local388++] = ((local432 & 0xFF00FF) * local440 + (local436 & 0xFF00FF) * local444 & 0xFF00FF00) + ((local432 & 0xFF00) * local440 + (local436 & 0xFF00) * local444 & 0xFF0000) >>> 8; + local394++; + } + } + local384++; + local319 += SoftwareRaster.width; + } + } else if (local333 < 0) { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local504 = local378 + (local350 * local333 >> 4); + local394 = local166; + if (local368 >= 0 && local368 - (this.width << 12) < 0) { + @Pc(525) int local525; + if ((local525 = local504 - (this.height << 12)) >= 0) { + local532 = (local333 - local525) / local333; + local394 = local166 + local532; + local504 += local333 * local532; + local388 = local319 + local532; + } + @Pc(553) int local553; + if ((local553 = (local504 - local333) / local333) > local394) { + local394 = local553; + } + while (local394 < 0) { + local432 = this.pixels[(local504 >> 12) * this.width + (local368 >> 12)]; + local436 = SoftwareRaster.pixels[local388]; + local440 = local432 >>> 24; + local444 = 256 - local440; + SoftwareRaster.pixels[local388++] = ((local432 & 0xFF00FF) * local440 + (local436 & 0xFF00FF) * local444 & 0xFF00FF00) + ((local432 & 0xFF00) * local440 + (local436 & 0xFF00) * local444 & 0xFF0000) >>> 8; + local504 += local333; + local394++; + } + } + local384++; + local368 -= local333; + local319 += SoftwareRaster.width; + } + } else { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local504 = local378 + (local350 * local333 >> 4); + local394 = local166; + if (local368 >= 0 && local368 - (this.width << 12) < 0) { + if (local504 < 0) { + local532 = (local333 - local504 - 1) / local333; + local394 = local166 + local532; + local504 += local333 * local532; + local388 = local319 + local532; + } + @Pc(702) int local702; + if ((local702 = (local504 + 1 - (this.height << 12) - local333) / local333) > local394) { + local394 = local702; + } + while (local394 < 0) { + local432 = this.pixels[(local504 >> 12) * this.width + (local368 >> 12)]; + local436 = SoftwareRaster.pixels[local388]; + local440 = local432 >>> 24; + local444 = 256 - local440; + SoftwareRaster.pixels[local388++] = ((local432 & 0xFF00FF) * local440 + (local436 & 0xFF00FF) * local444 & 0xFF00FF00) + ((local432 & 0xFF00) * local440 + (local436 & 0xFF00) * local444 & 0xFF0000) >>> 8; + local504 += local333; + local394++; + } + } + local384++; + local368 -= local333; + local319 += SoftwareRaster.width; + } + } + } + + @OriginalMember(owner = "client!am", name = "a", descriptor = "(IIIIIIII[I[I)V") + @Override + public final void renderRotated(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int w, @OriginalArg(3) int h, @OriginalArg(4) int anchorX, @OriginalArg(5) int anchorY, @OriginalArg(6) int theta, @OriginalArg(7) int zoom, @OriginalArg(8) int[] lineStarts, @OriginalArg(9) int[] arg9) { + try { + @Pc(4) int local4 = -w / 2; + @Pc(9) int local9 = -h / 2; + @Pc(18) int local18 = (int) (Math.sin((double) theta / 326.11D) * 65536.0D); + @Pc(27) int local27 = (int) (Math.cos((double) theta / 326.11D) * 65536.0D); + @Pc(33) int local33 = local18 * zoom >> 8; + @Pc(39) int local39 = local27 * zoom >> 8; + @Pc(51) int local51 = (anchorX << 16) + local9 * local33 + local4 * local39; + @Pc(63) int local63 = (anchorY << 16) + (local9 * local39 - local4 * local33); + @Pc(69) int local69 = x + y * SoftwareRaster.width; + for (@Pc(71) int local71 = 0; local71 < h; local71++) { + @Pc(78) int local78 = lineStarts[local71]; + @Pc(82) int local82 = local69 + local78; + @Pc(88) int local88 = local51 + local39 * local78; + @Pc(94) int local94 = local63 - local33 * local78; + for (@Pc(99) int local99 = -arg9[local71]; local99 < 0; local99++) { + @Pc(115) int local115 = this.pixels[(local88 >> 16) + (local94 >> 16) * this.width]; + @Pc(119) int local119 = SoftwareRaster.pixels[local82]; + @Pc(123) int local123 = local115 >>> 24; + @Pc(127) int local127 = 256 - local123; + SoftwareRaster.pixels[local82++] = ((local115 & 0xFF00FF) * local123 + (local119 & 0xFF00FF) * local127 & 0xFF00FF00) + ((local115 & 0xFF00) * local123 + (local119 & 0xFF00) * local127 & 0xFF0000) >>> 8; + local88 += local39; + local94 -= local33; + } + local51 += local33; + local63 += local39; + local69 += SoftwareRaster.width; + } + } catch (@Pc(186) Exception local186) { + } + } + + @OriginalMember(owner = "client!am", name = "b", descriptor = "(IIIIIIII[I[I)V") + @Override + public final void renderRotated(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int w, @OriginalArg(3) int h, @OriginalArg(4) int anchorX, @OriginalArg(5) int anchorY, @OriginalArg(6) int theta, @OriginalArg(8) int[] lineStart, @OriginalArg(9) int[] lineWidth) { + try { + @Pc(4) int local4 = -w / 2; + @Pc(9) int local9 = -h / 2; + @Pc(18) int local18 = (int) (Math.sin((double) theta / 326.11D) * 65536.0D); + @Pc(27) int local27 = (int) (Math.cos((double) theta / 326.11D) * 65536.0D); + @Pc(33) int local33 = local18 * 256 >> 8; + @Pc(39) int local39 = local27 * 256 >> 8; + @Pc(51) int local51 = (anchorX << 16) + local9 * local33 + local4 * local39; + @Pc(63) int local63 = (anchorY << 16) + (local9 * local39 - local4 * local33); + @Pc(69) int local69 = x + y * SoftwareRaster.width; + for (@Pc(71) int local71 = 0; local71 < h; local71++) { + @Pc(78) int local78 = lineStart[local71]; + @Pc(82) int local82 = local69 + local78; + @Pc(88) int local88 = local51 + local39 * local78; + @Pc(94) int local94 = local63 - local33 * local78; + for (@Pc(99) int local99 = -lineWidth[local71]; local99 < 0; local99++) { + @Pc(115) int local115 = this.pixels[(local88 >> 16) + (local94 >> 16) * this.width]; + @Pc(119) int local119 = SoftwareRaster.pixels[local82]; + @Pc(123) int local123 = local115 >>> 24; + @Pc(127) int local127 = 256 - local123; + SoftwareRaster.pixels[local82++] = ((local115 & 0xFF00FF) * local123 + (local119 & 0xFF00FF) * local127 & 0xFF00FF00) + ((local115 & 0xFF00) * local123 + (local119 & 0xFF00) * local127 & 0xFF0000) >>> 8; + local88 += local39; + local94 -= local33; + } + local51 += local33; + local63 += local39; + local69 += SoftwareRaster.width; + } + } catch (@Pc(186) Exception local186) { + } + } + + @OriginalMember(owner = "client!am", name = "b", descriptor = "(IIIII)V") + @Override + public final void renderAlpha(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (arg2 <= 0 || arg3 <= 0) { + return; + } + @Pc(7) int local7 = this.width; + @Pc(10) int local10 = this.height; + @Pc(12) int local12 = 0; + @Pc(14) int local14 = 0; + @Pc(17) int local17 = this.anInt1860; + @Pc(20) int local20 = this.anInt1866; + @Pc(26) int local26 = (local17 << 16) / arg2; + @Pc(32) int local32 = (local20 << 16) / arg3; + @Pc(46) int local46; + if (this.anInt1863 > 0) { + local46 = ((this.anInt1863 << 16) + local26 - 1) / local26; + arg0 += local46; + local12 = local46 * local26 - (this.anInt1863 << 16); + } + if (this.anInt1861 > 0) { + local46 = ((this.anInt1861 << 16) + local32 - 1) / local32; + arg1 += local46; + local14 = local46 * local32 - (this.anInt1861 << 16); + } + if (local7 < local17) { + arg2 = ((local7 << 16) + local26 - local12 - 1) / local26; + } + if (local10 < local20) { + arg3 = ((local10 << 16) + local32 - local14 - 1) / local32; + } + local46 = arg0 + arg1 * SoftwareRaster.width; + @Pc(130) int local130 = SoftwareRaster.width - arg2; + if (arg1 + arg3 > SoftwareRaster.clipBottom) { + arg3 -= arg1 + arg3 - SoftwareRaster.clipBottom; + } + @Pc(150) int local150; + if (arg1 < SoftwareRaster.clipTop) { + local150 = SoftwareRaster.clipTop - arg1; + arg3 -= local150; + local46 += local150 * SoftwareRaster.width; + local14 += local32 * local150; + } + if (arg0 + arg2 > SoftwareRaster.clipRight) { + local150 = arg0 + arg2 - SoftwareRaster.clipRight; + arg2 -= local150; + local130 += local150; + } + if (arg0 < SoftwareRaster.clipLeft) { + local150 = SoftwareRaster.clipLeft - arg0; + arg2 -= local150; + local46 += local150; + local12 += local26 * local150; + local130 += local150; + } + method317(SoftwareRaster.pixels, this.pixels, local12, local14, local46, local130, arg2, arg3, local26, local32, local7, arg4); + } + + @OriginalMember(owner = "client!am", name = "a", descriptor = "(IIII)V") + @Override + public final void renderResized(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int width, @OriginalArg(3) int height) { + if (width <= 0 || height <= 0) { + return; + } + @Pc(7) int local7 = this.width; + @Pc(10) int local10 = this.height; + @Pc(12) int local12 = 0; + @Pc(14) int local14 = 0; + @Pc(17) int local17 = this.anInt1860; + @Pc(20) int local20 = this.anInt1866; + @Pc(26) int local26 = (local17 << 16) / width; + @Pc(32) int local32 = (local20 << 16) / height; + @Pc(46) int local46; + if (this.anInt1863 > 0) { + local46 = ((this.anInt1863 << 16) + local26 - 1) / local26; + x += local46; + local12 = local46 * local26 - (this.anInt1863 << 16); + } + if (this.anInt1861 > 0) { + local46 = ((this.anInt1861 << 16) + local32 - 1) / local32; + y += local46; + local14 = local46 * local32 - (this.anInt1861 << 16); + } + if (local7 < local17) { + width = ((local7 << 16) + local26 - local12 - 1) / local26; + } + if (local10 < local20) { + height = ((local10 << 16) + local32 - local14 - 1) / local32; + } + local46 = x + y * SoftwareRaster.width; + @Pc(130) int local130 = SoftwareRaster.width - width; + if (y + height > SoftwareRaster.clipBottom) { + height -= y + height - SoftwareRaster.clipBottom; + } + @Pc(150) int local150; + if (y < SoftwareRaster.clipTop) { + local150 = SoftwareRaster.clipTop - y; + height -= local150; + local46 += local150 * SoftwareRaster.width; + local14 += local32 * local150; + } + if (x + width > SoftwareRaster.clipRight) { + local150 = x + width - SoftwareRaster.clipRight; + width -= local150; + local130 += local150; + } + if (x < SoftwareRaster.clipLeft) { + local150 = SoftwareRaster.clipLeft - x; + width -= local150; + local46 += local150; + local12 += local26 * local150; + local130 += local150; + } + method321(SoftwareRaster.pixels, this.pixels, local12, local14, local46, local130, width, height, local26, local32, local7); + } + + @OriginalMember(owner = "client!am", name = "d", descriptor = "(II)V") + @Override + public final void renderHorizontalFlip(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + arg0 += this.anInt1860 - this.width - this.anInt1863; + arg1 += this.anInt1861; + @Pc(21) int local21 = arg0 + arg1 * SoftwareRaster.width; + @Pc(26) int local26 = this.width - 1; + @Pc(29) int local29 = this.height; + @Pc(32) int local32 = this.width; + @Pc(36) int local36 = SoftwareRaster.width - local32; + @Pc(40) int local40 = local32 + local32; + @Pc(47) int local47; + if (arg1 < SoftwareRaster.clipTop) { + local47 = SoftwareRaster.clipTop - arg1; + local29 -= local47; + arg1 = SoftwareRaster.clipTop; + local26 += local47 * local32; + local21 += local47 * SoftwareRaster.width; + } + if (arg1 + local29 > SoftwareRaster.clipBottom) { + local29 -= arg1 + local29 - SoftwareRaster.clipBottom; + } + if (arg0 < SoftwareRaster.clipLeft) { + local47 = SoftwareRaster.clipLeft - arg0; + local32 -= local47; + arg0 = SoftwareRaster.clipLeft; + local26 -= local47; + local21 += local47; + local40 -= local47; + local36 += local47; + } + if (arg0 + local32 > SoftwareRaster.clipRight) { + local47 = arg0 + local32 - SoftwareRaster.clipRight; + local32 -= local47; + local40 -= local47; + local36 += local47; + } + if (local32 > 0 && local29 > 0) { + method318(SoftwareRaster.pixels, this.pixels, local26, local21, local32, local29, local36, local40); + } + } + + @OriginalMember(owner = "client!am", name = "a", descriptor = "(III)V") + @Override + public final void renderAlpha(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int alpha) { + x += this.anInt1863; + y += this.anInt1861; + @Pc(15) int local15 = x + y * SoftwareRaster.width; + @Pc(17) int local17 = 0; + @Pc(20) int local20 = this.height; + @Pc(23) int local23 = this.width; + @Pc(27) int local27 = SoftwareRaster.width - local23; + @Pc(29) int local29 = 0; + @Pc(36) int local36; + if (y < SoftwareRaster.clipTop) { + local36 = SoftwareRaster.clipTop - y; + local20 -= local36; + y = SoftwareRaster.clipTop; + local17 = local36 * local23; + local15 += local36 * SoftwareRaster.width; + } + if (y + local20 > SoftwareRaster.clipBottom) { + local20 -= y + local20 - SoftwareRaster.clipBottom; + } + if (x < SoftwareRaster.clipLeft) { + local36 = SoftwareRaster.clipLeft - x; + local23 -= local36; + x = SoftwareRaster.clipLeft; + local17 += local36; + local15 += local36; + local29 = local36; + local27 += local36; + } + if (x + local23 > SoftwareRaster.clipRight) { + local36 = x + local23 - SoftwareRaster.clipRight; + local23 -= local36; + local29 += local36; + local27 += local36; + } + if (local23 > 0 && local20 > 0) { + method320(SoftwareRaster.pixels, this.pixels, local17, local15, local23, local20, local27, local29, alpha); + } + } +} diff --git a/client/src/main/java/rt4/SoftwareFont.java b/client/src/main/java/rt4/SoftwareFont.java new file mode 100644 index 0000000..ad15b1f --- /dev/null +++ b/client/src/main/java/rt4/SoftwareFont.java @@ -0,0 +1,225 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!dd") +public final class SoftwareFont extends Font { + + @OriginalMember(owner = "client!dd", name = "Eb", descriptor = "[[B") + private byte[][] pixels = new byte[256][]; + + @OriginalMember(owner = "client!dd", name = "", descriptor = "([B)V") + public SoftwareFont(@OriginalArg(0) byte[] arg0) { + super(arg0); + } + + @OriginalMember(owner = "client!dd", name = "", descriptor = "([B[I[I[I[I[[B)V") + public SoftwareFont(@OriginalArg(0) byte[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int[] arg2, @OriginalArg(3) int[] arg3, @OriginalArg(4) int[] arg4, @OriginalArg(5) byte[][] arg5) { + super(arg0, arg1, arg2, arg3, arg4); + this.pixels = arg5; + } + + @OriginalMember(owner = "client!dd", name = "a", descriptor = "([I[BIIIIIII)V") + public static void blit(@OriginalArg(0) int[] arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8) { + @Pc(4) int local4 = -(arg5 >> 2); + @Pc(9) int local9 = -(arg5 & 0x3); + for (@Pc(12) int local12 = -arg6; local12 < 0; local12++) { + @Pc(16) int local16; + for (local16 = local4; local16 < 0; local16++) { + if (arg1[arg3++] == 0) { + arg4++; + } else { + arg0[arg4++] = arg2; + } + if (arg1[arg3++] == 0) { + arg4++; + } else { + arg0[arg4++] = arg2; + } + if (arg1[arg3++] == 0) { + arg4++; + } else { + arg0[arg4++] = arg2; + } + if (arg1[arg3++] == 0) { + arg4++; + } else { + arg0[arg4++] = arg2; + } + } + for (local16 = local9; local16 < 0; local16++) { + if (arg1[arg3++] == 0) { + arg4++; + } else { + arg0[arg4++] = arg2; + } + } + arg4 += arg7; + arg3 += arg8; + } + } + + @OriginalMember(owner = "client!dd", name = "a", descriptor = "([I[BIIIIIIIII[I[I)V") + public static void blitMasked(@OriginalArg(0) int[] arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9, @OriginalArg(10) int arg10, @OriginalArg(11) int[] arg11, @OriginalArg(12) int[] arg12) { + @Pc(3) int local3 = arg2 - SoftwareRaster.clipLeft; + @Pc(7) int local7 = arg3 - SoftwareRaster.clipTop; + for (@Pc(9) int local9 = local7; local9 < local7 + arg5; local9++) { + @Pc(18) int local18 = arg11[local9]; + @Pc(22) int local22 = arg12[local9]; + @Pc(24) int local24 = arg4; + @Pc(31) int local31; + if (local3 > local18) { + local31 = local3 - local18; + if (local31 >= local22) { + arg7 += arg4 + arg10; + arg8 += arg4 + arg9; + continue; + } + local22 -= local31; + } else { + local31 = local18 - local3; + if (local31 >= arg4) { + arg7 += arg4 + arg10; + arg8 += arg4 + arg9; + continue; + } + arg7 += local31; + local24 = arg4 - local31; + arg8 += local31; + } + local31 = 0; + if (local24 < local22) { + local22 = local24; + } else { + local31 = local24 - local22; + } + for (@Pc(99) int local99 = -local22; local99 < 0; local99++) { + if (arg1[arg7++] == 0) { + arg8++; + } else { + SoftwareRaster.pixels[arg8++] = arg6; + } + } + arg7 += local31 + arg10; + arg8 += local31 + arg9; + } + } + + @OriginalMember(owner = "client!dd", name = "a", descriptor = "([I[BIIIIIIII)V") + public static void blitTransparent(@OriginalArg(0) int[] arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9) { + @Pc(17) int local17 = ((arg2 & 0xFF00FF) * arg9 & 0xFF00FF00) + ((arg2 & 0xFF00) * arg9 & 0xFF0000) >> 8; + @Pc(21) int local21 = 256 - arg9; + for (@Pc(24) int local24 = -arg6; local24 < 0; local24++) { + for (@Pc(29) int local29 = -arg5; local29 < 0; local29++) { + if (arg1[arg3++] == 0) { + arg4++; + } else { + @Pc(40) int local40 = arg0[arg4]; + arg0[arg4++] = (((local40 & 0xFF00FF) * local21 & 0xFF00FF00) + ((local40 & 0xFF00) * local21 & 0xFF0000) >> 8) + local17; + } + } + arg4 += arg7; + arg3 += arg8; + } + } + + @OriginalMember(owner = "client!jh", name = "a", descriptor = "(IILclient!ve;Lclient!ve;I)Lclient!dd;") + public static SoftwareFont method2412(@OriginalArg(0) int arg0, @OriginalArg(2) Js5 arg1, @OriginalArg(3) Js5 arg2) { + return SpriteLoader.decode(arg2, 0, arg0) ? method4635(arg1.fetchFile(arg0, 0)) : null; + } + + @OriginalMember(owner = "client!j", name = "a", descriptor = "([BI)Lclient!dd;") + public static SoftwareFont method4635(@OriginalArg(0) byte[] arg0) { + if (arg0 == null) { + return null; + } else { + @Pc(22) SoftwareFont local22 = new SoftwareFont(arg0, SpriteLoader.xOffsets, SpriteLoader.yOffsets, SpriteLoader.innerWidths, SpriteLoader.innerHeights, SpriteLoader.pixels); + SpriteLoader.clear(); + return local22; + } + } + + @OriginalMember(owner = "client!dd", name = "a", descriptor = "(IIIIIIIZ)V") + @Override + protected final void renderGlyphTransparent(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6) { + @Pc(5) int local5 = arg1 + arg2 * SoftwareRaster.width; + @Pc(9) int local9 = SoftwareRaster.width - arg3; + @Pc(11) int local11 = 0; + @Pc(13) int local13 = 0; + @Pc(20) int local20; + if (arg2 < SoftwareRaster.clipTop) { + local20 = SoftwareRaster.clipTop - arg2; + arg4 -= local20; + arg2 = SoftwareRaster.clipTop; + local13 = local20 * arg3; + local5 += local20 * SoftwareRaster.width; + } + if (arg2 + arg4 > SoftwareRaster.clipBottom) { + arg4 -= arg2 + arg4 - SoftwareRaster.clipBottom; + } + if (arg1 < SoftwareRaster.clipLeft) { + local20 = SoftwareRaster.clipLeft - arg1; + arg3 -= local20; + arg1 = SoftwareRaster.clipLeft; + local13 += local20; + local5 += local20; + local11 = local20; + local9 += local20; + } + if (arg1 + arg3 > SoftwareRaster.clipRight) { + local20 = arg1 + arg3 - SoftwareRaster.clipRight; + arg3 -= local20; + local11 += local20; + local9 += local20; + } + if (arg3 > 0 && arg4 > 0) { + blitTransparent(SoftwareRaster.pixels, this.pixels[arg0], arg5, local13, local5, arg3, arg4, local9, local11, arg6); + } + } + + @OriginalMember(owner = "client!dd", name = "a", descriptor = "(IIIIIIZ)V") + @Override + protected final void renderGlyph(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + @Pc(5) int local5 = arg1 + arg2 * SoftwareRaster.width; + @Pc(9) int local9 = SoftwareRaster.width - arg3; + @Pc(11) int local11 = 0; + @Pc(13) int local13 = 0; + @Pc(20) int local20; + if (arg2 < SoftwareRaster.clipTop) { + local20 = SoftwareRaster.clipTop - arg2; + arg4 -= local20; + arg2 = SoftwareRaster.clipTop; + local13 = local20 * arg3; + local5 += local20 * SoftwareRaster.width; + } + if (arg2 + arg4 > SoftwareRaster.clipBottom) { + arg4 -= arg2 + arg4 - SoftwareRaster.clipBottom; + } + if (arg1 < SoftwareRaster.clipLeft) { + local20 = SoftwareRaster.clipLeft - arg1; + arg3 -= local20; + arg1 = SoftwareRaster.clipLeft; + local13 += local20; + local5 += local20; + local11 = local20; + local9 += local20; + } + if (arg1 + arg3 > SoftwareRaster.clipRight) { + local20 = arg1 + arg3 - SoftwareRaster.clipRight; + arg3 -= local20; + local11 += local20; + local9 += local20; + } + if (arg3 <= 0 || arg4 <= 0) { + return; + } + if (SoftwareRaster.anIntArray295 == null) { + blit(SoftwareRaster.pixels, this.pixels[arg0], arg5, local13, local5, arg3, arg4, local9, local11); + } else { + blitMasked(SoftwareRaster.pixels, this.pixels[arg0], arg1, arg2, arg3, arg4, arg5, local13, local5, local9, local11, SoftwareRaster.anIntArray295, SoftwareRaster.anIntArray296); + } + } +} diff --git a/client/src/main/java/rt4/SoftwareIndexedSprite.java b/client/src/main/java/rt4/SoftwareIndexedSprite.java new file mode 100644 index 0000000..74b017c --- /dev/null +++ b/client/src/main/java/rt4/SoftwareIndexedSprite.java @@ -0,0 +1,430 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ek") +public final class SoftwareIndexedSprite extends IndexedSprite { + + @OriginalMember(owner = "client!ek", name = "o", descriptor = "[B") + public byte[] pixels; + + @OriginalMember(owner = "client!ek", name = "n", descriptor = "[I") + public final int[] pallet; + + @OriginalMember(owner = "client!ek", name = "", descriptor = "(IIIIII[B[I)V") + public SoftwareIndexedSprite(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) byte[] arg6, @OriginalArg(7) int[] arg7) { + this.innerWidth = arg0; + this.innerHeight = arg1; + this.xOffset = arg2; + this.yOffset = arg3; + this.width = arg4; + this.height = arg5; + this.pixels = arg6; + this.pallet = arg7; + } + + @OriginalMember(owner = "client!ek", name = "", descriptor = "(III)V") + public SoftwareIndexedSprite(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + this.innerWidth = this.width = arg0; + this.innerHeight = this.height = arg1; + this.xOffset = this.yOffset = 0; + this.pixels = new byte[arg0 * arg1]; + this.pallet = new int[arg2]; + } + + @OriginalMember(owner = "client!ek", name = "a", descriptor = "([I[B[IIIIIIIIII)V") + public static void method1391(@OriginalArg(0) int[] arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int[] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9, @OriginalArg(10) int arg10, @OriginalArg(11) int arg11) { + @Pc(1) int local1 = arg3; + for (@Pc(4) int local4 = -arg8; local4 < 0; local4++) { + @Pc(12) int local12 = (arg4 >> 16) * arg11; + for (@Pc(15) int local15 = -arg7; local15 < 0; local15++) { + @Pc(25) byte local25 = arg1[(arg3 >> 16) + local12]; + if (local25 == 0) { + arg5++; + } else { + arg0[arg5++] = arg2[local25 & 0xFF]; + } + arg3 += arg9; + } + arg4 += arg10; + arg3 = local1; + arg5 += arg6; + } + } + + @OriginalMember(owner = "client!ek", name = "a", descriptor = "([I[B[IIIIIIII)V") + public static void method1393(@OriginalArg(0) int[] arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int[] arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8) { + @Pc(4) int local4 = -(arg5 >> 2); + @Pc(9) int local9 = -(arg5 & 0x3); + for (@Pc(12) int local12 = -arg6; local12 < 0; local12++) { + @Pc(16) int local16; + @Pc(23) byte local23; + for (local16 = local4; local16 < 0; local16++) { + local23 = arg1[arg3++]; + if (local23 == 0) { + arg4++; + } else { + arg0[arg4++] = arg2[local23 & 0xFF]; + } + local23 = arg1[arg3++]; + if (local23 == 0) { + arg4++; + } else { + arg0[arg4++] = arg2[local23 & 0xFF]; + } + local23 = arg1[arg3++]; + if (local23 == 0) { + arg4++; + } else { + arg0[arg4++] = arg2[local23 & 0xFF]; + } + local23 = arg1[arg3++]; + if (local23 == 0) { + arg4++; + } else { + arg0[arg4++] = arg2[local23 & 0xFF]; + } + } + for (local16 = local9; local16 < 0; local16++) { + local23 = arg1[arg3++]; + if (local23 == 0) { + arg4++; + } else { + arg0[arg4++] = arg2[local23 & 0xFF]; + } + } + arg4 += arg7; + arg3 += arg8; + } + } + + @OriginalMember(owner = "client!ek", name = "a", descriptor = "([I[B[IIIIIIIIIII)V") + public static void method1394(@OriginalArg(0) int[] arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int[] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9, @OriginalArg(10) int arg10, @OriginalArg(11) int arg11, @OriginalArg(12) int arg12) { + @Pc(1) int local1 = arg3; + @Pc(7) int local7 = arg12 >> 16 & 0xFF; + @Pc(13) int local13 = arg12 >> 8 & 0xFF; + @Pc(17) int local17 = arg12 & 0xFF; + for (@Pc(20) int local20 = -arg8; local20 < 0; local20++) { + @Pc(28) int local28 = (arg4 >> 16) * arg11; + for (@Pc(31) int local31 = -arg7; local31 < 0; local31++) { + @Pc(41) byte local41 = arg1[(arg3 >> 16) + local28]; + if (local41 == 0) { + arg5++; + } else { + @Pc(49) int local49 = arg2[local41 & 0xFF]; + @Pc(55) int local55 = local49 >> 16 & 0xFF; + @Pc(61) int local61 = local49 >> 8 & 0xFF; + @Pc(65) int local65 = local49 & 0xFF; + arg0[arg5++] = (local55 * local7 >> 8 << 16) + (local61 * local13 >> 8 << 8) + (local65 * local17 >> 8); + } + arg3 += arg9; + } + arg4 += arg10; + arg3 = local1; + arg5 += arg6; + } + } + + @OriginalMember(owner = "client!ek", name = "b", descriptor = "([I[B[IIIIIIII)V") + public static void method1397(@OriginalArg(0) int[] arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int[] arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9) { + @Pc(3) int local3 = 256 - arg9; + for (@Pc(6) int local6 = -arg6; local6 < 0; local6++) { + for (@Pc(11) int local11 = -arg5; local11 < 0; local11++) { + @Pc(18) byte local18 = arg1[arg3++]; + if (local18 == 0) { + arg4++; + } else { + @Pc(26) int local26 = arg2[local18 & 0xFF]; + @Pc(30) int local30 = arg0[arg4]; + arg0[arg4++] = ((local26 & 0xFF00FF) * arg9 + (local30 & 0xFF00FF) * local3 & 0xFF00FF00) + ((local26 & 0xFF00) * arg9 + (local30 & 0xFF00) * local3 & 0xFF0000) >> 8; + } + } + arg4 += arg7; + arg3 += arg8; + } + } + + @OriginalMember(owner = "client!ek", name = "b", descriptor = "(III)V") + public final void adjustPalette(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + for (@Pc(1) int local1 = 0; local1 < this.pallet.length; local1++) { + @Pc(15) int local15 = this.pallet[local1] >> 16 & 0xFF; + local15 += arg0; + if (local15 < 0) { + local15 = 0; + } else if (local15 > 255) { + local15 = 255; + } + @Pc(38) int local38 = this.pallet[local1] >> 8 & 0xFF; + local38 += arg1; + if (local38 < 0) { + local38 = 0; + } else if (local38 > 255) { + local38 = 255; + } + @Pc(59) int local59 = this.pallet[local1] & 0xFF; + local59 += arg2; + if (local59 < 0) { + local59 = 0; + } else if (local59 > 255) { + local59 = 255; + } + this.pallet[local1] = (local15 << 16) + (local38 << 8) + local59; + } + } + + @OriginalMember(owner = "client!ek", name = "a", descriptor = "(IIIII)V") + public final void method1390(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + @Pc(2) int local2 = this.width; + @Pc(5) int local5 = this.height; + @Pc(7) int local7 = 0; + @Pc(9) int local9 = 0; + @Pc(12) int local12 = this.innerWidth; + @Pc(15) int local15 = this.innerHeight; + @Pc(21) int local21 = (local12 << 16) / arg2; + @Pc(27) int local27 = (local15 << 16) / arg3; + @Pc(41) int local41; + if (this.xOffset > 0) { + local41 = ((this.xOffset << 16) + local21 - 1) / local21; + arg0 += local41; + local7 = local41 * local21 - (this.xOffset << 16); + } + if (this.yOffset > 0) { + local41 = ((this.yOffset << 16) + local27 - 1) / local27; + arg1 += local41; + local9 = local41 * local27 - (this.yOffset << 16); + } + if (local2 < local12) { + arg2 = ((local2 << 16) + local21 - local7 - 1) / local21; + } + if (local5 < local15) { + arg3 = ((local5 << 16) + local27 - local9 - 1) / local27; + } + local41 = arg0 + arg1 * SoftwareRaster.width; + @Pc(125) int local125 = SoftwareRaster.width - arg2; + if (arg1 + arg3 > SoftwareRaster.clipBottom) { + arg3 -= arg1 + arg3 - SoftwareRaster.clipBottom; + } + @Pc(145) int local145; + if (arg1 < SoftwareRaster.clipTop) { + local145 = SoftwareRaster.clipTop - arg1; + arg3 -= local145; + local41 += local145 * SoftwareRaster.width; + local9 += local27 * local145; + } + if (arg0 + arg2 > SoftwareRaster.clipRight) { + local145 = arg0 + arg2 - SoftwareRaster.clipRight; + arg2 -= local145; + local125 += local145; + } + if (arg0 < SoftwareRaster.clipLeft) { + local145 = SoftwareRaster.clipLeft - arg0; + arg2 -= local145; + local41 += local145; + local7 += local21 * local145; + local125 += local145; + } + method1394(SoftwareRaster.pixels, this.pixels, this.pallet, local7, local9, local41, local125, arg2, arg3, local21, local27, local2, arg4); + } + + @OriginalMember(owner = "client!ek", name = "a", descriptor = "()V") + public final void clear() { + @Pc(1) int local1 = 0; + @Pc(7) int local7 = this.pixels.length - 7; + while (local1 < local7) { + this.pixels[local1++] = 0; + this.pixels[local1++] = 0; + this.pixels[local1++] = 0; + this.pixels[local1++] = 0; + this.pixels[local1++] = 0; + this.pixels[local1++] = 0; + this.pixels[local1++] = 0; + this.pixels[local1++] = 0; + } + local7 += 7; + while (local1 < local7) { + this.pixels[local1++] = 0; + } + } + + @OriginalMember(owner = "client!ek", name = "b", descriptor = "()V") + public final void flipVertical() { + @Pc(6) byte[] local6 = new byte[this.width * this.height]; + @Pc(8) int local8 = 0; + @Pc(10) int local10; + for (local10 = 0; local10 < this.width; local10++) { + for (@Pc(19) int local19 = this.height - 1; local19 >= 0; local19--) { + local6[local8++] = this.pixels[local10 + local19 * this.width]; + } + } + this.pixels = local6; + local10 = this.yOffset; + this.yOffset = this.xOffset; + this.xOffset = this.innerHeight - this.height - local10; + local10 = this.height; + this.height = this.width; + this.width = local10; + local10 = this.innerHeight; + this.innerHeight = this.innerWidth; + this.innerWidth = local10; + } + + @OriginalMember(owner = "client!ek", name = "a", descriptor = "(III)V") + @Override + public final void method3335(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + arg0 += this.xOffset; + arg1 += this.yOffset; + @Pc(15) int local15 = arg0 + arg1 * SoftwareRaster.width; + @Pc(17) int local17 = 0; + @Pc(20) int local20 = this.height; + @Pc(23) int local23 = this.width; + @Pc(27) int local27 = SoftwareRaster.width - local23; + @Pc(29) int local29 = 0; + @Pc(36) int local36; + if (arg1 < SoftwareRaster.clipTop) { + local36 = SoftwareRaster.clipTop - arg1; + local20 -= local36; + arg1 = SoftwareRaster.clipTop; + local17 = local36 * local23; + local15 += local36 * SoftwareRaster.width; + } + if (arg1 + local20 > SoftwareRaster.clipBottom) { + local20 -= arg1 + local20 - SoftwareRaster.clipBottom; + } + if (arg0 < SoftwareRaster.clipLeft) { + local36 = SoftwareRaster.clipLeft - arg0; + local23 -= local36; + arg0 = SoftwareRaster.clipLeft; + local17 += local36; + local15 += local36; + local29 = local36; + local27 += local36; + } + if (arg0 + local23 > SoftwareRaster.clipRight) { + local36 = arg0 + local23 - SoftwareRaster.clipRight; + local23 -= local36; + local29 += local36; + local27 += local36; + } + if (local23 > 0 && local20 > 0) { + method1397(SoftwareRaster.pixels, this.pixels, this.pallet, local17, local15, local23, local20, local27, local29, arg2); + } + } + + @OriginalMember(owner = "client!ek", name = "c", descriptor = "()V") + public final void trim() { + if (this.width == this.innerWidth && this.height == this.innerHeight) { + return; + } + @Pc(17) byte[] local17 = new byte[this.innerWidth * this.innerHeight]; + @Pc(19) int local19 = 0; + for (@Pc(21) int local21 = 0; local21 < this.height; local21++) { + for (@Pc(27) int local27 = 0; local27 < this.width; local27++) { + local17[local27 + this.xOffset + (local21 + this.yOffset) * this.innerWidth] = this.pixels[local19++]; + } + } + this.pixels = local17; + this.width = this.innerWidth; + this.height = this.innerHeight; + this.xOffset = 0; + this.yOffset = 0; + } + + @OriginalMember(owner = "client!ek", name = "a", descriptor = "(IIII)V") + public final void method1398(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(2) int local2 = this.width; + @Pc(5) int local5 = this.height; + @Pc(7) int local7 = 0; + @Pc(9) int local9 = 0; + @Pc(12) int local12 = this.innerWidth; + @Pc(15) int local15 = this.innerHeight; + @Pc(21) int local21 = (local12 << 16) / arg2; + @Pc(27) int local27 = (local15 << 16) / arg3; + @Pc(41) int local41; + if (this.xOffset > 0) { + local41 = ((this.xOffset << 16) + local21 - 1) / local21; + arg0 += local41; + local7 = local41 * local21 - (this.xOffset << 16); + } + if (this.yOffset > 0) { + local41 = ((this.yOffset << 16) + local27 - 1) / local27; + arg1 += local41; + local9 = local41 * local27 - (this.yOffset << 16); + } + if (local2 < local12) { + arg2 = ((local2 << 16) + local21 - local7 - 1) / local21; + } + if (local5 < local15) { + arg3 = ((local5 << 16) + local27 - local9 - 1) / local27; + } + local41 = arg0 + arg1 * SoftwareRaster.width; + @Pc(125) int local125 = SoftwareRaster.width - arg2; + if (arg1 + arg3 > SoftwareRaster.clipBottom) { + arg3 -= arg1 + arg3 - SoftwareRaster.clipBottom; + } + @Pc(145) int local145; + if (arg1 < SoftwareRaster.clipTop) { + local145 = SoftwareRaster.clipTop - arg1; + arg3 -= local145; + local41 += local145 * SoftwareRaster.width; + local9 += local27 * local145; + } + if (arg0 + arg2 > SoftwareRaster.clipRight) { + local145 = arg0 + arg2 - SoftwareRaster.clipRight; + arg2 -= local145; + local125 += local145; + } + if (arg0 < SoftwareRaster.clipLeft) { + local145 = SoftwareRaster.clipLeft - arg0; + arg2 -= local145; + local41 += local145; + local7 += local21 * local145; + local125 += local145; + } + method1391(SoftwareRaster.pixels, this.pixels, this.pallet, local7, local9, local41, local125, arg2, arg3, local21, local27, local2); + } + + @OriginalMember(owner = "client!ek", name = "a", descriptor = "(II)V") + @Override + public final void renderTransparent(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + arg0 += this.xOffset; + arg1 += this.yOffset; + @Pc(15) int local15 = arg0 + arg1 * SoftwareRaster.width; + @Pc(17) int local17 = 0; + @Pc(20) int local20 = this.height; + @Pc(23) int local23 = this.width; + @Pc(27) int local27 = SoftwareRaster.width - local23; + @Pc(29) int local29 = 0; + @Pc(36) int local36; + if (arg1 < SoftwareRaster.clipTop) { + local36 = SoftwareRaster.clipTop - arg1; + local20 -= local36; + arg1 = SoftwareRaster.clipTop; + local17 = local36 * local23; + local15 += local36 * SoftwareRaster.width; + } + if (arg1 + local20 > SoftwareRaster.clipBottom) { + local20 -= arg1 + local20 - SoftwareRaster.clipBottom; + } + if (arg0 < SoftwareRaster.clipLeft) { + local36 = SoftwareRaster.clipLeft - arg0; + local23 -= local36; + arg0 = SoftwareRaster.clipLeft; + local17 += local36; + local15 += local36; + local29 = local36; + local27 += local36; + } + if (arg0 + local23 > SoftwareRaster.clipRight) { + local36 = arg0 + local23 - SoftwareRaster.clipRight; + local23 -= local36; + local29 += local36; + local27 += local36; + } + if (local23 > 0 && local20 > 0) { + method1393(SoftwareRaster.pixels, this.pixels, this.pallet, local17, local15, local23, local20, local27, local29); + } + } +} diff --git a/client/src/main/java/rt4/SoftwareModel.java b/client/src/main/java/rt4/SoftwareModel.java new file mode 100644 index 0000000..ab42e89 --- /dev/null +++ b/client/src/main/java/rt4/SoftwareModel.java @@ -0,0 +1,2528 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!w") +public final class SoftwareModel extends Model { + + @OriginalMember(owner = "client!w", name = "nb", descriptor = "Lclient!w;") + public static final SoftwareModel aClass8_Sub1_Sub2_3 = new SoftwareModel(); + + @OriginalMember(owner = "client!w", name = "ab", descriptor = "Lclient!w;") + public static final SoftwareModel aClass8_Sub1_Sub2_1 = new SoftwareModel(); + + @OriginalMember(owner = "client!w", name = "eb", descriptor = "Lclient!w;") + public static final SoftwareModel aClass8_Sub1_Sub2_2 = new SoftwareModel(); + + @OriginalMember(owner = "client!w", name = "pb", descriptor = "[Z") + public static final boolean[] projectTriangle = new boolean[4096]; + + @OriginalMember(owner = "client!w", name = "qb", descriptor = "[I") + public static final int[] priorityTriangleCounts = new int[12]; + + @OriginalMember(owner = "client!w", name = "rb", descriptor = "[I") + public static final int[] anIntArray542 = new int[10]; + + @OriginalMember(owner = "client!w", name = "sb", descriptor = "[I") + public static final int[] vertexDepth = new int[4096]; + + @OriginalMember(owner = "client!w", name = "tb", descriptor = "[I") + public static final int[] projectSceneZ = new int[4096]; + + @OriginalMember(owner = "client!w", name = "ub", descriptor = "[I") + public static final int[] normalTrianglePriority = new int[4096]; + + @OriginalMember(owner = "client!w", name = "xb", descriptor = "[I") + public static final int[] anIntArray547 = new int[10]; + + @OriginalMember(owner = "client!w", name = "Ab", descriptor = "[I") + public static final int[] projectSceneY = new int[4096]; + + @OriginalMember(owner = "client!w", name = "Eb", descriptor = "[I") + public static final int[] vertexScreenY = new int[4096]; + + @OriginalMember(owner = "client!w", name = "Ib", descriptor = "[I") + public static final int[] anIntArray553 = new int[10]; + + @OriginalMember(owner = "client!w", name = "Jb", descriptor = "[Z") + public static final boolean[] testTriangleX = new boolean[4096]; + + @OriginalMember(owner = "client!w", name = "Kb", descriptor = "[[I") + public static final int[][] priorityTriangles = new int[12][4096]; + + @OriginalMember(owner = "client!w", name = "Nb", descriptor = "[I") + public static final int[] highTrianglePriority = new int[4096]; + + @OriginalMember(owner = "client!w", name = "Pb", descriptor = "[I") + public static final int[] vertexScreenX = new int[4096]; + + @OriginalMember(owner = "client!w", name = "Qb", descriptor = "[I") + public static final int[] lowTrianglePriority = new int[12]; + + @OriginalMember(owner = "client!w", name = "Ub", descriptor = "[I") + public static final int[] projectSceneX = new int[4096]; + + @OriginalMember(owner = "client!w", name = "Wb", descriptor = "[I") + public static final int[] anIntArray561 = new int[8192]; + + @OriginalMember(owner = "client!w", name = "vb", descriptor = "[[I") + public static int[][] anIntArrayArray43; + + @OriginalMember(owner = "client!w", name = "Ob", descriptor = "Z") + public static boolean aBoolean307 = false; + + @OriginalMember(owner = "client!w", name = "Lb", descriptor = "[I") + public static int[] anIntArray554 = new int[1]; + + @OriginalMember(owner = "client!w", name = "Vb", descriptor = "[S") + public static short[] aShortArray95 = new short[1]; + + @OriginalMember(owner = "client!w", name = "Fb", descriptor = "[B") + public static byte[] aByteArray78 = new byte[1]; + + @OriginalMember(owner = "client!w", name = "Tb", descriptor = "[I") + public static int[] anIntArray559 = new int[1]; + + @OriginalMember(owner = "client!w", name = "wb", descriptor = "[I") + public static int[] anIntArray546 = new int[1]; + + @OriginalMember(owner = "client!w", name = "Mb", descriptor = "I") + public static int anInt5792; + + @OriginalMember(owner = "client!w", name = "Gb", descriptor = "I") + public static int anInt5791; + + @OriginalMember(owner = "client!w", name = "Rb", descriptor = "I") + public static int anInt5793; + + @OriginalMember(owner = "client!w", name = "Db", descriptor = "[I") + public static int[] anIntArray550; + + @OriginalMember(owner = "client!w", name = "Bb", descriptor = "[I") + public static int[] depthTriangles; + + @OriginalMember(owner = "client!w", name = "yb", descriptor = "[[I") + public static int[][] anIntArrayArray44; + + @OriginalMember(owner = "client!w", name = "Sb", descriptor = "[I") + public static int[] anIntArray558; + + @OriginalMember(owner = "client!w", name = "Hb", descriptor = "[I") + public static int[] anIntArray552; + + @OriginalMember(owner = "client!w", name = "cb", descriptor = "[I") + public static int[] anIntArray535 = new int[1]; + + @OriginalMember(owner = "client!w", name = "db", descriptor = "[I") + public static int[] anIntArray536 = new int[1]; + + @OriginalMember(owner = "client!w", name = "fb", descriptor = "[B") + public static byte[] aByteArray76 = new byte[1]; + + @OriginalMember(owner = "client!w", name = "hb", descriptor = "[I") + public static int[] anIntArray537 = new int[1]; + + @OriginalMember(owner = "client!w", name = "ib", descriptor = "[S") + public static short[] aShortArray93 = new short[1]; + + @OriginalMember(owner = "client!w", name = "jb", descriptor = "[I") + public static int[] anIntArray538 = new int[1]; + + @OriginalMember(owner = "client!w", name = "kb", descriptor = "[S") + public static short[] aShortArray94 = new short[1]; + + @OriginalMember(owner = "client!w", name = "lb", descriptor = "[I") + public static int[] anIntArray539 = new int[1]; + + @OriginalMember(owner = "client!w", name = "mb", descriptor = "[B") + public static byte[] aByteArray77 = new byte[1]; + + @OriginalMember(owner = "client!w", name = "ob", descriptor = "[I") + public static int[] anIntArray540 = new int[1]; + + @OriginalMember(owner = "client!w", name = "zb", descriptor = "Z") + public static boolean aBoolean306 = false; + + @OriginalMember(owner = "client!w", name = "Cb", descriptor = "I") + public static int anInt5790 = 0; + + @OriginalMember(owner = "client!w", name = "t", descriptor = "[S") + private short[] triangleColors; + + @OriginalMember(owner = "client!w", name = "u", descriptor = "[[I") + private int[][] boneVertices; + + @OriginalMember(owner = "client!w", name = "v", descriptor = "[S") + private short[] triangleSources; + + @OriginalMember(owner = "client!w", name = "w", descriptor = "[[I") + private int[][] boneTriangles; + + @OriginalMember(owner = "client!w", name = "x", descriptor = "S") + private short minX; + + @OriginalMember(owner = "client!w", name = "y", descriptor = "[I") + private int[] anIntArray523; + + @OriginalMember(owner = "client!w", name = "A", descriptor = "[I") + private int[] triangleVertexB; + + @OriginalMember(owner = "client!w", name = "C", descriptor = "S") + private short maxX; + + @OriginalMember(owner = "client!w", name = "D", descriptor = "S") + private short minZ; + + @OriginalMember(owner = "client!w", name = "E", descriptor = "[B") + private byte[] trianglePriorities; + + @OriginalMember(owner = "client!w", name = "F", descriptor = "[I") + private int[] textureFacesN; + + @OriginalMember(owner = "client!w", name = "G", descriptor = "[I") + private int[] textureFacesP; + + @OriginalMember(owner = "client!w", name = "H", descriptor = "[I") + public int[] vertexY; + + @OriginalMember(owner = "client!w", name = "I", descriptor = "S") + private short lengthXZ; + + @OriginalMember(owner = "client!w", name = "J", descriptor = "[I") + public int[] vertexX; + + @OriginalMember(owner = "client!w", name = "K", descriptor = "S") + private short aShort35; + + @OriginalMember(owner = "client!w", name = "L", descriptor = "[I") + private int[] triangleVertexC; + + @OriginalMember(owner = "client!w", name = "M", descriptor = "S") + private short maxZ; + + @OriginalMember(owner = "client!w", name = "O", descriptor = "[I") + private int[] textureFacesM; + + @OriginalMember(owner = "client!w", name = "Q", descriptor = "S") + private short maxY; + + @OriginalMember(owner = "client!w", name = "R", descriptor = "[S") + private short[] vertexSources; + + @OriginalMember(owner = "client!w", name = "S", descriptor = "S") + private short minY; + + @OriginalMember(owner = "client!w", name = "T", descriptor = "[I") + public int[] vertexZ; + + @OriginalMember(owner = "client!w", name = "U", descriptor = "[I") + private int[] triangleInfo; + + @OriginalMember(owner = "client!w", name = "W", descriptor = "[I") + private int[] anIntArray533; + + @OriginalMember(owner = "client!w", name = "X", descriptor = "[B") + private byte[] aByteArray74; + + @OriginalMember(owner = "client!w", name = "Z", descriptor = "[I") + private int[] triangleVertexA; + + @OriginalMember(owner = "client!w", name = "bb", descriptor = "[B") + private byte[] triangleAlpha; + + @OriginalMember(owner = "client!w", name = "gb", descriptor = "[S") + private short[] aShortArray92; + + @OriginalMember(owner = "client!w", name = "z", descriptor = "B") + private byte priority = 0; + + @OriginalMember(owner = "client!w", name = "V", descriptor = "Z") + public boolean boundsValid = false; + + @OriginalMember(owner = "client!w", name = "P", descriptor = "I") + public int vertexCount = 0; + + @OriginalMember(owner = "client!w", name = "N", descriptor = "I") + private int triangleCount = 0; + + @OriginalMember(owner = "client!w", name = "Y", descriptor = "I") + private int anInt5789 = 0; + + @OriginalMember(owner = "client!w", name = "B", descriptor = "Z") + private boolean aBoolean304 = false; + + static { + if (aBoolean307) { + anIntArray550 = new int[4096]; + depthTriangles = new int[4096]; + } else { + anIntArray558 = new int[1600]; + anIntArrayArray44 = new int[1600][64]; + anIntArray552 = new int[32]; + anIntArrayArray43 = new int[32][512]; + } + } + + @OriginalMember(owner = "client!w", name = "", descriptor = "()V") + public SoftwareModel() { + } + + @OriginalMember(owner = "client!w", name = "", descriptor = "(Lclient!gb;IIIII)V") + public SoftwareModel(@OriginalArg(0) RawModel model, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + model.calculateNormals(); + model.createBones(); + this.vertexCount = model.vertexCount; + this.vertexX = model.vertexX; + this.vertexY = model.vertexY; + this.vertexZ = model.vertexZ; + this.triangleCount = model.triangleCount; + this.triangleVertexA = model.triangleVertexA; + this.triangleVertexB = model.triangleVertexB; + this.triangleVertexC = model.triangleVertexC; + this.trianglePriorities = model.trianglePriorities; + this.triangleAlpha = model.triangleAlpha; + this.priority = model.priority; + this.triangleColors = model.triangleColors; + this.boneVertices = model.boneVertices; + this.boneTriangles = model.boneTriangles; + this.triangleSources = model.triangleSources; + this.vertexSources = model.vertexSources; + @Pc(102) int local102 = (int) Math.sqrt(arg3 * arg3 + arg4 * arg4 + arg5 * arg5); + @Pc(108) int local108 = arg2 * local102 >> 8; + this.anIntArray533 = new int[this.triangleCount]; + this.anIntArray523 = new int[this.triangleCount]; + this.triangleInfo = new int[this.triangleCount]; + @Pc(133) int i; + if (model.triangleTextures == null) { + this.aShortArray92 = null; + } else { + this.aShortArray92 = new short[this.triangleCount]; + for (i = 0; i < this.triangleCount; i++) { + @Pc(142) short local142 = model.triangleTextures[i]; + if (local142 != -1 && Rasteriser.textureProvider.method3236(local142)) { + this.aShortArray92[i] = local142; + } else { + this.aShortArray92[i] = -1; + } + } + } + if (model.texturedCount > 0 && model.triangleTextureIndex != null) { + @Pc(177) int[] local177 = new int[model.texturedCount]; + @Pc(179) int local179; + for (local179 = 0; local179 < this.triangleCount; local179++) { + if (model.triangleTextureIndex[local179] != -1) { + local177[model.triangleTextureIndex[local179] & 0xFF]++; + } + } + this.anInt5789 = 0; + for (local179 = 0; local179 < model.texturedCount; local179++) { + if (local177[local179] > 0 && model.textureTypes[local179] == 0) { + this.anInt5789++; + } + } + this.textureFacesP = new int[this.anInt5789]; + this.textureFacesM = new int[this.anInt5789]; + this.textureFacesN = new int[this.anInt5789]; + local179 = 0; + @Pc(248) int j; + for (j = 0; j < model.texturedCount; j++) { + if (local177[j] > 0 && model.textureTypes[j] == 0) { + this.textureFacesP[local179] = model.textureFacesP[j] & 0xFFFF; + this.textureFacesM[local179] = model.textureFacesM[j] & 0xFFFF; + this.textureFacesN[local179] = model.textureFacesN[j] & 0xFFFF; + local177[j] = local179++; + } else { + local177[j] = -1; + } + } + this.aByteArray74 = new byte[this.triangleCount]; + for (j = 0; j < this.triangleCount; j++) { + if (model.triangleTextureIndex[j] == -1) { + this.aByteArray74[j] = -1; + } else { + this.aByteArray74[j] = (byte) local177[model.triangleTextureIndex[j] & 0xFF]; + if (this.aByteArray74[j] == -1 && this.aShortArray92 != null) { + this.aShortArray92[j] = -1; + } + } + } + } + for (i = 0; i < this.triangleCount; i++) { + @Pc(366) byte local366; + if (model.triangleInfo == null) { + local366 = 0; + } else { + local366 = model.triangleInfo[i]; + } + @Pc(377) byte local377; + if (model.triangleAlpha == null) { + local377 = 0; + } else { + local377 = model.triangleAlpha[i]; + } + @Pc(388) short local388; + if (this.aShortArray92 == null) { + local388 = -1; + } else { + local388 = this.aShortArray92[i]; + } + if (local377 == -2) { + local366 = 3; + } + if (local377 == -1) { + local366 = 2; + } + @Pc(435) VertexNormal local435; + @Pc(468) int local468; + @Pc(614) TriangleNormal local614; + if (local388 == -1) { + if (local366 == 0) { + @Pc(416) int local416 = model.triangleColors[i] & 0xFFFF; + if (model.aClass57Array2 == null || model.aClass57Array2[this.triangleVertexA[i]] == null) { + local435 = model.vertexNormals[this.triangleVertexA[i]]; + } else { + local435 = model.aClass57Array2[this.triangleVertexA[i]]; + } + local468 = arg1 + (arg3 * local435.x + arg4 * local435.y + arg5 * local435.z) / (local108 * local435.magnitude) << 17; + this.anIntArray533[i] = local468 | ColorUtils.multiplyLightness2(local416, local468 >> 17); + if (model.aClass57Array2 == null || model.aClass57Array2[this.triangleVertexB[i]] == null) { + local435 = model.vertexNormals[this.triangleVertexB[i]]; + } else { + local435 = model.aClass57Array2[this.triangleVertexB[i]]; + } + local468 = arg1 + (arg3 * local435.x + arg4 * local435.y + arg5 * local435.z) / (local108 * local435.magnitude) << 17; + this.anIntArray523[i] = local468 | ColorUtils.multiplyLightness2(local416, local468 >> 17); + if (model.aClass57Array2 == null || model.aClass57Array2[this.triangleVertexC[i]] == null) { + local435 = model.vertexNormals[this.triangleVertexC[i]]; + } else { + local435 = model.aClass57Array2[this.triangleVertexC[i]]; + } + local468 = arg1 + (arg3 * local435.x + arg4 * local435.y + arg5 * local435.z) / (local108 * local435.magnitude) << 17; + this.triangleInfo[i] = local468 | ColorUtils.multiplyLightness2(local416, local468 >> 17); + } else if (local366 == 1) { + local614 = model.triangleNormals[i]; + local468 = arg1 + (arg3 * local614.anInt4769 + arg4 * local614.anInt4770 + arg5 * local614.anInt4767) / (local108 + local108 / 2) << 17; + this.anIntArray533[i] = local468 | ColorUtils.multiplyLightness2(model.triangleColors[i] & 0xFFFF, local468 >> 17); + this.triangleInfo[i] = -1; + } else if (local366 == 3) { + this.anIntArray533[i] = 128; + this.triangleInfo[i] = -1; + } else { + this.triangleInfo[i] = -2; + } + } else if (local366 == 0) { + if (model.aClass57Array2 == null || model.aClass57Array2[this.triangleVertexA[i]] == null) { + local435 = model.vertexNormals[this.triangleVertexA[i]]; + } else { + local435 = model.aClass57Array2[this.triangleVertexA[i]]; + } + local468 = arg1 + (arg3 * local435.x + arg4 * local435.y + arg5 * local435.z) / (local108 * local435.magnitude); + this.anIntArray533[i] = ColorUtils.method4582(local468); + if (model.aClass57Array2 == null || model.aClass57Array2[this.triangleVertexB[i]] == null) { + local435 = model.vertexNormals[this.triangleVertexB[i]]; + } else { + local435 = model.aClass57Array2[this.triangleVertexB[i]]; + } + local468 = arg1 + (arg3 * local435.x + arg4 * local435.y + arg5 * local435.z) / (local108 * local435.magnitude); + this.anIntArray523[i] = ColorUtils.method4582(local468); + if (model.aClass57Array2 == null || model.aClass57Array2[this.triangleVertexC[i]] == null) { + local435 = model.vertexNormals[this.triangleVertexC[i]]; + } else { + local435 = model.aClass57Array2[this.triangleVertexC[i]]; + } + local468 = arg1 + (arg3 * local435.x + arg4 * local435.y + arg5 * local435.z) / (local108 * local435.magnitude); + this.triangleInfo[i] = ColorUtils.method4582(local468); + } else if (local366 == 1) { + local614 = model.triangleNormals[i]; + local468 = arg1 + (arg3 * local614.anInt4769 + arg4 * local614.anInt4770 + arg5 * local614.anInt4767) / (local108 + local108 / 2); + this.anIntArray533[i] = ColorUtils.method4582(local468); + this.triangleInfo[i] = -1; + } else { + this.triangleInfo[i] = -2; + } + } + } + + @OriginalMember(owner = "client!w", name = "", descriptor = "([Lclient!w;I)V") + private SoftwareModel(@OriginalArg(0) SoftwareModel[] arg0, @OriginalArg(1) int arg1) { + @Pc(21) boolean local21 = false; + @Pc(23) boolean local23 = false; + @Pc(25) boolean local25 = false; + @Pc(27) boolean local27 = false; + this.vertexCount = 0; + this.triangleCount = 0; + this.anInt5789 = 0; + this.priority = -1; + @Pc(45) int local45; + @Pc(52) SoftwareModel local52; + for (local45 = 0; local45 < arg1; local45++) { + local52 = arg0[local45]; + if (local52 != null) { + this.vertexCount += local52.vertexCount; + this.triangleCount += local52.triangleCount; + this.anInt5789 += local52.anInt5789; + if (local52.trianglePriorities == null) { + if (this.priority == -1) { + this.priority = local52.priority; + } + if (this.priority != local52.priority) { + local21 = true; + } + } else { + local21 = true; + } + local23 |= local52.triangleAlpha != null; + local25 |= local52.aShortArray92 != null; + local27 |= local52.aByteArray74 != null; + } + } + this.vertexX = new int[this.vertexCount]; + this.vertexY = new int[this.vertexCount]; + this.vertexZ = new int[this.vertexCount]; + this.triangleVertexA = new int[this.triangleCount]; + this.triangleVertexB = new int[this.triangleCount]; + this.triangleVertexC = new int[this.triangleCount]; + this.anIntArray533 = new int[this.triangleCount]; + this.anIntArray523 = new int[this.triangleCount]; + this.triangleInfo = new int[this.triangleCount]; + if (local21) { + this.trianglePriorities = new byte[this.triangleCount]; + } + if (local23) { + this.triangleAlpha = new byte[this.triangleCount]; + } + if (local25) { + this.aShortArray92 = new short[this.triangleCount]; + } + if (local27) { + this.aByteArray74 = new byte[this.triangleCount]; + } + if (this.anInt5789 > 0) { + this.textureFacesP = new int[this.anInt5789]; + this.textureFacesM = new int[this.anInt5789]; + this.textureFacesN = new int[this.anInt5789]; + } + this.triangleColors = new short[this.triangleCount]; + this.vertexCount = 0; + this.triangleCount = 0; + this.anInt5789 = 0; + for (local45 = 0; local45 < arg1; local45++) { + local52 = arg0[local45]; + if (local52 != null) { + @Pc(251) int local251; + for (local251 = 0; local251 < local52.triangleCount; local251++) { + this.triangleVertexA[this.triangleCount] = local52.triangleVertexA[local251] + this.vertexCount; + this.triangleVertexB[this.triangleCount] = local52.triangleVertexB[local251] + this.vertexCount; + this.triangleVertexC[this.triangleCount] = local52.triangleVertexC[local251] + this.vertexCount; + this.anIntArray533[this.triangleCount] = local52.anIntArray533[local251]; + this.anIntArray523[this.triangleCount] = local52.anIntArray523[local251]; + this.triangleInfo[this.triangleCount] = local52.triangleInfo[local251]; + this.triangleColors[this.triangleCount] = local52.triangleColors[local251]; + if (local21) { + if (local52.trianglePriorities == null) { + this.trianglePriorities[this.triangleCount] = local52.priority; + } else { + this.trianglePriorities[this.triangleCount] = local52.trianglePriorities[local251]; + } + } + if (local23 && local52.triangleAlpha != null) { + this.triangleAlpha[this.triangleCount] = local52.triangleAlpha[local251]; + } + if (local25) { + if (local52.aShortArray92 == null) { + this.aShortArray92[this.triangleCount] = -1; + } else { + this.aShortArray92[this.triangleCount] = local52.aShortArray92[local251]; + } + } + if (local27) { + if (local52.aByteArray74 == null || local52.aByteArray74[local251] == -1) { + this.aByteArray74[this.triangleCount] = -1; + } else { + this.aByteArray74[this.triangleCount] = (byte) (local52.aByteArray74[local251] + this.anInt5789); + } + } + this.triangleCount++; + } + for (local251 = 0; local251 < local52.anInt5789; local251++) { + this.textureFacesP[this.anInt5789] = local52.textureFacesP[local251] + this.vertexCount; + this.textureFacesM[this.anInt5789] = local52.textureFacesM[local251] + this.vertexCount; + this.textureFacesN[this.anInt5789] = local52.textureFacesN[local251] + this.vertexCount; + this.anInt5789++; + } + for (local251 = 0; local251 < local52.vertexCount; local251++) { + this.vertexX[this.vertexCount] = local52.vertexX[local251]; + this.vertexY[this.vertexCount] = local52.vertexY[local251]; + this.vertexZ[this.vertexCount] = local52.vertexZ[local251]; + this.vertexCount++; + } + } + } + } + + @OriginalMember(owner = "client!w", name = "m", descriptor = "()V") + public static void method4580() { + aBoolean307 = true; + anIntArray550 = new int[4096]; + depthTriangles = new int[4096]; + anIntArray558 = null; + anIntArrayArray44 = null; + anIntArray552 = null; + anIntArrayArray43 = null; + } + + @OriginalMember(owner = "client!w", name = "o", descriptor = "()V") + public static void method4583() { + aBoolean307 = false; + anIntArray550 = null; + depthTriangles = null; + anIntArray558 = new int[1600]; + anIntArrayArray44 = new int[1600][64]; + anIntArray552 = new int[32]; + anIntArrayArray43 = new int[32][512]; + } + + @OriginalMember(owner = "client!w", name = "e", descriptor = "(I)V") + private void drawTriangle(@OriginalArg(0) int index) { + if (projectTriangle[index]) { + this.drawProjectedTriangle(index); + return; + } + @Pc(12) int a = this.triangleVertexA[index]; + @Pc(17) int b = this.triangleVertexB[index]; + @Pc(22) int c = this.triangleVertexC[index]; + Rasteriser.testX = testTriangleX[index]; + if (this.triangleAlpha == null) { + Rasteriser.alpha = 0; + } else { + Rasteriser.alpha = this.triangleAlpha[index] & 0xFF; + } + + if (this.aShortArray92 != null && this.aShortArray92[index] != -1) { + @Pc(141) int tA; + @Pc(146) int tB; + @Pc(151) int tC; + if (this.aByteArray74 == null || this.aByteArray74[index] == -1) { + tA = a; + tB = b; + tC = c; + } else { + @Pc(136) int local136 = this.aByteArray74[index] & 0xFF; + tA = this.textureFacesP[local136]; + tB = this.textureFacesM[local136]; + tC = this.textureFacesN[local136]; + } + if (this.triangleInfo[index] == -1) { + Rasteriser.fillTexturedAlphaTriangle(vertexScreenY[a], vertexScreenY[b], vertexScreenY[c], vertexScreenX[a], vertexScreenX[b], vertexScreenX[c], this.anIntArray533[index], this.anIntArray533[index], this.anIntArray533[index], projectSceneX[tA], projectSceneX[tB], projectSceneX[tC], projectSceneY[tA], projectSceneY[tB], projectSceneY[tC], projectSceneZ[tA], projectSceneZ[tB], projectSceneZ[tC], this.aShortArray92[index]); + } else { + Rasteriser.fillTexturedAlphaTriangle(vertexScreenY[a], vertexScreenY[b], vertexScreenY[c], vertexScreenX[a], vertexScreenX[b], vertexScreenX[c], this.anIntArray533[index], this.anIntArray523[index], this.triangleInfo[index], projectSceneX[tA], projectSceneX[tB], projectSceneX[tC], projectSceneY[tA], projectSceneY[tB], projectSceneY[tC], projectSceneZ[tA], projectSceneZ[tB], projectSceneZ[tC], this.aShortArray92[index]); + } + } else if (this.triangleInfo[index] == -1) { + Rasteriser.fillTriangle(vertexScreenY[a], vertexScreenY[b], vertexScreenY[c], vertexScreenX[a], vertexScreenX[b], vertexScreenX[c], Rasteriser.palette[this.anIntArray533[index] & 0xFFFF]); + } else { + Rasteriser.fillGouraudTriangle(vertexScreenY[a], vertexScreenY[b], vertexScreenY[c], vertexScreenX[a], vertexScreenX[b], vertexScreenX[c], this.anIntArray533[index] & 0xFFFF, this.anIntArray523[index] & 0xFFFF, this.triangleInfo[index] & 0xFFFF); + } + } + + @OriginalMember(owner = "client!w", name = "e", descriptor = "()V") + @Override + public void method4552() { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + this.vertexX[local1] = -this.vertexX[local1]; + this.vertexZ[local1] = -this.vertexZ[local1]; + } + this.boundsValid = false; + } + + @OriginalMember(owner = "client!w", name = "n", descriptor = "()V") + private void method4581() { + for (@Pc(1) int local1 = 0; local1 < this.triangleCount; local1++) { + @Pc(15) short local15 = this.aShortArray92 == null ? -1 : this.aShortArray92[local1]; + if (local15 == -1) { + @Pc(25) int local25 = this.triangleColors[local1] & 0xFFFF; + @Pc(38) int local38; + if (this.triangleInfo[local1] == -1) { + local38 = this.anIntArray533[local1] & 0xFFFE0000; + this.anIntArray533[local1] = local38 | ColorUtils.multiplyLightness2(local25, local38 >> 17); + } else if (this.triangleInfo[local1] != -2) { + local38 = this.anIntArray533[local1] & 0xFFFE0000; + this.anIntArray533[local1] = local38 | ColorUtils.multiplyLightness2(local25, local38 >> 17); + local38 = this.anIntArray523[local1] & 0xFFFE0000; + this.anIntArray523[local1] = local38 | ColorUtils.multiplyLightness2(local25, local38 >> 17); + local38 = this.triangleInfo[local1] & 0xFFFE0000; + this.triangleInfo[local1] = local38 | ColorUtils.multiplyLightness2(local25, local38 >> 17); + } + } + } + } + + @OriginalMember(owner = "client!w", name = "k", descriptor = "()I") + @Override + public int getMinZ() { + if (!this.boundsValid) { + this.calculateBounds(); + } + return this.minZ; + } + + @OriginalMember(owner = "client!w", name = "b", descriptor = "()I") + @Override + public int getMinY() { + if (!this.boundsValid) { + this.calculateBounds(); + } + return this.minY; + } + + @OriginalMember(owner = "client!w", name = "a", descriptor = "(ZZLclient!w;[B[S[I[I[I)Lclient!ak;") + private Model copy(@OriginalArg(0) boolean shareAlpha, @OriginalArg(1) boolean shareColors, @OriginalArg(2) SoftwareModel model, @OriginalArg(3) byte[] arg3, @OriginalArg(4) short[] arg4, @OriginalArg(5) int[] arg5, @OriginalArg(6) int[] arg6, @OriginalArg(7) int[] arg7) { + model.vertexCount = this.vertexCount; + model.triangleCount = this.triangleCount; + model.anInt5789 = this.anInt5789; + if (model.vertexX == null || model.vertexX.length < this.vertexCount) { + model.vertexX = new int[this.vertexCount + 100]; + model.vertexY = new int[this.vertexCount + 100]; + model.vertexZ = new int[this.vertexCount + 100]; + } + @Pc(43) int i; + for (i = 0; i < this.vertexCount; i++) { + model.vertexX[i] = this.vertexX[i]; + model.vertexY[i] = this.vertexY[i]; + model.vertexZ[i] = this.vertexZ[i]; + } + if (shareAlpha) { + model.triangleAlpha = this.triangleAlpha; + } else { + model.triangleAlpha = arg3; + if (this.triangleAlpha == null) { + for (i = 0; i < this.triangleCount; i++) { + model.triangleAlpha[i] = 0; + } + } else { + for (i = 0; i < this.triangleCount; i++) { + model.triangleAlpha[i] = this.triangleAlpha[i]; + } + } + } + if (shareColors) { + model.triangleColors = this.triangleColors; + model.anIntArray533 = this.anIntArray533; + model.anIntArray523 = this.anIntArray523; + model.triangleInfo = this.triangleInfo; + } else { + model.triangleColors = arg4; + model.anIntArray533 = arg5; + model.anIntArray523 = arg6; + model.triangleInfo = arg7; + for (i = 0; i < this.triangleCount; i++) { + model.triangleColors[i] = this.triangleColors[i]; + model.anIntArray533[i] = this.anIntArray533[i]; + model.anIntArray523[i] = this.anIntArray523[i]; + model.triangleInfo[i] = this.triangleInfo[i]; + } + } + model.triangleVertexA = this.triangleVertexA; + model.triangleVertexB = this.triangleVertexB; + model.triangleVertexC = this.triangleVertexC; + model.trianglePriorities = this.trianglePriorities; + model.aByteArray74 = this.aByteArray74; + model.aShortArray92 = this.aShortArray92; + model.priority = this.priority; + model.textureFacesP = this.textureFacesP; + model.textureFacesM = this.textureFacesM; + model.textureFacesN = this.textureFacesN; + model.boneVertices = this.boneVertices; + model.boneTriangles = this.boneTriangles; + model.vertexSources = this.vertexSources; + model.triangleSources = this.triangleSources; + model.pickable = this.pickable; + model.boundsValid = false; + return model; + } + + @OriginalMember(owner = "client!w", name = "d", descriptor = "(I)V") + @Override + public void rotateX(@OriginalArg(0) int arg0) { + @Pc(3) int local3 = MathUtils.sin[arg0]; + @Pc(7) int local7 = MathUtils.cos[arg0]; + for (@Pc(9) int local9 = 0; local9 < this.vertexCount; local9++) { + @Pc(29) int local29 = this.vertexY[local9] * local7 - this.vertexZ[local9] * local3 >> 16; + this.vertexZ[local9] = this.vertexY[local9] * local3 + this.vertexZ[local9] * local7 >> 16; + this.vertexY[local9] = local29; + } + this.boundsValid = false; + } + + @OriginalMember(owner = "client!w", name = "d", descriptor = "()Z") + @Override + protected boolean method4551() { + if (this.boneVertices == null) { + return false; + } else { + anInt5793 = 0; + anInt5791 = 0; + anInt5792 = 0; + return true; + } + } + + @OriginalMember(owner = "client!w", name = "c", descriptor = "(I)V") + @Override + public void rotateZ(@OriginalArg(0) int arg0) { + @Pc(3) int local3 = MathUtils.sin[arg0]; + @Pc(7) int local7 = MathUtils.cos[arg0]; + for (@Pc(9) int local9 = 0; local9 < this.vertexCount; local9++) { + @Pc(29) int local29 = this.vertexY[local9] * local3 + this.vertexX[local9] * local7 >> 16; + this.vertexY[local9] = this.vertexY[local9] * local7 - this.vertexX[local9] * local3 >> 16; + this.vertexX[local9] = local29; + } + this.boundsValid = false; + } + + @OriginalMember(owner = "client!w", name = "a", descriptor = "(IIIIIIIIJILclient!ga;)V") + @Override + public void render(@OriginalArg(0) int yaw, @OriginalArg(1) int sinCameraPitch, @OriginalArg(2) int cosCameraPitch, @OriginalArg(3) int sinCameraYaw, @OriginalArg(4) int cosCameraYaw, @OriginalArg(5) int sceneX, @OriginalArg(6) int sceneY, @OriginalArg(7) int sceneZ, @OriginalArg(8) long key, @OriginalArg(9) int arg9, @OriginalArg(10) ParticleSystem arg10) { + if (!this.boundsValid) { + this.calculateBounds(); + } + + @Pc(14) int a = sceneZ * cosCameraYaw - sceneX * sinCameraYaw >> 16; + @Pc(24) int b = sceneY * sinCameraPitch + a * cosCameraPitch >> 16; + @Pc(38) int c = b + (this.lengthXZ * cosCameraPitch + this.maxY * sinCameraPitch >> 16); + @Pc(53) int d = b + (-this.lengthXZ * cosCameraPitch + this.minY * sinCameraPitch >> 16); + if (c <= 50 || d >= 3500) { // near and far clip + return; + } + + @Pc(71) int e = sceneZ * sinCameraYaw + sceneX * cosCameraYaw >> 16; + @Pc(78) int minScreenX = e + this.lengthXZ << 9; + if (minScreenX / c <= Rasteriser.screenLowerX) { + return; + } + @Pc(91) int maxScreenX = e - this.lengthXZ << 9; + if (maxScreenX / c >= Rasteriser.screenUpperX) { + return; + } + @Pc(107) int f = sceneY * cosCameraPitch - a * sinCameraPitch >> 16; + @Pc(123) int minScreenY = f + (this.lengthXZ * sinCameraPitch + this.maxY * cosCameraPitch >> 16) << 9; + if (minScreenY / c <= Rasteriser.screenLowerY) { + return; + } + @Pc(146) int maxScreenY = f + (-this.lengthXZ * sinCameraPitch + this.minY * cosCameraPitch >> 16) << 9; + if (maxScreenY / c >= Rasteriser.screenUpperY) { + return; + } + @Pc(154) boolean project1 = false; + @Pc(161) boolean project2 = d <= 50; + @Pc(170) boolean project = project2 || this.anInt5789 > 0; + + @Pc(172) int cx = Rasteriser.centerX; + @Pc(174) int cy = Rasteriser.centerY; + + @Pc(176) int yawsin = 0; + @Pc(178) int yawcos = 0; + if (yaw != 0) { + yawsin = MathUtils.sin[yaw]; + yawcos = MathUtils.cos[yaw]; + } + @Pc(190) boolean local190 = false; + @Pc(204) int v; + @Pc(223) int x; + @Pc(208) int y; + @Pc(227) int z; + if (key > 0L && RawModel.allowInput && d > 0) { + if (e > 0) { + v = maxScreenX / c; + y = minScreenX / d; + } else { + v = maxScreenX / d; + y = minScreenX / c; + } + if (f > 0) { + x = maxScreenY / c; + z = minScreenY / d; + } else { + x = maxScreenY / d; + z = minScreenY / c; + } + if (GlModel.anInt3582 >= v && GlModel.anInt3582 <= y && RawModel.anInt1053 >= x && RawModel.anInt1053 <= z) { + v = 999999; + y = -999999; + x = 999999; + z = -999999; + @Pc(299) int[] local299 = new int[]{this.minX, this.maxX, this.minX, this.maxX, this.minX, this.maxX, this.minX, this.maxX}; + @Pc(342) int[] local342 = new int[]{this.minZ, this.minZ, this.maxZ, this.maxZ, this.minZ, this.minZ, this.maxZ, this.maxZ}; + @Pc(385) int[] local385 = new int[]{this.minY, this.minY, this.minY, this.minY, this.maxY, this.maxY, this.maxY, this.maxY}; + for (@Pc(387) int local387 = 0; local387 < 8; local387++) { + @Pc(394) int local394 = local299[local387]; + @Pc(398) int local398 = local385[local387]; + @Pc(402) int local402 = local342[local387]; + @Pc(414) int local414; + if (yaw != 0) { + local414 = local402 * yawsin + local394 * yawcos >> 16; + local402 = local402 * yawcos - local394 * yawsin >> 16; + local394 = local414; + } + local394 += sceneX; + local398 += sceneY; + local402 += sceneZ; + local414 = local402 * sinCameraYaw + local394 * cosCameraYaw >> 16; + local402 = local402 * cosCameraYaw - local394 * sinCameraYaw >> 16; + local394 = local414; + local414 = local398 * cosCameraPitch - local402 * sinCameraPitch >> 16; + local402 = local398 * sinCameraPitch + local402 * cosCameraPitch >> 16; + if (local402 > 0) { + @Pc(490) int local490 = (local394 << 9) / local402; + @Pc(496) int local496 = (local414 << 9) / local402; + if (local490 < v) { + v = local490; + } + if (local490 > y) { + y = local490; + } + if (local496 < x) { + x = local496; + } + if (local496 > z) { + z = local496; + } + } + } + if (GlModel.anInt3582 >= v && GlModel.anInt3582 <= y && RawModel.anInt1053 >= x && RawModel.anInt1053 <= z) { + if (this.pickable) { + Model.aLongArray11[MiniMenu.anInt7++] = key; + } else { + local190 = true; + } + } + } + } + for (v = 0; v < this.vertexCount; v++) { + x = this.vertexX[v]; + y = this.vertexY[v]; + z = this.vertexZ[v]; + @Pc(577) int w; + if (yaw != 0) { + w = z * yawsin + x * yawcos >> 16; + z = z * yawcos - x * yawsin >> 16; + x = w; + } + x += sceneX; + y += sceneY; + z += sceneZ; + w = z * sinCameraYaw + x * cosCameraYaw >> 16; + z = z * cosCameraYaw - x * sinCameraYaw >> 16; + x = w; + w = y * cosCameraPitch - z * sinCameraPitch >> 16; + z = y * sinCameraPitch + z * cosCameraPitch >> 16; + vertexDepth[v] = z - b; + if (z >= 50) { + vertexScreenX[v] = cx + (x << 9) / z; + vertexScreenY[v] = cy + (w << 9) / z; + } else { + vertexScreenX[v] = -5000; + project1 = true; + } + if (project) { + projectSceneX[v] = x; + projectSceneY[v] = w; + projectSceneZ[v] = z; + } + } + try { + this.draw(project1, local190, key, b - d, c - d + 2, arg10); + } catch (@Pc(713) Exception ex) { + ex.printStackTrace(); + } + } + + @OriginalMember(owner = "client!w", name = "a", descriptor = "(II[[I[[IIIIZ)Lclient!w;") + public SoftwareModel method4586(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int[][] arg2, @OriginalArg(3) int[][] arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) boolean arg7) { + if (!this.boundsValid) { + this.calculateBounds(); + } + @Pc(9) int local9 = arg4 + this.minX; + @Pc(14) int local14 = arg4 + this.maxX; + @Pc(19) int local19 = arg6 + this.minZ; + @Pc(24) int local24 = arg6 + this.maxZ; + if ((arg0 == 1 || arg0 == 2 || arg0 == 3 || arg0 == 5) && (local9 < 0 || local14 + 128 >> 7 >= arg2.length || local19 < 0 || local24 + 128 >> 7 >= arg2[0].length)) { + return this; + } + if (arg0 == 4 || arg0 == 5) { + if (arg3 == null) { + return this; + } + if (local9 < 0 || local14 + 128 >> 7 >= arg3.length || local19 < 0 || local24 + 128 >> 7 >= arg3[0].length) { + return this; + } + } else { + local9 >>= 0x7; + local14 = local14 + 127 >> 7; + local19 >>= 0x7; + local24 = local24 + 127 >> 7; + if (arg2[local9][local19] == arg5 && arg2[local14][local19] == arg5 && arg2[local9][local24] == arg5 && arg2[local14][local24] == arg5) { + return this; + } + } + @Pc(150) SoftwareModel local150; + if (arg7) { + local150 = new SoftwareModel(); + local150.vertexCount = this.vertexCount; + local150.triangleCount = this.triangleCount; + local150.anInt5789 = this.anInt5789; + local150.triangleVertexA = this.triangleVertexA; + local150.triangleVertexB = this.triangleVertexB; + local150.triangleVertexC = this.triangleVertexC; + local150.anIntArray533 = this.anIntArray533; + local150.anIntArray523 = this.anIntArray523; + local150.triangleInfo = this.triangleInfo; + local150.trianglePriorities = this.trianglePriorities; + local150.aByteArray74 = this.aByteArray74; + local150.aShortArray92 = this.aShortArray92; + local150.triangleColors = this.triangleColors; + local150.triangleAlpha = this.triangleAlpha; + local150.priority = this.priority; + local150.textureFacesP = this.textureFacesP; + local150.textureFacesM = this.textureFacesM; + local150.textureFacesN = this.textureFacesN; + local150.boneVertices = this.boneVertices; + local150.boneTriangles = this.boneTriangles; + local150.vertexSources = this.vertexSources; + local150.triangleSources = this.triangleSources; + local150.pickable = this.pickable; + if (arg0 == 3) { + local150.vertexX = ArrayUtils.copyOfNullable(this.vertexX); + local150.vertexY = ArrayUtils.copyOfNullable(this.vertexY); + local150.vertexZ = ArrayUtils.copyOfNullable(this.vertexZ); + } else { + local150.vertexX = this.vertexX; + local150.vertexY = new int[local150.vertexCount]; + local150.vertexZ = this.vertexZ; + } + } else { + local150 = this; + } + @Pc(285) int local285; + @Pc(296) int local296; + @Pc(303) int local303; + @Pc(307) int local307; + @Pc(311) int local311; + @Pc(315) int local315; + @Pc(319) int local319; + @Pc(341) int local341; + @Pc(367) int local367; + @Pc(379) int local379; + if (arg0 == 1) { + for (local285 = 0; local285 < local150.vertexCount; local285++) { + local296 = this.vertexX[local285] + arg4; + local303 = this.vertexZ[local285] + arg6; + local307 = local296 & 0x7F; + local311 = local303 & 0x7F; + local315 = local296 >> 7; + local319 = local303 >> 7; + local341 = arg2[local315][local319] * (128 - local307) + arg2[local315 + 1][local319] * local307 >> 7; + local367 = arg2[local315][local319 + 1] * (128 - local307) + arg2[local315 + 1][local319 + 1] * local307 >> 7; + local379 = local341 * (128 - local311) + local367 * local311 >> 7; + local150.vertexY[local285] = this.vertexY[local285] + local379 - arg5; + } + } else { + @Pc(506) int local506; + if (arg0 == 2) { + for (local285 = 0; local285 < local150.vertexCount; local285++) { + local296 = (this.vertexY[local285] << 16) / this.minY; + if (local296 < arg1) { + local303 = this.vertexX[local285] + arg4; + local307 = this.vertexZ[local285] + arg6; + local311 = local303 & 0x7F; + local315 = local307 & 0x7F; + local319 = local303 >> 7; + local341 = local307 >> 7; + local367 = arg2[local319][local341] * (128 - local311) + arg2[local319 + 1][local341] * local311 >> 7; + local379 = arg2[local319][local341 + 1] * (128 - local311) + arg2[local319 + 1][local341 + 1] * local311 >> 7; + local506 = local367 * (128 - local315) + local379 * local315 >> 7; + local150.vertexY[local285] = this.vertexY[local285] + (local506 - arg5) * (arg1 - local296) / arg1; + } else { + local150.vertexY[local285] = this.vertexY[local285]; + } + } + } else if (arg0 == 3) { + local285 = (arg1 & 0xFF) * 4; + local296 = (arg1 >> 8 & 0xFF) * 4; + local150.method4573(arg2, arg4, arg5, arg6, local285, local296); + } else if (arg0 == 4) { + local285 = this.maxY - this.minY; + for (local296 = 0; local296 < this.vertexCount; local296++) { + local303 = this.vertexX[local296] + arg4; + local307 = this.vertexZ[local296] + arg6; + local311 = local303 & 0x7F; + local315 = local307 & 0x7F; + local319 = local303 >> 7; + local341 = local307 >> 7; + local367 = arg3[local319][local341] * (128 - local311) + arg3[local319 + 1][local341] * local311 >> 7; + local379 = arg3[local319][local341 + 1] * (128 - local311) + arg3[local319 + 1][local341 + 1] * local311 >> 7; + local506 = local367 * (128 - local315) + local379 * local315 >> 7; + local150.vertexY[local296] = this.vertexY[local296] + local506 + local285 - arg5; + } + } else if (arg0 == 5) { + local285 = this.maxY - this.minY; + for (local296 = 0; local296 < this.vertexCount; local296++) { + local303 = this.vertexX[local296] + arg4; + local307 = this.vertexZ[local296] + arg6; + local311 = local303 & 0x7F; + local315 = local307 & 0x7F; + local319 = local303 >> 7; + local341 = local307 >> 7; + local367 = arg2[local319][local341] * (128 - local311) + arg2[local319 + 1][local341] * local311 >> 7; + local379 = arg2[local319][local341 + 1] * (128 - local311) + arg2[local319 + 1][local341 + 1] * local311 >> 7; + local506 = local367 * (128 - local315) + local379 * local315 >> 7; + local367 = arg3[local319][local341] * (128 - local311) + arg3[local319 + 1][local341] * local311 >> 7; + local379 = arg3[local319][local341 + 1] * (128 - local311) + arg3[local319 + 1][local341 + 1] * local311 >> 7; + @Pc(849) int local849 = local367 * (128 - local315) + local379 * local315 >> 7; + @Pc(853) int local853 = local506 - local849; + local150.vertexY[local296] = ((this.vertexY[local296] << 8) / local285 * local853 >> 8) - (arg5 - local506); + } + } + } + local150.boundsValid = false; + return local150; + } + + @OriginalMember(owner = "client!w", name = "i", descriptor = "()V") + @Override + public void rotateCounterClockwise() { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + @Pc(10) int local10 = this.vertexX[local1]; + this.vertexX[local1] = this.vertexZ[local1]; + this.vertexZ[local1] = -local10; + } + this.boundsValid = false; + } + + @OriginalMember(owner = "client!w", name = "a", descriptor = "(IIIIIIIJ)V") + @Override + public void setCamera(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) long arg6) { + try { + if (!this.boundsValid) { + this.calculateBounds(); + } + @Pc(6) int local6 = Rasteriser.centerX; + @Pc(8) int local8 = Rasteriser.centerY; + @Pc(12) int local12 = MathUtils.sin[0]; + @Pc(16) int local16 = MathUtils.cos[0]; + @Pc(20) int local20 = MathUtils.sin[arg0]; + @Pc(24) int local24 = MathUtils.cos[arg0]; + @Pc(28) int local28 = MathUtils.sin[arg1]; + @Pc(32) int local32 = MathUtils.cos[arg1]; + @Pc(36) int local36 = MathUtils.sin[arg2]; + @Pc(40) int local40 = MathUtils.cos[arg2]; + @Pc(50) int local50 = arg4 * local36 + arg5 * local40 >> 16; + for (@Pc(52) int local52 = 0; local52 < this.vertexCount; local52++) { + @Pc(61) int local61 = this.vertexX[local52]; + @Pc(66) int local66 = this.vertexY[local52]; + @Pc(71) int local71 = this.vertexZ[local52]; + @Pc(83) int local83; + if (arg1 != 0) { + local83 = local66 * local28 + local61 * local32 >> 16; + local66 = local66 * local32 - local61 * local28 >> 16; + local61 = local83; + } + if (arg0 != 0) { + local83 = local71 * local20 + local61 * local24 >> 16; + local71 = local71 * local24 - local61 * local20 >> 16; + local61 = local83; + } + local61 += arg3; + local66 += arg4; + local71 += arg5; + local83 = local66 * local40 - local71 * local36 >> 16; + local71 = local66 * local36 + local71 * local40 >> 16; + vertexDepth[local52] = local71 - local50; + vertexScreenX[local52] = local6 + (local61 << 9) / local71; + vertexScreenY[local52] = local8 + (local83 << 9) / local71; + if (this.anInt5789 > 0) { + projectSceneX[local52] = local61; + projectSceneY[local52] = local83; + projectSceneZ[local52] = local71; + } + } + this.draw(false, arg6 >= 0L, arg6, this.aShort35, this.aShort35 << 1, null); + } catch (@Pc(240) RuntimeException local240) { + } + } + + @OriginalMember(owner = "client!w", name = "g", descriptor = "(I)V") + private void drawProjectedTriangle(@OriginalArg(0) int arg0) { + @Pc(1) int local1 = Rasteriser.centerX; + @Pc(3) int local3 = Rasteriser.centerY; + @Pc(5) int local5 = 0; + @Pc(10) int local10 = this.triangleVertexA[arg0]; + @Pc(15) int local15 = this.triangleVertexB[arg0]; + @Pc(20) int local20 = this.triangleVertexC[arg0]; + @Pc(24) int local24 = projectSceneZ[local10]; + @Pc(28) int local28 = projectSceneZ[local15]; + @Pc(32) int local32 = projectSceneZ[local20]; + if (this.triangleAlpha == null) { + Rasteriser.alpha = 0; + } else { + Rasteriser.alpha = this.triangleAlpha[arg0] & 0xFF; + } + @Pc(75) int local75; + @Pc(79) int local79; + @Pc(86) int local86; + @Pc(99) int local99; + if (local24 >= 50) { + anIntArray542[0] = vertexScreenX[local10]; + anIntArray547[0] = vertexScreenY[local10]; + local5++; + anIntArray553[0] = this.anIntArray533[arg0] & 0xFFFF; + } else { + local75 = projectSceneX[local10]; + local79 = projectSceneY[local10]; + local86 = this.anIntArray533[arg0] & 0xFFFF; + if (local32 >= 50) { + local99 = (50 - local24) * MathUtils.reciprical16[local32 - local24]; + anIntArray542[0] = local1 + (local75 + ((projectSceneX[local20] - local75) * local99 >> 16) << 9) / 50; + anIntArray547[0] = local3 + (local79 + ((projectSceneY[local20] - local79) * local99 >> 16) << 9) / 50; + local5++; + anIntArray553[0] = local86 + (((this.triangleInfo[arg0] & 0xFFFF) - local86) * local99 >> 16); + } + if (local28 >= 50) { + local99 = (50 - local24) * MathUtils.reciprical16[local28 - local24]; + anIntArray542[local5] = local1 + (local75 + ((projectSceneX[local15] - local75) * local99 >> 16) << 9) / 50; + anIntArray547[local5] = local3 + (local79 + ((projectSceneY[local15] - local79) * local99 >> 16) << 9) / 50; + anIntArray553[local5++] = local86 + (((this.anIntArray523[arg0] & 0xFFFF) - local86) * local99 >> 16); + } + } + if (local28 >= 50) { + anIntArray542[local5] = vertexScreenX[local15]; + anIntArray547[local5] = vertexScreenY[local15]; + anIntArray553[local5++] = this.anIntArray523[arg0] & 0xFFFF; + } else { + local75 = projectSceneX[local15]; + local79 = projectSceneY[local15]; + local86 = this.anIntArray523[arg0] & 0xFFFF; + if (local24 >= 50) { + local99 = (50 - local28) * MathUtils.reciprical16[local24 - local28]; + anIntArray542[local5] = local1 + (local75 + ((projectSceneX[local10] - local75) * local99 >> 16) << 9) / 50; + anIntArray547[local5] = local3 + (local79 + ((projectSceneY[local10] - local79) * local99 >> 16) << 9) / 50; + anIntArray553[local5++] = local86 + (((this.anIntArray533[arg0] & 0xFFFF) - local86) * local99 >> 16); + } + if (local32 >= 50) { + local99 = (50 - local28) * MathUtils.reciprical16[local32 - local28]; + anIntArray542[local5] = local1 + (local75 + ((projectSceneX[local20] - local75) * local99 >> 16) << 9) / 50; + anIntArray547[local5] = local3 + (local79 + ((projectSceneY[local20] - local79) * local99 >> 16) << 9) / 50; + anIntArray553[local5++] = local86 + (((this.triangleInfo[arg0] & 0xFFFF) - local86) * local99 >> 16); + } + } + if (local32 >= 50) { + anIntArray542[local5] = vertexScreenX[local20]; + anIntArray547[local5] = vertexScreenY[local20]; + anIntArray553[local5++] = this.triangleInfo[arg0] & 0xFFFF; + } else { + local75 = projectSceneX[local20]; + local79 = projectSceneY[local20]; + local86 = this.triangleInfo[arg0] & 0xFFFF; + if (local28 >= 50) { + local99 = (50 - local32) * MathUtils.reciprical16[local28 - local32]; + anIntArray542[local5] = local1 + (local75 + ((projectSceneX[local15] - local75) * local99 >> 16) << 9) / 50; + anIntArray547[local5] = local3 + (local79 + ((projectSceneY[local15] - local79) * local99 >> 16) << 9) / 50; + anIntArray553[local5++] = local86 + (((this.anIntArray523[arg0] & 0xFFFF) - local86) * local99 >> 16); + } + if (local24 >= 50) { + local99 = (50 - local32) * MathUtils.reciprical16[local24 - local32]; + anIntArray542[local5] = local1 + (local75 + ((projectSceneX[local10] - local75) * local99 >> 16) << 9) / 50; + anIntArray547[local5] = local3 + (local79 + ((projectSceneY[local10] - local79) * local99 >> 16) << 9) / 50; + anIntArray553[local5++] = local86 + (((this.anIntArray533[arg0] & 0xFFFF) - local86) * local99 >> 16); + } + } + local75 = anIntArray542[0]; + local79 = anIntArray542[1]; + local86 = anIntArray542[2]; + local99 = anIntArray547[0]; + @Pc(614) int local614 = anIntArray547[1]; + @Pc(618) int local618 = anIntArray547[2]; + Rasteriser.testX = false; + @Pc(709) int local709; + @Pc(714) int local714; + @Pc(719) int local719; + @Pc(704) int local704; + if (local5 == 3) { + if (local75 < 0 || local79 < 0 || local86 < 0 || local75 > Rasteriser.width || local79 > Rasteriser.width || local86 > Rasteriser.width) { + Rasteriser.testX = true; + } + if (this.aShortArray92 != null && this.aShortArray92[arg0] != -1) { + if (this.aByteArray74 == null || this.aByteArray74[arg0] == -1) { + local709 = local10; + local714 = local15; + local719 = local20; + } else { + local704 = this.aByteArray74[arg0] & 0xFF; + local709 = this.textureFacesP[local704]; + local714 = this.textureFacesM[local704]; + local719 = this.textureFacesN[local704]; + } + if (this.triangleInfo[arg0] == -1) { + Rasteriser.fillTexturedAlphaTriangle(local99, local614, local618, local75, local79, local86, this.anIntArray533[arg0], this.anIntArray533[arg0], this.anIntArray533[arg0], projectSceneX[local709], projectSceneX[local714], projectSceneX[local719], projectSceneY[local709], projectSceneY[local714], projectSceneY[local719], projectSceneZ[local709], projectSceneZ[local714], projectSceneZ[local719], this.aShortArray92[arg0]); + } else { + Rasteriser.fillTexturedAlphaTriangle(local99, local614, local618, local75, local79, local86, anIntArray553[0], anIntArray553[1], anIntArray553[2], projectSceneX[local709], projectSceneX[local714], projectSceneX[local719], projectSceneY[local709], projectSceneY[local714], projectSceneY[local719], projectSceneZ[local709], projectSceneZ[local714], projectSceneZ[local719], this.aShortArray92[arg0]); + } + } else if (this.triangleInfo[arg0] == -1) { + Rasteriser.fillTriangle(local99, local614, local618, local75, local79, local86, Rasteriser.palette[this.anIntArray533[arg0] & 0xFFFF]); + } else { + Rasteriser.fillGouraudTriangle(local99, local614, local618, local75, local79, local86, anIntArray553[0], anIntArray553[1], anIntArray553[2]); + } + } + if (local5 != 4) { + return; + } + if (local75 < 0 || local79 < 0 || local86 < 0 || local75 > Rasteriser.width || local79 > Rasteriser.width || local86 > Rasteriser.width || anIntArray542[3] < 0 || anIntArray542[3] > Rasteriser.width) { + Rasteriser.testX = true; + } + if (this.aShortArray92 != null && this.aShortArray92[arg0] != -1) { + if (this.aByteArray74 == null || this.aByteArray74[arg0] == -1) { + local709 = local10; + local714 = local15; + local719 = local20; + } else { + local704 = this.aByteArray74[arg0] & 0xFF; + local709 = this.textureFacesP[local704]; + local714 = this.textureFacesM[local704]; + local719 = this.textureFacesN[local704]; + } + @Pc(984) short local984 = this.aShortArray92[arg0]; + if (this.triangleInfo[arg0] == -1) { + Rasteriser.fillTexturedAlphaTriangle(local99, local614, local618, local75, local79, local86, this.anIntArray533[arg0], this.anIntArray533[arg0], this.anIntArray533[arg0], projectSceneX[local709], projectSceneX[local714], projectSceneX[local719], projectSceneY[local709], projectSceneY[local714], projectSceneY[local719], projectSceneZ[local709], projectSceneZ[local714], projectSceneZ[local719], local984); + Rasteriser.fillTexturedAlphaTriangle(local99, local618, anIntArray547[3], local75, local86, anIntArray542[3], this.anIntArray533[arg0], this.anIntArray533[arg0], this.anIntArray533[arg0], projectSceneX[local709], projectSceneX[local714], projectSceneX[local719], projectSceneY[local709], projectSceneY[local714], projectSceneY[local719], projectSceneZ[local709], projectSceneZ[local714], projectSceneZ[local719], local984); + } else { + Rasteriser.fillTexturedAlphaTriangle(local99, local614, local618, local75, local79, local86, anIntArray553[0], anIntArray553[1], anIntArray553[2], projectSceneX[local709], projectSceneX[local714], projectSceneX[local719], projectSceneY[local709], projectSceneY[local714], projectSceneY[local719], projectSceneZ[local709], projectSceneZ[local714], projectSceneZ[local719], local984); + Rasteriser.fillTexturedAlphaTriangle(local99, local618, anIntArray547[3], local75, local86, anIntArray542[3], anIntArray553[0], anIntArray553[2], anIntArray553[3], projectSceneX[local709], projectSceneX[local714], projectSceneX[local719], projectSceneY[local709], projectSceneY[local714], projectSceneY[local719], projectSceneZ[local709], projectSceneZ[local714], projectSceneZ[local719], local984); + } + } else if (this.triangleInfo[arg0] == -1) { + local709 = Rasteriser.palette[this.anIntArray533[arg0] & 0xFFFF]; + Rasteriser.fillTriangle(local99, local614, local618, local75, local79, local86, local709); + Rasteriser.fillTriangle(local99, local618, anIntArray547[3], local75, local86, anIntArray542[3], local709); + } else { + Rasteriser.fillGouraudTriangle(local99, local614, local618, local75, local79, local86, anIntArray553[0], anIntArray553[1], anIntArray553[2]); + Rasteriser.fillGouraudTriangle(local99, local618, anIntArray547[3], local75, local86, anIntArray542[3], anIntArray553[0], anIntArray553[2], anIntArray553[3]); + } + } + + @OriginalMember(owner = "client!w", name = "c", descriptor = "()I") + @Override + public int getMaxZ() { + if (!this.boundsValid) { + this.calculateBounds(); + } + return this.maxZ; + } + + @OriginalMember(owner = "client!w", name = "b", descriptor = "(III)V") + @Override + public void resize(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + this.vertexX[local1] = this.vertexX[local1] * arg0 / 128; + this.vertexY[local1] = this.vertexY[local1] * arg1 / 128; + this.vertexZ[local1] = this.vertexZ[local1] * arg2 / 128; + } + this.boundsValid = false; + } + + @OriginalMember(owner = "client!w", name = "a", descriptor = "(ZZZ)Lclient!ak;") + @Override + public Model method4560(@OriginalArg(0) boolean shareAlpha, @OriginalArg(1) boolean shareColors, @OriginalArg(2) boolean arg2) { + if (!shareAlpha && aByteArray77.length < this.triangleCount) { + aByteArray77 = new byte[this.triangleCount + 100]; + } + if (!shareColors && aShortArray94.length < this.triangleCount) { + anIntArray539 = new int[this.triangleCount + 100]; + anIntArray540 = new int[this.triangleCount + 100]; + anIntArray538 = new int[this.triangleCount + 100]; + aShortArray94 = new short[this.triangleCount + 100]; + } + return this.copy(shareAlpha, shareColors, aClass8_Sub1_Sub2_2, aByteArray77, aShortArray94, anIntArray539, anIntArray540, anIntArray538); + } + + @OriginalMember(owner = "client!w", name = "j", descriptor = "()I") + @Override + public int getLengthXZ() { + if (!this.boundsValid) { + this.calculateBounds(); + } + return this.lengthXZ; + } + + @OriginalMember(owner = "client!w", name = "a", descriptor = "(Lclient!ak;)Lclient!ak;") + public Model method4588(@OriginalArg(0) Model arg0) { + return new SoftwareModel(new SoftwareModel[]{this, (SoftwareModel) arg0}, 2); + } + + @OriginalMember(owner = "client!w", name = "g", descriptor = "()I") + @Override + public int getMaxX() { + if (!this.boundsValid) { + this.calculateBounds(); + } + return this.maxX; + } + + @OriginalMember(owner = "client!w", name = "f", descriptor = "()V") + @Override + protected void method4557() { + if (this.aBoolean304) { + this.method4581(); + this.aBoolean304 = false; + } + this.boundsValid = false; + } + + @OriginalMember(owner = "client!w", name = "b", descriptor = "(I)V") + @Override + public void rotateY(@OriginalArg(0) int arg0) { + @Pc(3) int local3 = MathUtils.sin[arg0]; + @Pc(7) int local7 = MathUtils.cos[arg0]; + for (@Pc(9) int local9 = 0; local9 < this.vertexCount; local9++) { + @Pc(29) int local29 = this.vertexZ[local9] * local3 + this.vertexX[local9] * local7 >> 16; + this.vertexZ[local9] = this.vertexZ[local9] * local7 - this.vertexX[local9] * local3 >> 16; + this.vertexX[local9] = local29; + } + this.boundsValid = false; + } + + @OriginalMember(owner = "client!w", name = "a", descriptor = "(I[IIIIZ)V") + @Override + protected void method4569(@OriginalArg(0) int arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) boolean arg5) { + @Pc(2) int local2 = arg1.length; + @Pc(6) int local6; + @Pc(14) int local14; + @Pc(33) int local33; + @Pc(41) int local41; + if (arg0 == 0) { + local6 = 0; + anInt5793 = 0; + anInt5791 = 0; + anInt5792 = 0; + for (local14 = 0; local14 < local2; local14++) { + @Pc(21) int local21 = arg1[local14]; + if (local21 < this.boneVertices.length) { + @Pc(31) int[] local31 = this.boneVertices[local21]; + for (local33 = 0; local33 < local31.length; local33++) { + local41 = local31[local33]; + anInt5793 += this.vertexX[local41]; + anInt5791 += this.vertexY[local41]; + anInt5792 += this.vertexZ[local41]; + local6++; + } + } + } + if (local6 > 0) { + anInt5793 = anInt5793 / local6 + arg2; + anInt5791 = anInt5791 / local6 + arg3; + anInt5792 = anInt5792 / local6 + arg4; + } else { + anInt5793 = arg2; + anInt5791 = arg3; + anInt5792 = arg4; + } + return; + } + @Pc(117) int[] local117; + @Pc(119) int local119; + if (arg0 == 1) { + for (local6 = 0; local6 < local2; local6++) { + local14 = arg1[local6]; + if (local14 < this.boneVertices.length) { + local117 = this.boneVertices[local14]; + for (local119 = 0; local119 < local117.length; local119++) { + local33 = local117[local119]; + this.vertexX[local33] += arg2; + this.vertexY[local33] += arg3; + this.vertexZ[local33] += arg4; + } + } + } + return; + } + @Pc(222) int local222; + @Pc(240) int local240; + if (arg0 == 2) { + for (local6 = 0; local6 < local2; local6++) { + local14 = arg1[local6]; + if (local14 < this.boneVertices.length) { + local117 = this.boneVertices[local14]; + for (local119 = 0; local119 < local117.length; local119++) { + local33 = local117[local119]; + this.vertexX[local33] -= anInt5793; + this.vertexY[local33] -= anInt5791; + this.vertexZ[local33] -= anInt5792; + if (arg4 != 0) { + local41 = MathUtils.sin[arg4]; + local222 = MathUtils.cos[arg4]; + local240 = this.vertexY[local33] * local41 + this.vertexX[local33] * local222 + 32767 >> 16; + this.vertexY[local33] = this.vertexY[local33] * local222 + 32767 - this.vertexX[local33] * local41 >> 16; + this.vertexX[local33] = local240; + } + if (arg2 != 0) { + local41 = MathUtils.sin[arg2]; + local222 = MathUtils.cos[arg2]; + local240 = this.vertexY[local33] * local222 + 32767 - this.vertexZ[local33] * local41 >> 16; + this.vertexZ[local33] = this.vertexY[local33] * local41 + this.vertexZ[local33] * local222 + 32767 >> 16; + this.vertexY[local33] = local240; + } + if (arg3 != 0) { + local41 = MathUtils.sin[arg3]; + local222 = MathUtils.cos[arg3]; + local240 = this.vertexZ[local33] * local41 + this.vertexX[local33] * local222 + 32767 >> 16; + this.vertexZ[local33] = this.vertexZ[local33] * local222 + 32767 - this.vertexX[local33] * local41 >> 16; + this.vertexX[local33] = local240; + } + this.vertexX[local33] += anInt5793; + this.vertexY[local33] += anInt5791; + this.vertexZ[local33] += anInt5792; + } + } + } + } else if (arg0 == 3) { + for (local6 = 0; local6 < local2; local6++) { + local14 = arg1[local6]; + if (local14 < this.boneVertices.length) { + local117 = this.boneVertices[local14]; + for (local119 = 0; local119 < local117.length; local119++) { + local33 = local117[local119]; + this.vertexX[local33] -= anInt5793; + this.vertexY[local33] -= anInt5791; + this.vertexZ[local33] -= anInt5792; + this.vertexX[local33] = this.vertexX[local33] * arg2 / 128; + this.vertexY[local33] = this.vertexY[local33] * arg3 / 128; + this.vertexZ[local33] = this.vertexZ[local33] * arg4 / 128; + this.vertexX[local33] += anInt5793; + this.vertexY[local33] += anInt5791; + this.vertexZ[local33] += anInt5792; + } + } + } + } else if (arg0 == 5) { + if (this.boneTriangles != null && this.triangleAlpha != null) { + for (local6 = 0; local6 < local2; local6++) { + local14 = arg1[local6]; + if (local14 < this.boneTriangles.length) { + local117 = this.boneTriangles[local14]; + for (local119 = 0; local119 < local117.length; local119++) { + local33 = local117[local119]; + local41 = (this.triangleAlpha[local33] & 0xFF) + arg2 * 8; + if (local41 < 0) { + local41 = 0; + } else if (local41 > 255) { + local41 = 255; + } + this.triangleAlpha[local33] = (byte) local41; + } + } + } + } + } else if (arg0 == 7 && this.boneTriangles != null) { + for (local6 = 0; local6 < local2; local6++) { + local14 = arg1[local6]; + if (local14 < this.boneTriangles.length) { + local117 = this.boneTriangles[local14]; + for (local119 = 0; local119 < local117.length; local119++) { + local33 = local117[local119]; + local41 = this.triangleColors[local33] & 0xFFFF; + local222 = local41 >> 10 & 0x3F; + local240 = local41 >> 7 & 0x7; + @Pc(652) int local652 = local41 & 0x7F; + @Pc(658) int local658 = local222 + arg2 & 0x3F; + local240 += arg3; + if (local240 < 0) { + local240 = 0; + } else if (local240 > 7) { + local240 = 7; + } + local652 += arg4; + if (local652 < 0) { + local652 = 0; + } else if (local652 > 127) { + local652 = 127; + } + this.triangleColors[local33] = (short) (local658 << 10 | local240 << 7 | local652); + } + this.aBoolean304 = true; + } + } + } + } + + @OriginalMember(owner = "client!w", name = "a", descriptor = "(IIIIIIII)Z") + private boolean pointWithinTriangle(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int yA, @OriginalArg(3) int yB, @OriginalArg(4) int yC, @OriginalArg(5) int xA, @OriginalArg(6) int xB, @OriginalArg(7) int xC) { + if (y < yA && y < yB && y < yC) { + return false; + } else if (y > yA && y > yB && y > yC) { + return false; + } else if (x < xA && x < xB && x < xC) { + return false; + } else { + return x <= xA || x <= xB || x <= xC; + } + } + + @OriginalMember(owner = "client!w", name = "c", descriptor = "(ZZZ)Lclient!ak;") + @Override + public Model method4572(@OriginalArg(0) boolean shareAlpha, @OriginalArg(1) boolean shareColors, @OriginalArg(2) boolean arg2) { + if (!shareAlpha && aByteArray76.length < this.triangleCount) { + aByteArray76 = new byte[this.triangleCount + 100]; + } + if (!shareColors && aShortArray93.length < this.triangleCount) { + anIntArray536 = new int[this.triangleCount + 100]; + anIntArray537 = new int[this.triangleCount + 100]; + anIntArray535 = new int[this.triangleCount + 100]; + aShortArray93 = new short[this.triangleCount + 100]; + } + return this.copy(shareAlpha, shareColors, aClass8_Sub1_Sub2_1, aByteArray76, aShortArray93, anIntArray536, anIntArray537, anIntArray535); + } + + @OriginalMember(owner = "client!w", name = "a", descriptor = "(ZZJIILclient!ga;)V") + private void draw(@OriginalArg(0) boolean arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) long arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) ParticleSystem arg5) { + if (arg4 >= 1600) { + return; + } + @Pc(5) int local5 = 0; + @Pc(7) int local7 = 0; + @Pc(11) int i; + if (!aBoolean307) { + for (i = 0; i < 1600; i++) { + anIntArray558[i] = 0; + } + for (i = 0; i < 32; i++) { + anIntArray552[i] = 0; + } + anInt5790 = 0; + } + @Pc(51) int local51; + @Pc(56) int local56; + @Pc(61) int pri; + @Pc(65) int local65; + @Pc(69) int local69; + @Pc(88) int local88; + @Pc(92) int p; + @Pc(96) int n; + @Pc(104) int m; + for (i = 0; i < this.triangleCount; i++) { + if (this.triangleInfo[i] != -2) { + local51 = this.triangleVertexA[i]; + local56 = this.triangleVertexB[i]; + pri = this.triangleVertexC[i]; + local65 = vertexScreenX[local51]; + local69 = vertexScreenX[local56]; + @Pc(73) int local73 = vertexScreenX[pri]; + if (arg0 && (local65 == -5000 || local69 == -5000 || local73 == -5000)) { + local88 = projectSceneX[local51]; + p = projectSceneX[local56]; + n = projectSceneX[pri]; + @Pc(100) int local100 = projectSceneY[local51]; + m = projectSceneY[local56]; + @Pc(108) int local108 = projectSceneY[pri]; + @Pc(112) int local112 = projectSceneZ[local51]; + @Pc(116) int local116 = projectSceneZ[local56]; + @Pc(120) int local120 = projectSceneZ[pri]; + local88 -= p; + @Pc(128) int local128 = n - p; + @Pc(132) int local132 = local100 - m; + @Pc(136) int local136 = local108 - m; + @Pc(140) int local140 = local112 - local116; + @Pc(144) int local144 = local120 - local116; + @Pc(152) int local152 = local132 * local144 - local140 * local136; + @Pc(160) int local160 = local140 * local128 - local88 * local144; + @Pc(168) int local168 = local88 * local136 - local132 * local128; + if (p * local152 + m * local160 + local116 * local168 > 0) { + projectTriangle[i] = true; + if (aBoolean307) { + anIntArray550[local5] = (vertexDepth[local51] + vertexDepth[local56] + vertexDepth[pri]) / 3; + depthTriangles[local5++] = i; + } else { + @Pc(224) int local224 = (vertexDepth[local51] + vertexDepth[local56] + vertexDepth[pri]) / 3 + arg3; + if (anIntArray558[local224] < 64) { + anIntArrayArray44[local224][anIntArray558[local224]++] = i; + } else { + @Pc(247) int local247 = anIntArray558[local224]; + if (local247 == 64) { + if (anInt5790 == 512) { + continue; + } + anIntArray558[local224] = local247 = anInt5790++ + 65; + } + local247 -= 65; + anIntArrayArray43[local247][anIntArray552[local247]++] = i; + } + } + } + } else { + if (arg1 && this.pointWithinTriangle(GlModel.anInt3582 + Rasteriser.centerX, RawModel.anInt1053 + Rasteriser.centerY, vertexScreenY[local51], vertexScreenY[local56], vertexScreenY[pri], local65, local69, local73)) { + Model.aLongArray11[MiniMenu.anInt7++] = arg2; + arg1 = false; + } + if ((local65 - local69) * (vertexScreenY[pri] - vertexScreenY[local56]) - (vertexScreenY[local51] - vertexScreenY[local56]) * (local73 - local69) > 0) { + projectTriangle[i] = false; + testTriangleX[i] = local65 < 0 || local69 < 0 || local73 < 0 || local65 > Rasteriser.width || local69 > Rasteriser.width || local73 > Rasteriser.width; + if (aBoolean307) { + anIntArray550[local5] = (vertexDepth[local51] + vertexDepth[local56] + vertexDepth[pri]) / 3; + depthTriangles[local5++] = i; + } else { + local88 = (vertexDepth[local51] + vertexDepth[local56] + vertexDepth[pri]) / 3 + arg3; + if (anIntArray558[local88] < 64) { + anIntArrayArray44[local88][anIntArray558[local88]++] = i; + } else { + p = anIntArray558[local88]; + if (p == 64) { + if (anInt5790 == 512) { + continue; + } + anIntArray558[local88] = p = anInt5790++ + 65; + } + p -= 65; + anIntArrayArray43[p][anIntArray552[p]++] = i; + } + } + } + } + } + } + if (aBoolean307) { + ArrayUtils.sort(0, local5 - 1, anIntArray550, depthTriangles); + if (this.trianglePriorities == null) { + for (i = 0; i < local5; i++) { + this.drawTriangle(depthTriangles[i]); + } + return; + } + for (i = 0; i < 12; i++) { + priorityTriangleCounts[i] = 0; + lowTrianglePriority[i] = 0; + } + for (i = 0; i < local5; i++) { + local51 = depthTriangles[i]; + local56 = anIntArray550[i]; + @Pc(523) byte t = this.trianglePriorities[local51]; + local65 = priorityTriangleCounts[t]++; + priorityTriangles[t][local65] = local51; + if (t < 10) { + lowTrianglePriority[t] += local56; + } else if (t == 10) { + normalTrianglePriority[local65] = local56; + } else { + highTrianglePriority[local65] = local56; + } + } + } else { + @Pc(590) int[] local590; + if (this.trianglePriorities == null) { + for (i = arg4 - 1; i >= 0; i--) { + local51 = anIntArray558[i]; + if (local51 > 0) { + local56 = local51 > 64 ? 64 : local51; + local590 = anIntArrayArray44[i]; + for (local65 = 0; local65 < local56; local65++) { + local69 = local590[local65]; + if (local69 < 65536) { + this.drawTriangle(local590[local65]); + } + } + } + if (local51 > 64) { + local56 = anIntArray558[i] - 64 - 1; + local590 = anIntArrayArray43[local56]; + for (local65 = 0; local65 < anIntArray552[local56]; local65++) { + local69 = local590[local65]; + if (local69 < 65536) { + this.drawTriangle(local590[local65]); + } + } + } + } + return; + } + for (i = 0; i < 12; i++) { + priorityTriangleCounts[i] = 0; + lowTrianglePriority[i] = 0; + } + for (i = arg4 - 1; i >= 0; i--) { + local51 = anIntArray558[i]; + @Pc(704) byte local704; + if (local51 > 0) { + if (local51 > 64) { + local56 = 64; + } else { + local56 = local51; + } + local590 = anIntArrayArray44[i]; + for (local65 = 0; local65 < local56; local65++) { + local69 = local590[local65]; + if (local69 < 65536) { + local704 = this.trianglePriorities[local69]; + local88 = priorityTriangleCounts[local704]++; + priorityTriangles[local704][local88] = local69; + if (local704 < 10) { + lowTrianglePriority[local704] += i; + } else if (local704 == 10) { + normalTrianglePriority[local88] = i; + } else { + highTrianglePriority[local88] = i; + } + } else { + anIntArray561[local7++] = (local69 >> 16) - 1; + } + } + } + if (local51 > 64) { + local56 = anIntArray558[i] - 64 - 1; + local590 = anIntArrayArray43[local56]; + for (local65 = 0; local65 < anIntArray552[local56]; local65++) { + local69 = local590[local65]; + if (local69 < 65536) { + local704 = this.trianglePriorities[local69]; + local88 = priorityTriangleCounts[local704]++; + priorityTriangles[local704][local88] = local69; + if (local704 < 10) { + lowTrianglePriority[local704] += i; + } else if (local704 == 10) { + normalTrianglePriority[local88] = i; + } else { + highTrianglePriority[local88] = i; + } + } else { + anIntArray561[local7++] = (local69 >> 16) - 1; + } + } + } + } + } + int minPriority = 0; + if (priorityTriangleCounts[1] > 0 || priorityTriangleCounts[2] > 0) { + minPriority = (lowTrianglePriority[1] + lowTrianglePriority[2]) / (priorityTriangleCounts[1] + priorityTriangleCounts[2]); + } + int halfPriority = 0; + if (priorityTriangleCounts[3] > 0 || priorityTriangleCounts[4] > 0) { + halfPriority = (lowTrianglePriority[3] + lowTrianglePriority[4]) / (priorityTriangleCounts[3] + priorityTriangleCounts[4]); + } + int maxPriority = 0; + if (priorityTriangleCounts[6] > 0 || priorityTriangleCounts[8] > 0) { + maxPriority = (lowTrianglePriority[6] + lowTrianglePriority[8]) / (priorityTriangleCounts[6] + priorityTriangleCounts[8]); + } + int t = 0; + int priorityTriangleCount = priorityTriangleCounts[10]; + @Pc(928) int[] triangles = priorityTriangles[10]; + @Pc(930) int[] priorities = normalTrianglePriority; + if (priorityTriangleCount == 0) { + t = 0; + priorityTriangleCount = priorityTriangleCounts[11]; + triangles = priorityTriangles[11]; + priorities = highTrianglePriority; + } + if (priorityTriangleCount > 0) { + pri = priorities[0]; + } else { + pri = -1000; + } + for (p = 0; p < 10; p++) { + while (p == 0 && pri > minPriority) { + this.drawTriangle(triangles[t++]); + if (t == priorityTriangleCount && triangles != priorityTriangles[11]) { + t = 0; + priorityTriangleCount = priorityTriangleCounts[11]; + triangles = priorityTriangles[11]; + priorities = highTrianglePriority; + } + if (t < priorityTriangleCount) { + pri = priorities[t]; + } else { + pri = -1000; + } + } + while (p == 3 && pri > halfPriority) { + this.drawTriangle(triangles[t++]); + if (t == priorityTriangleCount && triangles != priorityTriangles[11]) { + t = 0; + priorityTriangleCount = priorityTriangleCounts[11]; + triangles = priorityTriangles[11]; + priorities = highTrianglePriority; + } + if (t < priorityTriangleCount) { + pri = priorities[t]; + } else { + pri = -1000; + } + } + while (p == 5 && pri > maxPriority) { + this.drawTriangle(triangles[t++]); + if (t == priorityTriangleCount && triangles != priorityTriangles[11]) { + t = 0; + priorityTriangleCount = priorityTriangleCounts[11]; + triangles = priorityTriangles[11]; + priorities = highTrianglePriority; + } + if (t < priorityTriangleCount) { + pri = priorities[t]; + } else { + pri = -1000; + } + } + n = priorityTriangleCounts[p]; + @Pc(1096) int[] tris = priorityTriangles[p]; + for (m = 0; m < n; m++) { + this.drawTriangle(tris[m]); + } + } + while (pri != -1000) { + this.drawTriangle(triangles[t++]); + if (t == priorityTriangleCount && triangles != priorityTriangles[11]) { + t = 0; + triangles = priorityTriangles[11]; + priorityTriangleCount = priorityTriangleCounts[11]; + priorities = highTrianglePriority; + } + if (t < priorityTriangleCount) { + pri = priorities[t]; + } else { + pri = -1000; + } + } + } + + @OriginalMember(owner = "client!w", name = "l", descriptor = "()V") + @Override + public void method4578() { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + @Pc(10) int local10 = this.vertexZ[local1]; + this.vertexZ[local1] = this.vertexX[local1]; + this.vertexX[local1] = -local10; + } + this.boundsValid = false; + } + + @OriginalMember(owner = "client!w", name = "b", descriptor = "(IIIIIIII)V") + public void method4591(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6) { + try { + if (!this.boundsValid) { + this.calculateBounds(); + } + @Pc(6) int local6 = Rasteriser.centerX; + @Pc(8) int local8 = Rasteriser.centerY; + @Pc(12) int local12 = MathUtils.sin[0]; + @Pc(16) int local16 = MathUtils.cos[0]; + @Pc(20) int local20 = MathUtils.sin[arg0]; + @Pc(24) int local24 = MathUtils.cos[arg0]; + @Pc(28) int local28 = MathUtils.sin[arg1]; + @Pc(32) int local32 = MathUtils.cos[arg1]; + @Pc(36) int local36 = MathUtils.sin[arg2]; + @Pc(40) int local40 = MathUtils.cos[arg2]; + @Pc(50) int local50 = arg4 * local36 + arg5 * local40 >> 16; + for (@Pc(52) int local52 = 0; local52 < this.vertexCount; local52++) { + @Pc(61) int local61 = this.vertexX[local52]; + @Pc(66) int local66 = this.vertexY[local52]; + @Pc(71) int local71 = this.vertexZ[local52]; + @Pc(83) int local83; + if (arg1 != 0) { + local83 = local66 * local28 + local61 * local32 >> 16; + local66 = local66 * local32 - local61 * local28 >> 16; + local61 = local83; + } + if (arg0 != 0) { + local83 = local71 * local20 + local61 * local24 >> 16; + local71 = local71 * local24 - local61 * local20 >> 16; + local61 = local83; + } + local61 += arg3; + local66 += arg4; + local71 += arg5; + local83 = local66 * local40 - local71 * local36 >> 16; + local71 = local66 * local36 + local71 * local40 >> 16; + vertexDepth[local52] = local71 - local50; + vertexScreenX[local52] = local6 + (local61 << 9) / arg6; + vertexScreenY[local52] = local8 + (local83 << 9) / arg6; + if (this.anInt5789 > 0) { + projectSceneX[local52] = local61; + projectSceneY[local52] = local83; + projectSceneZ[local52] = local71; + } + } + this.draw(false, false, 0L, this.aShort35, this.aShort35 << 1, null); + } catch (@Pc(234) RuntimeException local234) { + } + } + + @OriginalMember(owner = "client!w", name = "p", descriptor = "()V") + private void calculateBounds() { + @Pc(1) int minX = 32767; + @Pc(3) int minY = 32767; + @Pc(5) int minZ = 32767; + @Pc(7) int maxX = -32768; + @Pc(9) int maxY = -32768; + @Pc(11) int maxZ = -32768; + @Pc(13) int lengthXZ = 0; + @Pc(15) int local15 = 0; + for (@Pc(17) int v = 0; v < this.vertexCount; v++) { + @Pc(26) int local26 = this.vertexX[v]; + @Pc(31) int local31 = this.vertexY[v]; + @Pc(36) int local36 = this.vertexZ[v]; + if (local26 < minX) { + minX = local26; + } + if (local26 > maxX) { + maxX = local26; + } + if (local31 < minY) { + minY = local31; + } + if (local31 > maxY) { + maxY = local31; + } + if (local36 < minZ) { + minZ = local36; + } + if (local36 > maxZ) { + maxZ = local36; + } + @Pc(74) int local74 = local26 * local26 + local36 * local36; + if (local74 > lengthXZ) { + lengthXZ = local74; + } + local74 += local31 * local31; + if (local74 > local15) { + local15 = local74; + } + } + this.minX = (short) minX; + this.maxX = (short) maxX; + this.minY = (short) minY; + this.maxY = (short) maxY; + this.minZ = (short) minZ; + this.maxZ = (short) maxZ; + this.lengthXZ = (short) (Math.sqrt(lengthXZ) + 0.99D); + this.aShort35 = (short) (Math.sqrt(local15) + 0.99D); + this.boundsValid = true; + } + + @OriginalMember(owner = "client!w", name = "h", descriptor = "()I") + @Override + public int getMinX() { + if (!this.boundsValid) { + this.calculateBounds(); + } + return this.minX; + } + + @OriginalMember(owner = "client!w", name = "a", descriptor = "(I[IIIIZI[I)V") + @Override + protected void method4577(@OriginalArg(0) int arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) boolean arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int[] arg7) { + @Pc(2) int local2 = arg1.length; + @Pc(6) int local6; + @Pc(14) int local14; + @Pc(33) int local33; + @Pc(41) int local41; + @Pc(21) int local21; + if (arg0 == 0) { + local6 = 0; + anInt5793 = 0; + anInt5791 = 0; + anInt5792 = 0; + for (local14 = 0; local14 < local2; local14++) { + local21 = arg1[local14]; + if (local21 < this.boneVertices.length) { + @Pc(31) int[] local31 = this.boneVertices[local21]; + for (local33 = 0; local33 < local31.length; local33++) { + local41 = local31[local33]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local41]) != 0) { + anInt5793 += this.vertexX[local41]; + anInt5791 += this.vertexY[local41]; + anInt5792 += this.vertexZ[local41]; + local6++; + } + } + } + } + if (local6 > 0) { + anInt5793 = anInt5793 / local6 + arg2; + anInt5791 = anInt5791 / local6 + arg3; + anInt5792 = anInt5792 / local6 + arg4; + aBoolean306 = true; + } else { + anInt5793 = arg2; + anInt5791 = arg3; + anInt5792 = arg4; + } + return; + } + @Pc(204) int[] local204; + @Pc(206) int local206; + if (arg0 == 1) { + if (arg7 != null) { + local6 = arg7[0] * arg2 + arg7[1] * arg3 + arg7[2] * arg4 + 16384 >> 15; + local14 = arg7[3] * arg2 + arg7[4] * arg3 + arg7[5] * arg4 + 16384 >> 15; + local21 = arg7[6] * arg2 + arg7[7] * arg3 + arg7[8] * arg4 + 16384 >> 15; + arg2 = local6; + arg3 = local14; + arg4 = local21; + } + for (local6 = 0; local6 < local2; local6++) { + local14 = arg1[local6]; + if (local14 < this.boneVertices.length) { + local204 = this.boneVertices[local14]; + for (local206 = 0; local206 < local204.length; local206++) { + local33 = local204[local206]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local33]) != 0) { + this.vertexX[local33] += arg2; + this.vertexY[local33] += arg3; + this.vertexZ[local33] += arg4; + } + } + } + } + return; + } + @Pc(307) int local307; + @Pc(329) int local329; + @Pc(351) int local351; + @Pc(392) int local392; + @Pc(398) int local398; + @Pc(404) int local404; + @Pc(410) int local410; + @Pc(418) int local418; + @Pc(426) int local426; + @Pc(579) int local579; + @Pc(604) int local604; + @Pc(608) int local608; + @Pc(616) int local616; + @Pc(621) int local621; + @Pc(626) int local626; + @Pc(631) int local631; + @Pc(753) int[] local753; + @Pc(755) int local755; + @Pc(760) int local760; + @Pc(765) int local765; + @Pc(767) int local767; + @Pc(893) int local893; + if (arg0 == 2) { + if (arg7 == null) { + for (local6 = 0; local6 < local2; local6++) { + local14 = arg1[local6]; + if (local14 < this.boneVertices.length) { + local204 = this.boneVertices[local14]; + for (local206 = 0; local206 < local204.length; local206++) { + local33 = local204[local206]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local33]) != 0) { + this.vertexX[local33] -= anInt5793; + this.vertexY[local33] -= anInt5791; + this.vertexZ[local33] -= anInt5792; + if (arg4 != 0) { + local41 = MathUtils.sin[arg4]; + local307 = MathUtils.cos[arg4]; + local329 = this.vertexY[local33] * local41 + this.vertexX[local33] * local307 + 32767 >> 16; + this.vertexY[local33] = this.vertexY[local33] * local307 + 32767 - this.vertexX[local33] * local41 >> 16; + this.vertexX[local33] = local329; + } + if (arg2 != 0) { + local41 = MathUtils.sin[arg2]; + local307 = MathUtils.cos[arg2]; + local329 = this.vertexY[local33] * local307 + 32767 - this.vertexZ[local33] * local41 >> 16; + this.vertexZ[local33] = this.vertexY[local33] * local41 + this.vertexZ[local33] * local307 + 32767 >> 16; + this.vertexY[local33] = local329; + } + if (arg3 != 0) { + local41 = MathUtils.sin[arg3]; + local307 = MathUtils.cos[arg3]; + local329 = this.vertexZ[local33] * local41 + this.vertexX[local33] * local307 + 32767 >> 16; + this.vertexZ[local33] = this.vertexZ[local33] * local307 + 32767 - this.vertexX[local33] * local41 >> 16; + this.vertexX[local33] = local329; + } + this.vertexX[local33] += anInt5793; + this.vertexY[local33] += anInt5791; + this.vertexZ[local33] += anInt5792; + } + } + } + } + } else { + local6 = arg7[9]; + local14 = arg7[10]; + local21 = arg7[11]; + local206 = arg7[12]; + local33 = arg7[13]; + local41 = arg7[14]; + if (aBoolean306) { + local307 = arg7[0] * anInt5793 + arg7[3] * anInt5791 + arg7[6] * anInt5792 + 16384 >> 15; + local329 = arg7[1] * anInt5793 + arg7[4] * anInt5791 + arg7[7] * anInt5792 + 16384 >> 15; + local351 = arg7[2] * anInt5793 + arg7[5] * anInt5791 + arg7[8] * anInt5792 + 16384 >> 15; + local307 += local206; + local329 += local33; + local351 += local41; + anInt5793 = local307; + anInt5791 = local329; + anInt5792 = local351; + aBoolean306 = false; + } + @Pc(374) int[] local374 = new int[9]; + local329 = MathUtils.cos[arg2] >> 1; + local351 = MathUtils.sin[arg2] >> 1; + local392 = MathUtils.cos[arg3] >> 1; + local398 = MathUtils.sin[arg3] >> 1; + local404 = MathUtils.cos[arg4] >> 1; + local410 = MathUtils.sin[arg4] >> 1; + local418 = local351 * local404 + 16384 >> 15; + local426 = local351 * local410 + 16384 >> 15; + local374[0] = local392 * local404 + local398 * local426 + 16384 >> 15; + local374[1] = -local392 * local410 + local398 * local418 + 16384 >> 15; + local374[2] = local398 * local329 + 16384 >> 15; + local374[3] = local329 * local410 + 16384 >> 15; + local374[4] = local329 * local404 + 16384 >> 15; + local374[5] = -local351; + local374[6] = -local398 * local404 + local392 * local426 + 16384 >> 15; + local374[7] = local398 * local410 + local392 * local418 + 16384 >> 15; + local374[8] = local392 * local329 + 16384 >> 15; + @Pc(554) int local554 = local374[0] * -anInt5793 + local374[1] * -anInt5791 + local374[2] * -anInt5792 + 16384 >> 15; + local579 = local374[3] * -anInt5793 + local374[4] * -anInt5791 + local374[5] * -anInt5792 + 16384 >> 15; + local604 = local374[6] * -anInt5793 + local374[7] * -anInt5791 + local374[8] * -anInt5792 + 16384 >> 15; + local608 = local554 + anInt5793; + @Pc(612) int local612 = local579 + anInt5791; + local616 = local604 + anInt5792; + @Pc(619) int[] local619 = new int[9]; + for (local621 = 0; local621 < 3; local621++) { + for (local626 = 0; local626 < 3; local626++) { + local631 = 0; + for (@Pc(633) int local633 = 0; local633 < 3; local633++) { + local631 += local374[local621 * 3 + local633] * arg7[local626 * 3 + local633]; + } + local619[local621 * 3 + local626] = local631 + 16384 >> 15; + } + } + local621 = local374[0] * local206 + local374[1] * local33 + local374[2] * local41 + 16384 >> 15; + local626 = local374[3] * local206 + local374[4] * local33 + local374[5] * local41 + 16384 >> 15; + local631 = local374[6] * local206 + local374[7] * local33 + local374[8] * local41 + 16384 >> 15; + local621 += local608; + local626 += local612; + local631 += local616; + local753 = new int[9]; + for (local755 = 0; local755 < 3; local755++) { + for (local760 = 0; local760 < 3; local760++) { + local765 = 0; + for (local767 = 0; local767 < 3; local767++) { + local765 += arg7[local755 * 3 + local767] * local619[local760 + local767 * 3]; + } + local753[local755 * 3 + local760] = local765 + 16384 >> 15; + } + } + local755 = arg7[0] * local621 + arg7[1] * local626 + arg7[2] * local631 + 16384 >> 15; + local760 = arg7[3] * local621 + arg7[4] * local626 + arg7[5] * local631 + 16384 >> 15; + local765 = arg7[6] * local621 + arg7[7] * local626 + arg7[8] * local631 + 16384 >> 15; + local755 += local6; + local760 += local14; + local765 += local21; + for (local767 = 0; local767 < local2; local767++) { + local893 = arg1[local767]; + if (local893 < this.boneVertices.length) { + @Pc(903) int[] local903 = this.boneVertices[local893]; + for (@Pc(905) int local905 = 0; local905 < local903.length; local905++) { + @Pc(913) int local913 = local903[local905]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local913]) != 0) { + @Pc(955) int local955 = local753[0] * this.vertexX[local913] + local753[1] * this.vertexY[local913] + local753[2] * this.vertexZ[local913] + 16384 >> 15; + @Pc(986) int local986 = local753[3] * this.vertexX[local913] + local753[4] * this.vertexY[local913] + local753[5] * this.vertexZ[local913] + 16384 >> 15; + @Pc(1017) int local1017 = local753[6] * this.vertexX[local913] + local753[7] * this.vertexY[local913] + local753[8] * this.vertexZ[local913] + 16384 >> 15; + @Pc(1021) int local1021 = local955 + local755; + @Pc(1025) int local1025 = local986 + local760; + @Pc(1029) int local1029 = local1017 + local765; + this.vertexX[local913] = local1021; + this.vertexY[local913] = local1025; + this.vertexZ[local913] = local1029; + } + } + } + } + } + } else if (arg0 == 3) { + if (arg7 == null) { + for (local6 = 0; local6 < local2; local6++) { + local14 = arg1[local6]; + if (local14 < this.boneVertices.length) { + local204 = this.boneVertices[local14]; + for (local206 = 0; local206 < local204.length; local206++) { + local33 = local204[local206]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local33]) != 0) { + this.vertexX[local33] -= anInt5793; + this.vertexY[local33] -= anInt5791; + this.vertexZ[local33] -= anInt5792; + this.vertexX[local33] = this.vertexX[local33] * arg2 / 128; + this.vertexY[local33] = this.vertexY[local33] * arg3 / 128; + this.vertexZ[local33] = this.vertexZ[local33] * arg4 / 128; + this.vertexX[local33] += anInt5793; + this.vertexY[local33] += anInt5791; + this.vertexZ[local33] += anInt5792; + } + } + } + } + } else { + local6 = arg7[9]; + local14 = arg7[10]; + local21 = arg7[11]; + local206 = arg7[12]; + local33 = arg7[13]; + local41 = arg7[14]; + if (aBoolean306) { + local307 = arg7[0] * anInt5793 + arg7[3] * anInt5791 + arg7[6] * anInt5792 + 16384 >> 15; + local329 = arg7[1] * anInt5793 + arg7[4] * anInt5791 + arg7[7] * anInt5792 + 16384 >> 15; + local351 = arg7[2] * anInt5793 + arg7[5] * anInt5791 + arg7[8] * anInt5792 + 16384 >> 15; + local307 += local206; + local329 += local33; + local351 += local41; + anInt5793 = local307; + anInt5791 = local329; + anInt5792 = local351; + aBoolean306 = false; + } + local307 = arg2 << 15 >> 7; + local329 = arg3 << 15 >> 7; + local351 = arg4 << 15 >> 7; + local392 = local307 * -anInt5793 + 16384 >> 15; + local398 = local329 * -anInt5791 + 16384 >> 15; + local404 = local351 * -anInt5792 + 16384 >> 15; + local410 = local392 + anInt5793; + local418 = local398 + anInt5791; + local426 = local404 + anInt5792; + @Pc(1481) int[] local1481 = new int[]{local307 * arg7[0] + 16384 >> 15, local307 * arg7[3] + 16384 >> 15, local307 * arg7[6] + 16384 >> 15, local329 * arg7[1] + 16384 >> 15, local329 * arg7[4] + 16384 >> 15, local329 * arg7[7] + 16384 >> 15, local351 * arg7[2] + 16384 >> 15, local351 * arg7[5] + 16384 >> 15, local351 * arg7[8] + 16384 >> 15}; + local579 = local307 * local206 + 16384 >> 15; + local604 = local329 * local33 + 16384 >> 15; + local608 = local351 * local41 + 16384 >> 15; + @Pc(1617) int local1617 = local579 + local410; + @Pc(1621) int local1621 = local604 + local418; + @Pc(1625) int local1625 = local608 + local426; + @Pc(1628) int[] local1628 = new int[9]; + @Pc(1635) int local1635; + for (local616 = 0; local616 < 3; local616++) { + for (local1635 = 0; local1635 < 3; local1635++) { + local621 = 0; + for (local626 = 0; local626 < 3; local626++) { + local621 += arg7[local616 * 3 + local626] * local1481[local1635 + local626 * 3]; + } + local1628[local616 * 3 + local1635] = local621 + 16384 >> 15; + } + } + local616 = arg7[0] * local1617 + arg7[1] * local1621 + arg7[2] * local1625 + 16384 >> 15; + local1635 = arg7[3] * local1617 + arg7[4] * local1621 + arg7[5] * local1625 + 16384 >> 15; + local621 = arg7[6] * local1617 + arg7[7] * local1621 + arg7[8] * local1625 + 16384 >> 15; + local616 += local6; + local1635 += local14; + local621 += local21; + for (local626 = 0; local626 < local2; local626++) { + local631 = arg1[local626]; + if (local631 < this.boneVertices.length) { + local753 = this.boneVertices[local631]; + for (local755 = 0; local755 < local753.length; local755++) { + local760 = local753[local755]; + if (this.vertexSources == null || (arg6 & this.vertexSources[local760]) != 0) { + local765 = local1628[0] * this.vertexX[local760] + local1628[1] * this.vertexY[local760] + local1628[2] * this.vertexZ[local760] + 16384 >> 15; + local767 = local1628[3] * this.vertexX[local760] + local1628[4] * this.vertexY[local760] + local1628[5] * this.vertexZ[local760] + 16384 >> 15; + local893 = local1628[6] * this.vertexX[local760] + local1628[7] * this.vertexY[local760] + local1628[8] * this.vertexZ[local760] + 16384 >> 15; + @Pc(1896) int local1896 = local765 + local616; + @Pc(1900) int local1900 = local767 + local1635; + @Pc(1904) int local1904 = local893 + local621; + this.vertexX[local760] = local1896; + this.vertexY[local760] = local1900; + this.vertexZ[local760] = local1904; + } + } + } + } + } + } else if (arg0 == 5) { + if (this.boneTriangles != null && this.triangleAlpha != null) { + for (local6 = 0; local6 < local2; local6++) { + local14 = arg1[local6]; + if (local14 < this.boneTriangles.length) { + local204 = this.boneTriangles[local14]; + for (local206 = 0; local206 < local204.length; local206++) { + local33 = local204[local206]; + if (this.triangleSources == null || (arg6 & this.triangleSources[local33]) != 0) { + local41 = (this.triangleAlpha[local33] & 0xFF) + arg2 * 8; + if (local41 < 0) { + local41 = 0; + } else if (local41 > 255) { + local41 = 255; + } + this.triangleAlpha[local33] = (byte) local41; + } + } + } + } + } + } else if (arg0 == 7 && this.boneTriangles != null) { + for (local6 = 0; local6 < local2; local6++) { + local14 = arg1[local6]; + if (local14 < this.boneTriangles.length) { + local204 = this.boneTriangles[local14]; + for (local206 = 0; local206 < local204.length; local206++) { + local33 = local204[local206]; + if (this.triangleSources == null || (arg6 & this.triangleSources[local33]) != 0) { + local41 = this.triangleColors[local33] & 0xFFFF; + local307 = local41 >> 10 & 0x3F; + local329 = local41 >> 7 & 0x7; + local351 = local41 & 0x7F; + @Pc(2209) int local2209 = local307 + arg2 & 0x3F; + local329 += arg3; + if (local329 < 0) { + local329 = 0; + } else if (local329 > 7) { + local329 = 7; + } + local351 += arg4; + if (local351 < 0) { + local351 = 0; + } else if (local351 > 127) { + local351 = 127; + } + this.triangleColors[local33] = (short) (local2209 << 10 | local329 << 7 | local351); + } + } + this.aBoolean304 = true; + } + } + } + } + + @OriginalMember(owner = "client!w", name = "a", descriptor = "(IIII)V") + @Override + protected void method4567(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(3) int local3; + @Pc(11) int local11; + if (arg0 == 0) { + local3 = 0; + anInt5793 = 0; + anInt5791 = 0; + anInt5792 = 0; + for (local11 = 0; local11 < this.vertexCount; local11++) { + anInt5793 += this.vertexX[local11]; + anInt5791 += this.vertexY[local11]; + anInt5792 += this.vertexZ[local11]; + local3++; + } + if (local3 > 0) { + anInt5793 = anInt5793 / local3 + arg1; + anInt5791 = anInt5791 / local3 + arg2; + anInt5792 = anInt5792 / local3 + arg3; + } else { + anInt5793 = arg1; + anInt5791 = arg2; + anInt5792 = arg3; + } + } else if (arg0 == 1) { + for (local3 = 0; local3 < this.vertexCount; local3++) { + this.vertexX[local3] += arg1; + this.vertexY[local3] += arg2; + this.vertexZ[local3] += arg3; + } + } else { + @Pc(146) int local146; + @Pc(164) int local164; + if (arg0 == 2) { + for (local3 = 0; local3 < this.vertexCount; local3++) { + this.vertexX[local3] -= anInt5793; + this.vertexY[local3] -= anInt5791; + this.vertexZ[local3] -= anInt5792; + if (arg3 != 0) { + local11 = MathUtils.sin[arg3]; + local146 = MathUtils.cos[arg3]; + local164 = this.vertexY[local3] * local11 + this.vertexX[local3] * local146 + 32767 >> 16; + this.vertexY[local3] = this.vertexY[local3] * local146 + 32767 - this.vertexX[local3] * local11 >> 16; + this.vertexX[local3] = local164; + } + if (arg1 != 0) { + local11 = MathUtils.sin[arg1]; + local146 = MathUtils.cos[arg1]; + local164 = this.vertexY[local3] * local146 + 32767 - this.vertexZ[local3] * local11 >> 16; + this.vertexZ[local3] = this.vertexY[local3] * local11 + this.vertexZ[local3] * local146 + 32767 >> 16; + this.vertexY[local3] = local164; + } + if (arg2 != 0) { + local11 = MathUtils.sin[arg2]; + local146 = MathUtils.cos[arg2]; + local164 = this.vertexZ[local3] * local11 + this.vertexX[local3] * local146 + 32767 >> 16; + this.vertexZ[local3] = this.vertexZ[local3] * local146 + 32767 - this.vertexX[local3] * local11 >> 16; + this.vertexX[local3] = local164; + } + this.vertexX[local3] += anInt5793; + this.vertexY[local3] += anInt5791; + this.vertexZ[local3] += anInt5792; + } + } else if (arg0 == 3) { + for (local3 = 0; local3 < this.vertexCount; local3++) { + this.vertexX[local3] -= anInt5793; + this.vertexY[local3] -= anInt5791; + this.vertexZ[local3] -= anInt5792; + this.vertexX[local3] = this.vertexX[local3] * arg1 / 128; + this.vertexY[local3] = this.vertexY[local3] * arg2 / 128; + this.vertexZ[local3] = this.vertexZ[local3] * arg3 / 128; + this.vertexX[local3] += anInt5793; + this.vertexY[local3] += anInt5791; + this.vertexZ[local3] += anInt5792; + } + } else if (arg0 == 5) { + for (local3 = 0; local3 < this.triangleCount; local3++) { + local11 = (this.triangleAlpha[local3] & 0xFF) + arg1 * 8; + if (local11 < 0) { + local11 = 0; + } else if (local11 > 255) { + local11 = 255; + } + this.triangleAlpha[local3] = (byte) local11; + } + } else if (arg0 == 7) { + for (local3 = 0; local3 < this.triangleCount; local3++) { + local11 = this.triangleColors[local3] & 0xFFFF; + local146 = local11 >> 10 & 0x3F; + local164 = local11 >> 7 & 0x7; + @Pc(492) int local492 = local11 & 0x7F; + @Pc(498) int local498 = local146 + arg1 & 0x3F; + local164 += arg2; + if (local164 < 0) { + local164 = 0; + } else if (local164 > 7) { + local164 = 7; + } + local492 += arg3; + if (local492 < 0) { + local492 = 0; + } else if (local492 > 127) { + local492 = 127; + } + this.triangleColors[local3] = (short) (local498 << 10 | local164 << 7 | local492); + } + this.aBoolean304 = true; + } + } + } + + @OriginalMember(owner = "client!w", name = "c", descriptor = "(III)V") + @Override + public void translate(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + for (@Pc(1) int local1 = 0; local1 < this.vertexCount; local1++) { + this.vertexX[local1] += arg0; + this.vertexY[local1] += arg1; + this.vertexZ[local1] += arg2; + } + this.boundsValid = false; + } + + @OriginalMember(owner = "client!w", name = "b", descriptor = "(ZZZ)Lclient!ak;") + @Override + public Model method4568(@OriginalArg(0) boolean shareAlpha, @OriginalArg(1) boolean shareColors, @OriginalArg(2) boolean arg2) { + if (!shareAlpha && aByteArray78.length < this.triangleCount) { + aByteArray78 = new byte[this.triangleCount + 100]; + } + if (!shareColors && aShortArray95.length < this.triangleCount) { + anIntArray554 = new int[this.triangleCount + 100]; + anIntArray559 = new int[this.triangleCount + 100]; + anIntArray546 = new int[this.triangleCount + 100]; + aShortArray95 = new short[this.triangleCount + 100]; + } + return this.copy(shareAlpha, shareColors, aClass8_Sub1_Sub2_3, aByteArray78, aShortArray95, anIntArray554, anIntArray559, anIntArray546); + } +} diff --git a/client/src/main/java/rt4/SoftwareRaster.java b/client/src/main/java/rt4/SoftwareRaster.java new file mode 100644 index 0000000..073c6eb --- /dev/null +++ b/client/src/main/java/rt4/SoftwareRaster.java @@ -0,0 +1,616 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public final class SoftwareRaster { + + @OriginalMember(owner = "client!kb", name = "a", descriptor = "I") + public static int width; + + @OriginalMember(owner = "client!kb", name = "c", descriptor = "I") + public static int height; + + @OriginalMember(owner = "client!kb", name = "f", descriptor = "[I") + public static int[] anIntArray295; + + @OriginalMember(owner = "client!kb", name = "g", descriptor = "[I") + public static int[] anIntArray296; + + @OriginalMember(owner = "client!kb", name = "i", descriptor = "[I") + public static int[] pixels; + + @OriginalMember(owner = "client!kb", name = "b", descriptor = "I") + public static int clipLeft = 0; + + @OriginalMember(owner = "client!kb", name = "d", descriptor = "I") + public static int clipTop = 0; + + @OriginalMember(owner = "client!kb", name = "e", descriptor = "I") + public static int clipRight = 0; + + @OriginalMember(owner = "client!kb", name = "h", descriptor = "I") + public static int clipBottom = 0; + + @OriginalMember(owner = "client!vd", name = "w", descriptor = "Lclient!vk;") + public static FrameBuffer frameBuffer; + + @OriginalMember(owner = "client!kb", name = "a", descriptor = "()V") + public static void method2482() { + anIntArray295 = null; + anIntArray296 = null; + } + + @OriginalMember(owner = "client!kb", name = "a", descriptor = "(IIIII)V") + public static void drawRect(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int color) { + drawHorizontalLine(arg0, arg1, arg2, color); + drawHorizontalLine(arg0, arg1 + arg3 - 1, arg2, color); + drawVerticalLine(arg0, arg1, arg3, color); + drawVerticalLine(arg0 + arg2 - 1, arg1, arg3, color); + } + + @OriginalMember(owner = "client!kb", name = "a", descriptor = "(IIIIII)V") + public static void fillRectAlpha(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + if (arg0 < clipLeft) { + arg2 -= clipLeft - arg0; + arg0 = clipLeft; + } + if (arg1 < clipTop) { + arg3 -= clipTop - arg1; + arg1 = clipTop; + } + if (arg0 + arg2 > clipRight) { + arg2 = clipRight - arg0; + } + if (arg1 + arg3 > clipBottom) { + arg3 = clipBottom - arg1; + } + @Pc(59) int local59 = ((arg4 & 0xFF00FF) * arg5 >> 8 & 0xFF00FF) + ((arg4 & 0xFF00) * arg5 >> 8 & 0xFF00); + @Pc(63) int local63 = 256 - arg5; + @Pc(67) int local67 = width - arg2; + @Pc(73) int local73 = arg0 + arg1 * width; + for (@Pc(75) int local75 = 0; local75 < arg3; local75++) { + for (@Pc(81) int local81 = -arg2; local81 < 0; local81++) { + @Pc(87) int local87 = pixels[local73]; + @Pc(107) int local107 = ((local87 & 0xFF00FF) * local63 >> 8 & 0xFF00FF) + ((local87 & 0xFF00) * local63 >> 8 & 0xFF00); + pixels[local73++] = local59 + local107; + } + local73 += local67; + } + } + + @OriginalMember(owner = "client!kb", name = "a", descriptor = "(III)V") + private static void method2485(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + if (arg0 >= clipLeft && arg1 >= clipTop && arg0 < clipRight && arg1 < clipBottom) { + pixels[arg0 + arg1 * width] = 16776960; + } + } + + @OriginalMember(owner = "client!kb", name = "a", descriptor = "([I[I)V") + public static void method2486(@OriginalArg(0) int[] arg0, @OriginalArg(1) int[] arg1) { + if (arg0.length != clipBottom - clipTop || arg1.length != clipBottom - clipTop) { + throw new IllegalArgumentException(); + } + anIntArray295 = arg0; + anIntArray296 = arg1; + } + + @OriginalMember(owner = "client!kb", name = "b", descriptor = "(IIIIII)V") + public static void method2487(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + method2493(arg0, arg1, arg2, arg4, arg5); + method2493(arg0, arg1 + arg3 - 1, arg2, arg4, arg5); + if (arg3 >= 3) { + method2499(arg0, arg1 + 1, arg3 - 2, arg4, arg5); + method2499(arg0 + arg2 - 1, arg1 + 1, arg3 - 2, arg4, arg5); + } + } + + @OriginalMember(owner = "client!kb", name = "a", descriptor = "([I)V") + public static void restoreClip(@OriginalArg(0) int[] arg0) { + clipLeft = arg0[0]; + clipTop = arg0[1]; + clipRight = arg0[2]; + clipBottom = arg0[3]; + method2482(); + } + + @OriginalMember(owner = "client!kb", name = "a", descriptor = "(IIII)V") + public static void drawHorizontalLine(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int length, @OriginalArg(3) int color) { + if (y < clipTop || y >= clipBottom) { + return; + } + if (x < clipLeft) { + length -= clipLeft - x; + x = clipLeft; + } + if (x + length > clipRight) { + length = clipRight - x; + } + @Pc(32) int local32 = x + y * width; + for (@Pc(34) int local34 = 0; local34 < length; local34++) { + pixels[local32 + local34] = color; + } + } + + @OriginalMember(owner = "client!kb", name = "b", descriptor = "(IIII)V") + public static void drawVerticalLine(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (arg0 < clipLeft || arg0 >= clipRight) { + return; + } + if (arg1 < clipTop) { + arg2 -= clipTop - arg1; + arg1 = clipTop; + } + if (arg1 + arg2 > clipBottom) { + arg2 = clipBottom - arg1; + } + @Pc(32) int local32 = arg0 + arg1 * width; + for (@Pc(34) int local34 = 0; local34 < arg2; local34++) { + pixels[local32 + local34 * width] = arg3; + } + } + + @OriginalMember(owner = "client!kb", name = "a", descriptor = "([III)V") + public static void setSize(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + pixels = arg0; + width = arg1; + height = arg2; + setClip(0, 0, arg1, arg2); + } + + @OriginalMember(owner = "client!kb", name = "b", descriptor = "()V") + public static void clear() { + @Pc(1) int local1 = 0; + @Pc(7) int local7 = width * height - 7; + while (local1 < local7) { + pixels[local1++] = 0; + pixels[local1++] = 0; + pixels[local1++] = 0; + pixels[local1++] = 0; + pixels[local1++] = 0; + pixels[local1++] = 0; + pixels[local1++] = 0; + pixels[local1++] = 0; + } + local7 += 7; + while (local1 < local7) { + pixels[local1++] = 0; + } + } + + public static void clear(int color) { + for (int i = 0; i < width * height; ++i) { + pixels[i] = color; + } + } + + @OriginalMember(owner = "client!kb", name = "b", descriptor = "(IIIII)V") + private static void method2493(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (arg1 < clipTop || arg1 >= clipBottom) { + return; + } + if (arg0 < clipLeft) { + arg2 -= clipLeft - arg0; + arg0 = clipLeft; + } + if (arg0 + arg2 > clipRight) { + arg2 = clipRight - arg0; + } + @Pc(30) int local30 = 256 - arg4; + @Pc(38) int local38 = (arg3 >> 16 & 0xFF) * arg4; + @Pc(46) int local46 = (arg3 >> 8 & 0xFF) * arg4; + @Pc(52) int local52 = (arg3 & 0xFF) * arg4; + @Pc(58) int local58 = arg0 + arg1 * width; + for (@Pc(60) int local60 = 0; local60 < arg2; local60++) { + @Pc(73) int local73 = (pixels[local58] >> 16 & 0xFF) * local30; + @Pc(83) int local83 = (pixels[local58] >> 8 & 0xFF) * local30; + @Pc(91) int local91 = (pixels[local58] & 0xFF) * local30; + @Pc(113) int local113 = (local38 + local73 >> 8 << 16) + (local46 + local83 >> 8 << 8) + (local52 + local91 >> 8); + pixels[local58++] = local113; + } + } + + @OriginalMember(owner = "client!kb", name = "c", descriptor = "(IIIIII)V") + public static void method2494(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + @Pc(3) int local3 = arg2 - arg0; + @Pc(7) int local7 = arg3 - arg1; + @Pc(14) int local14 = local3 >= 0 ? local3 : -local3; + @Pc(21) int local21 = local7 >= 0 ? local7 : -local7; + @Pc(23) int local23 = local14; + if (local14 < local21) { + local23 = local21; + } + if (local23 == 0) { + return; + } + @Pc(37) int local37 = (local3 << 16) / local23; + @Pc(43) int local43 = (local7 << 16) / local23; + if (local43 <= local37) { + local37 = -local37; + } else { + local43 = -local43; + } + @Pc(59) int local59 = arg5 * local43 >> 17; + @Pc(67) int local67 = arg5 * local43 + 1 >> 17; + @Pc(73) int local73 = arg5 * local37 >> 17; + @Pc(81) int local81 = arg5 * local37 + 1 >> 17; + @Pc(85) int local85 = arg0 - Rasteriser.getOffsetRemainder(); + @Pc(89) int local89 = arg1 - Rasteriser.getOffset(); + @Pc(93) int local93 = local85 + local59; + @Pc(97) int local97 = local85 - local67; + @Pc(103) int local103 = local85 + local3 - local67; + @Pc(109) int local109 = local85 + local3 + local59; + @Pc(113) int local113 = local89 + local73; + @Pc(117) int local117 = local89 - local81; + @Pc(123) int local123 = local89 + local7 - local81; + @Pc(129) int local129 = local89 + local7 + local73; + Rasteriser.testPoints(local93, local97, local103); + Rasteriser.fillTriangle(local113, local117, local123, local93, local97, local103, arg4); + Rasteriser.testPoints(local93, local103, local109); + Rasteriser.fillTriangle(local113, local123, local129, local93, local103, local109, arg4); + } + + @OriginalMember(owner = "client!kb", name = "c", descriptor = "(IIIII)V") + public static void fillRect(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (arg0 < clipLeft) { + arg2 -= clipLeft - arg0; + arg0 = clipLeft; + } + if (arg1 < clipTop) { + arg3 -= clipTop - arg1; + arg1 = clipTop; + } + if (arg0 + arg2 > clipRight) { + arg2 = clipRight - arg0; + } + if (arg1 + arg3 > clipBottom) { + arg3 = clipBottom - arg1; + } + @Pc(43) int local43 = width - arg2; + @Pc(49) int local49 = arg0 + arg1 * width; + for (@Pc(52) int local52 = -arg3; local52 < 0; local52++) { + for (@Pc(57) int local57 = -arg2; local57 < 0; local57++) { + pixels[local49++] = arg4; + } + local49 += local43; + } + } + + @OriginalMember(owner = "client!kb", name = "c", descriptor = "(IIII)V") + public static void setClip(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (arg0 < 0) { + arg0 = 0; + } + if (arg1 < 0) { + arg1 = 0; + } + if (arg2 > width) { + arg2 = width; + } + if (arg3 > height) { + arg3 = height; + } + clipLeft = arg0; + clipTop = arg1; + clipRight = arg2; + clipBottom = arg3; + method2482(); + } + + @OriginalMember(owner = "client!kb", name = "b", descriptor = "([I)V") + public static void saveClip(@OriginalArg(0) int[] arg0) { + arg0[0] = clipLeft; + arg0[1] = clipTop; + arg0[2] = clipRight; + arg0[3] = clipBottom; + } + + @OriginalMember(owner = "client!kb", name = "d", descriptor = "(IIII)V") + public static void method2498(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (clipLeft < arg0) { + clipLeft = arg0; + } + if (clipTop < arg1) { + clipTop = arg1; + } + if (clipRight > arg2) { + clipRight = arg2; + } + if (clipBottom > arg3) { + clipBottom = arg3; + } + method2482(); + } + + @OriginalMember(owner = "client!kb", name = "d", descriptor = "(IIIII)V") + private static void method2499(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (arg0 < clipLeft || arg0 >= clipRight) { + return; + } + if (arg1 < clipTop) { + arg2 -= clipTop - arg1; + arg1 = clipTop; + } + if (arg1 + arg2 > clipBottom) { + arg2 = clipBottom - arg1; + } + @Pc(30) int local30 = 256 - arg4; + @Pc(38) int local38 = (arg3 >> 16 & 0xFF) * arg4; + @Pc(46) int local46 = (arg3 >> 8 & 0xFF) * arg4; + @Pc(52) int local52 = (arg3 & 0xFF) * arg4; + @Pc(58) int local58 = arg0 + arg1 * width; + for (@Pc(60) int local60 = 0; local60 < arg2; local60++) { + @Pc(73) int local73 = (pixels[local58] >> 16 & 0xFF) * local30; + @Pc(83) int local83 = (pixels[local58] >> 8 & 0xFF) * local30; + @Pc(91) int local91 = (pixels[local58] & 0xFF) * local30; + @Pc(113) int local113 = (local38 + local73 >> 8 << 16) + (local46 + local83 >> 8 << 8) + (local52 + local91 >> 8); + pixels[local58] = local113; + local58 += width; + } + } + + @OriginalMember(owner = "client!kb", name = "e", descriptor = "(IIIII)V") + public static void method2500(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + arg2 -= arg0; + arg3 -= arg1; + if (arg3 == 0) { + if (arg2 >= 0) { + drawHorizontalLine(arg0, arg1, arg2 + 1, arg4); + } else { + drawHorizontalLine(arg0 + arg2, arg1, 1 - arg2, arg4); + } + } else if (arg2 != 0) { + if (arg2 + arg3 < 0) { + arg0 += arg2; + arg2 = -arg2; + arg1 += arg3; + arg3 = -arg3; + } + @Pc(96) int local96; + @Pc(127) int local127; + if (arg2 > arg3) { + arg1 <<= 0x10; + arg1 += 32768; + @Pc(86) int local86 = arg3 << 16; + local96 = (int) Math.floor((double) local86 / (double) arg2 + 0.5D); + arg2 += arg0; + if (arg0 < clipLeft) { + arg1 += local96 * (clipLeft - arg0); + arg0 = clipLeft; + } + if (arg2 >= clipRight) { + arg2 = clipRight - 1; + } + while (arg0 <= arg2) { + local127 = arg1 >> 16; + if (local127 >= clipTop && local127 < clipBottom) { + pixels[arg0 + local127 * width] = arg4; + } + arg1 += local96; + arg0++; + } + } else { + arg0 <<= 0x10; + arg0 += 32768; + @Pc(160) int local160 = arg2 << 16; + local96 = (int) Math.floor((double) local160 / (double) arg3 + 0.5D); + arg3 += arg1; + if (arg1 < clipTop) { + arg0 += local96 * (clipTop - arg1); + arg1 = clipTop; + } + if (arg3 >= clipBottom) { + arg3 = clipBottom - 1; + } + while (arg1 <= arg3) { + local127 = arg0 >> 16; + if (local127 >= clipLeft && local127 < clipRight) { + pixels[local127 + arg1 * width] = arg4; + } + arg0 += local96; + arg1++; + } + } + } else if (arg3 >= 0) { + drawVerticalLine(arg0, arg1, arg3 + 1, arg4); + } else { + drawVerticalLine(arg0, arg1 + arg3, -arg3 + 1, arg4); + } + } + + @OriginalMember(owner = "client!kb", name = "e", descriptor = "(IIII)V") + private static void method2501(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + if (arg2 == 0) { + method2485(arg0, arg1); + return; + } + if (arg2 < 0) { + arg2 = -arg2; + } + @Pc(15) int local15 = arg1 - arg2; + if (local15 < clipTop) { + local15 = clipTop; + } + @Pc(26) int local26 = arg1 + arg2 + 1; + if (local26 > clipBottom) { + local26 = clipBottom; + } + @Pc(33) int local33 = local15; + @Pc(37) int local37 = arg2 * arg2; + @Pc(39) int local39 = 0; + @Pc(43) int local43 = arg1 - local15; + @Pc(47) int local47 = local43 * local43; + @Pc(51) int local51 = local47 - local43; + if (arg1 > local26) { + arg1 = local26; + } + @Pc(85) int local85; + @Pc(94) int local94; + @Pc(105) int local105; + @Pc(107) int local107; + while (local33 < arg1) { + while (local51 <= local37 || local47 <= local37) { + local47 += local39 + local39; + local51 += local39++ + local39; + } + local85 = arg0 + 1 - local39; + if (local85 < clipLeft) { + local85 = clipLeft; + } + local94 = arg0 + local39; + if (local94 > clipRight) { + local94 = clipRight; + } + local105 = local85 + local33 * width; + for (local107 = local85; local107 < local94; local107++) { + pixels[local105++] = 16776960; + } + local33++; + local47 -= local43-- + local43; + local51 -= local43 + local43; + } + local39 = arg2; + local43 = local33 - arg1; + local51 = local43 * local43 + local37; + local47 = local51 - arg2; + local51 -= local43; + while (local33 < local26) { + while (local51 > local37 && local47 > local37) { + local51 -= local39-- + local39; + local47 -= local39 + local39; + } + local85 = arg0 - local39; + if (local85 < clipLeft) { + local85 = clipLeft; + } + local94 = arg0 + local39; + if (local94 > clipRight - 1) { + local94 = clipRight - 1; + } + local105 = local85 + local33 * width; + for (local107 = local85; local107 <= local94; local107++) { + pixels[local105++] = 16776960; + } + local33++; + local51 += local43 + local43; + local47 += local43++ + local43; + } + } + + @OriginalMember(owner = "client!kb", name = "f", descriptor = "(IIIII)V") + public static void method2502(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3) { + if (arg3 == 0) { + return; + } + if (arg3 == 256) { + method2501(arg0, arg1, arg2); + return; + } + @Pc(20) int local20 = 256 - arg3; + @Pc(28) int local28 = arg3 * 255; + @Pc(36) int local36 = arg3 * 255; + @Pc(42) int local42 = arg3 * 0; + @Pc(46) int local46 = arg1 - arg2; + if (local46 < clipTop) { + local46 = clipTop; + } + @Pc(57) int local57 = arg1 + arg2 + 1; + if (local57 > clipBottom) { + local57 = clipBottom; + } + @Pc(64) int local64 = local46; + @Pc(68) int local68 = arg2 * arg2; + @Pc(70) int local70 = 0; + @Pc(74) int local74 = arg1 - local46; + @Pc(78) int local78 = local74 * local74; + @Pc(82) int local82 = local78 - local74; + if (arg1 > local57) { + arg1 = local57; + } + @Pc(151) int local151; + @Pc(161) int local161; + @Pc(169) int local169; + @Pc(116) int local116; + @Pc(125) int local125; + @Pc(136) int local136; + @Pc(138) int local138; + @Pc(191) int local191; + while (local64 < arg1) { + while (local82 <= local68 || local78 <= local68) { + local78 += local70 + local70; + local82 += local70++ + local70; + } + local116 = arg0 + 1 - local70; + if (local116 < clipLeft) { + local116 = clipLeft; + } + local125 = arg0 + local70; + if (local125 > clipRight) { + local125 = clipRight; + } + local136 = local116 + local64 * width; + for (local138 = local116; local138 < local125; local138++) { + local151 = (pixels[local136] >> 16 & 0xFF) * local20; + local161 = (pixels[local136] >> 8 & 0xFF) * local20; + local169 = (pixels[local136] & 0xFF) * local20; + local191 = (local28 + local151 >> 8 << 16) + (local36 + local161 >> 8 << 8) + (local42 + local169 >> 8); + pixels[local136++] = local191; + } + local64++; + local78 -= local74-- + local74; + local82 -= local74 + local74; + } + local70 = arg2; + local74 = -local74; + local82 = local74 * local74 + local68; + local78 = local82 - arg2; + local82 -= local74; + while (local64 < local57) { + while (local82 > local68 && local78 > local68) { + local82 -= local70-- + local70; + local78 -= local70 + local70; + } + local116 = arg0 - local70; + if (local116 < clipLeft) { + local116 = clipLeft; + } + local125 = arg0 + local70; + if (local125 > clipRight - 1) { + local125 = clipRight - 1; + } + local136 = local116 + local64 * width; + for (local138 = local116; local138 <= local125; local138++) { + local151 = (pixels[local136] >> 16 & 0xFF) * local20; + local161 = (pixels[local136] >> 8 & 0xFF) * local20; + local169 = (pixels[local136] & 0xFF) * local20; + local191 = (local28 + local151 >> 8 << 16) + (local36 + local161 >> 8 << 8) + (local42 + local169 >> 8); + pixels[local136++] = local191; + } + local64++; + local82 += local74 + local74; + local78 += local74++ + local74; + } + } + + @OriginalMember(owner = "client!kb", name = "c", descriptor = "()V") + public static void method2503() { + clipLeft = 0; + clipTop = 0; + clipRight = width; + clipBottom = height; + method2482(); + } + + @OriginalMember(owner = "client!kb", name = "a", descriptor = "(III[I[I)V") + public static void method2504(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int[] arg2, @OriginalArg(4) int[] arg3) { + @Pc(5) int local5 = arg0 + arg1 * width; + for (@Pc(7) int local7 = 0; local7 < arg2.length; local7++) { + @Pc(17) int local17 = local5 + arg2[local7]; + for (@Pc(22) int local22 = -arg3[local7]; local22 < 0; local22++) { + pixels[local17++] = 0; + } + local5 += width; + } + } +} diff --git a/client/src/main/java/rt4/SoftwareSprite.java b/client/src/main/java/rt4/SoftwareSprite.java new file mode 100644 index 0000000..7176d47 --- /dev/null +++ b/client/src/main/java/rt4/SoftwareSprite.java @@ -0,0 +1,1369 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!mm") +public class SoftwareSprite extends Sprite { + + @OriginalMember(owner = "client!mm", name = "L", descriptor = "[I") + public int[] pixels; + + @OriginalMember(owner = "client!mm", name = "", descriptor = "(IIIIII[I)V") + public SoftwareSprite(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int[] arg6) { + this.anInt1860 = arg0; + this.anInt1866 = arg1; + this.anInt1863 = arg2; + this.anInt1861 = arg3; + this.width = arg4; + this.height = arg5; + this.pixels = arg6; + } + + @OriginalMember(owner = "client!mm", name = "", descriptor = "(II)V") + public SoftwareSprite(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + this.pixels = new int[arg0 * arg1]; + this.width = this.anInt1860 = arg0; + this.height = this.anInt1866 = arg1; + this.anInt1863 = this.anInt1861 = 0; + } + + @OriginalMember(owner = "client!mm", name = "a", descriptor = "([I[IIIIIIII)V") + public static void method300(@OriginalArg(0) int[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7) { + @Pc(4) int local4 = -(arg4 >> 2); + @Pc(9) int local9 = -(arg4 & 0x3); + for (@Pc(12) int local12 = -arg5; local12 < 0; local12++) { + @Pc(16) int local16; + @Pc(23) int local23; + for (local16 = local4; local16 < 0; local16++) { + local23 = arg1[arg2++]; + if (local23 == 0) { + arg3++; + } else { + arg0[arg3++] = local23; + } + local23 = arg1[arg2++]; + if (local23 == 0) { + arg3++; + } else { + arg0[arg3++] = local23; + } + local23 = arg1[arg2++]; + if (local23 == 0) { + arg3++; + } else { + arg0[arg3++] = local23; + } + local23 = arg1[arg2++]; + if (local23 == 0) { + arg3++; + } else { + arg0[arg3++] = local23; + } + } + for (local16 = local9; local16 < 0; local16++) { + local23 = arg1[arg2++]; + if (local23 == 0) { + arg3++; + } else { + arg0[arg3++] = local23; + } + } + arg3 += arg6; + arg2 += arg7; + } + } + + @OriginalMember(owner = "client!mm", name = "b", descriptor = "([I[IIIIIIII)V") + public static void method302(@OriginalArg(0) int[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7) { + @Pc(4) int local4 = -(arg4 >> 2); + @Pc(9) int local9 = -(arg4 & 0x3); + for (@Pc(12) int local12 = -arg5; local12 < 0; local12++) { + @Pc(16) int local16; + @Pc(23) int local23; + for (local16 = local4; local16 < 0; local16++) { + local23 = arg1[arg2--]; + if (local23 == 0) { + arg3++; + } else { + arg0[arg3++] = local23; + } + local23 = arg1[arg2--]; + if (local23 == 0) { + arg3++; + } else { + arg0[arg3++] = local23; + } + local23 = arg1[arg2--]; + if (local23 == 0) { + arg3++; + } else { + arg0[arg3++] = local23; + } + local23 = arg1[arg2--]; + if (local23 == 0) { + arg3++; + } else { + arg0[arg3++] = local23; + } + } + for (local16 = local9; local16 < 0; local16++) { + local23 = arg1[arg2--]; + if (local23 == 0) { + arg3++; + } else { + arg0[arg3++] = local23; + } + } + arg3 += arg6; + arg2 += arg7; + } + } + + @OriginalMember(owner = "client!mm", name = "a", descriptor = "([I[IIIIIII)V") + public static void method305(@OriginalArg(0) int[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7) { + for (@Pc(2) int local2 = -arg5; local2 < 0; local2++) { + @Pc(10) int local10 = arg3 + arg4 - 3; + while (arg3 < local10) { + arg0[arg3++] = arg1[arg2++]; + arg0[arg3++] = arg1[arg2++]; + arg0[arg3++] = arg1[arg2++]; + arg0[arg3++] = arg1[arg2++]; + } + local10 += 3; + while (arg3 < local10) { + arg0[arg3++] = arg1[arg2++]; + } + arg3 += arg6; + arg2 += arg7; + } + } + + @OriginalMember(owner = "client!mm", name = "a", descriptor = "([I[IIIIIIIIIIII)V") + public static void method307(@OriginalArg(0) int[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8, @OriginalArg(10) int arg9, @OriginalArg(11) int arg10, @OriginalArg(12) int arg11) { + @Pc(3) int local3 = 256 - arg11; + @Pc(5) int local5 = arg2; + for (@Pc(8) int local8 = -arg7; local8 < 0; local8++) { + @Pc(16) int local16 = (arg3 >> 16) * arg10; + for (@Pc(19) int local19 = -arg6; local19 < 0; local19++) { + @Pc(29) int local29 = arg1[(arg2 >> 16) + local16]; + if (local29 == 0) { + arg4++; + } else { + @Pc(35) int local35 = arg0[arg4]; + arg0[arg4++] = ((local29 & 0xFF00FF) * arg11 + (local35 & 0xFF00FF) * local3 & 0xFF00FF00) + ((local29 & 0xFF00) * arg11 + (local35 & 0xFF00) * local3 & 0xFF0000) >> 8; + } + arg2 += arg8; + } + arg3 += arg9; + arg2 = local5; + arg4 += arg5; + } + } + + @OriginalMember(owner = "client!mm", name = "a", descriptor = "([I[IIIIIIIII)V") + public static void drawAlpha(@OriginalArg(0) int[] dst, @OriginalArg(1) int[] src, @OriginalArg(3) int srcOff, @OriginalArg(4) int dstOff, @OriginalArg(5) int startX, @OriginalArg(6) int startY, @OriginalArg(7) int dstStep, @OriginalArg(8) int srcStep, @OriginalArg(9) int alpha) { + @Pc(3) int invAlpha = 256 - alpha; + for (@Pc(6) int y = -startY; y < 0; y++) { + for (@Pc(11) int x = -startX; x < 0; x++) { + @Pc(18) int color = src[srcOff++]; + if (color == 0) { + dstOff++; + } else { + @Pc(24) int rgb = dst[dstOff]; + dst[dstOff++] = ((color & 0xFF00FF) * alpha + (rgb & 0xFF00FF) * invAlpha & 0xFF00FF00) + ((color & 0xFF00) * alpha + (rgb & 0xFF00) * invAlpha & 0xFF0000) >> 8; + } + } + + dstOff += dstStep; + srcOff += srcStep; + } + } + + @OriginalMember(owner = "client!mm", name = "a", descriptor = "([I[IIIIIIIIIII)V") + public static void drawResized(@OriginalArg(0) int[] dst, @OriginalArg(1) int[] src, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int dstOff, @OriginalArg(6) int arg5, @OriginalArg(7) int startX, @OriginalArg(8) int startY, @OriginalArg(9) int arg8, @OriginalArg(10) int arg9, @OriginalArg(11) int arg10) { + @Pc(1) int local1 = arg2; + for (@Pc(4) int y = -startY; y < 0; y++) { + @Pc(12) int local12 = (arg3 >> 16) * arg10; + for (@Pc(15) int x = -startX; x < 0; x++) { + @Pc(25) int color = src[(arg2 >> 16) + local12]; + if (color == 0) { + dstOff++; + } else { + dst[dstOff++] = color; + } + arg2 += arg8; + } + arg3 += arg9; + arg2 = local1; + dstOff += arg5; + } + } + + @OriginalMember(owner = "client!gf", name = "a", descriptor = "(Lclient!ve;IIB)Lclient!mm;") + public static SoftwareSprite loadSoftwareAlphaSprite(@OriginalArg(0) Js5 arg0, @OriginalArg(2) int arg1) { + return SpriteLoader.decode(arg0, 0, arg1) ? method2071() : null; + } + + @OriginalMember(owner = "client!hn", name = "d", descriptor = "(I)Lclient!mm;") + public static SoftwareSprite method2071() { + @Pc(13) int local13 = SpriteLoader.innerHeights[0] * SpriteLoader.innerWidths[0]; + @Pc(17) byte[] local17 = SpriteLoader.pixels[0]; + @Pc(78) SoftwareSprite local78; + if (SpriteLoader.hasAlpha[0]) { + @Pc(30) byte[] local30 = SpriteLoader.alpha[0]; + @Pc(33) int[] local33 = new int[local13]; + for (@Pc(35) int local35 = 0; local35 < local13; local35++) { + local33[local35] = (local30[local35] & 0xFF) << 24 | SpriteLoader.palette[local17[local35] & 0xFF]; + } + local78 = new SoftwareAlphaSprite(SpriteLoader.width, SpriteLoader.height, SpriteLoader.xOffsets[0], SpriteLoader.yOffsets[0], SpriteLoader.innerWidths[0], SpriteLoader.innerHeights[0], local33); + } else { + @Pc(83) int[] local83 = new int[local13]; + for (@Pc(85) int local85 = 0; local85 < local13; local85++) { + local83[local85] = SpriteLoader.palette[local17[local85] & 0xFF]; + } + local78 = new SoftwareSprite(SpriteLoader.width, SpriteLoader.height, SpriteLoader.xOffsets[0], SpriteLoader.yOffsets[0], SpriteLoader.innerWidths[0], SpriteLoader.innerHeights[0], local83); + } + SpriteLoader.clear(); + return local78; + } + + @OriginalMember(owner = "client!mm", name = "d", descriptor = "(I)V") + public final void method298(@OriginalArg(0) int arg0) { + if (this.width == this.anInt1860 && this.height == this.anInt1866) { + return; + } + @Pc(12) int local12 = arg0; + if (arg0 > this.anInt1863) { + local12 = this.anInt1863; + } + @Pc(21) int local21 = arg0; + if (arg0 + this.anInt1863 + this.width > this.anInt1860) { + local21 = this.anInt1860 - this.anInt1863 - this.width; + } + @Pc(42) int local42 = arg0; + if (arg0 > this.anInt1861) { + local42 = this.anInt1861; + } + @Pc(51) int local51 = arg0; + if (arg0 + this.anInt1861 + this.height > this.anInt1866) { + local51 = this.anInt1866 - this.anInt1861 - this.height; + } + @Pc(77) int local77 = this.width + local12 + local21; + @Pc(84) int local84 = this.height + local42 + local51; + @Pc(89) int[] local89 = new int[local77 * local84]; + for (@Pc(91) int local91 = 0; local91 < this.height; local91++) { + for (@Pc(97) int local97 = 0; local97 < this.width; local97++) { + local89[(local91 + local42) * local77 + local97 + local12] = this.pixels[local91 * this.width + local97]; + } + } + this.pixels = local89; + this.width = local77; + this.height = local84; + this.anInt1863 -= local12; + this.anInt1861 -= local42; + } + + @OriginalMember(owner = "client!mm", name = "a", descriptor = "()V") + public final void method299() { + @Pc(6) int[] local6 = new int[this.width * this.height]; + @Pc(8) int local8 = 0; + for (@Pc(10) int local10 = 0; local10 < this.height; local10++) { + for (@Pc(19) int local19 = this.width - 1; local19 >= 0; local19--) { + local6[local8++] = this.pixels[local19 + local10 * this.width]; + } + } + this.pixels = local6; + this.anInt1863 = this.anInt1860 - this.width - this.anInt1863; + } + + @OriginalMember(owner = "client!mm", name = "c", descriptor = "(II)V") + @Override + public void drawPixels(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + arg0 += this.anInt1863; + arg1 += this.anInt1861; + @Pc(15) int local15 = arg0 + arg1 * SoftwareRaster.width; + @Pc(17) int local17 = 0; + @Pc(20) int local20 = this.height; + @Pc(23) int local23 = this.width; + @Pc(27) int local27 = SoftwareRaster.width - local23; + @Pc(29) int local29 = 0; + @Pc(36) int local36; + if (arg1 < SoftwareRaster.clipTop) { + local36 = SoftwareRaster.clipTop - arg1; + local20 -= local36; + arg1 = SoftwareRaster.clipTop; + local17 = local36 * local23; + local15 += local36 * SoftwareRaster.width; + } + if (arg1 + local20 > SoftwareRaster.clipBottom) { + local20 -= arg1 + local20 - SoftwareRaster.clipBottom; + } + if (arg0 < SoftwareRaster.clipLeft) { + local36 = SoftwareRaster.clipLeft - arg0; + local23 -= local36; + arg0 = SoftwareRaster.clipLeft; + local17 += local36; + local15 += local36; + local29 = local36; + local27 += local36; + } + if (arg0 + local23 > SoftwareRaster.clipRight) { + local36 = arg0 + local23 - SoftwareRaster.clipRight; + local23 -= local36; + local29 += local36; + local27 += local36; + } + if (local23 > 0 && local20 > 0) { + method305(SoftwareRaster.pixels, this.pixels, local17, local15, local23, local20, local27, local29); + } + } + + @OriginalMember(owner = "client!mm", name = "b", descriptor = "()[I") + public final int[] method301() { + @Pc(6) int[] local6 = new int[this.anInt1860 * this.anInt1866]; + for (@Pc(8) int local8 = 0; local8 < this.height; local8++) { + @Pc(17) int local17 = local8 * this.width; + @Pc(28) int local28 = this.anInt1863 + (local8 + this.anInt1861) * this.anInt1860; + for (@Pc(30) int local30 = 0; local30 < this.width; local30++) { + @Pc(40) int local40 = this.pixels[local17++]; + local6[local28++] = local40 == 0 ? 0 : local40 | 0xFF000000; + } + } + return local6; + } + + @OriginalMember(owner = "client!mm", name = "a", descriptor = "(IIIIII)V") + @Override + protected void method1416(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + if (arg5 == 0) { + return; + } + @Pc(9) int local9 = arg0 - (this.anInt1863 << 4); + @Pc(16) int local16 = arg1 - (this.anInt1861 << 4); + @Pc(23) double local23 = (double) (arg4 & 0xFFFF) * 9.587379924285257E-5D; + @Pc(33) int local33 = (int) Math.floor(Math.sin(local23) * (double) arg5 + 0.5D); + @Pc(43) int local43 = (int) Math.floor(Math.cos(local23) * (double) arg5 + 0.5D); + @Pc(53) int local53 = -local9 * local43 + -local16 * local33; + @Pc(64) int local64 = --local9 * local33 + -local16 * local43; + @Pc(78) int local78 = ((this.width << 4) - local9) * local43 + -local16 * local33; + @Pc(93) int local93 = -((this.width << 4) - local9) * local33 + -local16 * local43; + @Pc(107) int local107 = -local9 * local43 + ((this.height << 4) - local16) * local33; + @Pc(122) int local122 = --local9 * local33 + ((this.height << 4) - local16) * local43; + @Pc(140) int local140 = ((this.width << 4) - local9) * local43 + ((this.height << 4) - local16) * local33; + @Pc(159) int local159 = -((this.width << 4) - local9) * local33 + ((this.height << 4) - local16) * local43; + @Pc(164) int local164; + @Pc(166) int local166; + if (local53 < local78) { + local164 = local53; + local166 = local78; + } else { + local164 = local78; + local166 = local53; + } + if (local107 < local164) { + local164 = local107; + } + if (local140 < local164) { + local164 = local140; + } + if (local107 > local166) { + local166 = local107; + } + if (local140 > local166) { + local166 = local140; + } + @Pc(196) int local196; + @Pc(198) int local198; + if (local64 < local93) { + local196 = local64; + local198 = local93; + } else { + local196 = local93; + local198 = local64; + } + if (local122 < local196) { + local196 = local122; + } + if (local159 < local196) { + local196 = local159; + } + if (local122 > local198) { + local198 = local122; + } + if (local159 > local198) { + local198 = local159; + } + local164 >>= 0xC; + local166 = local166 + 4095 >> 12; + local196 >>= 0xC; + local198 = local198 + 4095 >> 12; + local164 += arg2; + local166 += arg2; + local196 += arg3; + local198 += arg3; + local164 >>= 0x4; + local166 = local166 + 15 >> 4; + local196 >>= 0x4; + local198 = local198 + 15 >> 4; + if (local164 < SoftwareRaster.clipLeft) { + local164 = SoftwareRaster.clipLeft; + } + if (local166 > SoftwareRaster.clipRight) { + local166 = SoftwareRaster.clipRight; + } + if (local196 < SoftwareRaster.clipTop) { + local196 = SoftwareRaster.clipTop; + } + if (local198 > SoftwareRaster.clipBottom) { + local198 = SoftwareRaster.clipBottom; + } + local166 = local164 - local166; + if (local166 >= 0) { + return; + } + local198 = local196 - local198; + if (local198 >= 0) { + return; + } + @Pc(319) int local319 = local196 * SoftwareRaster.width + local164; + @Pc(324) double local324 = 1.6777216E7D / (double) arg5; + @Pc(333) int local333 = (int) Math.floor(Math.sin(local23) * local324 + 0.5D); + @Pc(342) int local342 = (int) Math.floor(Math.cos(local23) * local324 + 0.5D); + @Pc(350) int local350 = (local164 << 4) + 8 - arg2; + @Pc(358) int local358 = (local196 << 4) + 8 - arg3; + @Pc(368) int local368 = (local9 << 8) - (local358 * local333 >> 4); + @Pc(378) int local378 = (local16 << 8) + (local358 * local342 >> 4); + @Pc(384) int local384; + @Pc(388) int local388; + @Pc(468) int local468; + @Pc(394) int local394; + @Pc(432) int local432; + @Pc(496) int local496; + if (local342 != 0) { + @Pc(694) int local694; + if (local342 < 0) { + if (local333 == 0) { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local694 = local368 + (local350 * local342 >> 4); + local394 = local166; + if (local378 >= 0 && local378 - (this.height << 12) < 0) { + @Pc(717) int local717; + if ((local717 = local694 - (this.width << 12)) >= 0) { + local496 = (local342 - local717) / local342; + local394 = local166 + local496; + local694 += local342 * local496; + local388 = local319 + local496; + } + @Pc(745) int local745; + if ((local745 = (local694 - local342) / local342) > local394) { + local394 = local745; + } + while (local394 < 0) { + local432 = this.pixels[(local378 >> 12) * this.width + (local694 >> 12)]; + if (local432 == 0) { + local388++; + } else { + SoftwareRaster.pixels[local388++] = local432; + } + local694 += local342; + local394++; + } + } + local384++; + local378 += local342; + local319 += SoftwareRaster.width; + } + } else if (local333 < 0) { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local694 = local368 + (local350 * local342 >> 4); + local468 = local378 + (local350 * local333 >> 4); + local394 = local166; + @Pc(825) int local825; + if ((local825 = local694 - (this.width << 12)) >= 0) { + local496 = (local342 - local825) / local342; + local394 = local166 + local496; + local694 += local342 * local496; + local468 += local333 * local496; + local388 = local319 + local496; + } + @Pc(859) int local859; + if ((local859 = (local694 - local342) / local342) > local394) { + local394 = local859; + } + @Pc(871) int local871; + if ((local871 = local468 - (this.height << 12)) >= 0) { + local496 = (local333 - local871) / local333; + local394 += local496; + local694 += local342 * local496; + local468 += local333 * local496; + local388 += local496; + } + @Pc(905) int local905; + if ((local905 = (local468 - local333) / local333) > local394) { + local394 = local905; + } + while (local394 < 0) { + local432 = this.pixels[(local468 >> 12) * this.width + (local694 >> 12)]; + if (local432 == 0) { + local388++; + } else { + SoftwareRaster.pixels[local388++] = local432; + } + local694 += local342; + local468 += local333; + local394++; + } + local384++; + local368 -= local333; + local378 += local342; + local319 += SoftwareRaster.width; + } + } else { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local694 = local368 + (local350 * local342 >> 4); + local468 = local378 + (local350 * local333 >> 4); + local394 = local166; + @Pc(991) int local991; + if ((local991 = local694 - (this.width << 12)) >= 0) { + local496 = (local342 - local991) / local342; + local394 = local166 + local496; + local694 += local342 * local496; + local468 += local333 * local496; + local388 = local319 + local496; + } + @Pc(1025) int local1025; + if ((local1025 = (local694 - local342) / local342) > local394) { + local394 = local1025; + } + if (local468 < 0) { + local496 = (local333 - local468 - 1) / local333; + local394 += local496; + local694 += local342 * local496; + local468 += local333 * local496; + local388 += local496; + } + @Pc(1073) int local1073; + if ((local1073 = (local468 + 1 - (this.height << 12) - local333) / local333) > local394) { + local394 = local1073; + } + while (local394 < 0) { + local432 = this.pixels[(local468 >> 12) * this.width + (local694 >> 12)]; + if (local432 == 0) { + local388++; + } else { + SoftwareRaster.pixels[local388++] = local432; + } + local694 += local342; + local468 += local333; + local394++; + } + local384++; + local368 -= local333; + local378 += local342; + local319 += SoftwareRaster.width; + } + } + } else if (local333 == 0) { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local694 = local368 + (local350 * local342 >> 4); + local394 = local166; + if (local378 >= 0 && local378 - (this.height << 12) < 0) { + if (local694 < 0) { + local496 = (local342 - local694 - 1) / local342; + local394 = local166 + local496; + local694 += local342 * local496; + local388 = local319 + local496; + } + @Pc(1196) int local1196; + if ((local1196 = (local694 + 1 - (this.width << 12) - local342) / local342) > local394) { + local394 = local1196; + } + while (local394 < 0) { + local432 = this.pixels[(local378 >> 12) * this.width + (local694 >> 12)]; + if (local432 == 0) { + local388++; + } else { + SoftwareRaster.pixels[local388++] = local432; + } + local694 += local342; + local394++; + } + } + local384++; + local378 += local342; + local319 += SoftwareRaster.width; + } + } else if (local333 < 0) { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local694 = local368 + (local350 * local342 >> 4); + local468 = local378 + (local350 * local333 >> 4); + local394 = local166; + if (local694 < 0) { + local496 = (local342 - local694 - 1) / local342; + local394 = local166 + local496; + local694 += local342 * local496; + local468 += local333 * local496; + local388 = local319 + local496; + } + @Pc(1312) int local1312; + if ((local1312 = (local694 + 1 - (this.width << 12) - local342) / local342) > local394) { + local394 = local1312; + } + @Pc(1324) int local1324; + if ((local1324 = local468 - (this.height << 12)) >= 0) { + local496 = (local333 - local1324) / local333; + local394 += local496; + local694 += local342 * local496; + local468 += local333 * local496; + local388 += local496; + } + @Pc(1358) int local1358; + if ((local1358 = (local468 - local333) / local333) > local394) { + local394 = local1358; + } + while (local394 < 0) { + local432 = this.pixels[(local468 >> 12) * this.width + (local694 >> 12)]; + if (local432 == 0) { + local388++; + } else { + SoftwareRaster.pixels[local388++] = local432; + } + local694 += local342; + local468 += local333; + local394++; + } + local384++; + local368 -= local333; + local378 += local342; + local319 += SoftwareRaster.width; + } + } else { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local694 = local368 + (local350 * local342 >> 4); + local468 = local378 + (local350 * local333 >> 4); + local394 = local166; + if (local694 < 0) { + local496 = (local342 - local694 - 1) / local342; + local394 = local166 + local496; + local694 += local342 * local496; + local468 += local333 * local496; + local388 = local319 + local496; + } + @Pc(1480) int local1480; + if ((local1480 = (local694 + 1 - (this.width << 12) - local342) / local342) > local394) { + local394 = local1480; + } + if (local468 < 0) { + local496 = (local333 - local468 - 1) / local333; + local394 += local496; + local694 += local342 * local496; + local468 += local333 * local496; + local388 += local496; + } + @Pc(1528) int local1528; + if ((local1528 = (local468 + 1 - (this.height << 12) - local333) / local333) > local394) { + local394 = local1528; + } + while (local394 < 0) { + local432 = this.pixels[(local468 >> 12) * this.width + (local694 >> 12)]; + if (local432 == 0) { + local388++; + } else { + SoftwareRaster.pixels[local388++] = local432; + } + local694 += local342; + local468 += local333; + local394++; + } + local384++; + local368 -= local333; + local378 += local342; + local319 += SoftwareRaster.width; + } + } + } else if (local333 == 0) { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local394 = local166; + if (local368 >= 0 && local378 >= 0 && local368 - (this.width << 12) < 0 && local378 - (this.height << 12) < 0) { + while (local394 < 0) { + local432 = this.pixels[(local378 >> 12) * this.width + (local368 >> 12)]; + if (local432 == 0) { + local388++; + } else { + SoftwareRaster.pixels[local388++] = local432; + } + local394++; + } + } + local384++; + local319 += SoftwareRaster.width; + } + } else if (local333 < 0) { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local468 = local378 + (local350 * local333 >> 4); + local394 = local166; + if (local368 >= 0 && local368 - (this.width << 12) < 0) { + @Pc(489) int local489; + if ((local489 = local468 - (this.height << 12)) >= 0) { + local496 = (local333 - local489) / local333; + local394 = local166 + local496; + local468 += local333 * local496; + local388 = local319 + local496; + } + @Pc(517) int local517; + if ((local517 = (local468 - local333) / local333) > local394) { + local394 = local517; + } + while (local394 < 0) { + local432 = this.pixels[(local468 >> 12) * this.width + (local368 >> 12)]; + if (local432 == 0) { + local388++; + } else { + SoftwareRaster.pixels[local388++] = local432; + } + local468 += local333; + local394++; + } + } + local384++; + local368 -= local333; + local319 += SoftwareRaster.width; + } + } else { + local384 = local198; + while (local384 < 0) { + local388 = local319; + local468 = local378 + (local350 * local333 >> 4); + local394 = local166; + if (local368 >= 0 && local368 - (this.width << 12) < 0) { + if (local468 < 0) { + local496 = (local333 - local468 - 1) / local333; + local394 = local166 + local496; + local468 += local333 * local496; + local388 = local319 + local496; + } + @Pc(630) int local630; + if ((local630 = (local468 + 1 - (this.height << 12) - local333) / local333) > local394) { + local394 = local630; + } + while (local394 < 0) { + local432 = this.pixels[(local468 >> 12) * this.width + (local368 >> 12)]; + if (local432 == 0) { + local388++; + } else { + SoftwareRaster.pixels[local388++] = local432; + } + local468 += local333; + local394++; + } + } + local384++; + local368 -= local333; + local319 += SoftwareRaster.width; + } + } + } + + @OriginalMember(owner = "client!mm", name = "e", descriptor = "(I)V") + public final void drawOutline(@OriginalArg(0) int rgb) { + @Pc(6) int[] dest = new int[this.width * this.height]; + @Pc(8) int destOff = 0; + for (@Pc(10) int y = 0; y < this.height; y++) { + for (@Pc(16) int x = 0; x < this.width; x++) { + @Pc(25) int src = this.pixels[destOff]; + if (src == 0) { + if (x > 0 && this.pixels[destOff - 1] != 0) { + src = rgb; + } else if (y > 0 && this.pixels[destOff - this.width] != 0) { + src = rgb; + } else if (x < this.width - 1 && this.pixels[destOff + 1] != 0) { + src = rgb; + } else if (y < this.height - 1 && this.pixels[destOff + this.width] != 0) { + src = rgb; + } + } + dest[destOff++] = src; + } + } + this.pixels = dest; + } + + @OriginalMember(owner = "client!mm", name = "c", descriptor = "()V") + public final void makeTarget() { + SoftwareRaster.setSize(this.pixels, this.width, this.height); + } + + @OriginalMember(owner = "client!mm", name = "a", descriptor = "(IIIIIIDI)V") + public void method306(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(6) double arg2) { + try { + @Pc(15) int local15 = (int) (Math.sin(arg2) * 65536.0D); + @Pc(21) int local21 = (int) (Math.cos(arg2) * 65536.0D); + @Pc(27) int local27 = local15 * 256 >> 8; + @Pc(33) int local33 = local21 * 256 >> 8; + @Pc(45) int local45 = local27 * -10 + local33 * -10 + 983040; + @Pc(57) int local57 = local33 * -10 + 983040 - local27 * -10; + @Pc(63) int local63 = arg0 + arg1 * SoftwareRaster.width; + for (@Pc(65) int local65 = 0; local65 < 20; local65++) { + @Pc(70) int local70 = local63; + @Pc(72) int local72 = local45; + @Pc(74) int local74 = local57; + for (@Pc(77) int local77 = -20; local77 < 0; local77++) { + @Pc(93) int local93 = this.pixels[(local72 >> 16) + (local74 >> 16) * this.width]; + if (local93 == 0) { + local70++; + } else { + SoftwareRaster.pixels[local70++] = local93; + } + local72 += local33; + local74 -= local27; + } + local45 += local27; + local57 += local33; + local63 += SoftwareRaster.width; + } + } catch (@Pc(128) Exception local128) { + } + } + + @OriginalMember(owner = "client!mm", name = "d", descriptor = "(II)V") + @Override + public void renderHorizontalFlip(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + arg0 += this.anInt1860 - this.width - this.anInt1863; + arg1 += this.anInt1861; + @Pc(21) int local21 = arg0 + arg1 * SoftwareRaster.width; + @Pc(26) int local26 = this.width - 1; + @Pc(29) int local29 = this.height; + @Pc(32) int local32 = this.width; + @Pc(36) int local36 = SoftwareRaster.width - local32; + @Pc(40) int local40 = local32 + local32; + @Pc(47) int local47; + if (arg1 < SoftwareRaster.clipTop) { + local47 = SoftwareRaster.clipTop - arg1; + local29 -= local47; + arg1 = SoftwareRaster.clipTop; + local26 += local47 * local32; + local21 += local47 * SoftwareRaster.width; + } + if (arg1 + local29 > SoftwareRaster.clipBottom) { + local29 -= arg1 + local29 - SoftwareRaster.clipBottom; + } + if (arg0 < SoftwareRaster.clipLeft) { + local47 = SoftwareRaster.clipLeft - arg0; + local32 -= local47; + arg0 = SoftwareRaster.clipLeft; + local26 -= local47; + local21 += local47; + local40 -= local47; + local36 += local47; + } + if (arg0 + local32 > SoftwareRaster.clipRight) { + local47 = arg0 + local32 - SoftwareRaster.clipRight; + local32 -= local47; + local40 -= local47; + local36 += local47; + } + if (local32 > 0 && local29 > 0) { + method302(SoftwareRaster.pixels, this.pixels, local26, local21, local32, local29, local36, local40); + } + } + + @OriginalMember(owner = "client!mm", name = "a", descriptor = "(III)V") + @Override + public void renderAlpha(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int alpha) { + x += this.anInt1863; + y += this.anInt1861; + @Pc(15) int local15 = x + y * SoftwareRaster.width; + @Pc(17) int local17 = 0; + @Pc(20) int local20 = this.height; + @Pc(23) int local23 = this.width; + @Pc(27) int local27 = SoftwareRaster.width - local23; + @Pc(29) int local29 = 0; + @Pc(36) int local36; + if (y < SoftwareRaster.clipTop) { + local36 = SoftwareRaster.clipTop - y; + local20 -= local36; + y = SoftwareRaster.clipTop; + local17 = local36 * local23; + local15 += local36 * SoftwareRaster.width; + } + if (y + local20 > SoftwareRaster.clipBottom) { + local20 -= y + local20 - SoftwareRaster.clipBottom; + } + if (x < SoftwareRaster.clipLeft) { + local36 = SoftwareRaster.clipLeft - x; + local23 -= local36; + x = SoftwareRaster.clipLeft; + local17 += local36; + local15 += local36; + local29 = local36; + local27 += local36; + } + if (x + local23 > SoftwareRaster.clipRight) { + local36 = x + local23 - SoftwareRaster.clipRight; + local23 -= local36; + local29 += local36; + local27 += local36; + } + if (local23 > 0 && local20 > 0) { + drawAlpha(SoftwareRaster.pixels, this.pixels, local17, local15, local23, local20, local27, local29, alpha); + } + } + + @OriginalMember(owner = "client!mm", name = "e", descriptor = "(II)V") + @Override + public void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + arg0 += this.anInt1863; + arg1 += this.anInt1861; + @Pc(15) int local15 = arg0 + arg1 * SoftwareRaster.width; + @Pc(17) int local17 = 0; + @Pc(20) int local20 = this.height; + @Pc(23) int local23 = this.width; + @Pc(27) int local27 = SoftwareRaster.width - local23; + @Pc(29) int local29 = 0; + @Pc(36) int local36; + if (arg1 < SoftwareRaster.clipTop) { + local36 = SoftwareRaster.clipTop - arg1; + local20 -= local36; + arg1 = SoftwareRaster.clipTop; + local17 = local36 * local23; + local15 += local36 * SoftwareRaster.width; + } + if (arg1 + local20 > SoftwareRaster.clipBottom) { + local20 -= arg1 + local20 - SoftwareRaster.clipBottom; + } + if (arg0 < SoftwareRaster.clipLeft) { + local36 = SoftwareRaster.clipLeft - arg0; + local23 -= local36; + arg0 = SoftwareRaster.clipLeft; + local17 += local36; + local15 += local36; + local29 = local36; + local27 += local36; + } + if (arg0 + local23 > SoftwareRaster.clipRight) { + local36 = arg0 + local23 - SoftwareRaster.clipRight; + local23 -= local36; + local29 += local36; + local27 += local36; + } + if (local23 > 0 && local20 > 0) { + method300(SoftwareRaster.pixels, this.pixels, local17, local15, local23, local20, local27, local29); + } + } + + @OriginalMember(owner = "client!mm", name = "d", descriptor = "()V") + public final void method309() { + @Pc(6) int[] local6 = new int[this.width * this.height]; + @Pc(8) int local8 = 0; + for (@Pc(13) int local13 = this.height - 1; local13 >= 0; local13--) { + for (@Pc(17) int local17 = 0; local17 < this.width; local17++) { + local6[local8++] = this.pixels[local17 + local13 * this.width]; + } + } + this.pixels = local6; + this.anInt1861 = this.anInt1866 - this.height - this.anInt1861; + } + + @OriginalMember(owner = "client!mm", name = "a", descriptor = "(IIIIIIII[I[I)V") + public void renderRotated(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int w, @OriginalArg(3) int h, @OriginalArg(4) int anchorX, @OriginalArg(5) int anchorY, @OriginalArg(6) int theta, @OriginalArg(7) int zoom, @OriginalArg(8) int[] lineStarts, @OriginalArg(9) int[] arg9) { + try { + @Pc(4) int centerX = -w / 2; + @Pc(9) int centerY = -h / 2; + @Pc(18) int sin1 = (int) (Math.sin((double) theta / 326.11D) * 65536.0D); + @Pc(27) int cos1 = (int) (Math.cos((double) theta / 326.11D) * 65536.0D); + @Pc(33) int sin = sin1 * zoom >> 8; + @Pc(39) int cos = cos1 * zoom >> 8; + @Pc(51) int originX = (anchorX << 16) + centerY * sin + centerX * cos; + @Pc(63) int originY = (anchorY << 16) + (centerY * cos - centerX * sin); + @Pc(69) int origin = x + y * SoftwareRaster.width; + for (@Pc(71) int iy = 0; iy < h; iy++) { + @Pc(78) int start = lineStarts[iy]; + @Pc(82) int dstOff = origin + start; + @Pc(88) int dstX = originX + cos * start; + @Pc(94) int dstY = originY - sin * start; + for (@Pc(99) int ix = -arg9[iy]; ix < 0; ix++) { + if (GlobalConfig.BILINEAR_MINIMAP) { + int x1 = dstX >> 16; + int y1 = dstY >> 16; + int x2 = x1 + 1; + int y2 = y1 + 1; + int sampleColor1 = this.pixels[x1 + y1 * this.width]; + int sampleColor2 = this.pixels[x2 + y1 * this.width]; + int sampleColor3 = this.pixels[x1 + y2 * this.width]; + int sampleColor4 = this.pixels[x2 + y2 * this.width]; + int x1Distance = (dstX >> 8) - (x1 << 8); + int y1Distance = (dstY >> 8) - (y1 << 8); + int x2Distance = (x2 << 8) - (dstX >> 8); + int y2Distance = (y2 << 8) - (dstY >> 8); + int sampleAlpha1 = x2Distance * y2Distance; + int sampleAlpha2 = x1Distance * y2Distance; + int sampleAlpha3 = x2Distance * y1Distance; + int sampleAlpha4 = x1Distance * y1Distance; + int red = (sampleColor1 >> 16 & 0xff) * sampleAlpha1 + (sampleColor2 >> 16 & 0xff) * sampleAlpha2 + (sampleColor3 >> 16 & 0xff) * sampleAlpha3 + (sampleColor4 >> 16 & 0xff) * sampleAlpha4 & 0xff0000; + int green = (sampleColor1 >> 8 & 0xff) * sampleAlpha1 + (sampleColor2 >> 8 & 0xff) * sampleAlpha2 + (sampleColor3 >> 8 & 0xff) * sampleAlpha3 + (sampleColor4 >> 8 & 0xff) * sampleAlpha4 >> 8 & 0xff00; + int blue = (sampleColor1 & 0xff) * sampleAlpha1 + (sampleColor2 & 0xff) * sampleAlpha2 + (sampleColor3 & 0xff) * sampleAlpha3 + (sampleColor4 & 0xff) * sampleAlpha4 >> 16; + SoftwareRaster.pixels[dstOff++] = red | green | blue; + } else { + SoftwareRaster.pixels[dstOff++] = this.pixels[(dstX >> 16) + (dstY >> 16) * this.width]; + } + dstX += cos; + dstY -= sin; + } + originX += sin; + originY += cos; + origin += SoftwareRaster.width; + } + } catch (@Pc(144) Exception local144) { + } + } + + @OriginalMember(owner = "client!mm", name = "e", descriptor = "()V") + public final void trim() { + if (this.width == this.anInt1860 && this.height == this.anInt1866) { + return; + } + @Pc(17) int[] local17 = new int[this.anInt1860 * this.anInt1866]; + for (@Pc(19) int local19 = 0; local19 < this.height; local19++) { + for (@Pc(25) int local25 = 0; local25 < this.width; local25++) { + local17[(local19 + this.anInt1861) * this.anInt1860 + local25 + this.anInt1863] = this.pixels[local19 * this.width + local25]; + } + } + this.pixels = local17; + this.width = this.anInt1860; + this.height = this.anInt1866; + this.anInt1863 = 0; + this.anInt1861 = 0; + } + + @OriginalMember(owner = "client!mm", name = "a", descriptor = "(II[I[I)V") + public final void method312(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int[] arg2, @OriginalArg(3) int[] arg3) { + if (SoftwareRaster.clipBottom - SoftwareRaster.clipTop != arg2.length) { + throw new IllegalStateException(); + } + arg0 += this.anInt1863; + arg1 += this.anInt1861; + @Pc(21) int local21 = 0; + @Pc(24) int local24 = this.height; + @Pc(27) int local27 = this.width; + @Pc(31) int local31 = SoftwareRaster.width - local27; + @Pc(33) int local33 = 0; + @Pc(39) int local39 = arg0 + arg1 * SoftwareRaster.width; + @Pc(46) int local46; + if (arg1 < SoftwareRaster.clipTop) { + local46 = SoftwareRaster.clipTop - arg1; + local24 -= local46; + arg1 = SoftwareRaster.clipTop; + local21 = local46 * local27; + local39 += local46 * SoftwareRaster.width; + } + if (arg1 + local24 > SoftwareRaster.clipBottom) { + local24 -= arg1 + local24 - SoftwareRaster.clipBottom; + } + if (arg0 < SoftwareRaster.clipLeft) { + local46 = SoftwareRaster.clipLeft - arg0; + local27 -= local46; + arg0 = SoftwareRaster.clipLeft; + local21 += local46; + local39 += local46; + local33 = local46; + local31 += local46; + } + if (arg0 + local27 > SoftwareRaster.clipRight) { + local46 = arg0 + local27 - SoftwareRaster.clipRight; + local27 -= local46; + local33 += local46; + local31 += local46; + } + if (local27 <= 0 || local24 <= 0) { + return; + } + local46 = arg0 - SoftwareRaster.clipLeft; + @Pc(142) int local142 = arg1 - SoftwareRaster.clipTop; + for (@Pc(144) int local144 = local142; local144 < local142 + local24; local144++) { + @Pc(153) int local153 = arg2[local144]; + @Pc(157) int local157 = arg3[local144]; + @Pc(159) int local159 = local27; + @Pc(166) int local166; + if (local46 > local153) { + local166 = local46 - local153; + if (local166 >= local157) { + local21 += local27 + local33; + local39 += local27 + local31; + continue; + } + local157 -= local166; + } else { + local166 = local153 - local46; + if (local166 >= local27) { + local21 += local27 + local33; + local39 += local27 + local31; + continue; + } + local21 += local166; + local159 = local27 - local166; + local39 += local166; + } + local166 = 0; + if (local159 < local157) { + local157 = local159; + } else { + local166 = local159 - local157; + } + for (@Pc(234) int local234 = -local157; local234 < 0; local234++) { + @Pc(242) int local242 = this.pixels[local21++]; + if (local242 == 0) { + local39++; + } else { + SoftwareRaster.pixels[local39++] = local242; + } + } + local21 += local166 + local33; + local39 += local166 + local31; + } + } + + @OriginalMember(owner = "client!mm", name = "b", descriptor = "(IIIIIIII[I[I)V") + public void renderRotated(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int w, @OriginalArg(3) int h, @OriginalArg(4) int anchorX, @OriginalArg(5) int anchorY, @OriginalArg(6) int theta, @OriginalArg(8) int[] lineStart, @OriginalArg(9) int[] lineWidth) { + try { + @Pc(4) int centerX = -w / 2; + @Pc(9) int centerY = -h / 2; + @Pc(18) int sin1 = (int) (Math.sin((double) theta / 326.11D) * 65536.0D); + @Pc(27) int cos1 = (int) (Math.cos((double) theta / 326.11D) * 65536.0D); + @Pc(33) int sin = sin1 * 256 >> 8; + @Pc(39) int cos = cos1 * 256 >> 8; + @Pc(51) int originX = (anchorX << 16) + centerY * sin + centerX * cos; + @Pc(63) int originY = (anchorY << 16) + (centerY * cos - centerX * sin); + @Pc(69) int origin = x + y * SoftwareRaster.width; + for (@Pc(71) int iy = 0; iy < h; iy++) { + @Pc(78) int start = lineStart[iy]; + @Pc(82) int dstOff = origin + start; + @Pc(88) int dstX = originX + cos * start; + @Pc(94) int dstY = originY - sin * start; + for (@Pc(99) int ix = -lineWidth[iy]; ix < 0; ix++) { + @Pc(115) int color = this.pixels[(dstX >> 16) + (dstY >> 16) * this.width]; + if (color == 0) { + dstOff++; + } else { + if (GlobalConfig.BILINEAR_MINIMAP) { + int x1 = dstX >> 16; + int y1 = dstY >> 16; + int x2 = x1 + 1; + int y2 = y1 + 1; + int sampleColor1 = this.pixels[x1 + y1 * this.width]; + int sampleColor2 = this.pixels[x2 + y1 * this.width]; + int sampleColor3 = this.pixels[x1 + y2 * this.width]; + int sampleColor4 = this.pixels[x2 + y2 * this.width]; + int x1Distance = (dstX >> 8) - (x1 << 8); + int y1Distance = (dstY >> 8) - (y1 << 8); + int x2Distance = (x2 << 8) - (dstX >> 8); + int y2Distance = (y2 << 8) - (dstY >> 8); + int sampleAlpha1 = x2Distance * y2Distance; + int sampleAlpha2 = x1Distance * y2Distance; + int sampleAlpha3 = x2Distance * y1Distance; + int sampleAlpha4 = x1Distance * y1Distance; + int red = (sampleColor1 >> 16 & 0xff) * sampleAlpha1 + (sampleColor2 >> 16 & 0xff) * sampleAlpha2 + (sampleColor3 >> 16 & 0xff) * sampleAlpha3 + (sampleColor4 >> 16 & 0xff) * sampleAlpha4 & 0xff0000; + int green = (sampleColor1 >> 8 & 0xff) * sampleAlpha1 + (sampleColor2 >> 8 & 0xff) * sampleAlpha2 + (sampleColor3 >> 8 & 0xff) * sampleAlpha3 + (sampleColor4 >> 8 & 0xff) * sampleAlpha4 >> 8 & 0xff00; + int blue = (sampleColor1 & 0xff) * sampleAlpha1 + (sampleColor2 & 0xff) * sampleAlpha2 + (sampleColor3 & 0xff) * sampleAlpha3 + (sampleColor4 & 0xff) * sampleAlpha4 >> 16; + SoftwareRaster.pixels[dstOff++] = red | green | blue; + } else { + SoftwareRaster.pixels[dstOff++] = color; + } + } + dstX += cos; + dstY -= sin; + } + originX += sin; + originY += cos; + origin += SoftwareRaster.width; + } + } catch (@Pc(150) Exception ex) { + } + } + + @OriginalMember(owner = "client!mm", name = "f", descriptor = "(I)V") + public final void drawShadow(@OriginalArg(0) int rgb) { + for (@Pc(4) int y = this.height - 1; y > 0; y--) { + @Pc(11) int row = y * this.width; + for (@Pc(16) int x = this.width - 1; x > 0; x--) { + if (this.pixels[x + row] == 0 && this.pixels[x + row - this.width - 1] != 0) { + this.pixels[x + row] = rgb; + } + } + } + } + + @OriginalMember(owner = "client!mm", name = "b", descriptor = "(IIIII)V") + @Override + public void renderAlpha(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (arg2 <= 0 || arg3 <= 0) { + return; + } + @Pc(7) int local7 = this.width; + @Pc(10) int local10 = this.height; + @Pc(12) int local12 = 0; + @Pc(14) int local14 = 0; + @Pc(17) int local17 = this.anInt1860; + @Pc(20) int local20 = this.anInt1866; + @Pc(26) int local26 = (local17 << 16) / arg2; + @Pc(32) int local32 = (local20 << 16) / arg3; + @Pc(46) int local46; + if (this.anInt1863 > 0) { + local46 = ((this.anInt1863 << 16) + local26 - 1) / local26; + arg0 += local46; + local12 = local46 * local26 - (this.anInt1863 << 16); + } + if (this.anInt1861 > 0) { + local46 = ((this.anInt1861 << 16) + local32 - 1) / local32; + arg1 += local46; + local14 = local46 * local32 - (this.anInt1861 << 16); + } + if (local7 < local17) { + arg2 = ((local7 << 16) + local26 - local12 - 1) / local26; + } + if (local10 < local20) { + arg3 = ((local10 << 16) + local32 - local14 - 1) / local32; + } + local46 = arg0 + arg1 * SoftwareRaster.width; + @Pc(130) int local130 = SoftwareRaster.width - arg2; + if (arg1 + arg3 > SoftwareRaster.clipBottom) { + arg3 -= arg1 + arg3 - SoftwareRaster.clipBottom; + } + @Pc(150) int local150; + if (arg1 < SoftwareRaster.clipTop) { + local150 = SoftwareRaster.clipTop - arg1; + arg3 -= local150; + local46 += local150 * SoftwareRaster.width; + local14 += local32 * local150; + } + if (arg0 + arg2 > SoftwareRaster.clipRight) { + local150 = arg0 + arg2 - SoftwareRaster.clipRight; + arg2 -= local150; + local130 += local150; + } + if (arg0 < SoftwareRaster.clipLeft) { + local150 = SoftwareRaster.clipLeft - arg0; + arg2 -= local150; + local46 += local150; + local12 += local26 * local150; + local130 += local150; + } + method307(SoftwareRaster.pixels, this.pixels, local12, local14, local46, local130, arg2, arg3, local26, local32, local7, arg4); + } + + @OriginalMember(owner = "client!mm", name = "b", descriptor = "(III)V") + public final void method315(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + for (@Pc(1) int local1 = 0; local1 < this.pixels.length; local1++) { + @Pc(11) int local11 = this.pixels[local1]; + if (local11 != 0) { + @Pc(19) int local19 = local11 >> 16 & 0xFF; + local19 += arg0; + if (local19 < 1) { + local19 = 1; + } else if (local19 > 255) { + local19 = 255; + } + @Pc(40) int local40 = local11 >> 8 & 0xFF; + local40 += arg1; + if (local40 < 1) { + local40 = 1; + } else if (local40 > 255) { + local40 = 255; + } + @Pc(59) int local59 = local11 & 0xFF; + local59 += arg2; + if (local59 < 1) { + local59 = 1; + } else if (local59 > 255) { + local59 = 255; + } + this.pixels[local1] = (local19 << 16) + (local40 << 8) + local59; + } + } + } + + @OriginalMember(owner = "client!mm", name = "a", descriptor = "(IIII)V") + @Override + public void renderResized(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int width, @OriginalArg(3) int height) { + if (width <= 0 || height <= 0) { + return; + } + + @Pc(7) int local7 = this.width; + @Pc(10) int local10 = this.height; + @Pc(12) int local12 = 0; + @Pc(14) int local14 = 0; + @Pc(17) int local17 = this.anInt1860; + @Pc(20) int local20 = this.anInt1866; + @Pc(26) int local26 = (local17 << 16) / width; + @Pc(32) int local32 = (local20 << 16) / height; + @Pc(46) int local46; + if (this.anInt1863 > 0) { + local46 = ((this.anInt1863 << 16) + local26 - 1) / local26; + x += local46; + local12 = local46 * local26 - (this.anInt1863 << 16); + } + + if (this.anInt1861 > 0) { + local46 = ((this.anInt1861 << 16) + local32 - 1) / local32; + y += local46; + local14 = local46 * local32 - (this.anInt1861 << 16); + } + + if (local7 < local17) { + width = ((local7 << 16) + local26 - local12 - 1) / local26; + } + + if (local10 < local20) { + height = ((local10 << 16) + local32 - local14 - 1) / local32; + } + + local46 = x + y * SoftwareRaster.width; + @Pc(130) int local130 = SoftwareRaster.width - width; + if (y + height > SoftwareRaster.clipBottom) { + height -= y + height - SoftwareRaster.clipBottom; + } + + @Pc(150) int local150; + if (y < SoftwareRaster.clipTop) { + local150 = SoftwareRaster.clipTop - y; + height -= local150; + local46 += local150 * SoftwareRaster.width; + local14 += local32 * local150; + } + + if (x + width > SoftwareRaster.clipRight) { + local150 = x + width - SoftwareRaster.clipRight; + width -= local150; + local130 += local150; + } + + if (x < SoftwareRaster.clipLeft) { + local150 = SoftwareRaster.clipLeft - x; + width -= local150; + local46 += local150; + local12 += local26 * local150; + local130 += local150; + } + + drawResized(SoftwareRaster.pixels, this.pixels, local12, local14, local46, local130, width, height, local26, local32, local7); + } +} diff --git a/client/src/main/java/rt4/Song.java b/client/src/main/java/rt4/Song.java new file mode 100644 index 0000000..b04ac29 --- /dev/null +++ b/client/src/main/java/rt4/Song.java @@ -0,0 +1,384 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!rf") +public final class Song extends Node { + + @OriginalMember(owner = "client!rf", name = "p", descriptor = "Lclient!sc;") + public HashTable programs; + + @OriginalMember(owner = "client!rf", name = "q", descriptor = "[B") + public final byte[] midiBytes; + + @OriginalMember(owner = "client!rf", name = "", descriptor = "(Lclient!wa;)V") + public Song(@OriginalArg(0) Buffer in) { + in.offset = in.data.length - 3; + @Pc(12) int tracks = in.g1(); + @Pc(16) int division = in.g2(); + @Pc(22) int midiLen = tracks * 10 + 14; + in.offset = 0; + @Pc(27) int tempoChanges = 0; + @Pc(29) int controllerEvents = 0; + @Pc(31) int noteOnEvents = 0; + @Pc(33) int noteOffEvents = 0; + @Pc(35) int pitchWheelEvents = 0; + @Pc(37) int channelPressureEvents = 0; + @Pc(39) int keyPressureEvents = 0; + @Pc(41) int bankSelectEvents = 0; + @Pc(43) int deltaTimePos; + @Pc(48) int status; + @Pc(52) int statusAndChannel; + for (deltaTimePos = 0; deltaTimePos < tracks; deltaTimePos++) { + status = -1; + while (true) { + statusAndChannel = in.g1(); + if (statusAndChannel != status) { + midiLen++; + } + status = statusAndChannel & 0xF; + if (statusAndChannel == 7) { + break; + } + if (statusAndChannel == 23) { + tempoChanges++; + } else if (status == 0) { + noteOnEvents++; + } else if (status == 1) { + noteOffEvents++; + } else if (status == 2) { + controllerEvents++; + } else if (status == 3) { + pitchWheelEvents++; + } else if (status == 4) { + channelPressureEvents++; + } else if (status == 5) { + keyPressureEvents++; + } else if (status == 6) { + bankSelectEvents++; + } else { + throw new RuntimeException(); + } + } + } + midiLen += tempoChanges * 5; + midiLen += (noteOnEvents + noteOffEvents + controllerEvents + pitchWheelEvents + keyPressureEvents) * 2; + midiLen += channelPressureEvents + bankSelectEvents; + deltaTimePos = in.offset; + status = tracks + tempoChanges + controllerEvents + noteOnEvents + noteOffEvents + pitchWheelEvents + channelPressureEvents + keyPressureEvents + bankSelectEvents; + for (statusAndChannel = 0; statusAndChannel < status; statusAndChannel++) { + in.gVarInt(); + } + midiLen += in.offset - deltaTimePos; + statusAndChannel = in.offset; + @Pc(179) int modulationWheelMsbEvents = 0; + @Pc(181) int modulationWheelLsbEvents = 0; + @Pc(183) int channelVolumeMsbEvents = 0; + @Pc(185) int channelVolumeLsbEvents = 0; + @Pc(187) int panMsbEvents = 0; + @Pc(189) int panLsbEvents = 0; + @Pc(191) int nonRegisteredMsbEvents = 0; + @Pc(193) int nonRegisteredLsbEvents = 0; + @Pc(195) int registeredMsbEvents = 0; + @Pc(197) int registeredLsbEvents = 0; + @Pc(199) int otherKnownControllerEvents = 0; + @Pc(201) int unknownControllerEvents = 0; + @Pc(203) int controller = 0; + @Pc(205) int i; + for (i = 0; i < controllerEvents; i++) { + controller = controller + in.g1() & 0x7F; + if (controller == 0 || controller == 32) { + bankSelectEvents++; + } else if (controller == 1) { + modulationWheelMsbEvents++; + } else if (controller == 33) { + modulationWheelLsbEvents++; + } else if (controller == 7) { + channelVolumeMsbEvents++; + } else if (controller == 39) { + channelVolumeLsbEvents++; + } else if (controller == 10) { + panMsbEvents++; + } else if (controller == 42) { + panLsbEvents++; + } else if (controller == 99) { + nonRegisteredMsbEvents++; + } else if (controller == 98) { + nonRegisteredLsbEvents++; + } else if (controller == 101) { + registeredMsbEvents++; + } else if (controller == 100) { + registeredLsbEvents++; + } else if (controller == 64 || controller == 65 || controller == 120 || controller == 121 || controller == 123) { + otherKnownControllerEvents++; + } else { + unknownControllerEvents++; + } + } + i = 0; + @Pc(298) int otherKnownControllerPos = in.offset; + in.offset += otherKnownControllerEvents; + @Pc(307) int keyPressurePos = in.offset; + in.offset += keyPressureEvents; + @Pc(316) int channelPressurePos = in.offset; + in.offset += channelPressureEvents; + @Pc(325) int pitchWheelMsbPos = in.offset; + in.offset += pitchWheelEvents; + @Pc(334) int modulationWheelMsbPos = in.offset; + in.offset += modulationWheelMsbEvents; + @Pc(343) int channelVolumeMsbPos = in.offset; + in.offset += channelVolumeMsbEvents; + @Pc(352) int panMsbPos = in.offset; + in.offset += panMsbEvents; + @Pc(361) int keyPos = in.offset; + in.offset += noteOnEvents + noteOffEvents + keyPressureEvents; + @Pc(374) int onVelocityPos = in.offset; + in.offset += noteOnEvents; + @Pc(383) int unknownControllerPos = in.offset; + in.offset += unknownControllerEvents; + @Pc(392) int offVelocityPos = in.offset; + in.offset += noteOffEvents; + @Pc(401) int modulationWheelLsbPos = in.offset; + in.offset += modulationWheelLsbEvents; + @Pc(410) int channelVolumeLsbPos = in.offset; + in.offset += channelVolumeLsbEvents; + @Pc(419) int panLsbPos = in.offset; + in.offset += panLsbEvents; + @Pc(428) int bankSelectPos = in.offset; + in.offset += bankSelectEvents; + @Pc(437) int pitchWheelLsbPos = in.offset; + in.offset += pitchWheelEvents; + @Pc(446) int nonRegisteredMsbPos = in.offset; + in.offset += nonRegisteredMsbEvents; + @Pc(455) int nonRegisteredLsbPos = in.offset; + in.offset += nonRegisteredLsbEvents; + @Pc(464) int registeredMsbPos = in.offset; + in.offset += registeredMsbEvents; + @Pc(473) int registeredLsbPos = in.offset; + in.offset += registeredLsbEvents; + @Pc(482) int tempoPos = in.offset; + in.offset += tempoChanges * 3; + this.midiBytes = new byte[midiLen]; + @Pc(500) Buffer out = new Buffer(this.midiBytes); + out.p4(1297377380); + out.p4(6); + out.p2(tracks > 1 ? 1 : 0); + out.p2(tracks); + out.p2(division); + in.offset = deltaTimePos; + @Pc(530) int channel = 0; + @Pc(532) int local532 = 0; + @Pc(534) int local534 = 0; + @Pc(536) int local536 = 0; + @Pc(538) int local538 = 0; + @Pc(540) int local540 = 0; + @Pc(542) int local542 = 0; + @Pc(545) int[] values = new int[128]; + controller = 0; + track: + for (@Pc(549) int local549 = 0; local549 < tracks; local549++) { + out.p4(1297379947); + out.offset += 4; + @Pc(565) int local565 = out.offset; + @Pc(567) int local567 = -1; + while (true) { + while (true) { + @Pc(571) int deltaTime = in.gVarInt(); + out.pVarInt(deltaTime); + @Pc(583) int local583 = in.data[i++] & 0xFF; + @Pc(590) boolean statusChanged = local583 != local567; + local567 = local583 & 0xF; + if (local583 == 7) { + if (statusChanged) { + out.p1(255); + } + out.p1(47); + out.p1(0); + out.psize4(out.offset - local565); + continue track; + } + if (local583 == 23) { + if (statusChanged) { + out.p1(255); + } + out.p1(81); + out.p1(3); + out.p1(in.data[tempoPos++]); + out.p1(in.data[tempoPos++]); + out.p1(in.data[tempoPos++]); + } else { + channel ^= local583 >> 4; + if (local567 == 0) { + if (statusChanged) { + out.p1(channel + 144); + } + local532 += in.data[keyPos++]; + local534 += in.data[onVelocityPos++]; + out.p1(local532 & 0x7F); + out.p1(local534 & 0x7F); + } else if (local567 == 1) { + if (statusChanged) { + out.p1(channel + 128); + } + local532 += in.data[keyPos++]; + local536 += in.data[offVelocityPos++]; + out.p1(local532 & 0x7F); + out.p1(local536 & 0x7F); + } else if (local567 == 2) { + if (statusChanged) { + out.p1(channel + 176); + } + controller = controller + in.data[statusAndChannel++] & 0x7F; + out.p1(controller); + @Pc(775) byte valueDelta; + if (controller == 0 || controller == 32) { + valueDelta = in.data[bankSelectPos++]; + } else if (controller == 1) { + valueDelta = in.data[modulationWheelMsbPos++]; + } else if (controller == 33) { + valueDelta = in.data[modulationWheelLsbPos++]; + } else if (controller == 7) { + valueDelta = in.data[channelVolumeMsbPos++]; + } else if (controller == 39) { + valueDelta = in.data[channelVolumeLsbPos++]; + } else if (controller == 10) { + valueDelta = in.data[panMsbPos++]; + } else if (controller == 42) { + valueDelta = in.data[panLsbPos++]; + } else if (controller == 99) { + valueDelta = in.data[nonRegisteredMsbPos++]; + } else if (controller == 98) { + valueDelta = in.data[nonRegisteredLsbPos++]; + } else if (controller == 101) { + valueDelta = in.data[registeredMsbPos++]; + } else if (controller == 100) { + valueDelta = in.data[registeredLsbPos++]; + } else if (controller == 64 || controller == 65 || controller == 120 || controller == 121 || controller == 123) { + valueDelta = in.data[otherKnownControllerPos++]; + } else { + valueDelta = in.data[unknownControllerPos++]; + } + @Pc(910) int local910 = valueDelta + values[controller]; + values[controller] = local910; + out.p1(local910 & 0x7F); + } else if (local567 == 3) { + if (statusChanged) { + out.p1(channel + 224); + } + local538 += in.data[pitchWheelLsbPos++]; + local538 += in.data[pitchWheelMsbPos++] << 7; + out.p1(local538 & 0x7F); + out.p1(local538 >> 7 & 0x7F); + } else if (local567 == 4) { + if (statusChanged) { + out.p1(channel + 208); + } + local540 += in.data[channelPressurePos++]; + out.p1(local540 & 0x7F); + } else if (local567 == 5) { + if (statusChanged) { + out.p1(channel + 160); + } + local532 += in.data[keyPos++]; + local542 += in.data[keyPressurePos++]; + out.p1(local532 & 0x7F); + out.p1(local542 & 0x7F); + } else if (local567 == 6) { + if (statusChanged) { + out.p1(channel + 192); + } + out.p1(in.data[bankSelectPos++]); + } else { + throw new RuntimeException(); + } + } + } + } + } + } + + @OriginalMember(owner = "client!rf", name = "a", descriptor = "(Lclient!ve;II)Lclient!rf;") + public static Song create(@OriginalArg(0) Js5 archive, @OriginalArg(1) int group, @OriginalArg(2) int file) { + @Pc(5) byte[] bytes = archive.fetchFile(group, file); + return bytes == null ? null : new Song(new Buffer(bytes)); + } + + @OriginalMember(owner = "client!rf", name = "a", descriptor = "()V") + public final void releasePrograms() { + this.programs = null; + } + + @OriginalMember(owner = "client!rf", name = "b", descriptor = "()V") + public final void createPrograms() { + if (this.programs != null) { + return; + } + this.programs = new HashTable(16); + @Pc(12) int[] banks = new int[16]; + @Pc(15) int[] programs = new int[16]; + banks[9] = programs[9] = 128; + @Pc(29) MidiDecoder song = new MidiDecoder(this.midiBytes); + @Pc(32) int local32 = song.getTrackCount(); + @Pc(34) int track; + for (track = 0; track < local32; track++) { + song.loadTrackPosition(track); + song.addDeltaTime(track); + song.saveTrackPosition(track); + } + label53: + do { + while (true) { + track = song.getNextTrack(); + @Pc(56) int local56 = song.times[track]; + while (song.times[track] == local56) { + song.loadTrackPosition(track); + @Pc(69) int event = song.getNextEvent(track); + if (event == 1) { + song.loadEndOfTrackPosition(); + song.saveTrackPosition(track); + continue label53; + } + @Pc(85) int local85 = event & 0xF0; + @Pc(92) int controller; + @Pc(98) int local98; + @Pc(104) int local104; + if (local85 == 176) { + controller = event & 0xF; + local98 = event >> 8 & 0x7F; + local104 = event >> 16 & 0x7F; + if (local98 == 0) { + banks[controller] = (banks[controller] & 0xFFE03FFF) + (local104 << 14); + } + if (local98 == 32) { + banks[controller] = (banks[controller] & 0xFFFFC07F) + (local104 << 7); + } + } + if (local85 == 192) { + controller = event & 0xF; + local98 = event >> 8 & 0x7F; + programs[controller] = banks[controller] + local98; + } + if (local85 == 144) { + controller = event & 0xF; + local98 = event >> 8 & 0x7F; + local104 = event >> 16 & 0x7F; + if (local104 > 0) { + @Pc(179) int program = programs[controller]; + @Pc(187) ByteArrayNode node = (ByteArrayNode) this.programs.get(program); + if (node == null) { + node = new ByteArrayNode(new byte[128]); + this.programs.put(node, program); + } + node.value[local98] = 1; + } + } + song.addDeltaTime(track); + song.saveTrackPosition(track); + } + } + } while (!song.hasNextTrack()); + } +} diff --git a/client/src/main/java/rt4/Sound.java b/client/src/main/java/rt4/Sound.java new file mode 100644 index 0000000..725fdc4 --- /dev/null +++ b/client/src/main/java/rt4/Sound.java @@ -0,0 +1,15 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!ik") +public abstract class Sound extends Node { + + @OriginalMember(owner = "client!ik", name = "p", descriptor = "I") + public int position; + + @OriginalMember(owner = "client!ik", name = "", descriptor = "()V") + protected Sound() { + } +} diff --git a/client/src/main/java/rt4/SoundBank.java b/client/src/main/java/rt4/SoundBank.java new file mode 100644 index 0000000..2238946 --- /dev/null +++ b/client/src/main/java/rt4/SoundBank.java @@ -0,0 +1,104 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!le") +public final class SoundBank { + + @OriginalMember(owner = "client!le", name = "d", descriptor = "Lclient!sc;") + private final HashTable vorbisCache = new HashTable(256); + + @OriginalMember(owner = "client!le", name = "l", descriptor = "Lclient!sc;") + private final HashTable cache = new HashTable(256); + + @OriginalMember(owner = "client!le", name = "b", descriptor = "Lclient!ve;") + private final Js5 synthArchive; + + @OriginalMember(owner = "client!le", name = "i", descriptor = "Lclient!ve;") + private final Js5 vorbisArchive; + + @OriginalMember(owner = "client!le", name = "", descriptor = "(Lclient!ve;Lclient!ve;)V") + public SoundBank(@OriginalArg(0) Js5 synthArchive, @OriginalArg(1) Js5 vorbisArchive) { + this.synthArchive = synthArchive; + this.vorbisArchive = vorbisArchive; + } + + @OriginalMember(owner = "client!le", name = "a", descriptor = "([IIII)Lclient!kj;") + private PcmSound getSynthSound(@OriginalArg(0) int[] samplingRates, @OriginalArg(2) int group, @OriginalArg(3) int file) { + @Pc(21) int key1 = file ^ (group >>> 12 | group << 4 & 0xFFF3); + @Pc(27) int key2 = key1 | group << 16; + @Pc(30) long key = key2; + @Pc(37) PcmSound sound = (PcmSound) this.cache.get(key); + if (sound != null) { + return sound; + } else if (samplingRates == null || samplingRates[0] > 0) { + @Pc(59) SynthSound synthSound = SynthSound.create(this.synthArchive, group, file); + if (synthSound == null) { + return null; + } + sound = synthSound.toPcmSound(); + this.cache.put(sound, key); + if (samplingRates != null) { + samplingRates[0] -= sound.samples.length; + } + return sound; + } else { + return null; + } + } + + @OriginalMember(owner = "client!le", name = "a", descriptor = "(II[I)Lclient!kj;") + public final PcmSound getSynthSound(@OriginalArg(0) int id, @OriginalArg(2) int[] samplingRates) { + if (this.synthArchive.capacity() == 1) { + return this.getSynthSound(samplingRates, 0, id); + } else if (this.synthArchive.getGroupCapacity(id) == 1) { + return this.getSynthSound(samplingRates, id, 0); + } else { + throw new RuntimeException(); + } + } + + @OriginalMember(owner = "client!le", name = "a", descriptor = "(I[IIB)Lclient!kj;") + private PcmSound getVorbisSound(@OriginalArg(0) int group, @OriginalArg(1) int[] samplingRates, @OriginalArg(2) int file) { + @Pc(15) int key1 = file ^ (group >>> 12 | group << 4 & 0xFFF3); + @Pc(21) int key2 = key1 | group << 16; + @Pc(26) long key = (long) key2 ^ 0x100000000L; + @Pc(33) PcmSound sound = (PcmSound) this.cache.get(key); + if (sound != null) { + return sound; + } else if (samplingRates == null || samplingRates[0] > 0) { + @Pc(53) VorbisSound vorbisSound = (VorbisSound) this.vorbisCache.get(key); + if (vorbisSound == null) { + vorbisSound = VorbisSound.create(this.vorbisArchive, group, file); + if (vorbisSound == null) { + return null; + } + this.vorbisCache.put(vorbisSound, key); + } + sound = vorbisSound.toPcmSound(samplingRates); + if (sound == null) { + return null; + } else { + vorbisSound.unlink(); + this.cache.put(sound, key); + return sound; + } + } else { + return null; + } + } + + @OriginalMember(owner = "client!le", name = "b", descriptor = "(II[I)Lclient!kj;") + public final PcmSound getVorbisSound(@OriginalArg(1) int id, @OriginalArg(2) int[] samplingRates) { + if (this.vorbisArchive.capacity() == 1) { + return this.getVorbisSound(0, samplingRates, id); + } else if (this.vorbisArchive.getGroupCapacity(id) == 1) { + return this.getVorbisSound(id, samplingRates, 0); + } else { + throw new RuntimeException(); + } + } +} diff --git a/client/src/main/java/rt4/SoundPcmStream.java b/client/src/main/java/rt4/SoundPcmStream.java new file mode 100644 index 0000000..6a8fc91 --- /dev/null +++ b/client/src/main/java/rt4/SoundPcmStream.java @@ -0,0 +1,1480 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!b") +public final class SoundPcmStream extends PcmStream { + + @OriginalMember(owner = "client!b", name = "v", descriptor = "I") + public int anInt344; + + @OriginalMember(owner = "client!b", name = "y", descriptor = "I") + public int anInt347; + + @OriginalMember(owner = "client!b", name = "z", descriptor = "I") + public int anInt348; + + @OriginalMember(owner = "client!b", name = "C", descriptor = "I") + private int anInt350; + + @OriginalMember(owner = "client!b", name = "D", descriptor = "I") + private int anInt351; + + @OriginalMember(owner = "client!b", name = "E", descriptor = "I") + public int anInt352; + + @OriginalMember(owner = "client!b", name = "G", descriptor = "I") + public int anInt354; + + @OriginalMember(owner = "client!b", name = "H", descriptor = "I") + public int anInt355; + + @OriginalMember(owner = "client!b", name = "w", descriptor = "I") + private final int start; + + @OriginalMember(owner = "client!b", name = "F", descriptor = "I") + private final int end; + + @OriginalMember(owner = "client!b", name = "A", descriptor = "Z") + private final boolean aBoolean14; + + @OriginalMember(owner = "client!b", name = "t", descriptor = "I") + private int anInt342; + + @OriginalMember(owner = "client!b", name = "u", descriptor = "I") + private int volume; + + @OriginalMember(owner = "client!b", name = "B", descriptor = "I") + private int pan; + + @OriginalMember(owner = "client!b", name = "x", descriptor = "I") + public int anInt346; + + @OriginalMember(owner = "client!b", name = "", descriptor = "(Lclient!kj;II)V") + public SoundPcmStream(@OriginalArg(0) PcmSound sound, @OriginalArg(1) int arg1, @OriginalArg(2) int volume) { + this.sound = sound; + this.start = sound.start; + this.end = sound.end; + this.aBoolean14 = sound.aBoolean165; + this.anInt342 = arg1; + this.volume = volume; + this.pan = 8192; + this.anInt346 = 0; + this.method416(); + } + + @OriginalMember(owner = "client!b", name = "", descriptor = "(Lclient!kj;III)V") + public SoundPcmStream(@OriginalArg(0) PcmSound sound, @OriginalArg(1) int arg1, @OriginalArg(2) int volume, @OriginalArg(3) int pan) { + this.sound = sound; + this.start = sound.start; + this.end = sound.end; + this.aBoolean14 = sound.aBoolean165; + this.anInt342 = arg1; + this.volume = volume; + this.pan = pan; + this.anInt346 = 0; + this.method416(); + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "(Lclient!kj;II)Lclient!b;") + public static SoundPcmStream create(@OriginalArg(0) PcmSound sound, @OriginalArg(2) int volume) { + return sound.samples == null || sound.samples.length == 0 ? null : new SoundPcmStream(sound, (int) ((long) sound.rate * 256L * (long) 100 / (AudioChannel.sampleRate * 100L)), volume << 6); + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "(I[B[IIIIIIIILclient!b;)I") + public static int method387(@OriginalArg(1) byte[] arg0, @OriginalArg(2) int[] arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(8) int arg6, @OriginalArg(9) int arg7, @OriginalArg(10) SoundPcmStream arg8) { + arg2 >>= 0x8; + @Pc(7) int local7 = arg7 >> 8; + @Pc(11) int local11 = arg4 << 2; + @Pc(15) int local15 = arg5 << 2; + @Pc(22) int local22; + if ((local22 = arg3 + local7 - arg2) > arg6) { + local22 = arg6; + } + arg3 <<= 0x1; + local22 <<= 0x1; + local22 -= 6; + @Pc(43) byte local43; + @Pc(46) int local46; + while (arg3 < local22) { + @Pc(41) int local41 = arg2 + 1; + local43 = arg0[arg2]; + local46 = arg3 + 1; + arg1[arg3] += local43 * local11; + @Pc(56) int local56 = local46 + 1; + arg1[local46] += local43 * local15; + @Pc(66) int local66 = local41 + 1; + @Pc(68) byte local68 = arg0[local41]; + @Pc(71) int local71 = local56 + 1; + arg1[local56] += local68 * local11; + @Pc(81) int local81 = local71 + 1; + arg1[local71] += local68 * local15; + @Pc(91) int local91 = local66 + 1; + @Pc(93) byte local93 = arg0[local66]; + @Pc(96) int local96 = local81 + 1; + arg1[local81] += local93 * local11; + @Pc(106) int local106 = local96 + 1; + arg1[local96] += local93 * local15; + arg2 = local91 + 1; + @Pc(118) byte local118 = arg0[local91]; + @Pc(121) int local121 = local106 + 1; + arg1[local106] += local118 * local11; + arg3 = local121 + 1; + arg1[local121] += local118 * local15; + } + local22 += 6; + while (arg3 < local22) { + local43 = arg0[arg2++]; + local46 = arg3 + 1; + arg1[arg3] += local43 * local11; + arg3 = local46 + 1; + arg1[local46] += local43 * local15; + } + arg8.anInt346 = arg2 << 8; + return arg3 >> 1; + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "(II[B[IIIIIIIIIILclient!b;II)I") + public static int method388(@OriginalArg(2) byte[] arg0, @OriginalArg(3) int[] arg1, @OriginalArg(4) int arg2, @OriginalArg(5) int arg3, @OriginalArg(6) int arg4, @OriginalArg(7) int arg5, @OriginalArg(8) int arg6, @OriginalArg(9) int arg7, @OriginalArg(11) int arg8, @OriginalArg(12) int arg9, @OriginalArg(13) SoundPcmStream arg10, @OriginalArg(14) int arg11, @OriginalArg(15) int arg12) { + arg10.anInt348 -= arg10.anInt344 * arg3; + @Pc(23) int local23; + if (arg11 == 0 || (local23 = arg3 + (arg9 + arg11 - arg2 - 257) / arg11) > arg8) { + local23 = arg8; + } + arg3 <<= 0x1; + local23 <<= 0x1; + @Pc(46) byte local46; + @Pc(65) int local65; + @Pc(62) int local62; + @Pc(64) int local64; + while (arg3 < local23) { + @Pc(42) int local42 = arg2 >> 8; + local46 = arg0[local42]; + local62 = (local46 << 8) + (arg0[local42 + 1] - local46) * (arg2 & 0xFF); + local64 = arg3; + local65 = arg3 + 1; + arg1[local64] += local62 * arg4 >> 6; + arg4 += arg6; + @Pc(80) int local80 = local65; + arg3 = local65 + 1; + arg1[local80] += local62 * arg5 >> 6; + arg5 += arg7; + arg2 += arg11; + } + if (arg11 == 0 || (local23 = (arg3 >> 1) + (arg9 + arg11 - arg2 - 1) / arg11) > arg8) { + local23 = arg8; + } + local23 <<= 0x1; + while (arg3 < local23) { + local46 = arg0[arg2 >> 8]; + local62 = (local46 << 8) + (arg12 - local46) * (arg2 & 0xFF); + local64 = arg3; + local65 = arg3 + 1; + arg1[local64] += local62 * arg4 >> 6; + arg4 += arg6; + local64 = local65; + arg3 = local65 + 1; + arg1[local64] += local62 * arg5 >> 6; + arg5 += arg7; + arg2 += arg11; + } + local65 = arg3 >> 1; + arg10.anInt348 += arg10.anInt344 * local65; + arg10.anInt355 = arg4; + arg10.anInt352 = arg5; + arg10.anInt346 = arg2; + return local65; + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "(II[B[IIIIIIIILclient!b;II)I") + public static int method389(@OriginalArg(2) byte[] arg0, @OriginalArg(3) int[] arg1, @OriginalArg(4) int arg2, @OriginalArg(5) int arg3, @OriginalArg(6) int arg4, @OriginalArg(7) int arg5, @OriginalArg(9) int arg6, @OriginalArg(10) int arg7, @OriginalArg(11) SoundPcmStream arg8, @OriginalArg(12) int arg9, @OriginalArg(13) int arg10) { + arg8.anInt355 -= arg8.anInt347 * arg3; + arg8.anInt352 -= arg8.anInt354 * arg3; + @Pc(32) int local32; + if (arg9 == 0 || (local32 = arg3 + (arg7 + arg9 - arg2 - 257) / arg9) > arg6) { + local32 = arg6; + } + @Pc(47) byte local47; + @Pc(49) int local49; + while (arg3 < local32) { + @Pc(43) int local43 = arg2 >> 8; + local47 = arg0[local43]; + local49 = arg3++; + arg1[local49] += ((local47 << 8) + (arg0[local43 + 1] - local47) * (arg2 & 0xFF)) * arg4 >> 6; + arg4 += arg5; + arg2 += arg9; + } + if (arg9 == 0 || (local32 = arg3 + (arg7 + arg9 - arg2 - 1) / arg9) > arg6) { + local32 = arg6; + } + while (arg3 < local32) { + local47 = arg0[arg2 >> 8]; + local49 = arg3++; + arg1[local49] += ((local47 << 8) + (arg10 - local47) * (arg2 & 0xFF)) * arg4 >> 6; + arg4 += arg5; + arg2 += arg9; + } + arg8.anInt355 += arg8.anInt347 * arg3; + arg8.anInt352 += arg8.anInt354 * arg3; + arg8.anInt348 = arg4; + arg8.anInt346 = arg2; + return arg3; + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "(II[B[IIIIIIILclient!b;II)I") + public static int method390(@OriginalArg(2) byte[] arg0, @OriginalArg(3) int[] arg1, @OriginalArg(4) int arg2, @OriginalArg(5) int arg3, @OriginalArg(6) int arg4, @OriginalArg(8) int arg5, @OriginalArg(9) int arg6, @OriginalArg(10) SoundPcmStream arg7, @OriginalArg(11) int arg8, @OriginalArg(12) int arg9) { + @Pc(14) int local14; + if (arg8 == 0 || (local14 = arg3 + (arg6 + arg8 + 256 - arg2) / arg8) > arg5) { + local14 = arg5; + } + @Pc(33) int local33; + while (arg3 < local14) { + @Pc(25) int local25 = arg2 >> 8; + @Pc(31) byte local31 = arg0[local25 - 1]; + local33 = arg3++; + arg1[local33] += ((local31 << 8) + (arg0[local25] - local31) * (arg2 & 0xFF)) * arg4 >> 6; + arg2 += arg8; + } + if (arg8 == 0 || (local14 = arg3 + (arg6 + arg8 - arg2) / arg8) > arg5) { + local14 = arg5; + } + while (arg3 < local14) { + local33 = arg3++; + arg1[local33] += ((arg9 << 8) + (arg0[arg2 >> 8] - arg9) * (arg2 & 0xFF)) * arg4 >> 6; + arg2 += arg8; + } + arg7.anInt346 = arg2; + return arg3; + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "([B[IIIIIIILclient!b;)I") + public static int method391(@OriginalArg(0) byte[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) SoundPcmStream arg7) { + arg2 >>= 0x8; + @Pc(7) int local7 = arg6 >> 8; + @Pc(11) int local11 = arg4 << 2; + @Pc(18) int local18; + if ((local18 = arg3 + local7 - arg2) > arg5) { + local18 = arg5; + } + local18 -= 3; + @Pc(28) int local28; + while (arg3 < local18) { + local28 = arg3++; + @Pc(31) int local31 = arg1[local28]; + @Pc(34) int local34 = arg2 + 1; + arg1[local28] = local31 + arg0[arg2] * local11; + @Pc(41) int local41 = arg3++; + @Pc(44) int local44 = arg1[local41]; + @Pc(47) int local47 = local34 + 1; + arg1[local41] = local44 + arg0[local34] * local11; + @Pc(54) int local54 = arg3++; + @Pc(57) int local57 = arg1[local54]; + @Pc(60) int local60 = local47 + 1; + arg1[local54] = local57 + arg0[local47] * local11; + @Pc(67) int local67 = arg3++; + @Pc(70) int local70 = arg1[local67]; + arg2 = local60 + 1; + arg1[local67] = local70 + arg0[local60] * local11; + } + local18 += 3; + while (arg3 < local18) { + local28 = arg3++; + arg1[local28] += arg0[arg2++] * local11; + } + arg7.anInt346 = arg2 << 8; + return arg3; + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "(I[B[IIIIIIIIIILclient!b;)I") + public static int method393(@OriginalArg(1) byte[] arg0, @OriginalArg(2) int[] arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(10) int arg8, @OriginalArg(11) int arg9, @OriginalArg(12) SoundPcmStream arg10) { + arg2 >>= 0x8; + @Pc(7) int local7 = arg9 >> 8; + arg4 <<= 0x2; + arg5 <<= 0x2; + @Pc(19) int local19 = arg6 << 2; + @Pc(23) int local23 = arg7 << 2; + @Pc(30) int local30; + if ((local30 = arg3 + local7 - arg2) > arg8) { + local30 = arg8; + } + arg10.anInt348 += arg10.anInt344 * (local30 - arg3); + arg3 <<= 0x1; + local30 <<= 0x1; + local30 -= 6; + @Pc(62) byte local62; + @Pc(65) int local65; + while (arg3 < local30) { + @Pc(60) int local60 = arg2 + 1; + local62 = arg0[arg2]; + local65 = arg3 + 1; + arg1[arg3] += local62 * arg4; + @Pc(76) int local76 = arg4 + local19; + @Pc(79) int local79 = local65 + 1; + arg1[local65] += local62 * arg5; + @Pc(90) int local90 = arg5 + local23; + @Pc(93) int local93 = local60 + 1; + @Pc(95) byte local95 = arg0[local60]; + @Pc(98) int local98 = local79 + 1; + arg1[local79] += local95 * local76; + @Pc(109) int local109 = local76 + local19; + @Pc(112) int local112 = local98 + 1; + arg1[local98] += local95 * local90; + @Pc(123) int local123 = local90 + local23; + @Pc(126) int local126 = local93 + 1; + @Pc(128) byte local128 = arg0[local93]; + @Pc(131) int local131 = local112 + 1; + arg1[local112] += local128 * local109; + @Pc(142) int local142 = local109 + local19; + @Pc(145) int local145 = local131 + 1; + arg1[local131] += local128 * local123; + @Pc(156) int local156 = local123 + local23; + arg2 = local126 + 1; + @Pc(161) byte local161 = arg0[local126]; + @Pc(164) int local164 = local145 + 1; + arg1[local145] += local161 * local142; + arg4 = local142 + local19; + arg3 = local164 + 1; + arg1[local164] += local161 * local156; + arg5 = local156 + local23; + } + local30 += 6; + while (arg3 < local30) { + local62 = arg0[arg2++]; + local65 = arg3 + 1; + arg1[arg3] += local62 * arg4; + arg4 += local19; + arg3 = local65 + 1; + arg1[local65] += local62 * arg5; + arg5 += local23; + } + arg10.anInt355 = arg4 >> 2; + arg10.anInt352 = arg5 >> 2; + arg10.anInt346 = arg2 << 8; + return arg3 >> 1; + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "([B[IIIIIIIILclient!b;)I") + public static int method394(@OriginalArg(0) byte[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) SoundPcmStream arg8) { + arg2 >>= 0x8; + @Pc(7) int local7 = arg7 >> 8; + arg4 <<= 0x2; + @Pc(15) int local15 = arg5 << 2; + @Pc(24) int local24; + if ((local24 = arg3 + arg2 + 1 - local7) > arg6) { + local24 = arg6; + } + arg8.anInt355 += arg8.anInt347 * (local24 - arg3); + arg8.anInt352 += arg8.anInt354 * (local24 - arg3); + local24 -= 3; + @Pc(56) int local56; + while (arg3 < local24) { + local56 = arg3++; + @Pc(59) int local59 = arg1[local56]; + @Pc(62) int local62 = arg2 - 1; + arg1[local56] = local59 + arg0[arg2] * arg4; + @Pc(71) int local71 = arg4 + local15; + @Pc(73) int local73 = arg3++; + @Pc(76) int local76 = arg1[local73]; + @Pc(79) int local79 = local62 - 1; + arg1[local73] = local76 + arg0[local62] * local71; + @Pc(88) int local88 = local71 + local15; + @Pc(90) int local90 = arg3++; + @Pc(93) int local93 = arg1[local90]; + @Pc(96) int local96 = local79 - 1; + arg1[local90] = local93 + arg0[local79] * local88; + @Pc(105) int local105 = local88 + local15; + @Pc(107) int local107 = arg3++; + @Pc(110) int local110 = arg1[local107]; + arg2 = local96 - 1; + arg1[local107] = local110 + arg0[local96] * local105; + arg4 = local105 + local15; + } + local24 += 3; + while (arg3 < local24) { + local56 = arg3++; + arg1[local56] += arg0[arg2--] * arg4; + arg4 += local15; + } + arg8.anInt348 = arg4 >> 2; + arg8.anInt346 = arg2 << 8; + return arg3; + } + + @OriginalMember(owner = "client!b", name = "b", descriptor = "([B[IIIIIIIILclient!b;)I") + public static int method395(@OriginalArg(0) byte[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) SoundPcmStream arg8) { + arg2 >>= 0x8; + @Pc(7) int local7 = arg7 >> 8; + arg4 <<= 0x2; + @Pc(15) int local15 = arg5 << 2; + @Pc(22) int local22; + if ((local22 = arg3 + local7 - arg2) > arg6) { + local22 = arg6; + } + arg8.anInt355 += arg8.anInt347 * (local22 - arg3); + arg8.anInt352 += arg8.anInt354 * (local22 - arg3); + local22 -= 3; + @Pc(54) int local54; + while (arg3 < local22) { + local54 = arg3++; + @Pc(57) int local57 = arg1[local54]; + @Pc(60) int local60 = arg2 + 1; + arg1[local54] = local57 + arg0[arg2] * arg4; + @Pc(69) int local69 = arg4 + local15; + @Pc(71) int local71 = arg3++; + @Pc(74) int local74 = arg1[local71]; + @Pc(77) int local77 = local60 + 1; + arg1[local71] = local74 + arg0[local60] * local69; + @Pc(86) int local86 = local69 + local15; + @Pc(88) int local88 = arg3++; + @Pc(91) int local91 = arg1[local88]; + @Pc(94) int local94 = local77 + 1; + arg1[local88] = local91 + arg0[local77] * local86; + @Pc(103) int local103 = local86 + local15; + @Pc(105) int local105 = arg3++; + @Pc(108) int local108 = arg1[local105]; + arg2 = local94 + 1; + arg1[local105] = local108 + arg0[local94] * local103; + arg4 = local103 + local15; + } + local22 += 3; + while (arg3 < local22) { + local54 = arg3++; + arg1[local54] += arg0[arg2++] * arg4; + arg4 += local15; + } + arg8.anInt348 = arg4 >> 2; + arg8.anInt346 = arg2 << 8; + return arg3; + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "(Lclient!kj;III)Lclient!b;") + public static SoundPcmStream create(@OriginalArg(0) PcmSound arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + return arg0.samples == null || arg0.samples.length == 0 ? null : new SoundPcmStream(arg0, arg1, arg2, arg3); + } + + @OriginalMember(owner = "client!b", name = "b", descriptor = "(II[B[IIIIIIIILclient!b;II)I") + public static int method400(@OriginalArg(2) byte[] arg0, @OriginalArg(3) int[] arg1, @OriginalArg(4) int arg2, @OriginalArg(5) int arg3, @OriginalArg(6) int arg4, @OriginalArg(7) int arg5, @OriginalArg(9) int arg6, @OriginalArg(10) int arg7, @OriginalArg(11) SoundPcmStream arg8, @OriginalArg(12) int arg9, @OriginalArg(13) int arg10) { + @Pc(14) int local14; + if (arg9 == 0 || (local14 = arg3 + (arg7 + arg9 - arg2 - 257) / arg9) > arg6) { + local14 = arg6; + } + arg3 <<= 0x1; + local14 <<= 0x1; + @Pc(37) byte local37; + @Pc(56) int local56; + @Pc(53) int local53; + @Pc(55) int local55; + while (arg3 < local14) { + @Pc(33) int local33 = arg2 >> 8; + local37 = arg0[local33]; + local53 = (local37 << 8) + (arg0[local33 + 1] - local37) * (arg2 & 0xFF); + local55 = arg3; + local56 = arg3 + 1; + arg1[local55] += local53 * arg4 >> 6; + @Pc(67) int local67 = local56; + arg3 = local56 + 1; + arg1[local67] += local53 * arg5 >> 6; + arg2 += arg9; + } + if (arg9 == 0 || (local14 = (arg3 >> 1) + (arg7 + arg9 - arg2 - 1) / arg9) > arg6) { + local14 = arg6; + } + local14 <<= 0x1; + while (arg3 < local14) { + local37 = arg0[arg2 >> 8]; + local53 = (local37 << 8) + (arg10 - local37) * (arg2 & 0xFF); + local55 = arg3; + local56 = arg3 + 1; + arg1[local55] += local53 * arg4 >> 6; + local55 = local56; + arg3 = local56 + 1; + arg1[local55] += local53 * arg5 >> 6; + arg2 += arg9; + } + arg8.anInt346 = arg2; + return arg3 >> 1; + } + + @OriginalMember(owner = "client!b", name = "b", descriptor = "(II[B[IIIIIIILclient!b;II)I") + public static int method422(@OriginalArg(2) byte[] arg0, @OriginalArg(3) int[] arg1, @OriginalArg(4) int arg2, @OriginalArg(5) int arg3, @OriginalArg(6) int arg4, @OriginalArg(8) int arg5, @OriginalArg(9) int arg6, @OriginalArg(10) SoundPcmStream arg7, @OriginalArg(11) int arg8, @OriginalArg(12) int arg9) { + @Pc(14) int local14; + if (arg8 == 0 || (local14 = arg3 + (arg6 + arg8 - arg2 - 257) / arg8) > arg5) { + local14 = arg5; + } + @Pc(29) byte local29; + @Pc(31) int local31; + while (arg3 < local14) { + @Pc(25) int local25 = arg2 >> 8; + local29 = arg0[local25]; + local31 = arg3++; + arg1[local31] += ((local29 << 8) + (arg0[local25 + 1] - local29) * (arg2 & 0xFF)) * arg4 >> 6; + arg2 += arg8; + } + if (arg8 == 0 || (local14 = arg3 + (arg6 + arg8 - arg2 - 1) / arg8) > arg5) { + local14 = arg5; + } + while (arg3 < local14) { + local29 = arg0[arg2 >> 8]; + local31 = arg3++; + arg1[local31] += ((local29 << 8) + (arg9 - local29) * (arg2 & 0xFF)) * arg4 >> 6; + arg2 += arg8; + } + arg7.anInt346 = arg2; + return arg3; + } + + @OriginalMember(owner = "client!b", name = "e", descriptor = "(II)I") + public static int method421(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + return arg1 < 0 ? -arg0 : (int) ((double) arg0 * Math.sqrt((double) arg1 * 1.220703125E-4D) + 0.5D); + } + + @OriginalMember(owner = "client!b", name = "d", descriptor = "(II)I") + public static int method419(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + return arg1 < 0 ? arg0 : (int) ((double) arg0 * Math.sqrt((double) (16384 - arg1) * 1.220703125E-4D) + 0.5D); + } + + @OriginalMember(owner = "client!b", name = "d", descriptor = "(II[B[IIIIIIIILclient!b;II)I") + public static int method420(@OriginalArg(2) byte[] arg0, @OriginalArg(3) int[] arg1, @OriginalArg(4) int arg2, @OriginalArg(5) int arg3, @OriginalArg(6) int arg4, @OriginalArg(7) int arg5, @OriginalArg(9) int arg6, @OriginalArg(10) int arg7, @OriginalArg(11) SoundPcmStream arg8, @OriginalArg(12) int arg9, @OriginalArg(13) int arg10) { + @Pc(14) int local14; + if (arg9 == 0 || (local14 = arg3 + (arg7 + arg9 + 256 - arg2) / arg9) > arg6) { + local14 = arg6; + } + arg3 <<= 0x1; + local14 <<= 0x1; + @Pc(56) int local56; + @Pc(53) int local53; + @Pc(55) int local55; + while (arg3 < local14) { + @Pc(33) int local33 = arg2 >> 8; + @Pc(39) byte local39 = arg0[local33 - 1]; + local53 = (local39 << 8) + (arg0[local33] - local39) * (arg2 & 0xFF); + local55 = arg3; + local56 = arg3 + 1; + arg1[local55] += local53 * arg4 >> 6; + @Pc(67) int local67 = local56; + arg3 = local56 + 1; + arg1[local67] += local53 * arg5 >> 6; + arg2 += arg9; + } + if (arg9 == 0 || (local14 = (arg3 >> 1) + (arg7 + arg9 - arg2) / arg9) > arg6) { + local14 = arg6; + } + local14 <<= 0x1; + while (arg3 < local14) { + local53 = (arg10 << 8) + (arg0[arg2 >> 8] - arg10) * (arg2 & 0xFF); + local55 = arg3; + local56 = arg3 + 1; + arg1[local55] += local53 * arg4 >> 6; + local55 = local56; + arg3 = local56 + 1; + arg1[local55] += local53 * arg5 >> 6; + arg2 += arg9; + } + arg8.anInt346 = arg2; + return arg3 >> 1; + } + + @OriginalMember(owner = "client!b", name = "b", descriptor = "([B[IIIIIIILclient!b;)I") + public static int method413(@OriginalArg(0) byte[] arg0, @OriginalArg(1) int[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) SoundPcmStream arg7) { + arg2 >>= 0x8; + @Pc(7) int local7 = arg6 >> 8; + @Pc(11) int local11 = arg4 << 2; + @Pc(20) int local20; + if ((local20 = arg3 + arg2 + 1 - local7) > arg5) { + local20 = arg5; + } + local20 -= 3; + @Pc(30) int local30; + while (arg3 < local20) { + local30 = arg3++; + @Pc(33) int local33 = arg1[local30]; + @Pc(36) int local36 = arg2 - 1; + arg1[local30] = local33 + arg0[arg2] * local11; + @Pc(43) int local43 = arg3++; + @Pc(46) int local46 = arg1[local43]; + @Pc(49) int local49 = local36 - 1; + arg1[local43] = local46 + arg0[local36] * local11; + @Pc(56) int local56 = arg3++; + @Pc(59) int local59 = arg1[local56]; + @Pc(62) int local62 = local49 - 1; + arg1[local56] = local59 + arg0[local49] * local11; + @Pc(69) int local69 = arg3++; + @Pc(72) int local72 = arg1[local69]; + arg2 = local62 - 1; + arg1[local69] = local72 + arg0[local62] * local11; + } + local20 += 3; + while (arg3 < local20) { + local30 = arg3++; + arg1[local30] += arg0[arg2--] * local11; + } + arg7.anInt346 = arg2 << 8; + return arg3; + } + + @OriginalMember(owner = "client!b", name = "c", descriptor = "(II[B[IIIIIIIILclient!b;II)I") + public static int method415(@OriginalArg(2) byte[] arg0, @OriginalArg(3) int[] arg1, @OriginalArg(4) int arg2, @OriginalArg(5) int arg3, @OriginalArg(6) int arg4, @OriginalArg(7) int arg5, @OriginalArg(9) int arg6, @OriginalArg(10) int arg7, @OriginalArg(11) SoundPcmStream arg8, @OriginalArg(12) int arg9, @OriginalArg(13) int arg10) { + arg8.anInt355 -= arg8.anInt347 * arg3; + arg8.anInt352 -= arg8.anInt354 * arg3; + @Pc(32) int local32; + if (arg9 == 0 || (local32 = arg3 + (arg7 + arg9 + 256 - arg2) / arg9) > arg6) { + local32 = arg6; + } + @Pc(51) int local51; + while (arg3 < local32) { + @Pc(43) int local43 = arg2 >> 8; + @Pc(49) byte local49 = arg0[local43 - 1]; + local51 = arg3++; + arg1[local51] += ((local49 << 8) + (arg0[local43] - local49) * (arg2 & 0xFF)) * arg4 >> 6; + arg4 += arg5; + arg2 += arg9; + } + if (arg9 == 0 || (local32 = arg3 + (arg7 + arg9 - arg2) / arg9) > arg6) { + local32 = arg6; + } + while (arg3 < local32) { + local51 = arg3++; + arg1[local51] += ((arg10 << 8) + (arg0[arg2 >> 8] - arg10) * (arg2 & 0xFF)) * arg4 >> 6; + arg4 += arg5; + arg2 += arg9; + } + arg8.anInt355 += arg8.anInt347 * arg3; + arg8.anInt352 += arg8.anInt354 * arg3; + arg8.anInt348 = arg4; + arg8.anInt346 = arg2; + return arg3; + } + + @OriginalMember(owner = "client!b", name = "b", descriptor = "(I[B[IIIIIIIILclient!b;)I") + public static int method414(@OriginalArg(1) byte[] arg0, @OriginalArg(2) int[] arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(8) int arg6, @OriginalArg(9) int arg7, @OriginalArg(10) SoundPcmStream arg8) { + arg2 >>= 0x8; + @Pc(7) int local7 = arg7 >> 8; + @Pc(11) int local11 = arg4 << 2; + @Pc(15) int local15 = arg5 << 2; + @Pc(24) int local24; + if ((local24 = arg3 + arg2 + 1 - local7) > arg6) { + local24 = arg6; + } + arg3 <<= 0x1; + local24 <<= 0x1; + local24 -= 6; + @Pc(45) byte local45; + @Pc(48) int local48; + while (arg3 < local24) { + @Pc(43) int local43 = arg2 - 1; + local45 = arg0[arg2]; + local48 = arg3 + 1; + arg1[arg3] += local45 * local11; + @Pc(58) int local58 = local48 + 1; + arg1[local48] += local45 * local15; + @Pc(68) int local68 = local43 - 1; + @Pc(70) byte local70 = arg0[local43]; + @Pc(73) int local73 = local58 + 1; + arg1[local58] += local70 * local11; + @Pc(83) int local83 = local73 + 1; + arg1[local73] += local70 * local15; + @Pc(93) int local93 = local68 - 1; + @Pc(95) byte local95 = arg0[local68]; + @Pc(98) int local98 = local83 + 1; + arg1[local83] += local95 * local11; + @Pc(108) int local108 = local98 + 1; + arg1[local98] += local95 * local15; + arg2 = local93 - 1; + @Pc(120) byte local120 = arg0[local93]; + @Pc(123) int local123 = local108 + 1; + arg1[local108] += local120 * local11; + arg3 = local123 + 1; + arg1[local123] += local120 * local15; + } + local24 += 6; + while (arg3 < local24) { + local45 = arg0[arg2--]; + local48 = arg3 + 1; + arg1[arg3] += local45 * local11; + arg3 = local48 + 1; + arg1[local48] += local45 * local15; + } + arg8.anInt346 = arg2 << 8; + return arg3 >> 1; + } + + @OriginalMember(owner = "client!b", name = "b", descriptor = "(II[B[IIIIIIIIIILclient!b;II)I") + public static int method407(@OriginalArg(2) byte[] arg0, @OriginalArg(3) int[] arg1, @OriginalArg(4) int arg2, @OriginalArg(5) int arg3, @OriginalArg(6) int arg4, @OriginalArg(7) int arg5, @OriginalArg(8) int arg6, @OriginalArg(9) int arg7, @OriginalArg(11) int arg8, @OriginalArg(12) int arg9, @OriginalArg(13) SoundPcmStream arg10, @OriginalArg(14) int arg11, @OriginalArg(15) int arg12) { + arg10.anInt348 -= arg10.anInt344 * arg3; + @Pc(23) int local23; + if (arg11 == 0 || (local23 = arg3 + (arg9 + arg11 + 256 - arg2) / arg11) > arg8) { + local23 = arg8; + } + arg3 <<= 0x1; + local23 <<= 0x1; + @Pc(65) int local65; + @Pc(62) int local62; + @Pc(64) int local64; + while (arg3 < local23) { + @Pc(42) int local42 = arg2 >> 8; + @Pc(48) byte local48 = arg0[local42 - 1]; + local62 = (local48 << 8) + (arg0[local42] - local48) * (arg2 & 0xFF); + local64 = arg3; + local65 = arg3 + 1; + arg1[local64] += local62 * arg4 >> 6; + arg4 += arg6; + @Pc(80) int local80 = local65; + arg3 = local65 + 1; + arg1[local80] += local62 * arg5 >> 6; + arg5 += arg7; + arg2 += arg11; + } + if (arg11 == 0 || (local23 = (arg3 >> 1) + (arg9 + arg11 - arg2) / arg11) > arg8) { + local23 = arg8; + } + local23 <<= 0x1; + while (arg3 < local23) { + local62 = (arg12 << 8) + (arg0[arg2 >> 8] - arg12) * (arg2 & 0xFF); + local64 = arg3; + local65 = arg3 + 1; + arg1[local64] += local62 * arg4 >> 6; + arg4 += arg6; + local64 = local65; + arg3 = local65 + 1; + arg1[local64] += local62 * arg5 >> 6; + arg5 += arg7; + arg2 += arg11; + } + local65 = arg3 >> 1; + arg10.anInt348 += arg10.anInt344 * local65; + arg10.anInt355 = arg4; + arg10.anInt352 = arg5; + arg10.anInt346 = arg2; + return local65; + } + + @OriginalMember(owner = "client!b", name = "b", descriptor = "(I[B[IIIIIIIIIILclient!b;)I") + public static int method402(@OriginalArg(1) byte[] arg0, @OriginalArg(2) int[] arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(10) int arg8, @OriginalArg(11) int arg9, @OriginalArg(12) SoundPcmStream arg10) { + arg2 >>= 0x8; + @Pc(7) int local7 = arg9 >> 8; + arg4 <<= 0x2; + arg5 <<= 0x2; + @Pc(19) int local19 = arg6 << 2; + @Pc(23) int local23 = arg7 << 2; + @Pc(32) int local32; + if ((local32 = arg3 + arg2 + 1 - local7) > arg8) { + local32 = arg8; + } + arg10.anInt348 += arg10.anInt344 * (local32 - arg3); + arg3 <<= 0x1; + local32 <<= 0x1; + local32 -= 6; + @Pc(64) byte local64; + @Pc(67) int local67; + while (arg3 < local32) { + @Pc(62) int local62 = arg2 - 1; + local64 = arg0[arg2]; + local67 = arg3 + 1; + arg1[arg3] += local64 * arg4; + @Pc(78) int local78 = arg4 + local19; + @Pc(81) int local81 = local67 + 1; + arg1[local67] += local64 * arg5; + @Pc(92) int local92 = arg5 + local23; + @Pc(95) int local95 = local62 - 1; + @Pc(97) byte local97 = arg0[local62]; + @Pc(100) int local100 = local81 + 1; + arg1[local81] += local97 * local78; + @Pc(111) int local111 = local78 + local19; + @Pc(114) int local114 = local100 + 1; + arg1[local100] += local97 * local92; + @Pc(125) int local125 = local92 + local23; + @Pc(128) int local128 = local95 - 1; + @Pc(130) byte local130 = arg0[local95]; + @Pc(133) int local133 = local114 + 1; + arg1[local114] += local130 * local111; + @Pc(144) int local144 = local111 + local19; + @Pc(147) int local147 = local133 + 1; + arg1[local133] += local130 * local125; + @Pc(158) int local158 = local125 + local23; + arg2 = local128 - 1; + @Pc(163) byte local163 = arg0[local128]; + @Pc(166) int local166 = local147 + 1; + arg1[local147] += local163 * local144; + arg4 = local144 + local19; + arg3 = local166 + 1; + arg1[local166] += local163 * local158; + arg5 = local158 + local23; + } + local32 += 6; + while (arg3 < local32) { + local64 = arg0[arg2--]; + local67 = arg3 + 1; + arg1[arg3] += local64 * arg4; + arg4 += local19; + arg3 = local67 + 1; + arg1[local67] += local64 * arg5; + arg5 += local23; + } + arg10.anInt355 = arg4 >> 2; + arg10.anInt352 = arg5 >> 2; + arg10.anInt346 = arg2 << 8; + return arg3 >> 1; + } + + @OriginalMember(owner = "client!b", name = "b", descriptor = "([III)V") + @Override + public final synchronized void read(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + if (this.volume == 0 && this.anInt351 == 0) { + this.skip(arg2); + return; + } + @Pc(13) PcmSound local13 = (PcmSound) this.sound; + @Pc(18) int local18 = this.start << 8; + @Pc(23) int local23 = this.end << 8; + @Pc(29) int local29 = local13.samples.length << 8; + @Pc(33) int local33 = local23 - local18; + if (local33 <= 0) { + this.anInt350 = 0; + } + @Pc(40) int local40 = arg1; + @Pc(44) int local44 = arg2 + arg1; + if (this.anInt346 < 0) { + if (this.anInt342 <= 0) { + this.method406(); + this.unlink(); + return; + } + this.anInt346 = 0; + } + if (this.anInt346 >= local29) { + if (this.anInt342 >= 0) { + this.method406(); + this.unlink(); + return; + } + this.anInt346 = local29 - 1; + } + if (this.anInt350 >= 0) { + if (this.anInt350 > 0) { + if (this.aBoolean14) { + label131: + { + if (this.anInt342 < 0) { + local40 = this.method403(arg0, arg1, local18, local44, local13.samples[this.start]); + if (this.anInt346 >= local18) { + return; + } + this.anInt346 = local18 + local18 - this.anInt346 - 1; + this.anInt342 = -this.anInt342; + if (--this.anInt350 == 0) { + break label131; + } + } + do { + local40 = this.method385(arg0, local40, local23, local44, local13.samples[this.end - 1]); + if (this.anInt346 < local23) { + return; + } + this.anInt346 = local23 + local23 - this.anInt346 - 1; + this.anInt342 = -this.anInt342; + if (--this.anInt350 == 0) { + break; + } + local40 = this.method403(arg0, local40, local18, local44, local13.samples[this.start]); + if (this.anInt346 >= local18) { + return; + } + this.anInt346 = local18 + local18 - this.anInt346 - 1; + this.anInt342 = -this.anInt342; + } while (--this.anInt350 != 0); + } + } else { + @Pc(417) int local417; + if (this.anInt342 < 0) { + while (true) { + local40 = this.method403(arg0, local40, local18, local44, local13.samples[this.end - 1]); + if (this.anInt346 >= local18) { + return; + } + local417 = (local23 - this.anInt346 - 1) / local33; + if (local417 >= this.anInt350) { + this.anInt346 += local33 * this.anInt350; + this.anInt350 = 0; + break; + } + this.anInt346 += local33 * local417; + this.anInt350 -= local417; + } + } else { + while (true) { + local40 = this.method385(arg0, local40, local23, local44, local13.samples[this.start]); + if (this.anInt346 < local23) { + return; + } + local417 = (this.anInt346 - local18) / local33; + if (local417 >= this.anInt350) { + this.anInt346 -= local33 * this.anInt350; + this.anInt350 = 0; + break; + } + this.anInt346 -= local33 * local417; + this.anInt350 -= local417; + } + } + } + } + if (this.anInt342 < 0) { + this.method403(arg0, local40, 0, local44, 0); + if (this.anInt346 < 0) { + this.anInt346 = -1; + this.method406(); + this.unlink(); + } + } else { + this.method385(arg0, local40, local29, local44, 0); + if (this.anInt346 >= local29) { + this.anInt346 = local29; + this.method406(); + this.unlink(); + } + } + } else if (this.aBoolean14) { + if (this.anInt342 < 0) { + local40 = this.method403(arg0, arg1, local18, local44, local13.samples[this.start]); + if (this.anInt346 >= local18) { + return; + } + this.anInt346 = local18 + local18 - this.anInt346 - 1; + this.anInt342 = -this.anInt342; + } + while (true) { + local40 = this.method385(arg0, local40, local23, local44, local13.samples[this.end - 1]); + if (this.anInt346 < local23) { + return; + } + this.anInt346 = local23 + local23 - this.anInt346 - 1; + this.anInt342 = -this.anInt342; + local40 = this.method403(arg0, local40, local18, local44, local13.samples[this.start]); + if (this.anInt346 >= local18) { + return; + } + this.anInt346 = local18 + local18 - this.anInt346 - 1; + this.anInt342 = -this.anInt342; + } + } else if (this.anInt342 < 0) { + while (true) { + local40 = this.method403(arg0, local40, local18, local44, local13.samples[this.end - 1]); + if (this.anInt346 >= local18) { + return; + } + this.anInt346 = local23 - (local23 - 1 - this.anInt346) % local33 - 1; + } + } else { + while (true) { + local40 = this.method385(arg0, local40, local23, local44, local13.samples[this.start]); + if (this.anInt346 < local23) { + return; + } + this.anInt346 = local18 + (this.anInt346 - local18) % local33; + } + } + } + + @OriginalMember(owner = "client!b", name = "e", descriptor = "()Z") + private boolean method383() { + @Pc(2) int local2 = this.volume; + @Pc(10) int local10; + @Pc(8) int local8; + if (local2 == Integer.MIN_VALUE) { + local8 = 0; + local10 = 0; + local2 = 0; + } else { + local10 = method419(local2, this.pan); + local8 = method421(local2, this.pan); + } + if (this.anInt348 != local2 || this.anInt355 != local10 || this.anInt352 != local8) { + if (this.anInt348 < local2) { + this.anInt344 = 1; + this.anInt351 = local2 - this.anInt348; + } else if (this.anInt348 > local2) { + this.anInt344 = -1; + this.anInt351 = this.anInt348 - local2; + } else { + this.anInt344 = 0; + } + if (this.anInt355 < local10) { + this.anInt347 = 1; + if (this.anInt351 == 0 || this.anInt351 > local10 - this.anInt355) { + this.anInt351 = local10 - this.anInt355; + } + } else if (this.anInt355 > local10) { + this.anInt347 = -1; + if (this.anInt351 == 0 || this.anInt351 > this.anInt355 - local10) { + this.anInt351 = this.anInt355 - local10; + } + } else { + this.anInt347 = 0; + } + if (this.anInt352 < local8) { + this.anInt354 = 1; + if (this.anInt351 == 0 || this.anInt351 > local8 - this.anInt352) { + this.anInt351 = local8 - this.anInt352; + } + } else if (this.anInt352 > local8) { + this.anInt354 = -1; + if (this.anInt351 == 0 || this.anInt351 > this.anInt352 - local8) { + this.anInt351 = this.anInt352 - local8; + } + } else { + this.anInt354 = 0; + } + return false; + } else if (this.volume == Integer.MIN_VALUE) { + this.volume = 0; + this.anInt348 = this.anInt355 = this.anInt352 = 0; + this.unlink(); + return true; + } else { + this.method416(); + return false; + } + } + + @OriginalMember(owner = "client!b", name = "d", descriptor = "(I)V") + public final synchronized void method384(@OriginalArg(0) int arg0) { + if (arg0 == 0) { + this.method397(); + this.unlink(); + } else if (this.anInt355 == 0 && this.anInt352 == 0) { + this.anInt351 = 0; + this.volume = 0; + this.anInt348 = 0; + this.unlink(); + } else { + @Pc(31) int local31 = -this.anInt348; + if (this.anInt348 > local31) { + local31 = this.anInt348; + } + if (-this.anInt355 > local31) { + local31 = -this.anInt355; + } + if (this.anInt355 > local31) { + local31 = this.anInt355; + } + if (-this.anInt352 > local31) { + local31 = -this.anInt352; + } + if (this.anInt352 > local31) { + local31 = this.anInt352; + } + if (arg0 > local31) { + arg0 = local31; + } + this.anInt351 = arg0; + this.volume = Integer.MIN_VALUE; + this.anInt344 = -this.anInt348 / arg0; + this.anInt347 = -this.anInt355 / arg0; + this.anInt354 = -this.anInt352 / arg0; + } + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "([IIIII)I") + private int method385(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + while (true) { + if (this.anInt351 > 0) { + @Pc(7) int local7 = arg1 + this.anInt351; + if (local7 > arg3) { + local7 = arg3; + } + this.anInt351 += arg1; + if (this.anInt342 == 256 && (this.anInt346 & 0xFF) == 0) { + if (AudioChannel.stereo) { + arg1 = method393(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt355, this.anInt352, this.anInt347, this.anInt354, local7, arg2, this); + } else { + arg1 = method395(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt348, this.anInt344, local7, arg2, this); + } + } else if (AudioChannel.stereo) { + arg1 = method388(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt355, this.anInt352, this.anInt347, this.anInt354, local7, arg2, this, this.anInt342, arg4); + } else { + arg1 = method389(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt348, this.anInt344, local7, arg2, this, this.anInt342, arg4); + } + this.anInt351 -= arg1; + if (this.anInt351 != 0) { + return arg1; + } + if (!this.method383()) { + continue; + } + return arg3; + } + if (this.anInt342 == 256 && (this.anInt346 & 0xFF) == 0) { + if (AudioChannel.stereo) { + return method387(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt355, this.anInt352, arg3, arg2, this); + } + return method391(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt348, arg3, arg2, this); + } + if (AudioChannel.stereo) { + return method400(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt355, this.anInt352, arg3, arg2, this, this.anInt342, arg4); + } + return method422(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt348, arg3, arg2, this, this.anInt342, arg4); + } + } + + @OriginalMember(owner = "client!b", name = "e", descriptor = "(I)V") + public final synchronized void setVolume(@OriginalArg(0) int arg0) { + this.method408(arg0 << 6, this.getPan()); + } + + @OriginalMember(owner = "client!b", name = "c", descriptor = "()I") + @Override + public final int method4407() { + @Pc(6) int local6 = this.anInt348 * 3 >> 6; + local6 = (local6 ^ local6 >> 31) + (local6 >>> 31); + if (this.anInt350 == 0) { + local6 -= local6 * this.anInt346 / (((PcmSound) this.sound).samples.length << 8); + } else if (this.anInt350 >= 0) { + local6 -= local6 * this.start / ((PcmSound) this.sound).samples.length; + } + return local6 > 255 ? 255 : local6; + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "()I") + @Override + public final int method4404() { + return this.volume == 0 && this.anInt351 == 0 ? 0 : 1; + } + + @OriginalMember(owner = "client!b", name = "f", descriptor = "()I") + public final synchronized int getVolume() { + return this.volume == Integer.MIN_VALUE ? 0 : this.volume; + } + + @OriginalMember(owner = "client!b", name = "c", descriptor = "(I)V") + @Override + public final synchronized void skip(@OriginalArg(0) int arg0) { + if (this.anInt351 > 0) { + if (arg0 >= this.anInt351) { + if (this.volume == Integer.MIN_VALUE) { + this.volume = 0; + this.anInt348 = this.anInt355 = this.anInt352 = 0; + this.unlink(); + arg0 = this.anInt351; + } + this.anInt351 = 0; + this.method416(); + } else { + this.anInt348 += this.anInt344 * arg0; + this.anInt355 += this.anInt347 * arg0; + this.anInt352 += this.anInt354 * arg0; + this.anInt351 -= arg0; + } + } + @Pc(71) PcmSound local71 = (PcmSound) this.sound; + @Pc(76) int local76 = this.start << 8; + @Pc(81) int local81 = this.end << 8; + @Pc(87) int local87 = local71.samples.length << 8; + @Pc(91) int local91 = local81 - local76; + if (local91 <= 0) { + this.anInt350 = 0; + } + if (this.anInt346 < 0) { + if (this.anInt342 <= 0) { + this.method406(); + this.unlink(); + return; + } + this.anInt346 = 0; + } + if (this.anInt346 >= local87) { + if (this.anInt342 >= 0) { + this.method406(); + this.unlink(); + return; + } + this.anInt346 = local87 - 1; + } + this.anInt346 += this.anInt342 * arg0; + if (this.anInt350 >= 0) { + if (this.anInt350 > 0) { + if (this.aBoolean14) { + label121: + { + if (this.anInt342 < 0) { + if (this.anInt346 >= local76) { + return; + } + this.anInt346 = local76 + local76 - this.anInt346 - 1; + this.anInt342 = -this.anInt342; + if (--this.anInt350 == 0) { + break label121; + } + } + do { + if (this.anInt346 < local81) { + return; + } + this.anInt346 = local81 + local81 - this.anInt346 - 1; + this.anInt342 = -this.anInt342; + if (--this.anInt350 == 0) { + break; + } + if (this.anInt346 >= local76) { + return; + } + this.anInt346 = local76 + local76 - this.anInt346 - 1; + this.anInt342 = -this.anInt342; + } while (--this.anInt350 != 0); + } + } else { + label153: + { + @Pc(362) int local362; + if (this.anInt342 < 0) { + if (this.anInt346 >= local76) { + return; + } + local362 = (local81 - this.anInt346 - 1) / local91; + if (local362 >= this.anInt350) { + this.anInt346 += local91 * this.anInt350; + this.anInt350 = 0; + break label153; + } + this.anInt346 += local91 * local362; + this.anInt350 -= local362; + } else if (this.anInt346 >= local81) { + local362 = (this.anInt346 - local76) / local91; + if (local362 >= this.anInt350) { + this.anInt346 -= local91 * this.anInt350; + this.anInt350 = 0; + break label153; + } + this.anInt346 -= local91 * local362; + this.anInt350 -= local362; + } else { + return; + } + return; + } + } + } + if (this.anInt342 < 0) { + if (this.anInt346 < 0) { + this.anInt346 = -1; + this.method406(); + this.unlink(); + } + } else if (this.anInt346 >= local87) { + this.anInt346 = local87; + this.method406(); + this.unlink(); + } + } else if (this.aBoolean14) { + if (this.anInt342 < 0) { + if (this.anInt346 >= local76) { + return; + } + this.anInt346 = local76 + local76 - this.anInt346 - 1; + this.anInt342 = -this.anInt342; + } + while (this.anInt346 >= local81) { + this.anInt346 = local81 + local81 - this.anInt346 - 1; + this.anInt342 = -this.anInt342; + if (this.anInt346 >= local76) { + return; + } + this.anInt346 = local76 + local76 - this.anInt346 - 1; + this.anInt342 = -this.anInt342; + } + } else if (this.anInt342 < 0) { + if (this.anInt346 >= local76) { + return; + } + this.anInt346 = local81 - (local81 - 1 - this.anInt346) % local91 - 1; + } else if (this.anInt346 >= local81) { + this.anInt346 = local76 + (this.anInt346 - local76) % local91; + } else { + return; + } + } + + @OriginalMember(owner = "client!b", name = "f", descriptor = "(I)V") + public final synchronized void setLoops(@OriginalArg(0) int arg0) { + this.anInt350 = arg0; + } + + @OriginalMember(owner = "client!b", name = "g", descriptor = "(I)V") + private synchronized void method397() { + this.method408(0, this.getPan()); + } + + @OriginalMember(owner = "client!b", name = "b", descriptor = "(II)V") + public final synchronized void method398(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + this.method417(arg0, arg1, this.getPan()); + } + + @OriginalMember(owner = "client!b", name = "b", descriptor = "()Lclient!qb;") + @Override + public final PcmStream firstSubStream() { + return null; + } + + @OriginalMember(owner = "client!b", name = "h", descriptor = "(I)V") + public final synchronized void method401(@OriginalArg(0) int arg0) { + @Pc(7) int local7 = ((PcmSound) this.sound).samples.length << 8; + if (arg0 < -1) { + arg0 = -1; + } + if (arg0 > local7) { + arg0 = local7; + } + this.anInt346 = arg0; + } + + @OriginalMember(owner = "client!b", name = "b", descriptor = "([IIIII)I") + private int method403(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + while (true) { + if (this.anInt351 > 0) { + @Pc(7) int local7 = arg1 + this.anInt351; + if (local7 > arg3) { + local7 = arg3; + } + this.anInt351 += arg1; + if (this.anInt342 == -256 && (this.anInt346 & 0xFF) == 0) { + if (AudioChannel.stereo) { + arg1 = method402(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt355, this.anInt352, this.anInt347, this.anInt354, local7, arg2, this); + } else { + arg1 = method394(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt348, this.anInt344, local7, arg2, this); + } + } else if (AudioChannel.stereo) { + arg1 = method407(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt355, this.anInt352, this.anInt347, this.anInt354, local7, arg2, this, this.anInt342, arg4); + } else { + arg1 = method415(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt348, this.anInt344, local7, arg2, this, this.anInt342, arg4); + } + this.anInt351 -= arg1; + if (this.anInt351 != 0) { + return arg1; + } + if (!this.method383()) { + continue; + } + return arg3; + } + if (this.anInt342 == -256 && (this.anInt346 & 0xFF) == 0) { + if (AudioChannel.stereo) { + return method414(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt355, this.anInt352, arg3, arg2, this); + } + return method413(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt348, arg3, arg2, this); + } + if (AudioChannel.stereo) { + return method420(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt355, this.anInt352, arg3, arg2, this, this.anInt342, arg4); + } + return method390(((PcmSound) this.sound).samples, arg0, this.anInt346, arg1, this.anInt348, arg3, arg2, this, this.anInt342, arg4); + } + } + + @OriginalMember(owner = "client!b", name = "g", descriptor = "()I") + public final synchronized int method405() { + return this.anInt342 < 0 ? -this.anInt342 : this.anInt342; + } + + @OriginalMember(owner = "client!b", name = "h", descriptor = "()V") + private void method406() { + if (this.anInt351 == 0) { + return; + } + if (this.volume == Integer.MIN_VALUE) { + this.volume = 0; + } + this.anInt351 = 0; + this.method416(); + } + + @OriginalMember(owner = "client!b", name = "c", descriptor = "(II)V") + private synchronized void method408(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + this.volume = arg0; + this.pan = arg1; + this.anInt351 = 0; + this.method416(); + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "(Z)V") + public final synchronized void method409() { + this.anInt342 = (this.anInt342 ^ this.anInt342 >> 31) + (this.anInt342 >>> 31); + this.anInt342 = -this.anInt342; + } + + @OriginalMember(owner = "client!b", name = "i", descriptor = "(I)V") + public final synchronized void method410(@OriginalArg(0) int arg0) { + if (this.anInt342 < 0) { + this.anInt342 = -arg0; + } else { + this.anInt342 = arg0; + } + } + + @OriginalMember(owner = "client!b", name = "i", descriptor = "()Z") + public final boolean method411() { + return this.anInt346 < 0 || this.anInt346 >= ((PcmSound) this.sound).samples.length << 8; + } + + @OriginalMember(owner = "client!b", name = "j", descriptor = "()Z") + public final boolean method412() { + return this.anInt351 != 0; + } + + @OriginalMember(owner = "client!b", name = "k", descriptor = "()V") + private void method416() { + this.anInt348 = this.volume; + this.anInt355 = method419(this.volume, this.pan); + this.anInt352 = method421(this.volume, this.pan); + } + + @OriginalMember(owner = "client!b", name = "a", descriptor = "(III)V") + public final synchronized void method417(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + if (arg0 == 0) { + this.method408(arg1, arg2); + return; + } + @Pc(10) int local10 = method419(arg1, arg2); + @Pc(14) int local14 = method421(arg1, arg2); + if (this.anInt355 == local10 && this.anInt352 == local14) { + this.anInt351 = 0; + return; + } + @Pc(31) int local31 = arg1 - this.anInt348; + if (this.anInt348 - arg1 > local31) { + local31 = this.anInt348 - arg1; + } + if (local10 - this.anInt355 > local31) { + local31 = local10 - this.anInt355; + } + if (this.anInt355 - local10 > local31) { + local31 = this.anInt355 - local10; + } + if (local14 - this.anInt352 > local31) { + local31 = local14 - this.anInt352; + } + if (this.anInt352 - local14 > local31) { + local31 = this.anInt352 - local14; + } + if (arg0 > local31) { + arg0 = local31; + } + this.anInt351 = arg0; + this.volume = arg1; + this.pan = arg2; + this.anInt344 = (arg1 - this.anInt348) / arg0; + this.anInt347 = (local10 - this.anInt355) / arg0; + this.anInt354 = (local14 - this.anInt352) / arg0; + } + + @OriginalMember(owner = "client!b", name = "l", descriptor = "()I") + public final synchronized int getPan() { + return this.pan < 0 ? -1 : this.pan; + } + + @OriginalMember(owner = "client!b", name = "d", descriptor = "()Lclient!qb;") + @Override + public final PcmStream nextSubStream() { + return null; + } +} diff --git a/client/src/main/java/rt4/SoundPlayer.java b/client/src/main/java/rt4/SoundPlayer.java new file mode 100644 index 0000000..e720a2a --- /dev/null +++ b/client/src/main/java/rt4/SoundPlayer.java @@ -0,0 +1,140 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class SoundPlayer { + @OriginalMember(owner = "client!qe", name = "t", descriptor = "[I") + public static final int[] ids = new int[50]; + @OriginalMember(owner = "client!wh", name = "g", descriptor = "[I") + public static final int[] loops = new int[50]; + @OriginalMember(owner = "client!na", name = "mb", descriptor = "[I") + public static final int[] delays = new int[50]; + @OriginalMember(owner = "client!nk", name = "n", descriptor = "[Lclient!sl;") + public static final SynthSound[] sounds = new SynthSound[50]; + @OriginalMember(owner = "client!ca", name = "fb", descriptor = "[I") + public static final int[] positions = new int[50]; + @OriginalMember(owner = "client!pe", name = "j", descriptor = "I") + public static int size = 0; + + @OriginalMember(owner = "client!ma", name = "a", descriptor = "(ILclient!tk;IIZI)V") + public static void playSeqSound(@OriginalArg(0) int zFine, @OriginalArg(1) SeqType seqType, @OriginalArg(3) int xFine, @OriginalArg(4) boolean self, @OriginalArg(5) int index) { + if (size >= 50 || (seqType.soundeffect == null || index >= seqType.soundeffect.length || seqType.soundeffect[index] == null)) { + return; + } + @Pc(36) int sound = seqType.soundeffect[index][0]; + @Pc(40) int id = sound >> 8; + if (seqType.soundeffect[index].length > 1) { + int alternativeIdIndex = (int) ((double) seqType.soundeffect[index].length * Math.random()); + if (alternativeIdIndex > 0) { + id = seqType.soundeffect[index][alternativeIdIndex]; + } + } + @Pc(73) int loops = sound >> 5 & 0x7; + @Pc(77) int minDistance = sound & 0x1F; + if (minDistance == 0) { + if (self) { + play(loops, id, 0); + } + } else if (Preferences.ambientSoundsVolume != 0) { + ids[size] = id; + SoundPlayer.loops[size] = loops; + @Pc(111) int z = (zFine - 64) / 128; + int x = (xFine - 64) / 128; + delays[size] = 0; + sounds[size] = null; + positions[size] = minDistance + (x << 16) + (z << 8); + size++; + } + } + + @OriginalMember(owner = "client!ca", name = "a", descriptor = "(IIII)V") + public static void play(@OriginalArg(0) int loops, @OriginalArg(1) int id, @OriginalArg(2) int delay) { + if (Preferences.soundEffectVolume == 0 || loops == 0 || size >= 50 || id == -1) { + return; + } + ids[size] = id; + SoundPlayer.loops[size] = loops; + delays[size] = delay; + sounds[size] = null; + positions[size] = 0; + size++; + } + + @OriginalMember(owner = "client!ed", name = "d", descriptor = "(B)V") + public static void loop() { + for (@Pc(5) int i = 0; i < size; i++) { + @Pc(12) int local12 = delays[i]--; + if (delays[i] >= -10) { + @Pc(79) SynthSound sound = sounds[i]; + if (sound == null) { + sound = SynthSound.create(client.js5Archive4, ids[i], 0); + if (sound == null) { + continue; + } + delays[i] += sound.getStart(); + sounds[i] = sound; + } + if (delays[i] < 0) { + @Pc(209) int volume; + if (positions[i] == 0) { + volume = Preferences.soundEffectVolume; + } else { + @Pc(125) int minDistance = (positions[i] & 0xFF) * 128; + @Pc(133) int z = positions[i] >> 8 & 0xFF; + @Pc(141) int x = positions[i] >> 16 & 0xFF; + @Pc(151) int zFine = z * 128 + 64 - PlayerList.self.zFine; + if (zFine < 0) { + zFine = -zFine; + } + @Pc(167) int xFine = x * 128 + 64 - PlayerList.self.xFine; + if (xFine < 0) { + xFine = -xFine; + } + @Pc(180) int distance = xFine + zFine - 128; + if (minDistance < distance) { + delays[i] = -100; + continue; + } + if (distance < 0) { + distance = 0; + } + volume = Preferences.ambientSoundsVolume * (minDistance - distance) / minDistance; + } + if (volume > 0) { + @Pc(223) PcmSound pcmSound = sound.toPcmSound().resample(client.resampler); + @Pc(228) SoundPcmStream stream = SoundPcmStream.create(pcmSound, volume); + stream.setLoops(loops[i] - 1); + client.soundStream.addSubStream(stream); + } + delays[i] = -100; + } + } else { + size--; + for (@Pc(28) int j = i; j < size; j++) { + ids[j] = ids[j + 1]; + sounds[j] = sounds[j + 1]; + loops[j] = loops[j + 1]; + delays[j] = delays[j + 1]; + positions[j] = positions[j + 1]; + } + i--; + } + } + if (MidiPlayer.jingle && !MidiPlayer.isPlaying()) { + if (Preferences.musicVolume != 0 && MusicPlayer.groupId != -1) { + MidiPlayer.playImmediate(client.js5Archive6, MusicPlayer.groupId, Preferences.musicVolume); + } + MidiPlayer.jingle = false; + } else if (Preferences.musicVolume != 0 && MusicPlayer.groupId != -1 && !MidiPlayer.isPlaying()) { + sendTrackEndPacket(); + } + } + + public static void sendTrackEndPacket() { + Protocol.outboundBuffer.p1isaac(ClientProt.SOUND_SONGEND); + Protocol.outboundBuffer.p4(MusicPlayer.groupId); + MusicPlayer.groupId = -1; + } +} diff --git a/client/src/main/java/rt4/SpecularMaterialRenderer.java b/client/src/main/java/rt4/SpecularMaterialRenderer.java new file mode 100644 index 0000000..2443c17 --- /dev/null +++ b/client/src/main/java/rt4/SpecularMaterialRenderer.java @@ -0,0 +1,237 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!vm") +public final class SpecularMaterialRenderer implements MaterialRenderer { + + @OriginalMember(owner = "client!vm", name = "a", descriptor = "I") + private int anInt5777 = -1; + + @OriginalMember(owner = "client!vm", name = "c", descriptor = "[I") + private int[] anIntArray519 = null; + + @OriginalMember(owner = "client!vm", name = "b", descriptor = "Z") + private boolean aBoolean301 = false; + + @OriginalMember(owner = "client!vm", name = "", descriptor = "()V") + public SpecularMaterialRenderer() { + if (GlRenderer.arbTextureCubeMapSupported && GlRenderer.maxTextureUnits >= 2) { + this.method4536(); + @Pc(19) GL2 gl = GlRenderer.gl; + gl.glBindTexture(GL2.GL_TEXTURE_CUBE_MAP, this.anIntArray519[0]); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_WRAP_R, GL2.GL_CLAMP_TO_EDGE); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_WRAP_S, GL2.GL_CLAMP_TO_EDGE); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_WRAP_T, GL2.GL_CLAMP_TO_EDGE); + gl.glBindTexture(GL2.GL_TEXTURE_CUBE_MAP, this.anIntArray519[1]); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_WRAP_R, GL2.GL_CLAMP_TO_EDGE); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_WRAP_S, GL2.GL_CLAMP_TO_EDGE); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_WRAP_T, GL2.GL_CLAMP_TO_EDGE); + gl.glBindTexture(GL2.GL_TEXTURE_CUBE_MAP, this.anIntArray519[2]); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_WRAP_R, GL2.GL_CLAMP_TO_EDGE); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_WRAP_S, GL2.GL_CLAMP_TO_EDGE); + gl.glTexParameteri(GL2.GL_TEXTURE_CUBE_MAP, GL2.GL_TEXTURE_WRAP_T, GL2.GL_CLAMP_TO_EDGE); + this.aBoolean301 = GlRenderer.maxTextureUnits < 3; + } + this.method4535(); + } + + @OriginalMember(owner = "client!vm", name = "d", descriptor = "()V") + private void method4535() { + @Pc(1) GL2 gl = GlRenderer.gl; + this.anInt5777 = gl.glGenLists(2); + gl.glNewList(this.anInt5777, GL2.GL_COMPILE); + if (this.anIntArray519 == null) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_PRIMARY_COLOR); + } else { + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glTexGeni(GL2.GL_S, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_NORMAL_MAP); + gl.glTexGeni(GL2.GL_T, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_NORMAL_MAP); + gl.glTexGeni(GL2.GL_R, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_NORMAL_MAP); + gl.glEnable(GL2.GL_TEXTURE_GEN_S); + gl.glEnable(GL2.GL_TEXTURE_GEN_T); + gl.glEnable(GL2.GL_TEXTURE_GEN_R); + gl.glEnable(GL2.GL_TEXTURE_CUBE_MAP); + gl.glMatrixMode(GL2.GL_TEXTURE); + gl.glLoadIdentity(); + gl.glRotatef(22.5F, 1.0F, 0.0F, 0.0F); + gl.glMatrixMode(GL2.GL_MODELVIEW); + if (this.aBoolean301) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_ADD); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_OPERAND0_RGB, GL2.GL_SRC_ALPHA); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_REPLACE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_PRIMARY_COLOR); + } else { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_REPLACE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_PREVIOUS); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE); + gl.glActiveTexture(GL2.GL_TEXTURE2); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_COMBINE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_ADD); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_PREVIOUS); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC1_RGB, GL2.GL_PREVIOUS); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_OPERAND1_RGB, GL2.GL_SRC_ALPHA); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_REPLACE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_PRIMARY_COLOR); + gl.glBindTexture(GL2.GL_TEXTURE_2D, GlRenderer.anInt5328); + gl.glEnable(GL2.GL_TEXTURE_2D); + } + gl.glActiveTexture(GL2.GL_TEXTURE0); + } + gl.glEndList(); + gl.glNewList(this.anInt5777 + 1, GL2.GL_COMPILE); + if (this.anIntArray519 == null) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_TEXTURE); + } else { + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glDisable(GL2.GL_TEXTURE_GEN_S); + gl.glDisable(GL2.GL_TEXTURE_GEN_T); + gl.glDisable(GL2.GL_TEXTURE_GEN_R); + gl.glDisable(GL2.GL_TEXTURE_CUBE_MAP); + gl.glMatrixMode(GL2.GL_TEXTURE); + gl.glLoadIdentity(); + gl.glMatrixMode(GL2.GL_MODELVIEW); + if (this.aBoolean301) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_OPERAND0_RGB, GL2.GL_SRC_COLOR); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_TEXTURE); + } else { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_TEXTURE); + gl.glActiveTexture(GL2.GL_TEXTURE2); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_TEXTURE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_OPERAND1_RGB, GL2.GL_SRC_COLOR); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_TEXTURE); + gl.glDisable(GL2.GL_TEXTURE_2D); + } + gl.glActiveTexture(GL2.GL_TEXTURE0); + } + gl.glEndList(); + } + + @OriginalMember(owner = "client!vm", name = "a", descriptor = "()V") + @Override + public final void unbind() { + @Pc(1) GL2 gl = GlRenderer.gl; + if (Preferences.highDetailLighting) { + gl.glCallList(this.anInt5777 + 1); + } else { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_TEXTURE); + } + } + + @OriginalMember(owner = "client!vm", name = "c", descriptor = "()I") + @Override + public final int getFlags() { + return 4; + } + + @OriginalMember(owner = "client!vm", name = "b", descriptor = "()V") + @Override + public final void bind() { + @Pc(1) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureCombineAlphaMode(1); + if (Preferences.highDetailLighting) { + gl.glCallList(this.anInt5777); + } else { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_PRIMARY_COLOR); + } + } + + @OriginalMember(owner = "client!vm", name = "a", descriptor = "(I)V") + @Override + public final void setArgument(@OriginalArg(0) int arg0) { + @Pc(1) GL2 gl = GlRenderer.gl; + if (Preferences.highDetailLighting && this.anIntArray519 != null) { + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glBindTexture(GL2.GL_TEXTURE_CUBE_MAP, this.anIntArray519[arg0 - 1]); + gl.glActiveTexture(GL2.GL_TEXTURE0); + } + } + + @OriginalMember(owner = "client!vm", name = "e", descriptor = "()V") + private void method4536() { + @Pc(1) GL2 gl = GlRenderer.gl; + if (this.anIntArray519 == null) { + this.anIntArray519 = new int[3]; + gl.glGenTextures(3, this.anIntArray519, 0); + } + @Pc(19) byte[] local19 = new byte[4096]; + @Pc(22) byte[] local22 = new byte[4096]; + @Pc(25) byte[] local25 = new byte[4096]; + for (@Pc(27) int local27 = 0; local27 < 6; local27++) { + @Pc(32) int local32 = 0; + for (@Pc(34) int local34 = 0; local34 < 64; local34++) { + for (@Pc(39) int local39 = 0; local39 < 64; local39++) { + @Pc(51) float local51 = (float) local39 * 2.0F / 64.0F - 1.0F; + @Pc(60) float local60 = (float) local34 * 2.0F / 64.0F - 1.0F; + @Pc(75) float local75 = (float) (1.0D / Math.sqrt(local51 * local51 + local60 * local60 + 1.0F)); + @Pc(79) float local79 = local51 * local75; + @Pc(83) float local83 = local60 * local75; + @Pc(88) float local88; + if (local27 == 0) { + local88 = -local79; + } else if (local27 == 1) { + local88 = local79; + } else if (local27 == 2) { + local88 = local83; + } else if (local27 == 3) { + local88 = -local83; + } else if (local27 == 4) { + local88 = local75; + } else { + local88 = -local75; + } + @Pc(129) int local129; + @Pc(137) int local137; + @Pc(145) int local145; + if (local88 > 0.0F) { + local129 = (int) (Math.pow(local88, 96.0D) * 255.0D); + local137 = (int) (Math.pow(local88, 36.0D) * 255.0D); + local145 = (int) (Math.pow(local88, 12.0D) * 255.0D); + } else { + local145 = 0; + local137 = 0; + local129 = 0; + } + if (GlRenderer.maxTextureUnits < 3) { + local129 /= 5; + local137 /= 5; + local145 /= 5; + } else { + local129 /= 2; + local137 /= 2; + local145 /= 2; + } + local22[local32] = (byte) local129; + local25[local32] = (byte) local137; + local19[local32] = (byte) local145; + local32++; + } + } + gl.glBindTexture(GL2.GL_TEXTURE_CUBE_MAP, this.anIntArray519[0]); + gl.glTexImage2D(local27 + GL2.GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL2.GL_ALPHA, 64, 64, 0, GL2.GL_ALPHA, GL2.GL_UNSIGNED_BYTE, ByteBuffer.wrap(local22)); + gl.glBindTexture(GL2.GL_TEXTURE_CUBE_MAP, this.anIntArray519[1]); + gl.glTexImage2D(local27 + GL2.GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL2.GL_ALPHA, 64, 64, 0, GL2.GL_ALPHA, GL2.GL_UNSIGNED_BYTE, ByteBuffer.wrap(local25)); + gl.glBindTexture(GL2.GL_TEXTURE_CUBE_MAP, this.anIntArray519[2]); + gl.glTexImage2D(local27 + GL2.GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL2.GL_ALPHA, 64, 64, 0, GL2.GL_ALPHA, GL2.GL_UNSIGNED_BYTE, ByteBuffer.wrap(local19)); + GlCleaner.onCardTexture += 12288; + } + } +} diff --git a/client/src/main/java/rt4/SpotAnim.java b/client/src/main/java/rt4/SpotAnim.java new file mode 100644 index 0000000..747faa7 --- /dev/null +++ b/client/src/main/java/rt4/SpotAnim.java @@ -0,0 +1,115 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!bh") +public final class SpotAnim extends Entity { + + @OriginalMember(owner = "client!bh", name = "y", descriptor = "Lclient!ga;") + private ParticleSystem aClass47_Sub1_1; + + @OriginalMember(owner = "client!bh", name = "B", descriptor = "I") + private int anInt593 = 0; + + @OriginalMember(owner = "client!bh", name = "O", descriptor = "I") + private final int anInt602 = -1; + + @OriginalMember(owner = "client!bh", name = "P", descriptor = "I") + private int anInt603 = -32768; + + @OriginalMember(owner = "client!bh", name = "T", descriptor = "Z") + public boolean aBoolean41 = false; + + @OriginalMember(owner = "client!bh", name = "U", descriptor = "I") + private int anInt607 = 0; + + @OriginalMember(owner = "client!bh", name = "I", descriptor = "I") + public final int anInt598; + + @OriginalMember(owner = "client!bh", name = "Q", descriptor = "I") + public final int anInt604; + + @OriginalMember(owner = "client!bh", name = "S", descriptor = "I") + public final int anInt606; + + @OriginalMember(owner = "client!bh", name = "w", descriptor = "I") + public final int anInt590; + + @OriginalMember(owner = "client!bh", name = "F", descriptor = "I") + private final int anInt596; + + @OriginalMember(owner = "client!bh", name = "K", descriptor = "I") + public final int anInt599; + + @OriginalMember(owner = "client!bh", name = "J", descriptor = "Lclient!tk;") + private SeqType aClass144_1; + + @OriginalMember(owner = "client!bh", name = "", descriptor = "(IIIIIII)V") + public SpotAnim(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6) { + this.anInt598 = arg3; + this.anInt604 = arg2; + this.anInt606 = arg1; + this.anInt590 = arg6 + arg5; + this.anInt596 = arg0; + this.anInt599 = arg4; + @Pc(42) int local42 = SpotAnimTypeList.get(this.anInt596).seqId; + if (local42 == -1) { + this.aBoolean41 = true; + } else { + this.aBoolean41 = false; + this.aClass144_1 = SeqTypeList.get(local42); + } + } + + @OriginalMember(owner = "client!bh", name = "b", descriptor = "(Z)Lclient!ak;") + private Model method552() { + @Pc(8) SpotAnimType local8 = SpotAnimTypeList.get(this.anInt596); + @Pc(26) Model local26; + if (this.aBoolean41) { + local26 = local8.constructModel(-1, -1, 0); + } else { + local26 = local8.constructModel(this.anInt602, this.anInt593, this.anInt607); + } + return local26; + } + + @OriginalMember(owner = "client!bh", name = "b", descriptor = "()I") + @Override + public final int getMinY() { + return this.anInt603; + } + + @OriginalMember(owner = "client!bh", name = "a", descriptor = "(IIIIIIIIJILclient!ga;)V") + @Override + public final void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) long arg8, @OriginalArg(9) int arg9, @OriginalArg(10) ParticleSystem arg10) { + @Pc(7) Model local7 = this.method552(); + if (local7 != null) { + local7.render(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, this.aClass47_Sub1_1); + this.anInt603 = local7.getMinY(); + } + } + + @OriginalMember(owner = "client!bh", name = "a", descriptor = "(ZI)V") + public final void method558(@OriginalArg(1) int arg0) { + if (this.aBoolean41) { + return; + } + this.anInt607 += arg0; + while (this.anInt607 > this.aClass144_1.frameDelay[this.anInt593]) { + this.anInt607 -= this.aClass144_1.frameDelay[this.anInt593]; + this.anInt593++; + if (this.aClass144_1.frames.length <= this.anInt593) { + this.aBoolean41 = true; + break; + } + } + } + + @OriginalMember(owner = "client!bh", name = "a", descriptor = "(IIIII)V") + @Override + public final void method4545(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + } +} diff --git a/client/src/main/java/rt4/SpotAnimNode.java b/client/src/main/java/rt4/SpotAnimNode.java new file mode 100644 index 0000000..0f7ee88 --- /dev/null +++ b/client/src/main/java/rt4/SpotAnimNode.java @@ -0,0 +1,17 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!bk") +public final class SpotAnimNode extends SecondaryNode { + + @OriginalMember(owner = "client!bk", name = "M", descriptor = "Lclient!bh;") + public final SpotAnim aClass8_Sub2_1; + + @OriginalMember(owner = "client!bk", name = "", descriptor = "(Lclient!bh;)V") + public SpotAnimNode(@OriginalArg(0) SpotAnim arg0) { + this.aClass8_Sub2_1 = arg0; + } +} diff --git a/client/src/main/java/rt4/SpotAnimType.java b/client/src/main/java/rt4/SpotAnimType.java new file mode 100644 index 0000000..7618fc1 --- /dev/null +++ b/client/src/main/java/rt4/SpotAnimType.java @@ -0,0 +1,146 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!eg") +public final class SpotAnimType { + + @OriginalMember(owner = "client!eg", name = "f", descriptor = "[S") + private short[] recol_s; + + @OriginalMember(owner = "client!eg", name = "g", descriptor = "[S") + private short[] retex_s; + + @OriginalMember(owner = "client!eg", name = "h", descriptor = "[S") + private short[] retex_d; + + @OriginalMember(owner = "client!eg", name = "m", descriptor = "I") + public int id; + + @OriginalMember(owner = "client!eg", name = "o", descriptor = "I") + private int modelId; + + @OriginalMember(owner = "client!eg", name = "s", descriptor = "[S") + private short[] recol_d; + + @OriginalMember(owner = "client!eg", name = "i", descriptor = "Z") + public boolean aBoolean100 = false; + + @OriginalMember(owner = "client!eg", name = "j", descriptor = "I") + private int contrast = 0; + + @OriginalMember(owner = "client!eg", name = "k", descriptor = "I") + private int ambient = 0; + + @OriginalMember(owner = "client!eg", name = "p", descriptor = "I") + public int seqId = -1; + + @OriginalMember(owner = "client!eg", name = "n", descriptor = "I") + private int resizeY = 128; + + @OriginalMember(owner = "client!eg", name = "b", descriptor = "I") + private int resizeXZ = 128; + + @OriginalMember(owner = "client!eg", name = "q", descriptor = "I") + private int angle = 0; + + @OriginalMember(owner = "client!eg", name = "a", descriptor = "(Lclient!wa;B)V") + public final void decode(@OriginalArg(0) Buffer buffer) { + while (true) { + @Pc(17) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(buffer, opcode); + } + } + + @OriginalMember(owner = "client!eg", name = "a", descriptor = "(Lclient!wa;II)V") + private void decode(@OriginalArg(0) Buffer buffer, @OriginalArg(1) int opcode) { + if (opcode == 1) { + this.modelId = buffer.g2(); + } else if (opcode == 2) { + this.seqId = buffer.g2(); + } else if (opcode == 4) { + this.resizeXZ = buffer.g2(); + } else if (opcode == 5) { + this.resizeY = buffer.g2(); + } else if (opcode == 6) { + this.angle = buffer.g2(); + } else if (opcode == 7) { + this.ambient = buffer.g1(); + } else if (opcode == 8) { + this.contrast = buffer.g1(); + } else if (opcode == 9) { + this.aBoolean100 = true; + } else { + @Pc(78) int size; + @Pc(88) int count; + if (opcode == 40) { + size = buffer.g1(); + this.recol_s = new short[size]; + this.recol_d = new short[size]; + for (count = 0; count < size; count++) { + this.recol_s[count] = (short) buffer.g2(); + this.recol_d[count] = (short) buffer.g2(); + } + } else if (opcode == 41) { + size = buffer.g1(); + this.retex_s = new short[size]; + this.retex_d = new short[size]; + for (count = 0; count < size; count++) { + this.retex_s[count] = (short) buffer.g2(); + this.retex_d[count] = (short) buffer.g2(); + } + } + } + } + + @OriginalMember(owner = "client!eg", name = "a", descriptor = "(IBII)Lclient!ak;") + public final Model constructModel(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + @Pc(13) Model local13 = (Model) SpotAnimTypeList.models.get(this.id); + if (local13 == null) { + @Pc(28) RawModel local28 = RawModel.create(SpotAnimTypeList.modelsArchive, this.modelId); + if (local28 == null) { + return null; + } + @Pc(40) int local40; + if (this.recol_s != null) { + for (local40 = 0; local40 < this.recol_s.length; local40++) { + local28.recolor(this.recol_s[local40], this.recol_d[local40]); + } + } + if (this.retex_s != null) { + for (local40 = 0; local40 < this.retex_s.length; local40++) { + local28.retexture(this.retex_s[local40], this.retex_d[local40]); + } + } + local13 = local28.createModel(this.ambient + 64, this.contrast + 850, -30, -50, -30); + SpotAnimTypeList.models.put(local13, this.id); + } + @Pc(118) Model local118; + if (this.seqId == -1 || arg1 == -1) { + local118 = local13.method4560(true, true, true); + } else { + local118 = SeqTypeList.get(this.seqId).method4219(arg0, arg2, arg1, local13); + } + if (this.resizeXZ != 128 || this.resizeY != 128) { + local118.resize(this.resizeXZ, this.resizeY, this.resizeXZ); + } + if (this.angle != 0) { + if (this.angle == 90) { + local118.rotateCounterClockwise(); + } + if (this.angle == 180) { + local118.method4552(); + } + if (this.angle == 270) { + local118.method4578(); + } + } + return local118; + } +} diff --git a/client/src/main/java/rt4/SpotAnimTypeList.java b/client/src/main/java/rt4/SpotAnimTypeList.java new file mode 100644 index 0000000..340a4ed --- /dev/null +++ b/client/src/main/java/rt4/SpotAnimTypeList.java @@ -0,0 +1,66 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class SpotAnimTypeList { + @OriginalMember(owner = "client!wk", name = "t", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + @OriginalMember(owner = "client!ef", name = "b", descriptor = "Lclient!n;") + public static final SoftLruHashTable models = new SoftLruHashTable(30); + @OriginalMember(owner = "client!he", name = "cb", descriptor = "Lclient!ve;") + public static Js5 modelsArchive; + @OriginalMember(owner = "client!ke", name = "R", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!vk", name = "a", descriptor = "(Lclient!ve;Lclient!ve;I)V") + public static void init(@OriginalArg(0) Js5 arg0, @OriginalArg(1) Js5 arg1) { + modelsArchive = arg0; + archive = arg1; + } + + @OriginalMember(owner = "client!ck", name = "a", descriptor = "(BI)Lclient!eg;") + public static SpotAnimType get(@OriginalArg(1) int id) { + @Pc(10) SpotAnimType spotAnim = (SpotAnimType) types.get(id); + if (spotAnim != null) { + return spotAnim; + } + @Pc(26) byte[] src = archive.fetchFile(method3681(id), method4010(id)); + spotAnim = new SpotAnimType(); + spotAnim.id = id; + if (src != null) { + spotAnim.decode(new Buffer(src)); + } + types.put(spotAnim, id); + return spotAnim; + } + + @OriginalMember(owner = "client!qk", name = "a", descriptor = "(ZI)I") + public static int method3681(@OriginalArg(1) int arg0) { + return arg0 >>> 8; + } + + @OriginalMember(owner = "client!kf", name = "a", descriptor = "(II)I") + public static int method4010(@OriginalArg(0) int arg0) { + return arg0 & 0xFF; + } + + @OriginalMember(owner = "client!kl", name = "c", descriptor = "(II)V") + public static void clean() { + types.clean(5); + models.clean(5); + } + + @OriginalMember(owner = "client!ub", name = "a", descriptor = "(Z)V") + public static void clear() { + types.clear(); + models.clear(); + } + + @OriginalMember(owner = "client!fk", name = "a", descriptor = "(B)V") + public static void removeSoft() { + types.removeSoft(); + models.removeSoft(); + } +} diff --git a/client/src/main/java/rt4/Sprite.java b/client/src/main/java/rt4/Sprite.java new file mode 100644 index 0000000..a1ea824 --- /dev/null +++ b/client/src/main/java/rt4/Sprite.java @@ -0,0 +1,62 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!qf") +public abstract class Sprite extends SecondaryNode { + + @OriginalMember(owner = "client!qf", name = "I", descriptor = "I") + public int height; + + @OriginalMember(owner = "client!qf", name = "J", descriptor = "I") + public int anInt1860; + + @OriginalMember(owner = "client!qf", name = "K", descriptor = "I") + protected int anInt1861; + + @OriginalMember(owner = "client!qf", name = "P", descriptor = "I") + protected int anInt1863; + + @OriginalMember(owner = "client!qf", name = "V", descriptor = "I") + public int anInt1866; + + @OriginalMember(owner = "client!qf", name = "W", descriptor = "I") + public int width; + + @OriginalMember(owner = "client!qf", name = "", descriptor = "()V") + protected Sprite() { + } + + @OriginalMember(owner = "client!qf", name = "c", descriptor = "(II)V") + public abstract void drawPixels(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1); + + @OriginalMember(owner = "client!qf", name = "a", descriptor = "(IIIIII)V") + protected abstract void method1416(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5); + + @OriginalMember(owner = "client!qf", name = "a", descriptor = "(III)V") + public abstract void renderAlpha(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2); + + @OriginalMember(owner = "client!qf", name = "a", descriptor = "(IIII)V") + public abstract void renderResized(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3); + + @OriginalMember(owner = "client!qf", name = "a", descriptor = "(IIIII)V") + public final void renderAngled(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(8) int local8 = this.anInt1860 << 3; + @Pc(17) int local17 = this.anInt1866 << 3; + @Pc(25) int local25 = (arg3 << 4) + (local8 & 0xF); + @Pc(33) int local33 = (arg0 << 4) + (local17 & 0xF); + this.method1416(local8, local17, local25, local33, arg1, arg2); + } + + @OriginalMember(owner = "client!qf", name = "d", descriptor = "(II)V") + public abstract void renderHorizontalFlip(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1); + + @OriginalMember(owner = "client!qf", name = "b", descriptor = "(IIIII)V") + public abstract void renderAlpha(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4); + + @OriginalMember(owner = "client!qf", name = "e", descriptor = "(II)V") + public abstract void render(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1); +} diff --git a/client/src/main/java/rt4/SpriteLoader.java b/client/src/main/java/rt4/SpriteLoader.java new file mode 100644 index 0000000..6bc4676 --- /dev/null +++ b/client/src/main/java/rt4/SpriteLoader.java @@ -0,0 +1,355 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class SpriteLoader { + @OriginalMember(owner = "client!uj", name = "x", descriptor = "[I") + public static int[] innerWidths; + @OriginalMember(owner = "client!wa", name = "z", descriptor = "[I") + public static int[] yOffsets; + @OriginalMember(owner = "client!ca", name = "Y", descriptor = "[I") + public static int[] innerHeights; + @OriginalMember(owner = "client!ah", name = "l", descriptor = "[[B") + public static byte[][] pixels; + @OriginalMember(owner = "client!wf", name = "b", descriptor = "[I") + public static int[] xOffsets; + @OriginalMember(owner = "client!vc", name = "R", descriptor = "[I") + public static int[] palette; + @OriginalMember(owner = "client!nb", name = "h", descriptor = "I") + public static int frames; + @OriginalMember(owner = "client!fb", name = "n", descriptor = "[[B") + public static byte[][] alpha; + @OriginalMember(owner = "client!mi", name = "W", descriptor = "[Z") + public static boolean[] hasAlpha; + @OriginalMember(owner = "client!jk", name = "x", descriptor = "I") + public static int width; + @OriginalMember(owner = "client!sg", name = "h", descriptor = "I") + public static int height; + + @OriginalMember(owner = "client!cg", name = "a", descriptor = "(ZILclient!ve;I)[Lclient!ek;") + static SoftwareIndexedSprite[] loadSoftwareIndexedSprites(@OriginalArg(1) int arg0, @OriginalArg(2) Js5 arg1) { + return decode(arg1, 0, arg0) ? createSoftwareIndexedSprites() : null; + } + + @OriginalMember(owner = "client!ta", name = "a", descriptor = "(Lclient!ve;III)Z") + public static boolean decode(@OriginalArg(0) Js5 arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(9) byte[] local9 = arg0.fetchFile(arg2, arg1); + if (local9 == null) { + return false; + } else { + decode(local9); + return true; + } + } + + @OriginalMember(owner = "client!jg", name = "a", descriptor = "(I)[Lclient!ek;") + public static SoftwareIndexedSprite[] createSoftwareIndexedSprites() { + @Pc(2) SoftwareIndexedSprite[] sprites = new SoftwareIndexedSprite[frames]; + for (@Pc(8) int local8 = 0; local8 < frames; local8++) { + sprites[local8] = new SoftwareIndexedSprite(width, height, xOffsets[local8], yOffsets[local8], innerWidths[local8], innerHeights[local8], pixels[local8], palette); + } + clear(); + return sprites; + } + + @OriginalMember(owner = "client!gk", name = "a", descriptor = "([BI)V") + public static void decode(@OriginalArg(0) byte[] arg0) { + @Pc(4) Buffer buffer = new Buffer(arg0); + buffer.offset = arg0.length - 2; + frames = buffer.g2(); + innerHeights = new int[frames]; + innerWidths = new int[frames]; + xOffsets = new int[frames]; + hasAlpha = new boolean[frames]; + alpha = new byte[frames][]; + yOffsets = new int[frames]; + pixels = new byte[frames][]; + buffer.offset = arg0.length - frames * 8 - 7; + width = buffer.g2(); + height = buffer.g2(); + @Pc(66) int paletteSize = (buffer.g1() & 0xFF) + 1; + @Pc(68) int i; + for (i = 0; i < frames; i++) { + xOffsets[i] = buffer.g2(); + } + for (i = 0; i < frames; i++) { + yOffsets[i] = buffer.g2(); + } + for (i = 0; i < frames; i++) { + innerWidths[i] = buffer.g2(); + } + for (i = 0; i < frames; i++) { + innerHeights[i] = buffer.g2(); + } + buffer.offset = arg0.length + 3 - frames * 8 - paletteSize * 3 - 7; + palette = new int[paletteSize]; + for (i = 1; i < paletteSize; i++) { + palette[i] = buffer.g3(); + if (palette[i] == 0) { + palette[i] = 1; + } + } + buffer.offset = 0; + for (i = 0; i < frames; i++) { + @Pc(195) int local195 = innerWidths[i]; + @Pc(199) int local199 = innerHeights[i]; + @Pc(203) int local203 = local195 * local199; + @Pc(206) byte[] local206 = new byte[local203]; + @Pc(208) boolean local208 = false; + pixels[i] = local206; + @Pc(215) byte[] local215 = new byte[local203]; + alpha[i] = local215; + @Pc(223) int local223 = buffer.g1(); + @Pc(232) int local232; + if ((local223 & 0x1) == 0) { + for (local232 = 0; local232 < local203; local232++) { + local206[local232] = buffer.g1b(); + } + if ((local223 & 0x2) != 0) { + for (local232 = 0; local232 < local203; local232++) { + @Pc(343) byte local343 = local215[local232] = buffer.g1b(); + local208 |= local343 != -1; + } + } + } else { + local232 = 0; + label88: + while (true) { + @Pc(241) int local241; + if (local232 >= local195) { + if ((local223 & 0x2) == 0) { + break; + } + local232 = 0; + while (true) { + if (local232 >= local195) { + break label88; + } + for (local241 = 0; local241 < local199; local241++) { + @Pc(291) byte local291 = local215[local195 * local241 + local232] = buffer.g1b(); + local208 |= local291 != -1; + } + local232++; + } + } + for (local241 = 0; local241 < local199; local241++) { + local206[local232 + local241 * local195] = buffer.g1b(); + } + local232++; + } + } + hasAlpha[i] = local208; + } + } + + @OriginalMember(owner = "client!g", name = "a", descriptor = "(B)V") + public static void clear() { + innerWidths = null; + yOffsets = null; + innerHeights = null; + pixels = null; + xOffsets = null; + palette = null; + } + + @OriginalMember(owner = "client!ra", name = "a", descriptor = "(IBILclient!ve;)[Lclient!qf;") + public static Sprite[] loadAlphaSprites(@OriginalArg(2) int arg0, @OriginalArg(3) Js5 arg1) { + return decode(arg1, 0, arg0) ? method3730() : null; + } + + @OriginalMember(owner = "client!vj", name = "a", descriptor = "(IIILclient!ve;)[Lclient!mm;") + public static SoftwareSprite[] loadSoftwareSprites(@OriginalArg(2) int arg0, @OriginalArg(3) Js5 arg1) { + return decode(arg1, 0, arg0) ? method474() : null; + } + + @OriginalMember(owner = "client!gd", name = "a", descriptor = "(ILclient!ve;II)Lclient!mm;") + public static SoftwareSprite loadSoftwareSprite(@OriginalArg(0) int arg0, @OriginalArg(1) Js5 arg1, @OriginalArg(3) int arg2) { + return decode(arg1, arg0, arg2) ? method3537() : null; + } + + @OriginalMember(owner = "client!lg", name = "a", descriptor = "(Lclient!ve;BII)[Lclient!ok;") + public static IndexedSprite[] loadIndexedSprites(@OriginalArg(0) Js5 arg0, @OriginalArg(3) int arg1) { + return decode(arg0, 0, arg1) ? method4331() : null; + } + + @OriginalMember(owner = "client!kd", name = "a", descriptor = "(IIILclient!ve;)[Lclient!qf;") + public static Sprite[] method2580(@OriginalArg(2) int arg0, @OriginalArg(3) Js5 arg1) { + return decode(arg1, 0, arg0) ? method870() : null; + } + + @OriginalMember(owner = "client!lk", name = "a", descriptor = "(IIBLclient!ve;)Lclient!qf;") + public static Sprite loadSprites(@OriginalArg(1) int arg0, @OriginalArg(3) Js5 arg1) { + return decode(arg1, 0, arg0) ? method1764() : null; + } + + @OriginalMember(owner = "client!re", name = "b", descriptor = "(I)[Lclient!qf;") + public static Sprite[] method3730() { + @Pc(14) Sprite[] local14 = new Sprite[frames]; + for (@Pc(16) int local16 = 0; local16 < frames; local16++) { + @Pc(23) byte[] local23 = pixels[local16]; + @Pc(31) int local31 = innerHeights[local16] * innerWidths[local16]; + if (hasAlpha[local16]) { + @Pc(38) int[] local38 = new int[local31]; + @Pc(42) byte[] local42 = alpha[local16]; + for (@Pc(44) int local44 = 0; local44 < local31; local44++) { + local38[local44] = palette[local23[local44] & 0xFF] | (local42[local44] & 0xFF) << 24; + } + if (GlRenderer.enabled) { + local14[local16] = new GlAlphaSprite(width, height, xOffsets[local16], yOffsets[local16], innerWidths[local16], innerHeights[local16], local38); + } else { + local14[local16] = new SoftwareAlphaSprite(width, height, xOffsets[local16], yOffsets[local16], innerWidths[local16], innerHeights[local16], local38); + } + } else { + @Pc(119) int[] local119 = new int[local31]; + for (@Pc(121) int local121 = 0; local121 < local31; local121++) { + local119[local121] = palette[local23[local121] & 0xFF]; + } + if (GlRenderer.enabled) { + local14[local16] = new GlSprite(width, height, xOffsets[local16], yOffsets[local16], innerWidths[local16], innerHeights[local16], local119); + } else { + local14[local16] = new SoftwareSprite(width, height, xOffsets[local16], yOffsets[local16], innerWidths[local16], innerHeights[local16], local119); + } + } + } + clear(); + return local14; + } + + @OriginalMember(owner = "client!bd", name = "a", descriptor = "(Z)[Lclient!mm;") + public static SoftwareSprite[] method474() { + @Pc(4) SoftwareSprite[] local4 = new SoftwareSprite[frames]; + for (@Pc(12) int local12 = 0; local12 < frames; local12++) { + @Pc(27) int local27 = innerHeights[local12] * innerWidths[local12]; + @Pc(31) byte[] local31 = pixels[local12]; + @Pc(34) int[] local34 = new int[local27]; + for (@Pc(36) int local36 = 0; local36 < local27; local36++) { + local34[local36] = palette[local31[local36] & 0xFF]; + } + local4[local12] = new SoftwareSprite(width, height, xOffsets[local12], yOffsets[local12], innerWidths[local12], innerHeights[local12], local34); + } + clear(); + return local4; + } + + @OriginalMember(owner = "client!pl", name = "a", descriptor = "(I)Lclient!mm;") + public static SoftwareSprite method3537() { + @Pc(13) int local13 = innerWidths[0] * innerHeights[0]; + @Pc(17) byte[] local17 = pixels[0]; + @Pc(20) int[] local20 = new int[local13]; + for (@Pc(22) int local22 = 0; local22 < local13; local22++) { + local20[local22] = palette[local17[local22] & 0xFF]; + } + @Pc(57) SoftwareSprite local57 = new SoftwareSprite(width, height, xOffsets[0], yOffsets[0], innerWidths[0], innerHeights[0], local20); + clear(); + return local57; + } + + @OriginalMember(owner = "client!ui", name = "h", descriptor = "(I)[Lclient!ok;") + public static IndexedSprite[] method4331() { + @Pc(8) IndexedSprite[] local8 = new IndexedSprite[frames]; + for (@Pc(10) int local10 = 0; local10 < frames; local10++) { + if (GlRenderer.enabled) { + local8[local10] = new GlIndexedSprite(width, height, xOffsets[local10], yOffsets[local10], innerWidths[local10], innerHeights[local10], pixels[local10], palette); + } else { + local8[local10] = new SoftwareIndexedSprite(width, height, xOffsets[local10], yOffsets[local10], innerWidths[local10], innerHeights[local10], pixels[local10], palette); + } + } + clear(); + return local8; + } + + @OriginalMember(owner = "client!cj", name = "a", descriptor = "(I)[Lclient!qf;") + public static Sprite[] method870() { + @Pc(6) Sprite[] local6 = new Sprite[frames]; + for (@Pc(15) int local15 = 0; local15 < frames; local15++) { + @Pc(30) int local30 = innerWidths[local15] * innerHeights[local15]; + @Pc(34) byte[] local34 = pixels[local15]; + @Pc(37) int[] local37 = new int[local30]; + for (@Pc(39) int local39 = 0; local39 < local30; local39++) { + local37[local39] = palette[local34[local39] & 0xFF]; + } + if (GlRenderer.enabled) { + local6[local15] = new GlSprite(width, height, xOffsets[local15], yOffsets[local15], innerWidths[local15], innerHeights[local15], local37); + } else { + local6[local15] = new SoftwareSprite(width, height, xOffsets[local15], yOffsets[local15], innerWidths[local15], innerHeights[local15], local37); + } + } + clear(); + return local6; + } + + @OriginalMember(owner = "client!gi", name = "b", descriptor = "(I)Lclient!qf;") + public static Sprite method1764() { + @Pc(9) byte[] local9 = pixels[0]; + @Pc(17) int local17 = innerWidths[0] * innerHeights[0]; + @Pc(20) int[] local20 = new int[local17]; + for (@Pc(28) int local28 = 0; local28 < local17; local28++) { + local20[local28] = palette[local9[local28] & 0xFF]; + } + @Pc(69) Sprite local69; + if (GlRenderer.enabled) { + local69 = new GlSprite(width, height, xOffsets[0], yOffsets[0], innerWidths[0], innerHeights[0], local20); + } else { + local69 = new SoftwareSprite(width, height, xOffsets[0], yOffsets[0], innerWidths[0], innerHeights[0], local20); + } + clear(); + return local69; + } + + @OriginalMember(owner = "client!uj", name = "a", descriptor = "(BLclient!ve;I)Z") + public static boolean decode(@OriginalArg(1) Js5 arg0, @OriginalArg(2) int arg1) { + @Pc(13) byte[] local13 = arg0.fetchFile(arg1); + if (local13 == null) { + return false; + } else { + decode(local13); + return true; + } + } + + @OriginalMember(owner = "client!ml", name = "a", descriptor = "(BILclient!ve;)[Lclient!ek;") + public static SoftwareIndexedSprite[] loadSoftwareIndexedSpritesAutoDetect(@OriginalArg(1) int arg0, @OriginalArg(2) Js5 arg1) { + return decode(arg1, arg0) ? createSoftwareIndexedSprites() : null; + } + + @OriginalMember(owner = "client!da", name = "a", descriptor = "(ILclient!ve;Z)Lclient!ok;") + public static IndexedSprite loadIndexedSpriteAutoDetect(@OriginalArg(0) int arg0, @OriginalArg(1) Js5 arg1) { + return decode(arg1, arg0) ? method4614() : null; + } + + @OriginalMember(owner = "client!kc", name = "a", descriptor = "(ILclient!ve;I)Lclient!qf;") + public static Sprite loadSpriteAutoDetect(@OriginalArg(1) Js5 arg0, @OriginalArg(2) int arg1) { + return decode(arg0, arg1) ? method1764() : null; + } + + @OriginalMember(owner = "client!wh", name = "b", descriptor = "(B)Lclient!ok;") + public static IndexedSprite method4614() { + @Pc(27) IndexedSprite local27; + if (GlRenderer.enabled) { + local27 = new GlIndexedSprite(width, height, xOffsets[0], yOffsets[0], innerWidths[0], innerHeights[0], pixels[0], palette); + } else { + local27 = new SoftwareIndexedSprite(width, height, xOffsets[0], yOffsets[0], innerWidths[0], innerHeights[0], pixels[0], palette); + } + clear(); + return local27; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(IZILclient!ve;)Lclient!ek;") + public static SoftwareIndexedSprite loadSoftwareIndexedSprite(@OriginalArg(2) int arg0, @OriginalArg(3) Js5 arg1) { + return decode(arg1, 0, arg0) ? method2619() : null; + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(Lclient!ve;IZ)Lclient!mm;") + public static SoftwareSprite loadSoftwareSpriteAutoDetect(@OriginalArg(0) Js5 arg0, @OriginalArg(1) int arg1) { + return decode(arg0, arg1) ? method3537() : null; + } + + @OriginalMember(owner = "client!kh", name = "a", descriptor = "(B)Lclient!ek;") + public static SoftwareIndexedSprite method2619() { + @Pc(25) SoftwareIndexedSprite local25 = new SoftwareIndexedSprite(width, height, xOffsets[0], yOffsets[0], innerWidths[0], innerHeights[0], pixels[0], palette); + clear(); + return local25; + } +} diff --git a/client/src/main/java/rt4/Sprites.java b/client/src/main/java/rt4/Sprites.java new file mode 100644 index 0000000..04749b2 --- /dev/null +++ b/client/src/main/java/rt4/Sprites.java @@ -0,0 +1,309 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class Sprites { + @OriginalMember(owner = "client!bh", name = "s", descriptor = "Lclient!na;") + public static final JagString P11_FULL = JagString.parse("p11_full"); + + @OriginalMember(owner = "client!ee", name = "e", descriptor = "Lclient!na;") + public static final JagString P12_FULL = JagString.parse("p12_full"); + + @OriginalMember(owner = "client!fm", name = "eb", descriptor = "Lclient!na;") + public static final JagString B12_FULL = JagString.parse("b12_full"); + + @OriginalMember(owner = "client!bg", name = "N", descriptor = "Lclient!na;") + public static final JagString MAPFUNCTION = JagString.parse("mapfunction"); + + @OriginalMember(owner = "client!rl", name = "S", descriptor = "Lclient!na;") + public static final JagString HITMARKS = JagString.parse("hitmarks"); + + @OriginalMember(owner = "client!vd", name = "v", descriptor = "Lclient!na;") + public static final JagString HITBAR_DEFAULT = JagString.parse("hitbar_default"); + + @OriginalMember(owner = "client!jj", name = "d", descriptor = "Lclient!na;") + public static final JagString HEADICONS_PK = JagString.parse("headicons_pk"); + + @OriginalMember(owner = "client!sh", name = "j", descriptor = "Lclient!na;") + public static final JagString HEADICONS_PRAYER = JagString.parse("headicons_prayer"); + + @OriginalMember(owner = "client!hj", name = "d", descriptor = "Lclient!na;") + public static final JagString HINT_HEADICONS = JagString.parse("hint_headicons"); + + @OriginalMember(owner = "client!pe", name = "n", descriptor = "Lclient!na;") + public static final JagString HINT_MAPMARKERS = JagString.parse("hint_mapmarkers"); + + @OriginalMember(owner = "client!vc", name = "ab", descriptor = "Lclient!na;") + public static final JagString MAPFLAG = JagString.parse("mapflag"); + + @OriginalMember(owner = "client!gm", name = "db", descriptor = "Lclient!na;") + public static final JagString CROSS = JagString.parse("cross"); + + @OriginalMember(owner = "client!pe", name = "z", descriptor = "Lclient!na;") + public static final JagString MAPDOTS = JagString.parse("mapdots"); + + @OriginalMember(owner = "client!uf", name = "o", descriptor = "Lclient!na;") + public static final JagString SCROLLBAR = JagString.parse("scrollbar"); + + @OriginalMember(owner = "client!cb", name = "eb", descriptor = "Lclient!na;") + public static final JagString NAME_ICONS = JagString.parse("name_icons"); + + @OriginalMember(owner = "client!bh", name = "v", descriptor = "Lclient!na;") + public static final JagString FLOORSHADOWS = JagString.parse("floorshadows"); + + @OriginalMember(owner = "client!wl", name = "d", descriptor = "Lclient!na;") + public static final JagString COMPASS = JagString.parse("compass"); + + @OriginalMember(owner = "client!af", name = "g", descriptor = "Lclient!na;") + public static final JagString HINT_MAPEDGE = JagString.parse("hint_mapedge"); + + @OriginalMember(owner = "client!nc", name = "h", descriptor = "I") + public static int p11FullId; + + @OriginalMember(owner = "client!kc", name = "t", descriptor = "I") + public static int p12FullId; + + @OriginalMember(owner = "client!fm", name = "V", descriptor = "I") + public static int b12FullId; + + @OriginalMember(owner = "client!wl", name = "A", descriptor = "I") + public static int mapfunctionId; + + @OriginalMember(owner = "client!kd", name = "Cb", descriptor = "I") + public static int hitmarksId; + + @OriginalMember(owner = "client!client", name = "W", descriptor = "I") + public static int hitbarId; + + @OriginalMember(owner = "client!rg", name = "C", descriptor = "I") + public static int headiconsPkId; + + @OriginalMember(owner = "client!ck", name = "F", descriptor = "I") + public static int headiconsPrayerId; + + @OriginalMember(owner = "client!qg", name = "R", descriptor = "I") + public static int hintHeadId; + + @OriginalMember(owner = "client!lj", name = "s", descriptor = "I") + public static int hintMapMarkId; + + @OriginalMember(owner = "client!bi", name = "fb", descriptor = "I") + public static int mapflagId; + + @OriginalMember(owner = "client!ci", name = "t", descriptor = "I") + public static int crossId; + + @OriginalMember(owner = "client!gd", name = "l", descriptor = "I") + public static int mapdotsId; + + @OriginalMember(owner = "client!jk", name = "J", descriptor = "I") + public static int scrollbarId; + + @OriginalMember(owner = "client!sd", name = "I", descriptor = "I") + public static int nameIconsId; + + @OriginalMember(owner = "client!gk", name = "j", descriptor = "I") + public static int floorShadowsId; + + @OriginalMember(owner = "client!n", name = "b", descriptor = "I") + public static int compassId; + + @OriginalMember(owner = "client!ka", name = "u", descriptor = "I") + public static int hintMapEdgeId; + @OriginalMember(owner = "client!tj", name = "d", descriptor = "[Lclient!ek;") + public static SoftwareIndexedSprite[] floorShadows; + @OriginalMember(owner = "client!nk", name = "L", descriptor = "[Lclient!mm;") + public static SoftwareSprite[] mapfunctions; + @OriginalMember(owner = "client!re", name = "w", descriptor = "[Lclient!qf;") + public static Sprite[] hitmarks; + @OriginalMember(owner = "client!jb", name = "k", descriptor = "[Lclient!qf;") + public static Sprite[] hitbars; + @OriginalMember(owner = "client!rl", name = "V", descriptor = "[Lclient!qf;") + public static Sprite[] headiconPks; + @OriginalMember(owner = "client!km", name = "sc", descriptor = "[Lclient!qf;") + public static Sprite[] headiconPrayers; + @OriginalMember(owner = "client!wh", name = "l", descriptor = "[Lclient!qf;") + public static Sprite[] headhints; + @OriginalMember(owner = "client!lj", name = "t", descriptor = "[Lclient!qf;") + public static Sprite[] mapmarkhints; + @OriginalMember(owner = "client!tg", name = "d", descriptor = "[Lclient!qf;") + public static Sprite[] crosses; + @OriginalMember(owner = "client!gk", name = "l", descriptor = "Lclient!qf;") + public static Sprite mapflags; + @OriginalMember(owner = "client!l", name = "j", descriptor = "[Lclient!qf;") + public static Sprite[] mapdots; + @OriginalMember(owner = "client!mi", name = "T", descriptor = "[Lclient!ok;") + public static IndexedSprite[] nameIcons; + @OriginalMember(owner = "client!th", name = "f", descriptor = "[Lclient!ok;") + public static IndexedSprite[] scrollbars; + @OriginalMember(owner = "client!ic", name = "a", descriptor = "Lclient!qf;") + public static Sprite compass; + @OriginalMember(owner = "client!wi", name = "R", descriptor = "[Lclient!qf;") + public static Sprite[] hintMapEdge; + @OriginalMember(owner = "client!fe", name = "lc", descriptor = "[Lclient!qf;") + public static Sprite[] mapfuncs; + + @OriginalMember(owner = "client!g", name = "a", descriptor = "(ILclient!ve;)V") + public static void init(@OriginalArg(1) Js5 archive) { + p11FullId = archive.getGroupId(P11_FULL); + p12FullId = archive.getGroupId(P12_FULL); + b12FullId = archive.getGroupId(B12_FULL); + mapfunctionId = archive.getGroupId(MAPFUNCTION); + hitmarksId = archive.getGroupId(HITMARKS); + hitbarId = archive.getGroupId(HITBAR_DEFAULT); + headiconsPkId = archive.getGroupId(HEADICONS_PK); + headiconsPrayerId = archive.getGroupId(HEADICONS_PRAYER); + hintHeadId = archive.getGroupId(HINT_HEADICONS); + hintMapMarkId = archive.getGroupId(HINT_MAPMARKERS); + mapflagId = archive.getGroupId(MAPFLAG); + crossId = archive.getGroupId(CROSS); + mapdotsId = archive.getGroupId(MAPDOTS); + scrollbarId = archive.getGroupId(SCROLLBAR); + nameIconsId = archive.getGroupId(NAME_ICONS); + floorShadowsId = archive.getGroupId(FLOORSHADOWS); + compassId = archive.getGroupId(COMPASS); + hintMapEdgeId = archive.getGroupId(HINT_MAPEDGE); + } + + @OriginalMember(owner = "client!cd", name = "a", descriptor = "(Lclient!ve;B)I") + public static int getReady(@OriginalArg(0) Js5 archive) { + @Pc(5) int ready = 0; + if (archive.isFileReady(mapfunctionId)) { + ready++; + } + if (archive.isFileReady(hitmarksId)) { + ready++; + } + if (archive.isFileReady(hitbarId)) { + ready++; + } + if (archive.isFileReady(headiconsPkId)) { + ready++; + } + if (archive.isFileReady(headiconsPrayerId)) { + ready++; + } + if (archive.isFileReady(hintHeadId)) { + ready++; + } + if (archive.isFileReady(hintMapMarkId)) { + ready++; + } + if (archive.isFileReady(mapflagId)) { + ready++; + } + if (archive.isFileReady(crossId)) { + ready++; + } + if (archive.isFileReady(mapdotsId)) { + ready++; + } + if (archive.isFileReady(scrollbarId)) { + ready++; + } + if (archive.isFileReady(nameIconsId)) { + ready++; + } + if (archive.isFileReady(floorShadowsId)) { + ready++; + } + if (archive.isFileReady(compassId)) { + ready++; + } + if (archive.isFileReady(hintMapEdgeId)) { + ready++; + } + return ready; + } + + @OriginalMember(owner = "client!cg", name = "a", descriptor = "(ILclient!ve;)V") + public static void load(@OriginalArg(1) Js5 archive) { + mapfunctions = SpriteLoader.loadSoftwareSprites(mapfunctionId, archive); + hitmarks = SpriteLoader.loadAlphaSprites(hitmarksId, archive); + hitbars = SpriteLoader.loadAlphaSprites(hitbarId, archive); + headiconPks = SpriteLoader.loadAlphaSprites(headiconsPkId, archive); + headiconPrayers = SpriteLoader.loadAlphaSprites(headiconsPrayerId, archive); + headhints = SpriteLoader.loadAlphaSprites(hintHeadId, archive); + mapmarkhints = SpriteLoader.loadAlphaSprites(hintMapMarkId, archive); + mapflags = SpriteLoader.loadSprites(mapflagId, archive); + crosses = SpriteLoader.method2580(crossId, archive); + mapdots = SpriteLoader.method2580(mapdotsId, archive); + scrollbars = SpriteLoader.loadIndexedSprites(archive, scrollbarId); + nameIcons = SpriteLoader.loadIndexedSprites(archive, nameIconsId); + Fonts.p11Full.setNameIcons(nameIcons, null); + Fonts.p12Full.setNameIcons(nameIcons, null); + Fonts.b12Full.setNameIcons(nameIcons, null); + if (GlRenderer.enabled) { + floorShadows = SpriteLoader.loadSoftwareIndexedSprites(floorShadowsId, archive); + for (@Pc(101) int local101 = 0; local101 < floorShadows.length; local101++) { + floorShadows[local101].trim(); + } + } + @Pc(124) SoftwareSprite newCompass = SpriteLoader.loadSoftwareSprite(0, archive, compassId); + newCompass.trim(); + if (GlRenderer.enabled) { + compass = new GlSprite(newCompass); + } else { + compass = newCompass; + } + @Pc(143) SoftwareSprite[] local143 = SpriteLoader.loadSoftwareSprites(hintMapEdgeId, archive); + @Pc(145) int local145; + for (local145 = 0; local145 < local143.length; local145++) { + local143[local145].trim(); + } + if (GlRenderer.enabled) { + hintMapEdge = new Sprite[local143.length]; + for (local145 = 0; local145 < local143.length; local145++) { + hintMapEdge[local145] = new GlSprite(local143[local145]); + } + } else { + hintMapEdge = local143; + } + @Pc(196) int local196 = (int) ((double) 21 * Math.random()) - 10; + local145 = (int) (Math.random() * 21.0D) - 10; + @Pc(210) int local210 = (int) (Math.random() * 21.0D) - 10; + @Pc(217) int local217 = (int) (Math.random() * 41.0D) - 20; + @Pc(219) int local219; + for (local219 = 0; local219 < mapfunctions.length; local219++) { + mapfunctions[local219].method315(local145 + local217, local217 + local196, local217 + local210); + } + if (GlRenderer.enabled) { + mapfuncs = new Sprite[mapfunctions.length]; + for (local219 = 0; local219 < mapfunctions.length; local219++) { + mapfuncs[local219] = new GlSprite(mapfunctions[local219]); + } + } else { + mapfuncs = mapfunctions; + } + } + + @OriginalMember(owner = "client!f", name = "h", descriptor = "(I)I") + public static int total() { + return 15; + } + + @OriginalMember(owner = "client!ja", name = "a", descriptor = "(Z)V") + public static void clear() { + Fonts.p12Full = null; + hitmarks = null; + crosses = null; + nameIcons = null; + Fonts.p11FullSoftware = null; + mapfunctions = null; + mapfuncs = null; + mapmarkhints = null; + headiconPrayers = null; + Fonts.b12Full = null; + compass = null; + mapdots = null; + Fonts.p11Full = null; + mapflags = null; + hitbars = null; + hintMapEdge = null; + headhints = null; + headiconPks = null; + scrollbars = null; + } +} diff --git a/client/src/main/java/rt4/StockMarketManager.java b/client/src/main/java/rt4/StockMarketManager.java new file mode 100644 index 0000000..02019cb --- /dev/null +++ b/client/src/main/java/rt4/StockMarketManager.java @@ -0,0 +1,10 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalMember; + +public class StockMarketManager { + @OriginalMember(owner = "client!si", name = "X", descriptor = "[Lclient!sg;") + public static final StockMarketOffer[] offers = new StockMarketOffer[6]; + @OriginalMember(owner = "client!ql", name = "d", descriptor = "I") + public static int transmitAt = 0; +} diff --git a/client/src/main/java/rt4/StockMarketOffer.java b/client/src/main/java/rt4/StockMarketOffer.java new file mode 100644 index 0000000..a4a4077 --- /dev/null +++ b/client/src/main/java/rt4/StockMarketOffer.java @@ -0,0 +1,51 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!sg") +public final class StockMarketOffer { + + @OriginalMember(owner = "client!sg", name = "a", descriptor = "B") + private byte statusAndType; + + @OriginalMember(owner = "client!sg", name = "f", descriptor = "I") + public int completedCount; + + @OriginalMember(owner = "client!sg", name = "g", descriptor = "I") + public int count; + + @OriginalMember(owner = "client!sg", name = "j", descriptor = "I") + public int completedGold; + + @OriginalMember(owner = "client!sg", name = "m", descriptor = "I") + public int item; + + @OriginalMember(owner = "client!sg", name = "s", descriptor = "I") + public int price; + + @OriginalMember(owner = "client!sg", name = "", descriptor = "()V") + public StockMarketOffer() { + } + + @OriginalMember(owner = "client!sg", name = "", descriptor = "(Lclient!wa;)V") + public StockMarketOffer(@OriginalArg(0) Buffer arg0) { + this.statusAndType = arg0.g1b(); + this.item = arg0.g2(); + this.price = arg0.g4(); + this.count = arg0.g4(); + this.completedCount = arg0.g4(); + this.completedGold = arg0.g4(); + } + + @OriginalMember(owner = "client!sg", name = "a", descriptor = "(Z)I") + public final int getStatus() { + return this.statusAndType & 0x7; + } + + @OriginalMember(owner = "client!sg", name = "b", descriptor = "(B)I") + public final int getType() { + return (this.statusAndType & 0x8) == 8 ? 1 : 0; + } +} diff --git a/client/src/main/java/rt4/StringInterface.java b/client/src/main/java/rt4/StringInterface.java new file mode 100644 index 0000000..f19c10d --- /dev/null +++ b/client/src/main/java/rt4/StringInterface.java @@ -0,0 +1,7 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; + +@OriginalClass("client!oa") +public interface StringInterface { +} diff --git a/client/src/main/java/rt4/StringNode.java b/client/src/main/java/rt4/StringNode.java new file mode 100644 index 0000000..9f2b079 --- /dev/null +++ b/client/src/main/java/rt4/StringNode.java @@ -0,0 +1,21 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!sj") +public final class StringNode extends Node { + + @OriginalMember(owner = "client!sj", name = "A", descriptor = "Lclient!na;") + public JagString value; + + @OriginalMember(owner = "client!sj", name = "", descriptor = "()V") + public StringNode() { + } + + @OriginalMember(owner = "client!sj", name = "", descriptor = "(Lclient!na;)V") + public StringNode(@OriginalArg(0) JagString arg0) { + this.value = arg0; + } +} diff --git a/client/src/main/java/rt4/StringUtils.java b/client/src/main/java/rt4/StringUtils.java new file mode 100644 index 0000000..f01a4e0 --- /dev/null +++ b/client/src/main/java/rt4/StringUtils.java @@ -0,0 +1,74 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class StringUtils { + @OriginalMember(owner = "client!ag", name = "ab", descriptor = "Lclient!na;") + public static final JagString aClass100_17 = JagString.parse("0"); + @OriginalMember(owner = "client!ca", name = "cb", descriptor = "Lclient!na;") + public static final JagString nonBreakingSpace = JagString.getNbsp(); + @OriginalMember(owner = "client!rm", name = "i", descriptor = "Lclient!na;") + public static final JagString ASTERISK = JagString.parse("(Z"); + @OriginalMember(owner = "client!fm", name = "W", descriptor = "Lclient!na;") + public static final JagString aClass100_453 = JagString.parse(")2"); + @OriginalMember(owner = "client!cg", name = "h", descriptor = "Lclient!na;") + public static final JagString aClass100_185 = JagString.parse(")3"); + @OriginalMember(owner = "client!tl", name = "i", descriptor = "Lclient!na;") + public static final JagString aClass100_1017 = JagString.parse(")1"); + + @OriginalMember(owner = "client!vf", name = "a", descriptor = "(IB)Lclient!na;") + public static JagString toString(@OriginalArg(0) int arg0) { + return arg0 >= 999999999 ? ASTERISK : JagString.parseInt(arg0); + } + + @OriginalMember(owner = "client!oj", name = "a", descriptor = "(IZIJI)Lclient!na;") + public static JagString formatNumber(@OriginalArg(0) int arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) int arg2, @OriginalArg(3) long arg3) { + @Pc(9) JagString local9 = JagString.allocate(0); + if (arg3 < 0L) { + arg3 = -arg3; + local9.method3113(aClass100_453); + } + @Pc(26) JagString local26 = aClass100_1017; + @Pc(28) JagString local28 = aClass100_185; + if (arg0 == 1) { + local26 = aClass100_185; + local28 = aClass100_1017; + } + if (arg0 == 2) { + local28 = aClass100_1017; + local26 = nonBreakingSpace; + } + if (arg0 == 3) { + local26 = aClass100_185; + local28 = aClass100_1017; + } + @Pc(59) JagString local59 = JagString.allocate(0); + @Pc(61) int local61; + for (local61 = 0; local61 < arg2; local61++) { + local59.method3113(JagString.parseInt((int) (arg3 % 10L))); + arg3 /= 10L; + } + local61 = 0; + @Pc(137) JagString local137; + if (arg3 == 0L) { + local137 = aClass100_17; + } else { + @Pc(95) JagString local95 = JagString.allocate(0); + while (arg3 > 0L) { + if (arg1 && local61 != 0 && local61 % 3 == 0) { + local95.method3113(local26); + } + local95.method3113(JagString.parseInt((int) (arg3 % 10L))); + local61++; + arg3 /= 10L; + } + local137 = local95; + } + if (local59.length() > 0) { + local59.method3113(local28); + } + return JagString.concatenate(new JagString[]{local9, local137.method3124(), local59.method3124()}); + } +} diff --git a/client/src/main/java/rt4/StructType.java b/client/src/main/java/rt4/StructType.java new file mode 100644 index 0000000..38280ec --- /dev/null +++ b/client/src/main/java/rt4/StructType.java @@ -0,0 +1,68 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!lk") +public final class StructType extends SecondaryNode { + + @OriginalMember(owner = "client!lk", name = "I", descriptor = "Lclient!sc;") + private HashTable params; + + @OriginalMember(owner = "client!lk", name = "a", descriptor = "(IIB)I") + public final int getParam(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + if (this.params == null) { + return arg1; + } else { + @Pc(29) IntNode local29 = (IntNode) this.params.get(arg0); + return local29 == null ? arg1 : local29.value; + } + } + + @OriginalMember(owner = "client!lk", name = "a", descriptor = "(Lclient!wa;IB)V") + private void decode(@OriginalArg(0) Buffer arg0, @OriginalArg(1) int arg1) { + if (arg1 != 249) { + return; + } + @Pc(17) int local17 = arg0.g1(); + @Pc(25) int local25; + if (this.params == null) { + local25 = IntUtils.clp2(local17); + this.params = new HashTable(local25); + } + for (local25 = 0; local25 < local17; local25++) { + @Pc(45) boolean local45 = arg0.g1() == 1; + @Pc(49) int local49 = arg0.g3(); + @Pc(58) Node local58; + if (local45) { + local58 = new StringNode(arg0.gjstr()); + } else { + local58 = new IntNode(arg0.g4()); + } + this.params.put(local58, local49); + } + } + + @OriginalMember(owner = "client!lk", name = "a", descriptor = "(Lclient!na;BI)Lclient!na;") + public final JagString getParam(@OriginalArg(0) JagString arg0, @OriginalArg(2) int arg1) { + if (this.params == null) { + return arg0; + } else { + @Pc(16) StringNode local16 = (StringNode) this.params.get(arg1); + return local16 == null ? arg0 : local16.value; + } + } + + @OriginalMember(owner = "client!lk", name = "a", descriptor = "(ILclient!wa;)V") + public final void decode(@OriginalArg(1) Buffer arg0) { + while (true) { + @Pc(5) int local5 = arg0.g1(); + if (local5 == 0) { + return; + } + this.decode(arg0, local5); + } + } +} diff --git a/client/src/main/java/rt4/StructTypeList.java b/client/src/main/java/rt4/StructTypeList.java new file mode 100644 index 0000000..c001023 --- /dev/null +++ b/client/src/main/java/rt4/StructTypeList.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class StructTypeList { + @OriginalMember(owner = "client!sk", name = "bb", descriptor = "Lclient!gn;") + public static final LruHashTable types = new LruHashTable(64); + @OriginalMember(owner = "client!bm", name = "e", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!eh", name = "a", descriptor = "(Lclient!ve;I)V") + public static void init(@OriginalArg(0) Js5 arg0) { + archive = arg0; + } + + @OriginalMember(owner = "client!jj", name = "a", descriptor = "(BI)Lclient!lk;") + public static StructType get(@OriginalArg(1) int arg0) { + @Pc(10) StructType local10 = (StructType) types.get(arg0); + if (local10 != null) { + return local10; + } + @Pc(26) byte[] local26 = archive.fetchFile(26, arg0); + local10 = new StructType(); + if (local26 != null) { + local10.decode(new Buffer(local26)); + } + types.put(local10, arg0); + return local10; + } +} diff --git a/client/src/main/java/rt4/SynthEnvelope.java b/client/src/main/java/rt4/SynthEnvelope.java new file mode 100644 index 0000000..a8f4e4d --- /dev/null +++ b/client/src/main/java/rt4/SynthEnvelope.java @@ -0,0 +1,96 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ff") +public final class SynthEnvelope { + + @OriginalMember(owner = "client!ff", name = "b", descriptor = "I") + public int wavetable; + + @OriginalMember(owner = "client!ff", name = "d", descriptor = "I") + public int minInterval; + + @OriginalMember(owner = "client!ff", name = "f", descriptor = "I") + public int maxInterval; + + @OriginalMember(owner = "client!ff", name = "g", descriptor = "I") + private int phase; + + @OriginalMember(owner = "client!ff", name = "h", descriptor = "I") + private int level; + + @OriginalMember(owner = "client!ff", name = "i", descriptor = "I") + private int slope; + + @OriginalMember(owner = "client!ff", name = "j", descriptor = "I") + private int nextTime; + + @OriginalMember(owner = "client!ff", name = "k", descriptor = "I") + private int time; + + @OriginalMember(owner = "client!ff", name = "a", descriptor = "I") + private int stages = 2; + + @OriginalMember(owner = "client!ff", name = "e", descriptor = "[I") + private int[] times = new int[2]; + + @OriginalMember(owner = "client!ff", name = "c", descriptor = "[I") + private int[] levels = new int[2]; + + @OriginalMember(owner = "client!ff", name = "", descriptor = "()V") + public SynthEnvelope() { + this.times[0] = 0; + this.times[1] = 65535; + this.levels[0] = 0; + this.levels[1] = 65535; + } + + @OriginalMember(owner = "client!ff", name = "a", descriptor = "(I)I") + public final int nextLevel(@OriginalArg(0) int arg0) { + if (this.time >= this.nextTime) { + this.level = this.levels[this.phase++] << 15; + if (this.phase >= this.stages) { + this.phase = this.stages - 1; + } + this.nextTime = (int) ((double) this.times[this.phase] / 65536.0D * (double) arg0); + if (this.nextTime > this.time) { + this.slope = ((this.levels[this.phase] << 15) - this.level) / (this.nextTime - this.time); + } + } + this.level += this.slope; + this.time++; + return this.level - this.slope >> 15; + } + + @OriginalMember(owner = "client!ff", name = "a", descriptor = "()V") + public final void reset() { + this.nextTime = 0; + this.phase = 0; + this.slope = 0; + this.level = 0; + this.time = 0; + } + + @OriginalMember(owner = "client!ff", name = "a", descriptor = "(Lclient!wa;)V") + public final void decodeStages(@OriginalArg(0) Buffer arg0) { + this.stages = arg0.g1(); + this.times = new int[this.stages]; + this.levels = new int[this.stages]; + for (@Pc(16) int local16 = 0; local16 < this.stages; local16++) { + this.times[local16] = arg0.g2(); + this.levels[local16] = arg0.g2(); + } + } + + @OriginalMember(owner = "client!ff", name = "b", descriptor = "(Lclient!wa;)V") + public final void decode(@OriginalArg(0) Buffer arg0) { + this.wavetable = arg0.g1(); + this.minInterval = arg0.g4(); + this.maxInterval = arg0.g4(); + this.decodeStages(arg0); + } +} diff --git a/client/src/main/java/rt4/SynthFilter.java b/client/src/main/java/rt4/SynthFilter.java new file mode 100644 index 0000000..8b88448 --- /dev/null +++ b/client/src/main/java/rt4/SynthFilter.java @@ -0,0 +1,125 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!nl") +public final class SynthFilter { + + @OriginalMember(owner = "client!nl", name = "f", descriptor = "[[I") + public static final int[][] coefficients = new int[2][8]; + @OriginalMember(owner = "client!nl", name = "b", descriptor = "[[F") + public static final float[][] floatingCoefficients = new float[2][8]; + @OriginalMember(owner = "client!nl", name = "d", descriptor = "F") + public static float floatingInverseA0; + @OriginalMember(owner = "client!nl", name = "g", descriptor = "I") + public static int inverseA0; + @OriginalMember(owner = "client!nl", name = "e", descriptor = "[I") + public final int[] pairs = new int[2]; + + @OriginalMember(owner = "client!nl", name = "c", descriptor = "[[[I") + private final int[][][] gain = new int[2][2][4]; + + @OriginalMember(owner = "client!nl", name = "a", descriptor = "[[[I") + private final int[][][] octaves = new int[2][2][4]; + + @OriginalMember(owner = "client!nl", name = "h", descriptor = "[I") + private final int[] inverseGain = new int[2]; + + @OriginalMember(owner = "client!nl", name = "a", descriptor = "(F)F") + public static float getOctavePhase(@OriginalArg(0) float arg0) { + @Pc(7) float local7 = (float) Math.pow(2.0D, arg0) * 32.703197F; + return local7 * 3.1415927F / 11025.0F; + } + + @OriginalMember(owner = "client!nl", name = "a", descriptor = "(Lclient!wa;Lclient!ff;)V") + public final void decode(@OriginalArg(0) Buffer arg0, @OriginalArg(1) SynthEnvelope arg1) { + @Pc(3) int local3 = arg0.g1(); + this.pairs[0] = local3 >> 4; + this.pairs[1] = local3 & 0xF; + if (local3 == 0) { + this.inverseGain[0] = this.inverseGain[1] = 0; + return; + } + this.inverseGain[0] = arg0.g2(); + this.inverseGain[1] = arg0.g2(); + @Pc(37) int local37 = arg0.g1(); + @Pc(39) int local39; + @Pc(44) int local44; + for (local39 = 0; local39 < 2; local39++) { + for (local44 = 0; local44 < this.pairs[local39]; local44++) { + this.octaves[local39][0][local44] = arg0.g2(); + this.gain[local39][0][local44] = arg0.g2(); + } + } + for (local39 = 0; local39 < 2; local39++) { + for (local44 = 0; local44 < this.pairs[local39]; local44++) { + if ((local37 & 0x1 << local39 * 4 << local44) == 0) { + this.octaves[local39][1][local44] = this.octaves[local39][0][local44]; + this.gain[local39][1][local44] = this.gain[local39][0][local44]; + } else { + this.octaves[local39][1][local44] = arg0.g2(); + this.gain[local39][1][local44] = arg0.g2(); + } + } + } + if (local37 != 0 || this.inverseGain[1] != this.inverseGain[0]) { + arg1.decodeStages(arg0); + } + } + + @OriginalMember(owner = "client!nl", name = "a", descriptor = "(IF)I") + public final int compute(@OriginalArg(0) int arg0, @OriginalArg(1) float arg1) { + @Pc(20) float local20; + if (arg0 == 0) { + local20 = (float) this.inverseGain[0] + (float) (this.inverseGain[1] - this.inverseGain[0]) * arg1; + @Pc(24) float local24 = local20 * 0.0030517578F; + floatingInverseA0 = (float) Math.pow(0.1D, local24 / 20.0F); + inverseA0 = (int) (floatingInverseA0 * 65536.0F); + } + if (this.pairs[arg0] == 0) { + return 0; + } + local20 = this.getAmplitude(arg0, 0, arg1); + floatingCoefficients[arg0][0] = -2.0F * local20 * (float) Math.cos(this.method3254(arg0, 0, arg1)); + floatingCoefficients[arg0][1] = local20 * local20; + @Pc(77) int local77; + for (local77 = 1; local77 < this.pairs[arg0]; local77++) { + local20 = this.getAmplitude(arg0, local77, arg1); + @Pc(102) float local102 = -2.0F * local20 * (float) Math.cos(this.method3254(arg0, local77, arg1)); + @Pc(106) float local106 = local20 * local20; + floatingCoefficients[arg0][local77 * 2 + 1] = floatingCoefficients[arg0][local77 * 2 - 1] * local106; + floatingCoefficients[arg0][local77 * 2] = floatingCoefficients[arg0][local77 * 2 - 1] * local102 + floatingCoefficients[arg0][local77 * 2 - 2] * local106; + for (@Pc(162) int local162 = local77 * 2 - 1; local162 >= 2; local162--) { + floatingCoefficients[arg0][local162] += floatingCoefficients[arg0][local162 - 1] * local102 + floatingCoefficients[arg0][local162 - 2] * local106; + } + floatingCoefficients[arg0][1] += floatingCoefficients[arg0][0] * local102 + local106; + floatingCoefficients[arg0][0] += local102; + } + if (arg0 == 0) { + for (local77 = 0; local77 < this.pairs[0] * 2; local77++) { + floatingCoefficients[0][local77] *= floatingInverseA0; + } + } + for (local77 = 0; local77 < this.pairs[arg0] * 2; local77++) { + coefficients[arg0][local77] = (int) (floatingCoefficients[arg0][local77] * 65536.0F); + } + return this.pairs[arg0] * 2; + } + + @OriginalMember(owner = "client!nl", name = "a", descriptor = "(IIF)F") + private float getAmplitude(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) float arg2) { + @Pc(30) float local30 = (float) this.gain[arg0][0][arg1] + arg2 * (float) (this.gain[arg0][1][arg1] - this.gain[arg0][0][arg1]); + @Pc(34) float local34 = local30 * 0.0015258789F; + return 1.0F - (float) Math.pow(10.0D, -local34 / 20.0F); + } + + @OriginalMember(owner = "client!nl", name = "b", descriptor = "(IIF)F") + private float method3254(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) float arg2) { + @Pc(30) float local30 = (float) this.octaves[arg0][0][arg1] + arg2 * (float) (this.octaves[arg0][1][arg1] - this.octaves[arg0][0][arg1]); + @Pc(34) float local34 = local30 * 1.2207031E-4F; + return getOctavePhase(local34); + } +} diff --git a/client/src/main/java/rt4/SynthInstrument.java b/client/src/main/java/rt4/SynthInstrument.java new file mode 100644 index 0000000..8350204 --- /dev/null +++ b/client/src/main/java/rt4/SynthInstrument.java @@ -0,0 +1,325 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.util.Random; + +@OriginalClass("client!pj") +public final class SynthInstrument { + + @OriginalMember(owner = "client!pj", name = "o", descriptor = "[I") + public static final int[] samples = new int[GlobalConfig.AUDIO_SAMPLE_RATE * 10]; + @OriginalMember(owner = "client!pj", name = "p", descriptor = "[I") + public static final int[] oscillatorIntervalRanges = new int[5]; + @OriginalMember(owner = "client!pj", name = "q", descriptor = "[I") + public static final int[] oscillatorMinIntervals = new int[5]; + @OriginalMember(owner = "client!pj", name = "r", descriptor = "[I") + public static final int[] oscillatorTimes = new int[5]; + @OriginalMember(owner = "client!pj", name = "s", descriptor = "[I") + public static final int[] oscillatorStartSamples = new int[5]; + @OriginalMember(owner = "client!pj", name = "t", descriptor = "[I") + public static final int[] scaledOscillatorAmplitudes = new int[5]; + @OriginalMember(owner = "client!pj", name = "k", descriptor = "[I") + private static final int[] NOISE = new int[32768]; + + @OriginalMember(owner = "client!pj", name = "h", descriptor = "[I") + private static final int[] SINE; + + @OriginalMember(owner = "client!pj", name = "a", descriptor = "Lclient!ff;") + private SynthEnvelope amplitudeModulationAmplitudeEnvelope; + + @OriginalMember(owner = "client!pj", name = "b", descriptor = "Lclient!ff;") + private SynthEnvelope gateClosedPhaseEnvelope; + + @OriginalMember(owner = "client!pj", name = "d", descriptor = "Lclient!ff;") + private SynthEnvelope amplitudeEnvelope; + + @OriginalMember(owner = "client!pj", name = "e", descriptor = "Lclient!ff;") + private SynthEnvelope gateOpenPhaseEnvelope; + + @OriginalMember(owner = "client!pj", name = "f", descriptor = "Lclient!ff;") + private SynthEnvelope phaseEnvelope; + + @OriginalMember(owner = "client!pj", name = "i", descriptor = "Lclient!ff;") + private SynthEnvelope filterEnvelope; + + @OriginalMember(owner = "client!pj", name = "l", descriptor = "Lclient!ff;") + private SynthEnvelope amplitudeModulationEnvelope; + + @OriginalMember(owner = "client!pj", name = "w", descriptor = "Lclient!nl;") + private SynthFilter filter; + + @OriginalMember(owner = "client!pj", name = "x", descriptor = "Lclient!ff;") + private SynthEnvelope phaseModulationAmplitudeEnvelope; + + @OriginalMember(owner = "client!pj", name = "y", descriptor = "Lclient!ff;") + private SynthEnvelope phaseModulationEnvelope; + + @OriginalMember(owner = "client!pj", name = "c", descriptor = "I") + public int length = 500; + + @OriginalMember(owner = "client!pj", name = "g", descriptor = "I") + private int reverbDelay = 0; + + @OriginalMember(owner = "client!pj", name = "j", descriptor = "I") + public int start = 0; + + @OriginalMember(owner = "client!pj", name = "m", descriptor = "[I") + private final int[] harmonicVolume = new int[]{0, 0, 0, 0, 0}; + + @OriginalMember(owner = "client!pj", name = "n", descriptor = "[I") + private final int[] harmonicDelay = new int[]{0, 0, 0, 0, 0}; + + @OriginalMember(owner = "client!pj", name = "u", descriptor = "I") + private int reverbVolume = 100; + + @OriginalMember(owner = "client!pj", name = "v", descriptor = "[I") + private final int[] harmonicSemitone = new int[]{0, 0, 0, 0, 0}; + + static { + @Pc(7) Random rand = new Random(0L); + @Pc(9) int local9; + for (local9 = 0; local9 < 32768; local9++) { + NOISE[local9] = (rand.nextInt() & 0x2) - 1; + } + SINE = new int[32768]; + for (local9 = 0; local9 < 32768; local9++) { + SINE[local9] = (int) (Math.sin((double) local9 / 5215.1903D) * 16384.0D); + } + } + + @OriginalMember(owner = "client!pj", name = "a", descriptor = "(III)I") + private int method3504(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + if (arg2 == 1) { + return (arg0 & 0x7FFF) < 16384 ? arg1 : -arg1; + } else if (arg2 == 2) { + return SINE[arg0 & 0x7FFF] * arg1 >> 14; + } else if (arg2 == 3) { + return ((arg0 & 0x7FFF) * arg1 >> 14) - arg1; + } else if (arg2 == 4) { + return NOISE[arg0 / 2607 & 0x7FFF] * arg1; + } else { + return 0; + } + } + + @OriginalMember(owner = "client!pj", name = "a", descriptor = "(II)[I") + public final int[] getSamples(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + ArrayUtils.clear(samples, 0, arg0); + if (arg1 < 10) { + return samples; + } + @Pc(16) double local16 = (double) arg0 / ((double) arg1 + 0.0D); + this.phaseEnvelope.reset(); + this.amplitudeEnvelope.reset(); + @Pc(24) int local24 = 0; + @Pc(26) int local26 = 0; + @Pc(28) int local28 = 0; + if (this.phaseModulationEnvelope != null) { + this.phaseModulationEnvelope.reset(); + this.phaseModulationAmplitudeEnvelope.reset(); + local24 = (int) ((double) (this.phaseModulationEnvelope.maxInterval - this.phaseModulationEnvelope.minInterval) * 32.768D / local16); + local26 = (int) ((double) this.phaseModulationEnvelope.minInterval * 32.768D / local16); + } + @Pc(63) int local63 = 0; + @Pc(65) int local65 = 0; + @Pc(67) int local67 = 0; + if (this.amplitudeModulationEnvelope != null) { + this.amplitudeModulationEnvelope.reset(); + this.amplitudeModulationAmplitudeEnvelope.reset(); + local63 = (int) ((double) (this.amplitudeModulationEnvelope.maxInterval - this.amplitudeModulationEnvelope.minInterval) * 32.768D / local16); + local65 = (int) ((double) this.amplitudeModulationEnvelope.minInterval * 32.768D / local16); + } + @Pc(102) int local102; + for (local102 = 0; local102 < 5; local102++) { + if (this.harmonicVolume[local102] != 0) { + oscillatorTimes[local102] = 0; + oscillatorStartSamples[local102] = (int) ((double) this.harmonicDelay[local102] * local16); + scaledOscillatorAmplitudes[local102] = (this.harmonicVolume[local102] << 14) / 100; + oscillatorIntervalRanges[local102] = (int) ((double) (this.phaseEnvelope.maxInterval - this.phaseEnvelope.minInterval) * 32.768D * Math.pow(1.0057929410678534D, this.harmonicSemitone[local102]) / local16); + oscillatorMinIntervals[local102] = (int) ((double) this.phaseEnvelope.minInterval * 32.768D / local16); + } + } + @Pc(185) int local185; + @Pc(190) int local190; + @Pc(198) int local198; + @Pc(203) int local203; + for (local102 = 0; local102 < arg0; local102++) { + local185 = this.phaseEnvelope.nextLevel(arg0); + local190 = this.amplitudeEnvelope.nextLevel(arg0); + if (this.phaseModulationEnvelope != null) { + local198 = this.phaseModulationEnvelope.nextLevel(arg0); + local203 = this.phaseModulationAmplitudeEnvelope.nextLevel(arg0); + local185 += this.method3504(local28, local203, this.phaseModulationEnvelope.wavetable) >> 1; + local28 += (local198 * local24 >> 16) + local26; + } + if (this.amplitudeModulationEnvelope != null) { + local198 = this.amplitudeModulationEnvelope.nextLevel(arg0); + local203 = this.amplitudeModulationAmplitudeEnvelope.nextLevel(arg0); + local190 = local190 * ((this.method3504(local67, local203, this.amplitudeModulationEnvelope.wavetable) >> 1) + 32768) >> 15; + local67 += (local198 * local63 >> 16) + local65; + } + for (local198 = 0; local198 < 5; local198++) { + if (this.harmonicVolume[local198] != 0) { + local203 = local102 + oscillatorStartSamples[local198]; + if (local203 < arg0) { + samples[local203] += this.method3504(oscillatorTimes[local198], local190 * scaledOscillatorAmplitudes[local198] >> 15, this.phaseEnvelope.wavetable); + oscillatorTimes[local198] += (local185 * oscillatorIntervalRanges[local198] >> 16) + oscillatorMinIntervals[local198]; + } + } + } + } + @Pc(356) int local356; + if (this.gateClosedPhaseEnvelope != null) { + this.gateClosedPhaseEnvelope.reset(); + this.gateOpenPhaseEnvelope.reset(); + local102 = 0; + @Pc(341) boolean local341 = true; + for (local198 = 0; local198 < arg0; local198++) { + local203 = this.gateClosedPhaseEnvelope.nextLevel(arg0); + local356 = this.gateOpenPhaseEnvelope.nextLevel(arg0); + if (local341) { + local185 = this.gateClosedPhaseEnvelope.minInterval + ((this.gateClosedPhaseEnvelope.maxInterval - this.gateClosedPhaseEnvelope.minInterval) * local203 >> 8); + } else { + local185 = this.gateClosedPhaseEnvelope.minInterval + ((this.gateClosedPhaseEnvelope.maxInterval - this.gateClosedPhaseEnvelope.minInterval) * local356 >> 8); + } + local102 += 256; + if (local102 >= local185) { + local102 = 0; + local341 = !local341; + } + if (local341) { + samples[local198] = 0; + } + } + } + if (this.reverbDelay > 0 && this.reverbVolume > 0) { + local102 = (int) ((double) this.reverbDelay * local16); + for (local185 = local102; local185 < arg0; local185++) { + samples[local185] += samples[local185 - local102] * this.reverbVolume / 100; + } + } + if (this.filter.pairs[0] > 0 || this.filter.pairs[1] > 0) { + this.filterEnvelope.reset(); + local102 = this.filterEnvelope.nextLevel(arg0 + 1); + local185 = this.filter.compute(0, (float) local102 / 65536.0F); + local190 = this.filter.compute(1, (float) local102 / 65536.0F); + if (arg0 >= local185 + local190) { + local198 = 0; + local203 = local190; + if (local190 > arg0 - local185) { + local203 = arg0 - local185; + } + @Pc(523) int local523; + while (local198 < local203) { + local356 = (int) ((long) samples[local198 + local185] * (long) SynthFilter.inverseA0 >> 16); + for (local523 = 0; local523 < local185; local523++) { + local356 += (int) ((long) samples[local198 + local185 - local523 - 1] * (long) SynthFilter.coefficients[0][local523] >> 16); + } + for (local523 = 0; local523 < local198; local523++) { + local356 -= (int) ((long) samples[local198 - local523 - 1] * (long) SynthFilter.coefficients[1][local523] >> 16); + } + samples[local198] = local356; + local102 = this.filterEnvelope.nextLevel(arg0 + 1); + local198++; + } + local203 = 128; + while (true) { + if (local203 > arg0 - local185) { + local203 = arg0 - local185; + } + while (local198 < local203) { + local356 = (int) ((long) samples[local198 + local185] * (long) SynthFilter.inverseA0 >> 16); + for (local523 = 0; local523 < local185; local523++) { + local356 += (int) ((long) samples[local198 + local185 - local523 - 1] * (long) SynthFilter.coefficients[0][local523] >> 16); + } + for (local523 = 0; local523 < local190; local523++) { + local356 -= (int) ((long) samples[local198 - local523 - 1] * (long) SynthFilter.coefficients[1][local523] >> 16); + } + samples[local198] = local356; + local102 = this.filterEnvelope.nextLevel(arg0 + 1); + local198++; + } + if (local198 >= arg0 - local185) { + while (local198 < arg0) { + local356 = 0; + for (local523 = local198 + local185 - arg0; local523 < local185; local523++) { + local356 += (int) ((long) samples[local198 + local185 - local523 - 1] * (long) SynthFilter.coefficients[0][local523] >> 16); + } + for (local523 = 0; local523 < local190; local523++) { + local356 -= (int) ((long) samples[local198 - local523 - 1] * (long) SynthFilter.coefficients[1][local523] >> 16); + } + samples[local198] = local356; + this.filterEnvelope.nextLevel(arg0 + 1); + local198++; + } + break; + } + local185 = this.filter.compute(0, (float) local102 / 65536.0F); + local190 = this.filter.compute(1, (float) local102 / 65536.0F); + local203 += 128; + } + } + } + for (local102 = 0; local102 < arg0; local102++) { + if (samples[local102] < -32768) { + samples[local102] = -32768; + } + if (samples[local102] > 32767) { + samples[local102] = 32767; + } + } + return samples; + } + + @OriginalMember(owner = "client!pj", name = "a", descriptor = "(Lclient!wa;)V") + public final void method3506(@OriginalArg(0) Buffer arg0) { + this.phaseEnvelope = new SynthEnvelope(); + this.phaseEnvelope.decode(arg0); + this.amplitudeEnvelope = new SynthEnvelope(); + this.amplitudeEnvelope.decode(arg0); + @Pc(21) int local21 = arg0.g1(); + if (local21 != 0) { + arg0.offset--; + this.phaseModulationEnvelope = new SynthEnvelope(); + this.phaseModulationEnvelope.decode(arg0); + this.phaseModulationAmplitudeEnvelope = new SynthEnvelope(); + this.phaseModulationAmplitudeEnvelope.decode(arg0); + } + local21 = arg0.g1(); + if (local21 != 0) { + arg0.offset--; + this.amplitudeModulationEnvelope = new SynthEnvelope(); + this.amplitudeModulationEnvelope.decode(arg0); + this.amplitudeModulationAmplitudeEnvelope = new SynthEnvelope(); + this.amplitudeModulationAmplitudeEnvelope.decode(arg0); + } + local21 = arg0.g1(); + if (local21 != 0) { + arg0.offset--; + this.gateClosedPhaseEnvelope = new SynthEnvelope(); + this.gateClosedPhaseEnvelope.decode(arg0); + this.gateOpenPhaseEnvelope = new SynthEnvelope(); + this.gateOpenPhaseEnvelope.decode(arg0); + } + for (@Pc(109) int local109 = 0; local109 < 10; local109++) { + @Pc(116) int local116 = arg0.gsmarts(); + if (local116 == 0) { + break; + } + this.harmonicVolume[local109] = local116; + this.harmonicSemitone[local109] = arg0.gsmart(); + this.harmonicDelay[local109] = arg0.gsmarts(); + } + this.reverbDelay = arg0.gsmarts(); + this.reverbVolume = arg0.gsmarts(); + this.length = arg0.g2(); + this.start = arg0.g2(); + this.filter = new SynthFilter(); + this.filterEnvelope = new SynthEnvelope(); + this.filter.decode(arg0, this.filterEnvelope); + } +} diff --git a/client/src/main/java/rt4/SynthSound.java b/client/src/main/java/rt4/SynthSound.java new file mode 100644 index 0000000..c60cfe1 --- /dev/null +++ b/client/src/main/java/rt4/SynthSound.java @@ -0,0 +1,103 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!sl") +public final class SynthSound { + + @OriginalMember(owner = "client!sl", name = "b", descriptor = "[Lclient!pj;") + private final SynthInstrument[] instruments = new SynthInstrument[10]; + + @OriginalMember(owner = "client!sl", name = "c", descriptor = "I") + private int start; + + @OriginalMember(owner = "client!sl", name = "a", descriptor = "I") + private int end; + + @OriginalMember(owner = "client!sl", name = "", descriptor = "(Lclient!wa;)V") + public SynthSound(@OriginalArg(0) Buffer arg0) { + for (@Pc(7) int local7 = 0; local7 < 10; local7++) { + @Pc(14) int local14 = arg0.g1(); + if (local14 != 0) { + arg0.offset--; + this.instruments[local7] = new SynthInstrument(); + this.instruments[local7].method3506(arg0); + } + } + this.start = arg0.g2(); + this.end = arg0.g2(); + } + + @OriginalMember(owner = "client!sl", name = "a", descriptor = "(Lclient!ve;II)Lclient!sl;") + public static SynthSound create(@OriginalArg(0) Js5 arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + @Pc(5) byte[] local5 = arg0.fetchFile(arg1, arg2); + return local5 == null ? null : new SynthSound(new Buffer(local5)); + } + + @OriginalMember(owner = "client!sl", name = "a", descriptor = "()[B") + private byte[] getSamples() { + @Pc(1) int local1 = 0; + @Pc(3) int local3; + for (local3 = 0; local3 < 10; local3++) { + if (this.instruments[local3] != null && this.instruments[local3].length + this.instruments[local3].start > local1) { + local1 = this.instruments[local3].length + this.instruments[local3].start; + } + } + if (local1 == 0) { + return new byte[0]; + } + local3 = local1 * GlobalConfig.AUDIO_SAMPLE_RATE / 1000; + @Pc(52) byte[] local52 = new byte[local3]; + for (@Pc(54) int local54 = 0; local54 < 10; local54++) { + if (this.instruments[local54] != null) { + @Pc(72) int local72 = this.instruments[local54].length * GlobalConfig.AUDIO_SAMPLE_RATE / 1000; + @Pc(82) int local82 = this.instruments[local54].start * GlobalConfig.AUDIO_SAMPLE_RATE / 1000; + @Pc(94) int[] local94 = this.instruments[local54].getSamples(local72, this.instruments[local54].length); + for (@Pc(96) int local96 = 0; local96 < local72; local96++) { + @Pc(111) int local111 = local52[local96 + local82] + (local94[local96] >> 8); + if ((local111 + 128 & 0xFFFFFF00) != 0) { + local111 = local111 >> 31 ^ 0x7F; + } + local52[local96 + local82] = (byte) local111; + } + } + } + return local52; + } + + @OriginalMember(owner = "client!sl", name = "b", descriptor = "()Lclient!kj;") + public final PcmSound toPcmSound() { + @Pc(2) byte[] local2 = this.getSamples(); + return new PcmSound(GlobalConfig.AUDIO_SAMPLE_RATE, local2, this.start * GlobalConfig.AUDIO_SAMPLE_RATE / 1000, this.end * GlobalConfig.AUDIO_SAMPLE_RATE / 1000); + } + + @OriginalMember(owner = "client!sl", name = "c", descriptor = "()I") + public final int getStart() { + @Pc(1) int local1 = 9999999; + @Pc(3) int local3; + for (local3 = 0; local3 < 10; local3++) { + if (this.instruments[local3] != null && this.instruments[local3].start / 20 < local1) { + local1 = this.instruments[local3].start / 20; + } + } + if (this.start < this.end && this.start / 20 < local1) { + local1 = this.start / 20; + } + if (local1 == 9999999 || local1 == 0) { + return 0; + } + for (local3 = 0; local3 < 10; local3++) { + if (this.instruments[local3] != null) { + this.instruments[local3].start -= local1 * 20; + } + } + if (this.start < this.end) { + this.start -= local1 * 20; + this.end -= local1 * 20; + } + return local1; + } +} diff --git a/client/src/main/java/rt4/Texture.java b/client/src/main/java/rt4/Texture.java new file mode 100644 index 0000000..f34ddf8 --- /dev/null +++ b/client/src/main/java/rt4/Texture.java @@ -0,0 +1,432 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!lc") +public final class Texture { + + @OriginalMember(owner = "client!i", name = "ac", descriptor = "[I") + public static final int[] brightnessMap = new int[256]; + @OriginalMember(owner = "client!rh", name = "g", descriptor = "I") + public static final int spriteGroupId = -1; + @OriginalMember(owner = "client!jh", name = "f", descriptor = "D") + public static double brightness = -1.0D; + @OriginalMember(owner = "client!cm", name = "a", descriptor = "Lclient!m;") + public static TextureProvider provider; + @OriginalMember(owner = "client!pe", name = "r", descriptor = "I") + public static int width; + @OriginalMember(owner = "client!ob", name = "f", descriptor = "Lclient!ve;") + public static Js5 spritesArchive; + @OriginalMember(owner = "client!nj", name = "k", descriptor = "I") + public static int height; + @OriginalMember(owner = "client!nk", name = "d", descriptor = "[I") + public static int[] widthFractions; + @OriginalMember(owner = "client!lb", name = "z", descriptor = "I") + public static int heightMask; + @OriginalMember(owner = "client!ck", name = "X", descriptor = "I") + public static int widthMask; + @OriginalMember(owner = "client!nb", name = "o", descriptor = "I") + public static int anInt4042; + @OriginalMember(owner = "client!fb", name = "h", descriptor = "[I") + public static int[] heightFractions; + @OriginalMember(owner = "client!lc", name = "k", descriptor = "[I") + private final int[] anIntArray328; + + @OriginalMember(owner = "client!lc", name = "b", descriptor = "[I") + private final int[] anIntArray327; + + @OriginalMember(owner = "client!lc", name = "d", descriptor = "Lclient!j;") + private final TextureOp aClass3_Sub1_1; + + @OriginalMember(owner = "client!lc", name = "i", descriptor = "Lclient!j;") + private final TextureOp aClass3_Sub1_2; + + @OriginalMember(owner = "client!lc", name = "g", descriptor = "[Lclient!j;") + private final TextureOp[] aClass3_Sub1Array22; + + @OriginalMember(owner = "client!lc", name = "", descriptor = "(Lclient!wa;)V") + public Texture(@OriginalArg(0) Buffer arg0) { + @Pc(7) int local7 = arg0.g1(); + this.aClass3_Sub1Array22 = new TextureOp[local7]; + @Pc(14) int[][] local14 = new int[local7][]; + @Pc(16) int local16 = 0; + @Pc(18) int local18 = 0; + @Pc(20) int local20; + @Pc(27) TextureOp local27; + @Pc(45) int local45; + @Pc(52) int local52; + for (local20 = 0; local20 < local7; local20++) { + local27 = method3680(arg0); + if (local27.method4631() >= 0) { + local18++; + } + if (local27.method4627() >= 0) { + local16++; + } + local45 = local27.aClass3_Sub1Array42.length; + local14[local20] = new int[local45]; + for (local52 = 0; local52 < local45; local52++) { + local14[local20][local52] = arg0.g1(); + } + this.aClass3_Sub1Array22[local20] = local27; + } + this.anIntArray327 = new int[local18]; + this.anIntArray328 = new int[local16]; + local18 = 0; + local16 = 0; + for (local20 = 0; local20 < local7; local20++) { + local27 = this.aClass3_Sub1Array22[local20]; + local45 = local27.aClass3_Sub1Array42.length; + for (local52 = 0; local52 < local45; local52++) { + local27.aClass3_Sub1Array42[local52] = this.aClass3_Sub1Array22[local14[local20][local52]]; + } + local52 = local27.method4631(); + @Pc(136) int local136 = local27.method4627(); + if (local52 > 0) { + this.anIntArray327[local18++] = local52; + } + if (local136 > 0) { + this.anIntArray328[local16++] = local136; + } + local14[local20] = null; + } + this.aClass3_Sub1_1 = this.aClass3_Sub1Array22[arg0.g1()]; + local14 = null; + this.aClass3_Sub1_2 = this.aClass3_Sub1Array22[arg0.g1()]; + } + + @OriginalMember(owner = "client!th", name = "a", descriptor = "(DI)V") + public static void setBrightness(@OriginalArg(0) double arg0) { + if (brightness == arg0) { + return; + } + for (@Pc(12) int local12 = 0; local12 < 256; local12++) { + @Pc(25) int local25 = (int) (Math.pow((double) local12 / 255.0D, arg0) * 255.0D); + brightnessMap[local12] = local25 > 255 ? 255 : local25; + } + brightness = arg0; + } + + @OriginalMember(owner = "client!qk", name = "a", descriptor = "(BLclient!wa;)Lclient!j;") + public static TextureOp method3680(@OriginalArg(1) Buffer arg0) { + arg0.g1(); + @Pc(13) int local13 = arg0.g1(); + @Pc(17) TextureOp local17 = create(local13); + local17.anInt5840 = arg0.g1(); + @Pc(26) int local26 = arg0.g1(); + for (@Pc(34) int local34 = 0; local34 < local26; local34++) { + @Pc(41) int local41 = arg0.g1(); + local17.decode(local41, arg0); + } + local17.postDecode(); + return local17; + } + + @OriginalMember(owner = "client!sc", name = "a", descriptor = "(IZ)Lclient!j;") + public static TextureOp create(@OriginalArg(0) int type) { + if (type == 0) { + return new TextureOpMonochromeFill(); + } else if (type == 1) { + return new TextureOpColorFill(); + } else if (type == 2) { + return new TextureOpHorizontalGradient(); + } else if (type == 3) { + return new TextureOpVerticalGradient(); + } else if (type == 4) { + return new TextureOp4(); + } else if (type == 5) { + return new TextureOp5(); + } else if (type == 6) { + return new TextureOpClamp(); + } else if (type == 7) { + return new TextureOpCombine(); + } else if (type == 8) { + return new TextureOpCurve(); + } else if (type == 9) { + return new TextureOpFlip(); + } else if (type == 10) { + return new TextureOpColorGradient(); + } else if (type == 11) { + return new TextureOp11(); + } else if (type == 12) { + return new TextureOp12(); + } else if (type == 13) { + return new TextureOpNoise(); + } else if (type == 14) { + return new TextureOp14(); + } else if (type == 15) { + return new TextureOp15(); + } else if (type == 16) { + return new TextureOp16(); + } else if (type == 17) { + return new TextureOp17(); + } else if (type == 18) { + return new TextureOpTiledSprite(); + } else if (type == 19) { + return new TextureOp19(); + } else if (type == 20) { + return new TextureOpTile(); + } else if (type == 21) { + return new TextureOpInterpolate(); + } else if (type == 22) { + return new TextureOpInvert(); + } else if (type == 23) { + return new TextureOp23(); + } else if (type == 24) { + return new TextureOpMonochrome(); + } else if (type == 25) { + return new TextureOp25(); + } else if (type == 26) { + return new TextureOpBinary(); + } else if (type == 27) { + return new TextureOp27(); + } else if (type == 28) { + return new TextureOp28(); + } else if (type == 29) { + return new TextureOp29(); + } else if (type == 30) { + return new TextureOpRange(); + } else if (type == 31) { + return new TextureOp31(); + } else if (type == 32) { + return new TextureOp32(); + } else if (type == 33) { + return new TextureOp33(); + } else if (type == 34) { + return new TextureOp34(); + } else if (type == 35) { + return new TextureOp35(); + } else if (type == 36) { + return new TextureOpTexture(); + } else if (type == 37) { + return new TextureOp37(); + } else if (type == 38) { + return new TextureOp38(); + } else if (type == 39) { + return new TextureOpSprite(); + } else { + return null; + } + } + + @OriginalMember(owner = "client!an", name = "c", descriptor = "(III)V") + public static void setSize(@OriginalArg(1) int height, @OriginalArg(2) int arg1) { + if (width != arg1) { + widthFractions = new int[arg1]; + for (@Pc(10) int x = 0; x < arg1; x++) { + widthFractions[x] = (x << 12) / arg1; + } + anInt4042 = arg1 == 64 ? 2048 : 4096; + widthMask = arg1 - 1; + width = arg1; + } + if (Texture.height == height) { + return; + } + if (width == height) { + heightFractions = widthFractions; + } else { + heightFractions = new int[height]; + for (@Pc(61) int y = 0; y < height; y++) { + heightFractions[y] = (y << 12) / height; + } + } + Texture.height = height; + heightMask = height - 1; + } + + @OriginalMember(owner = "client!lc", name = "a", descriptor = "(IZIDILclient!ve;Lclient!m;Z)[I") + public final int[] method2725(@OriginalArg(0) int arg0, @OriginalArg(1) boolean arg1, @OriginalArg(2) int arg2, @OriginalArg(3) double arg3, @OriginalArg(5) Js5 arg4, @OriginalArg(6) TextureProvider arg5, @OriginalArg(7) boolean arg6) { + setBrightness(arg3); + provider = arg5; + spritesArchive = arg4; + setSize(arg0, arg2); + @Pc(20) int local20; + for (local20 = 0; local20 < this.aClass3_Sub1Array22.length; local20++) { + this.aClass3_Sub1Array22[local20].method4632(arg0, arg2); + } + @Pc(56) int[] local56 = new int[arg0 * arg2]; + @Pc(64) int local64; + @Pc(60) byte local60; + if (arg6) { + local60 = -1; + local64 = -1; + local20 = arg2 - 1; + } else { + local60 = 1; + local20 = 0; + local64 = arg2; + } + @Pc(76) int local76 = 0; + @Pc(78) int local78; + for (local78 = 0; local78 < arg0; local78++) { + if (arg1) { + local76 = local78; + } + @Pc(101) int[] local101; + @Pc(103) int[] local103; + @Pc(105) int[] local105; + if (this.aClass3_Sub1_1.monochrome) { + @Pc(99) int[] local99 = this.aClass3_Sub1_1.getMonochromeOutput(local78); + local101 = local99; + local103 = local99; + local105 = local99; + } else { + @Pc(113) int[][] local113 = this.aClass3_Sub1_1.getColorOutput(local78); + local101 = local113[0]; + local105 = local113[2]; + local103 = local113[1]; + } + for (@Pc(127) int local127 = local20; local127 != local64; local127 += local60) { + @Pc(136) int local136 = local101[local127] >> 4; + if (local136 > 255) { + local136 = 255; + } + if (local136 < 0) { + local136 = 0; + } + local136 = brightnessMap[local136]; + @Pc(159) int local159 = local105[local127] >> 4; + @Pc(165) int local165 = local103[local127] >> 4; + if (local165 > 255) { + local165 = 255; + } + if (local165 < 0) { + local165 = 0; + } + if (local159 > 255) { + local159 = 255; + } + local165 = brightnessMap[local165]; + if (local159 < 0) { + local159 = 0; + } + local159 = brightnessMap[local159]; + local56[local76++] = (local136 << 16) + (local165 << 8) + local159; + if (arg1) { + local76 += arg2 - 1; + } + } + } + for (local78 = 0; local78 < this.aClass3_Sub1Array22.length; local78++) { + this.aClass3_Sub1Array22[local78].clearImageCache(); + } + return local56; + } + + @OriginalMember(owner = "client!lc", name = "a", descriptor = "(IIZLclient!m;DILclient!ve;)[B") + public final byte[] method2728(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) boolean arg2, @OriginalArg(3) TextureProvider arg3, @OriginalArg(4) double arg4, @OriginalArg(6) Js5 arg5) { + @Pc(8) byte[] local8 = new byte[arg1 * 4 * arg0]; + setBrightness(arg4); + spritesArchive = arg5; + provider = arg3; + setSize(arg0, arg1); + @Pc(31) int local31; + for (local31 = 0; local31 < this.aClass3_Sub1Array22.length; local31++) { + this.aClass3_Sub1Array22[local31].method4632(arg0, arg1); + } + local31 = 0; + @Pc(53) int local53; + for (local53 = 0; local53 < arg0; local53++) { + if (arg2) { + local31 = local53 << 2; + } + @Pc(79) int[] local79; + @Pc(81) int[] local81; + @Pc(83) int[] local83; + @Pc(77) int[] local77; + if (this.aClass3_Sub1_1.monochrome) { + local77 = this.aClass3_Sub1_1.getMonochromeOutput(local53); + local79 = local77; + local81 = local77; + local83 = local77; + } else { + @Pc(91) int[][] local91 = this.aClass3_Sub1_1.getColorOutput(local53); + local79 = local91[0]; + local81 = local91[1]; + local83 = local91[2]; + } + if (this.aClass3_Sub1_2.monochrome) { + local77 = this.aClass3_Sub1_2.getMonochromeOutput(local53); + } else { + local77 = this.aClass3_Sub1_2.getColorOutput(local53)[0]; + } + for (@Pc(127) int local127 = arg1 - 1; local127 >= 0; local127--) { + @Pc(138) int local138 = local79[local127] >> 4; + if (local138 > 255) { + local138 = 255; + } + if (local138 < 0) { + local138 = 0; + } + @Pc(154) int local154 = local81[local127] >> 4; + if (local154 > 255) { + local154 = 255; + } + @Pc(167) int local167 = local83[local127] >> 4; + if (local167 > 255) { + local167 = 255; + } + local138 = brightnessMap[local138]; + if (local167 < 0) { + local167 = 0; + } + if (local154 < 0) { + local154 = 0; + } + local154 = brightnessMap[local154]; + local167 = brightnessMap[local167]; + @Pc(220) int local220; + if (local138 == 0 && local154 == 0 && local167 == 0) { + local220 = 0; + } else { + local220 = local77[local127] >> 4; + if (local220 > 255) { + local220 = 255; + } + if (local220 < 0) { + local220 = 0; + } + } + local8[local31++] = (byte) local138; + local8[local31++] = (byte) local154; + local8[local31++] = (byte) local167; + local8[local31++] = (byte) local220; + if (arg2) { + local31 += (arg1 << 2) - 4; + } + } + } + for (local53 = 0; local53 < this.aClass3_Sub1Array22.length; local53++) { + this.aClass3_Sub1Array22[local53].clearImageCache(); + } + return local8; + } + + @OriginalMember(owner = "client!lc", name = "a", descriptor = "(ZLclient!m;Lclient!ve;)Z") + public final boolean method2729(@OriginalArg(1) TextureProvider arg0, @OriginalArg(2) Js5 arg1) { + @Pc(10) int local10; + if (spriteGroupId > 0) { + for (local10 = 0; local10 < this.anIntArray327.length; local10++) { + if (!arg1.isFileReady(this.anIntArray327[local10], spriteGroupId)) { + return false; + } + } + } else { + for (local10 = 0; local10 < this.anIntArray327.length; local10++) { + if (!arg1.isFileReady(this.anIntArray327[local10])) { + return false; + } + } + } + for (local10 = 0; local10 < this.anIntArray328.length; local10++) { + if (!arg0.method3230(this.anIntArray328[local10])) { + return false; + } + } + return true; + } +} diff --git a/client/src/main/java/rt4/TextureOp.java b/client/src/main/java/rt4/TextureOp.java new file mode 100644 index 0000000..c17448a --- /dev/null +++ b/client/src/main/java/rt4/TextureOp.java @@ -0,0 +1,113 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!j") +public abstract class TextureOp extends Node { + + @OriginalMember(owner = "client!kc", name = "p", descriptor = "[I") + public static int[] COSINE; + @OriginalMember(owner = "client!je", name = "eb", descriptor = "[I") + public static int[] SINE; + @OriginalMember(owner = "client!j", name = "t", descriptor = "Lclient!nd;") + protected MonochromeImageCache colorImageCache; + + @OriginalMember(owner = "client!j", name = "G", descriptor = "I") + public int anInt5840; + + @OriginalMember(owner = "client!j", name = "H", descriptor = "Lclient!pf;") + protected ColorImageCache monochromeImageCache; + + @OriginalMember(owner = "client!j", name = "u", descriptor = "[Lclient!j;") + public final TextureOp[] aClass3_Sub1Array42; + + @OriginalMember(owner = "client!j", name = "p", descriptor = "Z") + public boolean monochrome; + + @OriginalMember(owner = "client!j", name = "", descriptor = "(IZ)V") + protected TextureOp(@OriginalArg(0) int arg0, @OriginalArg(1) boolean arg1) { + this.aClass3_Sub1Array42 = new TextureOp[arg0]; + this.monochrome = arg1; + } + + @OriginalMember(owner = "client!al", name = "b", descriptor = "(B)V") + public static void createTrigonometryTables() { + if (SINE != null && COSINE != null) { + return; + } + SINE = new int[256]; + COSINE = new int[256]; + for (@Pc(26) int i = 0; i < 256; i++) { + @Pc(36) double radians = (double) i / 255.0D * 6.283185307179586D; + SINE[i] = (int) (Math.sin(radians) * 4096.0D); + COSINE[i] = (int) (Math.cos(radians) * 4096.0D); + } + } + + @OriginalMember(owner = "client!j", name = "a", descriptor = "(III)[I") + protected final int[] getChildMonochromeOutput(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + return this.aClass3_Sub1Array42[arg0].monochrome ? this.aClass3_Sub1Array42[arg0].getMonochromeOutput(arg1) : this.aClass3_Sub1Array42[arg0].getColorOutput(arg1)[0]; + } + + @OriginalMember(owner = "client!j", name = "a", descriptor = "(IB)[I") + public int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + throw new IllegalStateException("This operation does not have a monochrome output"); + } + + @OriginalMember(owner = "client!j", name = "d", descriptor = "(B)I") + public int method4627() { + return -1; + } + + @OriginalMember(owner = "client!j", name = "a", descriptor = "(ILclient!wa;Z)V") + public void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + } + + @OriginalMember(owner = "client!j", name = "e", descriptor = "(I)V") + public void postDecode() { + } + + @OriginalMember(owner = "client!j", name = "f", descriptor = "(I)I") + public int method4631() { + return -1; + } + + @OriginalMember(owner = "client!j", name = "b", descriptor = "(III)V") + public final void method4632(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(15) int local15 = this.anInt5840 == 255 ? arg0 : this.anInt5840; + if (this.monochrome) { + this.monochromeImageCache = new ColorImageCache(local15, arg0, arg1); + } else { + this.colorImageCache = new MonochromeImageCache(local15, arg0, arg1); + } + } + + @OriginalMember(owner = "client!j", name = "e", descriptor = "(B)V") + public void clearImageCache() { + if (this.monochrome) { + this.monochromeImageCache.clear(); + this.monochromeImageCache = null; + } else { + this.colorImageCache.clear(); + this.colorImageCache = null; + } + } + + @OriginalMember(owner = "client!j", name = "a", descriptor = "(IIB)[[I") + protected final int[][] getChildColorOutput(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + if (this.aClass3_Sub1Array42[arg1].monochrome) { + @Pc(32) int[] local32 = this.aClass3_Sub1Array42[arg1].getMonochromeOutput(arg0); + return new int[][]{local32, local32, local32}; + } else { + return this.aClass3_Sub1Array42[arg1].getColorOutput(arg0); + } + } + + @OriginalMember(owner = "client!j", name = "b", descriptor = "(II)[[I") + public int[][] getColorOutput(@OriginalArg(1) int arg0) { + throw new IllegalStateException("This operation does not have a colour output"); + } +} diff --git a/client/src/main/java/rt4/TextureOp11.java b/client/src/main/java/rt4/TextureOp11.java new file mode 100644 index 0000000..abef1be --- /dev/null +++ b/client/src/main/java/rt4/TextureOp11.java @@ -0,0 +1,66 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!mg") +public final class TextureOp11 extends TextureOp { + + @OriginalMember(owner = "client!mg", name = "R", descriptor = "I") + private int anInt3812 = 4096; + + @OriginalMember(owner = "client!mg", name = "Z", descriptor = "I") + private int anInt3816 = 4096; + + @OriginalMember(owner = "client!mg", name = "X", descriptor = "I") + private int anInt3815 = 4096; + + @OriginalMember(owner = "client!mg", name = "", descriptor = "()V") + public TextureOp11() { + super(1, false); + } + + @OriginalMember(owner = "client!mg", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt3816 = arg1.g2(); + } else if (arg0 == 1) { + this.anInt3812 = arg1.g2(); + } else if (arg0 == 2) { + this.anInt3815 = arg1.g2(); + } + } + + @OriginalMember(owner = "client!mg", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(16) int[][] local16 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(27) int[][] local27 = this.getChildColorOutput(arg0, 0); + @Pc(31) int[] local31 = local27[0]; + @Pc(35) int[] local35 = local27[1]; + @Pc(39) int[] local39 = local27[2]; + @Pc(43) int[] local43 = local16[1]; + @Pc(47) int[] local47 = local16[0]; + @Pc(51) int[] local51 = local16[2]; + for (@Pc(53) int local53 = 0; local53 < Texture.width; local53++) { + @Pc(64) int local64 = local31[local53]; + @Pc(68) int local68 = local35[local53]; + @Pc(72) int local72 = local39[local53]; + if (local64 == local72 && local68 == local72) { + local47[local53] = this.anInt3816 * local64 >> 12; + local43[local53] = local72 * this.anInt3812 >> 12; + local51[local53] = local68 * this.anInt3815 >> 12; + } else { + local47[local53] = this.anInt3816; + local43[local53] = this.anInt3812; + local51[local53] = this.anInt3815; + } + } + } + return local16; + } +} diff --git a/client/src/main/java/rt4/TextureOp12.java b/client/src/main/java/rt4/TextureOp12.java new file mode 100644 index 0000000..111c261 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp12.java @@ -0,0 +1,76 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ag") +public final class TextureOp12 extends TextureOp { + + @OriginalMember(owner = "client!ag", name = "S", descriptor = "I") + private int anInt100 = 0; + + @OriginalMember(owner = "client!ag", name = "X", descriptor = "I") + private int anInt105 = 0; + + @OriginalMember(owner = "client!ag", name = "W", descriptor = "I") + private int anInt104 = 1; + + @OriginalMember(owner = "client!ag", name = "", descriptor = "()V") + public TextureOp12() { + super(0, true); + } + + @OriginalMember(owner = "client!ag", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(11) int[] local11 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(20) int local20 = Texture.heightFractions[arg0]; + @Pc(26) int local26 = local20 - 2048 >> 1; + for (@Pc(28) int local28 = 0; local28 < Texture.width; local28++) { + @Pc(35) int local35 = Texture.widthFractions[local28]; + @Pc(41) int local41 = local35 - 2048 >> 1; + @Pc(68) int local68; + if (this.anInt105 == 0) { + local68 = (local35 - local20) * this.anInt104; + } else { + @Pc(58) int local58 = local41 * local41 + local26 * local26 >> 12; + local68 = (int) (Math.sqrt((float) local58 / 4096.0F) * 4096.0D); + local68 = (int) ((double) (local68 * this.anInt104) * 3.141592653589793D); + } + local68 -= local68 & 0xFFFFF000; + if (this.anInt100 == 0) { + local68 = TextureOp.SINE[local68 >> 4 & 0xFF] + 4096 >> 1; + } else if (this.anInt100 == 2) { + local68 -= 2048; + if (local68 < 0) { + local68 = -local68; + } + local68 = 2048 - local68 << 1; + } + local11[local28] = local68; + } + } + return local11; + } + + @OriginalMember(owner = "client!ag", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + TextureOp.createTrigonometryTables(); + } + + @OriginalMember(owner = "client!ag", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt105 = arg1.g1(); + } else if (arg0 == 1) { + this.anInt100 = arg1.g1(); + } else if (arg0 == 3) { + this.anInt104 = arg1.g1(); + } + } +} diff --git a/client/src/main/java/rt4/TextureOp14.java b/client/src/main/java/rt4/TextureOp14.java new file mode 100644 index 0000000..8b25bb7 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp14.java @@ -0,0 +1,67 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!sa") +public final class TextureOp14 extends TextureOp { + + @OriginalMember(owner = "client!sa", name = "T", descriptor = "I") + private int anInt4971 = 585; + + @OriginalMember(owner = "client!sa", name = "", descriptor = "()V") + public TextureOp14() { + super(0, true); + } + + @OriginalMember(owner = "client!sa", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(28) int local28 = Texture.heightFractions[arg0]; + for (@Pc(30) int local30 = 0; local30 < Texture.width; local30++) { + @Pc(41) int local41 = Texture.widthFractions[local30]; + @Pc(76) int local76; + if (local41 > this.anInt4971 && 4096 - this.anInt4971 > local41 && 2048 - this.anInt4971 < local28 && local28 < this.anInt4971 + 2048) { + local76 = 2048 - local41; + local76 = local76 < 0 ? -local76 : local76; + local76 <<= 0xC; + local76 /= 2048 - this.anInt4971; + local19[local30] = 4096 - local76; + } else if (local41 > 2048 - this.anInt4971 && local41 < this.anInt4971 + 2048) { + local76 = local28 - 2048; + local76 = local76 >= 0 ? local76 : -local76; + local76 -= this.anInt4971; + local76 <<= 0xC; + local19[local30] = local76 / (2048 - this.anInt4971); + } else if (local28 < this.anInt4971 || 4096 - this.anInt4971 < local28) { + local76 = local41 - 2048; + @Pc(188) int local188 = local76 < 0 ? -local76 : local76; + @Pc(193) int local193 = local188 - this.anInt4971; + @Pc(197) int local197 = local193 << 12; + local19[local30] = local197 / (2048 - this.anInt4971); + } else if (this.anInt4971 <= local41 && local41 <= 4096 - this.anInt4971) { + local19[local30] = 0; + } else { + local76 = 2048 - local28; + local76 = local76 < 0 ? -local76 : local76; + local76 <<= 0xC; + local76 /= 2048 - this.anInt4971; + local19[local30] = 4096 - local76; + } + } + } + return local19; + } + + @OriginalMember(owner = "client!sa", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt4971 = arg1.g2(); + } + } +} diff --git a/client/src/main/java/rt4/TextureOp15.java b/client/src/main/java/rt4/TextureOp15.java new file mode 100644 index 0000000..3c4b446 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp15.java @@ -0,0 +1,193 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.util.Random; + +@OriginalClass("client!hm") +public final class TextureOp15 extends TextureOp { + + @OriginalMember(owner = "client!ec", name = "d", descriptor = "Lclient!gn;") + public static final LruHashTable aClass54_5 = new LruHashTable(16); + @OriginalMember(owner = "client!ui", name = "Q", descriptor = "I") + public static int anInt5526; + @OriginalMember(owner = "client!uf", name = "p", descriptor = "I") + public static int anInt5443; + @OriginalMember(owner = "client!cl", name = "X", descriptor = "I") + public static int anInt1091; + @OriginalMember(owner = "client!jg", name = "g", descriptor = "I") + public static int anInt3041; + @OriginalMember(owner = "client!hm", name = "S", descriptor = "I") + private int anInt2635 = 2; + + @OriginalMember(owner = "client!hm", name = "U", descriptor = "I") + private int anInt2636 = 2048; + + @OriginalMember(owner = "client!hm", name = "Z", descriptor = "I") + private int anInt2639 = 0; + + @OriginalMember(owner = "client!hm", name = "W", descriptor = "I") + private int anInt2638 = 1; + + @OriginalMember(owner = "client!hm", name = "jb", descriptor = "I") + private int anInt2646 = 5; + + @OriginalMember(owner = "client!hm", name = "X", descriptor = "[B") + private byte[] aByteArray38 = new byte[512]; + + @OriginalMember(owner = "client!hm", name = "ib", descriptor = "I") + private int anInt2645 = 5; + + @OriginalMember(owner = "client!hm", name = "eb", descriptor = "[S") + private short[] aShortArray35 = new short[512]; + + @OriginalMember(owner = "client!hm", name = "", descriptor = "()V") + public TextureOp15() { + super(0, true); + } + + @OriginalMember(owner = "client!ha", name = "a", descriptor = "(II)[B") + public static byte[] method1837(@OriginalArg(1) int arg0) { + @Pc(10) ByteArrayNodeSecondary local10 = (ByteArrayNodeSecondary) aClass54_5.get(arg0); + if (local10 == null) { + @Pc(24) Random local24 = new Random(arg0); + @Pc(27) byte[] local27 = new byte[512]; + @Pc(29) int local29; + for (local29 = 0; local29 < 255; local29++) { + local27[local29] = (byte) local29; + } + for (local29 = 0; local29 < 255; local29++) { + @Pc(53) int local53 = 255 - local29; + @Pc(58) int local58 = RandomUtils.nextInt(local53, local24); + @Pc(62) byte local62 = local27[local58]; + local27[local58] = local27[local53]; + local27[local53] = local27[511 - local29] = local62; + } + local10 = new ByteArrayNodeSecondary(local27); + aClass54_5.put(local10, arg0); + } + return local10.value; + } + + @OriginalMember(owner = "client!hm", name = "f", descriptor = "(B)V") + private void method2052() { + @Pc(12) Random local12 = new Random(this.anInt2639); + this.aShortArray35 = new short[512]; + if (this.anInt2636 > 0) { + for (@Pc(26) int local26 = 0; local26 < 512; local26++) { + this.aShortArray35[local26] = (short) RandomUtils.nextInt(this.anInt2636, local12); + } + } + } + + @OriginalMember(owner = "client!hm", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + this.aByteArray38 = method1837(this.anInt2639); + this.method2052(); + } + + @OriginalMember(owner = "client!hm", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(32) int local32 = this.anInt2646 * Texture.heightFractions[arg0] + 2048; + @Pc(36) int local36 = local32 >> 12; + @Pc(40) int local40 = local36 + 1; + for (@Pc(42) int local42 = 0; local42 < Texture.width; local42++) { + anInt5526 = Integer.MAX_VALUE; + anInt5443 = Integer.MAX_VALUE; + anInt3041 = Integer.MAX_VALUE; + anInt1091 = Integer.MAX_VALUE; + @Pc(62) int local62 = this.anInt2645 * Texture.widthFractions[local42] + 2048; + @Pc(66) int local66 = local62 >> 12; + @Pc(70) int local70 = local66 + 1; + @Pc(165) int local165; + for (@Pc(74) int local74 = local36 - 1; local74 <= local40; local74++) { + @Pc(104) int local104 = this.aByteArray38[(this.anInt2646 <= local74 ? local74 - this.anInt2646 : local74) & 0xFF] & 0xFF; + for (@Pc(108) int local108 = local66 - 1; local108 <= local70; local108++) { + @Pc(138) int local138 = (this.aByteArray38[(this.anInt2645 <= local108 ? local108 - this.anInt2645 : local108) + local104 & 0xFF] & 0xFF) * 2; + @Pc(142) int local142 = -(local108 << 12); + @Pc(146) int local146 = local138 + 1; + @Pc(151) int local151 = local142 + local62 - this.aShortArray35[local138]; + @Pc(162) int local162 = local32 - this.aShortArray35[local146] - (local74 << 12); + local165 = this.anInt2638; + @Pc(201) int local201; + if (local165 == 1) { + local201 = local162 * local162 + local151 * local151 >> 12; + } else if (local165 == 3) { + local151 = local151 < 0 ? -local151 : local151; + local162 = local162 >= 0 ? local162 : -local162; + local201 = local162 >= local151 ? local162 : local151; + } else if (local165 == 4) { + local151 = (int) (Math.sqrt((float) (local151 < 0 ? -local151 : local151) / 4096.0F) * 4096.0D); + local162 = (int) (Math.sqrt((float) (local162 >= 0 ? local162 : -local162) / 4096.0F) * 4096.0D); + local201 = local162 + local151; + local201 = local201 * local201 >> 12; + } else if (local165 == 5) { + local151 *= local151; + local162 *= local162; + local201 = (int) (Math.sqrt(Math.sqrt((float) (local162 + local151) / 1.6777216E7F)) * 4096.0D); + } else if (local165 == 2) { + local201 = (local151 >= 0 ? local151 : -local151) + (local162 < 0 ? -local162 : local162); + } else { + local201 = (int) (Math.sqrt((float) (local162 * local162 + local151 * local151) / 1.6777216E7F) * 4096.0D); + } + if (local201 < anInt1091) { + anInt5526 = anInt5443; + anInt5443 = anInt3041; + anInt3041 = anInt1091; + anInt1091 = local201; + } else if (local201 < anInt3041) { + anInt5526 = anInt5443; + anInt5443 = anInt3041; + anInt3041 = local201; + } else if (anInt5443 > local201) { + anInt5526 = anInt5443; + anInt5443 = local201; + } else if (local201 < anInt5526) { + anInt5526 = local201; + } + } + } + local165 = this.anInt2635; + if (local165 == 0) { + local19[local42] = anInt1091; + } else if (local165 == 1) { + local19[local42] = anInt3041; + } else if (local165 == 3) { + local19[local42] = anInt5443; + } else if (local165 == 4) { + local19[local42] = anInt5526; + } else if (local165 == 2) { + local19[local42] = anInt3041 - anInt1091; + } + } + } + return local19; + } + + @OriginalMember(owner = "client!hm", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt2645 = this.anInt2646 = arg1.g1(); + } else if (arg0 == 1) { + this.anInt2639 = arg1.g1(); + } else if (arg0 == 2) { + this.anInt2636 = arg1.g2(); + } else if (arg0 == 3) { + this.anInt2635 = arg1.g1(); + } else if (arg0 == 4) { + this.anInt2638 = arg1.g1(); + } else if (arg0 == 5) { + this.anInt2645 = arg1.g1(); + } else if (arg0 == 6) { + this.anInt2646 = arg1.g1(); + } + } +} diff --git a/client/src/main/java/rt4/TextureOp16.java b/client/src/main/java/rt4/TextureOp16.java new file mode 100644 index 0000000..9116b0c --- /dev/null +++ b/client/src/main/java/rt4/TextureOp16.java @@ -0,0 +1,80 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!f") +public final class TextureOp16 extends TextureOp { + + @OriginalMember(owner = "client!f", name = "R", descriptor = "I") + private int anInt1935 = 204; + + @OriginalMember(owner = "client!f", name = "Y", descriptor = "I") + private int anInt1940 = 1; + + @OriginalMember(owner = "client!f", name = "Q", descriptor = "I") + private int anInt1934 = 1; + + @OriginalMember(owner = "client!f", name = "", descriptor = "()V") + public TextureOp16() { + super(0, true); + } + + @OriginalMember(owner = "client!f", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt1934 = arg1.g1(); + } else if (arg0 == 1) { + this.anInt1940 = arg1.g1(); + } else if (arg0 == 2) { + this.anInt1935 = arg1.g2(); + } + } + + @OriginalMember(owner = "client!f", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + for (@Pc(25) int local25 = 0; local25 < Texture.width; local25++) { + @Pc(32) int local32 = Texture.widthFractions[local25]; + @Pc(36) int local36 = Texture.heightFractions[arg0]; + @Pc(43) int local43 = this.anInt1934 * local32 >> 12; + @Pc(50) int local50 = local36 * this.anInt1940 >> 12; + @Pc(60) int local60 = this.anInt1934 * (local32 % (4096 / this.anInt1934)); + @Pc(70) int local70 = local36 % (4096 / this.anInt1940) * this.anInt1940; + if (this.anInt1935 > local70) { + for (local43 -= local50; local43 < 0; local43 += 4) { + } + while (local43 > 3) { + local43 -= 4; + } + if (local43 != 1) { + local19[local25] = 0; + continue; + } + if (this.anInt1935 > local60) { + local19[local25] = 0; + continue; + } + } + if (local60 < this.anInt1935) { + for (local43 -= local50; local43 < 0; local43 += 4) { + } + while (local43 > 3) { + local43 -= 4; + } + if (local43 > 0) { + local19[local25] = 0; + continue; + } + } + local19[local25] = 4096; + } + } + return local19; + } +} diff --git a/client/src/main/java/rt4/TextureOp17.java b/client/src/main/java/rt4/TextureOp17.java new file mode 100644 index 0000000..7a032a3 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp17.java @@ -0,0 +1,169 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!hk") +public final class TextureOp17 extends TextureOp { + + @OriginalMember(owner = "client!hk", name = "Q", descriptor = "I") + private int anInt2543; + + @OriginalMember(owner = "client!hk", name = "Z", descriptor = "I") + private int anInt2551; + + @OriginalMember(owner = "client!hk", name = "cb", descriptor = "I") + private int anInt2553; + + @OriginalMember(owner = "client!hk", name = "gb", descriptor = "I") + private int anInt2554; + + @OriginalMember(owner = "client!hk", name = "ib", descriptor = "I") + private int anInt2556; + + @OriginalMember(owner = "client!hk", name = "jb", descriptor = "I") + private int anInt2557; + + @OriginalMember(owner = "client!hk", name = "T", descriptor = "I") + private int anInt2546 = 0; + + @OriginalMember(owner = "client!hk", name = "U", descriptor = "I") + private int anInt2547 = 0; + + @OriginalMember(owner = "client!hk", name = "X", descriptor = "I") + private int anInt2549 = 0; + + @OriginalMember(owner = "client!hk", name = "", descriptor = "()V") + public TextureOp17() { + super(1, false); + } + + @OriginalMember(owner = "client!hk", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt2546 = arg1.g2b(); + } else if (arg0 == 1) { + this.anInt2549 = (arg1.g1b() << 12) / 100; + } else if (arg0 == 2) { + this.anInt2547 = (arg1.g1b() << 12) / 100; + } + } + + @OriginalMember(owner = "client!hk", name = "a", descriptor = "(IIII)V") + private void method1991(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2) { + @Pc(35) int local35 = arg0 <= 2048 ? arg0 * (arg1 + 4096) >> 12 : arg0 + arg1 - (arg0 * arg1 >> 12); + if (local35 <= 0) { + this.anInt2554 = this.anInt2543 = this.anInt2553 = arg0; + return; + } + @Pc(44) int local44 = arg2 * 6; + @Pc(51) int local51 = arg0 + arg0 - local35; + @Pc(55) int local55 = local44 >> 12; + @Pc(64) int local64 = (local35 - local51 << 12) / local35; + @Pc(70) int local70 = local44 - (local55 << 12); + @Pc(78) int local78 = local35 * local64 >> 12; + @Pc(84) int local84 = local78 * local70 >> 12; + @Pc(88) int local88 = local84 + local51; + @Pc(93) int local93 = local35 - local84; + if (local55 == 0) { + this.anInt2553 = local51; + this.anInt2554 = local35; + this.anInt2543 = local88; + } else if (local55 == 1) { + this.anInt2553 = local51; + this.anInt2543 = local35; + this.anInt2554 = local93; + } else if (local55 == 2) { + this.anInt2554 = local51; + this.anInt2543 = local35; + this.anInt2553 = local88; + } else if (local55 == 3) { + this.anInt2543 = local93; + this.anInt2553 = local35; + this.anInt2554 = local51; + } else if (local55 == 4) { + this.anInt2553 = local35; + this.anInt2554 = local88; + this.anInt2543 = local51; + } else if (local55 == 5) { + this.anInt2543 = local51; + this.anInt2554 = local35; + this.anInt2553 = local93; + } + } + + @OriginalMember(owner = "client!hk", name = "a", descriptor = "(BIII)V") + private void method1992(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2) { + @Pc(12) int local12 = arg0 > arg1 ? arg0 : arg1; + @Pc(31) int local31 = arg2 <= local12 ? local12 : arg2; + @Pc(38) int local38 = arg1 > arg0 ? arg0 : arg1; + @Pc(49) int local49 = arg2 >= local38 ? local38 : arg2; + @Pc(54) int local54 = local31 - local49; + if (local54 > 0) { + @Pc(65) int local65 = (local31 - arg1 << 12) / local54; + @Pc(74) int local74 = (local31 - arg0 << 12) / local54; + @Pc(83) int local83 = (local31 - arg2 << 12) / local54; + if (arg0 == local31) { + this.anInt2551 = local49 == arg1 ? local83 + 20480 : -local65 + 4096; + } else if (local31 == arg1) { + this.anInt2551 = local49 == arg2 ? local74 + 4096 : -local83 + 12288; + } else { + this.anInt2551 = local49 == arg0 ? local65 + 12288 : -local74 + 20480; + } + this.anInt2551 /= 6; + } else { + this.anInt2551 = 0; + } + this.anInt2556 = (local49 + local31) / 2; + if (this.anInt2556 > 0 && this.anInt2556 < 4096) { + this.anInt2557 = (local54 << 12) / (this.anInt2556 > 2048 ? 8192 - this.anInt2556 * 2 : this.anInt2556 * 2); + } else { + this.anInt2557 = 0; + } + } + + @OriginalMember(owner = "client!hk", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(17) int[][] local17 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(28) int[][] local28 = this.getChildColorOutput(arg0, 0); + @Pc(32) int[] local32 = local28[0]; + @Pc(36) int[] local36 = local28[1]; + @Pc(40) int[] local40 = local28[2]; + @Pc(44) int[] local44 = local17[1]; + @Pc(48) int[] local48 = local17[2]; + @Pc(52) int[] local52 = local17[0]; + for (@Pc(54) int local54 = 0; local54 < Texture.width; local54++) { + this.method1992(local32[local54], local36[local54], local40[local54]); + this.anInt2556 += this.anInt2547; + if (this.anInt2556 < 0) { + this.anInt2556 = 0; + } + this.anInt2557 += this.anInt2549; + if (this.anInt2556 > 4096) { + this.anInt2556 = 4096; + } + if (this.anInt2557 < 0) { + this.anInt2557 = 0; + } + if (this.anInt2557 > 4096) { + this.anInt2557 = 4096; + } + for (this.anInt2551 += this.anInt2546; this.anInt2551 < 0; this.anInt2551 += 4096) { + } + while (this.anInt2551 > 4096) { + this.anInt2551 -= 4096; + } + this.method1991(this.anInt2556, this.anInt2557, this.anInt2551); + local52[local54] = this.anInt2554; + local44[local54] = this.anInt2543; + local48[local54] = this.anInt2553; + } + } + return local17; + } +} diff --git a/client/src/main/java/rt4/TextureOp19.java b/client/src/main/java/rt4/TextureOp19.java new file mode 100644 index 0000000..1bee9ab --- /dev/null +++ b/client/src/main/java/rt4/TextureOp19.java @@ -0,0 +1,81 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ke") +public final class TextureOp19 extends TextureOp { + + @OriginalMember(owner = "client!ke", name = "V", descriptor = "I") + private int anInt3292 = 32768; + + @OriginalMember(owner = "client!ke", name = "", descriptor = "()V") + public TextureOp19() { + super(3, false); + } + + @OriginalMember(owner = "client!ke", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(17) int[][] local17 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(28) int[] local28 = this.getChildMonochromeOutput(1, arg0); + @Pc(34) int[] local34 = this.getChildMonochromeOutput(2, arg0); + @Pc(38) int[] local38 = local17[2]; + @Pc(42) int[] local42 = local17[1]; + @Pc(46) int[] local46 = local17[0]; + for (@Pc(48) int local48 = 0; local48 < Texture.width; local48++) { + @Pc(61) int local61 = local28[local48] * 255 >> 12 & 0xFF; + @Pc(70) int local70 = local34[local48] * this.anInt3292 >> 12; + @Pc(78) int local78 = local70 * TextureOp.COSINE[local61] >> 12; + @Pc(86) int local86 = TextureOp.SINE[local61] * local70 >> 12; + @Pc(94) int local94 = (local78 >> 12) + local48 & Texture.widthMask; + @Pc(103) int local103 = Texture.heightMask & arg0 + (local86 >> 12); + @Pc(109) int[][] local109 = this.getChildColorOutput(local103, 0); + local46[local48] = local109[0][local94]; + local42[local48] = local109[1][local94]; + local38[local48] = local109[2][local94]; + } + } + return local17; + } + + @OriginalMember(owner = "client!ke", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(29) int[] local29 = this.getChildMonochromeOutput(1, arg0); + @Pc(35) int[] local35 = this.getChildMonochromeOutput(2, arg0); + for (@Pc(37) int local37 = 0; local37 < Texture.width; local37++) { + @Pc(49) int local49 = this.anInt3292 * local35[local37] >> 12; + @Pc(57) int local57 = local29[local37] >> 4 & 0xFF; + @Pc(65) int local65 = TextureOp.COSINE[local57] * local49 >> 12; + @Pc(73) int local73 = TextureOp.SINE[local57] * local49 >> 12; + @Pc(81) int local81 = Texture.widthMask & (local65 >> 12) + local37; + @Pc(89) int local89 = Texture.heightMask & (local73 >> 12) + arg0; + @Pc(95) int[] local95 = this.getChildMonochromeOutput(0, local89); + local19[local37] = local95[local81]; + } + } + return local19; + } + + @OriginalMember(owner = "client!ke", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt3292 = arg1.g2() << 4; + } else if (arg0 == 1) { + this.monochrome = arg1.g1() == 1; + } + } + + @OriginalMember(owner = "client!ke", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + TextureOp.createTrigonometryTables(); + } +} diff --git a/client/src/main/java/rt4/TextureOp23.java b/client/src/main/java/rt4/TextureOp23.java new file mode 100644 index 0000000..9830a2e --- /dev/null +++ b/client/src/main/java/rt4/TextureOp23.java @@ -0,0 +1,95 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!je") +public final class TextureOp23 extends TextureOp { + + @OriginalMember(owner = "client!hd", name = "i", descriptor = "I") + public static int anInt2433 = 0; + @OriginalMember(owner = "client!vl", name = "l", descriptor = "I") + public static int anInt5776 = 0; + + @OriginalMember(owner = "client!je", name = "", descriptor = "()V") + public TextureOp23() { + super(1, false); + } + + @OriginalMember(owner = "client!je", name = "a", descriptor = "(IBI)V") + private void method2382(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(13) int local13 = Texture.widthFractions[arg1]; + @Pc(17) int local17 = Texture.heightFractions[arg0]; + @Pc(28) float local28 = (float) Math.atan2(local13 - 2048, local17 - 2048); + if ((double) local28 >= -3.141592653589793D && -2.356194490192345D >= (double) local28) { + anInt2433 = arg0; + anInt5776 = arg1; + } else if ((double) local28 <= -1.5707963267948966D && -2.356194490192345D <= (double) local28) { + anInt5776 = arg0; + anInt2433 = arg1; + } else if ((double) local28 <= -0.7853981633974483D && (double) local28 >= -1.5707963267948966D) { + anInt5776 = Texture.width - arg0; + anInt2433 = arg1; + } else if (local28 <= 0.0F && (double) local28 >= -0.7853981633974483D) { + anInt5776 = arg1; + anInt2433 = Texture.height - arg0; + } else if (local28 >= 0.0F && (double) local28 <= 0.7853981633974483D) { + anInt5776 = Texture.width - arg1; + anInt2433 = Texture.height - arg0; + } else if ((double) local28 >= 0.7853981633974483D && (double) local28 <= 1.5707963267948966D) { + anInt5776 = Texture.width - arg0; + anInt2433 = Texture.height - arg1; + } else if ((double) local28 >= 1.5707963267948966D && (double) local28 <= 2.356194490192345D) { + anInt2433 = Texture.height - arg1; + anInt5776 = arg0; + } else if ((double) local28 >= 2.356194490192345D && (double) local28 <= 3.141592653589793D) { + anInt5776 = Texture.width - arg1; + anInt2433 = arg0; + } + anInt5776 &= Texture.widthMask; + anInt2433 &= Texture.heightMask; + } + + @OriginalMember(owner = "client!je", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.monochrome = arg1.g1() == 1; + } + } + + @OriginalMember(owner = "client!je", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + for (@Pc(26) int local26 = 0; local26 < Texture.width; local26++) { + this.method2382(arg0, local26); + @Pc(40) int[] local40 = this.getChildMonochromeOutput(0, anInt2433); + local19[local26] = local40[anInt5776]; + } + } + return local19; + } + + @OriginalMember(owner = "client!je", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(15) int[][] local15 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(28) int[] local28 = local15[0]; + @Pc(32) int[] local32 = local15[2]; + @Pc(36) int[] local36 = local15[1]; + for (@Pc(38) int local38 = 0; local38 < Texture.width; local38++) { + this.method2382(arg0, local38); + @Pc(52) int[][] local52 = this.getChildColorOutput(anInt2433, 0); + local28[local38] = local52[0][anInt5776]; + local36[local38] = local52[1][anInt5776]; + local32[local38] = local52[2][anInt5776]; + } + } + return local15; + } +} diff --git a/client/src/main/java/rt4/TextureOp25.java b/client/src/main/java/rt4/TextureOp25.java new file mode 100644 index 0000000..8f5ffe3 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp25.java @@ -0,0 +1,103 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!sk") +public final class TextureOp25 extends TextureOp { + + @OriginalMember(owner = "client!sk", name = "Y", descriptor = "I") + private int anInt5197 = 4096; + + @OriginalMember(owner = "client!sk", name = "X", descriptor = "I") + private int anInt5196 = 4096; + + @OriginalMember(owner = "client!sk", name = "fb", descriptor = "I") + private int anInt5201 = 4096; + + @OriginalMember(owner = "client!sk", name = "W", descriptor = "I") + private int anInt5195 = 409; + + @OriginalMember(owner = "client!sk", name = "V", descriptor = "[I") + private final int[] anIntArray450 = new int[3]; + + @OriginalMember(owner = "client!sk", name = "", descriptor = "()V") + public TextureOp25() { + super(1, false); + } + + @OriginalMember(owner = "client!sk", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt5195 = arg1.g2(); + } else if (arg0 == 1) { + this.anInt5196 = arg1.g2(); + } else if (arg0 == 2) { + this.anInt5197 = arg1.g2(); + } else if (arg0 == 3) { + this.anInt5201 = arg1.g2(); + } else if (arg0 == 4) { + @Pc(65) int local65 = arg1.g3(); + this.anIntArray450[2] = local65 >> 12 & 0x0; + this.anIntArray450[1] = local65 >> 4 & 0xFF0; + this.anIntArray450[0] = (local65 & 0xFF0000) << 4; + } + } + + @OriginalMember(owner = "client!sk", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(15) int[][] local15 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(25) int[][] local25 = this.getChildColorOutput(arg0, 0); + @Pc(29) int[] local29 = local25[0]; + @Pc(33) int[] local33 = local25[1]; + @Pc(37) int[] local37 = local25[2]; + @Pc(41) int[] local41 = local15[0]; + @Pc(45) int[] local45 = local15[1]; + @Pc(49) int[] local49 = local15[2]; + for (@Pc(51) int local51 = 0; local51 < Texture.width; local51++) { + @Pc(58) int local58 = local29[local51]; + @Pc(66) int local66 = local58 - this.anIntArray450[0]; + if (local66 < 0) { + local66 = -local66; + } + if (this.anInt5195 < local66) { + local41[local51] = local58; + local45[local51] = local33[local51]; + local49[local51] = local37[local51]; + } else { + @Pc(100) int local100 = local33[local51]; + local66 = local100 - this.anIntArray450[1]; + if (local66 < 0) { + local66 = -local66; + } + if (local66 > this.anInt5195) { + local41[local51] = local58; + local45[local51] = local100; + local49[local51] = local37[local51]; + } else { + @Pc(141) int local141 = local37[local51]; + local66 = local141 - this.anIntArray450[2]; + if (local66 < 0) { + local66 = -local66; + } + if (local66 <= this.anInt5195) { + local41[local51] = this.anInt5201 * local58 >> 12; + local45[local51] = this.anInt5197 * local100 >> 12; + local49[local51] = this.anInt5196 * local141 >> 12; + } else { + local41[local51] = local58; + local45[local51] = local100; + local49[local51] = local141; + } + } + } + } + } + return local15; + } +} diff --git a/client/src/main/java/rt4/TextureOp27.java b/client/src/main/java/rt4/TextureOp27.java new file mode 100644 index 0000000..64d7b2e --- /dev/null +++ b/client/src/main/java/rt4/TextureOp27.java @@ -0,0 +1,110 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!d") +public final class TextureOp27 extends TextureOp { + + @OriginalMember(owner = "client!d", name = "U", descriptor = "[I") + private int[] anIntArray86; + + @OriginalMember(owner = "client!d", name = "W", descriptor = "[I") + private int[] anIntArray87; + + @OriginalMember(owner = "client!d", name = "Q", descriptor = "I") + private int anInt1234 = 0; + + @OriginalMember(owner = "client!d", name = "P", descriptor = "I") + private int anInt1233 = 10; + + @OriginalMember(owner = "client!d", name = "bb", descriptor = "I") + private int anInt1240 = 2048; + + @OriginalMember(owner = "client!d", name = "", descriptor = "()V") + public TextureOp27() { + super(0, true); + } + + @OriginalMember(owner = "client!d", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + this.method991(); + } + + @OriginalMember(owner = "client!d", name = "h", descriptor = "(I)V") + private void method991() { + @Pc(7) int local7 = 0; + this.anIntArray87 = new int[this.anInt1233 + 1]; + @Pc(23) int local23 = 4096 / this.anInt1233; + this.anIntArray86 = new int[this.anInt1233 + 1]; + @Pc(37) int local37 = this.anInt1240 * local23 >> 12; + for (@Pc(39) int local39 = 0; local39 < this.anInt1233; local39++) { + this.anIntArray86[local39] = local7; + this.anIntArray87[local39] = local7 + local37; + local7 += local23; + } + this.anIntArray86[this.anInt1233] = 4096; + this.anIntArray87[this.anInt1233] = this.anIntArray87[0] + 4096; + } + + @OriginalMember(owner = "client!d", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt1233 = arg1.g1(); + } else if (arg0 == 1) { + this.anInt1240 = arg1.g2(); + } else if (arg0 == 2) { + this.anInt1234 = arg1.g1(); + } + } + + @OriginalMember(owner = "client!d", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(28) int local28 = Texture.heightFractions[arg0]; + @Pc(36) int local36; + if (this.anInt1234 == 0) { + @Pc(34) short local34 = 0; + for (local36 = 0; local36 < this.anInt1233; local36++) { + if (this.anIntArray86[local36] <= local28 && local28 < this.anIntArray86[local36 + 1]) { + if (local28 < this.anIntArray87[local36]) { + local34 = 4096; + } + break; + } + } + ArrayUtils.fill(local19, 0, Texture.width, local34); + } else { + for (@Pc(85) int local85 = 0; local85 < Texture.width; local85++) { + @Pc(96) int local96 = Texture.widthFractions[local85]; + local36 = 0; + @Pc(101) int local101 = this.anInt1234; + if (local101 == 1) { + local36 = local96; + } else if (local101 == 2) { + local36 = (local96 + local28 - 4096 >> 1) + 2048; + } else if (local101 == 3) { + local36 = (local96 - local28 >> 1) + 2048; + } + @Pc(143) short local143 = 0; + for (local101 = 0; local101 < this.anInt1233; local101++) { + if (this.anIntArray86[local101] <= local36 && local36 < this.anIntArray86[local101 + 1]) { + if (local36 < this.anIntArray87[local101]) { + local143 = 4096; + } + break; + } + } + local19[local85] = local143; + } + } + } + return local19; + } +} diff --git a/client/src/main/java/rt4/TextureOp28.java b/client/src/main/java/rt4/TextureOp28.java new file mode 100644 index 0000000..160195e --- /dev/null +++ b/client/src/main/java/rt4/TextureOp28.java @@ -0,0 +1,331 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.util.Random; + +@OriginalClass("client!ol") +public final class TextureOp28 extends TextureOp { + + @OriginalMember(owner = "client!ol", name = "gb", descriptor = "I") + private int anInt4356; + + @OriginalMember(owner = "client!ol", name = "R", descriptor = "I") + private int anInt4346 = 819; + + @OriginalMember(owner = "client!ol", name = "ab", descriptor = "I") + private int anInt4351 = 0; + + @OriginalMember(owner = "client!ol", name = "Z", descriptor = "I") + private int anInt4350 = 2048; + + @OriginalMember(owner = "client!ol", name = "T", descriptor = "I") + private int anInt4347 = 1024; + + @OriginalMember(owner = "client!ol", name = "Q", descriptor = "I") + private int anInt4345 = 1024; + + @OriginalMember(owner = "client!ol", name = "cb", descriptor = "I") + private int anInt4353 = 409; + + @OriginalMember(owner = "client!ol", name = "kb", descriptor = "I") + private int anInt4360 = 1024; + + @OriginalMember(owner = "client!ol", name = "P", descriptor = "I") + private int anInt4344 = 1024; + + @OriginalMember(owner = "client!ol", name = "eb", descriptor = "I") + private int anInt4354 = 0; + + @OriginalMember(owner = "client!ol", name = "", descriptor = "()V") + public TextureOp28() { + super(0, true); + } + + @OriginalMember(owner = "client!ol", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + } + + @OriginalMember(owner = "client!ol", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (!this.monochromeImageCache.invalid) { + return local19; + } + @Pc(29) int[][] local29 = this.monochromeImageCache.method3446(); + @Pc(31) int local31 = 0; + @Pc(33) int local33 = 0; + @Pc(35) int local35 = 0; + @Pc(37) int local37 = 0; + @Pc(39) int local39 = 0; + @Pc(41) boolean local41 = true; + @Pc(43) boolean local43 = true; + @Pc(45) int local45 = 0; + @Pc(47) int local47 = 0; + @Pc(54) int local54 = Texture.width * this.anInt4345 >> 12; + @Pc(61) int local61 = Texture.width * this.anInt4350 >> 12; + @Pc(68) int local68 = this.anInt4346 * Texture.height >> 12; + @Pc(75) int local75 = Texture.height * this.anInt4353 >> 12; + if (local68 <= 1) { + return local29[arg0]; + } + @Pc(88) int local88 = Texture.width / local54 + 1; + this.anInt4356 = Texture.width / 8 * this.anInt4347 >> 12; + @Pc(102) int[][] local102 = new int[local88][3]; + @Pc(106) int[][] local106 = new int[local88][3]; + @Pc(113) Random local113 = new Random(this.anInt4354); + while (true) { + while (true) { + @Pc(123) int local123 = local54 + RandomUtils.nextInt(local61 - local54, local113); + @Pc(133) int local133 = RandomUtils.nextInt(local68 - local75, local113) + local75; + @Pc(137) int local137 = local31 + local123; + if (Texture.width < local137) { + local137 = Texture.width; + local123 = Texture.width - local31; + } + @Pc(158) int local158; + @Pc(160) int local160; + if (local43) { + local158 = 0; + } else { + @Pc(150) int local150 = local39; + @Pc(154) int[] local154 = local102[local39]; + local158 = local154[2]; + local160 = 0; + @Pc(164) int local164 = local35 + local137; + if (local164 < 0) { + local164 += Texture.width; + } + if (Texture.width < local164) { + local164 -= Texture.width; + } + while (true) { + @Pc(186) int[] local186 = local102[local150]; + if (local164 >= local186[0] && local186[1] >= local164) { + if (local39 != local150) { + @Pc(224) int local224 = local35 + local31; + if (local224 < 0) { + local224 += Texture.width; + } + if (local224 > Texture.width) { + local224 -= Texture.width; + } + @Pc(243) int local243; + @Pc(258) int[] local258; + for (local243 = 1; local243 <= local160; local243++) { + local258 = local102[(local39 + local243) % local45]; + local158 = Math.max(local158, local258[2]); + } + for (local243 = 0; local243 <= local160; local243++) { + local258 = local102[(local39 + local243) % local45]; + @Pc(285) int local285 = local258[2]; + if (local285 != local158) { + @Pc(297) int local297 = local258[0]; + @Pc(301) int local301 = local258[1]; + @Pc(312) int local312; + @Pc(316) int local316; + if (local164 > local224) { + local312 = Math.max(local224, local297); + local316 = Math.min(local164, local301); + } else if (local297 == 0) { + local316 = Math.min(local164, local301); + local312 = 0; + } else { + local312 = Math.max(local224, local297); + local316 = Texture.width; + } + this.method3386(local285, local113, local33 + local312, -local312 + local316, local158 - local285, local29); + } + } + } + local39 = local150; + break; + } + local160++; + local150++; + if (local150 >= local45) { + local150 = 0; + } + } + } + if (Texture.height >= local158 + local133) { + local41 = false; + } else { + local133 = Texture.height - local158; + } + @Pc(407) int[] local407; + if (local137 == Texture.width) { + this.method3386(local158, local113, local37 + local31, local123, local133, local29); + if (local41) { + return local19; + } + local41 = true; + local33 = local37; + local43 = false; + local407 = local106[local47++]; + local407[0] = local31; + local39 = 0; + local45 = local47; + local47 = 0; + local407[2] = local133 + local158; + local407[1] = local137; + local37 = RandomUtils.nextInt(Texture.width, local113); + local35 = local37 - local33; + @Pc(439) int[][] local439 = local102; + local31 = 0; + local102 = local106; + local160 = local35; + if (local35 < 0) { + local160 = local35 + Texture.width; + } + local106 = local439; + if (Texture.width < local160) { + local160 -= Texture.width; + } + while (true) { + @Pc(469) int[] local469 = local102[local39]; + if (local469[0] <= local160 && local469[1] >= local160) { + break; + } + local39++; + if (local45 <= local39) { + local39 = 0; + } + } + } else { + local407 = local106[local47++]; + local407[1] = local137; + local407[2] = local133 + local158; + local407[0] = local31; + this.method3386(local158, local113, local31 + local37, local123, local133, local29); + local31 = local137; + } + } + } + } + + @OriginalMember(owner = "client!ol", name = "a", descriptor = "(ILjava/util/Random;IIBI[[I)V") + private void method3386(@OriginalArg(0) int arg0, @OriginalArg(1) Random arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int[][] arg5) { + @Pc(26) int local26 = this.anInt4360 > 0 ? 4096 - RandomUtils.nextInt(this.anInt4360, arg1) : 4096; + @Pc(34) int local34 = this.anInt4344 * this.anInt4356 >> 12; + @Pc(47) int local47 = this.anInt4356 - (local34 > 0 ? RandomUtils.nextInt(local34, arg1) : 0); + if (Texture.width <= arg2) { + arg2 -= Texture.width; + } + @Pc(68) int local68; + @Pc(72) int local72; + if (local47 > 0) { + if (arg4 <= 0 || arg3 <= 0) { + return; + } + local68 = arg3 / 2; + local72 = arg4 / 2; + @Pc(79) int local79 = local68 < local47 ? local68 : local47; + @Pc(90) int local90 = local72 >= local47 ? local47 : local72; + @Pc(97) int local97 = arg3 - local79 * 2; + @Pc(101) int local101 = local79 + arg2; + for (@Pc(103) int local103 = 0; local103 < arg4; local103++) { + @Pc(112) int[] local112 = arg5[arg0 + local103]; + @Pc(125) int local125; + @Pc(133) int local133; + @Pc(142) int local142; + if (local103 < local90) { + local125 = local103 * local26 / local90; + if (this.anInt4351 == 0) { + for (local133 = 0; local133 < local79; local133++) { + local142 = local133 * local26 / local79; + local112[Texture.widthMask & local133 + arg2] = local112[arg3 + arg2 - local133 - 1 & Texture.widthMask] = local142 * local125 >> 12; + } + } else { + for (local133 = 0; local133 < local79; local133++) { + local142 = local133 * local26 / local79; + local112[Texture.widthMask & arg2 + local133] = local112[Texture.widthMask & arg3 + arg2 - local133 - 1] = local125 <= local142 ? local125 : local142; + } + } + if (Texture.width >= local97 + local101) { + ArrayUtils.fill(local112, local101, local97, local125); + } else { + local133 = Texture.width - local101; + ArrayUtils.fill(local112, local101, local133, local125); + ArrayUtils.fill(local112, 0, local97 - local133, local125); + } + } else { + local125 = arg4 - local103 - 1; + if (local125 >= local90) { + for (local133 = 0; local133 < local79; local133++) { + local112[Texture.widthMask & arg2 + local133] = local112[arg2 + arg3 - local133 - 1 & Texture.widthMask] = local26 * local133 / local79; + } + if (local101 + local97 > Texture.width) { + local133 = Texture.width - local101; + ArrayUtils.fill(local112, local101, local133, local26); + ArrayUtils.fill(local112, 0, local97 - local133, local26); + } else { + ArrayUtils.fill(local112, local101, local97, local26); + } + } else { + local133 = local125 * local26 / local90; + @Pc(288) int local288; + if (this.anInt4351 == 0) { + for (local142 = 0; local142 < local79; local142++) { + local288 = local26 * local142 / local79; + local112[Texture.widthMask & arg2 + local142] = local112[Texture.widthMask & arg2 + arg3 - local142 - 1] = local288 * local133 >> 12; + } + } else { + for (local142 = 0; local142 < local79; local142++) { + local288 = local142 * local26 / local79; + local112[arg2 + local142 & Texture.widthMask] = local112[arg3 + arg2 - local142 - 1 & Texture.widthMask] = local133 <= local288 ? local133 : local288; + } + } + if (local97 + local101 > Texture.width) { + local142 = Texture.width - local101; + ArrayUtils.fill(local112, local101, local142, local133); + ArrayUtils.fill(local112, 0, local97 - local142, local133); + } else { + ArrayUtils.fill(local112, local101, local97, local133); + } + } + } + } + } else if (Texture.width >= arg2 + arg3) { + for (local68 = 0; local68 < arg4; local68++) { + ArrayUtils.fill(arg5[arg0 + local68], arg2, arg3, local26); + } + } else { + local68 = Texture.width - arg2; + for (local72 = 0; local72 < arg4; local72++) { + @Pc(522) int[] local522 = arg5[local72 + arg0]; + ArrayUtils.fill(local522, arg2, local68, local26); + ArrayUtils.fill(local522, 0, arg3 - local68, local26); + } + } + } + + @OriginalMember(owner = "client!ol", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt4354 = arg1.g1(); + } else if (arg0 == 1) { + this.anInt4345 = arg1.g2(); + } else if (arg0 == 2) { + this.anInt4350 = arg1.g2(); + } else if (arg0 == 3) { + this.anInt4353 = arg1.g2(); + } else if (arg0 == 4) { + this.anInt4346 = arg1.g2(); + } else if (arg0 == 5) { + this.anInt4347 = arg1.g2(); + } else if (arg0 == 6) { + this.anInt4351 = arg1.g1(); + } else if (arg0 == 7) { + this.anInt4344 = arg1.g2(); + } else if (arg0 == 8) { + this.anInt4360 = arg1.g2(); + } + } +} diff --git a/client/src/main/java/rt4/TextureOp29.java b/client/src/main/java/rt4/TextureOp29.java new file mode 100644 index 0000000..73ea927 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp29.java @@ -0,0 +1,316 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!si") +public final class TextureOp29 extends TextureOp { + + @OriginalMember(owner = "client!sd", name = "S", descriptor = "I") + public static int anInt5063 = 100; + @OriginalMember(owner = "client!ic", name = "j", descriptor = "I") + public static int anInt2869 = 100; + @OriginalMember(owner = "client!nj", name = "i", descriptor = "I") + public static int anInt4164 = 0; + @OriginalMember(owner = "client!vl", name = "h", descriptor = "I") + public static int anInt5773 = 0; + @OriginalMember(owner = "client!si", name = "U", descriptor = "[Lclient!kf;") + private TextureOp29SubOp[] aClass18Array1; + + @OriginalMember(owner = "client!si", name = "", descriptor = "()V") + public TextureOp29() { + super(0, true); + } + + @OriginalMember(owner = "client!id", name = "a", descriptor = "(IIBII)V") + public static void method2263(@OriginalArg(3) int arg0, @OriginalArg(4) int arg1) { + anInt5063 = arg1; + anInt4164 = 0; + anInt5773 = 0; + anInt2869 = arg0; + } + + @OriginalMember(owner = "client!ed", name = "a", descriptor = "(ZIIII)V") + public static void method1306(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + if (arg3 >= anInt4164 && arg3 <= anInt5063) { + @Pc(22) int local22 = IntUtils.clamp(anInt2869, arg1, anInt5773); + @Pc(28) int local28 = IntUtils.clamp(anInt2869, arg0, anInt5773); + TextureOp29SubOp4.method2054(local22, arg3, local28, arg2); + } + } + + @OriginalMember(owner = "client!ta", name = "a", descriptor = "(IIZII)V") + public static void method4019(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + if (arg3 >= anInt5773 && arg3 <= anInt2869) { + @Pc(15) int local15 = IntUtils.clamp(anInt5063, arg0, anInt4164); + @Pc(21) int local21 = IntUtils.clamp(anInt5063, arg2, anInt4164); + TextureOp29SubOp4.fillRange(arg1, arg3, local21, local15); + } + } + + @OriginalMember(owner = "client!sk", name = "a", descriptor = "(IIIIII)V") + public static void method3982(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + @Pc(15) int local15 = arg4 - arg2; + @Pc(19) int local19 = arg1 - arg3; + if (local15 == 0) { + if (local19 != 0) { + method1306(arg1, arg3, arg0, arg2); + } + } else if (local19 == 0) { + method4019(arg2, arg0, arg4, arg3); + } else { + @Pc(50) int local50 = (local19 << 12) / local15; + @Pc(59) int local59 = arg3 - (local50 * arg2 >> 12); + @Pc(68) int local68; + @Pc(76) int local76; + if (anInt4164 > arg2) { + local68 = anInt4164; + local76 = (anInt4164 * local50 >> 12) + local59; + } else if (arg2 > anInt5063) { + local76 = (anInt5063 * local50 >> 12) + local59; + local68 = anInt5063; + } else { + local68 = arg2; + local76 = arg3; + } + @Pc(109) int local109; + @Pc(118) int local118; + if (arg4 < anInt4164) { + local109 = anInt4164; + local118 = local59 + (local50 * anInt4164 >> 12); + } else if (anInt5063 < arg4) { + local109 = anInt5063; + local118 = local59 + (local50 * anInt5063 >> 12); + } else { + local118 = arg1; + local109 = arg4; + } + if (anInt5773 > local118) { + local109 = (anInt5773 - local59 << 12) / local50; + local118 = anInt5773; + } else if (local118 > anInt2869) { + local118 = anInt2869; + local109 = (anInt2869 - local59 << 12) / local50; + } + if (local76 < anInt5773) { + local76 = anInt5773; + local68 = (anInt5773 - local59 << 12) / local50; + } else if (anInt2869 < local76) { + local76 = anInt2869; + local68 = (anInt2869 - local59 << 12) / local50; + } + TextureOp29SubOp4.method4547(arg0, local118, local76, local109, local68); + } + } + + @OriginalMember(owner = "client!sk", name = "a", descriptor = "(IIIIBIII)V") + public static void method3981(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6) { + @Pc(7) int local7 = 0; + @Pc(12) int local12 = arg0 - arg3; + @Pc(14) int local14 = 0; + @Pc(16) int local16 = arg6; + @Pc(20) int local20 = arg6 * arg6; + @Pc(25) int local25 = arg6 - arg3; + @Pc(29) int local29 = arg0 * arg0; + @Pc(33) int local33 = local20 << 1; + @Pc(37) int local37 = local25 * local25; + @Pc(41) int local41 = local12 * local12; + @Pc(45) int local45 = local29 << 1; + @Pc(49) int local49 = local37 << 1; + @Pc(53) int local53 = local41 << 1; + @Pc(57) int local57 = local25 << 1; + @Pc(61) int local61 = arg6 << 1; + @Pc(70) int local70 = local33 + local29 * (1 - local61); + @Pc(79) int local79 = local20 - (local61 - 1) * local45; + @Pc(88) int local88 = local49 + local41 * (1 - local57); + @Pc(96) int local96 = local37 - local53 * (local57 - 1); + @Pc(100) int local100 = local20 << 2; + @Pc(104) int local104 = local29 << 2; + @Pc(108) int local108 = local37 << 2; + @Pc(112) int local112 = local33 * 3; + @Pc(118) int local118 = (local61 - 3) * local45; + @Pc(130) int local130 = local41 << 2; + @Pc(134) int local134 = local49 * 3; + @Pc(140) int local140 = (local57 - 3) * local53; + @Pc(146) int local146 = (arg6 - 1) * local104; + @Pc(148) int local148 = local108; + @Pc(150) int local150 = local100; + @Pc(156) int local156 = (local25 - 1) * local130; + @Pc(174) int local174; + @Pc(183) int local183; + @Pc(192) int local192; + @Pc(201) int local201; + if (arg4 >= anInt5773 && anInt2869 >= arg4) { + @Pc(166) int[] local166 = TextureOp29SubOp4.anIntArrayArray10[arg4]; + local174 = IntUtils.clamp(anInt5063, arg5 - arg0, anInt4164); + local183 = IntUtils.clamp(anInt5063, arg5 + arg0, anInt4164); + local192 = IntUtils.clamp(anInt5063, arg5 - local12, anInt4164); + local201 = IntUtils.clamp(anInt5063, arg5 + local12, anInt4164); + ArrayUtils.fillRange(local166, local174, local192, arg2); + ArrayUtils.fillRange(local166, local192, local201, arg1); + ArrayUtils.fillRange(local166, local201, local183, arg2); + } + while (local16 > 0) { + if (local70 < 0) { + while (local70 < 0) { + local70 += local112; + local112 += local100; + local7++; + local79 += local150; + local150 += local100; + } + } + @Pc(255) boolean local255 = local16 <= local25; + if (local79 < 0) { + local79 += local150; + local70 += local112; + local7++; + local150 += local100; + local112 += local100; + } + if (local255) { + if (local88 < 0) { + while (local88 < 0) { + local14++; + local96 += local148; + local148 += local108; + local88 += local134; + local134 += local108; + } + } + if (local96 < 0) { + local14++; + local96 += local148; + local88 += local134; + local148 += local108; + local134 += local108; + } + local88 += -local156; + local156 -= local130; + local96 += -local140; + local140 -= local130; + } + local79 += -local118; + local70 += -local146; + local146 -= local104; + local118 -= local104; + local16--; + local183 = arg4 + local16; + local174 = arg4 - local16; + if (anInt5773 <= local183 && anInt2869 >= local174) { + local192 = IntUtils.clamp(anInt5063, arg5 + local7, anInt4164); + local201 = IntUtils.clamp(anInt5063, arg5 - local7, anInt4164); + if (local255) { + @Pc(404) int local404 = IntUtils.clamp(anInt5063, arg5 + local14, anInt4164); + @Pc(412) int local412 = IntUtils.clamp(anInt5063, arg5 - local14, anInt4164); + @Pc(420) int[] local420; + if (anInt5773 <= local174) { + local420 = TextureOp29SubOp4.anIntArrayArray10[local174]; + ArrayUtils.fillRange(local420, local201, local412, arg2); + ArrayUtils.fillRange(local420, local412, local404, arg1); + ArrayUtils.fillRange(local420, local404, local192, arg2); + } + if (local183 <= anInt2869) { + local420 = TextureOp29SubOp4.anIntArrayArray10[local183]; + ArrayUtils.fillRange(local420, local201, local412, arg2); + ArrayUtils.fillRange(local420, local412, local404, arg1); + ArrayUtils.fillRange(local420, local404, local192, arg2); + } + } else { + if (anInt5773 <= local174) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local174], local201, local192, arg2); + } + if (anInt2869 >= local183) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local183], local201, local192, arg2); + } + } + } + } + } + + @OriginalMember(owner = "client!si", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(13) int[] local13 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + this.method3934(this.monochromeImageCache.method3446()); + } + return local13; + } + + @OriginalMember(owner = "client!si", name = "a", descriptor = "(I[[I)V") + private void method3934(@OriginalArg(1) int[][] arg0) { + @Pc(7) int local7 = Texture.height; + @Pc(9) int local9 = Texture.width; + TextureOp29SubOp4.method1751(arg0); + method2263(Texture.heightMask, Texture.widthMask); + if (this.aClass18Array1 == null) { + return; + } + for (@Pc(23) int local23 = 0; local23 < this.aClass18Array1.length; local23++) { + @Pc(33) TextureOp29SubOp local33 = this.aClass18Array1[local23]; + @Pc(36) int local36 = local33.anInt5228; + @Pc(39) int local39 = local33.anInt5229; + if (local36 >= 0) { + if (local39 < 0) { + local33.method4013(local9, local7); + } else { + local33.method4007(local7, local9); + } + } else if (local39 >= 0) { + local33.method4009(local7, local9); + } + } + } + + @OriginalMember(owner = "client!si", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.aClass18Array1 = new TextureOp29SubOp[arg1.g1()]; + for (@Pc(11) int local11 = 0; local11 < this.aClass18Array1.length; local11++) { + @Pc(24) int local24 = arg1.g1(); + if (local24 == 0) { + this.aClass18Array1[local11] = TextureOp29SubOp1.create(arg1); + } else if (local24 == 1) { + this.aClass18Array1[local11] = TextureOp29SubOp3.create(arg1); + } else if (local24 == 2) { + this.aClass18Array1[local11] = TextureOp29SubOp4.create(arg1); + } else if (local24 == 3) { + this.aClass18Array1[local11] = TextureOp29SubOp2.create(arg1); + } + } + } else if (arg0 == 1) { + this.monochrome = arg1.g1() == 1; + } + } + + @OriginalMember(owner = "client!si", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(14) int[][] local14 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(20) int local20 = Texture.width; + @Pc(22) int local22 = Texture.height; + @Pc(26) int[][] local26 = new int[local22][local20]; + @Pc(31) int[][][] local31 = this.colorImageCache.get(); + this.method3934(local26); + for (@Pc(37) int local37 = 0; local37 < Texture.height; local37++) { + @Pc(44) int[] local44 = local26[local37]; + @Pc(48) int[][] local48 = local31[local37]; + @Pc(52) int[] local52 = local48[0]; + @Pc(56) int[] local56 = local48[1]; + @Pc(60) int[] local60 = local48[2]; + for (@Pc(62) int local62 = 0; local62 < Texture.width; local62++) { + @Pc(73) int local73 = local44[local62]; + local60[local62] = (local73 & 0xFF) << 4; + local56[local62] = local73 >> 4 & 0xFF0; + local52[local62] = local73 >> 12 & 0xFF0; + } + } + } + return local14; + } +} diff --git a/client/src/main/java/rt4/TextureOp29SubOp.java b/client/src/main/java/rt4/TextureOp29SubOp.java new file mode 100644 index 0000000..82ce18d --- /dev/null +++ b/client/src/main/java/rt4/TextureOp29SubOp.java @@ -0,0 +1,34 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!kf") +public abstract class TextureOp29SubOp { + + @OriginalMember(owner = "client!kf", name = "e", descriptor = "I") + public final int anInt5229; + + @OriginalMember(owner = "client!kf", name = "g", descriptor = "I") + protected final int anInt5231; + + @OriginalMember(owner = "client!kf", name = "b", descriptor = "I") + public final int anInt5228; + + @OriginalMember(owner = "client!kf", name = "", descriptor = "(III)V") + protected TextureOp29SubOp(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + this.anInt5229 = arg1; + this.anInt5231 = arg2; + this.anInt5228 = arg0; + } + + @OriginalMember(owner = "client!kf", name = "a", descriptor = "(III)V") + public abstract void method4007(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1); + + @OriginalMember(owner = "client!kf", name = "a", descriptor = "(IZI)V") + public abstract void method4009(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1); + + @OriginalMember(owner = "client!kf", name = "c", descriptor = "(III)V") + public abstract void method4013(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1); +} diff --git a/client/src/main/java/rt4/TextureOp29SubOp1.java b/client/src/main/java/rt4/TextureOp29SubOp1.java new file mode 100644 index 0000000..177e086 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp29SubOp1.java @@ -0,0 +1,56 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ci") +public final class TextureOp29SubOp1 extends TextureOp29SubOp { + + @OriginalMember(owner = "client!ci", name = "s", descriptor = "I") + private final int anInt1015; + + @OriginalMember(owner = "client!ci", name = "o", descriptor = "I") + private final int anInt1012; + + @OriginalMember(owner = "client!ci", name = "m", descriptor = "I") + private final int anInt1010; + + @OriginalMember(owner = "client!ci", name = "v", descriptor = "I") + private final int anInt1017; + + @OriginalMember(owner = "client!ci", name = "", descriptor = "(IIIIII)V") + public TextureOp29SubOp1(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + super(-1, arg4, arg5); + this.anInt1015 = arg3; + this.anInt1012 = arg1; + this.anInt1010 = arg0; + this.anInt1017 = arg2; + } + + @OriginalMember(owner = "client!al", name = "a", descriptor = "(ILclient!wa;)Lclient!ci;") + public static TextureOp29SubOp1 create(@OriginalArg(1) Buffer arg0) { + return new TextureOp29SubOp1(arg0.g2b(), arg0.g2b(), arg0.g2b(), arg0.g2b(), arg0.g3(), arg0.g1()); + } + + @OriginalMember(owner = "client!ci", name = "a", descriptor = "(III)V") + @Override + public final void method4007(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + } + + @OriginalMember(owner = "client!ci", name = "c", descriptor = "(III)V") + @Override + public final void method4013(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + } + + @OriginalMember(owner = "client!ci", name = "a", descriptor = "(IZI)V") + @Override + public final void method4009(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(10) int local10 = arg1 * this.anInt1010 >> 12; + @Pc(25) int local25 = this.anInt1017 * arg1 >> 12; + @Pc(32) int local32 = arg0 * this.anInt1012 >> 12; + @Pc(39) int local39 = arg0 * this.anInt1015 >> 12; + TextureOp29.method3982(this.anInt5229, local39, local10, local32, local25); + } +} diff --git a/client/src/main/java/rt4/TextureOp29SubOp2.java b/client/src/main/java/rt4/TextureOp29SubOp2.java new file mode 100644 index 0000000..1fe86a8 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp29SubOp2.java @@ -0,0 +1,571 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!kc") +public final class TextureOp29SubOp2 extends TextureOp29SubOp { + + @OriginalMember(owner = "client!th", name = "o", descriptor = "[I") + public static int[] anIntArray522; + @OriginalMember(owner = "client!kc", name = "B", descriptor = "I") + private final int anInt3168; + + @OriginalMember(owner = "client!kc", name = "y", descriptor = "I") + private final int anInt3165; + + @OriginalMember(owner = "client!kc", name = "v", descriptor = "I") + private final int anInt3163; + + @OriginalMember(owner = "client!kc", name = "m", descriptor = "I") + private final int anInt3159; + + @OriginalMember(owner = "client!kc", name = "", descriptor = "(IIIIIII)V") + public TextureOp29SubOp2(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6) { + super(arg4, arg5, arg6); + this.anInt3168 = arg3; + this.anInt3165 = arg0; + this.anInt3163 = arg1; + this.anInt3159 = arg2; + } + + @OriginalMember(owner = "client!kl", name = "a", descriptor = "(Lclient!wa;B)Lclient!kc;") + public static TextureOp29SubOp2 create(@OriginalArg(0) Buffer arg0) { + return new TextureOp29SubOp2(arg0.g2b(), arg0.g2b(), arg0.g2b(), arg0.g2b(), arg0.g3(), arg0.g3(), arg0.g1()); + } + + @OriginalMember(owner = "client!fn", name = "a", descriptor = "(ZIIIIIII)V") + public static void method1623(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6) { + if (arg3 == arg6) { + method2826(arg0, arg2, arg5, arg6, arg1, arg4); + } else if (arg1 - arg6 >= TextureOp29.anInt4164 && arg6 + arg1 <= TextureOp29.anInt5063 && TextureOp29.anInt5773 <= arg2 - arg3 && TextureOp29.anInt2869 >= arg2 + arg3) { + method4594(arg5, arg1, arg2, arg4, arg6, arg3, arg0); + } else { + TextureOp29.method3981(arg6, arg5, arg4, arg0, arg2, arg1, arg3); + } + } + + @OriginalMember(owner = "client!wb", name = "a", descriptor = "(IIIIIIII)V") + public static void method4594(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6) { + @Pc(7) int local7 = 0; + @Pc(9) int local9 = arg5; + @Pc(11) int local11 = 0; + @Pc(16) int local16 = arg4 - arg6; + @Pc(20) int local20 = arg4 * arg4; + @Pc(25) int local25 = arg5 - arg6; + @Pc(29) int local29 = arg5 * arg5; + @Pc(33) int local33 = local25 * local25; + @Pc(37) int local37 = local29 << 1; + @Pc(41) int local41 = local20 << 1; + @Pc(45) int local45 = local33 << 1; + @Pc(49) int local49 = local16 * local16; + @Pc(53) int local53 = local49 << 1; + @Pc(57) int local57 = arg5 << 1; + @Pc(61) int local61 = local25 << 1; + @Pc(70) int local70 = local29 - (local57 - 1) * local41; + @Pc(80) int local80 = local49 * (1 - local61) + local45; + @Pc(89) int local89 = (1 - local57) * local20 + local37; + @Pc(93) int local93 = local20 << 2; + @Pc(102) int local102 = local33 - local53 * (local61 - 1); + @Pc(106) int local106 = local49 << 2; + @Pc(110) int local110 = local29 << 2; + @Pc(114) int local114 = local33 << 2; + @Pc(120) int local120 = (local57 - 3) * local41; + @Pc(124) int local124 = local37 * 3; + @Pc(130) int local130 = (local61 - 3) * local53; + @Pc(134) int local134 = local45 * 3; + @Pc(136) int local136 = local110; + @Pc(138) int local138 = local114; + @Pc(144) int local144 = (local25 - 1) * local106; + @Pc(162) int local162 = (arg5 - 1) * local93; + @Pc(166) int[] local166 = TextureOp29SubOp4.anIntArrayArray10[arg2]; + ArrayUtils.fillRange(local166, arg1 - arg4, -local16 + arg1, arg3); + ArrayUtils.fillRange(local166, arg1 - local16, arg1 - -local16, arg0); + ArrayUtils.fillRange(local166, arg1 + local16, arg4 + arg1, arg3); + while (local9 > 0) { + if (local89 < 0) { + while (local89 < 0) { + local70 += local136; + local89 += local124; + local7++; + local136 += local110; + local124 += local110; + } + } + if (local70 < 0) { + local89 += local124; + local7++; + local124 += local110; + local70 += local136; + local136 += local110; + } + @Pc(258) boolean local258 = local9 <= local25; + if (local258) { + if (local80 < 0) { + while (local80 < 0) { + local80 += local134; + local134 += local114; + local11++; + local102 += local138; + local138 += local114; + } + } + if (local102 < 0) { + local80 += local134; + local11++; + local134 += local114; + local102 += local138; + local138 += local114; + } + local102 += -local130; + local130 -= local106; + local80 += -local144; + local144 -= local106; + } + local89 += -local162; + local70 += -local120; + local120 -= local93; + local9--; + @Pc(348) int local348 = arg2 - local9; + @Pc(352) int local352 = local7 + arg1; + local162 -= local93; + @Pc(360) int local360 = local9 + arg2; + @Pc(365) int local365 = arg1 - local7; + if (local258) { + @Pc(371) int local371 = arg1 + local11; + @Pc(376) int local376 = arg1 - local11; + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local348], local365, local376, arg3); + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local348], local376, local371, arg0); + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local348], local371, local352, arg3); + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local360], local365, local376, arg3); + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local360], local376, local371, arg0); + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local360], local371, local352, arg3); + } else { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local348], local365, local352, arg3); + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local360], local365, local352, arg3); + } + } + } + + @OriginalMember(owner = "client!ma", name = "a", descriptor = "(IIBIIII)V") + public static void method2826(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5) { + if (arg4 - arg3 >= TextureOp29.anInt4164 && TextureOp29.anInt5063 >= arg4 + arg3 && TextureOp29.anInt5773 <= arg1 - arg3 && TextureOp29.anInt2869 >= arg3 + arg1) { + method120(arg5, arg0, arg1, arg2, arg3, arg4); + } else { + method4670(arg2, arg1, arg3, arg5, arg0, arg4); + } + } + + @OriginalMember(owner = "client!aj", name = "a", descriptor = "(IIIZIII)V") + public static void method120(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5) { + method4278(arg4); + @Pc(8) int local8 = arg4 - arg1; + @Pc(10) int local10 = 0; + if (local8 < 0) { + local8 = 0; + } + @Pc(21) int local21 = -arg4; + @Pc(23) int local23 = arg4; + @Pc(25) int local25 = local8; + @Pc(28) int local28 = -local8; + @Pc(30) int local30 = -1; + @Pc(34) int[] local34 = TextureOp29SubOp4.anIntArrayArray10[arg2]; + @Pc(39) int local39 = arg5 + local8; + @Pc(41) int local41 = -1; + @Pc(46) int local46 = arg5 - local8; + ArrayUtils.fillRange(local34, arg5 - arg4, local46, arg0); + ArrayUtils.fillRange(local34, local46, local39, arg3); + ArrayUtils.fillRange(local34, local39, arg5 + arg4, arg0); + while (local10 < local23) { + local30 += 2; + local28 += local30; + if (local28 >= 0 && local25 >= 1) { + anIntArray522[local25] = local10; + local25--; + local28 -= local25 << 1; + } + local10++; + local41 += 2; + local21 += local41; + @Pc(142) int[] local142; + @Pc(149) int[] local149; + @Pc(162) int local162; + @Pc(158) int local158; + @Pc(154) int local154; + @Pc(171) int local171; + @Pc(167) int local167; + if (local21 >= 0) { + local23--; + local21 -= local23 << 1; + if (local8 > local23) { + local142 = TextureOp29SubOp4.anIntArrayArray10[local23 + arg2]; + local149 = TextureOp29SubOp4.anIntArrayArray10[arg2 - local23]; + local154 = arg5 - local10; + local158 = local10 + arg5; + local162 = anIntArray522[local23]; + local167 = arg5 - local162; + local171 = local162 + arg5; + ArrayUtils.fillRange(local142, local154, local167, arg0); + ArrayUtils.fillRange(local142, local167, local171, arg3); + ArrayUtils.fillRange(local142, local171, local158, arg0); + ArrayUtils.fillRange(local149, local154, local167, arg0); + ArrayUtils.fillRange(local149, local167, local171, arg3); + ArrayUtils.fillRange(local149, local171, local158, arg0); + } else { + local142 = TextureOp29SubOp4.anIntArrayArray10[arg2 + local23]; + local149 = TextureOp29SubOp4.anIntArrayArray10[arg2 - local23]; + local162 = local10 + arg5; + local158 = arg5 - local10; + ArrayUtils.fillRange(local142, local158, local162, arg0); + ArrayUtils.fillRange(local149, local158, local162, arg0); + } + } + local142 = TextureOp29SubOp4.anIntArrayArray10[arg2 + local10]; + local149 = TextureOp29SubOp4.anIntArrayArray10[arg2 - local10]; + local162 = local23 + arg5; + local158 = arg5 - local23; + if (local8 <= local10) { + ArrayUtils.fillRange(local142, local158, local162, arg0); + ArrayUtils.fillRange(local149, local158, local162, arg0); + } else { + local154 = local10 <= local25 ? local25 : anIntArray522[local10]; + local171 = local154 + arg5; + local167 = arg5 - local154; + ArrayUtils.fillRange(local142, local158, local167, arg0); + ArrayUtils.fillRange(local142, local167, local171, arg3); + ArrayUtils.fillRange(local142, local171, local162, arg0); + ArrayUtils.fillRange(local149, local158, local167, arg0); + ArrayUtils.fillRange(local149, local167, local171, arg3); + ArrayUtils.fillRange(local149, local171, local162, arg0); + } + } + } + + @OriginalMember(owner = "client!wl", name = "a", descriptor = "(IBIIIII)V") + public static void method4670(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5) { + @Pc(18) int local18 = arg2 - arg4; + method4278(arg2); + @Pc(23) int local23 = 0; + if (local18 < 0) { + local18 = 0; + } + @Pc(32) int local32 = arg2; + @Pc(35) int local35 = -arg2; + @Pc(38) int local38 = -local18; + @Pc(40) int local40 = local18; + @Pc(42) int local42 = -1; + @Pc(61) int local61; + @Pc(69) int local69; + @Pc(78) int local78; + @Pc(87) int local87; + if (arg1 >= TextureOp29.anInt5773 && TextureOp29.anInt2869 >= arg1) { + @Pc(52) int[] local52 = TextureOp29SubOp4.anIntArrayArray10[arg1]; + local61 = IntUtils.clamp(TextureOp29.anInt5063, arg5 - arg2, TextureOp29.anInt4164); + local69 = IntUtils.clamp(TextureOp29.anInt5063, arg2 + arg5, TextureOp29.anInt4164); + local78 = IntUtils.clamp(TextureOp29.anInt5063, arg5 - local18, TextureOp29.anInt4164); + local87 = IntUtils.clamp(TextureOp29.anInt5063, arg5 + local18, TextureOp29.anInt4164); + ArrayUtils.fillRange(local52, local61, local78, arg3); + ArrayUtils.fillRange(local52, local78, local87, arg0); + ArrayUtils.fillRange(local52, local87, local69, arg3); + } + @Pc(107) int local107 = -1; + while (local23 < local32) { + local42 += 2; + local107 += 2; + local38 += local107; + local35 += local42; + if (local38 >= 0 && local40 >= 1) { + local40--; + anIntArray522[local40] = local23; + local38 -= local40 << 1; + } + local23++; + @Pc(264) int local264; + @Pc(273) int local273; + @Pc(280) int[] local280; + @Pc(161) int local161; + if (local35 >= 0) { + local32--; + local35 -= local32 << 1; + local161 = arg1 - local32; + local61 = arg1 + local32; + if (TextureOp29.anInt5773 <= local61 && TextureOp29.anInt2869 >= local161) { + if (local32 >= local18) { + local69 = IntUtils.clamp(TextureOp29.anInt5063, local23 + arg5, TextureOp29.anInt4164); + local78 = IntUtils.clamp(TextureOp29.anInt5063, arg5 - local23, TextureOp29.anInt4164); + if (TextureOp29.anInt2869 >= local61) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local61], local78, local69, arg3); + } + if (local161 >= TextureOp29.anInt5773) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local161], local78, local69, arg3); + } + } else { + local69 = anIntArray522[local32]; + local78 = IntUtils.clamp(TextureOp29.anInt5063, local23 + arg5, TextureOp29.anInt4164); + local87 = IntUtils.clamp(TextureOp29.anInt5063, arg5 - local23, TextureOp29.anInt4164); + local264 = IntUtils.clamp(TextureOp29.anInt5063, arg5 + local69, TextureOp29.anInt4164); + local273 = IntUtils.clamp(TextureOp29.anInt5063, arg5 - local69, TextureOp29.anInt4164); + if (TextureOp29.anInt2869 >= local61) { + local280 = TextureOp29SubOp4.anIntArrayArray10[local61]; + ArrayUtils.fillRange(local280, local87, local273, arg3); + ArrayUtils.fillRange(local280, local273, local264, arg0); + ArrayUtils.fillRange(local280, local264, local78, arg3); + } + if (local161 >= TextureOp29.anInt5773) { + local280 = TextureOp29SubOp4.anIntArrayArray10[local161]; + ArrayUtils.fillRange(local280, local87, local273, arg3); + ArrayUtils.fillRange(local280, local273, local264, arg0); + ArrayUtils.fillRange(local280, local264, local78, arg3); + } + } + } + } + local161 = arg1 - local23; + local61 = arg1 + local23; + if (TextureOp29.anInt5773 <= local61 && TextureOp29.anInt2869 >= local161) { + local69 = arg5 + local32; + local78 = arg5 - local32; + if (local69 >= TextureOp29.anInt4164 && TextureOp29.anInt5063 >= local78) { + local69 = IntUtils.clamp(TextureOp29.anInt5063, local69, TextureOp29.anInt4164); + local78 = IntUtils.clamp(TextureOp29.anInt5063, local78, TextureOp29.anInt4164); + if (local23 < local18) { + local87 = local40 >= local23 ? local40 : anIntArray522[local23]; + local264 = IntUtils.clamp(TextureOp29.anInt5063, local87 + arg5, TextureOp29.anInt4164); + local273 = IntUtils.clamp(TextureOp29.anInt5063, arg5 - local87, TextureOp29.anInt4164); + if (TextureOp29.anInt2869 >= local61) { + local280 = TextureOp29SubOp4.anIntArrayArray10[local61]; + ArrayUtils.fillRange(local280, local78, local273, arg3); + ArrayUtils.fillRange(local280, local273, local264, arg0); + ArrayUtils.fillRange(local280, local264, local69, arg3); + } + if (local161 >= TextureOp29.anInt5773) { + local280 = TextureOp29SubOp4.anIntArrayArray10[local161]; + ArrayUtils.fillRange(local280, local78, local273, arg3); + ArrayUtils.fillRange(local280, local273, local264, arg0); + ArrayUtils.fillRange(local280, local264, local69, arg3); + } + } else { + if (TextureOp29.anInt2869 >= local61) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local61], local78, local69, arg3); + } + if (local161 >= TextureOp29.anInt5773) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local161], local78, local69, arg3); + } + } + } + } + } + } + + @OriginalMember(owner = "client!ug", name = "a", descriptor = "(II)V") + public static void method4278(@OriginalArg(0) int arg0) { + if (anIntArray522 == null || anIntArray522.length < arg0) { + anIntArray522 = new int[arg0]; + } + } + + @OriginalMember(owner = "client!nb", name = "a", descriptor = "(IIIIII)V") + public static void method3163(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(5) int arg4) { + if (arg1 == arg4) { + method1760(arg4, arg2, arg0, arg3); + } else if (TextureOp29.anInt4164 <= arg2 - arg4 && arg2 + arg4 <= TextureOp29.anInt5063 && arg3 - arg1 >= TextureOp29.anInt5773 && arg3 + arg1 <= TextureOp29.anInt2869) { + method1568(arg3, arg2, arg4, arg1, arg0); + } else { + method898(arg0, arg1, arg4, arg2, arg3); + } + } + + @OriginalMember(owner = "client!gi", name = "a", descriptor = "(IIIIB)V") + public static void method1760(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + if (arg1 - arg0 >= TextureOp29.anInt4164 && TextureOp29.anInt5063 >= arg0 + arg1 && arg3 - arg0 >= TextureOp29.anInt5773 && TextureOp29.anInt2869 >= arg0 + arg3) { + TextureOp29SubOp4.method1206(arg1, arg0, arg2, arg3); + } else { + method1843(arg2, arg3, arg0, arg1); + } + } + + @OriginalMember(owner = "client!ha", name = "a", descriptor = "(IIIII)V") + public static void method1843(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3) { + @Pc(7) int local7 = 0; + @Pc(9) int local9 = arg2; + @Pc(12) int local12 = -arg2; + @Pc(14) int local14 = -1; + @Pc(22) int local22 = IntUtils.clamp(TextureOp29.anInt5063, arg2 + arg3, TextureOp29.anInt4164); + @Pc(30) int local30 = IntUtils.clamp(TextureOp29.anInt5063, arg3 - arg2, TextureOp29.anInt4164); + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[arg1], local30, local22, arg0); + while (local7 < local9) { + local14 += 2; + local12 += local14; + @Pc(58) int local58; + @Pc(68) int local68; + @Pc(84) int local84; + @Pc(93) int local93; + if (local12 > 0) { + local9--; + local58 = arg1 - local9; + local12 -= local9 << 1; + local68 = arg1 + local9; + if (local68 >= TextureOp29.anInt5773 && local58 <= TextureOp29.anInt2869) { + local84 = IntUtils.clamp(TextureOp29.anInt5063, arg3 + local7, TextureOp29.anInt4164); + local93 = IntUtils.clamp(TextureOp29.anInt5063, arg3 - local7, TextureOp29.anInt4164); + if (TextureOp29.anInt2869 >= local68) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local68], local93, local84, arg0); + } + if (TextureOp29.anInt5773 <= local58) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local58], local93, local84, arg0); + } + } + } + local7++; + local58 = arg1 - local7; + local68 = local7 + arg1; + if (local68 >= TextureOp29.anInt5773 && TextureOp29.anInt2869 >= local58) { + local84 = IntUtils.clamp(TextureOp29.anInt5063, arg3 + local9, TextureOp29.anInt4164); + local93 = IntUtils.clamp(TextureOp29.anInt5063, arg3 - local9, TextureOp29.anInt4164); + if (local68 <= TextureOp29.anInt2869) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local68], local93, local84, arg0); + } + if (local58 >= TextureOp29.anInt5773) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local58], local93, local84, arg0); + } + } + } + } + + @OriginalMember(owner = "client!fl", name = "a", descriptor = "(IIIIII)V") + public static void method1568(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[arg0], arg1 - arg2, arg2 + arg1, arg4); + @Pc(17) int local17 = 0; + @Pc(21) int local21 = arg2 * arg2; + @Pc(25) int local25 = arg3 * arg3; + @Pc(27) int local27 = arg3; + @Pc(31) int local31 = local25 << 1; + @Pc(35) int local35 = local21 << 1; + @Pc(39) int local39 = arg3 << 1; + @Pc(48) int local48 = local31 + (1 - local39) * local21; + @Pc(56) int local56 = local25 - local35 * (local39 - 1); + @Pc(60) int local60 = local21 << 2; + @Pc(70) int local70 = local25 << 2; + @Pc(78) int local78 = local31 * 3; + @Pc(86) int local86 = local35 * ((arg3 << 1) - 3); + @Pc(92) int local92 = local70; + @Pc(98) int local98 = local60 * (arg3 - 1); + while (local27 > 0) { + local27--; + @Pc(105) int local105 = local27 + arg0; + @Pc(109) int local109 = arg0 - local27; + if (local48 < 0) { + while (local48 < 0) { + local17++; + local48 += local78; + local56 += local92; + local92 += local70; + local78 += local70; + } + } + if (local56 < 0) { + local48 += local78; + local78 += local70; + local56 += local92; + local17++; + local92 += local70; + } + @Pc(160) int local160 = local17 + arg1; + local56 += -local86; + local86 -= local60; + local48 += -local98; + @Pc(179) int local179 = arg1 - local17; + local98 -= local60; + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local109], local179, local160, arg4); + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local105], local179, local160, arg4); + } + } + + @OriginalMember(owner = "client!cl", name = "a", descriptor = "(IIIBII)V") + public static void method898(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + @Pc(13) int local13 = arg2 * arg2; + @Pc(15) int local15 = 0; + @Pc(17) int local17 = arg1; + @Pc(21) int local21 = local13 << 1; + @Pc(25) int local25 = arg1 * arg1; + @Pc(29) int local29 = arg1 << 1; + @Pc(33) int local33 = local25 << 1; + @Pc(42) int local42 = local13 * (1 - local29) + local33; + @Pc(51) int local51 = local25 - local21 * (local29 - 1); + @Pc(55) int local55 = local25 << 2; + @Pc(63) int local63 = local33 * 3; + @Pc(67) int local67 = local13 << 2; + @Pc(75) int local75 = ((arg1 << 1) - 3) * local21; + @Pc(81) int local81 = local55; + @Pc(95) int local95; + @Pc(104) int local104; + if (arg4 >= TextureOp29.anInt5773 && TextureOp29.anInt2869 >= arg4) { + local95 = IntUtils.clamp(TextureOp29.anInt5063, arg2 + arg3, TextureOp29.anInt4164); + local104 = IntUtils.clamp(TextureOp29.anInt5063, arg3 - arg2, TextureOp29.anInt4164); + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[arg4], local104, local95, arg0); + } + @Pc(118) int local118 = local67 * (arg1 - 1); + while (local17 > 0) { + local17--; + if (local42 < 0) { + while (local42 < 0) { + local15++; + local42 += local63; + local51 += local81; + local81 += local55; + local63 += local55; + } + } + local95 = arg4 - local17; + if (local51 < 0) { + local51 += local81; + local42 += local63; + local63 += local55; + local81 += local55; + local15++; + } + local51 += -local75; + local75 -= local67; + local42 += -local118; + local104 = local17 + arg4; + if (TextureOp29.anInt5773 <= local104 && TextureOp29.anInt2869 >= local95) { + @Pc(213) int local213 = IntUtils.clamp(TextureOp29.anInt5063, local15 + arg3, TextureOp29.anInt4164); + @Pc(222) int local222 = IntUtils.clamp(TextureOp29.anInt5063, arg3 - local15, TextureOp29.anInt4164); + if (local95 >= TextureOp29.anInt5773) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local95], local222, local213, arg0); + } + if (TextureOp29.anInt2869 >= local104) { + ArrayUtils.fillRange(TextureOp29SubOp4.anIntArrayArray10[local104], local222, local213, arg0); + } + } + local118 -= local67; + } + } + + @OriginalMember(owner = "client!kc", name = "c", descriptor = "(III)V") + @Override + public final void method4013(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + @Pc(10) int local10 = this.anInt3165 * arg0 >> 12; + @Pc(17) int local17 = arg0 * this.anInt3159 >> 12; + @Pc(24) int local24 = this.anInt3163 * arg1 >> 12; + @Pc(31) int local31 = this.anInt3168 * arg1 >> 12; + method3163(this.anInt5228, local31, local10, local24, local17); + } + + @OriginalMember(owner = "client!kc", name = "a", descriptor = "(IZI)V") + @Override + public final void method4009(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + } + + @OriginalMember(owner = "client!kc", name = "a", descriptor = "(III)V") + @Override + public final void method4007(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(6) int local6 = arg1 * this.anInt3165 >> 12; + @Pc(23) int local23 = this.anInt3168 * arg0 >> 12; + @Pc(30) int local30 = this.anInt3163 * arg0 >> 12; + @Pc(37) int local37 = this.anInt3159 * arg1 >> 12; + method1623(this.anInt5231, local6, local30, local23, this.anInt5229, this.anInt5228, local37); + } +} diff --git a/client/src/main/java/rt4/TextureOp29SubOp3.java b/client/src/main/java/rt4/TextureOp29SubOp3.java new file mode 100644 index 0000000..d6370b6 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp29SubOp3.java @@ -0,0 +1,159 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!re") +public final class TextureOp29SubOp3 extends TextureOp29SubOp { + + @OriginalMember(owner = "client!re", name = "x", descriptor = "I") + private final int anInt4850; + + @OriginalMember(owner = "client!re", name = "A", descriptor = "I") + private final int anInt4853; + + @OriginalMember(owner = "client!re", name = "v", descriptor = "I") + private final int anInt4849; + + @OriginalMember(owner = "client!re", name = "s", descriptor = "I") + private final int anInt4846; + + @OriginalMember(owner = "client!re", name = "n", descriptor = "I") + private final int anInt4842; + + @OriginalMember(owner = "client!re", name = "q", descriptor = "I") + private final int anInt4845; + + @OriginalMember(owner = "client!re", name = "m", descriptor = "I") + private final int anInt4841; + + @OriginalMember(owner = "client!re", name = "C", descriptor = "I") + private final int anInt4854; + + @OriginalMember(owner = "client!re", name = "", descriptor = "(IIIIIIIIII)V") + public TextureOp29SubOp3(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9) { + super(-1, arg8, arg9); + this.anInt4850 = arg1; + this.anInt4853 = arg6; + this.anInt4849 = arg4; + this.anInt4846 = arg0; + this.anInt4842 = arg7; + this.anInt4845 = arg5; + this.anInt4841 = arg3; + this.anInt4854 = arg2; + } + + @OriginalMember(owner = "client!bk", name = "a", descriptor = "(BLclient!wa;)Lclient!re;") + public static TextureOp29SubOp3 create(@OriginalArg(1) Buffer arg0) { + return new TextureOp29SubOp3(arg0.g2b(), arg0.g2b(), arg0.g2b(), arg0.g2b(), arg0.g2b(), arg0.g2b(), arg0.g2b(), arg0.g2b(), arg0.g3(), arg0.g1()); + } + + @OriginalMember(owner = "client!oi", name = "a", descriptor = "(IIIIIIIIII)V") + public static void method3340(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8) { + if (arg5 >= TextureOp29.anInt4164 && arg5 <= TextureOp29.anInt5063 && arg0 >= TextureOp29.anInt4164 && arg0 <= TextureOp29.anInt5063 && arg6 >= TextureOp29.anInt4164 && TextureOp29.anInt5063 >= arg6 && TextureOp29.anInt4164 <= arg1 && arg1 <= TextureOp29.anInt5063 && TextureOp29.anInt5773 <= arg4 && arg4 <= TextureOp29.anInt2869 && arg7 >= TextureOp29.anInt5773 && TextureOp29.anInt2869 >= arg7 && arg2 >= TextureOp29.anInt5773 && TextureOp29.anInt2869 >= arg2 && arg3 >= TextureOp29.anInt5773 && arg3 <= TextureOp29.anInt2869) { + method962(arg2, arg8, arg7, arg6, arg1, arg3, arg4, arg0, arg5); + } else { + method3162(arg5, arg0, arg7, arg8, arg3, arg2, arg1, arg6, arg4); + } + } + + @OriginalMember(owner = "client!cn", name = "a", descriptor = "(IIIIIIIIII)V") + public static void method962(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8) { + if (arg8 == arg7 && arg2 == arg6 && arg4 == arg3 && arg0 == arg5) { + TextureOp29SubOp4.method4547(arg1, arg5, arg6, arg4, arg8); + return; + } + @Pc(37) int local37 = arg6; + @Pc(39) int local39 = arg8; + @Pc(43) int local43 = arg8 * 3; + @Pc(47) int local47 = arg6 * 3; + @Pc(51) int local51 = arg7 * 3; + @Pc(55) int local55 = arg2 * 3; + @Pc(59) int local59 = arg3 * 3; + @Pc(63) int local63 = arg0 * 3; + @Pc(73) int local73 = arg4 + local51 - local59 - arg8; + @Pc(83) int local83 = arg5 + local55 - arg6 - local63; + @Pc(93) int local93 = local43 + local59 - local51 - local51; + @Pc(103) int local103 = local47 + local63 - local55 - local55; + @Pc(108) int local108 = local51 - local43; + @Pc(113) int local113 = local55 - local47; + for (@Pc(115) int local115 = 128; local115 <= 4096; local115 += 128) { + @Pc(126) int local126 = local115 * local115 >> 12; + @Pc(132) int local132 = local115 * local126 >> 12; + @Pc(136) int local136 = local83 * local132; + @Pc(140) int local140 = local126 * local93; + @Pc(144) int local144 = local73 * local132; + @Pc(148) int local148 = local126 * local103; + @Pc(152) int local152 = local108 * local115; + @Pc(156) int local156 = local113 * local115; + @Pc(167) int local167 = (local152 + local144 + local140 >> 12) + arg8; + @Pc(177) int local177 = arg6 + (local156 + local136 + local148 >> 12); + TextureOp29SubOp4.method4547(arg1, local177, local37, local167, local39); + local39 = local167; + local37 = local177; + } + } + + @OriginalMember(owner = "client!nb", name = "a", descriptor = "(IIIIIIIIII)V") + public static void method3162(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7, @OriginalArg(9) int arg8) { + if (arg0 == arg1 && arg8 == arg2 && arg7 == arg6 && arg4 == arg5) { + TextureOp29.method3982(arg3, arg4, arg0, arg8, arg6); + return; + } + @Pc(32) int local32 = arg0; + @Pc(36) int local36 = arg8 * 3; + @Pc(40) int local40 = arg0 * 3; + @Pc(42) int local42 = arg8; + @Pc(46) int local46 = arg1 * 3; + @Pc(50) int local50 = arg2 * 3; + @Pc(54) int local54 = arg7 * 3; + @Pc(58) int local58 = arg5 * 3; + @Pc(66) int local66 = local46 + arg6 - local54 - arg0; + @Pc(76) int local76 = local54 + local40 - local46 - local46; + @Pc(85) int local85 = local50 + arg4 - local58 - arg8; + @Pc(95) int local95 = local36 + local58 - local50 - local50; + @Pc(100) int local100 = local46 - local40; + @Pc(105) int local105 = local50 - local36; + for (@Pc(107) int local107 = 128; local107 <= 4096; local107 += 128) { + @Pc(118) int local118 = local107 * local107 >> 12; + @Pc(124) int local124 = local107 * local118 >> 12; + @Pc(128) int local128 = local95 * local118; + @Pc(132) int local132 = local124 * local85; + @Pc(136) int local136 = local118 * local76; + @Pc(140) int local140 = local66 * local124; + @Pc(144) int local144 = local100 * local107; + @Pc(156) int local156 = arg0 + (local136 + local140 + local144 >> 12); + @Pc(160) int local160 = local107 * local105; + @Pc(172) int local172 = arg8 + (local160 + local132 + local128 >> 12); + TextureOp29.method3982(arg3, local172, local32, local42, local156); + local32 = local156; + local42 = local172; + } + } + + @OriginalMember(owner = "client!re", name = "a", descriptor = "(IZI)V") + @Override + public final void method4009(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(6) int local6 = arg1 * this.anInt4846 >> 12; + @Pc(17) int local17 = arg1 * this.anInt4854 >> 12; + @Pc(24) int local24 = this.anInt4841 * arg0 >> 12; + @Pc(31) int local31 = this.anInt4850 * arg0 >> 12; + @Pc(38) int local38 = this.anInt4849 * arg1 >> 12; + @Pc(45) int local45 = arg0 * this.anInt4845 >> 12; + @Pc(52) int local52 = this.anInt4853 * arg1 >> 12; + @Pc(65) int local65 = arg0 * this.anInt4842 >> 12; + method3340(local17, local52, local45, local65, local31, local6, local38, local24, this.anInt5229); + } + + @OriginalMember(owner = "client!re", name = "c", descriptor = "(III)V") + @Override + public final void method4013(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + } + + @OriginalMember(owner = "client!re", name = "a", descriptor = "(III)V") + @Override + public final void method4007(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + } +} diff --git a/client/src/main/java/rt4/TextureOp29SubOp4.java b/client/src/main/java/rt4/TextureOp29SubOp4.java new file mode 100644 index 0000000..62ba9c8 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp29SubOp4.java @@ -0,0 +1,399 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ta") +public final class TextureOp29SubOp4 extends TextureOp29SubOp { + + @OriginalMember(owner = "client!fk", name = "j", descriptor = "[[I") + public static int[][] anIntArrayArray10; + + @OriginalMember(owner = "client!ta", name = "D", descriptor = "I") + private final int anInt5247; + + @OriginalMember(owner = "client!ta", name = "s", descriptor = "I") + private final int anInt5238; + + @OriginalMember(owner = "client!ta", name = "C", descriptor = "I") + private final int anInt5246; + + @OriginalMember(owner = "client!ta", name = "A", descriptor = "I") + private final int anInt5244; + + @OriginalMember(owner = "client!ta", name = "", descriptor = "(IIIIIII)V") + public TextureOp29SubOp4(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6) { + super(arg4, arg5, arg6); + this.anInt5247 = arg1; + this.anInt5238 = arg2; + this.anInt5246 = arg0; + this.anInt5244 = arg3; + } + + @OriginalMember(owner = "client!bl", name = "a", descriptor = "(IIIIIIII)V") + public static void method644(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6) { + if (TextureOp29.anInt4164 <= arg6 && TextureOp29.anInt5063 >= arg5 && arg4 >= TextureOp29.anInt5773 && arg1 <= TextureOp29.anInt2869) { + method2907(arg3, arg4, arg1, arg2, arg0, arg5, arg6); + } else { + method4222(arg5, arg2, arg1, arg0, arg3, arg4, arg6); + } + } + + @OriginalMember(owner = "client!mc", name = "a", descriptor = "(IIIIIIII)V") + public static void method2907(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6) { + @Pc(9) int local9 = arg4 + arg1; + @Pc(13) int local13 = arg4 + arg6; + @Pc(15) int local15; + for (local15 = arg1; local15 < local9; local15++) { + ArrayUtils.fillRange(anIntArrayArray10[local15], arg6, arg5, arg0); + } + @Pc(34) int local34 = arg2 - arg4; + @Pc(39) int local39 = arg5 - arg4; + for (local15 = arg2; local15 > local34; local15--) { + ArrayUtils.fillRange(anIntArrayArray10[local15], arg6, arg5, arg0); + } + for (local15 = local9; local15 <= local34; local15++) { + @Pc(72) int[] local72 = anIntArrayArray10[local15]; + ArrayUtils.fillRange(local72, arg6, local13, arg0); + ArrayUtils.fillRange(local72, local13, local39, arg3); + ArrayUtils.fillRange(local72, local39, arg5, arg0); + } + } + + @OriginalMember(owner = "client!tl", name = "a", descriptor = "(IIIIIIII)V") + public static void method4222(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6) { + @Pc(11) int local11 = IntUtils.clamp(TextureOp29.anInt2869, arg5, TextureOp29.anInt5773); + @Pc(17) int local17 = IntUtils.clamp(TextureOp29.anInt2869, arg2, TextureOp29.anInt5773); + @Pc(23) int local23 = IntUtils.clamp(TextureOp29.anInt5063, arg6, TextureOp29.anInt4164); + @Pc(29) int local29 = IntUtils.clamp(TextureOp29.anInt5063, arg0, TextureOp29.anInt4164); + @Pc(37) int local37 = IntUtils.clamp(TextureOp29.anInt2869, arg3 + arg5, TextureOp29.anInt5773); + @Pc(46) int local46 = IntUtils.clamp(TextureOp29.anInt2869, arg2 - arg3, TextureOp29.anInt5773); + @Pc(48) int local48; + for (local48 = local11; local48 < local37; local48++) { + ArrayUtils.fillRange(anIntArrayArray10[local48], local23, local29, arg4); + } + for (local48 = local17; local48 > local46; local48--) { + ArrayUtils.fillRange(anIntArrayArray10[local48], local23, local29, arg4); + } + @Pc(94) int local94 = IntUtils.clamp(TextureOp29.anInt5063, arg3 + arg6, TextureOp29.anInt4164); + @Pc(103) int local103 = IntUtils.clamp(TextureOp29.anInt5063, arg0 - arg3, TextureOp29.anInt4164); + for (local48 = local37; local48 <= local46; local48++) { + @Pc(122) int[] local122 = anIntArrayArray10[local48]; + ArrayUtils.fillRange(local122, local23, local94, arg4); + ArrayUtils.fillRange(local122, local94, local103, arg1); + ArrayUtils.fillRange(local122, local103, local29, arg4); + } + } + + @OriginalMember(owner = "client!sj", name = "a", descriptor = "(IIBIII)V") + public static void method3950(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + if (arg0 >= TextureOp29.anInt4164 && arg3 <= TextureOp29.anInt5063 && TextureOp29.anInt5773 <= arg4 && TextureOp29.anInt2869 >= arg2) { + method3308(arg2, arg3, arg4, arg0, arg1); + } else { + method3105(arg1, arg3, arg4, arg0, arg2); + } + } + + @OriginalMember(owner = "client!ob", name = "a", descriptor = "(IIIIII)V") + public static void method3308(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + for (@Pc(8) int local8 = arg2; local8 <= arg0; local8++) { + ArrayUtils.fillRange(anIntArrayArray10[local8], arg3, arg1, arg4); + } + } + + @OriginalMember(owner = "client!n", name = "a", descriptor = "(IIIIII)V") + public static void method3105(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + @Pc(11) int local11 = IntUtils.clamp(TextureOp29.anInt2869, arg2, TextureOp29.anInt5773); + @Pc(17) int local17 = IntUtils.clamp(TextureOp29.anInt2869, arg4, TextureOp29.anInt5773); + @Pc(23) int local23 = IntUtils.clamp(TextureOp29.anInt5063, arg3, TextureOp29.anInt4164); + @Pc(35) int local35 = IntUtils.clamp(TextureOp29.anInt5063, arg1, TextureOp29.anInt4164); + for (@Pc(37) int local37 = local11; local37 <= local17; local37++) { + ArrayUtils.fillRange(anIntArrayArray10[local37], local23, local35, arg0); + } + } + + @OriginalMember(owner = "client!mf", name = "a", descriptor = "(BLclient!wa;)Lclient!ta;") + public static TextureOp29SubOp4 create(@OriginalArg(1) Buffer arg0) { + return new TextureOp29SubOp4(arg0.g2b(), arg0.g2b(), arg0.g2b(), arg0.g2b(), arg0.g3(), arg0.g3(), arg0.g1()); + } + + @OriginalMember(owner = "client!dm", name = "a", descriptor = "(IBIII)V") + public static void method1206(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + @Pc(15) int local15 = 0; + ArrayUtils.fillRange(anIntArrayArray10[arg3], arg0 - arg1, arg0 - -arg1, arg2); + @Pc(32) int local32 = -arg1; + @Pc(34) int local34 = arg1; + @Pc(36) int local36 = -1; + while (local15 < local34) { + local15++; + local36 += 2; + local32 += local36; + if (local32 >= 0) { + local34--; + local32 -= local34 << 1; + @Pc(65) int[] local65 = anIntArrayArray10[arg3 + local34]; + @Pc(71) int[] local71 = anIntArrayArray10[arg3 - local34]; + @Pc(76) int local76 = arg0 + local15; + @Pc(81) int local81 = arg0 - local15; + ArrayUtils.fillRange(local65, local81, local76, arg2); + ArrayUtils.fillRange(local71, local81, local76, arg2); + } + @Pc(97) int local97 = local34 + arg0; + @Pc(102) int local102 = arg0 - local34; + @Pc(109) int[] local109 = anIntArrayArray10[arg3 + local15]; + @Pc(116) int[] local116 = anIntArrayArray10[arg3 - local15]; + ArrayUtils.fillRange(local109, local102, local97, arg2); + ArrayUtils.fillRange(local116, local102, local97, arg2); + } + } + + @OriginalMember(owner = "client!sa", name = "a", descriptor = "(IIIBI)V") + public static void fillRange(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3) { + if (arg3 <= arg2) { + ArrayUtils.fillRange(anIntArrayArray10[arg1], arg3, arg2, arg0); + } else { + ArrayUtils.fillRange(anIntArrayArray10[arg1], arg2, arg3, arg0); + } + } + + @OriginalMember(owner = "client!hm", name = "a", descriptor = "(IIIII)V") + public static void method2054(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + @Pc(8) int local8; + if (arg0 <= arg2) { + for (local8 = arg0; local8 < arg2; local8++) { + anIntArrayArray10[local8][arg1] = arg3; + } + } else { + for (local8 = arg2; local8 < arg0; local8++) { + anIntArrayArray10[local8][arg1] = arg3; + } + } + } + + @OriginalMember(owner = "client!th", name = "a", descriptor = "(BIIIII)V") + public static void method4547(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + @Pc(9) int local9 = arg1 - arg2; + @Pc(14) int local14 = arg3 - arg4; + if (local14 == 0) { + if (local9 != 0) { + method2054(arg2, arg4, arg1, arg0); + } + } else if (local9 == 0) { + fillRange(arg0, arg2, arg3, arg4); + } else { + if (local9 < 0) { + local9 = -local9; + } + if (local14 < 0) { + local14 = -local14; + } + @Pc(70) boolean local70 = local14 < local9; + @Pc(74) int local74; + @Pc(78) int local78; + if (local70) { + local74 = arg4; + arg4 = arg2; + local78 = arg3; + arg2 = local74; + arg3 = arg1; + arg1 = local78; + } + if (arg3 < arg4) { + local74 = arg4; + arg4 = arg3; + arg3 = local74; + local78 = arg2; + arg2 = arg1; + arg1 = local78; + } + local74 = arg2; + local78 = arg3 - arg4; + @Pc(111) int local111 = arg1 - arg2; + @Pc(116) int local116 = -(local78 >> 1); + @Pc(123) int local123 = arg1 <= arg2 ? -1 : 1; + if (local111 < 0) { + local111 = -local111; + } + @Pc(136) int local136; + if (local70) { + for (local136 = arg4; local136 <= arg3; local136++) { + anIntArrayArray10[local136][local74] = arg0; + local116 += local111; + if (local116 > 0) { + local74 += local123; + local116 -= local78; + } + } + } else { + for (local136 = arg4; local136 <= arg3; local136++) { + local116 += local111; + anIntArrayArray10[local74][local136] = arg0; + if (local116 > 0) { + local74 += local123; + local116 -= local78; + } + } + } + } + } + + @OriginalMember(owner = "client!ub", name = "a", descriptor = "(IIIIIII)V") + public static void method4244(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) { + if (TextureOp29.anInt4164 <= arg1 && TextureOp29.anInt5063 >= arg3 && TextureOp29.anInt5773 <= arg2 && arg4 <= TextureOp29.anInt2869) { + if (arg5 == 1) { + method2622(arg0, arg3, arg2, arg4, arg1); + } else { + method3334(arg3, arg2, arg0, arg4, arg5, arg1); + } + } else if (arg5 == 1) { + method3246(arg0, arg1, arg4, arg3, arg2); + } else { + method352(arg4, arg5, arg3, arg1, arg0, arg2); + } + } + + @OriginalMember(owner = "client!kh", name = "a", descriptor = "(IIIBII)V") + public static void method2622(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4) { + @Pc(8) int local8 = arg2 + 1; + ArrayUtils.fillRange(anIntArrayArray10[arg2], arg4, arg1, arg0); + @Pc(17) int local17 = arg3 - 1; + ArrayUtils.fillRange(anIntArrayArray10[arg3], arg4, arg1, arg0); + for (@Pc(29) int local29 = local8; local29 <= local17; local29++) { + @Pc(40) int[] local40 = anIntArrayArray10[local29]; + local40[arg4] = local40[arg1] = arg0; + } + } + + @OriginalMember(owner = "client!ok", name = "a", descriptor = "(IIIIIII)V") + public static void method3334(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5) { + @Pc(5) int local5 = arg4 + arg1; + @Pc(14) int local14 = arg3 - arg4; + @Pc(29) int local29 = arg4 + arg5; + @Pc(31) int local31; + for (local31 = arg1; local31 < local5; local31++) { + ArrayUtils.fillRange(anIntArrayArray10[local31], arg5, arg0, arg2); + } + for (local31 = arg3; local31 > local14; local31--) { + ArrayUtils.fillRange(anIntArrayArray10[local31], arg5, arg0, arg2); + } + @Pc(70) int local70 = arg0 - arg4; + for (local31 = local5; local31 <= local14; local31++) { + @Pc(83) int[] local83 = anIntArrayArray10[local31]; + ArrayUtils.fillRange(local83, arg5, local29, arg2); + ArrayUtils.fillRange(local83, local70, arg0, arg2); + } + } + + @OriginalMember(owner = "client!nk", name = "a", descriptor = "(IIIIIB)V") + public static void method3246(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + if (arg4 > TextureOp29.anInt2869 || arg2 < TextureOp29.anInt5773) { + return; + } + @Pc(24) boolean local24; + if (TextureOp29.anInt4164 > arg1) { + local24 = false; + arg1 = TextureOp29.anInt4164; + } else if (TextureOp29.anInt5063 >= arg1) { + local24 = true; + } else { + local24 = false; + arg1 = TextureOp29.anInt5063; + } + @Pc(43) boolean local43; + if (arg3 < TextureOp29.anInt4164) { + arg3 = TextureOp29.anInt4164; + local43 = false; + } else if (arg3 > TextureOp29.anInt5063) { + arg3 = TextureOp29.anInt5063; + local43 = false; + } else { + local43 = true; + } + if (TextureOp29.anInt5773 > arg4) { + arg4 = TextureOp29.anInt5773; + } else { + ArrayUtils.fillRange(anIntArrayArray10[arg4++], arg1, arg3, arg0); + } + if (arg2 <= TextureOp29.anInt2869) { + ArrayUtils.fillRange(anIntArrayArray10[arg2--], arg1, arg3, arg0); + } else { + arg2 = TextureOp29.anInt2869; + } + @Pc(98) int local98; + if (local24 && local43) { + for (local98 = arg4; local98 <= arg2; local98++) { + @Pc(105) int[] local105 = anIntArrayArray10[local98]; + local105[arg1] = local105[arg3] = arg0; + } + } else if (local24) { + for (local98 = arg4; local98 <= arg2; local98++) { + anIntArrayArray10[local98][arg1] = arg0; + } + } else if (local43) { + for (local98 = arg4; local98 <= arg2; local98++) { + anIntArrayArray10[local98][arg3] = arg0; + } + } + } + + @OriginalMember(owner = "client!an", name = "a", descriptor = "(IIIIIII)V") + public static void method352(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5) { + @Pc(11) int local11 = IntUtils.clamp(TextureOp29.anInt2869, arg5, TextureOp29.anInt5773); + @Pc(17) int local17 = IntUtils.clamp(TextureOp29.anInt2869, arg0, TextureOp29.anInt5773); + @Pc(23) int local23 = IntUtils.clamp(TextureOp29.anInt5063, arg3, TextureOp29.anInt4164); + @Pc(29) int local29 = IntUtils.clamp(TextureOp29.anInt5063, arg2, TextureOp29.anInt4164); + @Pc(42) int local42 = IntUtils.clamp(TextureOp29.anInt2869, arg5 + arg1, TextureOp29.anInt5773); + @Pc(51) int local51 = IntUtils.clamp(TextureOp29.anInt2869, arg0 - arg1, TextureOp29.anInt5773); + @Pc(53) int local53; + for (local53 = local11; local53 < local42; local53++) { + ArrayUtils.fillRange(anIntArrayArray10[local53], local23, local29, arg4); + } + for (local53 = local17; local53 > local51; local53--) { + ArrayUtils.fillRange(anIntArrayArray10[local53], local23, local29, arg4); + } + @Pc(95) int local95 = IntUtils.clamp(TextureOp29.anInt5063, arg1 + arg3, TextureOp29.anInt4164); + @Pc(104) int local104 = IntUtils.clamp(TextureOp29.anInt5063, arg2 - arg1, TextureOp29.anInt4164); + for (local53 = local42; local53 <= local51; local53++) { + @Pc(117) int[] local117 = anIntArrayArray10[local53]; + ArrayUtils.fillRange(local117, local23, local95, arg4); + ArrayUtils.fillRange(local117, local104, local29, arg4); + } + } + + @OriginalMember(owner = "client!gg", name = "a", descriptor = "([[IZ)V") + public static void method1751(@OriginalArg(0) int[][] arg0) { + anIntArrayArray10 = arg0; + } + + @OriginalMember(owner = "client!ta", name = "a", descriptor = "(IZI)V") + @Override + public final void method4009(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(10) int local10 = arg1 * this.anInt5238 >> 12; + @Pc(17) int local17 = this.anInt5244 * arg0 >> 12; + @Pc(24) int local24 = this.anInt5246 * arg1 >> 12; + @Pc(31) int local31 = this.anInt5247 * arg0 >> 12; + method4244(this.anInt5229, local24, local31, local10, local17, this.anInt5231); + } + + @OriginalMember(owner = "client!ta", name = "c", descriptor = "(III)V") + @Override + public final void method4013(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + @Pc(10) int local10 = this.anInt5246 * arg0 >> 12; + @Pc(17) int local17 = arg0 * this.anInt5238 >> 12; + @Pc(24) int local24 = arg1 * this.anInt5247 >> 12; + @Pc(31) int local31 = arg1 * this.anInt5244 >> 12; + method3950(local10, this.anInt5228, local31, local17, local24); + } + + @OriginalMember(owner = "client!ta", name = "a", descriptor = "(III)V") + @Override + public final void method4007(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(14) int local14 = arg1 * this.anInt5246 >> 12; + @Pc(21) int local21 = this.anInt5247 * arg0 >> 12; + @Pc(28) int local28 = arg1 * this.anInt5238 >> 12; + @Pc(35) int local35 = this.anInt5244 * arg0 >> 12; + method644(this.anInt5231, local35, this.anInt5228, this.anInt5229, local21, local28, local14); + } +} diff --git a/client/src/main/java/rt4/TextureOp31.java b/client/src/main/java/rt4/TextureOp31.java new file mode 100644 index 0000000..e387587 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp31.java @@ -0,0 +1,67 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!gm") +public final class TextureOp31 extends TextureOp { + + @OriginalMember(owner = "client!gm", name = "Z", descriptor = "I") + private int anInt2298 = 1365; + + @OriginalMember(owner = "client!gm", name = "ab", descriptor = "I") + private int anInt2299 = 0; + + @OriginalMember(owner = "client!gm", name = "V", descriptor = "I") + private int anInt2296 = 0; + + @OriginalMember(owner = "client!gm", name = "Y", descriptor = "I") + private int anInt2297 = 20; + + @OriginalMember(owner = "client!gm", name = "", descriptor = "()V") + public TextureOp31() { + super(0, true); + } + + @OriginalMember(owner = "client!gm", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt2298 = arg1.g2(); + } else if (arg0 == 1) { + this.anInt2297 = arg1.g2(); + } else if (arg0 == 2) { + this.anInt2296 = arg1.g2(); + } else if (arg0 == 3) { + this.anInt2299 = arg1.g2(); + } + } + + @OriginalMember(owner = "client!gm", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + for (@Pc(26) int local26 = 0; local26 < Texture.width; local26++) { + @Pc(45) int local45 = this.anInt2299 + (Texture.heightFractions[arg0] << 12) / this.anInt2298; + @Pc(57) int local57 = this.anInt2296 + (Texture.widthFractions[local26] << 12) / this.anInt2298; + @Pc(61) int local61 = local57; + @Pc(65) int local65 = local45; + @Pc(67) int local67 = 0; + @Pc(73) int local73 = local57 * local57 >> 12; + @Pc(79) int local79 = local45 * local45 >> 12; + while (local73 + local79 < 16384 && this.anInt2297 > local67) { + local65 = (local61 * local65 >> 12) * 2 + local45; + local67++; + local61 = local73 + local57 - local79; + local79 = local65 * local65 >> 12; + local73 = local61 * local61 >> 12; + } + local19[local26] = local67 >= this.anInt2297 - 1 ? 0 : (local67 << 12) / this.anInt2297; + } + } + return local19; + } +} diff --git a/client/src/main/java/rt4/TextureOp32.java b/client/src/main/java/rt4/TextureOp32.java new file mode 100644 index 0000000..9755fee --- /dev/null +++ b/client/src/main/java/rt4/TextureOp32.java @@ -0,0 +1,101 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!pk") +public final class TextureOp32 extends TextureOp { + + @OriginalMember(owner = "client!pk", name = "U", descriptor = "[I") + private final int[] anIntArray406 = new int[3]; + + @OriginalMember(owner = "client!pk", name = "S", descriptor = "I") + private int anInt4577 = 3216; + + @OriginalMember(owner = "client!pk", name = "X", descriptor = "I") + private int anInt4580 = 4096; + + @OriginalMember(owner = "client!pk", name = "db", descriptor = "I") + private int anInt4584 = 3216; + + @OriginalMember(owner = "client!pk", name = "", descriptor = "()V") + public TextureOp32() { + super(1, true); + } + + @OriginalMember(owner = "client!pk", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt4580 = arg1.g2(); + } else if (arg0 == 1) { + this.anInt4577 = arg1.g2(); + } else if (arg0 == 2) { + this.anInt4584 = arg1.g2(); + } + } + + @OriginalMember(owner = "client!pk", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + this.method3533(); + } + + @OriginalMember(owner = "client!pk", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(30) int local30 = Texture.anInt4042 * this.anInt4580 >> 12; + @Pc(40) int[] local40 = this.getChildMonochromeOutput(0, Texture.heightMask & arg0 - 1); + @Pc(46) int[] local46 = this.getChildMonochromeOutput(0, arg0); + @Pc(56) int[] local56 = this.getChildMonochromeOutput(0, arg0 + 1 & Texture.heightMask); + for (@Pc(58) int local58 = 0; local58 < Texture.width; local58++) { + @Pc(81) int local81 = (local46[Texture.widthMask & local58 - 1] - local46[local58 + 1 & Texture.widthMask]) * local30 >> 12; + @Pc(94) int local94 = local30 * (local56[local58] - local40[local58]) >> 12; + @Pc(98) int local98 = local81 >> 4; + if (local98 < 0) { + local98 = -local98; + } + if (local98 > 255) { + local98 = 255; + } + @Pc(113) int local113 = local94 >> 4; + if (local113 < 0) { + local113 = -local113; + } + if (local113 > 255) { + local113 = 255; + } + @Pc(142) int local142 = MonochromeImageCache.aByteArray53[(local113 * (local113 + 1) >> 1) + local98] & 0xFF; + @Pc(148) int local148 = local94 * local142 >> 8; + @Pc(154) int local154 = local142 * local81 >> 8; + @Pc(163) int local163 = local148 * this.anIntArray406[1] >> 12; + @Pc(172) int local172 = this.anIntArray406[0] * local154 >> 12; + @Pc(178) int local178 = local142 * 4096 >> 8; + @Pc(187) int local187 = local178 * this.anIntArray406[2] >> 12; + local19[local58] = local187 + local163 + local172; + } + } + return local19; + } + + @OriginalMember(owner = "client!pk", name = "g", descriptor = "(B)V") + private void method3533() { + @Pc(7) double local7 = Math.cos((float) this.anInt4584 / 4096.0F); + this.anIntArray406[0] = (int) (local7 * 4096.0D * Math.sin((float) this.anInt4577 / 4096.0F)); + this.anIntArray406[1] = (int) (Math.cos((float) this.anInt4577 / 4096.0F) * local7 * 4096.0D); + this.anIntArray406[2] = (int) (Math.sin((float) this.anInt4584 / 4096.0F) * 4096.0D); + @Pc(73) int local73 = this.anIntArray406[2] * this.anIntArray406[2] >> 12; + @Pc(85) int local85 = this.anIntArray406[1] * this.anIntArray406[1] >> 12; + @Pc(97) int local97 = this.anIntArray406[0] * this.anIntArray406[0] >> 12; + @Pc(111) int local111 = (int) (Math.sqrt(local97 + local85 + local73 >> 12) * 4096.0D); + if (local111 != 0) { + this.anIntArray406[2] = (this.anIntArray406[2] << 12) / local111; + this.anIntArray406[0] = (this.anIntArray406[0] << 12) / local111; + this.anIntArray406[1] = (this.anIntArray406[1] << 12) / local111; + } + } +} diff --git a/client/src/main/java/rt4/TextureOp33.java b/client/src/main/java/rt4/TextureOp33.java new file mode 100644 index 0000000..dce8971 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp33.java @@ -0,0 +1,75 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!an") +public final class TextureOp33 extends TextureOp { + + @OriginalMember(owner = "client!an", name = "R", descriptor = "I") + private int anInt316 = 4096; + + @OriginalMember(owner = "client!an", name = "bb", descriptor = "Z") + private boolean aBoolean11 = true; + + @OriginalMember(owner = "client!an", name = "", descriptor = "()V") + public TextureOp33() { + super(1, false); + } + + @OriginalMember(owner = "client!an", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt316 = arg1.g2(); + } else if (arg0 == 1) { + this.aBoolean11 = arg1.g1() == 1; + } + } + + @OriginalMember(owner = "client!an", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(11) int[][] local11 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(25) int[] local25 = this.getChildMonochromeOutput(0, Texture.heightMask & arg0 - 1); + @Pc(31) int[] local31 = this.getChildMonochromeOutput(0, arg0); + @Pc(41) int[] local41 = this.getChildMonochromeOutput(0, arg0 + 1 & Texture.heightMask); + @Pc(45) int[] local45 = local11[0]; + @Pc(49) int[] local49 = local11[1]; + @Pc(53) int[] local53 = local11[2]; + for (@Pc(55) int local55 = 0; local55 < Texture.width; local55++) { + @Pc(70) int local70 = this.anInt316 * (local41[local55] - local25[local55]); + @Pc(90) int local90 = this.anInt316 * (local31[local55 + 1 & Texture.widthMask] - local31[Texture.widthMask & local55 - 1]); + @Pc(94) int local94 = local70 >> 12; + @Pc(98) int local98 = local90 >> 12; + @Pc(104) int local104 = local94 * local94 >> 12; + @Pc(110) int local110 = local98 * local98 >> 12; + @Pc(124) int local124 = (int) (Math.sqrt((float) (local110 + local104 + 4096) / 4096.0F) * 4096.0D); + @Pc(131) int local131; + @Pc(133) int local133; + @Pc(129) int local129; + if (local124 == 0) { + local129 = 0; + local131 = 0; + local133 = 0; + } else { + local129 = 16777216 / local124; + local133 = local70 / local124; + local131 = local90 / local124; + } + if (this.aBoolean11) { + local133 = (local133 >> 1) + 2048; + local129 = (local129 >> 1) + 2048; + local131 = (local131 >> 1) + 2048; + } + local45[local55] = local131; + local49[local55] = local133; + local53[local55] = local129; + } + } + return local11; + } +} diff --git a/client/src/main/java/rt4/TextureOp34.java b/client/src/main/java/rt4/TextureOp34.java new file mode 100644 index 0000000..306dfb7 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp34.java @@ -0,0 +1,256 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!bi") +public final class TextureOp34 extends TextureOp { + + @OriginalMember(owner = "client!bi", name = "ib", descriptor = "[S") + private short[] aShortArray3; + + @OriginalMember(owner = "client!bi", name = "lb", descriptor = "[S") + private short[] aShortArray4; + + @OriginalMember(owner = "client!bi", name = "X", descriptor = "I") + public int anInt641 = 4; + + @OriginalMember(owner = "client!bi", name = "eb", descriptor = "I") + public int anInt646 = 4; + + @OriginalMember(owner = "client!bi", name = "kb", descriptor = "Z") + public boolean aBoolean44 = true; + + @OriginalMember(owner = "client!bi", name = "gb", descriptor = "I") + public int anInt648 = 1638; + + @OriginalMember(owner = "client!bi", name = "ab", descriptor = "[B") + private byte[] aByteArray10 = new byte[512]; + + @OriginalMember(owner = "client!bi", name = "Z", descriptor = "I") + public int anInt642 = 4; + + @OriginalMember(owner = "client!bi", name = "mb", descriptor = "I") + public int anInt650 = 0; + + @OriginalMember(owner = "client!bi", name = "", descriptor = "()V") + public TextureOp34() { + super(0, true); + } + + @OriginalMember(owner = "client!bi", name = "a", descriptor = "(ZI[I)V") + public final void method584(@OriginalArg(1) int arg0, @OriginalArg(2) int[] arg1) { + @Pc(12) int local12 = this.anInt641 * Texture.heightFractions[arg0]; + @Pc(115) int local115; + @Pc(129) int local129; + @Pc(40) int local40; + @Pc(27) short local27; + @Pc(105) int local105; + @Pc(60) int local60; + @Pc(54) int local54; + @Pc(47) int local47; + @Pc(85) int local85; + @Pc(64) int local64; + @Pc(68) int local68; + @Pc(77) int local77; + @Pc(103) int local103; + if (this.anInt642 == 1) { + local27 = this.aShortArray4[0]; + local40 = this.aShortArray3[0] << 12; + local60 = local12 * local40 >> 12; + local54 = this.anInt646 * local40 >> 12; + local47 = local40 * this.anInt641 >> 12; + local64 = local60 >> 12; + local77 = this.aByteArray10[local64 & 0xFF] & 0xFF; + local60 &= 0xFFF; + local85 = MonochromeImageCache.anIntArray1[local60]; + local68 = local64 + 1; + if (local47 <= local68) { + local68 = 0; + } + local103 = this.aByteArray10[local68 & 0xFF] & 0xFF; + if (this.aBoolean44) { + for (local105 = 0; local105 < Texture.width; local105++) { + local115 = this.anInt646 * Texture.widthFractions[local105]; + local129 = this.method590(local40 * local115 >> 12, local103, local77, local54, local60, local85); + local129 = local27 * local129 >> 12; + arg1[local105] = (local129 >> 1) + 2048; + } + } else { + for (local105 = 0; local105 < Texture.width; local105++) { + local115 = this.anInt646 * Texture.widthFractions[local105]; + local129 = this.method590(local40 * local115 >> 12, local103, local77, local54, local60, local85); + arg1[local105] = local27 * local129 >> 12; + } + } + return; + } + local27 = this.aShortArray4[0]; + if (local27 > 8 || local27 < -8) { + local40 = this.aShortArray3[0] << 12; + local47 = local40 * this.anInt641 >> 12; + local54 = this.anInt646 * local40 >> 12; + local60 = local12 * local40 >> 12; + local64 = local60 >> 12; + local68 = local64 + 1; + local77 = this.aByteArray10[local64 & 0xFF] & 0xFF; + @Pc(81) int local81 = local60 & 0xFFF; + local85 = MonochromeImageCache.anIntArray1[local81]; + if (local68 >= local47) { + local68 = 0; + } + local103 = this.aByteArray10[local68 & 0xFF] & 0xFF; + for (local105 = 0; local105 < Texture.width; local105++) { + local115 = Texture.widthFractions[local105] * this.anInt646; + local129 = this.method590(local115 * local40 >> 12, local103, local77, local54, local81, local85); + arg1[local105] = local129 * local27 >> 12; + } + } + for (@Pc(142) int local142 = 1; local142 < this.anInt642; local142++) { + local27 = this.aShortArray4[local142]; + if (local27 > 8 || local27 < -8) { + local40 = this.aShortArray3[local142] << 12; + local60 = local40 * local12 >> 12; + local64 = local60 >> 12; + local77 = this.aByteArray10[local64 & 0xFF] & 0xFF; + local54 = this.anInt646 * local40 >> 12; + local68 = local64 + 1; + local60 &= 0xFFF; + local85 = MonochromeImageCache.anIntArray1[local60]; + local47 = this.anInt641 * local40 >> 12; + if (local68 >= local47) { + local68 = 0; + } + local103 = this.aByteArray10[local68 & 0xFF] & 0xFF; + if (this.aBoolean44 && local142 == this.anInt642 - 1) { + for (local105 = 0; local105 < Texture.width; local105++) { + local115 = Texture.widthFractions[local105] * this.anInt646; + local129 = this.method590(local40 * local115 >> 12, local103, local77, local54, local60, local85); + local129 = (local27 * local129 >> 12) + arg1[local105]; + arg1[local105] = (local129 >> 1) + 2048; + } + } else { + for (local105 = 0; local105 < Texture.width; local105++) { + local115 = Texture.widthFractions[local105] * this.anInt646; + local129 = this.method590(local115 * local40 >> 12, local103, local77, local54, local60, local85); + arg1[local105] += local129 * local27 >> 12; + } + } + } + } + } + + @OriginalMember(owner = "client!bi", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + this.aByteArray10 = TextureOp15.method1837(this.anInt650); + this.method589(); + for (@Pc(15) int local15 = this.anInt642 - 1; local15 >= 1; local15--) { + @Pc(23) short local23 = this.aShortArray4[local15]; + if (local23 > 8 || local23 < -8) { + break; + } + this.anInt642--; + } + } + + @OriginalMember(owner = "client!bi", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.aBoolean44 = arg1.g1() == 1; + } else if (arg0 == 1) { + this.anInt642 = arg1.g1(); + } else if (arg0 == 2) { + this.anInt648 = arg1.g2b(); + if (this.anInt648 < 0) { + this.aShortArray4 = new short[this.anInt642]; + for (@Pc(93) int local93 = 0; local93 < this.anInt642; local93++) { + this.aShortArray4[local93] = (short) arg1.g2b(); + } + } + } else if (arg0 == 3) { + this.anInt646 = this.anInt641 = arg1.g1(); + } else if (arg0 == 4) { + this.anInt650 = arg1.g1(); + } else if (arg0 == 5) { + this.anInt646 = arg1.g1(); + } else if (arg0 == 6) { + this.anInt641 = arg1.g1(); + } + } + + @OriginalMember(owner = "client!bi", name = "b", descriptor = "(Z)V") + private void method589() { + @Pc(21) int local21; + if (this.anInt648 > 0) { + this.aShortArray4 = new short[this.anInt642]; + this.aShortArray3 = new short[this.anInt642]; + for (local21 = 0; local21 < this.anInt642; local21++) { + this.aShortArray4[local21] = (short) (Math.pow((float) this.anInt648 / 4096.0F, local21) * 4096.0D); + this.aShortArray3[local21] = (short) Math.pow(2.0D, local21); + } + } else if (this.aShortArray4 != null && this.aShortArray4.length == this.anInt642) { + this.aShortArray3 = new short[this.anInt642]; + for (local21 = 0; local21 < this.anInt642; local21++) { + this.aShortArray3[local21] = (short) Math.pow(2.0D, local21); + } + } + } + + @OriginalMember(owner = "client!bi", name = "a", descriptor = "(IIIIIII)I") + private int method590(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5) { + @Pc(15) int local15 = arg4 - 4096; + @Pc(19) int local19 = arg0 >> 12; + @Pc(23) int local23 = local19 + 1; + @Pc(27) int local27 = local19 & 0xFF; + if (local23 >= arg3) { + local23 = 0; + } + @Pc(40) int local40 = arg0 & 0xFFF; + @Pc(50) int local50 = this.aByteArray10[local27 + arg2] & 0x3; + @Pc(54) int local54 = MonochromeImageCache.anIntArray1[local40]; + @Pc(70) int local70; + if (local50 > 1) { + local70 = local50 == 2 ? local40 - arg4 : -local40 + -arg4; + } else { + local70 = local50 == 0 ? arg4 + local40 : -local40 + arg4; + } + local23 &= 0xFF; + @Pc(92) int local92 = local40 - 4096; + local50 = this.aByteArray10[arg2 + local23] & 0x3; + @Pc(118) int local118; + if (local50 <= 1) { + local118 = local50 == 0 ? arg4 + local92 : -local92 + arg4; + } else { + local118 = local50 == 2 ? local92 - arg4 : -local92 + -arg4; + } + local50 = this.aByteArray10[local27 + arg1] & 0x3; + @Pc(155) int local155 = local70 + ((local118 - local70) * local54 >> 12); + if (local50 > 1) { + local70 = local50 == 2 ? local40 - local15 : -local40 - local15; + } else { + local70 = local50 == 0 ? local40 + local15 : local15 + -local40; + } + local50 = this.aByteArray10[arg1 + local23] & 0x3; + if (local50 > 1) { + local118 = local50 == 2 ? local92 - local15 : -local15 + -local92; + } else { + local118 = local50 == 0 ? local92 + local15 : local15 + -local92; + } + @Pc(237) int local237 = local70 + ((local118 - local70) * local54 >> 12); + return local155 + (arg5 * (local237 - local155) >> 12); + } + + @OriginalMember(owner = "client!bi", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(17) int[] local17 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + this.method584(arg0, local17); + } + return local17; + } +} diff --git a/client/src/main/java/rt4/TextureOp35.java b/client/src/main/java/rt4/TextureOp35.java new file mode 100644 index 0000000..6c7154e --- /dev/null +++ b/client/src/main/java/rt4/TextureOp35.java @@ -0,0 +1,49 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!pg") +public final class TextureOp35 extends TextureOp { + + @OriginalMember(owner = "client!pg", name = "U", descriptor = "I") + private int anInt4503 = 4096; + + @OriginalMember(owner = "client!pg", name = "", descriptor = "()V") + public TextureOp35() { + super(1, true); + } + + @OriginalMember(owner = "client!pg", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(34) int[] local34 = this.getChildMonochromeOutput(0, arg0 - 1 & Texture.heightMask); + @Pc(40) int[] local40 = this.getChildMonochromeOutput(0, arg0); + @Pc(50) int[] local50 = this.getChildMonochromeOutput(0, Texture.heightMask & arg0 + 1); + for (@Pc(52) int local52 = 0; local52 < Texture.width; local52++) { + @Pc(67) int local67 = (local50[local52] - local34[local52]) * this.anInt4503; + @Pc(87) int local87 = this.anInt4503 * (local40[Texture.widthMask & local52 + 1] - local40[local52 - 1 & Texture.widthMask]); + @Pc(91) int local91 = local87 >> 12; + @Pc(95) int local95 = local67 >> 12; + @Pc(101) int local101 = local91 * local91 >> 12; + @Pc(107) int local107 = local95 * local95 >> 12; + @Pc(121) int local121 = (int) (Math.sqrt((float) (local107 + local101 + 4096) / 4096.0F) * 4096.0D); + @Pc(130) int local130 = local121 == 0 ? 0 : 16777216 / local121; + local19[local52] = 4096 - local130; + } + } + return local19; + } + + @OriginalMember(owner = "client!pg", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt4503 = arg1.g2(); + } + } +} diff --git a/client/src/main/java/rt4/TextureOp37.java b/client/src/main/java/rt4/TextureOp37.java new file mode 100644 index 0000000..dbf04b0 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp37.java @@ -0,0 +1,108 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!mh") +public final class TextureOp37 extends TextureOp { + + @OriginalMember(owner = "client!mh", name = "P", descriptor = "I") + private int anInt3843 = 0; + + @OriginalMember(owner = "client!mh", name = "T", descriptor = "I") + private int anInt3847 = 12288; + + @OriginalMember(owner = "client!mh", name = "bb", descriptor = "I") + private int anInt3854 = 2048; + + @OriginalMember(owner = "client!mh", name = "U", descriptor = "I") + private int anInt3848 = 0; + + @OriginalMember(owner = "client!mh", name = "ib", descriptor = "I") + private int anInt3860 = 2048; + + @OriginalMember(owner = "client!mh", name = "Q", descriptor = "I") + private int anInt3844 = 4096; + + @OriginalMember(owner = "client!mh", name = "kb", descriptor = "I") + private int anInt3862 = 8192; + + @OriginalMember(owner = "client!mh", name = "", descriptor = "()V") + public TextureOp37() { + super(0, true); + } + + @OriginalMember(owner = "client!mh", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt3860 = arg1.g2(); + } else if (arg0 == 1) { + this.anInt3843 = arg1.g2(); + } else if (arg0 == 2) { + this.anInt3848 = arg1.g2(); + } else if (arg0 == 3) { + this.anInt3854 = arg1.g2(); + } else if (arg0 == 4) { + this.anInt3847 = arg1.g2(); + } else if (arg0 == 5) { + this.anInt3844 = arg1.g2(); + } else if (arg0 == 6) { + this.anInt3862 = arg1.g2(); + } + } + + @OriginalMember(owner = "client!mh", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(30) int local30 = Texture.heightFractions[arg0] - 2048; + for (@Pc(32) int local32 = 0; local32 < Texture.width; local32++) { + @Pc(40) int local40 = local30 + this.anInt3843; + @Pc(46) int local46 = Texture.widthFractions[local32] - 2048; + @Pc(51) int local51 = this.anInt3860 + local46; + @Pc(62) int local62 = local40 < -2048 ? local40 + 4096 : local40; + @Pc(71) int local71 = local62 > 2048 ? local62 - 4096 : local62; + @Pc(76) int local76 = local46 + this.anInt3848; + @Pc(85) int local85 = local51 < -2048 ? local51 + 4096 : local51; + @Pc(96) int local96 = local85 <= 2048 ? local85 : local85 - 4096; + @Pc(107) int local107 = local76 >= -2048 ? local76 : local76 + 4096; + @Pc(118) int local118 = local107 > 2048 ? local107 - 4096 : local107; + @Pc(124) int local124 = local30 + this.anInt3854; + @Pc(133) int local133 = local124 < -2048 ? local124 + 4096 : local124; + @Pc(144) int local144 = local133 > 2048 ? local133 - 4096 : local133; + local19[local32] = this.method3012(local96, local71) || this.method3011(local118, local144) ? 4096 : 0; + } + } + return local19; + } + + @OriginalMember(owner = "client!mh", name = "a", descriptor = "(BII)Z") + private boolean method3011(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + @Pc(12) int local12 = this.anInt3847 * (arg0 + arg1) >> 12; + @Pc(27) int local27 = TextureOp.COSINE[local12 * 255 >> 12 & 0xFF]; + @Pc(34) int local34 = (local27 << 12) / this.anInt3847; + @Pc(41) int local41 = (local34 << 12) / this.anInt3862; + @Pc(48) int local48 = local41 * this.anInt3844 >> 12; + return local48 > arg1 - arg0 && -local48 < arg1 - arg0; + } + + @OriginalMember(owner = "client!mh", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + TextureOp.createTrigonometryTables(); + } + + @OriginalMember(owner = "client!mh", name = "b", descriptor = "(IIB)Z") + private boolean method3012(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(8) int local8 = (arg1 - arg0) * this.anInt3847 >> 12; + @Pc(31) int local31 = TextureOp.COSINE[local8 * 255 >> 12 & 0xFF]; + @Pc(38) int local38 = (local31 << 12) / this.anInt3847; + @Pc(45) int local45 = (local38 << 12) / this.anInt3862; + @Pc(52) int local52 = local45 * this.anInt3844 >> 12; + return arg1 + arg0 < local52 && -local52 < arg1 + arg0; + } +} diff --git a/client/src/main/java/rt4/TextureOp38.java b/client/src/main/java/rt4/TextureOp38.java new file mode 100644 index 0000000..e35fa9a --- /dev/null +++ b/client/src/main/java/rt4/TextureOp38.java @@ -0,0 +1,128 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.util.Random; + +@OriginalClass("client!vc") +public final class TextureOp38 extends TextureOp { + + @OriginalMember(owner = "client!vc", name = "P", descriptor = "I") + private int anInt5709 = 0; + + @OriginalMember(owner = "client!vc", name = "U", descriptor = "I") + private int anInt5712 = 2000; + + @OriginalMember(owner = "client!vc", name = "Z", descriptor = "I") + private int anInt5715 = 16; + + @OriginalMember(owner = "client!vc", name = "Y", descriptor = "I") + private int anInt5714 = 4096; + + @OriginalMember(owner = "client!vc", name = "cb", descriptor = "I") + private int anInt5716 = 0; + + @OriginalMember(owner = "client!vc", name = "", descriptor = "()V") + public TextureOp38() { + super(0, true); + } + + @OriginalMember(owner = "client!vc", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + TextureOp.createTrigonometryTables(); + } + + @OriginalMember(owner = "client!vc", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt5716 = arg1.g1(); + } else if (arg0 == 1) { + this.anInt5712 = arg1.g2(); + } else if (arg0 == 2) { + this.anInt5715 = arg1.g1(); + } else if (arg0 == 3) { + this.anInt5709 = arg1.g2(); + } else if (arg0 == 4) { + this.anInt5714 = arg1.g2(); + } + } + + @OriginalMember(owner = "client!vc", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(28) int local28 = this.anInt5714 >> 1; + @Pc(33) int[][] local33 = this.monochromeImageCache.method3446(); + @Pc(40) Random local40 = new Random(this.anInt5716); + for (@Pc(42) int local42 = 0; local42 < this.anInt5712; local42++) { + @Pc(64) int local64 = this.anInt5714 > 0 ? this.anInt5709 + RandomUtils.nextInt(this.anInt5714, local40) - local28 : this.anInt5709; + @Pc(69) int local69 = RandomUtils.nextInt(Texture.width, local40); + @Pc(75) int local75 = local64 >> 4 & 0xFF; + @Pc(80) int local80 = RandomUtils.nextInt(Texture.height, local40); + @Pc(92) int local92 = local69 + (this.anInt5715 * TextureOp.COSINE[local75] >> 12); + @Pc(103) int local103 = local80 + (TextureOp.SINE[local75] * this.anInt5715 >> 12); + @Pc(107) int local107 = local92 - local69; + @Pc(112) int local112 = local103 - local80; + if (local107 != 0 || local112 != 0) { + if (local107 < 0) { + local107 = -local107; + } + if (local112 < 0) { + local112 = -local112; + } + @Pc(146) boolean local146 = local112 > local107; + @Pc(150) int local150; + @Pc(152) int local152; + if (local146) { + local150 = local69; + local152 = local92; + local92 = local103; + local103 = local152; + local69 = local80; + local80 = local150; + } + if (local69 > local92) { + local150 = local69; + local152 = local80; + local69 = local92; + local80 = local103; + local103 = local152; + local92 = local150; + } + local152 = local92 - local69; + @Pc(190) int local190 = local103 - local80; + local150 = local80; + if (local190 < 0) { + local190 = -local190; + } + @Pc(206) int local206 = -local152 / 2; + @Pc(216) int local216 = 1024 - (RandomUtils.nextInt(4096, local40) >> 2); + @Pc(227) int local227 = local103 <= local80 ? -1 : 1; + @Pc(231) int local231 = 2048 / local152; + for (@Pc(233) int local233 = local69; local233 < local92; local233++) { + local206 += local190; + @Pc(251) int local251 = local231 * (local233 - local69) + local216 + 1024; + @Pc(255) int local255 = local150 & Texture.heightMask; + if (local206 > 0) { + local206 += -local152; + local150 += local227; + } + @Pc(271) int local271 = Texture.widthMask & local233; + if (local146) { + local33[local255][local271] = local251; + } else { + local33[local271][local255] = local251; + } + } + } + } + } + return local19; + } +} diff --git a/client/src/main/java/rt4/TextureOp4.java b/client/src/main/java/rt4/TextureOp4.java new file mode 100644 index 0000000..f464963 --- /dev/null +++ b/client/src/main/java/rt4/TextureOp4.java @@ -0,0 +1,171 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.util.Random; + +@OriginalClass("client!mc") +public final class TextureOp4 extends TextureOp { + + @OriginalMember(owner = "client!mc", name = "U", descriptor = "I") + private int anInt3670; + + @OriginalMember(owner = "client!mc", name = "V", descriptor = "I") + private int anInt3671; + + @OriginalMember(owner = "client!mc", name = "X", descriptor = "[[I") + private int[][] anIntArrayArray26; + + @OriginalMember(owner = "client!mc", name = "cb", descriptor = "[I") + private int[] anIntArray352; + + @OriginalMember(owner = "client!mc", name = "jb", descriptor = "I") + private int anInt3679; + + @OriginalMember(owner = "client!mc", name = "sb", descriptor = "[[I") + private int[][] anIntArrayArray27; + + @OriginalMember(owner = "client!mc", name = "P", descriptor = "I") + private int anInt3667 = 204; + + @OriginalMember(owner = "client!mc", name = "bb", descriptor = "I") + private int anInt3673 = 1024; + + @OriginalMember(owner = "client!mc", name = "eb", descriptor = "I") + private int anInt3675 = 0; + + @OriginalMember(owner = "client!mc", name = "lb", descriptor = "I") + private int anInt3681 = 409; + + @OriginalMember(owner = "client!mc", name = "hb", descriptor = "I") + private int anInt3677 = 8; + + @OriginalMember(owner = "client!mc", name = "W", descriptor = "I") + private int anInt3672 = 81; + + @OriginalMember(owner = "client!mc", name = "ub", descriptor = "I") + private int anInt3685 = 4; + + @OriginalMember(owner = "client!mc", name = "ib", descriptor = "I") + private int anInt3678 = 1024; + + @OriginalMember(owner = "client!mc", name = "", descriptor = "()V") + public TextureOp4() { + super(0, true); + } + + @OriginalMember(owner = "client!mc", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + this.method2908(); + } + + @OriginalMember(owner = "client!mc", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt3685 = arg1.g1(); + } else if (arg0 == 1) { + this.anInt3677 = arg1.g1(); + } else if (arg0 == 2) { + this.anInt3681 = arg1.g2(); + } else if (arg0 == 3) { + this.anInt3667 = arg1.g2(); + } else if (arg0 == 4) { + this.anInt3678 = arg1.g2(); + } else if (arg0 == 5) { + this.anInt3675 = arg1.g2(); + } else if (arg0 == 6) { + this.anInt3672 = arg1.g2(); + } else if (arg0 == 7) { + this.anInt3673 = arg1.g2(); + } + } + + @OriginalMember(owner = "client!mc", name = "i", descriptor = "(I)V") + private void method2908() { + @Pc(8) Random local8 = new Random(this.anInt3677); + this.anInt3670 = 4096 / this.anInt3677; + this.anInt3671 = this.anInt3672 / 2; + this.anIntArrayArray26 = new int[this.anInt3677][this.anInt3685 + 1]; + @Pc(34) int local34 = this.anInt3670 / 2; + this.anIntArray352 = new int[this.anInt3677 + 1]; + this.anIntArrayArray27 = new int[this.anInt3677][this.anInt3685]; + this.anInt3679 = 4096 / this.anInt3685; + this.anIntArray352[0] = 0; + @Pc(64) int local64 = this.anInt3679 / 2; + for (@Pc(66) int local66 = 0; local66 < this.anInt3677; local66++) { + @Pc(82) int local82; + @Pc(94) int local94; + if (local66 > 0) { + local82 = this.anInt3670; + local94 = (RandomUtils.nextInt(4096, local8) - 2048) * this.anInt3667 >> 12; + @Pc(102) int local102 = local82 + (local94 * local34 >> 12); + this.anIntArray352[local66] = this.anIntArray352[local66 - 1] + local102; + } + this.anIntArrayArray26[local66][0] = 0; + for (local82 = 0; local82 < this.anInt3685; local82++) { + if (local82 > 0) { + local94 = this.anInt3679; + @Pc(150) int local150 = (RandomUtils.nextInt(4096, local8) - 2048) * this.anInt3681 >> 12; + local94 += local64 * local150 >> 12; + this.anIntArrayArray26[local66][local82] = this.anIntArrayArray26[local66][local82 - 1] + local94; + } + this.anIntArrayArray27[local66][local82] = this.anInt3673 <= 0 ? 4096 : 4096 - RandomUtils.nextInt(this.anInt3673, local8); + } + this.anIntArrayArray26[local66][this.anInt3685] = 4096; + } + this.anIntArray352[this.anInt3677] = 4096; + } + + @OriginalMember(owner = "client!mc", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(11) int[] local11 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(18) int local18 = 0; + @Pc(25) int local25; + for (local25 = Texture.heightFractions[arg0] + this.anInt3675; local25 < 0; local25 += 4096) { + } + while (local25 > 4096) { + local25 -= 4096; + } + while (this.anInt3677 > local18 && local25 >= this.anIntArray352[local18]) { + local18++; + } + @Pc(60) int local60 = local18 - 1; + @Pc(65) int local65 = this.anIntArray352[local18]; + @Pc(74) boolean local74 = (local18 & 0x1) == 0; + @Pc(81) int local81 = this.anIntArray352[local18 - 1]; + if (local81 + this.anInt3671 < local25 && local65 - this.anInt3671 > local25) { + for (@Pc(100) int local100 = 0; local100 < Texture.width; local100++) { + @Pc(105) int local105 = 0; + @Pc(114) int local114 = local74 ? this.anInt3678 : -this.anInt3678; + @Pc(126) int local126; + for (local126 = Texture.widthFractions[local100] + (this.anInt3679 * local114 >> 12); local126 < 0; local126 += 4096) { + } + while (local126 > 4096) { + local126 -= 4096; + } + while (this.anInt3685 > local105 && local126 >= this.anIntArrayArray26[local60][local105]) { + local105++; + } + @Pc(172) int local172 = this.anIntArrayArray26[local60][local105]; + @Pc(176) int local176 = local105 - 1; + @Pc(183) int local183 = this.anIntArrayArray26[local60][local176]; + if (local183 + this.anInt3671 < local126 && local172 - this.anInt3671 > local126) { + local11[local100] = this.anIntArrayArray27[local60][local176]; + } else { + local11[local100] = 0; + } + } + } else { + ArrayUtils.fill(local11, 0, Texture.width, 0); + } + } + return local11; + } +} diff --git a/client/src/main/java/rt4/TextureOp5.java b/client/src/main/java/rt4/TextureOp5.java new file mode 100644 index 0000000..32330da --- /dev/null +++ b/client/src/main/java/rt4/TextureOp5.java @@ -0,0 +1,141 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!nm") +public final class TextureOp5 extends TextureOp { + + @OriginalMember(owner = "client!nm", name = "V", descriptor = "I") + private int anInt4221 = 1; + + @OriginalMember(owner = "client!nm", name = "Z", descriptor = "I") + private int anInt4223 = 1; + + @OriginalMember(owner = "client!nm", name = "", descriptor = "()V") + public TextureOp5() { + super(1, false); + } + + @OriginalMember(owner = "client!nm", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(31) int local31 = this.anInt4223 + this.anInt4223 + 1; + @Pc(35) int local35 = 65536 / local31; + @Pc(43) int local43 = this.anInt4221 + this.anInt4221 + 1; + @Pc(47) int local47 = 65536 / local43; + @Pc(50) int[][] local50 = new int[local31][]; + @Pc(56) int local56; + for (local56 = arg0 - this.anInt4223; local56 <= arg0 + this.anInt4223; local56++) { + @Pc(75) int[] local75 = this.getChildMonochromeOutput(0, local56 & Texture.heightMask); + @Pc(78) int[] local78 = new int[Texture.width]; + @Pc(80) int local80 = 0; + @Pc(84) int local84; + for (local84 = -this.anInt4221; local84 <= this.anInt4221; local84++) { + local80 += local75[local84 & Texture.widthMask]; + } + local84 = 0; + while (Texture.width > local84) { + local78[local84] = local47 * local80 >> 16; + local80 -= local75[Texture.widthMask & local84 - this.anInt4221]; + local84++; + local80 += local75[Texture.widthMask & this.anInt4221 + local84]; + } + local50[this.anInt4223 + local56 - arg0] = local78; + } + for (local56 = 0; local56 < Texture.width; local56++) { + @Pc(169) int local169 = 0; + for (@Pc(171) int local171 = 0; local171 < local31; local171++) { + local169 += local50[local171][local56]; + } + local19[local56] = local35 * local169 >> 16; + } + } + return local19; + } + + @OriginalMember(owner = "client!nm", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(13) int[][] local13 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(30) int local30 = this.anInt4221 + this.anInt4221 + 1; + @Pc(34) int local34 = 65536 / local30; + @Pc(42) int local42 = this.anInt4223 + this.anInt4223 + 1; + @Pc(46) int local46 = 65536 / local42; + @Pc(49) int[][][] local49 = new int[local42][][]; + @Pc(70) int local70; + @Pc(72) int local72; + @Pc(78) int local78; + for (@Pc(54) int local54 = arg0 - this.anInt4223; local54 <= this.anInt4223 + arg0; local54++) { + @Pc(68) int[][] local68 = this.getChildColorOutput(Texture.heightMask & local54, 0); + local70 = 0; + local72 = 0; + @Pc(76) int[][] local76 = new int[3][Texture.width]; + local78 = 0; + @Pc(82) int[] local82 = local68[0]; + @Pc(86) int[] local86 = local68[1]; + @Pc(90) int[] local90 = local68[2]; + for (@Pc(94) int local94 = -this.anInt4221; local94 <= this.anInt4221; local94++) { + @Pc(102) int local102 = local94 & Texture.widthMask; + local72 += local86[local102]; + local70 += local82[local102]; + local78 += local90[local102]; + } + @Pc(127) int[] local127 = local76[2]; + @Pc(131) int[] local131 = local76[0]; + @Pc(135) int[] local135 = local76[1]; + @Pc(137) int local137 = 0; + while (Texture.width > local137) { + local131[local137] = local70 * local34 >> 16; + local135[local137] = local72 * local34 >> 16; + local127[local137] = local34 * local78 >> 16; + @Pc(172) int local172 = Texture.widthMask & local137 - this.anInt4221; + local78 -= local90[local172]; + local137++; + local70 -= local82[local172]; + local72 -= local86[local172]; + @Pc(198) int local198 = this.anInt4221 + local137 & Texture.widthMask; + local78 += local90[local198]; + local72 += local86[local198]; + local70 += local82[local198]; + } + local49[this.anInt4223 + local54 - arg0] = local76; + } + @Pc(235) int[] local235 = local13[0]; + @Pc(239) int[] local239 = local13[1]; + @Pc(243) int[] local243 = local13[2]; + for (local70 = 0; local70 < Texture.width; local70++) { + local78 = 0; + local72 = 0; + @Pc(258) int local258 = 0; + for (@Pc(260) int local260 = 0; local260 < local42; local260++) { + @Pc(271) int[][] local271 = local49[local260]; + local258 += local271[2][local70]; + local78 += local271[1][local70]; + local72 += local271[0][local70]; + } + local235[local70] = local46 * local72 >> 16; + local239[local70] = local46 * local78 >> 16; + local243[local70] = local258 * local46 >> 16; + } + } + return local13; + } + + @OriginalMember(owner = "client!nm", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt4221 = arg1.g1(); + } else if (arg0 == 1) { + this.anInt4223 = arg1.g1(); + } else if (arg0 == 2) { + this.monochrome = arg1.g1() == 1; + } + } +} diff --git a/client/src/main/java/rt4/TextureOpBinary.java b/client/src/main/java/rt4/TextureOpBinary.java new file mode 100644 index 0000000..6449b18 --- /dev/null +++ b/client/src/main/java/rt4/TextureOpBinary.java @@ -0,0 +1,45 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ca") +public final class TextureOpBinary extends TextureOp { + + @OriginalMember(owner = "client!ca", name = "T", descriptor = "I") + private int maxValue = 4096; + + @OriginalMember(owner = "client!ca", name = "P", descriptor = "I") + private int minValue = 0; + + @OriginalMember(owner = "client!ca", name = "", descriptor = "()V") + public TextureOpBinary() { + super(1, true); + } + + @OriginalMember(owner = "client!ca", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(29) int[] local29 = this.getChildMonochromeOutput(0, arg0); + for (@Pc(31) int local31 = 0; local31 < Texture.width; local31++) { + @Pc(38) int local38 = local29[local31]; + local19[local31] = this.minValue <= local38 && local38 <= this.maxValue ? 4096 : 0; + } + } + return local19; + } + + @OriginalMember(owner = "client!ca", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.minValue = arg1.g2(); + } else if (arg0 == 1) { + this.maxValue = arg1.g2(); + } + } +} diff --git a/client/src/main/java/rt4/TextureOpClamp.java b/client/src/main/java/rt4/TextureOpClamp.java new file mode 100644 index 0000000..a77e46c --- /dev/null +++ b/client/src/main/java/rt4/TextureOpClamp.java @@ -0,0 +1,95 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!aj") +public final class TextureOpClamp extends TextureOp { + + @OriginalMember(owner = "client!aj", name = "V", descriptor = "I") + private int anInt148 = 0; + + @OriginalMember(owner = "client!aj", name = "ab", descriptor = "I") + private int anInt151 = 4096; + + @OriginalMember(owner = "client!aj", name = "", descriptor = "()V") + public TextureOpClamp() { + super(1, false); + } + + @OriginalMember(owner = "client!aj", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt148 = arg1.g2(); + } else if (arg0 == 1) { + this.anInt151 = arg1.g2(); + } else if (arg0 == 2) { + this.monochrome = arg1.g1() == 1; + } + } + + @OriginalMember(owner = "client!aj", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(22) int[][] local22 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(32) int[][] local32 = this.getChildColorOutput(arg0, 0); + @Pc(36) int[] local36 = local32[1]; + @Pc(40) int[] local40 = local32[2]; + @Pc(44) int[] local44 = local32[0]; + @Pc(48) int[] local48 = local22[0]; + @Pc(52) int[] local52 = local22[1]; + @Pc(56) int[] local56 = local22[2]; + for (@Pc(58) int local58 = 0; local58 < Texture.width; local58++) { + @Pc(69) int local69 = local36[local58]; + @Pc(73) int local73 = local44[local58]; + @Pc(77) int local77 = local40[local58]; + if (this.anInt148 > local73) { + local48[local58] = this.anInt148; + } else if (local73 > this.anInt151) { + local48[local58] = this.anInt151; + } else { + local48[local58] = local73; + } + if (this.anInt148 > local69) { + local52[local58] = this.anInt148; + } else if (local69 <= this.anInt151) { + local52[local58] = local69; + } else { + local52[local58] = this.anInt151; + } + if (local77 < this.anInt148) { + local56[local58] = this.anInt148; + } else if (this.anInt151 >= local77) { + local56[local58] = local77; + } else { + local56[local58] = this.anInt151; + } + } + } + return local22; + } + + @OriginalMember(owner = "client!aj", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(29) int[] local29 = this.getChildMonochromeOutput(0, arg0); + for (@Pc(31) int local31 = 0; local31 < Texture.width; local31++) { + @Pc(38) int local38 = local29[local31]; + if (this.anInt148 > local38) { + local19[local31] = this.anInt148; + } else if (this.anInt151 >= local38) { + local19[local31] = local38; + } else { + local19[local31] = this.anInt151; + } + } + } + return local19; + } +} diff --git a/client/src/main/java/rt4/TextureOpColorFill.java b/client/src/main/java/rt4/TextureOpColorFill.java new file mode 100644 index 0000000..8db89e7 --- /dev/null +++ b/client/src/main/java/rt4/TextureOpColorFill.java @@ -0,0 +1,62 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!fm") +public final class TextureOpColorFill extends TextureOp { + + @OriginalMember(owner = "client!fm", name = "P", descriptor = "I") + private int red; + + @OriginalMember(owner = "client!fm", name = "X", descriptor = "I") + private int green; + + @OriginalMember(owner = "client!fm", name = "Z", descriptor = "I") + private int blue; + + @OriginalMember(owner = "client!fm", name = "", descriptor = "(I)V") + private TextureOpColorFill(@OriginalArg(0) int arg0) { + super(0, false); + this.setColor(arg0); + } + + @OriginalMember(owner = "client!fm", name = "", descriptor = "()V") + public TextureOpColorFill() { + this(0); + } + + @OriginalMember(owner = "client!fm", name = "a", descriptor = "(BI)V") + private void setColor(@OriginalArg(1) int arg0) { + this.green = arg0 >> 4 & 0xFF0; + this.blue = (arg0 & 0xFF) << 4; + this.red = arg0 >> 12 & 0xFF0; + } + + @OriginalMember(owner = "client!fm", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(22) int[][] local22 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(31) int[] local31 = local22[0]; + @Pc(35) int[] local35 = local22[1]; + @Pc(39) int[] local39 = local22[2]; + for (@Pc(41) int local41 = 0; local41 < Texture.width; local41++) { + local31[local41] = this.red; + local35[local41] = this.green; + local39[local41] = this.blue; + } + } + return local22; + } + + @OriginalMember(owner = "client!fm", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.setColor(arg1.g3()); + } + } +} diff --git a/client/src/main/java/rt4/TextureOpColorGradient.java b/client/src/main/java/rt4/TextureOpColorGradient.java new file mode 100644 index 0000000..24fe79e --- /dev/null +++ b/client/src/main/java/rt4/TextureOpColorGradient.java @@ -0,0 +1,328 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!um") +public final class TextureOpColorGradient extends TextureOp { + + @OriginalMember(owner = "client!um", name = "R", descriptor = "[[I") + private int[][] samples; + + @OriginalMember(owner = "client!um", name = "bb", descriptor = "[I") + private final int[] colors = new int[257]; + + @OriginalMember(owner = "client!um", name = "", descriptor = "()V") + public TextureOpColorGradient() { + super(1, false); + } + + @OriginalMember(owner = "client!um", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + if (this.samples == null) { + this.setPreset(1); + } + this.interpolate(); + } + + @OriginalMember(owner = "client!um", name = "a", descriptor = "(IZ)V") + private void setPreset(@OriginalArg(0) int arg0) { + if (arg0 == 0) { + return; + } + if (arg0 == 1) { + this.samples = new int[2][4]; + this.samples[0][1] = 0; + this.samples[0][0] = 0; + this.samples[1][0] = 4096; + this.samples[0][3] = 0; + this.samples[1][1] = 4096; + this.samples[0][2] = 0; + this.samples[1][2] = 4096; + this.samples[1][3] = 4096; + } else if (arg0 == 2) { + this.samples = new int[8][4]; + this.samples[0][0] = 0; + this.samples[1][0] = 2867; + this.samples[2][0] = 3072; + this.samples[0][2] = 2602; + this.samples[3][0] = 3276; + this.samples[0][3] = 2361; + this.samples[1][3] = 1558; + this.samples[4][0] = 3481; + this.samples[5][0] = 3686; + this.samples[2][3] = 1413; + this.samples[3][3] = 947; + this.samples[4][3] = 722; + this.samples[6][0] = 3891; + this.samples[1][2] = 1799; + this.samples[7][0] = 4096; + this.samples[5][3] = 1766; + this.samples[2][2] = 1734; + this.samples[3][2] = 1220; + this.samples[4][2] = 963; + this.samples[5][2] = 2152; + this.samples[6][3] = 915; + this.samples[7][3] = 1140; + this.samples[0][1] = 2650; + this.samples[6][2] = 1060; + this.samples[1][1] = 2313; + this.samples[2][1] = 2618; + this.samples[3][1] = 2296; + this.samples[4][1] = 2072; + this.samples[7][2] = 1413; + this.samples[5][1] = 2730; + this.samples[6][1] = 2232; + this.samples[7][1] = 1686; + } else if (arg0 == 3) { + this.samples = new int[7][4]; + this.samples[0][0] = 0; + this.samples[0][3] = 4096; + this.samples[1][3] = 4096; + this.samples[2][3] = 0; + this.samples[1][0] = 663; + this.samples[0][1] = 0; + this.samples[3][3] = 0; + this.samples[1][1] = 0; + this.samples[2][0] = 1363; + this.samples[2][1] = 0; + this.samples[4][3] = 0; + this.samples[5][3] = 4096; + this.samples[6][3] = 4096; + this.samples[3][0] = 2048; + this.samples[4][0] = 2727; + this.samples[5][0] = 3411; + this.samples[6][0] = 4096; + this.samples[3][1] = 4096; + this.samples[4][1] = 4096; + this.samples[5][1] = 4096; + this.samples[6][1] = 0; + this.samples[0][2] = 0; + this.samples[1][2] = 4096; + this.samples[2][2] = 4096; + this.samples[3][2] = 4096; + this.samples[4][2] = 0; + this.samples[5][2] = 0; + this.samples[6][2] = 0; + } else if (arg0 == 4) { + this.samples = new int[6][4]; + this.samples[0][3] = 0; + this.samples[0][0] = 0; + this.samples[0][2] = 0; + this.samples[1][0] = 1843; + this.samples[1][2] = 0; + this.samples[2][2] = 0; + this.samples[1][3] = 1493; + this.samples[2][3] = 2939; + this.samples[3][3] = 3565; + this.samples[3][2] = 1124; + this.samples[4][3] = 4031; + this.samples[0][1] = 0; + this.samples[1][1] = 0; + this.samples[5][3] = 4096; + this.samples[4][2] = 3084; + this.samples[2][0] = 2457; + this.samples[2][1] = 0; + this.samples[3][0] = 2781; + this.samples[4][0] = 3481; + this.samples[3][1] = 0; + this.samples[4][1] = 546; + this.samples[5][2] = 4096; + this.samples[5][0] = 4096; + this.samples[5][1] = 4096; + } else if (arg0 == 5) { + this.samples = new int[16][4]; + this.samples[0][3] = 321; + this.samples[0][0] = 0; + this.samples[0][2] = 192; + this.samples[1][0] = 155; + this.samples[1][3] = 562; + this.samples[1][2] = 449; + this.samples[2][0] = 389; + this.samples[3][0] = 671; + this.samples[2][2] = 690; + this.samples[0][1] = 80; + this.samples[1][1] = 321; + this.samples[4][0] = 897; + this.samples[3][2] = 995; + this.samples[4][2] = 1397; + this.samples[2][1] = 578; + this.samples[2][3] = 803; + this.samples[5][0] = 1175; + this.samples[6][0] = 1368; + this.samples[5][2] = 1429; + this.samples[3][1] = 947; + this.samples[7][0] = 1507; + this.samples[4][1] = 1285; + this.samples[6][2] = 1461; + this.samples[8][0] = 1736; + this.samples[3][3] = 1140; + this.samples[9][0] = 2088; + this.samples[7][2] = 1525; + this.samples[4][3] = 1509; + this.samples[5][1] = 1525; + this.samples[6][1] = 1734; + this.samples[5][3] = 1413; + this.samples[8][2] = 1590; + this.samples[10][0] = 2355; + this.samples[9][2] = 2056; + this.samples[7][1] = 1413; + this.samples[11][0] = 2691; + this.samples[12][0] = 3031; + this.samples[6][3] = 1333; + this.samples[10][2] = 2586; + this.samples[11][2] = 3148; + this.samples[13][0] = 3522; + this.samples[14][0] = 3727; + this.samples[7][3] = 1702; + this.samples[8][1] = 1108; + this.samples[9][1] = 1766; + this.samples[10][1] = 2409; + this.samples[15][0] = 4096; + this.samples[12][2] = 3710; + this.samples[11][1] = 3116; + this.samples[13][2] = 3421; + this.samples[12][1] = 3806; + this.samples[13][1] = 3437; + this.samples[14][1] = 3116; + this.samples[15][1] = 2377; + this.samples[8][3] = 2056; + this.samples[9][3] = 2666; + this.samples[14][2] = 3148; + this.samples[15][2] = 2505; + this.samples[10][3] = 3276; + this.samples[11][3] = 3228; + this.samples[12][3] = 3196; + this.samples[13][3] = 3019; + this.samples[14][3] = 3228; + this.samples[15][3] = 2746; + } else if (arg0 == 6) { + this.samples = new int[4][4]; + this.samples[0][3] = 0; + this.samples[0][2] = 4096; + this.samples[1][3] = 0; + this.samples[0][1] = 0; + this.samples[2][3] = 0; + this.samples[3][3] = 0; + this.samples[0][0] = 2048; + this.samples[1][1] = 4096; + this.samples[1][0] = 2867; + this.samples[2][1] = 4096; + this.samples[1][2] = 4096; + this.samples[2][2] = 4096; + this.samples[3][1] = 4096; + this.samples[2][0] = 3276; + this.samples[3][2] = 0; + this.samples[3][0] = 4096; + } else { + throw new RuntimeException("Invalid gradient preset"); + } + } + + @OriginalMember(owner = "client!um", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 != 0) { + return; + } + @Pc(15) int local15 = arg1.g1(); + if (local15 != 0) { + this.setPreset(local15); + return; + } + this.samples = new int[arg1.g1()][4]; + for (@Pc(35) int local35 = 0; local35 < this.samples.length; local35++) { + this.samples[local35][0] = arg1.g2(); + this.samples[local35][1] = arg1.g1() << 4; + this.samples[local35][2] = arg1.g1() << 4; + this.samples[local35][3] = arg1.g1() << 4; + } + } + + @OriginalMember(owner = "client!um", name = "h", descriptor = "(I)V") + private void interpolate() { + @Pc(16) int local16 = this.samples.length; + if (local16 <= 0) { + return; + } + for (@Pc(24) int local24 = 0; local24 < 257; local24++) { + @Pc(29) int local29 = 0; + @Pc(33) int local33 = local24 << 4; + for (@Pc(35) int local35 = 0; local16 > local35 && local33 >= this.samples[local35][0]; local35++) { + local29++; + } + @Pc(119) int local119; + @Pc(133) int local133; + @Pc(105) int local105; + @Pc(60) int[] local60; + if (local16 > local29) { + local60 = this.samples[local29]; + if (local29 > 0) { + @Pc(69) int[] local69 = this.samples[local29 - 1]; + @Pc(86) int local86 = (local33 - local69[0] << 12) / (local60[0] - local69[0]); + @Pc(91) int local91 = 4096 - local86; + local105 = local69[3] * local91 + local60[3] * local86 >> 12; + local119 = local91 * local69[1] + local86 * local60[1] >> 12; + local133 = local91 * local69[2] + local86 * local60[2] >> 12; + } else { + local119 = local60[1]; + local105 = local60[3]; + local133 = local60[2]; + } + } else { + local60 = this.samples[local16 - 1]; + local105 = local60[3]; + local133 = local60[2]; + local119 = local60[1]; + } + local119 >>= 0x4; + local133 >>= 0x4; + if (local119 < 0) { + local119 = 0; + } else if (local119 > 255) { + local119 = 255; + } + if (local133 < 0) { + local133 = 0; + } else if (local133 > 255) { + local133 = 255; + } + local105 >>= 0x4; + if (local105 < 0) { + local105 = 0; + } else if (local105 > 255) { + local105 = 255; + } + this.colors[local24] = local105 | local133 << 8 | local119 << 16; + } + } + + @OriginalMember(owner = "client!um", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(11) int[][] local11 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(31) int[] local31 = this.getChildMonochromeOutput(0, arg0); + @Pc(35) int[] local35 = local11[1]; + @Pc(39) int[] local39 = local11[0]; + @Pc(43) int[] local43 = local11[2]; + for (@Pc(45) int local45 = 0; local45 < Texture.width; local45++) { + @Pc(54) int local54 = local31[local45] >> 4; + if (local54 < 0) { + local54 = 0; + } + if (local54 > 256) { + local54 = 256; + } + local54 = this.colors[local54]; + local39[local45] = local54 >> 12 & 0xFF0; + local35[local45] = local54 >> 4 & 0xFF0; + local43[local45] = (local54 & 0xFF) << 4; + } + } + return local11; + } +} diff --git a/client/src/main/java/rt4/TextureOpCombine.java b/client/src/main/java/rt4/TextureOpCombine.java new file mode 100644 index 0000000..1c0c15c --- /dev/null +++ b/client/src/main/java/rt4/TextureOpCombine.java @@ -0,0 +1,247 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!pi") +public final class TextureOpCombine extends TextureOp { + + @OriginalMember(owner = "client!pi", name = "Z", descriptor = "I") + private int function = 6; + + @OriginalMember(owner = "client!pi", name = "", descriptor = "()V") + public TextureOpCombine() { + super(2, false); + } + + @OriginalMember(owner = "client!pi", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(11) int[] local11 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(22) int[] local22 = this.getChildMonochromeOutput(0, arg0); + @Pc(28) int[] local28 = this.getChildMonochromeOutput(1, arg0); + @Pc(31) int local31 = this.function; + if (local31 == 1) { + for (local31 = 0; local31 < Texture.width; local31++) { + local11[local31] = local28[local31] + local22[local31]; + } + } else if (local31 == 2) { + for (local31 = 0; local31 < Texture.width; local31++) { + local11[local31] = local22[local31] - local28[local31]; + } + } else if (local31 == 3) { + for (local31 = 0; local31 < Texture.width; local31++) { + local11[local31] = local28[local31] * local22[local31] >> 12; + } + } else { + @Pc(180) int local180; + if (local31 == 4) { + for (local31 = 0; local31 < Texture.width; local31++) { + local180 = local28[local31]; + local11[local31] = local180 == 0 ? 4096 : (local22[local31] << 12) / local180; + } + } else if (local31 == 5) { + for (local31 = 0; local31 < Texture.width; local31++) { + local11[local31] = 4096 - ((4096 - local22[local31]) * (-local28[local31] + 4096) >> 12); + } + } else if (local31 == 6) { + for (local31 = 0; local31 < Texture.width; local31++) { + local180 = local28[local31]; + local11[local31] = local180 >= 2048 ? 4096 - ((4096 - local22[local31]) * (-local180 + 4096) >> 11) : local180 * local22[local31] >> 11; + } + } else { + @Pc(295) int local295; + if (local31 == 7) { + for (local31 = 0; local31 < Texture.width; local31++) { + local295 = local22[local31]; + local11[local31] = local295 == 4096 ? 4096 : (local28[local31] << 12) / (4096 - local295); + } + } else if (local31 == 8) { + for (local31 = 0; local31 < Texture.width; local31++) { + local295 = local22[local31]; + local11[local31] = local295 == 0 ? 0 : 4096 - (4096 - local28[local31] << 12) / local295; + } + } else if (local31 == 9) { + for (local31 = 0; local31 < Texture.width; local31++) { + local180 = local28[local31]; + local295 = local22[local31]; + local11[local31] = local295 < local180 ? local295 : local180; + } + } else if (local31 == 10) { + for (local31 = 0; local31 < Texture.width; local31++) { + local180 = local28[local31]; + local295 = local22[local31]; + local11[local31] = local295 > local180 ? local295 : local180; + } + } else if (local31 == 11) { + for (local31 = 0; local31 < Texture.width; local31++) { + local295 = local22[local31]; + local180 = local28[local31]; + local11[local31] = local180 < local295 ? local295 - local180 : local180 - local295; + } + } else if (local31 == 12) { + for (local31 = 0; local31 < Texture.width; local31++) { + local295 = local22[local31]; + local180 = local28[local31]; + local11[local31] = local180 + local295 - (local295 * local180 >> 11); + } + } + } + } + } + return local11; + } + + @OriginalMember(owner = "client!pi", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(20) int[][] local20 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(30) int[][] local30 = this.getChildColorOutput(arg0, 0); + @Pc(36) int[][] local36 = this.getChildColorOutput(arg0, 1); + @Pc(40) int[] local40 = local20[0]; + @Pc(44) int[] local44 = local20[1]; + @Pc(48) int[] local48 = local20[2]; + @Pc(52) int[] local52 = local30[0]; + @Pc(56) int[] local56 = local30[1]; + @Pc(60) int[] local60 = local30[2]; + @Pc(64) int[] local64 = local36[0]; + @Pc(68) int[] local68 = local36[1]; + @Pc(72) int[] local72 = local36[2]; + @Pc(75) int local75 = this.function; + if (local75 == 1) { + for (local75 = 0; local75 < Texture.width; local75++) { + local40[local75] = local64[local75] + local52[local75]; + local44[local75] = local68[local75] + local56[local75]; + local48[local75] = local60[local75] + local72[local75]; + } + } else if (local75 == 2) { + for (local75 = 0; local75 < Texture.width; local75++) { + local40[local75] = local52[local75] - local64[local75]; + local44[local75] = local56[local75] - local68[local75]; + local48[local75] = local60[local75] - local72[local75]; + } + } else if (local75 == 3) { + for (local75 = 0; local75 < Texture.width; local75++) { + local40[local75] = local64[local75] * local52[local75] >> 12; + local44[local75] = local56[local75] * local68[local75] >> 12; + local48[local75] = local72[local75] * local60[local75] >> 12; + } + } else { + @Pc(286) int local286; + @Pc(282) int local282; + @Pc(278) int local278; + if (local75 == 4) { + for (local75 = 0; local75 < Texture.width; local75++) { + local278 = local72[local75]; + local282 = local68[local75]; + local286 = local64[local75]; + local40[local75] = local286 == 0 ? 4096 : (local52[local75] << 12) / local286; + local44[local75] = local282 == 0 ? 4096 : (local56[local75] << 12) / local282; + local48[local75] = local278 == 0 ? 4096 : (local60[local75] << 12) / local278; + } + } else if (local75 == 5) { + for (local75 = 0; local75 < Texture.width; local75++) { + local40[local75] = 4096 - ((4096 - local64[local75]) * (4096 - local52[local75]) >> 12); + local44[local75] = 4096 - ((4096 - local68[local75]) * (-local56[local75] + 4096) >> 12); + local48[local75] = 4096 - ((4096 - local72[local75]) * (-local60[local75] + 4096) >> 12); + } + } else if (local75 == 6) { + for (local75 = 0; local75 < Texture.width; local75++) { + local278 = local72[local75]; + local286 = local64[local75]; + local282 = local68[local75]; + local40[local75] = local286 >= 2048 ? 4096 - ((4096 - local286) * (-local52[local75] + 4096) >> 11) : local286 * local52[local75] >> 11; + local44[local75] = local282 < 2048 ? local282 * local56[local75] >> 11 : 4096 - ((4096 - local282) * (-local56[local75] + 4096) >> 11); + local48[local75] = local278 >= 2048 ? 4096 - ((4096 - local278) * (-local60[local75] + 4096) >> 11) : local60[local75] * local278 >> 11; + } + } else { + @Pc(539) int local539; + @Pc(543) int local543; + @Pc(535) int local535; + if (local75 == 7) { + for (local75 = 0; local75 < Texture.width; local75++) { + local535 = local60[local75]; + local539 = local52[local75]; + local543 = local56[local75]; + local40[local75] = local539 == 4096 ? 4096 : (local64[local75] << 12) / (4096 - local539); + local44[local75] = local543 == 4096 ? 4096 : (local68[local75] << 12) / (4096 - local543); + local48[local75] = local535 == 4096 ? 4096 : (local72[local75] << 12) / (4096 - local535); + } + } else if (local75 == 8) { + for (local75 = 0; local75 < Texture.width; local75++) { + local539 = local52[local75]; + local543 = local56[local75]; + local535 = local60[local75]; + local40[local75] = local539 == 0 ? 0 : 4096 - (4096 - local64[local75] << 12) / local539; + local44[local75] = local543 == 0 ? 0 : 4096 - (4096 - local68[local75] << 12) / local543; + local48[local75] = local535 == 0 ? 0 : 4096 - (4096 - local72[local75] << 12) / local535; + } + } else if (local75 == 9) { + for (local75 = 0; local75 < Texture.width; local75++) { + local535 = local60[local75]; + local278 = local72[local75]; + local282 = local68[local75]; + local543 = local56[local75]; + local286 = local64[local75]; + local539 = local52[local75]; + local40[local75] = local539 >= local286 ? local286 : local539; + local44[local75] = local543 >= local282 ? local282 : local543; + local48[local75] = local535 < local278 ? local535 : local278; + } + } else if (local75 == 10) { + for (local75 = 0; local75 < Texture.width; local75++) { + local278 = local72[local75]; + local535 = local60[local75]; + local282 = local68[local75]; + local539 = local52[local75]; + local543 = local56[local75]; + local286 = local64[local75]; + local40[local75] = local286 < local539 ? local539 : local286; + local44[local75] = local543 > local282 ? local543 : local282; + local48[local75] = local278 < local535 ? local535 : local278; + } + } else if (local75 == 11) { + for (local75 = 0; local75 < Texture.width; local75++) { + local282 = local68[local75]; + local286 = local64[local75]; + local543 = local56[local75]; + local539 = local52[local75]; + local535 = local60[local75]; + local278 = local72[local75]; + local40[local75] = local539 > local286 ? local539 - local286 : -local539 + local286; + local44[local75] = local543 > local282 ? local543 - local282 : -local543 + local282; + local48[local75] = local278 < local535 ? local535 - local278 : -local535 + local278; + } + } else if (local75 == 12) { + for (local75 = 0; local75 < Texture.width; local75++) { + local539 = local52[local75]; + local278 = local72[local75]; + local286 = local64[local75]; + local282 = local68[local75]; + local535 = local60[local75]; + local543 = local56[local75]; + local40[local75] = local286 + local539 - (local286 * local539 >> 11); + local44[local75] = local282 + local543 - (local543 * local282 >> 11); + local48[local75] = local278 + local535 - (local535 * local278 >> 11); + } + } + } + } + } + return local20; + } + + @OriginalMember(owner = "client!pi", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.function = arg1.g1(); + } else if (arg0 == 1) { + this.monochrome = arg1.g1() == 1; + } + } +} diff --git a/client/src/main/java/rt4/TextureOpCurve.java b/client/src/main/java/rt4/TextureOpCurve.java new file mode 100644 index 0000000..8e64f44 --- /dev/null +++ b/client/src/main/java/rt4/TextureOpCurve.java @@ -0,0 +1,178 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!wi") +public final class TextureOpCurve extends TextureOp { + + @OriginalMember(owner = "client!wi", name = "Q", descriptor = "[I") + private int[] lastMarker; + + @OriginalMember(owner = "client!wi", name = "gb", descriptor = "[I") + private int[] firstMarker; + + @OriginalMember(owner = "client!wi", name = "ib", descriptor = "[[I") + private int[][] markers; + + @OriginalMember(owner = "client!wi", name = "cb", descriptor = "[S") + private final short[] aShortArray96 = new short[257]; + + @OriginalMember(owner = "client!wi", name = "Z", descriptor = "I") + private int anInt5852 = 0; + + @OriginalMember(owner = "client!wi", name = "", descriptor = "()V") + public TextureOpCurve() { + super(1, true); + } + + @OriginalMember(owner = "client!wi", name = "h", descriptor = "(I)V") + private void method4639() { + @Pc(8) int local8 = this.anInt5852; + @Pc(29) int local29; + @Pc(27) int local27; + @Pc(59) int[] local59; + @Pc(52) int[] local52; + @Pc(68) int local68; + @Pc(76) int local76; + @Pc(72) int local72; + @Pc(89) int local89; + if (local8 == 2) { + for (local8 = 0; local8 < 257; local8++) { + local27 = local8 << 4; + for (local29 = 1; this.markers.length - 1 > local29 && this.markers[local29][0] <= local27; local29++) { + } + local52 = this.markers[local29]; + local59 = this.markers[local29 - 1]; + local68 = this.getMarker(local29 - 2)[1]; + local72 = local52[1]; + local76 = local59[1]; + @Pc(80) int local80 = local72 - local68; + local89 = this.getMarker(local29 + 1)[1]; + @Pc(107) int local107 = (local27 - local59[0] << 12) / (local52[0] - local59[0]); + @Pc(117) int local117 = local89 + local76 - local72 - local68; + @Pc(123) int local123 = local107 * local107 >> 12; + @Pc(130) int local130 = local68 - local76 - local117; + @Pc(136) int local136 = local80 * local107 >> 12; + @Pc(142) int local142 = local123 * local130 >> 12; + @Pc(154) int local154 = local123 * (local107 * local117 >> 12) >> 12; + @Pc(162) int local162 = local76 + local142 + local154 + local136; + if (local162 <= -32768) { + local162 = -32767; + } + if (local162 >= 32768) { + local162 = 32767; + } + this.aShortArray96[local8] = (short) local162; + } + } else if (local8 == 1) { + for (local8 = 0; local8 < 257; local8++) { + local27 = local8 << 4; + for (local29 = 1; local29 < this.markers.length - 1 && this.markers[local29][0] <= local27; local29++) { + } + local59 = this.markers[local29 - 1]; + local52 = this.markers[local29]; + local68 = (local27 - local59[0] << 12) / (local52[0] - local59[0]); + local76 = 4096 - TextureOp.COSINE[local68 >> 5 & 0xFF] >> 1; + local72 = 4096 - local76; + local89 = local76 * local52[1] + local59[1] * local72 >> 12; + if (local89 <= -32768) { + local89 = -32767; + } + if (local89 >= 32768) { + local89 = 32767; + } + this.aShortArray96[local8] = (short) local89; + } + } else { + for (local8 = 0; local8 < 257; local8++) { + local27 = local8 << 4; + for (local29 = 1; this.markers.length - 1 > local29 && this.markers[local29][0] <= local27; local29++) { + } + local52 = this.markers[local29]; + local59 = this.markers[local29 - 1]; + local68 = (local27 - local59[0] << 12) / (local52[0] - local59[0]); + local76 = 4096 - local68; + local72 = local52[1] * local68 + local76 * local59[1] >> 12; + if (local72 <= -32768) { + local72 = -32767; + } + if (local72 >= 32768) { + local72 = 32767; + } + this.aShortArray96[local8] = (short) local72; + } + } + } + + @OriginalMember(owner = "client!wi", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(29) int[] local29 = this.getChildMonochromeOutput(0, arg0); + for (@Pc(31) int local31 = 0; local31 < Texture.width; local31++) { + @Pc(44) int local44 = local29[local31] >> 4; + if (local44 < 0) { + local44 = 0; + } + if (local44 > 256) { + local44 = 256; + } + local19[local31] = this.aShortArray96[local44]; + } + } + return local19; + } + + @OriginalMember(owner = "client!wi", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + if (this.markers == null) { + this.markers = new int[][]{{0, 0}, {4096, 4096}}; + } + if (this.markers.length < 2) { + throw new RuntimeException("Curve operation requires at least two markers"); + } + if (this.anInt5852 == 2) { + this.method4642(); + } + TextureOp.createTrigonometryTables(); + this.method4639(); + } + + @OriginalMember(owner = "client!wi", name = "a", descriptor = "(Z)V") + private void method4642() { + @Pc(8) int[] local8 = this.markers[0]; + @Pc(20) int[] local20 = this.markers[1]; + @Pc(29) int[] local29 = this.markers[this.markers.length - 2]; + @Pc(38) int[] local38 = this.markers[this.markers.length - 1]; + this.lastMarker = new int[]{local8[0] + local8[0] - local20[0], -local20[1] + local8[1] + local8[1]}; + this.firstMarker = new int[]{local29[0] + local29[0] - local38[0], -local38[1] - -local29[1] + local29[1]}; + } + + @OriginalMember(owner = "client!wi", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 != 0) { + return; + } + this.anInt5852 = arg1.g1(); + this.markers = new int[arg1.g1()][2]; + for (@Pc(23) int local23 = 0; local23 < this.markers.length; local23++) { + this.markers[local23][0] = arg1.g2(); + this.markers[local23][1] = arg1.g2(); + } + } + + @OriginalMember(owner = "client!wi", name = "a", descriptor = "(BI)[I") + private int[] getMarker(@OriginalArg(1) int arg0) { + if (arg0 >= 0) { + return arg0 >= this.markers.length ? this.firstMarker : this.markers[arg0]; + } else { + return this.lastMarker; + } + } +} diff --git a/client/src/main/java/rt4/TextureOpFlip.java b/client/src/main/java/rt4/TextureOpFlip.java new file mode 100644 index 0000000..3e2a0c8 --- /dev/null +++ b/client/src/main/java/rt4/TextureOpFlip.java @@ -0,0 +1,80 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ej") +public final class TextureOpFlip extends TextureOp { + + @OriginalMember(owner = "client!ej", name = "P", descriptor = "Z") + private boolean aBoolean104 = true; + + @OriginalMember(owner = "client!ej", name = "Y", descriptor = "Z") + private boolean aBoolean105 = true; + + @OriginalMember(owner = "client!ej", name = "", descriptor = "()V") + public TextureOpFlip() { + super(1, false); + } + + @OriginalMember(owner = "client!ej", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.aBoolean104 = arg1.g1() == 1; + } else if (arg0 == 1) { + this.aBoolean105 = arg1.g1() == 1; + } else if (arg0 == 2) { + this.monochrome = arg1.g1() == 1; + } + } + + @OriginalMember(owner = "client!ej", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(20) int[][] local20 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(39) int[][] local39 = this.getChildColorOutput(this.aBoolean105 ? Texture.heightMask - arg0 : arg0, 0); + @Pc(43) int[] local43 = local39[0]; + @Pc(47) int[] local47 = local39[2]; + @Pc(51) int[] local51 = local39[1]; + @Pc(55) int[] local55 = local20[1]; + @Pc(59) int[] local59 = local20[2]; + @Pc(63) int[] local63 = local20[0]; + @Pc(68) int local68; + if (this.aBoolean104) { + for (local68 = 0; local68 < Texture.width; local68++) { + local63[local68] = local43[Texture.widthMask - local68]; + local55[local68] = local51[Texture.widthMask - local68]; + local59[local68] = local47[Texture.widthMask - local68]; + } + } else { + for (local68 = 0; local68 < Texture.width; local68++) { + local63[local68] = local43[local68]; + local55[local68] = local51[local68]; + local59[local68] = local47[local68]; + } + } + } + return local20; + } + + @OriginalMember(owner = "client!ej", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(15) int[] local15 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(38) int[] local38 = this.getChildMonochromeOutput(0, this.aBoolean105 ? Texture.heightMask - arg0 : arg0); + if (this.aBoolean104) { + for (@Pc(51) int local51 = 0; local51 < Texture.width; local51++) { + local15[local51] = local38[Texture.widthMask - local51]; + } + } else { + ArrayUtils.copy(local38, 0, local15, 0, Texture.width); + } + } + return local15; + } +} diff --git a/client/src/main/java/rt4/TextureOpHorizontalGradient.java b/client/src/main/java/rt4/TextureOpHorizontalGradient.java new file mode 100644 index 0000000..c79b7bb --- /dev/null +++ b/client/src/main/java/rt4/TextureOpHorizontalGradient.java @@ -0,0 +1,20 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!rl") +public final class TextureOpHorizontalGradient extends TextureOp { + + @OriginalMember(owner = "client!rl", name = "", descriptor = "()V") + public TextureOpHorizontalGradient() { + super(0, true); + } + + @OriginalMember(owner = "client!rl", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + return Texture.widthFractions; + } +} diff --git a/client/src/main/java/rt4/TextureOpInterpolate.java b/client/src/main/java/rt4/TextureOpInterpolate.java new file mode 100644 index 0000000..d3d9fa5 --- /dev/null +++ b/client/src/main/java/rt4/TextureOpInterpolate.java @@ -0,0 +1,83 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!bl") +public final class TextureOpInterpolate extends TextureOp { + + @OriginalMember(owner = "client!bl", name = "", descriptor = "()V") + public TextureOpInterpolate() { + super(3, false); + } + + @OriginalMember(owner = "client!bl", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(16) int[][] local16 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(27) int[] local27 = this.getChildMonochromeOutput(2, arg0); + @Pc(33) int[][] local33 = this.getChildColorOutput(arg0, 0); + @Pc(39) int[][] local39 = this.getChildColorOutput(arg0, 1); + @Pc(43) int[] local43 = local16[2]; + @Pc(47) int[] local47 = local16[1]; + @Pc(51) int[] local51 = local33[0]; + @Pc(55) int[] local55 = local33[1]; + @Pc(59) int[] local59 = local16[0]; + @Pc(63) int[] local63 = local39[0]; + @Pc(67) int[] local67 = local33[2]; + @Pc(71) int[] local71 = local39[2]; + @Pc(75) int[] local75 = local39[1]; + for (@Pc(77) int local77 = 0; local77 < Texture.width; local77++) { + @Pc(88) int local88 = local27[local77]; + if (local88 == 4096) { + local59[local77] = local51[local77]; + local47[local77] = local55[local77]; + local43[local77] = local67[local77]; + } else if (local88 == 0) { + local59[local77] = local63[local77]; + local47[local77] = local75[local77]; + local43[local77] = local71[local77]; + } else { + @Pc(99) int local99 = 4096 - local88; + local59[local77] = local99 * local63[local77] + local88 * local51[local77] >> 12; + local47[local77] = local99 * local75[local77] + local55[local77] * local88 >> 12; + local43[local77] = local71[local77] * local99 + local67[local77] * local88 >> 12; + } + } + } + return local16; + } + + @OriginalMember(owner = "client!bl", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.monochrome = arg1.g1() == 1; + } + } + + @OriginalMember(owner = "client!bl", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(11) int[] local11 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(30) int[] local30 = this.getChildMonochromeOutput(0, arg0); + @Pc(36) int[] local36 = this.getChildMonochromeOutput(1, arg0); + @Pc(42) int[] local42 = this.getChildMonochromeOutput(2, arg0); + for (@Pc(44) int local44 = 0; local44 < Texture.width; local44++) { + @Pc(55) int local55 = local42[local44]; + if (local55 == 4096) { + local11[local44] = local30[local44]; + } else if (local55 == 0) { + local11[local44] = local36[local44]; + } else { + local11[local44] = local55 * local30[local44] + (4096 - local55) * local36[local44] >> 12; + } + } + } + return local11; + } +} diff --git a/client/src/main/java/rt4/TextureOpInvert.java b/client/src/main/java/rt4/TextureOpInvert.java new file mode 100644 index 0000000..f7241df --- /dev/null +++ b/client/src/main/java/rt4/TextureOpInvert.java @@ -0,0 +1,57 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!tb") +public final class TextureOpInvert extends TextureOp { + + @OriginalMember(owner = "client!tb", name = "", descriptor = "()V") + public TextureOpInvert() { + super(1, false); + } + + @OriginalMember(owner = "client!tb", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(7) int[] local7 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(21) int[] local21 = this.getChildMonochromeOutput(0, arg0); + for (@Pc(23) int local23 = 0; local23 < Texture.width; local23++) { + local7[local23] = 4096 - local21[local23]; + } + } + return local7; + } + + @OriginalMember(owner = "client!tb", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.monochrome = arg1.g1() == 1; + } + } + + @OriginalMember(owner = "client!tb", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(18) int[][] local18 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(28) int[][] local28 = this.getChildColorOutput(arg0, 0); + @Pc(32) int[] local32 = local28[2]; + @Pc(36) int[] local36 = local28[0]; + @Pc(40) int[] local40 = local28[1]; + @Pc(44) int[] local44 = local18[0]; + @Pc(48) int[] local48 = local18[1]; + @Pc(52) int[] local52 = local18[2]; + for (@Pc(54) int local54 = 0; local54 < Texture.width; local54++) { + local44[local54] = 4096 - local36[local54]; + local48[local54] = 4096 - local40[local54]; + local52[local54] = 4096 - local32[local54]; + } + } + return local18; + } +} diff --git a/client/src/main/java/rt4/TextureOpMonochrome.java b/client/src/main/java/rt4/TextureOpMonochrome.java new file mode 100644 index 0000000..0af99c0 --- /dev/null +++ b/client/src/main/java/rt4/TextureOpMonochrome.java @@ -0,0 +1,31 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!fn") +public final class TextureOpMonochrome extends TextureOp { + + @OriginalMember(owner = "client!fn", name = "", descriptor = "()V") + public TextureOpMonochrome() { + super(1, true); + } + + @OriginalMember(owner = "client!fn", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(30) int[][] local30 = this.getChildColorOutput(arg0, 0); + @Pc(34) int[] local34 = local30[0]; + @Pc(38) int[] local38 = local30[2]; + @Pc(42) int[] local42 = local30[1]; + for (@Pc(44) int local44 = 0; local44 < Texture.width; local44++) { + local19[local44] = (local38[local44] + local34[local44] + local42[local44]) / 3; + } + } + return local19; + } +} diff --git a/client/src/main/java/rt4/TextureOpMonochromeFill.java b/client/src/main/java/rt4/TextureOpMonochromeFill.java new file mode 100644 index 0000000..1e3ae5d --- /dev/null +++ b/client/src/main/java/rt4/TextureOpMonochromeFill.java @@ -0,0 +1,43 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!mi") +public final class TextureOpMonochromeFill extends TextureOp { + + @OriginalMember(owner = "client!mi", name = "bb", descriptor = "I") + private int anInt3894; + + @OriginalMember(owner = "client!mi", name = "", descriptor = "(I)V") + private TextureOpMonochromeFill(@OriginalArg(0) int arg0) { + super(0, true); + this.anInt3894 = 4096; + this.anInt3894 = arg0; + } + + @OriginalMember(owner = "client!mi", name = "", descriptor = "()V") + public TextureOpMonochromeFill() { + this(4096); + } + + @OriginalMember(owner = "client!mi", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt3894 = (arg1.g1() << 12) / 255; + } + } + + @OriginalMember(owner = "client!mi", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(17) int[] local17 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + ArrayUtils.fill(local17, 0, Texture.width, this.anInt3894); + } + return local17; + } +} diff --git a/client/src/main/java/rt4/TextureOpNoise.java b/client/src/main/java/rt4/TextureOpNoise.java new file mode 100644 index 0000000..f58c8e7 --- /dev/null +++ b/client/src/main/java/rt4/TextureOpNoise.java @@ -0,0 +1,35 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!rj") +public final class TextureOpNoise extends TextureOp { + + @OriginalMember(owner = "client!rj", name = "", descriptor = "()V") + public TextureOpNoise() { + super(0, true); + } + + @OriginalMember(owner = "client!rj", name = "c", descriptor = "(III)I") + private int method3769(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(19) int local19 = arg1 + arg0 * 57; + @Pc(25) int local25 = local19 ^ local19 << 1; + return 4096 - (local25 * (local25 * local25 * 15731 + 789221) + 1376312589 & Integer.MAX_VALUE) / 262144; + } + + @OriginalMember(owner = "client!rj", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(15) int[] local15 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(27) int local27 = Texture.heightFractions[arg0]; + for (@Pc(29) int local29 = 0; local29 < Texture.width; local29++) { + local15[local29] = this.method3769(local27, Texture.widthFractions[local29]) % 4096; + } + } + return local15; + } +} diff --git a/client/src/main/java/rt4/TextureOpRange.java b/client/src/main/java/rt4/TextureOpRange.java new file mode 100644 index 0000000..46adad0 --- /dev/null +++ b/client/src/main/java/rt4/TextureOpRange.java @@ -0,0 +1,76 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!fh") +public final class TextureOpRange extends TextureOp { + + @OriginalMember(owner = "client!fh", name = "jb", descriptor = "I") + private int anInt2007 = 1024; + + @OriginalMember(owner = "client!fh", name = "db", descriptor = "I") + private int anInt2001 = 2048; + + @OriginalMember(owner = "client!fh", name = "eb", descriptor = "I") + private int anInt2002 = 3072; + + @OriginalMember(owner = "client!fh", name = "", descriptor = "()V") + public TextureOpRange() { + super(1, false); + } + + @OriginalMember(owner = "client!fh", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.anInt2007 = arg1.g2(); + } else if (arg0 == 1) { + this.anInt2002 = arg1.g2(); + } else if (arg0 == 2) { + this.monochrome = arg1.g1() == 1; + } + } + + @OriginalMember(owner = "client!fh", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(30) int[] local30 = this.getChildMonochromeOutput(0, arg0); + for (@Pc(32) int local32 = 0; local32 < Texture.width; local32++) { + local19[local32] = this.anInt2007 + (local30[local32] * this.anInt2001 >> 12); + } + } + return local19; + } + + @OriginalMember(owner = "client!fh", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(7) int[][] local7 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(17) int[][] local17 = this.getChildColorOutput(arg0, 0); + @Pc(21) int[] local21 = local17[1]; + @Pc(25) int[] local25 = local17[2]; + @Pc(29) int[] local29 = local17[0]; + @Pc(33) int[] local33 = local7[0]; + @Pc(37) int[] local37 = local7[1]; + @Pc(41) int[] local41 = local7[2]; + for (@Pc(43) int local43 = 0; local43 < Texture.width; local43++) { + local33[local43] = this.anInt2007 + (this.anInt2001 * local29[local43] >> 12); + local37[local43] = (this.anInt2001 * local21[local43] >> 12) + this.anInt2007; + local41[local43] = this.anInt2007 + (this.anInt2001 * local25[local43] >> 12); + } + } + return local7; + } + + @OriginalMember(owner = "client!fh", name = "e", descriptor = "(I)V") + @Override + public final void postDecode() { + this.anInt2001 = this.anInt2002 - this.anInt2007; + } +} diff --git a/client/src/main/java/rt4/TextureOpSprite.java b/client/src/main/java/rt4/TextureOpSprite.java new file mode 100644 index 0000000..5d6cdeb --- /dev/null +++ b/client/src/main/java/rt4/TextureOpSprite.java @@ -0,0 +1,95 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!nh") +public class TextureOpSprite extends TextureOp { + + @OriginalMember(owner = "client!nh", name = "U", descriptor = "I") + protected int width; + + @OriginalMember(owner = "client!nh", name = "X", descriptor = "I") + protected int height; + + @OriginalMember(owner = "client!nh", name = "Y", descriptor = "[I") + protected int[] pixels; + + @OriginalMember(owner = "client!nh", name = "P", descriptor = "I") + private int spriteId = -1; + + @OriginalMember(owner = "client!nh", name = "", descriptor = "()V") + public TextureOpSprite() { + super(0, false); + } + + @OriginalMember(owner = "client!nh", name = "h", descriptor = "(I)Z") + protected final boolean loadSprite() { + if (this.pixels != null) { + return true; + } else if (this.spriteId < 0) { + return false; + } else { + @Pc(43) SoftwareSprite local43 = Texture.spriteGroupId < 0 ? SpriteLoader.loadSoftwareSpriteAutoDetect(Texture.spritesArchive, this.spriteId) : SpriteLoader.loadSoftwareSprite(this.spriteId, Texture.spritesArchive, Texture.spriteGroupId); + local43.trim(); + this.height = local43.height; + this.width = local43.width; + this.pixels = local43.pixels; + return true; + } + } + + @OriginalMember(owner = "client!nh", name = "f", descriptor = "(I)I") + @Override + public final int method4631() { + return this.spriteId; + } + + @OriginalMember(owner = "client!nh", name = "b", descriptor = "(II)[[I") + @Override + public int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(18) int[][] local18 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid && this.loadSprite()) { + @Pc(31) int[] local31 = local18[0]; + @Pc(35) int[] local35 = local18[1]; + @Pc(39) int[] local39 = local18[2]; + @Pc(59) int local59 = (this.height == Texture.height ? arg0 : this.height * arg0 / Texture.height) * this.width; + @Pc(65) int local65; + @Pc(78) int local78; + if (Texture.width == this.width) { + for (local65 = 0; local65 < Texture.width; local65++) { + local78 = this.pixels[local59++]; + local39[local65] = (local78 & 0xFF) << 4; + local35[local65] = local78 >> 4 & 0xFF0; + local31[local65] = local78 >> 12 & 0xFF0; + } + } else { + for (local65 = 0; local65 < Texture.width; local65++) { + local78 = this.width * local65 / Texture.width; + @Pc(127) int local127 = this.pixels[local59 + local78]; + local39[local65] = (local127 & 0xFF) << 4; + local35[local65] = local127 >> 4 & 0xFF0; + local31[local65] = local127 >> 12 & 0xFF0; + } + } + } + return local18; + } + + @OriginalMember(owner = "client!nh", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.spriteId = arg1.g2(); + } + } + + @OriginalMember(owner = "client!nh", name = "e", descriptor = "(B)V") + @Override + public final void clearImageCache() { + super.clearImageCache(); + this.pixels = null; + } +} diff --git a/client/src/main/java/rt4/TextureOpTexture.java b/client/src/main/java/rt4/TextureOpTexture.java new file mode 100644 index 0000000..64e5730 --- /dev/null +++ b/client/src/main/java/rt4/TextureOpTexture.java @@ -0,0 +1,97 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ui") +public final class TextureOpTexture extends TextureOp { + + @OriginalMember(owner = "client!ui", name = "U", descriptor = "[I") + private int[] pixels; + + @OriginalMember(owner = "client!ui", name = "gb", descriptor = "I") + private int width; + + @OriginalMember(owner = "client!ui", name = "ib", descriptor = "I") + private int height; + + @OriginalMember(owner = "client!ui", name = "lb", descriptor = "I") + private int textureId = -1; + + @OriginalMember(owner = "client!ui", name = "", descriptor = "()V") + public TextureOpTexture() { + super(0, false); + } + + @OriginalMember(owner = "client!ui", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(17) int[][] local17 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid && this.loadTexture()) { + @Pc(42) int local42 = (this.height == Texture.height ? arg0 : this.height * arg0 / Texture.height) * this.width; + @Pc(46) int[] local46 = local17[0]; + @Pc(50) int[] local50 = local17[1]; + @Pc(54) int[] local54 = local17[2]; + @Pc(64) int local64; + @Pc(73) int local73; + if (Texture.width == this.width) { + for (local64 = 0; local64 < Texture.width; local64++) { + local73 = this.pixels[local42++]; + local54[local64] = (local73 & 0xFF) << 4; + local50[local64] = local73 >> 4 & 0xFF0; + local46[local64] = local73 >> 12 & 0xFF0; + } + } else { + for (local64 = 0; local64 < Texture.width; local64++) { + local73 = this.width * local64 / Texture.width; + @Pc(122) int local122 = this.pixels[local42 + local73]; + local54[local64] = (local122 & 0xFF) << 4; + local50[local64] = local122 >> 4 & 0xFF0; + local46[local64] = local122 >> 12 & 0xFF0; + } + } + } + return local17; + } + + @OriginalMember(owner = "client!ui", name = "a", descriptor = "(Z)Z") + private boolean loadTexture() { + if (this.pixels != null) { + return true; + } else if (this.textureId < 0) { + return false; + } else { + @Pc(22) int local22 = Texture.width; + @Pc(24) int local24 = Texture.height; + @Pc(34) int local34 = Texture.provider.isLowDetail(this.textureId) ? 64 : 128; + this.pixels = Texture.provider.getPixels(this.textureId); + this.height = local34; + this.width = local34; + Texture.setSize(local24, local22); + return this.pixels != null; + } + } + + @OriginalMember(owner = "client!ui", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.textureId = arg1.g2(); + } + } + + @OriginalMember(owner = "client!ui", name = "e", descriptor = "(B)V") + @Override + public final void clearImageCache() { + super.clearImageCache(); + this.pixels = null; + } + + @OriginalMember(owner = "client!ui", name = "d", descriptor = "(B)I") + @Override + public final int method4627() { + return this.textureId; + } +} diff --git a/client/src/main/java/rt4/TextureOpTile.java b/client/src/main/java/rt4/TextureOpTile.java new file mode 100644 index 0000000..4b068e3 --- /dev/null +++ b/client/src/main/java/rt4/TextureOpTile.java @@ -0,0 +1,94 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!gg") +public final class TextureOpTile extends TextureOp { + + @OriginalMember(owner = "client!gg", name = "V", descriptor = "I") + private int horizontalTiles = 4; + + @OriginalMember(owner = "client!gg", name = "R", descriptor = "I") + private int verticalTiles = 4; + + @OriginalMember(owner = "client!gg", name = "", descriptor = "()V") + public TextureOpTile() { + super(1, false); + } + + @OriginalMember(owner = "client!gg", name = "a", descriptor = "(ILclient!wa;Z)V") + @Override + public final void decode(@OriginalArg(0) int arg0, @OriginalArg(1) Buffer arg1) { + if (arg0 == 0) { + this.horizontalTiles = arg1.g1(); + } else if (arg0 == 1) { + this.verticalTiles = arg1.g1(); + } + } + + @OriginalMember(owner = "client!gg", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int arg0) { + @Pc(19) int[] local19 = this.monochromeImageCache.get(arg0); + if (this.monochromeImageCache.invalid) { + @Pc(28) int local28 = Texture.width / this.horizontalTiles; + @Pc(33) int local33 = Texture.height / this.verticalTiles; + @Pc(44) int[] local44; + @Pc(50) int local50; + if (local33 <= 0) { + local44 = this.getChildMonochromeOutput(0, 0); + } else { + local50 = arg0 % local33; + local44 = this.getChildMonochromeOutput(0, Texture.height * local50 / local33); + } + for (local50 = 0; local50 < Texture.width; local50++) { + if (local28 <= 0) { + local19[local50] = local44[0]; + } else { + @Pc(80) int local80 = local50 % local28; + local19[local50] = local44[Texture.width * local80 / local28]; + } + } + } + return local19; + } + + @OriginalMember(owner = "client!gg", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(18) int[][] local18 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid) { + @Pc(28) int local28 = Texture.width / this.horizontalTiles; + @Pc(33) int local33 = Texture.height / this.verticalTiles; + @Pc(49) int[][] local49; + if (local33 > 0) { + @Pc(39) int local39 = arg0 % local33; + local49 = this.getChildColorOutput(local39 * Texture.height / local33, 0); + } else { + local49 = this.getChildColorOutput(0, 0); + } + @Pc(61) int[] local61 = local49[0]; + @Pc(65) int[] local65 = local49[2]; + @Pc(69) int[] local69 = local18[0]; + @Pc(73) int[] local73 = local49[1]; + @Pc(77) int[] local77 = local18[1]; + @Pc(81) int[] local81 = local18[2]; + for (@Pc(83) int local83 = 0; local83 < Texture.width; local83++) { + @Pc(94) int local94; + if (local28 <= 0) { + local94 = 0; + } else { + @Pc(100) int local100 = local83 % local28; + local94 = local100 * Texture.width / local28; + } + local69[local83] = local61[local94]; + local77[local83] = local73[local94]; + local81[local83] = local65[local94]; + } + } + return local18; + } +} diff --git a/client/src/main/java/rt4/TextureOpTiledSprite.java b/client/src/main/java/rt4/TextureOpTiledSprite.java new file mode 100644 index 0000000..c533715 --- /dev/null +++ b/client/src/main/java/rt4/TextureOpTiledSprite.java @@ -0,0 +1,29 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!kd") +public final class TextureOpTiledSprite extends TextureOpSprite { + + @OriginalMember(owner = "client!kd", name = "b", descriptor = "(II)[[I") + @Override + public final int[][] getColorOutput(@OriginalArg(1) int arg0) { + @Pc(11) int[][] local11 = this.colorImageCache.get(arg0); + if (this.colorImageCache.invalid && this.loadSprite()) { + @Pc(24) int[] local24 = local11[0]; + @Pc(32) int local32 = arg0 % this.height * this.height; + @Pc(36) int[] local36 = local11[1]; + @Pc(40) int[] local40 = local11[2]; + for (@Pc(42) int local42 = 0; local42 < Texture.width; local42++) { + @Pc(55) int local55 = this.pixels[local32 + local42 % this.width]; + local40[local42] = (local55 & 0xFF) << 4; + local36[local42] = local55 >> 4 & 0xFF0; + local24[local42] = local55 >> 12 & 0xFF0; + } + } + return local11; + } +} diff --git a/client/src/main/java/rt4/TextureOpVerticalGradient.java b/client/src/main/java/rt4/TextureOpVerticalGradient.java new file mode 100644 index 0000000..736d777 --- /dev/null +++ b/client/src/main/java/rt4/TextureOpVerticalGradient.java @@ -0,0 +1,25 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!qg") +public final class TextureOpVerticalGradient extends TextureOp { + + @OriginalMember(owner = "client!qg", name = "", descriptor = "()V") + public TextureOpVerticalGradient() { + super(0, true); + } + + @OriginalMember(owner = "client!qg", name = "a", descriptor = "(IB)[I") + @Override + public final int[] getMonochromeOutput(@OriginalArg(0) int y) { + @Pc(9) int[] dest = this.monochromeImageCache.get(y); + if (this.monochromeImageCache.invalid) { + ArrayUtils.fill(dest, 0, Texture.width, Texture.heightFractions[y]); + } + return dest; + } +} diff --git a/client/src/main/java/rt4/TextureProvider.java b/client/src/main/java/rt4/TextureProvider.java new file mode 100644 index 0000000..1966ea5 --- /dev/null +++ b/client/src/main/java/rt4/TextureProvider.java @@ -0,0 +1,48 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!m") +public interface TextureProvider { + + @OriginalMember(owner = "client!m", name = "a", descriptor = "(BI)Z") + boolean isOpaque(@OriginalArg(1) int arg0); + + @OriginalMember(owner = "client!m", name = "a", descriptor = "(IZ)V") + void method3227(@OriginalArg(0) int arg0); + + @OriginalMember(owner = "client!m", name = "b", descriptor = "(IZ)I") + int method3228(@OriginalArg(0) int arg0); + + @OriginalMember(owner = "client!m", name = "a", descriptor = "(II)I") + int method3229(@OriginalArg(1) int arg0); + + @OriginalMember(owner = "client!m", name = "b", descriptor = "(II)Z") + boolean method3230(@OriginalArg(1) int arg0); + + @OriginalMember(owner = "client!m", name = "c", descriptor = "(II)Z") + boolean method3231(@OriginalArg(0) int arg0); + + @OriginalMember(owner = "client!m", name = "a", descriptor = "(IZF)[I") + int[] method3232(@OriginalArg(0) int arg0, @OriginalArg(2) float arg1); + + @OriginalMember(owner = "client!m", name = "b", descriptor = "(BI)Z") + boolean isLowDetail(@OriginalArg(1) int arg0); + + @OriginalMember(owner = "client!m", name = "d", descriptor = "(II)I") + int getAverageColor(@OriginalArg(0) int arg0); + + @OriginalMember(owner = "client!m", name = "e", descriptor = "(II)[I") + int[] getPixels(@OriginalArg(1) int arg0); + + @OriginalMember(owner = "client!m", name = "f", descriptor = "(II)Z") + boolean method3236(@OriginalArg(0) int arg0); + + @OriginalMember(owner = "client!m", name = "g", descriptor = "(II)I") + int getMaterialType(@OriginalArg(0) int arg0); + + @OriginalMember(owner = "client!m", name = "h", descriptor = "(II)I") + int method3238(@OriginalArg(1) int arg0); +} diff --git a/client/src/main/java/rt4/ThreadUtils.java b/client/src/main/java/rt4/ThreadUtils.java new file mode 100644 index 0000000..ae4c3cf --- /dev/null +++ b/client/src/main/java/rt4/ThreadUtils.java @@ -0,0 +1,28 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class ThreadUtils { + @OriginalMember(owner = "client!sk", name = "a", descriptor = "(JI)V") + public static void sleep(@OriginalArg(0) long arg0) { + if (arg0 <= 0L) { + return; + } + if (arg0 % 10L == 0L) { + sleepUninterruptibly(arg0 - 1L); + sleepUninterruptibly(1L); + } else { + sleepUninterruptibly(arg0); + } + } + + @OriginalMember(owner = "client!rm", name = "a", descriptor = "(JB)V") + public static void sleepUninterruptibly(@OriginalArg(0) long arg0) { + try { + Thread.sleep(arg0); + } catch (@Pc(11) InterruptedException local11) { + } + } +} diff --git a/client/src/main/java/rt4/Tile.java b/client/src/main/java/rt4/Tile.java new file mode 100644 index 0000000..8dc47d2 --- /dev/null +++ b/client/src/main/java/rt4/Tile.java @@ -0,0 +1,82 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!bj") +public final class Tile extends Node { + + @OriginalMember(owner = "client!bj", name = "x", descriptor = "Z") + public boolean aBoolean45; + + @OriginalMember(owner = "client!bj", name = "y", descriptor = "I") + public int sceneryLen; + + @OriginalMember(owner = "client!bj", name = "A", descriptor = "Z") + public boolean aBoolean46; + + @OriginalMember(owner = "client!bj", name = "B", descriptor = "Lclient!fg;") + public ShapedTile shapedTile; + + @OriginalMember(owner = "client!bj", name = "C", descriptor = "I") + public int anInt663; + + @OriginalMember(owner = "client!bj", name = "E", descriptor = "I") + public int anInt665; + + @OriginalMember(owner = "client!bj", name = "G", descriptor = "Lclient!bm;") + public GroundDecor groundDecor; + + @OriginalMember(owner = "client!bj", name = "I", descriptor = "I") + public int anInt667; + + @OriginalMember(owner = "client!bj", name = "J", descriptor = "Lclient!df;") + public WallDecor wallDecor; + + @OriginalMember(owner = "client!bj", name = "K", descriptor = "Lclient!jh;") + public Wall wall; + + @OriginalMember(owner = "client!bj", name = "M", descriptor = "Lclient!bj;") + public Tile aClass3_Sub5_1; + + @OriginalMember(owner = "client!bj", name = "N", descriptor = "Z") + public boolean aBoolean47; + + @OriginalMember(owner = "client!bj", name = "S", descriptor = "Lclient!rh;") + public PlainTile plainTile; + + @OriginalMember(owner = "client!bj", name = "T", descriptor = "I") + public int anInt670; + + @OriginalMember(owner = "client!bj", name = "X", descriptor = "Lclient!jj;") + public ObjStackEntity objStack; + + @OriginalMember(owner = "client!bj", name = "D", descriptor = "I") + public int allInteriorFlags = 0; + + @OriginalMember(owner = "client!bj", name = "w", descriptor = "[Lclient!ec;") + public final Scenery[] scenery = new Scenery[5]; + + @OriginalMember(owner = "client!bj", name = "P", descriptor = "[I") + public final int[] interiorFlags = new int[5]; + + @OriginalMember(owner = "client!bj", name = "H", descriptor = "I") + public final int anInt666; + + @OriginalMember(owner = "client!bj", name = "W", descriptor = "I") + public int anInt672; + + @OriginalMember(owner = "client!bj", name = "Q", descriptor = "I") + public final int anInt668; + + @OriginalMember(owner = "client!bj", name = "R", descriptor = "I") + public final int anInt669; + + @OriginalMember(owner = "client!bj", name = "", descriptor = "(III)V") + public Tile(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + this.anInt666 = arg2; + this.anInt668 = this.anInt672 = arg0; + this.anInt669 = arg1; + } +} diff --git a/client/src/main/java/rt4/Timer.java b/client/src/main/java/rt4/Timer.java new file mode 100644 index 0000000..1c2ab75 --- /dev/null +++ b/client/src/main/java/rt4/Timer.java @@ -0,0 +1,27 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!s") +public abstract class Timer { + + @OriginalMember(owner = "client!fi", name = "a", descriptor = "(B)Lclient!s;") + public static Timer create() { + try { + return new NanoTimer(); + } catch (@Pc(15) Throwable ex) { + return new MillisTimer(); + } + } + + @OriginalMember(owner = "client!s", name = "a", descriptor = "(III)I") + public abstract int sleep(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1); + + @OriginalMember(owner = "client!s", name = "b", descriptor = "(I)V") + public abstract void reset(); + + public abstract int count(int arg0, int arg1); +} diff --git a/client/src/main/java/rt4/TitleScreen.java b/client/src/main/java/rt4/TitleScreen.java new file mode 100644 index 0000000..39b7683 --- /dev/null +++ b/client/src/main/java/rt4/TitleScreen.java @@ -0,0 +1,76 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class TitleScreen { + @OriginalMember(owner = "client!cb", name = "cb", descriptor = "Lclient!na;") + public static final JagString TITLEBG = JagString.parse("titlebg"); + @OriginalMember(owner = "client!nb", name = "m", descriptor = "Lclient!na;") + public static final JagString LOGO = JagString.parse("logo"); + + @OriginalMember(owner = "client!bh", name = "M", descriptor = "Z") + public static boolean loaded; + @OriginalMember(owner = "client!gd", name = "n", descriptor = "Lclient!qf;") + public static Sprite titleBg; + @OriginalMember(owner = "client!tk", name = "o", descriptor = "Lclient!ok;") + public static IndexedSprite logo; + @OriginalMember(owner = "client!vf", name = "m", descriptor = "I") + public static int bgId = -1; + @OriginalMember(owner = "client!kk", name = "g", descriptor = "I") + public static int logoId = -1; + + @OriginalMember(owner = "client!oi", name = "a", descriptor = "(Lclient!ve;B)V") + public static void load(@OriginalArg(0) Js5 archive) { + if (loaded) { + return; + } + + if (GlRenderer.enabled) { + GlRaster.clear(); + } else { + SoftwareRaster.clear(); + } + + @Pc(20) int height = GameShell.canvasHeight; + @Pc(26) int width = height * 956 / 503; + titleBg = SpriteLoader.loadSpriteAutoDetect(archive, bgId); + titleBg.renderResized((GameShell.canvasWidth - width) / 2, 0, width, height); + logo = SpriteLoader.loadIndexedSpriteAutoDetect(logoId, archive); + logo.renderTransparent(GameShell.canvasWidth / 2 - logo.width / 2, 18); + loaded = true; + } + + @OriginalMember(owner = "client!je", name = "f", descriptor = "(B)V") + public static void clear() { + if (loaded) { + logo = null; + loaded = false; + titleBg = null; + } + } + + @OriginalMember(owner = "client!nd", name = "a", descriptor = "(ILclient!ve;)V") + public static void init(@OriginalArg(1) Js5 archive) { + bgId = archive.getGroupId(TITLEBG); + logoId = archive.getGroupId(LOGO); + } + + @OriginalMember(owner = "client!lk", name = "a", descriptor = "(ILclient!ve;)I") + public static int getReady(@OriginalArg(1) Js5 archive) { + @Pc(1) int ready = 0; + if (archive.isFileReady(bgId)) { + ready++; + } + if (archive.isFileReady(logoId)) { + ready++; + } + return ready; + } + + @OriginalMember(owner = "client!ia", name = "a", descriptor = "(I)I") + public static int getTotal() { + return 2; + } +} diff --git a/client/src/main/java/rt4/TracingException.java b/client/src/main/java/rt4/TracingException.java new file mode 100644 index 0000000..e250e23 --- /dev/null +++ b/client/src/main/java/rt4/TracingException.java @@ -0,0 +1,110 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.io.*; +import java.net.URL; + +@OriginalClass("client!ld") +public final class TracingException extends RuntimeException { + + @OriginalMember(owner = "client!ld", name = "e", descriptor = "Ljava/lang/String;") + public String aString3; + + @OriginalMember(owner = "client!ld", name = "f", descriptor = "Ljava/lang/Throwable;") + public Throwable aThrowable1; + + @OriginalMember(owner = "client!ha", name = "a", descriptor = "(Ljava/lang/String;Ljava/lang/Throwable;B)V") + public static void report(@OriginalArg(0) String arg0, @OriginalArg(1) Throwable arg1) { + try { + @Pc(13) String local13 = ""; + if (arg1 != null) { + local13 = method1961(arg1); + } + if (arg0 != null) { + if (arg1 != null) { + local13 = local13 + " | "; + } + local13 = local13 + arg0; + } + method31(local13); + local13 = method1014(":", "%3a", local13); + local13 = method1014("@", "%40", local13); + local13 = method1014("&", "%26", local13); + local13 = method1014("#", "%23", local13); + if (GameShell.signLink2.applet == null) { + return; + } + @Pc(109) PrivilegedRequest local109 = GameShell.signLink2.openUrlStream(new URL(GameShell.signLink2.applet.getCodeBase(), "clienterror.ws?c=" + GameShell.clientBuild + "&u=" + Player.name37 + "&v1=" + SignLink.javaVendor + "&v2=" + SignLink.javaVersion + "&e=" + local13)); + while (local109.status == 0) { + ThreadUtils.sleep(1L); + } + if (local109.status == 1) { + @Pc(128) DataInputStream local128 = (DataInputStream) local109.result; + local128.read(); + local128.close(); + } + } catch (@Pc(135) Exception local135) { + } + } + + @OriginalMember(owner = "client!af", name = "a", descriptor = "(ILjava/lang/String;)V") + public static void method31(@OriginalArg(1) String arg0) { + System.out.println("Error: " + method1014("%0a", "\n", arg0)); + } + + @OriginalMember(owner = "client!hi", name = "a", descriptor = "(ILjava/lang/Throwable;)Ljava/lang/String;") + public static String method1961(@OriginalArg(1) Throwable arg0) throws IOException { + @Pc(24) String local24; + if (arg0 instanceof TracingException) { + @Pc(11) TracingException local11 = (TracingException) arg0; + arg0 = local11.aThrowable1; + local24 = local11.aString3 + " | "; + } else { + local24 = ""; + } + @Pc(32) StringWriter local32 = new StringWriter(); + @Pc(37) PrintWriter local37 = new PrintWriter(local32); + arg0.printStackTrace(local37); + local37.close(); + @Pc(45) String local45 = local32.toString(); + @Pc(53) BufferedReader local53 = new BufferedReader(new StringReader(local45)); + @Pc(56) String local56 = local53.readLine(); + while (true) { + @Pc(59) String local59 = local53.readLine(); + if (local59 == null) { + return local24 + "| " + local56; + } + @Pc(65) int local65 = local59.indexOf(40); + @Pc(72) int local72 = local59.indexOf(41, local65 + 1); + @Pc(79) String local79; + if (local65 == -1) { + local79 = local59; + } else { + local79 = local59.substring(0, local65); + } + local79 = local79.trim(); + local79 = local79.substring(local79.lastIndexOf(32) + 1); + local79 = local79.substring(local79.lastIndexOf(9) + 1); + local24 = local24 + local79; + if (local65 != -1 && local72 != -1) { + @Pc(126) int local126 = local59.indexOf(".java:", local65); + if (local126 >= 0) { + local24 = local24 + local59.substring(local126 + 5, local72); + } + } + local24 = local24 + ' '; + } + } + + @OriginalMember(owner = "client!da", name = "a", descriptor = "(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;") + public static String method1014(@OriginalArg(0) String arg0, @OriginalArg(1) String arg1, @OriginalArg(3) String arg2) { + for (@Pc(5) int local5 = arg2.indexOf(arg0); local5 != -1; local5 = arg2.indexOf(arg0, local5 + arg1.length())) { + arg2 = arg2.substring(0, local5) + arg1 + arg2.substring(arg0.length() + local5); + } + return arg2; + } +} diff --git a/client/src/main/java/rt4/TriangleNormal.java b/client/src/main/java/rt4/TriangleNormal.java new file mode 100644 index 0000000..8722f9f --- /dev/null +++ b/client/src/main/java/rt4/TriangleNormal.java @@ -0,0 +1,19 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!qj") +public final class TriangleNormal { + + @OriginalMember(owner = "client!qj", name = "c", descriptor = "I") + public int anInt4767; + + @OriginalMember(owner = "client!qj", name = "e", descriptor = "I") + public int anInt4769; + + @OriginalMember(owner = "client!qj", name = "f", descriptor = "I") + public int anInt4770; + +} diff --git a/client/src/main/java/rt4/UnderwaterMaterialRenderer.java b/client/src/main/java/rt4/UnderwaterMaterialRenderer.java new file mode 100644 index 0000000..40a24f8 --- /dev/null +++ b/client/src/main/java/rt4/UnderwaterMaterialRenderer.java @@ -0,0 +1,227 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!wg") +public final class UnderwaterMaterialRenderer implements MaterialRenderer { + + @OriginalMember(owner = "client!wg", name = "b", descriptor = "Z") + public static boolean aBoolean308 = false; + @OriginalMember(owner = "client!nh", name = "Z", descriptor = "I") + public static int anInt3241 = 128; + @OriginalMember(owner = "client!wg", name = "c", descriptor = "I") + private int anInt5805 = -1; + + @OriginalMember(owner = "client!wg", name = "a", descriptor = "[F") + private final float[] aFloatArray29 = new float[4]; + + @OriginalMember(owner = "client!wg", name = "d", descriptor = "I") + private int anInt5806 = -1; + + @OriginalMember(owner = "client!wg", name = "", descriptor = "()V") + public UnderwaterMaterialRenderer() { + if (GlRenderer.maxTextureUnits >= 2) { + @Pc(17) int[] local17 = new int[1]; + @Pc(20) byte[] local20 = new byte[8]; + @Pc(22) int local22 = 0; + while (local22 < 8) { + local20[local22++] = (byte) (local22 * 159 / 8 + 96); + } + @Pc(40) GL2 gl = GlRenderer.gl; + gl.glGenTextures(1, local17, 0); + gl.glBindTexture(GL2.GL_TEXTURE_1D, local17[0]); + gl.glTexImage1D(GL2.GL_TEXTURE_1D, 0, GL2.GL_ALPHA, 8, 0, GL2.GL_ALPHA, GL2.GL_UNSIGNED_BYTE, ByteBuffer.wrap(local20)); + gl.glTexParameteri(GL2.GL_TEXTURE_1D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_1D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_1D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_CLAMP_TO_EDGE); + this.anInt5805 = local17[0]; + aBoolean308 = GlRenderer.maxTextureUnits > 2 && GlRenderer.extTexture3dSupported; + this.method4606(); + } + } + + @OriginalMember(owner = "client!wg", name = "e", descriptor = "()I") + public static int method4607() { + return aBoolean308 ? 33986 : 33985; + } + + @OriginalMember(owner = "client!wg", name = "f", descriptor = "()V") + public static void method4608() { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glClientActiveTexture(method4607()); + gl.glDisableClientState(GL2.GL_TEXTURE_COORD_ARRAY); + gl.glClientActiveTexture(GL2.GL_TEXTURE0); + } + + @OriginalMember(owner = "client!wg", name = "g", descriptor = "()V") + public static void method4609() { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glClientActiveTexture(method4607()); + gl.glEnableClientState(GL2.GL_TEXTURE_COORD_ARRAY); + gl.glClientActiveTexture(GL2.GL_TEXTURE0); + } + + @OriginalMember(owner = "client!mf", name = "a", descriptor = "()V") + public static void applyFogFade() { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glDisableClientState(GL2.GL_COLOR_ARRAY); + GlRenderer.setLightingEnabled(false); + gl.glDisable(GL2.GL_DEPTH_TEST); + gl.glPushAttrib(GL2.GL_FOG_BIT); + gl.glFogf(GL2.GL_FOG_START, (float) GlobalConfig.VIEW_DISTANCE - (GlobalConfig.VIEW_FADE_DISTANCE * 2.0f)); + GlRenderer.disableDepthMask(); + try { + for (@Pc(19) int i = 0; i < SceneGraph.surfaceHdTiles[0].length; i++) { + @Pc(31) GlTile tile = SceneGraph.surfaceHdTiles[0][i]; + if (tile.texture >= 0 && Rasteriser.textureProvider.getMaterialType(tile.texture) == MaterialManager.WATER) { + gl.glColor4fv(ColorUtils.getRgbFloat(tile.underwaterColor), 0); + @Pc(57) float f = 201.5F - (tile.blend ? 1.0F : 0.5F); + tile.method1944(SceneGraph.tiles, f, true); + } + } + } catch (Exception ignored) { + } + gl.glEnableClientState(GL2.GL_COLOR_ARRAY); + GlRenderer.restoreLighting(); + gl.glEnable(GL2.GL_DEPTH_TEST); + gl.glPopAttrib(); + GlRenderer.enableDepthMask(); + } + + @OriginalMember(owner = "client!wg", name = "d", descriptor = "()V") + private void method4606() { + @Pc(1) GL2 gl = GlRenderer.gl; + this.anInt5806 = gl.glGenLists(2); + gl.glNewList(this.anInt5806, GL2.GL_COMPILE); + gl.glActiveTexture(GL2.GL_TEXTURE1); + if (aBoolean308) { + gl.glBindTexture(GL2.GL_TEXTURE_3D, MaterialManager.texture3D); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_ADD); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_OPERAND0_RGB, GL2.GL_SRC_COLOR); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_REPLACE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_PREVIOUS); + gl.glTexGeni(GL2.GL_S, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_EYE_LINEAR); + gl.glTexGeni(GL2.GL_R, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_EYE_LINEAR); + gl.glTexGeni(GL2.GL_T, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_EYE_LINEAR); + gl.glTexGeni(GL2.GL_Q, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_OBJECT_LINEAR); + gl.glTexGenfv(GL2.GL_Q, GL2.GL_OBJECT_PLANE, new float[]{0.0F, 0.0F, 0.0F, 1.0F}, 0); + gl.glEnable(GL2.GL_TEXTURE_GEN_S); + gl.glEnable(GL2.GL_TEXTURE_GEN_T); + gl.glEnable(GL2.GL_TEXTURE_GEN_R); + gl.glEnable(GL2.GL_TEXTURE_GEN_Q); + gl.glEnable(GL2.GL_TEXTURE_3D); + gl.glActiveTexture(GL2.GL_TEXTURE2); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_COMBINE); + } + gl.glBindTexture(GL2.GL_TEXTURE_1D, this.anInt5805); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_INTERPOLATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_CONSTANT); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC2_RGB, GL2.GL_TEXTURE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_REPLACE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_PREVIOUS); + gl.glTexGeni(GL2.GL_S, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_EYE_LINEAR); + gl.glEnable(GL2.GL_TEXTURE_1D); + gl.glEnable(GL2.GL_TEXTURE_GEN_S); + gl.glActiveTexture(GL2.GL_TEXTURE0); + gl.glEndList(); + gl.glNewList(this.anInt5806 + 1, GL2.GL_COMPILE); + gl.glActiveTexture(GL2.GL_TEXTURE1); + if (aBoolean308) { + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_OPERAND0_RGB, GL2.GL_SRC_COLOR); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_TEXTURE); + gl.glDisable(GL2.GL_TEXTURE_GEN_S); + gl.glDisable(GL2.GL_TEXTURE_GEN_T); + gl.glDisable(GL2.GL_TEXTURE_GEN_R); + gl.glDisable(GL2.GL_TEXTURE_GEN_Q); + gl.glDisable(GL2.GL_TEXTURE_3D); + gl.glActiveTexture(GL2.GL_TEXTURE2); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_MODULATE); + } + gl.glTexEnvfv(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_COLOR, new float[]{0.0F, 1.0F, 0.0F, 1.0F}, 0); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_TEXTURE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC2_RGB, GL2.GL_CONSTANT); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_TEXTURE); + gl.glDisable(GL2.GL_TEXTURE_1D); + gl.glDisable(GL2.GL_TEXTURE_GEN_S); + gl.glActiveTexture(GL2.GL_TEXTURE0); + gl.glEndList(); + } + + @OriginalMember(owner = "client!wg", name = "b", descriptor = "()V") + @Override + public final void bind() { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glCallList(this.anInt5806); + } + + @OriginalMember(owner = "client!wg", name = "c", descriptor = "()I") + @Override + public final int getFlags() { + return 0; + } + + @OriginalMember(owner = "client!wg", name = "a", descriptor = "()V") + @Override + public final void unbind() { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glCallList(this.anInt5806 + 1); + } + + @OriginalMember(owner = "client!wg", name = "a", descriptor = "(I)V") + @Override + public final void setArgument(@OriginalArg(0) int arg0) { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glActiveTexture(GL2.GL_TEXTURE1); + if (aBoolean308 || arg0 >= 0) { + gl.glPushMatrix(); + gl.glLoadIdentity(); + gl.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + gl.glRotatef((float) MaterialManager.anInt5559 * 360.0F / 2048.0F, 1.0F, 0.0F, 0.0F); + gl.glRotatef((float) MaterialManager.anInt1815 * 360.0F / 2048.0F, 0.0F, 1.0F, 0.0F); + gl.glTranslatef((float) -MaterialManager.anInt406, (float) -MaterialManager.anInt4675, (float) -MaterialManager.anInt5158); + if (aBoolean308) { + this.aFloatArray29[0] = 0.001F; + this.aFloatArray29[1] = 9.0E-4F; + this.aFloatArray29[2] = 0.0F; + this.aFloatArray29[3] = 0.0F; + gl.glTexGenfv(GL2.GL_S, GL2.GL_EYE_PLANE, this.aFloatArray29, 0); + this.aFloatArray29[0] = 0.0F; + this.aFloatArray29[1] = 9.0E-4F; + this.aFloatArray29[2] = 0.001F; + this.aFloatArray29[3] = 0.0F; + gl.glTexGenfv(GL2.GL_T, GL2.GL_EYE_PLANE, this.aFloatArray29, 0); + this.aFloatArray29[0] = 0.0F; + this.aFloatArray29[1] = 0.0F; + this.aFloatArray29[2] = 0.0F; + this.aFloatArray29[3] = (float) GlRenderer.anInt5323 * 0.005F; + gl.glTexGenfv(GL2.GL_R, GL2.GL_EYE_PLANE, this.aFloatArray29, 0); + gl.glActiveTexture(GL2.GL_TEXTURE2); + } + gl.glTexEnvfv(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_COLOR, WaterMaterialRenderer.method2422(), 0); + if (arg0 >= 0) { + this.aFloatArray29[0] = 0.0F; + this.aFloatArray29[1] = 1.0F / (float) anInt3241; + this.aFloatArray29[2] = 0.0F; + this.aFloatArray29[3] = (float) arg0 * 1.0F / (float) anInt3241; + gl.glTexGenfv(GL2.GL_S, GL2.GL_EYE_PLANE, this.aFloatArray29, 0); + gl.glEnable(GL2.GL_TEXTURE_GEN_S); + } else { + gl.glDisable(GL2.GL_TEXTURE_GEN_S); + } + gl.glPopMatrix(); + } else { + gl.glDisable(GL2.GL_TEXTURE_GEN_S); + } + gl.glActiveTexture(GL2.GL_TEXTURE0); + } +} diff --git a/client/src/main/java/rt4/UnlitMaterialRenderer.java b/client/src/main/java/rt4/UnlitMaterialRenderer.java new file mode 100644 index 0000000..767b09a --- /dev/null +++ b/client/src/main/java/rt4/UnlitMaterialRenderer.java @@ -0,0 +1,36 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!ue") +public final class UnlitMaterialRenderer implements MaterialRenderer { + + @OriginalMember(owner = "client!ue", name = "b", descriptor = "()V") + @Override + public final void bind() { + if (Preferences.highDetailLighting) { + GlRenderer.setLightingEnabled(false); + } + } + + @OriginalMember(owner = "client!ue", name = "c", descriptor = "()I") + @Override + public final int getFlags() { + return 0; + } + + @OriginalMember(owner = "client!ue", name = "a", descriptor = "(I)V") + @Override + public final void setArgument(@OriginalArg(0) int arg0) { + } + + @OriginalMember(owner = "client!ue", name = "a", descriptor = "()V") + @Override + public final void unbind() { + if (Preferences.highDetailLighting) { + GlRenderer.setLightingEnabled(true); + } + } +} diff --git a/client/src/main/java/rt4/VarbitType.java b/client/src/main/java/rt4/VarbitType.java new file mode 100644 index 0000000..3044f69 --- /dev/null +++ b/client/src/main/java/rt4/VarbitType.java @@ -0,0 +1,39 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!kk") +public final class VarbitType { + + @OriginalMember(owner = "client!kk", name = "c", descriptor = "I") + public int startBit; + + @OriginalMember(owner = "client!kk", name = "h", descriptor = "I") + public int endBit; + + @OriginalMember(owner = "client!kk", name = "l", descriptor = "I") + public int baseVar; + + @OriginalMember(owner = "client!kk", name = "a", descriptor = "(Lclient!wa;I)V") + public final void decode(@OriginalArg(0) Buffer buffer) { + while (true) { + @Pc(9) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(buffer, opcode); + } + } + + @OriginalMember(owner = "client!kk", name = "a", descriptor = "(Lclient!wa;II)V") + private void decode(@OriginalArg(0) Buffer buffer, @OriginalArg(2) int opcode) { + if (opcode == 1) { + this.baseVar = buffer.g2(); + this.startBit = buffer.g1(); + this.endBit = buffer.g1(); + } + } +} diff --git a/client/src/main/java/rt4/VarbitTypeList.java b/client/src/main/java/rt4/VarbitTypeList.java new file mode 100644 index 0000000..e313e75 --- /dev/null +++ b/client/src/main/java/rt4/VarbitTypeList.java @@ -0,0 +1,57 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class VarbitTypeList { + @OriginalMember(owner = "client!jl", name = "G", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + @OriginalMember(owner = "client!nj", name = "c", descriptor = "Lclient!ve;") + public static Js5 archive; + + @OriginalMember(owner = "client!og", name = "a", descriptor = "(Lclient!ve;I)V") + public static void init(@OriginalArg(0) Js5 arg0) { + archive = arg0; + } + + @OriginalMember(owner = "client!jl", name = "a", descriptor = "(IB)Lclient!kk;") + public static VarbitType get(@OriginalArg(0) int id) { + @Pc(10) VarbitType varbit = (VarbitType) types.get(id); + if (varbit != null) { + return varbit; + } + @Pc(31) byte[] data = archive.fetchFile(getGroupId(id), getFileId(id)); + varbit = new VarbitType(); + if (data != null) { + varbit.decode(new Buffer(data)); + } + types.put(varbit, id); + return varbit; + } + + @OriginalMember(owner = "client!wa", name = "d", descriptor = "(BI)V") + public static void clean() { + types.clean(5); + } + + @OriginalMember(owner = "client!gd", name = "a", descriptor = "(I)V") + public static void removeSoft() { + types.removeSoft(); + } + + @OriginalMember(owner = "client!ec", name = "b", descriptor = "(I)V") + public static void clear() { + types.clear(); + } + + @OriginalMember(owner = "client!wf", name = "a", descriptor = "(II)I") + public static int getFileId(@OriginalArg(0) int arg0) { + return arg0 & 0x3FF; + } + + @OriginalMember(owner = "client!uj", name = "a", descriptor = "(II)I") + public static int getGroupId(@OriginalArg(0) int arg0) { + return arg0 >>> 10; + } +} diff --git a/client/src/main/java/rt4/VarcDomain.java b/client/src/main/java/rt4/VarcDomain.java new file mode 100644 index 0000000..9906c42 --- /dev/null +++ b/client/src/main/java/rt4/VarcDomain.java @@ -0,0 +1,18 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalMember; + +public class VarcDomain { + @OriginalMember(owner = "client!t", name = "E", descriptor = "[I") + public static final int[] updatedVarcstrs = new int[32]; + @OriginalMember(owner = "client!km", name = "Bc", descriptor = "[I") + public static final int[] updatedVarcs = new int[32]; + @OriginalMember(owner = "client!me", name = "P", descriptor = "[I") + public static final int[] varcs = new int[2000]; + @OriginalMember(owner = "client!sf", name = "h", descriptor = "[Lclient!na;") + public static final JagString[] varcstrs = new JagString[1000]; + @OriginalMember(owner = "client!fl", name = "B", descriptor = "I") + public static int updatedVarcstrsWriterIndex = 0; + @OriginalMember(owner = "client!ac", name = "o", descriptor = "I") + public static int updatedVarcsWriterIndex = 0; +} diff --git a/client/src/main/java/rt4/VarpDomain.java b/client/src/main/java/rt4/VarpDomain.java new file mode 100644 index 0000000..5fb00eb --- /dev/null +++ b/client/src/main/java/rt4/VarpDomain.java @@ -0,0 +1,152 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; +import plugin.PluginRepository; + +public class VarpDomain { + @OriginalMember(owner = "client!gj", name = "q", descriptor = "[I") + public static final int[] updatedVarps = new int[32]; + @OriginalMember(owner = "client!ic", name = "e", descriptor = "[I") + public static final int[] varp = new int[3500]; + @OriginalMember(owner = "client!ah", name = "j", descriptor = "[I") + public static final int[] activeVarps = new int[3500]; + @OriginalMember(owner = "client!uj", name = "s", descriptor = "Lclient!na;") + public static final JagString aClass100_1061 = JagString.parse("null"); + @OriginalMember(owner = "client!ea", name = "s", descriptor = "[I") + public static final int[] anIntArray135 = new int[32]; + @OriginalMember(owner = "client!fi", name = "n", descriptor = "I") + public static int updatedVarpsWriterIndex = 0; + @OriginalMember(owner = "client!qc", name = "K", descriptor = "Lclient!sc;") + public static HashTable aClass133_20 = new HashTable(16); + @OriginalMember(owner = "client!ge", name = "m", descriptor = "I") + public static int chatEffectsDisabled = 0; + @OriginalMember(owner = "client!jb", name = "n", descriptor = "I") + public static int anInt2952 = 0; + @OriginalMember(owner = "client!oe", name = "b", descriptor = "I") + public static int inserting = 0; + + static { + @Pc(10) int local10 = 2; + for (@Pc(12) int local12 = 0; local12 < 32; local12++) { + anIntArray135[local12] = local10 - 1; + local10 += local10; + } + } + + @OriginalMember(owner = "client!nh", name = "a", descriptor = "(BII)V") + public static void set(@OriginalArg(1) int value, @OriginalArg(2) int id) { + PluginRepository.OnVarpUpdate(id, value); + + if (id > varp.length) return; + + varp[id] = value; + @Pc(20) LongNode local20 = (LongNode) aClass133_20.get(id); + if (local20 == null) { + local20 = new LongNode(4611686018427387905L); + aClass133_20.put(local20, id); + } else if (local20.value != 4611686018427387905L) { + local20.value = MonotonicClock.currentTimeMillis() + 500L | 0x4000000000000000L; + } + } + + @OriginalMember(owner = "client!aj", name = "i", descriptor = "(I)V") + public static void reset() { + for (@Pc(3) int local3 = 0; local3 < VarpTypeList.anInt4043; local3++) { + @Pc(19) VarpType local19 = VarpTypeList.get(local3); + if (local19 != null && local19.clientCode == 0) { + varp[local3] = 0; + activeVarps[local3] = 0; + } + } + aClass133_20 = new HashTable(16); + } + + @OriginalMember(owner = "client!li", name = "a", descriptor = "(III)V") + public static void method2766(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + activeVarps[arg0] = arg1; + @Pc(21) LongNode local21 = (LongNode) aClass133_20.get(arg0); + if (local21 == null) { + local21 = new LongNode(MonotonicClock.currentTimeMillis() + 500L); + aClass133_20.put(local21, arg0); + } else { + local21.value = MonotonicClock.currentTimeMillis() + 500L; + } + } + + @OriginalMember(owner = "client!me", name = "a", descriptor = "(II)I") + public static int getVarbit(@OriginalArg(1) int arg0) { + @Pc(13) VarbitType local13 = VarbitTypeList.get(arg0); + @Pc(16) int local16 = local13.baseVar; + @Pc(19) int local19 = local13.endBit; + @Pc(22) int local22 = local13.startBit; + @Pc(29) int local29 = anIntArray135[local19 - local22]; + return activeVarps[local16] >> local22 & local29; + } + + @OriginalMember(owner = "client!qg", name = "a", descriptor = "(IZI)V") + public static void setVarbitClient(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1) { + @Pc(7) VarbitType local7 = VarbitTypeList.get(arg0); + @Pc(10) int local10 = local7.endBit; + @Pc(16) int local16 = local7.startBit; + @Pc(19) int local19 = local7.baseVar; + @Pc(25) int local25 = anIntArray135[local10 - local16]; + if (arg1 < 0 || arg1 > local25) { + arg1 = 0; + } + local25 <<= local16; + method2766(local19, local25 & arg1 << local16 | activeVarps[local19] & ~local25); + } + + @OriginalMember(owner = "client!wd", name = "a", descriptor = "(BII)V") + public static void setVarbit(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + @Pc(14) VarbitType local14 = VarbitTypeList.get(arg1); + @Pc(17) int local17 = local14.baseVar; + @Pc(20) int local20 = local14.endBit; + @Pc(23) int local23 = local14.startBit; + @Pc(29) int local29 = anIntArray135[local20 - local23]; + if (arg0 < 0 || local29 < arg0) { + arg0 = 0; + } + local29 <<= local23; + set(arg0 << local23 & local29 | ~local29 & varp[local17], local17); + } + + @OriginalMember(owner = "client!gl", name = "a", descriptor = "(II)V") + public static void refreshMagicVarp(@OriginalArg(1) int arg0) { + InterfaceList.redrawActiveInterfaces(); + AreaSoundManager.updateMulti(); + @Pc(17) int local17 = VarpTypeList.get(arg0).clientCode; + if (local17 == 0) { + return; + } + @Pc(25) int local25 = activeVarps[arg0]; + if (local17 == 6) { + chatEffectsDisabled = local25; + } + if (local17 == 5) { + anInt2952 = local25; + } + if (local17 == 9) { + inserting = local25; + } + } + + @OriginalMember(owner = "client!cn", name = "a", descriptor = "(ZI)I") + public static int poll(@OriginalArg(0) boolean arg0) { + @Pc(4) long local4 = MonotonicClock.currentTimeMillis(); + for (@Pc(28) LongNode local28 = arg0 ? (LongNode) aClass133_20.head() : (LongNode) aClass133_20.next(); local28 != null; local28 = (LongNode) aClass133_20.next()) { + if ((local28.value & 0x3FFFFFFFFFFFFFFFL) < local4) { + if ((local28.value & 0x4000000000000000L) != 0L) { + @Pc(58) int local58 = (int) local28.key; + activeVarps[local58] = varp[local58]; + local28.unlink(); + return local58; + } + local28.unlink(); + } + } + return -1; + } +} diff --git a/client/src/main/java/rt4/VarpType.java b/client/src/main/java/rt4/VarpType.java new file mode 100644 index 0000000..2db9619 --- /dev/null +++ b/client/src/main/java/rt4/VarpType.java @@ -0,0 +1,31 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!eh") +public final class VarpType { + + @OriginalMember(owner = "client!eh", name = "e", descriptor = "I") + public int clientCode = 0; + + @OriginalMember(owner = "client!eh", name = "a", descriptor = "(ILclient!wa;)V") + public final void decode(@OriginalArg(1) Buffer buffer) { + while (true) { + @Pc(5) int opcode = buffer.g1(); + if (opcode == 0) { + return; + } + this.decode(buffer, opcode); + } + } + + @OriginalMember(owner = "client!eh", name = "a", descriptor = "(Lclient!wa;BI)V") + private void decode(@OriginalArg(0) Buffer buffer, @OriginalArg(2) int opcode) { + if (opcode == 5) { + this.clientCode = buffer.g2(); + } + } +} diff --git a/client/src/main/java/rt4/VarpTypeList.java b/client/src/main/java/rt4/VarpTypeList.java new file mode 100644 index 0000000..7c150c0 --- /dev/null +++ b/client/src/main/java/rt4/VarpTypeList.java @@ -0,0 +1,50 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class VarpTypeList { + @OriginalMember(owner = "client!sm", name = "c", descriptor = "Lclient!n;") + public static final SoftLruHashTable types = new SoftLruHashTable(64); + @OriginalMember(owner = "client!gg", name = "ab", descriptor = "Lclient!ve;") + public static Js5 archive; + @OriginalMember(owner = "client!nb", name = "p", descriptor = "I") + public static int anInt4043; + + @OriginalMember(owner = "client!sj", name = "a", descriptor = "(Lclient!ve;B)V") + public static void init(@OriginalArg(0) Js5 arg0) { + archive = arg0; + anInt4043 = archive.getGroupCapacity(16); + } + + @OriginalMember(owner = "client!ub", name = "a", descriptor = "(II)Lclient!eh;") + public static VarpType get(@OriginalArg(1) int id) { + @Pc(10) VarpType varp = (VarpType) types.get(id); + if (varp != null) { + return varp; + } + @Pc(20) byte[] data = archive.fetchFile(16, id); + varp = new VarpType(); + if (data != null) { + varp.decode(new Buffer(data)); + } + types.put(varp, id); + return varp; + } + + @OriginalMember(owner = "client!ud", name = "d", descriptor = "(I)V") + public static void clear() { + types.clear(); + } + + @OriginalMember(owner = "client!ab", name = "b", descriptor = "(B)V") + public static void removeSoft() { + types.removeSoft(); + } + + @OriginalMember(owner = "client!bn", name = "c", descriptor = "(II)V") + public static void clean() { + types.clean(5); + } +} diff --git a/client/src/main/java/rt4/VertexNormal.java b/client/src/main/java/rt4/VertexNormal.java new file mode 100644 index 0000000..681e660 --- /dev/null +++ b/client/src/main/java/rt4/VertexNormal.java @@ -0,0 +1,33 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!hd") +public final class VertexNormal { + + @OriginalMember(owner = "client!hd", name = "b", descriptor = "I") + public int y; + + @OriginalMember(owner = "client!hd", name = "d", descriptor = "I") + public int magnitude; + + @OriginalMember(owner = "client!hd", name = "m", descriptor = "I") + public int z; + + @OriginalMember(owner = "client!hd", name = "n", descriptor = "I") + public int x; + + @OriginalMember(owner = "client!hd", name = "", descriptor = "()V") + public VertexNormal() { + } + + @OriginalMember(owner = "client!hd", name = "", descriptor = "(Lclient!hd;)V") + public VertexNormal(@OriginalArg(0) VertexNormal arg0) { + this.magnitude = arg0.magnitude; + this.x = arg0.x; + this.y = arg0.y; + this.z = arg0.z; + } +} diff --git a/client/src/main/java/rt4/VorbisCodebook.java b/client/src/main/java/rt4/VorbisCodebook.java new file mode 100644 index 0000000..789282a --- /dev/null +++ b/client/src/main/java/rt4/VorbisCodebook.java @@ -0,0 +1,209 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ji") +public final class VorbisCodebook { + + @OriginalMember(owner = "client!ji", name = "f", descriptor = "[I") + private int[] entryTree; + + @OriginalMember(owner = "client!ji", name = "c", descriptor = "I") + public final int dimensions; + + @OriginalMember(owner = "client!ji", name = "e", descriptor = "I") + private final int entries; + + @OriginalMember(owner = "client!ji", name = "a", descriptor = "[I") + private final int[] lengths; + + @OriginalMember(owner = "client!ji", name = "d", descriptor = "[I") + private int[] multiplicands; + + @OriginalMember(owner = "client!ji", name = "b", descriptor = "[[F") + private float[][] valueVector; + + @OriginalMember(owner = "client!ji", name = "", descriptor = "()V") + public VorbisCodebook() { + VorbisSound.readBits(24); + this.dimensions = VorbisSound.readBits(16); + this.entries = VorbisSound.readBits(24); + this.lengths = new int[this.entries]; + @Pc(23) boolean local23 = VorbisSound.readBit() != 0; + @Pc(27) int local27; + @Pc(32) int local32; + @Pc(46) int local46; + if (local23) { + local27 = 0; + local32 = VorbisSound.readBits(5) + 1; + while (local27 < this.entries) { + @Pc(44) int local44 = VorbisSound.readBits(IntUtils.bitCount(this.entries - local27)); + for (local46 = 0; local46 < local44; local46++) { + this.lengths[local27++] = local32; + } + local32++; + } + } else { + @Pc(66) boolean local66 = VorbisSound.readBit() != 0; + for (local32 = 0; local32 < this.entries; local32++) { + if (local66 && VorbisSound.readBit() == 0) { + this.lengths[local32] = 0; + } else { + this.lengths[local32] = VorbisSound.readBits(5) + 1; + } + } + } + this.createEntryTree(); + local27 = VorbisSound.readBits(4); + if (local27 > 0) { + @Pc(103) float local103 = VorbisSound.float32Unpack(VorbisSound.readBits(32)); + @Pc(107) float local107 = VorbisSound.float32Unpack(VorbisSound.readBits(32)); + local46 = VorbisSound.readBits(4) + 1; + @Pc(118) boolean local118 = VorbisSound.readBit() != 0; + @Pc(127) int local127; + if (local27 == 1) { + local127 = lookup1Values(this.entries, this.dimensions); + } else { + local127 = this.entries * this.dimensions; + } + this.multiplicands = new int[local127]; + @Pc(140) int local140; + for (local140 = 0; local140 < local127; local140++) { + this.multiplicands[local140] = VorbisSound.readBits(local46); + } + this.valueVector = new float[this.entries][this.dimensions]; + @Pc(169) float local169; + @Pc(171) int local171; + @Pc(173) int local173; + if (local27 == 1) { + for (local140 = 0; local140 < this.entries; local140++) { + local169 = 0.0F; + local171 = 1; + for (local173 = 0; local173 < this.dimensions; local173++) { + @Pc(183) int local183 = local140 / local171 % local127; + @Pc(195) float local195 = (float) this.multiplicands[local183] * local107 + local103 + local169; + this.valueVector[local140][local173] = local195; + if (local118) { + local169 = local195; + } + local171 *= local127; + } + } + } else { + for (local140 = 0; local140 < this.entries; local140++) { + local169 = 0.0F; + local171 = local140 * this.dimensions; + for (local173 = 0; local173 < this.dimensions; local173++) { + @Pc(246) float local246 = (float) this.multiplicands[local171] * local107 + local103 + local169; + this.valueVector[local140][local173] = local246; + if (local118) { + local169 = local246; + } + local171++; + } + } + } + } + } + + @OriginalMember(owner = "client!ji", name = "a", descriptor = "(II)I") + public static int lookup1Values(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + @Pc(10) int returnValue; + for (returnValue = (int) Math.pow(arg0, 1.0D / (double) arg1) + 1; IntUtils.pow(arg1, returnValue) > arg0; returnValue--) { + } + return returnValue; + } + + @OriginalMember(owner = "client!ji", name = "a", descriptor = "()[F") + public final float[] decodeVq() { + return this.valueVector[this.decodeScalar()]; + } + + @OriginalMember(owner = "client!ji", name = "b", descriptor = "()V") + private void createEntryTree() { + @Pc(3) int[] local3 = new int[this.entries]; + @Pc(6) int[] local6 = new int[33]; + @Pc(8) int local8; + @Pc(17) int local17; + @Pc(26) int local26; + @Pc(30) int local30; + @Pc(44) int local44; + @Pc(53) int local53; + @Pc(69) int local69; + for (local8 = 0; local8 < this.entries; local8++) { + local17 = this.lengths[local8]; + if (local17 != 0) { + local26 = 0x1 << 32 - local17; + local30 = local6[local17]; + local3[local8] = local30; + @Pc(60) int local60; + if ((local30 & local26) == 0) { + local44 = local30 | local26; + for (local53 = local17 - 1; local53 >= 1; local53--) { + local60 = local6[local53]; + if (local60 != local30) { + break; + } + local69 = 0x1 << 32 - local53; + if ((local60 & local69) != 0) { + local6[local53] = local6[local53 - 1]; + break; + } + local6[local53] = local60 | local69; + } + } else { + local44 = local6[local17 - 1]; + } + local6[local17] = local44; + for (local53 = local17 + 1; local53 <= 32; local53++) { + local60 = local6[local53]; + if (local60 == local30) { + local6[local53] = local44; + } + } + } + } + this.entryTree = new int[8]; + @Pc(122) int local122 = 0; + for (local8 = 0; local8 < this.entries; local8++) { + local17 = this.lengths[local8]; + if (local17 != 0) { + local26 = local3[local8]; + local30 = 0; + for (local44 = 0; local44 < local17; local44++) { + local53 = Integer.MIN_VALUE >>> local44; + if ((local26 & local53) == 0) { + local30++; + } else { + if (this.entryTree[local30] == 0) { + this.entryTree[local30] = local122; + } + local30 = this.entryTree[local30]; + } + if (local30 >= this.entryTree.length) { + @Pc(184) int[] local184 = new int[this.entryTree.length * 2]; + for (local69 = 0; local69 < this.entryTree.length; local69++) { + local184[local69] = this.entryTree[local69]; + } + this.entryTree = local184; + } + } + this.entryTree[local30] = ~local8; + if (local30 >= local122) { + local122 = local30 + 1; + } + } + } + } + + @OriginalMember(owner = "client!ji", name = "c", descriptor = "()I") + public final int decodeScalar() { + @Pc(1) int local1; + for (local1 = 0; this.entryTree[local1] >= 0; local1 = VorbisSound.readBit() == 0 ? local1 + 1 : this.entryTree[local1]) { + } + return ~this.entryTree[local1]; + } +} diff --git a/client/src/main/java/rt4/VorbisFloor.java b/client/src/main/java/rt4/VorbisFloor.java new file mode 100644 index 0000000..2f8b34c --- /dev/null +++ b/client/src/main/java/rt4/VorbisFloor.java @@ -0,0 +1,280 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ie") +public final class VorbisFloor { + + @OriginalMember(owner = "client!ie", name = "k", descriptor = "[I") + public static final int[] RANGES = new int[]{256, 128, 86, 64}; + @OriginalMember(owner = "client!ie", name = "l", descriptor = "[F") + public static final float[] INVERSE_DB_TABLE = new float[]{1.0649863E-7F, 1.1341951E-7F, 1.2079015E-7F, 1.2863978E-7F, 1.369995E-7F, 1.459025E-7F, 1.5538409E-7F, 1.6548181E-7F, 1.7623574E-7F, 1.8768856E-7F, 1.998856E-7F, 2.128753E-7F, 2.2670913E-7F, 2.4144197E-7F, 2.5713223E-7F, 2.7384212E-7F, 2.9163792E-7F, 3.1059022E-7F, 3.307741E-7F, 3.5226967E-7F, 3.7516213E-7F, 3.995423E-7F, 4.255068E-7F, 4.5315863E-7F, 4.8260745E-7F, 5.1397E-7F, 5.4737063E-7F, 5.829419E-7F, 6.208247E-7F, 6.611694E-7F, 7.041359E-7F, 7.4989464E-7F, 7.98627E-7F, 8.505263E-7F, 9.057983E-7F, 9.646621E-7F, 1.0273513E-6F, 1.0941144E-6F, 1.1652161E-6F, 1.2409384E-6F, 1.3215816E-6F, 1.4074654E-6F, 1.4989305E-6F, 1.5963394E-6F, 1.7000785E-6F, 1.8105592E-6F, 1.9282195E-6F, 2.053526E-6F, 2.1869757E-6F, 2.3290977E-6F, 2.4804558E-6F, 2.6416496E-6F, 2.813319E-6F, 2.9961443E-6F, 3.1908505E-6F, 3.39821E-6F, 3.619045E-6F, 3.8542307E-6F, 4.1047006E-6F, 4.371447E-6F, 4.6555283E-6F, 4.958071E-6F, 5.280274E-6F, 5.623416E-6F, 5.988857E-6F, 6.3780467E-6F, 6.7925284E-6F, 7.2339453E-6F, 7.704048E-6F, 8.2047E-6F, 8.737888E-6F, 9.305725E-6F, 9.910464E-6F, 1.0554501E-5F, 1.1240392E-5F, 1.1970856E-5F, 1.2748789E-5F, 1.3577278E-5F, 1.4459606E-5F, 1.5399271E-5F, 1.6400005E-5F, 1.7465769E-5F, 1.8600793E-5F, 1.9809577E-5F, 2.1096914E-5F, 2.2467912E-5F, 2.3928002E-5F, 2.5482977E-5F, 2.7139005E-5F, 2.890265E-5F, 3.078091E-5F, 3.2781227E-5F, 3.4911533E-5F, 3.718028E-5F, 3.9596467E-5F, 4.2169668E-5F, 4.491009E-5F, 4.7828602E-5F, 5.0936775E-5F, 5.424693E-5F, 5.7772202E-5F, 6.152657E-5F, 6.552491E-5F, 6.9783084E-5F, 7.4317984E-5F, 7.914758E-5F, 8.429104E-5F, 8.976875E-5F, 9.560242E-5F, 1.0181521E-4F, 1.0843174E-4F, 1.1547824E-4F, 1.2298267E-4F, 1.3097477E-4F, 1.3948625E-4F, 1.4855085E-4F, 1.5820454E-4F, 1.6848555E-4F, 1.7943469E-4F, 1.9109536E-4F, 2.0351382E-4F, 2.167393E-4F, 2.3082423E-4F, 2.4582449E-4F, 2.6179955E-4F, 2.7881275E-4F, 2.9693157E-4F, 3.1622787E-4F, 3.3677815E-4F, 3.5866388E-4F, 3.8197188E-4F, 4.0679457E-4F, 4.3323037E-4F, 4.613841E-4F, 4.913675E-4F, 5.2329927E-4F, 5.573062E-4F, 5.935231E-4F, 6.320936E-4F, 6.731706E-4F, 7.16917E-4F, 7.635063E-4F, 8.1312325E-4F, 8.6596457E-4F, 9.2223985E-4F, 9.821722E-4F, 0.0010459992F, 0.0011139743F, 0.0011863665F, 0.0012634633F, 0.0013455702F, 0.0014330129F, 0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F, 0.0019632196F, 0.0020908006F, 0.0022266726F, 0.0023713743F, 0.0025254795F, 0.0026895993F, 0.0028643848F, 0.0030505287F, 0.003248769F, 0.0034598925F, 0.0036847359F, 0.0039241905F, 0.0041792067F, 0.004450795F, 0.004740033F, 0.005048067F, 0.0053761187F, 0.005725489F, 0.0060975635F, 0.0064938175F, 0.0069158226F, 0.0073652514F, 0.007843887F, 0.008353627F, 0.008896492F, 0.009474637F, 0.010090352F, 0.01074608F, 0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F, 0.014722068F, 0.015678791F, 0.016697686F, 0.017782796F, 0.018938422F, 0.020169148F, 0.021479854F, 0.022875736F, 0.02436233F, 0.025945531F, 0.027631618F, 0.029427277F, 0.031339627F, 0.03337625F, 0.035545226F, 0.037855156F, 0.0403152F, 0.042935107F, 0.045725275F, 0.048696756F, 0.05186135F, 0.05523159F, 0.05882085F, 0.062643364F, 0.06671428F, 0.07104975F, 0.075666964F, 0.08058423F, 0.08582105F, 0.09139818F, 0.097337745F, 0.1036633F, 0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F, 0.14201812F, 0.15124726F, 0.16107617F, 0.1715438F, 0.18269168F, 0.19456401F, 0.20720787F, 0.22067343F, 0.23501402F, 0.25028655F, 0.26655158F, 0.28387362F, 0.3023213F, 0.32196787F, 0.34289113F, 0.36517414F, 0.3889052F, 0.41417846F, 0.44109413F, 0.4697589F, 0.50028646F, 0.53279793F, 0.5674221F, 0.6042964F, 0.64356697F, 0.6853896F, 0.72993004F, 0.777365F, 0.8278826F, 0.88168305F, 0.9389798F, 1.0F}; + @OriginalMember(owner = "client!ie", name = "b", descriptor = "[Z") + public static boolean[] step2Flag; + @OriginalMember(owner = "client!ie", name = "h", descriptor = "[I") + public static int[] currentXList; + @OriginalMember(owner = "client!ie", name = "j", descriptor = "[I") + public static int[] y; + @OriginalMember(owner = "client!ie", name = "e", descriptor = "[I") + private final int[] classList; + + @OriginalMember(owner = "client!ie", name = "i", descriptor = "[I") + private final int[] classDimensions; + + @OriginalMember(owner = "client!ie", name = "g", descriptor = "[I") + private final int[] subclasses; + + @OriginalMember(owner = "client!ie", name = "a", descriptor = "[I") + private final int[] classMasterBooks; + + @OriginalMember(owner = "client!ie", name = "c", descriptor = "[[I") + private final int[][] subclassBooks; + + @OriginalMember(owner = "client!ie", name = "f", descriptor = "I") + private final int multiplier; + + @OriginalMember(owner = "client!ie", name = "d", descriptor = "[I") + private final int[] xList; + + @OriginalMember(owner = "client!ie", name = "", descriptor = "()V") + public VorbisFloor() { + @Pc(4) int type = VorbisSound.readBits(16); + if (type != 1) { + throw new RuntimeException(); + } + @Pc(14) int local14 = VorbisSound.readBits(5); + @Pc(16) int local16 = 0; + this.classList = new int[local14]; + @Pc(22) int local22; + @Pc(28) int local28; + for (local22 = 0; local22 < local14; local22++) { + local28 = VorbisSound.readBits(4); + this.classList[local22] = local28; + if (local28 >= local16) { + local16 = local28 + 1; + } + } + this.classDimensions = new int[local16]; + this.subclasses = new int[local16]; + this.classMasterBooks = new int[local16]; + this.subclassBooks = new int[local16][]; + @Pc(101) int local101; + for (local22 = 0; local22 < local16; local22++) { + this.classDimensions[local22] = VorbisSound.readBits(3) + 1; + local28 = this.subclasses[local22] = VorbisSound.readBits(2); + if (local28 != 0) { + this.classMasterBooks[local22] = VorbisSound.readBits(8); + } + local28 = 0x1 << local28; + @Pc(94) int[] local94 = new int[local28]; + this.subclassBooks[local22] = local94; + for (local101 = 0; local101 < local28; local101++) { + local94[local101] = VorbisSound.readBits(8) - 1; + } + } + this.multiplier = VorbisSound.readBits(2) + 1; + local22 = VorbisSound.readBits(4); + local28 = 2; + @Pc(128) int local128; + for (local128 = 0; local128 < local14; local128++) { + local28 += this.classDimensions[this.classList[local128]]; + } + this.xList = new int[local28]; + this.xList[0] = 0; + this.xList[1] = 0x1 << local22; + local28 = 2; + for (local128 = 0; local128 < local14; local128++) { + local101 = this.classList[local128]; + for (@Pc(173) int local173 = 0; local173 < this.classDimensions[local101]; local173++) { + this.xList[local28++] = VorbisSound.readBits(local22); + } + } + if (currentXList == null || currentXList.length < local28) { + currentXList = new int[local28]; + y = new int[local28]; + step2Flag = new boolean[local28]; + } + } + + @OriginalMember(owner = "client!ie", name = "a", descriptor = "([II)I") + public static int lowNeighbour(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1) { + @Pc(3) int local3 = arg0[arg1]; + @Pc(5) int local5 = -1; + @Pc(7) int local7 = Integer.MIN_VALUE; + for (@Pc(9) int local9 = 0; local9 < arg1; local9++) { + @Pc(16) int local16 = arg0[local9]; + if (local16 < local3 && local16 > local7) { + local5 = local9; + local7 = local16; + } + } + return local5; + } + + @OriginalMember(owner = "client!ie", name = "b", descriptor = "([II)I") + public static int highNeighbour(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1) { + @Pc(3) int local3 = arg0[arg1]; + @Pc(5) int local5 = -1; + @Pc(7) int local7 = Integer.MAX_VALUE; + for (@Pc(9) int local9 = 0; local9 < arg1; local9++) { + @Pc(16) int local16 = arg0[local9]; + if (local16 > local3 && local16 < local7) { + local5 = local9; + local7 = local16; + } + } + return local5; + } + + @OriginalMember(owner = "client!ie", name = "a", descriptor = "(IIII[FI)V") + private void renderLine(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) float[] arg4, @OriginalArg(5) int arg5) { + @Pc(3) int local3 = arg3 - arg1; + @Pc(7) int local7 = arg2 - arg0; + @Pc(14) int local14 = local3 < 0 ? -local3 : local3; + @Pc(18) int local18 = local3 / local7; + @Pc(20) int local20 = arg1; + @Pc(22) int local22 = 0; + @Pc(32) int local32 = local3 < 0 ? local18 - 1 : local18 + 1; + @Pc(43) int local43 = local14 - (local18 < 0 ? -local18 : local18) * local7; + arg4[arg0] *= INVERSE_DB_TABLE[arg1]; + if (arg2 > arg5) { + arg2 = arg5; + } + for (@Pc(61) int local61 = arg0 + 1; local61 < arg2; local61++) { + local22 += local43; + if (local22 >= local7) { + local22 -= local7; + local20 += local32; + } else { + local20 += local18; + } + arg4[local61] *= INVERSE_DB_TABLE[local20]; + } + } + + @OriginalMember(owner = "client!ie", name = "a", descriptor = "(II)V") + private void sort(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1) { + if (arg0 >= arg1) { + return; + } + @Pc(5) int local5 = arg0; + @Pc(9) int local9 = currentXList[arg0]; + @Pc(13) int local13 = y[arg0]; + @Pc(17) boolean local17 = step2Flag[arg0]; + for (@Pc(21) int local21 = arg0 + 1; local21 <= arg1; local21++) { + @Pc(28) int local28 = currentXList[local21]; + if (local28 < local9) { + currentXList[local5] = local28; + y[local5] = y[local21]; + step2Flag[local5] = step2Flag[local21]; + local5++; + currentXList[local21] = currentXList[local5]; + y[local21] = y[local5]; + step2Flag[local21] = step2Flag[local5]; + } + } + currentXList[local5] = local9; + y[local5] = local13; + step2Flag[local5] = local17; + this.sort(arg0, local5 - 1); + this.sort(local5 + 1, arg1); + } + + @OriginalMember(owner = "client!ie", name = "a", descriptor = "(IIIII)I") + private int renderPoint(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) { + @Pc(3) int local3 = arg3 - arg1; + @Pc(7) int local7 = arg2 - arg0; + @Pc(14) int local14 = local3 < 0 ? -local3 : local3; + @Pc(20) int local20 = local14 * (arg4 - arg0); + @Pc(24) int local24 = local20 / local7; + return local3 < 0 ? arg1 - local24 : arg1 + local24; + } + + @OriginalMember(owner = "client!ie", name = "a", descriptor = "([FI)V") + public final void synthesize(@OriginalArg(0) float[] arg0, @OriginalArg(1) int arg1) { + @Pc(3) int local3 = this.xList.length; + @Pc(10) int local10 = RANGES[this.multiplier - 1]; + step2Flag[0] = step2Flag[1] = true; + @Pc(20) int local20; + @Pc(27) int local27; + @Pc(31) int local31; + @Pc(49) int local49; + @Pc(53) int local53; + for (local20 = 2; local20 < local3; local20++) { + local27 = lowNeighbour(currentXList, local20); + local31 = highNeighbour(currentXList, local20); + local49 = this.renderPoint(currentXList[local27], y[local27], currentXList[local31], y[local31], currentXList[local20]); + local53 = y[local20]; + @Pc(57) int local57 = local10 - local49; + @Pc(68) int local68 = (local57 < local49 ? local57 : local49) << 1; + if (local53 == 0) { + step2Flag[local20] = false; + y[local20] = local49; + } else { + step2Flag[local27] = step2Flag[local31] = true; + step2Flag[local20] = true; + if (local53 >= local68) { + y[local20] = local57 > local49 ? local53 + local49 - local49 : local49 - local53 + local57 - 1; + } else { + y[local20] = (local53 & 0x1) == 0 ? local49 + local53 / 2 : local49 - (local53 + 1) / 2; + } + } + } + this.sort(0, local3 - 1); + local20 = 0; + local27 = y[0] * this.multiplier; + for (local31 = 1; local31 < local3; local31++) { + if (step2Flag[local31]) { + local49 = currentXList[local31]; + local53 = y[local31] * this.multiplier; + this.renderLine(local20, local27, local49, local53, arg0, arg1); + if (local49 >= arg1) { + return; + } + local20 = local49; + local27 = local53; + } + } + @Pc(193) float local193 = INVERSE_DB_TABLE[local27]; + for (local49 = local20; local49 < arg1; local49++) { + arg0[local49] *= local193; + } + } + + @OriginalMember(owner = "client!ie", name = "b", descriptor = "()Z") + public final boolean decodePacket() { + @Pc(5) boolean local5 = VorbisSound.readBit() != 0; + if (!local5) { + return false; + } + @Pc(13) int local13 = this.xList.length; + @Pc(15) int local15; + for (local15 = 0; local15 < local13; local15++) { + currentXList[local15] = this.xList[local15]; + } + local15 = RANGES[this.multiplier - 1]; + @Pc(40) int local40 = IntUtils.bitCount(local15 - 1); + y[0] = VorbisSound.readBits(local40); + y[1] = VorbisSound.readBits(local40); + @Pc(52) int local52 = 2; + for (@Pc(54) int local54 = 0; local54 < this.classList.length; local54++) { + @Pc(64) int local64 = this.classList[local54]; + @Pc(69) int local69 = this.classDimensions[local64]; + @Pc(74) int local74 = this.subclasses[local64]; + @Pc(80) int local80 = (0x1 << local74) - 1; + @Pc(82) int local82 = 0; + if (local74 > 0) { + local82 = VorbisSound.codebooks[this.classMasterBooks[local64]].decodeScalar(); + } + for (@Pc(94) int local94 = 0; local94 < local69; local94++) { + @Pc(106) int local106 = this.subclassBooks[local64][local82 & local80]; + local82 >>>= local74; + y[local52++] = local106 >= 0 ? VorbisSound.codebooks[local106].decodeScalar() : 0; + } + } + return true; + } +} diff --git a/client/src/main/java/rt4/VorbisMapping.java b/client/src/main/java/rt4/VorbisMapping.java new file mode 100644 index 0000000..88c45e7 --- /dev/null +++ b/client/src/main/java/rt4/VorbisMapping.java @@ -0,0 +1,41 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!uk") +public final class VorbisMapping { + + @OriginalMember(owner = "client!uk", name = "d", descriptor = "I") + public final int submaps; + + @OriginalMember(owner = "client!uk", name = "a", descriptor = "I") + public int mux; + + @OriginalMember(owner = "client!uk", name = "b", descriptor = "[I") + public final int[] submapFloor; + + @OriginalMember(owner = "client!uk", name = "c", descriptor = "[I") + public final int[] submapResidue; + + @OriginalMember(owner = "client!uk", name = "", descriptor = "()V") + public VorbisMapping() { + VorbisSound.readBits(16); + this.submaps = VorbisSound.readBit() == 0 ? 1 : VorbisSound.readBits(4) + 1; + if (VorbisSound.readBit() != 0) { + VorbisSound.readBits(8); + } + VorbisSound.readBits(2); + if (this.submaps > 1) { + this.mux = VorbisSound.readBits(4); + } + this.submapFloor = new int[this.submaps]; + this.submapResidue = new int[this.submaps]; + for (@Pc(42) int local42 = 0; local42 < this.submaps; local42++) { + VorbisSound.readBits(8); + this.submapFloor[local42] = VorbisSound.readBits(8); + this.submapResidue[local42] = VorbisSound.readBits(8); + } + } +} diff --git a/client/src/main/java/rt4/VorbisResidue.java b/client/src/main/java/rt4/VorbisResidue.java new file mode 100644 index 0000000..b94fb20 --- /dev/null +++ b/client/src/main/java/rt4/VorbisResidue.java @@ -0,0 +1,112 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!vb") +public final class VorbisResidue { + + @OriginalMember(owner = "client!vb", name = "c", descriptor = "I") + private final int type = VorbisSound.readBits(16); + + @OriginalMember(owner = "client!vb", name = "b", descriptor = "I") + private final int begin = VorbisSound.readBits(24); + + @OriginalMember(owner = "client!vb", name = "d", descriptor = "I") + private final int end = VorbisSound.readBits(24); + + @OriginalMember(owner = "client!vb", name = "e", descriptor = "I") + private final int partitionSize = VorbisSound.readBits(24) + 1; + + @OriginalMember(owner = "client!vb", name = "g", descriptor = "I") + private final int classifications = VorbisSound.readBits(6) + 1; + + @OriginalMember(owner = "client!vb", name = "a", descriptor = "I") + private final int classBook = VorbisSound.readBits(8); + + @OriginalMember(owner = "client!vb", name = "f", descriptor = "[I") + private final int[] books; + + @OriginalMember(owner = "client!vb", name = "", descriptor = "()V") + public VorbisResidue() { + @Pc(33) int[] local33 = new int[this.classifications]; + @Pc(35) int local35; + for (local35 = 0; local35 < this.classifications; local35++) { + @Pc(41) int local41 = 0; + @Pc(44) int local44 = VorbisSound.readBits(3); + @Pc(50) boolean local50 = VorbisSound.readBit() != 0; + if (local50) { + local41 = VorbisSound.readBits(5); + } + local33[local35] = local41 << 3 | local44; + } + this.books = new int[this.classifications * 8]; + for (local35 = 0; local35 < this.classifications * 8; local35++) { + this.books[local35] = (local33[local35 >> 3] & 0x1 << (local35 & 0x7)) == 0 ? -1 : VorbisSound.readBits(8); + } + } + + @OriginalMember(owner = "client!vb", name = "a", descriptor = "([FIZ)V") + public final void synthesize(@OriginalArg(0) float[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) boolean arg2) { + @Pc(1) int local1; + for (local1 = 0; local1 < arg1; local1++) { + arg0[local1] = 0.0F; + } + if (arg2) { + return; + } + local1 = VorbisSound.codebooks[this.classBook].dimensions; + @Pc(25) int local25 = this.end - this.begin; + @Pc(30) int local30 = local25 / this.partitionSize; + @Pc(33) int[] local33 = new int[local30]; + for (@Pc(35) int local35 = 0; local35 < 8; local35++) { + @Pc(40) int local40 = 0; + while (local40 < local30) { + @Pc(51) int local51; + @Pc(55) int local55; + if (local35 == 0) { + local51 = VorbisSound.codebooks[this.classBook].decodeScalar(); + for (local55 = local1 - 1; local55 >= 0; local55--) { + if (local40 + local55 < local30) { + local33[local40 + local55] = local51 % this.classifications; + } + local51 /= this.classifications; + } + } + for (local51 = 0; local51 < local1; local51++) { + local55 = local33[local40]; + @Pc(96) int local96 = this.books[local55 * 8 + local35]; + if (local96 >= 0) { + @Pc(106) int local106 = this.begin + local40 * this.partitionSize; + @Pc(110) VorbisCodebook local110 = VorbisSound.codebooks[local96]; + @Pc(119) int local119; + if (this.type == 0) { + local119 = this.partitionSize / local110.dimensions; + for (@Pc(121) int local121 = 0; local121 < local119; local121++) { + @Pc(127) float[] local127 = local110.decodeVq(); + for (@Pc(129) int local129 = 0; local129 < local110.dimensions; local129++) { + arg0[local106 + local121 + local129 * local119] += local127[local129]; + } + } + } else { + local119 = 0; + while (local119 < this.partitionSize) { + @Pc(162) float[] local162 = local110.decodeVq(); + for (@Pc(164) int local164 = 0; local164 < local110.dimensions; local164++) { + arg0[local106 + local119] += local162[local164]; + local119++; + } + } + } + } + local40++; + if (local40 >= local30) { + break; + } + } + } + } + } +} diff --git a/client/src/main/java/rt4/VorbisSound.java b/client/src/main/java/rt4/VorbisSound.java new file mode 100644 index 0000000..cb6279c --- /dev/null +++ b/client/src/main/java/rt4/VorbisSound.java @@ -0,0 +1,541 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!jc") +public final class VorbisSound extends Node { + + @OriginalMember(owner = "client!jc", name = "p", descriptor = "[F") + public static float[] trigB1; + @OriginalMember(owner = "client!jc", name = "q", descriptor = "[F") + public static float[] trigC1; + @OriginalMember(owner = "client!jc", name = "t", descriptor = "[I") + public static int[] bitReverse0; + @OriginalMember(owner = "client!jc", name = "u", descriptor = "[Lclient!vb;") + public static VorbisResidue[] residues; + @OriginalMember(owner = "client!jc", name = "v", descriptor = "[Z") + public static boolean[] modeBlockFlags; + @OriginalMember(owner = "client!jc", name = "y", descriptor = "I") + public static int blockSize1; + @OriginalMember(owner = "client!jc", name = "A", descriptor = "[Lclient!uk;") + public static VorbisMapping[] mappings; + @OriginalMember(owner = "client!jc", name = "B", descriptor = "[F") + public static float[] trigA1; + @OriginalMember(owner = "client!jc", name = "C", descriptor = "[F") + public static float[] trigA0; + @OriginalMember(owner = "client!jc", name = "E", descriptor = "I") + public static int blockSize0; + @OriginalMember(owner = "client!jc", name = "F", descriptor = "[F") + public static float[] vector; + @OriginalMember(owner = "client!jc", name = "I", descriptor = "[Lclient!ji;") + public static VorbisCodebook[] codebooks; + @OriginalMember(owner = "client!jc", name = "J", descriptor = "[Lclient!ie;") + public static VorbisFloor[] floors; + @OriginalMember(owner = "client!jc", name = "L", descriptor = "[I") + public static int[] bitReverse1; + @OriginalMember(owner = "client!jc", name = "P", descriptor = "[F") + public static float[] trigB0; + @OriginalMember(owner = "client!jc", name = "S", descriptor = "[F") + public static float[] trigC0; + @OriginalMember(owner = "client!jc", name = "W", descriptor = "[I") + public static int[] modeMappings; + @OriginalMember(owner = "client!jc", name = "G", descriptor = "I") + private static int position; + @OriginalMember(owner = "client!jc", name = "Q", descriptor = "I") + private static int bitPosition; + @OriginalMember(owner = "client!jc", name = "T", descriptor = "[B") + private static byte[] bytes; + @OriginalMember(owner = "client!jc", name = "H", descriptor = "Z") + private static boolean aBoolean149 = false; + @OriginalMember(owner = "client!jc", name = "r", descriptor = "I") + private int prevN; + + @OriginalMember(owner = "client!jc", name = "s", descriptor = "I") + private int samplesLen; + + @OriginalMember(owner = "client!jc", name = "w", descriptor = "[F") + private float[] prevVector; + + @OriginalMember(owner = "client!jc", name = "x", descriptor = "Z") + private boolean aBoolean148; + + @OriginalMember(owner = "client!jc", name = "z", descriptor = "I") + private int start; + + @OriginalMember(owner = "client!jc", name = "D", descriptor = "I") + private int end; + + @OriginalMember(owner = "client!jc", name = "K", descriptor = "I") + private int rate; + + @OriginalMember(owner = "client!jc", name = "M", descriptor = "[[B") + private byte[][] packets; + + @OriginalMember(owner = "client!jc", name = "N", descriptor = "Z") + private boolean prevNoResidue; + + @OriginalMember(owner = "client!jc", name = "O", descriptor = "I") + private int prevQuarter; + + @OriginalMember(owner = "client!jc", name = "R", descriptor = "[B") + private byte[] samples; + + @OriginalMember(owner = "client!jc", name = "U", descriptor = "I") + private int packetIndex; + + @OriginalMember(owner = "client!jc", name = "V", descriptor = "I") + private int sampleIndex; + + @OriginalMember(owner = "client!jc", name = "", descriptor = "([B)V") + public VorbisSound(@OriginalArg(0) byte[] bytes) { + this.decode(bytes); + } + + @OriginalMember(owner = "client!jc", name = "c", descriptor = "(I)F") + public static float float32Unpack(@OriginalArg(0) int x) { + @Pc(3) int mantissa = x & 0x1FFFFF; + @Pc(7) int sign = x & Integer.MIN_VALUE; + @Pc(13) int exponent = x >> 21 & 0x3FF; + if (sign != 0) { + mantissa = -mantissa; + } + return (float) ((double) mantissa * Math.pow(2.0D, exponent - 788)); + } + + @OriginalMember(owner = "client!jc", name = "a", descriptor = "(Lclient!ve;)Z") + private static boolean method2344(@OriginalArg(0) Js5 arg0) { + if (!aBoolean149) { + @Pc(7) byte[] local7 = arg0.fetchFile(0, 0); + if (local7 == null) { + return false; + } + method2349(local7); + aBoolean149 = true; + } + return true; + } + + @OriginalMember(owner = "client!jc", name = "a", descriptor = "(Lclient!ve;II)Lclient!jc;") + public static VorbisSound create(@OriginalArg(0) Js5 arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) { + if (method2344(arg0)) { + @Pc(16) byte[] local16 = arg0.fetchFile(arg1, arg2); + return local16 == null ? null : new VorbisSound(local16); + } else { + arg0.isFileReady(arg2, arg1); + return null; + } + } + + @OriginalMember(owner = "client!jc", name = "b", descriptor = "()I") + public static int readBit() { + @Pc(7) int local7 = bytes[position] >> bitPosition & 0x1; + bitPosition++; + position += bitPosition >> 3; + bitPosition &= 0x7; + return local7; + } + + @OriginalMember(owner = "client!jc", name = "a", descriptor = "([BI)V") + public static void setBytes(@OriginalArg(0) byte[] arg0) { + bytes = arg0; + position = 0; + bitPosition = 0; + } + + @OriginalMember(owner = "client!jc", name = "b", descriptor = "([B)V") + private static void method2349(@OriginalArg(0) byte[] arg0) { + setBytes(arg0); + blockSize0 = 0x1 << readBits(4); + blockSize1 = 0x1 << readBits(4); + vector = new float[blockSize1]; + @Pc(17) int local17; + @Pc(26) int local26; + @Pc(30) int local30; + @Pc(34) int local34; + @Pc(38) int local38; + for (local17 = 0; local17 < 2; local17++) { + local26 = local17 == 0 ? blockSize0 : blockSize1; + local30 = local26 >> 1; + local34 = local26 >> 2; + local38 = local26 >> 3; + @Pc(41) float[] local41 = new float[local30]; + for (@Pc(43) int local43 = 0; local43 < local34; local43++) { + local41[local43 * 2] = (float) Math.cos((double) (local43 * 4) * 3.141592653589793D / (double) local26); + local41[local43 * 2 + 1] = -((float) Math.sin((double) (local43 * 4) * 3.141592653589793D / (double) local26)); + } + @Pc(86) float[] local86 = new float[local30]; + for (@Pc(88) int local88 = 0; local88 < local34; local88++) { + local86[local88 * 2] = (float) Math.cos((double) (local88 * 2 + 1) * 3.141592653589793D / (double) (local26 * 2)); + local86[local88 * 2 + 1] = (float) Math.sin((double) (local88 * 2 + 1) * 3.141592653589793D / (double) (local26 * 2)); + } + @Pc(138) float[] local138 = new float[local34]; + for (@Pc(140) int local140 = 0; local140 < local38; local140++) { + local138[local140 * 2] = (float) Math.cos((double) (local140 * 4 + 2) * 3.141592653589793D / (double) local26); + local138[local140 * 2 + 1] = -((float) Math.sin((double) (local140 * 4 + 2) * 3.141592653589793D / (double) local26)); + } + @Pc(187) int[] local187 = new int[local38]; + @Pc(193) int local193 = IntUtils.bitCount(local38 - 1); + for (@Pc(195) int local195 = 0; local195 < local38; local195++) { + local187[local195] = IntUtils.bitReverse(local193, local195); + } + if (local17 == 0) { + trigA0 = local41; + trigB0 = local86; + trigC0 = local138; + bitReverse0 = local187; + } else { + trigA1 = local41; + trigB1 = local86; + trigC1 = local138; + bitReverse1 = local187; + } + } + local17 = readBits(8) + 1; + codebooks = new VorbisCodebook[local17]; + for (local26 = 0; local26 < local17; local26++) { + codebooks[local26] = new VorbisCodebook(); + } + local26 = readBits(6) + 1; + for (local30 = 0; local30 < local26; local30++) { + readBits(16); + } + local26 = readBits(6) + 1; + floors = new VorbisFloor[local26]; + for (local30 = 0; local30 < local26; local30++) { + floors[local30] = new VorbisFloor(); + } + local30 = readBits(6) + 1; + residues = new VorbisResidue[local30]; + for (local34 = 0; local34 < local30; local34++) { + residues[local34] = new VorbisResidue(); + } + local34 = readBits(6) + 1; + mappings = new VorbisMapping[local34]; + for (local38 = 0; local38 < local34; local38++) { + mappings[local38] = new VorbisMapping(); + } + local38 = readBits(6) + 1; + modeBlockFlags = new boolean[local38]; + modeMappings = new int[local38]; + for (@Pc(340) int local340 = 0; local340 < local38; local340++) { + modeBlockFlags[local340] = readBit() != 0; + readBits(16); + readBits(16); + modeMappings[local340] = readBits(8); + } + } + + @OriginalMember(owner = "client!jc", name = "e", descriptor = "(I)I") + public static int readBits(@OriginalArg(0) int len) { + @Pc(1) int local1 = 0; + @Pc(3) int local3 = 0; + @Pc(12) int local12; + while (len >= 8 - bitPosition) { + local12 = 8 - bitPosition; + @Pc(18) int local18 = (0x1 << local12) - 1; + local1 += (bytes[position] >> bitPosition & local18) << local3; + bitPosition = 0; + position++; + local3 += local12; + len -= local12; + } + if (len > 0) { + local12 = (0x1 << len) - 1; + local1 += (bytes[position] >> bitPosition & local12) << local3; + bitPosition += len; + } + return local1; + } + + @OriginalMember(owner = "client!jc", name = "a", descriptor = "([I)Lclient!kj;") + public final PcmSound toPcmSound(@OriginalArg(0) int[] arg0) { + if (arg0 != null && arg0[0] <= 0) { + return null; + } + if (this.samples == null) { + this.prevN = 0; + this.prevVector = new float[blockSize1]; + this.samples = new byte[this.samplesLen]; + this.sampleIndex = 0; + this.packetIndex = 0; + } + while (this.packetIndex < this.packets.length) { + if (arg0 != null && arg0[0] <= 0) { + return null; + } + @Pc(47) float[] local47 = this.decodePacket(this.packetIndex); + if (local47 != null) { + @Pc(52) int local52 = this.sampleIndex; + @Pc(55) int local55 = local47.length; + if (local55 > this.samplesLen - local52) { + local55 = this.samplesLen - local52; + } + for (@Pc(68) int local68 = 0; local68 < local55; local68++) { + @Pc(80) int local80 = (int) (local47[local68] * 128.0F + 128.0F); + if ((local80 & 0xFFFFFF00) != 0) { + local80 = ~local80 >> 31; + } + this.samples[local52++] = (byte) (local80 - 128); + } + if (arg0 != null) { + arg0[0] -= local52 - this.sampleIndex; + } + this.sampleIndex = local52; + } + this.packetIndex++; + } + this.prevVector = null; + @Pc(129) byte[] local129 = this.samples; + this.samples = null; + return new PcmSound(this.rate, local129, this.start, this.end, this.aBoolean148); + } + + @OriginalMember(owner = "client!jc", name = "a", descriptor = "([B)V") + private void decode(@OriginalArg(0) byte[] arg0) { + @Pc(4) Buffer buffer = new Buffer(arg0); + this.rate = buffer.g4(); + this.samplesLen = buffer.g4(); + this.start = buffer.g4(); + this.end = buffer.g4(); + if (this.end < 0) { + this.end = ~this.end; + this.aBoolean148 = true; + } + @Pc(40) int packetsLen = buffer.g4(); + this.packets = new byte[packetsLen][]; + for (@Pc(46) int i = 0; i < packetsLen; i++) { + @Pc(51) int len = 0; + @Pc(55) int n; + do { + n = buffer.g1(); + len += n; + } while (n >= 255); + @Pc(67) byte[] packet = new byte[len]; + buffer.gdata(len, packet); + this.packets[i] = packet; + } + } + + @OriginalMember(owner = "client!jc", name = "d", descriptor = "(I)[F") + private float[] decodePacket(@OriginalArg(0) int index) { + setBytes(this.packets[index]); + readBit(); + @Pc(15) int modeNumber = readBits(IntUtils.bitCount(modeMappings.length - 1)); + @Pc(19) boolean modeBlockFlag = modeBlockFlags[modeNumber]; + @Pc(25) int n = modeBlockFlag ? blockSize1 : blockSize0; + @Pc(27) boolean previousWindowFlag = false; + @Pc(29) boolean nextWindowFlag = false; + if (modeBlockFlag) { + previousWindowFlag = readBit() != 0; + nextWindowFlag = readBit() != 0; + } + @Pc(47) int windowCenter = n >> 1; + @Pc(59) int leftWindowStart; + @Pc(67) int leftWindowEnd; + @Pc(71) int leftN; + if (modeBlockFlag && !previousWindowFlag) { + leftWindowStart = (n >> 2) - (blockSize0 >> 2); + leftWindowEnd = (n >> 2) + (blockSize0 >> 2); + leftN = blockSize0 >> 1; + } else { + leftWindowStart = 0; + leftWindowEnd = windowCenter; + leftN = n >> 1; + } + @Pc(94) int rightWindowStart; + @Pc(104) int rightWindowEnd; + @Pc(108) int rightN; + if (modeBlockFlag && !nextWindowFlag) { + rightWindowStart = n - (n >> 2) - (blockSize0 >> 2); + rightWindowEnd = n + (blockSize0 >> 2) - (n >> 2); + rightN = blockSize0 >> 1; + } else { + rightWindowStart = windowCenter; + rightWindowEnd = n; + rightN = n >> 1; + } + @Pc(123) VorbisMapping mapping = mappings[modeMappings[modeNumber]]; + @Pc(126) int submapNumber = mapping.mux; + @Pc(131) int floorNumber = mapping.submapFloor[submapNumber]; + @Pc(140) boolean noResidue = !floors[floorNumber].decodePacket(); + for (@Pc(144) int local144 = 0; local144 < mapping.submaps; local144++) { + @Pc(155) VorbisResidue residue = residues[mapping.submapResidue[local144]]; + @Pc(157) float[] vector = VorbisSound.vector; + residue.synthesize(vector, n >> 1, noResidue); + } + @Pc(176) int floorNumber2; + if (!noResidue) { + floorNumber = mapping.mux; + floorNumber2 = mapping.submapFloor[floorNumber]; + floors[floorNumber2].synthesize(vector, n >> 1); + } + @Pc(212) int local212; + if (noResidue) { + for (floorNumber = n >> 1; floorNumber < n; floorNumber++) { + vector[floorNumber] = 0.0F; + } + } else { + int n2 = n >> 1; + int n4 = n >> 2; + int n8 = n >> 3; + @Pc(214) float[] vector = VorbisSound.vector; + for (int k = 0; k < n2; k++) { + vector[k] *= 0.5F; + } + for (int k = n2; k < n; k++) { + vector[k] = -vector[n - k - 1]; + } + @Pc(252) float[] local252 = modeBlockFlag ? trigA1 : trigA0; + @Pc(258) float[] local258 = modeBlockFlag ? trigB1 : trigB0; + @Pc(264) float[] local264 = modeBlockFlag ? trigC1 : trigC0; + @Pc(270) int[] local270 = modeBlockFlag ? bitReverse1 : bitReverse0; + @Pc(272) int k; + @Pc(291) float a; + @Pc(309) float b; + @Pc(315) float c; + @Pc(323) float d; + for (k = 0; k < n4; k++) { + a = vector[k * 4] - vector[n - k * 4 - 1]; + b = vector[k * 4 + 2] - vector[n - k * 4 - 3]; + c = local252[k * 2]; + d = local252[k * 2 + 1]; + vector[n - k * 4 - 1] = a * c - b * d; + vector[n - k * 4 - 3] = a * d + b * c; + } + @Pc(432) float e; + @Pc(442) float f; + for (k = 0; k < n8; k++) { + a = vector[n2 + k * 4 + 3]; + b = vector[n2 + k * 4 + 1]; + c = vector[k * 4 + 3]; + d = vector[k * 4 + 1]; + vector[n2 + k * 4 + 3] = a + c; + vector[n2 + k * 4 + 1] = b + d; + e = local252[n2 - k * 4 - 4]; + f = local252[n2 - k * 4 - 3]; + vector[k * 4 + 3] = (a - c) * e - (b - d) * f; + vector[k * 4 + 1] = (b - d) * e + (a - c) * f; + } + int logN = IntUtils.bitCount(n - 1); + @Pc(488) int l; + @Pc(499) int k0; + @Pc(503) int k1; + @Pc(505) int s; + for (l = 0; l < logN - 3; l++) { + k0 = n >> l + 2; + k1 = 0x8 << l; + for (s = 0; s < 0x2 << l; s++) { + @Pc(518) int local518 = n - k0 * 2 * s; + @Pc(528) int local528 = n - k0 * (s * 2 + 1); + for (@Pc(530) int local530 = 0; local530 < n >> l + 4; local530++) { + @Pc(541) int local541 = local530 * 4; + @Pc(549) float local549 = vector[local518 - local541 - 1]; + @Pc(557) float local557 = vector[local518 - local541 - 3]; + @Pc(565) float local565 = vector[local528 - local541 - 1]; + @Pc(573) float local573 = vector[local528 - local541 - 3]; + vector[local518 - local541 - 1] = local549 + local565; + vector[local518 - local541 - 3] = local557 + local573; + @Pc(599) float local599 = local252[local530 * k1]; + @Pc(607) float local607 = local252[local530 * k1 + 1]; + vector[local528 - local541 - 1] = (local549 - local565) * local599 - (local557 - local573) * local607; + vector[local528 - local541 - 3] = (local557 - local573) * local599 + (local549 - local565) * local607; + } + } + } + for (l = 1; l < n8 - 1; l++) { + k0 = local270[l]; + if (l < k0) { + k1 = l * 8; + s = k0 * 8; + e = vector[k1 + 1]; + vector[k1 + 1] = vector[s + 1]; + vector[s + 1] = e; + e = vector[k1 + 3]; + vector[k1 + 3] = vector[s + 3]; + vector[s + 3] = e; + e = vector[k1 + 5]; + vector[k1 + 5] = vector[s + 5]; + vector[s + 5] = e; + e = vector[k1 + 7]; + vector[k1 + 7] = vector[s + 7]; + vector[s + 7] = e; + } + } + for (l = 0; l < n2; l++) { + vector[l] = vector[l * 2 + 1]; + } + for (l = 0; l < n8; l++) { + vector[n - l * 2 - 1] = vector[l * 4]; + vector[n - l * 2 - 2] = vector[l * 4 + 1]; + vector[n - n4 - l * 2 - 1] = vector[l * 4 + 2]; + vector[n - n4 - l * 2 - 2] = vector[l * 4 + 3]; + } + for (l = 0; l < n8; l++) { + b = local264[l * 2]; + c = local264[l * 2 + 1]; + d = vector[n2 + l * 2]; + e = vector[n2 + l * 2 + 1]; + f = vector[n - l * 2 - 2]; + @Pc(908) float local908 = vector[n - l * 2 - 1]; + @Pc(920) float local920 = c * (d - f) + b * (e + local908); + vector[n2 + l * 2] = (d + f + local920) * 0.5F; + vector[n - l * 2 - 2] = (d + f - local920) * 0.5F; + @Pc(962) float local962 = c * (e + local908) - b * (d - f); + vector[n2 + l * 2 + 1] = (e + local962 - local908) * 0.5F; + vector[n - l * 2 - 1] = (local908 + local962 - e) * 0.5F; + } + for (l = 0; l < n4; l++) { + vector[l] = vector[l * 2 + n2] * local258[l * 2] + vector[l * 2 + n2 + 1] * local258[l * 2 + 1]; + vector[n2 - l - 1] = vector[l * 2 + n2] * local258[l * 2 + 1] - vector[l * 2 + n2 + 1] * local258[l * 2]; + } + for (l = 0; l < n4; l++) { + vector[n + l - n4] = -vector[l]; + } + for (l = 0; l < n4; l++) { + vector[l] = vector[n4 + l]; + } + for (l = 0; l < n4; l++) { + vector[n4 + l] = -vector[n4 - l - 1]; + } + for (l = 0; l < n4; l++) { + vector[n2 + l] = vector[n - l - 1]; + } + for (l = leftWindowStart; l < leftWindowEnd; l++) { + b = (float) Math.sin(((double) (l - leftWindowStart) + 0.5D) / (double) leftN * 0.5D * 3.141592653589793D); + VorbisSound.vector[l] *= (float) Math.sin((double) b * 1.5707963267948966D * (double) b); + } + for (l = rightWindowStart; l < rightWindowEnd; l++) { + b = (float) Math.sin(((double) (l - rightWindowStart) + 0.5D) / (double) rightN * 0.5D * 3.141592653589793D + 1.5707963267948966D); + VorbisSound.vector[l] *= (float) Math.sin((double) b * 1.5707963267948966D * (double) b); + } + } + @Pc(1228) float[] local1228 = null; + if (this.prevN > 0) { + floorNumber2 = this.prevN + n >> 2; + local1228 = new float[floorNumber2]; + @Pc(1257) int local1257; + if (!this.prevNoResidue) { + for (local212 = 0; local212 < this.prevQuarter; local212++) { + local1257 = (this.prevN >> 1) + local212; + local1228[local212] += this.prevVector[local1257]; + } + } + if (!noResidue) { + for (local212 = leftWindowStart; local212 < n >> 1; local212++) { + local1257 = local1228.length + local212 - (n >> 1); + local1228[local1257] += vector[local212]; + } + } + } + @Pc(1301) float[] local1301 = this.prevVector; + this.prevVector = vector; + vector = local1301; + this.prevN = n; + this.prevQuarter = rightWindowEnd - (n >> 1); + this.prevNoResidue = noResidue; + return local1228; + } +} diff --git a/client/src/main/java/rt4/Wall.java b/client/src/main/java/rt4/Wall.java new file mode 100644 index 0000000..22456d9 --- /dev/null +++ b/client/src/main/java/rt4/Wall.java @@ -0,0 +1,32 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!jh") +public final class Wall { + + @OriginalMember(owner = "client!jh", name = "a", descriptor = "I") + public int zFine; + + @OriginalMember(owner = "client!jh", name = "e", descriptor = "Lclient!th;") + public Entity primary; + + @OriginalMember(owner = "client!jh", name = "h", descriptor = "Lclient!th;") + public Entity secondary; + + @OriginalMember(owner = "client!jh", name = "k", descriptor = "I") + public int xFine; + + @OriginalMember(owner = "client!jh", name = "l", descriptor = "I") + public int anInt3049; + + @OriginalMember(owner = "client!jh", name = "o", descriptor = "I") + public int anInt3051; + + @OriginalMember(owner = "client!jh", name = "q", descriptor = "I") + public int anInt3052; + + @OriginalMember(owner = "client!jh", name = "d", descriptor = "J") + public long key = 0L; +} diff --git a/client/src/main/java/rt4/WallDecor.java b/client/src/main/java/rt4/WallDecor.java new file mode 100644 index 0000000..06e98ba --- /dev/null +++ b/client/src/main/java/rt4/WallDecor.java @@ -0,0 +1,38 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!df") +public final class WallDecor { + + @OriginalMember(owner = "client!df", name = "a", descriptor = "I") + public int anInt1388; + + @OriginalMember(owner = "client!df", name = "d", descriptor = "Lclient!th;") + public Entity secondary; + + @OriginalMember(owner = "client!df", name = "e", descriptor = "I") + public int xFine; + + @OriginalMember(owner = "client!df", name = "f", descriptor = "I") + public int anInt1391; + + @OriginalMember(owner = "client!df", name = "g", descriptor = "I") + public int zOffset; + + @OriginalMember(owner = "client!df", name = "h", descriptor = "I") + public int zFine; + + @OriginalMember(owner = "client!df", name = "j", descriptor = "Lclient!th;") + public Entity primary; + + @OriginalMember(owner = "client!df", name = "k", descriptor = "I") + public int xOffset; + + @OriginalMember(owner = "client!df", name = "m", descriptor = "I") + public int anInt1395; + + @OriginalMember(owner = "client!df", name = "i", descriptor = "J") + public long key = 0L; +} diff --git a/client/src/main/java/rt4/WaterMaterialRenderer.java b/client/src/main/java/rt4/WaterMaterialRenderer.java new file mode 100644 index 0000000..b0cc2ae --- /dev/null +++ b/client/src/main/java/rt4/WaterMaterialRenderer.java @@ -0,0 +1,202 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import com.jogamp.opengl.GL2GL3; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.nio.ByteBuffer; + +@OriginalClass("client!pd") +public final class WaterMaterialRenderer implements MaterialRenderer { + + @OriginalMember(owner = "client!v", name = "c", descriptor = "[F") + public static final float[] aFloatArray2 = new float[]{0.073F, 0.169F, 0.24F, 1.0F}; + @OriginalMember(owner = "client!pd", name = "b", descriptor = "[F") + public static final float[] aFloatArray22 = new float[]{0.1F, 0.1F, 0.15F, 0.1F}; + @OriginalMember(owner = "client!pd", name = "a", descriptor = "I") + private int anInt4440 = -1; + + @OriginalMember(owner = "client!pd", name = "c", descriptor = "[F") + private final float[] aFloatArray23 = new float[4]; + + @OriginalMember(owner = "client!pd", name = "d", descriptor = "I") + private int anInt4441 = -1; + + @OriginalMember(owner = "client!pd", name = "e", descriptor = "I") + private int anInt4442 = -1; + + @OriginalMember(owner = "client!pd", name = "", descriptor = "()V") + public WaterMaterialRenderer() { + this.method3435(); + this.method3437(); + } + + @OriginalMember(owner = "client!jj", name = "a", descriptor = "(B)[F") + public static float[] method2422() { + @Pc(3) float local3 = FogManager.getLightingModelAmbient() + FogManager.getLight0Diffuse(); + @Pc(9) int local9 = FogManager.getLightColor(); + @Pc(18) float local18 = (float) (local9 >> 16 & 0xFF) / 255.0F; + ColorUtils.aFloatArray28[3] = 1.0F; + @Pc(37) float local37 = (float) (local9 >> 8 & 0xFF) / 255.0F; + @Pc(39) float local39 = 0.58823526F; + @Pc(46) float local46 = (float) (local9 & 0xFF) / 255.0F; + ColorUtils.aFloatArray28[2] = aFloatArray2[2] * local46 * local39 * local3; + ColorUtils.aFloatArray28[0] = aFloatArray2[0] * local18 * local39 * local3; + ColorUtils.aFloatArray28[1] = local3 * local39 * local37 * aFloatArray2[1]; + return ColorUtils.aFloatArray28; + } + + @OriginalMember(owner = "client!bk", name = "a", descriptor = "(BI)V") + public static void method619(@OriginalArg(1) int color) { + aFloatArray2[0] = (float) (color >> 16 & 0xFF) / 255.0F; + aFloatArray2[1] = (float) (color >> 8 & 0xFF) / 255.0F; + aFloatArray2[2] = (float) (color & 0xFF) / 255.0F; + MaterialManager.resetArgument(3); + MaterialManager.resetArgument(4); + } + + @OriginalMember(owner = "client!pd", name = "d", descriptor = "()V") + private void method3435() { + @Pc(2) byte[] local2 = new byte[]{0, -1}; + @Pc(12) GL2 gl = GlRenderer.gl; + @Pc(15) int[] local15 = new int[1]; + gl.glGenTextures(1, local15, 0); + gl.glBindTexture(GL2.GL_TEXTURE_1D, local15[0]); + gl.glTexImage1D(GL2.GL_TEXTURE_1D, 0, GL2.GL_ALPHA, 2, 0, GL2.GL_ALPHA, GL2.GL_UNSIGNED_BYTE, ByteBuffer.wrap(local2)); + gl.glTexParameteri(GL2.GL_TEXTURE_1D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_1D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); + gl.glTexParameteri(GL2.GL_TEXTURE_1D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_CLAMP_TO_EDGE); + this.anInt4441 = local15[0]; + } + + @OriginalMember(owner = "client!pd", name = "f", descriptor = "()V") + private void method3437() { + @Pc(1) GL2 gl = GlRenderer.gl; + this.anInt4440 = gl.glGenLists(2); + gl.glNewList(this.anInt4440, GL2.GL_COMPILE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_OPERAND0_RGB, GL2.GL_SRC_COLOR); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC1_RGB, GL2.GL_CONSTANT); + gl.glTexEnvf(GL2.GL_TEXTURE_ENV, GL2.GL_RGB_SCALE, 2.0F); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2GL3.GL_SRC1_ALPHA, GL2.GL_CONSTANT); + gl.glTexGeni(GL2.GL_S, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_OBJECT_LINEAR); + gl.glTexGeni(GL2.GL_T, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_OBJECT_LINEAR); + gl.glTexGenfv(GL2.GL_S, GL2.GL_OBJECT_PLANE, new float[]{9.765625E-4F, 0.0F, 0.0F, 0.0F}, 0); + gl.glTexGenfv(GL2.GL_T, GL2.GL_OBJECT_PLANE, new float[]{0.0F, 0.0F, 9.765625E-4F, 0.0F}, 0); + gl.glEnable(GL2.GL_TEXTURE_GEN_S); + gl.glEnable(GL2.GL_TEXTURE_GEN_T); + if (MaterialManager.allows3DTextureMapping) { + gl.glBindTexture(GL2.GL_TEXTURE_3D, MaterialManager.texture3D); + gl.glTexGeni(GL2.GL_R, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_OBJECT_LINEAR); + gl.glTexGeni(GL2.GL_Q, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_OBJECT_LINEAR); + gl.glTexGenfv(GL2.GL_Q, GL2.GL_OBJECT_PLANE, new float[]{0.0F, 0.0F, 0.0F, 1.0F}, 0); + gl.glEnable(GL2.GL_TEXTURE_GEN_R); + gl.glEnable(GL2.GL_TEXTURE_GEN_Q); + gl.glEnable(GL2.GL_TEXTURE_3D); + } + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glEnable(GL2.GL_TEXTURE_1D); + gl.glBindTexture(GL2.GL_TEXTURE_1D, this.anInt4441); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_INTERPOLATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_CONSTANT); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC2_RGB, GL2.GL_TEXTURE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_INTERPOLATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_CONSTANT); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC2_ALPHA, GL2.GL_TEXTURE); + gl.glEnable(GL2.GL_TEXTURE_GEN_S); + gl.glTexGeni(GL2.GL_S, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_EYE_LINEAR); + gl.glPushMatrix(); + gl.glLoadIdentity(); + gl.glEndList(); + gl.glNewList(this.anInt4440 + 1, GL2.GL_COMPILE); + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glDisable(GL2.GL_TEXTURE_1D); + gl.glDisable(GL2.GL_TEXTURE_GEN_S); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_TEXTURE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC2_RGB, GL2.GL_CONSTANT); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_TEXTURE); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC2_ALPHA, GL2.GL_CONSTANT); + gl.glActiveTexture(GL2.GL_TEXTURE0); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_OPERAND0_RGB, GL2.GL_SRC_COLOR); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC1_RGB, GL2.GL_PREVIOUS); + gl.glTexEnvf(GL2.GL_TEXTURE_ENV, GL2.GL_RGB_SCALE, 1.0F); + gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2GL3.GL_SRC1_ALPHA, GL2.GL_PREVIOUS); + gl.glDisable(GL2.GL_TEXTURE_GEN_S); + gl.glDisable(GL2.GL_TEXTURE_GEN_T); + if (MaterialManager.allows3DTextureMapping) { + gl.glDisable(GL2.GL_TEXTURE_GEN_R); + gl.glDisable(GL2.GL_TEXTURE_GEN_Q); + gl.glDisable(GL2.GL_TEXTURE_3D); + } + gl.glEndList(); + } + + @OriginalMember(owner = "client!pd", name = "a", descriptor = "()V") + @Override + public final void unbind() { + GlRenderer.gl.glCallList(this.anInt4440 + 1); + } + + @OriginalMember(owner = "client!pd", name = "a", descriptor = "(I)V") + @Override + public final void setArgument(@OriginalArg(0) int arg0) { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glTexEnvfv(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_COLOR, aFloatArray2, 0); + gl.glActiveTexture(GL2.GL_TEXTURE0); + if ((arg0 & 0x1) == 1) { + if (!MaterialManager.allows3DTextureMapping) { + GlRenderer.setTextureId(MaterialManager.anIntArray341[GlRenderer.anInt5323 * 64 / 100 % 64]); + } else if (this.anInt4442 != GlRenderer.anInt5323) { + this.aFloatArray23[0] = 0.0F; + this.aFloatArray23[1] = 0.0F; + this.aFloatArray23[2] = 0.0F; + this.aFloatArray23[3] = (float) GlRenderer.anInt5323 * 0.005F; + gl.glTexGenfv(GL2.GL_R, GL2.GL_OBJECT_PLANE, this.aFloatArray23, 0); + this.anInt4442 = GlRenderer.anInt5323; + } + } else if (MaterialManager.allows3DTextureMapping) { + this.aFloatArray23[0] = 0.0F; + this.aFloatArray23[1] = 0.0F; + this.aFloatArray23[2] = 0.0F; + this.aFloatArray23[3] = 0.0F; + gl.glTexGenfv(GL2.GL_R, GL2.GL_OBJECT_PLANE, this.aFloatArray23, 0); + } else { + GlRenderer.setTextureId(MaterialManager.anIntArray341[0]); + } + } + + @OriginalMember(owner = "client!pd", name = "b", descriptor = "()V") + @Override + public final void bind() { + @Pc(1) GL2 gl = GlRenderer.gl; + GlRenderer.setTextureCombineRgbMode(2); + GlRenderer.setTextureCombineAlphaMode(2); + GlRenderer.resetTextureMatrix(); + gl.glCallList(this.anInt4440); + @Pc(12) float local12 = 2662.4001F; + local12 += (float) (MaterialManager.anInt5559 - 128) * 0.5F; + float max = (float) GlobalConfig.VIEW_DISTANCE - GlobalConfig.VIEW_FADE_DISTANCE; + if (local12 >= max) { + local12 = max - 1.0f; + } + this.aFloatArray23[0] = 0.0F; + this.aFloatArray23[1] = 0.0F; + this.aFloatArray23[2] = 1.0F / (local12 - max); + this.aFloatArray23[3] = local12 / (local12 - max); + gl.glTexGenfv(GL2.GL_S, GL2.GL_EYE_PLANE, this.aFloatArray23, 0); + gl.glPopMatrix(); + gl.glActiveTexture(GL2.GL_TEXTURE0); + gl.glTexEnvfv(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_COLOR, aFloatArray22, 0); + } + + @OriginalMember(owner = "client!pd", name = "c", descriptor = "()I") + @Override + public final int getFlags() { + return 15; + } +} diff --git a/client/src/main/java/rt4/WaterfallMaterialRenderer.java b/client/src/main/java/rt4/WaterfallMaterialRenderer.java new file mode 100644 index 0000000..215450b --- /dev/null +++ b/client/src/main/java/rt4/WaterfallMaterialRenderer.java @@ -0,0 +1,123 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("client!ob") +public final class WaterfallMaterialRenderer implements MaterialRenderer { + + @OriginalMember(owner = "client!ob", name = "g", descriptor = "I") + private int anInt4236; + + @OriginalMember(owner = "client!ob", name = "n", descriptor = "[F") + private final float[] aFloatArray21 = new float[4]; + + @OriginalMember(owner = "client!ob", name = "", descriptor = "()V") + public WaterfallMaterialRenderer() { + this.method3307(); + } + + @OriginalMember(owner = "client!ob", name = "c", descriptor = "()I") + @Override + public final int getFlags() { + return 0; + } + + @OriginalMember(owner = "client!ob", name = "a", descriptor = "(I)V") + @Override + public final void setArgument(@OriginalArg(0) int arg0) { + @Pc(7) GL2 gl = GlRenderer.gl; + @Pc(18) float local18 = (float) ((arg0 >> 3 & 0x3) + 1) * 0.01F; + @Pc(27) float local27 = -0.01F * (float) ((arg0 & 0x3) + 1); + @Pc(36) float local36 = (arg0 & 0x40) == 0 ? 4.8828125E-4F : 9.765625E-4F; + @Pc(47) boolean local47 = (arg0 & 0x80) != 0; + if (local47) { + this.aFloatArray21[0] = local36; + this.aFloatArray21[1] = 0.0F; + this.aFloatArray21[2] = 0.0F; + this.aFloatArray21[3] = 0.0F; + } else { + this.aFloatArray21[2] = local36; + this.aFloatArray21[1] = 0.0F; + this.aFloatArray21[3] = 0.0F; + this.aFloatArray21[0] = 0.0F; + } + gl.glActiveTexture(GL2.GL_TEXTURE1); + gl.glMatrixMode(GL2.GL_MODELVIEW); + gl.glPushMatrix(); + gl.glLoadIdentity(); + gl.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + gl.glRotatef((float) MaterialManager.anInt5559 * 360.0F / 2048.0F, 1.0F, 0.0F, 0.0F); + gl.glRotatef((float) MaterialManager.anInt1815 * 360.0F / 2048.0F, 0.0F, 1.0F, 0.0F); + gl.glTranslatef((float) -MaterialManager.anInt406, (float) -MaterialManager.anInt4675, (float) -MaterialManager.anInt5158); + gl.glTexGenfv(GL2.GL_S, GL2.GL_EYE_PLANE, this.aFloatArray21, 0); + this.aFloatArray21[3] = local27 * (float) GlRenderer.anInt5323; + this.aFloatArray21[0] = 0.0F; + this.aFloatArray21[2] = 0.0F; + this.aFloatArray21[1] = local36; + gl.glTexGenfv(GL2.GL_T, GL2.GL_EYE_PLANE, this.aFloatArray21, 0); + gl.glPopMatrix(); + if (MaterialManager.allows3DTextureMapping) { + this.aFloatArray21[3] = (float) GlRenderer.anInt5323 * local18; + this.aFloatArray21[1] = 0.0F; + this.aFloatArray21[0] = 0.0F; + this.aFloatArray21[2] = 0.0F; + gl.glTexGenfv(GL2.GL_R, GL2.GL_OBJECT_PLANE, this.aFloatArray21, 0); + } else { + @Pc(189) int local189 = (int) ((float) GlRenderer.anInt5323 * local18 * 64.0F); + gl.glBindTexture(GL2.GL_TEXTURE_2D, MaterialManager.waterfallTextures[local189 % 64]); + } + gl.glActiveTexture(GL2.GL_TEXTURE0); + } + + @OriginalMember(owner = "client!ob", name = "a", descriptor = "()V") + @Override + public final void unbind() { + @Pc(1) GL2 gl = GlRenderer.gl; + gl.glCallList(this.anInt4236 + 1); + } + + @OriginalMember(owner = "client!ob", name = "b", descriptor = "()V") + @Override + public final void bind() { + @Pc(5) GL2 gl = GlRenderer.gl; + gl.glCallList(this.anInt4236); + } + + @OriginalMember(owner = "client!ob", name = "b", descriptor = "(I)V") + private void method3307() { + @Pc(3) GL2 gl = GlRenderer.gl; + this.anInt4236 = gl.glGenLists(2); + gl.glNewList(this.anInt4236, GL2.GL_COMPILE); + gl.glActiveTexture(GL2.GL_TEXTURE1); + if (MaterialManager.allows3DTextureMapping) { + gl.glBindTexture(GL2.GL_TEXTURE_3D, MaterialManager.waterfallTextureId); + gl.glTexGeni(GL2.GL_R, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_OBJECT_LINEAR); + gl.glEnable(GL2.GL_TEXTURE_GEN_R); + gl.glEnable(GL2.GL_TEXTURE_3D); + } else { + gl.glEnable(GL2.GL_TEXTURE_2D); + } + gl.glTexGeni(GL2.GL_S, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_EYE_LINEAR); + gl.glTexGeni(GL2.GL_T, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_EYE_LINEAR); + gl.glEnable(GL2.GL_TEXTURE_GEN_S); + gl.glEnable(GL2.GL_TEXTURE_GEN_T); + gl.glActiveTexture(GL2.GL_TEXTURE0); + gl.glEndList(); + gl.glNewList(this.anInt4236 + 1, GL2.GL_COMPILE); + gl.glActiveTexture(GL2.GL_TEXTURE1); + if (MaterialManager.allows3DTextureMapping) { + gl.glDisable(GL2.GL_TEXTURE_3D); + gl.glDisable(GL2.GL_TEXTURE_GEN_R); + } else { + gl.glDisable(GL2.GL_TEXTURE_2D); + } + gl.glDisable(GL2.GL_TEXTURE_GEN_S); + gl.glDisable(GL2.GL_TEXTURE_GEN_T); + gl.glActiveTexture(GL2.GL_TEXTURE0); + gl.glEndList(); + } +} diff --git a/client/src/main/java/rt4/WordPack.java b/client/src/main/java/rt4/WordPack.java new file mode 100644 index 0000000..96bba04 --- /dev/null +++ b/client/src/main/java/rt4/WordPack.java @@ -0,0 +1,26 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +public class WordPack { + @OriginalMember(owner = "client!vl", name = "f", descriptor = "Lclient!na;") + public static final JagString CABBAGE = JagString.parse("Cabbage"); + @OriginalMember(owner = "client!f", name = "W", descriptor = "Lclient!fi;") + public static HuffmanCodec codec; + + @OriginalMember(owner = "client!a", name = "a", descriptor = "(Lclient!fi;I)V") + public static void init(@OriginalArg(0) HuffmanCodec arg0) { + codec = arg0; + } + + @OriginalMember(owner = "client!lg", name = "a", descriptor = "(ZLclient!wa;Lclient!na;)I") + public static int encode(@OriginalArg(1) Buffer arg0, @OriginalArg(2) JagString arg1) { + @Pc(6) int local6 = arg0.offset; + @Pc(14) byte[] local14 = arg1.method3148(); + arg0.psmarts(local14.length); + arg0.offset += codec.encode(local14.length, arg0.data, local14, 0, arg0.offset); + return arg0.offset - local6; + } +} diff --git a/client/src/main/java/rt4/World.java b/client/src/main/java/rt4/World.java new file mode 100644 index 0000000..64e9b9f --- /dev/null +++ b/client/src/main/java/rt4/World.java @@ -0,0 +1,22 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!ba") +public final class World extends AbstractWorld { + + @OriginalMember(owner = "client!ba", name = "t", descriptor = "Lclient!na;") + public JagString activity; + + @OriginalMember(owner = "client!ba", name = "u", descriptor = "I") + public int id; + + @OriginalMember(owner = "client!ba", name = "A", descriptor = "Lclient!na;") + public JagString hostname; + + @OriginalMember(owner = "client!ba", name = "g", descriptor = "(I)Lclient!ee;") + public final WorldInfo getWorldInfo() { + return WorldList.countries[this.country]; + } +} diff --git a/client/src/main/java/rt4/WorldInfo.java b/client/src/main/java/rt4/WorldInfo.java new file mode 100644 index 0000000..024d232 --- /dev/null +++ b/client/src/main/java/rt4/WorldInfo.java @@ -0,0 +1,14 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("client!ee") +public final class WorldInfo { + + @OriginalMember(owner = "client!ee", name = "h", descriptor = "I") + public int flag; + + @OriginalMember(owner = "client!ee", name = "i", descriptor = "Lclient!na;") + public JagString name; +} diff --git a/client/src/main/java/rt4/WorldList.java b/client/src/main/java/rt4/WorldList.java new file mode 100644 index 0000000..acce237 --- /dev/null +++ b/client/src/main/java/rt4/WorldList.java @@ -0,0 +1,377 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.io.IOException; +import java.net.Socket; + +public class WorldList { + @OriginalMember(owner = "client!nd", name = "x", descriptor = "Lclient!na;") + public static final JagString aClass100_783 = JagString.parse(")4p="); + @OriginalMember(owner = "client!ja", name = "s", descriptor = "Lclient!na;") + public static final JagString HTTP_PROTOCOL = JagString.parse("http:)4)4"); + @OriginalMember(owner = "client!wk", name = "x", descriptor = "Lclient!na;") + public static final JagString aClass100_1107 = JagString.parse(")4l="); + @OriginalMember(owner = "client!rc", name = "G", descriptor = "Lclient!na;") + public static final JagString aClass100_230 = JagString.parse(""); + @OriginalMember(owner = "client!ob", name = "o", descriptor = "Lclient!na;") + public static final JagString aClass100_801 = JagString.parse(")4a="); + @OriginalMember(owner = "client!l", name = "d", descriptor = "Lclient!na;") + public static final JagString aClass100_659 = JagString.parse(")4j"); + @OriginalMember(owner = "client!cg", name = "e", descriptor = "Lclient!na;") + public static final JagString aClass100_184 = JagString.parse("1"); + @OriginalMember(owner = "client!vd", name = "F", descriptor = "Lclient!na;") + public static final JagString aClass100_945 = JagString.parse("0"); + @OriginalMember(owner = "client!em", name = "u", descriptor = "Lclient!na;") + public static final JagString aClass100_420 = JagString.parse(")1o"); + @OriginalMember(owner = "client!q", name = "a", descriptor = "Lclient!na;") + public static final JagString aClass100_260 = JagString.parse(")1a2)1m"); + @OriginalMember(owner = "client!ch", name = "x", descriptor = "Lclient!na;") + public static final JagString aClass100_193 = JagString.parse(":"); + @OriginalMember(owner = "client!ii", name = "e", descriptor = "Lclient!na;") + public static final JagString aClass100_570 = JagString.parse(")2"); + @OriginalMember(owner = "client!gi", name = "c", descriptor = "I") + public static int step = 0; + @OriginalMember(owner = "client!be", name = "kc", descriptor = "J") + public static long openTime = 0L; + @OriginalMember(owner = "client!sk", name = "gb", descriptor = "J") + public static long closeTime = 0L; + @OriginalMember(owner = "client!en", name = "A", descriptor = "Z") + public static boolean loaded = false; + @OriginalMember(owner = "client!jb", name = "y", descriptor = "I") + public static int bufferLen = 0; + @OriginalMember(owner = "client!si", name = "cb", descriptor = "[B") + public static byte[] buffer; + @OriginalMember(owner = "client!lb", name = "u", descriptor = "I") + public static int bufferOff = 0; + @OriginalMember(owner = "client!hm", name = "fb", descriptor = "[Lclient!ba;") + public static World[] sorted = new World[0]; + @OriginalMember(owner = "client!ic", name = "n", descriptor = "I") + public static int size; + @OriginalMember(owner = "client!gf", name = "T", descriptor = "I") + public static int checksum; + @OriginalMember(owner = "client!qh", name = "e", descriptor = "[Lclient!ee;") + public static WorldInfo[] countries; + @OriginalMember(owner = "client!bi", name = "R", descriptor = "I") + public static int minId; + @OriginalMember(owner = "client!ni", name = "q", descriptor = "I") + public static int maxId; + @OriginalMember(owner = "client!pl", name = "a", descriptor = "[Lclient!ba;") + public static World[] worlds; + @OriginalMember(owner = "client!k", name = "t", descriptor = "I") + public static int errors = 0; + @OriginalMember(owner = "client!ea", name = "w", descriptor = "I") + public static int worldPos = 1; + + @OriginalMember(owner = "client!ql", name = "b", descriptor = "(I)I") + public static int fetch() { + try { + if (step == 0) { + if (MonotonicClock.currentTimeMillis() - 5000L < closeTime) { + return 0; + } + if (GlobalJsonConfig.instance != null) { + client.worldListHostname = GlobalJsonConfig.instance.ip_management; + client.worldListPort = GlobalJsonConfig.instance.wl_port; + } + Protocol.socketRequest = GameShell.signLink.openSocket(client.worldListHostname, client.worldListPort); + openTime = MonotonicClock.currentTimeMillis(); + step = 1; + } + if (openTime + 30000L < MonotonicClock.currentTimeMillis()) { + return close(1000); + } + @Pc(82) int local82; + @Pc(124) int local124; + if (step == 1) { + if (Protocol.socketRequest.status == 2) { + return close(1001); + } + if (Protocol.socketRequest.status != 1) { + return -1; + } + Protocol.socket = new BufferedSocket((Socket) Protocol.socketRequest.result, GameShell.signLink); + Protocol.outboundBuffer.offset = 0; + Protocol.socketRequest = null; + local82 = 0; + if (loaded) { + local82 = checksum; + } + Protocol.outboundBuffer.p1(255); + Protocol.outboundBuffer.p4(local82); + Protocol.socket.write(Protocol.outboundBuffer.data, Protocol.outboundBuffer.offset); + if (client.musicChannel != null) { + client.musicChannel.method3571(); + } + if (client.soundChannel != null) { + client.soundChannel.method3571(); + } + local124 = Protocol.socket.read(); + if (client.musicChannel != null) { + client.musicChannel.method3571(); + } + if (client.soundChannel != null) { + client.soundChannel.method3571(); + } + if (local124 != 0) { + return close(local124); + } + step = 2; + } + if (step == 2) { + if (Protocol.socket.available() < 2) { + return -1; + } + bufferLen = Protocol.socket.read(); + bufferLen <<= 0x8; + bufferLen += Protocol.socket.read(); + step = 3; + bufferOff = 0; + buffer = new byte[bufferLen]; + } + if (step != 3) { + return -1; + } + local82 = Protocol.socket.available(); + if (local82 < 1) { + return -1; + } + if (local82 > bufferLen - bufferOff) { + local82 = bufferLen - bufferOff; + } + Protocol.socket.read(bufferOff, local82, buffer); + bufferOff += local82; + if (bufferOff < bufferLen) { + return -1; + } else if (decode(buffer)) { + sorted = new World[size]; + local124 = 0; + for (@Pc(240) int local240 = minId; local240 <= maxId; local240++) { + @Pc(247) World local247 = ScriptRunner.getWorld(local240); + if (local247 != null) { + sorted[local124++] = local247; + } + } + Protocol.socket.close(); + Protocol.socket = null; + errors = 0; + step = 0; + buffer = null; + closeTime = MonotonicClock.currentTimeMillis(); + return 0; + } else { + return close(1002); + } + } catch (@Pc(277) IOException local277) { + return close(1003); + } + } + + @OriginalMember(owner = "client!an", name = "a", descriptor = "(BI)I") + public static int close(@OriginalArg(1) int arg0) { + if (Protocol.socket != null) { + Protocol.socket.close(); + Protocol.socket = null; + } + errors++; + if (errors > 4) { + step = 0; + errors = 0; + return arg0; + } + step = 0; + if (client.worldListPort == client.worldListDefaultPort) { + client.worldListPort = client.worldListAlternatePort; + } else { + client.worldListPort = client.worldListDefaultPort; + } + return -1; + } + + @OriginalMember(owner = "client!hi", name = "a", descriptor = "(Lclient!wa;I)V") + public static void decodeWorlds(@OriginalArg(0) Buffer buffer) { + @Pc(9) int countryCount = buffer.gsmarts(); + countries = new WorldInfo[countryCount]; + @Pc(14) int i; + for (i = 0; i < countryCount; i++) { + countries[i] = new WorldInfo(); + countries[i].flag = buffer.gsmarts(); + countries[i].name = buffer.gjstr2(); + } + minId = buffer.gsmarts(); + maxId = buffer.gsmarts(); + size = buffer.gsmarts(); + worlds = new World[maxId + 1 - minId]; + for (i = 0; i < size; i++) { + @Pc(77) int offset = buffer.gsmarts(); + @Pc(85) World world = worlds[offset] = new World(); + world.country = buffer.g1(); + world.flags = buffer.g4(); + world.id = offset + minId; + world.activity = buffer.gjstr2(); + world.hostname = buffer.gjstr2(); + } + checksum = buffer.g4(); + loaded = true; + } + + @OriginalMember(owner = "client!nh", name = "a", descriptor = "(I[B)Z") + public static boolean decode(@OriginalArg(1) byte[] arg0) { + @Pc(13) Buffer local13 = new Buffer(arg0); + @Pc(17) int local17 = local13.g1(); + if (local17 != 1) { + return false; + } + @Pc(33) boolean local33 = local13.g1() == 1; + if (local33) { + decodeWorlds(local13); + } + decodePlayers(local13); + return true; + } + + @OriginalMember(owner = "client!fh", name = "a", descriptor = "(Lclient!wa;I)V") + public static void decodePlayers(@OriginalArg(0) Buffer arg0) { + for (@Pc(7) int local7 = 0; local7 < size; local7++) { + @Pc(18) int local18 = arg0.gsmarts(); + @Pc(22) int local22 = arg0.g2(); + if (local22 == 65535) { + local22 = -1; + } + if (worlds[local18] != null) { + worlds[local18].players = local22; + } + } + } + + @OriginalMember(owner = "client!h", name = "a", descriptor = "(I)Lclient!ba;") + public static World getNextWorld() { + return sorted.length > worldPos ? sorted[worldPos++] : null; + } + + @OriginalMember(owner = "client!sh", name = "a", descriptor = "(IZBIZ)V") + public static void sortWorldList(@OriginalArg(0) int arg0, @OriginalArg(1) boolean arg1, @OriginalArg(3) int arg2, @OriginalArg(4) boolean arg3) { + method1697(arg0, arg2, sorted.length - 1, arg3, 0, arg1); + } + + @OriginalMember(owner = "client!ge", name = "a", descriptor = "(IIIZIZZ)V") + public static void method1697(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) boolean arg3, @OriginalArg(4) int arg4, @OriginalArg(5) boolean arg5) { + if (arg2 <= arg4) { + return; + } + @Pc(13) int local13 = (arg2 + arg4) / 2; + @Pc(15) int local15 = arg4; + @Pc(19) World local19 = sorted[local13]; + sorted[local13] = sorted[arg2]; + sorted[arg2] = local19; + for (@Pc(31) int local31 = arg4; local31 < arg2; local31++) { + if (method3115(local19, sorted[local31], arg0, arg1, arg3, arg5) <= 0) { + @Pc(53) World local53 = sorted[local31]; + sorted[local31] = sorted[local15]; + sorted[local15++] = local53; + } + } + sorted[arg2] = sorted[local15]; + sorted[local15] = local19; + method1697(arg0, arg1, local15 - 1, arg3, arg4, arg5); + method1697(arg0, arg1, arg2, arg3, local15 + 1, arg5); + } + + @OriginalMember(owner = "client!bh", name = "a", descriptor = "(B)Lclient!ba;") + public static World getFirstWorld() { + worldPos = 0; + return getNextWorld(); + } + + @OriginalMember(owner = "client!ob", name = "a", descriptor = "(IB)Z") + public static boolean hopWorld(@OriginalArg(0) int arg0) { + @Pc(3) World local3 = ScriptRunner.getWorld(arg0); + if (local3 == null) { + return false; + } else if (SignLink.anInt5928 == 1 || SignLink.anInt5928 == 2 || client.modeWhere == 2) { + @Pc(31) byte[] local31 = local3.hostname.method3148(); + client.hostname = new String(local31, 0, local31.length); + Player.worldId = local3.id; + if (client.modeWhere != 0) { + client.defaultPort = Player.worldId + 43594; // 40000; + client.port = client.defaultPort; + client.alternatePort = Player.worldId + 43594; // 50000; + } + return true; + } else { + @Pc(62) JagString local62 = aClass100_230; + if (client.modeWhere != 0) { + local62 = JagString.concatenate(new JagString[]{aClass100_193, JagString.parseInt(local3.id + 7000)}); + } + @Pc(89) JagString local89 = aClass100_230; + if (client.settings != null) { + local89 = JagString.concatenate(new JagString[]{aClass100_783, client.settings}); + } + @Pc(182) JagString local182 = JagString.concatenate(new JagString[]{HTTP_PROTOCOL, local3.hostname, local62, aClass100_1107, JagString.parseInt(client.language), aClass100_801, JagString.parseInt(client.affiliate), local89, aClass100_659, client.objectTag ? aClass100_184 : aClass100_945, aClass100_420, client.javaScript ? aClass100_184 : aClass100_945, aClass100_260, client.advertSuppressed ? aClass100_184 : aClass100_945}); + try { + client.instance.getAppletContext().showDocument(local182.method3107(), "_self"); + return true; + } catch (@Pc(191) Exception local191) { + return false; + } + } + } + + @OriginalMember(owner = "client!na", name = "a", descriptor = "(Lclient!ba;Lclient!ba;IIIZZ)I") + public static int method3115(@OriginalArg(0) World arg0, @OriginalArg(1) World arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) boolean arg4, @OriginalArg(6) boolean arg5) { + @Pc(8) int local8 = method4595(arg1, arg3, arg0, arg5); + if (local8 != 0) { + return arg5 ? -local8 : local8; + } else if (arg2 == -1) { + return 0; + } else { + @Pc(42) int local42 = method4595(arg1, arg2, arg0, arg4); + return arg4 ? -local42 : local42; + } + } + + @OriginalMember(owner = "client!wb", name = "a", descriptor = "(Lclient!ba;IILclient!ba;Z)I") + public static int method4595(@OriginalArg(0) World arg0, @OriginalArg(1) int arg1, @OriginalArg(3) World arg2, @OriginalArg(4) boolean arg3) { + if (arg1 == 1) { + @Pc(11) int local11 = arg0.players; + @Pc(14) int local14 = arg2.players; + if (!arg3) { + if (local14 == -1) { + local14 = 2001; + } + if (local11 == -1) { + local11 = 2001; + } + } + return local11 - local14; + } else if (arg1 == 2) { + return arg0.getWorldInfo().name.compare(arg2.getWorldInfo().name); + } else if (arg1 == 3) { + if (arg0.activity.strEquals(aClass100_570)) { + if (arg2.activity.strEquals(aClass100_570)) { + return 0; + } else if (arg3) { + return -1; + } else { + return 1; + } + } else if (arg2.activity.strEquals(aClass100_570)) { + return arg3 ? 1 : -1; + } else { + return arg0.activity.compare(arg2.activity); + } + } else if (arg1 == 4) { + return arg0.isLootShare() ? (arg2.isLootShare() ? 0 : 1) : arg2.isLootShare() ? -1 : 0; + } else if (arg1 == 5) { + return arg0.isQuickChat() ? (arg2.isQuickChat() ? 0 : 1) : (arg2.isQuickChat() ? -1 : 0); + } else if (arg1 == 6) { + return arg0.isPvp() ? (arg2.isPvp() ? 0 : 1) : (arg2.isPvp() ? -1 : 0); + } else if (arg1 == 7) { + return arg0.isMembers() ? (arg2.isMembers() ? 0 : 1) : (arg2.isMembers() ? -1 : 0); + } else { + return arg0.id - arg2.id; + } + } +} diff --git a/client/src/main/java/rt4/WorldMap.java b/client/src/main/java/rt4/WorldMap.java new file mode 100644 index 0000000..9698d9e --- /dev/null +++ b/client/src/main/java/rt4/WorldMap.java @@ -0,0 +1,1888 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; +import plugin.PluginRepository; + +public class WorldMap { + @OriginalMember(owner = "client!nc", name = "e", descriptor = "Lclient!na;") + public static final JagString UNDERLAY = JagString.parse("underlay"); + @OriginalMember(owner = "client!vj", name = "m", descriptor = "Lclient!na;") + public static final JagString LABELS = JagString.parse("_labels"); + @OriginalMember(owner = "client!ac", name = "m", descriptor = "Lclient!na;") + public static final JagString OVERLAY = JagString.parse("overlay"); + @OriginalMember(owner = "client!fm", name = "gb", descriptor = "Lclient!na;") + public static final JagString OVERLAY2 = JagString.parse("overlay2"); + @OriginalMember(owner = "client!df", name = "c", descriptor = "Lclient!na;") + public static final JagString LOC = JagString.parse("loc"); + @OriginalMember(owner = "client!vk", name = "h", descriptor = "I") + public static final int anInt5338 = (int) (Math.random() * 33.0D) - 16; + @OriginalMember(owner = "client!kd", name = "rb", descriptor = "I") + public static final int anInt3254 = (int) (Math.random() * 17.0D) - 8; + @OriginalMember(owner = "client!lf", name = "c", descriptor = "Lclient!ih;") + public static final LinkedList mapElements = new LinkedList(); + @OriginalMember(owner = "client!he", name = "db", descriptor = "Lclient!na;") + public static final JagString aClass100_517 = JagString.parse(""); + @OriginalMember(owner = "client!hm", name = "T", descriptor = "Lclient!na;") + public static final JagString aClass100_538 = JagString.parse(" "); + @OriginalMember(owner = "client!pm", name = "Y", descriptor = "Lclient!na;") + public static final JagString aClass100_872 = JagString.parse("
"); + @OriginalMember(owner = "client!nj", name = "h", descriptor = "Lclient!ih;") + public static final LinkedList aClass69_97 = new LinkedList(); + @OriginalMember(owner = "client!di", name = "q", descriptor = "[Lclient!na;") + public static final JagString[] aClass100Array53 = new JagString[5]; + @OriginalMember(owner = "client!wa", name = "ub", descriptor = "Lclient!bn;") + public static Map currentMap; + @OriginalMember(owner = "client!dc", name = "O", descriptor = "I") + public static int loadPercentage = 0; + @OriginalMember(owner = "client!gj", name = "r", descriptor = "F") + public static float zoom; + @OriginalMember(owner = "client!km", name = "uc", descriptor = "F") + public static float targetZoom; + @OriginalMember(owner = "client!mh", name = "S", descriptor = "I") + public static int originX; + @OriginalMember(owner = "client!aa", name = "j", descriptor = "I") + public static int originZ; + @OriginalMember(owner = "client!oi", name = "m", descriptor = "I") + public static int length; + @OriginalMember(owner = "client!dl", name = "e", descriptor = "I") + public static int width; + @OriginalMember(owner = "client!lf", name = "b", descriptor = "[I") + public static int[] overlayColors; + @OriginalMember(owner = "client!wb", name = "l", descriptor = "Lclient!fd;") + public static WorldMapFont font26; + @OriginalMember(owner = "client!mj", name = "n", descriptor = "Lclient!fd;") + public static WorldMapFont font30; + @OriginalMember(owner = "client!kc", name = "C", descriptor = "Lclient!fd;") + public static WorldMapFont font22; + @OriginalMember(owner = "client!qh", name = "d", descriptor = "Lclient!fd;") + public static WorldMapFont font19; + @OriginalMember(owner = "client!kc", name = "n", descriptor = "Lclient!fd;") + public static WorldMapFont font17; + @OriginalMember(owner = "client!nf", name = "d", descriptor = "Lclient!fd;") + public static WorldMapFont font14; + @OriginalMember(owner = "client!ma", name = "q", descriptor = "Lclient!fd;") + public static WorldMapFont font12; + @OriginalMember(owner = "client!we", name = "v", descriptor = "Lclient!fd;") + public static WorldMapFont font11; + @OriginalMember(owner = "client!bc", name = "W", descriptor = "I") + public static int anInt435; + @OriginalMember(owner = "client!rj", name = "P", descriptor = "I") + public static int anInt4901 = -1; + @OriginalMember(owner = "client!lc", name = "l", descriptor = "I") + public static int anInt3482 = -1; + @OriginalMember(owner = "client!cd", name = "u", descriptor = "I") + public static int anInt919; + @OriginalMember(owner = "client!qh", name = "a", descriptor = "Lclient!se;") + public static MapElementList labels; + @OriginalMember(owner = "client!ck", name = "J", descriptor = "[[[B") + public static byte[][][] aByteArrayArrayArray3; + @OriginalMember(owner = "client!fi", name = "m", descriptor = "[[[B") + public static byte[][][] aByteArrayArrayArray7; + @OriginalMember(owner = "client!hb", name = "v", descriptor = "[[[B") + public static byte[][][] aByteArrayArrayArray8; + @OriginalMember(owner = "client!si", name = "R", descriptor = "[[[B") + public static byte[][][] aByteArrayArrayArray12; + @OriginalMember(owner = "client!jl", name = "I", descriptor = "[[[B") + public static byte[][][] aByteArrayArrayArray10; + @OriginalMember(owner = "client!eh", name = "g", descriptor = "[[[I") + public static int[][][] scenery; + @OriginalMember(owner = "client!gj", name = "i", descriptor = "[[[I") + public static int[][][] underlayColors; + @OriginalMember(owner = "client!uc", name = "d", descriptor = "[[[I") + public static int[][][] anIntArrayArrayArray17; + @OriginalMember(owner = "client!bn", name = "N", descriptor = "Lclient!be;") + public static Component component; + @OriginalMember(owner = "client!mc", name = "Q", descriptor = "Lclient!na;") + public static JagString aClass100_724; + @OriginalMember(owner = "client!fi", name = "j", descriptor = "Lclient!qf;") + public static Sprite aClass3_Sub2_Sub1_2; + @OriginalMember(owner = "client!mc", name = "S", descriptor = "Lclient!mm;") + public static SoftwareSprite aClass3_Sub2_Sub1_Sub1_2; + @OriginalMember(owner = "client!ha", name = "o", descriptor = "I") + public static int anInt2387; + @OriginalMember(owner = "client!cm", name = "c", descriptor = "I") + public static int anInt1176; + @OriginalMember(owner = "client!sm", name = "m", descriptor = "I") + public static int anInt5212; + @OriginalMember(owner = "client!qf", name = "S", descriptor = "I") + public static int anInt1864; + @OriginalMember(owner = "client!al", name = "e", descriptor = "I") + public static int anInt172; + + @OriginalMember(owner = "client!pa", name = "d", descriptor = "(I)V") + public static void load() { + if (currentMap == null) { + return; + } + + if (loadPercentage < 10) { + if (!MapList.archive.isGroupReady(currentMap.group)) { + loadPercentage = client.js5Archive23.getPercentageComplete(currentMap.group) / 10; + return; + } + + client.method84(); + loadPercentage = 10; + } + + if (loadPercentage == 10) { + originX = currentMap.displayMinX >> 6 << 6; + originZ = currentMap.displayMaxX >> 6 << 6; + length = (currentMap.displayMinZ >> 6 << 6) + 64 - originZ; + width = (currentMap.displayMaxZ >> 6 << 6) + 64 - originX; + if (currentMap.defaultZoom == 37) { + zoom = 3.0F; + targetZoom = 3.0F; + } else if (currentMap.defaultZoom == 50) { + zoom = 4.0F; + targetZoom = 4.0F; + } else if (currentMap.defaultZoom == 75) { + zoom = 6.0F; + targetZoom = 6.0F; + } else if (currentMap.defaultZoom == 100) { + zoom = 8.0F; + targetZoom = 8.0F; + } else if (currentMap.defaultZoom == 200) { + zoom = 16.0F; + targetZoom = 16.0F; + } else { + zoom = 8.0F; + targetZoom = 8.0F; + } + + @Pc(144) int local144 = (PlayerList.self.xFine >> 7) + Camera.originX - originX; + @Pc(153) int local153 = local144 + (int) (Math.random() * 10.0D) - 5; + @Pc(168) int local168 = originZ + length - Camera.originZ - (PlayerList.self.zFine >> 7) - 1; + @Pc(177) int local177 = local168 + (int) (Math.random() * 10.0D) - 5; + if (local153 >= 0 && width > local153 && local177 >= 0 && local177 < length) { + anInt435 = local153; + anInt919 = local177; + } else { + anInt919 = originZ + length - currentMap.originZ * 64 - 1; + anInt435 = currentMap.originX * 64 - originX; + } + + method965(); + overlayColors = new int[FloTypeList.capacity + 1]; + @Pc(235) int length = WorldMap.length >> 6; + @Pc(239) int width = WorldMap.width >> 6; + aByteArrayArrayArray8 = new byte[width][length][]; + @Pc(249) int local249 = SceneGraph.anInt2293 >> 2 << 10; + aByteArrayArrayArray7 = new byte[width][length][]; + underlayColors = new int[width][length][]; + aByteArrayArrayArray3 = new byte[width][length][]; + anIntArrayArrayArray17 = new int[width][length][]; + aByteArrayArrayArray12 = new byte[width][length][]; + @Pc(273) int local273 = SceneGraph.anInt4272 >> 1; + aByteArrayArrayArray10 = new byte[width][length][]; + scenery = new int[width][length][]; + loadOverlayColors(local273, local249); + loadPercentage = 20; + } else if (loadPercentage == 20) { + readUnderlay(new Buffer(MapList.archive.fetchFile(UNDERLAY, currentMap.group))); + loadPercentage = 30; + ClientProt.ping(true); + GameShell.resetTimer(); + } else if (loadPercentage == 30) { + readOverlay(new Buffer(MapList.archive.fetchFile(OVERLAY, currentMap.group))); + loadPercentage = 40; + GameShell.resetTimer(); + } else if (loadPercentage == 40) { + readOverlay2(new Buffer(MapList.archive.fetchFile(OVERLAY2, currentMap.group))); + loadPercentage = 50; + GameShell.resetTimer(); + } else if (loadPercentage == 50) { + readLocs(new Buffer(MapList.archive.fetchFile(LOC, currentMap.group))); + loadPercentage = 60; + ClientProt.ping(true); + GameShell.resetTimer(); + } else if (loadPercentage == 60) { + if (MapList.archive.isGroupNameValid(JagString.concatenate(new JagString[]{currentMap.group, LABELS}))) { + if (!MapList.archive.isGroupReady(JagString.concatenate(new JagString[]{currentMap.group, LABELS}))) { + return; + } + labels = MapElementList.create(JagString.concatenate(new JagString[]{currentMap.group, LABELS}), MapList.archive); + } else { + labels = new MapElementList(0); + } + loadPercentage = 70; + GameShell.resetTimer(); + } else if (loadPercentage == 70) { + font11 = new WorldMapFont(11, true, GameShell.canvas); + loadPercentage = 73; + ClientProt.ping(true); + GameShell.resetTimer(); + } else if (loadPercentage == 73) { + font12 = new WorldMapFont(12, true, GameShell.canvas); + loadPercentage = 76; + ClientProt.ping(true); + GameShell.resetTimer(); + } else if (loadPercentage == 76) { + font14 = new WorldMapFont(14, true, GameShell.canvas); + loadPercentage = 79; + ClientProt.ping(true); + GameShell.resetTimer(); + } else if (loadPercentage == 79) { + font17 = new WorldMapFont(17, true, GameShell.canvas); + loadPercentage = 82; + ClientProt.ping(true); + GameShell.resetTimer(); + } else if (loadPercentage == 82) { + font19 = new WorldMapFont(19, true, GameShell.canvas); + loadPercentage = 85; + ClientProt.ping(true); + GameShell.resetTimer(); + } else if (loadPercentage == 85) { + font22 = new WorldMapFont(22, true, GameShell.canvas); + loadPercentage = 88; + ClientProt.ping(true); + GameShell.resetTimer(); + } else if (loadPercentage == 88) { + font26 = new WorldMapFont(26, true, GameShell.canvas); + loadPercentage = 91; + ClientProt.ping(true); + GameShell.resetTimer(); + } else { + font30 = new WorldMapFont(30, true, GameShell.canvas); + loadPercentage = 100; + ClientProt.ping(true); + GameShell.resetTimer(); + System.gc(); + } + } + + @OriginalMember(owner = "client!cn", name = "e", descriptor = "(B)V") + public static void method965() { + if (anInt435 < 0) { + anInt4901 = -1; + anInt435 = 0; + anInt3482 = -1; + } + if (anInt435 > width) { + anInt4901 = -1; + anInt435 = width; + anInt3482 = -1; + } + if (anInt919 < 0) { + anInt3482 = -1; + anInt4901 = -1; + anInt919 = 0; + } + if (length < anInt919) { + anInt919 = length; + anInt4901 = -1; + anInt3482 = -1; + } + } + + @OriginalMember(owner = "client!cj", name = "a", descriptor = "(BLclient!wa;)V") + public static void readUnderlay(@OriginalArg(1) Buffer data) { + @Pc(13) int local13 = anInt5338 >> 1; + @Pc(19) int local19 = anInt3254 >> 2 << 10; + @Pc(23) byte[][] underlays = new byte[width][length]; + @Pc(33) int local33; + @Pc(102) int local102; + @Pc(114) int local114; + while (data.offset < data.data.length) { + @Pc(31) int local31 = 0; + local33 = 0; + @Pc(35) boolean local35 = false; + if (data.g1() == 1) { + local33 = data.g1(); + local31 = data.g1(); + local35 = true; + } + @Pc(57) int local57 = data.g1(); + @Pc(61) int local61 = data.g1(); + @Pc(68) int local68 = local57 * 64 - originX; + @Pc(78) int local78 = length + originZ - local61 * 64 - 1; + if (local68 >= 0 && local78 - 63 >= 0 && width > local68 + 63 && length > local78) { + for (local102 = 0; local102 < 64; local102++) { + @Pc(112) byte[] underlay = underlays[local68 + local102]; + for (local114 = 0; local114 < 64; local114++) { + if (!local35 || local102 >= local33 * 8 && local33 * 8 + 8 > local102 && local114 >= local31 * 8 && local114 < local31 * 8 + 8) { + underlay[local78 - local114] = data.g1b(); + } + } + } + } else if (local35) { + data.offset += 64; + } else { + data.offset += 4096; + } + } + @Pc(175) int local175 = width; + local33 = length; + @Pc(180) int[] local180 = new int[local33]; + @Pc(183) int[] local183 = new int[local33]; + @Pc(186) int[] local186 = new int[local33]; + @Pc(189) int[] local189 = new int[local33]; + @Pc(192) int[] local192 = new int[local33]; + for (local102 = -5; local102 < local175; local102++) { + @Pc(225) int local225; + @Pc(293) int local293; + for (@Pc(203) int local203 = 0; local203 < local33; local203++) { + local114 = local102 + 5; + @Pc(272) int local272; + if (local175 > local114) { + local225 = underlays[local114][local203] & 0xFF; + if (local225 > 0) { + @Pc(236) FluType local236 = FluTypeList.get(local225 - 1); + local183[local203] += local236.weightedHue; + local180[local203] += local236.saturation; + local186[local203] += local236.lightness; + local189[local203] += local236.chroma; + local272 = local192[local203]++; + } + } + local225 = local102 - 5; + if (local225 >= 0) { + local293 = underlays[local225][local203] & 0xFF; + if (local293 > 0) { + @Pc(302) FluType local302 = FluTypeList.get(local293 - 1); + local183[local203] -= local302.weightedHue; + local180[local203] -= local302.saturation; + local186[local203] -= local302.lightness; + local189[local203] -= local302.chroma; + local272 = local192[local203]--; + } + } + } + if (local102 >= 0) { + @Pc(355) int[][] local355 = anIntArrayArrayArray17[local102 >> 6]; + local114 = 0; + local225 = 0; + @Pc(361) int local361 = 0; + @Pc(363) int local363 = 0; + local293 = 0; + for (@Pc(367) int local367 = -5; local367 < local33; local367++) { + @Pc(378) int local378 = local367 + 5; + if (local33 > local378) { + local363 += local192[local378]; + local225 += local180[local378]; + local293 += local186[local378]; + local114 += local183[local378]; + local361 += local189[local378]; + } + @Pc(415) int local415 = local367 - 5; + if (local415 >= 0) { + local293 -= local186[local415]; + local361 -= local189[local415]; + local114 -= local183[local415]; + local363 -= local192[local415]; + local225 -= local180[local415]; + } + if (local367 >= 0 && local363 > 0) { + @Pc(462) int[] local462 = local355[local367 >> 6]; + @Pc(480) int local480 = local361 == 0 ? 0 : ColorUtils.method1309(local293 / local363, local225 / local363, local114 * 256 / local361); + if (underlays[local102][local367] != 0) { + if (local462 == null) { + local462 = local355[local367 >> 6] = new int[4096]; + } + @Pc(519) int local519 = local13 + (local480 & 0x7F); + if (local519 < 0) { + local519 = 0; + } else if (local519 > 127) { + local519 = 127; + } + @Pc(541) int local541 = local519 + (local480 & 0x380) + (local480 + local19 & 0xFC00); + local462[((local367 & 0x3F) << 6) + (local102 & 0x3F)] = Rasteriser.palette[ColorUtils.multiplyLightnessSafe(96, local541)]; + } else if (local462 != null) { + local462[((local367 & 0x3F) << 6) + (local102 & 0x3F)] = 0; + } + } + } + } + } + } + + @OriginalMember(owner = "client!dk", name = "a", descriptor = "(Lclient!wa;Z)V") + public static void readOverlay(@OriginalArg(0) Buffer arg0) { + label87: + while (true) { + if (arg0.offset < arg0.data.length) { + @Pc(22) int local22 = 0; + @Pc(24) boolean local24 = false; + @Pc(26) int local26 = 0; + if (arg0.g1() == 1) { + local24 = true; + local22 = arg0.g1(); + local26 = arg0.g1(); + } + @Pc(46) int local46 = arg0.g1(); + @Pc(50) int local50 = arg0.g1(); + @Pc(62) int local62 = originZ + length - local50 * 64 - 1; + @Pc(69) int local69 = local46 * 64 - originX; + @Pc(147) byte local147; + @Pc(91) int local91; + if (local69 >= 0 && local62 - 63 >= 0 && local69 + 63 < width && local62 < length) { + local91 = local69 >> 6; + @Pc(95) int local95 = local62 >> 6; + @Pc(97) int local97 = 0; + while (true) { + if (local97 >= 64) { + continue label87; + } + for (@Pc(104) int local104 = 0; local104 < 64; local104++) { + if (!local24 || local97 >= local22 * 8 && local97 < local22 * 8 + 8 && local104 >= local26 * 8 && local104 < local26 * 8 + 8) { + local147 = arg0.g1b(); + if (local147 != 0) { + if (aByteArrayArrayArray3[local91][local95] == null) { + aByteArrayArrayArray3[local91][local95] = new byte[4096]; + } + aByteArrayArrayArray3[local91][local95][local97 + (63 - local104 << 6)] = local147; + @Pc(186) byte local186 = arg0.g1b(); + if (aByteArrayArrayArray8[local91][local95] == null) { + aByteArrayArrayArray8[local91][local95] = new byte[4096]; + } + aByteArrayArrayArray8[local91][local95][local97 + (63 - local104 << 6)] = local186; + } + } + } + local97++; + } + } + local91 = 0; + while (true) { + if ((local24 ? 64 : 4096) <= local91) { + continue label87; + } + local147 = arg0.g1b(); + if (local147 != 0) { + arg0.offset++; + } + local91++; + } + } + return; + } + } + + @OriginalMember(owner = "client!sk", name = "a", descriptor = "(ILclient!wa;)V") + public static void readOverlay2(@OriginalArg(1) Buffer arg0) { + label83: + while (true) { + if (arg0.offset < arg0.data.length) { + @Pc(23) int local23 = 0; + @Pc(25) boolean local25 = false; + @Pc(27) int local27 = 0; + if (arg0.g1() == 1) { + local25 = true; + local23 = arg0.g1(); + local27 = arg0.g1(); + } + @Pc(46) int local46 = arg0.g1(); + @Pc(50) int local50 = arg0.g1(); + @Pc(57) int local57 = local46 * 64 - originX; + @Pc(68) int local68 = length + originZ - local50 * 64 - 1; + @Pc(146) byte local146; + @Pc(96) int local96; + if (local57 >= 0 && local68 - 63 >= 0 && width > local57 + 63 && local68 < length) { + local96 = local57 >> 6; + @Pc(100) int local100 = local68 >> 6; + @Pc(102) int local102 = 0; + while (true) { + if (local102 >= 64) { + continue label83; + } + for (@Pc(107) int local107 = 0; local107 < 64; local107++) { + if (!local25 || local23 * 8 <= local102 && local23 * 8 + 8 > local102 && local107 >= local27 * 8 && local27 * 8 + 8 > local107) { + local146 = arg0.g1b(); + if (local146 != 0) { + if (aByteArrayArrayArray12[local96][local100] == null) { + aByteArrayArrayArray12[local96][local100] = new byte[4096]; + } + aByteArrayArrayArray12[local96][local100][(63 - local107 << 6) + local102] = local146; + @Pc(182) byte local182 = arg0.g1b(); + if (aByteArrayArrayArray10[local96][local100] == null) { + aByteArrayArrayArray10[local96][local100] = new byte[4096]; + } + aByteArrayArrayArray10[local96][local100][local102 + (63 - local107 << 6)] = local182; + } + } + } + local102++; + } + } + local96 = 0; + while (true) { + if (local96 >= (local25 ? 64 : 4096)) { + continue label83; + } + local146 = arg0.g1b(); + if (local146 != 0) { + arg0.offset++; + } + local96++; + } + } + return; + } + } + + @OriginalMember(owner = "client!nc", name = "a", descriptor = "(BLclient!wa;)V") + public static void readLocs(@OriginalArg(1) Buffer arg0) { + label123: + while (true) { + if (arg0.data.length > arg0.offset) { + @Pc(17) boolean local17 = false; + @Pc(19) int local19 = 0; + @Pc(21) int local21 = 0; + if (arg0.g1() == 1) { + local19 = arg0.g1(); + local17 = true; + local21 = arg0.g1(); + } + @Pc(42) int local42 = arg0.g1(); + @Pc(46) int local46 = arg0.g1(); + @Pc(53) int local53 = local42 * 64 - originX; + @Pc(65) int local65 = originZ + length - local46 * 64 - 1; + @Pc(84) int local84; + @Pc(95) int local95; + if (local53 >= 0 && local65 - 63 >= 0 && width > local53 + 63 && local65 < length) { + local84 = local53 >> 6; + local95 = local65 >> 6; + @Pc(150) int local150 = 0; + while (true) { + if (local150 >= 64) { + continue label123; + } + for (@Pc(155) int local155 = 0; local155 < 64; local155++) { + if (!local17 || local19 * 8 <= local150 && local150 < local19 * 8 + 8 && local155 >= local21 * 8 && local155 < local21 * 8 + 8) { + @Pc(202) int local202 = arg0.g1(); + if (local202 != 0) { + @Pc(214) int id; + if ((local202 & 0x1) == 1) { + id = arg0.g1(); + if (aByteArrayArrayArray7[local84][local95] == null) { + aByteArrayArrayArray7[local84][local95] = new byte[4096]; + } + aByteArrayArrayArray7[local84][local95][local150 + (63 - local155 << 6)] = (byte) id; + } + if ((local202 & 0x2) == 2) { + id = arg0.g3(); + if (scenery[local84][local95] == null) { + scenery[local84][local95] = new int[4096]; + } + scenery[local84][local95][(63 - local155 << 6) + local150] = id; + } + if ((local202 & 0x4) == 4) { + id = arg0.g3(); + if (underlayColors[local84][local95] == null) { + underlayColors[local84][local95] = new int[4096]; + } + id--; + @Pc(312) LocType local312 = LocTypeList.get(id); + if (local312.multiLocs != null) { + local312 = local312.getMultiLoc(); + if (local312 == null || local312.mapfunction == -1) { + continue; + } + } + underlayColors[local84][local95][(63 - local155 << 6) + local150] = local312.id + 1; + @Pc(353) MapElement element = new MapElement(); + element.id = local312.mapfunction; + element.anInt4307 = local53; + element.anInt4314 = local65; + mapElements.addTail(element); + } + } + } + } + local150++; + } + } + local84 = 0; + while (true) { + if (local84 >= (local17 ? 64 : 4096)) { + continue label123; + } + local95 = arg0.g1(); + if (local95 != 0) { + if ((local95 & 0x1) == 1) { + arg0.offset++; + } + if ((local95 & 0x2) == 2) { + arg0.offset += 2; + } + if ((local95 & 0x4) == 4) { + arg0.offset += 3; + } + } + local84++; + } + } + return; + } + } + + @OriginalMember(owner = "client!le", name = "a", descriptor = "(IIIIIIIIIII)V") + public static void method2735(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7) { + @Pc(9) int local9 = arg3 - arg5; + @Pc(14) int local14 = arg1 - arg2; + if (width > arg3) { + local9++; + } + if (length > arg1) { + local14++; + } + @Pc(32) int local32; + @Pc(47) int local47; + @Pc(57) int local57; + @Pc(62) int local62; + @Pc(71) int local71; + @Pc(104) int local104; + @Pc(145) int local145; + @Pc(157) int local157; + @Pc(162) int local162; + @Pc(211) int local211; + @Pc(222) int mapScene; + @Pc(233) int mapSceneId; + @Pc(254) int angle; + @Pc(270) int local270; + @Pc(276) int local276; + @Pc(312) int local312; + @Pc(372) int local372; + @Pc(185) int[][] local185; + for (local32 = 0; local32 < local9; local32++) { + local47 = local32 * arg7 >> 16; + local57 = (local32 + 1) * arg7 >> 16; + local62 = local57 - local47; + if (local62 > 0) { + local71 = local32 + arg5 >> 6; + if (local71 >= 0 && anIntArrayArrayArray17.length - 1 >= local71) { + local47 += arg4; + local185 = anIntArrayArrayArray17[local71]; + @Pc(189) byte[][] local189 = aByteArrayArrayArray3[local71]; + @Pc(193) byte[][] local193 = aByteArrayArrayArray8[local71]; + @Pc(197) byte[][] local197 = aByteArrayArrayArray7[local71]; + @Pc(201) byte[][] local201 = aByteArrayArrayArray10[local71]; + local57 += arg4; + @Pc(209) byte[][] local209 = aByteArrayArrayArray12[local71]; + for (local211 = 0; local211 < local14; local211++) { + mapScene = arg6 * local211 >> 16; + mapSceneId = (local211 + 1) * arg6 >> 16; + @Pc(238) int local238 = mapSceneId - mapScene; + if (local238 > 0) { + mapSceneId += arg0; + angle = arg2 + local211 >> 6; + @Pc(260) int local260 = arg2 + local211 & 0x3F; + mapScene += arg0; + local270 = local32 + arg5 & 0x3F; + local276 = (local260 << 6) + local270; + if (angle < 0 || local185.length - 1 < angle || local185[angle] == null) { + if (currentMap.backgroundColor != -1) { + local312 = currentMap.backgroundColor; + } else if ((local211 + arg2 & 0x4) == (arg5 + local32 & 0x4)) { + local312 = overlayColors[FloType.anInt865 + 1]; + } else { + local312 = 4936552; + } + if (angle < 0 || angle > local185.length - 1) { + if (local312 == 0) { + local312 = 1; + } + SoftwareRaster.fillRect(local47, mapScene, local62, local238, local312); + continue; + } + } else { + local312 = local185[angle][local276]; + } + local372 = local189[angle] == null ? 0 : overlayColors[local189[angle][local276] & 0xFF]; + if (local312 == 0) { + local312 = 1; + } + @Pc(395) int local395 = local209[angle] == null ? 0 : overlayColors[local209[angle][local276] & 0xFF]; + @Pc(437) int local437; + if (local372 == 0 && local395 == 0) { + SoftwareRaster.fillRect(local47, mapScene, local62, local238, local312); + } else { + @Pc(433) byte local433; + if (local372 != 0) { + if (local372 == -1) { + local372 = 1; + } + local433 = local193[angle] == null ? 0 : local193[angle][local276]; + local437 = local433 & 0xFC; + if (local437 == 0 || local62 <= 1 || local238 <= 1) { + SoftwareRaster.fillRect(local47, mapScene, local62, local238, local372); + } else { + method4667(SoftwareRaster.pixels, local372, local47, local433 & 0x3, local312, local437 >> 2, local238, local62, mapScene, true); + } + } + if (local395 != 0) { + if (local395 == -1) { + local395 = local312; + } + local433 = local201[angle][local276]; + local437 = local433 & 0xFC; + if (local437 == 0 || local62 <= 1 || local238 <= 1) { + SoftwareRaster.fillRect(local47, mapScene, local62, local238, local395); + } + method4667(SoftwareRaster.pixels, local395, local47, local433 & 0x3, 0, local437 >> 2, local238, local62, mapScene, local372 == 0); + } + } + if (local197[angle] != null) { + @Pc(546) int local546 = local197[angle][local276] & 0xFF; + if (local546 != 0) { + if (local62 == 1) { + local437 = local47; + } else { + local437 = local57 - 1; + } + @Pc(569) int local569; + if (local238 == 1) { + local569 = mapScene; + } else { + local569 = mapSceneId - 1; + } + @Pc(575) int local575 = 13421772; + if (local546 >= 5 && local546 <= 8 || local546 >= 13 && local546 <= 16 || local546 >= 21 && local546 <= 24 || local546 == 27 || local546 == 28) { + local575 = 13369344; + local546 -= 4; + } + if (local546 == 1) { + SoftwareRaster.drawVerticalLine(local47, mapScene, local238, local575); + } else if (local546 == 2) { + SoftwareRaster.drawHorizontalLine(local47, mapScene, local62, local575); + } else if (local546 == 3) { + SoftwareRaster.drawVerticalLine(local437, mapScene, local238, local575); + } else if (local546 == 4) { + SoftwareRaster.drawHorizontalLine(local47, local569, local62, local575); + } else if (local546 == 9) { + SoftwareRaster.drawVerticalLine(local47, mapScene, local238, 16777215); + SoftwareRaster.drawHorizontalLine(local47, mapScene, local62, local575); + } else if (local546 == 10) { + SoftwareRaster.drawVerticalLine(local437, mapScene, local238, 16777215); + SoftwareRaster.drawHorizontalLine(local47, mapScene, local62, local575); + } else if (local546 == 11) { + SoftwareRaster.drawVerticalLine(local437, mapScene, local238, 16777215); + SoftwareRaster.drawHorizontalLine(local47, local569, local62, local575); + } else if (local546 == 12) { + SoftwareRaster.drawVerticalLine(local47, mapScene, local238, 16777215); + SoftwareRaster.drawHorizontalLine(local47, local569, local62, local575); + } else if (local546 == 17) { + SoftwareRaster.drawHorizontalLine(local47, mapScene, 1, local575); + } else if (local546 == 18) { + SoftwareRaster.drawHorizontalLine(local437, mapScene, 1, local575); + } else if (local546 == 19) { + SoftwareRaster.drawHorizontalLine(local437, local569, 1, local575); + } else if (local546 == 20) { + SoftwareRaster.drawHorizontalLine(local47, local569, 1, local575); + } else { + @Pc(705) int local705; + if (local546 == 25) { + for (local705 = 0; local705 < local238; local705++) { + SoftwareRaster.drawHorizontalLine(local705 + local47, -local705 + local569, 1, local575); + } + } else if (local546 == 26) { + for (local705 = 0; local705 < local238; local705++) { + SoftwareRaster.drawHorizontalLine(local705 + local47, mapScene + local705, 1, local575); + } + } + } + } + } + } + } + } else { + local47 += arg4; + for (@Pc(90) int local90 = 0; local90 < local14; local90++) { + if (currentMap.backgroundColor != -1) { + local104 = currentMap.backgroundColor; + } else if ((local32 + arg5 & 0x4) == (local90 + arg2 & 0x4)) { + local104 = overlayColors[FloType.anInt865 + 1]; + } else { + local104 = 0x4b5368; + } + if (local104 == 0) { + local104 = 1; + } + local145 = (arg6 * local90 >> 16) + arg0; + local157 = arg0 + ((local90 + 1) * arg6 >> 16); + local162 = local157 - local145; + SoftwareRaster.fillRect(local47, local145, local62, local162, local104); + } + } + } + } + for (local32 = -2; local32 < local9 + 2; local32++) { + local47 = local32 * arg7 >> 16; + local57 = arg7 * (local32 + 1) >> 16; + local62 = local57 - local47; + if (local62 > 0) { + local47 += arg4; + local71 = arg5 + local32 >> 6; + if (local71 >= 0 && scenery.length - 1 >= local71) { + local185 = scenery[local71]; + for (local104 = -2; local104 < local14 + 2; local104++) { + local145 = local104 * arg6 >> 16; + local157 = (local104 + 1) * arg6 >> 16; + local162 = local157 - local145; + if (local162 > 0) { + local145 += arg0; + @Pc(931) int local931 = local104 + arg2 >> 6; + if (local931 >= 0 && local931 <= local185.length - 1) { + local211 = ((arg2 + local104 & 0x3F) << 6) + (local32 + arg5 & 0x3F); + if (local185[local931] != null) { + mapScene = local185[local931][local211]; + mapSceneId = mapScene & 0x3FFF; + if (mapSceneId != 0) { + angle = mapScene >> 14 & 0x3; + @Pc(998) MsiType type = MsiTypeList.get(mapSceneId - 1); + @Pc(1003) SoftwareIndexedSprite sprite = type.getSprite(angle); + if (sprite != null) { + local276 = local162 * sprite.height / 4; + local270 = local62 * sprite.width / 4; + if (type.aBoolean2) { + local312 = mapScene >> 16 & 0xF; + local372 = mapScene >> 20 & 0xF; + if ((angle & 0x1) == 1) { + angle = local312; + local312 = local372; + local372 = angle; + } + local270 = local62 * local312; + local276 = local162 * local372; + } + if (local270 != 0 && local276 != 0) { + if (type.anInt11 == 0) { + sprite.method1398(local47, local145 + local162 - local276, local270, local276); + } else { + sprite.method1390(local47, local145 + local162 - local276, local270, local276, type.anInt11); + } + } + } + } + } + } + } + } + } + } + } + } + + @OriginalMember(owner = "client!jb", name = "a", descriptor = "(IZ)V") + public static void clear(@OriginalArg(1) boolean arg0) { + aByteArrayArrayArray8 = null; + underlayColors = null; + component = null; + aByteArrayArrayArray3 = null; + overlayColors = null; + aByteArrayArrayArray10 = null; + if (arg0 && currentMap != null) { + aClass100_724 = currentMap.group; + } else { + aClass100_724 = null; + } + aByteArrayArrayArray7 = null; + aByteArrayArrayArray12 = null; + scenery = null; + anIntArrayArrayArray17 = null; + loadPercentage = 0; + currentMap = null; + mapElements.clear(); + labels = null; + anInt4901 = -1; + font22 = null; + font30 = null; + font12 = null; + font26 = null; + font11 = null; + font14 = null; + font17 = null; + font19 = null; + aClass3_Sub2_Sub1_2 = null; + anInt3482 = -1; + aClass3_Sub2_Sub1_Sub1_2 = null; + } + + @OriginalMember(owner = "client!je", name = "a", descriptor = "(IIIII)V") + public static void method2387(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + anInt435 = width * arg2 / arg0; + anInt919 = length * arg1 / arg3; + anInt3482 = -1; + anInt4901 = -1; + method965(); + } + + @OriginalMember(owner = "client!wi", name = "d", descriptor = "(II)V") + public static void method4641(@OriginalArg(1) int arg0) { + anInt4901 = -1; + anInt4901 = -1; + anInt919 = arg0; + method965(); + } + + @OriginalMember(owner = "client!hj", name = "a", descriptor = "(II)V") + public static void method1964(@OriginalArg(0) int arg0) { + anInt4901 = -1; + anInt3482 = -1; + anInt435 = arg0; + method965(); + } + + @OriginalMember(owner = "client!hc", name = "d", descriptor = "(I)I") + public static int getTargetZoom() { + if ((double) targetZoom == 3.0D) { + return 37; + } else if ((double) targetZoom == 4.0D) { + return 50; + } else if ((double) targetZoom == 6.0D) { + return 75; + } else if ((double) targetZoom == 8.0D) { + return 100; + } else { + return 200; + } + } + + @OriginalMember(owner = "client!hb", name = "b", descriptor = "(Lclient!na;I)V") + public static void method1853(@OriginalArg(0) JagString arg0) { + clear(false); + method4011(arg0); + } + + @OriginalMember(owner = "client!kf", name = "a", descriptor = "(Lclient!na;I)V") + public static void method4011(@OriginalArg(0) JagString arg0) { + for (@Pc(15) Map local15 = (Map) MapList.aClass69_120.head(); local15 != null; local15 = (Map) MapList.aClass69_120.next()) { + if (local15.group.strEquals(arg0)) { + currentMap = local15; + return; + } + } + } + + @OriginalMember(owner = "client!me", name = "a", descriptor = "(IB)V") + public static void setTargetZoom(@OriginalArg(0) int arg0) { + anInt4901 = -1; + if (arg0 == 37) { + targetZoom = 3.0F; + } else if (arg0 == 50) { + targetZoom = 4.0F; + } else if (arg0 == 75) { + targetZoom = 6.0F; + } else if (arg0 == 100) { + targetZoom = 8.0F; + } else if (arg0 == 200) { + targetZoom = 16.0F; + } + anInt4901 = -1; + } + + @OriginalMember(owner = "client!af", name = "b", descriptor = "(B)V") + public static void reset() { + clear(false); + System.gc(); + client.setGameState(25); + } + + @OriginalMember(owner = "client!bb", name = "a", descriptor = "(I)V") + public static void method447() { + if (zoom < targetZoom) { + zoom = (float) ((double) zoom + (double) zoom / 30.0D); + if (targetZoom < zoom) { + zoom = targetZoom; + } + method965(); + } else if (targetZoom < zoom) { + zoom = (float) ((double) zoom - (double) zoom / 30.0D); + if (targetZoom > zoom) { + zoom = targetZoom; + } + method965(); + } + if (anInt3482 == -1 || anInt4901 == -1) { + return; + } + @Pc(60) int local60 = anInt3482 - anInt435; + if (local60 < 2 || local60 > 2) { + local60 >>= 0x4; + } + @Pc(78) int local78 = anInt4901 - anInt919; + if (local78 < 2 || local78 > 2) { + local78 >>= 0x4; + } + anInt919 -= -local78; + anInt435 += local60; + if (local60 == 0 && local78 == 0) { + anInt3482 = -1; + anInt4901 = -1; + } + method965(); + } + + @OriginalMember(owner = "client!lb", name = "d", descriptor = "(B)V") + public static void method2720() { + if (aClass100_724 != null) { + method1853(aClass100_724); + aClass100_724 = null; + } + } + + @OriginalMember(owner = "client!va", name = "c", descriptor = "(BI)V") + public static void method4444(@OriginalArg(1) int arg0) { + anInt172 = arg0; + Cs1ScriptRunner.anInt2428 = 20; + anInt1864 = 3; + } + + @OriginalMember(owner = "client!ab", name = "a", descriptor = "(Lclient!na;I)V") + public static void method4656(@OriginalArg(0) JagString arg0) { + @Pc(9) int local9 = method3218(arg0); + if (local9 != -1) { + method3616(labels.aShortArray73[local9], labels.aShortArray72[local9]); + } + } + + @OriginalMember(owner = "client!rc", name = "a", descriptor = "(Lclient!na;Z)Lclient!na;") + public static JagString method923(@OriginalArg(0) JagString arg0) { + @Pc(12) int local12 = method3218(arg0); + return local12 == -1 ? aClass100_517 : labels.aClass100Array153[local12].method3140(aClass100_538, aClass100_872); + } + + @OriginalMember(owner = "client!rg", name = "d", descriptor = "(B)Lclient!bn;") + public static Map getCurrentMap() { + return currentMap; + } + + @OriginalMember(owner = "client!jd", name = "a", descriptor = "(B)I") + public static int method2352() { + anInt5212 = 0; + return method2385(); + } + + @OriginalMember(owner = "client!je", name = "j", descriptor = "(I)I") + public static int method2385() { + if (labels == null) { + return -1; + } + while (anInt5212 < labels.anInt5074) { + if (labels.method3897(anInt5212)) { + return anInt5212++; + } + anInt5212++; + } + return -1; + } + + @OriginalMember(owner = "client!gf", name = "a", descriptor = "(BII)V") + public static void method3616(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + anInt3482 = arg0 - originX; + @Pc(24) int local24 = anInt3482 - (int) ((float) component.width / zoom); + @Pc(33) int local33 = anInt3482 + (int) ((float) component.width / zoom); + if (local24 < 0) { + anInt3482 = (int) ((float) component.width / zoom); + } + anInt4901 = length + originZ - arg1 - 1; + @Pc(61) int local61 = (int) ((float) component.height / zoom) + anInt4901; + @Pc(70) int local70 = anInt4901 - (int) ((float) component.height / zoom); + if (local33 > width) { + anInt3482 = width - (int) ((float) component.width / zoom); + } + if (local70 < 0) { + anInt4901 = (int) ((float) component.height / zoom); + } + if (length < local61) { + anInt4901 = length - (int) ((float) component.height / zoom); + } + } + + @OriginalMember(owner = "client!dh", name = "a", descriptor = "(Lclient!na;I)V") + public static void method1149(@OriginalArg(0) JagString arg0) { + @Pc(7) int local7 = method1879(arg0); + if (local7 != -1) { + method3616(labels.aShortArray73[local7], labels.aShortArray72[local7]); + } + } + + @OriginalMember(owner = "client!hc", name = "a", descriptor = "(Lclient!na;Z)I") + public static int method1879(@OriginalArg(0) JagString arg0) { + if (labels == null || arg0.length() == 0) { + return -1; + } + for (@Pc(20) int local20 = 0; local20 < labels.anInt5074; local20++) { + if (labels.aClass100Array153[local20].method3140(aClass100_538, aClass100_872).strEquals(arg0)) { + return local20; + } + } + return -1; + } + + @OriginalMember(owner = "client!wl", name = "a", descriptor = "([IIIIIIIIIZB)V") + public static void method4667(@OriginalArg(0) int[] arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) boolean arg9) { + @Pc(7) int local7 = arg2; + if (SoftwareRaster.clipRight <= arg2) { + return; + } + if (arg2 < SoftwareRaster.clipLeft) { + local7 = SoftwareRaster.clipLeft; + } + @Pc(30) int local30 = arg7 + arg2; + if (SoftwareRaster.clipLeft >= local30) { + return; + } + if (SoftwareRaster.clipRight < local30) { + local30 = SoftwareRaster.clipRight; + } + @Pc(43) int local43 = arg8; + if (SoftwareRaster.clipBottom <= arg8) { + return; + } + @Pc(56) int local56 = arg8 + arg6; + if (arg8 < SoftwareRaster.clipTop) { + local43 = SoftwareRaster.clipTop; + } + if (local56 <= SoftwareRaster.clipTop) { + return; + } + @Pc(79) int local79 = local7 + SoftwareRaster.width * local43; + if (arg5 == 9) { + arg3 = arg3 + 1 & 0x3; + arg5 = 1; + } + @Pc(99) int local99 = local7 + SoftwareRaster.width - local30; + local43 -= arg8; + @Pc(108) int local108 = arg6 - local43; + if (SoftwareRaster.clipBottom < local56) { + local56 = SoftwareRaster.clipBottom; + } + if (arg5 == 10) { + arg3 = arg3 + 3 & 0x3; + arg5 = 1; + } + local7 -= arg2; + @Pc(136) int local136 = arg7 - local7; + if (arg5 == 11) { + arg3 = arg3 + 3 & 0x3; + arg5 = 8; + } + local30 -= arg2; + @Pc(157) int local157 = arg7 - local30; + local56 -= arg8; + @Pc(165) int local165 = arg6 - local56; + @Pc(175) int local175; + @Pc(184) int local184; + if (arg5 == 1) { + if (arg3 == 0) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local7; local184 < local30; local184++) { + if (local184 <= local175) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 1) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local7; local184 < local30; local184++) { + if (local175 >= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 2) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local7; local184 < local30; local184++) { + if (local184 >= local175) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 3) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local7; local184 < local30; local184++) { + if (local184 >= local175) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } + } else if (arg5 == 2) { + if (arg3 == 0) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local7; local184 < local30; local184++) { + if (local175 >> 1 >= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 1) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local7; local184 < local30; local184++) { + if (local79 >= 0 && local79 < arg0.length) { + if (local175 << 1 <= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } else { + local79++; + } + } + local79 += local99; + } + } else if (arg3 == 2) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local136 - 1; local184 >= local157; local184--) { + if (local175 >> 1 >= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 3) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local136 - 1; local184 >= local157; local184--) { + if (local175 << 1 <= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } + } else if (arg5 == 3) { + if (arg3 == 0) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local136 - 1; local184 >= local157; local184--) { + if (local175 >> 1 >= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 1) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local7; local184 < local30; local184++) { + if (local184 >= local175 << 1) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 2) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local7; local184 < local30; local184++) { + if (local184 <= local175 >> 1) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 3) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local136 - 1; local184 >= local157; local184--) { + if (local175 << 1 <= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } + } else if (arg5 == 4) { + if (arg3 == 0) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local7; local184 < local30; local184++) { + if (local175 >> 1 <= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 1) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local7; local184 < local30; local184++) { + if (local175 << 1 >= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 2) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local136 - 1; local184 >= local157; local184--) { + if (local184 >= local175 >> 1) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 3) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local136 - 1; local184 >= local157; local184--) { + if (local184 <= local175 << 1) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } + } else if (arg5 != 5) { + if (arg5 == 6) { + if (arg3 == 0) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local7; local184 < local30; local184++) { + if (local184 <= arg7 / 2) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + return; + } + if (arg3 == 1) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local7; local184 < local30; local184++) { + if (local175 <= arg6 / 2) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + return; + } + if (arg3 == 2) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local7; local184 < local30; local184++) { + if (local184 >= arg7 / 2) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + return; + } + if (arg3 == 3) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local7; local184 < local30; local184++) { + if (local175 >= arg6 / 2) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + return; + } + } + if (arg5 == 7) { + if (arg3 == 0) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local7; local184 < local30; local184++) { + if (local184 <= local175 - arg6 / 2) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + return; + } + if (arg3 == 1) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local7; local184 < local30; local184++) { + if (local175 - arg6 / 2 >= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + return; + } + if (arg3 == 2) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local136 - 1; local184 >= local157; local184--) { + if (local184 <= local175 - arg6 / 2) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + return; + } + if (arg3 == 3) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local136 - 1; local184 >= local157; local184--) { + if (local175 - arg6 / 2 >= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + return; + } + } + if (arg5 == 8) { + if (arg3 == 0) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local7; local184 < local30; local184++) { + if (local175 - arg6 / 2 <= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + return; + } + if (arg3 == 1) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local7; local184 < local30; local184++) { + if (local175 - arg6 / 2 <= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + return; + } + if (arg3 == 2) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local136 - 1; local184 >= local157; local184--) { + if (local184 >= local175 - arg6 / 2) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + return; + } + if (arg3 == 3) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local136 - 1; local184 >= local157; local184--) { + if (local175 - arg6 / 2 <= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + return; + } + } + } else if (arg3 == 0) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local136 - 1; local184 >= local157; local184--) { + if (local175 >> 1 <= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 1) { + for (local175 = local108 - 1; local175 >= local165; local175--) { + for (local184 = local7; local184 < local30; local184++) { + if (local184 <= local175 << 1) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 2) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local7; local184 < local30; local184++) { + if (local184 >= local175 >> 1) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } else if (arg3 == 3) { + for (local175 = local43; local175 < local56; local175++) { + for (local184 = local136 - 1; local184 >= local157; local184--) { + if (local175 << 1 >= local184) { + arg0[local79] = arg1; + } else if (arg9) { + arg0[local79] = arg4; + } + local79++; + } + local79 += local99; + } + } + } + + @OriginalMember(owner = "client!rg", name = "a", descriptor = "(IIIIIIIII)V") + public static void method4364(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7) { + @Pc(7) int local7 = arg2 - arg7; + @Pc(16) int local16 = (arg0 - arg4 << 16) / local7; + @Pc(21) int local21 = arg5 - arg3; + @Pc(30) int local30 = (arg6 - arg1 << 16) / local21; + method2735(arg1, arg5, arg3, arg2, arg4, arg7, local30, local16); + } + + @OriginalMember(owner = "client!wa", name = "a", descriptor = "(IIIII)V") + public static void method2225(@OriginalArg(0) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) { + if (loadPercentage < 100) { + load(); + } + if (GlRenderer.enabled) { + GlRaster.setClip(arg0, arg1, arg0 + arg3, arg2 + arg1); + } else { + SoftwareRaster.setClip(arg0, arg1, arg0 + arg3, arg2 + arg1); + } + @Pc(50) int local50; + @Pc(61) int local61; + if (loadPercentage < 100) { + local50 = arg0 + arg3 / 2; + local61 = arg2 / 2 + arg1 - 18 - 20; + if (GlRenderer.enabled) { + GlRaster.fillRect(arg0, arg1, arg3, arg2, 0); + GlRaster.drawRect(local50 - 152, local61, 304, 34, 9179409); + GlRaster.drawRect(local50 - 151, local61 + 1, 302, 32, 0); + GlRaster.fillRect(local50 - 150, local61 + 2, loadPercentage * 3, 30, 9179409); + GlRaster.fillRect(local50 + loadPercentage * 3 - 150, local61 - -2, 300 - loadPercentage * 3, 30, 0); + } else { + SoftwareRaster.fillRect(arg0, arg1, arg3, arg2, 0); + SoftwareRaster.drawRect(local50 - 152, local61, 304, 34, 9179409); + SoftwareRaster.drawRect(local50 - 151, local61 + 1, 302, 32, 0); + SoftwareRaster.fillRect(local50 - 150, local61 + 2, loadPercentage * 3, 30, 9179409); + SoftwareRaster.fillRect(loadPercentage * 3 + local50 - 150, local61 - -2, 300 - loadPercentage * 3, 30, 0); + } + Fonts.b12Full.renderCenter(LocalizedText.LOADINGDOTDOTDOT, local50, local61 + 20, 16777215, -1); + return; + } + anInt1176 = (int) ((float) (arg2 * 2) / zoom); + Cs1ScriptRunner.anInt2882 = anInt435 - (int) ((float) arg3 / zoom); + @Pc(211) int local211 = anInt435 - (int) ((float) arg3 / zoom); + local50 = anInt919 - (int) ((float) arg2 / zoom); + Cs1ScriptRunner.anInt2884 = anInt919 - (int) ((float) arg2 / zoom); + @Pc(236) int local236 = anInt919 + (int) ((float) arg2 / zoom); + local61 = (int) ((float) arg3 / zoom) + anInt435; + anInt2387 = (int) ((float) (arg3 * 2) / zoom); + if (GlRenderer.enabled) { + if (aClass3_Sub2_Sub1_Sub1_2 == null || aClass3_Sub2_Sub1_Sub1_2.width != arg3 || aClass3_Sub2_Sub1_Sub1_2.height != arg2) { + aClass3_Sub2_Sub1_Sub1_2 = null; + aClass3_Sub2_Sub1_Sub1_2 = new SoftwareSprite(arg3, arg2); + } + SoftwareRaster.setSize(aClass3_Sub2_Sub1_Sub1_2.pixels, arg3, arg2); + method4364(arg3, 0, local61, local50, 0, local236, arg2, local211); + method1195(arg3, 0, local61, local236, arg2, 0, local211, local50); + method959(0, 0, local211, arg3, local236, local50, local61, arg2); + GlRaster.drawPixels(aClass3_Sub2_Sub1_Sub1_2.pixels, arg0, arg1, arg3, arg2); + SoftwareRaster.pixels = null; + } else { + method4364(arg3 + arg0, arg1, local61, local50, arg0, local236, arg1 + arg2, local211); + method1195(arg0 + arg3, arg0, local61, local236, arg2 + arg1, arg1, local211, local50); + method959(arg0, arg1, local211, arg0 + arg3, local236, local50, local61, arg2 + arg1); + } + if (anInt1864 > 0) { + Cs1ScriptRunner.anInt2428--; + if (Cs1ScriptRunner.anInt2428 == 0) { + Cs1ScriptRunner.anInt2428 = 20; + anInt1864--; + } + } + + if (Cheat.displayFps) { + @Pc(405) int local405 = arg1 + arg2 - 8; + @Pc(412) int local412 = arg0 + arg3 - 5; + Fonts.p12Full.renderRight(JagString.concatenate(new JagString[]{Cheat.DEBUG_FPS, JagString.parseInt((int) GameShell.framesPerSecond)}), local412, local405, 16776960, -1); + @Pc(434) Runtime runtime = Runtime.getRuntime(); + @Pc(443) int memory = (int) ((runtime.totalMemory() - runtime.freeMemory()) / 1024L / 1024L); + @Pc(445) int color = 16776960; + @Pc(446) int local446 = local405 - 15; + if (memory > 95) { + color = 16711680; + } + Fonts.p12Full.renderRight(JagString.concatenate(new JagString[]{Cheat.DEBUG_MEMORY, JagString.parseInt(memory), Cheat.DEBUG_MEMORY_UNIT}), local412, local446, color, -1); + local405 = local446 - 15; + } + } + + @OriginalMember(owner = "client!dl", name = "a", descriptor = "(IIIIIIIII)V") + public static void method1195(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7) { + @Pc(13) int local13 = arg2 - arg6; + @Pc(17) int local17 = arg3 - arg7; + @Pc(26) int local26 = (arg0 - arg1 << 16) / local13; + @Pc(35) int local35 = (arg4 - arg5 << 16) / local17; + method3991(arg1, arg3, arg2, local35, arg6, local26, arg7, arg5); + } + + @OriginalMember(owner = "client!sm", name = "a", descriptor = "(IIIIIIIIIII)V") + public static void method3991(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(8) int arg5, @OriginalArg(9) int arg6, @OriginalArg(10) int arg7) { + @Pc(9) int local9 = arg2 - arg4; + @Pc(11) int local11 = -1; + if (anInt1864 > 0) { + if (Cs1ScriptRunner.anInt2428 <= 10) { + local11 = Cs1ScriptRunner.anInt2428 * 5; + } else { + local11 = 50 - (Cs1ScriptRunner.anInt2428 - 10) * 5; + } + } + @Pc(39) int local39 = arg1 - arg6; + @Pc(43) int local43 = 983040 / arg5; + @Pc(47) int local47 = 983040 / arg3; + for (@Pc(50) int local50 = -local43; local50 < local9 + local43; local50++) { + @Pc(65) int local65 = local50 * arg5 >> 16; + @Pc(75) int local75 = arg5 * (local50 + 1) >> 16; + @Pc(80) int local80 = local75 - local65; + if (local80 > 0) { + @Pc(91) int local91 = arg4 + local50 >> 6; + local65 += arg0; + if (local91 >= 0 && local91 <= underlayColors.length - 1) { + @Pc(116) int[][] local116 = underlayColors[local91]; + for (@Pc(119) int local119 = -local47; local119 < local39 + local47; local119++) { + @Pc(136) int local136 = arg3 * (local119 + 1) >> 16; + @Pc(144) int local144 = local119 * arg3 >> 16; + @Pc(149) int local149 = local136 - local144; + if (local149 > 0) { + local144 += arg7; + @Pc(163) int local163 = arg6 + local119 >> 6; + if (local163 >= 0 && local163 <= local116.length - 1 && local116[local163] != null) { + @Pc(203) int local203 = (local50 + arg4 & 0x3F) + ((arg6 + local119 & 0x3F) << 6); + @Pc(209) int local209 = local116[local163][local203]; + if (local209 != 0) { + @Pc(222) LocType local222 = LocTypeList.get(local209 - 1); + if (!MapList.aBooleanArray130[local222.mapfunction]) { + if (local11 != -1 && local222.mapfunction == anInt172) { + @Pc(243) MapElement local243 = new MapElement(); + local243.anInt4307 = local65; + local243.anInt4314 = local144; + local243.id = local222.mapfunction; + aClass69_97.addTail(local243); + } else { + MapList.sprites[local222.mapfunction].render(local65 - 7, local144 + -7); + } + } + } + } + } + } + } + } + } + for (@Pc(285) MapElement local285 = (MapElement) aClass69_97.head(); local285 != null; local285 = (MapElement) aClass69_97.next()) { + SoftwareRaster.method2502(local285.anInt4307, local285.anInt4314, 15, local11); + SoftwareRaster.method2502(local285.anInt4307, local285.anInt4314, 13, local11); + SoftwareRaster.method2502(local285.anInt4307, local285.anInt4314, 11, local11); + SoftwareRaster.method2502(local285.anInt4307, local285.anInt4314, 9, local11); + MapList.sprites[local285.id].render(local285.anInt4307 - 7, local285.anInt4314 + -7); + } + aClass69_97.clear(); + } + + @OriginalMember(owner = "client!fi", name = "a", descriptor = "(III)V") + public static void loadOverlayColors(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1) { + for (@Pc(11) int local11 = 0; local11 < FloTypeList.capacity; local11++) { + @Pc(18) FloType local18 = FloTypeList.method4395(local11); + if (local18 != null) { + @Pc(24) int local24 = local18.texture; + if (local24 >= 0 && !Rasteriser.textureProvider.method3236(local24)) { + local24 = -1; + } + @Pc(53) int local53; + @Pc(66) int local66; + @Pc(72) int local72; + @Pc(95) int local95; + if (local18.secondaryColor >= 0) { + local66 = local18.secondaryColor; + local72 = (local66 & 0x7F) + arg0; + if (local72 < 0) { + local72 = 0; + } else if (local72 > 127) { + local72 = 127; + } + local95 = (local66 & 0x380) + (arg1 + local66 & 0xFC00) + local72; + local53 = Rasteriser.palette[ColorUtils.multiplyLightnessGrayscale(local95, 96)]; + } else if (local24 >= 0) { + local53 = Rasteriser.palette[ColorUtils.multiplyLightnessGrayscale(Rasteriser.textureProvider.getAverageColor(local24), 96)]; + } else if (local18.baseColor == -1) { + local53 = -1; + } else { + local66 = local18.baseColor; + local72 = arg0 + (local66 & 0x7F); + if (local72 < 0) { + local72 = 0; + } else if (local72 > 127) { + local72 = 127; + } + local95 = local72 + (local66 & 0x380) + (local66 + arg1 & 0xFC00); + local53 = Rasteriser.palette[ColorUtils.multiplyLightnessGrayscale(local95, 96)]; + } + overlayColors[local11 + 1] = local53; + } + } + } + + @OriginalMember(owner = "client!ni", name = "a", descriptor = "(ILclient!na;)I") + public static int method3218(@OriginalArg(1) JagString arg0) { + if (labels == null || arg0.length() == 0) { + return -1; + } + for (@Pc(20) int local20 = 0; local20 < labels.anInt5074; local20++) { + if (labels.aClass100Array153[local20].method3140(aClass100_538, aClass100_872).method3142(arg0)) { + return local20; + } + } + return -1; + } + + @OriginalMember(owner = "client!cn", name = "a", descriptor = "(BIIIIIIII)V") + public static void method959(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3, @OriginalArg(5) int arg4, @OriginalArg(6) int arg5, @OriginalArg(7) int arg6, @OriginalArg(8) int arg7) { + for (@Pc(11) int local11 = 0; local11 < labels.anInt5074; local11++) { + if (labels.method3890(local11)) { + @Pc(32) int local32 = labels.aShortArray73[local11] - originX; + @Pc(43) int local43 = originZ + length - labels.aShortArray72[local11] - 1; + @Pc(59) int local59 = arg0 + (arg3 - arg0) * (local32 - arg2) / (arg6 - arg2); + @Pc(64) int local64 = labels.method3894(local11); + @Pc(80) int local80 = (arg7 - arg1) * (local43 - arg5) / (arg4 - arg5) + arg1; + @Pc(82) int local82 = 16777215; + @Pc(84) WorldMapFont local84 = null; + if (local64 == 0) { + if ((double) zoom == 3.0D) { + local84 = font11; + } + if ((double) zoom == 4.0D) { + local84 = font12; + } + if ((double) zoom == 6.0D) { + local84 = font14; + } + if ((double) zoom >= 8.0D) { + local84 = font17; + } + } + if (local64 == 1) { + if ((double) zoom == 3.0D) { + local84 = font14; + } + if ((double) zoom == 4.0D) { + local84 = font17; + } + if ((double) zoom == 6.0D) { + local84 = font19; + } + if ((double) zoom >= 8.0D) { + local84 = font22; + } + } + if (local64 == 2) { + if ((double) zoom == 3.0D) { + local84 = font19; + } + local82 = 16755200; + if ((double) zoom == 4.0D) { + local84 = font22; + } + if ((double) zoom == 6.0D) { + local84 = font26; + } + if ((double) zoom >= 8.0D) { + local84 = font30; + } + } + if (labels.anIntArray444[local11] != -1) { + local82 = labels.anIntArray444[local11]; + } + if (local84 != null) { + @Pc(211) int local211 = Fonts.p11Full.splitParagraph(labels.aClass100Array153[local11], null, aClass100Array53); + local80 -= local84.method1503() * (local211 - 1) / 2; + local80 += local84.method1511() / 2; + for (@Pc(231) int local231 = 0; local231 < local211; local231++) { + @Pc(242) JagString local242 = aClass100Array53[local231]; + if (local211 - 1 > local231) { + local242.method3133(local242.length() - 4); + } + local84.renderStringCenter(local242, local59, local80, local82); + local80 += local84.method1503(); + } + } + } + } + } +} diff --git a/client/src/main/java/rt4/WorldMapFont.java b/client/src/main/java/rt4/WorldMapFont.java new file mode 100644 index 0000000..f6e09e0 --- /dev/null +++ b/client/src/main/java/rt4/WorldMapFont.java @@ -0,0 +1,333 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.Component; +import java.awt.Font; +import java.awt.*; +import java.awt.image.PixelGrabber; + +@OriginalClass("client!fd") +public final class WorldMapFont { + + @OriginalMember(owner = "client!fd", name = "d", descriptor = "Ljava/lang/String;") + public static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| " + 'Ä' + 'Ë' + 'Ï' + 'Ö' + 'Ü' + 'ä' + 'ë' + 'ï' + 'ö' + 'ü' + 'ÿ' + 'ß' + 'Á' + 'À' + 'É' + 'È' + 'Í' + 'Ì' + 'Ó' + 'Ò' + 'Ú' + 'Ù' + 'á' + 'à' + 'é' + 'è' + 'í' + 'ì' + 'ó' + 'ò' + 'ú' + 'ù' + 'Â' + 'Ê' + 'Î' + 'Ô' + 'Û' + 'â' + 'ê' + 'î' + 'ô' + 'û' + 'Æ' + 'æ'; + + @OriginalMember(owner = "client!fd", name = "e", descriptor = "I") + public static final int ALPHABET_SIZE = ALPHABET.length(); + + @OriginalMember(owner = "client!fd", name = "f", descriptor = "[I") + private static final int[] CHAR_INDEXES = new int[256]; + + @OriginalMember(owner = "client!fd", name = "c", descriptor = "I") + private int dataIndex; + + @OriginalMember(owner = "client!fd", name = "b", descriptor = "Z") + private boolean grayscale; + + @OriginalMember(owner = "client!fd", name = "a", descriptor = "[B") + private byte[] data = new byte[100000]; + + static { + for (@Pc(146) int local146 = 0; local146 < 256; local146++) { + @Pc(153) int local153 = ALPHABET.indexOf(local146); + if (local153 == -1) { + local153 = 74; + } + CHAR_INDEXES[local146] = local153 * 9; + } + } + + @OriginalMember(owner = "client!fd", name = "", descriptor = "(IZLjava/awt/Component;)V") + public WorldMapFont(@OriginalArg(0) int size, @OriginalArg(1) boolean arg1, @OriginalArg(2) Component component) { + this.dataIndex = ALPHABET_SIZE * 9; + this.grayscale = false; + @Pc(30) Font font = new Font("Helvetica", Font.BOLD, size); + @Pc(34) FontMetrics boldMetrics = component.getFontMetrics(font); + @Pc(36) int i; + for (i = 0; i < ALPHABET_SIZE; i++) { + this.preRenderGlyph(font, boldMetrics, ALPHABET.charAt(i), i, false); + } + if (this.grayscale) { + this.dataIndex = ALPHABET_SIZE * 9; + this.grayscale = false; + font = new Font("Helvetica", Font.PLAIN, size); + boldMetrics = component.getFontMetrics(font); + for (i = 0; i < ALPHABET_SIZE; i++) { + this.preRenderGlyph(font, boldMetrics, ALPHABET.charAt(i), i, false); + } + if (!this.grayscale) { + this.dataIndex = ALPHABET_SIZE * 9; + this.grayscale = false; + for (i = 0; i < ALPHABET_SIZE; i++) { + this.preRenderGlyph(font, boldMetrics, ALPHABET.charAt(i), i, true); + } + } + } + @Pc(121) byte[] data = new byte[this.dataIndex]; + for (@Pc(123) int j = 0; j < this.dataIndex; j++) { + data[j] = this.data[j]; + } + this.data = data; + } + + @OriginalMember(owner = "client!fd", name = "a", descriptor = "(Lclient!na;IIIZ)V") + private void renderString(@OriginalArg(0) JagString s, @OriginalArg(1) int x, @OriginalArg(2) int y, @OriginalArg(3) int color, @OriginalArg(4) boolean shadow) { + if (this.grayscale || color == 0) { + shadow = false; + } + for (@Pc(8) int i = 0; i < s.length(); i++) { + @Pc(20) int index = CHAR_INDEXES[s.charAt(i)]; + if (shadow) { + this.renderGlyph(index, x + 1, y, 1, this.data); + this.renderGlyph(index, x, y + 1, 1, this.data); + } + this.renderGlyph(index, x, y, color, this.data); + x += this.data[index + 7]; + } + } + + @OriginalMember(owner = "client!fd", name = "a", descriptor = "()I") + public final int method1503() { + return this.data[8] - 1; + } + + @OriginalMember(owner = "client!fd", name = "a", descriptor = "([I[BIIIIIII)V") + private void renderGlyphGrayscale(@OriginalArg(0) int[] dest, @OriginalArg(1) byte[] src, @OriginalArg(2) int color, @OriginalArg(3) int srcIndex, @OriginalArg(4) int destIndex, @OriginalArg(5) int w, @OriginalArg(6) int h, @OriginalArg(7) int destStride, @OriginalArg(8) int srcStride) { + for (@Pc(2) int y = -h; y < 0; y++) { + for (@Pc(7) int x = -w; x < 0; x++) { + @Pc(16) int intensity = src[srcIndex++] & 0xFF; + if (intensity <= 30) { + destIndex++; + } else if (intensity >= 230) { + dest[destIndex++] = color; + } else { + @Pc(32) int backgroundColor = dest[destIndex]; + dest[destIndex++] = ((color & 0xFF00FF) * intensity + (backgroundColor & 0xFF00FF) * (256 - intensity) & 0xFF00FF00) + ((color & 0xFF00) * intensity + (backgroundColor & 0xFF00) * (256 - intensity) & 0xFF0000) >> 8; + } + } + destIndex += destStride; + srcIndex += srcStride; + } + } + + @OriginalMember(owner = "client!fd", name = "a", descriptor = "(IIII[B)V") + private void renderGlyph(@OriginalArg(0) int index, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) byte[] src) { + @Pc(7) int local7 = arg1 + src[index + 5]; + @Pc(15) int local15 = arg2 - src[index + 6]; + @Pc(21) int width = src[index + 3]; + @Pc(27) int height = src[index + 4]; + @Pc(47) int srcIndex = src[index] * 16384 + src[index + 1] * 128 + src[index + 2]; + @Pc(53) int destIndex = local7 + local15 * SoftwareRaster.width; + @Pc(57) int destStride = SoftwareRaster.width - width; + @Pc(59) int srcStride = 0; + @Pc(66) int local66; + if (local15 < SoftwareRaster.clipTop) { + local66 = SoftwareRaster.clipTop - local15; + height -= local66; + local15 = SoftwareRaster.clipTop; + srcIndex += local66 * width; + destIndex += local66 * SoftwareRaster.width; + } + if (local15 + height >= SoftwareRaster.clipBottom) { + height -= local15 + height + 1 - SoftwareRaster.clipBottom; + } + if (local7 < SoftwareRaster.clipLeft) { + local66 = SoftwareRaster.clipLeft - local7; + width -= local66; + local7 = SoftwareRaster.clipLeft; + srcIndex += local66; + destIndex += local66; + srcStride = local66; + destStride += local66; + } + if (local7 + width >= SoftwareRaster.clipRight) { + local66 = local7 + width + 1 - SoftwareRaster.clipRight; + width -= local66; + srcStride += local66; + destStride += local66; + } + if (width <= 0 || height <= 0) { + return; + } + if (this.grayscale) { + this.renderGlyphGrayscale(SoftwareRaster.pixels, src, arg3, srcIndex, destIndex, width, height, destStride, srcStride); + } else { + this.renderGlyphMono(SoftwareRaster.pixels, src, arg3, srcIndex, destIndex, width, height, destStride, srcStride); + } + } + + @OriginalMember(owner = "client!fd", name = "b", descriptor = "([I[BIIIIIII)V") + private void renderGlyphMono(@OriginalArg(0) int[] arg0, @OriginalArg(1) byte[] arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8) { + @Pc(4) int local4 = -(arg5 >> 2); + @Pc(9) int local9 = -(arg5 & 0x3); + for (@Pc(12) int local12 = -arg6; local12 < 0; local12++) { + @Pc(16) int local16; + for (local16 = local4; local16 < 0; local16++) { + if (arg1[arg3++] == 0) { + arg4++; + } else { + arg0[arg4++] = arg2; + } + if (arg1[arg3++] == 0) { + arg4++; + } else { + arg0[arg4++] = arg2; + } + if (arg1[arg3++] == 0) { + arg4++; + } else { + arg0[arg4++] = arg2; + } + if (arg1[arg3++] == 0) { + arg4++; + } else { + arg0[arg4++] = arg2; + } + } + for (local16 = local9; local16 < 0; local16++) { + if (arg1[arg3++] == 0) { + arg4++; + } else { + arg0[arg4++] = arg2; + } + } + arg4 += arg7; + arg3 += arg8; + } + } + + @OriginalMember(owner = "client!fd", name = "b", descriptor = "(Lclient!na;IIIZ)V") + public final void renderStringCenter(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) { + @Pc(5) int local5 = this.getStringWidth(arg0) / 2; + @Pc(8) int local8 = this.method1511(); + if (arg1 - local5 <= SoftwareRaster.clipRight && (arg1 + local5 >= SoftwareRaster.clipLeft && (arg2 - local8 <= SoftwareRaster.clipBottom && arg2 >= 0))) { + this.renderString(arg0, arg1 - local5, arg2, arg3, true); + } + } + + @OriginalMember(owner = "client!fd", name = "a", descriptor = "(Ljava/awt/Font;Ljava/awt/FontMetrics;CIZ)V") + private void preRenderGlyph(@OriginalArg(0) Font arg0, @OriginalArg(1) FontMetrics arg1, @OriginalArg(2) char arg2, @OriginalArg(3) int arg3, @OriginalArg(4) boolean arg4) { + @Pc(3) int local3 = arg1.charWidth(arg2); + @Pc(5) int local5 = local3; + if (arg4) { + try { + if (arg2 == '/') { + arg4 = false; + } + if (arg2 == 'f' || arg2 == 't' || arg2 == 'w' || arg2 == 'v' || arg2 == 'k' || arg2 == 'x' || arg2 == 'y' || arg2 == 'A' || arg2 == 'V' || arg2 == 'W') { + local3++; + } + } catch (@Pc(45) Exception local45) { + } + } + @Pc(48) int local48 = arg1.getMaxAscent(); + @Pc(54) int local54 = arg1.getMaxAscent() + arg1.getMaxDescent(); + @Pc(57) int local57 = arg1.getHeight(); + @Pc(62) Image local62 = GameShell.canvas.createImage(local3, local54); + @Pc(65) Graphics local65 = local62.getGraphics(); + local65.setColor(Color.black); + local65.fillRect(0, 0, local3, local54); + local65.setColor(Color.white); + local65.setFont(arg0); + local65.drawString(arg2 + "", 0, local48); + if (arg4) { + local65.drawString(arg2 + "", 1, local48); + } + @Pc(111) int[] local111 = new int[local3 * local54]; + @Pc(123) PixelGrabber local123 = new PixelGrabber(local62, 0, 0, local3, local54, local111, 0, local3); + try { + local123.grabPixels(); + } catch (@Pc(128) Exception local128) { + } + local62.flush(); + @Pc(134) int local134 = 0; + @Pc(136) int local136 = 0; + @Pc(138) int local138 = local3; + @Pc(140) int local140 = local54; + @Pc(142) int local142; + @Pc(147) int local147; + @Pc(158) int local158; + label135: + for (local142 = 0; local142 < local54; local142++) { + for (local147 = 0; local147 < local3; local147++) { + local158 = local111[local147 + local142 * local3]; + if ((local158 & 0xFFFFFF) != 0) { + local136 = local142; + break label135; + } + } + } + label123: + for (local142 = 0; local142 < local3; local142++) { + for (local147 = 0; local147 < local54; local147++) { + local158 = local111[local142 + local147 * local3]; + if ((local158 & 0xFFFFFF) != 0) { + local134 = local142; + break label123; + } + } + } + label111: + for (local142 = local54 - 1; local142 >= 0; local142--) { + for (local147 = 0; local147 < local3; local147++) { + local158 = local111[local147 + local142 * local3]; + if ((local158 & 0xFFFFFF) != 0) { + local140 = local142 + 1; + break label111; + } + } + } + label99: + for (local142 = local3 - 1; local142 >= 0; local142--) { + for (local147 = 0; local147 < local54; local147++) { + local158 = local111[local142 + local147 * local3]; + if ((local158 & 0xFFFFFF) != 0) { + local138 = local142 + 1; + break label99; + } + } + } + this.data[arg3 * 9] = (byte) (this.dataIndex / 16384); + this.data[arg3 * 9 + 1] = (byte) (this.dataIndex / 128 & 0x7F); + this.data[arg3 * 9 + 2] = (byte) (this.dataIndex & 0x7F); + this.data[arg3 * 9 + 3] = (byte) (local138 - local134); + this.data[arg3 * 9 + 4] = (byte) (local140 - local136); + this.data[arg3 * 9 + 5] = (byte) local134; + this.data[arg3 * 9 + 6] = (byte) (local48 - local136); + this.data[arg3 * 9 + 7] = (byte) local5; + this.data[arg3 * 9 + 8] = (byte) local57; + for (local142 = local136; local142 < local140; local142++) { + for (local147 = local134; local147 < local138; local147++) { + local158 = local111[local147 + local142 * local3] & 0xFF; + if (local158 > 30 && local158 < 230) { + this.grayscale = true; + } + this.data[this.dataIndex++] = (byte) local158; + } + } + } + + @OriginalMember(owner = "client!fd", name = "a", descriptor = "(Lclient!na;)I") + private int getStringWidth(@OriginalArg(0) JagString arg0) { + @Pc(1) int local1 = 0; + for (@Pc(3) int local3 = 0; local3 < arg0.length(); local3++) { + if (arg0.charAt(local3) == 64 && local3 + 4 < arg0.length() && arg0.charAt(local3 + 4) == 64) { + local3 += 4; + } else if (arg0.charAt(local3) == 126 && local3 + 4 < arg0.length() && arg0.charAt(local3 + 4) == 126) { + local3 += 4; + } else { + local1 += this.data[CHAR_INDEXES[arg0.charAt(local3)] + 7]; + } + } + return local1; + } + + @OriginalMember(owner = "client!fd", name = "c", descriptor = "()I") + public final int method1511() { + return this.data[6]; + } +} diff --git a/client/src/main/java/rt4/client.java b/client/src/main/java/rt4/client.java new file mode 100644 index 0000000..7a77445 --- /dev/null +++ b/client/src/main/java/rt4/client.java @@ -0,0 +1,1740 @@ +package rt4; + +import com.jogamp.opengl.GL2; +import com.jogamp.opengl.util.GLReadBufferUtil; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; +import plugin.PluginRepository; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.net.Socket; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.charset.StandardCharsets; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.Random; + +@OriginalClass("client!client") +public final class client extends GameShell { + + @OriginalMember(owner = "client!dk", name = "j", descriptor = "[Lclient!en;") + public static final BufferedFile[] cacheIndexes = new BufferedFile[28]; + @OriginalMember(owner = "client!wa", name = "Eb", descriptor = "[Lclient!bg;") + public static final Js5CachedResourceProvider[] js5Providers = new Js5CachedResourceProvider[28]; + @OriginalMember(owner = "client!d", name = "S", descriptor = "Ljava/util/Random;") + public static final Random aRandom1 = new Random(); + @OriginalMember(owner = "client!nh", name = "fb", descriptor = "[I") + public static final int[] JS5_ARCHIVE_WEIGHTS = new int[]{4, 4, 1, 2, 6, 4, 2, 49, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; + @OriginalMember(owner = "client!si", name = "gb", descriptor = "Lclient!na;") + public static final JagString aClass100_974 = JagString.parse("
(X"); + @OriginalMember(owner = "client!sg", name = "e", descriptor = "Lclient!na;") + public static final JagString SETTINGS = JagString.parse("settings"); + @OriginalMember(owner = "client!km", name = "Mc", descriptor = "Lclient!na;") + public static final JagString LOGINSCREEN = JagString.parse("loginscreen"); + @OriginalMember(owner = "client!qk", name = "a", descriptor = "Lclient!na;") + public static final JagString aClass100_899 = JagString.parse("0(U"); + @OriginalMember(owner = "client!uh", name = "Y", descriptor = "Lclient!na;") + public static final JagString HUFFMAN_GROUP = JagString.parse("huffman"); + @OriginalMember(owner = "client!nb", name = "n", descriptor = "Lclient!na;") + public static final JagString DETAILS = JagString.parse("details"); + @OriginalMember(owner = "client!qk", name = "b", descriptor = "Lclient!na;") + public static final JagString aClass100_900 = JagString.parse("tbrefresh"); + @OriginalMember(owner = "client!al", name = "r", descriptor = "Lclient!na;") + public static final JagString aClass100_35 = JagString.parse("showVideoAd"); + @OriginalMember(owner = "client!a", name = "e", descriptor = "Lclient!na;") + public static JagString TITLE_SONG = JagString.parse("scape main"); + @OriginalMember(owner = "client!jm", name = "A", descriptor = "Lclient!na;") + static final JagString aClass100_603 = JagString.parse(""); + @OriginalMember(owner = "client!jm", name = "z", descriptor = "Lclient!na;") + public static JagString mainLoadSecondaryText = aClass100_603; + @OriginalMember(owner = "client!sg", name = "k", descriptor = "Lclient!ve;") + public static Js5 js5Archive23; + @OriginalMember(owner = "client!pb", name = "Q", descriptor = "I") + public static int worldListId = 1; + @OriginalMember(owner = "client!gj", name = "b", descriptor = "I") + public static int modeWhere = 0; + @OriginalMember(owner = "client!gg", name = "U", descriptor = "I") + public static int modeWhat = 0; + @OriginalMember(owner = "client!ud", name = "S", descriptor = "Z") + public static boolean advertSuppressed = false; + @OriginalMember(owner = "client!lb", name = "v", descriptor = "I") + public static int language = 0; + @OriginalMember(owner = "client!t", name = "x", descriptor = "Z") + public static boolean javaScript = false; + @OriginalMember(owner = "client!lk", name = "U", descriptor = "Z") + public static boolean objectTag = false; + @OriginalMember(owner = "client!vk", name = "n", descriptor = "I") + public static int game = 0; + @OriginalMember(owner = "client!wk", name = "w", descriptor = "I") + public static int country; + @OriginalMember(owner = "client!od", name = "n", descriptor = "Z") + public static boolean haveIe6 = false; + @OriginalMember(owner = "client!qi", name = "r", descriptor = "I") + public static int affiliate = 0; + @OriginalMember(owner = "client!dk", name = "h", descriptor = "Lclient!na;") + public static JagString settings = null; + @OriginalMember(owner = "client!rh", name = "j", descriptor = "Lclient!client;") + public static client instance; + @OriginalMember(owner = "client!ba", name = "D", descriptor = "Lclient!vh;") + public static AudioChannel musicChannel; + @OriginalMember(owner = "client!fk", name = "q", descriptor = "Lclient!uc;") + public static MouseWheel mouseWheel; + @OriginalMember(owner = "client!lh", name = "s", descriptor = "Lclient!vh;") + public static AudioChannel soundChannel; + @OriginalMember(owner = "client!id", name = "l", descriptor = "Lclient!jb;") + public static Js5NetQueue js5NetQueue; + @OriginalMember(owner = "client!gm", name = "T", descriptor = "Lclient!k;") + public static Js5CacheQueue js5CacheQueue; + @OriginalMember(owner = "client!nj", name = "f", descriptor = "Lclient!en;") + public static BufferedFile cacheData; + @OriginalMember(owner = "client!pf", name = "f", descriptor = "Lclient!en;") + public static BufferedFile cacheMasterIndex; + @OriginalMember(owner = "client!jg", name = "c", descriptor = "Lclient!en;") + public static BufferedFile uid; + @OriginalMember(owner = "client!tl", name = "d", descriptor = "I") + public static int gameState = 0; + @OriginalMember(owner = "client!id", name = "f", descriptor = "Z") + public static boolean clean = false; + @OriginalMember(owner = "client!bl", name = "P", descriptor = "I") + public static int js5ConnectDelay = 0; + @OriginalMember(owner = "client!wc", name = "c", descriptor = "I") + public static int defaultPort; + @OriginalMember(owner = "client!ee", name = "g", descriptor = "I") + public static int alternatePort; + @OriginalMember(owner = "client!ra", name = "s", descriptor = "I") + public static int port; + @OriginalMember(owner = "client!ud", name = "K", descriptor = "I") + public static int worldListDefaultPort; + @OriginalMember(owner = "client!r", name = "f", descriptor = "I") + public static int worldListPort; + @OriginalMember(owner = "client!v", name = "f", descriptor = "Lclient!al;") + public static Js5MasterIndex js5MasterIndex; + @OriginalMember(owner = "client!re", name = "B", descriptor = "Lclient!ve;") + public static Js5 js5Archive0; + @OriginalMember(owner = "client!ud", name = "J", descriptor = "Lclient!ve;") + public static Js5 js5Archive1; + @OriginalMember(owner = "client!wf", name = "g", descriptor = "Lclient!ve;") + public static Js5 js5Archive2; + @OriginalMember(owner = "client!dc", name = "z", descriptor = "Lclient!ve;") + public static Js5 js5Archive3; + @OriginalMember(owner = "client!uc", name = "c", descriptor = "Lclient!ve;") + public static Js5 js5Archive4; + @OriginalMember(owner = "client!ca", name = "Z", descriptor = "Lclient!ve;") + public static Js5 js5Archive5; + @OriginalMember(owner = "client!kc", name = "w", descriptor = "Lclient!ve;") + public static Js5 js5Archive6; + @OriginalMember(owner = "client!vl", name = "g", descriptor = "Lclient!ve;") + public static Js5 js5Archive7; + @OriginalMember(owner = "client!ra", name = "K", descriptor = "Lclient!ve;") + public static Js5 js5Archive8; + @OriginalMember(owner = "client!pk", name = "Z", descriptor = "Lclient!ve;") + public static Js5 js5Archive9; + @OriginalMember(owner = "client!ol", name = "U", descriptor = "Lclient!ve;") + public static Js5 js5Archive10; + @OriginalMember(owner = "client!rg", name = "z", descriptor = "Lclient!ve;") + public static Js5 js5Archive11; + @OriginalMember(owner = "client!bf", name = "s", descriptor = "Lclient!ve;") + public static Js5 js5Archive12; + @OriginalMember(owner = "client!ve", name = "l", descriptor = "Lclient!ve;") + public static Js5 js5Archive13; + @OriginalMember(owner = "client!kl", name = "r", descriptor = "Lclient!ve;") + public static Js5 js5Archive14; + @OriginalMember(owner = "client!km", name = "Oc", descriptor = "Lclient!ve;") + public static Js5 js5Archive15; + @OriginalMember(owner = "client!wl", name = "s", descriptor = "Lclient!ve;") + public static Js5 js5Archive16; + @OriginalMember(owner = "client!km", name = "Nc", descriptor = "Lclient!ve;") + public static Js5 js5Archive17; + @OriginalMember(owner = "client!nj", name = "l", descriptor = "Lclient!ve;") + public static Js5 js5Archive18; + @OriginalMember(owner = "client!ni", name = "k", descriptor = "Lclient!ve;") + public static Js5 js5Archive19; + @OriginalMember(owner = "client!ui", name = "cb", descriptor = "Lclient!ve;") + public static Js5 js5Archive20; + @OriginalMember(owner = "client!jh", name = "p", descriptor = "Lclient!ve;") + public static Js5 js5Archive21; + @OriginalMember(owner = "client!mf", name = "W", descriptor = "Lclient!ve;") + public static Js5 js5Archive22; + @OriginalMember(owner = "client!uj", name = "J", descriptor = "Lclient!ve;") + public static Js5 js5Archive24; + @OriginalMember(owner = "client!cd", name = "B", descriptor = "Lclient!ve;") + public static Js5 js5Archive25; + @OriginalMember(owner = "client!nd", name = "t", descriptor = "Lclient!ve;") + public static Js5 js5Archive26; + @OriginalMember(owner = "client!sf", name = "b", descriptor = "Lclient!ve;") + public static Js5 js5Archive27; + @OriginalMember(owner = "client!qc", name = "P", descriptor = "I") + public static int mainLoadPercentage = 10; + @OriginalMember(owner = "client!nc", name = "j", descriptor = "I") + public static int mainLoadState = 0; + @OriginalMember(owner = "client!li", name = "l", descriptor = "Lclient!ge;") + public static Cache masterCache; + @OriginalMember(owner = "client!li", name = "v", descriptor = "Lclient!va;") + public static MidiPcmStream musicStream; + @OriginalMember(owner = "client!qi", name = "C", descriptor = "Lclient!ei;") + public static MixerPcmStream soundStream; + @OriginalMember(owner = "client!ef", name = "p", descriptor = "Lclient!vj;") + public static PcmResampler resampler; + @OriginalMember(owner = "client!t", name = "F", descriptor = "I") + public static int js5PrevErrors = 0; + @OriginalMember(owner = "client!ld", name = "k", descriptor = "Ljava/lang/String;") + public static String worldListHostname; + @OriginalMember(owner = "client!hi", name = "g", descriptor = "I") + public static int worldListAlternatePort; + @OriginalMember(owner = "client!em", name = "v", descriptor = "Ljava/lang/String;") + public static String hostname; + @OriginalMember(owner = "client!vc", name = "db", descriptor = "[S") + public static short[] aShortArray88; + @OriginalMember(owner = "client!f", name = "T", descriptor = "[S") + public static short[] aShortArray19 = new short[256]; + @OriginalMember(owner = "client!sm", name = "l", descriptor = "[S") + public static short[] aShortArray74 = new short[256]; + @OriginalMember(owner = "client!vc", name = "bb", descriptor = "[S") + public static short[] aShortArray87 = new short[256]; + @OriginalMember(owner = "client!cm", name = "f", descriptor = "Lsignlink!im;") + public static PrivilegedRequest js5SocketRequest; + @OriginalMember(owner = "client!qk", name = "g", descriptor = "Lclient!ma;") + public static BufferedSocket js5Socket; + @OriginalMember(owner = "client!ac", name = "c", descriptor = "I") + public static int js5ConnectState = 0; + @OriginalMember(owner = "client!rj", name = "Y", descriptor = "J") + public static long js5ConnectTime; + @OriginalMember(owner = "client!nm", name = "Y", descriptor = "J") + public static long firstGc = 0L; + @OriginalMember(owner = "client!mj", name = "A", descriptor = "J") + public static long prevGc = 0L; + @OriginalMember(owner = "client!gj", name = "d", descriptor = "I") + public static int loop = 0; + @OriginalMember(owner = "client!wj", name = "e", descriptor = "Lclient!na;") + public static JagString mainLoadPrimaryText = null; + @OriginalMember(owner = "client!sj", name = "p", descriptor = "I") + public static int anInt5150 = 1; + @OriginalMember(owner = "client!cn", name = "B", descriptor = "I") + public static int anInt1196 = 1; + @OriginalMember(owner = "client!ah", name = "t", descriptor = "I") + public static int anInt986; + + @OriginalMember(owner = "client!client", name = "main", descriptor = "([Ljava/lang/String;)V") + public static void main(@OriginalArg(0) String[] arg0) { + try { + String configPath = GlobalConfig.EXTENDED_CONFIG_PATH; + boolean helpRequested = false; + + for (int i = 0; i < arg0.length; i++) { + if ("--config".equals(arg0[i]) && i + 1 < arg0.length) { + configPath = arg0[i + 1]; + i++; // Skip next argument since it's the config file path + } else if ("--help".equals(arg0[i])) { + helpRequested = true; + } + } + + if (helpRequested) { + System.out.println("Usage: java path-to-jar.jra [--config ] [--help]"); + System.out.println("Custom Options:"); + System.out.println(" --config Path to the configuration file."); + System.out.println(" --help Display this help message."); + System.out.println("\nDefault Arguments:"); + System.out.println(" worldListId: Identifier for the world list, usually an integer."); + System.out.println(" modeWhat: Operational mode, where 'live' is normal operation, 'rc' for release candidate, and 'wip' for work-in-progress."); + System.out.println(" language: Language setting, like 'english' or 'german'."); + System.out.println(" game: Game version identifier, e.g., 'game0' or 'game1'."); + System.out.println("\nThese arguments are kept for authentic purposes, reflecting original application parameters."); + return; + } + + System.out.println("Loading config path " + configPath); + GlobalJsonConfig.load(configPath); + } catch (Exception ex) { + ex.printStackTrace(); + } + try { + if (arg0.length != 4) { + arg0 = new String[4]; + arg0[0] = "1"; + arg0[1] = "live"; + arg0[2] = "english"; + arg0[3] = "game0"; + // Static131.method2577("argument count"); + } + @Pc(15) int local15 = -1; + worldListId = Integer.parseInt(arg0[0]); + if (GlobalJsonConfig.instance != null) { + worldListId = GlobalJsonConfig.instance.world; + } + modeWhere = 2; + if (arg0[1].equals("live")) { + modeWhat = 0; + } else if (arg0[1].equals("rc")) { + modeWhat = 1; + } else if (arg0[1].equals("wip")) { + modeWhat = 2; + } else { + printUsage("modewhat"); + } + advertSuppressed = false; + try { + @Pc(63) byte[] local63 = arg0[2].getBytes(StandardCharsets.ISO_8859_1); + local15 = LangUtils.method2053(JagString.decodeString(local63, local63.length, 0)); + } catch (@Pc(74) Exception local74) { + } + if (local15 != -1) { + language = local15; + } else if (arg0[2].equals("english")) { + language = 0; + } else if (arg0[2].equals("german")) { + language = 1; + } else { + printUsage("language"); + } + LocalizedText.setLanguage(language); + javaScript = false; + objectTag = false; + if (arg0[3].equals("game0")) { + game = 0; + } else if (arg0[3].equals("game1")) { + game = 1; + } else { + printUsage("game"); + } + country = 0; + haveIe6 = false; + affiliate = 0; + settings = JagString.EMPTY; + @Pc(146) client c = new client(); + instance = c; + c.startApplication(modeWhat + 32, "runescape"); + GameShell.frame.setLocationRelativeTo(null); + GameShell.frame.setSize(1024, 768); // set a reasonable size by default + } catch (@Pc(167) Exception ex) { + TracingException.report(null, ex); + } + } + + @OriginalMember(owner = "client!kd", name = "a", descriptor = "(Ljava/lang/String;B)V") + public static void printUsage(@OriginalArg(0) String arg0) { + System.out.println("Bad " + arg0 + ", Usage: worldid, , , "); + System.exit(1); + } + + @OriginalMember(owner = "client!re", name = "a", descriptor = "(I)V") + public static void clean() { + FloTypeList.clean(); + FluTypeList.clean(); + IdkTypeList.clean(); + LocTypeList.clean(); + NpcTypeList.clean(); + ObjTypeList.clean(); + SeqTypeList.clean(); + SpotAnimTypeList.clean(); + VarbitTypeList.clean(); + VarpTypeList.clean(); + BasTypeList.clean(); + MsiTypeList.clean(); + LightTypeList.clean(); + CursorTypeList.clean(); + PlayerAppearance.clean(); + Component.clean(); + HintArrowManager.clean(); + ShadowModelList.clean(); + HitBarList.hitBars.clean(5); + FontMetricsList.fontMetrics.clean(5); + } + + @OriginalMember(owner = "client!pl", name = "a", descriptor = "(II)V") + public static void setGameState(@OriginalArg(0) int arg0) { + if(arg0 == 30) { + PluginRepository.OnLogin(); + } + if (gameState == arg0) { + return; + } + if (gameState == 0) { + LoadingBarAwt.clear(); + } + if (arg0 == 40) { + LoginManager.clear(); + } + @Pc(37) boolean local37 = arg0 == 5 || arg0 == 10 || arg0 == 28; + if (arg0 != 40 && Protocol.aClass95_4 != null) { + Protocol.aClass95_4.close(); + Protocol.aClass95_4 = null; + } + if (arg0 == 25 || arg0 == 28) { + LoginManager.anInt5804 = 0; + anInt5150 = 1; + LoginManager.loadingScreenState = 0; + anInt1196 = 1; + LoginManager.mapFilesMissingCount = 0; + WorldMap.clear(true); + } + if (arg0 == 25 || arg0 == 10) { + topBannerRefresh(); + } + if (arg0 == 5) { + TitleScreen.load(js5Archive8); + } else { + TitleScreen.clear(); + } + @Pc(106) boolean local106 = gameState == 5 || gameState == 10 || gameState == 28; + if (local106 != local37) { + if (local37) { + MusicPlayer.groupId = MusicPlayer.titleSong; + if (Preferences.musicVolume == 0) { + MidiPlayer.playFadeOut(); + } else { + MidiPlayer.playFadeOut(MusicPlayer.titleSong, js5Archive6, 255); + } + js5NetQueue.writeLoggedIn(false); + } else { + MidiPlayer.playFadeOut(); + js5NetQueue.writeLoggedIn(true); + } + } + if (GlRenderer.enabled && (arg0 == 25 || arg0 == 28 || arg0 == 40)) { + GlRenderer.draw(); + } + gameState = arg0; + } + + @OriginalMember(owner = "client!al", name = "a", descriptor = "(ZZZIZ)Lclient!ve;") + public static Js5 createJs5(@OriginalArg(0) boolean discardPacked, @OriginalArg(1) boolean arg1, @OriginalArg(2) boolean discardUnpacked, @OriginalArg(3) int archive) { + @Pc(7) Cache cache = null; + if (cacheData != null) { + cache = new Cache(archive, cacheData, cacheIndexes[archive], 1000000); + } + js5Providers[archive] = js5MasterIndex.getResourceProvider(archive, masterCache, cache); + if (arg1) { + js5Providers[archive].prefetchAll(); + } + return new Js5(js5Providers[archive], discardPacked, discardUnpacked); + } + + @OriginalMember(owner = "client!je", name = "h", descriptor = "(I)V") + public static void unloadSoft() { + FloTypeList.removeSoft(); + FluTypeList.removeSoft(); + IdkTypeList.removeSoft(); + LocTypeList.removeSoft(); + NpcTypeList.removeSoft(); + ObjTypeList.removeSoft(); + SeqTypeList.removeSoft(); + SpotAnimTypeList.removeSoft(); + VarbitTypeList.removeSoft(); + VarpTypeList.removeSoft(); + BasTypeList.removeSoft(); + MsiTypeList.removeSoft(); + LightTypeList.removeSoft(); + CursorTypeList.removeSoft(); + PlayerAppearance.removeSoft(); + Component.removeSoft(); + HintArrowManager.removeSoft(); + ShadowModelList.removeSoft(); + HitBarList.hitBars.removeSoft(); + FontMetricsList.fontMetrics.removeSoft(); + } + + @OriginalMember(owner = "client!rj", name = "f", descriptor = "(B)V") + public static void unload() { + FloTypeList.clear(); + FluTypeList.clear(); + IdkTypeList.clear(); + LocTypeList.clear(); + NpcTypeList.clear(); + ObjTypeList.clear(); + SeqTypeList.clear(); + SpotAnimTypeList.clear(); + VarbitTypeList.clear(); + VarpTypeList.clear(); + BasTypeList.clear(); + MsiTypeList.clear(); + LightTypeList.clear(); + CursorTypeList.clear(); + PlayerAppearance.clear(); + Component.clear(); + if (modeWhat != 0) { + for (@Pc(54) int i = 0; i < Player.aByteArrayArray8.length; i++) { + Player.aByteArrayArray8[i] = null; + } + Player.anInt2863 = 0; + } + HintArrowManager.clear(); + ShadowModelList.clear(); + FontMetricsList.fontMetrics.clear(); + if (!GlRenderer.enabled) { + ((Js5GlTextureProvider) Rasteriser.textureProvider).clear(); + } + ClientScriptList.scripts.clear(); + js5Archive0.discardUnpacked(); + js5Archive1.discardUnpacked(); + js5Archive3.discardUnpacked(); + js5Archive4.discardUnpacked(); + js5Archive5.discardUnpacked(); + js5Archive6.discardUnpacked(); + js5Archive7.discardUnpacked(); + js5Archive8.discardUnpacked(); + js5Archive10.discardUnpacked(); + js5Archive11.discardUnpacked(); + js5Archive12.discardUnpacked(); + HitBarList.hitBars.clear(); + } + + @OriginalMember(owner = "client!id", name = "b", descriptor = "(I)V") + public static void audioLoop() { + if (soundChannel != null) { + soundChannel.loop(); + } + if (musicChannel != null) { + musicChannel.loop(); + } + } + + @OriginalMember(owner = "client!la", name = "a", descriptor = "(Lclient!wa;Z)V") + public static void writeUid(@OriginalArg(0) Buffer arg0) { + @Pc(15) byte[] local15 = new byte[24]; + if (uid != null) { + try { + uid.seek(0L); + uid.read(local15); + @Pc(28) int local28; + for (local28 = 0; local28 < 24 && local15[local28] == 0; local28++) { + } + if (local28 >= 24) { + throw new IOException(); + } + } catch (@Pc(55) Exception local55) { + for (@Pc(57) int local57 = 0; local57 < 24; local57++) { + local15[local57] = -1; + } + } + } + arg0.pdata(local15, 24); + } + + public void saveScreenshot(String filename, String... subfolders) { + String homeDirOverride = System.getProperty("clientHomeOverride"); + String homeDir = null; + String osNameRaw = ""; + String osName = ""; + try { + osNameRaw = System.getProperty("os.name"); + } catch (Exception local48) { + osNameRaw = "Unknown"; + } + osName = osNameRaw.toLowerCase(); + if (homeDirOverride != null) { + homeDir = homeDirOverride; + } else { + try { + if (homeDir == null) + homeDir = System.getProperty("user.home") + File.separatorChar; + + if (osName.startsWith("linux")) { + String xdgHome = System.getenv("XDG_DATA_HOME"); + + if (xdgHome != null) { + homeDir = xdgHome + "/2009scape/"; + } else { + homeDir += ".local/share/2009scape/"; + } + } else if (osName.startsWith("mac")) { + homeDir += "Library/Application Support/2009scape/"; + } else if (osName.startsWith("windows")) { + homeDir += "2009scape\\"; + } + } catch (Exception ex) { + } + } + + String subfolderPath = String.join(File.separator, subfolders); + if (!subfolderPath.isEmpty()) { + subfolderPath += File.separator; + } + + File outputFolder = new File(homeDir + File.separatorChar + "screenshots" + File.separatorChar + subfolderPath); + if (!outputFolder.exists()){ + outputFolder.mkdirs(); + } + + try { + Window window = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow(); + if (window == null) { + return; + } + Point point = window.getLocationOnScreen(); + int x = (int) point.getX(); + int y = (int) point.getY(); + int w = window.getWidth(); + int h = window.getHeight(); + Robot robot = new Robot(window.getGraphicsConfiguration().getDevice()); + Rectangle captureSize = new Rectangle(x, y, w, h); + BufferedImage image = robot.createScreenCapture(captureSize); + File outputFile = new File(outputFolder, filename); + ImageIO.write(image, "png", outputFile); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @OriginalMember(owner = "client!lb", name = "a", descriptor = "(Z)V") + public static void method2721() { + SceneGraph.clear(); + MiniMap.sprite = null; + LightingManager.anInt2875 = -1; + unload(); + DeadClass.cache.clear(); + LocType.aClass139_1 = new LocEntity(); + ((Js5GlTextureProvider) Rasteriser.textureProvider).clear(); + LightingManager.lightCount = 0; + LightingManager.lights = new Light[255]; + GlModel.method4120(); + ShadowManager.method4203(); + Sprites.clear(); + WorldMap.clear(false); + TitleScreen.clear(); + for (@Pc(39) int local39 = 0; local39 < 2048; local39++) { + @Pc(46) Player player = PlayerList.players[local39]; + if (player != null) { + player.attachment = null; + } + } + if (GlRenderer.enabled) { + ShadowManager.method4201(); + ParticleSystem.load(); + } + Fonts.load(js5Archive13, js5Archive8); + Sprites.load(js5Archive8); + LoginManager.aClass3_Sub2_Sub1_10 = null; + LoginManager.aClass3_Sub2_Sub1_1 = null; + LoginManager.aClass3_Sub2_Sub1_6 = null; + LoginManager.aClass3_Sub2_Sub1_8 = null; + LoginManager.aClass3_Sub2_Sub1_9 = null; + if (gameState == 5) { + TitleScreen.load(js5Archive8); + } + if (gameState == 10) { + InterfaceList.method1596(false); + } + if (gameState == 30) { + setGameState(25); + } + } + + @OriginalMember(owner = "client!tk", name = "a", descriptor = "(Z)V") + public static void method4221() { + Protocol.anInt4762 = 0; + Protocol.prevFocus = true; + Mouse.prevClickTime = 0L; + MouseRecorder.instance.samples = 0; + focus = true; + ReflectionCheck.clear(); + Protocol.opcode4 = -1; + Protocol.opcode3 = -1; + Protocol.opcode = -1; + Protocol.anInt5775 = 0; + Player.rebootTimer = 0; + Protocol.outboundBuffer.offset = 0; + Protocol.opcode2 = -1; + LoginManager.anInt1862 = 0; + Protocol.inboundBuffer.offset = 0; + @Pc(3506) int local3506; + for (local3506 = 0; local3506 < MiniMap.hintMapMarkers.length; local3506++) { + MiniMap.hintMapMarkers[local3506] = null; + } + MiniMenu.size = 0; + Cs1ScriptRunner.aBoolean108 = false; + Mouse.setIdleLoops(0); + for (local3506 = 0; local3506 < 100; local3506++) { + Chat.messages[local3506] = null; + } + MiniMenu.anInt5014 = 0; + Camera.anInt3291 = (int) (Math.random() * 100.0D) - 50; + LoginManager.mapFlagZ = 0; + Camera.yawTarget = (int) (Math.random() * 20.0D) - 10 & 0x7FF; + LightingManager.anInt2875 = -1; + PlayerList.size = 0; + MiniMap.state = 0; + Camera.anInt4774 = (int) (Math.random() * 110.0D) - 55; + MiniMenu.aBoolean302 = false; + MiniMap.anInt4130 = (int) (Math.random() * 30.0D) - 20; + SoundPlayer.size = 0; + LoginManager.mapFlagX = 0; + MiniMap.anInt1814 = (int) (Math.random() * 120.0D) - 60; + Chat.size = 0; + Camera.anInt5161 = (int) (Math.random() * 80.0D) - 40; + NpcList.size = 0; + for (local3506 = 0; local3506 < 2048; local3506++) { + PlayerList.players[local3506] = null; + PlayerList.appearanceCache[local3506] = null; + } + for (local3506 = 0; local3506 < 32768; local3506++) { + NpcList.npcs[local3506] = null; + } + PlayerList.self = PlayerList.players[2047] = new Player(); + SceneGraph.projectiles.clear(); + SceneGraph.spotanims.clear(); + if (SceneGraph.objStacks != null) { + for (local3506 = 0; local3506 < 4; local3506++) { + for (@Pc(3663) int local3663 = 0; local3663 < 104; local3663++) { + for (@Pc(3670) int local3670 = 0; local3670 < 104; local3670++) { + SceneGraph.objStacks[local3506][local3663][local3670] = null; + } + } + } + } + ChangeLocRequest.queue = new LinkedList(); + FriendsList.state = 0; + FriendsList.size = 0; + VarpDomain.reset(); + DelayedStateChange.clear(); + Camera.anInt5230 = 0; + Camera.anInt5217 = 0; + Camera.anInt5765 = 0; + Camera.anInt5203 = 0; + Camera.anInt4232 = 0; + Camera.anInt5375 = 0; + Camera.anInt1744 = 0; + Camera.anInt5449 = 0; + Camera.anInt4612 = 0; + Camera.anInt5225 = 0; + for (local3506 = 0; local3506 < VarcDomain.varcs.length; local3506++) { + VarcDomain.varcs[local3506] = -1; + } + if (InterfaceList.topLevelInterface != -1) { + InterfaceList.method2275(InterfaceList.topLevelInterface); + } + for (@Pc(3755) ComponentPointer local3755 = (ComponentPointer) InterfaceList.openInterfaces.head(); local3755 != null; local3755 = (ComponentPointer) InterfaceList.openInterfaces.next()) { + InterfaceList.closeInterface(true, local3755); + } + InterfaceList.topLevelInterface = -1; + InterfaceList.openInterfaces = new HashTable(8); + InterfaceList.method1287(); + Cs1ScriptRunner.aClass13_10 = null; + Cs1ScriptRunner.aBoolean108 = false; + MiniMenu.size = 0; + PlayerAppearance.DEFAULT.set(new int[]{0, 0, 0, 0, 0}, -1, false, null, -1); + for (local3506 = 0; local3506 < 8; local3506++) { + Player.options[local3506] = null; + Player.secondaryOptions[local3506] = false; + Player.cursors[local3506] = -1; + } + Inv.clear(); + ScriptRunner.aBoolean43 = true; + for (local3506 = 0; local3506 < 100; local3506++) { + InterfaceList.aBooleanArray100[local3506] = true; + } + ClanChat.size = 0; + ClanChat.members = null; + ClanChat.name = null; + for (local3506 = 0; local3506 < 6; local3506++) { + StockMarketManager.offers[local3506] = new StockMarketOffer(); + } + for (local3506 = 0; local3506 < 25; local3506++) { + PlayerSkillXpTable.boostedLevels[local3506] = 0; + PlayerSkillXpTable.baseLevels[local3506] = 0; + PlayerSkillXpTable.experience[local3506] = 0; + } + if (GlRenderer.enabled) { + FogManager.setInstantFade(); + } + Protocol.aBoolean228 = true; + Protocol.verifyId = 0; + MiniMenu.walkText = LocalizedText.WALKHERE; + ScriptRunner.neverRemoveRoofs = false; + aShortArray88 = aShortArray19 = aShortArray74 = aShortArray87 = new short[256]; + LoginManager.method4637(); + InterfaceList.aBoolean298 = false; + ClientProt.sendWindowDetails(); + } + + @OriginalMember(owner = "client!rc", name = "d", descriptor = "(I)V") + public static void method930() { + if (musicChannel != null) { + musicChannel.quit(); + } + if (soundChannel != null) { + soundChannel.quit(); + } + AudioChannel.init(Preferences.stereo); + musicChannel = AudioChannel.create(GlobalConfig.AUDIO_SAMPLE_RATE, signLink, canvas, 0); + musicChannel.setStream(musicStream); + soundChannel = AudioChannel.create(2048, signLink, canvas, 1); + soundChannel.setStream(soundStream); + } + + @OriginalMember(owner = "client!ag", name = "j", descriptor = "(I)V") + public static void method84() { + SceneGraph.clear(); + for (@Pc(9) int local9 = 0; local9 < 4; local9++) { + PathFinder.collisionMaps[local9].clear(); + } + System.gc(); + } + + @OriginalMember(owner = "client!jj", name = "a", descriptor = "(Z)V") + public static void topBannerRefresh() { + if (!advertSuppressed && modeWhere != 2) { + try { + aClass100_900.browserControlCall(instance); + } catch (@Pc(26) Throwable local26) { + } + } + } + + @OriginalMember(owner = "client!gn", name = "a", descriptor = "(Z)Z") + public static boolean showVideoAd() { + if (objectTag) { + try { + aClass100_35.browserControlCall(signLink.applet); + return true; + } catch (@Pc(14) Throwable local14) { + } + } + return false; + } + + @OriginalMember(owner = "client!client", name = "f", descriptor = "(I)V") + @Override + protected final void mainRedraw() { + if(DisplayMode.resizableSD && !GlRenderer.enabled){ + GameShell.fullRedraw = true; + InterfaceList.fullRedrawAllInterfaces(); + } + if (gameState == 1000) { + return; + } + @Pc(15) boolean local15 = MidiPlayer.method2699(); + if (local15 && MidiPlayer.jingle && musicChannel != null) { + musicChannel.method3570(); + } + if ((gameState == 30 || gameState == 10) && (GameShell.replaceCanvas || DisplayMode.aLong89 != 0L && DisplayMode.aLong89 < MonotonicClock.currentTimeMillis())) { + DisplayMode.setWindowMode(GameShell.replaceCanvas, DisplayMode.getWindowMode(), Preferences.fullScreenWidth, Preferences.fullScreenHeight); + } + @Pc(80) int local80; + @Pc(84) int local84; + if (GameShell.fullScreenFrame == null) { + @Pc(65) Container local65; + if (GameShell.fullScreenFrame != null) { + local65 = GameShell.fullScreenFrame; + } else if (GameShell.frame == null) { + local65 = GameShell.signLink.applet; + } else { + local65 = GameShell.frame; + } + local80 = local65.getSize().width; + local84 = local65.getSize().height; + if (local65 == GameShell.frame) { + @Pc(90) Insets local90 = GameShell.frame.getInsets(); + local80 -= local90.right + local90.left; + local84 -= local90.top + local90.bottom; + } + if (local80 != GameShell.frameWidth || local84 != GameShell.frameHeight) { + GameShell.method3662(); + DisplayMode.aLong89 = MonotonicClock.currentTimeMillis() + 500L; + } + } + if (GameShell.fullScreenFrame != null && !GameShell.focus && (gameState == 30 || gameState == 10)) { + DisplayMode.setWindowMode(false, Preferences.favoriteWorlds, -1, -1); + } + @Pc(158) boolean local158 = false; + if (GameShell.fullRedraw) { + local158 = true; + GameShell.fullRedraw = false; + } + if (local158) { + GameShell.method2704(); + } + if (GlRenderer.enabled) { + for (local80 = 0; local80 < 100; local80++) { + InterfaceList.aBooleanArray100[local80] = true; + } + } + if (gameState == 0) { + LoadingBarAwt.render(null, local158, mainLoadSecondaryText, mainLoadPercentage); + } else if (gameState == 5) { + LoadingBar.render(false, Fonts.b12Full); + } else if (gameState == 10) { + InterfaceList.method2460(); + } else if (gameState == 25 || gameState == 28) { + if (LoginManager.loadingScreenState == 1) { + if (anInt5150 < LoginManager.mapFilesMissingCount) { + anInt5150 = LoginManager.mapFilesMissingCount; + } + local80 = (anInt5150 - LoginManager.mapFilesMissingCount) * 50 / anInt5150; + Fonts.drawTextOnScreen(false, JagString.concatenate(new JagString[]{LocalizedText.LOADING, aClass100_974, JagString.parseInt(local80), Cs1ScriptRunner.aClass100_80})); + } else if (LoginManager.loadingScreenState == 2) { + if (anInt1196 < LoginManager.anInt5804) { + anInt1196 = LoginManager.anInt5804; + } + local80 = (anInt1196 - LoginManager.anInt5804) * 50 / anInt1196 + 50; + Fonts.drawTextOnScreen(false, JagString.concatenate(new JagString[]{LocalizedText.LOADING, aClass100_974, JagString.parseInt(local80), Cs1ScriptRunner.aClass100_80})); + } else { + Fonts.drawTextOnScreen(false, LocalizedText.LOADING); + } + } else if (gameState == 30) { + LoginManager.method1841(); + } else if (gameState == 40) { + Fonts.drawTextOnScreen(false, JagString.concatenate(new JagString[]{LocalizedText.CONLOST, JagString.aClass100_556, LocalizedText.ATTEMPT_TO_REESTABLISH})); + } + if (GlRenderer.enabled && gameState != 0) { + GlRenderer.swapBuffers(); + for (local80 = 0; local80 < InterfaceList.rectangles; local80++) { + InterfaceList.rectangleRedraw[local80] = false; + } + } else { + @Pc(388) Graphics local388; + if ((gameState == 30 || gameState == 10) && Cheat.rectDebug == 0 && !local158) { + try { + local388 = GameShell.canvas.getGraphics(); + for (local84 = 0; local84 < InterfaceList.rectangles; local84++) { + if (InterfaceList.rectangleRedraw[local84]) { + SoftwareRaster.frameBuffer.drawAt(InterfaceList.rectangleWidth[local84], InterfaceList.rectangleX[local84], InterfaceList.rectangleHeight[local84], local388, InterfaceList.rectangleY[local84]); + InterfaceList.rectangleRedraw[local84] = false; + } + } + } catch (@Pc(423) Exception local423) { + GameShell.canvas.repaint(); + } + } else if (gameState != 0) { + try { + local388 = GameShell.canvas.getGraphics(); + SoftwareRaster.frameBuffer.draw(local388); + for (local84 = 0; local84 < InterfaceList.rectangles; local84++) { + InterfaceList.rectangleRedraw[local84] = false; + } + } catch (@Pc(453) Exception local453) { + GameShell.canvas.repaint(); + } + } + } + if (clean) { + clean(); + } + if (Preferences.safeMode && gameState == 10 && InterfaceList.topLevelInterface != -1) { + Preferences.safeMode = false; + Preferences.write(GameShell.signLink); + } + PluginRepository.LateDraw(); + } + + @OriginalMember(owner = "client!client", name = "c", descriptor = "(B)V") + @Override + protected final void mainQuit() { + if (GlRenderer.enabled) { + GlRenderer.quit(); + } + if (GameShell.fullScreenFrame != null) { + DisplayMode.exitFullScreen(GameShell.fullScreenFrame, GameShell.signLink); + GameShell.fullScreenFrame = null; + } + if (GameShell.signLink != null) { + GameShell.signLink.unloadGlNatives(this.getClass()); + } + if (MouseRecorder.instance != null) { + MouseRecorder.instance.running = false; + } + MouseRecorder.instance = null; + if (Protocol.socket != null) { + Protocol.socket.close(); + Protocol.socket = null; + } + Keyboard.stop(GameShell.canvas); + Mouse.stop(GameShell.canvas); + if (mouseWheel != null) { + mouseWheel.stop(GameShell.canvas); + } + Keyboard.quit(); + Mouse.quit(); + mouseWheel = null; + if (musicChannel != null) { + musicChannel.quit(); + } + if (soundChannel != null) { + soundChannel.quit(); + } + js5NetQueue.quit(); + js5CacheQueue.quit(); + try { + if (cacheData != null) { + cacheData.method1455(); + } + if (cacheIndexes != null) { + for (@Pc(95) int local95 = 0; local95 < cacheIndexes.length; local95++) { + if (cacheIndexes[local95] != null) { + cacheIndexes[local95].method1455(); + } + } + } + if (cacheMasterIndex != null) { + cacheMasterIndex.method1455(); + } + if (uid != null) { + uid.method1455(); + } + } catch (@Pc(129) IOException local129) { + } + } + + @OriginalMember(owner = "client!client", name = "init", descriptor = "()V") + @Override + public final void init() { + if (!this.isHostnameValid()) { + return; + } + worldListId = Integer.parseInt(this.getParameter("worldid")); + modeWhere = Integer.parseInt(this.getParameter("modewhere")); + if (modeWhere < 0 || modeWhere > 1) { + modeWhere = 0; + } + modeWhat = Integer.parseInt(this.getParameter("modewhat")); + if (modeWhat < 0 || modeWhat > 2) { + modeWhat = 0; + } + @Pc(50) String local50 = this.getParameter("advertsuppressed"); + advertSuppressed = local50 != null && local50.equals("1"); + try { + language = Integer.parseInt(this.getParameter("lang")); + } catch (@Pc(69) Exception local69) { + language = 0; + } + LocalizedText.setLanguage(language); + @Pc(78) String local78 = this.getParameter("objecttag"); + javaScript = local78 != null && local78.equals("1"); + @Pc(94) String local94 = this.getParameter("js"); + objectTag = local94 != null && local94.equals("1"); + @Pc(111) String local111 = this.getParameter("game"); + if (local111 != null && local111.equals("1")) { + game = 1; + } else { + game = 0; + } + try { + affiliate = Integer.parseInt(this.getParameter("affid")); + } catch (@Pc(130) Exception local130) { + affiliate = 0; + } + settings = SETTINGS.fromParameters(this); + if (settings == null) { + settings = JagString.EMPTY; + } + @Pc(146) String local146 = this.getParameter("country"); + if (local146 != null) { + try { + country = Integer.parseInt(local146); + } catch (@Pc(153) Exception local153) { + country = 0; + } + } + @Pc(159) String local159 = this.getParameter("haveie6"); + haveIe6 = local159 != null && local159.equals("1"); + instance = this; + this.startApplet(modeWhat + 32); + } + + @OriginalMember(owner = "client!client", name = "g", descriptor = "(I)V") + @Override + protected final void mainInit() { + GameShell.method3662(); + js5CacheQueue = new Js5CacheQueue(); + js5NetQueue = new Js5NetQueue(); + + if (modeWhat != 0) { + Player.aByteArrayArray8 = new byte[50][]; + } + + Preferences.read(GameShell.signLink); + + if (modeWhere == 0) { + worldListHostname = GlobalConfig.DEFAULT_HOSTNAME; // this.getCodeBase().getHost(); + worldListAlternatePort = GlobalConfig.ALTERNATE_PORT + 1; + worldListDefaultPort = GlobalConfig.DEFAULT_PORT + 1; + } else if (modeWhere == 1) { + worldListHostname = GlobalConfig.DEFAULT_HOSTNAME; // this.getCodeBase().getHost(); + worldListAlternatePort = GlobalConfig.ALTERNATE_PORT + worldListId; + worldListDefaultPort = GlobalConfig.DEFAULT_PORT + worldListId; + } else if (modeWhere == 2) { + worldListHostname = GlobalConfig.DEFAULT_HOSTNAME; // "127.0.0.1"; + worldListAlternatePort = GlobalConfig.ALTERNATE_PORT + worldListId; + worldListDefaultPort = GlobalConfig.DEFAULT_PORT + worldListId; + } + + if (GlobalJsonConfig.instance != null) { + worldListHostname = GlobalJsonConfig.instance.ip_address; + worldListAlternatePort = GlobalJsonConfig.instance.server_port + worldListId; + worldListDefaultPort = GlobalJsonConfig.instance.server_port; + } + + if (game == 1) { + Cheat.shiftClick = true; + FogManager.defaultLightColorRgb = 16777215; + FogManager.defaulFogColorRgb = 0; + PlayerAppearance.destinationBodyColors = PlayerAppearance.GAME1_DESTINATION_BODY_COLORS; + PlayerAppearance.destinationSkinColors = PlayerAppearance.GAME1_DESTINATION_SKIN_COLORS; + PlayerAppearance.aShortArray65 = PlayerAppearance.GAME1_SOURCE_BODY_COLORS; + PlayerAppearance.aShortArray41 = PlayerAppearance.GAME1_SOURCE_SKIN_COLORS; + } else { + PlayerAppearance.destinationBodyColors = PlayerAppearance.GAME0_DESTINATION_BODY_COLORS; + PlayerAppearance.aShortArray41 = PlayerAppearance.GAME0_SOURCE_SKIN_COLORS; + PlayerAppearance.destinationSkinColors = PlayerAppearance.GAME0_DESTINATION_SKIN_COLORS; + PlayerAppearance.aShortArray65 = PlayerAppearance.GAME0_SOURCE_BODY_COLORS; + } + + alternatePort = worldListAlternatePort; + defaultPort = worldListDefaultPort; + hostname = worldListHostname; + worldListPort = worldListDefaultPort; + aShortArray88 = aShortArray19 = aShortArray74 = aShortArray87 = new short[256]; + port = worldListPort; + if ((SignLink.anInt5928 == 3 && modeWhere != 2) || GlobalConfig.SELECT_DEFAULT_WORLD) { + Player.worldId = worldListId; + } + + Keyboard.init(); + Keyboard.start(GameShell.canvas); + Mouse.start(GameShell.canvas); + mouseWheel = MouseWheel.create(); + if (mouseWheel != null) { + mouseWheel.start(GameShell.canvas); + } + anInt986 = SignLink.anInt5928; + try { + if (GameShell.signLink.cacheData != null) { + cacheData = new BufferedFile(GameShell.signLink.cacheData, 5200, 0); + for (@Pc(162) int i = 0; i < 28; i++) { + cacheIndexes[i] = new BufferedFile(GameShell.signLink.cacheIndexes[i], 6000, 0); + } + cacheMasterIndex = new BufferedFile(GameShell.signLink.cacheMasterIndex, 6000, 0); + masterCache = new Cache(255, cacheData, cacheMasterIndex, 500000); + uid = new BufferedFile(GameShell.signLink.uid, 24, 0); + GameShell.signLink.cacheIndexes = null; + GameShell.signLink.cacheMasterIndex = null; + GameShell.signLink.uid = null; + GameShell.signLink.cacheData = null; + } + } catch (@Pc(220) IOException ex) { + uid = null; + cacheData = null; + cacheMasterIndex = null; + masterCache = null; + } + mainLoadPrimaryText = LocalizedText.GAME0_LOADING; + if (modeWhere != 0) { + //Cheat.displayFps = true; + } + PluginRepository.Init(); + } + + @OriginalMember(owner = "client!client", name = "c", descriptor = "(I)V") + @Override + protected final void reset() { + } + + @OriginalMember(owner = "client!client", name = "a", descriptor = "(ZI)V") + private void setJs5Response(@OriginalArg(1) int arg0) { + js5NetQueue.errors++; + js5SocketRequest = null; + js5NetQueue.response = arg0; + js5Socket = null; + js5ConnectState = 0; + } + + @OriginalMember(owner = "client!client", name = "d", descriptor = "(B)V") + private void mainUpdate() { + for (InterfaceList.keyQueueSize = 0; Keyboard.nextKey() && InterfaceList.keyQueueSize < 128; InterfaceList.keyQueueSize++) { + InterfaceList.keyCodes[InterfaceList.keyQueueSize] = Keyboard.keyCode; + InterfaceList.keyChars[InterfaceList.keyQueueSize] = Keyboard.keyChar; + } + Protocol.sceneDelta++; + if (InterfaceList.topLevelInterface != -1) { + InterfaceList.method1320(0, 0, 0, GameShell.canvasWidth, InterfaceList.topLevelInterface, 0, GameShell.canvasHeight); + } + InterfaceList.transmitTimer++; + if (GlRenderer.enabled) { + nextNpc: + for (@Pc(57) int local57 = 0; local57 < 32768; local57++) { + @Pc(66) Npc local66 = NpcList.npcs[local57]; + if (local66 != null) { + @Pc(73) byte local73 = local66.type.loginscreenproperties; + if ((local73 & 0x2) > 0 && local66.movementQueueSize == 0 && Math.random() * 1000.0D < 10.0D) { + @Pc(98) int local98 = (int) Math.round(Math.random() * 2.0D - 1.0D); + @Pc(106) int local106 = (int) Math.round(Math.random() * 2.0D - 1.0D); + if (local98 != 0 || local106 != 0) { + local66.movementQueueSpeed[0] = 1; + local66.movementQueueX[0] = local98 + (local66.xFine >> 7); + local66.movementQueueZ[0] = local106 + (local66.zFine >> 7); + PathFinder.collisionMaps[Player.plane].unflagScenery(local66.xFine >> 7, local66.getSize(), false, 0, local66.getSize(), local66.zFine >> 7); + if (local66.movementQueueX[0] >= 0 && local66.movementQueueX[0] <= 104 - local66.getSize() && local66.movementQueueZ[0] >= 0 && local66.movementQueueZ[0] <= 104 - local66.getSize() && PathFinder.collisionMaps[Player.plane].method3054(local66.zFine >> 7, local66.movementQueueZ[0], local66.movementQueueX[0], local66.xFine >> 7)) { + if (local66.getSize() > 1) { + for (@Pc(226) int local226 = local66.movementQueueX[0]; local66.movementQueueX[0] + local66.getSize() > local226; local226++) { + for (@Pc(246) int local246 = local66.movementQueueZ[0]; local66.movementQueueZ[0] + local66.getSize() > local246; local246++) { + if ((PathFinder.collisionMaps[Player.plane].flags[local226][local246] & 0x12401FF) != 0) { + continue nextNpc; + } + } + } + } + local66.movementQueueSize = 1; + } + } + } + NpcList.method2247(local66); + NpcList.method949(local66); + NpcList.method879(local66); + PathFinder.collisionMaps[Player.plane].flagScenery(local66.xFine >> 7, false, local66.zFine >> 7, local66.getSize(), local66.getSize()); + } + } + } + if (!GlRenderer.enabled) { + Flames.update(); + } else if (LoginManager.step == 0 && CreateManager.step == 0) { + if (Camera.cameraType == 2) { + Camera.updateLockedCamera(); + } else { + Camera.updateLoginScreenCamera(); + } + if (Camera.renderX >> 7 < 14 || Camera.renderX >> 7 >= 90 || Camera.renderZ >> 7 < 14 || Camera.renderZ >> 7 >= 90) { + LoginManager.setupLoadingScreenRegion(); + } + } + while (true) { + @Pc(374) HookRequest priorityRequest; + @Pc(379) Component prioritySource; + @Pc(387) Component priorityComponent; + do { + priorityRequest = (HookRequest) InterfaceList.highPriorityRequests.removeHead(); + if (priorityRequest == null) { + while (true) { + do { + priorityRequest = (HookRequest) InterfaceList.mediumPriorityRequests.removeHead(); + if (priorityRequest == null) { + while (true) { + do { + priorityRequest = (HookRequest) InterfaceList.lowPriorityRequests.removeHead(); + if (priorityRequest == null) { + if (Cs1ScriptRunner.aClass13_14 != null) { + Cs1ScriptRunner.method28(); + } + if (Protocol.openUrlRequest != null && Protocol.openUrlRequest.status == 1) { + if (Protocol.openUrlRequest.result != null) { + ScriptRunner.openUrl(ScriptRunner.url, Protocol.newTab); + } + Protocol.newTab = false; + ScriptRunner.url = null; + Protocol.openUrlRequest = null; + } + if (loop % 1500 == 0) { + topBannerRefresh(); + } + return; + } + prioritySource = priorityRequest.source; + if (prioritySource.createdComponentId < 0) { + break; + } + priorityComponent = InterfaceList.getComponent(prioritySource.overlayer); + } while (priorityComponent == null || priorityComponent.createdComponents == null || priorityComponent.createdComponents.length <= prioritySource.createdComponentId || prioritySource != priorityComponent.createdComponents[prioritySource.createdComponentId]); + ScriptRunner.run(priorityRequest); + } + } + prioritySource = priorityRequest.source; + if (prioritySource.createdComponentId < 0) { + break; + } + priorityComponent = InterfaceList.getComponent(prioritySource.overlayer); + } while (priorityComponent == null || priorityComponent.createdComponents == null || prioritySource.createdComponentId >= priorityComponent.createdComponents.length || prioritySource != priorityComponent.createdComponents[prioritySource.createdComponentId]); + ScriptRunner.run(priorityRequest); + } + } + prioritySource = priorityRequest.source; + if (prioritySource.createdComponentId < 0) { + break; + } + priorityComponent = InterfaceList.getComponent(prioritySource.overlayer); + } while (priorityComponent == null || priorityComponent.createdComponents == null || priorityComponent.createdComponents.length <= prioritySource.createdComponentId || prioritySource != priorityComponent.createdComponents[prioritySource.createdComponentId]); + ScriptRunner.run(priorityRequest); + } + } + + @OriginalMember(owner = "client!client", name = "d", descriptor = "(Z)V") + private void js5NetworkLoop() { + @Pc(3) boolean idle = js5NetQueue.loop(); + if (!idle) { + this.js5Connect(); + } + } + + @OriginalMember(owner = "client!client", name = "h", descriptor = "(I)V") + private void js5Connect() { + if (js5PrevErrors < js5NetQueue.errors) { + js5ConnectDelay = 5 * 50 * (js5NetQueue.errors - 1); + if (defaultPort == port) { + port = alternatePort; + } else { + port = defaultPort; + } + if (js5ConnectDelay > 3000) { + js5ConnectDelay = 3000; + } + if (js5NetQueue.errors >= 2 && js5NetQueue.response == 6) { + this.error("js5connect_outofdate"); + gameState = 1000; + return; + } + if (js5NetQueue.errors >= 4 && js5NetQueue.response == -1) { + this.error("js5crc"); + gameState = 1000; + return; + } + if (js5NetQueue.errors >= 4 && (gameState == 0 || gameState == 5)) { + if (js5NetQueue.response == 7 || js5NetQueue.response == 9) { + this.error("js5connect_full"); + } else if (js5NetQueue.response > 0) { + this.error("js5connect"); + } else { + this.error("js5io"); + } + gameState = 1000; + return; + } + } + js5PrevErrors = js5NetQueue.errors; + if (js5ConnectDelay > 0) { + js5ConnectDelay--; + return; + } + try { + if (js5ConnectState == 0) { + if (GlobalJsonConfig.instance != null) { + hostname = GlobalJsonConfig.instance.ip_management; + port = GlobalJsonConfig.instance.server_port + worldListId; + } + js5SocketRequest = GameShell.signLink.openSocket(hostname, port); + js5ConnectState++; + } + if (js5ConnectState == 1) { + if (js5SocketRequest.status == 2) { + this.setJs5Response(1000); + return; + } + if (js5SocketRequest.status == 1) { + js5ConnectState++; + } + } + if (js5ConnectState == 2) { + js5Socket = new BufferedSocket((Socket) js5SocketRequest.result, GameShell.signLink); + @Pc(194) Buffer buffer = new Buffer(5); + buffer.p1(15); + buffer.p4(530); + js5Socket.write(buffer.data, 5); + js5ConnectState++; + js5ConnectTime = MonotonicClock.currentTimeMillis(); + } + if (js5ConnectState == 3) { + if (gameState == 0 || gameState == 5 || js5Socket.available() > 0) { + @Pc(258) int response = js5Socket.read(); + if (response != 0) { + this.setJs5Response(response); + return; + } + js5ConnectState++; + } else if (MonotonicClock.currentTimeMillis() - js5ConnectTime > 30000L) { + this.setJs5Response(1001); + return; + } + } + if (js5ConnectState == 4) { + @Pc(296) boolean loggedOut = gameState == 5 || gameState == 10 || gameState == 28; + js5NetQueue.start(!loggedOut, js5Socket); + js5Socket = null; + js5SocketRequest = null; + js5ConnectState = 0; + } + } catch (@Pc(315) IOException ex) { + this.setJs5Response(1002); + } + } + + @OriginalMember(owner = "client!client", name = "i", descriptor = "(I)V") + private void mainLoad() { + if (!Preferences.safeMode) { + noSafeMode: + while (true) { + do { + if (!Keyboard.nextKey()) { + break noSafeMode; + } + } while (Keyboard.keyChar != 115 && Keyboard.keyChar != 83); + Preferences.safeMode = true; + } + } + + @Pc(43) int i; + if (mainLoadState == 0) { + @Pc(34) Runtime runtime = Runtime.getRuntime(); + i = (int) (0L / 1024L); + @Pc(46) long now = MonotonicClock.currentTimeMillis(); + if (firstGc == 0L) { + firstGc = now; + } + if (i > 16384 && now - firstGc < 5000L) { + if (now - prevGc > 1000L) { + System.gc(); + prevGc = now; + } + mainLoadPercentage = 5; + mainLoadSecondaryText = LocalizedText.MAINLOAD0; + } else { + mainLoadSecondaryText = LocalizedText.MAINLOAD0B; + mainLoadState = 10; + mainLoadPercentage = 5; + } + return; + } + @Pc(98) int percentage; + if (mainLoadState == 10) { + LightingManager.method2392(); + for (percentage = 0; percentage < 4; percentage++) { + PathFinder.collisionMaps[percentage] = new CollisionMap(104, 104); + } + mainLoadPercentage = 10; + mainLoadState = 30; + mainLoadSecondaryText = LocalizedText.MAINLOAD10B; + } else if (mainLoadState == 30) { + if (js5MasterIndex == null) { + js5MasterIndex = new Js5MasterIndex(js5NetQueue, js5CacheQueue); + } + if (js5MasterIndex.isReady()) { + js5Archive0 = createJs5(false, true, true, 0); + js5Archive1 = createJs5(false, true, true, 1); + js5Archive2 = createJs5(true, true, false, 2); + js5Archive3 = createJs5(false, true, true, 3); + js5Archive4 = createJs5(false, true, true, 4); + js5Archive5 = createJs5(true, true, true, 5); + js5Archive6 = createJs5(true, false, true, 6); + js5Archive7 = createJs5(false, true, true, 7); + js5Archive8 = createJs5(false, true, true, 8); + js5Archive9 = createJs5(false, true, true, 9); + js5Archive10 = createJs5(false, true, true, 10); + js5Archive11 = createJs5(false, true, true, 11); + js5Archive12 = createJs5(false, true, true, 12); + js5Archive13 = createJs5(false, true, true, 13); + js5Archive14 = createJs5(false, false, true, 14); + js5Archive15 = createJs5(false, true, true, 15); + js5Archive16 = createJs5(false, true, true, 16); + js5Archive17 = createJs5(false, true, true, 17); + js5Archive18 = createJs5(false, true, true, 18); + js5Archive19 = createJs5(false, true, true, 19); + js5Archive20 = createJs5(false, true, true, 20); + js5Archive21 = createJs5(false, true, true, 21); + js5Archive22 = createJs5(false, true, true, 22); + js5Archive23 = createJs5(true, true, true, 23); + js5Archive24 = createJs5(false, true, true, 24); + js5Archive25 = createJs5(false, true, true, 25); + js5Archive26 = createJs5(true, true, true, 26); + js5Archive27 = createJs5(false, true, true, 27); + mainLoadPercentage = 15; + mainLoadSecondaryText = LocalizedText.MAINLOAD30B; + mainLoadState = 40; + } else { + mainLoadSecondaryText = LocalizedText.MAINLOAD30; + mainLoadPercentage = 12; + } + } else if (mainLoadState == 40) { + percentage = 0; + for (i = 0; i < 28; i++) { + percentage += js5Providers[i].getIndexPercentageComplete() * JS5_ARCHIVE_WEIGHTS[i] / 100; + } + if (percentage == 100) { + mainLoadPercentage = 20; + mainLoadSecondaryText = LocalizedText.MAINLOAD40B; + Sprites.init(js5Archive8); + TitleScreen.init(js5Archive8); + Flames.init(js5Archive8); + mainLoadState = 45; + } else { + if (percentage != 0) { + mainLoadSecondaryText = JagString.concatenate(new JagString[]{LocalizedText.CHECKING_FOR_UPDATES, JagString.parseInt(percentage), JagString.PERCENT_SIGN}); + } + mainLoadPercentage = 20; + } + } else if (mainLoadState == 45) { + AudioChannel.init(Preferences.stereo); + musicStream = new MidiPcmStream(); + musicStream.init(); + musicChannel = AudioChannel.create(GlobalConfig.AUDIO_SAMPLE_RATE, GameShell.signLink, GameShell.canvas, 0); + musicChannel.setStream(musicStream); + MidiPlayer.init(musicStream, js5Archive15, js5Archive14, js5Archive4); + soundChannel = AudioChannel.create(2048, GameShell.signLink, GameShell.canvas, 1); + soundStream = new MixerPcmStream(); + soundChannel.setStream(soundStream); + resampler = new PcmResampler(GlobalConfig.AUDIO_SAMPLE_RATE, AudioChannel.sampleRate); + MusicPlayer.titleSong = js5Archive6.getGroupId(TITLE_SONG); + mainLoadPercentage = 30; + mainLoadState = 50; + mainLoadSecondaryText = LocalizedText.MAINLOAD45B; + } else if (mainLoadState == 50) { + percentage = Fonts.getReady(js5Archive8, js5Archive13); + i = Fonts.getTotal(); + if (percentage >= i) { + mainLoadSecondaryText = LocalizedText.MAINLOAD50B; + mainLoadPercentage = 35; + mainLoadState = 60; + } else { + mainLoadSecondaryText = JagString.concatenate(new JagString[]{LocalizedText.MAINLOAD50, JagString.parseInt(percentage * 100 / i), JagString.PERCENT_SIGN}); + mainLoadPercentage = 35; + } + } else if (mainLoadState == 60) { + percentage = TitleScreen.getReady(js5Archive8); + i = TitleScreen.getTotal(); + if (i <= percentage) { + mainLoadSecondaryText = LocalizedText.MAINLOAD60B; + mainLoadState = 65; + mainLoadPercentage = 40; + } else { + mainLoadSecondaryText = JagString.concatenate(new JagString[]{LocalizedText.MAINLOAD60, JagString.parseInt(percentage * 100 / i), JagString.PERCENT_SIGN}); + mainLoadPercentage = 40; + } + } else if (mainLoadState == 65) { + Fonts.load(js5Archive13, js5Archive8); + mainLoadPercentage = 45; + mainLoadSecondaryText = LocalizedText.MAINLOAD65B; + setGameState(5); + mainLoadState = 70; + } else if (mainLoadState == 70) { + js5Archive2.fetchAll(); + percentage = js5Archive2.getPercentageComplete(); + js5Archive16.fetchAll(); + percentage += js5Archive16.getPercentageComplete(); + js5Archive17.fetchAll(); + percentage += js5Archive17.getPercentageComplete(); + js5Archive18.fetchAll(); + percentage += js5Archive18.getPercentageComplete(); + js5Archive19.fetchAll(); + percentage += js5Archive19.getPercentageComplete(); + js5Archive20.fetchAll(); + percentage += js5Archive20.getPercentageComplete(); + js5Archive21.fetchAll(); + percentage += js5Archive21.getPercentageComplete(); + js5Archive22.fetchAll(); + percentage += js5Archive22.getPercentageComplete(); + js5Archive24.fetchAll(); + percentage += js5Archive24.getPercentageComplete(); + js5Archive25.fetchAll(); + percentage += js5Archive25.getPercentageComplete(); + js5Archive27.fetchAll(); + percentage += js5Archive27.getPercentageComplete(); + if (percentage >= 1100) { + ParamTypeList.init(js5Archive2); + FloTypeList.init(js5Archive2); + FluTypeList.init(js5Archive2); + IdkTypeList.init(js5Archive7, js5Archive2); + LocTypeList.init(js5Archive16, js5Archive7); + NpcTypeList.init(js5Archive7, js5Archive18); + ObjTypeList.init(js5Archive19, Fonts.p11FullSoftware, js5Archive7); + StructTypeList.init(js5Archive2); + SeqTypeList.init(js5Archive1, js5Archive20, js5Archive0); + BasTypeList.init(js5Archive2); + SpotAnimTypeList.init(js5Archive7, js5Archive21); + VarbitTypeList.init(js5Archive22); + VarpTypeList.init(js5Archive2); + InterfaceList.init(js5Archive13, js5Archive8, js5Archive3, js5Archive7); + InvTypeList.init(js5Archive2); + EnumTypeList.init(js5Archive17); + QuickChatPhraseTypeList.init(js5Archive25, js5Archive24, new Js5QuickChatCommandDecoder()); + QuickChatCatTypeList.init(js5Archive25, js5Archive24); + LightTypeList.init(js5Archive2); + CursorTypeList.init(js5Archive2, js5Archive8); + MsiTypeList.init(js5Archive2, js5Archive8); + mainLoadPercentage = 50; + mainLoadSecondaryText = LocalizedText.MAINLOAD70B; + Equipment.init(); + mainLoadState = 80; + } else { + mainLoadSecondaryText = JagString.concatenate(new JagString[]{LocalizedText.MAINLOAD70, JagString.parseInt(percentage / 11), JagString.PERCENT_SIGN}); + mainLoadPercentage = 50; + } + } else if (mainLoadState == 80) { + percentage = Sprites.getReady(js5Archive8); + i = Sprites.total(); + if (i > percentage) { + mainLoadSecondaryText = JagString.concatenate(new JagString[]{LocalizedText.MAINLOAD80, JagString.parseInt(percentage * 100 / i), JagString.PERCENT_SIGN}); + mainLoadPercentage = 60; + } else { + Sprites.load(js5Archive8); + mainLoadState = 90; + mainLoadPercentage = 60; + mainLoadSecondaryText = LocalizedText.MAINLOAD80B; + } + } else if (mainLoadState == 90) { + if (js5Archive26.fetchAll()) { + @Pc(951) Js5GlTextureProvider textureProvider = new Js5GlTextureProvider(js5Archive9, js5Archive26, js5Archive8, 20, !Preferences.highDetailTextures); + Rasteriser.unpackTextures(textureProvider); + if (Preferences.brightness == 1) { + Rasteriser.setBrightness(0.9F); + } + if (Preferences.brightness == 2) { + Rasteriser.setBrightness(0.8F); + } + if (Preferences.brightness == 3) { + Rasteriser.setBrightness(0.7F); + } + if (Preferences.brightness == 4) { + Rasteriser.setBrightness(0.6F); + } + mainLoadSecondaryText = LocalizedText.MAINLOAD90B; + mainLoadState = 100; + mainLoadPercentage = 70; + } else { + mainLoadSecondaryText = JagString.concatenate(new JagString[]{LocalizedText.MAINLOAD90, JagString.parseInt(js5Archive26.getPercentageComplete()), JagString.PERCENT_SIGN}); + mainLoadPercentage = 70; + } + } else if (mainLoadState == 100) { + if (Flames.isReady(js5Archive8)) { + mainLoadState = 110; + } + } else if (mainLoadState == 110) { + MouseRecorder.instance = new MouseRecorder(); + GameShell.signLink.startThread(10, MouseRecorder.instance); + mainLoadSecondaryText = LocalizedText.MAINLOAD110B; + mainLoadPercentage = 75; + mainLoadState = 120; + } else if (mainLoadState == 120) { + if (js5Archive10.isFileReady(JagString.EMPTY, HUFFMAN_GROUP)) { + @Pc(1060) HuffmanCodec codec = new HuffmanCodec(js5Archive10.fetchFile(JagString.EMPTY, HUFFMAN_GROUP)); + WordPack.init(codec); + mainLoadSecondaryText = LocalizedText.MAINLOAD120B; + mainLoadState = 130; + mainLoadPercentage = 80; + } else { + mainLoadSecondaryText = JagString.concatenate(new JagString[]{LocalizedText.MAINLOAD120, aClass100_899}); + mainLoadPercentage = 80; + } + } else if (mainLoadState == 130) { + if (!js5Archive3.fetchAll()) { + mainLoadSecondaryText = JagString.concatenate(new JagString[]{LocalizedText.MAINLOAD130, JagString.parseInt(js5Archive3.getPercentageComplete() * 3 / 4), JagString.PERCENT_SIGN}); + mainLoadPercentage = 85; + } else if (!js5Archive12.fetchAll()) { + mainLoadSecondaryText = JagString.concatenate(new JagString[]{LocalizedText.MAINLOAD130, JagString.parseInt(js5Archive12.getPercentageComplete() / 10 + 75), JagString.PERCENT_SIGN}); + mainLoadPercentage = 85; + } else if (!js5Archive13.fetchAll()) { + mainLoadSecondaryText = JagString.concatenate(new JagString[]{LocalizedText.MAINLOAD130, JagString.parseInt(js5Archive13.getPercentageComplete() / 20 + 85), JagString.PERCENT_SIGN}); + mainLoadPercentage = 85; + } else if (js5Archive23.isGroupReady(DETAILS)) { + MapList.init(Sprites.mapfunctions, js5Archive23); + mainLoadPercentage = 95; + mainLoadSecondaryText = LocalizedText.MAINLOAD130B; + mainLoadState = 135; + } else { + mainLoadSecondaryText = JagString.concatenate(new JagString[]{LocalizedText.MAINLOAD130, JagString.parseInt(js5Archive23.getPercentageComplete(DETAILS) / 10 + 90), JagString.PERCENT_SIGN}); + mainLoadPercentage = 85; + } + } else if (mainLoadState == 135) { + percentage = WorldList.fetch(); + if (percentage == -1) { + mainLoadPercentage = 95; + mainLoadSecondaryText = LocalizedText.MAINLOAD135; + } else if (percentage == 7 || percentage == 9) { + this.error("worldlistfull"); + setGameState(1000); + } else if (WorldList.loaded) { + mainLoadSecondaryText = LocalizedText.MAINLOAD135B; + mainLoadState = 140; + mainLoadPercentage = 96; + } else { + this.error("worldlistio_" + percentage); + setGameState(1000); + } + } else if (mainLoadState == 140) { + LoginManager.loginScreenId = js5Archive3.getGroupId(LOGINSCREEN); + js5Archive5.discardNames(false); + js5Archive6.discardNames(true); + js5Archive8.discardNames(true); + js5Archive13.discardNames(true); + js5Archive10.discardNames(true); + js5Archive3.discardNames(true); + mainLoadPercentage = 97; + mainLoadSecondaryText = LocalizedText.MAINLOAD140; + mainLoadState = 150; + clean = true; + } else if (mainLoadState == 150) { + MaterialManager.method2807(); + if (Preferences.safeMode) { + Preferences.windowMode = 0; + Preferences.antiAliasingMode = 0; + Preferences.favoriteWorlds = 0; + Preferences.buildArea = 0; + } + Preferences.safeMode = true; + Preferences.write(GameShell.signLink); + DisplayMode.setWindowMode(false, Preferences.favoriteWorlds, -1, -1); + mainLoadPercentage = 100; + mainLoadState = 160; + mainLoadSecondaryText = LocalizedText.MAINLOAD150B; + } else if (mainLoadState == 160) { + InterfaceList.method1596(true); + } + } + + @OriginalMember(owner = "client!client", name = "a", descriptor = "(B)V") + @Override + protected final void mainLoop() { + if (gameState == 1000) { + return; + } + loop++; + if (loop % 1000 == 1) { + @Pc(24) GregorianCalendar gregorianCalendar = new GregorianCalendar(); + MiniMenu.gregorianDateSeed = gregorianCalendar.get(Calendar.HOUR_OF_DAY) * 600 + gregorianCalendar.get(Calendar.MINUTE) * 10 + gregorianCalendar.get(Calendar.SECOND) / 6; + aRandom1.setSeed(MiniMenu.gregorianDateSeed); + PluginRepository.Update(); + } + this.js5NetworkLoop(); + if (js5MasterIndex != null) { + js5MasterIndex.method179(); + } + MidiPlayer.loop(); + audioLoop(); + Keyboard.loop(); + Mouse.loop(); + if (GlRenderer.enabled) { + GlCleaner.process(); + } + if (mouseWheel != null) { + @Pc(75) int wheelRotation = mouseWheel.getRotation(); + MouseWheel.wheelRotation = wheelRotation; + } + if (gameState == 0) { + this.mainLoad(); + GameShell.resetTimer(); + } else if (gameState == 5) { + this.mainLoad(); + GameShell.resetTimer(); + } else if (gameState == 25 || gameState == 28) { + LoginManager.rebuildMap(); + } + if (gameState == 10) { + this.mainUpdate(); + CreateManager.loop(); + LoginManager.loopAuto(); + LoginManager.loop(); + } else if (gameState == 30) { + Protocol.method1756(); + } else if (gameState == 40) { + LoginManager.loop(); + if (LoginManager.reply != -3) { + if (LoginManager.reply == 15) { + LoginManager.reconnect(); + } else if (LoginManager.reply != 2) { + LoginManager.processLogout(); + } + } + } + } +} diff --git a/client/src/main/resources/saradomin.png b/client/src/main/resources/saradomin.png new file mode 100644 index 0000000..e9ee33e Binary files /dev/null and b/client/src/main/resources/saradomin.png differ diff --git a/deob-annotations/build.gradle b/deob-annotations/build.gradle new file mode 100644 index 0000000..534092f --- /dev/null +++ b/deob-annotations/build.gradle @@ -0,0 +1,9 @@ +plugins { + id 'java' + id 'java-library' +} + +version = '0.1.0' + +sourceCompatibility = 1.8 +targetCompatibility = 1.8 diff --git a/deob-annotations/build/classes/java/main/org/openrs2/deob/annotation/OriginalArg.class b/deob-annotations/build/classes/java/main/org/openrs2/deob/annotation/OriginalArg.class new file mode 100644 index 0000000..61e84d8 Binary files /dev/null and b/deob-annotations/build/classes/java/main/org/openrs2/deob/annotation/OriginalArg.class differ diff --git a/deob-annotations/build/classes/java/main/org/openrs2/deob/annotation/OriginalClass.class b/deob-annotations/build/classes/java/main/org/openrs2/deob/annotation/OriginalClass.class new file mode 100644 index 0000000..0117f18 Binary files /dev/null and b/deob-annotations/build/classes/java/main/org/openrs2/deob/annotation/OriginalClass.class differ diff --git a/deob-annotations/build/classes/java/main/org/openrs2/deob/annotation/OriginalMember.class b/deob-annotations/build/classes/java/main/org/openrs2/deob/annotation/OriginalMember.class new file mode 100644 index 0000000..9741f10 Binary files /dev/null and b/deob-annotations/build/classes/java/main/org/openrs2/deob/annotation/OriginalMember.class differ diff --git a/deob-annotations/build/classes/java/main/org/openrs2/deob/annotation/Pc.class b/deob-annotations/build/classes/java/main/org/openrs2/deob/annotation/Pc.class new file mode 100644 index 0000000..c09981b Binary files /dev/null and b/deob-annotations/build/classes/java/main/org/openrs2/deob/annotation/Pc.class differ diff --git a/deob-annotations/build/libs/deob-annotations-0.1.0.jar b/deob-annotations/build/libs/deob-annotations-0.1.0.jar new file mode 100644 index 0000000..fb3206e Binary files /dev/null and b/deob-annotations/build/libs/deob-annotations-0.1.0.jar differ diff --git a/deob-annotations/build/tmp/compileJava/previous-compilation-data.bin b/deob-annotations/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..b4fdb3b Binary files /dev/null and b/deob-annotations/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/deob-annotations/build/tmp/jar/MANIFEST.MF b/deob-annotations/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/deob-annotations/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/deob-annotations/src/main/java/org/openrs2/deob/annotation/OriginalArg.java b/deob-annotations/src/main/java/org/openrs2/deob/annotation/OriginalArg.java new file mode 100644 index 0000000..646c166 --- /dev/null +++ b/deob-annotations/src/main/java/org/openrs2/deob/annotation/OriginalArg.java @@ -0,0 +1,9 @@ +package org.openrs2.deob.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@Target({ElementType.PARAMETER}) +public @interface OriginalArg { + int value(); +} diff --git a/deob-annotations/src/main/java/org/openrs2/deob/annotation/OriginalClass.java b/deob-annotations/src/main/java/org/openrs2/deob/annotation/OriginalClass.java new file mode 100644 index 0000000..0f00ebf --- /dev/null +++ b/deob-annotations/src/main/java/org/openrs2/deob/annotation/OriginalClass.java @@ -0,0 +1,9 @@ +package org.openrs2.deob.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@Target({ElementType.TYPE}) +public @interface OriginalClass { + String value(); +} diff --git a/deob-annotations/src/main/java/org/openrs2/deob/annotation/OriginalMember.java b/deob-annotations/src/main/java/org/openrs2/deob/annotation/OriginalMember.java new file mode 100644 index 0000000..e25058b --- /dev/null +++ b/deob-annotations/src/main/java/org/openrs2/deob/annotation/OriginalMember.java @@ -0,0 +1,13 @@ +package org.openrs2.deob.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD}) +public @interface OriginalMember { + String owner(); + + String name(); + + String descriptor(); +} diff --git a/deob-annotations/src/main/java/org/openrs2/deob/annotation/Pc.java b/deob-annotations/src/main/java/org/openrs2/deob/annotation/Pc.java new file mode 100644 index 0000000..26aa0bd --- /dev/null +++ b/deob-annotations/src/main/java/org/openrs2/deob/annotation/Pc.java @@ -0,0 +1,9 @@ +package org.openrs2.deob.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@Target({ElementType.LOCAL_VARIABLE, ElementType.PARAMETER}) +public @interface Pc { + int value(); +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..41d9927 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..aa991fc --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..1b6c787 --- /dev/null +++ b/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/lib/gluegen-rt-natives-android-aarch64.jar b/lib/gluegen-rt-natives-android-aarch64.jar new file mode 100644 index 0000000..ecd4d1d Binary files /dev/null and b/lib/gluegen-rt-natives-android-aarch64.jar differ diff --git a/lib/gluegen-rt-natives-linux-aarch64.jar b/lib/gluegen-rt-natives-linux-aarch64.jar new file mode 100644 index 0000000..82671c4 Binary files /dev/null and b/lib/gluegen-rt-natives-linux-aarch64.jar differ diff --git a/lib/gluegen-rt-natives-linux-amd64.jar b/lib/gluegen-rt-natives-linux-amd64.jar new file mode 100644 index 0000000..4a44e28 Binary files /dev/null and b/lib/gluegen-rt-natives-linux-amd64.jar differ diff --git a/lib/gluegen-rt-natives-linux-i586.jar b/lib/gluegen-rt-natives-linux-i586.jar new file mode 100644 index 0000000..0e71f13 Binary files /dev/null and b/lib/gluegen-rt-natives-linux-i586.jar differ diff --git a/lib/gluegen-rt-natives-macosx-universal.jar b/lib/gluegen-rt-natives-macosx-universal.jar new file mode 100644 index 0000000..a47411e Binary files /dev/null and b/lib/gluegen-rt-natives-macosx-universal.jar differ diff --git a/lib/gluegen-rt-natives-windows-amd64.jar b/lib/gluegen-rt-natives-windows-amd64.jar new file mode 100644 index 0000000..ce89c6f Binary files /dev/null and b/lib/gluegen-rt-natives-windows-amd64.jar differ diff --git a/lib/gluegen-rt-natives-windows-i586.jar b/lib/gluegen-rt-natives-windows-i586.jar new file mode 100644 index 0000000..287412b Binary files /dev/null and b/lib/gluegen-rt-natives-windows-i586.jar differ diff --git a/lib/gluegen-rt.jar b/lib/gluegen-rt.jar new file mode 100644 index 0000000..d92fbcc Binary files /dev/null and b/lib/gluegen-rt.jar differ diff --git a/lib/gson.jar b/lib/gson.jar new file mode 100644 index 0000000..fb62e05 Binary files /dev/null and b/lib/gson.jar differ diff --git a/lib/jogl-all-natives-android-aarch64.jar b/lib/jogl-all-natives-android-aarch64.jar new file mode 100644 index 0000000..d342bc3 Binary files /dev/null and b/lib/jogl-all-natives-android-aarch64.jar differ diff --git a/lib/jogl-all-natives-linux-aarch64.jar b/lib/jogl-all-natives-linux-aarch64.jar new file mode 100644 index 0000000..a0deef3 Binary files /dev/null and b/lib/jogl-all-natives-linux-aarch64.jar differ diff --git a/lib/jogl-all-natives-linux-amd64.jar b/lib/jogl-all-natives-linux-amd64.jar new file mode 100644 index 0000000..388bcb0 Binary files /dev/null and b/lib/jogl-all-natives-linux-amd64.jar differ diff --git a/lib/jogl-all-natives-linux-i586.jar b/lib/jogl-all-natives-linux-i586.jar new file mode 100644 index 0000000..cde6472 Binary files /dev/null and b/lib/jogl-all-natives-linux-i586.jar differ diff --git a/lib/jogl-all-natives-macosx-universal.jar b/lib/jogl-all-natives-macosx-universal.jar new file mode 100644 index 0000000..a95f524 Binary files /dev/null and b/lib/jogl-all-natives-macosx-universal.jar differ diff --git a/lib/jogl-all-natives-windows-amd64.jar b/lib/jogl-all-natives-windows-amd64.jar new file mode 100644 index 0000000..82c8f3e Binary files /dev/null and b/lib/jogl-all-natives-windows-amd64.jar differ diff --git a/lib/jogl-all-natives-windows-i586.jar b/lib/jogl-all-natives-windows-i586.jar new file mode 100644 index 0000000..e500fe9 Binary files /dev/null and b/lib/jogl-all-natives-windows-i586.jar differ diff --git a/lib/jogl-all.jar b/lib/jogl-all.jar new file mode 100644 index 0000000..e11abbf Binary files /dev/null and b/lib/jogl-all.jar differ diff --git a/playground/build.gradle b/playground/build.gradle new file mode 100644 index 0000000..fbf4a3d --- /dev/null +++ b/playground/build.gradle @@ -0,0 +1,28 @@ +plugins { + id 'java' + id 'application' +} + +mainClassName = 'com.itspazaz.rt4.Playground' +version = '1.0.0' + +sourceCompatibility = 1.8 +targetCompatibility = 1.8 + +compileJava.options.encoding = 'UTF-8' + +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} + +dependencies { + implementation project(':client') // TODO: abstract client/engine code +} + +jar { + manifest { + attributes 'Main-Class': "$mainClassName" + } + from { configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } } + duplicatesStrategy = DuplicatesStrategy.INCLUDE +} diff --git a/playground/build/classes/java/main/com/itspazaz/rt4/Playground.class b/playground/build/classes/java/main/com/itspazaz/rt4/Playground.class new file mode 100644 index 0000000..7b9afc2 Binary files /dev/null and b/playground/build/classes/java/main/com/itspazaz/rt4/Playground.class differ diff --git a/playground/build/libs/playground-1.0.0.jar b/playground/build/libs/playground-1.0.0.jar new file mode 100644 index 0000000..6502211 Binary files /dev/null and b/playground/build/libs/playground-1.0.0.jar differ diff --git a/playground/build/tmp/compileJava/previous-compilation-data.bin b/playground/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..02ae6fb Binary files /dev/null and b/playground/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/playground/build/tmp/jar/MANIFEST.MF b/playground/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..205048a --- /dev/null +++ b/playground/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: com.itspazaz.rt4.Playground + diff --git a/playground/src/main/java/com/itspazaz/rt4/Playground.java b/playground/src/main/java/com/itspazaz/rt4/Playground.java new file mode 100644 index 0000000..f8a3566 --- /dev/null +++ b/playground/src/main/java/com/itspazaz/rt4/Playground.java @@ -0,0 +1,620 @@ +package com.itspazaz.rt4; + +import com.jogamp.opengl.GL2; +import com.jogamp.opengl.GLContext; +import com.jogamp.opengl.util.GLBuffers; +import rt4.DisplayMode; +import rt4.*; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.color.ColorSpace; +import java.awt.event.KeyEvent; +import java.awt.image.*; +import java.io.File; +import java.io.IOException; +import java.net.Socket; +import java.nio.ByteBuffer; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; + +public class Playground extends GameShell { + public static Playground instance; + + public static BufferedFile cacheMasterIndex; + public static BufferedFile cacheData; + public static BufferedFile uid; + public static BufferedFile[] cacheIndexes = new BufferedFile[28]; + + public static Cache[] cacheArchives = new Cache[28]; + public static Cache masterCache; + + public static Js5MasterIndex js5MasterIndex; + public static Js5CachedResourceProvider[] js5Providers = new Js5CachedResourceProvider[28]; + public static Js5[] archives = new Js5[28]; + public static Js5NetQueue js5NetQueue; + public static Js5CacheQueue js5CacheQueue; + private static PrivilegedRequest js5SocketRequest; + private static BufferedSocket js5Socket; + private static long js5ConnectTime; + + public static void main(String[] args) { + instance = new Playground(); + instance.startApplication(32, "runescape"); + GameShell.frame.setLocation(40, 40); + } + + @Override + public void init() { + instance = this; + this.startApplet(32); + } + + @Override + protected void mainInit() { + Keyboard.init(); + Keyboard.start(GameShell.canvas); + Mouse.start(GameShell.canvas); + SoftwareRaster.frameBuffer.makeTarget(); + + try { + if (GameShell.signLink.cacheData != null) { + cacheData = new BufferedFile(GameShell.signLink.cacheData, 5200, 0); + for (int i = 0; i < 28; i++) { + cacheIndexes[i] = new BufferedFile(GameShell.signLink.cacheIndexes[i], 6000, 0); + cacheArchives[i] = new Cache(i, cacheData, cacheIndexes[i], 1000000); + } + cacheMasterIndex = new BufferedFile(GameShell.signLink.cacheMasterIndex, 6000, 0); + masterCache = new Cache(255, cacheData, cacheMasterIndex, 500000); + uid = new BufferedFile(GameShell.signLink.uid, 24, 0); + GameShell.signLink.cacheIndexes = null; + GameShell.signLink.cacheMasterIndex = null; + GameShell.signLink.uid = null; + GameShell.signLink.cacheData = null; + } + } catch (Exception ex) { + ex.printStackTrace(); + System.exit(1); + } + + js5NetQueue = new Js5NetQueue(); + js5CacheQueue = new Js5CacheQueue(); + + Preferences.characterShadowsOn = false; + Preferences.highDetailLighting = false; + } + + public int percentage = 0; + public int state = 0; + + public NpcType npcType; + public Npc npc; + + public void stateLoop() { + if (state == 0) { + LoadingBarAwt.render(null, true, JagString.parse("Connecting to update server"), 1); + + if (js5MasterIndex == null) { + js5MasterIndex = new Js5MasterIndex(js5NetQueue, js5CacheQueue); + } + + if (js5MasterIndex.isReady()) { + for (int i = 0; i < 28; i++) { + js5Providers[i] = js5MasterIndex.getResourceProvider(i, masterCache, cacheArchives[i]); + archives[i] = new Js5(js5Providers[i], false, false); + } + state++; + } + } else if (state == 1) { + LoadingBarAwt.render(null, true, JagString.parse("Initializing sprites"), 1); + percentage = 0; + for (int i = 0; i < 28; i++) { + percentage += js5Providers[i].getIndexPercentageComplete() * client.JS5_ARCHIVE_WEIGHTS[i] / 100; + } + if (percentage == 100) { + Sprites.init(archives[8]); + TitleScreen.init(archives[8]); + Flames.init(archives[8]); + state++; + } + } else if (state == 2) { + LoadingBarAwt.render(null, true, JagString.parse("Preparing fonts"), 1); + int ready = Fonts.getReady(archives[8], archives[13]); + int total = Fonts.getTotal(); + if (ready >= total) { + state++; + } + } else if (state == 3) { + LoadingBarAwt.render(null, true, JagString.parse("Preparing title screen"), 1); + int ready = TitleScreen.getReady(archives[8]); + int total = TitleScreen.getTotal(); + if (ready >= total) { + state++; + } + } else if (state == 4) { + LoadingBarAwt.render(null, true, JagString.parse("Loading fonts"), 1); + Fonts.load(archives[13], archives[8]); + state++; + } else if (state == 5) { + LoadingBarAwt.render(null, true, JagString.parse("Loading configs"), 1); +// percentage = 0; +// for (int i = 0; i < 28; ++i) { +// archives[i].fetchAll(); +// percentage += archives[i].getPercentageComplete(); +// } +// if (percentage > 2700) { + ParamTypeList.init(archives[2]); + FloTypeList.init(archives[2]); + FluTypeList.init(archives[2]); + IdkTypeList.init(archives[7], archives[2]); + LocTypeList.init(archives[16], archives[7]); + NpcTypeList.init(archives[7], archives[18]); + ObjTypeList.init(archives[19], Fonts.p11FullSoftware, archives[7]); + StructTypeList.init(archives[2]); + SeqTypeList.init(archives[1], archives[20], archives[0]); + BasTypeList.init(archives[2]); + SpotAnimTypeList.init(archives[7], archives[21]); + VarbitTypeList.init(archives[22]); + VarpTypeList.init(archives[2]); + InterfaceList.init(archives[13], archives[8], archives[3], archives[7]); + InvTypeList.init(archives[2]); + EnumTypeList.init(archives[17]); + QuickChatPhraseTypeList.init(archives[25], archives[24], new Js5QuickChatCommandDecoder()); + QuickChatCatTypeList.init(archives[25], archives[24]); + LightTypeList.init(archives[2]); + CursorTypeList.init(archives[2], archives[8]); + MsiTypeList.init(archives[2], archives[8]); + Equipment.init(); + state++; +// } + } else if (state == 6) { + LoadingBarAwt.render(null, true, JagString.parse("Loading sprites"), 1); + int ready = Sprites.getReady(archives[8]); + int total = Sprites.total(); + if (ready >= total) { + Sprites.load(archives[8]); + state++; + } + } else if (state == 7) { + if (useGl) { + initGl(); + } + state++; + } else if (state == 8) { + Js5GlTextureProvider textureProvider = new Js5GlTextureProvider(archives[9], archives[26], archives[8], 20, false); + Rasteriser.unpackTextures(textureProvider); + Rasteriser.setBrightness(0.8F); + Rasteriser.setBounds(GameShell.canvasWidth, GameShell.canvasHeight); + Rasteriser.prepare(); + Rasteriser.prepareOffsets(); + loadItem(995, 10000); + try { + //loadNpc(exportCounter); + } catch (Exception ex) { + npc = null; + npcType = null; + } + state++; + } + } + + Sprite sprite; + + public void loadItem(int id, int count) { + sprite = Inv.getObjectSprite(0, id, false, count, 0); + + try { + Files.write( + Paths.get("items.csv"), + "id,name,cost\n".getBytes(), + StandardOpenOption.CREATE_NEW); + } catch (Exception ex) { + ex.printStackTrace(); + } + ; + for (int i = 0; i < 14657; ++i) { + try { + ObjType obj = ObjTypeList.get(i); + if (obj == null) { + break; + } + Files.write( + Paths.get("items.csv"), + (i + "," + obj.name + "," + obj.cost + "\n").getBytes(), + StandardOpenOption.APPEND); + } catch (Exception ex) { + break; + } + } + } + + public void loadNpc(int id) { + npcType = NpcTypeList.get(id); + npc = new Npc(); + BasType basType = BasTypeList.get(npcType.bastypeid); + npc.seqId = basType.idleAnimationId; + npc.setNpcType(npcType); + GameShell.frame.setTitle(npcType.name + " - " + id); + } + + float yaw = 0.4f; + float pitch = -0.4f; + int zoom2d = 471; + int zoom3d = 471; + + public void initGl() { + GlRenderer.init(GameShell.canvas, 0); + if (GlRenderer.enabled) { + GlRenderer.setCanvasSize(GameShell.canvasWidth, GameShell.canvasHeight); + GlRenderer.restoreLighting(); + float yaw1 = yaw * 360.0F / 6.2831855F; + float pitch1 = pitch * 360.0F / 6.2831855F; + GlRenderer.method4171(0, 0, GameShell.canvasWidth, GameShell.canvasHeight, GameShell.canvasWidth / 2, GameShell.canvasHeight / 2, yaw1, pitch1, zoom2d, zoom3d); + GlRenderer.setViewportBounds(0, 0, GameShell.canvasWidth, GameShell.canvasHeight); + GlRenderer.setDepthTestEnabled(true); + GlRenderer.enableDepthMask(); + GlRenderer.setFogEnabled(true); + DisplayMode.setWindowMode(false, 2, GameShell.canvasWidth, GameShell.canvasHeight); + orientation = 292; + x = 100; + z = 218; + y = 236; + if (GameShell.canvasWidth >= 2500) { + x = 56; + z = 176; + y = 120; + orientation = 128; + } + } + } + + public static boolean useGl = false; + + private void exportGlImage(String filename) { + GL2 gl = GLContext.getCurrentGL().getGL2(); + ByteBuffer buffer = GLBuffers.newDirectByteBuffer(GameShell.canvasWidth * GameShell.canvasHeight * 4); + + gl.glReadBuffer(GL2.GL_BACK); + gl.glReadPixels(0, 0, GameShell.canvasWidth, GameShell.canvasHeight, GL2.GL_BGRA, GL2.GL_UNSIGNED_BYTE, buffer); + + int[] pixels = new int[GameShell.canvasWidth * GameShell.canvasHeight]; + for (int y = GameShell.canvasHeight - 1; y > 0; --y) { + for (int x = 0; x < GameShell.canvasWidth; ++x) { + int r = buffer.get() & 0xFF; + int g = buffer.get() & 0xFF; + int b = buffer.get() & 0xFF; + buffer.get(); + int a = 0xFF; + if (r == 0x33 && g == 0x33 && b == 0x33) { + a = 0x7F; + } + pixels[x + y * GameShell.canvasWidth] = r | (g << 8) | (b << 16) | (a << 24); + } + } + // erase first line (black) + for (int x = 0; x < GameShell.canvasWidth; ++x) { + pixels[x] = 0x7F000000; + } + + exportImage(pixels, filename); + } + + private void exportImage(int[] pixels, String filename) { + byte[] raw = new byte[pixels.length * 4]; + int offset = 0; + for (int rgb : pixels) { + raw[offset++] = (byte) (rgb >> 16); // red + raw[offset++] = (byte) (rgb >> 8); // green + raw[offset++] = (byte) (rgb); // blue + + // set transparency for background color + if (rgb >> 24 == 0x7F) { + raw[offset++] = (byte) 0; + } else { + raw[offset++] = (byte) 0xFF; + } + } + + try { + DataBuffer buffer = new DataBufferByte(raw, raw.length); + int samplesPerPixel = 4; + int[] bandOffsets = {0, 1, 2, 3}; + ColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); + WritableRaster raster = Raster.createInterleavedRaster(buffer, GameShell.canvasWidth, GameShell.canvasHeight, samplesPerPixel * GameShell.canvasWidth, samplesPerPixel, bandOffsets, null); + BufferedImage image = new BufferedImage(colorModel, raster, colorModel.isAlphaPremultiplied(), null); + ImageIO.write(image, "PNG", new File(filename + ".png")); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + /* NPC_NORMAL.xan2d = 96; + NPC_NORMAL.yan2d = 128; + + CHATHEAD.zoom2d = 796; + CHATHEAD.zoom3d = 512; + CHATHEAD.xan2d = 40; + CHATHEAD.yan2d = 1882;*/ + + int exportCounter = 8105; + int orientation = 378; + int x = 112; + int z = 180; + int y = 116; + int modifier = 2; + int chatheadOrientation = 1882; + int chatheadX = -34; + int chatheadZ = 97; + int chatheadY = 592; + + boolean renderHead = false; + boolean perspectiveChanged = false; + + long lastInputTime = 0; + + public void inputLoop() { + if (Keyboard.getKey(KeyEvent.VK_W)) { + y += modifier; + } else if (Keyboard.getKey(KeyEvent.VK_S)) { + y -= modifier; + } + + if (Keyboard.getKey(KeyEvent.VK_Q)) { + z += modifier; + } else if (Keyboard.getKey(KeyEvent.VK_E)) { + z -= modifier; + } + + if (Keyboard.getKey(KeyEvent.VK_SHIFT) && Keyboard.getKey(KeyEvent.VK_A)) { + orientation += modifier; + orientation &= 2047; + } else if (Keyboard.getKey(KeyEvent.VK_SHIFT) && Keyboard.getKey(KeyEvent.VK_D)) { + orientation -= modifier; + orientation &= 2047; + } else if (Keyboard.getKey(KeyEvent.VK_A)) { + x -= modifier; + } else if (Keyboard.getKey(KeyEvent.VK_D)) { + x += modifier; + } + + if (Keyboard.getKey(KeyEvent.VK_UP)) { + yaw -= 0.01f; + perspectiveChanged = true; + } else if (Keyboard.getKey(KeyEvent.VK_DOWN)) { + yaw += 0.01f; + perspectiveChanged = true; + } + + if (Keyboard.getKey(KeyEvent.VK_LEFT)) { + pitch += 0.01f; + perspectiveChanged = true; + } else if (Keyboard.getKey(KeyEvent.VK_RIGHT)) { + pitch -= 0.01f; + perspectiveChanged = true; + } + + if (Keyboard.getKey(KeyEvent.VK_F)) { + zoom2d -= modifier; + perspectiveChanged = true; + } else if (Keyboard.getKey(KeyEvent.VK_G)) { + zoom2d += modifier; + perspectiveChanged = true; + } + + if (Keyboard.getKey(KeyEvent.VK_OPEN_BRACKET)) { + modifier--; + } else if (Keyboard.getKey(KeyEvent.VK_CLOSE_BRACKET)) { + modifier++; + } + + // rate limited input events + long currentTime = System.currentTimeMillis(); + if (currentTime - lastInputTime < 100) { + return; + } + lastInputTime = currentTime; + + if (Keyboard.getKey(KeyEvent.VK_H)) { + renderHead = !renderHead; + if (renderHead) { + x = chatheadX; + z = chatheadZ; + y = chatheadY; + orientation = chatheadOrientation; + yaw = 0.17f; + pitch = 0.09f; + perspectiveChanged = true; + zoom2d = 796; + zoom3d = 512; + } else { + x = 56; + z = 176; + y = 120; + orientation = 128; + yaw = 0.4f; + pitch = -0.4f; + perspectiveChanged = true; + zoom2d = 471; + zoom3d = 471; + } + } + + if (Keyboard.getKey(KeyEvent.VK_BACK_SLASH)) { + if (GlRenderer.enabled) { + exportGlImage("dump/" + exportCounter++); + } else { + exportImage(SoftwareRaster.pixels, "dump/" + exportCounter++); + } + } + + if (Keyboard.getKey(KeyEvent.VK_1)) { + exportCounter--; + } else if (Keyboard.getKey(KeyEvent.VK_2)) { + exportCounter++; + } + + if (Keyboard.getKey(KeyEvent.VK_P)) { + System.out.println("cam: " + orientation + ", " + x + ", " + z + ", " + y); + System.out.println("per: " + yaw + ", " + pitch); + System.out.println("zoom: " + zoom2d + ", " + zoom3d); + System.out.println(); + } + } + + int lastExportCounter = -1; + + @Override + protected void mainLoop() { + Keyboard.loop(); + Mouse.loop(); + + js5NetLoop(); + stateLoop(); + inputLoop(); + + if (state == 9) { + if (lastExportCounter != exportCounter) { + try { + //loadNpc(exportCounter); + } catch (Exception ex) { + npc = null; + npcType = null; + } + } + } + } + + public int js5ConnectState = 0; + + public void js5NetLoop() { + boolean idle = js5NetQueue.loop(); + if (!idle) { + js5Connect(); + } + } + + public void js5Connect() { + try { + if (js5ConnectState == 0) { + js5SocketRequest = GameShell.signLink.openSocket(GlobalConfig.DEFAULT_HOSTNAME, GlobalConfig.DEFAULT_PORT + 1); + js5ConnectState++; + } + if (js5ConnectState == 1) { + if (js5SocketRequest.status == 2) { + setJs5Response(1000); + return; + } + if (js5SocketRequest.status == 1) { + js5ConnectState++; + } + } + if (js5ConnectState == 2) { + js5Socket = new BufferedSocket((Socket) js5SocketRequest.result, GameShell.signLink); + Buffer buffer = new Buffer(5); + buffer.p1(15); + buffer.p4(530); + js5Socket.write(buffer.data, 5); + js5ConnectState++; + js5ConnectTime = MonotonicClock.currentTimeMillis(); + } + if (js5ConnectState == 3) { + if (js5Socket.available() > 0) { + int response = js5Socket.read(); + if (response != 0) { + setJs5Response(response); + return; + } + js5ConnectState++; + } else if (MonotonicClock.currentTimeMillis() - js5ConnectTime > GlobalConfig.JS5_RESPONSE_TIMEOUT) { + setJs5Response(1001); + return; + } + } + if (js5ConnectState == 4) { + js5NetQueue.start(true, js5Socket); + js5SocketRequest = null; + js5ConnectState = 0; + js5Socket = null; + } + } catch (IOException ex) { + setJs5Response(1002); + } + } + + private void setJs5Response(int response) { + js5NetQueue.response = response; + js5Socket = null; + js5NetQueue.errors++; + js5ConnectState = 0; + js5SocketRequest = null; + } + + @Override + protected void mainRedraw() { + try { + if (state == 9) { + if (!GlRenderer.enabled) { + SoftwareRaster.clear(0x7F666666); + } else { + GlRenderer.clearColorAndDepthBuffers(0x333333); + } + + if (perspectiveChanged) { + float yaw1 = yaw * 360.0F / 6.2831855F; + float pitch1 = pitch * 360.0F / 6.2831855F; + GlRenderer.method4171(0, 0, GameShell.canvasWidth, GameShell.canvasHeight, GameShell.canvasWidth / 2, GameShell.canvasHeight / 2, yaw1, pitch1, zoom2d, zoom2d); + perspectiveChanged = false; + } + + if (npc != null) { + SeqType seqType = SeqTypeList.get(9804); + Model head = npcType.getHeadModel(seqType, 0, 0, 0); + if (renderHead && head != null) { + head.render(orientation, 25079, 60547, -44308, 48222, x, z, y, 0L, 0, null); + } else { + npc.render(orientation, 25079, 60547, -44308, 48222, x, z, y, 0L, 0, null); + } + } + + if (sprite != null) { + sprite.render(canvasWidth / 2 - 144, canvasHeight / 2 - 128); + } + + if (!GlRenderer.enabled) { + SoftwareRaster.frameBuffer.draw(GameShell.canvas.getGraphics()); + } else { + GlRenderer.draw(); + GlRenderer.swapBuffers(); + } + + if (lastExportCounter != exportCounter) { + // exportGlImage("dump/" + exportCounter); + lastExportCounter = exportCounter; + // exportCounter++; + } + } + } catch (Exception ex) { + } + } + + @Override + protected void mainQuit() { + Keyboard.stop(GameShell.canvas); + Mouse.stop(GameShell.canvas); + Keyboard.quit(); + Mouse.quit(); + + if (GlRenderer.enabled) { + GlRenderer.quit(); + } + + if (GameShell.signLink != null) { + GameShell.signLink.unloadGlNatives(this.getClass()); + } + } + + @Override + protected void reset() { + } +} diff --git a/plugin-playground/build.gradle b/plugin-playground/build.gradle new file mode 100644 index 0000000..a1644a7 --- /dev/null +++ b/plugin-playground/build.gradle @@ -0,0 +1,119 @@ +plugins { + id 'java' + id 'org.jetbrains.kotlin.jvm' version '1.4.10' +} + +version 'unspecified' + +targetCompatibility = 1.8 +sourceCompatibility = 1.8 + +repositories { + mavenCentral() +} + +dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' + implementation(rootProject.project("client")) + compile 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10' +} + +test { + useJUnitPlatform() +} + +task initializeNewJavaPlugin { + doLast { + def pluginFile = new File("src/main/java/MyPlugin") + pluginFile.mkdirs() + + new File(rootProject.project("plugin-playground").projectDir.absolutePath + File.separator + "src/main/java/MyPlugin/plugin.properties").text = """ +AUTHOR='Me' +DESCRIPTION='Make sure to rename both the MyPlugin folder and the package statement in plugin.java! +VERSION=-1.1 +""" + new File(rootProject.project("plugin-playground").projectDir.absolutePath + File.separator + "src/main/java/MyPlugin/plugin.java").text = """ +package MyPlugin; + +import plugin.Plugin; + +public class plugin extends Plugin { + @Override + public void Init() { + //Init() is called when the plugin is loaded + } + + @Override + public void Update() { + //Update() is called once per tick (600ms) + } + + @Override + public void Draw(long deltaTime) { + //Draw() is called once per frame, with deltaTime being the time since last frame. + } + + //Check the source of plugin.Plugin for more methods you can override! Happy hacking! <3 + //There are also many methods to aid in plugin development in plugin.api.API +} +""" + } +} + +task initializeNewKotlinPlugin { + doLast { + def pluginFile = new File("src/main/kotlin/MyPlugin") + pluginFile.mkdirs() + + new File(rootProject.project("plugin-playground").projectDir.absolutePath + File.separator + "src/main/kotlin/MyPlugin/plugin.properties").text = """ +AUTHOR='Me' +DESCRIPTION='Make sure to rename both the MyPlugin folder and the package statement in plugin.java! +VERSION=1.0 +""" + new File(rootProject.project("plugin-playground").projectDir.absolutePath + File.separator + "src/main/kotlin/MyPlugin/plugin.kt").text = """ +package MyPlugin + +import plugin.Plugin + +class plugin : Plugin() { + override fun Init() { + //Init() is called when the plugin is loaded + } + + override fun Update() { + //Update() is called once per tick (600ms) + } + + override fun Draw(deltaTime: Long) { + //Draw() is called once per frame, with deltaTime being the time since last frame. + } + + //Check the source of plugin.Plugin for more methods you can override! Happy hacking! <3 + //There are also many methods to aid in plugin development in plugin.api.API +} +""" + } +} + +task buildPlugins(type: Copy, dependsOn: classes) { + def pluginsPath = rootProject.project("client").projectDir.absolutePath + File.separator + "plugins" + copy { + from(layout.projectDirectory.dir("src/main/java")) + from (layout.projectDirectory.dir("src/main/kotlin")) + include("**/*.properties") + into pluginsPath + } + + copy { + from "build/classes/java/main" + from "build/classes/kotlin/main" + into pluginsPath + } + + // Find and copy any 'res' directories from 'src/main/kotlin/**/res/' + copy { + from fileTree(dir: "src/main/kotlin", include: "**/res/**") + into pluginsPath + } +} \ No newline at end of file diff --git a/plugin-playground/build/20250301_15626600926141658969.compiler.options b/plugin-playground/build/20250301_15626600926141658969.compiler.options new file mode 100644 index 0000000..3f25dc8 --- /dev/null +++ b/plugin-playground/build/20250301_15626600926141658969.compiler.options @@ -0,0 +1 @@ +"-Xallow-no-source-files" "-classpath" "/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.4.10/998caa30623f73223194a8b657abd2baec4880ea/kotlin-stdlib-jdk8-1.4.10.jar:/home/greg/rt4-client/client/build/libs/client-1.0.0.jar:/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.4.10/30e46450b0bb3dbf43898d2f461be4a942784780/kotlin-stdlib-jdk7-1.4.10.jar:/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.4.10/ea29e063d2bbe695be13e9d044dcfb0c7add398e/kotlin-stdlib-1.4.10.jar:/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.4.10/6229be3465805c99db1142ad75e6c6ddeac0b04c/kotlin-stdlib-common-1.4.10.jar:/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar" "-d" "/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main" "-Xjava-source-roots=/home/greg/rt4-client/plugin-playground/src/main/java" "-module-name" "plugin-playground" "-no-reflect" "-no-stdlib" "-Xplugin=/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-script-runtime/1.4.10/7c19d9c2001e016cd7664cebe9eea66fc04a7f4f/kotlin-script-runtime-1.4.10.jar,/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-common/1.4.10/befe5a2bcae1e5b86691e0a0dfb0b3ef039b00a9/kotlin-scripting-common-1.4.10.jar,/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-compiler-embeddable/1.4.10/c2bdea421e04cc24fe26dcddbdf7c6e4e114b7cd/kotlin-scripting-compiler-embeddable-1.4.10.jar,/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-compiler-impl-embeddable/1.4.10/5c52f3e06dc12cbe094c2701a1fcb0c605fd53ca/kotlin-scripting-compiler-impl-embeddable-1.4.10.jar,/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-jvm/1.4.10/89b312aa7b7944586c1e64e5ec52130d03019db0/kotlin-scripting-jvm-1.4.10.jar,/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.4.10/6229be3465805c99db1142ad75e6c6ddeac0b04c/kotlin-stdlib-common-1.4.10.jar,/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.4.10/ea29e063d2bbe695be13e9d044dcfb0c7add398e/kotlin-stdlib-1.4.10.jar,/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core/1.3.7/8e2eb78158638b33793d204ffef0b65c4a578e1c/kotlinx-coroutines-core-1.3.7.jar,/home/greg/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/BetterShiftDrop/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/BasicInputQOL/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/Craftify/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/LoginTimer/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/RememberMyLogin/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/XPDropPlugin/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/XPDropPlugin/XPSprites.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/ValUAdd/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/XPGlobesPlugin/Constants.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/XPGlobesPlugin/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/XPGlobesPlugin/XPTable.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/XPGlobesPlugin/XPSprites.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/MiniMenuQOL/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/GroundItems/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/HolidayLoginMusic/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/TabReply/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/AudioQOL/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/EscClose/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/TakeScreenshot/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/IdentifyClueScrolls/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/SlayerTrackerPlugin/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/ToggleResizableSD/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/XPTrackerView.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/XPTable.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/HiscoresView.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/Helpers.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/LootTrackerView.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/AltCanvas.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/ScrollablePanel.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/plugin.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/ImageCanvas.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/ReflectiveEditorView.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/SpriteToBufferedImage.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/Themes.kt" "/home/greg/rt4-client/plugin-playground/src/main/kotlin/KondoKit/ProgressBar.kt" \ No newline at end of file diff --git a/plugin-playground/build/classes/java/main/InterfaceDebugPlugin/plugin.class b/plugin-playground/build/classes/java/main/InterfaceDebugPlugin/plugin.class new file mode 100644 index 0000000..dffcde3 Binary files /dev/null and b/plugin-playground/build/classes/java/main/InterfaceDebugPlugin/plugin.class differ diff --git a/plugin-playground/build/classes/java/main/OverheadDebugPlugin/plugin.class b/plugin-playground/build/classes/java/main/OverheadDebugPlugin/plugin.class new file mode 100644 index 0000000..a3e5e9c Binary files /dev/null and b/plugin-playground/build/classes/java/main/OverheadDebugPlugin/plugin.class differ diff --git a/plugin-playground/build/classes/java/main/VarpLogPlugin/plugin.class b/plugin-playground/build/classes/java/main/VarpLogPlugin/plugin.class new file mode 100644 index 0000000..32a1f5b Binary files /dev/null and b/plugin-playground/build/classes/java/main/VarpLogPlugin/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/AudioQOL/plugin$Init$1.class b/plugin-playground/build/classes/kotlin/main/AudioQOL/plugin$Init$1.class new file mode 100644 index 0000000..e41d107 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/AudioQOL/plugin$Init$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/AudioQOL/plugin.class b/plugin-playground/build/classes/kotlin/main/AudioQOL/plugin.class new file mode 100644 index 0000000..708ef39 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/AudioQOL/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin$Companion.class b/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin$Companion.class new file mode 100644 index 0000000..ae4b723 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin$Companion.class differ diff --git a/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin$MouseCallbacks.class b/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin$MouseCallbacks.class new file mode 100644 index 0000000..89a2587 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin$MouseCallbacks.class differ diff --git a/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin$MouseWheelCallbacks.class b/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin$MouseWheelCallbacks.class new file mode 100644 index 0000000..ac8ef63 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin$MouseWheelCallbacks.class differ diff --git a/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin.class b/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin.class new file mode 100644 index 0000000..aa80bda Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/BetterShiftDrop/plugin.class b/plugin-playground/build/classes/kotlin/main/BetterShiftDrop/plugin.class new file mode 100644 index 0000000..516f5b3 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/BetterShiftDrop/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/Craftify/plugin.class b/plugin-playground/build/classes/kotlin/main/Craftify/plugin.class new file mode 100644 index 0000000..818b457 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/Craftify/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/EscClose/plugin$Init$1.class b/plugin-playground/build/classes/kotlin/main/EscClose/plugin$Init$1.class new file mode 100644 index 0000000..cee47e3 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/EscClose/plugin$Init$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/EscClose/plugin.class b/plugin-playground/build/classes/kotlin/main/EscClose/plugin.class new file mode 100644 index 0000000..b43b916 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/EscClose/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/GroundItems/plugin$ignoreItem$1.class b/plugin-playground/build/classes/kotlin/main/GroundItems/plugin$ignoreItem$1.class new file mode 100644 index 0000000..60450b7 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/GroundItems/plugin$ignoreItem$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/GroundItems/plugin$tagItem$1.class b/plugin-playground/build/classes/kotlin/main/GroundItems/plugin$tagItem$1.class new file mode 100644 index 0000000..b7279c8 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/GroundItems/plugin$tagItem$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/GroundItems/plugin.class b/plugin-playground/build/classes/kotlin/main/GroundItems/plugin.class new file mode 100644 index 0000000..e4a1ccc Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/GroundItems/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/HolidayLoginMusic/plugin.class b/plugin-playground/build/classes/kotlin/main/HolidayLoginMusic/plugin.class new file mode 100644 index 0000000..7f4d4c6 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/HolidayLoginMusic/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/IdentifyClueScrolls/plugin$WhenMappings.class b/plugin-playground/build/classes/kotlin/main/IdentifyClueScrolls/plugin$WhenMappings.class new file mode 100644 index 0000000..5a84a1e Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/IdentifyClueScrolls/plugin$WhenMappings.class differ diff --git a/plugin-playground/build/classes/kotlin/main/IdentifyClueScrolls/plugin.class b/plugin-playground/build/classes/kotlin/main/IdentifyClueScrolls/plugin.class new file mode 100644 index 0000000..e8df240 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/IdentifyClueScrolls/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$1.class new file mode 100644 index 0000000..311a26b Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$2.class b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$2.class new file mode 100644 index 0000000..d14b17c Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$2.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3$keyPressed$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3$keyPressed$1.class new file mode 100644 index 0000000..8e361ab Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3$keyPressed$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3$keyReleased$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3$keyReleased$1.class new file mode 100644 index 0000000..3719a26 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3$keyReleased$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3$keyTyped$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3$keyTyped$1.class new file mode 100644 index 0000000..fdca1b8 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3$keyTyped$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3.class b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3.class new file mode 100644 index 0000000..58677b3 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$4.class b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$4.class new file mode 100644 index 0000000..b7e2e4a Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$4.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas.class b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas.class new file mode 100644 index 0000000..11de0a9 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/BaseSprite.class b/plugin-playground/build/classes/kotlin/main/KondoKit/BaseSprite.class new file mode 100644 index 0000000..d20db78 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/BaseSprite.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/Constants.class b/plugin-playground/build/classes/kotlin/main/KondoKit/Constants.class new file mode 100644 index 0000000..d60d571 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/Constants.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/Exposed.class b/plugin-playground/build/classes/kotlin/main/KondoKit/Exposed.class new file mode 100644 index 0000000..2f0ca61 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/Exposed.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$FieldNotifier.class b/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$FieldNotifier.class new file mode 100644 index 0000000..e25f3c3 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$FieldNotifier.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$FieldObserver.class b/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$FieldObserver.class new file mode 100644 index 0000000..3f3fe2b Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$FieldObserver.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$showToast$1$1$run$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$showToast$1$1$run$1.class new file mode 100644 index 0000000..476a764 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$showToast$1$1$run$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$showToast$1$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$showToast$1$1.class new file mode 100644 index 0000000..91d906c Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$showToast$1$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$showToast$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$showToast$1.class new file mode 100644 index 0000000..5e988fb Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$showToast$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers.class b/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers.class new file mode 100644 index 0000000..62a0dcd Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$1$keyPressed$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$1$keyPressed$1.class new file mode 100644 index 0000000..b48fe04 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$1$keyPressed$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$1$keyTyped$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$1$keyTyped$1.class new file mode 100644 index 0000000..cbd2bbe Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$1$keyTyped$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$1.class new file mode 100644 index 0000000..55ecc6c Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$2$mouseClicked$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$2$mouseClicked$1.class new file mode 100644 index 0000000..131f9f3 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$2$mouseClicked$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$2.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$2.class new file mode 100644 index 0000000..e2a1be1 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$2.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$3$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$3$1.class new file mode 100644 index 0000000..fae0d4c Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$3$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$3.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$3.class new file mode 100644 index 0000000..b0ad64f Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$3.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$1.class new file mode 100644 index 0000000..86a38fe Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$2.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$2.class new file mode 100644 index 0000000..e7450f3 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$2.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$3.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$3.class new file mode 100644 index 0000000..c90ebfe Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$3.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$4.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$4.class new file mode 100644 index 0000000..59da1a9 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$4.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1.class new file mode 100644 index 0000000..03e0d60 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField.class new file mode 100644 index 0000000..b4cc7ef Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$HiscoresResponse.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$HiscoresResponse.class new file mode 100644 index 0000000..6b30b38 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$HiscoresResponse.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$PlayerInfo.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$PlayerInfo.class new file mode 100644 index 0000000..26d71ca Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$PlayerInfo.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$Skill.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$Skill.class new file mode 100644 index 0000000..34511fa Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$Skill.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView.class new file mode 100644 index 0000000..8552bcc Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresViewKt.class b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresViewKt.class new file mode 100644 index 0000000..bf94448 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresViewKt.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ImageCanvas.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ImageCanvas.class new file mode 100644 index 0000000..61b625c Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ImageCanvas.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/IndexedSprite.class b/plugin-playground/build/classes/kotlin/main/KondoKit/IndexedSprite.class new file mode 100644 index 0000000..03bb7f6 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/IndexedSprite.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$FixedSizePanel.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$FixedSizePanel.class new file mode 100644 index 0000000..437a732 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$FixedSizePanel.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$GroundSnapshot.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$GroundSnapshot.class new file mode 100644 index 0000000..f40ed1a Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$GroundSnapshot.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$Item.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$Item.class new file mode 100644 index 0000000..4330cda Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$Item.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$addItemToLootPanel$1$newQuantity$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$addItemToLootPanel$1$newQuantity$1.class new file mode 100644 index 0000000..7565ab6 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$addItemToLootPanel$1$newQuantity$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$createItemPanel$$inlined$apply$lambda$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$createItemPanel$$inlined$apply$lambda$1.class new file mode 100644 index 0000000..42045aa Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$createItemPanel$$inlined$apply$lambda$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$createLootFrame$rightClickListener$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$createLootFrame$rightClickListener$1.class new file mode 100644 index 0000000..7359157 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$createLootFrame$rightClickListener$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$createLootTrackerView$1$rightClickListener$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$createLootTrackerView$1$rightClickListener$1.class new file mode 100644 index 0000000..04c7f60 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$createLootTrackerView$1$rightClickListener$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$handleNewDrops$$inlined$forEach$lambda$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$handleNewDrops$$inlined$forEach$lambda$1.class new file mode 100644 index 0000000..da4ab18 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$handleNewDrops$$inlined$forEach$lambda$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$removeLootFrameMenu$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$removeLootFrameMenu$1.class new file mode 100644 index 0000000..a04d9c6 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$removeLootFrameMenu$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$resetLootTracker$rightClickListener$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$resetLootTracker$rightClickListener$1.class new file mode 100644 index 0000000..b4eca12 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$resetLootTracker$rightClickListener$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$resetLootTrackerMenu$1$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$resetLootTrackerMenu$1$1.class new file mode 100644 index 0000000..900bed3 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$resetLootTrackerMenu$1$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$resetLootTrackerMenu$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$resetLootTrackerMenu$1.class new file mode 100644 index 0000000..e9d4243 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$resetLootTrackerMenu$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$sam$i$java_util_function_BiFunction$0.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$sam$i$java_util_function_BiFunction$0.class new file mode 100644 index 0000000..638e090 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$sam$i$java_util_function_BiFunction$0.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView.class b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView.class new file mode 100644 index 0000000..754dc4f Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/NonIndexedSprite.class b/plugin-playground/build/classes/kotlin/main/KondoKit/NonIndexedSprite.class new file mode 100644 index 0000000..9967e59 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/NonIndexedSprite.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ProgressBar.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ProgressBar.class new file mode 100644 index 0000000..bdeb5c8 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ProgressBar.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$1.class new file mode 100644 index 0000000..08dfea7 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$2.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$2.class new file mode 100644 index 0000000..19016f8 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$2.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$3$run$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$3$run$1.class new file mode 100644 index 0000000..e3a5c3f Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$3$run$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$3.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$3.class new file mode 100644 index 0000000..3110043 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$3.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView.class new file mode 100644 index 0000000..7601b12 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$1.class new file mode 100644 index 0000000..25f54d6 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$2.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$2.class new file mode 100644 index 0000000..8de6309 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$2.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$3.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$3.class new file mode 100644 index 0000000..1e56de3 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$3.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$4.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$4.class new file mode 100644 index 0000000..17fec30 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$4.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$5.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$5.class new file mode 100644 index 0000000..39dc3e3 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$5.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$handleResize$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$handleResize$1.class new file mode 100644 index 0000000..89885c4 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$handleResize$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$scrollContent$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$scrollContent$1.class new file mode 100644 index 0000000..c300d27 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$scrollContent$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$updateScrollbar$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$updateScrollbar$1.class new file mode 100644 index 0000000..207c2af Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$updateScrollbar$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel.class b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel.class new file mode 100644 index 0000000..4a7020f Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImage.class b/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImage.class new file mode 100644 index 0000000..6dbe4a8 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImage.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptGlIndexedSprite$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptGlIndexedSprite$1.class new file mode 100644 index 0000000..8dcc5c3 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptGlIndexedSprite$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptGlSprite$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptGlSprite$1.class new file mode 100644 index 0000000..cec910e Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptGlSprite$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptSoftwareIndexedSprite$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptSoftwareIndexedSprite$1.class new file mode 100644 index 0000000..fd3b6a8 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptSoftwareIndexedSprite$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptSoftwareSprite$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptSoftwareSprite$1.class new file mode 100644 index 0000000..02c1a87 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptSoftwareSprite$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt.class b/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt.class new file mode 100644 index 0000000..a12d83c Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/Themes$Theme.class b/plugin-playground/build/classes/kotlin/main/KondoKit/Themes$Theme.class new file mode 100644 index 0000000..e6904a6 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/Themes$Theme.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/Themes$ThemeType.class b/plugin-playground/build/classes/kotlin/main/KondoKit/Themes$ThemeType.class new file mode 100644 index 0000000..69c5f6e Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/Themes$ThemeType.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/Themes$WhenMappings.class b/plugin-playground/build/classes/kotlin/main/KondoKit/Themes$WhenMappings.class new file mode 100644 index 0000000..0a5e14c Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/Themes$WhenMappings.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/Themes.class b/plugin-playground/build/classes/kotlin/main/KondoKit/Themes.class new file mode 100644 index 0000000..0477b86 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/Themes.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/XPTable.class b/plugin-playground/build/classes/kotlin/main/KondoKit/XPTable.class new file mode 100644 index 0000000..cf49e6b Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/XPTable.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$createResetMenu$1$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$createResetMenu$1$1.class new file mode 100644 index 0000000..4f8ed96 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$createResetMenu$1$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$createResetMenu$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$createResetMenu$1.class new file mode 100644 index 0000000..e9b3705 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$createResetMenu$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$createXPTrackerView$rightClickListener$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$createXPTrackerView$rightClickListener$1.class new file mode 100644 index 0000000..2f331ae Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$createXPTrackerView$rightClickListener$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$resetXPTracker$rightClickListener$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$resetXPTracker$rightClickListener$1.class new file mode 100644 index 0000000..1f4918d Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$resetXPTracker$rightClickListener$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView.class b/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView.class new file mode 100644 index 0000000..17a02ef Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/XPWidget.class b/plugin-playground/build/classes/kotlin/main/KondoKit/XPWidget.class new file mode 100644 index 0000000..75ef5da Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/XPWidget.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$Companion.class b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$Companion.class new file mode 100644 index 0000000..e0b0b29 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$Companion.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$StateManager.class b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$StateManager.class new file mode 100644 index 0000000..183c414 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$StateManager.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$WhenMappings.class b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$WhenMappings.class new file mode 100644 index 0000000..b7bf00b Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$WhenMappings.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$createNavButton$$inlined$apply$lambda$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$createNavButton$$inlined$apply$lambda$1.class new file mode 100644 index 0000000..698d2cf Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$createNavButton$$inlined$apply$lambda$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$createNavButton$actionListener$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$createNavButton$actionListener$1.class new file mode 100644 index 0000000..f8b187e Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$createNavButton$actionListener$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$searchHiscore$1.class b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$searchHiscore$1.class new file mode 100644 index 0000000..1711b48 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$searchHiscore$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/KondoKit/plugin.class b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin.class new file mode 100644 index 0000000..002213f Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/KondoKit/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$1.class b/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$1.class new file mode 100644 index 0000000..1ed4936 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$2.class b/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$2.class new file mode 100644 index 0000000..cee68f8 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$2.class differ diff --git a/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$3.class b/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$3.class new file mode 100644 index 0000000..78d51b2 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$3.class differ diff --git a/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$4.class b/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$4.class new file mode 100644 index 0000000..5c4638b Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$4.class differ diff --git a/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin.class b/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin.class new file mode 100644 index 0000000..c65acd2 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/META-INF/plugin-playground.kotlin_module b/plugin-playground/build/classes/kotlin/main/META-INF/plugin-playground.kotlin_module new file mode 100644 index 0000000..69ed994 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/META-INF/plugin-playground.kotlin_module differ diff --git a/plugin-playground/build/classes/kotlin/main/MiniMenuQOL/plugin$WhenMappings.class b/plugin-playground/build/classes/kotlin/main/MiniMenuQOL/plugin$WhenMappings.class new file mode 100644 index 0000000..f549a7a Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/MiniMenuQOL/plugin$WhenMappings.class differ diff --git a/plugin-playground/build/classes/kotlin/main/MiniMenuQOL/plugin.class b/plugin-playground/build/classes/kotlin/main/MiniMenuQOL/plugin.class new file mode 100644 index 0000000..463b62f Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/MiniMenuQOL/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/RememberMyLogin/plugin.class b/plugin-playground/build/classes/kotlin/main/RememberMyLogin/plugin.class new file mode 100644 index 0000000..1f8bc81 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/RememberMyLogin/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/SlayerTrackerPlugin/plugin.class b/plugin-playground/build/classes/kotlin/main/SlayerTrackerPlugin/plugin.class new file mode 100644 index 0000000..3e35837 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/SlayerTrackerPlugin/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/TabReply/plugin$Init$1.class b/plugin-playground/build/classes/kotlin/main/TabReply/plugin$Init$1.class new file mode 100644 index 0000000..2bb7d5e Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/TabReply/plugin$Init$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/TabReply/plugin.class b/plugin-playground/build/classes/kotlin/main/TabReply/plugin.class new file mode 100644 index 0000000..6a1e8a3 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/TabReply/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/TakeScreenshot/plugin$Init$1.class b/plugin-playground/build/classes/kotlin/main/TakeScreenshot/plugin$Init$1.class new file mode 100644 index 0000000..56a6008 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/TakeScreenshot/plugin$Init$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/TakeScreenshot/plugin.class b/plugin-playground/build/classes/kotlin/main/TakeScreenshot/plugin.class new file mode 100644 index 0000000..289eeb3 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/TakeScreenshot/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/ToggleResizableSD/plugin$Init$1.class b/plugin-playground/build/classes/kotlin/main/ToggleResizableSD/plugin$Init$1.class new file mode 100644 index 0000000..206262b Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/ToggleResizableSD/plugin$Init$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/ToggleResizableSD/plugin.class b/plugin-playground/build/classes/kotlin/main/ToggleResizableSD/plugin.class new file mode 100644 index 0000000..448899d Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/ToggleResizableSD/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/ValUAdd/plugin.class b/plugin-playground/build/classes/kotlin/main/ValUAdd/plugin.class new file mode 100644 index 0000000..b38104c Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/ValUAdd/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/XPDropPlugin/XPSprites.class b/plugin-playground/build/classes/kotlin/main/XPDropPlugin/XPSprites.class new file mode 100644 index 0000000..b06689c Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/XPDropPlugin/XPSprites.class differ diff --git a/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin$Theme.class b/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin$Theme.class new file mode 100644 index 0000000..47ee9a6 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin$Theme.class differ diff --git a/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin$WhenMappings.class b/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin$WhenMappings.class new file mode 100644 index 0000000..ffb0843 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin$WhenMappings.class differ diff --git a/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin$XPGain.class b/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin$XPGain.class new file mode 100644 index 0000000..eaf3679 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin$XPGain.class differ diff --git a/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin.class b/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin.class new file mode 100644 index 0000000..3a29c7f Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin.class differ diff --git a/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/Constants.class b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/Constants.class new file mode 100644 index 0000000..c653e61 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/Constants.class differ diff --git a/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/XPSprites.class b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/XPSprites.class new file mode 100644 index 0000000..1579886 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/XPSprites.class differ diff --git a/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/XPTable.class b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/XPTable.class new file mode 100644 index 0000000..922b2b2 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/XPTable.class differ diff --git a/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin$XPGlobe.class b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin$XPGlobe.class new file mode 100644 index 0000000..9006497 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin$XPGlobe.class differ diff --git a/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin$drawXpGlobe$clamp$1.class b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin$drawXpGlobe$clamp$1.class new file mode 100644 index 0000000..ed3207d Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin$drawXpGlobe$clamp$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin$drawXpGlobe$lerp$1.class b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin$drawXpGlobe$lerp$1.class new file mode 100644 index 0000000..57c664e Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin$drawXpGlobe$lerp$1.class differ diff --git a/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin.class b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin.class new file mode 100644 index 0000000..1d8f8a2 Binary files /dev/null and b/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin.class differ diff --git a/plugin-playground/build/kotlin/pluginplaygroundjar-classes.txt b/plugin-playground/build/kotlin/pluginplaygroundjar-classes.txt new file mode 100644 index 0000000..d4903b3 --- /dev/null +++ b/plugin-playground/build/kotlin/pluginplaygroundjar-classes.txt @@ -0,0 +1 @@ +/home/greg/rt4-client/plugin-playground/build/classes/java/main/InterfaceDebugPlugin/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/java/main/OverheadDebugPlugin/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/java/main/VarpLogPlugin/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/AudioQOL/plugin$Init$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/AudioQOL/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin$Companion.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin$MouseCallbacks.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin$MouseWheelCallbacks.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/BasicInputQOL/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/BetterShiftDrop/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/Craftify/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/EscClose/plugin$Init$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/EscClose/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/GroundItems/plugin$ignoreItem$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/GroundItems/plugin$tagItem$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/GroundItems/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/HolidayLoginMusic/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/IdentifyClueScrolls/plugin$WhenMappings.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/IdentifyClueScrolls/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$2.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3$keyPressed$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3$keyReleased$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3$keyTyped$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$3.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas$4.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/AltCanvas.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/BaseSprite.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/Constants.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/Exposed.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$FieldNotifier.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$FieldObserver.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$showToast$1$1$run$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$showToast$1$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers$showToast$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/Helpers.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$1$keyPressed$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$1$keyTyped$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$2$mouseClicked$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$2.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$3$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$3.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$2.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$3.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1$4.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField$searchPlayer$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$CustomSearchField.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$HiscoresResponse.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$PlayerInfo.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView$Skill.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresView.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/HiscoresViewKt.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ImageCanvas.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/IndexedSprite.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$FixedSizePanel.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$GroundSnapshot.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$Item.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$addItemToLootPanel$1$newQuantity$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$createItemPanel$$inlined$apply$lambda$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$createLootFrame$rightClickListener$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$createLootTrackerView$1$rightClickListener$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$handleNewDrops$$inlined$forEach$lambda$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$removeLootFrameMenu$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$resetLootTracker$rightClickListener$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$resetLootTrackerMenu$1$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$resetLootTrackerMenu$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView$sam$i$java_util_function_BiFunction$0.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/LootTrackerView.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/NonIndexedSprite.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ProgressBar.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$2.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$3$run$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView$addPluginToEditor$3.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ReflectiveEditorView.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$2.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$3.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$4.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$5.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$handleResize$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$scrollContent$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel$updateScrollbar$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/ScrollablePanel.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImage.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptGlIndexedSprite$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptGlSprite$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptSoftwareIndexedSprite$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt$adaptSoftwareSprite$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/SpriteToBufferedImageKt.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/Themes$Theme.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/Themes$ThemeType.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/Themes$WhenMappings.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/Themes.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/XPTable.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$createResetMenu$1$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$createResetMenu$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$createXPTrackerView$rightClickListener$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView$resetXPTracker$rightClickListener$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/XPTrackerView.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/XPWidget.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$Companion.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$StateManager.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$WhenMappings.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$createNavButton$$inlined$apply$lambda$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$createNavButton$actionListener$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/plugin$searchHiscore$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/KondoKit/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$2.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$3.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin$OnMiniMenuCreate$4.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/LoginTimer/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/MiniMenuQOL/plugin$WhenMappings.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/MiniMenuQOL/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/RememberMyLogin/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/SlayerTrackerPlugin/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/TabReply/plugin$Init$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/TabReply/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/TakeScreenshot/plugin$Init$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/TakeScreenshot/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/ToggleResizableSD/plugin$Init$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/ToggleResizableSD/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/ValUAdd/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/XPDropPlugin/XPSprites.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin$Theme.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin$WhenMappings.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin$XPGain.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/XPDropPlugin/plugin.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/Constants.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/XPSprites.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/XPTable.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin$XPGlobe.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin$drawXpGlobe$clamp$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin$drawXpGlobe$lerp$1.class:/home/greg/rt4-client/plugin-playground/build/classes/kotlin/main/XPGlobesPlugin/plugin.class \ No newline at end of file diff --git a/plugin-playground/build/libs/plugin-playground.jar b/plugin-playground/build/libs/plugin-playground.jar new file mode 100644 index 0000000..9b7f078 Binary files /dev/null and b/plugin-playground/build/libs/plugin-playground.jar differ diff --git a/plugin-playground/build/tmp/compileJava/previous-compilation-data.bin b/plugin-playground/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..5ed03ba Binary files /dev/null and b/plugin-playground/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/plugin-playground/build/tmp/jar/MANIFEST.MF b/plugin-playground/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/plugin-playground/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/plugin-playground/src/main/java/InterfaceDebugPlugin/plugin.java b/plugin-playground/src/main/java/InterfaceDebugPlugin/plugin.java new file mode 100644 index 0000000..dc767b0 --- /dev/null +++ b/plugin-playground/src/main/java/InterfaceDebugPlugin/plugin.java @@ -0,0 +1,92 @@ +package InterfaceDebugPlugin; + +import plugin.Plugin; +import plugin.annotations.PluginMeta; +import plugin.api.*; +import rt4.Component; +import rt4.GameShell; + +import java.util.ArrayList; +import java.util.Arrays; + +public class plugin extends Plugin { + private boolean isEnabled; + private boolean isVerbose; + + private final ArrayList activeVarps = new ArrayList<>(); + + @Override + public void ComponentDraw(int componentIndex, Component component, int screenX, int screenY) { + if (!isEnabled) return; + + FontColor color = new FontColor((((component.type * 50) << 16) | 255 << 8 | Math.min(component.type * 50, 255))); + + if (!isVerbose) { + if + ( + component.type != 0 + && component.type != 9 + && (component.type != 5 + || (component.onOptionClick != null + || component.onMouseOver != null + || component.onHold != null + || component.varpTriggers != null + || component.onVarcstrTransmit != null + || component.onVarcTransmit != null + || component.cs1ComparisonOpcodes != null)) + || component.hidden + ) return; + } + + API.DrawText( + FontType.SMALL, + color, + TextModifier.LEFT, + componentIndex + "" + (component.modelId != 0 ? " (" + component.modelId + ")" : ""), + screenX, + screenY + ); + + if (component.varpTriggers != null) { + Arrays.stream(component.varpTriggers).forEach(varp -> { if(!activeVarps.contains(varp)) activeVarps.add(varp); }); + } + } + + @Override + public void Draw(long timeDelta) { + if (!isEnabled) return; + + StringBuilder sb = new StringBuilder(); + sb.append("Varps: ["); + + for (int varp : activeVarps) sb.append(varp).append(" "); + + sb.append("]"); + + API.DrawText( + FontType.SMALL, + FontColor.YELLOW, + TextModifier.CENTER, + sb.toString(), + GameShell.canvasWidth / 2 - 100, + 20 + ); + } + + @Override + public void ProcessCommand(String commandStr, String[] args) { + if (!API.PlayerHasPrivilege(Privileges.JMOD)) return; + + if (commandStr.equalsIgnoreCase("::debug_iface")){ + isEnabled = !isEnabled; + } + + if (commandStr.equalsIgnoreCase("::debug_iface_verbose")) { + isVerbose = !isVerbose; + } + + if (commandStr.equalsIgnoreCase("::clear_iface_varps")) { + activeVarps.clear(); + } + } +} diff --git a/plugin-playground/src/main/java/InterfaceDebugPlugin/plugin.properties b/plugin-playground/src/main/java/InterfaceDebugPlugin/plugin.properties new file mode 100644 index 0000000..365c76b --- /dev/null +++ b/plugin-playground/src/main/java/InterfaceDebugPlugin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Aids in identifying interface components/varps/model IDs.' +VERSION=1.2 \ No newline at end of file diff --git a/plugin-playground/src/main/java/OverheadDebugPlugin/plugin.java b/plugin-playground/src/main/java/OverheadDebugPlugin/plugin.java new file mode 100644 index 0000000..131370c --- /dev/null +++ b/plugin-playground/src/main/java/OverheadDebugPlugin/plugin.java @@ -0,0 +1,60 @@ +package OverheadDebugPlugin; + +import plugin.Plugin; +import plugin.annotations.PluginMeta; +import plugin.api.*; +import rt4.*; + +public class plugin extends Plugin { + private boolean isEnabled = false; + + @Override + public void PlayerOverheadDraw(Player player, int screenX, int screenY) { + if (!isEnabled) return; + + API.DrawText( + FontType.SMALL, + FontColor.YELLOW, + TextModifier.CENTER, + player.username.toString(), + screenX, + screenY + ); + } + + @Override + public void NPCOverheadDraw(Npc npc, int screenX, int screenY) { + if (!isEnabled) return; + + String npcSb = + (npc.type.name.strEquals(JagString.parse("null")) + ? npc.type.getMultiNpc() != null + ? "Wrapper [" + npc.type.getMultiNpc().name + "]" + : "Wrapper" + : npc.type.name) + + " [G: " + + npc.spotAnimId + + "] [R: " + npc.getBasId() + + "] [A: " + npc.seqId + + "] [Vb: " + + npc.type.multiNpcVarbit + "]"; + + API.DrawText( + FontType.SMALL, + FontColor.YELLOW, + TextModifier.CENTER, + npcSb, + screenX, + screenY + ); + } + + @Override + public void ProcessCommand(String commandStr, String[] args) { + if (!API.PlayerHasPrivilege(Privileges.JMOD)) return; + + if (commandStr.equalsIgnoreCase("::npcdebug")) { + isEnabled = !isEnabled; + } + } +} diff --git a/plugin-playground/src/main/java/OverheadDebugPlugin/plugin.properties b/plugin-playground/src/main/java/OverheadDebugPlugin/plugin.properties new file mode 100644 index 0000000..e8b0c4f --- /dev/null +++ b/plugin-playground/src/main/java/OverheadDebugPlugin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Draws helpful overhead debug information.' +VERSION=1.3 \ No newline at end of file diff --git a/plugin-playground/src/main/java/VarpLogPlugin/plugin.java b/plugin-playground/src/main/java/VarpLogPlugin/plugin.java new file mode 100644 index 0000000..4db3378 --- /dev/null +++ b/plugin-playground/src/main/java/VarpLogPlugin/plugin.java @@ -0,0 +1,71 @@ +package VarpLogPlugin; + +import plugin.Plugin; +import plugin.annotations.PluginMeta; +import plugin.api.*; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; + +public class plugin extends Plugin { + boolean isEnabled = false; + + int MAX_VISIBLE_UPDATES = 5; + + ArrayList varpUpdates = new ArrayList<>(); + ArrayList updateCreationTime = new ArrayList<>(); + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); + + @Override + public void Init() { + if (API.IsHD()) MAX_VISIBLE_UPDATES = 10; + } + + @Override + public void OnVarpUpdate(int id, int value) { + if (!isEnabled) return; + + if (varpUpdates.size() == MAX_VISIBLE_UPDATES) { + varpUpdates.remove(0); + updateCreationTime.remove(0); + } + varpUpdates.add(id + " = " + value); + String formattedTime = sdf.format(new Date()); + updateCreationTime.add(formattedTime); + System.out.println("[VARP Update]" + formattedTime + " " + id + "->" + value); + } + + @Override + public void Draw(long timeDelta) { + if (!isEnabled) return; + + int startX = 10; + int startY = 30; + + API.DrawText(FontType.SMALL, FontColor.YELLOW, TextModifier.LEFT, "Varp Updates:", startX, startY); + + for (int i = 0; i < varpUpdates.size(); i++){ + String update = varpUpdates.get(i); + String time = updateCreationTime.get(i); + + API.DrawText( + FontType.SMALL, + FontColor.YELLOW, + TextModifier.LEFT, + "[" + time + "] " + update, + startX, + startY + (i + 1) * 15 + ); + } + } + + @Override + public void ProcessCommand(String commandStr, String[] args) { + if (!API.PlayerHasPrivilege(Privileges.JMOD)) return; + + if (commandStr.equalsIgnoreCase("::varplog")) { + isEnabled = !isEnabled; + } + } +} diff --git a/plugin-playground/src/main/java/VarpLogPlugin/plugin.properties b/plugin-playground/src/main/java/VarpLogPlugin/plugin.properties new file mode 100644 index 0000000..29a8e09 --- /dev/null +++ b/plugin-playground/src/main/java/VarpLogPlugin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Adds a simple log of varp changes drawn directly to the screen.' +VERSION=1.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/AudioQOL/plugin.kt b/plugin-playground/src/main/kotlin/AudioQOL/plugin.kt new file mode 100644 index 0000000..707119f --- /dev/null +++ b/plugin-playground/src/main/kotlin/AudioQOL/plugin.kt @@ -0,0 +1,62 @@ +package AudioQOL + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.API +import plugin.api.FontColor +import plugin.api.FontType +import plugin.api.TextModifier +import rt4.Keyboard +import java.awt.event.KeyAdapter +import java.awt.event.KeyEvent + +class plugin : Plugin() { + var isMute = false + var lastVolumes: Triple? = null + + override fun Update() { + if (isMute) return + API.StoreData("sound-vol", API.GetSoundVolume()) + API.StoreData("music-vol", API.GetMusicVolume()) + API.StoreData("amb-vol", API.GetAmbientVolume()) + } + + override fun Init() { + val soundVol = API.GetData("sound-vol") as? Int ?: 255 + val musicVol = API.GetData("music-vol") as? Int ?: 127 + val ambVol = API.GetData("amb-vol") as? Int ?: 127 + API.SetMusicVolume(soundVol) + API.SetAmbientVolume(musicVol) + API.SetSoundVolume(ambVol) + + API.AddKeyboardListener(object : KeyAdapter() { + override fun keyPressed(e: KeyEvent) { + if (API.IsKeyPressed(Keyboard.KEY_CTRL) && e.keyCode == KeyEvent.VK_M) { + toggleMute() + } + } + }) + } + + private fun toggleMute() { + isMute = !isMute + if (isMute) { + lastVolumes = Triple(API.GetMusicVolume(), API.GetSoundVolume(), API.GetAmbientVolume()) + API.SetMusicVolume(0) + API.SetSoundVolume(0) + API.SetAmbientVolume(0) + API.SendMessage("Audio Muted.") + if (API.IsMusicPlaying()) { + API.PlayMusic(0, -1) + } + } else { + API.SetMusicVolume(lastVolumes?.first ?: 255) + API.SetSoundVolume(lastVolumes?.second ?: 127) + API.SetAmbientVolume(lastVolumes?.third ?: 127) + API.SendMessage("Audio Unmuted.") + if ((lastVolumes?.first ?: 255) > 0) { + API.RequestNewSong() + } + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/AudioQOL/plugin.properties b/plugin-playground/src/main/kotlin/AudioQOL/plugin.properties new file mode 100644 index 0000000..fd79b30 --- /dev/null +++ b/plugin-playground/src/main/kotlin/AudioQOL/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Provides some QOL for audio, including better settings persistence' +VERSION=1.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/BasicInputQOL/plugin.kt b/plugin-playground/src/main/kotlin/BasicInputQOL/plugin.kt new file mode 100644 index 0000000..4fb34a9 --- /dev/null +++ b/plugin-playground/src/main/kotlin/BasicInputQOL/plugin.kt @@ -0,0 +1,110 @@ +package BasicInputQOL + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.* +import rt4.Keyboard +import java.awt.event.* +import javax.swing.SwingUtilities + +class plugin : Plugin() { + private var cameraDebugEnabled = false + private var mouseDebugEnabled = false + + companion object { + private var lastMouseWheelX = 0 + private var lastMouseWheelY = 0 + private val defaultCameraPYZ = Triple(128.0, 0.0, 600) + } + + override fun Init() { + API.AddMouseListener(MouseCallbacks) + API.AddMouseWheelListener(MouseWheelCallbacks) + } + + override fun ProcessCommand(commandStr: String?, args: Array?) { + commandStr ?: return + if (API.PlayerHasPrivilege(Privileges.JMOD)) { + when(commandStr) { + "::mousedebug" -> mouseDebugEnabled = !mouseDebugEnabled + "::cameradebug" -> cameraDebugEnabled = !cameraDebugEnabled + } + } + } + + override fun Draw(timeDelta: Long) { + if (mouseDebugEnabled) { + API.DrawText( + FontType.SMALL, + FontColor.YELLOW, + TextModifier.LEFT, + "Mouse Coords: (${API.GetMouseX()}, ${API.GetMouseY()})", + 10, + 40 + ) + } + if (cameraDebugEnabled) { + API.DrawText( + FontType.SMALL, + FontColor.YELLOW, + TextModifier.LEFT, + "Camera: [P=${API.GetCameraPitch()}, Y=${API.GetCameraYaw()}, Z=${API.GetCameraZoom()}]", + 10, + 50 + ) + } + } + + object MouseWheelCallbacks : MouseWheelListener { + override fun mouseWheelMoved(e: MouseWheelEvent?) { + e ?: return + if (API.IsKeyPressed(Keyboard.KEY_SHIFT) || API.IsKeyPressed(Keyboard.KEY_CTRL)) { + val previous = API.GetPreviousMouseWheelRotation() + val current = API.GetMouseWheelRotation() + val diff = current - previous + API.UpdateCameraZoom(diff) + } + } + } + + object MouseCallbacks : MouseAdapter() { + override fun mouseDragged(e: MouseEvent?) { + e ?: return + if (SwingUtilities.isMiddleMouseButton(e)) { + val x = e.x + val y = e.y + val accelX = lastMouseWheelX - x + val accelY = lastMouseWheelY - y + lastMouseWheelX = x + lastMouseWheelY = y + API.UpdateCameraYaw(accelX * 2.0) + API.UpdateCameraPitch(-accelY * 2.0) + } + } + + override fun mouseClicked(e: MouseEvent?) { + e ?: return + +/* val width = API.GetWindowDimensions().width; + val compassBordersX = intArrayOf(width - 165, width - 125) + val compassBordersY = intArrayOf(0, 45) + + if ( + e.x in compassBordersX[0]..compassBordersX[1] + && e.y in compassBordersY[0]..compassBordersY[1] + ) + { + API.SetCameraPitch(defaultCameraPYZ.first) + API.SetCameraYaw(defaultCameraPYZ.second) + }*/ + } + + override fun mousePressed(e: MouseEvent?) { + e ?: return + if (SwingUtilities.isMiddleMouseButton(e)) { + lastMouseWheelX = e.x + lastMouseWheelY = e.y + } + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/BasicInputQOL/plugin.properties b/plugin-playground/src/main/kotlin/BasicInputQOL/plugin.properties new file mode 100644 index 0000000..e76c2bd --- /dev/null +++ b/plugin-playground/src/main/kotlin/BasicInputQOL/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Provides some basic input QOL like scroll zoom, middle click panning, etc.' +VERSION=1.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/BetterShiftDrop/plugin.kt b/plugin-playground/src/main/kotlin/BetterShiftDrop/plugin.kt new file mode 100644 index 0000000..155338b --- /dev/null +++ b/plugin-playground/src/main/kotlin/BetterShiftDrop/plugin.kt @@ -0,0 +1,46 @@ +package BetterShiftDrop + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.API +import plugin.api.MiniMenuEntry +import rt4.Cheat +import rt4.Keyboard + +class plugin : Plugin() { + override fun Init() { + if(API.GetData("bsd-toggle") == null) { + API.StoreData("bsd-toggle", true) + Cheat.shiftClick = false + } else if(API.GetData("bsd-toggle") == true) { + Cheat.shiftClick = false + } + } + override fun OnMiniMenuCreate(currentEntries: Array?) { + if(currentEntries == null) return + if(API.GetData("bsd-toggle") == true) { + if(API.IsKeyPressed(Keyboard.KEY_SHIFT)) { + for(entry in currentEntries) { + if(entry.verb.toLowerCase() == "drop" || entry.verb.toLowerCase() == "destroy") continue + if(!entry.isStrictlySecondary) entry.toggleStrictlySecondary() + } + } + } + } + + + override fun ProcessCommand(commandStr: String?, args: Array?) { + super.ProcessCommand(commandStr, args) + when(commandStr) { + "::bsd" -> { + if(API.GetData("bsd-toggle") == true) { + API.StoreData("bsd-toggle", false) + } else if(API.GetData("bsd-toggle") == false) { + API.StoreData("bsd-toggle", true) + } else { + API.StoreData("bsd-toggle", true) + } + } + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/BetterShiftDrop/plugin.properties b/plugin-playground/src/main/kotlin/BetterShiftDrop/plugin.properties new file mode 100644 index 0000000..cd67695 --- /dev/null +++ b/plugin-playground/src/main/kotlin/BetterShiftDrop/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='bushtail' +DESCRIPTION='Better dropping and destroying while holding shift. Use ::bsd command to toggle. If for some reason after installing the plugin, Better Shift Drop does not activate, run the command to activate it.' +VERSION=2.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/Craftify/plugin.kt b/plugin-playground/src/main/kotlin/Craftify/plugin.kt new file mode 100644 index 0000000..0de39d1 --- /dev/null +++ b/plugin-playground/src/main/kotlin/Craftify/plugin.kt @@ -0,0 +1,20 @@ +package Craftify + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.API +import plugin.api.FontColor +import plugin.api.FontType +import plugin.api.TextModifier +import rt4.Fonts +import rt4.Player +import java.awt.Color + +class plugin : Plugin() { + override fun PlayerOverheadDraw(player: Player?, screenX: Int, screenY: Int) { + if (player == null) return + val width = Fonts.p11Full.getStringWidth(player.username) + API.FillRect((screenX - width / 2) - 2, screenY - 20, width + 4, 14, FontColor.fromColor(Color.BLACK).colorCode, 125) + API.DrawText(FontType.SMALL, FontColor.fromColor(Color.WHITE), TextModifier.CENTER, player.username.toString(), screenX, screenY - 8) + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/Craftify/plugin.properties b/plugin-playground/src/main/kotlin/Craftify/plugin.properties new file mode 100644 index 0000000..bf44a94 --- /dev/null +++ b/plugin-playground/src/main/kotlin/Craftify/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='bushtail' +DESCRIPTION='Add nameplates above players heads.' +VERSION=1.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/EscClose/plugin.kt b/plugin-playground/src/main/kotlin/EscClose/plugin.kt new file mode 100644 index 0000000..88ab8f3 --- /dev/null +++ b/plugin-playground/src/main/kotlin/EscClose/plugin.kt @@ -0,0 +1,18 @@ +package EscClose + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.API +import java.awt.event.KeyAdapter +import java.awt.event.KeyEvent + +class plugin : Plugin() { + override fun Init() { + API.AddKeyboardListener(object : KeyAdapter() { + override fun keyPressed(e: KeyEvent) { + if (e.keyCode == KeyEvent.VK_ESCAPE) + API.DispatchCommand("::xface") + } + }) + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/EscClose/plugin.properties b/plugin-playground/src/main/kotlin/EscClose/plugin.properties new file mode 100644 index 0000000..e38752c --- /dev/null +++ b/plugin-playground/src/main/kotlin/EscClose/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Chisato' +DESCRIPTION='Allows you to use ESC in order to (safety) close the open interface/dialogue.' +VERSION=1.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/GroundItems/plugin.kt b/plugin-playground/src/main/kotlin/GroundItems/plugin.kt new file mode 100644 index 0000000..8fe5b18 --- /dev/null +++ b/plugin-playground/src/main/kotlin/GroundItems/plugin.kt @@ -0,0 +1,356 @@ +package GroundItems + +import KondoKit.Exposed +import plugin.Plugin +import plugin.api.API.* +import plugin.api.FontColor.fromColor +import plugin.api.FontType +import plugin.api.MiniMenuEntry +import plugin.api.MiniMenuType +import plugin.api.TextModifier +import rt4.* +import java.awt.Color +import java.io.BufferedReader +import java.io.InputStreamReader +import java.net.HttpURLConnection +import java.net.URL +import java.nio.charset.StandardCharsets +import java.text.DecimalFormat +import kotlin.math.roundToInt + +class plugin : Plugin() { + + @Exposed(description = "Default: true, Use Local JSON or the prices from the Live/Stable server API") + private var useLiveGEPrices = true + @Exposed( "Default: 5,000 (blue)") + private var lowValue = 5000 + @Exposed( "Default: 20,000 (green)") + private var mediumValue = 20000 + @Exposed( "Default: 50,000 (orange)") + private var highValue = 50000 + @Exposed( "Default: 100,000 (pink)") + private var insaneValue = 100000 + @Exposed("Default: 0, No labels will be drawn for items below this value (unless tagged)") + private var hideBelowValue = 0 + @Exposed("Tag Items (purple) add/remove with Ctrl+RightClick Tag/Ignore") + private lateinit var taggedItems: List + @Exposed("Ignore items add/remove with Ctrl+RightClick Tag/Ignore") + private lateinit var ignoredItems: List + + private val coindId = 995 + + private var gePriceMap = loadGEPrices() + + private val colorMap = mapOf( + "tagged" to "#AA00FF", + "hidden" to "#808080", + "lowValue" to "#66B2FF", + "mediumValue" to "#99FF99", + "highValue" to "#FF9600", + "insaneValue" to "#FF66B2", + ) + + private val commandMap = mapOf( + "::setlow" to "low-value", + "::setmed" to "medium-value", + "::sethigh" to "high-value", + "::setinsane" to "insane-value", + "::sethide" to "hide-below-value" + ) + + override fun Init() { + lowValue = GetData("low-value") as? Int ?: 5000 + mediumValue = GetData("medium-value") as? Int ?: 20000 + highValue = GetData("high-value") as? Int ?: 50000 + insaneValue = GetData("insane-value") as? Int ?: 100000 + hideBelowValue = GetData("hide-below-value") as? Int ?: 0 + useLiveGEPrices = GetData("ground-item-use-remote") as? Boolean ?: true + taggedItems = GetData("ground-item-tags")?.let { it.toString().split(",").mapNotNull { it.toIntOrNull() } } ?: emptyList() + ignoredItems = GetData("ground-item-ignore")?.let { it.toString().split(",").mapNotNull { it.toIntOrNull() } } ?: emptyList() + if (gePriceMap.isEmpty()) SendMessage("Ground Items unable to load GE Prices, Remote: $useLiveGEPrices") + } + + private fun isTagged(itemId: Int): Boolean { + return taggedItems.contains(itemId) + } + + private fun isHidden(itemId: Int): Boolean { + return ignoredItems.contains(itemId) + } + + override fun Draw(timeDelta: Long) = renderGroundItemNames() + + override fun ProcessCommand(commandStr: String, args: Array?) { + when (commandStr.toLowerCase()) { + "::resetgroundconfig" -> resetConfig().also { Init() } + "::groundconfig" -> displayRanges() + "::ignoreitem" -> { + args?.get(0)?.toInt()?.let { id -> + SendMessage("Ignoring/Unignoring: $id") + ignoreItem(id).run() + } + } + "::tagitem" -> { + args?.get(0)?.toInt()?.let { id -> + SendMessage("Tagging/Untagging: $id") + tagItem(id).run() + } + } + else -> { + commandMap[commandStr]?.let { key -> + args?.get(0)?.toInt()?.let { valueArg -> + if (valueArg >= 0) { + StoreData(key, valueArg).also { Init() } + } + } + } + } + } + } + + open fun renderGroundItemNames() { + for (x in 0..103) { + for (y in 0..103) { + val objstacknodeLL = SceneGraph.objStacks[Player.plane][x][y] + if (objstacknodeLL != null) { + + val itemCount = getDisplayedStackSize(objstacknodeLL) + var offset = itemCount * 12 + var item = objstacknodeLL.head() as ObjStackNode? + + while (item != null) { + + if(!shouldDisplayItem(item)) { + item = objstacknodeLL.next() as ObjStackNode? + continue + } + + val itemDef = ObjTypeList.get(item.value.type) + val haValue = if (itemDef.id == coindId) item.value.amount else (itemDef.cost * 0.6 * item.value.amount).roundToInt() + val geValue = (gePriceMap[itemDef.id.toString()]?.toInt() ?: 0) * item.value.amount + val highestValue = maxOf(haValue, geValue) + + val screenPos: IntArray = CalculateSceneGraphScreenPosition((x shl 7) + 64, (y shl 7) + 64, 64) + if (screenPos[0] < 0 || screenPos[1] < 0) { + // Item is offscreen + item = objstacknodeLL.next() as ObjStackNode? + continue + } + val screenX = screenPos[0] + val screenY = screenPos[1] + val color = when { + isTagged(itemDef.id) -> colorMap["tagged"] + highestValue < lowValue -> "#FFFFFF" + highestValue < mediumValue -> colorMap["lowValue"] + highestValue < highValue -> colorMap["mediumValue"] + highestValue < insaneValue -> colorMap["highValue"] + else -> colorMap["insaneValue"] + } ?: "#FFFFFF" + val colorInt = color.drop(1).toInt(16) + + val formattedHaValue = formatValue(haValue) + val formattedGeValue = formatValue(geValue) + val amountSuffix = if (item.value.amount > 1) " (${formatValue(item.value.amount)})" else "" + val itemNameAndValue = when (formattedGeValue) { + "0" -> "${itemDef.name}$amountSuffix (HA: $formattedHaValue gp)" + else -> "${itemDef.name}$amountSuffix (GE: $formattedGeValue gp) (HA: $formattedHaValue gp)" + } + drawTextWithDropShadow(screenX, screenY - offset, colorInt, itemNameAndValue) + + offset -= 12 + item = objstacknodeLL.next() as ObjStackNode? + } + } + } + } + InterfaceList.fullRedrawAllInterfaces() // Prevent an overdraw bug + } + + private fun getDisplayedStackSize(objstacknodeLL: LinkedList): Int{ + var displayedStackSize = 0; + var stackItem = objstacknodeLL.head() as ObjStackNode? + while (stackItem != null) { + if(shouldDisplayItem(stackItem)){ + displayedStackSize++ + } + stackItem = objstacknodeLL.next() as ObjStackNode? + } + return displayedStackSize; + } + private fun shouldDisplayItem(item: ObjStackNode): Boolean { + val itemDef = ObjTypeList.get(item.value.type) + val haValue = if (itemDef.id == coindId) item.value.amount else (itemDef.cost * 0.6 * item.value.amount).roundToInt() + val geValue = (gePriceMap[itemDef.id.toString()]?.toInt() ?: 0) * item.value.amount + val highestValue = maxOf(haValue, geValue) + return !((highestValue < hideBelowValue || isHidden(itemDef.id)) && !isTagged(itemDef.id)) + } + + override fun OnMiniMenuCreate(currentEntries: Array?) { + if (currentEntries != null && IsKeyPressed(Keyboard.KEY_CTRL)) { + for ((index, entry) in currentEntries.withIndex()) { + if(entry.type == MiniMenuType.OBJ && index == currentEntries.size - 1) { + val itemDef = ObjTypeList.get(entry.subjectIndex.toInt()) + InsertMiniMenuEntry("Ignore/Unignore", itemDef.name.toString(), ignoreItem(itemDef.id)) + InsertMiniMenuEntry("Tag/Untag", itemDef.name.toString(), tagItem(itemDef.id)) + } + } + } + } + + private fun ignoreItem(itemId: Int): Runnable { + return Runnable { + val existingIgnores = ignoredItems.toMutableList() + + if (existingIgnores.contains(itemId)) { + existingIgnores.remove(itemId) + } else { + existingIgnores.add(itemId) + } + + val updatedIgnores = existingIgnores.joinToString(",") + StoreData("ground-item-ignore", updatedIgnores).also { Init() } + } + } + + private fun tagItem(itemId: Int): Runnable { + return Runnable { + val existingTags = taggedItems.toMutableList() + + if (existingTags.contains(itemId)) { + existingTags.remove(itemId) + } else { + existingTags.add(itemId) + } + + val updatedTags = existingTags.joinToString(",") + StoreData("ground-item-tags", updatedTags).also { Init() } + } + } + + + private fun resetConfig() { + lowValue = 5000 + mediumValue = 20000 + highValue = 50000 + insaneValue = 100000 + hideBelowValue = 0 + useLiveGEPrices = true + StoreData("ground-item-tags",""); + StoreData("ground-item-ignore",""); + StoreData("low-value", lowValue) + StoreData("ground-item-use-remote", useLiveGEPrices) + StoreData("medium-value", mediumValue) + StoreData("high-value", highValue) + StoreData("insane-value", insaneValue) + StoreData("hide-below-value", hideBelowValue) + } + + private fun displayRanges() { + val low = lowValue + val medium = mediumValue + val high = highValue + val insane = insaneValue + val hide = hideBelowValue + + SendMessage("== Ground Item Config ==") + SendMessage("Low: $low") + SendMessage("Medium: $medium") + SendMessage("High: $high") + SendMessage("Insane: $insane") + SendMessage("Hide Below: $hide") + SendMessage("-- Ignored Items --") + for(item in ignoredItems){ + val itemDef = ObjTypeList.get(item) + SendMessage("Ignored: ${itemDef.name} ${itemDef.id}") + } + SendMessage("-- Tagged Items --") + for(item in taggedItems){ + val itemDef = ObjTypeList.get(item) + SendMessage("Tagged: ${itemDef.name} ${itemDef.id}") + } + SendMessage("cmds ::set(low,med,high,insane,hide), ::(tag,ignore)item ID, ::(reset)groundconfig") + } + + private fun drawTextWithDropShadow(x: Int, y: Int, color: Int, text: String) { + DrawText(FontType.SMALL, fromColor(Color(0)), TextModifier.CENTER, text, x + 1, y + 1) + DrawText(FontType.SMALL, fromColor(Color(color)), TextModifier.CENTER, text, x, y) + } + + fun OnKondoValueUpdated() { + StoreData("ground-item-tags",taggedItems); + StoreData("ground-item-ignore",ignoredItems); + StoreData("low-value", lowValue) + StoreData("medium-value", mediumValue) + StoreData("high-value", highValue) + StoreData("insane-value", insaneValue) + StoreData("ground-item-use-remote", useLiveGEPrices) + StoreData("hide-below-value", hideBelowValue) + gePriceMap = loadGEPrices(); + } + + fun loadGEPrices(): Map { + return if (useLiveGEPrices) { + try { + println("GroundItems: Loading Remote GE Prices") + val url = URL("https://cdn.2009scape.org/gedata/latest.json") + val connection = url.openConnection() as HttpURLConnection + connection.requestMethod = "GET" + connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0") + + val responseCode = connection.responseCode + if (responseCode == HttpURLConnection.HTTP_OK) { + val inputStream = connection.inputStream + val content = inputStream.bufferedReader().use(BufferedReader::readText) + + val items = content.trim().removeSurrounding("[", "]").split("},").map { it.trim() + "}" } + val gePrices = mutableMapOf() + + for (item in items) { + val pairs = item.removeSurrounding("{", "}").split(",") + val itemId = pairs.find { it.trim().startsWith("\"item_id\"") }?.split(":")?.get(1)?.trim()?.trim('\"') + val value = pairs.find { it.trim().startsWith("\"value\"") }?.split(":")?.get(1)?.trim()?.trim('\"') + if (itemId != null && value != null) { + gePrices[itemId] = value + } + } + + gePrices + } else { + emptyMap() + } + } catch (e: Exception) { + emptyMap() + } + } else { + try { + println("GroundItems: Loading Local GE Prices") + BufferedReader(InputStreamReader(plugin::class.java.getResourceAsStream("res/item_configs.json"), StandardCharsets.UTF_8)) + .useLines { lines -> + val json = lines.joinToString("\n") + val items = json.trim().removeSurrounding("[", "]").split("},").map { it.trim() + "}" } + val gePrices = mutableMapOf() + + for (item in items) { + val pairs = item.removeSurrounding("{", "}").split(",") + val id = pairs.find { it.trim().startsWith("\"id\"") }?.split(":")?.get(1)?.trim()?.trim('\"') + val grandExchangePrice = pairs.find { it.trim().startsWith("\"grand_exchange_price\"") }?.split(":")?.get(1)?.trim()?.trim('\"') + if (id != null && grandExchangePrice != null) { + gePrices[id] = grandExchangePrice + } + } + gePrices + } + } catch (e: Exception) { + emptyMap() + } + } + } + + private fun formatValue(value: Int): String { + return when { + value >= 1_000_000 -> "%.1fM".format(value / 1_000_000.0) + value >= 10_000 -> "%.1fK".format(value / 1_000.0) + else -> DecimalFormat("#,###").format(value) + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/GroundItems/plugin.properties b/plugin-playground/src/main/kotlin/GroundItems/plugin.properties new file mode 100644 index 0000000..c77a215 --- /dev/null +++ b/plugin-playground/src/main/kotlin/GroundItems/plugin.properties @@ -0,0 +1,8 @@ +AUTHOR=downthecrop +DESCRIPTION=Ground Items Overlay. Just like Runelite!\ +Commands:\ +::set(low,med,high,insane,hide)\ +::(tag,ignore)item ID\ +::(reset)groundconfig\ +Special thanks to Chisato for the original skeleton. +VERSION=1.3 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/GroundItems/res/item_configs.json b/plugin-playground/src/main/kotlin/GroundItems/res/item_configs.json new file mode 100644 index 0000000..c1bff50 --- /dev/null +++ b/plugin-playground/src/main/kotlin/GroundItems/res/item_configs.json @@ -0,0 +1,130818 @@ +[ + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "The body of a Dwarf savaged by Goblins.", + "durability": null, + "name": "Dwarf remains", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "two_handed": "true", + "id": "0" + }, + { + "destroy_message": "I got this from Captain Lawgof.", + "shop_price": "1", + "examine": "Good for repairing a broken cannon.", + "durability": null, + "name": "Toolkit", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "Ammo for the Dwarf Cannon.", + "grand_exchange_price": "381", + "durability": null, + "name": "Cannonball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2" + }, + { + "shop_price": "1", + "examine": "Construction notes for Dwarf cannon ammo.", + "durability": null, + "name": "Nulodion's notes", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "3" + }, + { + "requirements": "{13,35}", + "shop_price": "5", + "examine": "Used to make cannon ammunition.", + "name": "Ammo mould", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "4" + }, + { + "shop_price": "20", + "examine": "An old note book.", + "durability": null, + "name": "Instruction manual", + "weight": "0.51", + "archery_ticket_price": "0", + "id": "5" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "The cannon is built on this.", + "grand_exchange_price": "189000", + "durability": null, + "name": "Cannon base", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "6" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "189000", + "durability": null, + "name": "Cannon base", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "The mounting for the multicannon.", + "grand_exchange_price": "185000", + "durability": null, + "name": "Cannon stand", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "8" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "185000", + "durability": null, + "name": "Cannon stand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "The barrels for the multicannon.", + "grand_exchange_price": "187000", + "durability": null, + "name": "Cannon barrels", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "10" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "187000", + "durability": null, + "name": "Cannon barrels", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "This powers the multicannon.", + "grand_exchange_price": "175200", + "durability": null, + "name": "Cannon furnace", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "12" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "175200", + "durability": null, + "name": "Cannon furnace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13" + }, + { + "shop_price": "1", + "examine": "A metal railing replacement.", + "durability": null, + "name": "Railing", + "archery_ticket_price": "0", + "id": "14" + }, + { + "examine": "A cloth given to me by Sir Galahad.", + "durability": null, + "name": "Holy table napkin", + "archery_ticket_price": "0", + "id": "15" + }, + { + "examine": "A small tin whistle.", + "durability": null, + "name": "Magic whistle", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "16" + }, + { + "examine": "I wonder what happens when I ring it?", + "durability": null, + "name": "Grail bell", + "archery_ticket_price": "0", + "id": "17" + }, + { + "examine": "It will point the way for me.", + "durability": null, + "name": "Magic gold feather", + "archery_ticket_price": "0", + "id": "18" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "White cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "20" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "Black cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "21" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "Blue cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "22" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "Red cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "23" + }, + { + "examine": "Doesn't look very tasty.", + "durability": null, + "name": "Rat poison", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "24" + }, + { + "examine": "Wormy.", + "durability": null, + "name": "Red vine worm", + "archery_ticket_price": "0", + "id": "25" + }, + { + "examine": "Hemenster fishing contest trophy.", + "durability": null, + "name": "Fishing trophy", + "archery_ticket_price": "0", + "id": "26" + }, + { + "examine": "Pass to the Hemenster fishing contest.", + "durability": null, + "name": "Fishing pass", + "archery_ticket_price": "0", + "id": "27" + }, + { + "shop_price": "121", + "examine": "Drives away all known 6 legged creatures.", + "durability": null, + "name": "Insect repellent", + "archery_ticket_price": "0", + "id": "28" + }, + { + "examine": "It's a bucket of wax.", + "durability": null, + "name": "Bucket of wax", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "30" + }, + { + "examine": "You shouldn't have this.", + "name": "RDT Slot", + "id": "31" + }, + { + "shop_price": "3", + "examine": "A spooky candle.", + "durability": null, + "name": "Lit black candle", + "archery_ticket_price": "0", + "id": "32" + }, + { + "shop_price": "24", + "examine": "A candle.", + "grand_exchange_price": "104", + "durability": null, + "name": "Lit candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "33" + }, + { + "shop_price": "24", + "examine": "A candle.", + "grand_exchange_price": "104", + "durability": null, + "name": "Lit candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "34" + }, + { + "shop_price": "200", + "examine": "This used to belong to King Arthur.", + "has_special": "true", + "durability": null, + "weight": "2.2", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "attack_audios": "2500,2500,2517,2500", + "name": "Excalibur", + "archery_ticket_price": "0", + "id": "35", + "bonuses": "20,29,-2,0,0,0,3,2,1,0,0,25,0,0,0" + }, + { + "shop_price": "24", + "ge_buy_limit": "100", + "examine": "A candle.", + "grand_exchange_price": "119", + "durability": null, + "name": "Candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "36" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "119", + "durability": null, + "name": "Candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "37" + }, + { + "shop_price": "3", + "examine": "A spooky candle.", + "durability": null, + "name": "Black candle", + "archery_ticket_price": "0", + "id": "38" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "16", + "durability": null, + "name": "Bronze arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "39" + }, + { + "shop_price": "26", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "23", + "durability": null, + "name": "Iron arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "40" + }, + { + "shop_price": "36", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "63", + "durability": null, + "name": "Steel arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "41" + }, + { + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "74", + "durability": null, + "name": "Mithril arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "42" + }, + { + "shop_price": "160", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "185", + "durability": null, + "name": "Adamant arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "43" + }, + { + "shop_price": "460", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "839", + "durability": null, + "name": "Rune arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "44" + }, + { + "ge_buy_limit": "10000", + "examine": "Opal bolt tips.", + "grand_exchange_price": "1", + "durability": null, + "name": "Opal bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "45" + }, + { + "ge_buy_limit": "10000", + "examine": "Pearl bolt tips.", + "grand_exchange_price": "5", + "durability": null, + "name": "Pearl bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "46" + }, + { + "shop_price": "114", + "ge_buy_limit": "10000", + "examine": "I can make bolts with these.", + "grand_exchange_price": "44", + "durability": null, + "name": "Barb bolttips", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "5", + "id": "47" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung longbow; I need a bowstring for this.", + "grand_exchange_price": "14", + "durability": null, + "name": "Longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "48" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "14", + "durability": null, + "name": "Longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "49" + }, + { + "ge_buy_limit": "10000", + "examine": "I need to find a string for this.", + "grand_exchange_price": "5", + "durability": null, + "name": "Shortbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "50" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5", + "durability": null, + "name": "Shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "51" + }, + { + "ge_buy_limit": "20000", + "examine": "A wooden arrow shaft", + "grand_exchange_price": "21", + "durability": null, + "name": "Arrow shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "52" + }, + { + "ge_buy_limit": "20000", + "examine": "A wooden arrow shaft with flights attached.", + "grand_exchange_price": "56", + "durability": null, + "name": "Headless arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "53" + }, + { + "shop_price": "50", + "ge_buy_limit": "10000", + "examine": "An unstrung oak bow; I need a bowstring for this.", + "grand_exchange_price": "7", + "durability": null, + "name": "Oak shortbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "54" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7", + "durability": null, + "name": "Oak shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "55" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung oak longbow; I need a bowstring for this.", + "grand_exchange_price": "20", + "durability": null, + "name": "Oak longbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "56" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "20", + "durability": null, + "name": "Oak longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "57" + }, + { + "shop_price": "64", + "ge_buy_limit": "10000", + "examine": "An unstrung willow longbow; I need a bowstring for this.", + "grand_exchange_price": "46", + "durability": null, + "name": "Willow longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "58" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "46", + "durability": null, + "name": "Willow longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "59" + }, + { + "shop_price": "16", + "ge_buy_limit": "10000", + "examine": "An unstrung willow shortbow; I need a bowstring for this.", + "grand_exchange_price": "20", + "durability": null, + "name": "Willow shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "60" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "20", + "durability": null, + "name": "Willow shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "61" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung maple bow; I need a bowstring for this.", + "grand_exchange_price": "94", + "durability": null, + "name": "Maple longbow (u)", + "tradeable": "true", + "weight": "1.2", + "archery_ticket_price": "0", + "id": "62" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "94", + "durability": null, + "name": "Maple longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "63" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung maple bow; I need a bowstring for this.", + "grand_exchange_price": "56", + "durability": null, + "name": "Maple shortbow (u)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "64" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "56", + "durability": null, + "name": "Maple shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "65" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung yew longbow; I need a bowstring for this.", + "grand_exchange_price": "468", + "durability": null, + "name": "Yew longbow (u)", + "tradeable": "true", + "weight": "1.32", + "archery_ticket_price": "0", + "id": "66" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "468", + "durability": null, + "name": "Yew longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "67" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung yew shortbow; I need a bowstring for this.", + "grand_exchange_price": "158", + "durability": null, + "name": "Yew shortbow (u)", + "tradeable": "true", + "weight": "1.32", + "archery_ticket_price": "0", + "id": "68" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "158", + "durability": null, + "name": "Yew shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "69" + }, + { + "shop_price": "931", + "ge_buy_limit": "10000", + "examine": "An unstrung magic longbow; I need a bowstring for this.", + "grand_exchange_price": "1246", + "durability": null, + "name": "Magic longbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "70" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1246", + "durability": null, + "name": "Magic longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "71" + }, + { + "shop_price": "890", + "ge_buy_limit": "10000", + "examine": "An unstrung magic shortbow; I need a bowstring for this.", + "grand_exchange_price": "745", + "durability": null, + "name": "Magic shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "72" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "745", + "durability": null, + "name": "Magic shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "73" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "A helmet, as worn by the minions of General Khazard.", + "durability": null, + "weight": "2.7", + "destroy": "true", + "equipment_slot": "0", + "destroy_message": "I can borrow another from the armoury near the Fight Arena.", + "name": "Khazard helmet", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "74", + "bonuses": "0,0,0,0,0,4,5,3,0,0,0,0,0,0,0" + }, + { + "shop_price": "12", + "examine": "Armour, as worn by the minions of General Khazard.", + "durability": null, + "weight": "0.5", + "destroy": "true", + "equipment_slot": "4", + "destroy_message": "I can borrow another from the armoury near the Fight Arena.", + "remove_sleeves": "true", + "name": "Khazard armour", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "75", + "bonuses": "0,0,0,0,0,9,11,10,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The lazy guard probably has a spare set...", + "examine": "These keys open the cells at the Khazard Fight Arena. (Fight Arena)", + "durability": null, + "name": "Khazard cell keys", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "76" + }, + { + "destroy_message": "Angor, the Khazard barman, has a stock of Khali brew.", + "shop_price": "5", + "examine": "A bottle of Khazard's worst brew.", + "durability": null, + "name": "Khali brew", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "77" + }, + { + "destroy_message": "Can only be fired from yew, magic, dark or twisted bows.", + "shop_price": "2", + "examine": "Can only be fired from yew, magic, or dark bows.", + "durability": null, + "name": "Ice arrows", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "78", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "The power in this staff causes it to vibrate gently.", + "durability": null, + "name": "Staff of armadyl", + "tradeable": "false", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "84", + "render_anim": "2553" + }, + { + "examine": "It catches the light! (Temple of Ikov)", + "durability": null, + "name": "Shiny key", + "archery_ticket_price": "0", + "id": "85" + }, + { + "examine": "An amulet made by Lucien.", + "durability": null, + "name": "Pendant of lucien", + "archery_ticket_price": "0", + "id": "86", + "equipment_slot": "2" + }, + { + "examine": "Yet another amulet.", + "durability": null, + "name": "Armadyl pendant", + "archery_ticket_price": "0", + "id": "87", + "equipment_slot": "2" + }, + { + "examine": "Magic boots that make you lighter than normal.", + "durability": null, + "name": "Boots of lightness", + "weight": "-4.5", + "archery_ticket_price": "0", + "id": "88", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Magic boots that make you lighter than normal.", + "durability": null, + "name": "Boots of lightness", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "89", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "It's very soft!", + "durability": null, + "name": "Child's blanket", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "90" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this guam potion.", + "grand_exchange_price": "285", + "durability": null, + "name": "Guam potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "91" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "285", + "durability": null, + "name": "Guam potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "92" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this marrentill potion.", + "grand_exchange_price": "43", + "durability": null, + "name": "Marrentill potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "93" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43", + "durability": null, + "name": "Marrentill potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "94" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this tarromin potion.", + "grand_exchange_price": "287", + "durability": null, + "name": "Tarromin potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "95" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "287", + "durability": null, + "name": "Tarromin potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "96" + }, + { + "shop_price": "64", + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this potion.", + "grand_exchange_price": "435", + "durability": null, + "name": "Harralander potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "97" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "435", + "durability": null, + "name": "Harralander potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "98" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this ranarr potion.", + "grand_exchange_price": "4823", + "durability": null, + "name": "Ranarr potion(unf)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "99" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4823", + "durability": null, + "name": "Ranarr potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "100" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this irit potion.", + "grand_exchange_price": "2243", + "durability": null, + "name": "Irit potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "101" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2243", + "durability": null, + "name": "Irit potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "102" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this avantoe potion.", + "grand_exchange_price": "3831", + "durability": null, + "name": "Avantoe potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "103" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3831", + "durability": null, + "name": "Avantoe potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "104" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this kwuarm potion.", + "grand_exchange_price": "1833", + "durability": null, + "name": "Kwuarm potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "105" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1833", + "durability": null, + "name": "Kwuarm potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "106" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this cadantine potion.", + "grand_exchange_price": "1844", + "durability": null, + "name": "Cadantine potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "107" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1844", + "durability": null, + "name": "Cadantine potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "108" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this dwarf weed potion.", + "grand_exchange_price": "6740", + "durability": null, + "name": "Dwarf weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "109" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6740", + "durability": null, + "name": "Dwarf weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "110" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this torstol potion.", + "grand_exchange_price": "14500", + "durability": null, + "name": "Torstol potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "111" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14500", + "durability": null, + "name": "Torstol potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "112" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "4 doses of Strength potion.", + "grand_exchange_price": "1041", + "durability": null, + "name": "Strength potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "113" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1041", + "durability": null, + "name": "Strength potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "114" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "3 doses of Strength potion.", + "grand_exchange_price": "812", + "durability": null, + "name": "Strength potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "115" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "812", + "durability": null, + "name": "Strength potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "116" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "2 doses of Strength potion.", + "grand_exchange_price": "656", + "durability": null, + "name": "Strength potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "117" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "656", + "durability": null, + "name": "Strength potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "118" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "1 dose of Strength potion.", + "grand_exchange_price": "355", + "durability": null, + "name": "Strength potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "119" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "355", + "durability": null, + "name": "Strength potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "120" + }, + { + "shop_price": "560", + "ge_buy_limit": "100", + "examine": "3 doses of Attack potion.", + "grand_exchange_price": "195", + "durability": null, + "name": "Attack potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "121" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Attack potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "122" + }, + { + "shop_price": "560", + "ge_buy_limit": "100", + "examine": "2 doses of Attack potion.", + "grand_exchange_price": "113", + "durability": null, + "name": "Attack potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "123" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "113", + "durability": null, + "name": "Attack potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "124" + }, + { + "shop_price": "560", + "ge_buy_limit": "100", + "examine": "1 dose of Attack potion.", + "grand_exchange_price": "197", + "durability": null, + "name": "Attack potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "125" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "197", + "durability": null, + "name": "Attack potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "126" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "3 doses of restore potion.", + "grand_exchange_price": "59", + "durability": null, + "name": "Restore potion(3)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "127" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "59", + "durability": null, + "name": "Restore potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "128" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "2 doses of restore potion.", + "grand_exchange_price": "35", + "durability": null, + "name": "Restore potion(2)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "129" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35", + "durability": null, + "name": "Restore potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "130" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "1 dose of restore potion.", + "grand_exchange_price": "21", + "durability": null, + "name": "Restore potion(1)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "131" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Restore potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "132" + }, + { + "shop_price": "114", + "ge_buy_limit": "100", + "examine": "3 doses of Defence Potion.", + "grand_exchange_price": "323", + "durability": null, + "name": "Defence potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "133" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "323", + "durability": null, + "name": "Defence potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "134" + }, + { + "shop_price": "114", + "ge_buy_limit": "100", + "examine": "2 doses of Defence Potion.", + "grand_exchange_price": "247", + "durability": null, + "name": "Defence potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "135" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "247", + "durability": null, + "name": "Defence potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "136" + }, + { + "shop_price": "114", + "ge_buy_limit": "100", + "examine": "1 dose of Defence Potion.", + "grand_exchange_price": "148", + "durability": null, + "name": "Defence potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "137" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "148", + "durability": null, + "name": "Defence potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "138" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Prayer restore potion.", + "grand_exchange_price": "4134", + "durability": null, + "name": "Prayer potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "139" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4134", + "durability": null, + "name": "Prayer potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "140" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Prayer restore potion.", + "grand_exchange_price": "2868", + "durability": null, + "name": "Prayer potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "141" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2868", + "durability": null, + "name": "Prayer potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "142" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Prayer restore potion.", + "grand_exchange_price": "1353", + "durability": null, + "name": "Prayer potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "143" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1353", + "durability": null, + "name": "Prayer potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "144" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super Attack potion.", + "grand_exchange_price": "691", + "durability": null, + "name": "Super attack(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "145" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "691", + "durability": null, + "name": "Super attack(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "146" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super Attack potion.", + "grand_exchange_price": "451", + "durability": null, + "name": "Super attack(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "147" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "451", + "durability": null, + "name": "Super attack(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "148" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super Attack potion.", + "grand_exchange_price": "243", + "durability": null, + "name": "Super attack(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "149" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "243", + "durability": null, + "name": "Super attack(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "150" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Fishing potion.", + "grand_exchange_price": "40", + "durability": null, + "name": "Fishing potion(3)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "151" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40", + "durability": null, + "name": "Fishing potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "152" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Fishing potion.", + "grand_exchange_price": "56", + "durability": null, + "name": "Fishing potion(2)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "153" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Fishing potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "154" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Fishing potion.", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing potion(1)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "155" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "156" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super Strength potion.", + "grand_exchange_price": "1679", + "durability": null, + "name": "Super strength(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "157" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1679", + "durability": null, + "name": "Super strength(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "158" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super Strength potion.", + "grand_exchange_price": "1164", + "durability": null, + "name": "Super strength(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "159" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1164", + "durability": null, + "name": "Super strength(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "160" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super Strength potion.", + "grand_exchange_price": "603", + "durability": null, + "name": "Super strength(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "161" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "603", + "durability": null, + "name": "Super strength(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "162" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super Defence potion.", + "grand_exchange_price": "113", + "durability": null, + "name": "Super defence(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "163" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "113", + "durability": null, + "name": "Super defence(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "164" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super Defence potion.", + "grand_exchange_price": "65", + "durability": null, + "name": "Super defence(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "165" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "65", + "durability": null, + "name": "Super defence(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "166" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super Defence potion.", + "grand_exchange_price": "41", + "durability": null, + "name": "Super defence(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "167" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "41", + "durability": null, + "name": "Super defence(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "168" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of ranging potion.", + "grand_exchange_price": "6224", + "durability": null, + "name": "Ranging potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "169" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "6224", + "durability": null, + "name": "Ranging potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "170" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of ranging potion.", + "grand_exchange_price": "4330", + "durability": null, + "name": "Ranging potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "171" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4330", + "durability": null, + "name": "Ranging potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "172" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of ranging potion.", + "grand_exchange_price": "2068", + "durability": null, + "name": "Ranging potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "173" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2068", + "durability": null, + "name": "Ranging potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "174" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "3 doses of antipoison potion.", + "grand_exchange_price": "1239", + "durability": null, + "name": "Antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "175" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1239", + "durability": null, + "name": "Antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "176" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "2 doses of antipoison potion.", + "grand_exchange_price": "822", + "durability": null, + "name": "Antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "177" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "822", + "durability": null, + "name": "Antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "178" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "1 dose of antipoison potion.", + "grand_exchange_price": "460", + "durability": null, + "name": "Antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "179" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "460", + "durability": null, + "name": "Antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "180" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super anti poison potion.", + "grand_exchange_price": "872", + "durability": null, + "name": "Super antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "181" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "872", + "durability": null, + "name": "Super antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "182" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super anti poison potion.", + "grand_exchange_price": "509", + "durability": null, + "name": "Super antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "183" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "509", + "durability": null, + "name": "Super antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "184" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super anti poison potion.", + "grand_exchange_price": "366", + "durability": null, + "name": "Super antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "185" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "durability": null, + "name": "Super antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "186" + }, + { + "ge_buy_limit": "1000", + "examine": "For use on daggers and projectiles.", + "grand_exchange_price": "33", + "durability": null, + "name": "Weapon poison", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "187" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "33", + "durability": null, + "name": "Weapon poison", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "188" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of Zamorak brew.", + "grand_exchange_price": "1818", + "durability": null, + "name": "Zamorak brew(3)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "189" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1818", + "durability": null, + "name": "Zamorak brew(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "190" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of Zamorak brew.", + "grand_exchange_price": "1004", + "durability": null, + "name": "Zamorak brew(2)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "191" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1004", + "durability": null, + "name": "Zamorak brew(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "192" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of Zamorak brew.", + "grand_exchange_price": "1175", + "durability": null, + "name": "Zamorak brew(1)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "193" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1175", + "durability": null, + "name": "Zamorak brew(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "194" + }, + { + "ge_buy_limit": "100", + "examine": "This is meant to be good for spots.", + "grand_exchange_price": "117", + "durability": null, + "name": "Potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "195" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "117", + "durability": null, + "name": "Potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "196" + }, + { + "shop_price": "39", + "ge_buy_limit": "100", + "examine": "Stankers gives out these strange cocktails for free.", + "grand_exchange_price": "124", + "durability": null, + "name": "Poison chalice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "197" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124", + "durability": null, + "name": "Poison chalice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "198" + }, + { + "requirements": "{3,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "150", + "durability": null, + "name": "Grimy guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "199" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "155", + "durability": null, + "name": "Grimy guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "200" + }, + { + "requirements": "{5,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "150", + "durability": null, + "name": "Grimy marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "201" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "26", + "durability": null, + "name": "Grimy marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "202" + }, + { + "requirements": "{11,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "150", + "durability": null, + "name": "Grimy tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "203" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "151", + "durability": null, + "name": "Grimy tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "204" + }, + { + "requirements": "{20,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "300", + "durability": null, + "name": "Grimy harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "205" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "275", + "durability": null, + "name": "Grimy harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "206" + }, + { + "requirements": "{15,25}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Grimy ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "207" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4909", + "durability": null, + "name": "Grimy ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "208" + }, + { + "requirements": "{15,40}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "209" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2034", + "durability": null, + "name": "Grimy irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "210" + }, + { + "requirements": "{15,48}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "500", + "durability": null, + "name": "Grimy avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "211" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3789", + "durability": null, + "name": "Grimy avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "212" + }, + { + "requirements": "{15,54}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "213" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1665", + "durability": null, + "name": "Grimy kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "214" + }, + { + "requirements": "{15,65}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "215" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1582", + "durability": null, + "name": "Grimy cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "216" + }, + { + "requirements": "{15,70}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Grimy dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "217" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6934", + "durability": null, + "name": "Grimy dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "218" + }, + { + "requirements": "{15,75}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "3200", + "durability": null, + "name": "Grimy torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "219" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "35800", + "durability": null, + "name": "Grimy torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "220" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "It seems to be looking at me.", + "grand_exchange_price": "27", + "durability": null, + "name": "Eye of newt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "221" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "27", + "durability": null, + "name": "Eye of newt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "222" + }, + { + "ge_buy_limit": "10000", + "examine": "Ewww!", + "grand_exchange_price": "888", + "durability": null, + "name": "Red spiders' eggs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "223" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "888", + "durability": null, + "name": "Red spiders' eggs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "224" + }, + { + "ge_buy_limit": "10000", + "examine": "The root of a limpwurt plant.", + "grand_exchange_price": "1984", + "durability": null, + "name": "Limpwurt root", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "225" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1984", + "durability": null, + "name": "Limpwurt root", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "226" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "A glass vial containing water.", + "grand_exchange_price": "35", + "durability": null, + "name": "Vial of water", + "tradeable": "true", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "227" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "35", + "durability": null, + "name": "Vial of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "228" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "An empty glass vial.", + "grand_exchange_price": "2", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "229" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "230" + }, + { + "shop_price": "67", + "ge_buy_limit": "10000", + "examine": "Strange spiky grass.", + "grand_exchange_price": "318", + "durability": null, + "name": "Snape grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "231" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "318", + "durability": null, + "name": "Snape grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "232" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "I can grind things for potions in this.", + "grand_exchange_price": "38", + "durability": null, + "name": "Pestle and mortar", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "233" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "38", + "durability": null, + "name": "Pestle and mortar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "234" + }, + { + "ge_buy_limit": "10000", + "examine": "Finely ground horn of Unicorn.", + "grand_exchange_price": "2460", + "durability": null, + "name": "Unicorn horn dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "235" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2460", + "durability": null, + "name": "Unicorn horn dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "236" + }, + { + "ge_buy_limit": "10000", + "examine": "This horn has restorative properties.", + "grand_exchange_price": "2481", + "durability": null, + "name": "Unicorn horn", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "237" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2481", + "durability": null, + "name": "Unicorn horn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "238" + }, + { + "ge_buy_limit": "10000", + "examine": "Sour berries, used in potions.", + "grand_exchange_price": "1438", + "durability": null, + "name": "White berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "239" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1438", + "durability": null, + "name": "White berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "240" + }, + { + "ge_buy_limit": "10000", + "examine": "Finely ground scale of Dragon.", + "grand_exchange_price": "1336", + "durability": null, + "name": "Dragon scale dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "241" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1336", + "durability": null, + "name": "Dragon scale dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "242" + }, + { + "ge_buy_limit": "10000", + "examine": "A large shiny scale.", + "grand_exchange_price": "1244", + "durability": null, + "name": "Blue dragon scale", + "tradeable": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "243" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1244", + "durability": null, + "name": "Blue dragon scale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "244" + }, + { + "ge_buy_limit": "10000", + "examine": "An evil wine that is often found in chaos temples.", + "grand_exchange_price": "2768", + "durability": null, + "name": "Wine of zamorak", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "245" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2768", + "durability": null, + "name": "Wine of zamorak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "246" + }, + { + "ge_buy_limit": "10000", + "examine": "They don't look very ripe.", + "grand_exchange_price": "83", + "durability": null, + "name": "Jangerberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "247" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "83", + "durability": null, + "name": "Jangerberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "248" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "182", + "durability": null, + "name": "Clean guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "249" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "182", + "durability": null, + "name": "Clean guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "250" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "23", + "durability": null, + "name": "Clean marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "251" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "23", + "durability": null, + "name": "Clean marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "252" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "144", + "durability": null, + "name": "Clean tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "253" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "144", + "durability": null, + "name": "Clean tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "254" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "275", + "durability": null, + "name": "Clean harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "255" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "275", + "durability": null, + "name": "Clean harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "256" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "4930", + "durability": null, + "name": "Clean ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "257" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4930", + "durability": null, + "name": "Clean ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "258" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "2072", + "durability": null, + "name": "Clean irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "259" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2072", + "durability": null, + "name": "Clean irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "260" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "3812", + "durability": null, + "name": "Clean avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "261" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3812", + "durability": null, + "name": "Clean avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "262" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "1641", + "durability": null, + "name": "Clean kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "263" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1641", + "durability": null, + "name": "Clean kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "264" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "1585", + "durability": null, + "name": "Clean cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "265" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1585", + "durability": null, + "name": "Clean cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "266" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "6925", + "durability": null, + "name": "Clean dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "267" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6925", + "durability": null, + "name": "Clean dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "268" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "8400", + "durability": null, + "name": "Clean torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "269" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "35900", + "durability": null, + "name": "Clean torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "270" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It looks like part of a machine", + "durability": null, + "name": "Pressure gauge", + "archery_ticket_price": "0", + "id": "271" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box of fish food / Keeps your pet fish strong and healthy.", + "durability": null, + "name": "Fish food", + "archery_ticket_price": "0", + "id": "272", + "equipment_slot": "5" + }, + { + "destroy_message": "You'll have to make more in Draynor Manor.", + "examine": "This isn't good for fish.", + "durability": null, + "name": "Poisoned fish food", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "274" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Key", + "archery_ticket_price": "0", + "id": "275" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's slightly charred.", + "durability": null, + "name": "Rubber tube", + "archery_ticket_price": "0", + "id": "276" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's pretty full.", + "durability": null, + "name": "Oil can", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "277" + }, + { + "examine": "A sharp cattleprod.", + "durability": null, + "name": "Cattleprod", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "278", + "weapon_interface": "5", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0", + "equipment_slot": "3" + }, + { + "examine": "Councillor Halgrive gave me this to kill some sheep.", + "durability": null, + "name": "Sheep feed", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "279" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (1)", + "archery_ticket_price": "0", + "id": "280" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (2)", + "archery_ticket_price": "0", + "id": "281" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (3)", + "archery_ticket_price": "0", + "id": "282" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (4)", + "archery_ticket_price": "0", + "id": "283" + }, + { + "remove_sleeves": "true", + "examine": "This should protect me from the plague, I hope!", + "durability": null, + "name": "Plague jacket", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "284", + "equipment_slot": "4" + }, + { + "examine": "A thick pair of leather trousers. or These should protect me from the plague, I hope!", + "durability": null, + "name": "Plague trousers", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "285", + "equipment_slot": "7" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Orange goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "286", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Blue goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "287", + "equipment_slot": "4" + }, + { + "shop_price": "16", + "ge_buy_limit": "100", + "examine": "Armour designed to fit goblins.", + "grand_exchange_price": "398", + "durability": null, + "name": "Goblin mail", + "tradeable": "true", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "288", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "398", + "durability": null, + "name": "Goblin mail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "289" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This contains some vital research results.", + "durability": null, + "name": "Research package", + "weight": "1", + "archery_ticket_price": "0", + "id": "290" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Notes", + "archery_ticket_price": "0", + "id": "291" + }, + { + "examine": "A book on elven history in northern RuneScape.", + "durability": null, + "name": "Book on baxtorian", + "archery_ticket_price": "0", + "id": "292" + }, + { + "examine": "A small pebble with elven inscription.", + "durability": null, + "name": "Glarial's pebble", + "archery_ticket_price": "0", + "id": "294" + }, + { + "examine": "A bright green gem set in a necklace.", + "durability": null, + "name": "Glarial's amulet", + "archery_ticket_price": "0", + "id": "295", + "equipment_slot": "2" + }, + { + "examine": "An urn containing Glarial's ashes./An empty urn made for Glarial's ashes.", + "durability": null, + "name": "Glarial's urn", + "archery_ticket_price": "0", + "id": "296" + }, + { + "examine": "An urn containing Glarial's ashes./An empty urn made for Glarial's ashes.", + "durability": null, + "name": "Glarial's urn", + "archery_ticket_price": "0", + "id": "297" + }, + { + "shop_price": "300", + "ge_buy_limit": "5000", + "examine": "Magical seeds in a mithril case.", + "grand_exchange_price": "623", + "durability": null, + "name": "Mithril seeds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "299" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A bit of rat.", + "durability": null, + "name": "Rat's tail", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "300" + }, + { + "requirements": "{10,40}", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Useful for catching lobsters.", + "grand_exchange_price": "100", + "durability": null, + "name": "Lobster pot", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "301" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "100", + "durability": null, + "name": "Lobster pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "302" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "Useful for catching small fish.", + "grand_exchange_price": "397", + "durability": null, + "name": "Small fishing net", + "tradeable": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "303" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "397", + "durability": null, + "name": "Small fishing net", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "304" + }, + { + "requirements": "{16,10}", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Useful for catching lots of fish.", + "grand_exchange_price": "329", + "durability": null, + "name": "Big fishing net", + "tradeable": "true", + "weight": "8.1", + "archery_ticket_price": "0", + "id": "305" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "329", + "durability": null, + "name": "Big fishing net", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "306" + }, + { + "requirements": "{5,10}", + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Useful for catching sardine or herring.", + "grand_exchange_price": "74", + "durability": null, + "name": "Fishing rod", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "307" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Fishing rod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "308" + }, + { + "requirements": "{20,10}", + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Useful for catching salmon or trout.In Daemonhiem: Just add feathers.", + "grand_exchange_price": "123", + "durability": null, + "name": "Fly fishing rod", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "309" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "123", + "durability": null, + "name": "Fly fishing rod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "310" + }, + { + "requirements": "{10,35}", + "shop_price": "45", + "ge_buy_limit": "5000", + "examine": "Useful for catching big fish.", + "grand_exchange_price": "235", + "durability": null, + "name": "Harpoon", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "311" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "235", + "durability": null, + "name": "Harpoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "312" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "For use with a fishing rod.", + "grand_exchange_price": "3", + "durability": null, + "name": "Fishing bait", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "313" + }, + { + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Used for fly fishing.", + "grand_exchange_price": "24", + "durability": null, + "name": "Feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "314" + }, + { + "ge_buy_limit": "10000", + "examine": "Some nicely cooked shrimp.", + "grand_exchange_price": "9", + "durability": null, + "name": "Shrimps", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "315" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "9", + "durability": null, + "name": "Shrimps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "316" + }, + { + "shop_price": "6", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "7", + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "317" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "7", + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "318" + }, + { + "ge_buy_limit": "10000", + "examine": "Some nicely cooked anchovies.", + "grand_exchange_price": "26", + "durability": null, + "name": "Anchovies", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "319" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "26", + "durability": null, + "name": "Anchovies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "320" + }, + { + "shop_price": "16", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "11", + "durability": null, + "name": "Raw anchovies", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "321" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "11", + "durability": null, + "name": "Raw anchovies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "322" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "324" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked Sardines.", + "grand_exchange_price": "12", + "durability": null, + "name": "Sardine", + "tradeable": "true", + "weight": "0.12", + "archery_ticket_price": "0", + "id": "325" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "12", + "durability": null, + "name": "Sardine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "326" + }, + { + "shop_price": "7", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "31", + "durability": null, + "name": "Raw sardine", + "tradeable": "true", + "weight": "0.12", + "archery_ticket_price": "0", + "id": "327" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "31", + "durability": null, + "name": "Raw sardine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "328" + }, + { + "shop_price": "88", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked salmon.", + "grand_exchange_price": "278", + "durability": null, + "name": "Salmon", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "329" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "278", + "durability": null, + "name": "Salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "330" + }, + { + "shop_price": "36", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "172", + "durability": null, + "name": "Raw salmon", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "331" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "172", + "durability": null, + "name": "Raw salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "332" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked trout.", + "grand_exchange_price": "172", + "durability": null, + "name": "Trout", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "333" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "172", + "durability": null, + "name": "Trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "334" + }, + { + "shop_price": "7", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "67", + "durability": null, + "name": "Raw trout", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "335" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "67", + "durability": null, + "name": "Raw trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "336" + }, + { + "examine": "Some nicely cooked giant carp.", + "durability": null, + "name": "Giant carp", + "archery_ticket_price": "0", + "id": "337" + }, + { + "examine": "I should try cooking this.", + "durability": null, + "name": "Raw giant carp", + "archery_ticket_price": "0", + "id": "338" + }, + { + "shop_price": "49", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked fish.", + "grand_exchange_price": "19", + "durability": null, + "name": "Cod", + "tradeable": "true", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "339" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "19", + "durability": null, + "name": "Cod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "340" + }, + { + "shop_price": "49", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "29", + "durability": null, + "name": "Raw cod", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "341" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "29", + "durability": null, + "name": "Raw cod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "342" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "344" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "63", + "durability": null, + "name": "Raw herring", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "345" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "63", + "durability": null, + "name": "Raw herring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "346" + }, + { + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked herring.", + "grand_exchange_price": "23", + "durability": null, + "name": "Herring", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "347" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "23", + "durability": null, + "name": "Herring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "348" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "72", + "durability": null, + "name": "Raw pike", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "349" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "72", + "durability": null, + "name": "Raw pike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "350" + }, + { + "ge_buy_limit": "10000", + "examine": "Some nicely cooked pike.", + "grand_exchange_price": "94", + "durability": null, + "name": "Pike", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "351" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "94", + "durability": null, + "name": "Pike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "352" + }, + { + "shop_price": "26", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw mackerel", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "353" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw mackerel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "354" + }, + { + "shop_price": "23", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked fish.", + "grand_exchange_price": "5", + "durability": null, + "name": "Mackerel", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "355" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5", + "durability": null, + "name": "Mackerel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "356" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "358" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "210", + "durability": null, + "name": "Raw tuna", + "tradeable": "true", + "weight": "0.379", + "archery_ticket_price": "0", + "id": "359" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "210", + "durability": null, + "name": "Raw tuna", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "360" + }, + { + "shop_price": "126", + "ge_buy_limit": "10000", + "examine": "Wow, this is a big fish.", + "grand_exchange_price": "281", + "durability": null, + "name": "Tuna", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "361" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "281", + "durability": null, + "name": "Tuna", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "362" + }, + { + "ge_buy_limit": "20000", + "examine": "Wow, this is a big fish.", + "grand_exchange_price": "490", + "durability": null, + "name": "Raw bass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "363" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "490", + "durability": null, + "name": "Raw bass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "364" + }, + { + "shop_price": "270", + "ge_buy_limit": "10000", + "examine": "Wow, this is a big fish.", + "grand_exchange_price": "330", + "durability": null, + "name": "Bass", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "365" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "330", + "durability": null, + "name": "Bass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "366" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "368" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "370" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "513", + "durability": null, + "name": "Raw swordfish", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "371" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "513", + "durability": null, + "name": "Raw swordfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "372" + }, + { + "shop_price": "400", + "ge_buy_limit": "10000", + "examine": "I'd better be careful eating this!", + "grand_exchange_price": "501", + "durability": null, + "name": "Swordfish", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "373" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "501", + "durability": null, + "name": "Swordfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "374" + }, + { + "durability": null, + "name": "Burnt swordfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "376" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "322", + "durability": null, + "name": "Raw lobster", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "377" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "322", + "durability": null, + "name": "Raw lobster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "378" + }, + { + "shop_price": "107", + "ge_buy_limit": "10000", + "examine": "This looks tricky to eat.", + "grand_exchange_price": "334", + "durability": null, + "name": "Lobster", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "379" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "334", + "durability": null, + "name": "Lobster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "380" + }, + { + "durability": null, + "name": "Burnt lobster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "382" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "1615", + "durability": null, + "name": "Raw shark", + "tradeable": "true", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "383" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "1615", + "durability": null, + "name": "Raw shark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "384" + }, + { + "ge_buy_limit": "10000", + "examine": "I'd better be careful eating this.", + "grand_exchange_price": "1682", + "durability": null, + "name": "Shark", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "385" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1682", + "durability": null, + "name": "Shark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "386" + }, + { + "durability": null, + "name": "Burnt shark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "388" + }, + { + "ge_buy_limit": "20000", + "examine": "Tastier when cooked.", + "grand_exchange_price": "2114", + "durability": null, + "name": "Raw manta ray", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "389" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "2114", + "durability": null, + "name": "Raw manta ray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "390" + }, + { + "ge_buy_limit": "10000", + "examine": "Mmmm...this looks tasty!", + "grand_exchange_price": "2552", + "durability": null, + "name": "Manta ray", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "391" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2552", + "durability": null, + "name": "Manta ray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "392" + }, + { + "durability": null, + "name": "Burnt manta ray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "394" + }, + { + "ge_buy_limit": "20000", + "examine": "Looks wrinkly.", + "grand_exchange_price": "2397", + "durability": null, + "name": "Raw sea turtle", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "395" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "2397", + "durability": null, + "name": "Raw sea turtle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "396" + }, + { + "ge_buy_limit": "10000", + "examine": "Tasty!", + "grand_exchange_price": "2486", + "durability": null, + "name": "Sea turtle", + "tradeable": "true", + "weight": "0.35", + "archery_ticket_price": "0", + "id": "397" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2486", + "durability": null, + "name": "Sea turtle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "398" + }, + { + "durability": null, + "name": "Burnt sea turtle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "400" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "Slightly damp seaweed.", + "grand_exchange_price": "780", + "durability": null, + "name": "Seaweed", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "401" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "780", + "durability": null, + "name": "Seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "402" + }, + { + "ge_buy_limit": "10000", + "examine": "Slightly damp seaweed.", + "grand_exchange_price": "291", + "durability": null, + "name": "Edible seaweed", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "403" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "291", + "durability": null, + "name": "Edible seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "404" + }, + { + "ge_buy_limit": "100", + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "4162", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "405" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4162", + "durability": null, + "name": "Casket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "406" + }, + { + "ge_buy_limit": "500", + "examine": "Its a rare oyster.", + "grand_exchange_price": "23", + "durability": null, + "name": "Oyster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "407" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "23", + "durability": null, + "name": "Oyster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "408" + }, + { + "shop_price": "5", + "examine": "Aww, it's empty.", + "durability": null, + "name": "Empty oyster", + "tradeable": "true", + "weight": "0.08", + "archery_ticket_price": "0", + "id": "409" + }, + { + "durability": null, + "name": "Empty oyster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "410" + }, + { + "shop_price": "44", + "ge_buy_limit": "500", + "examine": "I could work wonders with a chisel on this pearl.", + "grand_exchange_price": "18", + "durability": null, + "name": "Oyster pearl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "411", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "18", + "durability": null, + "name": "Oyster pearl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "412" + }, + { + "ge_buy_limit": "500", + "examine": "I could work wonders with a chisel on these pearls.", + "grand_exchange_price": "639", + "durability": null, + "name": "Oyster pearls", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "413", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "639", + "durability": null, + "name": "Oyster pearls", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "414" + }, + { + "examine": "An expensive colourless liquid.", + "durability": null, + "name": "Ethenea", + "archery_ticket_price": "0", + "id": "415" + }, + { + "examine": "This isn't worth much.", + "durability": null, + "name": "Liquid honey", + "archery_ticket_price": "0", + "id": "416" + }, + { + "examine": "It's highly poisonous.", + "durability": null, + "name": "Sulphuric broline", + "weight": "1", + "archery_ticket_price": "0", + "id": "417" + }, + { + "examine": "Probably best I don't keep this too long.", + "durability": null, + "name": "Plague sample", + "archery_ticket_price": "0", + "id": "418" + }, + { + "examine": "A special kind of paper.", + "durability": null, + "name": "Touch paper", + "archery_ticket_price": "0", + "id": "419" + }, + { + "examine": "Apparently it distills.", + "durability": null, + "name": "Distillator", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "420" + }, + { + "examine": "Yup. It's an amulet.", + "durability": null, + "name": "Lathas' amulet", + "archery_ticket_price": "0", + "id": "421", + "equipment_slot": "2" + }, + { + "examine": "Birds love this stuff!", + "durability": null, + "name": "Bird feed", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "422" + }, + { + "examine": "(empty) It's empty... (full) It's full of pigeons.", + "durability": null, + "name": "Pigeon cage", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "424" + }, + { + "examine": "(empty) It's empty... (full) It's full of pigeons.", + "durability": null, + "name": "Pigeon cage", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "425" + }, + { + "ge_buy_limit": "100", + "shop_price": "5", + "examine": "Top half of a priest suit.", + "durability": null, + "weight": "2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "55", + "name": "Priest gown", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "426", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "55", + "durability": null, + "name": "Priest gown", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "427" + }, + { + "ge_buy_limit": "100", + "shop_price": "5", + "examine": "Bottom half of a priest suit.", + "grand_exchange_price": "14", + "durability": null, + "name": "Priest gown", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "428", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,3,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Priest gown", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "429" + }, + { + "remove_sleeves": "true", + "examine": "Medical looking.", + "durability": null, + "name": "Doctors' gown", + "weight": "1", + "archery_ticket_price": "0", + "id": "430", + "equipment_slot": "4" + }, + { + "shop_price": "27", + "examine": "A very strong spirit brewed in Karamja.", + "durability": null, + "name": "Karamjan rum", + "archery_ticket_price": "0", + "id": "431" + }, + { + "examine": "Pirates don't have the best handwriting...", + "durability": null, + "name": "Pirate message", + "weight": "1", + "archery_ticket_price": "0", + "id": "433" + }, + { + "ge_buy_limit": "25000", + "examine": "Some hard dry clay.", + "grand_exchange_price": "150", + "durability": null, + "name": "Clay", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "434" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "406", + "durability": null, + "name": "Clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "435" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "80", + "tokkul_price": "4", + "durability": null, + "name": "Copper ore", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "436" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "58", + "durability": null, + "name": "Copper ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "437" + }, + { + "shop_price": "6", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "80", + "tokkul_price": "4", + "durability": null, + "name": "Tin ore", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "438" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "46", + "durability": null, + "name": "Tin ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "439" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "204", + "tokkul_price": "25", + "durability": null, + "name": "Iron ore", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "440" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "396", + "durability": null, + "name": "Iron ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "441" + }, + { + "shop_price": "82", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "180", + "tokkul_price": "112", + "durability": null, + "name": "Silver ore", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "442" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "205", + "durability": null, + "name": "Silver ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "443" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "311", + "tokkul_price": "225", + "durability": null, + "name": "Gold ore", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "444" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "319", + "durability": null, + "name": "Gold ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "445" + }, + { + "examine": "This needs refining.", + "durability": null, + "name": "'perfect' gold ore", + "archery_ticket_price": "0", + "id": "446" + }, + { + "shop_price": "243", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "420", + "tokkul_price": "243", + "durability": null, + "name": "Mithril ore", + "tradeable": "true", + "weight": "1.75", + "archery_ticket_price": "0", + "id": "447" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "369", + "durability": null, + "name": "Mithril ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "448" + }, + { + "shop_price": "1300", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "1160", + "tokkul_price": "600", + "durability": null, + "name": "Adamantite ore", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "449" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "1622", + "durability": null, + "name": "Adamantite ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "450" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "10300", + "tokkul_price": "4800", + "durability": null, + "name": "Runite ore", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "451" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "10300", + "durability": null, + "name": "Runite ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "452" + }, + { + "ge_buy_limit": "25000", + "examine": "Hmm a non-renewable energy source!", + "grand_exchange_price": "320", + "tokkul_price": "67", + "durability": null, + "name": "Coal", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "453" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "315", + "durability": null, + "name": "Coal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "454" + }, + { + "examine": "The official Alfred Grimhand bar crawl card.", + "durability": null, + "name": "Barcrawl card", + "archery_ticket_price": "0", + "id": "455" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "456" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "457" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "458" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "459" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "460" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "461" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "462" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "463" + }, + { + "ge_buy_limit": "10000", + "examine": "Found on strange plants that grow around Karamja.", + "grand_exchange_price": "403", + "durability": null, + "name": "Strange fruit", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "464" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "403", + "durability": null, + "name": "Strange fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "465" + }, + { + "shop_price": "1", + "examine": "Useless without the head.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Pickaxe handle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "466", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Pickaxe handle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "467" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "468", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "469" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "470", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "471" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "472", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "473" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "474", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "475" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "476", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "477" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "478", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "479" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Bronze pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "480" + }, + { + "durability": null, + "name": "Bronze pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "481" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Iron pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "482" + }, + { + "durability": null, + "name": "Iron pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "483" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Steel pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "484" + }, + { + "durability": null, + "name": "Steel pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "485" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Mithril pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "486" + }, + { + "durability": null, + "name": "Mithril pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "487" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Adamant pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "488" + }, + { + "durability": null, + "name": "Adamant pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "489" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Rune pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "490" + }, + { + "durability": null, + "name": "Rune pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "491" + }, + { + "examine": "Useless without the head.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "492", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "493" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "494", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "495" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "496", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "497" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "498", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "499" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "500", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "501" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "502", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "503" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "504", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "505" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "506", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "507" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "508" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "509" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "510" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "511" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "512" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "513" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "514" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "515" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "516" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "517" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "518" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "519" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "520" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "521" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted beef", + "archery_ticket_price": "0", + "id": "522" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted rat meat", + "archery_ticket_price": "0", + "id": "523" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted bear meat", + "archery_ticket_price": "0", + "id": "524" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted chicken", + "weight": "1", + "archery_ticket_price": "0", + "id": "525" + }, + { + "shop_price": "190", + "ge_buy_limit": "10000", + "grand_exchange_price": "190", + "examine": "Bones are for burying!", + "durability": null, + "name": "Bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "526" + }, + { + "shop_price": "190", + "ge_buy_limit": "10000", + "grand_exchange_price": "190", + "durability": null, + "name": "Bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "527" + }, + { + "ge_buy_limit": "10000", + "examine": "Bones are for burying!", + "grand_exchange_price": "329", + "durability": null, + "name": "Burnt bones", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "528" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "329", + "durability": null, + "name": "Burnt bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "529" + }, + { + "ge_buy_limit": "10000", + "examine": "Ew it's a pile of bones.", + "grand_exchange_price": "354", + "durability": null, + "name": "Bat bones", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "530" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "354", + "durability": null, + "name": "Bat bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "531" + }, + { + "shop_price": "593", + "ge_buy_limit": "10000", + "examine": "Normal: Ew, it's a pile of bones.", + "grand_exchange_price": "593", + "durability": null, + "name": "Big bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "532" + }, + { + "shop_price": "593", + "ge_buy_limit": "10000", + "grand_exchange_price": "593", + "durability": null, + "name": "Big bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "533" + }, + { + "ge_buy_limit": "10000", + "examine": "Ew, it's a pile of bones.", + "grand_exchange_price": "1357", + "durability": null, + "name": "Babydragon bones", + "tradeable": "true", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "534" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1357", + "durability": null, + "name": "Babydragon bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "535" + }, + { + "ge_buy_limit": "10000", + "examine": "These would feed a dog for months.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Dragon bones", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "536" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4065", + "durability": null, + "name": "Dragon bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "537" + }, + { + "ge_buy_limit": "100", + "examine": "Keeps a druid's knees nice and warm.", + "grand_exchange_price": "168", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "538", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "168", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "539" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "I feel closer to the gods when I am wearing this.", + "grand_exchange_price": "328", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "540", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "328", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "541" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "528", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "542", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "528", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "543" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "1495", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "544", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,6,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1495", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "545" + }, + { + "remove_sleeves": "true", + "examine": "I feel closer to the gods when I am wearing this. (Top) If a shade had knees, this would keep them nice and warm. (Bottom)", + "durability": null, + "name": "Shade robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "546", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "4" + }, + { + "examine": "I feel closer to the gods when I am wearing this. (Top) If a shade had knees, this would keep them nice and warm. (Bottom)", + "durability": null, + "name": "Shade robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "548", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,4,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "Issued by RuneScape Council to all new citizens.", + "grand_exchange_price": "123", + "durability": null, + "name": "Newcomer map", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "550" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "123", + "durability": null, + "name": "Newcomer map", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "551" + }, + { + "examine": "It lets me talk to ghosts.", + "durability": null, + "name": "Ghostspeak amulet", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "552", + "equipment_slot": "2" + }, + { + "destroy_message": "If you get rid of the skull you'll have to search for it again.", + "examine": "Ooooh spooky!", + "durability": null, + "name": "Ghost's skull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "553" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "554" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "555" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "556" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "557" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "Used for basic missile spells.", + "grand_exchange_price": "18", + "tokkul_price": "4", + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "558" + }, + { + "shop_price": "16", + "ge_buy_limit": "25000", + "examine": "Used for Curse spells", + "grand_exchange_price": "16", + "tokkul_price": "4", + "durability": null, + "name": "Body rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "559" + }, + { + "shop_price": "310", + "ge_buy_limit": "25000", + "examine": "Used for medium missile spells.", + "grand_exchange_price": "320", + "durability": null, + "tokkul_price": "270", + "name": "Death rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "560" + }, + { + "shop_price": "372", + "ge_buy_limit": "25000", + "examine": "Used for alchemy spells.", + "grand_exchange_price": "380", + "durability": null, + "name": "Nature rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "561" + }, + { + "shop_price": "140", + "ge_buy_limit": "25000", + "examine": "Used for small missile spells.", + "grand_exchange_price": "140", + "durability": null, + "tokkul_price": "135", + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "562" + }, + { + "shop_price": "378", + "ge_buy_limit": "25000", + "examine": "Used for teleport spells.", + "grand_exchange_price": "380", + "durability": null, + "name": "Law rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "563" + }, + { + "shop_price": "232", + "ge_buy_limit": "25000", + "examine": "Used for enchant spells.", + "grand_exchange_price": "240", + "durability": null, + "name": "Cosmic rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "564" + }, + { + "shop_price": "550", + "ge_buy_limit": "25000", + "examine": "Used for large missile spells.", + "grand_exchange_price": "560", + "durability": null, + "name": "Blood rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "565" + }, + { + "shop_price": "400", + "ge_buy_limit": "25000", + "examine": "Used for high level curse spells.", + "grand_exchange_price": "420", + "durability": null, + "name": "Soul rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "566" + }, + { + "ge_buy_limit": "5000", + "examine": "I'd prefer it if it was powered.", + "grand_exchange_price": "561", + "durability": null, + "name": "Unpowered orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "567" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "561", + "durability": null, + "name": "Unpowered orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "568" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2346", + "durability": null, + "name": "Fire orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "569" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2346", + "durability": null, + "name": "Fire orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "570" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2024", + "durability": null, + "name": "Water orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "571" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2024", + "durability": null, + "name": "Water orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "572" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2162", + "durability": null, + "name": "Air orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "573" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2162", + "durability": null, + "name": "Air orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "574" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2208", + "durability": null, + "name": "Earth orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "575" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2208", + "durability": null, + "name": "Earth orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "576" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "I can do magic better in this.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1840", + "name": "Wizard robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "577", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1840", + "durability": null, + "name": "Wizard robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "578" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.45", + "equipment_slot": "0", + "grand_exchange_price": "361", + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "579", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "grand_exchange_price": "361", + "durability": null, + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "580" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "I can do magic better in this.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1364", + "name": "Black robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "581", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1364", + "durability": null, + "name": "Black robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "582" + }, + { + "shop_price": "10", + "examine": "Empty: It's a bailing bucket. Full: It's a bailing bucket full of salty water.", + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "583" + }, + { + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "584" + }, + { + "shop_price": "10", + "examine": "Empty: It's a bailing bucket. Full: It's a bailing bucket full of salty water.", + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "585" + }, + { + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "586" + }, + { + "examine": "A strange glowing green orb.", + "durability": null, + "name": "Orb of protection", + "weight": "1", + "archery_ticket_price": "0", + "id": "587" + }, + { + "examine": "Two strange glowing green orbs.", + "durability": null, + "name": "Orbs of protection", + "archery_ticket_price": "0", + "id": "588" + }, + { + "examine": "It's an amulet of protection given to me by the Gnomes.", + "durability": null, + "name": "Gnome amulet", + "archery_ticket_price": "0", + "id": "589", + "bonuses": "0,0,0,0,0,13,13,13,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "shop_price": "1", + "ge_buy_limit": "5000", + "examine": "Useful for lighting a fire.", + "grand_exchange_price": "118", + "durability": null, + "name": "Tinderbox", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "590" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "118", + "durability": null, + "name": "Tinderbox", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "591" + }, + { + "ge_buy_limit": "10000", + "examine": "A heap of ashes.", + "grand_exchange_price": "368", + "durability": null, + "name": "Ashes", + "tradeable": "true", + "weight": "0.056", + "archery_ticket_price": "0", + "id": "592" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "368", + "durability": null, + "name": "Ashes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "593" + }, + { + "examine": "A lit home-made torch.", + "durability": null, + "name": "Lit torch", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "594" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An unlit home-made torch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Unlit torch", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "596" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Unlit torch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "597" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with bronze heads and oil-soaked cloth. lit: An easy to make, bronze-headed fire arrow.", + "grand_exchange_price": "162", + "durability": null, + "name": "Bronze fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "598", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "100", + "examine": "A book on the history of astronomy in RuneScape.", + "grand_exchange_price": "658", + "durability": null, + "name": "Astronomy book", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "600" + }, + { + "destroy_message": "You'll have to find another, down in the dungeon.", + "examine": "A small key for a large door.", + "durability": null, + "name": "Goblin kitchen key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "601" + }, + { + "destroy_message": "You'll have to get another down in the Dungeon", + "examine": "An unusual clay mould in the shape of a disc.", + "durability": null, + "name": "Lens mould", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "602" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A perfectly circular disc of glass.", + "durability": null, + "name": "Observatory lens", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "603" + }, + { + "shop_price": "160", + "examine": "A slender bone shard given to you by Zadimus.", + "durability": null, + "name": "Bone shard", + "archery_ticket_price": "0", + "id": "604" + }, + { + "shop_price": "100", + "examine": "A key fashioned from a shard of bone. (Shilo Village)", + "durability": null, + "name": "Bone key", + "archery_ticket_price": "0", + "id": "605" + }, + { + "examine": "A stone plaque with carved letters in it.", + "durability": null, + "name": "Stone-plaque", + "archery_ticket_price": "0", + "id": "606" + }, + { + "examine": "An ancient tattered scroll.", + "durability": null, + "name": "Tattered scroll", + "archery_ticket_price": "0", + "id": "607" + }, + { + "shop_price": "100", + "examine": "An ancient crumpled scroll.", + "durability": null, + "name": "Crumpled scroll", + "archery_ticket_price": "0", + "id": "608" + }, + { + "examine": "The remains of the Zombie Queen.", + "durability": null, + "name": "Rashiliyia corpse", + "archery_ticket_price": "0", + "id": "609" + }, + { + "examine": "The remains of Zadimus.", + "durability": null, + "name": "Zadimus corpse", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "610" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "611" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "612" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "613" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "614" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "615" + }, + { + "destroy_message": "You made the beads of the dead during the Shilo Village quest. You can get another from Yanni Salika in Shilo Village for 1200 gold.", + "shop_price": "1200", + "examine": "A curious looking neck ornament.", + "durability": null, + "name": "Beads of the dead", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "616", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,1,0,0", + "equipment_slot": "2" + }, + { + "bankable": "false", + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "archery_ticket_price": "0", + "id": "617" + }, + { + "examine": "Beads carved out of a bone.", + "durability": null, + "name": "Bone beads", + "archery_ticket_price": "0", + "id": "618" + }, + { + "shop_price": "35", + "examine": "Allows you to rest in the luxurious Paramayer[sic] Inn.", + "durability": null, + "name": "Paramaya ticket", + "archery_ticket_price": "0", + "id": "619" + }, + { + "shop_price": "35", + "examine": "Allows you to rest in the luxurious Paramayer[sic] Inn.", + "durability": null, + "name": "Paramaya ticket", + "archery_ticket_price": "0", + "id": "620" + }, + { + "examine": "Sold in Shilo Village for passage on the 'Lady of the Waves'.", + "durability": null, + "name": "Ship ticket", + "archery_ticket_price": "0", + "id": "621" + }, + { + "examine": "An ivory sword pommel.", + "durability": null, + "name": "Sword pommel", + "archery_ticket_price": "0", + "id": "623" + }, + { + "examine": "Notes taken from the tomb of Bervirius.", + "durability": null, + "name": "Bervirius notes", + "archery_ticket_price": "0", + "id": "624" + }, + { + "examine": "A decorated belt used to trade information between distant villages.", + "durability": null, + "name": "Wampum belt", + "archery_ticket_price": "0", + "id": "625" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and pink.", + "grand_exchange_price": "558", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "626", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "558", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "627" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and green.", + "grand_exchange_price": "397", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "628", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "397", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "629" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and blue.", + "grand_exchange_price": "612", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "630", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "612", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "631" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and cream.", + "grand_exchange_price": "496", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "632", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "496", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "633" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and turquoise.", + "grand_exchange_price": "226", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "634", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "226", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "635" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in pink.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "265", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "636", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "265", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "637" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in green.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "235", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "638", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "235", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "639" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in blue.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "447", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "640", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "447", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "641" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in cream.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "396", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "642", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "396", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "643" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in turquoise.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "70", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "644", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "70", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "645" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for pink.", + "grand_exchange_price": "249", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "646", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "249", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "647" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for green.", + "grand_exchange_price": "210", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "648", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "210", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "649" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for blue.", + "grand_exchange_price": "453", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "650", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "453", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "651" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for cream.", + "grand_exchange_price": "348", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "652", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "348", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "653" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for turquoise.", + "grand_exchange_price": "92", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "654", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "655" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "677", + "examine": "A silly, pink pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "656", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "677", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "657" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "480", + "examine": "A silly, green pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "658", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "480", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "659" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "examine": "A silly, blue pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "660", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "661" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1102", + "examine": "A silly, cream pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "662", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1102", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "663" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "295", + "examine": "A silly, turquoise pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "664", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "295", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "665" + }, + { + "examine": "Picture of a posing Paladin.", + "durability": null, + "name": "Portrait", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "666" + }, + { + "turn90cw_anim": "821", + "examine": "A Faladian Knight's sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "attack_speed": "5", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "292", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "809", + "attack_audios": "2500,2500,2517,2500", + "name": "Blurite sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "667", + "stand_turn_anim": "823", + "bonuses": "9,14,-2,0,0,0,3,2,0,0,0,10,0,0,0" + }, + { + "examine": "Definitely blue.", + "durability": null, + "name": "Blurite ore", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "668" + }, + { + "examine": "A receptacle for specimens!", + "durability": null, + "name": "Specimen jar", + "archery_ticket_price": "0", + "id": "669" + }, + { + "examine": "A small brush used to clean rock samples.", + "durability": null, + "name": "Specimen brush", + "archery_ticket_price": "0", + "id": "670" + }, + { + "examine": "A carefully-kept-safe skull sample.", + "durability": null, + "name": "Animal skull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "671" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A special cup.", + "durability": null, + "name": "Special cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "672" + }, + { + "examine": "A lucky mascot.", + "durability": null, + "name": "Teddy", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "673" + }, + { + "examine": "A roughly shaped piece of rock.", + "durability": null, + "name": "Cracked sample", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "674" + }, + { + "examine": "A small pick for digging.", + "durability": null, + "name": "Rock pick", + "archery_ticket_price": "0", + "id": "675", + "equipment_slot": "3" + }, + { + "examine": "Used for digging!", + "durability": null, + "name": "Trowel", + "archery_ticket_price": "0", + "id": "676" + }, + { + "examine": "An empty tray for panning.", + "durability": null, + "name": "Panning tray", + "archery_ticket_price": "0", + "id": "677" + }, + { + "examine": "This tray contains gold nuggets.", + "durability": null, + "name": "Panning tray", + "archery_ticket_price": "0", + "id": "678" + }, + { + "examine": "This tray contains mud.", + "durability": null, + "name": "Panning tray", + "archery_ticket_price": "0", + "id": "679" + }, + { + "examine": "Pure, lovely gold!", + "durability": null, + "name": "Nuggets", + "archery_ticket_price": "0", + "id": "680" + }, + { + "examine": "An unusual symbol as yet unidentified by the archaeological expert.", + "durability": null, + "name": "Ancient talisman", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "681" + }, + { + "examine": "A letter waiting to be stamped.", + "durability": null, + "name": "Unstamped letter", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "682" + }, + { + "examine": "A sealed letter of recommendation.", + "durability": null, + "name": "Sealed letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "683" + }, + { + "examine": "Used to hold up trousers!", + "durability": null, + "name": "Belt buckle", + "weight": "1", + "archery_ticket_price": "0", + "id": "684" + }, + { + "examine": "Phew!", + "durability": null, + "name": "Old boot", + "archery_ticket_price": "0", + "id": "685" + }, + { + "examine": "A decent-enough weapon gone rusty.", + "durability": null, + "name": "Rusty sword", + "weight": "2", + "archery_ticket_price": "0", + "id": "686" + }, + { + "examine": "This must have been shot at high speed.", + "durability": null, + "name": "Broken arrow", + "archery_ticket_price": "0", + "id": "687" + }, + { + "examine": "Not Dick Whittington's helper at all!", + "durability": null, + "name": "Buttons", + "archery_ticket_price": "0", + "id": "688" + }, + { + "examine": "I pity the poor person beaten with this!", + "attack_audios": "2555,0,0,0", + "durability": null, + "name": "Broken staff", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "689" + }, + { + "examine": "Smashed glass.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "690" + }, + { + "examine": "The owner has passed Earth Sciences Level 1 exam.", + "durability": null, + "name": "Level 1 certificate", + "archery_ticket_price": "0", + "id": "691" + }, + { + "examine": "The owner has passed Earth Sciences Level 2 exam.", + "durability": null, + "name": "Level 2 certificate", + "archery_ticket_price": "0", + "id": "692" + }, + { + "examine": "The owner has passed Earth Sciences Level 3 exam.", + "durability": null, + "name": "Level 3 certificate", + "archery_ticket_price": "0", + "id": "693" + }, + { + "examine": "Smashing!", + "durability": null, + "name": "Ceramic remains", + "archery_ticket_price": "0", + "id": "694" + }, + { + "examine": "Now, if I could just find a tooth fairy to sell this to...", + "durability": null, + "name": "Old tooth", + "archery_ticket_price": "0", + "id": "695" + }, + { + "examine": "A letter inviting me to use the private digging shafts.", + "durability": null, + "name": "Invitation letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "696" + }, + { + "examine": "It would be hard to repair this!", + "durability": null, + "name": "Damaged armour", + "weight": "7.75", + "archery_ticket_price": "0", + "id": "697" + }, + { + "examine": "Armour left over from a great fight.", + "durability": null, + "name": "Broken armour", + "weight": "8", + "archery_ticket_price": "0", + "id": "698" + }, + { + "examine": "An old stone slab with writing on it.", + "durability": null, + "name": "Stone tablet", + "archery_ticket_price": "0", + "id": "699" + }, + { + "examine": "An acrid chemical.", + "durability": null, + "name": "Chemical powder", + "archery_ticket_price": "0", + "id": "700" + }, + { + "examine": "An acrid chemical.", + "durability": null, + "name": "Ammonium nitrate", + "archery_ticket_price": "0", + "id": "701" + }, + { + "examine": "A strong chemical.", + "durability": null, + "name": "Unidentified liquid", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "702" + }, + { + "shop_price": "1", + "examine": "A strong chemical.", + "durability": null, + "name": "Nitroglycerin", + "weight": "1", + "archery_ticket_price": "0", + "id": "703" + }, + { + "examine": "Charcoal - crushed to small pieces!", + "durability": null, + "name": "Ground charcoal", + "archery_ticket_price": "0", + "id": "704" + }, + { + "examine": "A mixture of strong chemicals.", + "durability": null, + "name": "Chemical compound", + "weight": "2", + "archery_ticket_price": "0", + "id": "707" + }, + { + "examine": "The root of an arcenia plant.", + "durability": null, + "name": "Arcenia root", + "archery_ticket_price": "0", + "id": "708" + }, + { + "examine": "An unusually shaped vase. You can see something glinting inside.", + "durability": null, + "name": "Vase", + "archery_ticket_price": "0", + "id": "710" + }, + { + "examine": "It's about chemicals, judging from its cover.", + "durability": null, + "name": "Book on chemicals", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "711" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "712" + }, + { + "examine": "Notes given to you by Radimus Erkle, it includes a partially completed map.", + "durability": null, + "name": "Radimus notes", + "archery_ticket_price": "0", + "id": "714" + }, + { + "examine": "Notes given to you by Radimus Erkle, it includes a partially completed map.", + "durability": null, + "name": "Radimus notes", + "archery_ticket_price": "0", + "id": "715" + }, + { + "examine": "It makes a loud but interesting sound when swung in the air.", + "durability": null, + "name": "Bull roarer", + "archery_ticket_price": "0", + "id": "716" + }, + { + "examine": "A scrawled note with spidery writing on it.", + "durability": null, + "name": "Scrawled note", + "archery_ticket_price": "0", + "id": "717" + }, + { + "examine": "A scrawled note with spidery writing on it.", + "durability": null, + "name": "A scribbled note", + "archery_ticket_price": "0", + "id": "718" + }, + { + "examine": "A scrawled note with spidery writing on it.", + "durability": null, + "name": "Scrumpled note", + "archery_ticket_price": "0", + "id": "719" + }, + { + "examine": "A rough sketch of a bowl shaped vessel given to you by Gujuo.", + "durability": null, + "name": "Sketch", + "archery_ticket_price": "0", + "id": "720" + }, + { + "examine": "A specially made bowl constructed out of pure gold.", + "durability": null, + "name": "Gold bowl", + "archery_ticket_price": "0", + "id": "721" + }, + { + "examine": "A specially made bowl constructed out of pure gold and blessed.", + "durability": null, + "name": "Blessed gold bowl", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "722" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "723" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "724" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "725" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "726" + }, + { + "examine": "One of nature's pipes.", + "durability": null, + "name": "Hollow reed", + "weight": "0.012", + "archery_ticket_price": "0", + "id": "727" + }, + { + "examine": "One of nature's pipes.", + "durability": null, + "name": "Hollow reed", + "weight": "0.012", + "archery_ticket_price": "0", + "id": "728" + }, + { + "examine": "It looks like the Shamans personal notes...", + "durability": null, + "name": "Shamans tome", + "archery_ticket_price": "0", + "id": "729" + }, + { + "examine": "An ancient tome on Demonology.", + "durability": null, + "name": "Binding book", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "730" + }, + { + "shop_price": "160", + "examine": "An enchanted empty glass vial.", + "durability": null, + "name": "Enchanted vial", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "731" + }, + { + "examine": "A vial of holy water, good against certain demons.", + "durability": null, + "name": "Holy water", + "archery_ticket_price": "0", + "id": "732", + "weapon_interface": "18", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,24", + "equipment_slot": "3" + }, + { + "examine": "Fragments of a broken container.", + "durability": null, + "name": "Smashed glass", + "archery_ticket_price": "0", + "id": "733" + }, + { + "examine": "These need to be germinated before they can be used. / These are germinated and ready to be planted in fertile soil.", + "durability": null, + "name": "Yommi tree seeds", + "archery_ticket_price": "0", + "id": "735" + }, + { + "examine": "These need to be germinated before they can be used. / These are germinated and ready to be planted in fertile soil.", + "durability": null, + "name": "Yommi tree seeds", + "archery_ticket_price": "0", + "id": "736" + }, + { + "examine": "A Snakeweed mixture, needs another ingredient.", + "durability": null, + "name": "Snakeweed mixture", + "weight": "1", + "archery_ticket_price": "0", + "id": "737" + }, + { + "examine": "It's a mixture of ardrigal and water. Needs another ingredient.", + "durability": null, + "name": "Ardrigal mixture", + "archery_ticket_price": "0", + "id": "738" + }, + { + "examine": "A bravery potion for which Gujuo gave you the details, let's hope it works.", + "durability": null, + "name": "Bravery potion", + "archery_ticket_price": "0", + "id": "739" + }, + { + "shop_price": "160", + "examine": "A silly, blue pointed hat.", + "grand_exchange_price": "472", + "durability": null, + "name": "Blue hat", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "hat": "true", + "id": "740", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "It looks like it's been snapped off of something.", + "durability": null, + "name": "Chunk of crystal", + "archery_ticket_price": "0", + "id": "741" + }, + { + "examine": "It looks like it's been snapped off of something.", + "durability": null, + "name": "Hunk of crystal", + "archery_ticket_price": "0", + "id": "742" + }, + { + "examine": "It looks like it's been snapped off of something.", + "durability": null, + "name": "Lump of crystal", + "archery_ticket_price": "0", + "id": "743" + }, + { + "examine": "A heart shaped crystal.", + "durability": null, + "name": "Heart crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "744" + }, + { + "examine": "A heart shaped crystal.", + "durability": null, + "name": "Heart crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "745" + }, + { + "attack_anims": "400,400,400,400", + "examine": "A black obsidian dagger, it has a strange aura about it.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Dark dagger", + "archery_ticket_price": "0", + "id": "746", + "weapon_interface": "5", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,0,0,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "examine": "A black obsidian dagger, it has a strange aura about it - it seems to be glowing.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "attack_audios": "2517,2517,2500,2517", + "name": "Glowing dagger", + "archery_ticket_price": "0", + "id": "747", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,0,0,0,0" + }, + { + "examine": "A powerful spell for good.", + "durability": null, + "name": "Holy force", + "archery_ticket_price": "0", + "id": "748" + }, + { + "examine": "A well carved totem pole made from the trunk of a Yommi tree.", + "durability": null, + "name": "Yommi totem", + "weight": "3", + "archery_ticket_price": "0", + "id": "749" + }, + { + "examine": "A gilded totem pole from the Kharazi tribe.", + "durability": null, + "name": "Gilded totem", + "archery_ticket_price": "0", + "id": "750" + }, + { + "examine": "A common gnomeball, obtained by playing gnomeball.", + "durability": null, + "name": "Gnomeball", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "751", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Gnomeball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "752" + }, + { + "ge_buy_limit": "100", + "examine": "Poisonous berries.", + "grand_exchange_price": "42", + "durability": null, + "name": "Cadava berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "753" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "42", + "durability": null, + "name": "Cadava berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "754" + }, + { + "shop_price": "1", + "examine": "This potion will most certainly almost kill you.", + "durability": null, + "name": "Cadava potion", + "archery_ticket_price": "0", + "id": "756" + }, + { + "examine": "Phoenix Gang weapon store key.", + "durability": null, + "name": "Weapon store key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "759" + }, + { + "durability": null, + "name": "Weapon store key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "760" + }, + { + "destroy_message": "You'll have to kill Jonny the beard in order to get another one.", + "examine": "An intelligence report.", + "durability": null, + "name": "Intel report", + "destroy": "true", + "archery_ticket_price": "0", + "id": "761" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Half of the Shield of Arrav.", + "durability": null, + "name": "Broken shield", + "destroy": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "763" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Half of the Shield of Arrav.", + "durability": null, + "name": "Broken shield", + "destroy": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "765" + }, + { + "turn90cw_anim": "821", + "examine": "Second-rate crossbow, former property of the Phoenix Gang.", + "walk_anim": "4226", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Phoenix crossbow", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "767", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Phoenix crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "768" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Entrance certificate to the Imperial Guard.", + "durability": null, + "name": "Certificate", + "archery_ticket_price": "0", + "id": "769" + }, + { + "destroy_message": "You can get another branch if you chop the dramen tree underneath Entrana again.", + "examine": "A limb of the fabled Dramen tree.", + "durability": null, + "name": "Dramen branch", + "tradeable": "false", + "destroy": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "771" + }, + { + "turn90cw_anim": "1207", + "examine": "Crafted from a Dramen tree branch.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Dramen staff", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "772", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "examine": "A perfect ruby ring.", + "durability": null, + "name": "'perfect' ring", + "archery_ticket_price": "0", + "id": "773", + "equipment_slot": "12" + }, + { + "examine": "A perfect ruby necklace.", + "durability": null, + "name": "'perfect' necklace", + "archery_ticket_price": "0", + "id": "774", + "equipment_slot": "2" + }, + { + "destroy_message": "You can obtain another set of Cooking gauntlets from Dimintheis.", + "examine": "These gauntlets empower with a greater ability to cook fish.", + "durability": null, + "name": "Cooking gauntlets", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "775", + "bonuses": "2,2,2,0,0,8,9,7,0,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can obtain another set of Goldsmith gauntlets from Dimintheis.", + "examine": "These gauntlets empower the bearer whilst making gold.", + "durability": null, + "name": "Goldsmith gauntlets", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "776", + "bonuses": "2,2,2,0,0,8,9,7,0,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can obtain another set of Chaos gauntlets from Dimintheis.", + "examine": "These gauntlets empower spell casters.", + "durability": null, + "name": "Chaos gauntlets", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "777", + "bonuses": "2,2,2,0,0,8,9,7,0,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "My reward for assisting the Fitzharmon family.", + "durability": null, + "name": "Family gauntlets", + "weight": "1", + "archery_ticket_price": "0", + "id": "778", + "bonuses": "2,2,2,0,0,8,9,7,0,0,0,2,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "A fragment of the Fitzharmon family crest.", + "durability": null, + "name": "Crest part", + "archery_ticket_price": "0", + "id": "779" + }, + { + "examine": "A fragment of the Fitzharmon family crest.", + "durability": null, + "name": "Crest part", + "archery_ticket_price": "0", + "id": "780" + }, + { + "examine": "A fragment of the Fitzharmon family crest.", + "durability": null, + "name": "Crest part", + "archery_ticket_price": "0", + "id": "781" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A sample of the bark from the Grand Tree.", + "durability": null, + "name": "Bark sample", + "archery_ticket_price": "0", + "id": "783" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A book to translate the ancient gnome language into English.", + "durability": null, + "name": "Translation book", + "archery_ticket_price": "0", + "id": "784" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Perhaps I should read it and see what Glough is up to!", + "durability": null, + "name": "Glough's journal", + "archery_ticket_price": "0", + "id": "785" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Hazelmere wrote something down on this scroll.", + "durability": null, + "name": "Hazelmere's scroll", + "archery_ticket_price": "0", + "id": "786" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An order from the Karamja shipyard.", + "durability": null, + "name": "Lumber order", + "archery_ticket_price": "0", + "id": "787" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "The key to Glough's chest.", + "durability": null, + "name": "Glough's key", + "weight": "1", + "archery_ticket_price": "0", + "id": "788" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "789" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "790" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "791" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "792" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An ancient rock with strange magical properties.", + "durability": null, + "name": "Daconia rock", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "793" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "These are plans for an invasion!", + "durability": null, + "name": "Invasion plans", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "794" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A model of a Karamja warship", + "durability": null, + "name": "War ship", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "795" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "3", + "name": "Bronze thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "800", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,5" + }, + { + "shop_price": "13", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "14", + "name": "Iron thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "801", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,5}", + "shop_price": "38", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "60", + "name": "Steel thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "802", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,11" + }, + { + "requirements": "{4,20}", + "shop_price": "105", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "135", + "name": "Mithril thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "803", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,16" + }, + { + "requirements": "{4,30}", + "shop_price": "262", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "138", + "name": "Adamant thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "804", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,23" + }, + { + "requirements": "{4,40}", + "shop_price": "698", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "has_special": "true", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "243", + "name": "Rune thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "805", + "bonuses": "0,0,0,0,26,0,0,0,0,0,0,0,0,0,36" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "53", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "806", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "59", + "attack_audios": "2547,0,0,0", + "name": "Iron dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "807", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "50", + "attack_audios": "2547,0,0,0", + "name": "Steel dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "808", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "68", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "809", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "96", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "810", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "122", + "attack_audios": "2547,0,0,0", + "name": "Rune dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "811", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "66", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "812", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "66", + "attack_audios": "2547,0,0,0", + "name": "Iron dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "813", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "75", + "attack_audios": "2547,0,0,0", + "name": "Steel dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "814", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "65", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "815", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "75", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "816", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "110", + "attack_audios": "2547,0,0,0", + "name": "Rune dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "817", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Poisoned dart(p)", + "archery_ticket_price": "0", + "id": "818", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of bronze - needs feathers for flight.", + "grand_exchange_price": "24", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Bronze dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "819" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of iron - needs feathers for flight.", + "grand_exchange_price": "19", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Iron dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "820" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of steel - needs feathers for flight.", + "grand_exchange_price": "66", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Steel dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "821" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of mithril - needs feathers for flight.", + "grand_exchange_price": "97", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Mithril dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "822" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of adamantite - needs feathers for flight.", + "grand_exchange_price": "212", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Adamant dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "823" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of runite - needs feathers for flight.", + "grand_exchange_price": "498", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Rune dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "824" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "6", + "name": "Bronze javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "825", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "2", + "name": "Iron javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "826", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "19", + "name": "Steel javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "827", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "25", + "name": "Mithril javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "828", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "shop_price": "100", + "ge_buy_limit": "1000", + "examine": "An adamant tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "51", + "name": "Adamant javelin", + "tradeable": "true", + "archery_ticket_price": "100", + "id": "829", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "requirements": "{4,40}", + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "186", + "name": "Rune javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "830", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "19", + "name": "Bronze javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "831", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "19", + "name": "Iron javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "832", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "34", + "name": "Steel javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "833", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "44", + "name": "Mithril javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "834", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "shop_price": "100", + "ge_buy_limit": "1000", + "examine": "An adamant tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "88", + "name": "Adamant javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "835", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "requirements": "{4,40}", + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "256", + "name": "Rune javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "836", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "This fires crossbow bolts.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "276", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "837", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0", + "shop_price": "70", + "durability": null, + "weight": "8", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Crossbow" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "276", + "durability": null, + "name": "Crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "838" + }, + { + "ge_buy_limit": "5000", + "turn90cw_anim": "821", + "examine": "A nice sturdy bow.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "55", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "839", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,0", + "shop_price": "80", + "durability": null, + "weight": "1.8", + "weapon_interface": "16", + "render_anim": "1", + "attack_audios": "2700,0,0,0", + "name": "Longbow" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "55", + "durability": null, + "name": "Longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "840" + }, + { + "ge_buy_limit": "5000", + "turn90cw_anim": "821", + "examine": "A shortbow made of wood.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "79", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "841", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,0", + "shop_price": "50", + "durability": null, + "weight": "1.33", + "weapon_interface": "16", + "render_anim": "1", + "attack_audios": "2700,0,0,0", + "name": "Shortbow" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "79", + "durability": null, + "name": "Shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "842" + }, + { + "requirements": "{4,5}", + "shop_price": "164", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of oak, still effective.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "54", + "attack_audios": "2700,0,0,0", + "name": "Oak shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "843", + "bonuses": "0,0,0,0,14,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "54", + "durability": null, + "name": "Oak shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "844" + }, + { + "requirements": "{4,5}", + "shop_price": "160", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of oak.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "132", + "attack_audios": "2700,0,0,0", + "name": "Oak longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "845", + "bonuses": "0,0,0,0,14,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "132", + "durability": null, + "name": "Oak longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "846" + }, + { + "requirements": "{4,20}", + "shop_price": "320", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of willow.", + "durability": null, + "weight": "1.5", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "132", + "attack_audios": "2700,0,0,0", + "name": "Willow longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "847", + "bonuses": "0,0,0,0,20,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "132", + "durability": null, + "name": "Willow longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "848" + }, + { + "requirements": "{4,20}", + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of willow, still effective.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "106", + "attack_audios": "2700,0,0,0", + "name": "Willow shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "849", + "bonuses": "0,0,0,0,20,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "106", + "durability": null, + "name": "Willow shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "850" + }, + { + "requirements": "{4,30}", + "shop_price": "640", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of maple.", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "320", + "attack_audios": "2700,0,0,0", + "name": "Maple longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "851", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "320", + "durability": null, + "name": "Maple longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "852" + }, + { + "requirements": "{4,30}", + "shop_price": "400", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of maple, still effective.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "290", + "attack_audios": "2700,0,0,0", + "name": "Maple shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "853", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "290", + "durability": null, + "name": "Maple shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "854" + }, + { + "requirements": "{4,40}", + "shop_price": "674", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of yew.", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "706", + "attack_audios": "2700,0,0,0", + "name": "Yew longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "855", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "706", + "durability": null, + "name": "Yew longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "856" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of yew, still effective.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "422", + "attack_audios": "2700,0,0,0", + "name": "Yew shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "857", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "422", + "durability": null, + "name": "Yew shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "858" + }, + { + "requirements": "{4,50}", + "shop_price": "1270", + "ge_buy_limit": "5000", + "examine": "A nice sturdy magical bow.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "1437", + "attack_audios": "2700,0,0,0", + "name": "Magic longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "859", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1437", + "durability": null, + "name": "Magic longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "860" + }, + { + "requirements": "{4,50}", + "shop_price": "5600", + "ge_buy_limit": "5000", + "examine": "Short and magical, but still effective.", + "has_special": "true", + "durability": null, + "weight": "1.3", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "959", + "attack_audios": "2700,0,0,0", + "name": "Magic shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "861", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "959", + "durability": null, + "name": "Magic shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "862" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "87", + "attack_audios": "2704,0,0,0", + "name": "Iron knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "863", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "73", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "864", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "136", + "attack_audios": "2704,0,0,0", + "name": "Steel knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "865", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "201", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "866", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "421", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "867", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1132", + "attack_audios": "2704,0,0,0", + "name": "Rune knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "868", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "95", + "attack_audios": "2704,0,0,0", + "name": "Black knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "869", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "73", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "870", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "88", + "attack_audios": "2704,0,0,0", + "name": "Iron knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "871", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "124", + "attack_audios": "2704,0,0,0", + "name": "Steel knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "872", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "226", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "873", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "69", + "attack_audios": "2704,0,0,0", + "name": "Black knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "874", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "503", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "875", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1374", + "attack_audios": "2704,0,0,0", + "name": "Rune knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "876", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "877", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "38", + "durability": null, + "name": "Bronze bolts(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "878", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "25000", + "examine": "Opal tipped bronze crossbow bolts", + "grand_exchange_price": "5", + "durability": null, + "name": "Opal bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "879", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,14", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "ge_buy_limit": "25000", + "examine": "Pearl tipped Iron crossbow bolts.", + "grand_exchange_price": "32", + "durability": null, + "name": "Pearl bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "880", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,48", + "equipment_slot": "13" + }, + { + "shop_price": "80", + "ge_buy_limit": "10000", + "examine": "Great if you have a crossbow!", + "grand_exchange_price": "42", + "durability": null, + "name": "Barbed bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "881", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,12", + "equipment_slot": "13" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "10", + "durability": null, + "name": "Bronze arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "882", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "39", + "durability": null, + "name": "Bronze arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "883", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "10", + "durability": null, + "name": "Iron arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "884", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "41", + "durability": null, + "name": "Iron arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "885", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "25", + "durability": null, + "name": "Steel arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "886", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "69", + "durability": null, + "name": "Steel arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "887", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "30", + "durability": null, + "name": "Mithril arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "888", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "69", + "durability": null, + "name": "Mithril arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "889", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "111", + "durability": null, + "name": "Adamant arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "890", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "109", + "durability": null, + "name": "Adamant arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "891", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "212", + "durability": null, + "name": "Rune arrow", + "tradeable": "true", + "archery_ticket_price": "40", + "id": "892", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "257", + "durability": null, + "name": "Rune arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "893", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with bronze heads and oil-soaked cloth. lit: An easy to make, bronze-headed fire arrow.", + "grand_exchange_price": "228", + "durability": null, + "name": "Bronze fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "942", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "0", + "examine": "Ugh! It's wriggling!", + "durability": null, + "name": "Worm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "943" + }, + { + "durability": null, + "name": "Worm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "944" + }, + { + "durability": null, + "name": "Throwing rope", + "archery_ticket_price": "0", + "id": "945", + "equipment_slot": "3" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "A dangerous looking knife.", + "grand_exchange_price": "32", + "durability": null, + "name": "Knife", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "946" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "32", + "durability": null, + "name": "Knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "947" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "This would make warm clothing.", + "grand_exchange_price": "9", + "durability": null, + "name": "Bear fur", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "948" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9", + "durability": null, + "name": "Bear fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "949" + }, + { + "shop_price": "21", + "ge_buy_limit": "100", + "examine": "It's a sheet of silk.", + "grand_exchange_price": "27", + "durability": null, + "name": "Silk", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "950" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27", + "durability": null, + "name": "Silk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "951" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A slightly muddy spade. / Popular with farmers and treasure hunters.", + "grand_exchange_price": "117", + "durability": null, + "name": "Spade", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "952" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "117", + "durability": null, + "name": "Spade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "953" + }, + { + "shop_price": "18", + "ge_buy_limit": "100", + "examine": "A coil of rope.", + "grand_exchange_price": "96", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "954" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "96", + "durability": null, + "name": "Rope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "955" + }, + { + "examine": "Get your axes from Bob's Axes.", + "durability": null, + "name": "Flier", + "archery_ticket_price": "0", + "id": "956" + }, + { + "shop_price": "70", + "ge_buy_limit": "100", + "examine": "This would make warm clothing.", + "grand_exchange_price": "34", + "durability": null, + "name": "Grey wolf fur", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "958" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34", + "durability": null, + "name": "Grey wolf fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "959" + }, + { + "shop_price": "100", + "ge_buy_limit": "10000", + "examine": "A plank of wood!", + "grand_exchange_price": "234", + "durability": null, + "name": "Plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "960" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "234", + "durability": null, + "name": "Plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "961" + }, + { + "ge_buy_limit": "2", + "examine": "I need to pull this.", + "grand_exchange_price": "15", + "durability": null, + "name": "Christmas cracker", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "962" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1900000000", + "durability": null, + "name": "Christmas cracker", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "963" + }, + { + "examine": "A fraction of a roof.", + "durability": null, + "name": "Tile", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "966" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "Used for making notes.", + "grand_exchange_price": "153", + "durability": null, + "name": "Papyrus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "970" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "153", + "durability": null, + "name": "Papyrus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "971" + }, + { + "shop_price": "15", + "examine": "Used for making notes.", + "grand_exchange_price": "163", + "durability": null, + "name": "Papyrus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "972" + }, + { + "shop_price": "45", + "ge_buy_limit": "100", + "examine": "A lump of charcoal.", + "grand_exchange_price": "272", + "durability": null, + "name": "Charcoal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "973" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "272", + "durability": null, + "name": "Charcoal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "974" + }, + { + "shop_price": "52", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "grand_exchange_price": "619", + "name": "Machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "975", + "bonuses": "0,6,-2,0,0,0,0,0,0,0,0,5,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "619", + "durability": null, + "name": "Machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "976" + }, + { + "durability": null, + "name": "Cooking pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "978" + }, + { + "shop_price": "10", + "ge_buy_limit": "2", + "examine": "Used to get out of Thordur's blackhole.", + "grand_exchange_price": "298000000", + "durability": null, + "name": "Disk of returning", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "981" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "298000000", + "durability": null, + "name": "Disk of returning", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "982" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "A key found on the floor of Edgeville Dungeon.", + "grand_exchange_price": "547", + "durability": null, + "name": "Brass key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "983" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "547", + "durability": null, + "name": "Brass key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "984" + }, + { + "ge_buy_limit": "100", + "examine": "The tooth end of the mysterious Crystal key. Can you find the other half?", + "grand_exchange_price": "24900", + "durability": null, + "name": "Tooth half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "985" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24900", + "durability": null, + "name": "Tooth half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "986" + }, + { + "ge_buy_limit": "100", + "examine": "The loop end of the mysterious Crystal key. Can you find the other half?", + "grand_exchange_price": "21100", + "durability": null, + "name": "Loop half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "987" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21100", + "durability": null, + "name": "Loop half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "988" + }, + { + "ge_buy_limit": "100", + "examine": "A mysterious key for a mysterious chest.", + "grand_exchange_price": "48700", + "durability": null, + "name": "Crystal key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "989" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48700", + "durability": null, + "name": "Crystal key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "990" + }, + { + "ge_buy_limit": "100", + "examine": "It looks like the key to a chest", + "grand_exchange_price": "4971", + "durability": null, + "name": "Muddy key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "991" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4971", + "durability": null, + "name": "Muddy key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "992" + }, + { + "ge_buy_limit": "100", + "examine": "You get a sense of dread from this key.", + "grand_exchange_price": "54600", + "durability": null, + "name": "Sinister key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "993" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "54600", + "durability": null, + "name": "Sinister key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "994" + }, + { + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "995" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A mostly clean apron.", + "grand_exchange_price": "93", + "durability": null, + "name": "White apron", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "1005", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "White apron", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1006" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A bright red cape.", + "grand_exchange_price": "187", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1007", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1008" + }, + { + "ge_buy_limit": "100", + "examine": "I'd prefer a gold one.", + "grand_exchange_price": "65", + "durability": null, + "name": "Brass necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1009", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65", + "durability": null, + "name": "Brass necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1010" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "Leg covering favored by women and wizards.", + "grand_exchange_price": "208", + "durability": null, + "name": "Blue skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1011", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "208", + "durability": null, + "name": "Blue skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1012" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A ladies skirt.", + "grand_exchange_price": "216", + "durability": null, + "name": "Pink skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1013", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "216", + "durability": null, + "name": "Pink skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1014" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "Clothing favoured by women and dark wizards.", + "grand_exchange_price": "30", + "durability": null, + "name": "Black skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1015", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Black skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1016" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "grand_exchange_price": "280", + "durability": null, + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "1017", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "280", + "durability": null, + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1018" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A warm black cape.", + "grand_exchange_price": "209", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1019", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "209", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1020" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick blue cape.", + "grand_exchange_price": "504", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1021", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "504", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1022" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick yellow cape.", + "grand_exchange_price": "439", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1023", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "439", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1024" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A black piece of cloth on a string.", + "grand_exchange_price": "111", + "durability": null, + "name": "Eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1025", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "durability": null, + "name": "Eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1026" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick green cape.", + "grand_exchange_price": "1061", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1027", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1061", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1028" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick purple cape.", + "grand_exchange_price": "955", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1029", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "955", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1030" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick orange cape.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "1", + "grand_exchange_price": "1656", + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1031", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1656", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1032" + }, + { + "shop_price": "30", + "ge_buy_limit": "2", + "examine": "A robe worn by worshippers of Zamorak.", + "grand_exchange_price": "2481", + "durability": null, + "name": "Zamorak robe", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1033", + "bonuses": "0,0,0,2,0,0,0,0,3,0,0,0,3,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2481", + "durability": null, + "name": "Zamorak robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1034" + }, + { + "shop_price": "40", + "ge_buy_limit": "2", + "examine": "A robe worn by worshippers of Zamorak.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1259", + "name": "Zamorak robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1035", + "bonuses": "0,0,0,2,0,0,0,0,3,0,3,0,3,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1259", + "durability": null, + "name": "Zamorak robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1036" + }, + { + "destroy_message": "You can get a replacement from Diango.", + "shop_price": "1", + "examine": "A rabbit-like adornment.", + "durability": null, + "name": "Bunny ears", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1037", + "equipment_slot": "0" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Red partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1038", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1500000000", + "durability": null, + "name": "Red partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1039" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Yellow partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1040", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000000", + "durability": null, + "name": "Yellow partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1041" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Blue partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1042", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2100000000", + "durability": null, + "name": "Blue partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1043" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Green partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1044", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1300000000", + "durability": null, + "name": "Green partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1045" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Purple partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1046", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1000000000", + "durability": null, + "name": "Purple partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1047" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "White partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1048", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2000000000", + "durability": null, + "name": "White partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1049" + }, + { + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "It's a Santa hat.", + "durability": null, + "weight": "0.1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5", + "name": "Santa hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "1050" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "112600000", + "durability": null, + "name": "Santa hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1051" + }, + { + "shop_price": "450", + "examine": "The cape worn by members of the Legends Guild.", + "durability": null, + "name": "Cape of legends", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "1052", + "bonuses": "0,0,0,0,0,7,7,7,7,7,7,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "shop_price": "15", + "ge_buy_limit": "2", + "examine": "Aaaarrrghhh ... I'm a monster.", + "durability": null, + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "98000000", + "name": "Green h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1053" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "98000000", + "durability": null, + "name": "Green h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1054" + }, + { + "remove_head": "true", + "shop_price": "15", + "ge_buy_limit": "2", + "examine": "Aaaarrrghhh ... I'm a monster.", + "durability": null, + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "115900000", + "name": "Blue h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1055" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "115900000", + "durability": null, + "name": "Blue h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1056" + }, + { + "remove_head": "true", + "shop_price": "15", + "ge_buy_limit": "2", + "examine": "Aaaarrrghhh ... I'm a monster.", + "durability": null, + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "154300000", + "name": "Red h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1057" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "154300000", + "durability": null, + "name": "Red h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1058" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "These will keep my hands warm!", + "grand_exchange_price": "12", + "durability": null, + "name": "Leather gloves", + "tradeable": "true", + "weight": "0.23", + "archery_ticket_price": "0", + "id": "1059", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "12", + "durability": null, + "name": "Leather gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1060" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "Comfortable leather boots.", + "grand_exchange_price": "144", + "durability": null, + "name": "Leather boots", + "tradeable": "true", + "weight": "0.34", + "archery_ticket_price": "0", + "id": "1061", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "144", + "durability": null, + "name": "Leather boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1062" + }, + { + "shop_price": "18", + "ge_buy_limit": "5000", + "examine": "Better than no armour!", + "grand_exchange_price": "13", + "durability": null, + "name": "Leather vambraces", + "tradeable": "true", + "weight": "0.22", + "archery_ticket_price": "0", + "id": "1063", + "bonuses": "0,0,0,0,4,2,2,1,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13", + "durability": null, + "name": "Leather vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1064" + }, + { + "requirements": "{4,40}", + "shop_price": "2500", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "0.28", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "1407", + "name": "Green d'hide vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1065", + "bonuses": "0,0,0,-10,8,3,2,4,2,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1407", + "durability": null, + "name": "Green d'hide vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1066" + }, + { + "shop_price": "280", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "1,0,1", + "equipment_slot": "7", + "grand_exchange_price": "55", + "name": "Iron platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1067", + "bonuses": "0,0,0,-21,-7,11,10,10,-4,10,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "55", + "durability": null, + "name": "Iron platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1068" + }, + { + "requirements": "{1,5}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "1,0,1", + "equipment_slot": "7", + "grand_exchange_price": "426", + "name": "Steel platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1069", + "bonuses": "0,0,0,-21,-7,17,16,15,-4,16,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "426", + "durability": null, + "name": "Steel platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1070" + }, + { + "requirements": "{1,20}", + "shop_price": "2600", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "7.7", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "1391", + "name": "Mithril platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1071", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1391", + "durability": null, + "name": "Mithril platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1072" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "10", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "3649", + "name": "Adamant platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1073", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3649", + "durability": null, + "name": "Adamant platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1074" + }, + { + "shop_price": "80", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "grand_exchange_price": "34", + "durability": null, + "name": "Bronze platelegs", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "1075", + "bonuses": "0,0,0,-21,-7,8,7,6,-4,7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34", + "durability": null, + "name": "Bronze platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1076" + }, + { + "requirements": "{1,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "These look pretty heavy", + "durability": null, + "weight": "9", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "4995", + "name": "Black platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1077", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4995", + "durability": null, + "name": "Black platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1078" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "38500", + "name": "Rune platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1079", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38500", + "durability": null, + "name": "Rune platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1080" + }, + { + "shop_price": "280", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "grand_exchange_price": "86", + "durability": null, + "name": "Iron plateskirt", + "tradeable": "true", + "weight": "8.1", + "archery_ticket_price": "0", + "id": "1081", + "bonuses": "0,0,0,-21,-7,11,10,10,-4,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "86", + "durability": null, + "name": "Iron plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1082" + }, + { + "requirements": "{1,5}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "8.1", + "equipment_slot": "7", + "grand_exchange_price": "514", + "name": "Steel plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1083", + "bonuses": "0,0,0,-21,-7,17,16,15,-4,16,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "514", + "durability": null, + "name": "Steel plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1084" + }, + { + "requirements": "{1,20}", + "shop_price": "2600", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "7.2", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "1339", + "name": "Mithril plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1085", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1339", + "durability": null, + "name": "Mithril plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1086" + }, + { + "shop_price": "80", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "grand_exchange_price": "113", + "durability": null, + "name": "Bronze plateskirt", + "tradeable": "true", + "weight": "8.1", + "archery_ticket_price": "0", + "id": "1087", + "bonuses": "0,0,0,-21,-7,8,7,6,-4,7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "113", + "durability": null, + "name": "Bronze plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1088" + }, + { + "requirements": "{1,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "8", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "2180", + "name": "Black plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1089", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2180", + "durability": null, + "name": "Black plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1090" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "3610", + "name": "Adamant plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1091", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3610", + "durability": null, + "name": "Adamant plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1092" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "8", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "38100", + "name": "Rune plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1093", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38100", + "durability": null, + "name": "Rune plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1094" + }, + { + "shop_price": "23", + "ge_buy_limit": "5000", + "examine": "Better than no armour!", + "grand_exchange_price": "5", + "durability": null, + "name": "Leather chaps", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1095", + "bonuses": "0,0,0,0,4,2,2,1,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5", + "durability": null, + "name": "Leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1096" + }, + { + "requirements": "{4,20}", + "shop_price": "750", + "ge_buy_limit": "1000", + "examine": "Those studs should provide a bit more protection.", + "durability": null, + "weight": "4.5", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "377", + "name": "Studded chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1097", + "bonuses": "0,0,0,-5,6,15,16,17,6,16,5,0,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "377", + "durability": null, + "name": "Studded chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1098" + }, + { + "requirements": "{4,40}", + "shop_price": "3900", + "ge_buy_limit": "5000", + "examine": "100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,4,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2228", + "name": "Green d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1099", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2228", + "durability": null, + "name": "Green d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1100" + }, + { + "shop_price": "210", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "76", + "durability": null, + "name": "Iron chainbody", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "1101", + "bonuses": "0,0,0,-15,0,10,15,19,-3,12,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "76", + "durability": null, + "name": "Iron chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1102" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "37", + "durability": null, + "name": "Bronze chainbody", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "1103", + "bonuses": "0,0,0,-15,0,7,11,13,-3,9,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "37", + "durability": null, + "name": "Bronze chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1104" + }, + { + "requirements": "{1,5}", + "shop_price": "750", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6", + "equipment_slot": "4", + "grand_exchange_price": "265", + "name": "Steel chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1105", + "bonuses": "0,0,0,-15,0,17,25,30,-3,19,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "265", + "durability": null, + "name": "Steel chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1106" + }, + { + "requirements": "{1,10}", + "shop_price": "1440", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6.8", + "absorb": "1,0,2", + "equipment_slot": "4", + "grand_exchange_price": "961", + "name": "Black chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1107", + "bonuses": "0,0,0,-15,0,22,32,39,-3,24,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "961", + "durability": null, + "name": "Black chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1108" + }, + { + "requirements": "{1,20}", + "shop_price": "1950", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "5.8", + "absorb": "1,0,3", + "equipment_slot": "4", + "grand_exchange_price": "963", + "name": "Mithril chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1109", + "bonuses": "0,0,0,-15,0,25,35,42,-3,27,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "963", + "durability": null, + "name": "Mithril chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1110" + }, + { + "requirements": "{1,30}", + "shop_price": "4800", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "7.7", + "absorb": "2,0,4", + "equipment_slot": "4", + "grand_exchange_price": "2731", + "name": "Adamant chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1111", + "bonuses": "0,0,0,-15,0,36,50,61,-3,38,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2731", + "durability": null, + "name": "Adamant chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1112" + }, + { + "requirements": "{1,40}", + "shop_price": "50000", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6.8", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "29800", + "name": "Rune chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1113", + "bonuses": "0,0,0,-15,0,63,72,78,-3,65,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29800", + "durability": null, + "name": "Rune chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1114" + }, + { + "shop_price": "560", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.95", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "434", + "name": "Iron platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1115", + "bonuses": "0,0,0,-30,-10,21,20,12,-6,20,5,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "434", + "durability": null, + "name": "Iron platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1116" + }, + { + "shop_price": "160", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.5", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "36", + "name": "Bronze platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1117", + "bonuses": "0,0,0,-30,-10,15,14,9,-6,14,5,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "36", + "durability": null, + "name": "Bronze platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1118" + }, + { + "requirements": "{1,5}", + "shop_price": "2000", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1077", + "name": "Steel platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1119", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1077", + "durability": null, + "name": "Steel platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1120" + }, + { + "requirements": "{1,20}", + "shop_price": "5200", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "8.6", + "absorb": "1,0,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "2965", + "name": "Mithril platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1121", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,20,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "2965", + "durability": null, + "name": "Mithril platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1122" + }, + { + "requirements": "{1,30}", + "shop_price": "16256", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "11", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "9790", + "name": "Adamant platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1123", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "9790", + "durability": null, + "name": "Adamant platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1124" + }, + { + "requirements": "{1,10}", + "shop_price": "3840", + "ge_buy_limit": "500", + "examine": "Provides Excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "4915", + "name": "Black platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1125", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "4915", + "durability": null, + "name": "Black platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1126" + }, + { + "requirements": "{1,40}", + "shop_price": "65000", + "ge_buy_limit": "100", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "38800", + "name": "Rune platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1127", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38800", + "durability": null, + "name": "Rune platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1128" + }, + { + "shop_price": "20", + "ge_buy_limit": "1000", + "examine": "Better than no armour!", + "grand_exchange_price": "34", + "durability": null, + "name": "Leather body", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "1129", + "bonuses": "0,0,0,-2,2,8,9,10,4,9,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "34", + "durability": null, + "name": "Leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1130" + }, + { + "requirements": "{1,10}", + "shop_price": "170", + "ge_buy_limit": "1000", + "examine": "Harder than normal leather.", + "durability": null, + "weight": "3.6", + "absorb": "0,2,1", + "equipment_slot": "4", + "grand_exchange_price": "43", + "name": "Hardleather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1131", + "bonuses": "0,0,0,-4,8,12,15,18,6,15,10,0,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "43", + "durability": null, + "name": "Hardleather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1132" + }, + { + "requirements": "{1,20}-{4,20}", + "shop_price": "850", + "ge_buy_limit": "1000", + "examine": "These studs should provide a bit more protection.", + "durability": null, + "weight": "5", + "absorb": "0,3,1", + "equipment_slot": "4", + "grand_exchange_price": "414", + "name": "Studded body", + "tradeable": "true", + "archery_ticket_price": "150", + "id": "1133", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "414", + "durability": null, + "name": "Studded body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1134" + }, + { + "requirements": "{1,40}-{4,40}", + "shop_price": "7800", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "4544", + "name": "Green d'hide body", + "tradeable": "true", + "archery_ticket_price": "2400", + "id": "1135", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4544", + "durability": null, + "name": "Green d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1136" + }, + { + "remove_head": "true", + "shop_price": "84", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "22", + "name": "Iron med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1137", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22", + "durability": null, + "name": "Iron med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1138" + }, + { + "remove_head": "true", + "shop_price": "24", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "39", + "name": "Bronze med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1139", + "bonuses": "0,0,0,-3,-1,3,4,2,-1,3,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "39", + "durability": null, + "name": "Bronze med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1140" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "52", + "name": "Steel med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1141", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "52", + "durability": null, + "name": "Steel med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1142" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.3", + "equipment_slot": "0", + "grand_exchange_price": "272", + "name": "Mithril med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1143", + "bonuses": "0,0,0,-3,-1,10,11,9,-1,10,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "272", + "durability": null, + "name": "Mithril med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1144" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "1024", + "name": "Adamant med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1145", + "bonuses": "0,0,0,-3,-1,14,15,13,-1,14,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1024", + "durability": null, + "name": "Adamant med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1146" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "19200", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "11400", + "name": "Rune med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1147", + "bonuses": "0,0,0,-3,-1,22,23,21,-1,22,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11400", + "durability": null, + "name": "Rune med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1148" + }, + { + "remove_head": "true", + "requirements": "{1,60}", + "ge_buy_limit": "100", + "examine": "Makes the wearer pretty intimidating.", + "durability": null, + "weight": "1.3", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "60500", + "name": "Dragon med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1149", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60500", + "durability": null, + "name": "Dragon med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1150" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "shop_price": "530", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "242", + "name": "Black med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1151", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "242", + "durability": null, + "name": "Black med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1152" + }, + { + "remove_head": "true", + "shop_price": "61", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "56", + "name": "Iron full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1153", + "bonuses": "0,0,0,-6,-2,6,7,5,-1,6,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Iron full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1154" + }, + { + "remove_head": "true", + "shop_price": "44", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "67", + "name": "Bronze full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1155", + "bonuses": "0,0,0,-6,-2,4,5,3,-1,4,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "67", + "durability": null, + "name": "Bronze full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1156" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "550", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "195", + "name": "Steel full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1157", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Steel full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1158" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "1430", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "675", + "name": "Mithril full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1159", + "bonuses": "0,0,0,-6,-2,13,14,11,-1,13,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "675", + "durability": null, + "name": "Mithril full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1160" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "shop_price": "3520", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "1911", + "name": "Adamant full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1161", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1911", + "durability": null, + "name": "Adamant full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1162" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "20900", + "name": "Rune full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1163", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20900", + "durability": null, + "name": "Rune full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1164" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "shop_price": "1372", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "731", + "name": "Black full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1165", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "731", + "durability": null, + "name": "Black full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1166" + }, + { + "remove_head": "true", + "shop_price": "24", + "ge_buy_limit": "5000", + "examine": "Better than no armour!", + "durability": null, + "weight": "0.9", + "equipment_slot": "0", + "grand_exchange_price": "9", + "name": "Leather cowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1167", + "bonuses": "0,0,0,0,1,2,3,4,2,3,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "9", + "durability": null, + "name": "Leather cowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1168" + }, + { + "remove_head": "true", + "requirements": "{4,20}", + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "Light weight head protection.", + "durability": null, + "weight": "0.9", + "equipment_slot": "0", + "grand_exchange_price": "56", + "name": "Coif", + "tradeable": "true", + "archery_ticket_price": "100", + "id": "1169", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,5,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "56", + "durability": null, + "name": "Coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1170" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A solid wooden shield.", + "grand_exchange_price": "483", + "durability": null, + "name": "Wooden shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1171", + "bonuses": "0,0,0,0,0,4,5,3,1,4,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "483", + "durability": null, + "name": "Wooden shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1172" + }, + { + "shop_price": "48", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze sq shield", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1173", + "bonuses": "0,0,0,-6,-2,5,6,4,0,5,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1174" + }, + { + "shop_price": "168", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "grand_exchange_price": "39", + "durability": null, + "name": "Iron sq shield", + "tradeable": "true", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "1175", + "bonuses": "0,0,0,-6,-2,8,9,7,0,8,1,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "39", + "durability": null, + "name": "Iron sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1176" + }, + { + "requirements": "{1,5}", + "shop_price": "600", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3", + "equipment_slot": "5", + "grand_exchange_price": "185", + "name": "Steel sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1177", + "bonuses": "0,0,0,-6,-2,12,13,11,0,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "185", + "durability": null, + "name": "Steel sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1178" + }, + { + "requirements": "{1,10}", + "shop_price": "1463", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "511", + "name": "Black sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1179", + "bonuses": "0,0,0,-6,-2,15,16,14,0,15,9,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "511", + "durability": null, + "name": "Black sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1180" + }, + { + "requirements": "{1,20}", + "shop_price": "1560", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3.1", + "absorb": "2,0,4", + "equipment_slot": "5", + "grand_exchange_price": "744", + "name": "Mithril sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1181", + "bonuses": "0,0,0,-6,-2,17,19,15,0,17,18,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "744", + "durability": null, + "name": "Mithril sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1182" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2136", + "name": "Adamant sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1183", + "bonuses": "0,0,0,-6,-2,24,26,22,0,24,25,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2136", + "durability": null, + "name": "Adamant sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1184" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3.64", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "22800", + "name": "Rune sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1185", + "bonuses": "0,0,0,-6,-2,38,40,36,0,38,35,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22800", + "durability": null, + "name": "Rune sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1186" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "An ancient and powerful looking Dragon Square shield.", + "durability": null, + "weight": "3", + "absorb": "5,0,11", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "431900", + "name": "Dragon sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1187", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "431900", + "durability": null, + "name": "Dragon sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1188" + }, + { + "shop_price": "86", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "grand_exchange_price": "18", + "durability": null, + "name": "Bronze kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "1189", + "bonuses": "0,0,0,-8,-2,5,7,6,-1,6,1,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Bronze kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1190" + }, + { + "shop_price": "233", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "grand_exchange_price": "57", + "durability": null, + "name": "Iron kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "1191", + "bonuses": "0,0,0,-8,-2,8,10,9,-1,9,2,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57", + "durability": null, + "name": "Iron kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1192" + }, + { + "requirements": "{1,5}", + "shop_price": "850", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "equipment_slot": "5", + "grand_exchange_price": "354", + "name": "Steel kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1193", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "354", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1194" + }, + { + "requirements": "{1,10}", + "shop_price": "2121", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "3311", + "name": "Black kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1195", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3311", + "durability": null, + "name": "Black kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1196" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "4.5", + "absorb": "2,0,4", + "equipment_slot": "5", + "grand_exchange_price": "1128", + "name": "Mithril kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1197", + "bonuses": "0,0,0,-8,-2,18,22,20,-1,20,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1128", + "durability": null, + "name": "Mithril kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1198" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.8", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3066", + "name": "Adamant kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1199", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3066", + "durability": null, + "name": "Adamant kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1200" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "35600", + "name": "Rune kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1201", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35600", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1202" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "35", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1203", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35", + "durability": null, + "name": "Iron dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1204" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "105", + "attack_audios": "2517,2517,2500,2517", + "name": "Bronze dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1205", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "105", + "durability": null, + "name": "Bronze dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1206" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "17", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1207", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Steel dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1208" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "71", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1209", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "71", + "durability": null, + "name": "Mithril dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1210" + }, + { + "requirements": "{0,30}", + "shop_price": "816", + "ge_buy_limit": "100", + "examine": "Short and deadly.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "300", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1211", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "300", + "durability": null, + "name": "Adamant dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1212" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "lendable": "true", + "grand_exchange_price": "4642", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1213", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4642", + "durability": null, + "name": "Rune dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1214" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "17700", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1215", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "17700", + "durability": null, + "name": "Dragon dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1216" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "79", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1217", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "79", + "durability": null, + "name": "Black dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1218" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "56", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1219", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Iron dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1220" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "86", + "attack_audios": "2517,2517,2500,2517", + "name": "Bronze dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1221", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "86", + "durability": null, + "name": "Bronze dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1222" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "98", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1223", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98", + "durability": null, + "name": "Steel dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1224" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "129", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1225", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "129", + "durability": null, + "name": "Mithril dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1226" + }, + { + "requirements": "{0,30}", + "shop_price": "816", + "ge_buy_limit": "100", + "examine": "Short and deadly.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "365", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1227", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "365", + "durability": null, + "name": "Adamant dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1228" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "lendable": "true", + "grand_exchange_price": "4831", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1229", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4831", + "durability": null, + "name": "Rune dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1230" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "17600", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1231", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "17600", + "durability": null, + "name": "Dragon dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1232" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "67", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1233", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "67", + "durability": null, + "name": "Black dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1234" + }, + { + "durability": null, + "name": "Poisoned dagger(p)", + "archery_ticket_price": "0", + "id": "1235", + "render_anim": "2584" + }, + { + "durability": null, + "name": "Poisoned dagger(p)", + "archery_ticket_price": "0", + "id": "1236" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "858", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1237", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0", + "shop_price": "26", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Bronze spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "858", + "durability": null, + "name": "Bronze spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1238" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "209", + "stand_anim": "813", + "tradeable": "true", + "name": "Iron spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1239", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "209", + "durability": null, + "name": "Iron spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1240" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "340", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1241", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0", + "requirements": "{0,5}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Steel spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "340", + "durability": null, + "name": "Steel spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1242" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "353", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1243", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0", + "requirements": "{0,20}", + "durability": null, + "weight": "1.8", + "weapon_interface": "14", + "render_anim": "28", + "name": "Mithril spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "353", + "durability": null, + "name": "Mithril spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1244" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "1191", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1245", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0", + "requirements": "{0,30}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Adamant spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "durability": null, + "name": "Adamant spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1246" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "12200", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1247", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0", + "requirements": "{0,40}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Rune spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12200", + "durability": null, + "name": "Rune spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1248" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "37200", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1249", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "37200", + "durability": null, + "name": "Dragon spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1250", + "defence_anim": "2079" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "389", + "stand_anim": "813", + "tradeable": "true", + "name": "Bronze spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1251", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "389", + "durability": null, + "name": "Bronze spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1252" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "212", + "stand_anim": "813", + "tradeable": "true", + "name": "Iron spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1253", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "212", + "durability": null, + "name": "Iron spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1254" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "136", + "stand_anim": "813", + "tradeable": "true", + "name": "Steel spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1255", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "136", + "durability": null, + "name": "Steel spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1256" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "350", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1257", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0", + "requirements": "{0,20}", + "durability": null, + "weight": "1.8", + "weapon_interface": "14", + "render_anim": "28", + "name": "Mithril spear(p)" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "350", + "durability": null, + "name": "Mithril spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1258" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "1004", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1259", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0", + "requirements": "{0,30}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Adamant spear(p)" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1004", + "durability": null, + "name": "Adamant spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1260" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "12400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1261", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0", + "requirements": "{0,40}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Rune spear(p)" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12400", + "durability": null, + "name": "Rune spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1262" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "39700", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1263", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear(p)" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "39700", + "durability": null, + "name": "Dragon spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1264" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.25", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "17", + "attack_audios": "2508,2508,2508,2508", + "name": "Bronze pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1265", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Bronze pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1266" + }, + { + "shop_price": "140", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.25", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "200", + "attack_audios": "2508,2508,2508,2508", + "name": "Iron pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1267", + "bonuses": "5,-2,3,0,0,0,1,0,0,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "200", + "durability": null, + "name": "Iron pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1268" + }, + { + "requirements": "{0,5}", + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.25", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "571", + "attack_audios": "2508,2508,2508,2508", + "name": "Steel pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1269", + "bonuses": "8,-2,6,0,0,0,1,0,0,0,0,9,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "571", + "durability": null, + "name": "Steel pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1270" + }, + { + "requirements": "{0,30}-{14,31}", + "shop_price": "3200", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.7", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "1782", + "attack_audios": "2508,2508,2508,2508", + "name": "Adamant pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1271", + "bonuses": "17,-2,15,0,0,0,1,0,0,0,0,19,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1782", + "durability": null, + "name": "Adamant pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1272" + }, + { + "requirements": "{0,20}", + "shop_price": "1300", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "611", + "attack_audios": "2508,2508,2508,2508", + "name": "Mithril pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1273", + "bonuses": "12,-2,10,0,0,0,1,0,0,0,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "611", + "durability": null, + "name": "Mithril pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1274" + }, + { + "requirements": "{0,40}-{14,41}", + "shop_price": "32000", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.2", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "lendable": "true", + "grand_exchange_price": "19500", + "attack_audios": "2508,2508,2508,2508", + "name": "Rune pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1275", + "bonuses": "26,-2,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19500", + "durability": null, + "name": "Rune pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1276" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "13", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1277", + "stand_turn_anim": "823", + "bonuses": "4,3,-2,0,0,0,2,1,0,0,0,5,0,0,0", + "shop_price": "33", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Bronze sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Bronze sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1278" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "17", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1279", + "stand_turn_anim": "823", + "bonuses": "6,4,-2,0,0,0,2,1,0,0,0,7,0,0,0", + "shop_price": "91", + "durability": null, + "weight": "1.8", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Iron sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Iron sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1280" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "79", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1281", + "stand_turn_anim": "823", + "bonuses": "11,8,-2,0,0,0,2,1,0,0,0,12,0,0,0", + "requirements": "{0,5}", + "shop_price": "412", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Steel sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "79", + "durability": null, + "name": "Steel sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1282" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "197", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1283", + "stand_turn_anim": "823", + "bonuses": "14,10,-2,0,0,0,2,1,0,0,0,12,0,0,0", + "requirements": "{0,10}", + "shop_price": "624", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Black sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "197", + "durability": null, + "name": "Black sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1284" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "313", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1285", + "stand_turn_anim": "823", + "bonuses": "16,11,-2,0,0,0,2,1,0,0,0,17,0,0,0", + "requirements": "{0,20}", + "shop_price": "266", + "durability": null, + "weight": "1.5", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Mithril sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "313", + "durability": null, + "name": "Mithril sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1286" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "1046", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1287", + "stand_turn_anim": "823", + "bonuses": "23,18,-2,0,0,0,2,1,0,0,0,24,0,0,0", + "requirements": "{0,30}", + "shop_price": "2080", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Adamant sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1046", + "durability": null, + "name": "Adamant sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1288" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "12300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1289", + "stand_turn_anim": "823", + "bonuses": "38,26,-2,0,0,0,2,1,0,0,0,39,0,0,0", + "requirements": "{0,40}", + "shop_price": "20800", + "durability": null, + "weight": "1.8", + "weapon_interface": "5", + "render_anim": "1381", + "lendable": "true", + "attack_audios": "2500,2500,2517,2500", + "name": "Rune sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12300", + "durability": null, + "name": "Rune sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1290" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "14", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1291", + "stand_turn_anim": "823", + "bonuses": "4,5,-2,0,0,0,3,2,0,0,0,7,0,0,0", + "shop_price": "23", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Bronze longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Bronze longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1292" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "22", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1293", + "stand_turn_anim": "823", + "bonuses": "6,8,-2,0,0,0,3,2,0,0,0,10,0,0,0", + "shop_price": "177", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Iron longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22", + "durability": null, + "name": "Iron longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1294" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "147", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1295", + "stand_turn_anim": "823", + "bonuses": "9,14,-2,0,0,0,3,2,0,0,0,16,0,0,0", + "requirements": "{0,5}", + "shop_price": "500", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Steel longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Steel longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1296" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "384", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1297", + "stand_turn_anim": "823", + "bonuses": "13,18,-2,0,0,0,3,2,0,0,0,16,0,0,0", + "requirements": "{0,10}", + "shop_price": "960", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Black longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "durability": null, + "name": "Black longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1298" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "602", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1299", + "stand_turn_anim": "823", + "bonuses": "15,20,-2,0,0,0,3,2,0,0,0,22,0,0,0", + "requirements": "{0,20}", + "shop_price": "1074", + "durability": null, + "weight": "1.5", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Mithril longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "602", + "durability": null, + "name": "Mithril longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1300" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "1808", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1301", + "stand_turn_anim": "823", + "bonuses": "20,29,-2,0,0,0,3,2,0,0,0,31,0,0,0", + "requirements": "{0,30}", + "shop_price": "3200", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Adamant longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1808", + "durability": null, + "name": "Adamant longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1302" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "19000", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1303", + "stand_turn_anim": "823", + "bonuses": "38,47,-2,0,0,0,3,2,0,0,0,49,0,0,0", + "requirements": "{0,40}", + "shop_price": "32000", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "lendable": "true", + "attack_audios": "2500,2500,2517,2500", + "name": "Rune longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19000", + "durability": null, + "name": "Rune longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1304" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A very powerful sword.", + "walk_anim": "1146", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "60200", + "stand_anim": "809", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1305", + "stand_turn_anim": "823", + "bonuses": "58,69,-2,0,0,0,3,2,0,0,0,71,0,0,0", + "requirements": "{0,60}", + "shop_price": "100000", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1426", + "lendable": "true", + "attack_audios": "2500,2500,2517,2500", + "name": "Dragon longsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "60200", + "durability": null, + "name": "Dragon longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1306" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "89", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1307", + "stand_turn_anim": "7040", + "bonuses": "-4,9,8,-4,0,0,0,0,0,-1,0,10,0,0,0", + "shop_price": "160", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Bronze 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "89", + "durability": null, + "name": "Bronze 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1308" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "32", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1309", + "stand_turn_anim": "7040", + "bonuses": "-4,13,10,-4,0,0,0,0,0,-1,0,14,0,0,0", + "shop_price": "260", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Iron 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "32", + "durability": null, + "name": "Iron 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1310" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "411", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1311", + "stand_turn_anim": "7040", + "bonuses": "-4,21,16,-4,0,0,0,0,0,-1,0,22,0,0,0", + "requirements": "{0,5}", + "shop_price": "1000", + "durability": null, + "weight": "3", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Steel 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "411", + "durability": null, + "name": "Steel 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1312" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "1031", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1313", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,-4,0,0,0,0,0,-1,0,26,0,0,0", + "requirements": "{0,10}", + "shop_price": "2400", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Black 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1031", + "durability": null, + "name": "Black 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1314" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "1396", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1315", + "stand_turn_anim": "7040", + "bonuses": "-4,30,24,-4,0,0,0,0,0,-1,0,31,0,0,0", + "requirements": "{0,20}", + "shop_price": "3000", + "durability": null, + "weight": "3.1", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Mithril 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1396", + "durability": null, + "name": "Mithril 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1316" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "3577", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1317", + "stand_turn_anim": "7040", + "bonuses": "-4,43,30,-4,0,0,0,0,0,-1,0,44,0,0,0", + "requirements": "{0,30}", + "shop_price": "6400", + "durability": null, + "weight": "4", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Adamant 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3577", + "durability": null, + "name": "Adamant 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1318" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "38200", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1319", + "stand_turn_anim": "7040", + "bonuses": "-4,69,50,-4,0,0,0,0,0,-1,0,70,0,0,0", + "requirements": "{0,40}", + "shop_price": "40000", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "2503,0,2504,0", + "name": "Rune 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38200", + "durability": null, + "name": "Rune 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1320" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "13", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1321", + "stand_turn_anim": "823", + "bonuses": "1,7,-2,0,0,0,1,0,0,0,0,6,0,0,0", + "shop_price": "40", + "durability": null, + "weight": "1", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Bronze scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Bronze scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1322" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "30", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1323", + "stand_turn_anim": "823", + "bonuses": "2,10,-2,0,0,0,1,0,0,0,0,9,0,0,0", + "shop_price": "112", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Iron scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Iron scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1324" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "101", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1325", + "stand_turn_anim": "823", + "bonuses": "3,15,-2,0,0,0,1,0,0,0,0,14,0,0,0", + "requirements": "{0,5}", + "shop_price": "400", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Steel scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "101", + "durability": null, + "name": "Steel scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1326" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "4498", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1327", + "stand_turn_anim": "823", + "bonuses": "4,19,-2,0,0,0,1,0,0,0,0,14,0,0,0", + "requirements": "{0,10}", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Black scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4498", + "durability": null, + "name": "Black scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1328" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "469", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1329", + "stand_turn_anim": "823", + "bonuses": "5,21,-2,0,0,0,1,0,0,0,0,20,0,0,0", + "requirements": "{0,20}", + "shop_price": "1040", + "durability": null, + "weight": "1.5", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Mithril scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "469", + "durability": null, + "name": "Mithril scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1330" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A viciously curved sword", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "1525", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1331", + "stand_turn_anim": "823", + "bonuses": "6,29,-2,0,0,0,1,0,0,0,0,28,0,0,0", + "requirements": "{0,30}", + "shop_price": "2304", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Adamant scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1525", + "durability": null, + "name": "Adamant scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1332" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "15200", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1333", + "stand_turn_anim": "823", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0", + "requirements": "{0,40}", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "lendable": "true", + "attack_audios": "2500,0,2517,0", + "name": "Rune scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15200", + "durability": null, + "name": "Rune scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1334" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "20", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1335", + "stand_turn_anim": "823", + "bonuses": "-4,-4,11,-4,0,0,0,0,0,0,0,9,0,0,0", + "shop_price": "224", + "durability": null, + "weight": "1.8", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Iron warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Iron warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1336" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "16", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1337", + "stand_turn_anim": "823", + "bonuses": "-4,-4,10,-4,0,0,0,0,0,0,0,8,0,0,0", + "shop_price": "59", + "durability": null, + "weight": "1", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Bronze warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Bronze warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1338" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "283", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1339", + "stand_turn_anim": "823", + "bonuses": "-4,-4,18,-4,0,0,0,0,0,0,0,16,0,0,0", + "requirements": "{0,5}", + "shop_price": "832", + "durability": null, + "weight": "1", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Steel warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "283", + "durability": null, + "name": "Steel warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1340" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "562", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1341", + "stand_turn_anim": "823", + "bonuses": "-4,-4,22,-4,0,0,0,0,0,0,0,19,0,0,0", + "requirements": "{0,10}", + "shop_price": "1274", + "durability": null, + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Black warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "562", + "durability": null, + "name": "Black warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1342" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "1071", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1343", + "stand_turn_anim": "823", + "bonuses": "-4,-4,25,-4,0,0,0,0,0,0,0,20,0,0,0", + "requirements": "{0,20}", + "shop_price": "2158", + "durability": null, + "weight": "1.5", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Mithril warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1071", + "durability": null, + "name": "Mithril warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1344" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "2996", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1345", + "stand_turn_anim": "823", + "bonuses": "-4,-4,33,-4,0,0,0,0,0,0,0,31,0,0,0", + "requirements": "{0,30}", + "shop_price": "5356", + "durability": null, + "weight": "2", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Adamant warhammer" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2996", + "durability": null, + "name": "Adamant warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1346" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "24600", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1347", + "stand_turn_anim": "823", + "bonuses": "-4,-4,53,-4,0,0,0,0,0,0,0,48,0,0,0", + "requirements": "{0,40}", + "shop_price": "41000", + "durability": null, + "weight": "1.8", + "weapon_interface": "10", + "render_anim": "1430", + "lendable": "true", + "attack_audios": "2504,0,0,0", + "name": "Rune warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24600", + "durability": null, + "name": "Rune warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1348" + }, + { + "shop_price": "56", + "ge_buy_limit": "100", + "examine": "A woodcutter's axe.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "2", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "8", + "attack_audios": "2498,2498,2497,2498", + "name": "Iron axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1349", + "bonuses": "-2,5,3,0,0,0,1,0,0,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Iron axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1350" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A woodcutter's axe.", + "durability": null, + "weight": "1.35", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "44", + "attack_audios": "2498,2498,2497,2498", + "name": "Bronze axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1351", + "bonuses": "-2,4,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44", + "durability": null, + "name": "Bronze axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1352" + }, + { + "requirements": "{0,5}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A woodcutter's axe.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "36", + "attack_audios": "2498,2498,2497,2498", + "name": "Steel axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1353", + "bonuses": "-2,8,6,0,0,0,1,0,0,0,0,9,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "36", + "durability": null, + "name": "Steel axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1354" + }, + { + "requirements": "{0,20}", + "shop_price": "660", + "ge_buy_limit": "100", + "examine": "A powerful axe.", + "durability": null, + "weight": "1.1", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "141", + "attack_audios": "2498,2498,2497,2498", + "name": "Mithril axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1355", + "bonuses": "-2,12,10,0,0,0,1,0,0,0,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "141", + "durability": null, + "name": "Mithril axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1356" + }, + { + "requirements": "{0,30}-{8,31}", + "shop_price": "1625", + "ge_buy_limit": "100", + "examine": "A powerful axe.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "592", + "attack_audios": "2498,2498,2497,2498", + "name": "Adamant axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1357", + "bonuses": "-2,17,15,0,0,0,1,0,0,0,0,19,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "592", + "durability": null, + "name": "Adamant axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1358" + }, + { + "requirements": "{0,40}-{8,41}", + "ge_buy_limit": "100", + "examine": "A powerful axe.", + "durability": null, + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "7495", + "attack_audios": "2498,2498,2497,2498", + "name": "Rune axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1359", + "bonuses": "-2,26,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7495", + "durability": null, + "name": "Rune axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1360" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "examine": "A sinister looking axe.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "335", + "attack_audios": "2498,2498,2497,2498", + "name": "Black axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1361", + "bonuses": "-2,10,8,0,0,0,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "335", + "durability": null, + "name": "Black axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1362" + }, + { + "shop_price": "182", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "21", + "attack_audios": "2498,2498,2497,2498", + "name": "Iron battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1363", + "bonuses": "-2,8,5,0,0,0,0,0,0,-1,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Iron battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1364" + }, + { + "requirements": "{0,5}", + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "208", + "attack_audios": "2498,2498,2497,2498", + "name": "Steel battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1365", + "bonuses": "-2,16,11,0,0,0,0,0,0,-1,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "208", + "durability": null, + "name": "Steel battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1366" + }, + { + "requirements": "{0,10}", + "shop_price": "1248", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "556", + "attack_audios": "2498,2498,2497,2498", + "name": "Black battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1367", + "bonuses": "-2,20,15,0,0,0,0,0,0,-1,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "556", + "durability": null, + "name": "Black battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1368" + }, + { + "requirements": "{0,20}", + "shop_price": "1690", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "809", + "attack_audios": "2498,2498,2497,2498", + "name": "Mithril battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1369", + "bonuses": "-2,22,17,0,0,0,0,0,0,-1,0,29,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "809", + "durability": null, + "name": "Mithril battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1370" + }, + { + "requirements": "{0,30}", + "shop_price": "4160", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "3", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "2311", + "attack_audios": "2498,2498,2497,2498", + "name": "Adamant battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1371", + "bonuses": "-2,31,26,0,0,0,0,0,0,-1,0,41,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2311", + "durability": null, + "name": "Adamant battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1372" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "lendable": "true", + "grand_exchange_price": "24800", + "attack_audios": "2498,2498,2497,2498", + "name": "Rune battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1373", + "bonuses": "-2,48,43,0,0,0,0,0,0,-1,0,64,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24800", + "durability": null, + "name": "Rune battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1374" + }, + { + "shop_price": "52", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "15", + "attack_audios": "2498,2498,2497,2498", + "name": "Bronze battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1375", + "bonuses": "-2,6,3,0,0,0,0,0,0,-1,0,9,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "durability": null, + "name": "Bronze battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1376" + }, + { + "requirements": "{0,60}", + "shop_price": "200000", + "ge_buy_limit": "10", + "examine": "A vicious looking axe.", + "has_special": "true", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "lendable": "true", + "grand_exchange_price": "123200", + "attack_audios": "2498,2498,2497,2498", + "name": "Dragon battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1377", + "bonuses": "-2,70,65,0,0,0,0,0,0,-1,0,85,0,0,0" + }, + { + "requirements": "{0,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "123200", + "durability": null, + "name": "Dragon battleaxe", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "1378", + "defence_anim": "397" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "37", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1379", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0", + "shop_price": "15", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "37", + "durability": null, + "name": "Staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1380" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "784", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1381", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,10,0,2,3,1,10,0,0,3,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of air" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "784", + "durability": null, + "name": "Staff of air", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1382" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "890", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1383", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,10,0,2,3,1,10,0,0,3,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of water" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "890", + "durability": null, + "name": "Staff of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1384" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "879", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1385", + "stand_turn_anim": "1209", + "bonuses": "1,-1,9,10,0,2,3,1,10,0,0,5,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of earth" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "879", + "durability": null, + "name": "Staff of earth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1386" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "1330", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1387", + "stand_turn_anim": "1209", + "bonuses": "3,-1,9,10,0,2,3,1,10,0,0,6,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of fire" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1330", + "durability": null, + "name": "Staff of fire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1388" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "58", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1389", + "stand_turn_anim": "1209", + "bonuses": "2,-1,10,10,0,2,3,1,10,0,0,7,0,0,0", + "shop_price": "200", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Magic staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "58", + "durability": null, + "name": "Magic staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1390" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "7963", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1391", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,12,0,2,3,1,12,0,0,32,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "7000", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7963", + "durability": null, + "name": "Battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1392" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9113", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1393", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "19600", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Fire battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9113", + "durability": null, + "name": "Fire battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1394" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9122", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1395", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Water battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9122", + "durability": null, + "name": "Water battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1396" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "8982", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1397", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "7000", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Air battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8982", + "durability": null, + "name": "Air battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1398" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9041", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1399", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Earth battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9041", + "durability": null, + "name": "Earth battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1400" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "25400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1401", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic fire staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25400", + "durability": null, + "name": "Mystic fire staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1402" + }, + { + "requirements": "{0,40}-{6,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "24800", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "true", + "name": "Mystic water staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1403", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24800", + "durability": null, + "name": "Mystic water staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1404" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "25100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1405", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic air staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25100", + "durability": null, + "name": "Mystic air staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1406" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "25400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1407", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "shop_price": "40000", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic earth staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25400", + "durability": null, + "name": "Mystic earth staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1408" + }, + { + "turn90cw_anim": "1207", + "examine": "An ancient staff, formerly the property of Iban.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Iban's staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1409", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,10,0,2,3,1,10,0,0,50,0,0,0" + }, + { + "examine": "An ancient staff, formerly the property of Iban.", + "attack_audios": "2555,0,0,0", + "durability": null, + "name": "Iban's staff", + "weight": "2.2", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "1410", + "bonuses": "10,-1,40,10,0,2,3,1,10,0,0,50,0,0,0" + }, + { + "durability": null, + "name": "Farmer's fork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1412" + }, + { + "durability": null, + "name": "Halberd", + "archery_ticket_price": "0", + "attack_speed": "7", + "id": "1413" + }, + { + "durability": null, + "name": "Halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1414" + }, + { + "attack_audios": "2504,0,0,0", + "durability": null, + "name": "Warhammer", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "1415" + }, + { + "durability": null, + "name": "Warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1416" + }, + { + "durability": null, + "name": "Javelin", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "1417" + }, + { + "durability": null, + "name": "Javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1418" + }, + { + "turn90cw_anim": "821", + "examine": "It's a Scythe.", + "walk_anim": "819", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "22", + "turn180_anim": "820", + "render_anim": "1383", + "defence_anim": "383", + "equipment_slot": "3", + "attack_anims": "382,382,382,382", + "stand_anim": "847", + "name": "Scythe", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1419", + "stand_turn_anim": "823", + "bonuses": "3,8,3,0,0,0,3,1,0,0,0,10,0,0,0" + }, + { + "shop_price": "80", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "7", + "name": "Iron mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1420", + "bonuses": "4,-2,9,0,0,0,0,0,0,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Iron mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1421" + }, + { + "shop_price": "18", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "12", + "name": "Bronze mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1422", + "bonuses": "1,-2,6,0,0,0,0,0,0,0,0,5,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1423" + }, + { + "requirements": "{0,5}", + "shop_price": "225", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "31", + "name": "Steel mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1424", + "bonuses": "7,-2,13,0,0,0,0,0,0,0,0,11,2,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "31", + "durability": null, + "name": "Steel mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1425" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "954", + "name": "Black mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1426", + "bonuses": "8,-2,16,0,0,0,0,0,0,0,0,13,2,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "954", + "durability": null, + "name": "Black mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1427" + }, + { + "requirements": "{0,20}", + "shop_price": "585", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.5", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "157", + "name": "Mithril mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1428", + "bonuses": "11,-2,18,0,0,0,0,0,0,0,0,16,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "157", + "durability": null, + "name": "Mithril mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1429" + }, + { + "requirements": "{0,30}", + "shop_price": "1440", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "673", + "name": "Adamant mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1430", + "bonuses": "13,-2,25,0,0,0,0,0,0,0,0,23,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "673", + "durability": null, + "name": "Adamant mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1431" + }, + { + "requirements": "{0,40}", + "shop_price": "14400", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "lendable": "true", + "grand_exchange_price": "8380", + "name": "Rune mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1432", + "bonuses": "20,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8380", + "durability": null, + "name": "Rune mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1433" + }, + { + "requirements": "{0,60}", + "shop_price": "50000", + "ge_buy_limit": "10", + "examine": "A spiky mace.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "lendable": "true", + "grand_exchange_price": "29300", + "name": "Dragon mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1434", + "bonuses": "40,-2,60,0,0,0,0,0,0,0,0,55,5,0,0" + }, + { + "requirements": "{0,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "29300", + "durability": null, + "name": "Dragon mace", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "1435" + }, + { + "shop_price": "1", + "ge_buy_limit": "25000", + "examine": "An uncharged Rune Stone.", + "grand_exchange_price": "40", + "durability": null, + "name": "Rune essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1436" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "40", + "durability": null, + "name": "Rune essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1437" + }, + { + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "404", + "durability": null, + "name": "Air talisman", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1438" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "404", + "durability": null, + "name": "Air talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1439" + }, + { + "requirements": "{9,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "785", + "durability": null, + "name": "Earth talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1440" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "785", + "durability": null, + "name": "Earth talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1441" + }, + { + "requirements": "{14,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "4140", + "durability": null, + "name": "Fire talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1442" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "4140", + "durability": null, + "name": "Fire talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1443" + }, + { + "requirements": "{5,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "7975", + "durability": null, + "name": "Water talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1444" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "7975", + "durability": null, + "name": "Water talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1445" + }, + { + "requirements": "{20,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "1373", + "durability": null, + "name": "Body talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1446" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1373", + "durability": null, + "name": "Body talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1447" + }, + { + "requirements": "{2,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "285", + "durability": null, + "name": "Mind talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1448" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "285", + "durability": null, + "name": "Mind talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1449" + }, + { + "requirements": "{20,77}", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "3178", + "durability": null, + "name": "Blood talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1450" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "3178", + "durability": null, + "name": "Blood talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1451" + }, + { + "requirements": "{20,35}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "605", + "durability": null, + "name": "Chaos talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1452" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "605", + "durability": null, + "name": "Chaos talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1453" + }, + { + "requirements": "{20,27}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "785", + "durability": null, + "name": "Cosmic talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1454" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "785", + "durability": null, + "name": "Cosmic talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1455" + }, + { + "requirements": "{20,65}", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "2501", + "durability": null, + "name": "Death talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1456" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "2501", + "durability": null, + "name": "Death talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1457" + }, + { + "requirements": "{20,54}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "1219", + "durability": null, + "name": "Law talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1458" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1219", + "durability": null, + "name": "Law talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1459" + }, + { + "durability": null, + "name": "Soul talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1461" + }, + { + "requirements": "{20,44}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "1596", + "durability": null, + "name": "Nature talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1462" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1596", + "durability": null, + "name": "Nature talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1463" + }, + { + "ge_buy_limit": "5000", + "examine": "I can exchange this for equipment.", + "grand_exchange_price": "9", + "durability": null, + "name": "Archery ticket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1464" + }, + { + "examine": "For use on daggers and projectiles.", + "grand_exchange_price": "36", + "durability": null, + "name": "Weapon poison", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1465" + }, + { + "examine": "Some damp wooden sticks.", + "durability": null, + "name": "Damp sticks", + "archery_ticket_price": "0", + "id": "1467" + }, + { + "examine": "Some dry wooden sticks.", + "durability": null, + "name": "Dry sticks", + "archery_ticket_price": "0", + "id": "1468" + }, + { + "examine": "Smashed glass.", + "durability": null, + "name": "Broken glass", + "archery_ticket_price": "0", + "id": "1469" + }, + { + "ge_buy_limit": "100", + "examine": "A small round red bead.", + "grand_exchange_price": "169", + "durability": null, + "name": "Red bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1470" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "169", + "durability": null, + "name": "Red bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1471" + }, + { + "ge_buy_limit": "100", + "examine": "A small round yellow bead.", + "grand_exchange_price": "249", + "durability": null, + "name": "Yellow bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1472" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "249", + "durability": null, + "name": "Yellow bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1473" + }, + { + "ge_buy_limit": "100", + "examine": "A small round black bead.", + "grand_exchange_price": "229", + "durability": null, + "name": "Black bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1474" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "229", + "durability": null, + "name": "Black bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1475" + }, + { + "ge_buy_limit": "100", + "examine": "A small round white bead.", + "grand_exchange_price": "1530", + "durability": null, + "name": "White bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1476" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1530", + "durability": null, + "name": "White bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1477" + }, + { + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "Wizard Mizgog sells these aim-enhancing amulets.", + "grand_exchange_price": "2870", + "durability": null, + "name": "Amulet of accuracy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1478", + "bonuses": "4,4,4,4,4,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2870", + "durability": null, + "name": "Amulet of accuracy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1479" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1481" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1482" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1483" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1484" + }, + { + "examine": "A damp, wet cloth.", + "durability": null, + "name": "Damp cloth", + "archery_ticket_price": "0", + "id": "1485" + }, + { + "examine": "A broken piece of railing.", + "durability": null, + "name": "Piece of railing", + "weight": "2", + "archery_ticket_price": "0", + "id": "1486" + }, + { + "examine": "This horn has restorative properties.", + "grand_exchange_price": "1159", + "durability": null, + "name": "Unicorn horn", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1487" + }, + { + "examine": "A coat of arms of the Ardougne Paladins.", + "durability": null, + "name": "Paladin's badge", + "archery_ticket_price": "0", + "id": "1488" + }, + { + "examine": "A coat of arms of the Ardougne Paladins.", + "durability": null, + "name": "Paladin's badge", + "archery_ticket_price": "0", + "id": "1489" + }, + { + "examine": "A coat of arms of the Ardougne Paladins.", + "durability": null, + "name": "Paladin's badge", + "archery_ticket_price": "0", + "id": "1490" + }, + { + "examine": "On the ground: Curiosity has yet to kill this one...", + "durability": null, + "name": "Witch's cat", + "weight": "1.2", + "archery_ticket_price": "0", + "id": "1491" + }, + { + "examine": "A simple doll with Iban's likeness.", + "durability": null, + "name": "Doll of iban", + "weight": "1", + "archery_ticket_price": "0", + "id": "1492" + }, + { + "examine": "An account of the last times of someone.", + "durability": null, + "name": "Old journal", + "archery_ticket_price": "0", + "id": "1493" + }, + { + "examine": "The tale of Iban.", + "durability": null, + "name": "History of iban", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1494" + }, + { + "shop_price": "5000", + "examine": "Strong dwarvish gloves.", + "durability": null, + "name": "Klank's gauntlets", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1495", + "bonuses": "2,2,2,0,0,8,9,7,0,0,5,2,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "I thought you only saw these in pairs?", + "durability": null, + "name": "Iban's dove", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1496" + }, + { + "examine": "A mystical demonic amulet.", + "durability": null, + "name": "Amulet of othanian", + "archery_ticket_price": "0", + "id": "1497" + }, + { + "examine": "A mystical demonic amulet.", + "durability": null, + "name": "Amulet of doomion", + "archery_ticket_price": "0", + "id": "1498" + }, + { + "examine": "A mystical demonic amulet.", + "durability": null, + "name": "Amulet of holthion", + "archery_ticket_price": "0", + "id": "1499" + }, + { + "examine": "A strange dark liquid.", + "durability": null, + "name": "Iban's shadow", + "archery_ticket_price": "0", + "id": "1500" + }, + { + "examine": "Smells stronger than most spirits.", + "durability": null, + "name": "Dwarf brew", + "archery_ticket_price": "0", + "id": "1501" + }, + { + "examine": "The burnt remains of Iban.", + "durability": null, + "name": "Iban's ashes", + "weight": "0.056", + "archery_ticket_price": "0", + "id": "1502" + }, + { + "examine": "A search warrant for a house in West Ardougne.", + "durability": null, + "name": "Warrant", + "archery_ticket_price": "0", + "id": "1503" + }, + { + "examine": "It doesn't look very tasty.", + "durability": null, + "name": "Hangover cure", + "weight": "2", + "archery_ticket_price": "0", + "id": "1504" + }, + { + "examine": "Maybe I should read this...", + "durability": null, + "name": "A magic scroll", + "archery_ticket_price": "0", + "id": "1505" + }, + { + "remove_head": "true", + "examine": "Stops me from breathing nasty stuff!", + "durability": null, + "name": "Gas mask", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "1506", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Quite a small key (Plague City).", + "durability": null, + "name": "A small key", + "archery_ticket_price": "0", + "id": "1507" + }, + { + "examine": "It seems to say \"hongorer lure\"...", + "durability": null, + "name": "A scruffy note", + "archery_ticket_price": "0", + "id": "1508" + }, + { + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Picture", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1510" + }, + { + "shop_price": "4", + "ge_buy_limit": "25000", + "examine": "A number of wooden logs.", + "grand_exchange_price": "120", + "durability": null, + "name": "Logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1511" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "279", + "durability": null, + "name": "Logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1512" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a magic tree.", + "grand_exchange_price": "680", + "durability": null, + "name": "Magic logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1513" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "1581", + "durability": null, + "name": "Magic logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1514" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a yew tree.", + "grand_exchange_price": "320", + "durability": null, + "name": "Yew logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1515" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "532", + "durability": null, + "name": "Yew logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1516" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a maple tree.", + "grand_exchange_price": "160", + "durability": null, + "name": "Maple logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1517" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "20", + "durability": null, + "name": "Maple logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1518" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a willow tree.", + "grand_exchange_price": "80", + "durability": null, + "name": "Willow logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1519" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "11", + "durability": null, + "name": "Willow logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1520" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from an Oak Tree.", + "grand_exchange_price": "140", + "durability": null, + "name": "Oak logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1521" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "153", + "durability": null, + "name": "Oak logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1522" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "For picking tough locks.", + "grand_exchange_price": "1311", + "durability": null, + "name": "Lockpick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1523" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1311", + "durability": null, + "name": "Lockpick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1524" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy snake weed", + "archery_ticket_price": "0", + "id": "1525" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean snake weed", + "archery_ticket_price": "0", + "id": "1526" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy ardrigal", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1527" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean ardrigal", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1528" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy sito foil", + "archery_ticket_price": "0", + "id": "1529" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean sito foil", + "archery_ticket_price": "0", + "id": "1530" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy volencia moss", + "archery_ticket_price": "0", + "id": "1531" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean volencia moss", + "archery_ticket_price": "0", + "id": "1532" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy rogue's purse", + "archery_ticket_price": "0", + "id": "1533" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean rogue's purse", + "archery_ticket_price": "0", + "id": "1534" + }, + { + "examine": "A piece of map.", + "durability": null, + "name": "Map part", + "archery_ticket_price": "0", + "id": "1535" + }, + { + "examine": "A piece of map.", + "durability": null, + "name": "Map part", + "archery_ticket_price": "0", + "id": "1536" + }, + { + "examine": "A piece of map.", + "durability": null, + "name": "Map part", + "archery_ticket_price": "0", + "id": "1537" + }, + { + "examine": "A map of the route to Crandor.", + "durability": null, + "name": "Crandor map", + "archery_ticket_price": "0", + "id": "1538" + }, + { + "shop_price": "52", + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "59", + "durability": null, + "name": "Steel nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1539" + }, + { + "ge_buy_limit": "100", + "examine": "This provides partial protection from dragon-breath attacks.", + "grand_exchange_price": "637", + "durability": null, + "name": "Anti-dragon shield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "1540", + "bonuses": "0,0,0,0,0,7,9,8,2,8,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "637", + "durability": null, + "name": "Anti-dragon shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1541" + }, + { + "shop_price": "1", + "examine": "A key to Melzar's Maze.", + "durability": null, + "name": "Maze key", + "archery_ticket_price": "0", + "id": "1542" + }, + { + "destroy_message": "You can get another from Dr Harlow in the Blue Moon Inn of Varrock.", + "examine": "A very pointy stick.", + "durability": null, + "name": "Stake", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1549", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "examine": "Deters vampires.", + "grand_exchange_price": "20", + "durability": null, + "name": "Garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1550" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1551" + }, + { + "examine": "Sardine flavoured with doogle leaves.", + "durability": null, + "name": "Doogle sardine", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1552" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1555" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1556" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1557" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1558" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1559" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1560" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1561" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1562" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1563" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1564" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1565" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1566" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1567" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1568" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1569" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1570" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1571" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1572" + }, + { + "examine": "A tasty herb good for seasoning.", + "durability": null, + "name": "Doogle leaves", + "archery_ticket_price": "0", + "id": "1573" + }, + { + "examine": "For feline training expertise.", + "durability": null, + "name": "Cat training medal", + "archery_ticket_price": "0", + "id": "1575", + "equipment_slot": "2" + }, + { + "examine": "Candlestick used during Heroes' Quest.", + "durability": null, + "name": "Pete's candlestick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1577" + }, + { + "durability": null, + "name": "Pete's candlestick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1578" + }, + { + "examine": "This denotes a Master Thief.", + "durability": null, + "name": "Thieves' armband", + "archery_ticket_price": "0", + "id": "1579" + }, + { + "examine": "These will keep my hands cold!", + "durability": null, + "name": "Ice gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1580", + "bonuses": "0,0,0,0,0,0,3,4,0,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Yuck.", + "durability": null, + "name": "Blamish snail slime", + "weight": "1", + "archery_ticket_price": "0", + "id": "1581" + }, + { + "examine": "Made from the finest snail slime.", + "durability": null, + "name": "Blamish oil", + "archery_ticket_price": "0", + "id": "1582" + }, + { + "examine": "Firebird feather.", + "durability": null, + "name": "Fire feather", + "archery_ticket_price": "0", + "id": "1583" + }, + { + "examine": "Apparently my name is Hartigan", + "durability": null, + "name": "Id papers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1584" + }, + { + "examine": "Useful for catching lava eels.", + "durability": null, + "name": "Oily fishing rod", + "weight": "1", + "archery_ticket_price": "0", + "id": "1585" + }, + { + "examine": "This is of use in completing Heroes' Quest. (Heroes' Quest)", + "durability": null, + "name": "Miscellaneous key", + "tradeable": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "1586" + }, + { + "durability": null, + "name": "Miscellaneous key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1587" + }, + { + "examine": "The key I got from Grip. (Heroes' Quest)", + "durability": null, + "name": "Grips' key ring", + "archery_ticket_price": "0", + "id": "1588" + }, + { + "shop_price": "1", + "examine": "I wonder what this unlocks. (Heroes' Quest)", + "durability": null, + "name": "Dusty key", + "archery_ticket_price": "0", + "id": "1590" + }, + { + "examine": "Key to a cell. (Heroes' Quest)", + "durability": null, + "name": "Jail key", + "archery_ticket_price": "0", + "id": "1591" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold rings.", + "grand_exchange_price": "316", + "durability": null, + "name": "Ring mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1592" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "316", + "durability": null, + "name": "Ring mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1593" + }, + { + "examine": "Used to make unholy symbols.", + "durability": null, + "name": "Unholy mould", + "archery_ticket_price": "0", + "id": "1594" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold amulets.", + "grand_exchange_price": "288", + "durability": null, + "name": "Amulet mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1595" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "288", + "durability": null, + "name": "Amulet mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1596" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold necklaces.", + "grand_exchange_price": "269", + "durability": null, + "name": "Necklace mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1597" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "269", + "durability": null, + "name": "Necklace mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1598" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make holy symbols of Saradomin.", + "grand_exchange_price": "504", + "durability": null, + "name": "Holy mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1599" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "504", + "durability": null, + "name": "Holy mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1600" + }, + { + "ge_buy_limit": "500", + "examine": "This looks valuable.", + "grand_exchange_price": "14800", + "durability": null, + "name": "Diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1601" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "14800", + "durability": null, + "name": "Diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1602" + }, + { + "shop_price": "400", + "ge_buy_limit": "1000", + "examine": "This looks valuable.", + "grand_exchange_price": "1598", + "durability": null, + "name": "Ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1603" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1598", + "durability": null, + "name": "Ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1604" + }, + { + "shop_price": "350", + "ge_buy_limit": "1000", + "examine": "This looks valuable.", + "grand_exchange_price": "853", + "durability": null, + "name": "Emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1605" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "853", + "durability": null, + "name": "Emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1606" + }, + { + "shop_price": "175", + "ge_buy_limit": "1000", + "examine": "This looks valuable.", + "grand_exchange_price": "520", + "durability": null, + "name": "Sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1607" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "520", + "durability": null, + "name": "Sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1608" + }, + { + "ge_buy_limit": "1000", + "shop_price": "100", + "examine": "A semi precious stone.", + "grand_exchange_price": "44", + "durability": null, + "name": "Opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1609" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "41", + "durability": null, + "name": "Opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1610" + }, + { + "ge_buy_limit": "1000", + "shop_price": "150", + "grand_exchange_price": "84", + "examine": "A semi precious stone.", + "durability": null, + "name": "Jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1611" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "83", + "durability": null, + "name": "Jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1612" + }, + { + "ge_buy_limit": "1000", + "shop_price": "200", + "examine": "A semi precious stone.", + "grand_exchange_price": "120", + "durability": null, + "name": "Red topaz", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1613" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "103", + "durability": null, + "name": "Red topaz", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1614" + }, + { + "shop_price": "75000", + "ge_buy_limit": "100", + "examine": "This looks valuable.", + "grand_exchange_price": "27400", + "durability": null, + "name": "Dragonstone", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1615" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27400", + "durability": null, + "name": "Dragonstone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1616" + }, + { + "ge_buy_limit": "500", + "examine": "An uncut diamond.", + "grand_exchange_price": "2160", + "tokkul_price": "300", + "durability": null, + "name": "Uncut diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1617" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "20000", + "durability": null, + "name": "Uncut diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1618" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut ruby.", + "grand_exchange_price": "1140", + "tokkul_price": "150", + "durability": null, + "name": "Uncut ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1619" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4970", + "durability": null, + "name": "Uncut ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1620" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "An uncut emerald.", + "grand_exchange_price": "580", + "tokkul_price": "75", + "durability": null, + "name": "Uncut emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1621" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2621", + "durability": null, + "name": "Uncut emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1622" + }, + { + "shop_price": "25", + "ge_buy_limit": "1000", + "examine": "An uncut sapphire.", + "grand_exchange_price": "420", + "tokkul_price": "37", + "durability": null, + "name": "Uncut sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1623" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1851", + "durability": null, + "name": "Uncut sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1624" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut opal.", + "grand_exchange_price": "65", + "durability": null, + "name": "Uncut opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1625" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "65", + "durability": null, + "name": "Uncut opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1626" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut jade.", + "grand_exchange_price": "138", + "durability": null, + "name": "Uncut jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1627" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "138", + "durability": null, + "name": "Uncut jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1628" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut red topaz.", + "grand_exchange_price": "279", + "durability": null, + "name": "Uncut red topaz", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1629" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "279", + "durability": null, + "name": "Uncut red topaz", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1630" + }, + { + "shop_price": "75000", + "ge_buy_limit": "100", + "examine": "An uncut dragonstone.", + "grand_exchange_price": "31700", + "tokkul_price": "1500", + "durability": null, + "name": "Uncut dragonstone", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1631" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "31700", + "durability": null, + "name": "Uncut dragonstone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1632" + }, + { + "examine": "This gem is crushed and broken.", + "durability": null, + "name": "Crushed gem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1633" + }, + { + "durability": null, + "name": "Crushed gem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1634" + }, + { + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "165", + "durability": null, + "name": "Gold ring", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "id": "1635", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "165", + "durability": null, + "name": "Gold ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1636" + }, + { + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "561", + "durability": null, + "name": "Sapphire ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1637", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "561", + "durability": null, + "name": "Sapphire ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1638" + }, + { + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "884", + "durability": null, + "name": "Emerald ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1639", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "884", + "durability": null, + "name": "Emerald ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1640" + }, + { + "shop_price": "2025", + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "1110", + "durability": null, + "name": "Ruby ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1641", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1110", + "durability": null, + "name": "Ruby ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1642" + }, + { + "shop_price": "3172", + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "4416", + "durability": null, + "name": "Diamond ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1643", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4416", + "durability": null, + "name": "Diamond ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1644" + }, + { + "shop_price": "7750", + "ge_buy_limit": "100", + "examine": "A valuable ring.", + "grand_exchange_price": "26700", + "durability": null, + "name": "Dragonstone ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1645", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26700", + "durability": null, + "name": "Dragonstone ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1646" + }, + { + "examine": "A valuable ring.", + "grand_exchange_price": "547", + "durability": null, + "name": "Sapphire ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1649" + }, + { + "examine": "A valuable ring.", + "grand_exchange_price": "993", + "durability": null, + "name": "Emerald ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1650" + }, + { + "shop_price": "2025", + "examine": "A valuable ring.", + "grand_exchange_price": "1125", + "durability": null, + "name": "Ruby ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1651" + }, + { + "shop_price": "3172", + "examine": "A valuable ring.", + "grand_exchange_price": "3622", + "durability": null, + "name": "Diamond ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1652" + }, + { + "shop_price": "7750", + "examine": "A valuable ring.", + "grand_exchange_price": "19606", + "durability": null, + "name": "Dragonstone ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1653" + }, + { + "shop_price": "450", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "185", + "durability": null, + "name": "Gold necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1654", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "185", + "durability": null, + "name": "Gold necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1655" + }, + { + "shop_price": "945", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "534", + "durability": null, + "name": "Sapphire necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1656", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "534", + "durability": null, + "name": "Sapphire necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1657" + }, + { + "shop_price": "1425", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "781", + "durability": null, + "name": "Emerald necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1658", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "781", + "durability": null, + "name": "Emerald necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1659" + }, + { + "shop_price": "870", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Ruby necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1660", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1276", + "durability": null, + "name": "Ruby necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1661" + }, + { + "shop_price": "3307", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "14300", + "durability": null, + "name": "Diamond necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1662", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "14300", + "durability": null, + "name": "Diamond necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1663" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1664", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1665" + }, + { + "shop_price": "945", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "532", + "durability": null, + "name": "Sapphire necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1668" + }, + { + "shop_price": "1425", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "741", + "durability": null, + "name": "Emerald necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1669" + }, + { + "shop_price": "870", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "1194", + "durability": null, + "name": "Ruby necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1670" + }, + { + "shop_price": "3307", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "9795", + "durability": null, + "name": "Diamond necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1671" + }, + { + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "23010", + "durability": null, + "name": "Dragon necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1672" + }, + { + "shop_price": "350", + "ge_buy_limit": "5000", + "examine": "A plain gold amulet.", + "grand_exchange_price": "172", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1673" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "172", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1674" + }, + { + "shop_price": "810", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "473", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1675" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "473", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1676" + }, + { + "shop_price": "1147", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "695", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1677" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "695", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1678" + }, + { + "shop_price": "2025", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1268", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1679" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1268", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1680" + }, + { + "shop_price": "3307", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "3359", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1681" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3359", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1682" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "26900", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1683" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26900", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1684" + }, + { + "shop_price": "810", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "417", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1687" + }, + { + "shop_price": "1147", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "648", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1688" + }, + { + "shop_price": "2025", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1098", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1689" + }, + { + "shop_price": "3307", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1993", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1690" + }, + { + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "18436", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1691" + }, + { + "shop_price": "350", + "ge_buy_limit": "5000", + "examine": "A plain gold amulet.", + "grand_exchange_price": "137", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1692", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "137", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1693" + }, + { + "shop_price": "810", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "435", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1694", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "435", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1695" + }, + { + "shop_price": "1147", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "659", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1696", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "659", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1697" + }, + { + "shop_price": "2025", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1115", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1698", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1115", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1699" + }, + { + "shop_price": "3307", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "2706", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1700", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2706", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1701" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "27100", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1702", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27100", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1703" + }, + { + "ge_buy_limit": "100", + "examine": "A very powerful dragonstone amulet.", + "grand_exchange_price": "28000", + "durability": null, + "name": "Amulet of glory", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1704", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1705" + }, + { + "examine": "A dragonstone amulet with 1 magic charge.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1706", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1707" + }, + { + "examine": "A dragonstone amulet with 2 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1708", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1709" + }, + { + "examine": "A dragonstone amulet with 3 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1710", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1711" + }, + { + "ge_buy_limit": "100", + "examine": "A dragonstone amulet with 4 magic charges.", + "grand_exchange_price": "29300", + "durability": null, + "name": "Amulet of glory(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1712", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1713" + }, + { + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "It needs a string so I can wear it.", + "grand_exchange_price": "83", + "durability": null, + "name": "Unstrung symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1714" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "83", + "durability": null, + "name": "Unstrung symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1715" + }, + { + "shop_price": "120", + "ge_buy_limit": "5000", + "examine": "A symbol of Saradomin.", + "grand_exchange_price": "29", + "durability": null, + "name": "Unblessed symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1716", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "29", + "durability": null, + "name": "Unblessed symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1717" + }, + { + "shop_price": "300", + "ge_buy_limit": "5000", + "examine": "A blessed holy symbol of Saradomin.", + "grand_exchange_price": "88", + "durability": null, + "name": "Holy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1718", + "bonuses": "0,0,0,0,0,2,2,2,2,2,3,0,8,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "88", + "durability": null, + "name": "Holy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1719" + }, + { + "ge_buy_limit": "5000", + "examine": "It needs a string so I can wear it.", + "grand_exchange_price": "178", + "durability": null, + "name": "Unstrung emblem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1720" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "178", + "durability": null, + "name": "Unstrung emblem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1721" + }, + { + "shop_price": "120", + "ge_buy_limit": "5000", + "examine": "An unholy symbol of Zamorak.", + "grand_exchange_price": "24", + "durability": null, + "name": "Unpowered symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1722", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "24", + "durability": null, + "name": "Unpowered symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1723" + }, + { + "shop_price": "135", + "ge_buy_limit": "5000", + "examine": "An unholy symbol of Zamorak.", + "grand_exchange_price": "57", + "durability": null, + "name": "Unholy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1724", + "bonuses": "2,2,2,2,2,0,0,0,0,0,0,0,8,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "examine": "An enchanted ruby amulet.", + "grand_exchange_price": "1247", + "durability": null, + "name": "Amulet of strength", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1725", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,10,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1247", + "durability": null, + "name": "Amulet of strength", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1726" + }, + { + "shop_price": "900", + "ge_buy_limit": "5000", + "examine": "An enchanted sapphire amulet of magic.", + "grand_exchange_price": "519", + "durability": null, + "name": "Amulet of magic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1727", + "bonuses": "0,0,0,10,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "519", + "durability": null, + "name": "Amulet of magic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1728" + }, + { + "shop_price": "1275", + "ge_buy_limit": "5000", + "examine": "An enchanted emerald amulet of protection.", + "grand_exchange_price": "721", + "durability": null, + "name": "Amulet of defence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1729", + "bonuses": "0,0,0,0,0,7,7,7,7,7,7,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "721", + "durability": null, + "name": "Amulet of defence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1730" + }, + { + "shop_price": "3525", + "ge_buy_limit": "5000", + "examine": "An enchanted diamond amulet of power.", + "grand_exchange_price": "2573", + "durability": null, + "name": "Amulet of power", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1731", + "bonuses": "6,6,6,6,6,6,6,6,6,6,6,6,1,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2573", + "durability": null, + "name": "Amulet of power", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1732" + }, + { + "shop_price": "1", + "ge_buy_limit": "5000", + "examine": "Used with a thread to make clothes.", + "grand_exchange_price": "5", + "durability": null, + "name": "Needle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1733" + }, + { + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Use with a needle to make clothes.", + "grand_exchange_price": "7", + "durability": null, + "name": "Thread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1734" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "For shearing sheep.", + "grand_exchange_price": "76", + "durability": null, + "name": "Shears", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1735" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "76", + "durability": null, + "name": "Shears", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1736" + }, + { + "ge_buy_limit": "5000", + "examine": "I think this came from a sheep.", + "grand_exchange_price": "160", + "durability": null, + "name": "Wool", + "tradeable": "true", + "weight": "0.14", + "archery_ticket_price": "0", + "id": "1737" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "160", + "durability": null, + "name": "Wool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1738" + }, + { + "ge_buy_limit": "10000", + "examine": "I should take this to the tannery.", + "grand_exchange_price": "140", + "durability": null, + "name": "Cowhide", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "1739" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "516", + "durability": null, + "name": "Cowhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1740" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of leather.", + "grand_exchange_price": "638", + "durability": null, + "name": "Leather", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "1741" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "638", + "durability": null, + "name": "Leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1742" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of hard leather.", + "grand_exchange_price": "640", + "durability": null, + "name": "Hard leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1743" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "640", + "durability": null, + "name": "Hard leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1744" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared green dragon hide.", + "grand_exchange_price": "2237", + "durability": null, + "name": "Green d-leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1745" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2237", + "durability": null, + "name": "Green d-leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1746" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a Black Dragon.", + "grand_exchange_price": "5802", + "durability": null, + "name": "Black dragonhide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1747" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5802", + "durability": null, + "name": "Black dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1748" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a red dragon.", + "grand_exchange_price": "3539", + "durability": null, + "name": "Red dragonhide", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1749" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3539", + "durability": null, + "name": "Red dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1750" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a blue dragon.", + "grand_exchange_price": "2473", + "durability": null, + "name": "Blue dragonhide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1751" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2473", + "durability": null, + "name": "Blue dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1752" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a green dragon.", + "grand_exchange_price": "1000", + "durability": null, + "name": "Green dragonhide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1753" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1933", + "durability": null, + "name": "Green dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1754" + }, + { + "shop_price": "14", + "ge_buy_limit": "100", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "20", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1755" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1756" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A mostly clean apron.", + "grand_exchange_price": "74", + "durability": null, + "name": "Brown apron", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "1757", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Brown apron", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1758" + }, + { + "ge_buy_limit": "5000", + "examine": "Spun from sheeps' wool.", + "grand_exchange_price": "115", + "durability": null, + "name": "Ball of wool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1759" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "115", + "durability": null, + "name": "Ball of wool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1760" + }, + { + "ge_buy_limit": "10000", + "examine": "Clay soft enough to mould.", + "grand_exchange_price": "487", + "durability": null, + "name": "Soft clay", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1761" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "487", + "durability": null, + "name": "Soft clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1762" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of red dye.", + "grand_exchange_price": "1374", + "durability": null, + "name": "Red dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1763" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1374", + "durability": null, + "name": "Red dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1764" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of yellow dye.", + "grand_exchange_price": "549", + "durability": null, + "name": "Yellow dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1765" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "549", + "durability": null, + "name": "Yellow dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1766" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of blue dye", + "grand_exchange_price": "642", + "durability": null, + "name": "Blue dye", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1767" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "642", + "durability": null, + "name": "Blue dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1768" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of orange dye.", + "grand_exchange_price": "1258", + "durability": null, + "name": "Orange dye", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1769" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1258", + "durability": null, + "name": "Orange dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1770" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of green dye.", + "grand_exchange_price": "503", + "durability": null, + "name": "Green dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1771" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "503", + "durability": null, + "name": "Green dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1772" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of purple dye.", + "grand_exchange_price": "288", + "durability": null, + "name": "Purple dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1773" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "288", + "durability": null, + "name": "Purple dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1774" + }, + { + "ge_buy_limit": "10000", + "examine": "Hot glass ready to be blown into useful objects.", + "grand_exchange_price": "924", + "durability": null, + "name": "Molten glass", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1775" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "924", + "durability": null, + "name": "Molten glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1776" + }, + { + "ge_buy_limit": "10000", + "examine": "I need a bow stave to attach this to.", + "grand_exchange_price": "240", + "durability": null, + "name": "Bow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1777" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "223", + "durability": null, + "name": "Bow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1778" + }, + { + "shop_price": "73", + "ge_buy_limit": "25000", + "examine": "A plant cultivated for fibres (ground); I should use this with a spinning wheel (item).", + "grand_exchange_price": "73", + "durability": null, + "name": "Flax", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1779" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "73", + "durability": null, + "name": "Flax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1780" + }, + { + "ge_buy_limit": "10000", + "examine": "One of the ingredients for making glass.", + "grand_exchange_price": "575", + "durability": null, + "name": "Soda ash", + "tradeable": "true", + "weight": "0.09", + "archery_ticket_price": "0", + "id": "1781" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "575", + "durability": null, + "name": "Soda ash", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1782" + }, + { + "ge_buy_limit": "10000", + "examine": "One of the ingredients for making glass.", + "grand_exchange_price": "265", + "durability": null, + "name": "Bucket of sand", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "1783" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "265", + "durability": null, + "name": "Bucket of sand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1784" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to form molten glass into useful items.", + "grand_exchange_price": "195", + "durability": null, + "name": "Glassblowing pipe", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1785" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Glassblowing pipe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1786" + }, + { + "ge_buy_limit": "100", + "examine": "I need to put this in a pottery oven.", + "grand_exchange_price": "53", + "durability": null, + "name": "Unfired pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1787" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "53", + "durability": null, + "name": "Unfired pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1788" + }, + { + "ge_buy_limit": "100", + "examine": "I need to put this in a pottery oven.", + "grand_exchange_price": "96", + "durability": null, + "name": "Unfired pie dish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1789" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "96", + "durability": null, + "name": "Unfired pie dish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1790" + }, + { + "shop_price": "32", + "ge_buy_limit": "100", + "examine": "I need to put this in a pottery oven.", + "grand_exchange_price": "194", + "durability": null, + "name": "Unfired bowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1791" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "194", + "durability": null, + "name": "Unfired bowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1792" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A slightly bluish leaf.", + "grand_exchange_price": "57", + "durability": null, + "name": "Woad leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1793" + }, + { + "ge_buy_limit": "100", + "examine": "Useful for crafting items.", + "grand_exchange_price": "249", + "durability": null, + "name": "Bronze wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1794" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "249", + "durability": null, + "name": "Bronze wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1795" + }, + { + "examine": "Anna's shiny silver coated necklace.", + "durability": null, + "name": "Silver necklace", + "weight": "1", + "archery_ticket_price": "0", + "id": "1796", + "equipment_slot": "2" + }, + { + "examine": "Anna's shiny silver coated necklace.", + "durability": null, + "name": "Silver necklace", + "weight": "1", + "archery_ticket_price": "0", + "id": "1797", + "equipment_slot": "2" + }, + { + "examine": "Bob's shiny silver coated tea cup.", + "durability": null, + "name": "Silver cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1798" + }, + { + "examine": "Bob's shiny silver coated tea cup.", + "durability": null, + "name": "Silver cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1799" + }, + { + "examine": "Carol's shiny silver coated bottle.", + "durability": null, + "name": "Silver bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1800" + }, + { + "examine": "Carol's shiny silver coated bottle.", + "durability": null, + "name": "Silver bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1801" + }, + { + "examine": "David's shiny silver coated book.", + "durability": null, + "name": "Silver book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1802" + }, + { + "examine": "David's shiny silver coated book.", + "durability": null, + "name": "Silver book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1803" + }, + { + "examine": "Elizabeth's shiny silver coated needle.", + "durability": null, + "name": "Silver needle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1804" + }, + { + "examine": "Elizabeth's shiny silver coated needle.", + "durability": null, + "name": "Silver needle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1805" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1806" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1807" + }, + { + "examine": "Some (colour) thread found at the murder scene.", + "durability": null, + "name": "Criminal's thread", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1808" + }, + { + "examine": "Some (colour) thread found at the murder scene.", + "durability": null, + "name": "Criminal's thread", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1809" + }, + { + "examine": "Some (colour) thread found at the murder scene.", + "durability": null, + "name": "Criminal's thread", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1810" + }, + { + "examine": "A piece of fly paper. It's sticky.", + "durability": null, + "name": "Flypaper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1811" + }, + { + "examine": "A pot found at the murder scene, with a sickly odour.", + "durability": null, + "name": "Pungent pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1812" + }, + { + "examine": "A flimsy-looking dagger found at the crime scene./A flimsy looking dagger found at the crime scene coated with a thin layer of flour.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Criminal's dagger", + "archery_ticket_price": "0", + "id": "1813" + }, + { + "examine": "A flimsy-looking dagger found at the crime scene./A flimsy looking dagger found at the crime scene coated with a thin layer of flour.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Criminal's dagger", + "archery_ticket_price": "0", + "id": "1814" + }, + { + "examine": "The fingerprints of the murderer.", + "durability": null, + "name": "Killer's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1815" + }, + { + "examine": "An imprint of Anna's fingerprint.", + "durability": null, + "name": "Anna's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1816" + }, + { + "examine": "An imprint of Bob's fingerprint.", + "durability": null, + "name": "Bob's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1817" + }, + { + "examine": "An imprint of Carol's fingerprint.", + "durability": null, + "name": "Carol's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1818" + }, + { + "examine": "An imprint of David's fingerprint.", + "durability": null, + "name": "David's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1819" + }, + { + "examine": "An imprint of Elizabeth's fingerprint.", + "durability": null, + "name": "Elizabeth's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1820" + }, + { + "examine": "An imprint of Frank's fingerprint.", + "durability": null, + "name": "Frank's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1821" + }, + { + "examine": "An unidentified fingerprint taken from the murder weapon.", + "durability": null, + "name": "Unknown print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1822" + }, + { + "shop_price": "30", + "ge_buy_limit": "100", + "examine": "A full waterskin with four portions of water.", + "grand_exchange_price": "184", + "durability": null, + "name": "Waterskin(4)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1823" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "184", + "durability": null, + "name": "Waterskin(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1824" + }, + { + "shop_price": "30", + "examine": "A nearly full waterskin with three portions of water.", + "grand_exchange_price": "4", + "durability": null, + "name": "Waterskin(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1825" + }, + { + "durability": null, + "name": "Waterskin(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1826" + }, + { + "shop_price": "30", + "examine": "A half empty waterskin with two portions of water.", + "grand_exchange_price": "4", + "durability": null, + "name": "Waterskin(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1827" + }, + { + "durability": null, + "name": "Waterskin(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1828" + }, + { + "shop_price": "30", + "examine": "A nearly empty waterskin with one portion of water.", + "grand_exchange_price": "4", + "durability": null, + "name": "Waterskin(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1829" + }, + { + "durability": null, + "name": "Waterskin(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1830" + }, + { + "shop_price": "30", + "ge_buy_limit": "100", + "examine": "A completely empty waterskin - you'll need to fill it up.", + "grand_exchange_price": "93", + "durability": null, + "name": "Waterskin(0)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1831" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "Waterskin(0)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1832" + }, + { + "remove_sleeves": "true", + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool, light desert shirt.", + "grand_exchange_price": "93", + "durability": null, + "name": "Desert shirt", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1833", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "Desert shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1834" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool, light desert robe.", + "grand_exchange_price": "74", + "durability": null, + "name": "Desert robe", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1835", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Desert robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1836" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Comfortable desert shoes.", + "grand_exchange_price": "257", + "durability": null, + "name": "Desert boots", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1837", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "257", + "durability": null, + "name": "Desert boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1838" + }, + { + "examine": "This key is crudely made. It came from the mining camp Mercenary Captain.", + "durability": null, + "name": "Metal key", + "archery_ticket_price": "0", + "id": "1839" + }, + { + "examine": "A metallic key, usually used by prison guards. (Tourist Trap)", + "durability": null, + "name": "Cell door key", + "archery_ticket_price": "0", + "id": "1840" + }, + { + "examine": "An empty barrel/A Splendid barrel.", + "grand_exchange_price": "206", + "durability": null, + "name": "Barrel", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "1841" + }, + { + "examine": "Inventory: A mining barrel with Ana in it.While in the mine cart: It's Ana... in a barrel... in a mine cart.", + "durability": null, + "name": "Ana in a barrel", + "weight": "32", + "archery_ticket_price": "0", + "id": "1842" + }, + { + "examine": "This key unlocks a very sturdy gate. Ana gave me this key. (Tourist Trap)", + "durability": null, + "name": "Wrought iron key", + "archery_ticket_price": "0", + "id": "1843" + }, + { + "remove_sleeves": "true", + "examine": "A filthy, smelly, flea infested shirt.", + "durability": null, + "name": "Slave shirt", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1844", + "equipment_slot": "4" + }, + { + "examine": "A filthy, smelly, flea infested robe.", + "durability": null, + "name": "Slave robe", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1845", + "equipment_slot": "7" + }, + { + "examine": "A set of filthy, smelly, flea infested desert slave boots.", + "durability": null, + "name": "Slave boots", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "1846", + "equipment_slot": "10" + }, + { + "examine": "A piece of paper with barely legible writing - looks like a recipe!", + "durability": null, + "name": "Scrumpled paper", + "archery_ticket_price": "0", + "id": "1847" + }, + { + "shop_price": "5", + "examine": "Very important information.", + "durability": null, + "name": "Shantay disclaimer", + "archery_ticket_price": "0", + "id": "1848" + }, + { + "examine": "A prototype throwing dart.", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Prototype dart", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1849" + }, + { + "examine": "Plans of a technical nature.", + "durability": null, + "name": "Technical plans", + "weight": "1", + "archery_ticket_price": "0", + "id": "1850" + }, + { + "examine": "The most delicious of pineapples.", + "durability": null, + "name": "Tenti pineapple", + "weight": "1", + "archery_ticket_price": "0", + "id": "1851" + }, + { + "examine": "A key to the chest in Captain Siad's room.", + "durability": null, + "name": "Bedabin key", + "archery_ticket_price": "0", + "id": "1852" + }, + { + "examine": "A protoype dart tip - it looks deadly.", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Prototype dart tip", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1853" + }, + { + "shop_price": "5", + "examine": "Allows you to pass through the Shantay pass into the Kharid Desert.", + "durability": null, + "name": "Shantay pass", + "archery_ticket_price": "0", + "id": "1854" + }, + { + "examine": "A Tourist's Guide to Ardougne.", + "durability": null, + "name": "Guide book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1856" + }, + { + "examine": "The Rantuki tribe's totem.", + "durability": null, + "name": "Totem", + "weight": "3", + "archery_ticket_price": "0", + "id": "1857" + }, + { + "examine": "It says 'To Lord Handelmort, Handelmort Mansion'.", + "durability": null, + "name": "Address label", + "archery_ticket_price": "0", + "id": "1858" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to cook this first / Freshly cooked ugthanki meat.", + "grand_exchange_price": "486", + "durability": null, + "name": "Raw ugthanki meat", + "tradeable": "true", + "weight": "0.75", + "archery_ticket_price": "0", + "id": "1859" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "486", + "durability": null, + "name": "Raw ugthanki meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1860" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to cook this first / Freshly cooked ugthanki meat.", + "grand_exchange_price": "687", + "durability": null, + "name": "Ugthanki meat", + "tradeable": "true", + "weight": "0.75", + "archery_ticket_price": "0", + "id": "1861" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "687", + "durability": null, + "name": "Ugthanki meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1862" + }, + { + "shop_price": "9", + "ge_buy_limit": "1000", + "examine": "I need to cook this.", + "grand_exchange_price": "90", + "durability": null, + "name": "Pitta dough", + "tradeable": "true", + "weight": "0.14", + "archery_ticket_price": "0", + "id": "1863" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "90", + "durability": null, + "name": "Pitta dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1864" + }, + { + "ge_buy_limit": "1000", + "examine": "Nicely baked pitta bread. Needs more ingredients to make a kebab.", + "grand_exchange_price": "22", + "durability": null, + "name": "Pitta bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1865" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "22", + "durability": null, + "name": "Pitta bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1866" + }, + { + "durability": null, + "name": "Burnt pitta bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1868" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of tomatoes in a bowl.", + "grand_exchange_price": "90", + "durability": null, + "name": "Chopped tomato", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1869" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "90", + "durability": null, + "name": "Chopped tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1870" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of onions in a bowl.", + "grand_exchange_price": "142", + "durability": null, + "name": "Chopped onion", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1871" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "142", + "durability": null, + "name": "Chopped onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1872" + }, + { + "ge_buy_limit": "1000", + "examine": "Strips of ugthanki meat in a bowl.", + "grand_exchange_price": "348", + "durability": null, + "name": "Chopped ugthanki", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1873" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "348", + "durability": null, + "name": "Chopped ugthanki", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1874" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of chopped onions and tomatoes in a bowl", + "grand_exchange_price": "31", + "durability": null, + "name": "Onion & tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1875" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "31", + "durability": null, + "name": "Onion & tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1876" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "A mixture of chopped onions and ugthanki meat in a bowl.", + "grand_exchange_price": "330", + "durability": null, + "name": "Ugthanki & onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1877" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "330", + "durability": null, + "name": "Ugthanki & onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1878" + }, + { + "ge_buy_limit": "10000", + "examine": "A mixture of chopped tomatoes and ugthanki meat in a bowl.", + "grand_exchange_price": "331", + "durability": null, + "name": "Ugthanki & tomato", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "1879" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "331", + "durability": null, + "name": "Ugthanki & tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1880" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of chopped tomatoes, onions and ugthanki meat in a bowl", + "grand_exchange_price": "412", + "durability": null, + "name": "Kebab mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1881" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "412", + "durability": null, + "name": "Kebab mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1882" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2027", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1883" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2027", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1884" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1499", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1885" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1499", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1886" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Useful for baking cakes.", + "grand_exchange_price": "20", + "durability": null, + "name": "Cake tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1887" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Cake tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1888" + }, + { + "ge_buy_limit": "1000", + "examine": "Now all I need to do is cook it.", + "grand_exchange_price": "559", + "durability": null, + "name": "Uncooked cake", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1889" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "559", + "durability": null, + "name": "Uncooked cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1890" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "A plain sponge cake.", + "grand_exchange_price": "155", + "durability": null, + "name": "Cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1891" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "155", + "durability": null, + "name": "Cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1892" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "A plain sponge cake.", + "grand_exchange_price": "39", + "durability": null, + "name": "2/3 cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1893" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "39", + "durability": null, + "name": "2/3 cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1894" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "A plain sponge cake.", + "grand_exchange_price": "32", + "durability": null, + "name": "Slice of cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1895" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "32", + "durability": null, + "name": "Slice of cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1896" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks very tasty.", + "grand_exchange_price": "416", + "durability": null, + "name": "Chocolate cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1897" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "416", + "durability": null, + "name": "Chocolate cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1898" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks very tasty.", + "grand_exchange_price": "181", + "durability": null, + "name": "2/3 chocolate cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1899" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "181", + "durability": null, + "name": "2/3 chocolate cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1900" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks very tasty.", + "grand_exchange_price": "13", + "durability": null, + "name": "Chocolate slice", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1901" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Chocolate slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1902" + }, + { + "durability": null, + "name": "Burnt cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1904" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "190", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1905" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "190", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1906" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "171", + "durability": null, + "name": "Wizard's mind bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1907" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "171", + "durability": null, + "name": "Wizard's mind bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1908" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "828", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1909" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "828", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1910" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "487", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1911" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "487", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1912" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "212", + "durability": null, + "name": "Dwarven stout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1913" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "212", + "durability": null, + "name": "Dwarven stout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1914" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A murky glass full of your average, everyday pirate slosh.", + "grand_exchange_price": "19", + "durability": null, + "name": "Grog", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1915" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Grog", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1916" + }, + { + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "202", + "durability": null, + "name": "Beer", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1917", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "202", + "durability": null, + "name": "Beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1918" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "I need to fill this with beer.", + "grand_exchange_price": "10", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1919" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1920" + }, + { + "ge_buy_limit": "100", + "examine": "It's a bowl of water.", + "grand_exchange_price": "97", + "durability": null, + "name": "Bowl of water", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1921" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "97", + "durability": null, + "name": "Bowl of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1922" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "Useful for mixing things.", + "grand_exchange_price": "34", + "durability": null, + "name": "Bowl", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1923" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34", + "durability": null, + "name": "Bowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1924" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "It's an empty bucket.", + "grand_exchange_price": "30", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1925" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1926" + }, + { + "shop_price": "12", + "ge_buy_limit": "1000", + "examine": "It's a bucket of milk.", + "grand_exchange_price": "103", + "durability": null, + "name": "Bucket of milk", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "1927" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "103", + "durability": null, + "name": "Bucket of milk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1928" + }, + { + "ge_buy_limit": "100", + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "72", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1929" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "72", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1930" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "This pot is empty.", + "grand_exchange_price": "6", + "durability": null, + "name": "Empty pot", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "1931" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6", + "durability": null, + "name": "Empty pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1932" + }, + { + "shop_price": "14", + "ge_buy_limit": "1000", + "examine": "There is flour in this pot.", + "grand_exchange_price": "172", + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "1933" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "172", + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1934" + }, + { + "shop_price": "1", + "ge_buy_limit": "10000", + "examine": "This jug is empty.", + "grand_exchange_price": "29", + "durability": null, + "name": "Jug", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1935" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "29", + "durability": null, + "name": "Jug", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1936" + }, + { + "shop_price": "1", + "ge_buy_limit": "10000", + "examine": "It's full of water.", + "grand_exchange_price": "87", + "durability": null, + "name": "Jug of water", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1937" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "87", + "durability": null, + "name": "Jug of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1938" + }, + { + "ge_buy_limit": "5000", + "examine": "A foul smelling thick tar like substance.", + "grand_exchange_price": "103", + "durability": null, + "name": "Swamp tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1939" + }, + { + "shop_price": "38", + "ge_buy_limit": "5000", + "examine": "A tar-like substance mixed with flour and warmed.", + "grand_exchange_price": "342", + "durability": null, + "name": "Raw swamp paste", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1940" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "A tar-like substance mixed with flour and warmed.", + "grand_exchange_price": "1", + "durability": null, + "name": "Swamp paste", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1941" + }, + { + "shop_price": "11", + "ge_buy_limit": "500", + "examine": "This could be used to make a good stew.", + "grand_exchange_price": "91", + "durability": null, + "name": "Potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1942" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "91", + "durability": null, + "name": "Potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1943" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "A nice fresh egg.", + "grand_exchange_price": "99", + "durability": null, + "name": "Egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1944" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "99", + "durability": null, + "name": "Egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1945" + }, + { + "shop_price": "14", + "examine": "There is flour in this pot.", + "grand_exchange_price": "162", + "durability": null, + "name": "Flour", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "1946" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "Some wheat heads.", + "grand_exchange_price": "7", + "durability": null, + "name": "Grain", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "1947" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7", + "durability": null, + "name": "Grain", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1948" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "What a silly hat.", + "grand_exchange_price": "233", + "durability": null, + "name": "Chef's hat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1949", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "233", + "durability": null, + "name": "Chef's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1950" + }, + { + "shop_price": "3", + "ge_buy_limit": "1000", + "examine": "Very bright red berries.", + "grand_exchange_price": "337", + "durability": null, + "name": "Redberries", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1951" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "337", + "durability": null, + "name": "Redberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1952" + }, + { + "ge_buy_limit": "1000", + "examine": "Potentially pastry.", + "grand_exchange_price": "433", + "durability": null, + "name": "Pastry dough", + "tradeable": "true", + "weight": "0.16", + "archery_ticket_price": "0", + "id": "1953" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "433", + "durability": null, + "name": "Pastry dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1954" + }, + { + "shop_price": "36", + "ge_buy_limit": "1000", + "examine": "Keeps the doctor away.", + "grand_exchange_price": "353", + "durability": null, + "name": "Cooking apple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1955" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "353", + "durability": null, + "name": "Cooking apple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1956" + }, + { + "shop_price": "12", + "ge_buy_limit": "1000", + "examine": "A strong smelling onion.", + "grand_exchange_price": "8", + "durability": null, + "name": "Onion", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1957" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8", + "durability": null, + "name": "Onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1958" + }, + { + "ge_buy_limit": "2", + "examine": "Happy Halloween.", + "grand_exchange_price": "273600000", + "durability": null, + "name": "Pumpkin", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1959" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "273600000", + "durability": null, + "name": "Pumpkin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1960" + }, + { + "ge_buy_limit": "2", + "examine": "Happy Easter.", + "grand_exchange_price": "80400000", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1961" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "80400000", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1962" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "263", + "durability": null, + "name": "Banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1963", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "263", + "durability": null, + "name": "Banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1964" + }, + { + "ge_buy_limit": "1000", + "examine": "On ground: Cabbage... yuck!In inventory: Yuck, I don't like cabbage.", + "grand_exchange_price": "41", + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1965" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "41", + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1966" + }, + { + "examine": "On ground: Cabbage... yuck!In inventory: Yuck, I don't like cabbage.", + "grand_exchange_price": "55", + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1967" + }, + { + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1968" + }, + { + "shop_price": "1", + "examine": "A home made spinach thing.", + "durability": null, + "name": "Spinach roll", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1969" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "A meaty kebab.", + "grand_exchange_price": "97", + "durability": null, + "name": "Kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1971" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "97", + "durability": null, + "name": "Kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1972" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Mmmmmmm chocolate.", + "grand_exchange_price": "295", + "durability": null, + "name": "Chocolate bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1973", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "295", + "durability": null, + "name": "Chocolate bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1974" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "It's ground-up chocolate.", + "grand_exchange_price": "370", + "durability": null, + "name": "Chocolate dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1975" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "370", + "durability": null, + "name": "Chocolate dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1976" + }, + { + "examine": "Milk with chocolate in it.", + "durability": null, + "name": "Chocolatey milk", + "weight": "2", + "archery_ticket_price": "0", + "id": "1977" + }, + { + "shop_price": "10", + "ge_buy_limit": "1000", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1978" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1979" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An empty cup.", + "grand_exchange_price": "5", + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1980" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1981" + }, + { + "shop_price": "25", + "ge_buy_limit": "10000", + "examine": "This would make good ketchup.", + "grand_exchange_price": "159", + "durability": null, + "name": "Tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1982" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "159", + "durability": null, + "name": "Tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1983" + }, + { + "shop_price": "1", + "examine": "Rotten to the core!", + "durability": null, + "name": "Rotten apple", + "archery_ticket_price": "0", + "id": "1984" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "It's got holes in it.", + "grand_exchange_price": "188", + "durability": null, + "name": "Cheese", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1985" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "188", + "durability": null, + "name": "Cheese", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1986" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "Good grapes for wine making.", + "grand_exchange_price": "1510", + "durability": null, + "name": "Grapes", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1987" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1510", + "durability": null, + "name": "Grapes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1988" + }, + { + "ge_buy_limit": "2", + "examine": "An optimist would say it is half full.", + "grand_exchange_price": "227700000", + "durability": null, + "name": "Half full wine jug", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1989" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "227700000", + "durability": null, + "name": "Half full wine jug", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1990" + }, + { + "examine": "Oh dear, this wine is terrible!", + "durability": null, + "name": "Jug of bad wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1991" + }, + { + "examine": "Oh dear, this wine is terrible!", + "durability": null, + "name": "Jug of bad wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1992" + }, + { + "shop_price": "128", + "ge_buy_limit": "1000", + "examine": "It's full of wine.", + "grand_exchange_price": "36", + "durability": null, + "name": "Jug of wine", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "1993" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "36", + "durability": null, + "name": "Jug of wine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1994" + }, + { + "examine": "This wine needs to ferment before it can be drunk.", + "durability": null, + "name": "Unfermented wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1995" + }, + { + "examine": "This wine needs to ferment before it can be drunk.", + "durability": null, + "name": "Unfermented wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1996" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "177", + "durability": null, + "name": "Incomplete stew", + "archery_ticket_price": "0", + "id": "1997" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "177", + "durability": null, + "name": "Incomplete stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1998" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "210", + "durability": null, + "name": "Incomplete stew", + "archery_ticket_price": "0", + "id": "1999" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "210", + "durability": null, + "name": "Incomplete stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2000" + }, + { + "shop_price": "1", + "ge_buy_limit": "200", + "examine": "I need to cook this.", + "grand_exchange_price": "600", + "durability": null, + "name": "Uncooked stew", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2001" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "600", + "durability": null, + "name": "Uncooked stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2002" + }, + { + "shop_price": "20", + "ge_buy_limit": "200", + "examine": "It's a meat and potato stew.", + "grand_exchange_price": "1133", + "durability": null, + "name": "Stew", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "2003" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1133", + "durability": null, + "name": "Stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2004" + }, + { + "durability": null, + "name": "Burnt stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2006" + }, + { + "shop_price": "230", + "ge_buy_limit": "1000", + "examine": "This could liven up an otherwise bland stew.", + "grand_exchange_price": "277", + "durability": null, + "name": "Spice", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2007" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "277", + "durability": null, + "name": "Spice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2008" + }, + { + "ge_buy_limit": "200", + "examine": "I need to cook this.", + "grand_exchange_price": "1382", + "durability": null, + "name": "Uncooked curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2009" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1382", + "durability": null, + "name": "Uncooked curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2010" + }, + { + "ge_buy_limit": "200", + "examine": "It's a spicy hot curry.", + "grand_exchange_price": "1001", + "durability": null, + "name": "Curry", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "2011" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1001", + "durability": null, + "name": "Curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2012" + }, + { + "durability": null, + "name": "Burnt curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2014" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "An absolutely clear spirit sold by well-stocked bars.", + "grand_exchange_price": "366", + "durability": null, + "name": "Vodka", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2015" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "durability": null, + "name": "Vodka", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2016" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "This Draynor malt is sold by well-stocked bars.", + "grand_exchange_price": "68", + "durability": null, + "name": "Whisky", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2017" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "68", + "durability": null, + "name": "Whisky", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2018" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A strong spirit that tastes of Juniper; sold at well-stocked bars.", + "grand_exchange_price": "184", + "durability": null, + "name": "Gin", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2019" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "184", + "durability": null, + "name": "Gin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2020" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A strong spirit best served in a large glass.", + "grand_exchange_price": "146", + "durability": null, + "name": "Brandy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2021" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "146", + "durability": null, + "name": "Brandy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2022" + }, + { + "shop_price": "5", + "examine": "A book on tree gnome cocktails.", + "durability": null, + "name": "Cocktail guide", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2023" + }, + { + "durability": null, + "name": "Cocktail guide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2024" + }, + { + "shop_price": "2", + "examine": "Used for mixing cocktails.", + "durability": null, + "name": "Cocktail shaker", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2025" + }, + { + "shop_price": "1", + "examine": "For sipping cocktails.", + "durability": null, + "name": "Cocktail glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2026" + }, + { + "durability": null, + "name": "Cocktail glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2027" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Blurberry Special.", + "grand_exchange_price": "70", + "durability": null, + "name": "Premade blurb' sp.", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2028" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "70", + "durability": null, + "name": "Premade blurb' sp.", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2029" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Chocolate Saturday.", + "grand_exchange_price": "13", + "durability": null, + "name": "Premade choc s'dy", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2030" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Premade choc s'dy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2031" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Drunk Dragon.", + "grand_exchange_price": "34", + "durability": null, + "name": "Premade dr' dragon", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2032" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "34", + "durability": null, + "name": "Premade dr' dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2033" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Fruit Blast.", + "grand_exchange_price": "48", + "durability": null, + "name": "Premade fr' blast", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2034" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "48", + "durability": null, + "name": "Premade fr' blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2035" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Pineapple Punch.", + "grand_exchange_price": "40", + "durability": null, + "name": "Premade p' punch", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2036" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "40", + "durability": null, + "name": "Premade p' punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2037" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Short Green Guy.", + "grand_exchange_price": "33", + "durability": null, + "name": "Premade sgg", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2038" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "33", + "durability": null, + "name": "Premade sgg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2039" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A Premade Wizard Blizzard.", + "grand_exchange_price": "26", + "durability": null, + "name": "Premade wiz blz'd", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2040" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "26", + "durability": null, + "name": "Premade wiz blz'd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2041" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2042" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2043" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2044" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2045" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2046" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2047" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A fresh healthy fruit mix.", + "grand_exchange_price": "285", + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2048" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "285", + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2049" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2050" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2051" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2052" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2053" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "774", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2054" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "774", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2055" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2056" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2057" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2058" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2059" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2060" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2061" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2062" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2063" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "Looks good... smells strong.", + "grand_exchange_price": "5468", + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2064" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5468", + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2065" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2066" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2067" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2068" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2069" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2070" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2071" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2072" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2073" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "272", + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2074" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "272", + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2075" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2076" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2077" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2078" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2079" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A Short Green Guy... looks good.", + "grand_exchange_price": "756", + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2080" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "756", + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2081" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2082" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2083" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A cool refreshing fruit mix.", + "grand_exchange_price": "1802", + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2084" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1802", + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2085" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2086" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2087" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2088" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2089" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2090" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2091" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "506", + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2092" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "506", + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2093" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2094" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2095" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2096" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2097" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2098" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2099" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2100" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2101" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A common fruit, popularly used in cocktails.", + "grand_exchange_price": "86", + "durability": null, + "name": "Lemon", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2102" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "86", + "durability": null, + "name": "Lemon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2103" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a lemon!", + "grand_exchange_price": "29", + "durability": null, + "name": "Lemon chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2104" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "29", + "durability": null, + "name": "Lemon chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2105" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a lemon!", + "grand_exchange_price": "16", + "durability": null, + "name": "Lemon slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2106" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "16", + "durability": null, + "name": "Lemon slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2107" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "A common fruit.", + "grand_exchange_price": "930", + "durability": null, + "name": "Orange", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2108" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "930", + "durability": null, + "name": "Orange", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2109" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh chunks of orange.", + "grand_exchange_price": "46", + "durability": null, + "name": "Orange chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2110" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "46", + "durability": null, + "name": "Orange chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2111" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh orange slices.", + "grand_exchange_price": "163", + "durability": null, + "name": "Orange slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2112" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "163", + "durability": null, + "name": "Orange slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2113" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "It can be cut up into something more manageable with a knife.", + "grand_exchange_price": "45", + "durability": null, + "name": "Pineapple", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "2114" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "45", + "durability": null, + "name": "Pineapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2115" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh chunks of pineapple.", + "grand_exchange_price": "86", + "durability": null, + "name": "Pineapple chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2116" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "86", + "durability": null, + "name": "Pineapple chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2117" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a pineapple!", + "grand_exchange_price": "25", + "durability": null, + "name": "Pineapple ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2118" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "25", + "durability": null, + "name": "Pineapple ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2119" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A common fruit, popularly used in cocktails.", + "grand_exchange_price": "78", + "durability": null, + "name": "Lime", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2120" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "78", + "durability": null, + "name": "Lime", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2121" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh chunks of lime.", + "grand_exchange_price": "16", + "durability": null, + "name": "Lime chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2122" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "16", + "durability": null, + "name": "Lime chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2123" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a lime!", + "grand_exchange_price": "25", + "durability": null, + "name": "Lime slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2124" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "25", + "durability": null, + "name": "Lime slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2125" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "Some rather pretty blue berries picked from a dwellberry bush.", + "grand_exchange_price": "144", + "durability": null, + "name": "Dwellberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2126" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "144", + "durability": null, + "name": "Dwellberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2127" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A common ingredient in gnome cuisine.", + "grand_exchange_price": "275", + "durability": null, + "name": "Equa leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2128" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "275", + "durability": null, + "name": "Equa leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2129" + }, + { + "shop_price": "2", + "ge_buy_limit": "10000", + "examine": "Fresh cream.", + "grand_exchange_price": "58", + "durability": null, + "name": "Pot of cream", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2130" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "58", + "durability": null, + "name": "Pot of cream", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2131" + }, + { + "shop_price": "58", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "282", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2132" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "282", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2133" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "85", + "durability": null, + "name": "Raw rat meat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2134" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "85", + "durability": null, + "name": "Raw rat meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2135" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "307", + "durability": null, + "name": "Raw bear meat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2136" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "307", + "durability": null, + "name": "Raw bear meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2137" + }, + { + "shop_price": "60", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "386", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "2138" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "386", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2139" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "70", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2140" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "70", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2141" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "111", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2142" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "111", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2143" + }, + { + "durability": null, + "name": "Burnt chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2145" + }, + { + "examine": "Oh dear, it's totally burnt!", + "durability": null, + "name": "Burnt meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2146" + }, + { + "durability": null, + "name": "Burnt meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2147" + }, + { + "examine": "A very strange eel.", + "durability": null, + "name": "Raw lava eel", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2148" + }, + { + "examine": "Strange, it looks cooler now it's been cooked.", + "durability": null, + "name": "Lava eel", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "2149" + }, + { + "ge_buy_limit": "10000", + "examine": "A slippery little blighter.", + "grand_exchange_price": "750", + "durability": null, + "name": "Swamp toad", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2150" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "750", + "durability": null, + "name": "Swamp toad", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2151" + }, + { + "ge_buy_limit": "1000", + "examine": "They're a gnome delicacy apparently.", + "grand_exchange_price": "661", + "durability": null, + "name": "Toad's legs", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2152" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "661", + "durability": null, + "name": "Toad's legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2153" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2154" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2155" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Spicy toad's legs", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2156" + }, + { + "durability": null, + "name": "Spicy toad's legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2157" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Seasoned legs", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2158" + }, + { + "durability": null, + "name": "Seasoned legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2159" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Spicy worm", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2160" + }, + { + "durability": null, + "name": "Spicy worm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2161" + }, + { + "ge_buy_limit": "100", + "examine": "They're a gnome delicacy apparently.", + "grand_exchange_price": "24", + "durability": null, + "name": "King worm", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2162" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24", + "durability": null, + "name": "King worm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2163" + }, + { + "shop_price": "1", + "examine": "A deep tin used to make gnome battas in.", + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2164" + }, + { + "shop_price": "10", + "examine": "A shallow tray used to make crunchies in.", + "durability": null, + "name": "Crunchy tray", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2165" + }, + { + "shop_price": "10", + "examine": "A large ovenproof bowl.", + "durability": null, + "name": "Gnomebowl mould", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2166" + }, + { + "examine": "Aluft Gianne's favourite dishes.", + "durability": null, + "name": "Gianne's cook book", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2167" + }, + { + "durability": null, + "name": "Gianne's cook book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2168" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "It's Aluft Gianne's secret mix of spices.", + "grand_exchange_price": "28", + "durability": null, + "name": "Gnome spice", + "tradeable": "true", + "weight": "0.14", + "archery_ticket_price": "0", + "id": "2169" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "28", + "durability": null, + "name": "Gnome spice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2170" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "It's made from a secret recipe.", + "grand_exchange_price": "13", + "durability": null, + "name": "Gianne dough", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2171" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Gianne dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2172" + }, + { + "examine": "This gnome bowl doesn't look very appetizing.", + "durability": null, + "name": "Picture", + "weight": "1", + "archery_ticket_price": "0", + "id": "2173" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2174" + }, + { + "durability": null, + "name": "Burnt gnomebowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2176" + }, + { + "examine": "This gnomebowl is in the early stages of preparation.", + "durability": null, + "name": "Half baked bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2177" + }, + { + "examine": "This gnomebowl needs cooking.", + "durability": null, + "name": "Raw gnomebowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2178" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2179" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2180" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2181" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2182" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2183" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2184" + }, + { + "shop_price": "450", + "ge_buy_limit": "1000", + "examine": "Full of creamy, chocolately goodness.", + "grand_exchange_price": "4400", + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2185" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4400", + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2186" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "2321", + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2187" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2321", + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2188" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2189" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2190" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "454", + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2191" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "454", + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2192" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2193" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2194" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks pretty healthy.", + "grand_exchange_price": "481", + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2195" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "481", + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2196" + }, + { + "examine": "These crunchies don't look very appetising.", + "durability": null, + "name": "Odd crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2197" + }, + { + "durability": null, + "name": "Odd crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2198" + }, + { + "durability": null, + "name": "Burnt crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2200" + }, + { + "examine": "This crunchy is in the early stages of preparation.", + "durability": null, + "name": "Half baked crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2201" + }, + { + "ge_buy_limit": "1000", + "examine": "These crunchies need cooking.", + "grand_exchange_price": "163", + "durability": null, + "name": "Raw crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2202" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2203" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2204" + }, + { + "shop_price": "80", + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "255", + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2205" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "255", + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2206" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2207" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2208" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "Yum... smells good.", + "grand_exchange_price": "816", + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2209" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "816", + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2210" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2211" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2212" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "Yum...smells spicy.", + "grand_exchange_price": "101", + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2213" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "101", + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2214" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2215" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2216" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "1228", + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2217" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1228", + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2218" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Worm Batta.", + "grand_exchange_price": "130", + "durability": null, + "name": "Premade w'm batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2219" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "130", + "durability": null, + "name": "Premade w'm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2220" + }, + { + "ge_buy_limit": "1000", + "examine": "A Premade Toad Batta.", + "grand_exchange_price": "127", + "durability": null, + "name": "Premade t'd batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2221" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "127", + "durability": null, + "name": "Premade t'd batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2222" + }, + { + "ge_buy_limit": "1000", + "examine": "A Premade Cheese and Tomato Batta.", + "grand_exchange_price": "137", + "durability": null, + "name": "Premade c+t batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2223" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "137", + "durability": null, + "name": "Premade c+t batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2224" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Fruit Batta.", + "grand_exchange_price": "131", + "durability": null, + "name": "Premade fr't batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2225" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "131", + "durability": null, + "name": "Premade fr't batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2226" + }, + { + "ge_buy_limit": "1000", + "examine": "A Premade Vegetable Batta.", + "grand_exchange_price": "134", + "durability": null, + "name": "Premade veg batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2227" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "134", + "durability": null, + "name": "Premade veg batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2228" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Chocolate Bomb.", + "grand_exchange_price": "1227", + "durability": null, + "name": "Premade choc bomb", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2229" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1227", + "durability": null, + "name": "Premade choc bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2230" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Tangled Toads Legs.", + "grand_exchange_price": "867", + "durability": null, + "name": "Premade ttl", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2231" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "867", + "durability": null, + "name": "Premade ttl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2232" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Worm Hole.", + "grand_exchange_price": "237", + "durability": null, + "name": "Premade worm hole", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2233" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "237", + "durability": null, + "name": "Premade worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2234" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Vegetable Ball.", + "grand_exchange_price": "233", + "durability": null, + "name": "Premade veg ball", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2235" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "233", + "durability": null, + "name": "Premade veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2236" + }, + { + "ge_buy_limit": "1000", + "examine": "Some Premade Worm Crunchies.", + "grand_exchange_price": "76", + "durability": null, + "name": "Premade w'm crun", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2237" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "76", + "durability": null, + "name": "Premade w'm crun", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2238" + }, + { + "ge_buy_limit": "1000", + "examine": "Some Premade chocchip crunchies.", + "grand_exchange_price": "95", + "durability": null, + "name": "Premade ch' crunch", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2239" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "95", + "durability": null, + "name": "Premade ch' crunch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2240" + }, + { + "ge_buy_limit": "1000", + "examine": "Some premade Spicy Crunchies.", + "grand_exchange_price": "103", + "durability": null, + "name": "Premade s'y crunch", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2241" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "103", + "durability": null, + "name": "Premade s'y crunch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2242" + }, + { + "shop_price": "80", + "ge_buy_limit": "1000", + "examine": "Some premade Toad Crunchies.", + "grand_exchange_price": "43", + "durability": null, + "name": "Premade t'd crunch", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2243" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "43", + "durability": null, + "name": "Premade t'd crunch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2244" + }, + { + "examine": "This batta doesn't look very appetising.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2245" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2246" + }, + { + "durability": null, + "name": "Burnt batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2248" + }, + { + "examine": "This gnome batta is in the early stages of preparation.", + "durability": null, + "name": "Half baked batta", + "archery_ticket_price": "0", + "id": "2249" + }, + { + "shop_price": "1", + "examine": "This gnome batta needs cooking.", + "durability": null, + "name": "Raw batta", + "archery_ticket_price": "0", + "id": "2250" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2251" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2252" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "140", + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2253" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "140", + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2254" + }, + { + "shop_price": "78", + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "271", + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2255" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "271", + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2256" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2257" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2258" + }, + { + "ge_buy_limit": "1000", + "examine": "This smells really good.", + "grand_exchange_price": "260", + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2259" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "260", + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2260" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2261" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2262" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2263" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2264" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2265" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2266" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2267" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2268" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2269" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2270" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2271" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2272" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2273" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2274" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2275" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2276" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "303", + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2277" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "303", + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2278" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2279" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2280" + }, + { + "ge_buy_limit": "1000", + "examine": "Well... It looks healthy.", + "grand_exchange_price": "240", + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2281" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "240", + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2282" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "I need to add some tomato next.", + "grand_exchange_price": "418", + "durability": null, + "name": "Pizza base", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2283" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "418", + "durability": null, + "name": "Pizza base", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2284" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to add some cheese next.", + "grand_exchange_price": "366", + "durability": null, + "name": "Incomplete pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2285" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Incomplete pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2286" + }, + { + "ge_buy_limit": "1000", + "examine": "This needs cooking.", + "grand_exchange_price": "1141", + "durability": null, + "name": "Uncooked pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2287" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1141", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2288" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "A cheese and tomato pizza.", + "grand_exchange_price": "1357", + "durability": null, + "name": "Plain pizza", + "tradeable": "true", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "2289" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1357", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Plain pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2290" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "Half of this plain pizza has been eaten.", + "grand_exchange_price": "238", + "durability": null, + "name": "1/2 plain pizza", + "tradeable": "true", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "2291" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "238", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 plain pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2292" + }, + { + "ge_buy_limit": "1000", + "examine": "A pizza with bits of meat on it.", + "grand_exchange_price": "1012", + "durability": null, + "name": "Meat pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2293" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1012", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Meat pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2294" + }, + { + "ge_buy_limit": "1000", + "examine": "Half of this meat pizza has been eaten.", + "grand_exchange_price": "339", + "durability": null, + "name": "1/2 meat pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2295" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "339", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 meat pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2296" + }, + { + "ge_buy_limit": "1000", + "examine": "A pizza with anchovies.", + "grand_exchange_price": "1573", + "durability": null, + "name": "Anchovy pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2297" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1573", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Anchovy pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2298" + }, + { + "ge_buy_limit": "1000", + "examine": "Half of this anchovy pizza has been eaten.", + "grand_exchange_price": "44", + "durability": null, + "name": "1/2 anchovy pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2299" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "44", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 anchovy pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2300" + }, + { + "ge_buy_limit": "1000", + "examine": "A pizza with bits of pineapple on it.", + "grand_exchange_price": "1469", + "durability": null, + "name": "Pineapple pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2301" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1469", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Pineapple pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2302" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "156", + "examine": "Half of this pineapple pizza has been eaten.", + "durability": null, + "name": "1/2 p'apple pizza", + "archery_ticket_price": "0", + "id": "2303" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 p'apple pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2304" + }, + { + "examine": "Oh dear!", + "durability": null, + "name": "Burnt pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2306" + }, + { + "ge_buy_limit": "1000", + "examine": "Some uncooked dough.", + "grand_exchange_price": "158", + "durability": null, + "name": "Bread dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2307" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "158", + "durability": null, + "name": "Bread dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2308" + }, + { + "shop_price": "24", + "ge_buy_limit": "1000", + "examine": "Nice crispy bread.", + "grand_exchange_price": "110", + "durability": null, + "name": "Bread", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2309" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "110", + "durability": null, + "name": "Bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2310" + }, + { + "durability": null, + "name": "Burnt bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2312" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Deceptively pie shaped.", + "grand_exchange_price": "174", + "durability": null, + "name": "Pie dish", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2313" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "174", + "durability": null, + "name": "Pie dish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2314" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to find a filling for this pie.", + "grand_exchange_price": "887", + "durability": null, + "name": "Pie shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2315" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "887", + "durability": null, + "name": "Pie shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2316" + }, + { + "ge_buy_limit": "1000", + "examine": "This would be much tastier cooked.", + "grand_exchange_price": "781", + "durability": null, + "name": "Uncooked apple pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2317" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "781", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked apple pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2318" + }, + { + "ge_buy_limit": "1000", + "examine": "This would be much healthier cooked.", + "grand_exchange_price": "747", + "durability": null, + "name": "Uncooked meat pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2319" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "747", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2320" + }, + { + "ge_buy_limit": "1000", + "examine": "This would be much more appetising cooked.", + "grand_exchange_price": "802", + "durability": null, + "name": "Uncooked berry pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2321" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "802", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked berry pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2322" + }, + { + "shop_price": "140", + "ge_buy_limit": "1000", + "examine": "Mmm Apple pie.", + "grand_exchange_price": "246", + "durability": null, + "name": "Apple pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2323" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "246", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Apple pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2324" + }, + { + "ge_buy_limit": "1000", + "examine": "Looks tasty.", + "grand_exchange_price": "534", + "durability": null, + "name": "Redberry pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2325" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "534", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Redberry pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2326" + }, + { + "shop_price": "16", + "ge_buy_limit": "1000", + "grand_exchange_price": "160", + "examine": "Not for vegetarians.", + "durability": null, + "name": "Meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2327" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2328" + }, + { + "examine": "I think I left it on the stove too long.", + "durability": null, + "name": "Burnt pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2330" + }, + { + "shop_price": "16", + "ge_buy_limit": "1000", + "grand_exchange_price": "174", + "examine": "Half of it is suitable for vegetarians.", + "durability": null, + "name": "Half a meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2331" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "174", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2332" + }, + { + "ge_buy_limit": "1000", + "examine": "So tasty I kept some for later.", + "grand_exchange_price": "248", + "durability": null, + "name": "Half a redberry pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2333" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "248", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a redberry pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2334" + }, + { + "shop_price": "140", + "ge_buy_limit": "1000", + "examine": "Mmm half an apple pie.", + "grand_exchange_price": "146", + "durability": null, + "name": "Half an apple pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2335" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "146", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half an apple pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2336" + }, + { + "ge_buy_limit": "1000", + "examine": "Raw meat from the oomlie bird.", + "grand_exchange_price": "155", + "durability": null, + "name": "Raw oomlie", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2337" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "155", + "durability": null, + "name": "Raw oomlie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2338" + }, + { + "examine": "A thick green palm leaf used by natives to cook meat.", + "durability": null, + "name": "Palm leaf", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2339" + }, + { + "examine": "A thick green palm leaf used by natives to cook meat.", + "durability": null, + "name": "Palm leaf", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2340" + }, + { + "ge_buy_limit": "1000", + "examine": "Oomlie meat in a palm leaf pouch. It just needs to be cooked.", + "grand_exchange_price": "814", + "durability": null, + "name": "Wrapped oomlie", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2341" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "814", + "durability": null, + "name": "Wrapped oomlie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2342" + }, + { + "ge_buy_limit": "1000", + "examine": "Deliciously cooked oomlie meat in a palm leaf pouch.", + "grand_exchange_price": "1126", + "durability": null, + "name": "Cooked oomlie wrap", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2343" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1126", + "durability": null, + "name": "Cooked oomlie wrap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2344" + }, + { + "durability": null, + "name": "Burnt oomlie wrap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2346" + }, + { + "shop_price": "13", + "ge_buy_limit": "1000", + "examine": "Good for hitting things!", + "grand_exchange_price": "37", + "durability": null, + "name": "Hammer", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "2347" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "37", + "durability": null, + "name": "Hammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2348" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "It's a bar of bronze.", + "grand_exchange_price": "268", + "durability": null, + "name": "Bronze bar", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "2349" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "268", + "durability": null, + "name": "Bronze bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2350" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of iron.", + "grand_exchange_price": "493", + "durability": null, + "name": "Iron bar", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "2351" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "493", + "durability": null, + "name": "Iron bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2352" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of steel.", + "grand_exchange_price": "1266", + "durability": null, + "name": "Steel bar", + "tradeable": "true", + "weight": "1.81", + "archery_ticket_price": "0", + "id": "2353" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1266", + "durability": null, + "name": "Steel bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2354" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of silver.", + "grand_exchange_price": "274", + "durability": null, + "name": "Silver bar", + "tradeable": "true", + "weight": "1.81", + "archery_ticket_price": "0", + "id": "2355" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "274", + "durability": null, + "name": "Silver bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2356" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of gold.", + "grand_exchange_price": "107", + "durability": null, + "name": "Gold bar", + "tradeable": "true", + "weight": "1.81", + "archery_ticket_price": "0", + "id": "2357" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "107", + "durability": null, + "name": "Gold bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2358" + }, + { + "shop_price": "120", + "ge_buy_limit": "10000", + "examine": "It's a bar of mithril.", + "grand_exchange_price": "1920", + "durability": null, + "name": "Mithril bar", + "tradeable": "true", + "weight": "1.6", + "archery_ticket_price": "0", + "id": "2359" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1920", + "durability": null, + "name": "Mithril bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2360" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of adamant.", + "grand_exchange_price": "3306", + "durability": null, + "name": "Adamantite bar", + "tradeable": "true", + "weight": "2.04", + "archery_ticket_price": "0", + "id": "2361" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3306", + "durability": null, + "name": "Adamantite bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2362" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of rune.", + "grand_exchange_price": "13300", + "durability": null, + "name": "Runite bar", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2363" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "13300", + "durability": null, + "name": "Runite bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2364" + }, + { + "examine": "It's a 'perfect' golden bar.", + "durability": null, + "name": "'perfect' gold bar", + "weight": "2", + "archery_ticket_price": "0", + "id": "2365" + }, + { + "requirements": "{13,60}", + "ge_buy_limit": "100", + "examine": "The left half of a Dragon Square Shield.", + "grand_exchange_price": "65800", + "durability": null, + "name": "Shield left half", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2366" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65800", + "durability": null, + "name": "Shield left half", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2367" + }, + { + "requirements": "{13,60}", + "shop_price": "750000", + "ge_buy_limit": "100", + "examine": "The right half of a dragon square shield.", + "grand_exchange_price": "743100", + "durability": null, + "name": "Shield right half", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2368" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "743100", + "durability": null, + "name": "Shield right half", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2369" + }, + { + "shop_price": "100", + "ge_buy_limit": "5000", + "examine": "A set of studs for leather armour.", + "grand_exchange_price": "792", + "durability": null, + "name": "Steel studs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2370" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "792", + "durability": null, + "name": "Steel studs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2371" + }, + { + "destroy_message": "This item will likely break if you put it down, and you will have to go looking for another one.", + "examine": "An old statue of an ogre warrior.", + "durability": null, + "name": "Ogre relic", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2372" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Part of an ogre relic.", + "durability": null, + "name": "Relic part 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2373" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Part of an ogre relic.", + "durability": null, + "name": "Relic part 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2374" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Part of an ogre relic.", + "durability": null, + "name": "Relic part 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2375" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "It's a map.", + "durability": null, + "name": "Skavid map", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "2376" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Very tooth-like.", + "durability": null, + "name": "Ogre tooth", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2377" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Formerly the property of the ogre, Toban", + "durability": null, + "name": "Toban's key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2378" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Handy if you want to break all your teeth.", + "durability": null, + "name": "Rock cake", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2379" + }, + { + "destroy_message": "This item will likely break if you put it down here, and you will have to go looking for another.", + "examine": "Eeeeyeeew!", + "durability": null, + "name": "Fingernails", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2384" + }, + { + "examine": "I can't wear this old thing.", + "durability": null, + "name": "Old robe", + "weight": "1", + "archery_ticket_price": "0", + "id": "2385" + }, + { + "examine": "Looks kind of useless.", + "durability": null, + "name": "Unusual armour", + "weight": "4", + "archery_ticket_price": "0", + "id": "2386" + }, + { + "examine": "Pointy.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Damaged dagger", + "archery_ticket_price": "0", + "id": "2387" + }, + { + "examine": "Useless as an eye patch.", + "durability": null, + "name": "Tattered eye patch", + "archery_ticket_price": "0", + "id": "2388" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "An empty glass vial.", + "grand_exchange_price": "1", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2389" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "An empty glass vial.", + "grand_exchange_price": "1", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2390" + }, + { + "ge_buy_limit": "100", + "examine": "Let's see it fly, now!", + "grand_exchange_price": "350", + "durability": null, + "name": "Ground bat bones", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2391" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "350", + "durability": null, + "name": "Ground bat bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2392" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "It's a stolen bar of gold.", + "durability": null, + "name": "Toban's gold", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2393" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This is meant to be good for spots.", + "grand_exchange_price": "157", + "durability": null, + "name": "Potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2394" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A dangerous magical liquid.", + "durability": null, + "name": "Magic ogre potion", + "archery_ticket_price": "0", + "id": "2395", + "equipment_slot": "3" + }, + { + "examine": "A spell is written on this parchment.", + "durability": null, + "name": "Spell scroll", + "archery_ticket_price": "0", + "id": "2396" + }, + { + "examine": "A tattered old robe.", + "durability": null, + "name": "Shaman robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "2397" + }, + { + "examine": "Deadly.", + "durability": null, + "name": "Cave nightshade", + "archery_ticket_price": "0", + "id": "2398" + }, + { + "turn90cw_anim": "821", + "examine": "The magical sword 'Silverlight'. / The magical sword 'Silverlight', stained black with mushroom ink. (during Shadow of the Storm)", + "walk_anim": "819", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "822", + "attack_speed": "5", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "defence_anim": "388", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "808", + "name": "Silverlight", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "2402", + "stand_turn_anim": "823", + "bonuses": "9,14,-2,0,0,0,3,2,1,0,0,12,0,0,0" + }, + { + "examine": "Scroll containing a powerful enchantment of restoration.", + "durability": null, + "name": "Hazeel scroll", + "weight": "1", + "archery_ticket_price": "0", + "id": "2403" + }, + { + "remove_sleeves": "true", + "examine": "Decorative armour; an heirloom of the Carnillean family.", + "durability": null, + "name": "Carnillean armour", + "weight": "9", + "archery_ticket_price": "0", + "id": "2405", + "bonuses": "0,0,0,0,0,20,14,8,0,0,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "A sign of my commitment to Hazeel.", + "durability": null, + "name": "Hazeel's mark", + "archery_ticket_price": "0", + "id": "2406", + "equipment_slot": "2" + }, + { + "examine": "A child's ball.", + "durability": null, + "name": "Ball", + "archery_ticket_price": "0", + "id": "2407" + }, + { + "examine": "A key to the Witch's house's front door. (Witch's House)", + "durability": null, + "name": "Door key", + "archery_ticket_price": "0", + "id": "2409" + }, + { + "examine": "A very attractive magnet.", + "durability": null, + "name": "Magnet", + "archery_ticket_price": "0", + "id": "2410" + }, + { + "examine": "A cape from the almighty god Saradomin.", + "durability": null, + "name": "Saradomin cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2412", + "bonuses": "0,0,0,10,0,1,1,2,10,0,5,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A cape from the almighty god Guthix.", + "durability": null, + "name": "Guthix cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2413", + "bonuses": "0,0,0,10,0,1,1,2,10,0,5,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A cape from the almighty god Zamorak.", + "durability": null, + "name": "Zamorak cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2414", + "bonuses": "0,0,0,10,0,1,1,2,10,0,5,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "80000", + "examine": "A magical staff imbued with the power of Saradomin.", + "durability": null, + "weight": "2.2", + "attack_speed": "4", + "weapon_interface": "1", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "attack_audios": "2555,0,0,0", + "name": "Saradomin staff", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "2415", + "bonuses": "-1,-1,6,6,0,2,3,1,6,0,0,2,0,0,0" + }, + { + "shop_price": "80000", + "examine": "A magical staff imbued with the power of Guthix.", + "durability": null, + "weight": "2", + "attack_speed": "4", + "weapon_interface": "1", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "attack_audios": "2555,0,0,0", + "name": "Guthix staff", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "2416", + "bonuses": "-1,-1,6,6,0,2,3,1,6,0,0,2,0,0,0" + }, + { + "shop_price": "80000", + "turn90cw_anim": "1207", + "examine": "A magical staff imbued with the power of Zamorak.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Zamorak staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "2417", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,6,6,0,2,3,1,6,0,0,2,0,0,0" + }, + { + "examine": "A grey woollen wig.", + "durability": null, + "name": "Wig", + "archery_ticket_price": "0", + "id": "2419" + }, + { + "examine": "A grey woollen wig.", + "durability": null, + "name": "Wig", + "archery_ticket_price": "0", + "id": "2421" + }, + { + "lendable": "true", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "2147483647", + "durability": null, + "name": "Blue partyhat", + "archery_ticket_price": "0", + "id": "2422" + }, + { + "examine": "Imprint of a key in a lump of clay.", + "durability": null, + "name": "Key print", + "archery_ticket_price": "0", + "id": "2423" + }, + { + "examine": "A bottle of skin coloured paste.", + "durability": null, + "name": "Paste", + "archery_ticket_price": "0", + "id": "2424" + }, + { + "attack_audios": "2704,0,0,0", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2425" + }, + { + "durability": null, + "name": "Burnt oomlie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2427" + }, + { + "shop_price": "8002", + "ge_buy_limit": "100", + "examine": "4 doses of Attack potion.", + "grand_exchange_price": "275", + "durability": null, + "name": "Attack potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2428" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "275", + "durability": null, + "name": "Attack potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2429" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "4 doses of restore potion.", + "grand_exchange_price": "101", + "durability": null, + "name": "Restore potion(4)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "2430" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "101", + "durability": null, + "name": "Restore potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2431" + }, + { + "shop_price": "7832", + "ge_buy_limit": "100", + "examine": "4 doses of Defence Potion.", + "grand_exchange_price": "448", + "durability": null, + "name": "Defence potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2432" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "448", + "durability": null, + "name": "Defence potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2433" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Prayer restore potion.", + "grand_exchange_price": "5687", + "durability": null, + "name": "Prayer potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2434" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5687", + "durability": null, + "name": "Prayer potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2435" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "examine": "4 doses of super Attack potion.", + "grand_exchange_price": "898", + "durability": null, + "name": "Super attack(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2436" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "grand_exchange_price": "898", + "durability": null, + "name": "Super attack(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2437" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Fishing potion.", + "grand_exchange_price": "73", + "durability": null, + "name": "Fishing potion(4)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "2438" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "73", + "durability": null, + "name": "Fishing potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2439" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "examine": "4 doses of super Strength potion.", + "grand_exchange_price": "2278", + "durability": null, + "name": "Super strength(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2440" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "grand_exchange_price": "2278", + "durability": null, + "name": "Super strength(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2441" + }, + { + "shop_price": "7000", + "ge_buy_limit": "1000", + "examine": "4 doses of super Defence potion.", + "grand_exchange_price": "153", + "durability": null, + "name": "Super defence(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2442" + }, + { + "shop_price": "7000", + "ge_buy_limit": "1000", + "grand_exchange_price": "153", + "durability": null, + "name": "Super defence(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2443" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of ranging potion.", + "grand_exchange_price": "8317", + "durability": null, + "name": "Ranging potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2444" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8317", + "durability": null, + "name": "Ranging potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2445" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "4 doses of antipoison potion.", + "grand_exchange_price": "1624", + "durability": null, + "name": "Antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2446" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1624", + "durability": null, + "name": "Antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2447" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of super anti poison potion.", + "grand_exchange_price": "1062", + "durability": null, + "name": "Super antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2448" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1062", + "durability": null, + "name": "Super antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2449" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of Zamorak brew.", + "grand_exchange_price": "2838", + "durability": null, + "name": "Zamorak brew(4)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2450" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2838", + "durability": null, + "name": "Zamorak brew(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2451" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of anti-firebreath potion.", + "grand_exchange_price": "4743", + "durability": null, + "name": "Antifire potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2452" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4743", + "durability": null, + "name": "Antifire potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2453" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of anti-firebreath potion.", + "grand_exchange_price": "3518", + "durability": null, + "name": "Antifire potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2454" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3518", + "durability": null, + "name": "Antifire potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2455" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of anti-firebreath potion.", + "grand_exchange_price": "2291", + "durability": null, + "name": "Antifire potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2456" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2291", + "durability": null, + "name": "Antifire potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2457" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of anti-firebreath potion.", + "grand_exchange_price": "1099", + "durability": null, + "name": "Antifire potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2458" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1099", + "durability": null, + "name": "Antifire potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2459" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "704", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2460", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "704", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2461" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "704", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2462", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "704", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2463" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "638", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2464", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "638", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2465" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "629", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2466", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "629", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2467" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "639", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2468", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "639", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2469" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "613", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2470", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "613", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2471" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "711", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2472", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "711", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2473" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "48700", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2474", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48700", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2475" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "5975", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2476", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5975", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2477" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "7274", + "durability": null, + "name": "Clean lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2481" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7274", + "durability": null, + "name": "Clean lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2482" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this lantadyme potion.", + "grand_exchange_price": "6940", + "durability": null, + "name": "Lantadyme potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2483" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6940", + "durability": null, + "name": "Lantadyme potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2484" + }, + { + "requirements": "{15,67}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2485" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7210", + "durability": null, + "name": "Grimy lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2486" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "1705", + "name": "Blue d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2487", + "bonuses": "0,0,0,-10,9,4,3,5,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1705", + "durability": null, + "name": "Blue d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2488" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "5000", + "examine": "Vambraces made from 100% real dragonhide.", + "durability": null, + "weight": "0.25", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "2046", + "name": "Red d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2489", + "bonuses": "0,0,0,-10,10,5,4,6,6,0,5,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2046", + "durability": null, + "name": "Red d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2490" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "5000", + "examine": "Vambraces made from 100% real dragonhide.", + "durability": null, + "weight": "0.25", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "2506", + "name": "Black d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2491", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2506", + "durability": null, + "name": "Black d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2492" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,5,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2504", + "name": "Blue d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2493", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2504", + "durability": null, + "name": "Blue d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2494" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,6,3", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "3142", + "name": "Red d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2495", + "bonuses": "0,0,0,-10,14,28,22,30,20,28,25,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3142", + "durability": null, + "name": "Red d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2496" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,7,3", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "4744", + "name": "Black d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2497", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4744", + "durability": null, + "name": "Black d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2498" + }, + { + "requirements": "{1,40}-{4,50}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "5420", + "name": "Blue d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2499", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5420", + "durability": null, + "name": "Blue d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2500" + }, + { + "requirements": "{1,40}-{4,60}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "6680", + "name": "Red d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2501", + "bonuses": "0,0,0,-15,25,50,42,55,40,50,50,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "6680", + "durability": null, + "name": "Red d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2502" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "8098", + "name": "Black d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2503", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "8098", + "durability": null, + "name": "Black d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2504" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared blue dragonhide.", + "grand_exchange_price": "2888", + "durability": null, + "name": "Blue d-leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "2505" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2888", + "durability": null, + "name": "Blue d-leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2506" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared red dragonhide.", + "grand_exchange_price": "4464", + "durability": null, + "name": "Red dragon leather", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2507" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4464", + "durability": null, + "name": "Red dragon leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2508" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared black dragonhide.", + "grand_exchange_price": "6664", + "durability": null, + "name": "Black d-leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "2509" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6664", + "durability": null, + "name": "Black d-leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2510" + }, + { + "shop_price": "4", + "examine": "A number of wooden logs.", + "grand_exchange_price": "124", + "durability": null, + "name": "Logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2511" + }, + { + "lendable": "true", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "2902937", + "rare_item": "true", + "durability": null, + "name": "Dragon chainbody", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "2513", + "absorb": "4,0,9", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "shop_price": "6", + "examine": "I should try cooking this.", + "grand_exchange_price": "6", + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2514" + }, + { + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2515" + }, + { + "shop_price": "14", + "examine": "There is flour in this pot.", + "grand_exchange_price": "162", + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "2516" + }, + { + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2517" + }, + { + "shop_price": "1", + "examine": "Pretty smelly.", + "durability": null, + "name": "Rotten tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2518" + }, + { + "durability": null, + "name": "Rotten tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2519" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2520" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2521" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2522" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2523" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2524" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2525" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2526" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2527" + }, + { + "bankable": "false", + "examine": "Wonder what happens if I rub it...", + "durability": null, + "name": "Lamp", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2528" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "2529" + }, + { + "shop_price": "140", + "grand_exchange_price": "140", + "durability": null, + "name": "Bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2530" + }, + { + "durability": null, + "name": "Bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2531" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with iron heads and oil-soaked cloth. lit: An easy to make, iron-headed fire arrow.", + "grand_exchange_price": "316", + "durability": null, + "name": "Iron fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2532", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with iron heads and oil-soaked cloth. lit: An easy to make, iron-headed fire arrow.", + "grand_exchange_price": "305", + "durability": null, + "name": "Iron fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2533", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with steel heads and oil-soaked cloth. lit: An easy to make, steel-headed fire arrow.", + "grand_exchange_price": "325", + "durability": null, + "name": "Steel fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2534", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with steel heads and oil-soaked cloth. lit: An easy to make, steel-headed fire arrow.", + "grand_exchange_price": "327", + "durability": null, + "name": "Steel fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2535", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with mithril heads and oil-soaked cloth. lit: An easy to make, mithril-headed fire arrow.", + "grand_exchange_price": "9", + "durability": null, + "name": "Mithril fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2536", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with mithril heads and oil-soaked cloth. lit: An easy to make, mithril-headed fire arrow.", + "grand_exchange_price": "63", + "durability": null, + "name": "Mithril fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2537", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with adamant heads and oil-soaked cloth.lit: An easy-to-make, Adamant-headed fire arrow.", + "grand_exchange_price": "90", + "durability": null, + "name": "Adamant fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2538", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with adamant heads and oil-soaked cloth.lit: An easy-to-make, Adamant-headed fire arrow.", + "grand_exchange_price": "127", + "durability": null, + "name": "Adamant fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2539", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "An easy to make, rune-headed fire arrow.", + "grand_exchange_price": "539", + "durability": null, + "name": "Rune fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2540", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "An easy to make, rune-headed fire arrow.", + "grand_exchange_price": "682", + "durability": null, + "name": "Rune fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2541", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "5000", + "examine": "An enchanted ring.", + "grand_exchange_price": "943", + "durability": null, + "name": "Ring of recoil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2550", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "943", + "durability": null, + "name": "Ring of recoil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2551" + }, + { + "shop_price": "770", + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "1237", + "durability": null, + "name": "Ring of duelling(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2552", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1237", + "durability": null, + "name": "Ring of duelling(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2553" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2554", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2555" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2556", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2557" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2558", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2559" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2560", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2561" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2562", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2563" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2564", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2565" + }, + { + "shop_price": "770", + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "594", + "durability": null, + "name": "Ring of duelling(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2566", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "594", + "durability": null, + "name": "Ring of duelling(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2567" + }, + { + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "1103", + "durability": null, + "name": "Ring of forging", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2568", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1103", + "durability": null, + "name": "Ring of forging", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2569" + }, + { + "shop_price": "3000", + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "4540", + "durability": null, + "name": "Ring of life", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2570", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4540", + "durability": null, + "name": "Ring of life", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2571" + }, + { + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2572", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2573" + }, + { + "examine": "Used by navigators to find their position in RuneScape.", + "durability": null, + "name": "Sextant", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2574" + }, + { + "examine": "A fine looking time piece.", + "durability": null, + "name": "Watch", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2575" + }, + { + "examine": "A navigator's chart of RuneScape.", + "durability": null, + "name": "Chart", + "archery_ticket_price": "0", + "id": "2576" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Lightweight boots ideal for rangers.", + "durability": null, + "weight": "0.2", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "13900000", + "name": "Ranger boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2577", + "bonuses": "0,0,0,-10,8,2,3,4,2,0,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "13900000", + "durability": null, + "name": "Ranger boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2578" + }, + { + "requirements": "{6,20}", + "ge_buy_limit": "2", + "examine": "Slightly magical boots.", + "durability": null, + "weight": "1", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "747300", + "name": "Wizard boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2579", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "747300", + "durability": null, + "name": "Wizard boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2580" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Endorsed by Robin Hood.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "4400000", + "name": "Robin hood hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2581", + "bonuses": "0,0,0,-10,8,4,6,8,4,4,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "4400000", + "durability": null, + "name": "Robin hood hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2582" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "74900", + "name": "Black platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2583", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "74900", + "durability": null, + "name": "Black platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2584" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platelegs with trim.", + "grand_exchange_price": "39900", + "durability": null, + "name": "Black platelegs (t)", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "2585", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "39900", + "durability": null, + "name": "Black platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2586" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "100", + "examine": "Black full helmet with trim.", + "durability": null, + "weight": "2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "82200", + "name": "Black full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2587", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "82200", + "durability": null, + "name": "Black full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2588" + }, + { + "requirements": "{1,10}", + "shop_price": "2072", + "ge_buy_limit": "2", + "examine": "Black kiteshield with trim.", + "durability": null, + "weight": "5", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "73000", + "name": "Black kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2589", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "73000", + "durability": null, + "name": "Black kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2590" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "589000", + "name": "Black platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2591", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "589000", + "durability": null, + "name": "Black platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2592" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platelegs with gold trim.", + "grand_exchange_price": "216700", + "durability": null, + "name": "Black platelegs (g)", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "2593", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "216700", + "durability": null, + "name": "Black platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2594" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "100", + "examine": "Black full helmet with gold trim.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "364800", + "name": "Black full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2595", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "364800", + "durability": null, + "name": "Black full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2596" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black kiteshield with gold trim.", + "durability": null, + "weight": "5", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "355600", + "name": "Black kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2597", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "355600", + "durability": null, + "name": "Black kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2598" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "104000", + "name": "Adam platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2599", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "104000", + "durability": null, + "name": "Adam platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2600" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "2", + "examine": "These look heavy", + "durability": null, + "weight": "10", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "23200", + "name": "Adam platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2601", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "23200", + "durability": null, + "name": "Adam platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2602" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.8", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "49100", + "name": "Adam kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2603", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "49100", + "durability": null, + "name": "Adam kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2604" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant full helm with trim", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "85000", + "name": "Adam full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2605", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "85000", + "durability": null, + "name": "Adam full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2606" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "359500", + "name": "Adam platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2607", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "359500", + "durability": null, + "name": "Adam platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2608" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "2", + "examine": "Adamant platelegs with gold trim.", + "durability": null, + "weight": "10", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "94300", + "name": "Adam platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2609", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "94300", + "durability": null, + "name": "Adam platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2610" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant kiteshield with gold trim.", + "durability": null, + "weight": "6", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "170100", + "name": "Adam kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2611", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "170100", + "durability": null, + "name": "Adam kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2612" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant full helmet with gold trim.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "222400", + "name": "Adam full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2613", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "222400", + "durability": null, + "name": "Adam full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2614" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "426200", + "name": "Rune platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2615", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "426200", + "durability": null, + "name": "Rune platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2616" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "ge_buy_limit": "2", + "examine": "Rune platelegs with gold trim.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "243400", + "name": "Rune platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2617", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "243400", + "durability": null, + "name": "Rune platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2618" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "35000", + "ge_buy_limit": "100", + "examine": "Rune full helmet with gold trim.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "506800", + "name": "Rune full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2619", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "506800", + "durability": null, + "name": "Rune full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2620" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield with gold trim", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "392700", + "name": "Rune kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2621", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "392700", + "durability": null, + "name": "Rune kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2622" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "162700", + "name": "Rune platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2623", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "162700", + "durability": null, + "name": "Rune platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2624" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs with trim!", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "95400", + "name": "Rune platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2625", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "95400", + "durability": null, + "name": "Rune platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2626" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune full helmet with trim.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "216600", + "name": "Rune full helm (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2627", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "216600", + "durability": null, + "name": "Rune full helm (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2628" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A large, metal shield with a nice trim.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "160300", + "name": "Rune kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2629", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "160300", + "durability": null, + "name": "Rune kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2630" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Your money or your life!", + "grand_exchange_price": "83500", + "durability": null, + "name": "Highwayman mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2631", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "83500", + "durability": null, + "name": "Highwayman mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2632" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "34300", + "durability": null, + "name": "Blue beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2633", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "34300", + "durability": null, + "name": "Blue beret", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2634" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Parlez-vous francais?(Do you speak French?)", + "grand_exchange_price": "117500", + "durability": null, + "name": "Black beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2635", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "117500", + "durability": null, + "name": "Black beret", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2636" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "328000", + "durability": null, + "name": "White beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2637", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "328000", + "durability": null, + "name": "White beret", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2638" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "All for one and one for all!", + "grand_exchange_price": "29100", + "durability": null, + "name": "Tan cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2639", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "29100", + "durability": null, + "name": "Tan cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2640" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "All for one and one for all!", + "grand_exchange_price": "23600", + "durability": null, + "name": "Dark cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2641", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "23600", + "durability": null, + "name": "Dark cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2642" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "All for one and one for all!", + "grand_exchange_price": "384500", + "durability": null, + "name": "Black cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2643", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "384500", + "durability": null, + "name": "Black cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2644" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A minimalist's hat.", + "grand_exchange_price": "91300", + "durability": null, + "name": "Red headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2645", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "91300", + "durability": null, + "name": "Red headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2646" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A minimalist's hat.", + "grand_exchange_price": "32900", + "durability": null, + "name": "Black headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2647", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32900", + "durability": null, + "name": "Black headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2648" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A minimalist's hat.", + "grand_exchange_price": "17800", + "durability": null, + "name": "Brown headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2649", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "17800", + "durability": null, + "name": "Brown headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2650" + }, + { + "ge_buy_limit": "2", + "examine": "Shiver me timbers!", + "grand_exchange_price": "82500", + "durability": null, + "name": "Pirate's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2651", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "82500", + "durability": null, + "name": "Pirate's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2652" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "809000", + "name": "Zamorak platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2653", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "809000", + "durability": null, + "name": "Zamorak platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2654" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "281500", + "name": "Zamorak platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2655", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "281500", + "durability": null, + "name": "Zamorak platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2656" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A full helmet in the colours of Zamorak.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "601500", + "name": "Zamorak full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2657", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "601500", + "durability": null, + "name": "Zamorak full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2658" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A Rune kiteshield in the colours of Zamorak.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "499500", + "name": "Zamorak kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2659", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "499500", + "durability": null, + "name": "Zamorak kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2660" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody in the colours of Saradomin.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "1600000", + "name": "Saradomin platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2661", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Saradomin platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2662" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs in the colours of Saradomin.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "444000", + "name": "Saradomin platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2663", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "444000", + "durability": null, + "name": "Saradomin platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2664" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune full helmet in the colours of Saradomin.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1100000", + "name": "Saradomin full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2665", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Saradomin full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2666" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield in the colours of Saradomin.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "795900", + "name": "Saradomin kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2667", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "795900", + "durability": null, + "name": "Saradomin kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2668" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody in the colours of Guthix.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "307900", + "name": "Guthix platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2669", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "307900", + "durability": null, + "name": "Guthix platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2670" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs in the colours of Guthix.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "169900", + "name": "Guthix platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2671", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "169900", + "durability": null, + "name": "Guthix platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2672" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune full helmet in the colours of Guthix.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "323100", + "name": "Guthix full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2673", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,1,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "323100", + "durability": null, + "name": "Guthix full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2674" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield in the colours of Guthix.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "247300", + "name": "Guthix kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2675", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "247300", + "durability": null, + "name": "Guthix kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2676" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2677" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2678" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2679" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2680" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2681" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2682" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2683" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2684" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2685" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2686" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2687" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2688" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2689" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2690" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2691" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2692" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2693" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2694" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2695" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2696" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2697" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2698" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2699" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2700" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2701" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2702" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2703" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2704" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2705" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2706" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2707" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2708" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2709" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2710" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2711" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2712" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2713" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2714" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2715" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2716" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2717" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2718" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2719" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2720" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2721" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2722" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2723" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2724" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2725" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2726" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2727" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2728" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2729" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2730" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2731" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2732" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2733" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2734" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2735" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2736" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2737" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2738" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2739" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2740" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2741" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2742" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2743" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2744" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2745" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2746" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2747" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2748" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2773" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2774" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2775" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2776" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2777" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2778" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2779" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2780" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2781" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2782" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2783" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2784" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2785" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2786" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2787" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2788" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2789" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2790" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2791" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2792" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2793" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2794" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "2795" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2796" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2797" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "2798" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2799" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "2800" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2801" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2802" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2803" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2804" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2805" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2806" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2807" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2808" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2809" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2810" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2811" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2812" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2813" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2814" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2815" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2816" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2817" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2818" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2819" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2820" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2821" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2822" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2823" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2824" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2825" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2826" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2827" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2828" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2829" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2830" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2831" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2833" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2835" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2837" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2839" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2841" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2842" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2843" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2844" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2845" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2846" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2847" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2848" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2849" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2850" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2851" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2852" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2853" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2854" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2855" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2856" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2857" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2858" + }, + { + "ge_buy_limit": "1000", + "examine": "Bones of a recently slain wolf.", + "grand_exchange_price": "1266", + "durability": null, + "name": "Wolf bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2859" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1266", + "durability": null, + "name": "Wolf bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2860" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "I can make an ogre arrow with these.", + "grand_exchange_price": "5", + "durability": null, + "name": "Wolfbone arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2861" + }, + { + "ge_buy_limit": "25000", + "examine": "These logs are longer than normal.", + "grand_exchange_price": "169", + "durability": null, + "name": "Achey tree logs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2862" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "169", + "durability": null, + "name": "Achey tree logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2863" + }, + { + "ge_buy_limit": "1000", + "examine": "A wooden arrow shaft", + "grand_exchange_price": "47", + "durability": null, + "name": "Ogre arrow shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2864" + }, + { + "ge_buy_limit": "1000", + "examine": "An ogre arrow with four flights attached.", + "grand_exchange_price": "172", + "durability": null, + "name": "Flighted ogre arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2865" + }, + { + "requirements": "{4,30}", + "shop_price": "25", + "ge_buy_limit": "1000", + "examine": "A large ogre arrow with a bone tip.", + "grand_exchange_price": "49", + "durability": null, + "name": "Ogre arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2866", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows", + "archery_ticket_price": "0", + "id": "2871", + "equipment_slot": "3" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows (3)", + "archery_ticket_price": "0", + "id": "2872" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows (2)", + "archery_ticket_price": "0", + "id": "2873" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows (1)", + "archery_ticket_price": "0", + "id": "2874" + }, + { + "bankable": "false", + "examine": "An inflated toad.", + "durability": null, + "name": "Bloated toad", + "tradeable": "false", + "destroy": "true", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "2875" + }, + { + "ge_buy_limit": "10000", + "examine": "I need to cook this first.", + "grand_exchange_price": "2145", + "durability": null, + "name": "Raw chompy", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "2876" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2145", + "durability": null, + "name": "Raw chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2877" + }, + { + "shop_price": "130", + "ge_buy_limit": "1000", + "examine": "It might look delicious to an ogre.Roasted chompy bird.", + "grand_exchange_price": "95", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "2878" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "95", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2879" + }, + { + "durability": null, + "name": "Ruined chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2881" + }, + { + "examine": "It has been deliciously seasoned to taste wonderful for ogres.", + "durability": null, + "name": "Seasoned chompy", + "weight": "10", + "archery_ticket_price": "0", + "id": "2882" + }, + { + "requirements": "{4,30}", + "shop_price": "500", + "examine": "More powerful than a normal bow, useful against large game birds.", + "durability": null, + "weight": "1", + "attack_speed": "8", + "two_handed": "true", + "weapon_interface": "16", + "equipment_slot": "3", + "attack_audios": "2700,0,0,0", + "name": "Ogre bow", + "archery_ticket_price": "0", + "id": "2883", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Book of the elemental shield.", + "durability": null, + "name": "Battered book", + "archery_ticket_price": "0", + "id": "2886" + }, + { + "examine": "An old battered key. (Elemental Workshop I)", + "durability": null, + "name": "Battered key", + "archery_ticket_price": "0", + "id": "2887" + }, + { + "examine": "This is an empty stone bowl. / This is a stone bowl full of lava.", + "durability": null, + "name": "A stone bowl", + "archery_ticket_price": "0", + "id": "2888", + "equipment_slot": "3" + }, + { + "examine": "This is an empty stone bowl. / This is a stone bowl full of lava.", + "durability": null, + "name": "A stone bowl", + "archery_ticket_price": "0", + "id": "2889", + "equipment_slot": "3" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A shield made in the Elemental Workshop.", + "grand_exchange_price": "709", + "durability": null, + "name": "Elemental shield", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2890", + "bonuses": "0,0,0,0,0,0,0,0,6,0,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "709", + "durability": null, + "name": "Elemental shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2891" + }, + { + "examine": "This needs refining.", + "durability": null, + "name": "Elemental ore", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "2892" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "1570", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2894", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1570", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2895" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "867", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2896", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "867", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2897" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "741", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2898", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "741", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2899" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "844", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2900", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "844", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2901" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1039", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2902", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1039", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2903" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "1359", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2904", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1359", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2905" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "958", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2906", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "958", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2907" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "474", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2908", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "474", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2909" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "1445", + "tradeable": "true", + "name": "Hat", + "archery_ticket_price": "0", + "hat": "true", + "id": "2910", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1445", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2911" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1254", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2912", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1254", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2913" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "1054", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2914", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1054", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2915" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "789", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2916", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "789", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2917" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "603", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2918", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "603", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2919" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "997", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2920", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "997", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2921" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1221", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2922", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1221", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2923" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "737", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2924", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "737", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2925" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "504", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2926", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "504", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2927" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "637", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2928", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "637", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2929" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "925", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2930", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "925", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2931" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1829", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2932", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1829", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2933" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "988", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2934", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "988", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2935" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "925", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2936", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "925", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2937" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "927", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2938", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "927", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2939" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "1209", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2940", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1209", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2941" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "634", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2942", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "634", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2943" + }, + { + "examine": "A key made from solid gold", + "durability": null, + "name": "Golden key", + "archery_ticket_price": "0", + "id": "2944" + }, + { + "examine": "A key made of solid iron.", + "durability": null, + "name": "Iron key", + "archery_ticket_price": "0", + "id": "2945" + }, + { + "examine": "A replica tinderbox made of solid gold.", + "durability": null, + "name": "Golden tinderbox", + "archery_ticket_price": "0", + "id": "2946" + }, + { + "examine": "A replica candle made of solid gold.", + "durability": null, + "name": "Golden candle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2947" + }, + { + "examine": "A replica pot made of solid gold.", + "durability": null, + "name": "Golden pot", + "archery_ticket_price": "0", + "id": "2948" + }, + { + "examine": "A replica hammer made of solid gold.", + "durability": null, + "name": "Golden hammer", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "2949" + }, + { + "examine": "A replica needle made of solid gold.", + "durability": null, + "name": "Golden needle", + "archery_ticket_price": "0", + "id": "2951" + }, + { + "examine": "A silver dagger that can prevent werewolves changing form.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "attack_audios": "2517,2517,2500,2517", + "name": "Wolfbane", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "2952", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,1,10,5,0,0" + }, + { + "examine": "It's a bucket of water.", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2953" + }, + { + "examine": "It's a bucket of water.", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2954" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "16", + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2955" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2956" + }, + { + "examine": "An empty druid pouch.", + "durability": null, + "name": "Druid pouch", + "archery_ticket_price": "0", + "id": "2957" + }, + { + "examine": "A druid pouch.", + "durability": null, + "name": "Druid pouch", + "archery_ticket_price": "0", + "id": "2958" + }, + { + "examine": "Erhhh! It stinks.", + "durability": null, + "name": "Rotten food", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2959" + }, + { + "durability": null, + "name": "Rotten food", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2960" + }, + { + "ge_buy_limit": "100", + "examine": "It's a silver sickle.", + "durability": null, + "weight": "1.6", + "weapon_interface": "6", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "28", + "name": "Silver sickle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2961", + "bonuses": "0,0,0,0,0,0,1,1,1,1,0,1,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28", + "durability": null, + "name": "Silver sickle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2962" + }, + { + "attack_anims": "390,390,381,390", + "examine": "It's a blessed silver sickle.", + "durability": null, + "name": "Silver sickle(b)", + "weight": "1.5", + "archery_ticket_price": "0", + "weapon_interface": "6", + "id": "2963", + "bonuses": "0,0,0,0,0,0,1,1,1,1,0,1,5,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "shop_price": "1", + "examine": "Used for washing your face, amongst other things.", + "durability": null, + "name": "Washing bowl", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2964" + }, + { + "examine": "A small mirror, probably used for grooming.", + "durability": null, + "name": "Mirror", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2966" + }, + { + "examine": "A druidic spell given to you freely by the spirit of Filliman Tarlock.", + "durability": null, + "name": "Druidic spell", + "archery_ticket_price": "0", + "id": "2968" + }, + { + "examine": "A used druidic spell given to you freely by the spirit of Filliman Tarlock.", + "durability": null, + "name": "A used spell", + "archery_ticket_price": "0", + "id": "2969" + }, + { + "ge_buy_limit": "10000", + "examine": "A mushroom from the swamps of Mort Myre.", + "grand_exchange_price": "915", + "durability": null, + "name": "Mort myre fungus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2970" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "915", + "durability": null, + "name": "Mort myre fungus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2971" + }, + { + "ge_buy_limit": "100", + "examine": "A cutting from a budding branch.", + "grand_exchange_price": "338", + "durability": null, + "name": "Mort myre stem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2972" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "338", + "durability": null, + "name": "Mort myre stem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2973" + }, + { + "ge_buy_limit": "100", + "examine": "A pear picked from a dying bush in Mort Myre.", + "grand_exchange_price": "975", + "durability": null, + "name": "Mort myre pear", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2974" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "975", + "durability": null, + "name": "Mort myre pear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2975" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Used to make sickles.", + "grand_exchange_price": "498", + "durability": null, + "name": "Sickle mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2976" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "498", + "durability": null, + "name": "Sickle mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2977" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2978", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2979", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2980", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2981", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2982", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2983", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2984", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2985", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2986", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2987", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2988", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2989", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2990", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2991", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2992", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2993", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2994", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2995", + "equipment_slot": "0" + }, + { + "examine": "I can exchange these for further experience or items.", + "durability": null, + "name": "Agility arena ticket", + "archery_ticket_price": "0", + "id": "2996" + }, + { + "shop_price": "800", + "ge_buy_limit": "10", + "examine": "You should see the shark...", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Pirate's hook", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2997", + "bonuses": "0,0,0,0,0,1,5,3,0,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "4056", + "durability": null, + "name": "Clean toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2998" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4056", + "durability": null, + "name": "Clean toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2999" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "10500", + "durability": null, + "name": "Clean snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3000" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "10500", + "durability": null, + "name": "Clean snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3001" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this toadflax potion.", + "grand_exchange_price": "3988", + "durability": null, + "name": "Toadflax potion(unf)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3002" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3988", + "durability": null, + "name": "Toadflax potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3003" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this snapdragon potion.", + "grand_exchange_price": "9588", + "durability": null, + "name": "Snapdragon potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3004" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9588", + "durability": null, + "name": "Snapdragon potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3005" + }, + { + "shop_price": "150", + "examine": "Keep out of reach of children and familiars.", + "durability": null, + "name": "Firework", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3006" + }, + { + "durability": null, + "name": "Firework", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3007" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "4 doses of energy potion.", + "grand_exchange_price": "33", + "durability": null, + "name": "Energy potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3008" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "33", + "durability": null, + "name": "Energy potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3009" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "3 doses of energy potion.", + "grand_exchange_price": "18", + "durability": null, + "name": "Energy potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3010" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Energy potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3011" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "2 doses of energy potion.", + "grand_exchange_price": "11", + "durability": null, + "name": "Energy potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3012" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Energy potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3013" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "1 dose of energy potion.", + "grand_exchange_price": "25", + "durability": null, + "name": "Energy potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3014" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Energy potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3015" + }, + { + "shop_price": "4000", + "ge_buy_limit": "1000", + "examine": "4 doses of super energy potion.", + "grand_exchange_price": "3088", + "durability": null, + "name": "Super energy(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3016" + }, + { + "shop_price": "4000", + "ge_buy_limit": "1000", + "grand_exchange_price": "3088", + "durability": null, + "name": "Super energy(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3017" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super energy potion.", + "grand_exchange_price": "2485", + "durability": null, + "name": "Super energy(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3018" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2485", + "durability": null, + "name": "Super energy(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3019" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super energy potion.", + "grand_exchange_price": "1592", + "durability": null, + "name": "Super energy(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3020" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1592", + "durability": null, + "name": "Super energy(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3021" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super energy potion.", + "grand_exchange_price": "1432", + "durability": null, + "name": "Super energy(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3022" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1432", + "durability": null, + "name": "Super energy(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3023" + }, + { + "shop_price": "12000", + "ge_buy_limit": "1000", + "examine": "4 doses of super restore potion.", + "grand_exchange_price": "11500", + "durability": null, + "name": "Super restore(4)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3024" + }, + { + "shop_price": "12000", + "ge_buy_limit": "1000", + "grand_exchange_price": "11500", + "durability": null, + "name": "Super restore(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3025" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super restore potion.", + "grand_exchange_price": "8690", + "durability": null, + "name": "Super restore(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3026" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8690", + "durability": null, + "name": "Super restore(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3027" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super restore potion.", + "grand_exchange_price": "5637", + "durability": null, + "name": "Super restore(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3028" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5637", + "durability": null, + "name": "Super restore(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3029" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super restore potion.", + "grand_exchange_price": "2606", + "durability": null, + "name": "Super restore(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3030" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2606", + "durability": null, + "name": "Super restore(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3031" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Agility potion.", + "grand_exchange_price": "276", + "durability": null, + "name": "Agility potion(4)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3032" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "276", + "durability": null, + "name": "Agility potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3033" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Agility potion.", + "grand_exchange_price": "148", + "durability": null, + "name": "Agility potion(3)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3034" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "148", + "durability": null, + "name": "Agility potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3035" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Agility potion.", + "grand_exchange_price": "115", + "durability": null, + "name": "Agility potion(2)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3036" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "115", + "durability": null, + "name": "Agility potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3037" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Agility potion.", + "grand_exchange_price": "306", + "durability": null, + "name": "Agility potion(1)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3038" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "306", + "durability": null, + "name": "Agility potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3039" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Magic potion.", + "grand_exchange_price": "7214", + "durability": null, + "name": "Magic potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3040" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7214", + "durability": null, + "name": "Magic potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3041" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Magic potion.", + "grand_exchange_price": "5285", + "durability": null, + "name": "Magic potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3042" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5285", + "durability": null, + "name": "Magic potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3043" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Magic potion.", + "grand_exchange_price": "3697", + "durability": null, + "name": "Magic potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3044" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3697", + "durability": null, + "name": "Magic potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3045" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Magic potion.", + "grand_exchange_price": "1826", + "durability": null, + "name": "Magic potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3046" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1826", + "durability": null, + "name": "Magic potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3047" + }, + { + "durability": null, + "name": "Pirate's hook", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3048" + }, + { + "requirements": "{15,30}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "3996", + "durability": null, + "name": "Grimy toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3049" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3996", + "durability": null, + "name": "Grimy toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3050" + }, + { + "requirements": "{15,59}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "10500", + "durability": null, + "name": "Grimy snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3051" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "10500", + "durability": null, + "name": "Grimy snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3052" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9985", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3053", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Lava battlestaff" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "34100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3054", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "shop_price": "160", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic lava staff" + }, + { + "durability": null, + "name": "Lava battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3055" + }, + { + "durability": null, + "name": "Mystic lava staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3056" + }, + { + "examine": "A mime would wear this.", + "durability": null, + "name": "Mime mask", + "archery_ticket_price": "0", + "id": "3057", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime top", + "archery_ticket_price": "0", + "id": "3058", + "equipment_slot": "4" + }, + { + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime legs", + "archery_ticket_price": "0", + "id": "3059", + "equipment_slot": "7" + }, + { + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime gloves", + "archery_ticket_price": "0", + "id": "3060", + "equipment_slot": "9" + }, + { + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime boots", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3061", + "equipment_slot": "10" + }, + { + "examine": "It seems to be humming...", + "durability": null, + "name": "Strange box", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3062" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "628", + "attack_audios": "2547,0,0,0", + "name": "Black dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3093", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "740", + "attack_audios": "2547,0,0,0", + "name": "Black dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3094", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "48", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "702", + "name": "Bronze claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3095", + "bonuses": "3,4,-4,0,0,1,2,1,0,0,0,5,0,0,0" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "13", + "name": "Iron claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3096", + "bonuses": "4,6,-4,0,0,2,3,1,0,0,0,7,0,0,0" + }, + { + "requirements": "{0,5}", + "shop_price": "175", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "20", + "name": "Steel claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3097", + "bonuses": "8,11,-4,0,0,3,6,2,0,0,0,12,0,0,0" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "6", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "940", + "name": "Black claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3098", + "bonuses": "10,14,-4,0,0,4,7,2,0,0,0,14,0,0,0" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "114", + "name": "Mithril claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3099", + "bonuses": "11,16,-4,0,0,4,8,2,0,0,0,17,0,0,0" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "649", + "name": "Adamant claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3100", + "bonuses": "18,23,-4,0,0,6,12,3,0,0,0,24,0,0,0" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "has_special": "true", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "lendable": "true", + "grand_exchange_price": "6939", + "name": "Rune claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3101", + "bonuses": "26,38,-4,0,0,10,19,5,0,0,0,39,0,0,0" + }, + { + "examine": "The combination to Burthorpe Castle's equipment room.", + "durability": null, + "name": "Combination", + "archery_ticket_price": "0", + "id": "3102" + }, + { + "examine": "The guard wrote the IOU on the back of some paper.", + "durability": null, + "name": "Iou", + "archery_ticket_price": "0", + "id": "3103" + }, + { + "examine": "This map shows the secret way up to Death Plateau.", + "durability": null, + "name": "Secret way map", + "archery_ticket_price": "0", + "id": "3104" + }, + { + "shop_price": "1900", + "ge_buy_limit": "100", + "examine": "Boots made for general climbing; rocks a speciality.", + "durability": null, + "destroy": "true", + "weight": "0.3", + "equipment_slot": "10", + "grand_exchange_price": "51400", + "name": "Climbing boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3105", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,2,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "51400", + "durability": null, + "name": "Climbing boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3106" + }, + { + "examine": "Climbing boots with spikes.", + "durability": null, + "name": "Spiked boots", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3107", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,2,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3109" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3110" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3111" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3112" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3113" + }, + { + "examine": "Entrance certificate to the Imperial Guard.", + "durability": null, + "name": "Certificate", + "archery_ticket_price": "0", + "id": "3114" + }, + { + "durability": null, + "name": "Bronze claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3115" + }, + { + "durability": null, + "name": "Iron claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3116" + }, + { + "durability": null, + "name": "Steel claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3117" + }, + { + "durability": null, + "name": "Black claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3118" + }, + { + "durability": null, + "name": "Mithril claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3119" + }, + { + "durability": null, + "name": "Adamant claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3120" + }, + { + "durability": null, + "name": "Rune claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3121" + }, + { + "requirements": "{1,50}-{2,50}", + "ge_buy_limit": "10", + "examine": "A solid stone shield.", + "durability": null, + "weight": "6.8", + "absorb": "5,0,10", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "34800", + "name": "Granite shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3122", + "bonuses": "0,0,0,-12,-8,40,42,38,0,65,50,0,0,0,0" + }, + { + "ge_buy_limit": "10000", + "examine": "Large glistening bones which glow with a pale yellow aura.", + "grand_exchange_price": "1975", + "durability": null, + "name": "Shaikahan bones", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "3123" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1975", + "durability": null, + "name": "Shaikahan bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3124" + }, + { + "ge_buy_limit": "10000", + "examine": "Fairly big bones which smell distinctly of Jogre.", + "grand_exchange_price": "1023", + "durability": null, + "name": "Jogre bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "3125" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1023", + "durability": null, + "name": "Jogre bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3126" + }, + { + "examine": "These blackened Jogre bones have been somehow burnt.", + "durability": null, + "name": "Burnt jogre bones", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "3127" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3128" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3129" + }, + { + "examine": "Burnt Jogre bones marinated in lovely Karambwanji sauce. Perfect./Burnt Jogre bones marinated in lovely Karabwanji sauce. Not quite right.", + "durability": null, + "name": "Marinated j' bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3130" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3131" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3132" + }, + { + "examine": "Burnt Jogre bones marinated in lovely Karambwanji sauce. Perfect./Burnt Jogre bones marinated in lovely Karabwanji sauce. Not quite right.", + "durability": null, + "name": "Marinated j' bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3133" + }, + { + "durability": null, + "name": "Granite shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3134" + }, + { + "shop_price": "1", + "examine": "The key to the troll prison.", + "durability": null, + "name": "Cell key 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3136" + }, + { + "examine": "The key to the troll prison.", + "durability": null, + "name": "Cell key 2", + "weight": "1", + "archery_ticket_price": "0", + "id": "3137" + }, + { + "ge_buy_limit": "10000", + "examine": "How am I supposed to eat that?!", + "grand_exchange_price": "1834", + "durability": null, + "name": "Potato cactus", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3138" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1834", + "durability": null, + "name": "Potato cactus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3139" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "A series of connected metal rings.", + "rare_item": "true", + "durability": null, + "weight": "6.8", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "4300000", + "name": "Dragon chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3140", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "4300000", + "durability": null, + "name": "Dragon chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3141" + }, + { + "shop_price": "440", + "ge_buy_limit": "20000", + "examine": "A raw green octopus.", + "grand_exchange_price": "1775", + "durability": null, + "name": "Raw karambwan", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3142" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "1775", + "durability": null, + "name": "Raw karambwan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3143" + }, + { + "shop_price": "460", + "ge_buy_limit": "10000", + "examine": "Cooked octopus.", + "grand_exchange_price": "1455", + "durability": null, + "name": "Cooked karambwan", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3144" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1455", + "durability": null, + "name": "Cooked karambwan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3145" + }, + { + "examine": "Cooked octopus. It looks poorly cooked and quite dangerous.", + "durability": null, + "name": "Poison karambwan", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3146" + }, + { + "shop_price": "460", + "examine": "Cooked octopus.", + "grand_exchange_price": "906", + "durability": null, + "name": "Cooked karambwan", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3147" + }, + { + "durability": null, + "name": "Burnt karambwan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3149" + }, + { + "examine": "Small brightly coloured tropical fish.", + "durability": null, + "name": "Raw karambwanji", + "archery_ticket_price": "0", + "id": "3150" + }, + { + "examine": "Small brightly coloured tropical fish.", + "durability": null, + "name": "Karambwanji", + "weight": "0.99", + "archery_ticket_price": "0", + "id": "3151" + }, + { + "examine": "Freshly made octopus paste. It smells quite nauseating.", + "durability": null, + "name": "Karambwan paste", + "archery_ticket_price": "0", + "id": "3152" + }, + { + "examine": "Freshly made octopus paste. It smells quite nauseating.", + "durability": null, + "name": "Karambwan paste", + "archery_ticket_price": "0", + "id": "3153" + }, + { + "examine": "Freshly made octopus paste. It smells quite nauseating.", + "durability": null, + "name": "Karambwan paste", + "archery_ticket_price": "0", + "id": "3154" + }, + { + "examine": "This paste smells of raw fish./This paste smells of cooked fish.", + "durability": null, + "name": "Karambwanji paste", + "archery_ticket_price": "0", + "id": "3155" + }, + { + "examine": "This paste smells of raw fish./This paste smells of cooked fish.", + "durability": null, + "name": "Karambwanji paste", + "archery_ticket_price": "0", + "id": "3156" + }, + { + "requirements": "{10,65}", + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A wide bodied and thin necked vessel, encrusted with sea salt. / The Karambwan Vessel is loaded with Karambwanji", + "grand_exchange_price": "221", + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "3157", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "221", + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3158" + }, + { + "requirements": "{10,65}", + "shop_price": "5", + "examine": "A wide bodied and thin necked vessel, encrusted with sea salt. / The Karambwan Vessel is loaded with Karambwanji", + "grand_exchange_price": "240", + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "3159" + }, + { + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3160" + }, + { + "examine": "A set of instructions explaining how to construct a Karambwan vessel", + "durability": null, + "name": "Crafting manual", + "archery_ticket_price": "0", + "id": "3161" + }, + { + "ge_buy_limit": "100", + "examine": "You swear you had more than three slices before.", + "grand_exchange_price": "38", + "durability": null, + "name": "Sliced banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3162" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38", + "durability": null, + "name": "Sliced banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3163" + }, + { + "shop_price": "27", + "examine": "A very strong spirit brewed in Karamja.", + "durability": null, + "name": "Karamjan rum", + "archery_ticket_price": "0", + "id": "3164" + }, + { + "shop_price": "27", + "examine": "A very strong spirit brewed in Karamja.", + "durability": null, + "name": "Karamjan rum", + "archery_ticket_price": "0", + "id": "3165" + }, + { + "examine": "It's the body of a dead monkey.", + "durability": null, + "name": "Monkey corpse", + "weight": "1", + "archery_ticket_price": "0", + "id": "3166" + }, + { + "examine": "It's the skin of a (hopefully) dead monkey.", + "durability": null, + "name": "Monkey skin", + "archery_ticket_price": "0", + "id": "3167" + }, + { + "examine": "A 'Seaweed in Monkey Skin' sandwich. Perfect for statue repair.", + "durability": null, + "name": "Seaweed sandwich", + "archery_ticket_price": "0", + "id": "3168" + }, + { + "examine": "A body of a dead monkey, tastefully stuffed with seaweed.", + "durability": null, + "name": "Stuffed monkey", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3169" + }, + { + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "266", + "stand_anim": "813", + "name": "Bronze spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3170", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "304", + "stand_anim": "813", + "name": "Iron spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3171", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "requirements": "{0,5}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "503", + "stand_anim": "813", + "name": "Steel spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3172", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "requirements": "{0,20}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned mithril tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "368", + "stand_anim": "813", + "name": "Mithril spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3173", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0" + }, + { + "requirements": "{0,30}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned adamant tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "1093", + "stand_anim": "813", + "name": "Adamant spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3174", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0" + }, + { + "requirements": "{0,40}", + "turn90cw_anim": "1207", + "examine": "\tA Karambwan poisoned rune tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "12089", + "stand_anim": "813", + "name": "Rune spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3175", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "requirements": "{0,60}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "37446", + "stand_anim": "813", + "name": "Dragon spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3176", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "3177", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3178" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3179" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3180" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3181" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3182" + }, + { + "ge_buy_limit": "10000", + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "588", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3183" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "588", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3184" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3185" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3186" + }, + { + "shop_price": "140", + "grand_exchange_price": "140", + "durability": null, + "name": "Bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3187" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "A piece of silk which can be used to remove poison from weapons.", + "grand_exchange_price": "286", + "durability": null, + "name": "Cleaning cloth", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3188" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "286", + "durability": null, + "name": "Cleaning cloth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3189" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "522", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3190", + "stand_turn_anim": "1209", + "bonuses": "7,8,0,-4,0,-1,1,2,0,0,0,8,0,0,0", + "shop_price": "104", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "name": "Bronze halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "522", + "durability": null, + "name": "Bronze halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3191" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "124", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3192", + "stand_turn_anim": "1209", + "bonuses": "9,12,0,-4,0,-1,1,2,0,0,0,12,0,0,0", + "shop_price": "364", + "durability": null, + "weight": "3.1", + "weapon_interface": "15", + "render_anim": "28", + "name": "Iron halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124", + "durability": null, + "name": "Iron halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3193" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "726", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3194", + "stand_turn_anim": "1209", + "bonuses": "14,19,0,-4,0,-1,2,3,0,0,0,20,0,0,0", + "requirements": "{0,5}", + "shop_price": "1300", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "name": "Steel halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "726", + "durability": null, + "name": "Steel halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3195" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "4344", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3196", + "stand_turn_anim": "1209", + "bonuses": "19,25,0,-4,0,-1,2,3,0,0,0,20,0,0,0", + "requirements": "{0,5}-{2,10}", + "shop_price": "2496", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "name": "Black halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4344", + "durability": null, + "name": "Black halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3197" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "6995", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3198", + "stand_turn_anim": "1209", + "bonuses": "22,28,0,-4,0,-1,2,4,0,0,0,29,0,0,0", + "requirements": "{0,20}-{2,10}", + "shop_price": "3380", + "durability": null, + "weight": "2.7", + "weapon_interface": "15", + "render_anim": "28", + "name": "Mithril halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6995", + "durability": null, + "name": "Mithril halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3199" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "4690", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3200", + "stand_turn_anim": "1209", + "bonuses": "28,41,0,-4,0,-1,3,4,0,0,0,42,0,0,0", + "requirements": "{0,30}-{2,15}", + "shop_price": "8320", + "durability": null, + "weight": "3.6", + "weapon_interface": "15", + "render_anim": "28", + "name": "Adamant halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4690", + "durability": null, + "name": "Adamant halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3201" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "77100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3202", + "stand_turn_anim": "1209", + "bonuses": "48,67,0,-4,0,-1,4,5,0,0,0,68,0,0,0", + "requirements": "{0,40}-{2,20}", + "shop_price": "128000", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "lendable": "true", + "name": "Rune halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "77100", + "durability": null, + "name": "Rune halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3203" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon halberd.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "201000", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3204", + "stand_turn_anim": "1209", + "bonuses": "70,95,0,-4,0,-1,4,5,0,0,0,89,0,0,0", + "requirements": "{0,60}-{2,30}", + "shop_price": "325000", + "durability": null, + "weight": "3.1", + "weapon_interface": "15", + "render_anim": "28", + "lendable": "true", + "name": "Dragon halberd" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "201000", + "durability": null, + "name": "Dragon halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3205" + }, + { + "examine": "A summons from King Lathas.", + "durability": null, + "name": "King's message", + "archery_ticket_price": "0", + "id": "3206" + }, + { + "examine": "A letter for King Lathas from Lord Iorwerth.", + "durability": null, + "name": "Iorwerths message", + "archery_ticket_price": "0", + "id": "3207" + }, + { + "examine": "Lord Iorwerth's crystal pendant.", + "durability": null, + "name": "Crystal pendant", + "archery_ticket_price": "0", + "id": "3208", + "equipment_slot": "2" + }, + { + "examine": "A piece of chemical formation.", + "durability": null, + "name": "Sulphur", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "3209" + }, + { + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Some limestone.", + "grand_exchange_price": "238", + "durability": null, + "name": "Limestone", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "3211" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "238", + "durability": null, + "name": "Limestone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3212" + }, + { + "examine": "Some quicklime.", + "durability": null, + "name": "Quicklime", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "3213" + }, + { + "examine": "A pot of ground quicklime.", + "durability": null, + "name": "Pot of quicklime", + "archery_ticket_price": "0", + "id": "3214" + }, + { + "shop_price": "160", + "examine": "A pile of ground sulphur.", + "durability": null, + "name": "Ground sulphur", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3215" + }, + { + "ge_buy_limit": "100", + "examine": "An empty barrel/A Splendid barrel.", + "grand_exchange_price": "207", + "durability": null, + "name": "Barrel", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3216" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "207", + "durability": null, + "name": "Barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3217" + }, + { + "examine": "A fused barrel full of fire oil.", + "durability": null, + "name": "Barrel bomb", + "weight": "32", + "archery_ticket_price": "0", + "id": "3218" + }, + { + "examine": "A fused barrel full of fire oil.", + "durability": null, + "name": "Barrel bomb", + "weight": "32", + "archery_ticket_price": "0", + "id": "3219" + }, + { + "examine": "A barrel full of coal-tar.", + "durability": null, + "name": "Barrel of coal-tar", + "weight": "32", + "archery_ticket_price": "0", + "id": "3220" + }, + { + "examine": "A barrel full of naphtha.", + "durability": null, + "name": "Barrel of naphtha", + "weight": "32", + "archery_ticket_price": "0", + "id": "3221" + }, + { + "examine": "A barrel full of naphtha and sulphur./A barrel full of naphtha and quicklime.", + "durability": null, + "name": "Naphtha mix", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3222" + }, + { + "examine": "A barrel full of naphtha and sulphur./A barrel full of naphtha and quicklime.", + "durability": null, + "name": "Naphtha mix", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3223" + }, + { + "examine": "A strip of cloth.", + "durability": null, + "name": "Strip of cloth", + "archery_ticket_price": "0", + "id": "3224" + }, + { + "shop_price": "67", + "ge_buy_limit": "5000", + "examine": "Might taste better cooked.", + "grand_exchange_price": "312", + "durability": null, + "name": "Raw rabbit", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3226" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "312", + "durability": null, + "name": "Raw rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3227" + }, + { + "shop_price": "19", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "35", + "durability": null, + "name": "Cooked rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3228" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "35", + "durability": null, + "name": "Cooked rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3229" + }, + { + "examine": "A book by Mel Achy.", + "durability": null, + "name": "Big book of bangs", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "3230" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3232" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3234" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3236" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3238" + }, + { + "ge_buy_limit": "100", + "examine": "Bark from a hollow tree.", + "grand_exchange_price": "23", + "durability": null, + "name": "Bark", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3239" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23", + "durability": null, + "name": "Bark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3240" + }, + { + "examine": "One of RuneScape's many citizens. In Karamja or South of Falador: One of RuneScape's many citizens, apparently trying to be an explorer. In Lumbridge: One of Lumbridge's many citizens. In a Falador home: One of RuneScape's many citizens. He looks worried ", + "durability": null, + "name": "Man", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3241" + }, + { + "examine": "He grows crops in the area.", + "durability": null, + "name": "Farmer", + "archery_ticket_price": "0", + "id": "3243" + }, + { + "examine": "Rogueish.", + "durability": null, + "name": "Rogue", + "archery_ticket_price": "0", + "id": "3247" + }, + { + "examine": "Varies, refer below.", + "durability": null, + "name": "Guard", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3249" + }, + { + "examine": "A member of Ardougne's militia.", + "durability": null, + "name": "Knight of ardougne", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3251" + }, + { + "examine": "The strong arm of the law.", + "durability": null, + "name": "Watchman", + "archery_ticket_price": "0", + "id": "3253" + }, + { + "examine": "A holy warrior.", + "durability": null, + "name": "Paladin", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3255" + }, + { + "examine": "Heroic!", + "durability": null, + "name": "Hero", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "3259" + }, + { + "examine": "A pale, tough looking herb.", + "durability": null, + "name": "Goutweed", + "archery_ticket_price": "0", + "id": "3261" + }, + { + "examine": "It's tough and spiky.", + "durability": null, + "name": "Troll thistle", + "archery_ticket_price": "0", + "id": "3262" + }, + { + "examine": "It'll be easier to grind now.", + "durability": null, + "name": "Dried thistle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3263" + }, + { + "examine": "It's ready for mixing.", + "durability": null, + "name": "Ground thistle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3264" + }, + { + "examine": "It's part of Eadgar's plan.", + "durability": null, + "name": "Troll potion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3265" + }, + { + "examine": "It's rather drunk.", + "durability": null, + "name": "Drunk parrot", + "archery_ticket_price": "0", + "id": "3266" + }, + { + "examine": "It's dirty and smelly.", + "durability": null, + "name": "Dirty robe", + "archery_ticket_price": "0", + "id": "3267" + }, + { + "examine": "It's good enough to fool a troll.", + "durability": null, + "name": "Fake man", + "archery_ticket_price": "0", + "id": "3268" + }, + { + "examine": "The key to the Trollheim storeroom.", + "durability": null, + "name": "Storeroom key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3269" + }, + { + "examine": "Pineapple chunks dipped in a strong liquor.", + "durability": null, + "name": "Alco-chunks", + "archery_ticket_price": "0", + "id": "3270" + }, + { + "ge_buy_limit": "5000", + "examine": "That used to be a vampyre!", + "grand_exchange_price": "381", + "durability": null, + "name": "Vampire dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3325" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "381", + "durability": null, + "name": "Vampire dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3326" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "An easy-to-make, marshy-coloured, Mort Myre snail shell helmet.", + "grand_exchange_price": "56", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3327", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3328" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Rounded: A red and black snail shell helmet. Pointed: A red and black pointed snail shell helmet.", + "durability": null, + "weight": "2", + "equipment_slot": "0", + "grand_exchange_price": "291", + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3329", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "291", + "durability": null, + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3330" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell helmet.", + "grand_exchange_price": "57", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3331", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3332" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "A moody blue snail shell helmet, mort myre snail shell helm", + "grand_exchange_price": "73", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "weight": "1.9", + "archery_ticket_price": "0", + "id": "3333", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "73", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3334" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "An easy-to-make, orange-and-bark coloured, Mort Myre snail shell helmet.", + "grand_exchange_price": "63", + "durability": null, + "name": "Broken bark snelm", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3335", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "63", + "durability": null, + "name": "Broken bark snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3336" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "An easy-to-make, marshy-coloured, Mort Myre snail shell helmet.", + "grand_exchange_price": "58", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3337", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "58", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3338" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Rounded: A red and black snail shell helmet. Pointed: A red and black pointed snail shell helmet.", + "durability": null, + "weight": "2", + "equipment_slot": "0", + "grand_exchange_price": "147", + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3339", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3340" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell helmet.", + "grand_exchange_price": "54", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3341", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "54", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3342" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "A moody blue snail shell helmet, mort myre snail shell helm", + "grand_exchange_price": "248", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "weight": "1.9", + "archery_ticket_price": "0", + "id": "3343", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "248", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3344" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, 'myre'-coloured, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "155", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3345" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "155", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3346" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, red, Mort myre snail shell; looks protective.", + "grand_exchange_price": "590", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3347" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "590", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3348" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "134", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3349" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "134", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3350" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, blue, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "230", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3351" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "230", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3352" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, bark-coloured, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "195", + "durability": null, + "name": "Blamish bark shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3353" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Blamish bark shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3354" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, 'myre'-coloured, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "145", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3355" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "145", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3356" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, red, Mort myre snail shell; looks protective.", + "grand_exchange_price": "614", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3357" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "614", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3358" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "173", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3359" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "173", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3360" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, blue, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "874", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3361" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "874", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3362" + }, + { + "shop_price": "74", + "ge_buy_limit": "10000", + "examine": "The thin, slimy corpse of a deceased giant snail.", + "grand_exchange_price": "2047", + "durability": null, + "name": "Thin snail", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3363" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2047", + "durability": null, + "name": "Thin snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3364" + }, + { + "ge_buy_limit": "1000", + "examine": "The lean, slimy corspe of a dead snail.", + "grand_exchange_price": "958", + "durability": null, + "name": "Lean snail", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3365" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "958", + "durability": null, + "name": "Lean snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3366" + }, + { + "shop_price": "160", + "ge_buy_limit": "10000", + "examine": "The fat, slimy, corpse of a deceased giant snail.", + "grand_exchange_price": "971", + "durability": null, + "name": "Fat snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3367" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "971", + "durability": null, + "name": "Fat snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3368" + }, + { + "ge_buy_limit": "10000", + "examine": "A succulently slimy piece of sumptuous snail.", + "grand_exchange_price": "833", + "durability": null, + "name": "Thin snail meat", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "3369" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "833", + "durability": null, + "name": "Thin snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3370" + }, + { + "ge_buy_limit": "10000", + "examine": "A succulently slimey slice of sumptuous snail.", + "grand_exchange_price": "251", + "durability": null, + "name": "Lean snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3371" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "251", + "durability": null, + "name": "Lean snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3372" + }, + { + "ge_buy_limit": "10000", + "examine": "A succulently slimy slice of sumptuous snail.", + "grand_exchange_price": "603", + "durability": null, + "name": "Fat snail meat", + "tradeable": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "3373" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "603", + "durability": null, + "name": "Fat snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3374" + }, + { + "durability": null, + "name": "Burnt snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3376" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "An empty sample bottle.", + "grand_exchange_price": "14", + "durability": null, + "name": "Sample bottle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3377" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Sample bottle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3378" + }, + { + "ge_buy_limit": "1000", + "examine": "A slime covered eel - yuck!", + "grand_exchange_price": "358", + "durability": null, + "name": "Slimy eel", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3379" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "358", + "durability": null, + "name": "Slimy eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3380" + }, + { + "ge_buy_limit": "1000", + "examine": "A cooked slimy eel - not delicious, but pretty nutritious.", + "grand_exchange_price": "274", + "durability": null, + "name": "Cooked slimy eel", + "tradeable": "true", + "destroy": "false", + "weight": "2", + "archery_ticket_price": "0", + "id": "3381" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "274", + "durability": null, + "name": "Cooked slimy eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3382" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "A wooden helmet.", + "durability": null, + "weight": "0.9", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5993", + "name": "Splitbark helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3385", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5993", + "durability": null, + "name": "Splitbark helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3386" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Provides good protection.", + "durability": null, + "weight": "4.5", + "absorb": "6,3,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "26700", + "name": "Splitbark body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3387", + "bonuses": "0,0,0,10,-10,36,26,42,15,0,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26700", + "durability": null, + "name": "Splitbark body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3388" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "These should protect my legs.", + "durability": null, + "weight": "3.6", + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "43700", + "name": "Splitbark legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3389", + "bonuses": "0,0,0,7,-7,22,20,25,10,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43700", + "durability": null, + "name": "Splitbark legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3390" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "These should keep my hands safe.", + "durability": null, + "weight": "0.9", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "2786", + "name": "Splitbark gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3391", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2786", + "durability": null, + "name": "Splitbark gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3392" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Wooden foot protection.", + "durability": null, + "weight": "0.9", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "3808", + "name": "Splitbark boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3393", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,9,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3808", + "durability": null, + "name": "Splitbark boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3394" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "18", + "durability": null, + "name": "Loar remains", + "tradeable": "true", + "weight": "1.35", + "archery_ticket_price": "0", + "id": "3396" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "18", + "durability": null, + "name": "Loar remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3397" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "249", + "durability": null, + "name": "Phrin remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3398" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "249", + "durability": null, + "name": "Phrin remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3399" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "138", + "durability": null, + "name": "Riyl remains", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3400" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "138", + "durability": null, + "name": "Riyl remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3401" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "334", + "durability": null, + "name": "Asyn remains", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3402" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "334", + "durability": null, + "name": "Asyn remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3403" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "5264", + "durability": null, + "name": "Fiyr remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3404" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5264", + "durability": null, + "name": "Fiyr remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3405" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this potion.", + "grand_exchange_price": "137", + "durability": null, + "name": "Ash potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3406" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137", + "durability": null, + "name": "Ash potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3407" + }, + { + "examine": "4 doses serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (4)", + "archery_ticket_price": "0", + "id": "3408" + }, + { + "examine": "3 doses serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (3)", + "archery_ticket_price": "0", + "id": "3410" + }, + { + "examine": "2 doses serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (2)", + "archery_ticket_price": "0", + "id": "3412" + }, + { + "examine": "1 dose serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (1)", + "archery_ticket_price": "0", + "id": "3414" + }, + { + "shop_price": "208", + "examine": "3 doses permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (4)", + "archery_ticket_price": "0", + "id": "3416" + }, + { + "shop_price": "208", + "examine": "3 doses permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (3)", + "archery_ticket_price": "0", + "id": "3417" + }, + { + "shop_price": "208", + "examine": "2 doses permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (2)", + "archery_ticket_price": "0", + "id": "3418" + }, + { + "shop_price": "208", + "examine": "1 dose permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (1)", + "archery_ticket_price": "0", + "id": "3419" + }, + { + "shop_price": "21", + "ge_buy_limit": "10000", + "examine": "A well carved limestone brick.", + "grand_exchange_price": "178", + "durability": null, + "name": "Limestone brick", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3420" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "178", + "durability": null, + "name": "Limestone brick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3421" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "4 doses of olive oil.", + "grand_exchange_price": "678", + "durability": null, + "name": "Olive oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3422" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "678", + "durability": null, + "name": "Olive oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3423" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "3 doses of olive oil.", + "grand_exchange_price": "413", + "durability": null, + "name": "Olive oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3424" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "413", + "durability": null, + "name": "Olive oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3425" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "2 doses of olive oil.", + "grand_exchange_price": "173", + "durability": null, + "name": "Olive oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3426" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "173", + "durability": null, + "name": "Olive oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3427" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "1 dose of olive oil.", + "grand_exchange_price": "110", + "durability": null, + "name": "Olive oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3428" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "110", + "durability": null, + "name": "Olive oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3429" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "3587", + "durability": null, + "name": "Sacred oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3430" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3587", + "durability": null, + "name": "Sacred oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3431" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "2596", + "durability": null, + "name": "Sacred oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3432" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2596", + "durability": null, + "name": "Sacred oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3433" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "1713", + "durability": null, + "name": "Sacred oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3434" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1713", + "durability": null, + "name": "Sacred oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3435" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "1846", + "durability": null, + "name": "Sacred oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3436" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1846", + "durability": null, + "name": "Sacred oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3437" + }, + { + "ge_buy_limit": "25000", + "examine": "Funeral logs used for burning loars.", + "grand_exchange_price": "853", + "durability": null, + "name": "Pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3438" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "853", + "durability": null, + "name": "Pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3439" + }, + { + "ge_buy_limit": "1000", + "examine": "Oak logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "1122", + "durability": null, + "name": "Oak pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3440" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1122", + "durability": null, + "name": "Oak pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3441" + }, + { + "ge_buy_limit": "1000", + "examine": "Willow logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "1164", + "durability": null, + "name": "Willow pyre logs", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3442" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1164", + "durability": null, + "name": "Willow pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3443" + }, + { + "ge_buy_limit": "1000", + "examine": "Maple logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "3313", + "durability": null, + "name": "Maple pyre logs", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3444" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3313", + "durability": null, + "name": "Maple pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3445" + }, + { + "ge_buy_limit": "1000", + "examine": "Yew logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "4424", + "durability": null, + "name": "Yew pyre logs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3446" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4424", + "durability": null, + "name": "Yew pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3447" + }, + { + "ge_buy_limit": "1000", + "examine": "Magic logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "5611", + "durability": null, + "name": "Magic pyre logs", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3448" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5611", + "durability": null, + "name": "Magic pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3449" + }, + { + "examine": "A bronze key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key red", + "archery_ticket_price": "0", + "id": "3450" + }, + { + "examine": "A bronze key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key brown", + "archery_ticket_price": "0", + "id": "3451" + }, + { + "examine": "A bronze key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key crimson", + "archery_ticket_price": "0", + "id": "3452" + }, + { + "examine": "A bronze key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key black", + "archery_ticket_price": "0", + "id": "3453" + }, + { + "examine": "A bronze key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key purple", + "archery_ticket_price": "0", + "id": "3454" + }, + { + "examine": "A steel key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key red", + "archery_ticket_price": "0", + "id": "3455" + }, + { + "examine": "A steel key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key brown", + "archery_ticket_price": "0", + "id": "3456" + }, + { + "examine": "A steel key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key crimson", + "archery_ticket_price": "0", + "id": "3457" + }, + { + "examine": "A steel key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key black", + "archery_ticket_price": "0", + "id": "3458" + }, + { + "examine": "A steel key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key purple", + "archery_ticket_price": "0", + "id": "3459" + }, + { + "examine": "A black key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key red", + "archery_ticket_price": "0", + "id": "3460" + }, + { + "examine": "A black key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key brown", + "archery_ticket_price": "0", + "id": "3461" + }, + { + "examine": "A black key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key crimson", + "archery_ticket_price": "0", + "id": "3462" + }, + { + "examine": "A black key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key black", + "archery_ticket_price": "0", + "id": "3463" + }, + { + "examine": "A black key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key purple", + "archery_ticket_price": "0", + "id": "3464" + }, + { + "examine": "A silver key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key red", + "archery_ticket_price": "0", + "id": "3465" + }, + { + "examine": "A silver key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key brown", + "archery_ticket_price": "0", + "id": "3466" + }, + { + "examine": "A silver key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key crimson", + "archery_ticket_price": "0", + "id": "3467" + }, + { + "examine": "A silver key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key black", + "archery_ticket_price": "0", + "id": "3468" + }, + { + "examine": "A silver key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key purple", + "archery_ticket_price": "0", + "id": "3469" + }, + { + "ge_buy_limit": "1000", + "examine": "Amazingly untouched by time.", + "grand_exchange_price": "956", + "durability": null, + "name": "Fine cloth", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3470" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "956", + "durability": null, + "name": "Fine cloth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3471" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black plateskirt with trim.", + "grand_exchange_price": "3077", + "durability": null, + "name": "Black plateskirt (t)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "3472", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black plateskirt with gold trim.", + "grand_exchange_price": "10600", + "durability": null, + "name": "Black plateskirt (g)", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "3473", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant plateskirt with trim.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "4403", + "name": "Adam plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3474", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant plateskirt with gold trim.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "11000", + "name": "Adam plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3475", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt with gold trim.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "42500", + "name": "Rune plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3476", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "shop_price": "81280", + "ge_buy_limit": "2", + "examine": "Rune plateskirt with trim.", + "durability": null, + "weight": "8", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "38300", + "name": "Rune plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3477", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "42000", + "name": "Zamorak plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3478", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt in the colours of Saradomin.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "44000", + "name": "Saradomin plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3479", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt in the colours of Guthix.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "39100", + "name": "Guthix plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3480", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody with complete gold trim & plating.", + "durability": null, + "weight": "10", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "2500000", + "name": "Gilded platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3481", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2500000", + "durability": null, + "name": "Gilded platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3482" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs with gold plate.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2200000", + "name": "Gilded platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3483", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2200000", + "durability": null, + "name": "Gilded platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3484" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt with gold plate.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "162300", + "name": "Gilded plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3485", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune full helmet with gold plate.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "477200", + "name": "Gilded full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3486", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "477200", + "durability": null, + "name": "Gilded full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3487" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield with gold plate.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "515400", + "name": "Gilded kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3488", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "515400", + "durability": null, + "name": "Gilded kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3489" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3490" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3491" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3492" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3493" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3494" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3495" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3496" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3497" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3498" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3499" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3500" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3501" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3502" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3503" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3504" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3505" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3506" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3507" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3508" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3509" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3510" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3511" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3512" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3513" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3514" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3515" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3516" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3517" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3518" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3519" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3520" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3521" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3522" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3523" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3524" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3525" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3526" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3527" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3528" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3529" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3530" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3531" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3532" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3533" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3534" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3535" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3536" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3537" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3538" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3539" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3540" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3541" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3542" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3543" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3544" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3545" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3546" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3547" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3548" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3549" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3550" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3551" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3552" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3553" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3554" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3555" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3556" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3557" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3558" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3559" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3560" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3561" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3562" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3563" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3564" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3565" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3566" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3567" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3568" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3569" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3570" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3571" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3572" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3573" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3574" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3575" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3576" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3577" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3578" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3579" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3580" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3581" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3582" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3583" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3584" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3585" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3586" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3587" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3588" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3589" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3590" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3591" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3592" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3593" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3594" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3595" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3596" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3597" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3598" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3599" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3600" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3601" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3602" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3603" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3604" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3605" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3607" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3609" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3610" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3611" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3612" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3613" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3614" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3615" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3616" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3617" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3618" + }, + { + "durability": null, + "name": "Black plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3668" + }, + { + "durability": null, + "name": "Black plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3669" + }, + { + "durability": null, + "name": "Adam plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3670" + }, + { + "durability": null, + "name": "Adam plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3671" + }, + { + "durability": null, + "name": "Rune plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3672" + }, + { + "durability": null, + "name": "Rune plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3673" + }, + { + "durability": null, + "name": "Zamorak plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3674" + }, + { + "durability": null, + "name": "Saradomin plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3675" + }, + { + "durability": null, + "name": "Guthix plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3676" + }, + { + "durability": null, + "name": "Gilded plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3677" + }, + { + "shop_price": "13000", + "examine": "An exquisitely shaped tool specially designed for fixing temples.", + "durability": null, + "name": "Flamtaer hammer", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3678" + }, + { + "examine": "A sealed letter of recommendation.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3685" + }, + { + "examine": "It's almost a musical instrument.", + "durability": null, + "name": "Unstrung lyre", + "weight": "1", + "archery_ticket_price": "0", + "id": "3688", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Lyre", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "3689", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "3690", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(1)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "3691", + "equipment_slot": "3" + }, + { + "examine": "I can use this to make a lyre.", + "durability": null, + "name": "Branch", + "weight": "1", + "archery_ticket_price": "0", + "id": "3692" + }, + { + "shop_price": "1000", + "examine": "I can spin this into golden wool.", + "durability": null, + "name": "Golden fleece", + "weight": "1", + "archery_ticket_price": "0", + "id": "3693" + }, + { + "examine": "I can use this to make a lyre.", + "durability": null, + "name": "Golden wool", + "weight": "1", + "archery_ticket_price": "0", + "id": "3694" + }, + { + "turn90cw_anim": "6662", + "examine": "The lowest maintenance pet you will ever have.", + "walk_anim": "6658", + "durability": null, + "turn90ccw_anim": "6663", + "turn180_anim": "6659", + "render_anim": "792", + "equipment_slot": "3", + "stand_anim": "6657", + "name": "Pet rock", + "run_anim": "6660", + "archery_ticket_price": "0", + "id": "3695", + "stand_turn_anim": "6661" + }, + { + "examine": "Talisman to bind the Draugen.", + "durability": null, + "name": "Hunters' talisman", + "archery_ticket_price": "0", + "id": "3696" + }, + { + "examine": "Talisman to bind the Draugen.", + "durability": null, + "name": "Hunters' talisman", + "archery_ticket_price": "0", + "id": "3697" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some flowers from a distant land.", + "durability": null, + "name": "Exotic flower", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3698" + }, + { + "examine": "A hauntingly beautiful love ballad.", + "durability": null, + "name": "Fremennik ballad", + "archery_ticket_price": "0", + "id": "3699" + }, + { + "examine": "A pair of sturdy made custom boots.", + "durability": null, + "name": "Sturdy boots", + "archery_ticket_price": "0", + "id": "3700" + }, + { + "examine": "Could probably be a bit clearer?", + "durability": null, + "name": "Tracking map", + "archery_ticket_price": "0", + "id": "3701" + }, + { + "examine": "A finely crafted string for a custom bow", + "durability": null, + "name": "Custom bow string", + "archery_ticket_price": "0", + "id": "3702" + }, + { + "examine": "An extremely odd, non-edible fish.", + "durability": null, + "name": "Unusual fish", + "archery_ticket_price": "0", + "id": "3703" + }, + { + "examine": "Map showing the best fishing spots out at sea.", + "durability": null, + "name": "Sea fishing map", + "archery_ticket_price": "0", + "id": "3704" + }, + { + "examine": "An estimate of expected local weather conditions.", + "durability": null, + "name": "Weather forecast", + "archery_ticket_price": "0", + "id": "3705" + }, + { + "examine": "Shows the wearer is worthy of the Champions table.", + "durability": null, + "name": "Champions token", + "archery_ticket_price": "0", + "id": "3706" + }, + { + "examine": "Probably the greatest cocktail in the world.", + "durability": null, + "name": "Legendary cocktail", + "archery_ticket_price": "0", + "id": "3707" + }, + { + "examine": "A signed statement promising a reduction on sales tax.", + "durability": null, + "name": "Fiscal statement", + "archery_ticket_price": "0", + "id": "3708" + }, + { + "shop_price": "5000", + "examine": "A legally binding contract promising not to enter the longhall.", + "durability": null, + "name": "Promissory note", + "archery_ticket_price": "0", + "id": "3709" + }, + { + "examine": "This employment contract is for a warrior to act as a bodyguard.", + "durability": null, + "name": "Warriors' contract", + "archery_ticket_price": "0", + "id": "3710" + }, + { + "shop_price": "325", + "examine": "A lot of beer in a barrel.", + "grand_exchange_price": "1555", + "durability": null, + "name": "Keg of beer", + "tradeable": "true", + "weight": "20", + "archery_ticket_price": "0", + "id": "3711" + }, + { + "examine": "Suspiciously close to beer, but without the side effects.", + "durability": null, + "name": "Low alcohol keg", + "weight": "20", + "archery_ticket_price": "0", + "id": "3712" + }, + { + "examine": "It's some kind of weird little parcel thing.", + "durability": null, + "name": "Strange object", + "archery_ticket_price": "0", + "id": "3713" + }, + { + "examine": "It's some kind of weird little parcel thing.", + "durability": null, + "name": "Lit strange object", + "archery_ticket_price": "0", + "id": "3714" + }, + { + "examine": "A red coloured disk, apparently made out of wood.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3715" + }, + { + "examine": "A red coloured disk, apparently made out of wood.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3716" + }, + { + "examine": "A very attractive magnet.", + "durability": null, + "name": "Magnet", + "archery_ticket_price": "0", + "id": "3718" + }, + { + "examine": "Some blue thread.", + "durability": null, + "name": "Thread", + "archery_ticket_price": "0", + "id": "3719" + }, + { + "examine": "A small pick for cracking small objects.", + "durability": null, + "name": "Pick", + "archery_ticket_price": "0", + "id": "3720" + }, + { + "examine": "Might be fun to play with in the bath.", + "durability": null, + "name": "Ship toy", + "archery_ticket_price": "0", + "id": "3721" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's a bucket of salty water.", + "durability": null, + "name": "Full bucket", + "archery_ticket_price": "0", + "id": "3722" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is eighty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "4/5ths full bucket", + "archery_ticket_price": "0", + "id": "3723" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is sixty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "3/5ths full bucket", + "archery_ticket_price": "0", + "id": "3724" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is forty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "2/5ths full bucket", + "archery_ticket_price": "0", + "id": "3725" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is twenty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "1/5ths full bucket", + "archery_ticket_price": "0", + "id": "3726" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Empty bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3727" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket of water is frozen solid.", + "durability": null, + "name": "Frozen bucket", + "archery_ticket_price": "0", + "id": "3728" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug is completely full. It has a 3 painted on its side.", + "durability": null, + "name": "Full jug", + "archery_ticket_price": "0", + "id": "3729" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug is two thirds full. It has a 3 painted on its side.", + "durability": null, + "name": "2/3rds full jug", + "archery_ticket_price": "0", + "id": "3730" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug is one third full. It has a 3 painted on its side.", + "durability": null, + "name": "1/3rds full jug", + "archery_ticket_price": "0", + "id": "3731" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "1", + "examine": "This jug is empty.", + "grand_exchange_price": "164", + "durability": null, + "name": "Empty jug", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "3732" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug of water is frozen solid.", + "durability": null, + "name": "Frozen jug", + "archery_ticket_price": "0", + "id": "3733" + }, + { + "examine": "An unusually shaped vase. You can see something glinting inside.", + "durability": null, + "name": "Vase", + "archery_ticket_price": "0", + "id": "3734" + }, + { + "examine": "An unusually shaped vase full of water. You can see something glinting inside.", + "durability": null, + "name": "Vase of water", + "archery_ticket_price": "0", + "id": "3735" + }, + { + "examine": "An unusually shaped vase full of ice. You can see something glinting inside.", + "durability": null, + "name": "Frozen vase", + "archery_ticket_price": "0", + "id": "3736" + }, + { + "examine": "This looks like a lid to some kind of container.", + "durability": null, + "name": "Vase lid", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3737" + }, + { + "examine": "The lid is screwed on tightly. ", + "durability": null, + "name": "Sealed vase", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3738" + }, + { + "examine": "The lid is screwed on tightly. It is full of water.", + "durability": null, + "name": "Sealed vase", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3739" + }, + { + "examine": "The lid is screwed on tightly. It is very cold. ", + "durability": null, + "name": "Sealed vase", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3740" + }, + { + "examine": "A small, cold key.", + "durability": null, + "name": "Frozen key", + "archery_ticket_price": "0", + "id": "3741" + }, + { + "examine": "The colouring on it seems to be some kind of sticky goop.", + "durability": null, + "name": "Red herring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3742" + }, + { + "examine": "A red coloured disk, apparently made out of wood.", + "durability": null, + "name": "Red disk", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3743" + }, + { + "examine": "A simple looking disk made of wood.", + "durability": null, + "name": "Wooden disk", + "archery_ticket_price": "0", + "id": "3744" + }, + { + "shop_price": "27", + "examine": "The key to leave the Seer's house.", + "durability": null, + "name": "Seer's key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3745" + }, + { + "examine": "Yup, it's sticky, it's red and it's goop.", + "durability": null, + "name": "Sticky red goop", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "3746" + }, + { + "durability": null, + "name": "Sticky red goop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3747" + }, + { + "remove_head": "true", + "examine": "A sturdy helm worn only by Fremennik clan members.", + "durability": null, + "name": "Fremennik helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "3748", + "absorb": "1,0,2", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helmet is worn by archers.", + "durability": null, + "weight": "2", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48900", + "name": "Archer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3749", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Archer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3750" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helmet is worn by berserkers.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "60900", + "name": "Berserker helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3751", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Berserker helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3752" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helm is worn by warriors.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "50700", + "name": "Warrior helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3753", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "50700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Warrior helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3754" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helm is worn by farseers.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "47900", + "name": "Farseer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3755", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Farseer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3756" + }, + { + "attack_anims": "390,390,381,390", + "examine": "A sword used only by Fremennik warriors.", + "durability": null, + "name": "Fremennik blade", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "4", + "weapon_interface": "6", + "id": "3757", + "bonuses": "6,29,-2,0,0,0,1,0,0,0,0,28,0,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "examine": "A shield worn by Fremennik warriors.", + "durability": null, + "name": "Fremennik shield", + "destroy": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "3758", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "697", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3759", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "697", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3760" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "54", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3761", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "54", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3762" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "581", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3763", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "581", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3764" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "912", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3765", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "912", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3766" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "100", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3767", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "100", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3768" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "486", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3769", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "486", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3770" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "242", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3771", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "242", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3772" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "500", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3773", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "500", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3774" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "450", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3775", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "450", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3776" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "674", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3777", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "674", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3778" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "809", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3779", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "809", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3780" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "632", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3781", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "632", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3782" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "517", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3783", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "517", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3784" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "398", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3785", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "398", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3786" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "283", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3787", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "283", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3788" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "966", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3789", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "966", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3790" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "205", + "durability": null, + "name": "Fremennik boots", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3791", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "205", + "durability": null, + "name": "Fremennik boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3792" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "The latest fashion of Rellekka.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1191", + "name": "Fremennik robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3793", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "durability": null, + "name": "Fremennik robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3794" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "The latest fashion of Rellekka.", + "grand_exchange_price": "663", + "durability": null, + "name": "Fremennik skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "3795", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "663", + "durability": null, + "name": "Fremennik skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3796" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "grand_exchange_price": "2380", + "durability": null, + "name": "Fremennik hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3797", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2380", + "durability": null, + "name": "Fremennik hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3798" + }, + { + "ge_buy_limit": "10", + "shop_price": "650", + "examine": "These will keep my hands warm!", + "grand_exchange_price": "172", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "3799", + "bonuses": "0,0,0,0,0,0,1,2,0,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "172", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3800" + }, + { + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "A lot of beer in a barrel. Beer in a barrel - a specialty of the Fremennik Province.", + "grand_exchange_price": "1817", + "durability": null, + "name": "Keg of beer", + "tradeable": "true", + "weight": "20", + "archery_ticket_price": "0", + "id": "3801" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1817", + "durability": null, + "name": "Keg of beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3802" + }, + { + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "393", + "durability": null, + "name": "Beer", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3803" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "393", + "durability": null, + "name": "Beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3804" + }, + { + "shop_price": "26", + "examine": "A big cup for a big thirst.", + "durability": null, + "name": "Tankard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3805" + }, + { + "durability": null, + "name": "Tankard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3806" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Saradomin page 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3827" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "686000", + "durability": null, + "name": "Saradomin page 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3828" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "522800", + "durability": null, + "name": "Saradomin page 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3829" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "629500", + "durability": null, + "name": "Saradomin page 4", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3830" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "7100000", + "durability": null, + "name": "Zamorak page 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3831" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "5400000", + "durability": null, + "name": "Zamorak page 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3832" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "4700000", + "durability": null, + "name": "Zamorak page 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3833" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "5900000", + "durability": null, + "name": "Zamorak page 4", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3834" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Guthix page 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3835" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "997100", + "durability": null, + "name": "Guthix page 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3836" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "953100", + "durability": null, + "name": "Guthix page 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3837" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Guthix page 4", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3838" + }, + { + "shop_price": "5000", + "examine": "An incomplete book of Saradomin.", + "durability": null, + "name": "Damaged book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3839", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "5000", + "examine": "The Holy book of Saradomin.", + "durability": null, + "name": "Holy book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3840", + "bonuses": "0,0,0,0,0,8,8,8,8,8,8,0,5,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "5000", + "examine": "An incomplete book of Zamorak.", + "durability": null, + "name": "Damaged book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3841", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "examine": "The unholy book of Zamorak.", + "durability": null, + "name": "Unholy book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3842", + "bonuses": "8,8,8,8,8,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "5000", + "examine": "An incomplete book of Guthix.", + "durability": null, + "name": "Damaged book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3843", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "examine": "The holy book of Guthix.", + "durability": null, + "name": "Book of balance", + "weight": "1", + "archery_ticket_price": "0", + "id": "3844", + "bonuses": "4,4,4,4,4,4,4,4,4,4,4,0,5,0,0", + "equipment_slot": "5" + }, + { + "examine": "Looks like some kind of manual.", + "durability": null, + "name": "Manual", + "tradeable": "false", + "destroy": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3847" + }, + { + "examine": "A key to the front door of the lighthouse. (Horror from the Deep)", + "durability": null, + "name": "Lighthouse key", + "archery_ticket_price": "0", + "id": "3848" + }, + { + "examine": "Looks old and rusty...", + "durability": null, + "name": "Rusty casket", + "tradeable": "false", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3849" + }, + { + "durability": null, + "name": "Unholy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3852" + }, + { + "shop_price": "490", + "ge_buy_limit": "10000", + "examine": "An enchanted necklace.", + "grand_exchange_price": "852", + "durability": null, + "name": "Games necklace(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3853", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "852", + "durability": null, + "name": "Games necklace(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3854" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3855", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3856" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3857", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3858" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3859", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3860" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3861", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3862" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3863", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3864" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3865", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3866" + }, + { + "shop_price": "490", + "ge_buy_limit": "10000", + "examine": "An enchanted necklace.", + "grand_exchange_price": "2093", + "durability": null, + "name": "Games necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3867", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2093", + "durability": null, + "name": "Games necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3868" + }, + { + "durability": null, + "name": "Stool", + "archery_ticket_price": "0", + "id": "3893", + "equipment_slot": "3" + }, + { + "examine": "It's not very good.", + "durability": null, + "name": "Awful anthem", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3894" + }, + { + "examine": "Much better.", + "durability": null, + "name": "Good anthem", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3895" + }, + { + "examine": "Just needs the King's signature.", + "durability": null, + "name": "Treaty", + "archery_ticket_price": "0", + "id": "3896" + }, + { + "examine": "For making a giant pen.", + "durability": null, + "name": "Giant nib", + "archery_ticket_price": "0", + "id": "3897" + }, + { + "examine": "The king should be able to use this.", + "durability": null, + "name": "Giant pen", + "archery_ticket_price": "0", + "id": "3898" + }, + { + "shop_price": "15", + "examine": "Not as good as a pet frog.", + "durability": null, + "name": "Iron sickle", + "weight": "1.6", + "archery_ticket_price": "0", + "id": "3899", + "weapon_interface": "6", + "bonuses": "0,0,0,0,0,0,1,1,1,1,0,1,0,0,0", + "equipment_slot": "3" + }, + { + "examine": "Managing Thine Kingdom for Noobes by A. Ghrim.", + "durability": null, + "name": "Ghrim's book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3901" + }, + { + "examine": "A pile of gout tubers suitable for use in mountainous terrain.", + "durability": null, + "name": "Hardy gout tuber", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4001" + }, + { + "examine": "It looks like some kind of control panel.", + "durability": null, + "name": "Spare controls", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "4002" + }, + { + "examine": "It's the official Gnome Royal Seal, signed by King Narode Shareen.", + "durability": null, + "name": "Gnome royal seal", + "archery_ticket_price": "0", + "id": "4004" + }, + { + "shop_price": "160", + "examine": "Unreadable orders handwritten by King Narnode Shareen.", + "durability": null, + "name": "Narnode's orders", + "archery_ticket_price": "0", + "id": "4005" + }, + { + "shop_price": "10", + "examine": "Magical monkey talking dentures! What more can we say? Ook!", + "durability": null, + "name": "Monkey dentures", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "4006" + }, + { + "examine": "A gold bar with a talkative monkey spirit.", + "durability": null, + "name": "Enchanted bar", + "weight": "2", + "archery_ticket_price": "0", + "id": "4007" + }, + { + "shop_price": "3", + "examine": "It's... the eye of a gnome! Now what on earth could one do with this?", + "durability": null, + "name": "Eye of gnome", + "weight": "1", + "archery_ticket_price": "0", + "id": "4008" + }, + { + "shop_price": "3", + "examine": "It's... the eye of a gnome! Now what on earth could one do with this?", + "durability": null, + "name": "Eye of gnome", + "weight": "1", + "archery_ticket_price": "0", + "id": "4009" + }, + { + "shop_price": "3", + "examine": "They are Monkey Nuts. Yummy.", + "durability": null, + "name": "Monkey nuts", + "archery_ticket_price": "0", + "id": "4012" + }, + { + "shop_price": "50", + "examine": "It's a monkey bar. It looks highly nutritious.", + "durability": null, + "name": "Monkey bar", + "archery_ticket_price": "0", + "id": "4014" + }, + { + "shop_price": "300", + "examine": "It's a bowl full of mushy banana", + "durability": null, + "name": "Banana stew", + "archery_ticket_price": "0", + "id": "4016" + }, + { + "examine": "It's an amulet mould shaped like a monkey head.", + "durability": null, + "name": "M'amulet mould", + "weight": "1", + "archery_ticket_price": "0", + "id": "4020" + }, + { + "examine": "It's an Amulet of Monkey Speak. It makes vague chattering noises.", + "durability": null, + "name": "M'speak amulet", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4021", + "equipment_slot": "2" + }, + { + "examine": "It's an unstrung Amulet of Monkey Speak. It makes vague chattering noises.", + "durability": null, + "name": "M'speak amulet", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4022" + }, + { + "shop_price": "1000", + "examine": "A magic talisman in shape of a monkey head.", + "durability": null, + "name": "Monkey talisman", + "weight": "1.25", + "archery_ticket_price": "0", + "id": "4023" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4024", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4025", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4026", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4027", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4028", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4029", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4030", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4031", + "equipment_slot": "3" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Dummy", + "archery_ticket_price": "0", + "id": "4032" + }, + { + "examine": "It's a very ancient skull from some kind of ape.", + "durability": null, + "name": "Monkey skull", + "archery_ticket_price": "0", + "id": "4034" + }, + { + "examine": "It is the official sigil of the 10th squad of the Royal Guard.", + "durability": null, + "name": "10th squad sigil", + "archery_ticket_price": "0", + "id": "4035", + "equipment_slot": "2" + }, + { + "turn90cw_anim": "1424", + "examine": "The Holy Team Standard", + "walk_anim": "1422", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Saradomin banner", + "tradeable": "false", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "4037", + "stand_turn_anim": "1426" + }, + { + "durability": null, + "name": "Saradomin banner", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4038" + }, + { + "turn90cw_anim": "1424", + "examine": "The Zamorak team's flag.", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Zamorak banner", + "tradeable": "false", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "4039", + "stand_turn_anim": "1426" + }, + { + "durability": null, + "name": "Zamorak banner", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4040" + }, + { + "examine": "The colours of Saradomin/Zamorak.", + "durability": null, + "name": "Hooded cloak", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4041", + "equipment_slot": "1" + }, + { + "examine": "The colours of Saradomin/Zamorak.", + "durability": null, + "name": "Hooded cloak", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4042", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Rock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4044" + }, + { + "examine": "I could use this to destroy things...", + "durability": null, + "name": "Explosive potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4045" + }, + { + "durability": null, + "name": "Explosive potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4046" + }, + { + "examine": "A coil of rope.", + "durability": null, + "name": "Climbing rope", + "archery_ticket_price": "0", + "id": "4047" + }, + { + "durability": null, + "name": "Climbing rope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4048" + }, + { + "examine": "A box of bandages for healing.", + "durability": null, + "name": "Bandages", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4049" + }, + { + "durability": null, + "name": "Bandages", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4050" + }, + { + "examine": "Good for repairing a broken cannon.", + "durability": null, + "name": "Toolkit", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4051" + }, + { + "durability": null, + "name": "Toolkit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4052" + }, + { + "examine": "Handy for hindering the enemy team's movement.", + "durability": null, + "name": "Barricade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4053" + }, + { + "durability": null, + "name": "Barricade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4054" + }, + { + "shop_price": "5", + "examine": "It's a manual for Castle Wars", + "durability": null, + "name": "Castlewars manual", + "weight": "1", + "archery_ticket_price": "0", + "id": "4055" + }, + { + "examine": "I can exchange these for further items.", + "durability": null, + "name": "Castle wars ticket", + "archery_ticket_price": "0", + "id": "4067" + }, + { + "requirements": "{0,5}", + "shop_price": "50", + "turn90cw_anim": "821", + "examine": "A very decorative sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "equipment_slot": "3", + "stand_anim": "808", + "name": "Decorative sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4068", + "stand_turn_anim": "823", + "bonuses": "13,18,-2,0,0,0,3,2,0,0,0,16,0,0,0" + }, + { + "remove_sleeves": "true", + "requirements": "{1,5}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4069", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,5}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4070", + "bonuses": "0,0,0,-21,-7,17,16,15,-4,16,2,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "40", + "examine": "A very decorative helm.", + "durability": null, + "name": "Decorative helm", + "weight": "1", + "archery_ticket_price": "0", + "id": "4071", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,3,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,5}", + "shop_price": "60", + "examine": "A very decorative shield.", + "durability": null, + "name": "Decorative shield", + "archery_ticket_price": "0", + "id": "4072", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Not so useful for lighting a fire.", + "durability": null, + "name": "Damp tinderbox", + "archery_ticket_price": "0", + "id": "4073" + }, + { + "durability": null, + "name": "Damp tinderbox", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4074" + }, + { + "examine": "A bizarre fungus. It glows with a pale blue light.", + "durability": null, + "name": "Glowing fungus", + "archery_ticket_price": "0", + "id": "4075" + }, + { + "examine": "A key I found in the lower levels of the Morytanian mines. (Haunted Mine) / As the 'Innocent-looking key': A shiny key sitting quietly on a crate.", + "durability": null, + "name": "Crystal-mine key", + "archery_ticket_price": "0", + "id": "4077" + }, + { + "examine": "I stole this from a Saradominist I met South of Mort'ton.", + "durability": null, + "name": "Zealot's key", + "archery_ticket_price": "0", + "id": "4078" + }, + { + "examine": "A gift from Santa.", + "durability": null, + "name": "Yo-yo", + "archery_ticket_price": "0", + "id": "4079" + }, + { + "examine": "Increases the wearer's strength and accuracy by 15% when fighting the undead.", + "durability": null, + "name": "Salve amulet", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "4081", + "bonuses": "0,0,0,0,0,3,3,3,0,0,3,0,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "An unstrung crystal imbued with the power of Saradomin.", + "durability": null, + "name": "Salve shard", + "archery_ticket_price": "0", + "id": "4082" + }, + { + "examine": "Unwaxed: It needs waxing before I can use it. Waxed: A waxed sled.", + "durability": null, + "name": "Sled", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4083", + "equipment_slot": "3" + }, + { + "turn90cw_anim": "1468", + "examine": "Unwaxed: It needs waxing before I can use it. Waxed: A waxed sled.", + "walk_anim": "1468", + "durability": null, + "turn90ccw_anim": "1468", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "1468", + "render_anim": "1119", + "equipment_slot": "3", + "stand_anim": "1461", + "name": "Sled", + "run_anim": "1468", + "archery_ticket_price": "0", + "id": "4084", + "stand_turn_anim": "1468" + }, + { + "examine": "I can use this to wax my sled.", + "durability": null, + "name": "Wax", + "archery_ticket_price": "0", + "id": "4085", + "equipment_slot": "5" + }, + { + "examine": "These pale flowers have a pungent odour.", + "durability": null, + "name": "Trollweiss", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "4086", + "weapon_interface": "12", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0", + "equipment_slot": "3" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "Looks pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "190500", + "name": "Dragon platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4087", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "190500", + "durability": null, + "name": "Dragon platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4088" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "13700", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "4089", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13700", + "durability": null, + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4090" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "ge_buy_limit": "100", + "examine": "The upper half of a magical robe.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "72100", + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4091", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "72100", + "durability": null, + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4092" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "ge_buy_limit": "100", + "examine": "The lower half of a magical robe.", + "durability": null, + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "47700", + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4093", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47700", + "durability": null, + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4094" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical gloves.", + "durability": null, + "weight": "0.4", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "5913", + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4095", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5913", + "durability": null, + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4096" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical boots.", + "durability": null, + "weight": "0.4", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "6303", + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4097", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6303", + "durability": null, + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4098" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "Black: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "16700", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "4099", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16700", + "durability": null, + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4100" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "ge_buy_limit": "100", + "examine": "The upper half of a magical robe.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "75100", + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4101", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "75100", + "durability": null, + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4102" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "ge_buy_limit": "100", + "examine": "The lower half of a magical robe.", + "durability": null, + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "50700", + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4103", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "50700", + "durability": null, + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4104" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Dark magical gloves.", + "durability": null, + "weight": "0.4", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "8913", + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4105", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8913", + "durability": null, + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4106" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical boots.", + "durability": null, + "weight": "0.4", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "9303", + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4107", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9303", + "durability": null, + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4108" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "White: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "16700", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "4109", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16700", + "durability": null, + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4110" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "ge_buy_limit": "100", + "examine": "The upper half of a magical robe.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "75100", + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4111", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "75100", + "durability": null, + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4112" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "ge_buy_limit": "100", + "examine": "The lower half of a magical robe.", + "durability": null, + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "50700", + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4113", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "50700", + "durability": null, + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4114" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Bright magical gloves.", + "durability": null, + "weight": "0.4", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "8913", + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4115", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8913", + "durability": null, + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4116" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical boots.", + "durability": null, + "weight": "0.4", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "9303", + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4117", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9303", + "durability": null, + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4118" + }, + { + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "359", + "durability": null, + "name": "Bronze boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4119", + "bonuses": "0,0,0,-3,-1,1,2,3,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "359", + "durability": null, + "name": "Bronze boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4120" + }, + { + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "17000", + "durability": null, + "name": "Iron boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4121", + "bonuses": "0,0,0,-3,-1,2,3,4,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17000", + "durability": null, + "name": "Iron boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4122" + }, + { + "requirements": "{1,5}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "258", + "durability": null, + "name": "Steel boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4123", + "bonuses": "0,0,0,-3,-1,5,6,7,0,0,5,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "258", + "durability": null, + "name": "Steel boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4124" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "317", + "durability": null, + "name": "Black boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4125", + "bonuses": "0,0,0,-3,-1,7,8,9,0,0,7,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "317", + "durability": null, + "name": "Black boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4126" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "580", + "durability": null, + "name": "Mithril boots", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4127", + "bonuses": "0,0,0,-3,-1,8,9,10,0,0,8,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "580", + "durability": null, + "name": "Mithril boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4128" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "1336", + "durability": null, + "name": "Adamant boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4129", + "bonuses": "0,0,0,-3,-1,10,11,12,0,0,9,1,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1336", + "durability": null, + "name": "Adamant boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4130" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "durability": null, + "weight": "1.3", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "7474", + "name": "Rune boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4131", + "bonuses": "0,0,0,-3,-1,12,13,14,0,0,10,2,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7474", + "durability": null, + "name": "Rune boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4132" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4133" + }, + { + "examine": "A spiky crawling critter. (level 23) Not very tasty-looking. (level 138)", + "durability": null, + "name": "Cave crawler", + "archery_ticket_price": "0", + "attack_speed": "3", + "id": "4134" + }, + { + "examine": "A tortured screaming soul.", + "durability": null, + "name": "Banshee", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4135" + }, + { + "examine": "The slime of evil.", + "durability": null, + "name": "Rockslug", + "archery_ticket_price": "0", + "id": "4136" + }, + { + "examine": "The winged reptile.", + "durability": null, + "name": "Cockatrice", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4137" + }, + { + "examine": "A small fire demon.", + "durability": null, + "name": "Pyrefiend", + "archery_ticket_price": "0", + "id": "4138" + }, + { + "examine": "The eyes of evil.", + "durability": null, + "name": "Basilisk", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4139" + }, + { + "examine": "An evil magic user.", + "durability": null, + "name": "Infernal mage", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4140" + }, + { + "examine": "The tongue of evil.", + "durability": null, + "name": "Bloodveld", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4141" + }, + { + "examine": "• Needs cream.....• Wibbly.• Wobbly...• There's always room for jelly.• Doesn't look so tough...• Looks scared to see me.", + "durability": null, + "name": "Jelly", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4142" + }, + { + "durability": null, + "name": "Turoth", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4143" + }, + { + "examine": "A very smelly ghost.", + "durability": null, + "name": "Abberant spectre", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4144" + }, + { + "examine": "The vacuumed face of evil.", + "durability": null, + "name": "Dust devil", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4145" + }, + { + "durability": null, + "name": "Kurask", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4146" + }, + { + "examine": "Flies like a rock.", + "durability": null, + "name": "Gargoyle", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4147" + }, + { + "durability": null, + "name": "Nechryael", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4148" + }, + { + "examine": "A denizen of the Abyss!", + "durability": null, + "name": "Abyssal demon", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4149" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4150", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,28,0,0" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A weapon from the Abyss.", + "walk_anim": "1660", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "1659", + "equipment_slot": "3", + "attack_anims": "1658,1658,1658,1658", + "grand_exchange_price": "413500", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1661", + "archery_ticket_price": "0", + "id": "4151", + "stand_turn_anim": "823", + "bonuses": "0,82,0,0,0,0,0,0,0,0,0,82,0,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "0.45", + "weapon_interface": "11", + "equip_audio": "2249", + "render_anim": "620", + "lendable": "true", + "attack_audios": "2720,0,0,0", + "name": "Abyssal whip" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "413500", + "durability": null, + "name": "Abyssal whip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4152" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1663", + "examine": "Simplicity is the best weapon.", + "walk_anim": "1663", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1663", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1663", + "defence_anim": "1666", + "equipment_slot": "3", + "attack_anims": "1665,1665,1665,1665", + "grand_exchange_price": "29900", + "stand_anim": "1662", + "tradeable": "true", + "run_anim": "1664", + "archery_ticket_price": "0", + "id": "4153", + "stand_turn_anim": "823", + "bonuses": "0,0,81,0,0,0,0,0,0,0,0,79,0,0,0", + "requirements": "{0,50}-{2,50}", + "durability": null, + "weight": "4.5", + "weapon_interface": "10", + "render_anim": "27", + "lendable": "true", + "attack_audios": "2714,0,0,0", + "name": "Granite maul" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "29900", + "durability": null, + "name": "Granite maul", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4154" + }, + { + "shop_price": "1", + "examine": "I can contact the Slayer Masters with this.", + "durability": null, + "name": "Enchanted gem", + "archery_ticket_price": "0", + "id": "4155" + }, + { + "requirements": "{1,20}-{18,25}", + "shop_price": "5000", + "ge_buy_limit": "100", + "examine": "I can just about see things in this shield's reflection.", + "durability": null, + "weight": "2.2", + "equipment_slot": "5", + "grand_exchange_price": "3318", + "name": "Mirror shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4156", + "bonuses": "0,0,0,0,0,10,15,5,5,10,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3318", + "durability": null, + "name": "Mirror shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4157" + }, + { + "requirements": "{0,55}-{18,50}", + "shop_price": "31000", + "turn90cw_anim": "1207", + "examine": "A spear with a leaf-shaped point.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "stand_anim": "813", + "name": "Leaf-bladed spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4158", + "stand_turn_anim": "1209", + "bonuses": "47,42,36,0,0,1,1,0,0,0,0,50,0,0,0" + }, + { + "requirements": "{0,55}-{18,50}", + "shop_price": "31000", + "examine": "A spear with a leaf-shaped point.", + "durability": null, + "name": "Leaf-bladed spear", + "weight": "2", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "4159", + "equipment_slot": "3" + }, + { + "requirements": "{18,55}-{4,50}", + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrow", + "archery_ticket_price": "0", + "id": "4160", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "A bag of salt.", + "grand_exchange_price": "1", + "durability": null, + "name": "Bag of salt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4161" + }, + { + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "I can even smash stone with this.", + "grand_exchange_price": "140", + "durability": null, + "name": "Rock hammer", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "4162", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "140", + "durability": null, + "name": "Rock hammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4163" + }, + { + "requirements": "{18,10}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Stops me breathing in too much dust.", + "grand_exchange_price": "615", + "durability": null, + "name": "Face mask", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4164", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "615", + "durability": null, + "name": "Face mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4165" + }, + { + "requirements": "{18,15}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "These will protect my ears from loud noise.", + "grand_exchange_price": "484", + "durability": null, + "name": "Earmuffs", + "tradeable": "true", + "weight": "2.6", + "archery_ticket_price": "0", + "id": "4166", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "484", + "durability": null, + "name": "Earmuffs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4167" + }, + { + "requirements": "{18,60}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Protects me from any bad smells.", + "grand_exchange_price": "523", + "durability": null, + "name": "Nose peg", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "4168", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "523", + "durability": null, + "name": "Nose peg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4169" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An old and magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "12100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4170", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,12,0,2,3,1,10,0,0,35,0,0,0", + "requirements": "{18,55}-{6,50}", + "shop_price": "21000", + "durability": null, + "weight": "1.8", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Slayer's staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12100", + "durability": null, + "name": "Slayer's staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4171" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4172", + "equipment_slot": "13" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4173", + "equipment_slot": "13" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4174", + "equipment_slot": "13" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4175", + "equipment_slot": "13" + }, + { + "examine": "A weapon from the Abyss.", + "rare_item": "true", + "durability": null, + "weight": "0.45", + "attack_speed": "4", + "render_anim": "620", + "lendable": "true", + "grand_exchange_price": "388392", + "name": "Abyssal whip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4178", + "bonuses": "0,82,0,0,0,0,0,0,0,0,0,82,0,0,0" + }, + { + "examine": "A big, bad troll.", + "durability": null, + "name": "Stick", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "4179" + }, + { + "lendable": "true", + "examine": "Looks pretty heavy.", + "grand_exchange_price": "165900", + "durability": null, + "name": "Dragon platelegs", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "4180", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "durability": null, + "name": "Mouth grip", + "archery_ticket_price": "0", + "id": "4181", + "equipment_slot": "3" + }, + { + "examine": "A pale, tough looking herb.", + "durability": null, + "name": "Goutweed", + "archery_ticket_price": "0", + "id": "4182" + }, + { + "examine": "A six-pointed marble and obsidian amulet", + "durability": null, + "name": "Star amulet", + "archery_ticket_price": "0", + "id": "4183" + }, + { + "examine": "Upon close examination, this seems to be a key.", + "durability": null, + "name": "Cavern key", + "archery_ticket_price": "0", + "id": "4184" + }, + { + "examine": "Upon close examination, this seems to be a key.", + "durability": null, + "name": "Tower key", + "archery_ticket_price": "0", + "id": "4185" + }, + { + "examine": "Upon close examination, this seems to be a key.", + "durability": null, + "name": "Shed key", + "archery_ticket_price": "0", + "id": "4186" + }, + { + "examine": "Triangular in shape, made from marble, and as large as your hand.", + "durability": null, + "name": "Marble amulet", + "archery_ticket_price": "0", + "id": "4187" + }, + { + "examine": "Triangular in shape, made from obsidian, and as large as your hand.", + "durability": null, + "name": "Obsidian amulet", + "archery_ticket_price": "0", + "id": "4188" + }, + { + "examine": "A length of garden cane.", + "durability": null, + "name": "Garden cane", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4189" + }, + { + "examine": "See article", + "durability": null, + "name": "Garden brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4190" + }, + { + "examine": "See article", + "durability": null, + "name": "Extended brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4191" + }, + { + "examine": "See article", + "durability": null, + "name": "Extended brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4192" + }, + { + "examine": "See article", + "durability": null, + "name": "Extended brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4193", + "equipment_slot": "3" + }, + { + "examine": "A pair of limp, dead arms.", + "durability": null, + "name": "Arms", + "weight": "2", + "archery_ticket_price": "0", + "id": "4195" + }, + { + "examine": "A pair of lifeless, rotting legs.", + "durability": null, + "name": "Legs", + "archery_ticket_price": "0", + "id": "4196" + }, + { + "examine": "No brain: A gruesome, decapitated head, whose brain has rotted away. Brain: A gruesome, decapitated head - its eyes stare lifelessly at nothing.", + "durability": null, + "name": "Decapitated head", + "weight": "3", + "archery_ticket_price": "0", + "id": "4197" + }, + { + "examine": "No brain: A gruesome, decapitated head, whose brain has rotted away. Brain: A gruesome, decapitated head - its eyes stare lifelessly at nothing.", + "durability": null, + "name": "Decapitated head", + "weight": "3", + "archery_ticket_price": "0", + "id": "4198" + }, + { + "shop_price": "50", + "examine": "A pickled brain, submerged inside a jar of vinegar.", + "durability": null, + "name": "Pickled brain", + "archery_ticket_price": "0", + "id": "4199" + }, + { + "examine": "A mould for making silver lightning conductors.", + "durability": null, + "name": "Conductor mould", + "archery_ticket_price": "0", + "id": "4200" + }, + { + "examine": "A silver lightning conductor.", + "durability": null, + "name": "Conductor", + "weight": "4", + "archery_ticket_price": "0", + "id": "4201" + }, + { + "destroy_message": "Another can be received from pickpocketing Dr. Fenkenstrain in the tower.", + "examine": "Unactivated: The Ring of charos.Activated: The power within this ring has been activated.", + "durability": null, + "name": "Ring of charos", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4202", + "equipment_slot": "12" + }, + { + "examine": "This consecration seed looks grey and dead.", + "durability": null, + "name": "Consecration seed", + "archery_ticket_price": "0", + "id": "4205" + }, + { + "examine": "This consecration seed looks grey and dead.", + "durability": null, + "name": "Consecration seed", + "archery_ticket_price": "0", + "id": "4206" + }, + { + "ge_buy_limit": "10", + "examine": "This crystal seed looks grey and dead.", + "grand_exchange_price": "92600", + "durability": null, + "name": "Crystal seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4207" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "92600", + "durability": null, + "name": "Crystal seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4208" + }, + { + "examine": "A book on Cadarn clan history.", + "durability": null, + "name": "Cadarn lineage", + "archery_ticket_price": "0", + "id": "4209" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "ge_buy_limit": "10", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "905300", + "attack_audios": "2700,0,0,0", + "name": "New crystal bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4212", + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "905300", + "durability": null, + "name": "New crystal bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4213" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow full", + "archery_ticket_price": "0", + "id": "4214", + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 9/10", + "archery_ticket_price": "0", + "id": "4215", + "bonuses": "0,0,0,0,96,0,0,0,0,0,0,0,0,0,68" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 8/10", + "archery_ticket_price": "0", + "id": "4216", + "bonuses": "0,0,0,0,92,0,0,0,0,0,0,0,0,0,66" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 7/10", + "archery_ticket_price": "0", + "id": "4217", + "bonuses": "0,0,0,0,88,0,0,0,0,0,0,0,0,0,64" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 6/10", + "archery_ticket_price": "0", + "id": "4218", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,62" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 5/10", + "archery_ticket_price": "0", + "id": "4219", + "bonuses": "0,0,0,0,80,0,0,0,0,0,0,0,0,0,60" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 4/10", + "archery_ticket_price": "0", + "id": "4220", + "bonuses": "0,0,0,0,76,0,0,0,0,0,0,0,0,0,58" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 3/10", + "archery_ticket_price": "0", + "id": "4221", + "bonuses": "0,0,0,0,72,0,0,0,0,0,0,0,0,0,56" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 2/10", + "archery_ticket_price": "0", + "id": "4222", + "bonuses": "0,0,0,0,68,0,0,0,0,0,0,0,0,0,54" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 1/10", + "archery_ticket_price": "0", + "id": "4223", + "bonuses": "0,0,0,0,64,0,0,0,0,0,0,0,0,0,52" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "ge_buy_limit": "10", + "examine": "A nice sturdy crystal shield.", + "durability": null, + "weight": "2", + "absorb": "6,0,12", + "equipment_slot": "5", + "grand_exchange_price": "756900", + "name": "New crystal shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4224", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield full", + "weight": "2", + "archery_ticket_price": "0", + "id": "4225", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 9/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4226", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,49,52,51,0,78,68,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 8/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4227", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,47,50,49,0,76,66,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 7/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4228", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,45,48,47,0,74,65,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 6/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4229", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,43,46,45,0,72,63,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 5/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4230", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,41,44,43,0,70,61,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 4/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4231", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,39,42,41,0,68,59,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 3/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4232", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,37,40,39,0,66,58,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 2/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4233", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,35,38,37,0,64,56,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 1/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4234", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,33,36,35,0,62,54,0,0,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "New crystal shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4235" + }, + { + "requirements": "{4,5}", + "examine": "This bow has been signed by Robin, Master Bowman.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "equipment_slot": "3", + "name": "Signed oak bow", + "archery_ticket_price": "0", + "id": "4236", + "bonuses": "0,0,0,0,14,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "It's a bowl of water, with some nettles in it.", + "durability": null, + "name": "Nettle-water", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4237" + }, + { + "examine": "It's a bowl of (milky) nettle tea.", + "durability": null, + "name": "Nettle tea", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4239" + }, + { + "examine": "It's a bowl of (milky) nettle tea.", + "durability": null, + "name": "Nettle tea", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4240" + }, + { + "examine": "(In inventory) A handful of nettles (In ground) I better not get stung/I wouldn't like to get stung/I wish I could sting other people/Dock leaves at the ready/These may hurt/nettles sting my leggies(Draynor Village nettles)", + "durability": null, + "name": "Nettles", + "archery_ticket_price": "0", + "id": "4241" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4242" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4243" + }, + { + "examine": "A porcelain cup.", + "durability": null, + "name": "Porcelain cup", + "archery_ticket_price": "0", + "id": "4244" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4245" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4246" + }, + { + "examine": "The Robes of Necrovarus.", + "durability": null, + "name": "Mystical robes", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "4247" + }, + { + "examine": "The Book of Haricanto.", + "durability": null, + "name": "Book of haricanto", + "weight": "2", + "archery_ticket_price": "0", + "id": "4248" + }, + { + "shop_price": "32", + "examine": "A translation manual.", + "durability": null, + "name": "Translation manual", + "weight": "1", + "archery_ticket_price": "0", + "id": "4249" + }, + { + "examine": "The amulet of ghostspeak glows green from the crone's enchantment.", + "durability": null, + "name": "Ghostspeak amulet", + "archery_ticket_price": "0", + "id": "4250", + "equipment_slot": "2" + }, + { + "destroy_message": "The Ectophial will smash if you drop it. Velorina can replace it.", + "examine": "The Ectophial.", + "durability": null, + "name": "Ectophial", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4251" + }, + { + "destroy_message": "The Ectophial will smash if you drop it. Velorina can replace it.", + "examine": "The Ectophial.", + "durability": null, + "name": "Ectophial", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4252" + }, + { + "examine": "A small wooden ship. / A small wooden ship with a silk flag.", + "durability": null, + "name": "Model ship", + "archery_ticket_price": "0", + "id": "4253" + }, + { + "examine": "A small wooden ship. / A small wooden ship with a silk flag.", + "durability": null, + "name": "Model ship", + "archery_ticket_price": "0", + "id": "4254" + }, + { + "examine": "A pot of crushed bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4255" + }, + { + "examine": "A pot of crushed bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4256" + }, + { + "examine": "A pot of crushed wolf bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4257" + }, + { + "examine": "A pot of crushed burnt bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4258" + }, + { + "examine": "A pot of crushed monkey bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4259" + }, + { + "examine": "A pot of crushed monkey bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4260" + }, + { + "examine": "A pot of crushed bat bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4261" + }, + { + "examine": "A pot of crushed big bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4262" + }, + { + "examine": "A pot of crushed jogre bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4263" + }, + { + "examine": "A pot of crushed zogre bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4264" + }, + { + "examine": "A pot of crushed shaikahan bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4265" + }, + { + "examine": "A pot of crushed baby dragon bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4266" + }, + { + "examine": "A pot of crushed wyvern bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4267" + }, + { + "examine": "A pot of crushed dragon bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4268" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4269" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4270" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4271" + }, + { + "shop_price": "100", + "examine": "A key fashioned from a shard of bone. (Shilo Village)", + "durability": null, + "name": "Bone key", + "archery_ticket_price": "0", + "id": "4272" + }, + { + "examine": "A section from some kind of map.", + "durability": null, + "name": "Map scrap", + "archery_ticket_price": "0", + "id": "4274" + }, + { + "examine": "A section from some kind of map.", + "durability": null, + "name": "Map scrap", + "archery_ticket_price": "0", + "id": "4275" + }, + { + "examine": "A section from some kind of map.", + "durability": null, + "name": "Map scrap", + "archery_ticket_price": "0", + "id": "4276" + }, + { + "examine": "A complete treasure map.", + "durability": null, + "name": "Treasure map", + "archery_ticket_price": "0", + "id": "4277" + }, + { + "examine": "A token with ectoplasm on it.", + "durability": null, + "name": "Ecto-token", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4278" + }, + { + "examine": "A scroll of paper containing signatures.", + "durability": null, + "name": "Petition form", + "archery_ticket_price": "0", + "id": "4283" + }, + { + "examine": "Before Ectofuntus: It's a bedsheet.After Ectofuntus: It's an ectoplasm-covered bedsheet.", + "durability": null, + "name": "Bedsheet", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "4284", + "equipment_slot": "0" + }, + { + "examine": "Before Ectofuntus: It's a bedsheet.After Ectofuntus: It's an ectoplasm-covered bedsheet.", + "durability": null, + "name": "Bedsheet", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "4285", + "equipment_slot": "0" + }, + { + "examine": "It's a bucket of ectoplasm.", + "durability": null, + "name": "Bucket of slime", + "weight": "3", + "archery_ticket_price": "0", + "id": "4286" + }, + { + "shop_price": "58", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "440", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "4287" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "440", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4288" + }, + { + "shop_price": "60", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "263", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "4289" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "263", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4290" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "59", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4291" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "59", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4292" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "74", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "4293" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "74", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4294" + }, + { + "examine": "A member of the 'Humans Against Monsters' group.", + "durability": null, + "name": "Female h.a.m.", + "archery_ticket_price": "0", + "id": "4295" + }, + { + "examine": "A member of the 'Humans Against Monsters' group.", + "durability": null, + "name": "Male h.a.m.", + "archery_ticket_price": "0", + "id": "4297" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "The label says 'Vivid Crimson', but it looks like pink to me!", + "grand_exchange_price": "19", + "durability": null, + "name": "Ham shirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4298", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Ham shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4299" + }, + { + "ge_buy_limit": "100", + "examine": "The label says 'Vivid Crimson', but it looks like pink to me!", + "grand_exchange_price": "11", + "durability": null, + "name": "Ham robe", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4300", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Ham robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4301" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Light-weight head protection and eye shield.", + "grand_exchange_price": "400", + "durability": null, + "name": "Ham hood", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4302", + "bonuses": "0,0,0,0,0,0,1,2,0,1,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "400", + "durability": null, + "name": "Ham hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4303" + }, + { + "ge_buy_limit": "100", + "examine": "A HAM cape.", + "grand_exchange_price": "25", + "durability": null, + "name": "Ham cloak", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4304", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Ham cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4305" + }, + { + "ge_buy_limit": "100", + "examine": "A badge for the HAM cult.", + "grand_exchange_price": "63", + "durability": null, + "name": "H.a.m logo", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.5", + "id": "4306", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "63", + "durability": null, + "name": "H.a.m logo", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4307" + }, + { + "ge_buy_limit": "10", + "examine": "Gloves worn by the Humans Against Monsters group.", + "grand_exchange_price": "59", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4308", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "59", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4309" + }, + { + "ge_buy_limit": "100", + "examine": "Boots worn by the Humans Against Monsters group.", + "grand_exchange_price": "323", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4310", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "323", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4311" + }, + { + "examine": "A book on elven crystal.", + "durability": null, + "name": "Crystal of seren", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4313" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "2342", + "durability": null, + "name": "Team-1 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4315", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2342", + "durability": null, + "name": "Team-1 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4316" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1145", + "durability": null, + "name": "Team-2 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4317", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1145", + "durability": null, + "name": "Team-2 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4318" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "141", + "durability": null, + "name": "Team-3 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4319", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "141", + "durability": null, + "name": "Team-3 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4320" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "973", + "durability": null, + "name": "Team-4 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4321", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "973", + "durability": null, + "name": "Team-4 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4322" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1294", + "durability": null, + "name": "Team-5 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4323", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1294", + "durability": null, + "name": "Team-5 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4324" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "124", + "durability": null, + "name": "Team-6 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4325", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124", + "durability": null, + "name": "Team-6 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4326" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1264", + "durability": null, + "name": "Team-7 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4327", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1264", + "durability": null, + "name": "Team-7 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4328" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1824", + "durability": null, + "name": "Team-8 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4329", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1824", + "durability": null, + "name": "Team-8 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4330" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "841", + "durability": null, + "name": "Team-9 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4331", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "841", + "durability": null, + "name": "Team-9 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4332" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1127", + "durability": null, + "name": "Team-10 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4333", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1127", + "durability": null, + "name": "Team-10 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4334" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "2011", + "durability": null, + "name": "Team-11 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4335", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2011", + "durability": null, + "name": "Team-11 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4336" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1591", + "durability": null, + "name": "Team-12 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4337", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1591", + "durability": null, + "name": "Team-12 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4338" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "308", + "durability": null, + "name": "Team-13 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4339", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "308", + "durability": null, + "name": "Team-13 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4340" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1504", + "durability": null, + "name": "Team-14 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4341", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1504", + "durability": null, + "name": "Team-14 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4342" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1462", + "durability": null, + "name": "Team-15 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4343", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1462", + "durability": null, + "name": "Team-15 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4344" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "313", + "durability": null, + "name": "Team-16 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4345", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "313", + "durability": null, + "name": "Team-16 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4346" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1231", + "durability": null, + "name": "Team-17 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4347", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1231", + "durability": null, + "name": "Team-17 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4348" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1678", + "durability": null, + "name": "Team-18 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4349", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1678", + "durability": null, + "name": "Team-18 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4350" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1041", + "durability": null, + "name": "Team-19 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4351", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1041", + "durability": null, + "name": "Team-19 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4352" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "703", + "durability": null, + "name": "Team-20 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4353", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "703", + "durability": null, + "name": "Team-20 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4354" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1292", + "durability": null, + "name": "Team-21 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4355", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1292", + "durability": null, + "name": "Team-21 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4356" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1368", + "durability": null, + "name": "Team-22 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4357", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1368", + "durability": null, + "name": "Team-22 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4358" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "280", + "durability": null, + "name": "Team-23 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4359", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "280", + "durability": null, + "name": "Team-23 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4360" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1512", + "durability": null, + "name": "Team-24 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4361", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1512", + "durability": null, + "name": "Team-24 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4362" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1395", + "durability": null, + "name": "Team-25 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4363", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1395", + "durability": null, + "name": "Team-25 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4364" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "191", + "durability": null, + "name": "Team-26 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4365", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "191", + "durability": null, + "name": "Team-26 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4366" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1420", + "durability": null, + "name": "Team-27 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4367", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1420", + "durability": null, + "name": "Team-27 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4368" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1920", + "durability": null, + "name": "Team-28 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4369", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1920", + "durability": null, + "name": "Team-28 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4370" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1175", + "durability": null, + "name": "Team-29 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4371", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1175", + "durability": null, + "name": "Team-29 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4372" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "552", + "durability": null, + "name": "Team-30 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4373", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "552", + "durability": null, + "name": "Team-30 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4374" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1385", + "durability": null, + "name": "Team-31 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4375", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1385", + "durability": null, + "name": "Team-31 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4376" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1168", + "durability": null, + "name": "Team-32 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4377", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1168", + "durability": null, + "name": "Team-32 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4378" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "211", + "durability": null, + "name": "Team-33 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4379", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "211", + "durability": null, + "name": "Team-33 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4380" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1128", + "durability": null, + "name": "Team-34 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4381", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1128", + "durability": null, + "name": "Team-34 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4382" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1140", + "durability": null, + "name": "Team-35 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4383", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1140", + "durability": null, + "name": "Team-35 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4384" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "84", + "durability": null, + "name": "Team-36 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4385", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "84", + "durability": null, + "name": "Team-36 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4386" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1010", + "durability": null, + "name": "Team-37 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4387", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1010", + "durability": null, + "name": "Team-37 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4388" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1833", + "durability": null, + "name": "Team-38 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4389", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1833", + "durability": null, + "name": "Team-38 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4390" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "914", + "durability": null, + "name": "Team-39 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4391", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "914", + "durability": null, + "name": "Team-39 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4392" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "582", + "durability": null, + "name": "Team-40 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4393", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "582", + "durability": null, + "name": "Team-40 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4394" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1471", + "durability": null, + "name": "Team-41 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4395", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1471", + "durability": null, + "name": "Team-41 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4396" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1072", + "durability": null, + "name": "Team-42 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4397", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1072", + "durability": null, + "name": "Team-42 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4398" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "298", + "durability": null, + "name": "Team-43 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4399", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "298", + "durability": null, + "name": "Team-43 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4400" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1268", + "durability": null, + "name": "Team-44 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4401", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1268", + "durability": null, + "name": "Team-44 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4402" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1371", + "durability": null, + "name": "Team-45 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4403", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1371", + "durability": null, + "name": "Team-45 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4404" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "140", + "durability": null, + "name": "Team-46 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4405", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "140", + "durability": null, + "name": "Team-46 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4406" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1233", + "durability": null, + "name": "Team-47 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4407", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1233", + "durability": null, + "name": "Team-47 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4408" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1836", + "durability": null, + "name": "Team-48 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4409", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1836", + "durability": null, + "name": "Team-48 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4410" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1185", + "durability": null, + "name": "Team-49 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4411", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1185", + "durability": null, + "name": "Team-49 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4412" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "708", + "durability": null, + "name": "Team-50 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4413", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "708", + "durability": null, + "name": "Team-50 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4414" + }, + { + "examine": "A jungle forester's blunt axe.", + "durability": null, + "name": "Blunt axe", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4415" + }, + { + "examine": "A strong medicinal brew for heavy chests.", + "durability": null, + "name": "Herbal tincture", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4416" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "223", + "durability": null, + "name": "Guthix rest(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4417" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "223", + "durability": null, + "name": "Guthix rest(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4418" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "134", + "durability": null, + "name": "Guthix rest(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4419" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "134", + "durability": null, + "name": "Guthix rest(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4420" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "83", + "durability": null, + "name": "Guthix rest(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4421" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "durability": null, + "name": "Guthix rest(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4422" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "44", + "durability": null, + "name": "Guthix rest(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4423" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44", + "durability": null, + "name": "Guthix rest(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4424" + }, + { + "examine": "A half-filled feather mattress.", + "durability": null, + "name": "Stodgy mattress", + "weight": "10", + "archery_ticket_price": "0", + "id": "4425" + }, + { + "examine": "A comfy-looking feather mattress.", + "durability": null, + "name": "Comfy mattress", + "weight": "15", + "archery_ticket_price": "0", + "id": "4426" + }, + { + "examine": "Looks like a bunch of rust to me.", + "durability": null, + "name": "Iron oxide", + "weight": "1", + "archery_ticket_price": "0", + "id": "4427" + }, + { + "examine": "An animate rock spell is written on this parchment.", + "durability": null, + "name": "Animate rock scroll", + "archery_ticket_price": "0", + "id": "4428" + }, + { + "examine": "The weathervane directions should now work.", + "durability": null, + "name": "Directionals", + "archery_ticket_price": "0", + "id": "4430" + }, + { + "examine": "A fixed weathervane ornament.", + "durability": null, + "name": "Ornament", + "archery_ticket_price": "0", + "id": "4432" + }, + { + "examine": "A fixed weathervane rotating pillar.", + "durability": null, + "name": "Weathervane pillar", + "archery_ticket_price": "0", + "id": "4434" + }, + { + "examine": "Clear skies ahead, with some chance of showers, thunderstorms, ice and hail.", + "durability": null, + "name": "Weather report", + "archery_ticket_price": "0", + "id": "4435" + }, + { + "ge_buy_limit": "100", + "examine": "This is pretty well sealed.", + "grand_exchange_price": "245", + "durability": null, + "name": "Airtight pot", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "4436" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "245", + "durability": null, + "name": "Airtight pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4437" + }, + { + "ge_buy_limit": "100", + "examine": "This needs firing, then it should fit on a normal-sized pot.", + "grand_exchange_price": "16", + "durability": null, + "name": "Unfired pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4438" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Unfired pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4439" + }, + { + "ge_buy_limit": "100", + "examine": "This should fit on a normal-sized pot.", + "grand_exchange_price": "5", + "durability": null, + "name": "Pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4440" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4441" + }, + { + "examine": "An airtight pot with something inside, most likely breathing salts.", + "durability": null, + "name": "Breathing salts", + "archery_ticket_price": "0", + "id": "4442" + }, + { + "examine": "A large cage for transporting chickens.", + "durability": null, + "name": "Chicken cage", + "weight": "1", + "archery_ticket_price": "0", + "id": "4443" + }, + { + "examine": "A jungle forester's super sharp axe.", + "durability": null, + "name": "Sharpened axe", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4444" + }, + { + "examine": "Some mahogany logs which have been professionally cured.", + "durability": null, + "name": "Red mahogany log", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4445" + }, + { + "destroy_message": "You can get another key ring from Yanni Salika in Shilo Village.", + "shop_price": "500", + "examine": "I can store my keys here.", + "durability": null, + "name": "Steel key ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4446" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4447" + }, + { + "ge_buy_limit": "100", + "examine": "It's a bowl of hot water.", + "grand_exchange_price": "111", + "durability": null, + "name": "Bowl of hot water", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4456" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "durability": null, + "name": "Bowl of hot water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4457" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of water.", + "grand_exchange_price": "36", + "durability": null, + "name": "Cup of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4458" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "36", + "durability": null, + "name": "Cup of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4459" + }, + { + "ge_buy_limit": "100", + "examine": "It's hot!", + "grand_exchange_price": "102", + "durability": null, + "name": "Cup of hot water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4460" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "102", + "durability": null, + "name": "Cup of hot water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4461" + }, + { + "examine": "A ruined herb tea.", + "durability": null, + "name": "Ruined herb tea", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4462" + }, + { + "durability": null, + "name": "Ruined herb tea", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4463" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4464" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4465" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4466" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4467" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4468" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4469" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4470" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4471" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "17", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4472" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4473" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4474" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4475" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4476" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4477" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "46", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4478" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "46", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4479" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "41", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4480" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "41", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4481" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "43", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4482" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4483" + }, + { + "shop_price": "160", + "examine": "The strange characters supposedly grant Svidi safe passage into Rellekka.", + "durability": null, + "name": "Safety guarantee", + "archery_ticket_price": "0", + "id": "4484" + }, + { + "examine": "This fruit is known as White Pearl. Should taste good.", + "durability": null, + "name": "White pearl", + "weight": "1", + "archery_ticket_price": "0", + "id": "4485" + }, + { + "examine": "You can grow this seed even in cold mountain ranges!", + "durability": null, + "name": "White pearl seed", + "archery_ticket_price": "0", + "id": "4486" + }, + { + "examine": "It's a piece of the Ancient Rock of the mountain people. It's still just a stone.", + "durability": null, + "name": "Half a rock", + "weight": "1", + "archery_ticket_price": "0", + "id": "4487" + }, + { + "examine": "The corpse of a woman who died long ago.", + "durability": null, + "name": "Corpse of woman", + "weight": "1", + "archery_ticket_price": "0", + "id": "4488" + }, + { + "examine": "This used to belong to Asleif, daughter of the mountain camp chieftain.", + "durability": null, + "name": "Asleif's necklace", + "archery_ticket_price": "0", + "id": "4489" + }, + { + "examine": "Marginally better than egg on your face.", + "durability": null, + "name": "Mud", + "archery_ticket_price": "0", + "id": "4490" + }, + { + "examine": "A muddy rock.", + "durability": null, + "name": "Muddy rock", + "weight": "1", + "archery_ticket_price": "0", + "id": "4492" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4494" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4495" + }, + { + "examine": "Splintered into pieces, it has become completely useless to you.", + "durability": null, + "name": "Broken pole", + "archery_ticket_price": "0", + "id": "4496" + }, + { + "shop_price": "18", + "examine": "A coil of rope.", + "grand_exchange_price": "101", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4498", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Rope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4499" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4500", + "equipment_slot": "3" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4501", + "equipment_slot": "3" + }, + { + "remove_head": "true", + "shop_price": "3000", + "examine": "Quite ferocious looking.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "0", + "destroy_message": "Hamal, the Chieftain of the Mountain Camp, can replace this.", + "name": "Bearhead", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4502", + "bonuses": "0,0,0,-3,-3,12,14,10,7,9,0,0,0,0,0" + }, + { + "requirements": "{0,20}", + "shop_price": "50", + "turn90cw_anim": "821", + "examine": "A very decorative sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "808", + "name": "Decorative sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4503", + "stand_turn_anim": "823", + "bonuses": "15,20,-2,0,0,0,3,2,0,0,0,22,0,0,0" + }, + { + "remove_sleeves": "true", + "requirements": "{1,20}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4504", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,20,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,20}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4505", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "40", + "examine": "A very decorative helm.", + "durability": null, + "name": "Decorative helm", + "weight": "1", + "archery_ticket_price": "0", + "id": "4506", + "bonuses": "0,0,0,-3,-1,10,11,9,-1,10,5,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,20}", + "shop_price": "60", + "examine": "A very decorative shield.", + "durability": null, + "name": "Decorative shield", + "archery_ticket_price": "0", + "id": "4507", + "bonuses": "0,0,0,-8,-2,18,22,20,-1,20,20,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{0,30}", + "shop_price": "50", + "turn90cw_anim": "821", + "examine": "A very decorative sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "808", + "name": "Decorative sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4508", + "stand_turn_anim": "823", + "bonuses": "20,29,-2,0,0,0,3,2,0,0,0,31,0,0,0" + }, + { + "remove_sleeves": "true", + "requirements": "{1,30}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4509", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,30}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4510", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "shop_price": "40", + "examine": "A very decorative helm.", + "durability": null, + "name": "Decorative helm", + "weight": "1", + "archery_ticket_price": "0", + "id": "4511", + "bonuses": "0,0,0,-3,-1,14,15,13,-1,14,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,30}", + "shop_price": "60", + "examine": "A very decorative shield.", + "durability": null, + "name": "Decorative shield", + "archery_ticket_price": "0", + "id": "4512", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0", + "equipment_slot": "5" + }, + { + "remove_head": "true", + "durability": null, + "name": "Castlewars hood", + "archery_ticket_price": "0", + "id": "4513", + "bonuses": "0,0,0,0,0,0,1,2,0,1,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Castlewars cloak", + "archery_ticket_price": "0", + "id": "4514", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "durability": null, + "name": "Castlewars hood", + "archery_ticket_price": "0", + "id": "4515", + "bonuses": "0,0,0,0,0,0,1,2,0,1,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Castlewars cloak", + "archery_ticket_price": "0", + "id": "4516", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "examine": "This could feed a family of gnomes for a week!", + "grand_exchange_price": "970", + "durability": null, + "name": "Giant frog legs", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4517" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "970", + "durability": null, + "name": "Giant frog legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4518" + }, + { + "requirements": "{12,11}", + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Empty: An oil lamp with no oil in it.Filled: Not the genie sort.", + "grand_exchange_price": "1575", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4522" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1575", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4523" + }, + { + "shop_price": "10", + "examine": "Empty: An oil lamp with no oil in it.Filled: Not the genie sort.", + "grand_exchange_price": "2", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4524" + }, + { + "requirements": "{12,11}", + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Empty: An oil lamp with no oil in it.Filled: Not the genie sort.", + "grand_exchange_price": "2", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4525" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4526" + }, + { + "requirements": "{4,11}", + "ge_buy_limit": "100", + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "39", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4527" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "39", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4528" + }, + { + "requirements": "{4,11}", + "ge_buy_limit": "100", + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "431", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4529" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "431", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4530" + }, + { + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "1", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4531" + }, + { + "requirements": "{4,11}", + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "1", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4532" + }, + { + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4533" + }, + { + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "1", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4534" + }, + { + "requirements": "{11,26}", + "ge_buy_limit": "100", + "examine": "Unfuelled: Put oil in to complete it. Unlit: An unlit oil lantern. Lit: It lights your way through the dark places of the earth.", + "grand_exchange_price": "12", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4535" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4536" + }, + { + "requirements": "{11,26}", + "ge_buy_limit": "100", + "examine": "Unfuelled: Put oil in to complete it. Unlit: An unlit oil lantern. Lit: It lights your way through the dark places of the earth.", + "grand_exchange_price": "218", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4537" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "218", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4538" + }, + { + "examine": "Unfuelled: Put oil in to complete it. Unlit: An unlit oil lantern. Lit: It lights your way through the dark places of the earth.", + "grand_exchange_price": "198", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4539" + }, + { + "shop_price": "43", + "ge_buy_limit": "100", + "examine": "Add the glass to complete.", + "grand_exchange_price": "8", + "durability": null, + "name": "Oil lantern frame", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4540" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Oil lantern frame", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4541" + }, + { + "shop_price": "88", + "ge_buy_limit": "100", + "examine": "A roughly circular disc of glass.", + "grand_exchange_price": "1", + "durability": null, + "name": "Lantern lens", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4542" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Lantern lens", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4543" + }, + { + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "You need to add a lens before you can use it.", + "grand_exchange_price": "88", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4544" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "88", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4545" + }, + { + "requirements": "{11,49}", + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "You need to add lamp oil before you can use it.", + "grand_exchange_price": "158", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4546" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "158", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4547" + }, + { + "requirements": "{11,49}", + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "A sturdy steel lantern.", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4548" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4549" + }, + { + "shop_price": "400", + "examine": "A sturdy steel lantern casting a bright beam.", + "grand_exchange_price": "1235", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "4550" + }, + { + "remove_head": "true", + "requirements": "{1,5}-{18,35}", + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "weight": "2.2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "774", + "name": "Spiny helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4551", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "774", + "durability": null, + "name": "Spiny helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4552" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Blue sweets", + "archery_ticket_price": "0", + "id": "4558" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Deep blue sweets", + "archery_ticket_price": "0", + "id": "4559" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "White sweets", + "archery_ticket_price": "0", + "id": "4560" + }, + { + "examine": "Remember to brush after eating!", + "grand_exchange_price": "10037", + "durability": null, + "name": "Purple sweets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4561" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Red sweets", + "archery_ticket_price": "0", + "id": "4562" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Green sweets", + "archery_ticket_price": "0", + "id": "4563" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Pink sweets", + "archery_ticket_price": "0", + "id": "4564" + }, + { + "bankable": "true", + "turn90cw_anim": "821", + "examine": "Hand them out to spread the Easter happiness.", + "walk_anim": "1836", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "822", + "weapon_interface": "12", + "turn180_anim": "820", + "render_anim": "594", + "equipment_slot": "3", + "fun_weapon": "true", + "stand_anim": "1837", + "name": "Basket of eggs", + "tradeable": "false", + "run_anim": "1836", + "archery_ticket_price": "0", + "id": "4565", + "stand_turn_anim": "823" + }, + { + "examine": "Perhaps not the most powerful weapon in RuneScape.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "1834", + "equipment_slot": "3", + "attack_anims": "1833,1833,1833,1833", + "fun_weapon": "true", + "name": "Rubber chicken", + "archery_ticket_price": "0", + "id": "4566", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "remove_head": "true", + "examine": "Made of gold and white gold.", + "durability": null, + "name": "Gold helmet", + "weight": "31.7", + "archery_ticket_price": "0", + "id": "4567", + "bonuses": "0,0,0,0,0,0,10,20,0,10,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "This book is almost falling apart, you'll have to handle it quite carefully.", + "durability": null, + "name": "Dwarven lore", + "archery_ticket_price": "0", + "id": "4568" + }, + { + "examine": "A missing page from Rolad's book! It seems to be the first one.", + "durability": null, + "name": "Book page 1", + "archery_ticket_price": "0", + "id": "4569" + }, + { + "examine": "A missing page from Rolad's book! It seems to be the second one.", + "durability": null, + "name": "Book page 2", + "archery_ticket_price": "0", + "id": "4570" + }, + { + "examine": "A missing page from Rolad's book! It seems to be the third one.", + "durability": null, + "name": "Book page 3", + "archery_ticket_price": "0", + "id": "4571" + }, + { + "examine": "A collection of missing pages from Rolad's book!", + "durability": null, + "name": "Pages", + "archery_ticket_price": "0", + "id": "4572" + }, + { + "examine": "A collection of missing pages from Rolad's book!", + "durability": null, + "name": "Pages", + "archery_ticket_price": "0", + "id": "4573" + }, + { + "examine": "These are the base schematics of a dwarven multicannon.", + "durability": null, + "name": "Base schematics", + "archery_ticket_price": "0", + "id": "4574" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "536", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4580", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "536", + "durability": null, + "name": "Black spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4581" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "2808", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4582", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2808", + "durability": null, + "name": "Black spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4583" + }, + { + "requirements": "{0,10}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "309", + "stand_anim": "813", + "name": "Black spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4584", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "This looks pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "161000", + "name": "Dragon plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4585", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "161000", + "durability": null, + "name": "Dragon plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4586" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "65400", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4587", + "stand_turn_anim": "823", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0", + "requirements": "{0,60}", + "shop_price": "100000", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "lendable": "true", + "attack_audios": "2500,0,2517,0", + "name": "Dragon scimitar" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "65400", + "durability": null, + "name": "Dragon scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4588" + }, + { + "examine": "Keys to the Mayor's house. (The Feud)", + "durability": null, + "name": "Keys", + "archery_ticket_price": "0", + "id": "4589" + }, + { + "examine": "The Mayor of Pollnivneach's wife's jewels.", + "durability": null, + "name": "Jewels", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4590" + }, + { + "shop_price": "1", + "examine": "Wear it on your head.", + "durability": null, + "name": "Karidian headpiece", + "archery_ticket_price": "0", + "id": "4591" + }, + { + "shop_price": "1", + "examine": "Makes me itch.", + "durability": null, + "name": "Fake beard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4593" + }, + { + "shop_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4597" + }, + { + "shop_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4598" + }, + { + "shop_price": "1", + "examine": "A handy little club made out of oak.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "10", + "defence_anim": "425", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "name": "Oak-blackjack", + "archery_ticket_price": "0", + "id": "4599", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,2,0,0,0" + }, + { + "shop_price": "600", + "ge_buy_limit": "100", + "examine": "A handy little club made out of willow.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "defence_anim": "425", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "321", + "name": "Willow-blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4600", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,8,0,0,0" + }, + { + "examine": "Dung of the Camelus Horribleus variety.", + "durability": null, + "name": "Ugthanki dung", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4601" + }, + { + "examine": "Dung of the Camelus Horribleus variety.", + "durability": null, + "name": "Ugthanki dung", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4602" + }, + { + "shop_price": "2", + "examine": "A receipt for one 'Camelus Horribleus", + "durability": null, + "name": "Receipt", + "archery_ticket_price": "0", + "id": "4603" + }, + { + "examine": "A red viscous liquid in a vial.", + "durability": null, + "name": "Hag's poison", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4604" + }, + { + "examine": "Makes a hissing sound.", + "durability": null, + "name": "Snake charm", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4605", + "equipment_slot": "3" + }, + { + "examine": "This is used to hold snakes.", + "durability": null, + "name": "Snake basket", + "archery_ticket_price": "0", + "id": "4606" + }, + { + "examine": "This basket contains a snake.", + "durability": null, + "name": "Snake basket full", + "weight": "1", + "archery_ticket_price": "0", + "id": "4607" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "A meaty and very hot kebab.", + "grand_exchange_price": "403", + "durability": null, + "name": "Super kebab", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "4608" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "403", + "durability": null, + "name": "Super kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4609" + }, + { + "examine": "The bottle feels warm.", + "durability": null, + "name": "Red hot sauce", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4610" + }, + { + "remove_head": "true", + "examine": "A disguise suitable for the desert.", + "durability": null, + "name": "Desert disguise", + "archery_ticket_price": "0", + "id": "4611", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Willow-blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4612" + }, + { + "shop_price": "75", + "examine": "It has a picture of a dragon on it.", + "durability": null, + "name": "Spinning plate", + "archery_ticket_price": "0", + "id": "4613" + }, + { + "examine": "Alas...", + "durability": null, + "name": "Broken plate", + "archery_ticket_price": "0", + "id": "4614" + }, + { + "examine": "An archaeologist's notes.", + "durability": null, + "name": "Varmen's notes", + "archery_ticket_price": "0", + "id": "4616" + }, + { + "examine": "The museum curator's key (The Golem).", + "durability": null, + "name": "Display cabinet key", + "archery_ticket_price": "0", + "id": "4617" + }, + { + "examine": "It's pretty, but you wish you knew what it was.", + "durability": null, + "name": "Strange implement", + "archery_ticket_price": "0", + "id": "4619" + }, + { + "examine": "It looks horrible.On ground: Not good for eating.", + "durability": null, + "name": "Black mushroom", + "weight": "1", + "archery_ticket_price": "0", + "id": "4620" + }, + { + "examine": "A long feather patterned like a flame.", + "durability": null, + "name": "Phoenix feather", + "archery_ticket_price": "0", + "id": "4621" + }, + { + "examine": "Black ink made out of mushrooms.", + "durability": null, + "name": "Black mushroom ink", + "weight": "1", + "archery_ticket_price": "0", + "id": "4622" + }, + { + "examine": "A phoenix feather dipped in ink.", + "durability": null, + "name": "Phoenix quill pen", + "archery_ticket_price": "0", + "id": "4623" + }, + { + "examine": "It reads 'YOUR TASK IS DONE'.", + "durability": null, + "name": "Golem program", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4624" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A cheeky little lager from the Bandit Camp.", + "grand_exchange_price": "1133", + "durability": null, + "name": "Bandit's brew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4627" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1133", + "durability": null, + "name": "Bandit's brew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4628" + }, + { + "examine": "A copy of the engravings found on a mysterious stone tablet.", + "durability": null, + "name": "Etchings", + "archery_ticket_price": "0", + "id": "4654" + }, + { + "examine": "A rough translation made from archaeological etchings.", + "durability": null, + "name": "Translation", + "weight": "1", + "archery_ticket_price": "0", + "id": "4655" + }, + { + "examine": "This key is unusally warm to the touch.", + "durability": null, + "name": "Warm key", + "archery_ticket_price": "0", + "id": "4656" + }, + { + "examine": "A ring that allows you to see things that are normally invisible.", + "durability": null, + "name": "Ring of visibility", + "archery_ticket_price": "0", + "id": "4657", + "equipment_slot": "12" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4658" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4659" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4660" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4661" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4662" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4663" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4664" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4665" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4666" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4667" + }, + { + "examine": "Finely ground garlic powder.", + "durability": null, + "name": "Garlic powder", + "archery_ticket_price": "0", + "id": "4668" + }, + { + "examine": "The Diamond of Blood.", + "durability": null, + "name": "Blood diamond", + "archery_ticket_price": "0", + "id": "4670" + }, + { + "examine": "The Diamond of Ice.", + "durability": null, + "name": "Ice diamond", + "archery_ticket_price": "0", + "id": "4671" + }, + { + "examine": "The Diamond of Smoke.", + "durability": null, + "name": "Smoke diamond", + "weight": "1", + "archery_ticket_price": "0", + "id": "4672" + }, + { + "examine": "The Diamond of Shadow.", + "durability": null, + "name": "Shadow diamond", + "weight": "1", + "archery_ticket_price": "0", + "id": "4673" + }, + { + "examine": "An old and strangely shaped metal cross.", + "durability": null, + "name": "Gilded cross", + "archery_ticket_price": "0", + "id": "4674" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A magical staff of ancient origin...", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "59300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4675", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,15,0,2,3,1,15,0,0,50,-1,0,0", + "requirements": "{0,50}-{6,50}", + "shop_price": "80000", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2555,0,0,0", + "name": "Ancient staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "59300", + "durability": null, + "name": "Ancient staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4676" + }, + { + "examine": "It's an amulet of cat speak. It makes vague purring noises.", + "durability": null, + "name": "Catspeak amulet", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4677", + "equipment_slot": "2" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4678" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4679" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4680" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4681" + }, + { + "shop_price": "300", + "examine": "A blessed holy symbol of Saradomin.", + "grand_exchange_price": "112", + "durability": null, + "name": "Holy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4682", + "bonuses": "0,0,0,0,0,2,2,2,2,2,3,0,0,8,0" + }, + { + "shop_price": "135", + "examine": "An unholy symbol of Zamorak.", + "grand_exchange_price": "52", + "durability": null, + "name": "Unholy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4683", + "bonuses": "2,2,2,2,2,0,0,0,0,0,0,0,0,8,0" + }, + { + "shop_price": "30", + "examine": "One sheet of mummy wrap.", + "durability": null, + "name": "Linen", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4684" + }, + { + "examine": "Little book of embalming by Bod E. Wrapper.", + "durability": null, + "name": "Embalming manual", + "archery_ticket_price": "0", + "id": "4686" + }, + { + "examine": "It's a bucket of sap.", + "durability": null, + "name": "Bucket of sap", + "weight": "2", + "archery_ticket_price": "0", + "id": "4687" + }, + { + "examine": "A little heap of salt.", + "durability": null, + "name": "Pile of salt", + "archery_ticket_price": "0", + "id": "4689" + }, + { + "examine": "Miniature golden statue of a sphinx.", + "durability": null, + "name": "Sphinx's token", + "archery_ticket_price": "0", + "id": "4691" + }, + { + "shop_price": "130000", + "examine": "A very delicate sheet of gold.", + "grand_exchange_price": "132580", + "durability": null, + "name": "Gold leaf", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4692" + }, + { + "examine": "It's a bucket of salty water.", + "durability": null, + "name": "Full bucket", + "archery_ticket_price": "0", + "id": "4693" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Water and Fire Rune.", + "grand_exchange_price": "48", + "durability": null, + "name": "Steam rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4694" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined air and water rune.", + "grand_exchange_price": "249", + "durability": null, + "name": "Mist rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4695" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Air and Earth Rune.", + "grand_exchange_price": "20", + "durability": null, + "name": "Dust rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4696" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Air and Fire Rune.", + "grand_exchange_price": "148", + "durability": null, + "name": "Smoke rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4697" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Earth and Water rune.", + "grand_exchange_price": "657", + "durability": null, + "name": "Mud rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4698" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined earth and fire rune.", + "grand_exchange_price": "49", + "durability": null, + "name": "Lava rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4699" + }, + { + "examine": "You need to add lamp oil before you can use it.", + "durability": null, + "name": "Sapphire lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4700" + }, + { + "examine": "A bullseye lantern with a sapphire for a lens.", + "durability": null, + "name": "Sapphire lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4701" + }, + { + "examine": "A lantern casting a bright blue beam.", + "durability": null, + "name": "Sapphire lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4702" + }, + { + "shop_price": "975000", + "examine": "A magic stone to make high-level furniture.", + "grand_exchange_price": "977755", + "durability": null, + "name": "Magic stone", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4703" + }, + { + "turn90cw_anim": "821", + "examine": "A magic stone bowl for catching the tears of Guthix.", + "walk_anim": "819", + "durability": null, + "destroy": "true", + "weight": "1.8", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "1", + "equipment_slot": "3", + "stand_anim": "808", + "name": "Stone bowl", + "tradeable": "false", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4704", + "stand_turn_anim": "823" + }, + { + "examine": "This book must be really old!", + "durability": null, + "name": "Crumbling tome", + "archery_ticket_price": "0", + "id": "4707" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's leather hood.", + "durability": null, + "rare_item": "true", + "weight": "0.9", + "absorb": "5,2,0", + "equipment_slot": "0", + "grand_exchange_price": "94300", + "name": "Ahrim's hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4708", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "94300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4709" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "69500", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4710", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0", + "requirements": "{0,70}-{6,70}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "69500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4711" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe top.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "10,5,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1000000", + "name": "Ahrim's robetop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4712", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1000000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's robetop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4713" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "durability": null, + "rare_item": "true", + "weight": "12", + "absorb": "7,3,0", + "equipment_slot": "7", + "grand_exchange_price": "1700000", + "name": "Ahrim's robeskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4714", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1700000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's robeskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4715" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's helm.", + "durability": "1", + "rare_item": "true", + "weight": "1", + "absorb": "2,0,5", + "equipment_slot": "0", + "grand_exchange_price": "1300000", + "name": "Dharok's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4716", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1300000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4717" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "rare_item": "true", + "turn90ccw_anim": "822", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "516900", + "stand_anim": "2065", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4718", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0", + "requirements": "{0,70}-{2,70}", + "durability": null, + "weight": "13", + "weapon_interface": "2", + "render_anim": "134", + "name": "Dharok's greataxe" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "516900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's greataxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4719" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's platebody armour.", + "durability": null, + "rare_item": "true", + "weight": "9.9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "511400", + "name": "Dharok's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4720", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "511400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4721" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's plate leg armour.", + "durability": null, + "rare_item": "true", + "weight": "10", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "748800", + "name": "Dharok's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4722", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "748800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4723" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's helm", + "durability": null, + "rare_item": "true", + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "396300", + "name": "Guthan's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4724", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "396300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4725" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "588400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4726", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Guthan's warspear" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "588400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's warspear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4727" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's platebody armour.", + "durability": null, + "rare_item": "true", + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "316800", + "name": "Guthan's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4728", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "316800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4729" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's chainskirt.", + "durability": null, + "rare_item": "true", + "weight": "8", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "315600", + "name": "Guthan's chainskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4730", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "315600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's chainskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4731" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's coif.", + "durability": null, + "rare_item": "true", + "absorb": "0,5,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "38900", + "name": "Karil's coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4732", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "38900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4733" + }, + { + "ge_buy_limit": "1", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "rare_item": "true", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "2076", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "188000", + "stand_anim": "2074", + "tradeable": "true", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4734", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,70}", + "durability": null, + "weight": "2", + "weapon_interface": "17", + "render_anim": "372", + "attack_audios": "2700,0,0,0", + "name": "Karil's crossbow" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "188000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4735" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "10000", + "examine": "Karil the Tainted's leather body armour.", + "durability": null, + "rare_item": "true", + "weight": "6", + "absorb": "0,10,5", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1800000", + "name": "Karil's leathertop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4736", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1800000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's leathertop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4737" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "10000", + "examine": "Karil the Tainted's leather skirt.", + "durability": null, + "rare_item": "true", + "weight": "2", + "absorb": "0,7,3", + "equipment_slot": "7", + "grand_exchange_price": "217000", + "name": "Karil's leatherskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4738", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "217000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's leatherskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4739" + }, + { + "requirements": "{4,70}", + "shop_price": "420", + "ge_buy_limit": "10000", + "examine": "Must need a special type of crossbow to use this.", + "grand_exchange_price": "238", + "durability": null, + "name": "Bolt rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4740", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,55", + "equipment_slot": "13" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "139000", + "name": "Torag's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4745", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "139000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4746" + }, + { + "requirements": "{0,70}-{2,70}", + "ge_buy_limit": "1000", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "rare_item": "true", + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "111600", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4747", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "111600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's hammers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4748" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's platebody armour.", + "durability": null, + "rare_item": "true", + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "346200", + "name": "Torag's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4749", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "346200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4750" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's plate leg armour.", + "durability": null, + "rare_item": "true", + "weight": "9", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "427200", + "name": "Torag's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4751", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "427200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4752" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's helm.", + "durability": null, + "rare_item": "true", + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "687200", + "name": "Verac's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4753", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "687200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4754" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "rare_item": "true", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "2060", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "135500", + "stand_anim": "1832", + "tradeable": "true", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4755", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "2", + "weapon_interface": "8", + "render_anim": "1426", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "135500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's flail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4756" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's brassard.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "270000", + "name": "Verac's brassard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4757", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "270000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's brassard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4758" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's plate skirt.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "411400", + "name": "Verac's plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4759", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "411400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4760" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt bronze arrow...ouch", + "grand_exchange_price": "39", + "durability": null, + "name": "Bronze brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4773", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,11", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt iron arrow...ouch", + "grand_exchange_price": "14", + "durability": null, + "name": "Iron brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4778", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,13", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt steel arrow...ouch", + "grand_exchange_price": "20", + "durability": null, + "name": "Steel brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4783", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,19", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt black arrow...ouch", + "grand_exchange_price": "63", + "durability": null, + "name": "Black brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4788", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "20", + "ge_buy_limit": "1000", + "examine": "Blunt mithril arrow...ouch", + "grand_exchange_price": "80", + "durability": null, + "name": "Mithril brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4793", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,34", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt adamant arrow...ouch", + "grand_exchange_price": "154", + "durability": null, + "name": "Adamant brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4798", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,45", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "180", + "ge_buy_limit": "1000", + "examine": "Blunt rune arrow...ouch", + "grand_exchange_price": "188", + "durability": null, + "name": "Rune brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4803", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "examine": "A very black prism.", + "durability": null, + "name": "Black prism", + "archery_ticket_price": "0", + "id": "4808" + }, + { + "examine": "A half torn necromantic page.", + "durability": null, + "name": "Torn page", + "archery_ticket_price": "0", + "id": "4809" + }, + { + "examine": "It's about to fall apart.", + "durability": null, + "name": "Ruined backpack", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4810" + }, + { + "examine": "A white ceramic mug with a dragon insignia.", + "durability": null, + "name": "Dragon inn tankard", + "archery_ticket_price": "0", + "id": "4811" + }, + { + "ge_buy_limit": "10000", + "examine": "A pile of Zombie Ogre bones.", + "grand_exchange_price": "1167", + "durability": null, + "name": "Zogre bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4812" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1167", + "durability": null, + "name": "Zogre bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4813" + }, + { + "examine": "A classic realist charcoal portrait of Sithik.", + "durability": null, + "name": "Sithik portrait", + "archery_ticket_price": "0", + "id": "4814" + }, + { + "examine": "A classic realist charcoal portrait of Sithik.", + "durability": null, + "name": "Sithik portrait", + "archery_ticket_price": "0", + "id": "4815" + }, + { + "examine": "A signed classic realist charcoal portrait of Sithik.", + "durability": null, + "name": "Signed portrait", + "archery_ticket_price": "0", + "id": "4816" + }, + { + "examine": "A book explaining the art of portraiture.", + "durability": null, + "name": "Book of portraiture", + "weight": "1", + "archery_ticket_price": "0", + "id": "4817", + "equipment_slot": "5" + }, + { + "examine": "An ancient ogre artefact-resembling a large heavy helm.", + "durability": null, + "name": "Ogre artefact", + "archery_ticket_price": "0", + "id": "4818" + }, + { + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "16", + "durability": null, + "name": "Bronze nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4819" + }, + { + "shop_price": "33", + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "16", + "durability": null, + "name": "Iron nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4820" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "13", + "durability": null, + "name": "Black nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4821" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "35", + "durability": null, + "name": "Mithril nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4822" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "87", + "durability": null, + "name": "Adamantite nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4823" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "114", + "durability": null, + "name": "Rune nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4824" + }, + { + "ge_buy_limit": "100", + "examine": "An unstrung composite ogre bow.", + "grand_exchange_price": "447", + "durability": null, + "name": "Unstrung comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4825" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "447", + "durability": null, + "name": "Unstrung comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4826" + }, + { + "requirements": "{4,30}", + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "A composite ogre bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "225", + "attack_audios": "2700,0,0,0", + "name": "Comp ogre bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4827", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "225", + "durability": null, + "name": "Comp ogre bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4828" + }, + { + "examine": "A book of H.A.M. affiliation", + "durability": null, + "name": "Book of 'h.a.m", + "archery_ticket_price": "0", + "id": "4829", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "examine": "Ancient ogre bones from the ogre burial tomb.", + "grand_exchange_price": "5931", + "durability": null, + "name": "Fayrg bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4830" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5931", + "durability": null, + "name": "Fayrg bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4831" + }, + { + "ge_buy_limit": "10000", + "examine": "Ancient ogre bones from the ogre burial tomb.", + "grand_exchange_price": "7093", + "durability": null, + "name": "Raurg bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4832" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7093", + "durability": null, + "name": "Raurg bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4833" + }, + { + "ge_buy_limit": "10000", + "examine": "Ancient ogre bones from the burial tomb.", + "grand_exchange_price": "16300", + "durability": null, + "name": "Ourg bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4834" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "16300", + "durability": null, + "name": "Ourg bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4835" + }, + { + "examine": "Some strange liquid given to you by Zavistic Rarve.", + "durability": null, + "name": "Strange potion", + "archery_ticket_price": "0", + "id": "4836" + }, + { + "examine": "A book of necromantic spells.", + "durability": null, + "name": "Necromancy book", + "archery_ticket_price": "0", + "id": "4837", + "equipment_slot": "5" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4838" + }, + { + "examine": "A key to some sort of special tomb area.", + "durability": null, + "name": "Ogre gate key", + "archery_ticket_price": "0", + "id": "4839" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this rogue's purse potion.", + "grand_exchange_price": "2194", + "durability": null, + "name": "Rogue's purse potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4840" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2194", + "durability": null, + "name": "Rogue's purse potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4841" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "4 doses of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "1430", + "durability": null, + "name": "Relicym's balm(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4842" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1430", + "durability": null, + "name": "Relicym's balm(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4843" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "3 doses of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "654", + "durability": null, + "name": "Relicym's balm(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4844" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "654", + "durability": null, + "name": "Relicym's balm(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4845" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "2 doses of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "325", + "durability": null, + "name": "Relicym's balm(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4846" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "325", + "durability": null, + "name": "Relicym's balm(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4847" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "1 dose of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "204", + "durability": null, + "name": "Relicym's balm(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4848" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "204", + "durability": null, + "name": "Relicym's balm(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4849" + }, + { + "ge_buy_limit": "100", + "examine": "A key which opens a coffin!", + "grand_exchange_price": "1963", + "durability": null, + "name": "Ogre coffin key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4850" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1963", + "durability": null, + "name": "Ogre coffin key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4851" + }, + { + "examine": "A pot of crushed fayrg bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4852" + }, + { + "examine": "A pot of crushed raurg bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4853" + }, + { + "examine": "A pot of crushed ourg bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4854" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4855" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 100", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4856", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 75", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4857", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 50", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4858", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 25", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4859", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's leather hood.", + "durability": null, + "weight": "0.9", + "absorb": "5,2,0", + "equipment_slot": "0", + "grand_exchange_price": "51700", + "name": "Ahrim's hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4860" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "51700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4861" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 100", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4862", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 75", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4863", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 50", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4864", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 25", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4865", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "50600", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 0", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4866", + "stand_turn_anim": "1209" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "50600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's staff 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4867" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 100", + "weight": "5", + "archery_ticket_price": "0", + "id": "4868", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 75", + "weight": "5", + "archery_ticket_price": "0", + "id": "4869", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 50", + "weight": "5", + "archery_ticket_price": "0", + "id": "4870", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 25", + "weight": "5", + "archery_ticket_price": "0", + "id": "4871", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe top.", + "durability": null, + "weight": "5", + "absorb": "10,5,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1100000", + "name": "Ahrim's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4872" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1100000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4873" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 100", + "weight": "12", + "archery_ticket_price": "0", + "id": "4874", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 75", + "weight": "12", + "archery_ticket_price": "0", + "id": "4875", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 50", + "weight": "12", + "archery_ticket_price": "0", + "id": "4876", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 25", + "weight": "12", + "archery_ticket_price": "0", + "id": "4877", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Ahrim's skirt 0", + "tradeable": "true", + "weight": "12", + "archery_ticket_price": "0", + "id": "4878", + "absorb": "7,3,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1500000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4879" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 100", + "weight": "1", + "archery_ticket_price": "0", + "id": "4880", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 75", + "weight": "1", + "archery_ticket_price": "0", + "id": "4881", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 50", + "weight": "1", + "archery_ticket_price": "0", + "id": "4882", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 25", + "weight": "1", + "archery_ticket_price": "0", + "id": "4883", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "equipment_slot": "0", + "grand_exchange_price": "1300000", + "name": "Dharok's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4884" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1300000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4885" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 100", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4886", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 75", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4887", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 50", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4888", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 25", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4889", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "render_anim": "134", + "equipment_slot": "3", + "grand_exchange_price": "442600", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "tradeable": "true", + "name": "Dharok's axe 0", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4890", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "442600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's axe 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4891" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 100", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4892", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 75", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4893", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 50", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4894", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 25", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4895", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's platebody armour.", + "durability": null, + "weight": "9.9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "438200", + "name": "Dharok's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4896" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "438200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4897" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 100", + "weight": "10", + "archery_ticket_price": "0", + "id": "4898", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 75", + "weight": "10", + "archery_ticket_price": "0", + "id": "4899", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 50", + "weight": "10", + "archery_ticket_price": "0", + "id": "4900", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 25", + "weight": "10", + "archery_ticket_price": "0", + "id": "4901", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "676000", + "durability": null, + "name": "Dharok's legs 0", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "4902", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "676000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's legs 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4903" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 100", + "archery_ticket_price": "0", + "id": "4904", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 75", + "archery_ticket_price": "0", + "id": "4905", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 50", + "archery_ticket_price": "0", + "id": "4906", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 25", + "archery_ticket_price": "0", + "id": "4907", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "368200", + "name": "Guthan's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4908" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "368200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4909" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 100", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4910", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 75", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4911", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 50", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4912", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 25", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4913", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "379500", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "tradeable": "true", + "name": "Guthan's spear 0", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4914", + "stand_turn_anim": "1209" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "379500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's spear 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4915" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 100", + "weight": "9", + "archery_ticket_price": "0", + "id": "4916", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 75", + "weight": "9", + "archery_ticket_price": "0", + "id": "4917", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 50", + "weight": "9", + "archery_ticket_price": "0", + "id": "4918", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 25", + "weight": "9", + "archery_ticket_price": "0", + "id": "4919", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's platebody armour.", + "durability": null, + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "245900", + "name": "Guthan's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4920" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "245900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4921" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 100", + "weight": "8", + "archery_ticket_price": "0", + "id": "4922", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 75", + "weight": "8", + "archery_ticket_price": "0", + "id": "4923", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 50", + "weight": "8", + "archery_ticket_price": "0", + "id": "4924", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 25", + "weight": "8", + "archery_ticket_price": "0", + "id": "4925", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "240900", + "durability": null, + "name": "Guthan's skirt 0", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "4926", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "240900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4927" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 100", + "archery_ticket_price": "0", + "id": "4928", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 75", + "archery_ticket_price": "0", + "id": "4929", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 50", + "archery_ticket_price": "0", + "id": "4930", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 25", + "archery_ticket_price": "0", + "id": "4931", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's coif.", + "durability": null, + "absorb": "0,5,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "7557", + "name": "Karil's coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4932" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "7557", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4933" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 100", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4934", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 75", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4935", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 50", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4936", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 25", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4937", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "render_anim": "372", + "equipment_slot": "3", + "grand_exchange_price": "106300", + "stand_anim": "2074", + "name": "Karil's x-bow 0", + "tradeable": "true", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4938", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "106300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's x-bow 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4939" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 100", + "weight": "6", + "archery_ticket_price": "0", + "id": "4940", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 75", + "weight": "6", + "archery_ticket_price": "0", + "id": "4941", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 50", + "weight": "6", + "archery_ticket_price": "0", + "id": "4942", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 25", + "weight": "6", + "archery_ticket_price": "0", + "id": "4943", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's leather body armour.", + "durability": null, + "weight": "6", + "absorb": "0,10,5", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1500000", + "name": "Karil's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4944" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "1500000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4945" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 100", + "weight": "2", + "archery_ticket_price": "0", + "id": "4946", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 75", + "weight": "2", + "archery_ticket_price": "0", + "id": "4947", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 50", + "weight": "2", + "archery_ticket_price": "0", + "id": "4948", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 25", + "weight": "2", + "archery_ticket_price": "0", + "id": "4949", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "153100", + "durability": null, + "name": "Karil's skirt 0", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "4950", + "absorb": "0,7,3", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "153100", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4951" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 100", + "archery_ticket_price": "0", + "id": "4952", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 75", + "archery_ticket_price": "0", + "id": "4953", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 50", + "archery_ticket_price": "0", + "id": "4954", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 25", + "archery_ticket_price": "0", + "id": "4955", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "78200", + "name": "Torag's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4956" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "78200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4957" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 100", + "archery_ticket_price": "0", + "id": "4958", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 75", + "archery_ticket_price": "0", + "id": "4959", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 50", + "archery_ticket_price": "0", + "id": "4960", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 25", + "archery_ticket_price": "0", + "id": "4961", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "95600", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4962" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's hammer 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4963" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 100", + "weight": "9", + "archery_ticket_price": "0", + "id": "4964", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 75", + "weight": "9", + "archery_ticket_price": "0", + "id": "4965", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 50", + "weight": "9", + "archery_ticket_price": "0", + "id": "4966", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 25", + "weight": "9", + "archery_ticket_price": "0", + "id": "4967", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's platebody armour.", + "durability": null, + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "271600", + "name": "Torag's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4968" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "271600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4969" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 100", + "weight": "9", + "archery_ticket_price": "0", + "id": "4970", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 75", + "weight": "9", + "archery_ticket_price": "0", + "id": "4971", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 50", + "weight": "9", + "archery_ticket_price": "0", + "id": "4972", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 25", + "weight": "9", + "archery_ticket_price": "0", + "id": "4973", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "371300", + "durability": null, + "name": "Torag's legs 0", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "4974", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "371300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's legs 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4975" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 100", + "archery_ticket_price": "0", + "id": "4976", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 75", + "archery_ticket_price": "0", + "id": "4977", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 50", + "archery_ticket_price": "0", + "id": "4978", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 25", + "archery_ticket_price": "0", + "id": "4979", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "648900", + "name": "Verac's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4980" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "648900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4981" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 100", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4982", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 75", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4983", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 50", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4984", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 25", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4985", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "render_anim": "1426", + "equipment_slot": "3", + "grand_exchange_price": "95500", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "tradeable": "true", + "name": "Verac's flail 0", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4986", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's flail 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4987" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 100", + "weight": "5", + "archery_ticket_price": "0", + "id": "4988", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 75", + "weight": "5", + "archery_ticket_price": "0", + "id": "4989", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 50", + "weight": "5", + "archery_ticket_price": "0", + "id": "4990", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 25", + "weight": "5", + "archery_ticket_price": "0", + "id": "4991", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's brassard.", + "durability": null, + "weight": "5", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "174000", + "name": "Verac's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4992" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "174000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4993" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 100", + "weight": "5", + "archery_ticket_price": "0", + "id": "4994", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 75", + "weight": "5", + "archery_ticket_price": "0", + "id": "4995", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 50", + "weight": "5", + "archery_ticket_price": "0", + "id": "4996", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 25", + "weight": "5", + "archery_ticket_price": "0", + "id": "4997", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "321600", + "durability": null, + "name": "Verac's skirt 0", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "4998", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "321600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4999" + }, + { + "ge_buy_limit": "1000", + "examine": "It's incredibly slimy.", + "grand_exchange_price": "373", + "durability": null, + "name": "Raw cave eel", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5001" + }, + { + "ge_buy_limit": "1000", + "examine": "It's a bit slimy.", + "grand_exchange_price": "164", + "durability": null, + "name": "Cave eel", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5003" + }, + { + "examine": "That's disgusting!", + "durability": null, + "name": "Frog spawn", + "archery_ticket_price": "0", + "id": "5004" + }, + { + "durability": null, + "name": "Raw cave eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5005" + }, + { + "durability": null, + "name": "Burnt cave eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5006" + }, + { + "durability": null, + "name": "Cave eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5007" + }, + { + "examine": "A book about the ancient goblin tribes.", + "durability": null, + "name": "Goblin symbol book", + "weight": "1", + "archery_ticket_price": "0", + "id": "5009" + }, + { + "examine": "You found the Lumbridge silverware in the HAM cave.", + "durability": null, + "name": "Silverware", + "archery_ticket_price": "0", + "id": "5011" + }, + { + "examine": "A peace treaty between Lumbridge and the Cave Goblins.", + "durability": null, + "name": "Peace treaty", + "archery_ticket_price": "0", + "id": "5012" + }, + { + "shop_price": "900", + "examine": "A helmet with a lamp on it.", + "grand_exchange_price": "380", + "durability": null, + "name": "Mining helmet", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5013", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{11,65}", + "shop_price": "900", + "ge_buy_limit": "100", + "examine": "A helmet with an unlit lamp on it.", + "durability": null, + "weight": "1", + "equipment_slot": "0", + "grand_exchange_price": "342", + "name": "Mining helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5014", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "342", + "durability": null, + "name": "Mining helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5015" + }, + { + "ge_buy_limit": "100", + "shop_price": "600", + "turn90cw_anim": "1207", + "examine": "Basic but brutal!", + "walk_anim": "1205", + "durability": null, + "weight": "1.3", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "two_handed": "false", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "219", + "stand_anim": "813", + "tradeable": "true", + "name": "Bone spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5016", + "stand_turn_anim": "1209", + "bonuses": "11,11,11,0,0,1,1,0,0,0,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5017" + }, + { + "shop_price": "600", + "ge_buy_limit": "100", + "examine": "Basic but brutal!", + "durability": null, + "weight": "0.9", + "attack_speed": "6", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "384", + "name": "Bone club", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5018", + "bonuses": "-4,-4,16,-4,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone club", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5019" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5020" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5021" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5022" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5023" + }, + { + "remove_sleeves": "true", + "shop_price": "812", + "ge_buy_limit": "100", + "examine": "Far too small to wear.", + "grand_exchange_price": "710", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5024", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "710", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5025" + }, + { + "remove_sleeves": "true", + "shop_price": "812", + "ge_buy_limit": "100", + "examine": "Yellow top, too small for me.", + "grand_exchange_price": "908", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5026", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "908", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5027" + }, + { + "remove_sleeves": "true", + "shop_price": "812", + "ge_buy_limit": "100", + "examine": "Blue top, very tiny.", + "grand_exchange_price": "1357", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5028", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1357", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5029" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "867", + "examine": "Tiny!", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5030", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "867", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5031" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "1023", + "examine": "Tiny!", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5032", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1023", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5033" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "1282", + "examine": "Tiny!", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5034", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1282", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5035" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "746", + "examine": "A pair of long dwarven trousers... long for dwarves, of course.", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5036", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "746", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5037" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "378", + "examine": "A pair of long dwarven trousers... long for dwarves, of course.", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5038", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "378", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5039" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "442", + "examine": "A pair of long dwarven trousers... long for dwarves, of course.", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5040", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "442", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5041" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "examine": "These look great, on dwarves!", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5042", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5043" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1229", + "examine": "Yellow shorts. Far too small for you.", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5044", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1229", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5045" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2582", + "examine": "Blue shorts, these would look great on dwarves!", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5046", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2582", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5047" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "681", + "examine": "A brown skirt. Size small!", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5048", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "681", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5049" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1151", + "examine": "A blue skirt.", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5050", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1151", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5051" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "803", + "examine": "Lilac skirt.", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5052", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "803", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5053" + }, + { + "examine": "A short angry guy.", + "durability": null, + "name": "Dwarf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5054" + }, + { + "durability": null, + "name": "Dwarf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5055" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5056" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5057" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5058" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5059" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5060", + "equipment_slot": "3" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5061", + "equipment_slot": "3" + }, + { + "examine": "One of a pair I assume.", + "durability": null, + "name": "Left boot", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5062" + }, + { + "examine": "A good looking boot, for the right foot. Literally.", + "durability": null, + "name": "Right boot", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5063" + }, + { + "examine": "A lovely pair of boots.", + "durability": null, + "name": "Exquisite boots", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5064" + }, + { + "examine": "An old library book. It bears the title 'Scholars to Dwarven Costumes'.", + "durability": null, + "name": "Book on costumes", + "archery_ticket_price": "0", + "id": "5065" + }, + { + "examine": "These notes are from a meeting of the Keldagrim Consortium.", + "durability": null, + "name": "Meeting notes", + "archery_ticket_price": "0", + "id": "5066" + }, + { + "examine": "Clothes for the sculptor's model.", + "durability": null, + "name": "Exquisite clothes", + "archery_ticket_price": "0", + "id": "5067" + }, + { + "examine": "A master at farming.", + "durability": null, + "name": "Master farmer", + "archery_ticket_price": "0", + "id": "5068" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5070" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5071" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5072" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5073" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5074" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5075" + }, + { + "examine": "A red bird's egg.", + "durability": null, + "name": "Bird's egg", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5076" + }, + { + "examine": "A blue bird's egg.", + "durability": null, + "name": "Bird's egg", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5077" + }, + { + "examine": "A green bird's egg.", + "durability": null, + "name": "Bird's egg", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5078" + }, + { + "requirements": "{2,19}", + "shop_price": "84", + "ge_buy_limit": "100", + "examine": "A marigold seed - plant in flower patch.", + "grand_exchange_price": "8", + "durability": null, + "name": "Marigold seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5096" + }, + { + "requirements": "{11,19}", + "shop_price": "98", + "ge_buy_limit": "100", + "examine": "A rosemary seed - plant in flower patch.", + "grand_exchange_price": "3", + "durability": null, + "name": "Rosemary seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5097" + }, + { + "requirements": "{24,19}", + "shop_price": "14", + "ge_buy_limit": "100", + "examine": "A nasturtium seed - plant in flower patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Nasturtium seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5098" + }, + { + "requirements": "{19,25}", + "ge_buy_limit": "100", + "examine": "A woad seed - plant in flower patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Woad seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5099" + }, + { + "requirements": "{19,26}", + "shop_price": "70", + "ge_buy_limit": "100", + "examine": "A limpwurt seed - plant in flower patch.", + "grand_exchange_price": "273", + "durability": null, + "name": "Limpwurt seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5100" + }, + { + "requirements": "{10,19}", + "ge_buy_limit": "100", + "examine": "A redberry seed - Plant in a bush patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Redberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5101" + }, + { + "requirements": "{22,19}", + "ge_buy_limit": "100", + "examine": "A cadavaberry seed - Plant in a bush patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Cadavaberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5102" + }, + { + "requirements": "{19,36}", + "ge_buy_limit": "100", + "examine": "A dwellberry seed - Plant in a bush patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Dwellberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5103" + }, + { + "requirements": "{19,48}", + "shop_price": "22", + "ge_buy_limit": "100", + "examine": "A jangerberry bush seed - plant in a bush patch.", + "grand_exchange_price": "2", + "durability": null, + "name": "Jangerberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5104" + }, + { + "requirements": "{19,59}", + "ge_buy_limit": "100", + "examine": "A whiteberry bush seed - plant in a bush patch.", + "grand_exchange_price": "8", + "durability": null, + "name": "Whiteberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5105" + }, + { + "requirements": "{19,70}", + "ge_buy_limit": "100", + "examine": "A poison ivy bush seed - plant in a bush patch.", + "grand_exchange_price": "38", + "durability": null, + "name": "Poison ivy seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5106" + }, + { + "requirements": "{19,55}", + "shop_price": "29", + "ge_buy_limit": "100", + "examine": "A Cactus seed - plant in a cactus patch.", + "grand_exchange_price": "10", + "durability": null, + "name": "Cactus seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5280" + }, + { + "requirements": "{19,63}", + "ge_buy_limit": "100", + "examine": "Also known as Deadly Nightshade - plant in a belladonna patch.", + "grand_exchange_price": "24", + "durability": null, + "name": "Belladonna seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5281" + }, + { + "requirements": "{19,53}", + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Mushroom spore", + "archery_ticket_price": "0", + "id": "5282" + }, + { + "requirements": "{19,27}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "4", + "durability": null, + "name": "Apple tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5283" + }, + { + "requirements": "{19,33}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "5", + "durability": null, + "name": "Banana tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5284" + }, + { + "requirements": "{19,39}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "30", + "durability": null, + "name": "Orange tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5285" + }, + { + "requirements": "{19,42}", + "ge_buy_limit": "100", + "examine": "Plant this in a plant pot of soil to grow a sapling.", + "grand_exchange_price": "265", + "durability": null, + "name": "Curry tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5286" + }, + { + "requirements": "{19,51}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "13700", + "durability": null, + "name": "Pineapple seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5287" + }, + { + "requirements": "{19,57}", + "ge_buy_limit": "100", + "examine": "Plant this in a plant pot of soil to grow a sapling.", + "grand_exchange_price": "41200", + "durability": null, + "name": "Papaya tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5288" + }, + { + "requirements": "{19,68}", + "shop_price": "35000", + "ge_buy_limit": "100", + "examine": "Plant in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "105100", + "durability": null, + "name": "Palm tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5289" + }, + { + "requirements": "{19,72}", + "shop_price": "35000", + "ge_buy_limit": "100", + "examine": "Plant in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "32000", + "durability": null, + "name": "Calquat tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5290" + }, + { + "requirements": "{9,19}", + "ge_buy_limit": "100", + "examine": "A guam seed - plant in a herb patch.", + "grand_exchange_price": "5", + "durability": null, + "name": "Guam seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5291" + }, + { + "requirements": "{14,19}", + "ge_buy_limit": "100", + "examine": "A marrentill seed - plant in a herb patch.", + "grand_exchange_price": "5", + "durability": null, + "name": "Marrentill seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5292" + }, + { + "requirements": "{19,19}", + "ge_buy_limit": "100", + "examine": "A tarromin seed - plant in a herb patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Tarromin seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5293" + }, + { + "requirements": "{19,26}", + "ge_buy_limit": "100", + "examine": "A harralander seed - plant in a herb patch.", + "grand_exchange_price": "4", + "durability": null, + "name": "Harralander seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5294" + }, + { + "requirements": "{19,32}", + "shop_price": "4000", + "ge_buy_limit": "100", + "examine": "A Ranarr seed - plant in a herb patch.", + "grand_exchange_price": "9489", + "durability": null, + "name": "Ranarr seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5295" + }, + { + "requirements": "{19,38}", + "ge_buy_limit": "100", + "examine": "A toadflax seed - plant in a herb patch.", + "grand_exchange_price": "2980", + "durability": null, + "name": "Toadflax seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5296" + }, + { + "requirements": "{19,44}", + "ge_buy_limit": "100", + "examine": "An irit seed - plant in a herb patch.", + "grand_exchange_price": "181", + "durability": null, + "name": "Irit seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5297" + }, + { + "requirements": "{19,50}", + "ge_buy_limit": "100", + "examine": "An avantoe seed - plant in a herb patch.", + "grand_exchange_price": "2492", + "durability": null, + "name": "Avantoe seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5298" + }, + { + "requirements": "{19,56}", + "ge_buy_limit": "100", + "examine": "A kwuarm seed - plant in a herb patch.", + "grand_exchange_price": "537", + "durability": null, + "name": "Kwuarm seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5299" + }, + { + "requirements": "{19,62}", + "ge_buy_limit": "100", + "examine": "A snapdragon seed - plant in a herb patch.", + "grand_exchange_price": "47800", + "durability": null, + "name": "Snapdragon seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5300" + }, + { + "requirements": "{19,67}", + "ge_buy_limit": "100", + "examine": "A cadantine seed - plant in a herb patch.", + "grand_exchange_price": "1253", + "durability": null, + "name": "Cadantine seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5301" + }, + { + "requirements": "{19,73}", + "ge_buy_limit": "100", + "examine": "A lantadyme seed - plant in a herb patch.", + "grand_exchange_price": "37100", + "durability": null, + "name": "Lantadyme seed", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5302" + }, + { + "requirements": "{19,79}", + "ge_buy_limit": "100", + "examine": "A dwarf weed seed - plant in a herb patch.", + "grand_exchange_price": "41900", + "durability": null, + "name": "Dwarf weed seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5303" + }, + { + "requirements": "{19,85}", + "ge_buy_limit": "100", + "examine": "A Torstol seed - plant in a herb patch.", + "grand_exchange_price": "302300", + "durability": null, + "name": "Torstol seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5304" + }, + { + "requirements": "{3,19}", + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "A barley seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Barley seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5305" + }, + { + "requirements": "{13,19}", + "shop_price": "86", + "ge_buy_limit": "100", + "examine": "A jute seed - plant in a hops patch.", + "grand_exchange_price": "2", + "durability": null, + "name": "Jute seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5306" + }, + { + "requirements": "{4,19}", + "shop_price": "52", + "ge_buy_limit": "100", + "examine": "A hammerstone hop seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Hammerstone seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5307" + }, + { + "requirements": "{8,19}", + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "An Asgarnian hop seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Asgarnian seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5308" + }, + { + "requirements": "{16,19}", + "shop_price": "210", + "ge_buy_limit": "100", + "examine": "A yanillian hop seed - plant in a hops patch.", + "grand_exchange_price": "11", + "durability": null, + "name": "Yanillian seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5309" + }, + { + "requirements": "{21,19}", + "shop_price": "8", + "ge_buy_limit": "100", + "examine": "A krandorian hop seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Krandorian seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5310" + }, + { + "requirements": "{19,28}", + "shop_price": "14", + "ge_buy_limit": "100", + "examine": "A wildblood hop seed - plant in a hops patch.", + "grand_exchange_price": "12", + "durability": null, + "name": "Wildblood seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5311" + }, + { + "requirements": "{15,19}", + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "22", + "durability": null, + "name": "Acorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5312" + }, + { + "requirements": "{19,30}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "945", + "durability": null, + "name": "Willow seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5313" + }, + { + "requirements": "{19,45}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "35400", + "durability": null, + "name": "Maple seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5314" + }, + { + "requirements": "{19,60}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "81900", + "durability": null, + "name": "Yew seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5315" + }, + { + "requirements": "{19,75}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "276900", + "durability": null, + "name": "Magic seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5316" + }, + { + "requirements": "{19,83}", + "shop_price": "55000", + "examine": "Plant this in a plant pot of soil to grow a sapling.", + "durability": null, + "name": "Spirit seed", + "archery_ticket_price": "0", + "id": "5317" + }, + { + "shop_price": "8", + "ge_buy_limit": "500", + "examine": "A potato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Potato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5318" + }, + { + "requirements": "{5,19}", + "shop_price": "10", + "ge_buy_limit": "500", + "examine": "An onion seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Onion seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5319" + }, + { + "requirements": "{20,19}", + "ge_buy_limit": "500", + "examine": "A sweetcorn seed - plant in an allotment.", + "grand_exchange_price": "2", + "durability": null, + "name": "Sweetcorn seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5320" + }, + { + "requirements": "{19,47}", + "shop_price": "56", + "ge_buy_limit": "500", + "examine": "A watermelon seed - plant in an allotment.", + "grand_exchange_price": "2491", + "durability": null, + "name": "Watermelon seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5321" + }, + { + "requirements": "{12,19}", + "shop_price": "10", + "ge_buy_limit": "500", + "examine": "A tomato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Tomato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5322" + }, + { + "requirements": "{19,31}", + "ge_buy_limit": "500", + "examine": "A strawberry seed - plant in an allotment.", + "grand_exchange_price": "240", + "durability": null, + "name": "Strawberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5323" + }, + { + "requirements": "{7,19}", + "shop_price": "25", + "ge_buy_limit": "500", + "examine": "A cabbage seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Cabbage seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5324" + }, + { + "shop_price": "12", + "ge_buy_limit": "100", + "examine": "Not suitable for archaeological digs.", + "grand_exchange_price": "106", + "durability": null, + "name": "Gardening trowel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5325" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "106", + "durability": null, + "name": "Gardening trowel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5326" + }, + { + "examine": "I need to attach this to its head.", + "durability": null, + "name": "Spade handle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5327" + }, + { + "examine": "I need to attach this to its handle.", + "durability": null, + "name": "Spade head", + "archery_ticket_price": "0", + "id": "5328" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Good for pruning away diseased leaves.", + "grand_exchange_price": "204", + "durability": null, + "name": "Secateurs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5329", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "204", + "durability": null, + "name": "Secateurs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5330" + }, + { + "shop_price": "8", + "ge_buy_limit": "100", + "examine": "This watering can is empty.", + "grand_exchange_price": "298", + "durability": null, + "name": "Watering can", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5331" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "298", + "durability": null, + "name": "Watering can", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5332" + }, + { + "shop_price": "8", + "examine": " This watering can is almost empty.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(1)", + "archery_ticket_price": "0", + "weight": "0.2", + "id": "5333" + }, + { + "shop_price": "8", + "examine": "This watering can is three-quarters empty.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(2)", + "archery_ticket_price": "0", + "weight": "0.3", + "id": "5334" + }, + { + "shop_price": "8", + "examine": "This watering can is just under half-full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(3)", + "archery_ticket_price": "0", + "weight": "0.4", + "id": "5335" + }, + { + "shop_price": "8", + "examine": " Some would say this watering can is half-full, others half-empty.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(4)", + "archery_ticket_price": "0", + "weight": "0.5", + "id": "5336" + }, + { + "shop_price": "8", + "examine": "This watering can is just over half-full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(5)", + "archery_ticket_price": "0", + "weight": "0.6", + "id": "5337" + }, + { + "shop_price": "8", + "examine": " This watering can is three quarters full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(6)", + "archery_ticket_price": "0", + "weight": "0.7", + "id": "5338" + }, + { + "shop_price": "8", + "examine": " This watering can is almost completely full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(7)", + "archery_ticket_price": "0", + "weight": "0.8", + "id": "5339" + }, + { + "shop_price": "8", + "examine": " This watering can is completely full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(8)", + "archery_ticket_price": "0", + "weight": "0.9", + "id": "5340" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Use this to clear weeds.", + "grand_exchange_price": "99", + "durability": null, + "name": "Rake", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "5341" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "99", + "durability": null, + "name": "Rake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5342" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Use this to plant seeds with.", + "grand_exchange_price": "117", + "durability": null, + "name": "Seed dibber", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5343" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "117", + "durability": null, + "name": "Seed dibber", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5344" + }, + { + "ge_buy_limit": "100", + "examine": "A pair of gardening boots.", + "grand_exchange_price": "3186", + "durability": null, + "name": "Gardening boots", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5345", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3186", + "durability": null, + "name": "Gardening boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5346" + }, + { + "examine": "I need to reattach this to its head.", + "durability": null, + "name": "Rake handle", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5347" + }, + { + "examine": "I need to reattach this to its handle.", + "durability": null, + "name": "Rake head", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5348" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An empty plant pot.", + "grand_exchange_price": "20", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5350" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5351" + }, + { + "shop_price": "9", + "ge_buy_limit": "100", + "examine": "An unfired plant pot.", + "grand_exchange_price": "7", + "durability": null, + "name": "Unfired plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5352" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Unfired plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5353" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "A plant pot filled with soil.", + "grand_exchange_price": "340", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5354" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "340", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5355" + }, + { + "shop_price": "1", + "examine": "A plant pot filled with soil.", + "grand_exchange_price": "243", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5356" + }, + { + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5357" + }, + { + "shop_price": "200", + "examine": "An acorn has been sown and watered in this plant pot.", + "durability": null, + "name": "Oak seedling", + "archery_ticket_price": "0", + "id": "5358" + }, + { + "examine": "A willow tree seed has been sown and watered in this plant pot", + "durability": null, + "name": "Willow seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5359" + }, + { + "examine": "A maple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Maple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5360" + }, + { + "examine": "A yew seed has been sown in the plant pot", + "durability": null, + "name": "Yew seedling", + "weight": "1", + "archery_ticket_price": "0", + "id": "5361" + }, + { + "examine": "A magic tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Magic seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5362" + }, + { + "examine": "A spirit seedling is growing in this pot. It has been sown and watered.", + "durability": null, + "name": "Spirit seedling", + "archery_ticket_price": "0", + "id": "5363" + }, + { + "shop_price": "200", + "examine": "An acorn has been sown and watered in this plant pot.", + "durability": null, + "name": "Oak seedling", + "archery_ticket_price": "0", + "id": "5364" + }, + { + "examine": "A willow tree seed has been sown and watered in this plant pot", + "durability": null, + "name": "Willow seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5365" + }, + { + "examine": "A maple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Maple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5366" + }, + { + "examine": "A yew seed has been sown in the plant pot", + "durability": null, + "name": "Yew seedling", + "weight": "1", + "archery_ticket_price": "0", + "id": "5367" + }, + { + "examine": "A magic tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Magic seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5368" + }, + { + "examine": "A spirit seedling is growing in this pot. It has been sown and watered.", + "durability": null, + "name": "Spirit seedling", + "archery_ticket_price": "0", + "id": "5369" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Oak sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5370" + }, + { + "examine": "This sapling is ready to be replanted in a tree patch.", + "durability": null, + "name": "Willow sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5371" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Maple sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5372" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Yew sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5373" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Magic sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5374" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Spirit sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5375" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "An empty fruit basket.", + "grand_exchange_price": "1", + "durability": null, + "name": "Basket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5376" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Basket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5377" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5378" + }, + { + "durability": null, + "name": "Apples(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5379" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5380" + }, + { + "durability": null, + "name": "Apples(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5381" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5382" + }, + { + "durability": null, + "name": "Apples(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5383" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(4)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5384" + }, + { + "durability": null, + "name": "Apples(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5385" + }, + { + "ge_buy_limit": "1000", + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "2448", + "durability": null, + "name": "Apples(5)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5386" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2448", + "durability": null, + "name": "Apples(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5387" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5388" + }, + { + "durability": null, + "name": "Oranges(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5389" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5390" + }, + { + "durability": null, + "name": "Oranges(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5391" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5392" + }, + { + "durability": null, + "name": "Oranges(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5393" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5394" + }, + { + "durability": null, + "name": "Oranges(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5395" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "A common fruit.", + "grand_exchange_price": "5649", + "durability": null, + "name": "Oranges(5)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5396" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5649", + "durability": null, + "name": "Oranges(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5397" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(1)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5398" + }, + { + "durability": null, + "name": "Strawberries(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5399" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(2)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5400" + }, + { + "durability": null, + "name": "Strawberries(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5401" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(3)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5402" + }, + { + "durability": null, + "name": "Strawberries(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5403" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(4)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5404" + }, + { + "durability": null, + "name": "Strawberries(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5405" + }, + { + "ge_buy_limit": "10000", + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "406", + "durability": null, + "name": "Strawberries(5)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5406" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "406", + "durability": null, + "name": "Strawberries(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5407" + }, + { + "examine": "A fruit basket filled with bananas.", + "grand_exchange_price": "1064", + "durability": null, + "name": "Bananas(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5408" + }, + { + "durability": null, + "name": "Bananas(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5409" + }, + { + "examine": "A fruit basket filled with bananas.", + "grand_exchange_price": "1064", + "durability": null, + "name": "Bananas(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5410" + }, + { + "durability": null, + "name": "Bananas(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5411" + }, + { + "examine": "A fruit basket filled with bananas.", + "grand_exchange_price": "1064", + "durability": null, + "name": "Bananas(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5412" + }, + { + "durability": null, + "name": "Bananas(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5413" + }, + { + "shop_price": "2", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "171", + "durability": null, + "name": "Bananas(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5414" + }, + { + "durability": null, + "name": "Bananas(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5415" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "1637", + "durability": null, + "name": "Bananas(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5416" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1637", + "durability": null, + "name": "Bananas(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5417" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An empty sack.", + "grand_exchange_price": "45", + "durability": null, + "name": "Empty sack", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5418" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "45", + "durability": null, + "name": "Empty sack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5419" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(1)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5420" + }, + { + "durability": null, + "name": "Potatoes(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5421" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(2)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5422" + }, + { + "durability": null, + "name": "Potatoes(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5423" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(3)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5424" + }, + { + "durability": null, + "name": "Potatoes(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5425" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(4)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5426" + }, + { + "durability": null, + "name": "Potatoes(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5427" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(5)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5428" + }, + { + "durability": null, + "name": "Potatoes(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5429" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(6)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5430" + }, + { + "durability": null, + "name": "Potatoes(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5431" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(7)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5432" + }, + { + "durability": null, + "name": "Potatoes(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5433" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(8)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5434" + }, + { + "durability": null, + "name": "Potatoes(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5435" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(9)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5436" + }, + { + "durability": null, + "name": "Potatoes(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5437" + }, + { + "ge_buy_limit": "1000", + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1052", + "durability": null, + "name": "Potatoes(10)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5438" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1052", + "durability": null, + "name": "Potatoes(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5439" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(1)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5440" + }, + { + "durability": null, + "name": "Onions(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5441" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(2)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5442" + }, + { + "durability": null, + "name": "Onions(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5443" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(3)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5444" + }, + { + "durability": null, + "name": "Onions(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5445" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(4)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5446" + }, + { + "durability": null, + "name": "Onions(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5447" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(5)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5448" + }, + { + "durability": null, + "name": "Onions(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5449" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(6)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5450" + }, + { + "durability": null, + "name": "Onions(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5451" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(7)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5452" + }, + { + "durability": null, + "name": "Onions(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5453" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(8)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5454" + }, + { + "durability": null, + "name": "Onions(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5455" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(9)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5456" + }, + { + "durability": null, + "name": "Onions(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5457" + }, + { + "ge_buy_limit": "1000", + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "489", + "durability": null, + "name": "Onions(10)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5458" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "489", + "durability": null, + "name": "Onions(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5459" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5460" + }, + { + "durability": null, + "name": "Cabbages(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5461" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5462" + }, + { + "durability": null, + "name": "Cabbages(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5463" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5464" + }, + { + "durability": null, + "name": "Cabbages(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5465" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5466" + }, + { + "durability": null, + "name": "Cabbages(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5467" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5468" + }, + { + "durability": null, + "name": "Cabbages(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5469" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5470" + }, + { + "durability": null, + "name": "Cabbages(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5471" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5472" + }, + { + "durability": null, + "name": "Cabbages(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5473" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5474" + }, + { + "durability": null, + "name": "Cabbages(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5475" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5476" + }, + { + "durability": null, + "name": "Cabbages(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5477" + }, + { + "ge_buy_limit": "1000", + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "917", + "durability": null, + "name": "Cabbages(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5478" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "917", + "durability": null, + "name": "Cabbages(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5479" + }, + { + "examine": "An apple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Apple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5480" + }, + { + "examine": "A banana tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Banana seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5481" + }, + { + "examine": "An orange tree seed has been sown (and watered)in this plant pot.", + "durability": null, + "name": "Orange seedling", + "archery_ticket_price": "0", + "id": "5482" + }, + { + "examine": "A curry seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Curry seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5483" + }, + { + "examine": "A pineapple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Pineapple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5484" + }, + { + "examine": "This needs watering before it will grow.", + "durability": null, + "name": "Papaya seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5485" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Palm seedling", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "5486" + }, + { + "examine": "A calquat tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Calquat seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5487" + }, + { + "examine": "An apple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Apple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5488" + }, + { + "examine": "A banana tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Banana seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5489" + }, + { + "examine": "An orange tree seed has been sown (and watered)in this plant pot.", + "durability": null, + "name": "Orange seedling", + "archery_ticket_price": "0", + "id": "5490" + }, + { + "examine": "A curry seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Curry seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5491" + }, + { + "examine": "A pineapple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Pineapple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5492" + }, + { + "examine": "This needs watering before it will grow.", + "durability": null, + "name": "Papaya seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5493" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Palm seedling", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "5494" + }, + { + "examine": "A calquat tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Calquat seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5495" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Apple sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5496" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Banana sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5497" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Orange sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5498" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Curry sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5499" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Pineapple sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5500" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Papaya sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5501" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Palm sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5502" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Calquat sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5503" + }, + { + "ge_buy_limit": "10000", + "examine": "A freshly picked strawberry.", + "grand_exchange_price": "23", + "durability": null, + "name": "Strawberry", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5504" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "23", + "durability": null, + "name": "Strawberry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5505" + }, + { + "examine": "The Wise Old Man of Draynor Village asked you to take this to someone.", + "durability": null, + "name": "Old man's message", + "archery_ticket_price": "0", + "id": "5506" + }, + { + "examine": "A tatty old book belonging to the Wise Old Man of Draynor Village.", + "durability": null, + "name": "Strange book", + "archery_ticket_price": "0", + "id": "5507" + }, + { + "examine": "A tatty old book belonging to the Wise Old Man of Draynor Village.", + "durability": null, + "name": "Book of folklore", + "archery_ticket_price": "0", + "id": "5508" + }, + { + "examine": "A small pouch used for storing essence.", + "durability": null, + "name": "Small pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5509" + }, + { + "examine": "A medium-sized pouch used for storing essence.", + "durability": null, + "name": "Medium pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5510" + }, + { + "examine": "A medium-sized pouch used for storing essence.", + "durability": null, + "name": "Medium pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5511" + }, + { + "shop_price": "25000", + "examine": "A large pouch used for storing essence.", + "durability": null, + "name": "Large pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5512" + }, + { + "shop_price": "25000", + "examine": "A large pouch used for storing essence.", + "durability": null, + "name": "Large pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5513" + }, + { + "shop_price": "50000", + "examine": "A giant-sized pouch used for storing essence.", + "durability": null, + "name": "Giant pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5514" + }, + { + "shop_price": "50000", + "examine": "A giant-sized pouch used for storing essence.", + "durability": null, + "name": "Giant pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5515" + }, + { + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "186900", + "durability": null, + "name": "Elemental talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5516" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "186900", + "durability": null, + "name": "Elemental talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5517" + }, + { + "examine": "When empty:", + "durability": null, + "name": "Scrying orb", + "weight": "1", + "archery_ticket_price": "0", + "id": "5518" + }, + { + "examine": "When empty:", + "durability": null, + "name": "Scrying orb", + "weight": "1", + "archery_ticket_price": "0", + "id": "5519" + }, + { + "examine": "Some research notes on abyssal space.", + "durability": null, + "name": "Abyssal book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5520" + }, + { + "ge_buy_limit": "100", + "examine": "A necklace embedded with mystical power.", + "grand_exchange_price": "720", + "durability": null, + "name": "Binding necklace", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5521", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "720", + "durability": null, + "name": "Binding necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5522" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A mould for tiaras.", + "grand_exchange_price": "315", + "durability": null, + "name": "Tiara mould", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5523" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "315", + "durability": null, + "name": "Tiara mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5524" + }, + { + "ge_buy_limit": "1000", + "examine": "Makes me feel like a Princess.", + "grand_exchange_price": "13", + "durability": null, + "name": "Tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5525", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5526" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of air.", + "grand_exchange_price": "5", + "durability": null, + "name": "Air tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5527", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Air tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5528" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the mind.", + "grand_exchange_price": "10", + "durability": null, + "name": "Mind tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5529", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Mind tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5530" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of water.", + "grand_exchange_price": "1351", + "durability": null, + "name": "Water tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5531", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1351", + "durability": null, + "name": "Water tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5532" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the body.", + "grand_exchange_price": "5", + "durability": null, + "name": "Body tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5533", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Body tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5534" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the earth.", + "grand_exchange_price": "4", + "durability": null, + "name": "Earth tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5535", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4", + "durability": null, + "name": "Earth tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5536" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of fire.", + "grand_exchange_price": "8", + "durability": null, + "name": "Fire tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5537", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Fire tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5538" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the cosmos.", + "grand_exchange_price": "8", + "durability": null, + "name": "Cosmic tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5539", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Cosmic tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5540" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of nature.", + "grand_exchange_price": "10", + "durability": null, + "name": "Nature tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5541", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Nature tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5542" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of chaos.", + "grand_exchange_price": "10", + "durability": null, + "name": "Chaos tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5543", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Chaos tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5544" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of law.", + "grand_exchange_price": "11", + "durability": null, + "name": "Law tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5545", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Law tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5546" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of death.", + "grand_exchange_price": "65", + "durability": null, + "name": "Death tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5547", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65", + "durability": null, + "name": "Death tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5548" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of Blood.", + "grand_exchange_price": "1058", + "durability": null, + "name": "Blood tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5549", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1058", + "durability": null, + "name": "Blood tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5550" + }, + { + "ge_buy_limit": "100", + "examine": " A tiara infused with the properties of the soul.", + "durability": null, + "name": "Soul tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "5551", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Soul tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5552" + }, + { + "remove_sleeves": "true", + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue top", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5553", + "bonuses": "0,0,0,0,0,10,10,10,10,10,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue mask", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5554", + "bonuses": "0,0,0,0,0,5,5,5,5,5,0,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue trousers", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5555", + "bonuses": "0,0,0,0,0,7,7,7,7,7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "examine": "Black banded leather gloves, a rogue's dream!", + "durability": null, + "name": "Rogue gloves", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5556", + "bonuses": "0,0,0,0,0,2,2,2,2,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Black banded leather boots, a rogue's dream!", + "durability": null, + "name": "Rogue boots", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5557", + "bonuses": "0,0,0,0,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "35", + "examine": "It can do almost anything!", + "durability": null, + "name": "Rogue kit", + "archery_ticket_price": "0", + "id": "5558" + }, + { + "examine": "A small satchel of bright powder!", + "durability": null, + "name": "Flash powder", + "weight": "1", + "archery_ticket_price": "0", + "id": "5559" + }, + { + "shop_price": "10", + "examine": "A useful hearing aid.", + "durability": null, + "name": "Stethoscope", + "archery_ticket_price": "0", + "id": "5560", + "equipment_slot": "5" + }, + { + "examine": "I can escape the Maze with this!", + "durability": null, + "name": "Mystic jewel", + "archery_ticket_price": "0", + "id": "5561" + }, + { + "examine": "A fraction of a roof.", + "durability": null, + "name": "Picture", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "5568" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "6000", + "ge_buy_limit": "100", + "examine": "An initiate Temple Knight's helm.", + "durability": null, + "weight": "2.2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "3512", + "name": "Initiate sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5574", + "bonuses": "0,0,0,-6,-2,13,14,11,-1,13,5,0,3,0,0" + }, + { + "requirements": "{1,20}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "An initiate Temple Knight's Armour.", + "durability": null, + "weight": "8", + "absorb": "1,0,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "5776", + "name": "Initiate hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5575", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,20,0,6,0,0" + }, + { + "requirements": "{1,20}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "An initiate Temple Knight's leg armour.", + "durability": null, + "weight": "7", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "4574", + "name": "Initiate cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5576", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,5,0,0" + }, + { + "examine": "A vial of something labelled 'Cupric Sulfate'.", + "durability": null, + "name": "Cupric sulphate", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5577" + }, + { + "examine": "A vial of something labelled 'Acetic Acid'.", + "durability": null, + "name": "Acetic acid", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5578" + }, + { + "examine": "A vial of something labelled 'Gypsum'.", + "durability": null, + "name": "Gypsum", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5579" + }, + { + "examine": "A vial of something labelled 'Sodium Chloride'.", + "durability": null, + "name": "Sodium chloride", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5580" + }, + { + "examine": "A vial of something labelled 'Nitrous Oxide'.", + "durability": null, + "name": "Nitrous oxide", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5581" + }, + { + "examine": "A vial of something labelled Dihydrogen Monoxide.", + "durability": null, + "name": "Vial of liquid", + "archery_ticket_price": "0", + "id": "5582" + }, + { + "examine": "A vial of something labelled 'Powdered Tin Ore'.", + "durability": null, + "name": "Tin ore powder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5583" + }, + { + "examine": "A vial of something labelled 'Powdered Cupric Ore'.", + "durability": null, + "name": "Cupric ore powder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5584" + }, + { + "examine": "It's a metal spade without a handle.", + "durability": null, + "name": "Metal spade", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "5586" + }, + { + "examine": "It's a metal spade without a handle.", + "durability": null, + "name": "Metal spade", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "5587" + }, + { + "examine": "Looks like a pretty boring read.", + "durability": null, + "name": "Alchemical notes", + "archery_ticket_price": "0", + "id": "5588" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5592" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5593" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5594" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5595" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5596" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5597" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5598" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5599" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5600" + }, + { + "shop_price": "14", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "33", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5601" + }, + { + "examine": "Useful for crafting items.", + "grand_exchange_price": "237", + "durability": null, + "name": "Bronze wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5602" + }, + { + "shop_price": "1", + "examine": "For shearing sheep.", + "grand_exchange_price": "41", + "durability": null, + "name": "Shears", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5603" + }, + { + "examine": "A very attractive magnet.", + "durability": null, + "name": "Magnet", + "archery_ticket_price": "0", + "id": "5604" + }, + { + "shop_price": "25", + "examine": "A dangerous looking knife.", + "grand_exchange_price": "102", + "durability": null, + "name": "Knife", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5605" + }, + { + "examine": "I can exchange this for one free makeover with the makeover mage.", + "durability": null, + "name": "Makeover voucher", + "weight": "1", + "archery_ticket_price": "0", + "id": "5606" + }, + { + "shop_price": "2", + "examine": "Some wheat heads.", + "grand_exchange_price": "20", + "durability": null, + "name": "Grain", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "5607", + "equipment_slot": "1" + }, + { + "examine": "A cunning animal.", + "durability": null, + "name": "Fox", + "archery_ticket_price": "0", + "id": "5608", + "equipment_slot": "3" + }, + { + "examine": "Normal: Yep. Definitely a chicken.", + "durability": null, + "name": "Chicken", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "5609", + "equipment_slot": "5" + }, + { + "examine": "There's not much sand left in the top half...", + "durability": null, + "name": "Hourglass", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5610" + }, + { + "durability": null, + "name": "Initiate sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5611" + }, + { + "durability": null, + "name": "Initiate hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5612" + }, + { + "durability": null, + "name": "Initiate cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5613" + }, + { + "turn90cw_anim": "330", + "walk_anim": "330", + "durability": null, + "turn90ccw_anim": "330", + "turn180_anim": "330", + "render_anim": "191", + "equipment_slot": "3", + "stand_anim": "330", + "name": "Magic carpet", + "run_anim": "330", + "archery_ticket_price": "0", + "id": "5614", + "stand_turn_anim": "330" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "5615" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "127", + "durability": null, + "name": "Bronze arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5616", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "138", + "durability": null, + "name": "Iron arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5617", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "159", + "durability": null, + "name": "Steel arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5618", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "176", + "durability": null, + "name": "Mithril arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5619", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "211", + "durability": null, + "name": "Adamant arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5620", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "415", + "durability": null, + "name": "Rune arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5621", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "1076", + "durability": null, + "name": "Bronze arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5622", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "1037", + "durability": null, + "name": "Iron arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5623", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "1038", + "durability": null, + "name": "Steel arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5624", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "718", + "durability": null, + "name": "Mithril arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5625", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "101", + "durability": null, + "name": "Adamant arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5626", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Rune arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5627", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "162", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5628", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "164", + "attack_audios": "2547,0,0,0", + "name": "Iron dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5629", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "173", + "attack_audios": "2547,0,0,0", + "name": "Steel dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5630", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "822", + "attack_audios": "2547,0,0,0", + "name": "Black dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5631", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "196", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5632", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "244", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5633", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "370", + "attack_audios": "2547,0,0,0", + "name": "Rune dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5634", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1733", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5635", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1687", + "attack_audios": "2547,0,0,0", + "name": "Iron dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5636", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1654", + "attack_audios": "2547,0,0,0", + "name": "Steel dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5637", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "2422", + "attack_audios": "2547,0,0,0", + "name": "Black dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5638", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1660", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5639", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1352", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5640", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1109", + "attack_audios": "2547,0,0,0", + "name": "Rune dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5641", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "115", + "name": "Bronze javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5642", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "112", + "name": "Iron javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5643", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "128", + "name": "Steel javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5644", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "141", + "name": "Mithril javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5645", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "100", + "shop_price": "100", + "examine": "An adamant tipped javelin.", + "durability": null, + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "179", + "name": "Adamant javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5646", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "302", + "name": "Rune javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5647", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1755", + "name": "Bronze jav'n(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5648", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1756", + "name": "Iron javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5649", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1769", + "name": "Steel javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5650", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1736", + "name": "Mithril javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5651", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "100", + "shop_price": "100", + "examine": "An adamant tipped javelin.", + "durability": null, + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1514", + "name": "Adamant javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5652", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "requirements": "{4,40}", + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1521", + "name": "Rune javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5653", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "164", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5654", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "170", + "attack_audios": "2704,0,0,0", + "name": "Iron knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5655", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "212", + "attack_audios": "2704,0,0,0", + "name": "Steel knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5656", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "330", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5657", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "66", + "attack_audios": "2704,0,0,0", + "name": "Black knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5658", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "609", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5659", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1511", + "attack_audios": "2704,0,0,0", + "name": "Rune knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5660", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1514", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5661", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1212", + "attack_audios": "2704,0,0,0", + "name": "Iron knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5662", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1579", + "attack_audios": "2704,0,0,0", + "name": "Steel knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5663", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1368", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5664", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "103", + "attack_audios": "2704,0,0,0", + "name": "Black knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5665", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1505", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5666", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "2207", + "attack_audios": "2704,0,0,0", + "name": "Rune knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5667", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "483", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5668", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "483", + "durability": null, + "name": "Iron dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5669" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "350", + "attack_audios": "2517,2517,2500,2517", + "name": "Bronze dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5670", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "350", + "durability": null, + "name": "Bronze dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5671" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "575", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5672", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "575", + "durability": null, + "name": "Steel dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5673" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "538", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5674", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "538", + "durability": null, + "name": "Mithril dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5675" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "durability": null, + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "800", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5676", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "800", + "durability": null, + "name": "Adamant dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5677" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "4538", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5678", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4538", + "durability": null, + "name": "Rune dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5679" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "16800", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5680", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "attack_anims": "396,396,395,396", + "ge_buy_limit": "10", + "grand_exchange_price": "16800", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Dragon dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5681", + "defence_anim": "397" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "664", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5682", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "664", + "durability": null, + "name": "Black dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5683" + }, + { + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Poison dagger(p+)", + "archery_ticket_price": "0", + "id": "5684", + "weapon_interface": "5", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0", + "render_anim": "2584", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Poison dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5685" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4128", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5686", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4128", + "durability": null, + "name": "Iron dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5687" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "5088", + "attack_audios": "2517,2517,2500,2517", + "name": "Br'ze dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5688", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5088", + "durability": null, + "name": "Br'ze dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5689" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4729", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5690", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4729", + "durability": null, + "name": "Steel dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5691" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "3476", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5692", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3476", + "durability": null, + "name": "Mithril dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5693" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "durability": null, + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4612", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5694", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4612", + "durability": null, + "name": "Adamant dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5695" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "5061", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5696", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5061", + "durability": null, + "name": "Rune dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5697" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "20300", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5698", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "attack_anims": "396,396,395,396", + "ge_buy_limit": "10", + "grand_exchange_price": "20300", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Dragon dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5699", + "defence_anim": "397" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4921", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5700", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4921", + "durability": null, + "name": "Black dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5701" + }, + { + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Poison dagger(p++)", + "archery_ticket_price": "0", + "id": "5702", + "weapon_interface": "5", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0", + "render_anim": "2584", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Poison dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5703" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "861", + "stand_anim": "813", + "name": "Bronze spear(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5704", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "861", + "durability": null, + "name": "Bronze spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5705" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "676", + "stand_anim": "813", + "name": "Iron spear(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5706", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "676", + "durability": null, + "name": "Iron spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5707" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "596", + "stand_anim": "813", + "tradeable": "true", + "name": "Steel spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5708", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "596", + "durability": null, + "name": "Steel spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5709" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "802", + "stand_anim": "813", + "tradeable": "true", + "name": "Mithril spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5710", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "802", + "durability": null, + "name": "Mithril spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5711" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1394", + "stand_anim": "813", + "tradeable": "true", + "name": "Adamant spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5712", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1394", + "durability": null, + "name": "Adamant spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5713" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "12500", + "stand_anim": "813", + "tradeable": "true", + "name": "Rune spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5714", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12500", + "durability": null, + "name": "Rune spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5715" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "41800", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5716", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear(p+)" + }, + { + "attack_anims": "2080,2081,2082,2080", + "ge_buy_limit": "10", + "grand_exchange_price": "41800", + "durability": null, + "name": "Dragon spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5717", + "defence_anim": "2079" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "7557", + "stand_anim": "813", + "name": "Bronze spear(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5718", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7557", + "durability": null, + "name": "Bronze spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5719" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8394", + "stand_anim": "813", + "name": "Iron spear(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5720", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8394", + "durability": null, + "name": "Iron spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5721" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8336", + "stand_anim": "813", + "tradeable": "true", + "name": "Steel spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5722", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8336", + "durability": null, + "name": "Steel spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5723" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "7035", + "stand_anim": "813", + "tradeable": "true", + "name": "Mithril spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5724", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7035", + "durability": null, + "name": "Mithril spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5725" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "7530", + "stand_anim": "813", + "name": "Adamant spear(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5726", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7530", + "durability": null, + "name": "Adamant spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5727" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "17700", + "stand_anim": "813", + "tradeable": "true", + "name": "Rune spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5728", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17700", + "durability": null, + "name": "Rune spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5729" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "37800", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5730", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear(p++)" + }, + { + "attack_anims": "2080,2081,2082,2080", + "ge_buy_limit": "10", + "grand_exchange_price": "37800", + "durability": null, + "name": "Dragon spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5731", + "defence_anim": "2079" + }, + { + "durability": null, + "name": "Stool", + "archery_ticket_price": "0", + "id": "5732", + "equipment_slot": "5" + }, + { + "examine": "Yuk!", + "durability": null, + "name": "Rotten potato", + "archery_ticket_price": "0", + "id": "5733" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "3351", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5734", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3351", + "durability": null, + "name": "Black spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5735" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "9065", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5736", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9065", + "durability": null, + "name": "Black spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5737" + }, + { + "shop_price": "15", + "examine": "A slightly bluish leaf.", + "grand_exchange_price": "19", + "durability": null, + "name": "Woad leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5738" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "459", + "durability": null, + "name": "Asgarnian ale(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5739" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "459", + "durability": null, + "name": "Asgarnian ale(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5740" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "1193", + "durability": null, + "name": "Mature wmb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5741" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1193", + "durability": null, + "name": "Mature wmb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5742" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "65400", + "durability": null, + "name": "Greenman's ale(m)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5743" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65400", + "durability": null, + "name": "Greenman's ale(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5744" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "2458", + "durability": null, + "name": "Dragon bitter(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5745" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2458", + "durability": null, + "name": "Dragon bitter(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5746" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "56400", + "durability": null, + "name": "Dwarven stout(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5747" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56400", + "durability": null, + "name": "Dwarven stout(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5748" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "19", + "durability": null, + "name": "Moonlight mead(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5749" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Moonlight mead(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5750" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "890", + "durability": null, + "name": "Axeman's folly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5751" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "890", + "durability": null, + "name": "Axeman's folly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5752" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Axeman's folly(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5753" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26000", + "durability": null, + "name": "Axeman's folly(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5754" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "3694", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5755" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3694", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5756" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "42800", + "durability": null, + "name": "Chef's delight(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5757" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "42800", + "durability": null, + "name": "Chef's delight(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5758" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "7", + "durability": null, + "name": "Slayer's respite", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5759" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Slayer's respite", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5760" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "1748", + "durability": null, + "name": "Slayer's respite(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5761" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1748", + "durability": null, + "name": "Slayer's respite(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5762" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "1279", + "durability": null, + "name": "Cider", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5763" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1279", + "durability": null, + "name": "Cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5764" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "3614", + "durability": null, + "name": "Mature cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5765" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3614", + "durability": null, + "name": "Mature cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5766" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A pot filled with ale yeast.", + "grand_exchange_price": "59", + "durability": null, + "name": "Ale yeast", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "5767" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "59", + "durability": null, + "name": "Ale yeast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5768" + }, + { + "ge_buy_limit": "100", + "examine": "Sliced and hollowed out to form a keg.", + "grand_exchange_price": "8", + "durability": null, + "name": "Calquat keg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5769" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Calquat keg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5770" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "1934", + "durability": null, + "name": "Dwarven stout(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5771" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1934", + "durability": null, + "name": "Dwarven stout(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5772" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "3214", + "durability": null, + "name": "Dwarven stout(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5773" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3214", + "durability": null, + "name": "Dwarven stout(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5774" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "4886", + "durability": null, + "name": "Dwarven stout(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5775" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4886", + "durability": null, + "name": "Dwarven stout(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5776" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "5159", + "durability": null, + "name": "Dwarven stout(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5777" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5159", + "durability": null, + "name": "Dwarven stout(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5778" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "3344", + "durability": null, + "name": "Asgarnian ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5779" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3344", + "durability": null, + "name": "Asgarnian ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5780" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "6103", + "durability": null, + "name": "Asgarnian ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5781" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6103", + "durability": null, + "name": "Asgarnian ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5782" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "9230", + "durability": null, + "name": "Asgarnian ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5783" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9230", + "durability": null, + "name": "Asgarnian ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5784" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "12900", + "durability": null, + "name": "Asgarnian ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5785" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12900", + "durability": null, + "name": "Asgarnian ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5786" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "3441", + "durability": null, + "name": "Greenmans ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5787" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3441", + "durability": null, + "name": "Greenmans ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5788" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "4670", + "durability": null, + "name": "Greenmans ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5789" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4670", + "durability": null, + "name": "Greenmans ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5790" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "7654", + "durability": null, + "name": "Greenmans ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5791" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7654", + "durability": null, + "name": "Greenmans ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5792" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "6317", + "durability": null, + "name": "Greenmans ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5793" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6317", + "durability": null, + "name": "Greenmans ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5794" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "1495", + "durability": null, + "name": "Mind bomb(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5795" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1495", + "durability": null, + "name": "Mind bomb(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5796" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "2721", + "durability": null, + "name": "Mind bomb(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5797" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2721", + "durability": null, + "name": "Mind bomb(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5798" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "4038", + "durability": null, + "name": "Mind bomb(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5799" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4038", + "durability": null, + "name": "Mind bomb(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5800" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "5166", + "durability": null, + "name": "Mind bomb(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5801" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5166", + "durability": null, + "name": "Mind bomb(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5802" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "1673", + "durability": null, + "name": "Dragon bitter(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5803" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1673", + "durability": null, + "name": "Dragon bitter(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5804" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "3259", + "durability": null, + "name": "Dragon bitter(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5805" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3259", + "durability": null, + "name": "Dragon bitter(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5806" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "4845", + "durability": null, + "name": "Dragon bitter(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5807" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4845", + "durability": null, + "name": "Dragon bitter(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5808" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "5924", + "durability": null, + "name": "Dragon bitter(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5809" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5924", + "durability": null, + "name": "Dragon bitter(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5810" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "1298", + "durability": null, + "name": "Moonlight mead(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5811" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1298", + "durability": null, + "name": "Moonlight mead(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5812" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "2510", + "durability": null, + "name": "Moonlight mead(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5813" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2510", + "durability": null, + "name": "Moonlight mead(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5814" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "3721", + "durability": null, + "name": "Moonlight mead(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5815" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3721", + "durability": null, + "name": "Moonlight mead(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5816" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "4883", + "durability": null, + "name": "Moonlight mead(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5817" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4883", + "durability": null, + "name": "Moonlight mead(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5818" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "3333", + "durability": null, + "name": "Axeman's folly(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5819" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3333", + "durability": null, + "name": "Axeman's folly(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5820" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "6093", + "durability": null, + "name": "Axeman's folly(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5821" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6093", + "durability": null, + "name": "Axeman's folly(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5822" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "8978", + "durability": null, + "name": "Axeman's folly(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5823" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8978", + "durability": null, + "name": "Axeman's folly(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5824" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "9212", + "durability": null, + "name": "Axeman's folly(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5825" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9212", + "durability": null, + "name": "Axeman's folly(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5826" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "3851", + "durability": null, + "name": "Chef's delight(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5827" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3851", + "durability": null, + "name": "Chef's delight(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5828" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "6589", + "durability": null, + "name": "Chef's delight(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5829" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6589", + "durability": null, + "name": "Chef's delight(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5830" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "9536", + "durability": null, + "name": "Chef's delight(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5831" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9536", + "durability": null, + "name": "Chef's delight(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5832" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "13200", + "durability": null, + "name": "Chef's delight(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5833" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13200", + "durability": null, + "name": "Chef's delight(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5834" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "1127", + "durability": null, + "name": "Slayer's respite(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5835" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1127", + "durability": null, + "name": "Slayer's respite(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5836" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "2168", + "durability": null, + "name": "Slayer's respite(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5837" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2168", + "durability": null, + "name": "Slayer's respite(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5838" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "3209", + "durability": null, + "name": "Slayer's respite(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5839" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3209", + "durability": null, + "name": "Slayer's respite(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5840" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "3582", + "durability": null, + "name": "Slayer's respite(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5841" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3582", + "durability": null, + "name": "Slayer's respite(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5842" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "6040", + "durability": null, + "name": "Cider(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5843" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6040", + "durability": null, + "name": "Cider(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5844" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "11000", + "durability": null, + "name": "Cider(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5845" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11000", + "durability": null, + "name": "Cider(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5846" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "15400", + "durability": null, + "name": "Cider(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5847" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15400", + "durability": null, + "name": "Cider(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5848" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "18900", + "durability": null, + "name": "Cider(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5849" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18900", + "durability": null, + "name": "Cider(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5850" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "44600", + "durability": null, + "name": "Dwarven stout(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5851" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44600", + "durability": null, + "name": "Dwarven stout(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5852" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "68900", + "durability": null, + "name": "Dwarven stout(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5853" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "68900", + "durability": null, + "name": "Dwarven stout(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5854" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "98800", + "durability": null, + "name": "Dwarven stout(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5855" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98800", + "durability": null, + "name": "Dwarven stout(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5856" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "237400", + "durability": null, + "name": "Dwarven stout(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5857" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "237400", + "durability": null, + "name": "Dwarven stout(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5858" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "1697", + "durability": null, + "name": "Asgarnian ale(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5859" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1697", + "durability": null, + "name": "Asgarnian ale(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5860" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "3307", + "durability": null, + "name": "Asgarnian ale(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5861" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3307", + "durability": null, + "name": "Asgarnian ale(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5862" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "4917", + "durability": null, + "name": "Asgarnian ale(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5863" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4917", + "durability": null, + "name": "Asgarnian ale(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5864" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "6778", + "durability": null, + "name": "Asgarnian ale(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5865" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6778", + "durability": null, + "name": "Asgarnian ale(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5866" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "57600", + "durability": null, + "name": "Greenmans ale(m1)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5867" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57600", + "durability": null, + "name": "Greenmans ale(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5868" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "92000", + "durability": null, + "name": "Greenmans ale(m2)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5869" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92000", + "durability": null, + "name": "Greenmans ale(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5870" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "136700", + "durability": null, + "name": "Greenmans ale(m3)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5871" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "136700", + "durability": null, + "name": "Greenmans ale(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5872" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "231700", + "durability": null, + "name": "Greenmans ale(m4)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5873" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "231700", + "durability": null, + "name": "Greenmans ale(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5874" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "3032", + "durability": null, + "name": "Mind bomb(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5875" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3032", + "durability": null, + "name": "Mind bomb(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5876" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "5977", + "durability": null, + "name": "Mind bomb(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5877" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5977", + "durability": null, + "name": "Mind bomb(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5878" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "8922", + "durability": null, + "name": "Mind bomb(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5879" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8922", + "durability": null, + "name": "Mind bomb(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5880" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "12700", + "durability": null, + "name": "Mind bomb(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5881" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12700", + "durability": null, + "name": "Mind bomb(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5882" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "2125", + "durability": null, + "name": "Dragon bitter(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5883" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2125", + "durability": null, + "name": "Dragon bitter(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5884" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "4163", + "durability": null, + "name": "Dragon bitter(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5885" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4163", + "durability": null, + "name": "Dragon bitter(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5886" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "6201", + "durability": null, + "name": "Dragon bitter(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5887" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6201", + "durability": null, + "name": "Dragon bitter(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5888" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "8834", + "durability": null, + "name": "Dragon bitter(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5889" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8834", + "durability": null, + "name": "Dragon bitter(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5890" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "1315", + "durability": null, + "name": "M'light mead(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5891" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1315", + "durability": null, + "name": "M'light mead(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5892" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "2543", + "durability": null, + "name": "M'light mead(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5893" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2543", + "durability": null, + "name": "M'light mead(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5894" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "3771", + "durability": null, + "name": "M'light mead(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5895" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3771", + "durability": null, + "name": "M'light mead(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5896" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "5000", + "durability": null, + "name": "M'light mead(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5897" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5000", + "durability": null, + "name": "M'light mead(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5898" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "13500", + "durability": null, + "name": "Axeman's folly(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5899" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13500", + "durability": null, + "name": "Axeman's folly(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5900" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "24800", + "durability": null, + "name": "Axeman's folly(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5901" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24800", + "durability": null, + "name": "Axeman's folly(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5902" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "37300", + "durability": null, + "name": "Axeman's folly(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5903" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "37300", + "durability": null, + "name": "Axeman's folly(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5904" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "60700", + "durability": null, + "name": "Axeman's folly(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5905" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60700", + "durability": null, + "name": "Axeman's folly(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5906" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "18000", + "durability": null, + "name": "Chef's delight(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5907" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18000", + "durability": null, + "name": "Chef's delight(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5908" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "34300", + "durability": null, + "name": "Chef's delight(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5909" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34300", + "durability": null, + "name": "Chef's delight(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5910" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "51000", + "durability": null, + "name": "Chef's delight(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5911" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "51000", + "durability": null, + "name": "Chef's delight(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5912" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "98600", + "durability": null, + "name": "Chef's delight(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5913" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98600", + "durability": null, + "name": "Chef's delight(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5914" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "3672", + "durability": null, + "name": "Slayer respite(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5915" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3672", + "durability": null, + "name": "Slayer respite(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5916" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "7258", + "durability": null, + "name": "Slayer respite(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5917" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7258", + "durability": null, + "name": "Slayer respite(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5918" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "10800", + "durability": null, + "name": "Slayer respite(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5919" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10800", + "durability": null, + "name": "Slayer respite(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5920" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "15300", + "durability": null, + "name": "Slayer respite(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5921" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15300", + "durability": null, + "name": "Slayer respite(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5922" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "2966", + "durability": null, + "name": "Cider(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5923" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2966", + "durability": null, + "name": "Cider(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5924" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "5845", + "durability": null, + "name": "Cider(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5925" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5845", + "durability": null, + "name": "Cider(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5926" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "8724", + "durability": null, + "name": "Cider(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5927" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8724", + "durability": null, + "name": "Cider(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5928" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "11900", + "durability": null, + "name": "Cider(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5929" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11900", + "durability": null, + "name": "Cider(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5930" + }, + { + "ge_buy_limit": "5000", + "examine": "I can weave this to make sacks.", + "grand_exchange_price": "532", + "durability": null, + "name": "Jute fibre", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "5931" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "532", + "durability": null, + "name": "Jute fibre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5932" + }, + { + "ge_buy_limit": "200", + "examine": "A branch from a willow tree.", + "grand_exchange_price": "1255", + "durability": null, + "name": "Willow branch", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5933" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1255", + "durability": null, + "name": "Willow branch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5934" + }, + { + "ge_buy_limit": "10000", + "examine": "A vial filled with coconut milk.", + "grand_exchange_price": "1307", + "durability": null, + "name": "Coconut milk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5935" + }, + { + "ge_buy_limit": "1000", + "examine": "A vial of extra-strong weapon poison, for spears and daggers.", + "grand_exchange_price": "605", + "durability": null, + "name": "Weapon poison+", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5937" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "605", + "durability": null, + "name": "Weapon poison+", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5938" + }, + { + "ge_buy_limit": "1000", + "examine": "A vial of super strong weapon poison, for spears and daggers.", + "grand_exchange_price": "4817", + "durability": null, + "name": "Weapon poison++", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5940" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4817", + "durability": null, + "name": "Weapon poison++", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5941" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1032", + "durability": null, + "name": "Antipoison+(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5943" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1032", + "durability": null, + "name": "Antipoison+(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5944" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1499", + "durability": null, + "name": "Antipoison+(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5945" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1499", + "durability": null, + "name": "Antipoison+(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5946" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1316", + "durability": null, + "name": "Antipoison+(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5947" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1316", + "durability": null, + "name": "Antipoison+(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5948" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1599", + "durability": null, + "name": "Antipoison+(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5949" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1599", + "durability": null, + "name": "Antipoison+(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5950" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of a super-strong antipoison potion.", + "grand_exchange_price": "1138", + "durability": null, + "name": "Antipoison++(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5952" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1138", + "durability": null, + "name": "Antipoison++(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5953" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of a super-strong antipoison potion.", + "grand_exchange_price": "1071", + "durability": null, + "name": "Antipoison++(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5954" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1071", + "durability": null, + "name": "Antipoison++(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5955" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of a super-strong antipoison potion.", + "grand_exchange_price": "632", + "durability": null, + "name": "Antipoison++(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5956" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "632", + "durability": null, + "name": "Antipoison++(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5957" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of a super-strong antipoison potion.", + "grand_exchange_price": "821", + "durability": null, + "name": "Antipoison++(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5958" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "821", + "durability": null, + "name": "Antipoison++(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5959" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5960" + }, + { + "durability": null, + "name": "Tomatoes(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5961" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5962" + }, + { + "durability": null, + "name": "Tomatoes(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5963" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5964" + }, + { + "durability": null, + "name": "Tomatoes(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5965" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5966" + }, + { + "durability": null, + "name": "Tomatoes(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5967" + }, + { + "ge_buy_limit": "10000", + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "335", + "durability": null, + "name": "Tomatoes(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5968" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "335", + "durability": null, + "name": "Tomatoes(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5969" + }, + { + "ge_buy_limit": "5000", + "examine": "I could make a spicy curry with this.", + "grand_exchange_price": "318", + "durability": null, + "name": "Curry leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5970" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "318", + "durability": null, + "name": "Curry leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5971" + }, + { + "ge_buy_limit": "5000", + "examine": "Looks delicious.", + "grand_exchange_price": "2074", + "durability": null, + "name": "Papaya fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5972" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2074", + "durability": null, + "name": "Papaya fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5973" + }, + { + "ge_buy_limit": "5000", + "examine": "It's a coconut.", + "grand_exchange_price": "2568", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5974" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2568", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5975" + }, + { + "ge_buy_limit": "5000", + "examine": "It's a coconut.", + "grand_exchange_price": "1258", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5976" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1258", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5977" + }, + { + "ge_buy_limit": "10000", + "examine": "All the milk has been removed.", + "grand_exchange_price": "54", + "durability": null, + "name": "Coconut shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5978" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "54", + "durability": null, + "name": "Coconut shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5979" + }, + { + "ge_buy_limit": "100", + "examine": "This is the largest fruit I've ever seen.", + "grand_exchange_price": "43", + "durability": null, + "name": "Calquat fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5980" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43", + "durability": null, + "name": "Calquat fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5981" + }, + { + "shop_price": "48", + "ge_buy_limit": "10000", + "examine": "A juicy watermelon.", + "grand_exchange_price": "41", + "durability": null, + "name": "Watermelon", + "tradeable": "true", + "weight": "0.111", + "archery_ticket_price": "0", + "id": "5982" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "41", + "durability": null, + "name": "Watermelon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5983" + }, + { + "ge_buy_limit": "1000", + "examine": "A slice of watermelon.", + "grand_exchange_price": "40", + "durability": null, + "name": "Watermelon slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5984" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "40", + "durability": null, + "name": "Watermelon slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5985" + }, + { + "ge_buy_limit": "10000", + "examine": "Raw sweetcorn.", + "grand_exchange_price": "19", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5986" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "19", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5987" + }, + { + "ge_buy_limit": "10000", + "examine": "Delicious cooked sweetcorn.", + "grand_exchange_price": "15", + "durability": null, + "name": "Cooked sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5988" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "15", + "durability": null, + "name": "Cooked sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5989" + }, + { + "durability": null, + "name": "Burnt sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5991" + }, + { + "ge_buy_limit": "100", + "examine": "A bucket of apple mush.", + "grand_exchange_price": "425", + "durability": null, + "name": "Apple mush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5992" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "425", + "durability": null, + "name": "Apple mush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5993" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Hammerstone hops.", + "grand_exchange_price": "14", + "durability": null, + "name": "Hammerstone hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5994" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "14", + "durability": null, + "name": "Hammerstone hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5995" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Asgarnian hops.", + "grand_exchange_price": "2", + "durability": null, + "name": "Asgarnian hops", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5996" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2", + "durability": null, + "name": "Asgarnian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5997" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Yanillian hops.", + "grand_exchange_price": "1", + "durability": null, + "name": "Yanillian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5998" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Yanillian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5999" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "A handful of Krandorian hops.", + "grand_exchange_price": "2", + "durability": null, + "name": "Krandorian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6000" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2", + "durability": null, + "name": "Krandorian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6001" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of wildblood hops.", + "grand_exchange_price": "66", + "durability": null, + "name": "Wildblood hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6002" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "66", + "durability": null, + "name": "Wildblood hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6003" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "examine": "A Bittercap Mushroom", + "durability": null, + "name": "Mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6004" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "durability": null, + "name": "Mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6005" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Barley.", + "grand_exchange_price": "211", + "durability": null, + "name": "Barley", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6006" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "211", + "durability": null, + "name": "Barley", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6007" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of barley malt.", + "grand_exchange_price": "410", + "durability": null, + "name": "Barley malt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6008" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "410", + "durability": null, + "name": "Barley malt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6009" + }, + { + "ge_buy_limit": "1000", + "examine": "A bunch of marigolds.", + "grand_exchange_price": "3326", + "durability": null, + "name": "Marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6010" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3326", + "durability": null, + "name": "Marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6011" + }, + { + "ge_buy_limit": "1000", + "examine": "A bunch of nasturtiums.", + "grand_exchange_price": "52", + "durability": null, + "name": "Nasturtiums", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6012" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "52", + "durability": null, + "name": "Nasturtiums", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6013" + }, + { + "ge_buy_limit": "1000", + "examine": "Some rosemary.", + "grand_exchange_price": "29", + "durability": null, + "name": "Rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6014" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "29", + "durability": null, + "name": "Rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6015" + }, + { + "ge_buy_limit": "10000", + "examine": "Don't prick yourself with this.", + "grand_exchange_price": "6990", + "durability": null, + "name": "Cactus spine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6016" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6990", + "durability": null, + "name": "Cactus spine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6017" + }, + { + "ge_buy_limit": "10000", + "examine": "They look sweet and juicy, but only a fool would eat them.", + "grand_exchange_price": "399", + "durability": null, + "name": "Poison ivy berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6018" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "399", + "durability": null, + "name": "Poison ivy berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6019" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "152", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6020" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "152", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6021" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "27", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6022" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6023" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "21", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6024" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6025" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "7", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6026" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6027" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "11", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6028" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6029" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "4", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6030" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6031" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Good for plants, helps them grow.", + "grand_exchange_price": "97", + "durability": null, + "name": "Compost", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6032" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "97", + "durability": null, + "name": "Compost", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6033" + }, + { + "ge_buy_limit": "10000", + "examine": "Super-good for the smallest or largest of plants.", + "grand_exchange_price": "909", + "durability": null, + "name": "Supercompost", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6034" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "909", + "durability": null, + "name": "Supercompost", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6035" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "Use this on plants to cure disease.", + "grand_exchange_price": "170", + "durability": null, + "name": "Plant cure", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6036" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "170", + "durability": null, + "name": "Plant cure", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6037" + }, + { + "ge_buy_limit": "100", + "examine": "I could use this to make jewellery.", + "grand_exchange_price": "1078", + "durability": null, + "name": "Magic string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6038" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1078", + "durability": null, + "name": "Magic string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6039" + }, + { + "destroy_message": "You will need to create a new amulet if you destroy this one.", + "examine": "An Amulet of Nature.", + "durability": null, + "name": "Amulet of nature", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6040", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "examine": "Strung with the root of a Magic Tree. If I enchant this it will become an amulet of nature.", + "grand_exchange_price": "1996", + "durability": null, + "name": "Pre-nature amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6041", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1996", + "durability": null, + "name": "Pre-nature amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6042" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of the Oak tree.", + "grand_exchange_price": "60", + "durability": null, + "name": "Oak roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6043" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60", + "durability": null, + "name": "Oak roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6044" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of the Willow tree.", + "grand_exchange_price": "41", + "durability": null, + "name": "Willow roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6045" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "41", + "durability": null, + "name": "Willow roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6046" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of the Maple tree.", + "grand_exchange_price": "40", + "durability": null, + "name": "Maple roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6047" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40", + "durability": null, + "name": "Maple roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6048" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of a yew tree", + "grand_exchange_price": "570", + "durability": null, + "name": "Yew roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6049" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "570", + "durability": null, + "name": "Yew roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6050" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of a magic tree.", + "grand_exchange_price": "5853", + "durability": null, + "name": "Magic roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6051" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5853", + "durability": null, + "name": "Magic roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6052" + }, + { + "durability": null, + "name": "Spirit roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6054" + }, + { + "shop_price": "1", + "examine": "A handful of weeds.", + "durability": null, + "name": "Weeds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6055" + }, + { + "durability": null, + "name": "Weeds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6056" + }, + { + "examine": "A sack filled with hay. / This sack of hay has a bronze spear sticking through it.", + "durability": null, + "name": "Hay sack", + "archery_ticket_price": "0", + "id": "6057" + }, + { + "examine": "A sack filled with hay. / This sack of hay has a bronze spear sticking through it.", + "durability": null, + "name": "Hay sack", + "archery_ticket_price": "0", + "id": "6058" + }, + { + "examine": "This should scare the birds.", + "durability": null, + "name": "Scarecrow", + "archery_ticket_price": "0", + "id": "6059" + }, + { + "durability": null, + "name": "Stool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6060" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "134", + "durability": null, + "name": "Bronze bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6061", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "1162", + "durability": null, + "name": "Bronze bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6062", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "examine": "How do I wash blood stains out?", + "durability": null, + "name": "Bloody mourner top", + "weight": "2.72", + "archery_ticket_price": "0", + "id": "6064" + }, + { + "remove_sleeves": "true", + "examine": "A thick heavy leather top.", + "durability": null, + "name": "Mourner top", + "archery_ticket_price": "0", + "id": "6065", + "equipment_slot": "4" + }, + { + "examine": "Damaged: These are in need of a good tailor.Repaired: A pair of mourner trousers.", + "durability": null, + "name": "Mourner trousers", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "6066" + }, + { + "examine": "Damaged: These are in need of a good tailor.Repaired: A pair of mourner trousers.", + "durability": null, + "name": "Mourner trousers", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "6067", + "equipment_slot": "7" + }, + { + "shop_price": "160", + "examine": "These will keep my hands warm.", + "durability": null, + "name": "Mourner gloves", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6068", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "160", + "examine": "Comfortable leather boots.", + "durability": null, + "name": "Mourner boots", + "weight": "1.36", + "archery_ticket_price": "0", + "id": "6069", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "A dull brown cape.", + "durability": null, + "name": "Mourner cloak", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "6070", + "equipment_slot": "1" + }, + { + "shop_price": "160", + "examine": "A letter of recommendation.", + "durability": null, + "name": "Mourner letter", + "archery_ticket_price": "0", + "id": "6071" + }, + { + "examine": "A bar of soap taken from Tegid.", + "durability": null, + "name": "Tegid's soap", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6072" + }, + { + "examine": "A book on the history of Prifddinas.", + "durability": null, + "name": "Prifddinas' history", + "archery_ticket_price": "0", + "id": "6073" + }, + { + "examine": "A book on the exploration of the eastern realm.", + "durability": null, + "name": "Eastern discovery", + "archery_ticket_price": "0", + "id": "6075" + }, + { + "examine": "A book on the settlement of the eastern realm.", + "durability": null, + "name": "Eastern settlement", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6077" + }, + { + "examine": "A book about the great divide.", + "durability": null, + "name": "The great divide", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6079" + }, + { + "examine": "A strange broken device of gnomic design.", + "durability": null, + "name": "Broken device", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6081" + }, + { + "turn90cw_anim": "2319", + "examine": "A device for firing dye.", + "walk_anim": "2317", + "durability": null, + "weight": "4", + "turn90ccw_anim": "2320", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "20", + "turn180_anim": "2318", + "render_anim": "284", + "equipment_slot": "3", + "stand_anim": "2316", + "name": "Fixed device", + "run_anim": "2322", + "archery_ticket_price": "0", + "id": "6082", + "stand_turn_anim": "2321" + }, + { + "examine": "This key has seen a lot of use. (Mourning's Ends Part I)", + "durability": null, + "name": "Tarnished key", + "archery_ticket_price": "0", + "id": "6083" + }, + { + "examine": "A large pair of ogre bellows filled with red dye.", + "durability": null, + "name": "Red dye bellows", + "archery_ticket_price": "0", + "id": "6085" + }, + { + "examine": "A large pair of ogre bellows filled with blue dye.", + "durability": null, + "name": "Blue dye bellows", + "archery_ticket_price": "0", + "id": "6086" + }, + { + "examine": "A large pair of ogre bellows filled with yellow dye.", + "durability": null, + "name": "Yellow dye bellows", + "archery_ticket_price": "0", + "id": "6087" + }, + { + "examine": "A large pair of ogre bellows filled with green dye.", + "durability": null, + "name": "Green dye bellows", + "archery_ticket_price": "0", + "id": "6088" + }, + { + "examine": "A blue dye filled toad.", + "durability": null, + "name": "Blue toad", + "weight": "1", + "archery_ticket_price": "0", + "id": "6089" + }, + { + "examine": "A red dye filled toad.", + "durability": null, + "name": "Red toad", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "6090" + }, + { + "examine": "A yellow dye filled toad.", + "durability": null, + "name": "Yellow toad", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "6091" + }, + { + "examine": "A green dye filled toad.", + "durability": null, + "name": "Green toad", + "weight": "1", + "archery_ticket_price": "0", + "id": "6092" + }, + { + "examine": "A barrel full of rotten apples.", + "durability": null, + "name": "Rotten apples", + "weight": "17", + "archery_ticket_price": "0", + "id": "6093" + }, + { + "examine": "A barrel full of mushed apples.", + "durability": null, + "name": "Apple barrel", + "archery_ticket_price": "0", + "id": "6094" + }, + { + "examine": "A barrel full of rotten apples and naptha.", + "durability": null, + "name": "Naphtha apple mix", + "archery_ticket_price": "0", + "id": "6095" + }, + { + "examine": "A barrel full of toxic naphtha.", + "durability": null, + "name": "Toxic naphtha", + "weight": "32", + "archery_ticket_price": "0", + "id": "6096" + }, + { + "examine": "It's a sieve.", + "durability": null, + "name": "Sieve", + "archery_ticket_price": "0", + "id": "6097" + }, + { + "examine": "A pile of toxic powder.", + "durability": null, + "name": "Toxic powder", + "archery_ticket_price": "0", + "id": "6098" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (4)", + "archery_ticket_price": "0", + "id": "6099" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (3)", + "archery_ticket_price": "0", + "id": "6100" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (2)", + "archery_ticket_price": "0", + "id": "6101" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (1)", + "archery_ticket_price": "0", + "id": "6102" + }, + { + "examine": "A tiny Elf crystal, I need to have this re-enchanted", + "durability": null, + "name": "Tiny elf crystal", + "archery_ticket_price": "0", + "id": "6103" + }, + { + "examine": "This key is newly cut. (Mourning's Ends Part II)", + "durability": null, + "name": "New key", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "6104" + }, + { + "examine": "They seem to be not quite of this world...", + "durability": null, + "name": "Ghostly boots", + "archery_ticket_price": "0", + "id": "6106", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "remove_sleeves": "true", + "examine": "Varies", + "durability": null, + "name": "Ghostly robe", + "archery_ticket_price": "0", + "id": "6107", + "bonuses": "0,0,0,5,0,0,0,0,5,0,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "Varies", + "durability": null, + "name": "Ghostly robe", + "archery_ticket_price": "0", + "id": "6108", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "A ghostly hood, fit for a ghostly head.", + "durability": null, + "name": "Ghostly hood", + "archery_ticket_price": "0", + "id": "6109", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "They seem to fade in and out of existence...", + "durability": null, + "name": "Ghostly gloves", + "archery_ticket_price": "0", + "id": "6110", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Made of a strange, ghostly material...", + "durability": null, + "name": "Ghostly cloak", + "archery_ticket_price": "0", + "id": "6111", + "bonuses": "0,0,0,5,0,0,0,0,5,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "destroy_message": "Return to the drunken dwarf's drunken relative to get your seeds back.", + "examine": "Kelda hop seeds can only be grown underground!", + "durability": null, + "name": "Kelda seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6112" + }, + { + "destroy_message": "Return to the Keldagrim palace gardener to get your hops back.", + "examine": "A handful of Kelda Hops.", + "durability": null, + "name": "Kelda hops", + "tradeable": "false", + "destroy": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "6113" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pint of bluish beer.", + "durability": null, + "name": "Kelda stout", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6118" + }, + { + "examine": "There is a strange [green/yellow] marking on this stone.", + "durability": null, + "name": "Square stone", + "weight": "1", + "archery_ticket_price": "0", + "id": "6119" + }, + { + "examine": "There is a strange [green/yellow] marking on this stone.", + "durability": null, + "name": "Square stone", + "weight": "1", + "archery_ticket_price": "0", + "id": "6120" + }, + { + "durability": null, + "name": "A chair", + "archery_ticket_price": "0", + "id": "6122", + "equipment_slot": "5" + }, + { + "shop_price": "1", + "examine": "I need to fill this with beer.", + "grand_exchange_price": "25", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "6123", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Coconut milk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6124" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(2)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6125", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(3)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6126", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(4)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6127", + "equipment_slot": "3" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "Protective headwear made from crabs. Better than it sounds.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21000", + "name": "Rock-shell helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6128", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,6,0,0,0,0" + }, + { + "lendable": "true", + "requirements": "{1,40}", + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "40600", + "durability": null, + "name": "Rock-shell plate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6129", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,30,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "Some tough leggings made from rock crab parts.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "39400", + "name": "Rock-shell legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6130", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,10,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "A helm fit for any Fremennik ranger.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "35800", + "name": "Spined helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6131", + "bonuses": "-6,-6,-6,-6,6,6,6,6,6,0,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35800", + "durability": null, + "name": "Spined helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6132" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "A constant reminder that I'm above a Dagannoth in the food chain.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "4386", + "name": "Spined body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6133", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4386", + "durability": null, + "name": "Spined body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6134" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "Stylish leg armour for rangers with a lingering smell of raw fish...", + "durability": null, + "weight": "5", + "absorb": "0,4,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2132", + "name": "Spined chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6135", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2132", + "durability": null, + "name": "Spined chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6136" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Make your foes cower by wearing a skull as a helmet!", + "durability": null, + "weight": "1.3", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "29500", + "name": "Skeletal helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6137", + "bonuses": "0,0,0,2,-2,10,9,11,3,0,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29500", + "durability": null, + "name": "Skeletal helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6138" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "The bones in this armour seems to vibrate with a magic quality...", + "durability": null, + "weight": "4.9", + "absorb": "6,3,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "27800", + "name": "Skeletal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6139", + "bonuses": "0,0,0,8,-10,35,25,42,15,0,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27800", + "durability": null, + "name": "Skeletal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6140" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "A superior set of strengthened slacks for any self respecting seer.", + "durability": null, + "weight": "4", + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "23600", + "name": "Skeletal bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6141", + "bonuses": "0,0,0,6,-7,22,20,24,10,0,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23600", + "durability": null, + "name": "Skeletal bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6142" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Some finely crafted Fremennik boots, made from spined dagannoth hide.", + "grand_exchange_price": "1671", + "durability": null, + "name": "Spined boots", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6143", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1671", + "durability": null, + "name": "Spined boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6144" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Some Fremennik boots, made from the shards of a rock crab's shell.", + "grand_exchange_price": "756", + "durability": null, + "name": "Rock-shell boots", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6145", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "756", + "durability": null, + "name": "Rock-shell boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6146" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Some finely crafted Fremennik boots, made from the bones of a Wallasalki.", + "grand_exchange_price": "4958", + "durability": null, + "name": "Skeletal boots", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6147", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4958", + "durability": null, + "name": "Skeletal boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6148" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Fremennik gloves stitched together from spined dagannoth hide.", + "grand_exchange_price": "955", + "durability": null, + "name": "Spined gloves", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6149", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "955", + "durability": null, + "name": "Spined gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6150" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Fremennik gloves stitched together from rock crab shell shards.", + "grand_exchange_price": "951", + "durability": null, + "name": "Rock-shell gloves", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6151", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "951", + "durability": null, + "name": "Rock-shell gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6152" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Fremennik gloves stitched together from wallasalki bones fragments.", + "grand_exchange_price": "21800", + "durability": null, + "name": "Skeletal gloves", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6153", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21800", + "durability": null, + "name": "Skeletal gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6154" + }, + { + "ge_buy_limit": "500", + "examine": "A sturdy piece of dagannoth hide.", + "grand_exchange_price": "3978", + "durability": null, + "name": "Dagannoth hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6155" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "3978", + "durability": null, + "name": "Dagannoth hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6156" + }, + { + "ge_buy_limit": "100", + "examine": "A spherical chunk of rock-shell.", + "grand_exchange_price": "7371", + "durability": null, + "name": "Rock-shell chunk", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6157" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7371", + "durability": null, + "name": "Rock-shell chunk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6158" + }, + { + "ge_buy_limit": "100", + "examine": "A curved piece of rock-shell.", + "grand_exchange_price": "11300", + "durability": null, + "name": "Rock-shell shard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6159" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11300", + "durability": null, + "name": "Rock-shell shard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6160" + }, + { + "ge_buy_limit": "100", + "examine": "A slim piece of rock-shell.", + "grand_exchange_price": "16100", + "durability": null, + "name": "Rock-shell splinter", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6161" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16100", + "durability": null, + "name": "Rock-shell splinter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6162" + }, + { + "ge_buy_limit": "100", + "examine": "A fearsome looking skull.", + "grand_exchange_price": "9859", + "durability": null, + "name": "Skull piece", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6163" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9859", + "durability": null, + "name": "Skull piece", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6164" + }, + { + "ge_buy_limit": "100", + "examine": "A slightly damaged ribcage.", + "grand_exchange_price": "11300", + "durability": null, + "name": "Ribcage piece", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6165" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11300", + "durability": null, + "name": "Ribcage piece", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6166" + }, + { + "ge_buy_limit": "100", + "examine": "An interesting looking bone shard.", + "grand_exchange_price": "10300", + "durability": null, + "name": "Fibula piece", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6167" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10300", + "durability": null, + "name": "Fibula piece", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6168" + }, + { + "ge_buy_limit": "100", + "examine": "A toughened chunk of dagannoth hide.", + "grand_exchange_price": "23400", + "durability": null, + "name": "Circular hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6169" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23400", + "durability": null, + "name": "Circular hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6170" + }, + { + "ge_buy_limit": "100", + "examine": "A tattered chunk of dagannoth hide.", + "grand_exchange_price": "502", + "durability": null, + "name": "Flattened hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6171" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "502", + "durability": null, + "name": "Flattened hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6172" + }, + { + "ge_buy_limit": "100", + "examine": "A weathered chunk of dagannoth hide.", + "grand_exchange_price": "398", + "durability": null, + "name": "Stretched hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6173" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "398", + "durability": null, + "name": "Stretched hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6174" + }, + { + "durability": null, + "name": "Rock-shell helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6175" + }, + { + "examine": "A sturdy body armour made from rock crab pieces.", + "durability": null, + "name": "Rock-shell plate", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "9", + "id": "6176" + }, + { + "durability": null, + "name": "Rock-shell legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6177" + }, + { + "examine": "I need to cook this first.", + "durability": null, + "name": "Raw pheasant", + "weight": "10", + "archery_ticket_price": "0", + "id": "6178" + }, + { + "examine": "I need to cook this first.", + "durability": null, + "name": "Raw pheasant", + "weight": "10", + "archery_ticket_price": "0", + "id": "6179" + }, + { + "remove_sleeves": "true", + "examine": "A leather strapped top.", + "durability": null, + "name": "Lederhosen top", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6180", + "equipment_slot": "4" + }, + { + "examine": "Brown leather shorts with bright white socks?", + "durability": null, + "name": "Lederhosen shorts", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6181", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "A hat with a goat's hair attached.", + "durability": null, + "name": "Lederhosen hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "6182", + "equipment_slot": "0" + }, + { + "examine": "I can use this at the Varrock clothes shop.", + "durability": null, + "name": "Frog token", + "archery_ticket_price": "0", + "id": "6183" + }, + { + "remove_sleeves": "true", + "examine": "Very posh!", + "durability": null, + "name": "Prince tunic", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "6184", + "equipment_slot": "4" + }, + { + "examine": "Very posh!", + "durability": null, + "name": "Prince leggings", + "weight": "2", + "archery_ticket_price": "0", + "id": "6185", + "equipment_slot": "7" + }, + { + "remove_sleeves": "true", + "examine": "Very posh!", + "durability": null, + "name": "Princess blouse", + "weight": "2", + "archery_ticket_price": "0", + "id": "6186", + "equipment_slot": "4" + }, + { + "examine": "Very posh!", + "durability": null, + "name": "Princess skirt", + "weight": "2", + "archery_ticket_price": "0", + "id": "6187", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "Now that's just silly.", + "durability": null, + "name": "Frog mask", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6188", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Could there be something valuable in here?", + "durability": null, + "name": "Mystery box", + "weight": "1", + "archery_ticket_price": "0", + "id": "6199", + "point_price": "2" + }, + { + "destroy_message": "A ghastly fish", + "examine": "A raw...fish? Is this a fish??", + "durability": null, + "name": "Raw fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6200" + }, + { + "examine": "Fish-tastic!", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "6201" + }, + { + "destroy_message": "A ghastly fish", + "examine": "It's a fish-like thing that appears to already be cooked. It looks disgusting.", + "durability": null, + "name": "Fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6202" + }, + { + "destroy_message": "A ghastly fish", + "examine": "A raw...fish? Is this a fish??", + "durability": null, + "name": "Raw fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6204" + }, + { + "destroy_message": "A ghastly fish", + "examine": "It's a fish-like thing that appears to already be cooked. It looks disgusting.", + "durability": null, + "name": "Fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6206" + }, + { + "examine": "It's an amulet of Man speak. It makes vague grunting noises.", + "durability": null, + "name": "Man speak amulet", + "archery_ticket_price": "0", + "id": "6208", + "equipment_slot": "2" + }, + { + "shop_price": "40", + "examine": "Useful for catching small fish.", + "grand_exchange_price": "433", + "durability": null, + "name": "Small fishing net", + "tradeable": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "6209" + }, + { + "ge_buy_limit": "1000", + "examine": "Teak logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "3365", + "durability": null, + "name": "Teak pyre logs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6211" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3365", + "durability": null, + "name": "Teak pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6212" + }, + { + "ge_buy_limit": "1000", + "examine": "Mahogany logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "3574", + "durability": null, + "name": "Mahogany pyre log", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "6213" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3574", + "durability": null, + "name": "Mahogany pyre log", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6214" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2007", + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6215", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2007", + "durability": null, + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6216" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6217", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6218" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6219", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6220" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6221", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6222" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6223", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6224" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6225", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6226" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6227", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6228" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6229", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6230" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6231", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6232" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6233", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6234" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2572", + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6235", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2572", + "durability": null, + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6236" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2200", + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6237", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2200", + "durability": null, + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6238" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6239", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6240" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6241", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6242" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6243", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6244" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6245", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6246" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6247", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6248" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6249", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6250" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6251", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6252" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6253", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6254" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6255", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6256" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2731", + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6257", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2731", + "durability": null, + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6258" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "1494", + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6259", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "attack_anims": "7060", + "ge_buy_limit": "100", + "grand_exchange_price": "1494", + "durability": null, + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6260" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6261", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6262" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6263", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6264" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6265", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6266" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6267", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6268" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6269", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6270" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6271", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6272" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6273", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6274" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6275", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6276" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6277", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6278" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2957", + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6279", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2957", + "durability": null, + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6280" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden pole for use in primitive construction.", + "grand_exchange_price": "1", + "durability": null, + "name": "Thatch spar light", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6281", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Thatch spar light", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6282" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden pole for use in primitive construction.", + "grand_exchange_price": "2", + "durability": null, + "name": "Thatch spar med", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6283", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Thatch spar med", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6284" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden pole for use in primitive construction.", + "grand_exchange_price": "3", + "durability": null, + "name": "Thatch spar dense", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6285", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3", + "durability": null, + "name": "Thatch spar dense", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6286" + }, + { + "ge_buy_limit": "10000", + "examine": "Scaly but not slimy!", + "grand_exchange_price": "2084", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6287" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2084", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6288" + }, + { + "ge_buy_limit": "10000", + "examine": "Scaley but not slimy!", + "grand_exchange_price": "2019", + "durability": null, + "name": "Snakeskin", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6289" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2019", + "durability": null, + "name": "Snakeskin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6290" + }, + { + "ge_buy_limit": "1000", + "examine": "Its creeping days are over!", + "grand_exchange_price": "1949", + "durability": null, + "name": "Spider carcass", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "6291" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1949", + "durability": null, + "name": "Spider carcass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6292" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "Raw: A raw spider threaded onto a skewer stick.Cooked: A nicely roasted spider threaded onto a skewer stick.", + "grand_exchange_price": "207", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "6293" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "207", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6294" + }, + { + "shop_price": "40", + "ge_buy_limit": "1000", + "examine": "A raw spider threaded onto an arrow shaft. (Raw) A nicely roasted spider threaded onto an arrow shaft. (Cooked) A badly burnt spider threaded onto a charred arrow shaft. (Burnt)", + "grand_exchange_price": "106", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6295" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "106", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6296" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "Raw: A raw spider threaded onto a skewer stick.Cooked: A nicely roasted spider threaded onto a skewer stick.", + "grand_exchange_price": "54", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "6297" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "54", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6298" + }, + { + "shop_price": "40", + "ge_buy_limit": "1000", + "examine": "A raw spider threaded onto an arrow shaft. (Raw) A nicely roasted spider threaded onto an arrow shaft. (Cooked) A badly burnt spider threaded onto a charred arrow shaft. (Burnt)", + "grand_exchange_price": "78", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6299" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "78", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6300" + }, + { + "durability": null, + "name": "Burnt spider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6302" + }, + { + "shop_price": "40", + "examine": "A raw spider threaded onto an arrow shaft. (Raw) A nicely roasted spider threaded onto an arrow shaft. (Cooked) A badly burnt spider threaded onto a charred arrow shaft. (Burnt)", + "grand_exchange_price": "106", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6303" + }, + { + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6304" + }, + { + "ge_buy_limit": "1000", + "examine": "A sharp pointed stick, quite resistant to fire.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skewer stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6305" + }, + { + "ge_buy_limit": "10000", + "examine": "Karamja currency.", + "grand_exchange_price": "2", + "durability": null, + "name": "Trading sticks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6306" + }, + { + "ge_buy_limit": "100", + "examine": "Plant this in a herb patch to grow Goutweed.", + "grand_exchange_price": "6991", + "durability": null, + "name": "Gout tuber", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "6311" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6991", + "durability": null, + "name": "Gout tuber", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6312" + }, + { + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weight": "1.35", + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "grand_exchange_price": "179", + "name": "Opal machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6313", + "bonuses": "0,8,-2,0,0,0,1,1,0,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "179", + "durability": null, + "name": "Opal machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6314" + }, + { + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "grand_exchange_price": "4473", + "name": "Jade machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6315", + "bonuses": "0,11,-2,0,0,0,1,1,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4473", + "durability": null, + "name": "Jade machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6316" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weight": "1.3", + "attack_speed": "4", + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "8774", + "name": "Red topaz machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6317", + "bonuses": "0,16,-2,0,0,0,1,1,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8774", + "durability": null, + "name": "Red topaz machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6318" + }, + { + "ge_buy_limit": "100", + "examine": "A giant mosquito's proboscis: aerodynamic, sharp and pointy!", + "grand_exchange_price": "9733", + "durability": null, + "name": "Proboscis", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6319" + }, + { + "requirements": "{1,30}-{4,30}", + "shop_price": "1588", + "ge_buy_limit": "100", + "examine": "Made from 100% real snakeskin.", + "durability": null, + "weight": "10", + "absorb": "0,4,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "23100", + "name": "Snakeskin body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6322", + "bonuses": "0,0,0,-5,12,25,28,32,15,35,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23100", + "durability": null, + "name": "Snakeskin body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6323" + }, + { + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "100", + "examine": "Made from 100% real snake.", + "durability": null, + "weight": "3.6", + "absorb": "0,3,1", + "equipment_slot": "7", + "grand_exchange_price": "702", + "name": "Snakeskin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6324", + "bonuses": "0,0,0,-5,6,8,8,10,4,10,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "702", + "durability": null, + "name": "Snakeskin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6325" + }, + { + "remove_head": "true", + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "100", + "examine": "Lightweight head protection.", + "durability": null, + "weight": "0.9", + "absorb": "0,2,1", + "equipment_slot": "0", + "grand_exchange_price": "871", + "name": "Snakeskin bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6326", + "bonuses": "0,0,0,-5,4,2,4,4,2,2,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "871", + "durability": null, + "name": "Snakeskin bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6327" + }, + { + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "100", + "examine": "Made from snakes.", + "grand_exchange_price": "10800", + "durability": null, + "name": "Snakeskin boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "6328", + "bonuses": "0,0,0,-10,3,1,1,2,1,0,9,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10800", + "durability": null, + "name": "Snakeskin boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6329" + }, + { + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "10000", + "examine": "Made from 100% real snake.", + "grand_exchange_price": "914", + "durability": null, + "name": "Snakeskin v'brace", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6330", + "bonuses": "0,0,0,-5,6,2,2,2,1,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "914", + "durability": null, + "name": "Snakeskin v'brace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6331" + }, + { + "ge_buy_limit": "25000", + "examine": "Some well-cut mahogany logs.", + "grand_exchange_price": "503", + "durability": null, + "name": "Mahogany logs", + "tradeable": "true", + "weight": "1.33", + "archery_ticket_price": "0", + "id": "6332" + }, + { + "ge_buy_limit": "25000", + "examine": "Some well-cut teak logs.", + "grand_exchange_price": "92", + "durability": null, + "name": "Teak logs", + "tradeable": "true", + "weight": "1.35", + "archery_ticket_price": "0", + "id": "6333" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "92", + "durability": null, + "name": "Teak logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6334" + }, + { + "ge_buy_limit": "100", + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1306", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6335", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1306", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6336" + }, + { + "ge_buy_limit": "100", + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "997", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6337", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "997", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6338" + }, + { + "ge_buy_limit": "100", + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1018", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6339", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1018", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6340" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "3331", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6341", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3331", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6342" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "1382", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6343", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1382", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6344" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "2337", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6345", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2337", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6346" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "734", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6347", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "734", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6348" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "2793", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6349", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2793", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6350" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "3171", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6351", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3171", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6352" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "1416", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6353", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1416", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6354" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "2785", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6355", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2785", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6356" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "944", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6357", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "944", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6358" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "672", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6359", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "672", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6360" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "2484", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6361", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2484", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6362" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "499", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6363", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "499", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6364" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "2440", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6365", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2440", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6366" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "1479", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6367", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1479", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6368" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "823", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6369", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "823", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6370" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "2683", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6371", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2683", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6372" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "331", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6373", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "331", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6374" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "3010", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6375", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3010", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6376" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "2310", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6377", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2310", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6378" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "1697", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6379", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1697", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6380" + }, + { + "shop_price": "24", + "ge_buy_limit": "100", + "examine": "A fez hat. Juss like that.", + "grand_exchange_price": "690", + "durability": null, + "name": "Fez", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "6382", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "690", + "durability": null, + "name": "Fez", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6383" + }, + { + "remove_sleeves": "true", + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A bit itchy.", + "grand_exchange_price": "649", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6384", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "649", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6385" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "Has a coarse hard wearing texture.", + "grand_exchange_price": "533", + "durability": null, + "name": "Desert robes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6386", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "533", + "durability": null, + "name": "Desert robes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6387" + }, + { + "remove_sleeves": "true", + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A bit itchy.", + "grand_exchange_price": "1016", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6388", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1016", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6389" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "Better than factor 50 sun cream.", + "grand_exchange_price": "515", + "durability": null, + "name": "Desert legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6390", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "515", + "durability": null, + "name": "Desert legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6391" + }, + { + "remove_head": "true", + "shop_price": "35", + "ge_buy_limit": "100", + "examine": "Good for keeping the sun off my neck.", + "grand_exchange_price": "531", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6392", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "531", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6393" + }, + { + "remove_sleeves": "true", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Colourful.", + "grand_exchange_price": "650", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6394", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "650", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6395" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool light Menaphite robe.", + "grand_exchange_price": "440", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6396", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "440", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6397" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Look at those nobbily knees.", + "grand_exchange_price": "246", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6398", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "246", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6399" + }, + { + "remove_head": "true", + "shop_price": "35", + "ge_buy_limit": "100", + "examine": "Good for keeping the sun off my neck.", + "grand_exchange_price": "484", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6400", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "484", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6401" + }, + { + "remove_sleeves": "true", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Colourful.", + "grand_exchange_price": "557", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6402", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "557", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6403" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool light Menaphite robe.", + "grand_exchange_price": "449", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6404", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "449", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6405" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Look at those nobbily knees.", + "grand_exchange_price": "236", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6406", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "236", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6407" + }, + { + "requirements": "{17,10}-{0,10}", + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "An offensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "852", + "name": "Oak blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6408", + "bonuses": "0,0,4,0,0,0,0,0,0,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "852", + "durability": null, + "name": "Oak blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6409" + }, + { + "requirements": "{17,10}-{1,10}", + "ge_buy_limit": "100", + "examine": "An defensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "818", + "name": "Oak blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6410", + "bonuses": "0,0,0,0,0,0,0,4,0,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "818", + "durability": null, + "name": "Oak blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6411" + }, + { + "requirements": "{17,20}-{0,20}", + "ge_buy_limit": "100", + "examine": "An offensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "1418", + "name": "Willow blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6412", + "bonuses": "0,0,8,0,0,0,0,0,0,0,0,8,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1418", + "durability": null, + "name": "Willow blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6413" + }, + { + "requirements": "{17,20}-{1,20}", + "ge_buy_limit": "100", + "examine": "A defensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "1285", + "name": "Willow blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6414", + "bonuses": "0,0,0,0,0,0,0,8,0,0,0,8,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1285", + "durability": null, + "name": "Willow blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6415" + }, + { + "requirements": "{17,30}", + "shop_price": "1200", + "ge_buy_limit": "100", + "examine": "A solid bit of maple.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "10", + "defence_anim": "425", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "1432", + "name": "Maple blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6416", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1432", + "durability": null, + "name": "Maple blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6417" + }, + { + "requirements": "{17,30}-{0,30}", + "shop_price": "1600", + "ge_buy_limit": "100", + "examine": "An offensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "2079", + "name": "Maple blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6418", + "bonuses": "0,0,24,0,0,0,0,0,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2079", + "durability": null, + "name": "Maple blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6419" + }, + { + "requirements": "{17,30}-{1,30}", + "shop_price": "952", + "ge_buy_limit": "100", + "examine": "A defensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "2407", + "name": "Maple blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6420", + "bonuses": "0,0,0,0,0,0,0,24,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2407", + "durability": null, + "name": "Maple blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6421" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "9", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6422" + }, + { + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6423" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6424" + }, + { + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6425" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "7", + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6426" + }, + { + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6427" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "16", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6428" + }, + { + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6429" + }, + { + "shop_price": "140", + "examine": "Used for small missile spells.", + "grand_exchange_price": "65", + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6430" + }, + { + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6431" + }, + { + "shop_price": "310", + "examine": "Used for medium missile spells.", + "grand_exchange_price": "399", + "durability": null, + "name": "Death rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6432" + }, + { + "durability": null, + "name": "Death rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6433" + }, + { + "shop_price": "378", + "examine": "Used for teleport spells.", + "grand_exchange_price": "277", + "durability": null, + "name": "Law rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6434" + }, + { + "durability": null, + "name": "Law rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6435" + }, + { + "shop_price": "17", + "examine": "Used for basic missile spells.", + "grand_exchange_price": "6", + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6436" + }, + { + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6437" + }, + { + "shop_price": "16", + "examine": "Used for Curse spells", + "grand_exchange_price": "6", + "durability": null, + "name": "Body rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6438" + }, + { + "durability": null, + "name": "Body rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6439" + }, + { + "examine": "A spadeful of refined coal.", + "durability": null, + "name": "Spadeful of coke", + "weight": "2", + "archery_ticket_price": "0", + "id": "6448" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A white rosebush seed.", + "durability": null, + "name": "White rose seed", + "tradeable": "false", + "destroy": "true", + "weight": "28.928", + "archery_ticket_price": "0", + "id": "6453" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A red rosebush seed.", + "durability": null, + "name": "Red rose seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6454" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pink rosebush seed.", + "durability": null, + "name": "Pink rose seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6455" + }, + { + "destroy_message": "You can get some more Burthorpe vine seeds from Berald in Taverly.", + "examine": "A grapevine seed.", + "durability": null, + "name": "Vine seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6456" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A delphinium seed.", + "durability": null, + "name": "Delphinium seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6457" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A snowdrop seed.", + "durability": null, + "name": "Snowdrop seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6460" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Shoot: A shoot that has been cut from a dying White Tree.Plant pot: A young White Tree sapling.Plant pot after watering: This shoot from a White Tree has been watered and will soon grow.", + "durability": null, + "name": "White tree shoot", + "archery_ticket_price": "0", + "id": "6461" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Shoot: A shoot that has been cut from a dying White Tree.Plant pot: A young White Tree sapling.Plant pot after watering: This shoot from a White Tree has been watered and will soon grow.", + "durability": null, + "name": "White tree shoot", + "archery_ticket_price": "0", + "id": "6462" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Shoot: A shoot that has been cut from a dying White Tree.Plant pot: A young White Tree sapling.Plant pot after watering: This shoot from a White Tree has been watered and will soon grow.", + "durability": null, + "name": "White tree shoot", + "archery_ticket_price": "0", + "id": "6463" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A young White Tree sapling", + "durability": null, + "name": "White tree sapling", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "6464" + }, + { + "destroy_message": "Another can be received from pickpocketing Dr. Fenkenstrain in the tower.", + "examine": "Unactivated: The Ring of charos.Activated: The power within this ring has been activated.", + "durability": null, + "name": "Ring of charos(a)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6465", + "equipment_slot": "12" + }, + { + "examine": "A rune essence chip that has been broken into shards.", + "durability": null, + "name": "Rune shards", + "archery_ticket_price": "0", + "id": "6466" + }, + { + "examine": "Crushed rune essence.", + "durability": null, + "name": "Rune dust", + "archery_ticket_price": "0", + "id": "6467" + }, + { + "shop_price": "25", + "examine": "Use this on plants to cure disease.", + "grand_exchange_price": "199", + "durability": null, + "name": "Plant cure", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6468" + }, + { + "examine": "Looks delicious.", + "durability": null, + "name": "White tree fruit", + "archery_ticket_price": "0", + "id": "6469" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "11500", + "durability": null, + "name": "Compost potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6470" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11500", + "durability": null, + "name": "Compost potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6471" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "6804", + "durability": null, + "name": "Compost potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6472" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6804", + "durability": null, + "name": "Compost potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6473" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "3338", + "durability": null, + "name": "Compost potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6474" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3338", + "durability": null, + "name": "Compost potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6475" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "1734", + "durability": null, + "name": "Compost potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6476" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1734", + "durability": null, + "name": "Compost potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6477" + }, + { + "destroy_message": "You can get another one from Queen Ellamaria", + "examine": "I can use this to move heavy objects. (or) An empty trolley.", + "durability": null, + "name": "Trolley", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6478" + }, + { + "destroy_message": "You can get another list from Queen Ellamaria in Varrock", + "examine": "A list of things that I must collect for Queen Ellamaria.", + "durability": null, + "name": "List", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6479" + }, + { + "requirements": "{4,60}", + "shop_price": "375", + "ge_buy_limit": "100", + "examine": "A razor sharp ring of obsidian.", + "durability": null, + "tokkul_price": "375", + "attack_speed": "4", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2614,2614,2614,2614", + "grand_exchange_price": "340", + "name": "Toktz-xil-ul", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6522", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,49" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A razor sharp sword of obsidian.", + "durability": null, + "tokkul_price": "60000", + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "5", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "30200", + "name": "Toktz-xil-ak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6523", + "bonuses": "47,38,-2,0,0,2,3,0,0,0,0,49,0,0,0" + }, + { + "requirements": "{1,60}", + "shop_price": "67500", + "ge_buy_limit": "10", + "examine": "A spiked shield of Obsidian.", + "durability": null, + "tokkul_price": "67500", + "weight": "3.6", + "absorb": "5,0,11", + "equipment_slot": "5", + "grand_exchange_price": "34700", + "name": "Toktz-ket-xil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6524", + "bonuses": "0,0,0,-12,-8,40,42,38,0,65,60,5,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "37500", + "ge_buy_limit": "10", + "examine": "A large knife of Obsidian.", + "durability": null, + "tokkul_price": "37500", + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "6", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "16900", + "name": "Toktz-xil-ek", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6525", + "bonuses": "16,48,0,0,0,0,0,0,0,0,0,39,0,0,0" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A staff of obsidian.", + "walk_anim": "1205", + "tokkul_price": "52500", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "26300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6526", + "stand_turn_anim": "1209", + "bonuses": "15,-1,55,15,0,10,15,5,15,0,0,55,5,0,0", + "requirements": "{0,60}-{6,60}", + "shop_price": "52500", + "durability": null, + "weight": "1", + "weapon_interface": "1", + "render_anim": "28", + "name": "Toktz-mej-tal" + }, + { + "requirements": "{0,60}", + "shop_price": "45000", + "ge_buy_limit": "10", + "examine": "A mace of obsidian.", + "durability": null, + "tokkul_price": "45000", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "10", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "22600", + "name": "Tzhaar-ket-em", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6527", + "bonuses": "-4,-4,62,0,0,0,0,0,0,0,0,56,0,0,0" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1663", + "examine": "A maul of obsidian.", + "walk_anim": "1663", + "tokkul_price": "75000", + "turn90ccw_anim": "1663", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1663", + "defence_anim": "1666", + "equipment_slot": "3", + "attack_anims": "2661,2661,2661,2661", + "grand_exchange_price": "31000", + "stand_anim": "1662", + "tradeable": "true", + "run_anim": "1664", + "archery_ticket_price": "0", + "id": "6528", + "stand_turn_anim": "823", + "bonuses": "0,0,80,-4,0,0,0,0,0,0,0,85,0,0,0", + "requirements": "{2,60}", + "shop_price": "75000", + "durability": null, + "weight": "3.6", + "weapon_interface": "10", + "render_anim": "27", + "attack_audios": "2520,0,0,0", + "name": "Tzhaar-ket-om" + }, + { + "examine": "It's a Token of some kind made from Obsidian.", + "durability": null, + "name": "Tokkul", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "6529" + }, + { + "durability": null, + "name": "Toktz-xil-ak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6535" + }, + { + "durability": null, + "name": "Toktz-ket-xil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6536" + }, + { + "durability": null, + "name": "Toktz-xil-ek", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6537" + }, + { + "durability": null, + "name": "Toktz-mej-tal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6538" + }, + { + "durability": null, + "name": "Tzhaar-ket-em", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6539" + }, + { + "durability": null, + "name": "Tzhaar-ket-om", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6540" + }, + { + "destroy_message": "You can get a replacement mouse toy by speaking to Bob, the Jagex cat.", + "examine": "An Advanced Combat Training Device.", + "durability": null, + "name": "Mouse toy", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6541", + "weapon_interface": "12", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You will not get a replacement for the present. Open it for your reward.", + "examine": "Thanks for all your help! Love, Bob & Neite.", + "durability": null, + "name": "Present", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6542" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6543" + }, + { + "destroy_message": "You can get another Amulet of Catspeak from the Sphinx in Sophanem.", + "examine": "It's an amulet of cat speak. It makes vague purring noises.", + "durability": null, + "name": "Catspeak amulet(e)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6544", + "equipment_slot": "2" + }, + { + "destroy_message": "You have completed the chores; you can safely destroy the list.", + "examine": "A list of chores that Bob gave you to do.", + "durability": null, + "name": "Chores", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6545" + }, + { + "destroy_message": "You found the recipe in Unferth's bookcase, which is in his Burthorpe house, you will be able to get a replacement.", + "examine": "It says on the back 'My favourite recipe.", + "durability": null, + "name": "Recipe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6546" + }, + { + "destroy_message": "You can get another Doctor's hat from the Apothecary in Varrock.", + "examine": "A mirror helps reflect light on the subject.", + "durability": null, + "name": "Doctors hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6547", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another Nurse's hat from the Apothecary in Varrock.", + "examine": "A nurse's hat, but does it have healing powers?", + "durability": null, + "name": "Nurse hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6548", + "equipment_slot": "0" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6549" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6550" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6551" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6552" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6553" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6554" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6555" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6556" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6557" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6558" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6559" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6560" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "368700", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6562", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mud battlestaff" + }, + { + "requirements": "{0,40}-{6,40}", + "ge_buy_limit": "10", + "shop_price": "40000", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "423100", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "true", + "name": "Mystic mud staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6563", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0" + }, + { + "examine": "A valuable ring.", + "grand_exchange_price": "6609743", + "durability": null, + "name": "Onyx ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6564" + }, + { + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "4501000", + "durability": null, + "name": "Onyx necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6565" + }, + { + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "9058124", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6566" + }, + { + "shop_price": "90000", + "ge_buy_limit": "100", + "examine": "A cape woven of obsidian plates.", + "durability": null, + "tokkul_price": "90000", + "weight": "1.8", + "equipment_slot": "1", + "lendable": "true", + "grand_exchange_price": "42000", + "name": "Obsidian cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6568", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "42000", + "durability": null, + "name": "Obsidian cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6569" + }, + { + "examine": "A cape of fire.", + "durability": null, + "name": "Fire cape", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6570", + "bonuses": "1,1,1,1,1,11,11,11,11,11,11,4,2,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "2700000", + "ge_buy_limit": "100", + "examine": "An uncut onyx.", + "grand_exchange_price": "10700000", + "tokkul_price": "300000", + "durability": null, + "name": "Uncut onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6571" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10700000", + "durability": null, + "name": "Uncut onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6572" + }, + { + "ge_buy_limit": "100", + "examine": "This looks valuable.", + "grand_exchange_price": "10700000", + "durability": null, + "name": "Onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6573" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10700000", + "durability": null, + "name": "Onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6574" + }, + { + "ge_buy_limit": "100", + "examine": "A valuable ring.", + "grand_exchange_price": "11900000", + "durability": null, + "name": "Onyx ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6575", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11900000", + "durability": null, + "name": "Onyx ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6576" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "4500000", + "durability": null, + "name": "Onyx necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6577", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4500000", + "durability": null, + "name": "Onyx necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6578" + }, + { + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "9058124", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6579" + }, + { + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6580" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "10900000", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6581", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10900000", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6582" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring.", + "grand_exchange_price": "803700", + "durability": null, + "name": "Ring of stone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6583", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "803700", + "durability": null, + "name": "Ring of stone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6584" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "A very powerful onyx amulet.", + "grand_exchange_price": "9200000", + "durability": null, + "name": "Amulet of fury", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6585", + "bonuses": "10,10,10,10,10,15,15,15,15,15,15,8,5,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9200000", + "durability": null, + "name": "Amulet of fury", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6586" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "360", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "1013", + "name": "White claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6587", + "bonuses": "10,14,-4,0,0,4,7,2,0,0,0,14,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1013", + "durability": null, + "name": "White claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6588" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "1248", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "1459", + "attack_audios": "2498,2498,2497,2498", + "name": "White battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6589", + "bonuses": "-2,20,15,0,0,0,0,0,0,-1,0,24,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1459", + "durability": null, + "name": "White battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6590" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "479", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6591", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "479", + "durability": null, + "name": "White dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6592" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "497", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6593", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "497", + "durability": null, + "name": "White dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6594" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "982", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6595", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "982", + "durability": null, + "name": "White dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6596" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "8422", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6597", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8422", + "durability": null, + "name": "White dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6598" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A white halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "1834", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6599", + "stand_turn_anim": "1209", + "bonuses": "19,25,0,-4,0,-1,2,3,0,0,0,20,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "1920", + "durability": null, + "weight": "3.1", + "weapon_interface": "15", + "render_anim": "28", + "name": "White halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1834", + "durability": null, + "name": "White halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6600" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "432", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "481", + "name": "White mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6601", + "bonuses": "8,-2,16,0,0,0,0,0,0,0,0,13,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "481", + "durability": null, + "name": "White mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6602" + }, + { + "requirements": "{0,10}-{5,10}", + "ge_buy_limit": "100", + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "650", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "true", + "name": "White magic staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6603", + "stand_turn_anim": "1209", + "bonuses": "2,-1,10,10,0,2,3,1,10,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "650", + "durability": null, + "name": "White magic staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6604" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "grand_exchange_price": "1187", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "6605", + "stand_turn_anim": "823", + "bonuses": "14,10,-2,0,0,0,2,1,0,0,0,12,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "624", + "durability": null, + "weight": "1.8", + "weapon_interface": "5", + "render_anim": "1381", + "name": "White sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1187", + "durability": null, + "name": "White sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6606" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "2060", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "6607", + "stand_turn_anim": "823", + "bonuses": "13,18,-2,0,0,0,3,2,0,0,0,16,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "960", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "name": "White longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2060", + "durability": null, + "name": "White longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6608" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "4029", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "6609", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,-4,0,0,0,0,0,-1,0,26,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "1920", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "White 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4029", + "durability": null, + "name": "White 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6610" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "1404", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "6611", + "stand_turn_anim": "823", + "bonuses": "4,19,-2,0,0,0,1,0,0,0,0,14,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "768", + "durability": null, + "weight": "1", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "White scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1404", + "durability": null, + "name": "White scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6612" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "980", + "ge_buy_limit": "100", + "examine": "I don't think it's intended for joinery.", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "weapon_interface": "10", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "1178", + "attack_audios": "2504,0,0,0", + "name": "White warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6613", + "bonuses": "-4,-4,22,-4,0,0,0,0,0,0,0,19,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1178", + "durability": null, + "name": "White warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6614" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1440", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6.8", + "absorb": "1,0,2", + "equipment_slot": "4", + "grand_exchange_price": "788", + "name": "White chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6615", + "bonuses": "0,0,0,-15,0,22,32,39,-3,24,10,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "788", + "durability": null, + "name": "White chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6616" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "3840", + "ge_buy_limit": "100", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "5837", + "name": "White platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6617", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5837", + "durability": null, + "name": "White platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6618" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "576", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "durability": null, + "weight": "1.3", + "equipment_slot": "10", + "grand_exchange_price": "1016", + "name": "White boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6619", + "bonuses": "0,0,0,-3,-1,7,8,9,0,0,7,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1016", + "durability": null, + "name": "White boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6620" + }, + { + "remove_head": "true", + "requirements": "{1,10}-{5,10}", + "shop_price": "576", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.9", + "equipment_slot": "0", + "grand_exchange_price": "853", + "name": "White med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6621", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,4,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "853", + "durability": null, + "name": "White med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6622" + }, + { + "remove_head": "true", + "requirements": "{1,10}-{5,10}", + "shop_price": "1056", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "2624", + "name": "White full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6623", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2624", + "durability": null, + "name": "White full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6624" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "Big, white and heavy looking.", + "durability": null, + "weight": "9", + "equipment_slot": "7", + "grand_exchange_price": "2115", + "name": "White platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6625", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2115", + "durability": null, + "name": "White platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6626" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "Big, white, and heavy looking.", + "durability": null, + "weight": "8.1", + "equipment_slot": "7", + "grand_exchange_price": "2000", + "name": "White plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6627", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2000", + "durability": null, + "name": "White plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6628" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "These will keep my hands warm!", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "2036", + "name": "White gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6629", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2036", + "durability": null, + "name": "White gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6630" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1152", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3.6", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "1360", + "name": "White sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6631", + "bonuses": "0,0,0,-6,-2,15,16,14,0,15,9,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1360", + "durability": null, + "name": "White sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6632" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1632", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "2390", + "name": "White kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6633", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2390", + "durability": null, + "name": "White kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6634" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A Temple Knight Communication Orb. Top Secret! / Use this to stay in touch with Korasi and Jessika. (A Void Dance version) / Tyr's commorb, given to him by Sir Tiffy. (Tyr's commorb)", + "durability": null, + "name": "Commorb", + "weight": "1", + "archery_ticket_price": "0", + "id": "6635" + }, + { + "examine": "Proof that I have defeated the evil mage Solus.", + "durability": null, + "name": "Solus's hat", + "archery_ticket_price": "0", + "id": "6636" + }, + { + "examine": "From a darker dimension.", + "durability": null, + "name": "Dark beast", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "6637" + }, + { + "examine": "A key to the nature of light itself. (Mourning's Ends Part II)", + "durability": null, + "name": "Colour wheel", + "archery_ticket_price": "0", + "id": "6638" + }, + { + "destroy_message": "Resetting the light maze will generate a new mirror.", + "examine": "A small hand mirror.", + "durability": null, + "name": "Hand mirror", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6639" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A yellow crystal.", + "durability": null, + "name": "Yellow crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6641" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A cyan crystal.", + "durability": null, + "name": "Cyan crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6643" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A blue crystal.", + "durability": null, + "name": "Blue crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6644" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A fractured crystal, one of the edges is clear.", + "durability": null, + "name": "Fractured crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6646" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A fractured crystal, one of the edges is clear.", + "durability": null, + "name": "Fractured crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6647" + }, + { + "destroy_message": "You can obtain another list from Thorgel.", + "examine": "It's a list of items I need to collect.", + "durability": null, + "name": "Item list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6648" + }, + { + "examine": "The journal of Nissyen Edern.", + "durability": null, + "name": "Edern's journal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6649" + }, + { + "examine": "A blackened crystal sample.", + "durability": null, + "name": "Blackened crystal", + "archery_ticket_price": "0", + "id": "6650" + }, + { + "examine": "A newly formed crystal / A warm energy radiates from this crystal.", + "durability": null, + "name": "Newly made crystal", + "archery_ticket_price": "0", + "id": "6651" + }, + { + "examine": "A newly formed crystal / A warm energy radiates from this crystal.", + "durability": null, + "name": "Newly made crystal", + "archery_ticket_price": "0", + "id": "6652" + }, + { + "destroy_message": "You can get another Crystal trinket from Arianwyn in Lletya.", + "examine": "A small Crystal trinket.", + "durability": null, + "name": "Crystal trinket", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6653" + }, + { + "remove_sleeves": "true", + "examine": "Examine what?", + "durability": null, + "name": "Camo top", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "6654", + "equipment_slot": "4" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo bottoms", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6655", + "equipment_slot": "7" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo helmet", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6656", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "Examine what?", + "durability": null, + "name": "Camo top", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "6657", + "equipment_slot": "4" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo bottoms", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6658", + "equipment_slot": "7" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo helmet", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6659", + "equipment_slot": "0" + }, + { + "shop_price": "60", + "examine": "The jar keeps shaking... I'm scared.", + "durability": null, + "name": "Fishing explosive", + "archery_ticket_price": "0", + "id": "6660" + }, + { + "examine": "An angry Ogre in a funny hat.", + "durability": null, + "name": "Mogre", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "6661" + }, + { + "examine": "This fishing rod seems to have been bitten in half.", + "durability": null, + "name": "Broken fishing rod", + "archery_ticket_price": "0", + "id": "6662" + }, + { + "examine": "It seems someone vacated this boot in a hurry.", + "durability": null, + "name": "Forlorn boot", + "archery_ticket_price": "0", + "id": "6663" + }, + { + "requirements": "{18,32}", + "shop_price": "60", + "examine": "The jar keeps shaking... I'm scared.", + "durability": null, + "name": "Fishing explosive", + "archery_ticket_price": "0", + "id": "6664" + }, + { + "examine": "Fishy, damp and smelly.", + "durability": null, + "name": "Mudskipper hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "6665", + "equipment_slot": "0" + }, + { + "examine": "Strangely uncomfortable flippers.", + "durability": null, + "name": "Flippers", + "weight": "2", + "archery_ticket_price": "0", + "id": "6666", + "bonuses": "-2,-2,-2,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "10000", + "examine": "An empty fishbowl.", + "grand_exchange_price": "431", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "6667" + }, + { + "examine": "A fishless fishbowl.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6668" + }, + { + "examine": "A fishless fishbowl with some seaweed.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6669" + }, + { + "examine": "A fishbowl with a Tiny Bluefish in it.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6670" + }, + { + "examine": "A fishbowl with a Tiny Greenfish in it.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6671" + }, + { + "examine": "A fishbowl with a Tiny Spinefish in it.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6672" + }, + { + "examine": "An empty fishbowl in a net.", + "durability": null, + "name": "Fishbowl and net", + "weight": "2", + "archery_ticket_price": "0", + "id": "6673" + }, + { + "shop_price": "10", + "examine": "A tiny net for grabbing tiny fish.", + "durability": null, + "name": "Tiny net", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6674" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.", + "durability": null, + "name": "An empty box", + "archery_ticket_price": "0", + "id": "6675" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Guam Leaf...", + "durability": null, + "name": "Guam in a box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6677" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Guam Leaf...", + "durability": null, + "name": "Guam in a box?", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6678" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Seaweed...", + "durability": null, + "name": "Seaweed in a box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6679" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Seaweed...", + "durability": null, + "name": "Seaweed in a box?", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6680" + }, + { + "ge_buy_limit": "100", + "examine": "One of the ingredients for making fish food.", + "grand_exchange_price": "1", + "durability": null, + "name": "Ground guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6681" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Ground guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6682" + }, + { + "ge_buy_limit": "100", + "examine": "One of the ingredients for making fish food.", + "grand_exchange_price": "14", + "durability": null, + "name": "Ground seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6683" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Ground seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6684" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "15300", + "durability": null, + "name": "Saradomin brew(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6685" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "15300", + "durability": null, + "name": "Saradomin brew(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6686" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "11400", + "durability": null, + "name": "Saradomin brew(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6687" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "11400", + "durability": null, + "name": "Saradomin brew(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6688" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "7566", + "durability": null, + "name": "Saradomin brew(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6689" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7566", + "durability": null, + "name": "Saradomin brew(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6690" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "3783", + "durability": null, + "name": "Saradomin brew(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6691" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3783", + "durability": null, + "name": "Saradomin brew(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6692" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a crushed bird's nest.", + "grand_exchange_price": "10500", + "durability": null, + "name": "Crushed nest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6693" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "10500", + "durability": null, + "name": "Crushed nest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6694" + }, + { + "examine": "\"A cold-blooded creature, partial to warmth.", + "durability": null, + "name": "Desert lizard", + "archery_ticket_price": "0", + "id": "6695" + }, + { + "requirements": "{22,18}", + "shop_price": "1", + "examine": "Contains ice-cold water.", + "durability": null, + "name": "Ice cooler", + "archery_ticket_price": "0", + "id": "6696" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "A pat of freshly churned butter.", + "grand_exchange_price": "405", + "durability": null, + "name": "Pat of butter", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "6697" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "405", + "durability": null, + "name": "Pat of butter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6698" + }, + { + "durability": null, + "name": "Burnt potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6700" + }, + { + "ge_buy_limit": "1000", + "examine": "It'd taste even better with some toppings.", + "grand_exchange_price": "326", + "durability": null, + "name": "Baked potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6701" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "326", + "durability": null, + "name": "Baked potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6702" + }, + { + "ge_buy_limit": "1000", + "examine": "A baked potato with butter.", + "grand_exchange_price": "745", + "durability": null, + "name": "Potato with butter", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6703" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "745", + "durability": null, + "name": "Potato with butter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6704" + }, + { + "shop_price": "350", + "ge_buy_limit": "10000", + "examine": "A baked potato with butter and cheese.", + "grand_exchange_price": "604", + "durability": null, + "name": "Potato with cheese", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6705" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "604", + "durability": null, + "name": "Potato with cheese", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6706" + }, + { + "examine": "An amulet of Camel-speak. It makes vague braying noises.", + "durability": null, + "name": "Camulet", + "archery_ticket_price": "0", + "id": "6707", + "equipment_slot": "2" + }, + { + "shop_price": "200", + "examine": "Especially good against diseased arachnids.", + "durability": null, + "name": "Slayer gloves", + "archery_ticket_price": "0", + "id": "6708", + "bonuses": "0,0,0,0,0,4,5,3,0,0,1,0,0,0,0" + }, + { + "examine": "A bunch of legs, eyes and teeth.", + "durability": null, + "name": "Fever spider", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "6709" + }, + { + "examine": "A blindweed seed - plant in a Blindweed patch.", + "durability": null, + "name": "Blindweed seed", + "archery_ticket_price": "0", + "id": "6710" + }, + { + "examine": "An inedible, foul smelling herb.", + "durability": null, + "name": "Blindweed", + "archery_ticket_price": "0", + "id": "6711" + }, + { + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6712" + }, + { + "examine": "A heavy metal wrench.", + "durability": null, + "name": "Wrench", + "archery_ticket_price": "0", + "id": "6713" + }, + { + "examine": "A shining paragon of wrenchly virtue.", + "durability": null, + "name": "Holy wrench", + "archery_ticket_price": "0", + "id": "6714" + }, + { + "examine": "They look at you balefully. 'Feed us...", + "durability": null, + "name": "Sluglings", + "archery_ticket_price": "0", + "id": "6715" + }, + { + "examine": "A sinister looking squid.", + "durability": null, + "name": "Karamthulhu", + "archery_ticket_price": "0", + "id": "6716" + }, + { + "examine": "A sinister looking squid.", + "durability": null, + "name": "Karamthulhu", + "archery_ticket_price": "0", + "id": "6717" + }, + { + "examine": "A diseased deceased Fever Spider. Handle with care.", + "durability": null, + "name": "Fever spider body", + "archery_ticket_price": "0", + "id": "6718" + }, + { + "examine": "Sorry, I mean a bucket of 'rum'.", + "durability": null, + "name": "Unsanitary swill", + "archery_ticket_price": "0", + "id": "6719" + }, + { + "requirements": "{18,42}", + "shop_price": "200", + "examine": "Especially good against diseased arachnids.", + "durability": null, + "name": "Slayer gloves", + "archery_ticket_price": "0", + "id": "6720", + "bonuses": "0,0,0,0,0,4,5,3,0,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "A decent enough weapon gone rusty.", + "attack_audios": "2500,0,2517,0", + "durability": null, + "name": "Rusty scimitar", + "weight": "2", + "archery_ticket_price": "0", + "id": "6721" + }, + { + "examine": "Alas...I hardly knew him.", + "durability": null, + "name": "Zombie head", + "archery_ticket_price": "0", + "id": "6722" + }, + { + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6723" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "100", + "examine": "An ancient Fremennik bow that was once used to battle the Moon Clan.", + "has_special": "true", + "durability": null, + "rare_item": "true", + "weight": "1", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "12200", + "name": "Seercull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6724", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12200", + "durability": null, + "name": "Seercull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6725" + }, + { + "durability": null, + "name": "Mud battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6726" + }, + { + "durability": null, + "name": "Mystic mud staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6727" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "6728" + }, + { + "ge_buy_limit": "10000", + "examine": "These would feed a dogfish for months!", + "grand_exchange_price": "9616", + "durability": null, + "name": "Dagannoth bones", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "6729" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "9616", + "durability": null, + "name": "Dagannoth bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6730" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A mysterious ring that can fill the wearer with magical power...", + "grand_exchange_price": "478800", + "rare_item": "true", + "durability": null, + "name": "Seers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6731", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "478800", + "durability": null, + "name": "Seers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6732" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A fabled ring that improves the wearer's skill with a bow...", + "grand_exchange_price": "1400000", + "rare_item": "true", + "durability": null, + "name": "Archers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6733", + "bonuses": "0,0,0,0,4,0,0,0,0,4,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Archers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6734" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A legendary ring once worn by Fremennik warriors.", + "grand_exchange_price": "178100", + "rare_item": "true", + "durability": null, + "name": "Warrior ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6735", + "bonuses": "0,4,0,0,0,0,4,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "178100", + "durability": null, + "name": "Warrior ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6736" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A ring reputed to bring out a berserk fury in its wearer.", + "grand_exchange_price": "2700000", + "rare_item": "true", + "durability": null, + "name": "Berserker ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6737", + "bonuses": "0,0,0,0,0,0,0,4,0,0,0,4,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "2700000", + "durability": null, + "name": "Berserker ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6738" + }, + { + "requirements": "{0,60}", + "ge_buy_limit": "10", + "examine": "A very powerful axe.", + "has_special": "true", + "rare_item": "true", + "durability": null, + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "813100", + "attack_audios": "2498,2498,2497,2498", + "name": "Dragon axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6739", + "bonuses": "-2,38,32,0,0,0,1,0,0,0,0,42,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "813100", + "durability": null, + "name": "Dragon axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6740" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "6741", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6742" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6744" + }, + { + "examine": "The magical sword 'Silverlight'. / The magical sword 'Silverlight', stained black with mushroom ink. (during Shadow of the Storm)", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "name": "Silverlight", + "archery_ticket_price": "0", + "id": "6745", + "bonuses": "9,14,-2,0,0,0,3,2,1,0,0,12,0,0,0" + }, + { + "examine": "The magical sword Silverlight, enhanced with the blood of Agrith-Naar.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "name": "Darklight", + "archery_ticket_price": "0", + "id": "6746", + "bonuses": "10,16,-2,0,0,0,3,2,2,0,0,13,0,0,0" + }, + { + "examine": "Used to make the sigil of the demon Agrith-Naar.", + "durability": null, + "name": "Demonic sigil mould", + "archery_ticket_price": "0", + "id": "6747" + }, + { + "examine": "A sigil used for the summoning of the demon Agrith-Naar.", + "durability": null, + "name": "Demonic sigil", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6748" + }, + { + "examine": "Will this book help in summoning Agrith-Naar?", + "durability": null, + "name": "Demonic tome", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6749" + }, + { + "remove_sleeves": "true", + "examine": "A desert shirt stained black with mushroom ink.", + "durability": null, + "name": "Black desert shirt", + "archery_ticket_price": "0", + "id": "6750", + "equipment_slot": "4" + }, + { + "examine": "A desert robe stained black with mushroom ink.", + "durability": null, + "name": "Black desert robe", + "archery_ticket_price": "0", + "id": "6752", + "equipment_slot": "7" + }, + { + "destroy_message": "Hopefully Erin has a copy!", + "examine": "It changes temperature as I walk. (Meeting History)", + "durability": null, + "name": "Enchanted key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6754", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Guthix Mjolnir.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "You can reclaim this item from the place you found it.", + "grand_exchange_price": "2875", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6760", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0", + "shop_price": "250", + "durability": null, + "weight": "2", + "weapon_interface": "3", + "render_anim": "28", + "name": "Guthix mjolnir" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2875", + "durability": null, + "name": "Guthix mjolnir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6761" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Saradomin Mjolnir.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "You can reclaim this item from the place you found it.", + "grand_exchange_price": "17200", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6762", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0", + "shop_price": "250", + "durability": null, + "weight": "2", + "weapon_interface": "3", + "render_anim": "28", + "name": "Saradomin mjolnir" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17200", + "durability": null, + "name": "Saradomin mjolnir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6763" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Zamorak mjolnir.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "You can reclaim this item from the place you found it.", + "grand_exchange_price": "4115", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6764", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0", + "durability": null, + "weight": "2", + "weapon_interface": "3", + "render_anim": "28", + "name": "Zamorak mjolnir" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4115", + "durability": null, + "name": "Zamorak mjolnir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6765" + }, + { + "examine": "Antipoison for Pox.", + "durability": null, + "name": "Cat antipoison", + "archery_ticket_price": "0", + "id": "6766" + }, + { + "examine": "A little more smelly than usual.", + "durability": null, + "name": "Poisoned cheese", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "6768" + }, + { + "destroy_message": "You can obtain another sheet of music by talking to the snakecharmer of Pollnivneach.", + "examine": "Charming.", + "durability": null, + "name": "Music scroll", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6769" + }, + { + "destroy_message": "You can obtain another set of directions to the party by talking to Jimmy Dazzler.", + "examine": "Jimmy Dazzler's directions.", + "durability": null, + "name": "Directions", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6770" + }, + { + "examine": "Contains garden weeds.", + "durability": null, + "name": "Pot of weeds", + "archery_ticket_price": "0", + "id": "6771" + }, + { + "examine": "Contains slowly burning garden weeds.", + "durability": null, + "name": "Smouldering pot", + "archery_ticket_price": "0", + "id": "6772" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole for putting rats on.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6773", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with one rat on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6774", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with two rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6775", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with three rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6776", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with four rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6777", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with five rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6778", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with six rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6779", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "examine": "Menaphite thug.", + "durability": null, + "name": "Menaphite thug", + "archery_ticket_price": "0", + "id": "6780" + }, + { + "remove_sleeves": "true", + "examine": "This looks quite old.", + "durability": null, + "name": "Robe of elidinis", + "archery_ticket_price": "0", + "id": "6786", + "equipment_slot": "4" + }, + { + "examine": "This looks quite old.", + "durability": null, + "name": "Robe of elidinis", + "archery_ticket_price": "0", + "id": "6787", + "equipment_slot": "7" + }, + { + "examine": "This robe is too torn to wear.", + "durability": null, + "name": "Torn robe", + "weight": "1", + "archery_ticket_price": "0", + "id": "6788" + }, + { + "examine": "This robe is too torn to wear.", + "durability": null, + "name": "Torn robe", + "weight": "1", + "archery_ticket_price": "0", + "id": "6789" + }, + { + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "id": "6790", + "equipment_slot": "10" + }, + { + "examine": "Awusah's Sole.", + "durability": null, + "name": "Sole", + "weight": "1", + "archery_ticket_price": "0", + "id": "6791" + }, + { + "examine": "An ancient key from the shrine in Nardah. (Spirits of the Elid)", + "durability": null, + "name": "Ancestral key", + "archery_ticket_price": "0", + "id": "6792" + }, + { + "examine": "The Ballad of Jaresh.", + "durability": null, + "name": "Ballad", + "archery_ticket_price": "0", + "id": "6793" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A tasty treat from Nardah - better eat this before it melts.", + "grand_exchange_price": "210", + "durability": null, + "name": "Choc-ice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6794" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "210", + "durability": null, + "name": "Choc-ice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6795" + }, + { + "bankable": "false", + "examine": "Wonder what happens if I rub it...", + "durability": null, + "name": "Lamp", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6796" + }, + { + "shop_price": "8", + "examine": "See article", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can", + "archery_ticket_price": "0", + "id": "6797" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6798" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6799" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6800" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6801" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6802" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6803" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6804" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6805" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6806" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6807" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6808" + }, + { + "requirements": "{1,50}-{2,50}", + "ge_buy_limit": "10", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "15", + "absorb": "2,0,5", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "39400", + "name": "Granite legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6809", + "bonuses": "0,0,0,-31,-18,43,45,41,-4,68,20,0,0,0,0" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "6810" + }, + { + "examine": "A very dangerous pile of animated Wyvern bones.", + "durability": null, + "name": "Skeletal wyvern", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "6811" + }, + { + "ge_buy_limit": "1000", + "examine": "Bones of a huge flying creature.", + "grand_exchange_price": "4845", + "durability": null, + "name": "Wyvern bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6812" + }, + { + "durability": null, + "name": "Granite legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6813" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "This would make warm clothing.", + "grand_exchange_price": "90", + "durability": null, + "name": "Fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6814" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "90", + "durability": null, + "name": "Fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6815" + }, + { + "durability": null, + "name": "Wyvern bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6816" + }, + { + "turn90cw_anim": "7044", + "examine": "A slender two-handed sword.", + "walk_anim": "7046", + "durability": null, + "destroy": "true", + "weight": "3", + "turn90ccw_anim": "7043", + "two_handed": "true", + "turn180_anim": "7045", + "render_anim": "124", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "7047", + "name": "Slender blade", + "tradeable": "false", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "6817", + "stand_turn_anim": "7040" + }, + { + "turn90cw_anim": "1207", + "examine": "A sharp sword that can also fire arrows.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "3", + "turn90ccw_anim": "1208", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can make a replacement.", + "stand_anim": "813", + "name": "Bow-sword", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6818", + "stand_turn_anim": "1209" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "25000", + "examine": "A large pouch used for storing essence.", + "durability": null, + "name": "Large pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "6819" + }, + { + "destroy_message": "I can get another from the assassin beside the winch that leads down into Senntisten temple.", + "examine": "It seems to have pieces missing. After Temple at Senntisten quest: The assassin's plunder from the church on Entrana.", + "durability": null, + "name": "Relic", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6820" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This looks valuable.", + "durability": null, + "name": "Orb", + "archery_ticket_price": "0", + "id": "6821" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6822" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6823" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6824" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6825" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6826" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6827" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6828" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6829" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6830" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6831" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6832" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6833" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6834" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6835" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6836" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6837" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6838" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6839" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6840" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6841" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6842" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6843" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6844" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6845" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6846" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6847" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6848" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6849" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6850" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6851" + }, + { + "examine": "A box for storing completed puppets.", + "durability": null, + "name": "Puppet box", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6852" + }, + { + "examine": "A box for storing painted baubles.", + "durability": null, + "name": "Bauble box", + "archery_ticket_price": "0", + "id": "6853" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box for storing completed puppets.", + "durability": null, + "name": "Puppet box", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6854" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box for storing painted baubles.", + "durability": null, + "name": "Bauble box", + "archery_ticket_price": "0", + "id": "6855" + }, + { + "destroy_message": "You can obtain another hat from Diango in the Draynor Market.", + "examine": "A woolly bobble hat.", + "durability": null, + "name": "Bobble hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6856", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A woolly scarf.", + "durability": null, + "name": "Bobble scarf", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6857", + "equipment_slot": "2" + }, + { + "destroy_message": "You can obtain another hat from Diango in the Draynor Market.", + "shop_price": "160", + "examine": "A woolly Jester hat.", + "durability": null, + "name": "Jester hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6858", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another Jester scarf from Diango.", + "examine": "A woolly jester scarf.", + "durability": null, + "name": "Jester scarf", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6859", + "equipment_slot": "2" + }, + { + "destroy_message": "You may get another from Diango in Draynor Village.", + "examine": "A woolly triple bobble jester hat.", + "durability": null, + "name": "Tri-jester hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6860", + "equipment_slot": "0" + }, + { + "destroy_message": "You can obtain another jester scarf from Diango in the Draynor Market.", + "examine": "A woolly jester scarf.", + "durability": null, + "name": "Tri-jester scarf", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6861", + "equipment_slot": "2" + }, + { + "destroy_message": "You can obtain another hat from Diango in the Draynor Market.", + "examine": "A woolly tobogganing hat.", + "durability": null, + "name": "Woolly hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6862", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A woolly tobogganing scarf.", + "durability": null, + "name": "Woolly scarf", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6863", + "equipment_slot": "2" + }, + { + "examine": "The controlling part of a marionette.", + "durability": null, + "name": "Marionette handle", + "archery_ticket_price": "0", + "id": "6864", + "equipment_slot": "3" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6865" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6866" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6867" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6868" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6869" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6870" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6871" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6872" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6873" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6874" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6875" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6876" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6877" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6878" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6879" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6880" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6881" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6882" + }, + { + "examine": "A tasty fruit.", + "durability": null, + "name": "Peach", + "archery_ticket_price": "0", + "id": "6883" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A magic training arena progress hat", + "durability": null, + "name": "Progress hat", + "archery_ticket_price": "0", + "id": "6885", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A magic training arena progress hat", + "durability": null, + "name": "Progress hat", + "archery_ticket_price": "0", + "id": "6886", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A magic training arena progress hat", + "durability": null, + "name": "Progress hat", + "archery_ticket_price": "0", + "id": "6887", + "equipment_slot": "0" + }, + { + "bankable": "false", + "examine": "A guardian of the arena.", + "durability": null, + "name": "Guardian statue", + "archery_ticket_price": "0", + "id": "6888" + }, + { + "requirements": "{6,60}", + "ge_buy_limit": "10", + "examine": "The magical book of the Mage.", + "grand_exchange_price": "3800000", + "durability": null, + "name": "Mage's book", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6889", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3800000", + "durability": null, + "name": "Mage's book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6890" + }, + { + "shop_price": "200", + "examine": "A book about the Training Arena.", + "durability": null, + "name": "Arena book", + "weight": "1", + "archery_ticket_price": "0", + "id": "6891" + }, + { + "bankable": "false", + "shop_price": "6", + "examine": "Comfortable leather boots.", + "grand_exchange_price": "189", + "durability": null, + "name": "Leather boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "6893", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0" + }, + { + "bankable": "false", + "examine": "A large metal shield.", + "grand_exchange_price": "3084", + "durability": null, + "name": "Adamant kiteshield", + "tradeable": "true", + "weight": "5.8", + "archery_ticket_price": "0", + "id": "6894", + "absorb": "3,0,6", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "bankable": "false", + "examine": "A medium sized helmet.", + "grand_exchange_price": "1049", + "durability": null, + "name": "Adamant med helm", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6895", + "absorb": "1,0,2", + "bonuses": "0,0,0,-3,-1,14,15,13,-1,14,6,0,0,0,0" + }, + { + "bankable": "false", + "shop_price": "350", + "examine": "This looks valuable.", + "grand_exchange_price": "644", + "durability": null, + "name": "Emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6896" + }, + { + "bankable": "false", + "shop_price": "32000", + "examine": "A razor sharp longsword", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "lendable": "true", + "grand_exchange_price": "18938", + "attack_audios": "2500,2500,2517,2500", + "name": "Rune longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6897", + "bonuses": "38,47,-2,0,0,0,3,2,0,0,0,49,0,0,0" + }, + { + "bankable": "false", + "examine": "A green cylinder", + "durability": null, + "name": "Cylinder", + "archery_ticket_price": "0", + "id": "6898" + }, + { + "bankable": "false", + "examine": "A yellow cube", + "durability": null, + "name": "Cube", + "archery_ticket_price": "0", + "id": "6899" + }, + { + "bankable": "false", + "examine": "A blue icosahedron.", + "durability": null, + "name": "Icosahedron", + "archery_ticket_price": "0", + "id": "6900" + }, + { + "bankable": "false", + "examine": "A red pentamid.", + "durability": null, + "name": "Pentamid", + "archery_ticket_price": "0", + "id": "6901" + }, + { + "bankable": "false", + "examine": "This looks valuable.", + "durability": null, + "name": "Orb", + "archery_ticket_price": "0", + "id": "6902" + }, + { + "bankable": "false", + "examine": "This looks valuable.", + "durability": null, + "name": "Dragonstone", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "6903" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6904" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6905" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6906" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6907" + }, + { + "requirements": "{6,45}", + "shop_price": "303030030", + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A beginner level wand", + "walk_anim": "1146", + "durability": null, + "weight": "0.2", + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "render_anim": "1426", + "equipment_slot": "3", + "grand_exchange_price": "11500", + "stand_anim": "809", + "name": "Beginner wand", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6908", + "stand_turn_anim": "823", + "bonuses": "0,0,0,5,0,0,0,0,5,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "11500", + "durability": null, + "name": "Beginner wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6909" + }, + { + "requirements": "{6,50}", + "ge_buy_limit": "10", + "shop_price": "606060060", + "turn90cw_anim": "821", + "examine": "An apprentice level wand.", + "walk_anim": "1146", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "defence_anim": "420", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "82000", + "stand_anim": "809", + "tradeable": "true", + "name": "Apprentice wand", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6910", + "stand_turn_anim": "823", + "bonuses": "0,0,0,10,0,0,0,0,10,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "82000", + "durability": null, + "name": "Apprentice wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6911" + }, + { + "requirements": "{6,55}", + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A teacher level wand.", + "walk_anim": "1146", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "render_anim": "1426", + "equipment_slot": "3", + "grand_exchange_price": "944100", + "stand_anim": "809", + "name": "Teacher wand", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6912", + "stand_turn_anim": "823", + "bonuses": "0,0,0,15,0,0,0,0,15,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "944100", + "durability": null, + "name": "Teacher wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6913" + }, + { + "requirements": "{6,60}", + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A master level wand.", + "walk_anim": "1146", + "durability": null, + "weight": "0.1", + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "defence_anim": "420", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "1700000", + "stand_anim": "8980", + "tradeable": "true", + "name": "Master wand", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6914", + "stand_turn_anim": "823", + "bonuses": "0,0,0,20,0,0,0,0,20,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Master wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6915" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical robes.", + "durability": null, + "weight": "2.2", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "3300000", + "name": "Infinity top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6916", + "bonuses": "0,0,0,22,0,0,0,0,22,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3300000", + "durability": null, + "name": "Infinity top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6917" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "A mystic hat.", + "durability": null, + "weight": "0.4", + "absorb": "1,0,0", + "equipment_slot": "0", + "grand_exchange_price": "1800000", + "name": "Infinity hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "6918", + "bonuses": "0,0,0,6,0,0,0,0,6,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1800000", + "durability": null, + "name": "Infinity hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6919" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical boots.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "10", + "grand_exchange_price": "1200000", + "name": "Infinity boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6920", + "bonuses": "0,0,0,5,0,0,0,0,5,0,5,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Infinity boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6921" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical gloves.", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Infinity gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6922", + "bonuses": "0,0,0,5,0,0,0,0,5,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Infinity gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6923" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical robes.", + "durability": null, + "weight": "1.8", + "absorb": "2,1,0", + "equipment_slot": "7", + "grand_exchange_price": "2500000", + "name": "Infinity bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6924", + "bonuses": "0,0,0,17,0,0,0,0,17,0,17,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "2500000", + "durability": null, + "name": "Infinity bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6925" + }, + { + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "983", + "durability": null, + "name": "Bones to peaches", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6926" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A severed hand covered with sand.", + "durability": null, + "name": "Sandy hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6945" + }, + { + "destroy_message": "Speak to the Guard Captain in Yanille to get another beer soaked hand.", + "examine": "A severed hand dripping with beer.", + "durability": null, + "name": "Beer-soaked hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6946" + }, + { + "destroy_message": "Speak to Bert to replace this Rota.", + "examine": "A copy of a work rota.", + "durability": null, + "name": "Bert's rota", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6947" + }, + { + "destroy_message": "Search Sandy's office in Brimhaven for another Rota.", + "examine": "An original work rota.", + "durability": null, + "name": "Sandy's rota", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6948" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Maybe I should read this...", + "durability": null, + "name": "A magic scroll", + "archery_ticket_price": "0", + "id": "6949" + }, + { + "destroy_message": "Speak to Zavistic Rarve to replace your magical orb.", + "examine": "An ordinary looking scrying orb.", + "durability": null, + "name": "Magical orb", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6950" + }, + { + "destroy_message": "Speak to Zavistic Rarve to replace your magical orb.", + "examine": "This magical scrying orb pulsates as it stores information.", + "durability": null, + "name": "Magical orb (a)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6951" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle of truth serum.", + "examine": "Fluid sloshes innocently in this vial.", + "durability": null, + "name": "Truth serum", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6952" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle.", + "examine": "A bottle of water.", + "durability": null, + "name": "Bottled water", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6953" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle to make some more red berry juice.", + "examine": "Redberry juice sloshes around in this vial, waiting for white berries to be added.", + "durability": null, + "name": "Redberry juice", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6954" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to make more pink dye.", + "shop_price": "20", + "examine": "A vial of pink dye.", + "durability": null, + "name": "Pink dye", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6955" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle to make the lens again.", + "examine": "This lens has a pinkish tinge to it.", + "durability": null, + "name": "Rose-tinted lens", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6956", + "equipment_slot": "3" + }, + { + "destroy_message": "Speak to Mazion near the sandpit on Entrana to find the Wizard Head again.", + "examine": "A decapitated, sand-covered head.", + "durability": null, + "name": "Wizard's head", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6957" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A handful of sand from Sandy's pocket.", + "durability": null, + "name": "Sand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6958" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Use pink dye on a cape and this is what you get!", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "1", + "grand_exchange_price": "919", + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6959", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "919", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6960" + }, + { + "examine": "A freshly baked baguette.", + "durability": null, + "name": "Baguette", + "archery_ticket_price": "0", + "id": "6961" + }, + { + "ge_buy_limit": "1000", + "examine": "A freshly made triangle sandwich.", + "grand_exchange_price": "110", + "durability": null, + "name": "Triangle sandwich", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6962" + }, + { + "examine": "A freshly made roll.", + "durability": null, + "name": "Roll", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6963" + }, + { + "bankable": "false", + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "archery_ticket_price": "0", + "id": "6964" + }, + { + "examine": "A freshly made square sandwich.", + "durability": null, + "name": "Square sandwich", + "archery_ticket_price": "0", + "id": "6965" + }, + { + "lendable": "true", + "examine": "Makes the wearer pretty intimidating.", + "grand_exchange_price": "61200", + "durability": null, + "name": "Dragon med helm", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "6967", + "absorb": "2,0,4", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "durability": null, + "name": "Triangle sandwich", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6968" + }, + { + "examine": "I'd better be careful eating this.", + "grand_exchange_price": "694", + "durability": null, + "name": "Shark", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6969" + }, + { + "examine": "It's a solid gold pyramid!", + "durability": null, + "name": "Pyramid top", + "weight": "11", + "archery_ticket_price": "0", + "id": "6970" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "4", + "durability": null, + "name": "Sandstone (1kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6971" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4", + "durability": null, + "name": "Sandstone (1kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6972" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "27", + "durability": null, + "name": "Sandstone (2kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6973" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27", + "durability": null, + "name": "Sandstone (2kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6974" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "30", + "durability": null, + "name": "Sandstone (5kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6975" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Sandstone (5kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6976" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "120", + "durability": null, + "name": "Sandstone (10kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6977" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "120", + "durability": null, + "name": "Sandstone (10kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6978" + }, + { + "ge_buy_limit": "10000", + "examine": "See article", + "grand_exchange_price": "304", + "durability": null, + "name": "Granite (500g)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6979" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "304", + "durability": null, + "name": "Granite (500g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6980" + }, + { + "ge_buy_limit": "10000", + "examine": "See article", + "grand_exchange_price": "845", + "durability": null, + "name": "Granite (2kg)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6981" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "845", + "durability": null, + "name": "Granite (2kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6982" + }, + { + "ge_buy_limit": "10000", + "examine": "See article", + "grand_exchange_price": "2153", + "durability": null, + "name": "Granite (5kg)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6983", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2153", + "durability": null, + "name": "Granite (5kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6984" + }, + { + "destroy_message": "You can make another 20 kg block by giving enough stone to Lazim.", + "examine": "A huge twenty-kilo block of sandstone.", + "durability": null, + "name": "Sandstone (20kg)", + "destroy": "true", + "weight": "20", + "archery_ticket_price": "0", + "id": "6985" + }, + { + "destroy_message": "You can make another 32 kg sandstone block by giving enough stone to Lazim.", + "examine": "A huge thirty-two-kilo block of sandstone.", + "durability": null, + "name": "Sandstone (32kg)", + "destroy": "true", + "weight": "32", + "archery_ticket_price": "0", + "id": "6986" + }, + { + "destroy_message": "You can make another statue body by giving Lazim 20 kg of stone and then crafting it.", + "examine": "The body of a sandstone statue.", + "durability": null, + "name": "Sandstone body", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6987" + }, + { + "destroy_message": "You can make another statue base by giving Lazim 32 kg of stone and then crafting it.", + "examine": "The base and legs of a sandstone statue.", + "durability": null, + "name": "Sandstone base", + "destroy": "true", + "weight": "32", + "archery_ticket_price": "0", + "id": "6988" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of a Z.", + "durability": null, + "name": "Z sigil", + "archery_ticket_price": "0", + "id": "6993" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of an M.", + "durability": null, + "name": "M sigil", + "archery_ticket_price": "0", + "id": "6994" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of an R.", + "durability": null, + "name": "R sigil", + "archery_ticket_price": "0", + "id": "6995" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of a K.", + "durability": null, + "name": "K sigil", + "archery_ticket_price": "0", + "id": "6996" + }, + { + "destroy_message": "You can get the statue's left arm back from Lazim.", + "examine": "The left arm of a large stone statue.", + "durability": null, + "name": "Stone left arm", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "6997" + }, + { + "destroy_message": "You can get the statue's right arm back from Lazim.", + "examine": "The right arm of a large stone statue.", + "durability": null, + "name": "Stone right arm", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "6998" + }, + { + "destroy_message": "You can get the statue's left leg back from Lazim.", + "examine": "The left leg of a large stone statue.", + "durability": null, + "name": "Stone left leg", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "6999" + }, + { + "destroy_message": "You can get the statue's right leg back from Lazim.", + "examine": "The right leg of a large stone statue.", + "durability": null, + "name": "Stone right leg", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "7000" + }, + { + "destroy_message": "You can make another positive mould by using soft clay on the pedestal in Enakhra's temple.", + "examine": "A positive clay mould of a camel's head.", + "durability": null, + "name": "Camel mould (p)", + "tradeable": "false", + "destroy": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7001" + }, + { + "remove_head": "true", + "examine": "Blend in in the desert.", + "durability": null, + "name": "Camel mask", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7003", + "equipment_slot": "0" + }, + { + "shop_price": "14", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "33", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7004", + "equipment_slot": "3" + }, + { + "requirements": "{18,33}-{11,33}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A lantern to aid attacking Harpie bugs.", + "grand_exchange_price": "466", + "durability": null, + "name": "Unlit bug lantern", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "7051", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "466", + "durability": null, + "name": "Unlit bug lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7052" + }, + { + "requirements": "{18,33}", + "shop_price": "130", + "examine": "A lantern to aid attacking Harpie bugs.", + "durability": null, + "name": "Lit bug lantern", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "7053", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with chilli con carne", + "grand_exchange_price": "415", + "durability": null, + "name": "Chilli potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7054" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "415", + "durability": null, + "name": "Chilli potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7055" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with egg and tomato.", + "grand_exchange_price": "441", + "durability": null, + "name": "Egg potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7056" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "441", + "durability": null, + "name": "Egg potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7057" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with mushroom and onions.", + "grand_exchange_price": "1165", + "durability": null, + "name": "Mushroom potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7058" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1165", + "durability": null, + "name": "Mushroom potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7059" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with tuna and sweetcorn.", + "grand_exchange_price": "2134", + "durability": null, + "name": "Tuna potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7060" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2134", + "durability": null, + "name": "Tuna potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7061" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of meat in chilli-con-carne sauce.", + "grand_exchange_price": "215", + "durability": null, + "name": "Chilli con carne", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7062" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "215", + "durability": null, + "name": "Chilli con carne", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7063" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of scrambled eggs and tomato", + "grand_exchange_price": "126", + "durability": null, + "name": "Egg and tomato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7064" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "126", + "durability": null, + "name": "Egg and tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7065" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of fried mushroom and onions.", + "grand_exchange_price": "368", + "durability": null, + "name": "Mushroom & onion", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7066" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "368", + "durability": null, + "name": "Mushroom & onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7067" + }, + { + "ge_buy_limit": "10000", + "examine": "A bowl of cooked tuna and sweetcorn.", + "grand_exchange_price": "514", + "durability": null, + "name": "Tuna and corn", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7068" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "514", + "durability": null, + "name": "Tuna and corn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7069" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of finely minced meat.", + "grand_exchange_price": "22", + "durability": null, + "name": "Minced meat", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7070" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "22", + "durability": null, + "name": "Minced meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7071" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of spicy sauce.", + "grand_exchange_price": "70", + "durability": null, + "name": "Spicy sauce", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7072" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "70", + "durability": null, + "name": "Spicy sauce", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7073" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of chopped garlic.", + "grand_exchange_price": "39", + "durability": null, + "name": "Chopped garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7074" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "39", + "durability": null, + "name": "Chopped garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7075" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of uncooked egg.", + "grand_exchange_price": "34", + "durability": null, + "name": "Uncooked egg", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7076" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "34", + "durability": null, + "name": "Uncooked egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7077" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of scrambled egg.", + "grand_exchange_price": "24", + "durability": null, + "name": "Scrambled egg", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7078" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "24", + "durability": null, + "name": "Scrambled egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7079" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of sliced Bittercap mushrooms.", + "grand_exchange_price": "149", + "durability": null, + "name": "Sliced mushrooms", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7080" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "149", + "durability": null, + "name": "Sliced mushrooms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7081" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of fried Bittercap mushrooms.", + "grand_exchange_price": "189", + "durability": null, + "name": "Fried mushrooms", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7082" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "189", + "durability": null, + "name": "Fried mushrooms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7083" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of sliced, fried onions.", + "grand_exchange_price": "40", + "durability": null, + "name": "Fried onions", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7084" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "40", + "durability": null, + "name": "Fried onions", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7085" + }, + { + "ge_buy_limit": "10000", + "examine": "A bowl of finely chopped tuna.", + "grand_exchange_price": "233", + "durability": null, + "name": "Chopped tuna", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7086" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "233", + "durability": null, + "name": "Chopped tuna", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7087" + }, + { + "ge_buy_limit": "10000", + "examine": "Raw sweetcorn.", + "grand_exchange_price": "110", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7088" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "110", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7089" + }, + { + "durability": null, + "name": "Burnt egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7091" + }, + { + "durability": null, + "name": "Burnt onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7093" + }, + { + "durability": null, + "name": "Burnt mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7095" + }, + { + "examine": "Best keep this away from naked flames.", + "durability": null, + "name": "Gunpowder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7108" + }, + { + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7109" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "48", + "examine": "A seaworthy grey shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7110", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7111" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "714", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7112", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "714", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7113" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "Not for land lubbers.", + "grand_exchange_price": "2530", + "durability": null, + "name": "Pirate boots", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "7114", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2530", + "durability": null, + "name": "Pirate boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7115" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "77", + "examine": "Well, okay, they're beige, but they're part of the white pirate clothing set, so...", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7116", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "77", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7117" + }, + { + "examine": "A cannister holding shrapnel.", + "durability": null, + "name": "Canister", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7118" + }, + { + "examine": "For cleaning and packing the cannon.", + "durability": null, + "name": "Ramrod", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "7120" + }, + { + "examine": "A plank of wood to repair the hull with.", + "durability": null, + "name": "Repair plank", + "archery_ticket_price": "0", + "id": "7121" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "904", + "examine": "A sea worthy shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7122", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "904", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7123" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "340", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7124", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "340", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7125" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "examine": "A sea worthy pair of trousers.", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7126", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7127" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "744", + "examine": "A sea worthy shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7128", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "744", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7129" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "154", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7130", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "154", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7131" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "253", + "examine": "A sea worthy pair of trousers.", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7132", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "253", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7133" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "examine": "A sea worthy shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7134", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7135" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "469", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7136", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "469", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7137" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "examine": "A sea worthy pair of trousers.", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7138", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7139" + }, + { + "shop_price": "2560", + "examine": "Feels quite lucky.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "6", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "attack_audios": "2500,2500,2517,2500", + "name": "Lucky cutlass", + "archery_ticket_price": "0", + "id": "7140", + "bonuses": "5,20,0,-5,0,6,6,6,0,0,0,25,0,0,0" + }, + { + "shop_price": "1040", + "examine": "I hope he doesn't want it back.", + "durability": null, + "name": "Harry's cutlass", + "weight": "1", + "archery_ticket_price": "0", + "attack_speed": "4", + "weapon_interface": "6", + "id": "7141", + "bonuses": "3,14,0,-5,0,4,4,4,0,0,0,22,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "25600", + "examine": "The very butcher of a silk button.", + "durability": null, + "name": "Rapier", + "weight": "1", + "archery_ticket_price": "0", + "attack_speed": "4", + "weapon_interface": "5", + "id": "7142", + "bonuses": "45,7,-2,0,0,0,1,0,0,0,0,44,0,0,0", + "render_anim": "2622", + "equipment_slot": "3" + }, + { + "examine": "Looks valuable.", + "durability": null, + "name": "Plunder", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7143" + }, + { + "examine": "By Cap'n Hook-Hand Morrisane.", + "durability": null, + "name": "Book o' piracy", + "archery_ticket_price": "0", + "id": "7144" + }, + { + "examine": "A working cannon barrel.", + "durability": null, + "name": "Cannon barrel", + "weight": "32", + "archery_ticket_price": "0", + "id": "7145" + }, + { + "examine": "Not likely to work again.", + "durability": null, + "name": "Broken cannon", + "weight": "32", + "archery_ticket_price": "0", + "id": "7146" + }, + { + "examine": "A plank of wood to repair the hull with.", + "durability": null, + "name": "Repair plank", + "archery_ticket_price": "0", + "id": "7148" + }, + { + "examine": "A cannister holding shrapnel.", + "durability": null, + "name": "Canister", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7149" + }, + { + "examine": "Useful for pinning up paintings.", + "durability": null, + "name": "Tacks", + "archery_ticket_price": "0", + "id": "7150" + }, + { + "shop_price": "18", + "examine": "A coil of rope.", + "grand_exchange_price": "101", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "7155" + }, + { + "shop_price": "1", + "examine": "Useful for lighting a fire.", + "grand_exchange_price": "121", + "durability": null, + "name": "Tinderbox", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "7156" + }, + { + "shop_price": "30", + "examine": "I think it is eating through the bottle.", + "durability": null, + "name": "Braindeath 'rum", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7157" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7044", + "examine": "A two-handed dragon sword.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "1000000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "7158", + "stand_turn_anim": "7040", + "bonuses": "-4,92,80,-4,0,0,0,0,0,-1,0,93,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "3", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "2503,0,2504,0", + "name": "Dragon 2h sword" + }, + { + "requirements": "{18,37}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "They're heavily insulated wellies.", + "durability": null, + "weight": "1.3", + "equipment_slot": "10", + "grand_exchange_price": "269", + "name": "Insulated boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7159", + "bonuses": "0,0,0,0,0,1,1,0,0,1,0,0,0,0,0" + }, + { + "examine": "Before being attacked: A ball of Electrical energy.", + "durability": null, + "name": "Killerwatt", + "archery_ticket_price": "0", + "attack_speed": "2", + "id": "7160" + }, + { + "durability": null, + "name": "Insulated boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7161" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Lots of pie recipes for me to try.", + "grand_exchange_price": "62", + "durability": null, + "name": "Pie recipe book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7162" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "62", + "durability": null, + "name": "Pie recipe book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7163" + }, + { + "shop_price": "54", + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "77", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7164" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "77", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7165" + }, + { + "shop_price": "54", + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "284", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7166" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "284", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7167" + }, + { + "ge_buy_limit": "1000", + "examine": "Needs to be baked before I can use it.", + "grand_exchange_price": "1625", + "durability": null, + "name": "Raw mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7168" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1625", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7169" + }, + { + "shop_price": "54", + "ge_buy_limit": "1000", + "turn90cw_anim": "821", + "examine": "All the good of the earth.", + "walk_anim": "819", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "13", + "turn180_anim": "820", + "render_anim": "1", + "equipment_slot": "3", + "grand_exchange_price": "2024", + "stand_anim": "808", + "name": "Mud pie", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7170", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2024", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7171" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "94", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7172" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "94", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7173" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "150", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7174" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "150", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7175" + }, + { + "ge_buy_limit": "1000", + "examine": "Needs cooking before I eat it.", + "grand_exchange_price": "1052", + "durability": null, + "name": "Raw garden pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7176" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1052", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7177" + }, + { + "ge_buy_limit": "1000", + "examine": "What I wouldn't give for a good steak about now...", + "grand_exchange_price": "1667", + "durability": null, + "name": "Garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7178" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1667", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7179" + }, + { + "ge_buy_limit": "1000", + "examine": "What I wouldn't give for a good steak about now...", + "grand_exchange_price": "442", + "durability": null, + "name": "Half a garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7180" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "442", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7181" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "51", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7182" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "51", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7183" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "691", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7184" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "691", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7185" + }, + { + "ge_buy_limit": "1000", + "examine": "Raw fish is risky, better cook it.", + "grand_exchange_price": "1198", + "durability": null, + "name": "Raw fish pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7186" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1198", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7187" + }, + { + "ge_buy_limit": "1000", + "examine": "Bounty of the sea.", + "grand_exchange_price": "121", + "durability": null, + "name": "Fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7188" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "121", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7189" + }, + { + "ge_buy_limit": "1000", + "examine": "Bounty of the sea.", + "grand_exchange_price": "56", + "durability": null, + "name": "Half a fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7190" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "56", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7191" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients. ", + "grand_exchange_price": "159", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7192" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "159", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7193" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "537", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7194" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "537", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7195" + }, + { + "ge_buy_limit": "1000", + "examine": "This would taste a lot better cooked.", + "grand_exchange_price": "1813", + "durability": null, + "name": "Raw admiral pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7196" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1813", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7197" + }, + { + "ge_buy_limit": "1000", + "examine": "Much tastier than a normal fish pie.", + "grand_exchange_price": "532", + "durability": null, + "name": "Admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7198" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "532", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7199" + }, + { + "ge_buy_limit": "1000", + "examine": "Much tastier than a normal fish pie.", + "grand_exchange_price": "184", + "durability": null, + "name": "Half an admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7200" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "184", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half an admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7201" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "126", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7202" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "126", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7203" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "1116", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7204" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1116", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7205" + }, + { + "ge_buy_limit": "1000", + "examine": "Good as it looks, I'd better cook it.", + "grand_exchange_price": "3787", + "durability": null, + "name": "Raw wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7206" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3787", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7207" + }, + { + "ge_buy_limit": "1000", + "examine": "A triumph of man over nature.", + "grand_exchange_price": "1322", + "durability": null, + "name": "Wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7208" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1322", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7209" + }, + { + "ge_buy_limit": "1000", + "examine": "A triumph of man over nature.", + "grand_exchange_price": "112", + "durability": null, + "name": "Half a wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7210" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "112", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7211" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "495", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7212" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "495", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7213" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "980", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7214" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "980", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7215" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh fruit may be good for you, but I should really cook this.", + "grand_exchange_price": "2577", + "durability": null, + "name": "Raw summer pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7216" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2577", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7217" + }, + { + "ge_buy_limit": "1000", + "examine": "All the fruits of a very small forest.", + "grand_exchange_price": "1288", + "durability": null, + "name": "Summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7218" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1288", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7219" + }, + { + "ge_buy_limit": "1000", + "examine": "All the fruits of a very small forest.", + "grand_exchange_price": "430", + "durability": null, + "name": "Half a summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7220" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "430", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7221" + }, + { + "shop_price": "19", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "32", + "durability": null, + "name": "Burnt rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7222" + }, + { + "shop_price": "25", + "ge_buy_limit": "1000", + "examine": "A delicious looking piece of roast rabbit.", + "grand_exchange_price": "37", + "durability": null, + "name": "Roast rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7223" + }, + { + "shop_price": "67", + "ge_buy_limit": "1000", + "examine": "Might taste better cooked.", + "grand_exchange_price": "112", + "durability": null, + "name": "Skewered rabbit", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7224" + }, + { + "shop_price": "81", + "ge_buy_limit": "100", + "examine": "An iron spit.", + "grand_exchange_price": "18", + "durability": null, + "name": "Iron spit", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7225" + }, + { + "durability": null, + "name": "Burnt chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7227" + }, + { + "shop_price": "130", + "ge_buy_limit": "1000", + "examine": "It might look delicious to an ogre.Roasted chompy bird.", + "grand_exchange_price": "164", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7228" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "164", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7229" + }, + { + "ge_buy_limit": "1000", + "examine": "A skewered chompy bird.", + "grand_exchange_price": "294", + "durability": null, + "name": "Skewered chompy", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7230" + }, + { + "durability": null, + "name": "Burnt rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7231" + }, + { + "durability": null, + "name": "Roast rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7232" + }, + { + "durability": null, + "name": "Skewered rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7233" + }, + { + "durability": null, + "name": "Iron spit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7234" + }, + { + "durability": null, + "name": "Skewered chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7235" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7236" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7237" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7238" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7239" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7240" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7241" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7242" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7243" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7244" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7245" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7246" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7247" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7248" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7249" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7250" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7251" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7252" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7253" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7254" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7255" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7256" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7257" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7258" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7259" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7260" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7261" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7262" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7263" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7264" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7265" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7266" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7267" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7268" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7269" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7270" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7271" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7272" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7273" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7274" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7275" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7276" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7277" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7278" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7279" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7280" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7281" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7282" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7283" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7284" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7285" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7286" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7287" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7288" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7289" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7290" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7291" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7292" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7293" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7294" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7295" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7296" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7298" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7300" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7301" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7303" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7304" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7305" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7306" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7307" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7308" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7309" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7310" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7311" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7312" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7313" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7314" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7315" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7316" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7317" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7318" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "36600", + "durability": null, + "name": "Red boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7319", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36600", + "durability": null, + "name": "Red boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7320" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "16600", + "durability": null, + "name": "Orange boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7321", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "16600", + "durability": null, + "name": "Orange boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7322" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "43000", + "durability": null, + "name": "Green boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7323", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "43000", + "durability": null, + "name": "Green boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7324" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "37600", + "durability": null, + "name": "Blue boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7325", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "37600", + "durability": null, + "name": "Blue boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7326" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "41700", + "durability": null, + "name": "Black boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7327", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "41700", + "durability": null, + "name": "Black boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7328" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "93", + "durability": null, + "name": "Red firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7329" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "94", + "durability": null, + "name": "Green firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7330" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "113", + "durability": null, + "name": "Blue firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7331" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black kitesheild with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "14300", + "name": "Black shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7332", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14300", + "durability": null, + "name": "Black shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7333" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "16400", + "name": "Adamant shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7334", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "16400", + "durability": null, + "name": "Adamant shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7335" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "34200", + "name": "Rune shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7336", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "34200", + "durability": null, + "name": "Rune shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7337" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black kiteshield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "9797", + "name": "Black shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7338", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "9797", + "durability": null, + "name": "Black shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7339" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3248", + "name": "Adamant shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7340", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3248", + "durability": null, + "name": "Adamant shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7341" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32400", + "name": "Rune shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7342", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32400", + "durability": null, + "name": "Rune shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7343" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black shield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "7405", + "name": "Black shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7344", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7405", + "durability": null, + "name": "Black shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7345" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "5271", + "name": "Adamant shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7346", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5271", + "durability": null, + "name": "Adamant shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7347" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32700", + "name": "Rune shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7348", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32700", + "durability": null, + "name": "Rune shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7349" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black shield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "5572", + "name": "Black shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7350", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5572", + "durability": null, + "name": "Black shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7351" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3366", + "name": "Adamant shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7352", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3366", + "durability": null, + "name": "Adamant shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7353" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32500", + "name": "Rune shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7354", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32500", + "durability": null, + "name": "Rune shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7355" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black shield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "7159", + "name": "Black shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7356", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7159", + "durability": null, + "name": "Black shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7357" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "6328", + "name": "Adamant shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7358", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "6328", + "durability": null, + "name": "Adamant shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7359" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32400", + "name": "Rune shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7360", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "requirements": "", + "ge_buy_limit": "2", + "grand_exchange_price": "32400", + "durability": null, + "name": "Rune shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7361" + }, + { + "requirements": "{1,20}-{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "durability": null, + "weight": "5.4", + "absorb": "0,3,1", + "equipment_slot": "4", + "grand_exchange_price": "101600", + "name": "Studded body (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7362", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "101600", + "durability": null, + "name": "Studded body (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7363" + }, + { + "requirements": "{1,20}-{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "durability": null, + "weight": "5.4", + "absorb": "0,3,1", + "equipment_slot": "4", + "grand_exchange_price": "27300", + "name": "Studded body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7364", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "27300", + "durability": null, + "name": "Studded body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7365" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "durability": null, + "weight": "4.5", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "114600", + "name": "Studded chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7366", + "bonuses": "0,0,0,-5,6,15,16,17,6,16,5,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "114600", + "durability": null, + "name": "Studded chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7367" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim, too!", + "durability": null, + "weight": "4.5", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "36800", + "name": "Studded chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7368", + "bonuses": "0,0,0,-5,6,15,16,17,6,16,5,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36800", + "durability": null, + "name": "Studded chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7369" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide. With colourful trim!", + "grand_exchange_price": "212400", + "durability": null, + "name": "D'hide body(g)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7370", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "212400", + "durability": null, + "name": "D'hide body(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7371" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide. With colourful trim!", + "grand_exchange_price": "38800", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7372", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "38800", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7373" + }, + { + "requirements": "{1,50}-{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "6883", + "durability": null, + "name": "D'hide body (g)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7374", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "6883", + "durability": null, + "name": "D'hide body (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7375" + }, + { + "requirements": "{1,50}-{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "5268", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7376", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5268", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7377" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "1300000", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7378", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1300000", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7379" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "304300", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7380", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "304300", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7381" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "21300", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7382", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "21300", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7383" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "2554", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7384", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2554", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7385" + }, + { + "ge_buy_limit": "2", + "examine": "Leg covering favoured by women and wizards. With a colourful trim!", + "grand_exchange_price": "298900", + "durability": null, + "name": "Blue skirt (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7386", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "298900", + "durability": null, + "name": "Blue skirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7387" + }, + { + "ge_buy_limit": "2", + "examine": "Leg covering favoured by women and wizards. With a colourful trim!", + "grand_exchange_price": "126800", + "durability": null, + "name": "Blue skirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7388", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "126800", + "durability": null, + "name": "Blue skirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7389" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "I can practise magic better in this.", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Wizard robe (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7390", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Wizard robe (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7391" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "I can do magic better in this.", + "grand_exchange_price": "244600", + "durability": null, + "name": "Wizard robe (t)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7392", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "244600", + "durability": null, + "name": "Wizard robe (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7393" + }, + { + "ge_buy_limit": "2", + "examine": "A silly pointed hat with colourful trim.", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Wizard hat (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "hat": "true", + "id": "7394", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Wizard hat (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7395" + }, + { + "ge_buy_limit": "2", + "examine": "A silly pointed hat, with colourful trim.", + "grand_exchange_price": "352700", + "durability": null, + "name": "Wizard hat (t)", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "hat": "true", + "id": "7396", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "352700", + "durability": null, + "name": "Wizard hat (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7397" + }, + { + "requirements": "{1,40}-{6,20}", + "ge_buy_limit": "2", + "examine": "Enchanted Wizards robes.", + "durability": null, + "weight": "1.8", + "absorb": "2,1,0", + "equipment_slot": "7", + "grand_exchange_price": "50000", + "name": "Enchanted robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7398", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,40}", + "ge_buy_limit": "2", + "examine": "Enchanted Wizards robes.", + "durability": null, + "weight": "1", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "75100", + "name": "Enchanted top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7399", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{6,20}", + "ge_buy_limit": "2", + "examine": "A three pointed hat of magic.", + "grand_exchange_price": "8845", + "durability": null, + "name": "Enchanted hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7400", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Enchanted robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7401" + }, + { + "durability": null, + "name": "Enchanted top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7402" + }, + { + "durability": null, + "name": "Enchanted hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7403" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Red logs", + "archery_ticket_price": "0", + "id": "7404" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Green logs", + "weight": "2", + "archery_ticket_price": "0", + "id": "7405" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Blue logs", + "weight": "2", + "archery_ticket_price": "0", + "id": "7406" + }, + { + "durability": null, + "name": "Dragon 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7407" + }, + { + "destroy_message": "I found this in a grave at Draynor Manor.", + "examine": "I shouldn't joke; this is a grave matter.", + "durability": null, + "name": "Draynor skull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7408" + }, + { + "shop_price": "40000", + "examine": "The only way to kill a Tanglefoot.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "attack_speed": "5", + "weapon_interface": "5", + "equipment_slot": "3", + "destroy_message": "I'll chat to Malignius Mortifer if I want another pair.", + "name": "Magic secateurs", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "7409", + "bonuses": "7,9,-5,1,0,0,1,0,1,0,0,1,0,0,0" + }, + { + "destroy_message": "I can always find another Tanglefoot if I need more.", + "examine": "Contains the Fairy Queen's magical essence.", + "durability": null, + "name": "Queen's secateurs", + "archery_ticket_price": "0", + "id": "7410", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A list of the Fairy Queen's symptoms.", + "durability": null, + "name": "Symptoms list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7411" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "archery_ticket_price": "0", + "id": "7413" + }, + { + "durability": null, + "name": "Paddle", + "archery_ticket_price": "0", + "id": "7414", + "weapon_interface": "1", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Paddle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7415" + }, + { + "ge_buy_limit": "5000", + "examine": "A mole claw.", + "grand_exchange_price": "11800", + "durability": null, + "name": "Mole claw", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7416" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "11800", + "durability": null, + "name": "Mole claw", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7417" + }, + { + "ge_buy_limit": "5000", + "examine": "The skin of a large mole.", + "grand_exchange_price": "12000", + "durability": null, + "name": "Mole skin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7418" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "12000", + "durability": null, + "name": "Mole skin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7419" + }, + { + "examine": "A fun guy. No wait, that's awful. Plus it doesn't even make sense. (As Fungi) A bouncy fungus. (Level 74) A fun guy. No wait, that's awful.. (Level 86)", + "durability": null, + "name": "Mutated zygomite", + "archery_ticket_price": "0", + "id": "7420" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 10", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7421", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 9", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7422", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 8", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7423", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 7", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7424", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 6", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7425", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 5", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7426", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 4", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7427", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 3", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7428", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 2", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7429", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 1", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7430", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 0", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7431", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "10", + "examine": "Does exactly what it says on the tin. (Kills Fungi.)", + "durability": null, + "name": "Fungicide", + "archery_ticket_price": "0", + "id": "7432" + }, + { + "shop_price": "35", + "ge_buy_limit": "100", + "examine": "Spoooooon!", + "durability": null, + "weight": "0.4", + "attack_speed": "5", + "weapon_interface": "6", + "equipment_slot": "3", + "grand_exchange_price": "44", + "name": "Wooden spoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7433", + "bonuses": "4,5,-2,0,0,0,3,2,0,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44", + "durability": null, + "name": "Wooden spoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7434" + }, + { + "shop_price": "45", + "ge_buy_limit": "100", + "examine": "A large whisk of death.", + "durability": null, + "attack_speed": "4", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "11", + "name": "Egg whisk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7435", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Egg whisk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7436" + }, + { + "requirements": "{0,10}", + "shop_price": "292", + "ge_buy_limit": "100", + "examine": "Use the spork.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "196", + "name": "Spork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7437", + "bonuses": "11,8,-2,0,0,0,2,1,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "196", + "durability": null, + "name": "Spork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7438" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "shop_price": "1728", + "turn90cw_anim": "7044", + "examine": "A large spatula... of doom!", + "walk_anim": "7046", + "durability": null, + "weight": "3.6", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "turn180_anim": "7045", + "render_anim": "124", + "equipment_slot": "3", + "grand_exchange_price": "953", + "stand_anim": "7047", + "tradeable": "true", + "name": "Spatula", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "7439", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,-4,0,0,0,0,0,-1,0,22,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "953", + "durability": null, + "name": "Spatula", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7440" + }, + { + "requirements": "{0,20}", + "shop_price": "1494", + "ge_buy_limit": "100", + "examine": "Looks like it's non-stick too!", + "durability": null, + "weight": "1.5", + "attack_speed": "6", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "836", + "name": "Frying pan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7441", + "bonuses": "-4,-4,25,-4,0,0,0,0,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "836", + "durability": null, + "name": "Frying pan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7442" + }, + { + "requirements": "{0,30}", + "shop_price": "2880", + "ge_buy_limit": "100", + "examine": "Generally used for impaling fresh meat.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "6", + "equipment_slot": "3", + "grand_exchange_price": "1712", + "name": "Skewer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7443", + "bonuses": "20,29,-2,0,0,0,3,2,0,0,0,31,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1712", + "durability": null, + "name": "Skewer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7444" + }, + { + "requirements": "{0,40}", + "shop_price": "12960", + "ge_buy_limit": "100", + "examine": "That's how I roll!", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "8445", + "name": "Rolling pin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7445", + "bonuses": "20,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8445", + "durability": null, + "name": "Rolling pin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7446" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A sharp, dependable knife, for filleting meat.", + "durability": null, + "attack_speed": "4", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "4686", + "attack_audios": "2704,0,0,0", + "name": "Kitchen knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7447", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4686", + "durability": null, + "name": "Kitchen knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7448" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "Often used to soften tough meat up.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "1666", + "equipment_slot": "3", + "attack_anims": "2067,2066,2068", + "grand_exchange_price": "24700", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7449", + "stand_turn_anim": "823", + "bonuses": "-4,-4,53,-4,0,0,0,0,0,0,0,48,0,0,0", + "requirements": "{0,40}", + "shop_price": "41500", + "durability": null, + "weight": "1", + "weapon_interface": "10", + "render_anim": "1", + "name": "Meat tenderiser" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24700", + "durability": null, + "name": "Meat tenderiser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7450" + }, + { + "requirements": "{0,40}", + "shop_price": "24040", + "ge_buy_limit": "100", + "examine": "An effective tool for chopping tough meat.", + "durability": null, + "weight": "0.5", + "attack_speed": "4", + "weapon_interface": "6", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "15000", + "attack_audios": "2500,0,2517,0", + "name": "Cleaver", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7451", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15000", + "durability": null, + "name": "Cleaver", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7452" + }, + { + "shop_price": "50", + "examine": "A pair of plain gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7453", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "100", + "examine": "A pair of bronze-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7454", + "bonuses": "2,2,2,1,2,2,2,2,1,2,1,2,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "325", + "examine": "A pair of iron-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7455", + "bonuses": "3,3,3,2,3,3,3,3,2,3,2,3,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "500", + "examine": "A pair of steel-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7456", + "bonuses": "4,4,4,2,4,4,4,4,2,4,2,4,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "1000", + "examine": "A pair of black-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7457", + "bonuses": "5,5,5,3,5,5,5,5,3,5,3,5,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "1500", + "examine": "A pair of mithril-coloured gloves.", + "durability": null, + "name": "Gloves", + "archery_ticket_price": "0", + "id": "7458", + "bonuses": "6,6,6,3,6,6,6,6,3,6,3,6,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "2500", + "examine": "A pair of adamant-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7459", + "bonuses": "7,7,7,4,7,7,7,7,4,7,4,7,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,13}", + "shop_price": "5000", + "examine": "A pair of rune-coloured gloves.", + "durability": null, + "name": "Gloves", + "archery_ticket_price": "0", + "id": "7460", + "bonuses": "8,8,8,4,8,8,8,8,4,8,4,8,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,41}", + "shop_price": "100000", + "examine": "A pair of dragon-coloured gloves.", + "durability": null, + "name": "Gloves", + "archery_ticket_price": "0", + "id": "7461", + "bonuses": "9,9,9,5,9,9,9,9,5,9,5,9,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,41}", + "shop_price": "100000", + "examine": "A pair of Barrows-themed gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7462", + "bonuses": "12,12,12,6,12,12,12,12,6,12,6,12,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "It's cornflour in a pot.", + "durability": null, + "name": "Cornflour", + "weight": "1", + "archery_ticket_price": "0", + "id": "7463" + }, + { + "examine": "A tatty old book belonging to the Wise Old Man of Draynor Village.", + "durability": null, + "name": "Book on chickens", + "archery_ticket_price": "0", + "id": "7464" + }, + { + "examine": "Surprise, it looks like a vanilla pod.", + "durability": null, + "name": "Vanilla pod", + "archery_ticket_price": "0", + "id": "7465" + }, + { + "examine": "It's cornflour in a pot.", + "durability": null, + "name": "Cornflour", + "weight": "1", + "archery_ticket_price": "0", + "id": "7466" + }, + { + "examine": "It's cornflour in a pot.", + "durability": null, + "name": "Pot of cornflour", + "weight": "1", + "archery_ticket_price": "0", + "id": "7468" + }, + { + "destroy_message": "I'll have to get all the ingredients again.", + "examine": "A mixture of milk, cream and cornflour.", + "durability": null, + "name": "Cornflour mixture", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7470" + }, + { + "destroy_message": "I'll have to get all the ingredients again.", + "examine": "It's a bucket of milk and cream.", + "durability": null, + "name": "Milky mixture", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7471" + }, + { + "examine": "Some cinnamon sticks.", + "durability": null, + "name": "Cinnamon", + "archery_ticket_price": "0", + "id": "7472" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pot of brulee supreme.", + "durability": null, + "name": "Brulee supreme", + "archery_ticket_price": "0", + "id": "7476" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "What came first, the chicken or...", + "durability": null, + "name": "Evil chicken's egg", + "archery_ticket_price": "0", + "id": "7477" + }, + { + "destroy_message": "I got this by killing a Black Dragon. It might be hard to get another one.", + "examine": "It's got a dragon on it.", + "durability": null, + "name": "Dragon token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7478" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's a meat and potato stew with fancy seasoning.", + "durability": null, + "name": "Spicy stew", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7479" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (4)", + "archery_ticket_price": "0", + "id": "7480" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (3)", + "archery_ticket_price": "0", + "id": "7481" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (2)", + "archery_ticket_price": "0", + "id": "7482" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (1)", + "archery_ticket_price": "0", + "id": "7483" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (4)", + "archery_ticket_price": "0", + "id": "7484" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (3)", + "archery_ticket_price": "0", + "id": "7485" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (2)", + "archery_ticket_price": "0", + "id": "7486" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (1)", + "archery_ticket_price": "0", + "id": "7487" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (4)", + "archery_ticket_price": "0", + "id": "7488" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (3)", + "archery_ticket_price": "0", + "id": "7489" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (2)", + "archery_ticket_price": "0", + "id": "7490" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (1)", + "archery_ticket_price": "0", + "id": "7491" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (4)", + "archery_ticket_price": "0", + "id": "7492" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (3)", + "archery_ticket_price": "0", + "id": "7493" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (2)", + "archery_ticket_price": "0", + "id": "7494" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (1)", + "archery_ticket_price": "0", + "id": "7495" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Empty spice shaker", + "archery_ticket_price": "0", + "id": "7496" + }, + { + "examine": "A cool refreshing fruit mix. With ash in for some reason.", + "durability": null, + "name": "Dirty blast", + "archery_ticket_price": "0", + "id": "7497" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7498" + }, + { + "examine": "He seems to like wearing black.", + "durability": null, + "name": "Evil dave", + "archery_ticket_price": "0", + "id": "7499" + }, + { + "examine": "A short angry guy.", + "durability": null, + "name": "Dwarf", + "archery_ticket_price": "0", + "id": "7500" + }, + { + "examine": "He provides new players with useful information.", + "durability": null, + "name": "Lumbridge guide", + "archery_ticket_price": "0", + "id": "7502" + }, + { + "examine": "He looks a little shifty.", + "durability": null, + "name": "Osman", + "archery_ticket_price": "0", + "id": "7504" + }, + { + "examine": "A shifty-looking character.", + "durability": null, + "name": "Pirate pete", + "archery_ticket_price": "0", + "id": "7505" + }, + { + "examine": "Leader of the White Knights.", + "durability": null, + "name": "Sir amik varze", + "archery_ticket_price": "0", + "id": "7506" + }, + { + "examine": "He's been frozen in time.", + "durability": null, + "name": "Skrach", + "archery_ticket_price": "0", + "id": "7507" + }, + { + "shop_price": "4", + "examine": "There appears to be a coin in the bottom. Liked by dwarves.", + "durability": null, + "name": "Asgoldian ale", + "archery_ticket_price": "0", + "id": "7508" + }, + { + "examine": "Red hot and glowing, ouch! Only for dwarf consumption.", + "durability": null, + "name": "Dwarven rock cake", + "weight": "8.5", + "archery_ticket_price": "0", + "id": "7509" + }, + { + "examine": "Cool and heavy as a brick. Only for dwarf consumption.", + "durability": null, + "name": "Dwarven rock cake", + "weight": "8.5", + "archery_ticket_price": "0", + "id": "7510" + }, + { + "examine": "Two out of two goblin generals prefer it!", + "durability": null, + "name": "Slop of compromise", + "archery_ticket_price": "0", + "id": "7511" + }, + { + "examine": "Previously a nice crispy loaf of bread. Now just kind of icky.", + "durability": null, + "name": "Soggy bread", + "archery_ticket_price": "0", + "id": "7512" + }, + { + "examine": "They clearly taste so much better this way!", + "durability": null, + "name": "Spicy maggots", + "archery_ticket_price": "0", + "id": "7513" + }, + { + "examine": "Orange slices which have been dyed, but it looks more like they died.", + "durability": null, + "name": "Dyed orange", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7514" + }, + { + "examine": "Glad these aren't in my bed.", + "durability": null, + "name": "Breadcrumbs", + "archery_ticket_price": "0", + "id": "7515" + }, + { + "examine": "Those leaves look useful!", + "durability": null, + "name": "Kelp", + "archery_ticket_price": "0", + "id": "7516" + }, + { + "examine": "Kelp flakes. Smells of the sea.", + "durability": null, + "name": "Ground kelp", + "weight": "2", + "archery_ticket_price": "0", + "id": "7517" + }, + { + "examine": "A smelly meat.", + "durability": null, + "name": "Crab meat", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7518" + }, + { + "examine": "A smelly meat.", + "durability": null, + "name": "Crab meat", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7519" + }, + { + "ge_buy_limit": "100", + "examine": "Nice and Tasty!", + "grand_exchange_price": "219", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7521" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7522" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7523" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7524" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7525" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7526" + }, + { + "examine": "A smelly paste.", + "durability": null, + "name": "Ground crab meat", + "archery_ticket_price": "0", + "id": "7527" + }, + { + "examine": "A smelly paste.", + "durability": null, + "name": "Ground cod", + "archery_ticket_price": "0", + "id": "7528" + }, + { + "examine": "Would taste nicer if I cooked it.", + "durability": null, + "name": "Raw fishcake", + "archery_ticket_price": "0", + "id": "7529" + }, + { + "examine": "Mmmm, reminds me of the seaside.", + "durability": null, + "name": "Cooked fishcake", + "archery_ticket_price": "0", + "id": "7530" + }, + { + "examine": "Hmmm, what can I use this for?", + "durability": null, + "name": "Mudskipper hide", + "weight": "1", + "archery_ticket_price": "0", + "id": "7532" + }, + { + "remove_head": "true", + "examine": "You'll look daft, but at least you won't drown!", + "durability": null, + "name": "Fishbowl helmet", + "weight": "5", + "archery_ticket_price": "0", + "id": "7534", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "I'll need a helmet to make this work.", + "durability": null, + "name": "Diving apparatus", + "weight": "10", + "archery_ticket_price": "0", + "id": "7535", + "equipment_slot": "1" + }, + { + "examine": "Fresh off the crab itself.", + "durability": null, + "name": "Fresh crab claw", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7536" + }, + { + "examine": "If it is good enough for crabs, it's good enough for me.", + "durability": null, + "name": "Crab claw", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7537", + "bonuses": "0,0,0,0,0,3,4,2,0,0,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Fresh off the crab itself.", + "durability": null, + "name": "Fresh crab shell", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7538" + }, + { + "remove_head": "true", + "examine": "If it's good enough for crabs, it's good enough for me!", + "durability": null, + "name": "Crab helmet", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7539", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "Darn, it's useless now.", + "durability": null, + "name": "Broken crab claw", + "archery_ticket_price": "0", + "id": "7540" + }, + { + "examine": "Darn, it's useless now.", + "durability": null, + "name": "Broken crab shell", + "archery_ticket_price": "0", + "id": "7541" + }, + { + "destroy_message": "Maybe Traiborn will have another.", + "examine": "Imbued with knowledge itself.", + "durability": null, + "name": "Cake of guidance", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7542" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Now all I need to do is cook it.", + "durability": null, + "name": "Raw guide cake", + "archery_ticket_price": "0", + "id": "7543" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Egg containing knowledge.", + "durability": null, + "name": "Enchanted egg", + "archery_ticket_price": "0", + "id": "7544" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Guiding milk.", + "durability": null, + "name": "Enchanted milk", + "weight": "2", + "archery_ticket_price": "0", + "id": "7545" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pot of special flour.", + "durability": null, + "name": "Enchanted flour", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7546" + }, + { + "examine": "A druid pouch.", + "durability": null, + "name": "Druid pouch", + "archery_ticket_price": "0", + "id": "7547" + }, + { + "shop_price": "8", + "examine": "A potato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Potato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7548" + }, + { + "durability": null, + "name": "Potato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7549" + }, + { + "shop_price": "10", + "examine": "An onion seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Onion seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7550" + }, + { + "durability": null, + "name": "Onion seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7551" + }, + { + "shop_price": "76", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "24", + "durability": null, + "name": "Mithril arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7552", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,22,0,0" + }, + { + "durability": null, + "name": "Mithril arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7553" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "16", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7554" + }, + { + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7555" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7556" + }, + { + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7557" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "9", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7558" + }, + { + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7559" + }, + { + "shop_price": "140", + "examine": "Used for small missile spells.", + "grand_exchange_price": "65", + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7560" + }, + { + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7561" + }, + { + "shop_price": "10", + "examine": "A tomato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Tomato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7562" + }, + { + "durability": null, + "name": "Tomato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7563" + }, + { + "examine": "An inflated toad tied to a rock like a balloon.", + "durability": null, + "name": "Balloon toad", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7564" + }, + { + "examine": "An inflated toad tied to a rock like a balloon.", + "durability": null, + "name": "Balloon toad", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7565" + }, + { + "ge_buy_limit": "100", + "examine": "The uncooked meat of a Jubbly bird.", + "grand_exchange_price": "422", + "durability": null, + "name": "Raw jubbly", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7566" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "422", + "durability": null, + "name": "Raw jubbly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7567" + }, + { + "ge_buy_limit": "100", + "examine": "Lovely jubbly!", + "grand_exchange_price": "944", + "durability": null, + "name": "Cooked jubbly", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7568" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "944", + "durability": null, + "name": "Cooked jubbly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7569" + }, + { + "durability": null, + "name": "Burnt jubbly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7571" + }, + { + "examine": "Like a banana only redder.", + "durability": null, + "name": "Red banana", + "archery_ticket_price": "0", + "id": "7572", + "equipment_slot": "5" + }, + { + "examine": "Like monkey nuts only tchikier.", + "durability": null, + "name": "Tchiki monkey nuts", + "archery_ticket_price": "0", + "id": "7573" + }, + { + "examine": "Perfect for stuffing snakes.", + "durability": null, + "name": "Sliced red banana", + "archery_ticket_price": "0", + "id": "7574" + }, + { + "examine": "Mixing this with jam would just be wrong.", + "durability": null, + "name": "Tchiki nut paste", + "archery_ticket_price": "0", + "id": "7575" + }, + { + "examine": "Like a snake only not alive.", + "durability": null, + "name": "Snake corpse", + "weight": "3", + "archery_ticket_price": "0", + "id": "7576" + }, + { + "examine": "This snake is stuffed right up.", + "durability": null, + "name": "Raw stuffed snake", + "weight": "3", + "archery_ticket_price": "0", + "id": "7577" + }, + { + "examine": "Is this really what you wanted to do?", + "durability": null, + "name": "Odd stuffed snake", + "archery_ticket_price": "0", + "id": "7578" + }, + { + "examine": "Fit for a Monkey King. (cooked)", + "durability": null, + "name": "Stuffed snake", + "weight": "3", + "archery_ticket_price": "0", + "id": "7579" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Overgrown hellcat", + "archery_ticket_price": "0", + "id": "7581" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Hell cat", + "archery_ticket_price": "0", + "id": "7582" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Hell-kitten", + "archery_ticket_price": "0", + "id": "7583" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Wily hellcat", + "archery_ticket_price": "0", + "id": "7585" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Dummy", + "archery_ticket_price": "0", + "id": "7586" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7587" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7588" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7589" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7590" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7591" + }, + { + "examine": "Aside from the braaaains on the lapel, it's still quite good.", + "durability": null, + "name": "Zombie shirt", + "archery_ticket_price": "0", + "id": "7592", + "equipment_slot": "4" + }, + { + "examine": "Good for a shamble about town.", + "durability": null, + "name": "Zombie trousers", + "archery_ticket_price": "0", + "id": "7593", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "I look 40,000 years old in this...", + "durability": null, + "name": "Zombie mask", + "archery_ticket_price": "0", + "id": "7594", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Smells pretty funky.", + "durability": null, + "name": "Zombie gloves", + "archery_ticket_price": "0", + "id": "7595", + "equipment_slot": "9" + }, + { + "shop_price": "160", + "examine": "Thrilling.", + "durability": null, + "name": "Zombie boots", + "archery_ticket_price": "0", + "id": "7596", + "equipment_slot": "10" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7597" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7598" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7599" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7600" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7601" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7602" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7603" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7604" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7605" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7606" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7607" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7608" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7609" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7610" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7611" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7612" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7613" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7614" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7615" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7616" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7617" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7618" + }, + { + "examine": "A silvery rod of mithril and silver with sapphire on top.", + "durability": null, + "name": "Silvthrill rod", + "archery_ticket_price": "0", + "id": "7620" + }, + { + "examine": "A bucket partially filled with rubble. / A bucket totally filled with rubble.", + "durability": null, + "name": "Bucket of rubble", + "weight": "2", + "archery_ticket_price": "0", + "id": "7622" + }, + { + "examine": "A bucket partially filled with rubble. / A bucket totally filled with rubble.", + "durability": null, + "name": "Bucket of rubble", + "weight": "2", + "archery_ticket_price": "0", + "id": "7624" + }, + { + "examine": "A bucket partially filled with rubble. / A bucket totally filled with rubble.", + "durability": null, + "name": "Bucket of rubble", + "weight": "2", + "archery_ticket_price": "0", + "id": "7626" + }, + { + "destroy_message": "You can get another plaster fragment by exploring near the Inn in Burgh de Rott.", + "examine": "A fragment of plaster with some impressions on it.", + "durability": null, + "name": "Plaster fragment", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7628" + }, + { + "destroy_message": "You can get another scroll by exploring near the Inn in Burgh de Rott.", + "examine": "An ancient tattered scroll.", + "durability": null, + "name": "Dusty scroll", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7629" + }, + { + "destroy_message": "You can get another temple key by talking to Drezel.", + "examine": "A key for the Temple Library. (In Aid of the Myreque)", + "durability": null, + "name": "Temple library key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7632" + }, + { + "destroy_message": "You can get another Ancient Book by searching the library in the temple on the Salve.", + "shop_price": "5000", + "examine": "The unholy book of a forgotten god.", + "durability": null, + "name": "Ancient book", + "weight": "1", + "archery_ticket_price": "0", + "id": "7633", + "bonuses": "4,4,4,6,0,4,4,4,6,0,2,0,0,5,0" + }, + { + "destroy_message": "You can get another Crumbling tome by searching the library in the temple on the Salve.", + "examine": "An ancient history book.", + "durability": null, + "name": "Battered tome", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7634" + }, + { + "destroy_message": "You can get another Leather book by searching the library in the temple on the Salve.", + "examine": "An ancient leather-bound tome.", + "durability": null, + "name": "Leather book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7635" + }, + { + "examine": "Rod of Ivandis dust.", + "durability": null, + "name": "Rod dust", + "archery_ticket_price": "0", + "id": "7636" + }, + { + "examine": "A silvery rod of mithril and silver with sapphire on top.", + "durability": null, + "name": "Silvthrill rod", + "archery_ticket_price": "0", + "id": "7637", + "equipment_slot": "3" + }, + { + "examine": "A silvery rod of mithril and silver with sapphire on top.", + "durability": null, + "name": "Silvthrill rod", + "archery_ticket_price": "0", + "id": "7638" + }, + { + "turn90cw_anim": "1207", + "examine": "A fully charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(10)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7639", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(9)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7640", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(8)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7641", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(7)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7642", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(6)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7643", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(5)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7644", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(4)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7645", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(3)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7646", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "2! 2 charges left! Ha Ha Ha.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(2)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7647", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(1)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7648", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "destroy_message": "You can make another one of these by using clay on Ivandis' coffin.", + "examine": "A mould of the Rod of Ivandis.", + "durability": null, + "name": "Rod clay mould", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7649" + }, + { + "ge_buy_limit": "1000", + "examine": "It's ground up silver.", + "grand_exchange_price": "316", + "durability": null, + "name": "Silver dust", + "tradeable": "true", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "7650" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "316", + "durability": null, + "name": "Silver dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7651" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "96", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7652" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "96", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7653" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "77", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7654" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "77", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7655" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "58", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7656" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "58", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7657" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "30", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7658" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "30", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7659" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "140", + "durability": null, + "name": "Guthix balance(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7660" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "140", + "durability": null, + "name": "Guthix balance(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7661" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "168", + "durability": null, + "name": "Guthix balance(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7662" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "168", + "durability": null, + "name": "Guthix balance(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7663" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "132", + "durability": null, + "name": "Guthix balance(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7664" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "132", + "durability": null, + "name": "Guthix balance(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7665" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "66", + "durability": null, + "name": "Guthix balance(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7666" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "66", + "durability": null, + "name": "Guthix balance(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7667" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1663", + "examine": "A specially crafted hammer with strange markings on it.", + "walk_anim": "1663", + "turn90ccw_anim": "1663", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1663", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "1615", + "stand_anim": "1662", + "tradeable": "true", + "run_anim": "1664", + "archery_ticket_price": "0", + "id": "7668", + "stand_turn_anim": "823", + "bonuses": "-4,-4,35,-4,0,0,0,0,0,0,0,35,0,0,0", + "shop_price": "3000", + "durability": null, + "weight": "1.8", + "weapon_interface": "10", + "render_anim": "27", + "name": "Gadderhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1615", + "durability": null, + "name": "Gadderhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7669" + }, + { + "turn90cw_anim": "3680", + "examine": "I think they look a bit silly.", + "walk_anim": "3680", + "durability": null, + "weight": "0.4", + "turn90ccw_anim": "3680", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "turn180_anim": "3680", + "render_anim": "1386", + "equipment_slot": "3", + "stand_anim": "3677", + "name": "Boxing gloves", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7671", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "turn90cw_anim": "3680", + "examine": "I think they look a bit silly.", + "walk_anim": "3680", + "durability": null, + "weight": "0.4", + "turn90ccw_anim": "3680", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "turn180_anim": "3680", + "render_anim": "1386", + "equipment_slot": "3", + "stand_anim": "3677", + "name": "Boxing gloves", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7673", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "examine": "A less-than razor sharp sword.", + "durability": null, + "name": "Wooden sword", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "7675", + "weapon_interface": "5", + "bonuses": "4,3,-2,0,0,0,2,1,0,0,0,5,0,0,0", + "render_anim": "2584", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Wooden shield", + "archery_ticket_price": "0", + "id": "7676", + "equipment_slot": "5" + }, + { + "examine": "It knows where the treasure is.", + "durability": null, + "name": "Treasure stone", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "7677" + }, + { + "shop_price": "160", + "examine": "You can use this to open the prize chest!", + "durability": null, + "name": "Prize key", + "weight": "1", + "archery_ticket_price": "0", + "id": "7678" + }, + { + "examine": "A good tool for bashing someone.", + "durability": null, + "name": "Pugel", + "archery_ticket_price": "0", + "two_handed": "true", + "id": "7679", + "weapon_interface": "14", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Pugel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7680" + }, + { + "examine": "Party Pete's Bumper Book Of Games", + "durability": null, + "name": "Game book", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7681" + }, + { + "durability": null, + "name": "Hoop", + "archery_ticket_price": "0", + "id": "7682", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Hoop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7683" + }, + { + "durability": null, + "name": "Dart", + "archery_ticket_price": "0", + "attack_speed": "3", + "id": "7684", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7685" + }, + { + "durability": null, + "name": "Bow and arrow", + "archery_ticket_price": "0", + "id": "7686", + "weapon_interface": "1", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Bow and arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7687" + }, + { + "examine": "The kettle is empty.", + "durability": null, + "name": "Kettle", + "archery_ticket_price": "0", + "id": "7688" + }, + { + "durability": null, + "name": "Kettle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7689" + }, + { + "examine": "It's full of cold water.", + "durability": null, + "name": "Full kettle", + "archery_ticket_price": "0", + "id": "7690" + }, + { + "examine": "It's full of boiling water.", + "durability": null, + "name": "Hot kettle", + "archery_ticket_price": "0", + "id": "7691" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7692" + }, + { + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7693" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7694" + }, + { + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7695" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7696" + }, + { + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7697" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7698" + }, + { + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7699" + }, + { + "examine": "Add boiling water to make a tea.", + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7700" + }, + { + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7701" + }, + { + "examine": "This teapot is empty.", + "durability": null, + "name": "Teapot", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7702" + }, + { + "durability": null, + "name": "Teapot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7703" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7704" + }, + { + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7705" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7706" + }, + { + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7707" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7708" + }, + { + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7709" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7710" + }, + { + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7711" + }, + { + "examine": "Add boiling water to make a tea.", + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7712" + }, + { + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7713" + }, + { + "examine": "This teapot is empty.", + "durability": null, + "name": "Teapot", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7714" + }, + { + "durability": null, + "name": "Teapot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7715" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7716" + }, + { + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7717" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7718" + }, + { + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7719" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7720" + }, + { + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7721" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7722" + }, + { + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7723" + }, + { + "examine": "Add boiling water to make a tea.", + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7724" + }, + { + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7725" + }, + { + "examine": "This teapot is empty.", + "durability": null, + "name": "Teapot", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7726" + }, + { + "durability": null, + "name": "Teapot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7727" + }, + { + "shop_price": "1", + "examine": "An empty cup.", + "grand_exchange_price": "7", + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7728" + }, + { + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7729" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7730" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7731" + }, + { + "examine": "A porcelain cup.", + "durability": null, + "name": "Porcelain cup", + "archery_ticket_price": "0", + "id": "7732" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7733" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7734" + }, + { + "examine": "A porcelain cup.", + "durability": null, + "name": "Porcelain cup", + "archery_ticket_price": "0", + "id": "7735" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7736" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7737" + }, + { + "examine": "Mmm, how about a nice cup of tea?", + "durability": null, + "name": "Tea leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7738" + }, + { + "durability": null, + "name": "Tea leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7739" + }, + { + "examine": "A glass of frothy ale.", + "grand_exchange_price": "151", + "durability": null, + "name": "Beer", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7740" + }, + { + "durability": null, + "name": "Beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7741" + }, + { + "shop_price": "1", + "examine": "I need to fill this with beer.", + "grand_exchange_price": "25", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "7742" + }, + { + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7743" + }, + { + "shop_price": "3", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "131", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7744" + }, + { + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7745" + }, + { + "shop_price": "2", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "569", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7746" + }, + { + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7747" + }, + { + "shop_price": "2", + "examine": "A glass of bitter.", + "grand_exchange_price": "523", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7748" + }, + { + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7749" + }, + { + "shop_price": "5", + "examine": "A foul smelling brew.", + "grand_exchange_price": "14", + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7750" + }, + { + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7751" + }, + { + "shop_price": "2", + "examine": "A glass of Cider", + "grand_exchange_price": "1539", + "durability": null, + "name": "Cider", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7752" + }, + { + "durability": null, + "name": "Cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7753" + }, + { + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "2371", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7754" + }, + { + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7755" + }, + { + "durability": null, + "name": "Paintbrush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7756", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Paintbrush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7757" + }, + { + "examine": "A decent-enough weapon gone rusty.", + "durability": null, + "name": "Rusty sword", + "weight": "2", + "archery_ticket_price": "0", + "id": "7758", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "examine": "Nice bit of crafting.", + "grand_exchange_price": "3140", + "durability": null, + "name": "Toy soldier", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7759" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3140", + "durability": null, + "name": "Toy soldier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7760" + }, + { + "examine": "Nice bit of crafting.", + "grand_exchange_price": "3123", + "durability": null, + "name": "Toy soldier (wound)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7761" + }, + { + "durability": null, + "name": "Toy soldier (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7762" + }, + { + "ge_buy_limit": "100", + "examine": "In inventory: Nice bit of crafting! When released: Nice bit of crafting that...", + "grand_exchange_price": "3236", + "durability": null, + "name": "Toy doll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7763" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3236", + "durability": null, + "name": "Toy doll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7764" + }, + { + "examine": "In inventory: Nice bit of crafting! When released: Nice bit of crafting that...", + "grand_exchange_price": "3289", + "durability": null, + "name": "Toy doll (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7765" + }, + { + "durability": null, + "name": "Toy doll (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7766" + }, + { + "shop_price": "1705", + "ge_buy_limit": "100", + "examine": "Nice bit of crafting!", + "grand_exchange_price": "3384", + "durability": null, + "name": "Toy mouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7767" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3384", + "durability": null, + "name": "Toy mouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7768" + }, + { + "shop_price": "1705", + "examine": "Nice bit of crafting!", + "grand_exchange_price": "3484", + "durability": null, + "name": "Toy mouse (wound)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7769" + }, + { + "durability": null, + "name": "Toy mouse (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7770" + }, + { + "ge_buy_limit": "100", + "examine": "Inventory: Nice bit of crafting!As a follower: An amazing piece of crafting.", + "grand_exchange_price": "2930", + "durability": null, + "name": "Clockwork cat", + "tradeable": "true", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7771" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2930", + "durability": null, + "name": "Clockwork cat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7772" + }, + { + "examine": "I can use this to make a lyre.", + "durability": null, + "name": "Branch", + "weight": "1", + "archery_ticket_price": "0", + "id": "7773", + "equipment_slot": "3" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7774" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7775" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7776" + }, + { + "examine": "A long section of vine made up of lots of shorter sections.", + "durability": null, + "name": "Long vine", + "archery_ticket_price": "0", + "id": "7777" + }, + { + "examine": "A short section of vines.", + "durability": null, + "name": "Short vine", + "archery_ticket_price": "0", + "id": "7778" + }, + { + "examine": "A tome of learning that focuses on the Fishing skill.", + "durability": null, + "name": "Fishing tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7779" + }, + { + "examine": "A tome of learning that focuses on the Fishing skill.", + "durability": null, + "name": "Fishing tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7780" + }, + { + "examine": "A tome of learning that focuses on the Fishing skill.", + "durability": null, + "name": "Fishing tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7781" + }, + { + "examine": "A tome of learning that focuses on Agility.", + "durability": null, + "name": "Agility tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7782" + }, + { + "examine": "A tome of learning that focuses on Agility.", + "durability": null, + "name": "Agility tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7783" + }, + { + "examine": "A tome of learning that focuses on Agility.", + "durability": null, + "name": "Agility tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7784" + }, + { + "examine": "A tome of learning that focuses on the Thieving skill.", + "durability": null, + "name": "Thieving tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7785" + }, + { + "examine": "A tome of learning that focuses on the Thieving skill.", + "durability": null, + "name": "Thieving tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7786" + }, + { + "examine": "A tome of learning that focuses on the Thieving skill.", + "durability": null, + "name": "Thieving tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7787" + }, + { + "examine": "A tome of learning which focuses on the Slayer skill.", + "durability": null, + "name": "Slayer tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7788" + }, + { + "examine": "A tome of learning which focuses on the Slayer skill.", + "durability": null, + "name": "Slayer tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7789" + }, + { + "examine": "A tome of learning which focuses on the Slayer skill.", + "durability": null, + "name": "Slayer tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7790" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Mining skill.", + "durability": null, + "name": "Mining tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7791" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Mining skill.", + "durability": null, + "name": "Mining tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7792" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Mining skill.", + "durability": null, + "name": "Mining tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7793" + }, + { + "examine": "A tome of learning that focuses on Firemaking.", + "durability": null, + "name": "Firemaking tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7794" + }, + { + "examine": "A tome of learning that focuses on Firemaking.", + "durability": null, + "name": "Firemaking tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7795" + }, + { + "examine": "A tome of learning that focuses on Firemaking.", + "durability": null, + "name": "Firemaking tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7796" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Woodcutting skill.", + "durability": null, + "name": "Woodcutting tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7797" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Woodcutting skill.", + "durability": null, + "name": "Woodcutting tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7798" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Woodcutting skill.", + "durability": null, + "name": "Woodcutting tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7799" + }, + { + "examine": "A shell from a giant snail.", + "durability": null, + "name": "Snail shell", + "weight": "7", + "archery_ticket_price": "0", + "id": "7800" + }, + { + "ge_buy_limit": "10000", + "examine": "Scaly but not slimy!", + "grand_exchange_price": "1618", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7801" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1618", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7802" + }, + { + "shop_price": "100", + "examine": "A non-magical copy of the make-over mage's amulet.", + "durability": null, + "name": "Yin yang amulet", + "archery_ticket_price": "0", + "id": "7803", + "equipment_slot": "2" + }, + { + "turn90cw_anim": "1207", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Picture", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7804", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7805" + }, + { + "attack_anims": "381,390,390,390", + "examine": "A heavy duty sword.", + "durability": null, + "name": "Anger sword", + "archery_ticket_price": "0", + "attack_speed": "3", + "id": "7806", + "weapon_interface": "5", + "bonuses": "20,20,20,0,0,0,2,1,0,0,0,5,0,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "attack_anims": "395,395,401,395", + "examine": "A heavy duty axe.", + "durability": null, + "attack_audios": "2498,2498,2497,2498", + "name": "Anger battleaxe", + "archery_ticket_price": "0", + "id": "7807", + "weapon_interface": "2", + "bonuses": "20,20,20,0,0,0,0,0,0,-1,0,13,0,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "attack_anims": "390,390,381,390", + "examine": "A heavy duty mace.", + "durability": null, + "name": "Anger mace", + "archery_ticket_price": "0", + "id": "7808", + "weapon_interface": "8", + "bonuses": "20,20,20,0,0,0,0,0,0,0,0,5,1,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "turn90cw_anim": "1207", + "examine": "A heavy duty spear.", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "stand_anim": "813", + "name": "Anger spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7809", + "stand_turn_anim": "1209", + "bonuses": "20,20,20,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "shop_price": "1", + "examine": "This wine clearly did not age well.", + "durability": null, + "name": "Jug of vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7810" + }, + { + "examine": "Well, this pot is certainly full of vinegar and no mistake.", + "durability": null, + "name": "Pot of vinegar", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "7811" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Goblin skull", + "archery_ticket_price": "0", + "id": "7812" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7813" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Goblin skull", + "archery_ticket_price": "0", + "id": "7814" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bear ribs", + "archery_ticket_price": "0", + "id": "7815" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7816" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bear ribs", + "archery_ticket_price": "0", + "id": "7817" + }, + { + "examine": "Unpolished: This needs a good polish.", + "durability": null, + "name": "Ram skull", + "archery_ticket_price": "0", + "id": "7818" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7819" + }, + { + "examine": "Unpolished: This needs a good polish.", + "durability": null, + "name": "Ram skull", + "archery_ticket_price": "0", + "id": "7820" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Unicorn bone", + "archery_ticket_price": "0", + "id": "7821" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7822" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Unicorn bone", + "archery_ticket_price": "0", + "id": "7823" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant rat bone", + "archery_ticket_price": "0", + "id": "7824" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7825" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant rat bone", + "archery_ticket_price": "0", + "id": "7826" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7827" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7828" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7829" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Wolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7830" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7831" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Wolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7832" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7833" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7834" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7835" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rat bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7836" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7837" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rat bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7838" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Baby dragon bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7839" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7840" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Baby dragon bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7841" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ogre ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7842" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7843" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ogre ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7844" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7845" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7846" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7847" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7848" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7849" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7850" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Mogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7851" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7852" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Mogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7853" + }, + { + "examine": "This needs a good polish./ This belongs in a museum!", + "durability": null, + "name": "Monkey paw", + "archery_ticket_price": "0", + "id": "7854" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7855" + }, + { + "examine": "This needs a good polish./ This belongs in a museum!", + "durability": null, + "name": "Monkey paw", + "archery_ticket_price": "0", + "id": "7856" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Dagannoth ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7857" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7858" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Dagannoth ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7859" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Snake spine", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7860" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7861" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Snake spine", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7862" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zombie bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7863" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7864" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zombie bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7865" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Werewolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7866" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7867" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Werewolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7868" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Moss giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7869" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7870" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Moss giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7871" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Fire giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7872" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7873" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Fire giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7874" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ice giant ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7875" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7876" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ice giant ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7877" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Terrorbird wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7878" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7879" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Terrorbird wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7880" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ghoul bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7881" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7882" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ghoul bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7883" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Troll bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7884" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7885" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Troll bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7886" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Seagull wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7887" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7888" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Seagull wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7889" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Undead cow ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7890" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7891" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Undead cow ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7892" + }, + { + "shop_price": "160", + "examine": "Unpolished: This needs a good polish. Polished: This bone belongs in a museum!", + "durability": null, + "name": "Experiment bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7893" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7894" + }, + { + "shop_price": "160", + "examine": "Unpolished: This needs a good polish. Polished: This bone belongs in a museum!", + "durability": null, + "name": "Experiment bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7895" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rabbit bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7896" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7897" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rabbit bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7898" + }, + { + "examine": "Dirty:This bone needs a good polish.", + "durability": null, + "name": "Basilisk bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7899" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7900" + }, + { + "examine": "Dirty:This bone needs a good polish.", + "durability": null, + "name": "Basilisk bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7901" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Desert lizard bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7902" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7903" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Desert lizard bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7904" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Cave goblin skull", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7905" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7906" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Cave goblin skull", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7907" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Big frog leg", + "weight": "1", + "archery_ticket_price": "0", + "id": "7908" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7909" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Big frog leg", + "weight": "1", + "archery_ticket_price": "0", + "id": "7910" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Vulture wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7911" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7912" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Vulture wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7913" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jackal bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7914" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7915" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jackal bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7916" + }, + { + "destroy_message": "The ram skull helm looks like it will fall apart if you drop it. You would have to go to the Odd Old Man for a replacement.", + "examine": "Makes me feel baaad to the bone.", + "durability": null, + "name": "Ram skull helm", + "weight": "3", + "archery_ticket_price": "0", + "id": "7917", + "bonuses": "0,0,0,0,-2,19,21,16,0,19,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "The bonesack looks like it will fall apart if you drop it. You would have to go to the Odd Old Man for a replacement.", + "examine": "The Bonesack is a little old item that protects like leather.", + "durability": null, + "name": "Bonesack", + "weight": "9", + "archery_ticket_price": "0", + "id": "7918", + "bonuses": "0,0,0,0,0,4,4,4,4,4,4,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "500", + "examine": "A very good vintage.", + "durability": null, + "name": "Bottle of wine", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7919" + }, + { + "durability": null, + "name": "Bottle of wine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7920" + }, + { + "examine": "This one has clearly been taken down and passed around.", + "durability": null, + "name": "Empty wine bottle", + "weight": "1", + "archery_ticket_price": "0", + "id": "7921" + }, + { + "examine": "The money off voucher has expired.", + "durability": null, + "name": "Al kharid flyer", + "archery_ticket_price": "0", + "id": "7922" + }, + { + "examine": "A ring given to you by the Easter Bunny.", + "durability": null, + "name": "Easter ring", + "archery_ticket_price": "0", + "id": "7927" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7928" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7929" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7930" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7931" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7932" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7933" + }, + { + "shop_price": "390", + "ge_buy_limit": "100", + "examine": "A field ration to help your wounds go away.", + "grand_exchange_price": "171", + "durability": null, + "name": "Field ration", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7934" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "171", + "durability": null, + "name": "Field ration", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7935" + }, + { + "shop_price": "1", + "ge_buy_limit": "25000", + "examine": "An uncharged Rune Stone of extra capability.", + "grand_exchange_price": "180", + "durability": null, + "name": "Pure essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7936" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "109", + "durability": null, + "name": "Pure essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7937" + }, + { + "ge_buy_limit": "5000", + "examine": "A word in your shell-like.", + "grand_exchange_price": "13600", + "durability": null, + "name": "Tortoise shell", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "7939" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13600", + "durability": null, + "name": "Tortoise shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7940" + }, + { + "examine": "A sturdy sheet of iron.", + "durability": null, + "name": "Iron sheet", + "weight": "1.75", + "archery_ticket_price": "0", + "id": "7941" + }, + { + "examine": "Perfect for storing. Not so good for eating.", + "durability": null, + "name": "Fresh monkfish", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "7942" + }, + { + "examine": "Perfect for storing. Not so good for eating.", + "durability": null, + "name": "Fresh monkfish", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "7943" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this./Freshly caught. Needs cooking. (Fresh Monkfish)", + "grand_exchange_price": "618", + "durability": null, + "name": "Raw monkfish", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7944" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "618", + "durability": null, + "name": "Raw monkfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7945" + }, + { + "ge_buy_limit": "10000", + "examine": "A tasty fish.", + "grand_exchange_price": "617", + "durability": null, + "name": "Monkfish", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7946" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "617", + "durability": null, + "name": "Monkfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7947" + }, + { + "durability": null, + "name": "Burnt monkfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7949" + }, + { + "examine": "A highly portable army of skeletal magic.", + "durability": null, + "name": "Bone seeds", + "archery_ticket_price": "0", + "id": "7950" + }, + { + "shop_price": "160", + "examine": "A book taken from the desk of Herman Caranos.", + "durability": null, + "name": "Herman's book", + "tradeable": "false", + "destroy": "true", + "weight": "0.09", + "archery_ticket_price": "0", + "id": "7951" + }, + { + "examine": "Useless without the head.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7952", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7953" + }, + { + "durability": null, + "name": "Burnt shrimp", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7955" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7956" + }, + { + "shop_price": "2", + "examine": "A mostly clean apron.", + "grand_exchange_price": "169", + "durability": null, + "name": "White apron", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "7957" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A prop for holding up a tunnel roof.", + "durability": null, + "name": "Mining prop", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7958" + }, + { + "destroy_message": "You can get your box back by talking to the guard by the dungeon entrance in Etceteria.", + "examine": "A box full of stolen Etceterian items.", + "durability": null, + "name": "Heavy box", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7959" + }, + { + "examine": "It says 'To the dungeons' on the side.", + "durability": null, + "name": "Empty box", + "archery_ticket_price": "0", + "id": "7960" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7961" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7962" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7963" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7964" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7965" + }, + { + "examine": "A dwarf-made coal engine. It looks very sturdy.", + "durability": null, + "name": "Engine", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7967" + }, + { + "examine": "A beam with a pulley attached.", + "durability": null, + "name": "Pulley beam", + "archery_ticket_price": "0", + "id": "7969" + }, + { + "examine": "A long beam with a pulley attached.", + "durability": null, + "name": "Long pulley beam", + "archery_ticket_price": "0", + "id": "7970" + }, + { + "examine": "A very long beam with a pulley attached.", + "durability": null, + "name": "Longer pulley beam", + "archery_ticket_price": "0", + "id": "7971" + }, + { + "examine": "The manual for an AMCE Lift-In-A-Box.", + "durability": null, + "name": "Lift manual", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7972" + }, + { + "examine": "A wooden beam.", + "durability": null, + "name": "Beam", + "archery_ticket_price": "0", + "id": "7973" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "7975" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Cockatrice head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7976" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Basilisk head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7977" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kurask head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7978" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Abyssal head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7979" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kbd heads", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7980" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kq head", + "archery_ticket_price": "0", + "id": "7981" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "7982" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Cockatrice head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7983" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Basilisk head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7984" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kurask head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7985" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Abyssal head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7986" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kbd heads", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7987" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kq head", + "archery_ticket_price": "0", + "id": "7988" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big bass", + "weight": "6", + "archery_ticket_price": "0", + "id": "7989" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big bass", + "weight": "6", + "archery_ticket_price": "0", + "id": "7990" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big swordfish", + "archery_ticket_price": "0", + "id": "7991" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big swordfish", + "archery_ticket_price": "0", + "id": "7992" + }, + { + "examine": "Its a monster! I should get this stuffed!", + "durability": null, + "name": "Big shark", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "7993" + }, + { + "examine": "Its a monster! I should get this stuffed!", + "durability": null, + "name": "Big shark", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "7994" + }, + { + "examine": "A portrait of King Arthur.", + "durability": null, + "name": "Arthur portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7995" + }, + { + "shop_price": "1000", + "examine": "A portrait of Elena.", + "durability": null, + "name": "Elena portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7996" + }, + { + "examine": "A painting of the staute of King Alvis of Keldagrim", + "durability": null, + "name": "Keldagrim portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7997" + }, + { + "examine": "A portrait of Prince Brand and Princess Astrid of Miscellania.", + "durability": null, + "name": "Misc. portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7998" + }, + { + "shop_price": "2000", + "examine": "The exotic land of the Elves.", + "durability": null, + "name": "Isafdar painting", + "archery_ticket_price": "0", + "id": "8000" + }, + { + "shop_price": "2000", + "examine": "The tropical coast of karamja.", + "durability": null, + "name": "Karamja painting", + "archery_ticket_price": "0", + "id": "8001" + }, + { + "shop_price": "2000", + "examine": "Oxtable's famous painting of the Lumbridge water mill.", + "durability": null, + "name": "Lumbridge painting", + "weight": "1", + "archery_ticket_price": "0", + "id": "8002" + }, + { + "shop_price": "2000", + "examine": "A painting of the spooky forests of morytania.", + "durability": null, + "name": "Morytania painting", + "weight": "1", + "archery_ticket_price": "0", + "id": "8003" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1341", + "durability": null, + "name": "Varrock teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8007" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1371", + "durability": null, + "name": "Lumbridge teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8008" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1414", + "durability": null, + "name": "Falador teleport", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8009" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1369", + "durability": null, + "name": "Camelot teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8010" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1511", + "durability": null, + "name": "Ardougne teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8011" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1025", + "durability": null, + "name": "Watchtower t'port", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8012" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1426", + "durability": null, + "name": "Teleport to house", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8013" + }, + { + "ge_buy_limit": "200", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "360", + "durability": null, + "name": "Bones to bananas", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8014" + }, + { + "ge_buy_limit": "200", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "620", + "durability": null, + "name": "Bones to peaches", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8015" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "343", + "durability": null, + "name": "Enchant sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8016" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "409", + "durability": null, + "name": "Enchant emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8017" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "207", + "durability": null, + "name": "Enchant ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8018" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "326", + "durability": null, + "name": "Enchant diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8019" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "250", + "durability": null, + "name": "Enchant dragonstn.", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8020" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "31", + "durability": null, + "name": "Enchant onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8021" + }, + { + "grand_exchange_price": "1918", + "durability": null, + "name": "Wooden bed", + "archery_ticket_price": "0", + "id": "8031" + }, + { + "grand_exchange_price": "1631", + "durability": null, + "name": "Oak bed", + "archery_ticket_price": "0", + "id": "8032" + }, + { + "grand_exchange_price": "1388", + "durability": null, + "name": "Large oak bed", + "archery_ticket_price": "0", + "id": "8033" + }, + { + "grand_exchange_price": "1376", + "durability": null, + "name": "Teak bed", + "archery_ticket_price": "0", + "id": "8034" + }, + { + "grand_exchange_price": "1996", + "durability": null, + "name": "Large teak bed", + "archery_ticket_price": "0", + "id": "8035" + }, + { + "grand_exchange_price": "1314", + "durability": null, + "name": "4-poster", + "archery_ticket_price": "0", + "id": "8036" + }, + { + "grand_exchange_price": "274779", + "durability": null, + "name": "Gilded 4-poster", + "archery_ticket_price": "0", + "id": "8037" + }, + { + "grand_exchange_price": "18", + "durability": null, + "name": "Shoe box", + "archery_ticket_price": "0", + "id": "8038" + }, + { + "grand_exchange_price": "42", + "durability": null, + "name": "Oak drawers", + "archery_ticket_price": "0", + "id": "8039" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak wardrobe", + "archery_ticket_price": "0", + "id": "8040" + }, + { + "grand_exchange_price": "126", + "durability": null, + "name": "Teak drawers", + "archery_ticket_price": "0", + "id": "8041" + }, + { + "grand_exchange_price": "12", + "durability": null, + "name": "Teak wardrobe", + "archery_ticket_price": "0", + "id": "8042" + }, + { + "grand_exchange_price": "102", + "durability": null, + "name": "Mahogany 'drobe", + "archery_ticket_price": "0", + "id": "8043" + }, + { + "grand_exchange_price": "139452", + "durability": null, + "name": "Gilded wardrobe", + "archery_ticket_price": "0", + "id": "8044" + }, + { + "grand_exchange_price": "510", + "durability": null, + "name": "Shaving stand", + "archery_ticket_price": "0", + "id": "8045" + }, + { + "grand_exchange_price": "449", + "durability": null, + "name": "Oak shaving stand", + "archery_ticket_price": "0", + "id": "8046" + }, + { + "grand_exchange_price": "147", + "durability": null, + "name": "Oak dresser", + "archery_ticket_price": "0", + "id": "8047" + }, + { + "grand_exchange_price": "478", + "durability": null, + "name": "Teak dresser", + "archery_ticket_price": "0", + "id": "8048" + }, + { + "grand_exchange_price": "456", + "durability": null, + "name": "Fancy teak dresser", + "archery_ticket_price": "0", + "id": "8049" + }, + { + "grand_exchange_price": "404", + "durability": null, + "name": "Mahogany dresser", + "archery_ticket_price": "0", + "id": "8050" + }, + { + "grand_exchange_price": "140594", + "durability": null, + "name": "Gilded dresser", + "archery_ticket_price": "0", + "id": "8051" + }, + { + "grand_exchange_price": "367", + "durability": null, + "name": "Oak clock", + "archery_ticket_price": "0", + "id": "8052" + }, + { + "grand_exchange_price": "552", + "durability": null, + "name": "Teak clock", + "archery_ticket_price": "0", + "id": "8053" + }, + { + "grand_exchange_price": "154310", + "durability": null, + "name": "Gilded clock", + "archery_ticket_price": "0", + "id": "8054" + }, + { + "examine": "When unanimated: A dusty old suit of armour. When animated: Aaargh, it's alive!", + "durability": null, + "name": "Suit of armour", + "archery_ticket_price": "0", + "id": "8085" + }, + { + "grand_exchange_price": "13", + "durability": null, + "name": "Wooden bench", + "archery_ticket_price": "0", + "id": "8108" + }, + { + "grand_exchange_price": "131", + "durability": null, + "name": "Oak bench", + "archery_ticket_price": "0", + "id": "8109" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak bench", + "archery_ticket_price": "0", + "id": "8110" + }, + { + "grand_exchange_price": "17", + "durability": null, + "name": "Teak dining bench", + "archery_ticket_price": "0", + "id": "8111" + }, + { + "grand_exchange_price": "2", + "durability": null, + "name": "Carved teak bench", + "archery_ticket_price": "0", + "id": "8112" + }, + { + "grand_exchange_price": "145", + "durability": null, + "name": "Mahogany bench", + "archery_ticket_price": "0", + "id": "8113" + }, + { + "grand_exchange_price": "531526", + "durability": null, + "name": "Gilded bench", + "archery_ticket_price": "0", + "id": "8114" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Wood dining table", + "archery_ticket_price": "0", + "id": "8115" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak dining table", + "archery_ticket_price": "0", + "id": "8116" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak table", + "archery_ticket_price": "0", + "id": "8117" + }, + { + "grand_exchange_price": "2", + "durability": null, + "name": "Teak table", + "archery_ticket_price": "0", + "id": "8118" + }, + { + "grand_exchange_price": "249", + "durability": null, + "name": "Carved teak table", + "archery_ticket_price": "0", + "id": "8119" + }, + { + "grand_exchange_price": "497", + "durability": null, + "name": "Mahogany table", + "archery_ticket_price": "0", + "id": "8120" + }, + { + "grand_exchange_price": "394177", + "durability": null, + "name": "Opulent table", + "archery_ticket_price": "0", + "id": "8121" + }, + { + "shop_price": "24", + "examine": "A candle.", + "grand_exchange_price": "104", + "durability": null, + "name": "Candles", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8128" + }, + { + "durability": null, + "name": "Skeleton guard", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8131" + }, + { + "examine": "He doesn't seem pleased to see me./Beware of the dog! (Construction)", + "durability": null, + "name": "Guard dog", + "archery_ticket_price": "0", + "id": "8132" + }, + { + "examine": "He doesn't look very welcoming.", + "durability": null, + "name": "Hobgoblin guard", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8133" + }, + { + "examine": "Young but still dangerous.", + "durability": null, + "name": "Baby red dragon", + "archery_ticket_price": "0", + "id": "8134" + }, + { + "examine": "No spider could grow that big! It's unrealistic!", + "durability": null, + "name": "Huge spider", + "archery_ticket_price": "0", + "id": "8135" + }, + { + "examine": "(Level 122)", + "durability": null, + "name": "Hellhound", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8137" + }, + { + "examine": "I don't think insect repellent will work...", + "durability": null, + "name": "Kalphite soldier", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8139" + }, + { + "examine": "The Tok-Xil fires deadly spines out of its arm, projected by its own heat.", + "durability": null, + "name": "Tok-xil", + "archery_ticket_price": "0", + "id": "8140" + }, + { + "examine": "Its scales seem to be made of steel.", + "durability": null, + "name": "Steel dragon", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8142" + }, + { + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Thorny hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8203" + }, + { + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Nice hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8204" + }, + { + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Small box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8205" + }, + { + "shop_price": "20000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Topiary hedge", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8206" + }, + { + "shop_price": "25000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Fancy hedge", + "weight": "10", + "archery_ticket_price": "0", + "id": "8207" + }, + { + "shop_price": "50000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Tall fancy hedge", + "archery_ticket_price": "0", + "id": "8208" + }, + { + "examine": "Some rosemary.", + "grand_exchange_price": "20", + "durability": null, + "name": "Rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8210" + }, + { + "examine": "A bunch of marigolds.", + "grand_exchange_price": "3862", + "durability": null, + "name": "Marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8214" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Beer barrel", + "archery_ticket_price": "0", + "id": "8239" + }, + { + "grand_exchange_price": "16860", + "durability": null, + "name": "Cider barrel", + "archery_ticket_price": "0", + "id": "8240" + }, + { + "shop_price": "3", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "131", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8241" + }, + { + "shop_price": "2", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "569", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8242" + }, + { + "shop_price": "2", + "examine": "A glass of bitter.", + "grand_exchange_price": "523", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8243" + }, + { + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "2371", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8244" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Wood kitchen table", + "archery_ticket_price": "0", + "id": "8246" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak kitchen table", + "archery_ticket_price": "0", + "id": "8247" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Teak kitchen table", + "archery_ticket_price": "0", + "id": "8248" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8260" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Cockatrice head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8261" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Basilisk head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8262" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kurask head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8263" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Abyssal head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8264" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kbd heads", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8265" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kq head", + "archery_ticket_price": "0", + "id": "8266" + }, + { + "durability": null, + "name": "Runite armour", + "archery_ticket_price": "0", + "id": "8272", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "examine": "The magical sword 'Silverlight'. / The magical sword 'Silverlight', stained black with mushroom ink. (during Shadow of the Storm)", + "durability": null, + "name": "Silverlight", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "8279", + "bonuses": "9,14,-2,0,0,0,3,2,1,0,0,12,0,0,0" + }, + { + "examine": "This used to belong to King Arthur.", + "durability": null, + "name": "Excalibur", + "weight": "2.2", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "8280", + "bonuses": "20,29,-2,0,0,0,3,2,1,0,0,25,0,0,0" + }, + { + "examine": "The magical sword Silverlight, enhanced with the blood of Agrith-Naar.", + "durability": null, + "name": "Darklight", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "8281", + "bonuses": "10,16,-2,0,0,0,3,2,2,0,0,13,0,0,0" + }, + { + "examine": "This provides partial protection from dragon-breath attacks.", + "grand_exchange_price": "305", + "durability": null, + "name": "Anti-dragon shield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8282", + "bonuses": "0,0,0,0,0,7,9,8,2,8,0,0,0,0,0" + }, + { + "examine": "A very powerful dragonstone amulet.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8283", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,0,3,0" + }, + { + "shop_price": "450", + "examine": "The cape worn by members of the Legends Guild.", + "durability": null, + "name": "Cape of legends", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "8284", + "bonuses": "0,0,0,0,0,7,7,7,7,7,7,0,0,0,0" + }, + { + "examine": "Legendary King of the Britons.", + "durability": null, + "name": "King arthur", + "archery_ticket_price": "0", + "id": "8285" + }, + { + "examine": "She looks concerned.", + "durability": null, + "name": "Elena", + "archery_ticket_price": "0", + "id": "8286" + }, + { + "examine": "It's full of pent-up aggression.", + "durability": null, + "name": "Rocnar", + "archery_ticket_price": "0", + "id": "8305" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Crude wooden chair", + "archery_ticket_price": "0", + "id": "8309" + }, + { + "grand_exchange_price": "50", + "durability": null, + "name": "Wooden chair", + "archery_ticket_price": "0", + "id": "8310" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Rocking chair", + "archery_ticket_price": "0", + "id": "8311" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak chair", + "archery_ticket_price": "0", + "id": "8312" + }, + { + "grand_exchange_price": "2", + "durability": null, + "name": "Oak armchair", + "archery_ticket_price": "0", + "id": "8313" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Teak armchair", + "archery_ticket_price": "0", + "id": "8314" + }, + { + "grand_exchange_price": "8", + "durability": null, + "name": "Mahogany armchair", + "archery_ticket_price": "0", + "id": "8315" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden bookcase", + "archery_ticket_price": "0", + "id": "8319" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak bookcase", + "archery_ticket_price": "0", + "id": "8320" + }, + { + "grand_exchange_price": "52", + "durability": null, + "name": "Mahogany b'kcase", + "archery_ticket_price": "0", + "id": "8321" + }, + { + "requirements": "{5,22}", + "shop_price": "1000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged dead tree", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8417" + }, + { + "durability": null, + "name": "Bagged dead tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8418" + }, + { + "requirements": "{10,22}", + "shop_price": "2000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged nice tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8419" + }, + { + "durability": null, + "name": "Bagged nice tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8420" + }, + { + "requirements": "{15,22}", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged oak tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8421" + }, + { + "durability": null, + "name": "Bagged oak tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8422" + }, + { + "requirements": "{22,30}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged willow tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8423" + }, + { + "durability": null, + "name": "Bagged willow tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8424" + }, + { + "requirements": "{22,45}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged maple tree", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8425" + }, + { + "durability": null, + "name": "Bagged maple tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8426" + }, + { + "requirements": "{22,60}", + "shop_price": "20000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged yew tree", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8427" + }, + { + "durability": null, + "name": "Bagged yew tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8428" + }, + { + "requirements": "{22,75}", + "shop_price": "50000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged magic tree", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8429" + }, + { + "durability": null, + "name": "Bagged magic tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8430" + }, + { + "shop_price": "1000", + "ge_buy_limit": "5000", + "examine": "You can plant this in your garden.", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bagged plant 1", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8431" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bagged plant 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8432" + }, + { + "requirements": "{6,22}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged plant 2", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8433" + }, + { + "durability": null, + "name": "Bagged plant 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8434" + }, + { + "requirements": "{12,22}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged plant 3", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8435" + }, + { + "durability": null, + "name": "Bagged plant 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8436" + }, + { + "requirements": "{22,56}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Thorny hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8437" + }, + { + "durability": null, + "name": "Thorny hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8438" + }, + { + "requirements": "{22,60}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Nice hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8439" + }, + { + "durability": null, + "name": "Nice hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8440" + }, + { + "requirements": "{22,64}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Small box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8441" + }, + { + "durability": null, + "name": "Small box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8442" + }, + { + "requirements": "{22,68}", + "shop_price": "20000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Topiary hedge", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8443" + }, + { + "durability": null, + "name": "Topiary hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8444" + }, + { + "requirements": "{22,72}", + "shop_price": "25000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Fancy hedge", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8445" + }, + { + "durability": null, + "name": "Fancy hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8446" + }, + { + "requirements": "{22,76}", + "shop_price": "50000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Tall fancy hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8447" + }, + { + "durability": null, + "name": "Tall fancy hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8448" + }, + { + "requirements": "{22,80}", + "shop_price": "100000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Tall box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8449" + }, + { + "durability": null, + "name": "Tall box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8450" + }, + { + "requirements": "{22,66}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8451" + }, + { + "durability": null, + "name": "Bagged rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8452" + }, + { + "requirements": "{22,71}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged daffodils", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8453" + }, + { + "durability": null, + "name": "Bagged daffodils", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8454" + }, + { + "requirements": "{22,76}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged bluebells", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8455" + }, + { + "durability": null, + "name": "Bagged bluebells", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8456" + }, + { + "requirements": "{22,66}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged sunflower", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8457" + }, + { + "durability": null, + "name": "Bagged sunflower", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8458" + }, + { + "requirements": "{22,71}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8459" + }, + { + "durability": null, + "name": "Bagged marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8460" + }, + { + "requirements": "{22,76}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged roses", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8461" + }, + { + "durability": null, + "name": "Bagged roses", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8462" + }, + { + "shop_price": "160", + "examine": "How to build a house.", + "durability": null, + "name": "Construction guide", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8463" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8464", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8466", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8468", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8470", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8472", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8474", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8476", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8478", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8480", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8482", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8484", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8486", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8488", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8490", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8492", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8494", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble crude chair.", + "durability": null, + "name": "Crude wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8496" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Crude wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8497" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "53", + "examine": "A ready-to-assemble wooden chair.", + "durability": null, + "name": "Wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8498" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "53", + "durability": null, + "name": "Wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8499" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble rocking chair.", + "durability": null, + "name": "Rocking chair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8500" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Rocking chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8501" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "examine": "A ready-to-assemble oak chair.", + "durability": null, + "name": "Oak chair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8502" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Oak chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8503" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak armchair.", + "durability": null, + "name": "Oak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8504" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8505" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble teak armchair.", + "durability": null, + "name": "Teak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8506" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Teak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8507" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "examine": "A ready-to-assemble mahogany armchair.", + "durability": null, + "name": "Mahogany armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8508" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Mahogany armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8509" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble wooden bookcase.", + "durability": null, + "name": "Wooden bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8510" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8511" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak bookcase.", + "durability": null, + "name": "Oak bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8512" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8513" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "46", + "examine": "A ready-to-assemble mahogany bookcase.", + "durability": null, + "name": "Mahogany b'kcase", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8514" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "46", + "durability": null, + "name": "Mahogany b'kcase", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8515" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble beer barrel.", + "durability": null, + "name": "Beer barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8516" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Beer barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8517" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16900", + "examine": "A ready-to-assemble cider barrel.", + "durability": null, + "name": "Cider barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8518" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16900", + "durability": null, + "name": "Cider barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8519" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Asgarnian Ale.", + "grand_exchange_price": "4586", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8520" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4586", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8521" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Greenman's Ale.", + "grand_exchange_price": "8875", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8522" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8875", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8523" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Dragon Bitter.", + "grand_exchange_price": "10300", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8524" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10300", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8525" + }, + { + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Chef's Delight.", + "grand_exchange_price": "48800", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8526" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48800", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8527" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble wooden kitchen table.", + "durability": null, + "name": "Wood kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8528" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Wood kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8529" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak kitchen table.", + "durability": null, + "name": "Oak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8530" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8531" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble teak kitchen table.", + "durability": null, + "name": "Teak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8532" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Teak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8533" + }, + { + "durability": null, + "name": "Oak lectern", + "archery_ticket_price": "0", + "id": "8535" + }, + { + "durability": null, + "name": "Eagle lectern", + "archery_ticket_price": "0", + "id": "8537" + }, + { + "durability": null, + "name": "Demon lectern", + "archery_ticket_price": "0", + "id": "8539" + }, + { + "durability": null, + "name": "Teak eagle lectern", + "archery_ticket_price": "0", + "id": "8541" + }, + { + "durability": null, + "name": "Teak demon lectern", + "archery_ticket_price": "0", + "id": "8543" + }, + { + "durability": null, + "name": "Mahogany eagle", + "archery_ticket_price": "0", + "id": "8545" + }, + { + "durability": null, + "name": "Mahogany demon", + "archery_ticket_price": "0", + "id": "8547" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble wooden dining table.", + "durability": null, + "name": "Wood dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8548" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Wood dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8549" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak dining table.", + "durability": null, + "name": "Oak dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8550" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8551" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble carved oak dining table.", + "durability": null, + "name": "Carved oak table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8552" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8553" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "examine": "A ready-to-assemble teak dining table.", + "durability": null, + "name": "Teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8554" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8555" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "245", + "examine": "A ready-to-assemble carved teak dining table.", + "durability": null, + "name": "Carved teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8556" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "245", + "durability": null, + "name": "Carved teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8557" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "575", + "examine": "A ready-to-assemble mahogany dining table.", + "durability": null, + "name": "Mahogany table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8558" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "575", + "durability": null, + "name": "Mahogany table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8559" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "379100", + "examine": "A ready-to-assemble opulent dining table.", + "durability": null, + "name": "Opulent table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8560" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "379100", + "durability": null, + "name": "Opulent table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8561" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "examine": "A ready-to-assemble wooden dining bench.", + "durability": null, + "name": "Wooden bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8562" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "durability": null, + "name": "Wooden bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8563" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137", + "examine": "A ready-to-assemble oak dining bench.", + "durability": null, + "name": "Oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8564" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137", + "durability": null, + "name": "Oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8565" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble carved oak dining bench.", + "durability": null, + "name": "Carved oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8566" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8567" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "examine": "A ready-to-assemble teak dining bench.", + "durability": null, + "name": "Teak dining bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8568" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Teak dining bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8569" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "examine": "A ready-to-assemble carved teak dining bench.", + "durability": null, + "name": "Carved teak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8570" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Carved teak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8571" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "126", + "examine": "A ready-to-assemble mahogany dining bench.", + "durability": null, + "name": "Mahogany bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8572" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "126", + "durability": null, + "name": "Mahogany bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8573" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "517600", + "examine": "A ready-to-assemble gilded mahogany dining bench.", + "durability": null, + "name": "Gilded bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8574" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "517600", + "durability": null, + "name": "Gilded bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8575" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1974", + "examine": "A ready-to-assemble wooden bed.", + "durability": null, + "name": "Wooden bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8576" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1974", + "durability": null, + "name": "Wooden bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8577" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1775", + "examine": "A ready-to-assemble oak bed.", + "durability": null, + "name": "Oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8578" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1775", + "durability": null, + "name": "Oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8579" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1433", + "examine": "A ready-to-assemble large oak bed.", + "durability": null, + "name": "Large oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8580" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1433", + "durability": null, + "name": "Large oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8581" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1442", + "examine": "A ready-to-assemble teak bed.", + "durability": null, + "name": "Teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8582" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1442", + "durability": null, + "name": "Teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8583" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2030", + "examine": "A ready-to-assemble large teak bed.", + "durability": null, + "name": "Large teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8584" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2030", + "durability": null, + "name": "Large teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8585" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1401", + "examine": "A ready-to-assemble four-poster bed.", + "durability": null, + "name": "4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8586" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1401", + "durability": null, + "name": "4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8587" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "286700", + "examine": "A ready-to-assemble gilded four-poster bed.", + "durability": null, + "name": "Gilded 4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8588" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "286700", + "durability": null, + "name": "Gilded 4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8589" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "examine": "A ready-to-assemble oak clock.", + "durability": null, + "name": "Oak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8590" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "durability": null, + "name": "Oak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8591" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "595", + "examine": "A ready-to-assemble teak clock.", + "durability": null, + "name": "Teak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8592" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "595", + "durability": null, + "name": "Teak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8593" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156100", + "examine": "A ready-to-assemble gilded mahogany clock.", + "durability": null, + "name": "Gilded clock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8594" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156100", + "durability": null, + "name": "Gilded clock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8595" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "510", + "examine": "A ready-to-assemble shaving stand.", + "durability": null, + "name": "Shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8596" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "510", + "durability": null, + "name": "Shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8597" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "examine": "A ready-to-assemble oak shaving stand.", + "durability": null, + "name": "Oak shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8598" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "durability": null, + "name": "Oak shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8599" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "examine": "A ready-to-assemble oak dresser.", + "durability": null, + "name": "Oak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8600" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Oak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8601" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "478", + "examine": "A ready-to-assemble teak dresser.", + "durability": null, + "name": "Teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8602" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "478", + "durability": null, + "name": "Teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8603" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "examine": "A ready-to-assemble fancy teak dresser.", + "durability": null, + "name": "Fancy teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8604" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "durability": null, + "name": "Fancy teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8605" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "399", + "examine": "A ready-to-assemble mahogany dresser.", + "durability": null, + "name": "Mahogany dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8606" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "399", + "durability": null, + "name": "Mahogany dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8607" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "138800", + "examine": "A ready-to-assemble gilded dresser.", + "durability": null, + "name": "Gilded dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8608" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "138800", + "durability": null, + "name": "Gilded dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8609" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "examine": "A ready-to-assemble shoe box.", + "durability": null, + "name": "Shoe box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8610" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Shoe box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8611" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47", + "examine": "A ready-to-assemble oak chest of drawers.", + "durability": null, + "name": "Oak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8612" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47", + "durability": null, + "name": "Oak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8613" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak bedroom wardrobe.", + "durability": null, + "name": "Oak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8614" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8615" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "132", + "examine": "A ready-to-assemble teak chest of drawers.", + "durability": null, + "name": "Teak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8616" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "132", + "durability": null, + "name": "Teak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8617" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "examine": "A ready-to-assemble teak bedroom wardrobe.", + "durability": null, + "name": "Teak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8618" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Teak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8619" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98", + "examine": "A ready-to-assemble mahogany bedroom wardrobe.", + "durability": null, + "name": "Mahogany 'drobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8620" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98", + "durability": null, + "name": "Mahogany 'drobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8621" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137700", + "examine": "A ready-to-assemble gilded mahogany bedroom wardrobe.", + "durability": null, + "name": "Gilded wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8622" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137700", + "durability": null, + "name": "Gilded wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8623" + }, + { + "durability": null, + "name": "Crystal ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8625" + }, + { + "durability": null, + "name": "Elemental sphere", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8627" + }, + { + "durability": null, + "name": "Crystal of power", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8629" + }, + { + "durability": null, + "name": "Globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8631" + }, + { + "durability": null, + "name": "Ornamental globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8633" + }, + { + "durability": null, + "name": "Lunar globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8635" + }, + { + "durability": null, + "name": "Celestial globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8637" + }, + { + "durability": null, + "name": "Armillary sphere", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8639" + }, + { + "durability": null, + "name": "Small orrery", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8641" + }, + { + "durability": null, + "name": "Large orrery", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8643" + }, + { + "durability": null, + "name": "Wooden telescope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8645" + }, + { + "durability": null, + "name": "Teak telescope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8647" + }, + { + "durability": null, + "name": "Mahogany 'scope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8649" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8650", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8652", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8654", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8656", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8658", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8660", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8662", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8664", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8666", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8668", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8670", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8672", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8674", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8676", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8678", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8680", + "stand_turn_anim": "1426" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8682", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8684", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8686", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8688", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8690", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8692", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8694", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8696", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8698", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8700", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8702", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8704", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8706", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8708", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8710", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8712", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8714", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8716", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8718", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8720", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8722", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8724", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8726", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8728", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8730", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8732", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8734", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8736", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8738", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8740", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8742", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8744", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8746", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8748", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8750", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8752", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8754", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8756", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8758", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8760", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8762", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8764", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8766", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8768", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8770", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8772", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8774", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8776", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "examine": "A plank of sturdy oak.", + "grand_exchange_price": "660", + "durability": null, + "name": "Oak plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "8778" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "660", + "durability": null, + "name": "Oak plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8779" + }, + { + "shop_price": "500", + "ge_buy_limit": "10000", + "examine": "A plank of fine teak.", + "grand_exchange_price": "959", + "durability": null, + "name": "Teak plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "8780" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "959", + "durability": null, + "name": "Teak plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8781" + }, + { + "shop_price": "1500", + "ge_buy_limit": "10000", + "examine": "A plank of expensive mahogany.", + "grand_exchange_price": "2286", + "durability": null, + "name": "Mahogany plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "8782" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2286", + "durability": null, + "name": "Mahogany plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8783" + }, + { + "shop_price": "130000", + "ge_buy_limit": "100", + "examine": "A very delicate sheet of gold.", + "grand_exchange_price": "133800", + "durability": null, + "name": "Gold leaf", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8784" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "133800", + "durability": null, + "name": "Gold leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8785" + }, + { + "shop_price": "325000", + "ge_buy_limit": "100", + "examine": "A beautifully carved marble block.", + "grand_exchange_price": "324800", + "durability": null, + "name": "Marble block", + "tradeable": "true", + "weight": "13.6", + "archery_ticket_price": "0", + "id": "8786" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "324800", + "durability": null, + "name": "Marble block", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8787" + }, + { + "shop_price": "975000", + "ge_buy_limit": "100", + "examine": "A magic stone to make high-level furniture.", + "grand_exchange_price": "980300", + "durability": null, + "name": "Magic stone", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8788" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "980300", + "durability": null, + "name": "Magic stone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8789" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A bolt of ordinary cloth.", + "grand_exchange_price": "1090", + "durability": null, + "name": "Bolt of cloth", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8790" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1090", + "durability": null, + "name": "Bolt of cloth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8791" + }, + { + "ge_buy_limit": "5000", + "examine": "A clockwork mechanism.", + "grand_exchange_price": "1630", + "durability": null, + "name": "Clockwork", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8792" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1630", + "durability": null, + "name": "Clockwork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8793" + }, + { + "shop_price": "13", + "ge_buy_limit": "100", + "examine": "Good for cutting wood.", + "grand_exchange_price": "64", + "durability": null, + "name": "Saw", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8794", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "64", + "durability": null, + "name": "Saw", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8795" + }, + { + "durability": null, + "name": "Mahogany logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8836" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "A hefty beam of timber, perfect for building temples.", + "grand_exchange_price": "29", + "durability": null, + "name": "Timber beam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8837" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "29", + "durability": null, + "name": "Timber beam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8838" + }, + { + "remove_sleeves": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "Torso armour from the order of the Void Knights.", + "durability": null, + "name": "Void knight top", + "tradeable": "false", + "weight": "6.5", + "archery_ticket_price": "0", + "id": "8839", + "bonuses": "0,0,0,0,0,45,45,45,45,45,45,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "Leg armour of the order of the Void Knights.", + "durability": null, + "name": "Void knight robe", + "tradeable": "false", + "weight": "8", + "archery_ticket_price": "0", + "id": "8840", + "bonuses": "0,0,0,0,0,30,30,30,30,30,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "A mace used by the order of the Void Knights.", + "durability": null, + "weight": "1", + "attack_speed": "5", + "weapon_interface": "1", + "render_anim": "2553", + "equipment_slot": "3", + "attack_anims": "401,401,401,401", + "name": "Void knight mace", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "8841", + "bonuses": "22,0,41,8,0,2,2,2,2,2,0,38,6,0,0" + }, + { + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "150", + "examine": "Gloves as used by the order of the Void Knights.", + "durability": null, + "name": "Void knight gloves", + "tradeable": "false", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "8842", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "A defensive weapon.", + "durability": null, + "name": "Bronze defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8844", + "bonuses": "3,2,1,-3,-2,3,2,1,-3,-2,1,0,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "examine": "A defensive weapon.", + "durability": null, + "name": "Iron defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8845", + "bonuses": "5,4,3,-3,-2,5,4,3,-3,-2,2,0,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,5}-{1,5}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Steel defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8846", + "bonuses": "7,6,5,-3,-2,7,6,5,-3,-2,3,1,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,10}-{1,10}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Black defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8847", + "bonuses": "9,8,7,-3,-2,9,8,7,-3,-2,4,2,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,20}-{1,20}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Mithril defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8848", + "bonuses": "10,9,8,-3,-2,10,9,8,-3,-2,5,3,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,30}-{1,30}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Adamant defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8849", + "bonuses": "13,12,11,-3,-2,13,12,11,-3,-2,6,4,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,40}-{1,40}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Rune defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8850", + "bonuses": "20,19,18,-3,-2,20,19,18,-3,-2,8,5,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "examine": "Warrior Guild Token.", + "durability": null, + "name": "Warrior guild token", + "archery_ticket_price": "0", + "id": "8851" + }, + { + "examine": "Large, round, heavy shield.", + "durability": null, + "name": "Defensive shield", + "weight": "3.6", + "archery_ticket_price": "0", + "two_handed": "false", + "id": "8856", + "bonuses": "0,0,0,-6,-2,8,9,7,0,8,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Just landed 18lb shot.", + "durability": null, + "name": "18lb shot", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8858" + }, + { + "examine": "Just landed 22lb shot.", + "durability": null, + "name": "22lb shot", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8859" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "One barrel", + "destroy": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "8860", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Two barrels", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "8861", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Three barrels", + "destroy": "true", + "weight": "13.5", + "archery_ticket_price": "0", + "id": "8862", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Four barrels", + "destroy": "true", + "weight": "18.1", + "archery_ticket_price": "0", + "id": "8863", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Five barrels", + "destroy": "true", + "weight": "22.6", + "archery_ticket_price": "0", + "id": "8864", + "equipment_slot": "0" + }, + { + "examine": "A heap of finely ground ashes.", + "durability": null, + "name": "Ground ashes", + "archery_ticket_price": "0", + "id": "8865" + }, + { + "examine": "A key made of solid iron.", + "durability": null, + "name": "Iron key", + "archery_ticket_price": "0", + "id": "8869" + }, + { + "examine": "See article", + "durability": null, + "name": "Zanik", + "archery_ticket_price": "0", + "id": "8870" + }, + { + "turn90cw_anim": "4194", + "examine": "It's got Zanik in it.", + "walk_anim": "4194", + "durability": null, + "destroy": "true", + "weight": "32", + "turn90ccw_anim": "4194", + "turn180_anim": "4194", + "render_anim": "822", + "equipment_slot": "3", + "stand_anim": "4193", + "name": "Crate with zanik", + "tradeable": "false", + "run_anim": "4194", + "archery_ticket_price": "0", + "id": "8871", + "stand_turn_anim": "4194" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "2855", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8872", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2855", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8873" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "3033", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8874", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3033", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8875" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "3523", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger (p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8876", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3523", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger (p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8877" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "8337", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger (p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8878", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8337", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger (p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8879" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "This fires crossbow bolts.", + "walk_anim": "4226", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "1159", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "8880", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,42,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,28}", + "shop_price": "2000", + "durability": null, + "weight": "2.2", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Dorgeshuun c'bow" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1159", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dorgeshuun c'bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8881" + }, + { + "requirements": "{4,28}", + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Good if you have a bone crossbow!", + "grand_exchange_price": "12", + "durability": null, + "name": "Bone bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8882", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "examine": "See article", + "durability": null, + "name": "Zanik", + "archery_ticket_price": "0", + "id": "8887" + }, + { + "bankable": "false", + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "archery_ticket_price": "0", + "id": "8890" + }, + { + "examine": "A horrible, emaciated ape like creature with beady red eyes.", + "durability": null, + "name": "Cave horror", + "archery_ticket_price": "0", + "id": "8900" + }, + { + "requirements": "{1,20}-{2,10}", + "ge_buy_limit": "10", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "989400", + "durability": null, + "name": "Black mask (10)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8901", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "989400", + "durability": null, + "name": "Black mask (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8902" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (9)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8903", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8904" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (8)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8905", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8906" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (7)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8907", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8908" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (6)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8909", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8910" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (5)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8911", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8912" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (4)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8913", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8914" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (3)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8915", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8916" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (2)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8917", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8918" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (1)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8919", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8920" + }, + { + "requirements": "{1,20}-{2,10}", + "ge_buy_limit": "10", + "examine": "An inert-seeming cave horror mask.", + "grand_exchange_price": "956100", + "durability": null, + "name": "Black mask", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8921", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "956100", + "durability": null, + "name": "Black mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8922" + }, + { + "requirements": "{18,35}", + "shop_price": "900", + "examine": "A stick on a string... pure style.", + "durability": null, + "name": "Witchwood icon", + "archery_ticket_price": "0", + "id": "8923", + "bonuses": "0,0,0,1,0,0,0,0,0,0,0,0,1,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "examine": "A white bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8924", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A red bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8925", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A blue bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8926", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A brown bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8927", + "equipment_slot": "0" + }, + { + "examine": "A pirate hat and a patch for the right eye.", + "durability": null, + "name": "Hat and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8928", + "equipment_slot": "0" + }, + { + "shop_price": "800", + "examine": "Tied together so they don't come apart.", + "durability": null, + "name": "Crabclaw and hook", + "weight": "1", + "archery_ticket_price": "0", + "id": "8929", + "bonuses": "0,0,0,0,0,3,5,3,0,0,0,1,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Crude wooden pipe section.", + "durability": null, + "name": "Pipe section", + "weight": "1", + "archery_ticket_price": "0", + "id": "8930" + }, + { + "durability": null, + "name": "Pipe section", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8931" + }, + { + "examine": "Repairs made with this will be patchy at best.", + "durability": null, + "name": "Lumber patch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8932" + }, + { + "durability": null, + "name": "Lumber patch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8933" + }, + { + "examine": "Slimy logs from the scrapey tree.", + "durability": null, + "name": "Scrapey tree logs", + "archery_ticket_price": "0", + "id": "8934" + }, + { + "durability": null, + "name": "Scrapey tree logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8935" + }, + { + "examine": "Very blue.", + "durability": null, + "name": "Blue flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8936" + }, + { + "durability": null, + "name": "Blue flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8937" + }, + { + "examine": "Very red.", + "durability": null, + "name": "Red flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8938" + }, + { + "durability": null, + "name": "Red flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8939" + }, + { + "examine": "Bluuuuuuuue Monkeeeeeeey!", + "durability": null, + "name": "Blue monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8943" + }, + { + "examine": "Bluuuuuuuue Monkeeeeeeey!", + "durability": null, + "name": "Blue monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8944" + }, + { + "examine": "Bluuuuuuuue Monkeeeeeeey!", + "durability": null, + "name": "Blue monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8945" + }, + { + "examine": "A well red monkey.", + "durability": null, + "name": "Red monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8946" + }, + { + "examine": "A well red monkey.", + "durability": null, + "name": "Red monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8947" + }, + { + "examine": "A well red monkey.", + "durability": null, + "name": "Red monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8948" + }, + { + "remove_head": "true", + "examine": "Essential pirate wear.", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8949", + "equipment_slot": "0" + }, + { + "examine": "Shiver me timbers!", + "grand_exchange_price": "83200", + "durability": null, + "name": "Pirate hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8950", + "equipment_slot": "0" + }, + { + "examine": "Piratical currency.", + "durability": null, + "name": "Pieces of eight", + "archery_ticket_price": "0", + "id": "8951" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Blue naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8952", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Green naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8953", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Red naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8954", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Brown naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8955", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Black naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8956", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Purple naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8957", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Grey naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8958", + "equipment_slot": "4" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Blue tricorn hat", + "archery_ticket_price": "0", + "id": "8959", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Green tricorn hat", + "archery_ticket_price": "0", + "id": "8960", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Red tricorn hat", + "archery_ticket_price": "0", + "id": "8961", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Brown tricorn hat", + "archery_ticket_price": "0", + "id": "8962", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Black tricorn hat", + "archery_ticket_price": "0", + "id": "8963", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Purple tricorn hat", + "archery_ticket_price": "0", + "id": "8964", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Grey tricorn hat", + "archery_ticket_price": "0", + "id": "8965", + "equipment_slot": "0" + }, + { + "shop_price": "200", + "turn90cw_anim": "1424", + "examine": "The flag of The Cutthroat.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Cutthroat flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8966", + "stand_turn_anim": "1426" + }, + { + "shop_price": "200", + "turn90cw_anim": "1424", + "examine": "The flag of The Guilded Smile.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "attack_speed": "2", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Guilded smile flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8967", + "stand_turn_anim": "1426" + }, + { + "shop_price": "300", + "turn90cw_anim": "1424", + "examine": "The flag of The Bronze Fist.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Bronze fist flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8968", + "stand_turn_anim": "1426" + }, + { + "shop_price": "400", + "turn90cw_anim": "1424", + "examine": "The flag of The Lucky Shot.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Lucky shot flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8969", + "stand_turn_anim": "1426" + }, + { + "shop_price": "500", + "turn90cw_anim": "1424", + "examine": "The flag of The Treasure Trove.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Treasure flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8970", + "stand_turn_anim": "1426" + }, + { + "shop_price": "600", + "turn90cw_anim": "1424", + "examine": "The flag of The Phasmatys Pride.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Phasmatys flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8971", + "stand_turn_anim": "1426" + }, + { + "examine": "A Bowl of red water.", + "durability": null, + "name": "Bowl of red water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8972" + }, + { + "durability": null, + "name": "Bowl of red water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8973" + }, + { + "examine": "A Bowl of blue water.", + "durability": null, + "name": "Bowl of blue water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8974" + }, + { + "durability": null, + "name": "Bowl of blue water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8975" + }, + { + "examine": "Monkeys seem to like throwing these.", + "durability": null, + "name": "Bitternut", + "archery_ticket_price": "0", + "id": "8976" + }, + { + "examine": "Greasy bark from the scrapey tree.", + "durability": null, + "name": "Scrapey bark", + "weight": "1.1", + "archery_ticket_price": "0", + "id": "8977" + }, + { + "durability": null, + "name": "Scrapey bark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8978" + }, + { + "examine": "Caution; not for use over troubled water.", + "durability": null, + "name": "Bridge section", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8979" + }, + { + "durability": null, + "name": "Bridge section", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8980" + }, + { + "examine": "Better than sea slugs.", + "durability": null, + "name": "Sweetgrubs", + "archery_ticket_price": "0", + "id": "8981" + }, + { + "durability": null, + "name": "Sweetgrubs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8982" + }, + { + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8986" + }, + { + "durability": null, + "name": "Torch", + "archery_ticket_price": "0", + "id": "8987", + "equipment_slot": "3" + }, + { + "shop_price": "5", + "examine": "Apparently good for brewing.", + "durability": null, + "name": "The stuff", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "8988" + }, + { + "examine": "A how-to of brewing and arson.", + "durability": null, + "name": "Brewin' guide", + "archery_ticket_price": "0", + "id": "8989" + }, + { + "examine": "A how-to of brewing and arson.", + "durability": null, + "name": "Brewin' guide", + "archery_ticket_price": "0", + "id": "8990" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Blue navy slacks", + "archery_ticket_price": "0", + "id": "8991", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Green navy slacks", + "archery_ticket_price": "0", + "id": "8992", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Red navy slacks", + "archery_ticket_price": "0", + "id": "8993", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Brown navy slacks", + "archery_ticket_price": "0", + "id": "8994", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Black navy slacks", + "archery_ticket_price": "0", + "id": "8995", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Purple navy slacks", + "archery_ticket_price": "0", + "id": "8996", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Grey navy slacks", + "archery_ticket_price": "0", + "id": "8997", + "equipment_slot": "7" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8998" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8999" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9000" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9001" + }, + { + "durability": null, + "name": "Hat and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9002" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "WARNING: Contains information which could make your account secure!", + "grand_exchange_price": "100", + "durability": null, + "name": "Security book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9003" + }, + { + "ge_buy_limit": "100", + "examine": "Information regarding the Stronghold of Security.", + "grand_exchange_price": "16", + "durability": null, + "name": "Stronghold notes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9004" + }, + { + "destroy_message": "You can get another pair of Fancy Boots from the Stronghold of Security", + "examine": "Very nice boots from the Stronghold of Security.", + "durability": null, + "name": "Fancy boots", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9005", + "bonuses": "0,0,0,-3,-1,1,2,3,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You can get another pair of Fighting Boots from the Stronghold of Security.", + "examine": "Very nice boots from the Stronghold of Security.", + "durability": null, + "name": "Fighting boots", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9006", + "bonuses": "0,0,0,-3,-1,1,2,3,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Ooooh spooky!", + "durability": null, + "name": "Right skull half", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "9007" + }, + { + "examine": "Ooooh spooky!", + "durability": null, + "name": "Left skull half", + "tradeable": "false", + "destroy": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "9008" + }, + { + "examine": "Seems to be for use with a staff or sceptre of some sort.", + "durability": null, + "name": "Strange skull", + "tradeable": "false", + "weight": "1.2", + "archery_ticket_price": "0", + "id": "9009" + }, + { + "examine": "Top half of a broken sceptre.", + "durability": null, + "name": "Top of sceptre", + "tradeable": "false", + "weight": "2", + "archery_ticket_price": "0", + "id": "9010" + }, + { + "examine": "Bottom half of a broken sceptre.", + "durability": null, + "name": "Bottom of sceptre", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "9011" + }, + { + "examine": "Sceptre with runes on it, seems to be missing something.", + "durability": null, + "name": "Runed sceptre", + "tradeable": "false", + "weight": "3.5", + "archery_ticket_price": "0", + "id": "9012" + }, + { + "turn90cw_anim": "1207", + "examine": "A fragile magical Sceptre.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can obtain another Sceptre by collecting all four pieces from the Stronghold of Security.", + "stand_anim": "813", + "name": "Skull sceptre", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9013", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "durability": null, + "name": "Security book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9014" + }, + { + "durability": null, + "name": "Stronghold notes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9015" + }, + { + "examine": "Oversized nail clippings.", + "durability": null, + "name": "Gorak claws", + "archery_ticket_price": "0", + "id": "9016" + }, + { + "examine": "A flower with magical properties.", + "durability": null, + "name": "Star flower", + "archery_ticket_price": "0", + "id": "9017" + }, + { + "examine": "Ground-down gorak claws.", + "durability": null, + "name": "Gorak claw powder", + "weight": "1", + "archery_ticket_price": "0", + "id": "9018" + }, + { + "examine": "Contains the Fairy Queen's magical essence.", + "durability": null, + "name": "Queen's secateurs", + "archery_ticket_price": "0", + "id": "9020", + "equipment_slot": "3" + }, + { + "destroy_message": "Maybe I can find another in Fairy Nuff's grotto.", + "examine": "A scroll that says she's a healer, that's Fairy Nuff.", + "durability": null, + "name": "Nuff's certificate", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9025" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Pyramid will give me 50 coins for this.", + "grand_exchange_price": "187", + "durability": null, + "name": "Ivory comb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9026" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "durability": null, + "name": "Ivory comb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9027" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Pyramid will give me 1000 coins for this.", + "grand_exchange_price": "513", + "durability": null, + "name": "Golden scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9028" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "513", + "durability": null, + "name": "Golden scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9029" + }, + { + "ge_buy_limit": "100", + "examine": "Little ornament in the shape of a scarab.", + "grand_exchange_price": "168", + "durability": null, + "name": "Stone scarab", + "tradeable": "true", + "weight": "0.07", + "archery_ticket_price": "0", + "id": "9030" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "168", + "durability": null, + "name": "Stone scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9031" + }, + { + "ge_buy_limit": "100", + "examine": "A small pottery scarab.", + "grand_exchange_price": "74", + "durability": null, + "name": "Pottery scarab", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9032" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Pottery scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9033" + }, + { + "ge_buy_limit": "100", + "examine": "A small golden statuette.", + "grand_exchange_price": "740", + "durability": null, + "name": "Golden statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9034" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "740", + "durability": null, + "name": "Golden statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9035" + }, + { + "ge_buy_limit": "100", + "examine": "A small pottery statuette.", + "grand_exchange_price": "97", + "durability": null, + "name": "Pottery statuette", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9036" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "97", + "durability": null, + "name": "Pottery statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9037" + }, + { + "ge_buy_limit": "100", + "examine": "A small stone statuette.", + "grand_exchange_price": "193", + "durability": null, + "name": "Stone statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9038" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "193", + "durability": null, + "name": "Stone statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9039" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Arena will give me 750 coins for this.", + "grand_exchange_price": "379", + "durability": null, + "name": "Gold seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9040" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "379", + "durability": null, + "name": "Gold seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9041" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Pyramid will give me 150 coins for this.", + "grand_exchange_price": "147", + "durability": null, + "name": "Stone seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9042" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Stone seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9043" + }, + { + "requirements": "{0,30}-{6,30}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "This sceptre is fully charged.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1000000", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9044", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9045" + }, + { + "requirements": "{0,30}-{6,30}", + "turn90cw_anim": "1207", + "examine": "This sceptre has two charges left.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "27", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9046", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9047" + }, + { + "requirements": "{0,30}-{6,30}", + "turn90cw_anim": "1207", + "examine": "This sceptre has one charge left.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "27", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9048", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9049" + }, + { + "requirements": "{0,30}-{6,30}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "This sceptre has no charges left.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "985800", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9050", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "985800", + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9051" + }, + { + "ge_buy_limit": "1000", + "examine": "Delicious and nutritious. Well, nutritious anyway.", + "grand_exchange_price": "68", + "durability": null, + "name": "Locust meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9052" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "68", + "durability": null, + "name": "Locust meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9053" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Red goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9054", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Black goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9055", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Yellow goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9056", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Green goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9057", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Purple goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9058", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Pink goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9059", + "equipment_slot": "4" + }, + { + "examine": "A mystical lantern casting a green beam.", + "durability": null, + "name": "Emerald lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "9064" + }, + { + "examine": "A mystical lantern casting a green beam.", + "durability": null, + "name": "Emerald lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "9065", + "equipment_slot": "5" + }, + { + "examine": "A roughly circular disc of glass.", + "durability": null, + "name": "Emerald lens", + "archery_ticket_price": "0", + "id": "9066" + }, + { + "examine": "A log of my thoughts...", + "durability": null, + "name": "Dream log", + "weight": "1", + "archery_ticket_price": "0", + "id": "9067" + }, + { + "shop_price": "1000", + "examine": "Mystical headgear.", + "durability": null, + "name": "Moonclan helm", + "archery_ticket_price": "0", + "id": "9068", + "bonuses": "0,0,0,3,-5,3,3,3,3,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "1000", + "examine": "A mystical hat.", + "durability": null, + "name": "Moonclan hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "9069", + "bonuses": "0,0,0,3,-5,3,3,3,3,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "shop_price": "1000", + "examine": "Provides good protection.", + "durability": null, + "name": "Moonclan armour", + "weight": "4", + "archery_ticket_price": "0", + "id": "9070", + "bonuses": "0,0,0,5,-10,5,5,5,5,-10,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "1000", + "examine": "This should protect my legs.", + "durability": null, + "name": "Moonclan skirt", + "weight": "3", + "archery_ticket_price": "0", + "id": "9071", + "bonuses": "0,0,0,5,-7,5,5,5,5,-7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "900", + "examine": "These should keep my hands safe.", + "durability": null, + "name": "Moonclan gloves", + "archery_ticket_price": "0", + "id": "9072", + "bonuses": "0,0,0,2,-5,2,2,2,2,-5,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "900", + "examine": "Groovy foot protection.", + "durability": null, + "name": "Moonclan boots", + "archery_ticket_price": "0", + "id": "9073", + "bonuses": "0,0,0,2,-5,2,2,2,2,-5,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "200", + "examine": "A mystical cape.", + "durability": null, + "name": "Moonclan cape", + "archery_ticket_price": "0", + "id": "9074", + "bonuses": "0,0,0,2,-2,0,1,1,2,-2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "220", + "ge_buy_limit": "25000", + "examine": "Used for Lunar Spells", + "grand_exchange_price": "231", + "durability": null, + "name": "Astral rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9075" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This needs refining", + "durability": null, + "name": "Lunar ore", + "weight": "7", + "archery_ticket_price": "0", + "id": "9076" + }, + { + "destroy_message": "You'll have to mine another lunar ore and smelt it.", + "examine": "It's a bar of magic metal.", + "durability": null, + "name": "Lunar bar", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9077" + }, + { + "examine": "A book of Moonclan history.", + "durability": null, + "name": "Moonclan manual", + "weight": "1", + "archery_ticket_price": "0", + "id": "9078" + }, + { + "examine": "The tooth, the whole tooth, and nothing but the tooth.", + "durability": null, + "name": "Suqah tooth", + "archery_ticket_price": "0", + "id": "9079" + }, + { + "examine": "An untanned piece of suqah hide.", + "durability": null, + "name": "Suqah hide", + "archery_ticket_price": "0", + "id": "9080" + }, + { + "examine": "A piece of Suqah hide that has been expertly tanned into leather.", + "durability": null, + "name": "Suqah leather", + "weight": "3", + "archery_ticket_price": "0", + "id": "9081" + }, + { + "examine": "A ground Suqah tooth.", + "durability": null, + "name": "Ground tooth", + "archery_ticket_price": "0", + "id": "9082" + }, + { + "destroy_message": "Brundt the Chieftain will probably have another lying around somewhere anyway...", + "examine": "A seal of passage issued by Brundt the Chieftain of the Fremennik.", + "durability": null, + "name": "Seal of passage", + "tradeable": "false", + "destroy": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "9083", + "equipment_slot": "2" + }, + { + "requirements": "{6,65}", + "shop_price": "30000", + "turn90cw_anim": "1207", + "examine": "A Moonclan staff.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9084", + "stand_turn_anim": "1209", + "bonuses": "3,2,16,13,0,2,3,2,13,1,0,15,3,0,0" + }, + { + "destroy_message": "You'll have to get another from the Oneiromancer.", + "examine": "A vessel for holding liquid.", + "durability": null, + "name": "Empty vial", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9085" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "10", + "examine": "A glass vial containing water.", + "grand_exchange_price": "21", + "durability": null, + "name": "Vial of water", + "tradeable": "true", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "9086" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel for dreaming while awake!", + "durability": null, + "name": "Waking sleep vial", + "archery_ticket_price": "0", + "id": "9087" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel with water and Guam inside.", + "durability": null, + "name": "Guam vial", + "archery_ticket_price": "0", + "id": "9088" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel with water and Marrentill inside.", + "durability": null, + "name": "Marr vial", + "archery_ticket_price": "0", + "id": "9089" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel with water, guam and marrentill inside.", + "durability": null, + "name": "Guam-marr vial", + "archery_ticket_price": "0", + "id": "9090" + }, + { + "requirements": "{6,65}", + "turn90cw_anim": "1207", + "examine": "A staff enchanted by air.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff - pt1", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9091", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "requirements": "{6,65}", + "turn90cw_anim": "1207", + "examine": "A staff enchanted by air and fire.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff - pt2", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9092", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "requirements": "{6,65}", + "turn90cw_anim": "1207", + "examine": "A staff enchanted by air, fire and water.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff - pt3", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9093", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "examine": "Small bits of wood from the first magic tree!", + "durability": null, + "name": "Kindling", + "archery_ticket_price": "0", + "id": "9094" + }, + { + "examine": "Magic wood soaked with a potion of waking sleep. Groovy.", + "durability": null, + "name": "Soaked kindling", + "archery_ticket_price": "0", + "id": "9095" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{6,65}", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9096", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,7,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "120000", + "examine": "Provides good protection.", + "durability": null, + "destroy": "true", + "weight": "4.5", + "absorb": "6,3,0", + "equipment_slot": "4", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "remove_sleeves": "true", + "name": "Lunar torso", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9097", + "bonuses": "0,0,0,10,-10,34,22,40,12,0,35,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "80000", + "examine": "These should protect my legs.", + "durability": null, + "destroy": "true", + "weight": "3.65", + "absorb": "4,2,0", + "equipment_slot": "7", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar legs", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9098", + "bonuses": "0,0,0,7,-7,20,19,23,9,0,20,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "10000", + "examine": "These should keep my hands safe.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "equipment_slot": "9", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar gloves", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9099", + "bonuses": "0,0,0,4,-1,2,1,1,2,0,1,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "10000", + "examine": "Mystical foot protection.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "equipment_slot": "10", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar boots", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9100", + "bonuses": "0,0,0,2,-1,1,2,2,2,0,2,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "12000", + "examine": "Oooo pretty!", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "1", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar cape", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9101", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0" + }, + { + "destroy_message": "The Oneiromancer might be able to help you get another.", + "requirements": "{1,40}-{6,65}", + "shop_price": "4000", + "examine": "Awesome.", + "durability": null, + "name": "Lunar amulet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9102", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "destroy_message": "The Oneiromancer might be able to help you get another.", + "examine": "I'll be the talk of the town with this... maybe.", + "durability": null, + "name": "A special tiara", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9103" + }, + { + "destroy_message": "The Oneiromancer might be able to help you get another.", + "requirements": "{1,40}-{6,65}", + "shop_price": "2000", + "examine": "A mysterious ring that can fill the wearer with magical power.", + "durability": null, + "name": "Lunar ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9104", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Astral tiara", + "archery_ticket_price": "0", + "id": "9106", + "equipment_slot": "0" + }, + { + "requirements": "{4,16}", + "examine": "Blurite crossbow bolts.", + "durability": null, + "name": "Blurite bolts", + "archery_ticket_price": "0", + "id": "9139", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "41", + "durability": null, + "name": "Iron bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9140", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "shop_price": "150", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "90", + "durability": null, + "name": "Steel bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9141", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "108", + "durability": null, + "name": "Mithril bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9142", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "shop_price": "23", + "ge_buy_limit": "10000", + "examine": "Adamantite crossbow bolts.", + "grand_exchange_price": "210", + "durability": null, + "name": "Adamant bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9143", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "627", + "durability": null, + "name": "Rune bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9144", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "8", + "durability": null, + "name": "Silver bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9145", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A bronze crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "29", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9174", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,0", + "shop_price": "92", + "durability": null, + "weight": "4", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Bronze crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "29", + "durability": null, + "name": "Bronze crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9175" + }, + { + "requirements": "{4,16}", + "turn90cw_anim": "821", + "examine": "A blurite crossbow.", + "walk_anim": "4226", + "durability": null, + "weight": "4", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Blurite crossbow", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9176", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,30,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "An iron crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "20", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9177", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,42,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,26}", + "shop_price": "157", + "durability": null, + "weight": "4", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Iron crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "20", + "durability": null, + "name": "Iron crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9178" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A steel crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "99", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9179", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,54,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,31}", + "durability": null, + "weight": "5", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Steel crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "99", + "durability": null, + "name": "Steel crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9180" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A mithril crossbow", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "355", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9181", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,66,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,36}", + "durability": null, + "weight": "6", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Mith crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "355", + "durability": null, + "name": "Mith crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9182" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "An adamantite crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "905", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9183", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,78,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,46}", + "shop_price": "2244", + "durability": null, + "weight": "6", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Adamant crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "905", + "durability": null, + "name": "Adamant crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9184" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A runite crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "9706", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9185", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,90,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,61}", + "shop_price": "16200", + "durability": null, + "weight": "6", + "weapon_interface": "17", + "render_anim": "175", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Rune crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "9706", + "durability": null, + "name": "Rune crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9186" + }, + { + "ge_buy_limit": "10000", + "examine": "Jade bolt tips.", + "grand_exchange_price": "2", + "durability": null, + "name": "Jade bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9187" + }, + { + "ge_buy_limit": "10000", + "examine": "Red Topaz bolt tips.", + "grand_exchange_price": "2", + "durability": null, + "name": "Topaz bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9188" + }, + { + "ge_buy_limit": "10000", + "examine": "Sapphire bolt tips.", + "grand_exchange_price": "4", + "durability": null, + "name": "Sapphire bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9189" + }, + { + "ge_buy_limit": "10000", + "examine": "Emerald bolt tips.", + "grand_exchange_price": "84", + "durability": null, + "name": "Emerald bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9190" + }, + { + "ge_buy_limit": "10000", + "examine": "Ruby bolt tips.", + "grand_exchange_price": "159", + "durability": null, + "name": "Ruby bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9191" + }, + { + "ge_buy_limit": "10000", + "examine": "Diamond bolt tips.", + "grand_exchange_price": "1289", + "durability": null, + "name": "Diamond bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9192" + }, + { + "ge_buy_limit": "10000", + "examine": "Dragonstone bolt tips.", + "grand_exchange_price": "2477", + "durability": null, + "name": "Dragon bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9193" + }, + { + "shop_price": "13500", + "ge_buy_limit": "10000", + "examine": "Onyx bolt tips.", + "grand_exchange_price": "8096", + "tokkul_price": "1500", + "durability": null, + "name": "Onyx bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9194" + }, + { + "ge_buy_limit": "25000", + "examine": "Enchanted Opal tipped Bronze Crossbow Bolts.", + "grand_exchange_price": "10", + "durability": null, + "name": "Opal bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9236", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,14", + "equipment_slot": "13" + }, + { + "requirements": "{4,15}", + "examine": "Enchanted Jade tipped Blurite Crossbow Bolts.", + "durability": null, + "name": "Jade bolts (e)", + "archery_ticket_price": "0", + "id": "9237", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "ge_buy_limit": "25000", + "examine": "Enchanted Pearl tipped Iron Crossbow Bolts.", + "grand_exchange_price": "36", + "durability": null, + "name": "Pearl bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9238", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,48", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "25000", + "examine": "Enchanted Red Topaz tipped Steel Crossbow Bolts.", + "grand_exchange_price": "44", + "durability": null, + "name": "Topaz bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9239", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,66", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "103", + "ge_buy_limit": "25000", + "examine": "Enchanted Sapphire tipped Mithril Crossbow Bolts.", + "grand_exchange_price": "95", + "durability": null, + "name": "Sapphire bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9240", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,83", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "ge_buy_limit": "25000", + "examine": "Enchanted Emerald tipped Mithril Crossbow Bolts.", + "grand_exchange_price": "304", + "durability": null, + "name": "Emerald bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9241", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,85", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Enchanted Ruby tipped Adamantite Crossbow Bolts.", + "grand_exchange_price": "450", + "durability": null, + "name": "Ruby bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9242", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,103", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Enchanted Diamond tipped Adamantite Crossbow Bolts.", + "grand_exchange_price": "1631", + "durability": null, + "name": "Diamond bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9243", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,105", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Enchanted Dragonstone tipped Runite Crossbow Bolts.", + "grand_exchange_price": "3217", + "durability": null, + "name": "Dragon bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9244", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,117", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Enchanted Onyx tipped runite Crossbow Bolts.", + "grand_exchange_price": "8870", + "durability": null, + "name": "Onyx bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9245", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,120", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "durability": null, + "name": "Blurite bolts(p)", + "archery_ticket_price": "0", + "id": "9286", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "88", + "durability": null, + "name": "Iron bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9287", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "132", + "durability": null, + "name": "Steel bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9288", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "146", + "durability": null, + "name": "Mithril bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9289", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "shop_price": "23", + "ge_buy_limit": "10000", + "examine": "Adamantite crossbow bolts.", + "grand_exchange_price": "302", + "durability": null, + "name": "Adamant bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9290", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "734", + "durability": null, + "name": "Runite bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9291", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "34", + "durability": null, + "name": "Silver bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9292", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "durability": null, + "name": "Blurite bolts(p+)", + "archery_ticket_price": "0", + "id": "9293", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "185", + "durability": null, + "name": "Iron bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9294", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "215", + "durability": null, + "name": "Steel bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9295", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "296", + "durability": null, + "name": "Mithril bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9296", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "10000", + "grand_exchange_price": "472", + "durability": null, + "name": "Adamant bolts(p+)", + "archery_ticket_price": "0", + "id": "9297", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "1130", + "durability": null, + "name": "Runite bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9298", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "129", + "durability": null, + "name": "Silver bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9299", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "durability": null, + "name": "Blurite bolts(p++)", + "archery_ticket_price": "0", + "id": "9300", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "1136", + "durability": null, + "name": "Iron bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9301", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "1088", + "durability": null, + "name": "Steel bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9302", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "903", + "durability": null, + "name": "Mithril bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9303", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "10000", + "grand_exchange_price": "1043", + "durability": null, + "name": "Adamant bolts(p++)", + "archery_ticket_price": "0", + "id": "9304", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "1581", + "durability": null, + "name": "Runite bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9305", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "1211", + "durability": null, + "name": "Silver bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9306", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "examine": "Jade tipped blurite bolts.", + "durability": null, + "name": "Jade bolts", + "archery_ticket_price": "0", + "id": "9335", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "shop_price": "62", + "ge_buy_limit": "25000", + "examine": "Red Topaz tipped Steel Crossbow Bolts.", + "grand_exchange_price": "60", + "durability": null, + "name": "Topaz bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9336", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,66", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "ge_buy_limit": "25000", + "examine": "Sapphire tipped Mithril crossbow bolts.", + "grand_exchange_price": "89", + "durability": null, + "name": "Sapphire bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9337", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,83", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "ge_buy_limit": "25000", + "examine": "Emerald tipped Mithril crossbow bolts.", + "grand_exchange_price": "177", + "durability": null, + "name": "Emerald bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9338", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,85", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Ruby tipped Adamantite crossbow bolts.", + "grand_exchange_price": "408", + "durability": null, + "name": "Ruby bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9339", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,103", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Diamond tipped Adamantite crossbow bolts.", + "grand_exchange_price": "1545", + "durability": null, + "name": "Diamond bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9340", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,105", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Dragonstone tipped Runite crossbow bolts.", + "grand_exchange_price": "3201", + "durability": null, + "name": "Dragon bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9341", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,117", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Onyx tipped Runite crossbow bolts.", + "grand_exchange_price": "8752", + "durability": null, + "name": "Onyx bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9342", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,120", + "equipment_slot": "13" + }, + { + "shop_price": "1", + "ge_buy_limit": "10000", + "examine": "Unfeathered bronze crossbow bolts.", + "grand_exchange_price": "3", + "durability": null, + "name": "Bronze bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9375" + }, + { + "examine": "Unfeathered blurite crossbow bolts.", + "durability": null, + "name": "Blurite bolts (unf)", + "archery_ticket_price": "0", + "id": "9376" + }, + { + "shop_price": "2", + "ge_buy_limit": "10000", + "examine": "Unfeathered iron crossbow bolts.", + "grand_exchange_price": "14", + "durability": null, + "name": "Iron bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9377" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered steel crossbow bolts.", + "grand_exchange_price": "61", + "durability": null, + "name": "Steel bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9378" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered mithril crossbow bolts.", + "grand_exchange_price": "115", + "durability": null, + "name": "Mithril bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9379" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered adamantite crossbow bolts.", + "grand_exchange_price": "266", + "durability": null, + "name": "Adamant bolts(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9380" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered runite crossbow bolts", + "grand_exchange_price": "1235", + "durability": null, + "name": "Runite bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9381" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered silver crossbow bolts.", + "grand_exchange_price": "2", + "durability": null, + "name": "Silver bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9382" + }, + { + "examine": "A mithril grapple tipped bolt with a rope.", + "grand_exchange_price": "1447", + "durability": null, + "name": "Grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9415" + }, + { + "ge_buy_limit": "100", + "examine": "A mithril grapple tip.", + "grand_exchange_price": "461", + "durability": null, + "name": "Mith grapple tip", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9416" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "461", + "durability": null, + "name": "Mith grapple tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9417" + }, + { + "ge_buy_limit": "1000", + "examine": "A mithril grapple tipped bolt with a rope.", + "grand_exchange_price": "858", + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9418" + }, + { + "ge_buy_limit": "1000", + "examine": "A mithril grapple tipped bolt with a rope.", + "grand_exchange_price": "1470", + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9419", + "equipment_slot": "13" + }, + { + "requirements": "{9,9}", + "shop_price": "20", + "ge_buy_limit": "5000", + "examine": "A pair of bronze crossbow limbs.", + "grand_exchange_price": "49", + "durability": null, + "name": "Bronze limbs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9420", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "49", + "durability": null, + "name": "Bronze limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9421" + }, + { + "requirements": "{24,9}", + "examine": "A pair of blurite crossbow limbs.", + "durability": null, + "name": "Blurite limbs", + "weight": "1", + "archery_ticket_price": "0", + "id": "9422", + "equipment_slot": "5" + }, + { + "requirements": "{9,39}", + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "A pair of iron crossbow limbs.", + "grand_exchange_price": "34", + "durability": null, + "name": "Iron limbs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9423", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "34", + "durability": null, + "name": "Iron limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9424" + }, + { + "requirements": "{9,46}", + "shop_price": "900", + "ge_buy_limit": "5000", + "examine": "A pair of steel crossbow limbs.", + "grand_exchange_price": "97", + "durability": null, + "name": "Steel limbs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9425", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "durability": null, + "name": "Steel limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9426" + }, + { + "requirements": "{9,54}", + "shop_price": "650", + "ge_buy_limit": "5000", + "examine": "A pair of mithril crossbow limbs.", + "grand_exchange_price": "347", + "durability": null, + "name": "Mithril limbs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9427", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "347", + "durability": null, + "name": "Mithril limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9428" + }, + { + "requirements": "{9,61}", + "shop_price": "4800", + "ge_buy_limit": "5000", + "examine": "A pair of adamantite crossbow limbs.", + "grand_exchange_price": "1434", + "durability": null, + "name": "Adamantite limbs", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9429", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1434", + "durability": null, + "name": "Adamantite limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9430" + }, + { + "requirements": "{9,69}", + "ge_buy_limit": "5000", + "examine": "A pair of runite crossbow limbs.", + "grand_exchange_price": "9441", + "durability": null, + "name": "Runite limbs", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9431", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "9441", + "durability": null, + "name": "Runite limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9432" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "1500", + "examine": "A pouch for storing crossbow bolts.", + "durability": null, + "name": "Bolt pouch", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9433" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "A mould for creating silver crossbow bolts.", + "grand_exchange_price": "409", + "durability": null, + "name": "Bolt mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9434" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "409", + "durability": null, + "name": "Bolt mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9435" + }, + { + "ge_buy_limit": "1000", + "examine": "I can use this to make a crossbow string.", + "grand_exchange_price": "196", + "durability": null, + "name": "Sinew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9436" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "196", + "durability": null, + "name": "Sinew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9437" + }, + { + "ge_buy_limit": "1000", + "examine": "A string for a crossbow.", + "grand_exchange_price": "203", + "durability": null, + "name": "Crossbow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9438" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "203", + "durability": null, + "name": "Crossbow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9439" + }, + { + "requirements": "{9,9}", + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "A wooden crossbow stock", + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9440", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9441" + }, + { + "requirements": "{24,9}", + "ge_buy_limit": "1000", + "examine": "An oak crossbow stock.", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak stock", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9442", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9443" + }, + { + "requirements": "{9,39}", + "shop_price": "21", + "ge_buy_limit": "1000", + "examine": "A willow crossbow stock.", + "grand_exchange_price": "3", + "durability": null, + "name": "Willow stock", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9444", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3", + "durability": null, + "name": "Willow stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9445" + }, + { + "requirements": "{9,46}", + "shop_price": "231", + "ge_buy_limit": "1000", + "examine": "A teak crossbow stock.", + "grand_exchange_price": "6", + "durability": null, + "name": "Teak stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9446", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "6", + "durability": null, + "name": "Teak stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9447" + }, + { + "requirements": "{9,54}", + "ge_buy_limit": "1000", + "examine": "A maple crossbow stock.", + "grand_exchange_price": "7", + "durability": null, + "name": "Maple stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9448", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7", + "durability": null, + "name": "Maple stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9449" + }, + { + "requirements": "{9,61}", + "ge_buy_limit": "1000", + "examine": "A Mahogany crossbow stock.", + "grand_exchange_price": "23", + "durability": null, + "name": "Mahogany stock", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9450", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "23", + "durability": null, + "name": "Mahogany stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9451" + }, + { + "requirements": "{9,69}", + "ge_buy_limit": "1000", + "examine": "A yew crossbow stock.", + "grand_exchange_price": "37", + "durability": null, + "name": "Yew stock", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9452", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "37", + "durability": null, + "name": "Yew stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9453" + }, + { + "shop_price": "27", + "ge_buy_limit": "500", + "examine": "An unstrung bronze crossbow.", + "grand_exchange_price": "25", + "durability": null, + "name": "Bronze c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9454" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "25", + "durability": null, + "name": "Bronze c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9455" + }, + { + "shop_price": "27", + "examine": "An unstrung blurite crossbow.", + "durability": null, + "name": "Blurite c'bow (u)", + "weight": "8", + "archery_ticket_price": "0", + "id": "9456" + }, + { + "ge_buy_limit": "500", + "examine": "An unstrung iron crossbow.", + "grand_exchange_price": "26", + "durability": null, + "name": "Iron c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9457" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "26", + "durability": null, + "name": "Iron c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9458" + }, + { + "shop_price": "27", + "ge_buy_limit": "500", + "examine": "An unstrung steel crossbow.", + "grand_exchange_price": "114", + "durability": null, + "name": "Steel c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9459" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "114", + "durability": null, + "name": "Steel c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9460" + }, + { + "shop_price": "27", + "ge_buy_limit": "500", + "examine": "An unstrung mithril crossbow.", + "grand_exchange_price": "330", + "durability": null, + "name": "Mithril c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9461" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "330", + "durability": null, + "name": "Mithril c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9462" + }, + { + "shop_price": "693", + "ge_buy_limit": "500", + "examine": "An unstrung adamantite crossbow.", + "grand_exchange_price": "1007", + "durability": null, + "name": "Adamant c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9463" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1007", + "durability": null, + "name": "Adamant c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9464" + }, + { + "shop_price": "4000", + "ge_buy_limit": "500", + "examine": "An unstrung runite crossbow.", + "grand_exchange_price": "9493", + "durability": null, + "name": "Runite c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9465" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "9493", + "durability": null, + "name": "Runite c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9466" + }, + { + "examine": "It's a bar of blurite.", + "durability": null, + "name": "Blurite bar", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "9467" + }, + { + "examine": "What is left over when a log is made into a plank.", + "durability": null, + "name": "Sawdust", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "9468" + }, + { + "ge_buy_limit": "100", + "examine": "A seed pod of the Grand Tree.", + "grand_exchange_price": "16200", + "durability": null, + "name": "Grand seed pod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9469" + }, + { + "ge_buy_limit": "10", + "examine": "A scarf. You feel your upper lip stiffening.", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Gnome scarf", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9470", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Gnome scarf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9471" + }, + { + "ge_buy_limit": "10", + "examine": "Tally Ho!", + "grand_exchange_price": "95800", + "durability": null, + "name": "Gnome goggles", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9472", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95800", + "durability": null, + "name": "Gnome goggles", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9473" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9474" + }, + { + "ge_buy_limit": "100", + "examine": "It looks very minty.", + "grand_exchange_price": "675", + "durability": null, + "name": "Mint cake", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9475" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "675", + "durability": null, + "name": "Mint cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9476" + }, + { + "examine": "You can check on your delivery details here", + "durability": null, + "name": "Aluft aloft box", + "archery_ticket_price": "0", + "id": "9477" + }, + { + "shop_price": "1", + "examine": "This cheese & tomato batta needs baking (and garnishing with equa leaves).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9478" + }, + { + "shop_price": "1", + "examine": "This cheese & tomato batta needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9479" + }, + { + "shop_price": "1", + "examine": "This fruit batta needs baking (and garnishing with gnome spices).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9480" + }, + { + "shop_price": "1", + "examine": "This fruit batta needs garnishing with gnome spices.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9481" + }, + { + "shop_price": "1", + "examine": "This toad batta needs baking.", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9482" + }, + { + "shop_price": "1", + "examine": "This veggie batta needs baking (and garnishing with equa leaves).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9483" + }, + { + "shop_price": "1", + "examine": "This veggie batta needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9484" + }, + { + "shop_price": "1", + "examine": "This worm batta needs baking (and garnishing with equa leaves).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9485" + }, + { + "shop_price": "1", + "examine": "This worm batta needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9486" + }, + { + "shop_price": "28", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "740", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9487" + }, + { + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9488" + }, + { + "shop_price": "28", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "740", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9489" + }, + { + "shop_price": "28", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "740", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9508" + }, + { + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9509" + }, + { + "shop_price": "28", + "examine": "A Short Green Guy... looks good.", + "grand_exchange_price": "954", + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9510" + }, + { + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9511" + }, + { + "shop_price": "28", + "examine": "A fresh healthy fruit mix.", + "grand_exchange_price": "287", + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9512" + }, + { + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9513" + }, + { + "shop_price": "28", + "examine": "A cool refreshing fruit mix.", + "grand_exchange_price": "2276", + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9514" + }, + { + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9515" + }, + { + "shop_price": "28", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "577", + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9516" + }, + { + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9517" + }, + { + "shop_price": "28", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "281", + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9518" + }, + { + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9519" + }, + { + "shop_price": "30", + "examine": "Looks good... smells strong.", + "grand_exchange_price": "27", + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9520" + }, + { + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9521" + }, + { + "shop_price": "1", + "examine": "A deep tin used to make gnome battas in.", + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9522" + }, + { + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9523" + }, + { + "shop_price": "1", + "examine": "A deep tin used to make gnome battas in.", + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9524" + }, + { + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9525" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "310", + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9527" + }, + { + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9528" + }, + { + "shop_price": "78", + "examine": "It actually smells quite good.", + "grand_exchange_price": "280", + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9529" + }, + { + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9530" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "148", + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9531" + }, + { + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9532" + }, + { + "examine": "Well... It looks healthy.", + "grand_exchange_price": "240", + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9533" + }, + { + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9534" + }, + { + "examine": "This smells really good.", + "grand_exchange_price": "266", + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9535" + }, + { + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9536" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "2606", + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9538" + }, + { + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9539" + }, + { + "shop_price": "70", + "examine": "Yum...smells spicy.", + "grand_exchange_price": "99", + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9540" + }, + { + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9541" + }, + { + "shop_price": "80", + "examine": "It actually smells quite good.", + "grand_exchange_price": "255", + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9542" + }, + { + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9543" + }, + { + "shop_price": "70", + "examine": "Yum... smells good.", + "grand_exchange_price": "889", + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9544" + }, + { + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9545" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "475", + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9547" + }, + { + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9548" + }, + { + "examine": "This looks pretty healthy.", + "grand_exchange_price": "514", + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9549" + }, + { + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9550" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "2650", + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "9551" + }, + { + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9552" + }, + { + "shop_price": "450", + "examine": "Full of creamy, chocolately goodness.", + "grand_exchange_price": "4704", + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "9553" + }, + { + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9554" + }, + { + "examine": "This unfinished choco bomb needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9558" + }, + { + "examine": "This unfinished tangled toad legs bowl needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9559" + }, + { + "examine": "This unfinished choc bomb needs cream and chocolate dust.", + "durability": null, + "name": "Unfinished bowl", + "archery_ticket_price": "0", + "id": "9560" + }, + { + "examine": "This unfinished veggie ball needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9561" + }, + { + "examine": "This unfinished veggie ball needs equa leaves.", + "durability": null, + "name": "Unfinished bowl", + "archery_ticket_price": "0", + "id": "9562" + }, + { + "examine": "This unfinished worm hole needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9563" + }, + { + "examine": "This unfinished worm hole needs equa leaves.", + "durability": null, + "name": "Unfinished bowl", + "archery_ticket_price": "0", + "id": "9564" + }, + { + "durability": null, + "name": "Cocktail shaker", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9565" + }, + { + "examine": "This wizzard blizzard needs pouring, a lime slice, and pineapple chunks.", + "durability": null, + "name": "Mixed blizzard", + "archery_ticket_price": "0", + "id": "9566" + }, + { + "examine": "This short green guy cocktail needs pouring, a lime slice and equa leaves.", + "durability": null, + "name": "Mixed sgg", + "archery_ticket_price": "0", + "id": "9567" + }, + { + "examine": "This fruit blast cocktail needs pouring and a lemon slice.", + "durability": null, + "name": "Mixed blast", + "archery_ticket_price": "0", + "id": "9568" + }, + { + "examine": "This pineapple punch needs pouring, lime and pineapple chunks, and a orange slice.", + "durability": null, + "name": "Mixed punch", + "archery_ticket_price": "0", + "id": "9569" + }, + { + "examine": "This blurberry special needs pouring, orange and lemon chunks, a lime slice and equa leaves.", + "durability": null, + "name": "Mixed blurberry special", + "archery_ticket_price": "0", + "id": "9570" + }, + { + "examine": "This choco chip crunchy needs baking and garnishing with chocolate dust.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9577" + }, + { + "examine": "This choco chip crunchy needs garnishing with chocolate dust.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9578" + }, + { + "examine": "This spicy crunchy needs baking and garnishing with gnome spices.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9579" + }, + { + "examine": "This spicy crunchy needs garnishing with gnome spices.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9580" + }, + { + "examine": "This toad crunchy needs baking and garnishing with equa leaves.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9581" + }, + { + "examine": "This toad crunchy needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9582" + }, + { + "examine": "This worm crunchy needs baking and garnishing with gnome spices.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9583" + }, + { + "examine": "This worm crunchy needs garnishing with gnome spices.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9584" + }, + { + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9585" + }, + { + "durability": null, + "name": "Crunchy tray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9586" + }, + { + "durability": null, + "name": "Gnomebowl mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9587" + }, + { + "durability": null, + "name": "Raw crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9588" + }, + { + "destroy_message": "Speak to Sir Amik Varze at the beginning of the Black Knight's Fortress Quest.", + "examine": "A dossier containing info on the Black Knight plot.", + "durability": null, + "name": "Dossier", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9589" + }, + { + "examine": "A dossier containing info on the Black Knight plot.", + "durability": null, + "name": "Dossier", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9590" + }, + { + "examine": "Glue made from tree sap and ground mud runes.", + "durability": null, + "name": "Magic glue", + "weight": "3", + "archery_ticket_price": "0", + "id": "9592" + }, + { + "examine": "This doesn't look like it will do anything interesting.", + "durability": null, + "name": "Weird gloop", + "tradeable": "false", + "destroy": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "9593" + }, + { + "examine": "Mud runes ground into a powder.", + "durability": null, + "name": "Ground mud runes", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9594" + }, + { + "examine": "A red circular crystalline disc.", + "durability": null, + "name": "Red circle", + "archery_ticket_price": "0", + "id": "9597" + }, + { + "examine": "A red triangular crystalline disc.", + "durability": null, + "name": "Red triangle", + "archery_ticket_price": "0", + "id": "9598" + }, + { + "examine": "A red square-shaped crystalline disc.", + "durability": null, + "name": "Red square", + "archery_ticket_price": "0", + "id": "9599" + }, + { + "examine": "A red pentagon shaped crystalline disc.", + "durability": null, + "name": "Red pentagon", + "archery_ticket_price": "0", + "id": "9600" + }, + { + "examine": "An orange circular crystalline disc.", + "durability": null, + "name": "Orange circle", + "archery_ticket_price": "0", + "id": "9601" + }, + { + "examine": "An orange triangular crystalline disc.", + "durability": null, + "name": "Orange triangle", + "archery_ticket_price": "0", + "id": "9602" + }, + { + "examine": "An orange square-shaped crystalline disc.", + "durability": null, + "name": "Orange square", + "archery_ticket_price": "0", + "id": "9603" + }, + { + "examine": "An orange pentagon shaped crystalline disc.", + "durability": null, + "name": "Orange pentagon", + "archery_ticket_price": "0", + "id": "9604" + }, + { + "examine": "A yellow circular crystalline disc.", + "durability": null, + "name": "Yellow circle", + "archery_ticket_price": "0", + "id": "9605" + }, + { + "examine": "A yellow triangular crystalline disc.", + "durability": null, + "name": "Yellow triangle", + "archery_ticket_price": "0", + "id": "9606" + }, + { + "examine": "A yellow square-shaped crystalline disc.", + "durability": null, + "name": "Yellow square", + "archery_ticket_price": "0", + "id": "9607" + }, + { + "examine": "A yellow pentagon shaped crystalline disc.", + "durability": null, + "name": "Yellow pentagon", + "archery_ticket_price": "0", + "id": "9608" + }, + { + "examine": "A green circular crystalline disc.", + "durability": null, + "name": "Green circle", + "archery_ticket_price": "0", + "id": "9609" + }, + { + "examine": "A green triangular crystalline disc.", + "durability": null, + "name": "Green triangle", + "archery_ticket_price": "0", + "id": "9610" + }, + { + "examine": "A green square shaped crystalline disc.", + "durability": null, + "name": "Green square", + "archery_ticket_price": "0", + "id": "9611" + }, + { + "examine": "A green pentagon shaped crystalline disc.", + "durability": null, + "name": "Green pentagon", + "archery_ticket_price": "0", + "id": "9612" + }, + { + "examine": "A blue circular crystalline disc.", + "durability": null, + "name": "Blue circle", + "archery_ticket_price": "0", + "id": "9613" + }, + { + "examine": "A blue triangular crystalline disc.", + "durability": null, + "name": "Blue triangle", + "archery_ticket_price": "0", + "id": "9614" + }, + { + "examine": "A blue square shaped crystalline disc.", + "durability": null, + "name": "Blue square", + "archery_ticket_price": "0", + "id": "9615" + }, + { + "examine": "A blue pentagon shaped crystalline disc.", + "durability": null, + "name": "Blue pentagon", + "archery_ticket_price": "0", + "id": "9616" + }, + { + "examine": "An indigo circular crystalline disc.", + "durability": null, + "name": "Indigo circle", + "archery_ticket_price": "0", + "id": "9617" + }, + { + "examine": "An indigo triangular crystalline disc.", + "durability": null, + "name": "Indigo triangle", + "archery_ticket_price": "0", + "id": "9618" + }, + { + "examine": "An indigo square shaped crystalline disc.", + "durability": null, + "name": "Indigo square", + "archery_ticket_price": "0", + "id": "9619" + }, + { + "examine": "An indigo pentagon shaped crystalline disc.", + "durability": null, + "name": "Indigo pentagon", + "archery_ticket_price": "0", + "id": "9620" + }, + { + "examine": "A violet circular crystalline disc.", + "durability": null, + "name": "Violet circle", + "archery_ticket_price": "0", + "id": "9621" + }, + { + "examine": "A violet triangular crystalline disc.", + "durability": null, + "name": "Violet triangle", + "archery_ticket_price": "0", + "id": "9622" + }, + { + "examine": "A violet square-shaped crystalline disc.", + "durability": null, + "name": "Violet square", + "archery_ticket_price": "0", + "id": "9623" + }, + { + "examine": "A violet pentagon shaped crystalline disc.", + "durability": null, + "name": "Violet pentagon", + "archery_ticket_price": "0", + "id": "9624" + }, + { + "destroy_message": "Maybe Brimstail will have another...", + "examine": "A magical saw.", + "durability": null, + "name": "Crystal saw", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9625", + "equipment_slot": "3" + }, + { + "destroy_message": "Maybe Brimstail will have another...", + "examine": "This small crystal seed looks grey and dead.", + "durability": null, + "name": "Small crystal seed", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9626" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "1265", + "ge_buy_limit": "100", + "examine": "As used by King Tyras personal guard.", + "durability": null, + "weight": "0.9", + "equipment_slot": "0", + "grand_exchange_price": "1406", + "name": "Tyras helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9629", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1406", + "durability": null, + "name": "Tyras helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9630" + }, + { + "examine": "This needs refining.", + "durability": null, + "name": "Daeyalt ore", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9632" + }, + { + "shop_price": "635", + "ge_buy_limit": "100", + "examine": "Dressing like the Vyrewatch could be a useful disguise in the ghetto of Meiyerditch.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "2160", + "name": "Vyrewatch top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9634", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2160", + "durability": null, + "name": "Vyrewatch top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9635" + }, + { + "shop_price": "635", + "ge_buy_limit": "100", + "examine": "Dress like a powerful Vyrewatch!", + "grand_exchange_price": "1204", + "durability": null, + "name": "Vyrewatch legs", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9636", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1204", + "durability": null, + "name": "Vyrewatch legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9637" + }, + { + "shop_price": "635", + "ge_buy_limit": "100", + "examine": "Dress like a powerful Vyrewatch!", + "grand_exchange_price": "2874", + "durability": null, + "name": "Vyrewatch shoes", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9638", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2874", + "durability": null, + "name": "Vyrewatch shoes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9639" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Could be used as a disguise in the ghetto of Meiyerditch.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "588", + "name": "Citizen top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9640", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "588", + "durability": null, + "name": "Citizen top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9641" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Could be used as a disguise in the ghetto of Meiyerditch.", + "grand_exchange_price": "491", + "durability": null, + "name": "Citizen trousers", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9642", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "491", + "durability": null, + "name": "Citizen trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9643" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Could be used as a disguise in the ghetto of Meiyerditch.", + "grand_exchange_price": "458", + "durability": null, + "name": "Citizen shoes", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9644", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "458", + "durability": null, + "name": "Citizen shoes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9645" + }, + { + "destroy_message": "You can get another sketch by using charcoal with papyrus, when on the wall near Castle Drakyn.", + "examine": "Northern approach of the castle.", + "durability": null, + "name": "Castle sketch 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9646" + }, + { + "destroy_message": "You can get another sketch by using charcoal with papyrus, when on the wall near Castle Drakyn.", + "examine": "Western approach of the castle.", + "durability": null, + "name": "Castle sketch 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9647" + }, + { + "destroy_message": "You can get another sketch by using charcoal with papyrus, when on the wall near Castle Drakyn.", + "examine": "Southern approach of the castle.", + "durability": null, + "name": "Castle sketch 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9648" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A key to some large, strange door.", + "durability": null, + "name": "Large ornate key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9651" + }, + { + "destroy_message": "Unknown You can reclaim this item from the place you found it.", + "examine": "A book called Haemalchemy Volume 1.", + "durability": null, + "name": "Haemalchemy", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9652" + }, + { + "destroy_message": "Safalaan gave you this message; he would probably write out another one for you.", + "examine": "A sealed message from Safalaan to Valiaf.", + "durability": null, + "name": "Sealed message", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9653" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A key to the Witch's house's front door. (Witch's House)", + "durability": null, + "name": "Door key", + "archery_ticket_price": "0", + "id": "9654" + }, + { + "destroy_message": "You found this ladder top on a wall section in the north of Meiyerditch; you can get another one there.", + "examine": "The top part of a ladder.", + "durability": null, + "name": "Ladder top", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9655" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A tome of experience that awards 2000 XP per chapter.", + "durability": null, + "name": "Tome of xp (3)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9656" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A tome of experience that awards 2000 XP per chapter.", + "durability": null, + "name": "Tome of xp (2)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9657" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A tome of experience that awards 2000 XP per chapter.", + "durability": null, + "name": "Tome of xp (1)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9658" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9659" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9660" + }, + { + "destroy_message": "Safalaan gave you this key as a reward for helping out in Meiyerditch, you can get another key from him.", + "examine": "A key allowing a shortcut into the Sanguinesti region. (Darkness of Hallowvale)", + "durability": null, + "name": "Shortcut key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9662" + }, + { + "durability": null, + "name": "Torch", + "archery_ticket_price": "0", + "id": "9665", + "equipment_slot": "3" + }, + { + "shop_price": "25000", + "ge_buy_limit": "100", + "examine": "Unknown edit", + "grand_exchange_price": "27500", + "durability": null, + "name": "Pros'yte harness m", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "9666" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27500", + "durability": null, + "name": "Pros'yte harness m", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9667" + }, + { + "shop_price": "20000", + "ge_buy_limit": "100", + "examine": "Unknown edit", + "grand_exchange_price": "22700", + "durability": null, + "name": "Initiate harness m", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "9668" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22700", + "durability": null, + "name": "Initiate harness m", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9669" + }, + { + "shop_price": "25000", + "ge_buy_limit": "100", + "examine": "Unknown edit", + "grand_exchange_price": "27900", + "durability": null, + "name": "Pros'yte harness f", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "9670" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27900", + "durability": null, + "name": "Pros'yte harness f", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9671" + }, + { + "remove_head": "true", + "requirements": "{1,30}-{5,20}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's helm.", + "durability": null, + "weight": "2", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "4619", + "name": "Proselyte sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9672", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,4,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4619", + "durability": null, + "name": "Proselyte sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9673" + }, + { + "requirements": "{1,30}-{5,20}", + "shop_price": "12000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's armour.", + "durability": null, + "weight": "8.6", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "7076", + "name": "Proselyte hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9674", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,8,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7076", + "durability": null, + "name": "Proselyte hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9675" + }, + { + "requirements": "{1,30}-{5,20}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's leg armour", + "durability": null, + "weight": "7.7", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "5923", + "name": "Proselyte cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9676", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5923", + "durability": null, + "name": "Proselyte cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9677" + }, + { + "requirements": "{1,30}-{5,20}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's leg armour.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "5730", + "name": "Proselyte tasset", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9678", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5730", + "durability": null, + "name": "Proselyte tasset", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9679" + }, + { + "examine": "A rendered down baby sea slug.", + "durability": null, + "name": "Sea slug glue", + "archery_ticket_price": "0", + "id": "9680" + }, + { + "destroy_message": "As a security precaution, your CommOrb will automatically self", + "examine": "A Temple Knight Communication Orb. Top Secret!", + "durability": null, + "name": "Commorb v2", + "archery_ticket_price": "0", + "id": "9681" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A copy of the mysterious glyphs.", + "durability": null, + "name": "Door transcription", + "archery_ticket_price": "0", + "id": "9682" + }, + { + "examine": "Dead sea slug, very sticky.", + "durability": null, + "name": "Dead sea slug", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9683" + }, + { + "destroy_message": "You can get this page from Mayor Hobb's Desk.", + "examine": "A page from Maledict's holy book.", + "durability": null, + "name": "Page 1", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9684" + }, + { + "destroy_message": "You can get this page from Ezekial Lovecraft.", + "examine": "A page from Maledict's holy book.", + "durability": null, + "name": "Page 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9685" + }, + { + "destroy_message": "You will have to get the torn page from Col. O' Niall.", + "examine": "A page from Maledict's holy book.", + "durability": null, + "name": "Page 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9686" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A piece of torn page.", + "durability": null, + "name": "Fragment 1", + "archery_ticket_price": "0", + "id": "9687" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A piece of torn page.", + "durability": null, + "name": "Fragment 2", + "archery_ticket_price": "0", + "id": "9688" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A piece of torn page.", + "durability": null, + "name": "Fragment 3", + "archery_ticket_price": "0", + "id": "9689" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank water rune.", + "durability": null, + "name": "Blank water rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9690" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9691" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank air rune.", + "durability": null, + "name": "Blank air rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9692" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "9", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9693" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank earth rune.", + "durability": null, + "name": "Blank earth rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9694" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "7", + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9695" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank mind rune.", + "durability": null, + "name": "Blank mind rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9696" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "Used for basic missile spells.", + "grand_exchange_price": "6", + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9697" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank fire rune.", + "durability": null, + "name": "Blank fire rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9698" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "16", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9699" + }, + { + "durability": null, + "name": "Torch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9701" + }, + { + "examine": "A big, bad troll.", + "durability": null, + "name": "Stick", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "9702", + "weapon_interface": "5", + "equipment_slot": "3" + }, + { + "shop_price": "35", + "examine": "Basic training sword.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "attack_audios": "2500,2500,2517,2500", + "name": "Training sword", + "archery_ticket_price": "0", + "id": "9703", + "bonuses": "4,3,-2,0,0,0,2,1,0,0,0,5,0,0,0" + }, + { + "examine": "Made of flimsy painted wood.", + "durability": null, + "name": "Training shield", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "9704", + "bonuses": "0,0,0,0,0,4,5,3,1,4,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Light and flexible, good for a beginner.", + "durability": null, + "destroy": "true", + "weight": "1.3", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "attack_audios": "2700,0,0,0", + "name": "Training bow", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9705", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Standard training arrows.", + "durability": null, + "name": "Training arrows", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9706", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "examine": "Book of the elemental shield.", + "durability": null, + "name": "Slashed book", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9715" + }, + { + "examine": "Book of the elemental helm.", + "durability": null, + "name": "Beaten book", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9717" + }, + { + "examine": "On the subject of lava dippers.", + "durability": null, + "name": "Crane schematic", + "archery_ticket_price": "0", + "id": "9718" + }, + { + "examine": "A scroll with a lever schematic drawn on it.", + "durability": null, + "name": "Lever schematic", + "archery_ticket_price": "0", + "id": "9719" + }, + { + "examine": "A crane claw.", + "durability": null, + "name": "Crane claw", + "weight": "1", + "archery_ticket_price": "0", + "id": "9720" + }, + { + "examine": "A pipe that belongs in a cannon stand.", + "durability": null, + "name": "Pipe", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9723" + }, + { + "examine": "A large cog.", + "durability": null, + "name": "Large cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "9724" + }, + { + "examine": "A medium cog.", + "durability": null, + "name": "Medium cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "9725" + }, + { + "examine": "A small cog.", + "durability": null, + "name": "Small cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "9726" + }, + { + "examine": "A primed elemental ingot.", + "durability": null, + "name": "Primed bar", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "9727" + }, + { + "examine": "An elemental mind ingot.", + "durability": null, + "name": "Elemental mind bar", + "weight": "1", + "archery_ticket_price": "0", + "id": "9728" + }, + { + "ge_buy_limit": "100", + "examine": "A helmet made in the Elemental Workshop.", + "grand_exchange_price": "196", + "durability": null, + "name": "Elemental helmet", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9729", + "bonuses": "0,0,0,0,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "196", + "durability": null, + "name": "Elemental helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9730" + }, + { + "ge_buy_limit": "100", + "examine": "A shield made in the Elemental Workshop.", + "grand_exchange_price": "8351", + "durability": null, + "name": "Mind shield", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9731", + "bonuses": "0,0,0,0,0,0,0,0,9,0,25,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8351", + "durability": null, + "name": "Mind shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9732" + }, + { + "shop_price": "1200", + "ge_buy_limit": "100", + "examine": "A helmet made in the Elemental Workshop.", + "grand_exchange_price": "1589", + "durability": null, + "name": "Mind helmet", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9733", + "bonuses": "0,0,0,0,0,0,0,0,6,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1589", + "durability": null, + "name": "Mind helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9734" + }, + { + "ge_buy_limit": "10000", + "examine": "Not much good for blowing.", + "grand_exchange_price": "902", + "durability": null, + "name": "Desert goat horn", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9735" + }, + { + "ge_buy_limit": "10000", + "examine": "Finely ground desert goat horn.", + "grand_exchange_price": "1082", + "durability": null, + "name": "Goat horn dust", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9736" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1082", + "durability": null, + "name": "Goat horn dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9737" + }, + { + "durability": null, + "name": "Desert goat horn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9738" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "4 doses of combat potion.", + "grand_exchange_price": "45", + "durability": null, + "name": "Combat potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9739" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "45", + "durability": null, + "name": "Combat potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9740" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "3 doses of combat potion.", + "grand_exchange_price": "25", + "durability": null, + "name": "Combat potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9741" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Combat potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9742" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "2 doses of combat potion.", + "grand_exchange_price": "19", + "durability": null, + "name": "Combat potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9743" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Combat potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9744" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "1 dose of combat potion.", + "grand_exchange_price": "72", + "durability": null, + "name": "Combat potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9745" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "72", + "durability": null, + "name": "Combat potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9746" + }, + { + "requirements": "{0,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of attack.", + "durability": null, + "name": "Attack cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9747", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{0,99}", + "durability": null, + "name": "Attack cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9748", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{0,99}", + "shop_price": "99000", + "examine": "Attack skillcape hood.", + "durability": null, + "name": "Attack hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9749", + "equipment_slot": "0" + }, + { + "requirements": "{2,99}", + "shop_price": "99000", + "examine": "The cape only worn by the strongest people.", + "durability": null, + "name": "Strength cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9750", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{2,99}", + "durability": null, + "name": "Strength cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9751", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{2,99}", + "shop_price": "99000", + "examine": "Strength skillcape hood.", + "durability": null, + "name": "Strength hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9752", + "equipment_slot": "0" + }, + { + "requirements": "{1,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of the art of Defence.", + "durability": null, + "name": "Defence cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9753", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{1,99}", + "durability": null, + "name": "Defence cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9754", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{1,99}", + "shop_price": "99000", + "examine": "Defence skillcape hood.", + "durability": null, + "name": "Defence hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9755", + "equipment_slot": "0" + }, + { + "requirements": "{4,99}", + "shop_price": "99000", + "examine": "The cape worn by master archers.", + "durability": null, + "name": "Ranging cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9756", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{4,99}", + "durability": null, + "name": "Ranging cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9757", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{4,99}", + "shop_price": "99000", + "examine": "Range skillcape hood.", + "durability": null, + "name": "Ranging hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9758", + "equipment_slot": "0" + }, + { + "requirements": "{5,99}", + "shop_price": "99000", + "examine": "The cape worn by the most pious of heroes.", + "durability": null, + "name": "Prayer cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9759", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{5,99}", + "durability": null, + "name": "Prayer cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9760", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{5,99}", + "shop_price": "99000", + "examine": "Prayer skillcape hood.", + "durability": null, + "name": "Prayer hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9761", + "equipment_slot": "0" + }, + { + "requirements": "{6,99}", + "shop_price": "99000", + "examine": "The cape worn by the most powerful mages.", + "durability": null, + "name": "Magic cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9762", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{6,99}", + "durability": null, + "name": "Magic cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9763", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{6,99}", + "shop_price": "99000", + "examine": "Magic skillcape hood.", + "durability": null, + "name": "Magic hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9764", + "equipment_slot": "0" + }, + { + "requirements": "{20,99}", + "shop_price": "99000", + "examine": "The cape worn by master runecrafters.", + "durability": null, + "name": "Runecraft cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9765", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{20,99}", + "durability": null, + "name": "Runecraft cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9766", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{20,99}", + "shop_price": "99000", + "examine": "Runecrafting skillcape hood.", + "durability": null, + "name": "Runecrafting hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9767", + "equipment_slot": "0" + }, + { + "requirements": "{3,99}", + "shop_price": "99000", + "examine": "The cape worn by well-constituted adventurers.", + "durability": null, + "name": "Hitpoints cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9768", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{3,99}", + "durability": null, + "name": "Hitpoints cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9769", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{3,99}", + "shop_price": "99000", + "examine": "Constitution skillcape hood.", + "durability": null, + "name": "Hitpoints hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9770", + "equipment_slot": "0" + }, + { + "requirements": "{16,99}", + "shop_price": "99000", + "examine": "The cape worn by the most agile of heroes.", + "durability": null, + "name": "Agility cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9771", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{16,99}", + "durability": null, + "name": "Agility cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9772", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{16,99}", + "shop_price": "99000", + "examine": "Agility skillcape hood.", + "durability": null, + "name": "Agility hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9773", + "equipment_slot": "0" + }, + { + "requirements": "{15,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled at the art of herblore.", + "durability": null, + "name": "Herblore cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9774", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{15,99}", + "durability": null, + "name": "Herblore cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9775", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{15,99}", + "shop_price": "99000", + "examine": "Herblore skillcape hood.", + "durability": null, + "name": "Herblore hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9776", + "equipment_slot": "0" + }, + { + "requirements": "{17,99}", + "shop_price": "99000", + "examine": "The cape worn by master thieves.", + "durability": null, + "name": "Thieving cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9777", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{17,99}", + "durability": null, + "name": "Thieving cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9778", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{17,99}", + "shop_price": "99000", + "examine": "Thieving skillcape hood.", + "durability": null, + "name": "Thieving hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9779", + "equipment_slot": "0" + }, + { + "requirements": "{12,99}", + "shop_price": "99000", + "examine": "The cape worn by master craftworkers.", + "durability": null, + "name": "Crafting cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9780", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{12,99}", + "durability": null, + "name": "Crafting cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9781", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{12,99}", + "shop_price": "99000", + "examine": "Crafting skillcape hood.", + "durability": null, + "name": "Crafting hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9782", + "equipment_slot": "0" + }, + { + "requirements": "{9,99}", + "shop_price": "99000", + "examine": "The cape worn by the best of fletchers.", + "durability": null, + "name": "Fletching cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9783", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{9,99}", + "durability": null, + "name": "Fletching cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9784", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{9,99}", + "shop_price": "99000", + "examine": "Fletching skillcape hood.", + "durability": null, + "name": "Fletching hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9785", + "equipment_slot": "0" + }, + { + "requirements": "{18,99}", + "shop_price": "99000", + "examine": "The cape worn by slayer masters.", + "durability": null, + "name": "Slayer cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9786", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{18,99}", + "durability": null, + "name": "Slayer cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9787", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{18,99}", + "shop_price": "99000", + "examine": "Slayer skillcape hood.", + "durability": null, + "name": "Slayer hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9788", + "equipment_slot": "0" + }, + { + "requirements": "{22,99}", + "shop_price": "99000", + "examine": "The cape worn by master builders.", + "durability": null, + "name": "Construct. cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9789", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{22,99}", + "durability": null, + "name": "Construct. cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9790", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{22,99}", + "shop_price": "99000", + "examine": "Construction skillcape hood.", + "durability": null, + "name": "Construct. hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9791", + "equipment_slot": "0" + }, + { + "requirements": "{14,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled miners.", + "durability": null, + "name": "Mining cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9792", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{14,99}", + "durability": null, + "name": "Mining cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9793", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{14,99}", + "shop_price": "99000", + "examine": "Mining skillcape hood.", + "durability": null, + "name": "Mining hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9794", + "equipment_slot": "0" + }, + { + "requirements": "{13,99}", + "shop_price": "99000", + "examine": "The cape worn by master smiths.", + "durability": null, + "name": "Smithing cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9795", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{13,99}", + "durability": null, + "name": "Smithing cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9796", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{13,99}", + "shop_price": "99000", + "examine": "Smithing skillcape hood.", + "durability": null, + "name": "Smithing hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9797", + "equipment_slot": "0" + }, + { + "requirements": "{10,99}", + "shop_price": "99000", + "examine": "The cape worn by the best fishermen.", + "durability": null, + "name": "Fishing cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9798", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{10,99}", + "durability": null, + "name": "Fishing cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9799", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{10,99}", + "shop_price": "99000", + "examine": "Fishing skillcape hood.", + "durability": null, + "name": "Fishing hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9800", + "equipment_slot": "0" + }, + { + "requirements": "{7,99}", + "shop_price": "99000", + "examine": "The cape worn by the world's best chefs.", + "durability": null, + "name": "Cooking cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9801", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{7,99}", + "durability": null, + "name": "Cooking cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9802", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{7,99}", + "shop_price": "99000", + "examine": "Cooking skillcape hood.", + "durability": null, + "name": "Cooking hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9803", + "equipment_slot": "0" + }, + { + "requirements": "{11,99}", + "shop_price": "99000", + "examine": "The cape worn by master firelighters.", + "durability": null, + "name": "Firemaking cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9804", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{11,99}", + "durability": null, + "name": "Firemaking cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9805", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{11,99}", + "shop_price": "99000", + "examine": "Firemaking skillcape hood.", + "durability": null, + "name": "Firemaking hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9806", + "equipment_slot": "0" + }, + { + "requirements": "{8,99}", + "shop_price": "99000", + "examine": "The cape worn by master woodcutters (Obtaining level 99 skill)", + "durability": null, + "name": "Woodcutting cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9807", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{8,99}", + "durability": null, + "name": "Woodcut. cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9808", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{8,99}", + "shop_price": "99000", + "examine": "Woodcutting skillcape hood.", + "durability": null, + "name": "Woodcutting hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9809", + "equipment_slot": "0" + }, + { + "requirements": "{19,99}", + "shop_price": "99000", + "examine": "The cape worn by master farmers.", + "durability": null, + "name": "Farming cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9810", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{19,99}", + "durability": null, + "name": "Farming cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9811", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{19,99}", + "shop_price": "99000", + "examine": "Farming skillcape hood.", + "durability": null, + "name": "Farming hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9812", + "equipment_slot": "0" + }, + { + "shop_price": "99000", + "examine": "The cape worn by only the most experienced adventurers.", + "durability": null, + "name": "Quest point cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9813", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "shop_price": "99000", + "examine": "Quest skillcape hood.", + "durability": null, + "name": "Quest point hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9814", + "equipment_slot": "0" + }, + { + "examine": "A woolly bobble hat.", + "durability": null, + "name": "Bobble hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "9815", + "equipment_slot": "0" + }, + { + "examine": "A woolly scarf.", + "durability": null, + "name": "Bobble scarf", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "9816", + "equipment_slot": "2" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak cape rack", + "archery_ticket_price": "0", + "id": "9817" + }, + { + "grand_exchange_price": "88", + "durability": null, + "name": "Teak cape rack", + "archery_ticket_price": "0", + "id": "9818" + }, + { + "grand_exchange_price": "120", + "durability": null, + "name": "M'gany cape rack", + "archery_ticket_price": "0", + "id": "9819" + }, + { + "grand_exchange_price": "136025", + "durability": null, + "name": "Gilded cape rack", + "archery_ticket_price": "0", + "id": "9820" + }, + { + "grand_exchange_price": "328598", + "durability": null, + "name": "Marble cape rack", + "archery_ticket_price": "0", + "id": "9821" + }, + { + "grand_exchange_price": "979747", + "durability": null, + "name": "Magical cape rack", + "archery_ticket_price": "0", + "id": "9822" + }, + { + "grand_exchange_price": "59", + "durability": null, + "name": "Oak costume box", + "archery_ticket_price": "0", + "id": "9823" + }, + { + "grand_exchange_price": "122", + "durability": null, + "name": "Teak costume box", + "archery_ticket_price": "0", + "id": "9824" + }, + { + "grand_exchange_price": "59", + "durability": null, + "name": "Mahogany cos box", + "archery_ticket_price": "0", + "id": "9825" + }, + { + "grand_exchange_price": "15", + "durability": null, + "name": "Oak armour case", + "archery_ticket_price": "0", + "id": "9826" + }, + { + "grand_exchange_price": "27", + "durability": null, + "name": "Teak armour case", + "archery_ticket_price": "0", + "id": "9827" + }, + { + "grand_exchange_price": "90", + "durability": null, + "name": "M'gany arm'r case", + "archery_ticket_price": "0", + "id": "9828" + }, + { + "grand_exchange_price": "103", + "durability": null, + "name": "Oak magic wardrobe", + "archery_ticket_price": "0", + "id": "9829" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak magic wardrobe", + "archery_ticket_price": "0", + "id": "9830" + }, + { + "grand_exchange_price": "127", + "durability": null, + "name": "Teak magic wardrobe", + "archery_ticket_price": "0", + "id": "9831" + }, + { + "grand_exchange_price": "13", + "durability": null, + "name": "Carved teak magic wardrobe", + "archery_ticket_price": "0", + "id": "9832" + }, + { + "grand_exchange_price": "135", + "durability": null, + "name": "Mahogany magic wardrobe", + "archery_ticket_price": "0", + "id": "9833" + }, + { + "grand_exchange_price": "137267", + "durability": null, + "name": "Gilded magic wardrobe", + "archery_ticket_price": "0", + "id": "9834" + }, + { + "grand_exchange_price": "341567", + "durability": null, + "name": "Marble magic wardrobe", + "archery_ticket_price": "0", + "id": "9835" + }, + { + "grand_exchange_price": "21", + "durability": null, + "name": "Oak toy box", + "archery_ticket_price": "0", + "id": "9836" + }, + { + "grand_exchange_price": "151", + "durability": null, + "name": "Teak toy box", + "archery_ticket_price": "0", + "id": "9837" + }, + { + "grand_exchange_price": "20", + "durability": null, + "name": "Mahogany toy box", + "archery_ticket_price": "0", + "id": "9838" + }, + { + "grand_exchange_price": "21", + "durability": null, + "name": "Oak treasure chest", + "archery_ticket_price": "0", + "id": "9839" + }, + { + "grand_exchange_price": "157", + "durability": null, + "name": "Teak treas' chest", + "archery_ticket_price": "0", + "id": "9840" + }, + { + "grand_exchange_price": "39", + "durability": null, + "name": "M'gany treas' chest", + "archery_ticket_price": "0", + "id": "9841" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3", + "examine": "A ready-to-assemble oak cape rack.", + "durability": null, + "name": "Oak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9843" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92", + "examine": "A ready-to-assemble teak cape rack..", + "durability": null, + "name": "Teak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9844" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "examine": "A ready-to-assemble mahogany cape rack.", + "durability": null, + "name": "M'gany cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9845" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "130900", + "examine": "A ready-to-assemble gilded mahogany rack.", + "durability": null, + "name": "Gilded cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9846" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "329500", + "examine": "A ready-to-assemble marble cape rack.", + "durability": null, + "name": "Marble cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9847" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1000000", + "examine": "A ready-to-assemble magic cape rack.", + "durability": null, + "name": "Magical cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9848" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "examine": "A ready-to-assemble oak toy box.", + "durability": null, + "name": "Oak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9849" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "165", + "examine": "A ready-to-assemble teak toy box.", + "durability": null, + "name": "Teak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9850" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "examine": "A ready-to-assemble mahogany toy box.", + "durability": null, + "name": "Mahogany toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9851" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "examine": "A ready-to-assemble oak magic wardrobe.", + "durability": null, + "name": "Oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9852" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak magic wardrobe.", + "durability": null, + "name": "Carved oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9853" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "133", + "examine": "A ready-to-assemble teak magic wardrobe.", + "durability": null, + "name": "Teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9854" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "examine": "A ready-to-assemble carved teak magic wardrobe.", + "durability": null, + "name": "Carved teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9855" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "129", + "examine": "A ready-to-assemble mahogany magic wardrobe.", + "durability": null, + "name": "Mahogany magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9856" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137700", + "examine": "A ready-to-assemble gilded mahogany magic wardrobe.", + "durability": null, + "name": "Gilded magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9857" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "335800", + "examine": "A ready-to-assemble marble magic wardrobe.", + "durability": null, + "name": "Marble magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9858" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "examine": "A ready-to-assemble oak armour case.", + "durability": null, + "name": "Oak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9859" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29", + "examine": "A ready-to-assemble teak armour case.", + "durability": null, + "name": "Teak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9860" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "88", + "examine": "A ready-to-assemble mahogany armour case.", + "durability": null, + "name": "M'gany arm'r case", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9861" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24", + "examine": "A ready-to-assemble oak treasure chest.", + "durability": null, + "name": "Oak treasure chest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9862" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "164", + "examine": "A ready-to-assemble teak treasure chest.", + "durability": null, + "name": "Teak treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9863" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "41", + "examine": "A ready-to-assemble mahogany treasure chest.", + "durability": null, + "name": "M'gany treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9864" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "62", + "durability": null, + "name": "Oak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9865" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "135", + "durability": null, + "name": "Teak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9866" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60", + "durability": null, + "name": "Mahogany cos box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9867" + }, + { + "durability": null, + "name": "Oak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9868" + }, + { + "durability": null, + "name": "Teak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9869" + }, + { + "durability": null, + "name": "M'gany cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9870" + }, + { + "durability": null, + "name": "Gilded cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9871" + }, + { + "durability": null, + "name": "Marble cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9872" + }, + { + "durability": null, + "name": "Magical cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9873" + }, + { + "durability": null, + "name": "Oak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9874" + }, + { + "durability": null, + "name": "Teak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9875" + }, + { + "durability": null, + "name": "Mahogany toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9876" + }, + { + "durability": null, + "name": "Oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9877" + }, + { + "durability": null, + "name": "Carved oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9878" + }, + { + "durability": null, + "name": "Teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9879" + }, + { + "durability": null, + "name": "Carved teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9880" + }, + { + "durability": null, + "name": "Mahogany magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9881" + }, + { + "durability": null, + "name": "Gilded magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9882" + }, + { + "durability": null, + "name": "Marble magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9883" + }, + { + "durability": null, + "name": "Oak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9884" + }, + { + "durability": null, + "name": "Teak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9885" + }, + { + "durability": null, + "name": "M'gany arm'r case", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9886" + }, + { + "durability": null, + "name": "Oak treasure chest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9887" + }, + { + "durability": null, + "name": "Teak treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9888" + }, + { + "durability": null, + "name": "M'gany treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9889" + }, + { + "durability": null, + "name": "Oak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9890" + }, + { + "durability": null, + "name": "Teak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9891" + }, + { + "durability": null, + "name": "Mahogany cos box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9892" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A lump that at some point might have been a gout tuber.", + "durability": null, + "name": "Goutweedy lump", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9901" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pile of gout tubers suitable for use in mountainous terrain.", + "durability": null, + "name": "Hardy gout tubers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9902" + }, + { + "destroy_message": "My Arm will probably have a spare copy.", + "examine": "Farmer Gricoller's Farming Manual.", + "durability": null, + "name": "Farming manual", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9903" + }, + { + "examine": "A book for sailors.", + "durability": null, + "name": "Sailing book", + "archery_ticket_price": "0", + "id": "9904" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9906", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9907", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9908", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9909", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9910", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9911", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9912", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A white destabiliser for use in a ghost buster.", + "durability": null, + "name": "White destabiliser", + "archery_ticket_price": "0", + "id": "9913", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A red destabiliser for use in a ghost buster.", + "durability": null, + "name": "Red destabiliser", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9914", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A blue destabiliser for use in a ghost buster.", + "durability": null, + "name": "Blue destabiliser", + "archery_ticket_price": "0", + "id": "9915", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A green destabiliser for use in a ghost buster.", + "durability": null, + "name": "Green destabiliser", + "archery_ticket_price": "0", + "id": "9916", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A yellow destabiliser for use in a ghost buster.", + "durability": null, + "name": "Yellow destabiliser", + "archery_ticket_price": "0", + "id": "9917", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A black destabiliser for use in a ghost buster.", + "durability": null, + "name": "Black destabiliser", + "archery_ticket_price": "0", + "id": "9918", + "equipment_slot": "5" + }, + { + "examine": "An angry-looking tree root.", + "durability": null, + "name": "Evil root", + "archery_ticket_price": "0", + "id": "9919" + }, + { + "remove_head": "true", + "destroy_message": "Players may get another from Diango in Draynor Village.", + "examine": "Better not light it!", + "durability": null, + "name": "Jack lantern mask", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9920", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Skeleton feet.", + "durability": null, + "name": "Skeleton boots", + "weight": "2", + "archery_ticket_price": "0", + "id": "9921", + "equipment_slot": "10" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some skeletal gloves.", + "durability": null, + "name": "Skeleton gloves", + "weight": "2", + "archery_ticket_price": "0", + "id": "9922", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Does my pelvis look big in this?", + "durability": null, + "name": "Skeleton leggings", + "weight": "2", + "archery_ticket_price": "0", + "id": "9923", + "equipment_slot": "7" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "remove_sleeves": "true", + "examine": "The shirt of a fully body skeleton costume.", + "durability": null, + "name": "Skeleton shirt", + "weight": "2", + "archery_ticket_price": "0", + "id": "9924", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scary skeleton mask.", + "durability": null, + "name": "Skeleton mask", + "weight": "2", + "archery_ticket_price": "0", + "id": "9925", + "equipment_slot": "0" + }, + { + "destroy_message": "You'll have to buy another one from Auguste on Entrana.", + "shop_price": "30000", + "examine": "This sapling is ready to be replanted in a tree patch.", + "durability": null, + "name": "Auguste's sapling", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9932" + }, + { + "examine": "An incomplete origami balloon.", + "durability": null, + "name": "Balloon structure", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9933" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Origami balloon", + "archery_ticket_price": "0", + "id": "9934" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Yellow balloon", + "archery_ticket_price": "0", + "id": "9935" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Blue balloon", + "archery_ticket_price": "0", + "id": "9936" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Red balloon", + "archery_ticket_price": "0", + "id": "9937" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Orange balloon", + "archery_ticket_price": "0", + "id": "9938" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Green balloon", + "archery_ticket_price": "0", + "id": "9939" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Purple balloon", + "archery_ticket_price": "0", + "id": "9940" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Pink balloon", + "archery_ticket_price": "0", + "id": "9941" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Black balloon", + "archery_ticket_price": "0", + "id": "9942" + }, + { + "examine": "A bag full of sand.", + "durability": null, + "name": "Sandbag", + "weight": "1", + "archery_ticket_price": "0", + "id": "9943", + "equipment_slot": "3" + }, + { + "destroy_message": "You'll have to visit Auguste on Entrana to get a new jacket.", + "remove_sleeves": "true", + "examine": "For all your flying needs.", + "durability": null, + "name": "Bomber jacket", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9944", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You'll have to visit Auguste on Entrana to get a new cap.", + "examine": "The red baron would be jealous.", + "durability": null, + "name": "Bomber cap", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9945", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "For better flying vision.", + "durability": null, + "name": "Cap and goggles", + "archery_ticket_price": "0", + "id": "9946", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A red coloured disk that's seen better days.", + "durability": null, + "name": "Old red disk", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9947" + }, + { + "requirements": "{21,99}", + "shop_price": "99000", + "examine": "The cape worn by master hunters.", + "durability": null, + "name": "Hunter cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9948", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,99}", + "durability": null, + "name": "Hunter cape(t)", + "archery_ticket_price": "0", + "id": "9949", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{21,99}", + "shop_price": "99000", + "examine": "Hunter skillcape hood.", + "durability": null, + "name": "Hunter hood", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9950", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Imp", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "9952" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9953" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9954" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9955" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9956" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9957" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9958" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9959" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9960" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9961" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9962" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9963" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9964" + }, + { + "examine": "It appears to be protecting the nest.", + "durability": null, + "name": "Giant eagle", + "archery_ticket_price": "0", + "id": "9974" + }, + { + "examine": "Aww, how cute. ", + "durability": null, + "name": "Rabbit", + "archery_ticket_price": "0", + "id": "9975" + }, + { + "examine": "Even more volatile than its vegetarian counterpart.", + "grand_exchange_price": "796", + "durability": null, + "name": "Red chinchompa", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "9977", + "bonuses": "0,0,0,0,70,0,0,0,0,0,0,0,15,0,0" + }, + { + "shop_price": "63", + "ge_buy_limit": "10000", + "examine": "This certainly needs cooking!", + "grand_exchange_price": "204", + "durability": null, + "name": "Raw bird meat", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "9978" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "204", + "durability": null, + "name": "Raw bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9979" + }, + { + "ge_buy_limit": "1000", + "examine": "A nicely roasted bird.", + "grand_exchange_price": "18", + "durability": null, + "name": "Roast bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9980" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "18", + "durability": null, + "name": "Roast bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9981" + }, + { + "durability": null, + "name": "Burnt bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9983" + }, + { + "shop_price": "63", + "ge_buy_limit": "1000", + "examine": "This certainly needs cooking!", + "grand_exchange_price": "130", + "durability": null, + "name": "Skewered bird meat", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "9984" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "130", + "durability": null, + "name": "Skewered bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9985" + }, + { + "ge_buy_limit": "1000", + "examine": "A slab of raw beast meat.", + "grand_exchange_price": "16", + "durability": null, + "name": "Raw beast meat", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9986" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "16", + "durability": null, + "name": "Raw beast meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9987" + }, + { + "ge_buy_limit": "1000", + "examine": "A delicious looking slab of roast beast.", + "grand_exchange_price": "42", + "durability": null, + "name": "Roast beast meat", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9988" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "42", + "durability": null, + "name": "Roast beast meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9989" + }, + { + "durability": null, + "name": "Burnt beast meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9991" + }, + { + "ge_buy_limit": "1000", + "examine": "Beast meat on a spit.", + "grand_exchange_price": "97", + "durability": null, + "name": "Skewered beast", + "tradeable": "true", + "weight": "3.5", + "archery_ticket_price": "0", + "id": "9992" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "97", + "durability": null, + "name": "Skewered beast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9993" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of chopped tomatoes with an extra kick.", + "grand_exchange_price": "324", + "durability": null, + "name": "Spicy tomato", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9994" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "324", + "durability": null, + "name": "Spicy tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9995" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of chopped beef with an extra kick.", + "grand_exchange_price": "263", + "durability": null, + "name": "Spicy minced meat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9996" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "263", + "durability": null, + "name": "Spicy minced meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9997" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of hunter potion.", + "grand_exchange_price": "566", + "durability": null, + "name": "Hunter potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9998" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "566", + "durability": null, + "name": "Hunter potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9999" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of hunter potion.", + "grand_exchange_price": "229", + "durability": null, + "name": "Hunter potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10000" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "229", + "durability": null, + "name": "Hunter potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10001" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of hunter potion.", + "grand_exchange_price": "159", + "durability": null, + "name": "Hunter potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10002" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "159", + "durability": null, + "name": "Hunter potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10003" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of hunter potion.", + "grand_exchange_price": "148", + "durability": null, + "name": "Hunter potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10004" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "148", + "durability": null, + "name": "Hunter potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10005" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A simple bird catcher./There's something caught in it.", + "grand_exchange_price": "2", + "durability": null, + "name": "Bird snare", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10006" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Bird snare", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10007" + }, + { + "requirements": "{21,27}", + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "If a creature goes inside, then the box should slam shut.", + "grand_exchange_price": "308", + "durability": null, + "name": "Box trap", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10008" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "308", + "durability": null, + "name": "Box trap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10009" + }, + { + "requirements": "{21,15}", + "shop_price": "24", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "For catching butterflies...", + "walk_anim": "1205", + "durability": null, + "weight": "0.2", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "weapon_interface": "10", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1", + "stand_anim": "813", + "name": "Butterfly net", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10010", + "stand_turn_anim": "1209" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Butterfly net", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10011" + }, + { + "requirements": "{21,15}", + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "It's got little holes at the top.", + "grand_exchange_price": "156", + "durability": null, + "name": "Butterfly jar", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10012" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156", + "durability": null, + "name": "Butterfly jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10013" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "143", + "examine": "There's a black warlock butterfly in here.", + "durability": null, + "name": "Black warlock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10014" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "143", + "durability": null, + "name": "Black warlock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10015" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "227", + "examine": "There's a snowy knight butterfly in here.", + "durability": null, + "name": "Snowy knight", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10016" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "227", + "durability": null, + "name": "Snowy knight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10017" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "180", + "examine": "There's a sapphire glacialis butterfly in here.", + "durability": null, + "name": "Sapphire glacialis", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10018" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "180", + "durability": null, + "name": "Sapphire glacialis", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10019" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1270", + "examine": "There's a ruby harvest butterfly in here.", + "durability": null, + "name": "Ruby harvest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10020" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1270", + "durability": null, + "name": "Ruby harvest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10021" + }, + { + "shop_price": "500", + "examine": "A very large, single leather glove", + "durability": null, + "name": "Falconer's glove", + "tradeable": "false", + "destroy": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "10023", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "500", + "turn90cw_anim": "5166", + "examine": "A very large, single leather glove", + "walk_anim": "5164", + "durability": null, + "destroy": "true", + "weight": "1.8", + "turn90ccw_anim": "5167", + "attack_speed": "4", + "turn180_anim": "5165", + "render_anim": "1283", + "equipment_slot": "3", + "stand_anim": "5160", + "name": "Falconer's glove", + "tradeable": "false", + "run_anim": "5168", + "archery_ticket_price": "0", + "id": "10024", + "stand_turn_anim": "5161", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0" + }, + { + "requirements": "{21,71}", + "shop_price": "720", + "ge_buy_limit": "100", + "examine": "A magical catching box.", + "grand_exchange_price": "784", + "durability": null, + "name": "Magic box", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10025" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "784", + "durability": null, + "name": "Magic box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10026" + }, + { + "shop_price": "720", + "examine": "A magical catching box.", + "grand_exchange_price": "743", + "durability": null, + "name": "Imp-in-a-box(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10027" + }, + { + "shop_price": "720", + "examine": "A magical catching box.", + "grand_exchange_price": "743", + "durability": null, + "name": "Imp-in-a-box(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10028" + }, + { + "requirements": "{21,31}", + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "Reduces the risk of hand severage when poking large, vicious carnivores.", + "durability": null, + "weight": "1", + "weapon_interface": "6", + "equipment_slot": "3", + "grand_exchange_price": "1", + "name": "Teasing stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10029", + "bonuses": "7,8,0,-4,0,-1,1,2,0,0,0,8,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Teasing stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10030" + }, + { + "requirements": "{21,27}", + "shop_price": "18", + "ge_buy_limit": "100", + "examine": "The snare will tighten around animals passing through.", + "grand_exchange_price": "1", + "durability": null, + "name": "Rabbit snare", + "tradeable": "true", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "10031" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Rabbit snare", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10032" + }, + { + "requirements": "{4,45}", + "ge_buy_limit": "20000", + "turn90cw_anim": "3177", + "walk_anim": "3177", + "durability": null, + "turn90ccw_anim": "3177", + "attack_speed": "4", + "weapon_interface": "19", + "turn180_anim": "3177", + "render_anim": "234", + "equipment_slot": "3", + "grand_exchange_price": "973", + "stand_anim": "3175", + "name": "Chinchompa", + "run_anim": "3178", + "archery_ticket_price": "0", + "id": "10033", + "stand_turn_anim": "3177", + "bonuses": "0,0,0,0,45,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,55}", + "ge_buy_limit": "20000", + "turn90cw_anim": "3177", + "examine": "Even more volatile than its vegetarian counterpart.", + "walk_anim": "3177", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "3177", + "attack_speed": "4", + "weapon_interface": "19", + "turn180_anim": "3177", + "render_anim": "234", + "equipment_slot": "3", + "grand_exchange_price": "1382", + "stand_anim": "3175", + "name": "Red chinchompa", + "tradeable": "true", + "run_anim": "3178", + "archery_ticket_price": "0", + "id": "10034", + "stand_turn_anim": "3177", + "bonuses": "0,0,0,0,70,0,0,0,0,0,0,0,0,0,15" + }, + { + "requirements": "{21,52}", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in polar areas.", + "grand_exchange_price": "449", + "durability": null, + "name": "Kyatt legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10035", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,10,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "449", + "durability": null, + "name": "Kyatt legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10036" + }, + { + "requirements": "{21,52}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in polar areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "272", + "name": "Kyatt top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10037", + "bonuses": "0,0,0,0,0,10,15,19,0,12,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "272", + "durability": null, + "name": "Kyatt top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10038" + }, + { + "remove_head": "true", + "requirements": "{21,52}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in polar areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "grand_exchange_price": "8338", + "name": "Kyatt hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10039", + "bonuses": "0,0,0,0,-1,4,5,3,0,4,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8338", + "durability": null, + "name": "Kyatt hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10040" + }, + { + "requirements": "{21,28}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "grand_exchange_price": "2889", + "durability": null, + "name": "Larupia legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10041", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,5,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2889", + "durability": null, + "name": "Larupia legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10042" + }, + { + "requirements": "{21,28}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "3232", + "name": "Larupia top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10043", + "bonuses": "0,0,0,0,0,10,15,19,0,12,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3232", + "durability": null, + "name": "Larupia top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10044" + }, + { + "remove_head": "true", + "requirements": "{21,28}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "grand_exchange_price": "7237", + "name": "Larupia hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10045", + "bonuses": "0,0,0,0,-1,4,5,3,0,4,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7237", + "durability": null, + "name": "Larupia hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10046" + }, + { + "requirements": "{21,38}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "7", + "grand_exchange_price": "266", + "name": "Graahk legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10047", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "266", + "durability": null, + "name": "Graahk legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10048" + }, + { + "requirements": "{21,38}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "252", + "name": "Graahk top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10049", + "bonuses": "0,0,0,0,0,10,15,19,0,12,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "252", + "durability": null, + "name": "Graahk top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10050" + }, + { + "remove_head": "true", + "requirements": "{21,38}", + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "grand_exchange_price": "8445", + "name": "Graahk headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10051", + "bonuses": "0,0,0,0,-1,4,5,3,0,4,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8445", + "durability": null, + "name": "Graahk headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10052" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in wooded areas.", + "grand_exchange_price": "3527", + "durability": null, + "name": "Wood camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10053", + "bonuses": "0,0,0,0,0,10,15,19,0,12,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3527", + "durability": null, + "name": "Wood camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10054" + }, + { + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in wooded areas.", + "grand_exchange_price": "3228", + "durability": null, + "name": "Wood camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10055", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3228", + "durability": null, + "name": "Wood camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10056" + }, + { + "requirements": "{21,4}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in jungle areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "315", + "name": "Jungle camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10057", + "bonuses": "0,0,0,0,0,10,15,19,0,12,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "315", + "durability": null, + "name": "Jungle camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10058" + }, + { + "requirements": "{21,4}", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in jungle areas.", + "grand_exchange_price": "462", + "durability": null, + "name": "Jungle camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10059", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "462", + "durability": null, + "name": "Jungle camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10060" + }, + { + "requirements": "{21,10}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "541", + "name": "Desert camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10061", + "bonuses": "0,0,0,0,0,10,15,19,0,12,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "541", + "durability": null, + "name": "Desert camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10062" + }, + { + "requirements": "{21,10}", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in desert areas.", + "grand_exchange_price": "910", + "durability": null, + "name": "Desert camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10063", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "910", + "durability": null, + "name": "Desert camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10064" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in polar areas.", + "grand_exchange_price": "7990", + "durability": null, + "name": "Polar camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10065", + "bonuses": "0,0,0,0,0,10,15,19,0,12,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7990", + "durability": null, + "name": "Polar camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10066" + }, + { + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in polar areas", + "grand_exchange_price": "8389", + "durability": null, + "name": "Polar camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10067", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8389", + "durability": null, + "name": "Polar camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10068" + }, + { + "requirements": "{21,40}", + "ge_buy_limit": "100", + "examine": "A surprisingly aerodynamic cape.", + "grand_exchange_price": "1140", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "weight": "-2.2", + "archery_ticket_price": "0", + "id": "10069", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1140", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10070" + }, + { + "requirements": "{21,66}", + "ge_buy_limit": "100", + "examine": "A really surprisingly aerodynamic cape.", + "grand_exchange_price": "1262", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "weight": "-4.5", + "archery_ticket_price": "0", + "id": "10071", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1262", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10072" + }, + { + "requirements": "{21,40}", + "examine": "A surprisingly aerodynamic cape.", + "grand_exchange_price": "951", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10073", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,66}", + "examine": "A really surprisingly aerodynamic cape.", + "grand_exchange_price": "881", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10074", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,54}", + "ge_buy_limit": "100", + "examine": "Made from dark kebbit fur, these are perfect for tasks of a stealthier nature.", + "grand_exchange_price": "1063", + "durability": null, + "name": "Gloves of silence", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10075", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1063", + "durability": null, + "name": "Gloves of silence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10076" + }, + { + "ge_buy_limit": "100", + "examine": "Attack at your own risk.", + "grand_exchange_price": "80", + "durability": null, + "name": "Spiky vambraces", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10077", + "bonuses": "0,0,0,0,4,2,2,1,0,0,1,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "80", + "durability": null, + "name": "Spiky vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10078" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "100", + "examine": "Made from 100% real dragonhide. Now with added spikiness.", + "grand_exchange_price": "1353", + "durability": null, + "name": "Green spiky vambs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10079", + "bonuses": "0,0,0,-10,8,3,2,4,2,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1353", + "durability": null, + "name": "Green spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10080" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "100", + "examine": "Made from 100% real dragonhide. Now with added spikiness.", + "grand_exchange_price": "1773", + "durability": null, + "name": "Blue spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10081", + "bonuses": "0,0,0,-10,9,4,3,5,4,0,4,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1773", + "durability": null, + "name": "Blue spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10082" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "100", + "examine": "Vambraces made from 100% real dragonhide. Now with added spikes.", + "grand_exchange_price": "1978", + "durability": null, + "name": "Red spiky vambs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10083", + "bonuses": "0,0,0,-10,10,5,4,6,6,0,5,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1978", + "durability": null, + "name": "Red spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10084" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "100", + "examine": "Vambraces made from 100% real dragonhide. Now with added spikiness.", + "grand_exchange_price": "2727", + "durability": null, + "name": "Black spiky vambs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10085", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2727", + "durability": null, + "name": "Black spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10086" + }, + { + "ge_buy_limit": "5000", + "examine": "Attractive to other birds and hunters alike.", + "grand_exchange_price": "20", + "durability": null, + "name": "Stripy feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10087" + }, + { + "shop_price": "3", + "ge_buy_limit": "5000", + "examine": "A vivid red feather.", + "grand_exchange_price": "23", + "durability": null, + "name": "Red feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10088" + }, + { + "ge_buy_limit": "5000", + "examine": "A cool blue feather.", + "grand_exchange_price": "27", + "durability": null, + "name": "Blue feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10089" + }, + { + "ge_buy_limit": "5000", + "examine": "A bright yellow feather.", + "grand_exchange_price": "36", + "durability": null, + "name": "Yellow feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10090" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "A fairly plain feather.", + "grand_exchange_price": "25", + "durability": null, + "name": "Orange feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10091" + }, + { + "ge_buy_limit": "100", + "examine": "It's a shabby-looking larupia fur.", + "grand_exchange_price": "1195", + "durability": null, + "name": "Tatty larupia fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10093" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1195", + "durability": null, + "name": "Tatty larupia fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10094" + }, + { + "ge_buy_limit": "100", + "examine": "It's a perfect-looking larupia fur.", + "grand_exchange_price": "4986", + "durability": null, + "name": "Larupia fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10095" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4986", + "durability": null, + "name": "Larupia fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10096" + }, + { + "ge_buy_limit": "100", + "examine": "It's a shabby-looking graahk fur.", + "grand_exchange_price": "28", + "durability": null, + "name": "Tatty graahk fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10097" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28", + "durability": null, + "name": "Tatty graahk fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10098" + }, + { + "ge_buy_limit": "100", + "examine": "It's a perfect-looking graahk fur.", + "grand_exchange_price": "7574", + "durability": null, + "name": "Graahk fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10099" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7574", + "durability": null, + "name": "Graahk fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10100" + }, + { + "ge_buy_limit": "100", + "examine": "It's a shabby-looking kyatt fur.", + "grand_exchange_price": "23", + "durability": null, + "name": "Tatty kyatt fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10101" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23", + "durability": null, + "name": "Tatty kyatt fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10102" + }, + { + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "It's a perfect-looking kyatt fur.", + "grand_exchange_price": "11100", + "durability": null, + "name": "Kyatt fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10103" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11100", + "durability": null, + "name": "Kyatt fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10104" + }, + { + "ge_buy_limit": "5000", + "examine": "These bone spikes are both very tough and very sharp.", + "grand_exchange_price": "154", + "durability": null, + "name": "Kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10105" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "154", + "durability": null, + "name": "Kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10106" + }, + { + "ge_buy_limit": "5000", + "examine": "These bone spikes are both very tough and very sharp.", + "grand_exchange_price": "1619", + "durability": null, + "name": "Long kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10107" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1619", + "durability": null, + "name": "Long kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10108" + }, + { + "ge_buy_limit": "5000", + "examine": "A kebbit-sized set of dentures.", + "grand_exchange_price": "894", + "durability": null, + "name": "Kebbit teeth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10109" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "894", + "durability": null, + "name": "Kebbit teeth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10110" + }, + { + "ge_buy_limit": "5000", + "examine": "Previously a kebbit-sized set of dentures.", + "grand_exchange_price": "947", + "durability": null, + "name": "Kebbit teeth dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10111" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "947", + "durability": null, + "name": "Kebbit teeth dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10112" + }, + { + "ge_buy_limit": "5000", + "examine": "More menacing when attached to the owner.", + "grand_exchange_price": "55", + "durability": null, + "name": "Kebbit claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10113" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "55", + "durability": null, + "name": "Kebbit claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10114" + }, + { + "ge_buy_limit": "100", + "examine": "Sleek, silent, and furry.", + "grand_exchange_price": "92", + "durability": null, + "name": "Dark kebbit fur", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10115" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92", + "durability": null, + "name": "Dark kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10116" + }, + { + "shop_price": "12", + "ge_buy_limit": "175", + "examine": "A thick fur for a cold climate.", + "grand_exchange_price": "3862", + "durability": null, + "name": "Polar kebbit fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10117" + }, + { + "ge_buy_limit": "175", + "grand_exchange_price": "3862", + "durability": null, + "name": "Polar kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10118" + }, + { + "ge_buy_limit": "100", + "examine": "Not actually from a weasel, but it is, at least, furry.", + "grand_exchange_price": "3", + "durability": null, + "name": "Feldip weasel fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10119" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3", + "durability": null, + "name": "Feldip weasel fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10120" + }, + { + "ge_buy_limit": "100", + "examine": "Common fur from a common kebbit.", + "grand_exchange_price": "1555", + "durability": null, + "name": "Common kebbit fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10121" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1555", + "durability": null, + "name": "Common kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10122" + }, + { + "ge_buy_limit": "100", + "examine": "Sandy coloured kebbit fur.", + "grand_exchange_price": "95", + "durability": null, + "name": "Desert devil fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10123" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "95", + "durability": null, + "name": "Desert devil fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10124" + }, + { + "ge_buy_limit": "100", + "examine": "Maybe this is why people think furry dice make you go faster.", + "grand_exchange_price": "8", + "durability": null, + "name": "Spotted kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10125" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Spotted kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10126" + }, + { + "ge_buy_limit": "100", + "examine": "Nature's equivalent of go-faster stripes.", + "grand_exchange_price": "69", + "durability": null, + "name": "Dashing kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10127" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "69", + "durability": null, + "name": "Dashing kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10128" + }, + { + "requirements": "{10,35}", + "ge_buy_limit": "100", + "examine": "A mighty Hunter weapon. One previous owner.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "19", + "name": "Barb-tail harpoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10129", + "bonuses": "9,4,-4,0,0,0,0,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Barb-tail harpoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10130" + }, + { + "requirements": "{21,24}", + "ge_buy_limit": "100", + "examine": "Not so lucky for the rabbit.", + "grand_exchange_price": "789", + "durability": null, + "name": "Strung rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10132", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "789", + "durability": null, + "name": "Strung rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10133" + }, + { + "ge_buy_limit": "100", + "examine": "This could be put on a string and worn for luck.", + "grand_exchange_price": "543", + "durability": null, + "name": "Rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10134" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "543", + "durability": null, + "name": "Rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10135" + }, + { + "shop_price": "48", + "ge_buy_limit": "10000", + "examine": "Well, this would certainly add some colour to a meal.", + "grand_exchange_price": "99", + "durability": null, + "name": "Rainbow fish", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10136" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "99", + "durability": null, + "name": "Rainbow fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10137" + }, + { + "ge_buy_limit": "20000", + "examine": "A colourful fish, attracted to colourful flies.", + "grand_exchange_price": "236", + "durability": null, + "name": "Raw rainbow fish", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10138" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "236", + "durability": null, + "name": "Raw rainbow fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10139" + }, + { + "durability": null, + "name": "Burnt rainbow fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10141" + }, + { + "requirements": "{0,30}-{4,30}-{6,30}", + "ge_buy_limit": "10000", + "examine": "A thick, foul-smelling, tar-like substance with a green tinge", + "grand_exchange_price": "28", + "durability": null, + "name": "Guam tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10142", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{0,50}-{4,50}-{6,50}", + "ge_buy_limit": "10000", + "examine": "A thick, foul-smelling, tar-like substance with an orange tinge.", + "grand_exchange_price": "12", + "durability": null, + "name": "Marrentill tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10143", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{0,60}-{4,60}-{6,60}", + "ge_buy_limit": "10000", + "examine": "A thick, foul-smelling, tar-like substance with a red tinge.", + "grand_exchange_price": "28", + "durability": null, + "name": "Tarromin tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10144", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{0,70}-{4,70}-{6,70}", + "ge_buy_limit": "10000", + "examine": "A dark, thick, foul-smelling, tar-like substance.", + "grand_exchange_price": "47", + "durability": null, + "name": "Harralander tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10145", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "5245", + "examine": "Slightly slimy, but kind of cute.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "6", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10146", + "stand_turn_anim": "823", + "bonuses": "0,19,0,0,29,0,0,0,0,0,0,31,0,0,0", + "requirements": "{0,50}-{4,50}-{6,50}", + "shop_price": "127", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Orange salamander" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "5245", + "examine": "Slightly slimy but certainly striking.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "27", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10147", + "stand_turn_anim": "823", + "bonuses": "0,37,0,0,47,0,0,0,0,0,0,49,0,0,0", + "requirements": "{0,60}-{4,60}-{6,60}", + "shop_price": "190", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Red salamander" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "5245", + "examine": "Slightly slimy and somewhat menacing.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "124", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10148", + "stand_turn_anim": "823", + "bonuses": "0,59,0,0,69,0,0,0,0,0,0,71,0,0,0", + "requirements": "{0,70}-{4,70}-{6,70}", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Black salamander" + }, + { + "ge_buy_limit": "2000", + "turn90cw_anim": "5245", + "examine": "A very slimy and generally disgusting green lizard.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "1802", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10149", + "stand_turn_anim": "823", + "bonuses": "0,10,0,0,20,0,0,0,0,0,0,22,0,0,0", + "requirements": "{0,30}-{4,30}-{6,30}", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Swamp lizard" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A noose on a stick.", + "walk_anim": "5250", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "5251", + "render_anim": "1279", + "equipment_slot": "3", + "grand_exchange_price": "1", + "stand_anim": "5254", + "name": "Noose wand", + "tradeable": "true", + "run_anim": "5253", + "archery_ticket_price": "0", + "id": "10150", + "stand_turn_anim": "5252" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Noose wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10151" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "100", + "shop_price": "1300", + "turn90cw_anim": "821", + "examine": "A weapon made of bone and wood.", + "walk_anim": "4226", + "durability": null, + "weight": "5", + "turn90ccw_anim": "822", + "attack_speed": "4", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "grand_exchange_price": "2496", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "tradeable": "true", + "name": "Hunters' crossbow", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "10156", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,55,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2496", + "durability": null, + "name": "Hunters' crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10157" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "1000", + "examine": "Bolts made from the spikes of a prickly kebbit.", + "grand_exchange_price": "28", + "durability": null, + "name": "Kebbit bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10158", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "1000", + "examine": "Bolts made from the spikes of a razor-backed kebbit.", + "grand_exchange_price": "352", + "durability": null, + "name": "Long kebbit bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10159", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,38", + "equipment_slot": "13" + }, + { + "durability": null, + "name": "Orange salamander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10160" + }, + { + "durability": null, + "name": "Red salamander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10161" + }, + { + "durability": null, + "name": "Black salamander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10162" + }, + { + "durability": null, + "name": "Swamp lizard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10163" + }, + { + "examine": "Probably a bit too big for fly fishing.", + "durability": null, + "name": "Eagle feather", + "archery_ticket_price": "0", + "id": "10167" + }, + { + "examine": "A cape made from giant eagle feathers.", + "durability": null, + "name": "Eagle cape", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10171", + "equipment_slot": "1" + }, + { + "examine": "A cheaply made fake beak.", + "durability": null, + "name": "Fake beak", + "archery_ticket_price": "0", + "id": "10172", + "equipment_slot": "0" + }, + { + "examine": "The title reads 'William Oddity's Guide to the Avian.", + "durability": null, + "name": "Bird book", + "archery_ticket_price": "0", + "id": "10173" + }, + { + "destroy_message": "You can obtain another metal feather from the camp", + "examine": "A small feather made out of some sort of metal. The detail is exquisite.", + "durability": null, + "name": "Metal feather", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10174" + }, + { + "destroy_message": "You can get another by inspecting the opening", + "examine": "An intricate feather crafted from a silver-coloured metal of some sort.", + "durability": null, + "name": "Silver feather", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10176" + }, + { + "destroy_message": "You can get another by taking from pedestal.", + "examine": "An intricate feather crafted from a bronze-coloured metal of some sort.", + "durability": null, + "name": "Bronze feather", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10177" + }, + { + "examine": "\"It looks like bird seed, but it's not quite right somehow.", + "durability": null, + "name": "Odd bird seed", + "archery_ticket_price": "0", + "id": "10178" + }, + { + "examine": "There's a feather glued to the front. \"Property of Arthur Artimus\".", + "durability": null, + "name": "Feathered journal", + "archery_ticket_price": "0", + "id": "10179" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10180" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10181" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10182" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10183" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10184" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10185" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10186" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10187" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10188" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10189" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10190" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10191" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10192" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10193" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10194" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10195" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10196" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10197" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10198" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10199" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10200" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10201" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10202" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10203" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10204" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10205" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10206" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10207" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10208" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10209" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10210" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10211" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10212" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10213" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10214" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10215" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10216" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10217" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10218" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10219" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10220" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10221" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10222" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10223" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10224" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10225" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10226" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10227" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10228" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10229" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10230" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10231" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10232" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10233" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10234" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10235" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10236" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10237" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10238" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10239" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10240" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10241" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10242" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10243" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10244" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10245" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10246" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10247" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10248" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10249" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10250" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10251" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10252" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10253" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10254" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10255" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10256" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10257" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10258" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10259" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10260" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10261" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10262" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10263" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10264" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10265" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10266" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10267" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10268" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10269" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10270" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10271" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10272" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10273" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10274" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10275" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10276" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10277" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10278" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10279" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A powerful bow made from willow.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "equipment_slot": "3", + "grand_exchange_price": "136", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10280", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,22,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,20}", + "durability": null, + "weight": "1.8", + "weapon_interface": "16", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Willow comp bow" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "136", + "durability": null, + "name": "Willow comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10281" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A powerful bow made from yew wood.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "equipment_slot": "3", + "grand_exchange_price": "876", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10282", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,49,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,40}", + "durability": null, + "weight": "1.8", + "weapon_interface": "16", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Yew comp bow" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "876", + "durability": null, + "name": "Yew comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10283" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A powerful bow made from magic wood.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "equipment_slot": "3", + "grand_exchange_price": "1268", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10284", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,71,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,50}", + "durability": null, + "weight": "1.3", + "weapon_interface": "16", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Magic comp bow" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1268", + "durability": null, + "name": "Magic comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10285" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "23600", + "name": "Rune helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10286", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "23600", + "durability": null, + "name": "Rune helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10287" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "20800", + "name": "Rune helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10288", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20800", + "durability": null, + "name": "Rune helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10289" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "20800", + "name": "Rune helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10290", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20800", + "durability": null, + "name": "Rune helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10291" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "21100", + "name": "Rune helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10292", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "21100", + "durability": null, + "name": "Rune helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10293" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "24900", + "name": "Rune helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10294", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "24900", + "durability": null, + "name": "Rune helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10295" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "31500", + "name": "Adamant helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10296", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "31500", + "durability": null, + "name": "Adamant helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10297" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "10100", + "name": "Adamant helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10298", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10100", + "durability": null, + "name": "Adamant helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10299" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "8797", + "name": "Adamant helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10300", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8797", + "durability": null, + "name": "Adamant helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10301" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An Adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "10900", + "name": "Adamant helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10302", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10900", + "durability": null, + "name": "Adamant helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10303" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "17100", + "name": "Adamant helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10304", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "17100", + "durability": null, + "name": "Adamant helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10305" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "20400", + "name": "Black helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10306", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20400", + "durability": null, + "name": "Black helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10307" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "7033", + "name": "Black helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10308", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7033", + "durability": null, + "name": "Black helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10309" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "7574", + "name": "Black helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10310", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7574", + "durability": null, + "name": "Black helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10311" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "10100", + "name": "Black helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10312", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10100", + "durability": null, + "name": "Black helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10313" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "10400", + "name": "Black helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10314", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10400", + "durability": null, + "name": "Black helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10315" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "8196", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10316", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8196", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10317" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "14700", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10318", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14700", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10319" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "8403", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10320", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8403", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10321" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "9230", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10322", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "9230", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10323" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "8197", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10324", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8197", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10325" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "112", + "durability": null, + "name": "Purple firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10326" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "167", + "durability": null, + "name": "White firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10327" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "White logs", + "archery_ticket_price": "0", + "id": "10328" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Purple logs", + "archery_ticket_price": "0", + "id": "10329" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "4", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "33900000", + "name": "3rd age range top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10330", + "bonuses": "0,0,0,-15,30,55,47,60,60,55,52,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "33900000", + "durability": null, + "name": "3rd age range top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10331" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "6", + "absorb": "0,4,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "20800000", + "name": "3rd age range legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10332", + "bonuses": "0,0,0,-10,17,31,25,33,30,31,25,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20800000", + "durability": null, + "name": "3rd age range legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10333" + }, + { + "remove_head": "true", + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "5000", + "examine": "Ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "6100000", + "name": "3rd age range coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10334", + "bonuses": "0,0,0,-2,9,4,7,10,5,8,12,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "6100000", + "durability": null, + "name": "3rd age range coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10335" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "1", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "7100000", + "name": "3rd age vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10336", + "bonuses": "0,0,0,-10,11,6,5,7,9,0,5,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7100000", + "durability": null, + "name": "3rd age vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10337" + }, + { + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "durability": null, + "weight": "2.5", + "absorb": "4,2,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "66500000", + "name": "3rd age robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10338", + "bonuses": "0,0,0,24,0,0,0,0,24,0,24,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "66500000", + "durability": null, + "name": "3rd age robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10339" + }, + { + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "durability": null, + "weight": "1", + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "31500000", + "name": "3rd age robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10340", + "bonuses": "0,0,0,19,0,0,0,0,19,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "31500000", + "durability": null, + "name": "3rd age robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10341" + }, + { + "remove_head": "true", + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "durability": null, + "absorb": "2,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21000000", + "name": "3rd age mage hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10342", + "bonuses": "0,0,0,8,0,0,0,0,8,0,12,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "21000000", + "durability": null, + "name": "3rd age mage hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10343" + }, + { + "lendable": "true", + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "20100000", + "durability": null, + "name": "3rd age amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10344", + "bonuses": "0,0,0,15,0,0,0,0,10,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20100000", + "durability": null, + "name": "3rd age amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10345" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "2", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "92800000", + "name": "3rd age platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10346", + "bonuses": "0,0,0,-25,-2,78,76,83,-5,75,25,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "92800000", + "durability": null, + "name": "3rd age platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10347" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "9", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "86200000", + "name": "3rd age platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10348", + "bonuses": "0,0,0,-20,0,96,108,113,-4,97,52,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "86200000", + "durability": null, + "name": "3rd age platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10349" + }, + { + "remove_head": "true", + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "1", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "41600000", + "name": "3rd age full helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10350", + "bonuses": "0,0,0,-5,-2,47,49,43,-3,48,12,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "41600000", + "durability": null, + "name": "3rd age full helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10351" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "2", + "absorb": "5,0,11", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "65100000", + "name": "3rd age kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10352", + "bonuses": "0,0,0,-10,-4,63,65,61,-3,63,60,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "65100000", + "durability": null, + "name": "3rd age kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10353" + }, + { + "ge_buy_limit": "100", + "examine": "A dragonstone amulet with 4 magic charges.", + "grand_exchange_price": "233100", + "durability": null, + "name": "Amulet of glory(t4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10354", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "233100", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10355" + }, + { + "examine": "A dragonstone amulet with 3 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10356", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10357" + }, + { + "examine": "A dragonstone amulet with 2 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10358", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10359" + }, + { + "examine": "A dragonstone amulet with 1 magic charge.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10360", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10361" + }, + { + "ge_buy_limit": "100", + "examine": "A very powerful dragonstone amulet with a nice trim.", + "grand_exchange_price": "223000", + "durability": null, + "name": "Amulet of glory(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10362", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "223000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10363" + }, + { + "ge_buy_limit": "2", + "examine": "An enchanted ruby amulet with a nice trim.", + "grand_exchange_price": "819400", + "durability": null, + "name": "Strength amulet(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10364", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,10,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "819400", + "durability": null, + "name": "Strength amulet(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10365" + }, + { + "ge_buy_limit": "5000", + "examine": "An enchanted sapphire amulet of magic.", + "grand_exchange_price": "128700", + "durability": null, + "name": "Amulet of magic(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10366", + "bonuses": "0,0,0,10,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "128700", + "durability": null, + "name": "Amulet of magic(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10367" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide vambraces.", + "grand_exchange_price": "116200", + "durability": null, + "name": "Zamorak bracers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10368", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "116200", + "durability": null, + "name": "Zamorak bracers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10369" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide body armour.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "155200", + "name": "Zamorak d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10370", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "155200", + "durability": null, + "name": "Zamorak d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10371" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide chaps.", + "durability": null, + "weight": "5", + "absorb": "0,4,2", + "equipment_slot": "7", + "grand_exchange_price": "35100", + "name": "Zamorak chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10372", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "35100", + "durability": null, + "name": "Zamorak chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10373" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide coif.", + "durability": null, + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "35900", + "name": "Zamorak coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10374", + "bonuses": "0,0,0,-1,7,4,7,10,4,8,8,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "35900", + "durability": null, + "name": "Zamorak coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10375" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide vambraces.", + "grand_exchange_price": "3181", + "durability": null, + "name": "Guthix bracers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10376", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3181", + "durability": null, + "name": "Guthix bracers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10377" + }, + { + "requirements": "{1,40}-{4,70}", + "shop_price": "13", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide body armour.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "39800", + "name": "Guthix dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10378", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "39800", + "durability": null, + "name": "Guthix dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10379" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide chaps.", + "durability": null, + "weight": "5", + "absorb": "0,4,2", + "equipment_slot": "7", + "grand_exchange_price": "7346", + "name": "Guthix chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10380", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7346", + "durability": null, + "name": "Guthix chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10381" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide coif.", + "durability": null, + "weight": "0.85", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "27500", + "name": "Guthix coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10382", + "bonuses": "0,0,0,-1,7,4,7,10,4,8,8,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "27500", + "durability": null, + "name": "Guthix coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10383" + }, + { + "requirements": "{1,70}-{4,40}", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide vambraces.", + "grand_exchange_price": "70800", + "durability": null, + "name": "Saradomin bracers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10384", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "70800", + "durability": null, + "name": "Saradomin bracers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10385" + }, + { + "requirements": "{1,40}-{4,70}", + "shop_price": "13000", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide body armour.", + "durability": null, + "destroy": "true", + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "164100", + "name": "Saradomin d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10386", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "164100", + "durability": null, + "name": "Saradomin d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10387" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide chaps.", + "grand_exchange_price": "36600", + "durability": null, + "name": "Saradomin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10388", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36600", + "durability": null, + "name": "Saradomin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10389" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide coif.", + "durability": null, + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "28000", + "name": "Saradomin coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10390", + "bonuses": "0,0,0,-1,7,4,7,10,4,8,8,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "28000", + "durability": null, + "name": "Saradomin coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10391" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A big 'do about nothing.", + "grand_exchange_price": "45400", + "durability": null, + "name": "A powdered wig", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10392", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "45400", + "durability": null, + "name": "A powdered wig", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10393" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "These'll help me stay alive.", + "grand_exchange_price": "448900", + "durability": null, + "name": "Flared trousers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10394", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "448900", + "durability": null, + "name": "Flared trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10395" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Alas, someone has slashed my pantaloons.", + "grand_exchange_price": "9863", + "durability": null, + "name": "Pantaloons", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10396", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "9863", + "durability": null, + "name": "Pantaloons", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10397" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A cap for wearing whil...zzzzzzzzz", + "grand_exchange_price": "276400", + "durability": null, + "name": "Sleeping cap", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10398", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "276400", + "durability": null, + "name": "Sleeping cap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10399" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant mans' black shirt.", + "grand_exchange_price": "921500", + "durability": null, + "name": "Black ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10400", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "921500", + "durability": null, + "name": "Black ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10401" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant black pair of pantaloons.", + "grand_exchange_price": "270700", + "durability": null, + "name": "Black ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10402", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "270700", + "durability": null, + "name": "Black ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10403" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant men's red shirt.", + "grand_exchange_price": "118600", + "durability": null, + "name": "Red ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10404", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "118600", + "durability": null, + "name": "Red ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10405" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant red pair of pantaloons.", + "grand_exchange_price": "39400", + "durability": null, + "name": "Red ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10406", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "39400", + "durability": null, + "name": "Red ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10407" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant mans' blue shirt.", + "grand_exchange_price": "134700", + "durability": null, + "name": "Blue ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10408", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "134700", + "durability": null, + "name": "Blue ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10409" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant pair of men's blue pantaloons", + "grand_exchange_price": "80700", + "durability": null, + "name": "Blue ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10410", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "80700", + "durability": null, + "name": "Blue ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10411" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant men's green shirt.", + "grand_exchange_price": "162600", + "durability": null, + "name": "Green ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10412", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "162600", + "durability": null, + "name": "Green ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10413" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant green pair of men's pantaloons.", + "grand_exchange_price": "36100", + "durability": null, + "name": "Green ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10414", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36100", + "durability": null, + "name": "Green ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10415" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant men's purple shirt.", + "grand_exchange_price": "116200", + "durability": null, + "name": "Purple ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10416", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "116200", + "durability": null, + "name": "Purple ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10417" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant purple pair of pantaloons.", + "grand_exchange_price": "73400", + "durability": null, + "name": "Purple ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10418", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "73400", + "durability": null, + "name": "Purple ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10419" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made ladies' elegant white blouse.", + "grand_exchange_price": "571500", + "durability": null, + "name": "White ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10420", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "571500", + "durability": null, + "name": "White ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10421" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant white skirt.", + "grand_exchange_price": "56600", + "durability": null, + "name": "White ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10422", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "56600", + "durability": null, + "name": "White ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10423" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant ladies' red blouse.", + "grand_exchange_price": "15000", + "durability": null, + "name": "Red ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10424", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "15000", + "durability": null, + "name": "Red ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10425" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant Red skirt.", + "grand_exchange_price": "7132", + "durability": null, + "name": "Red ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10426", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7132", + "durability": null, + "name": "Red ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10427" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made ladies' elegant blue blouse.", + "grand_exchange_price": "22200", + "durability": null, + "name": "Blue ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10428", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "22200", + "durability": null, + "name": "Blue ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10429" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant blue skirt.", + "grand_exchange_price": "12200", + "durability": null, + "name": "Blue ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10430", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "12200", + "durability": null, + "name": "Blue ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10431" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made ladies' elegant green blouse.", + "grand_exchange_price": "12300", + "durability": null, + "name": "Green ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10432", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "12300", + "durability": null, + "name": "Green ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10433" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant green skirt.", + "grand_exchange_price": "10300", + "durability": null, + "name": "Green ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10434", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10300", + "durability": null, + "name": "Green ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10435" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant ladies' purple blouse.", + "grand_exchange_price": "22800", + "durability": null, + "name": "Purple ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10436", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "22800", + "durability": null, + "name": "Purple ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10437" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant purple skirt.", + "grand_exchange_price": "16700", + "durability": null, + "name": "Purple ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10438", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "16700", + "durability": null, + "name": "Purple ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10439" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A Saradomin crozier.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "8611", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10440", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,6,0,0", + "requirements": "{5,60}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Saradomin crozier" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8611", + "durability": null, + "name": "Saradomin crozier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10441" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A Guthix crozier.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "2925", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10442", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,6,0,0", + "requirements": "{5,60}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Guthix crozier" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2925", + "durability": null, + "name": "Guthix crozier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10443" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A Zamorak crozier.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "2794", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10444", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,6,0,0", + "requirements": "{5,60}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Zamorak crozier" + }, + { + "attack_anims": "", + "ge_buy_limit": "2", + "grand_exchange_price": "2794", + "durability": null, + "name": "Zamorak crozier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10445" + }, + { + "requirements": "{5,40}", + "ge_buy_limit": "2", + "examine": "A Saradomin cloak.", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Saradomin cloak", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10446", + "bonuses": "0,0,0,1,0,3,3,3,3,3,3,0,3,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Saradomin cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10447" + }, + { + "requirements": "{5,40}", + "ge_buy_limit": "2", + "examine": "A Guthix cloak.", + "grand_exchange_price": "391000", + "durability": null, + "name": "Guthix cloak", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10448", + "bonuses": "0,0,0,1,0,3,3,3,3,3,3,0,3,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "391000", + "durability": null, + "name": "Guthix cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10449" + }, + { + "requirements": "{5,40}", + "ge_buy_limit": "2", + "examine": "A Zamorak cloak.", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Zamorak cloak", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10450", + "bonuses": "0,0,0,1,0,3,3,3,3,3,3,0,3,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Zamorak cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10451" + }, + { + "remove_head": "true", + "requirements": "{5,40}-{6,40}", + "ge_buy_limit": "2", + "examine": "A Saradomin mitre.", + "grand_exchange_price": "299200", + "durability": null, + "name": "Saradomin mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10452", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,5,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "299200", + "durability": null, + "name": "Saradomin mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10453" + }, + { + "remove_head": "true", + "requirements": "{5,40}-{6,40}", + "ge_buy_limit": "2", + "examine": "A Guthix mitre.", + "grand_exchange_price": "130300", + "durability": null, + "name": "Guthix mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10454", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,5,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "130300", + "durability": null, + "name": "Guthix mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10455" + }, + { + "remove_head": "true", + "requirements": "{5,40}-{6,40}", + "ge_buy_limit": "2", + "examine": "A Zamorak mitre.", + "durability": null, + "weight": "0.3", + "equipment_slot": "0", + "grand_exchange_price": "346500", + "name": "Zamorak mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10456", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,5,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "346500", + "durability": null, + "name": "Zamorak mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10457" + }, + { + "requirements": "{5,20}", + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "Blessed vestments of Saradomin.", + "grand_exchange_price": "121400", + "durability": null, + "name": "Saradomin robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10458", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "121400", + "durability": null, + "name": "Saradomin robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10459" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Zamorak Vestments.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "154700", + "name": "Zamorak robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10460", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "154700", + "durability": null, + "name": "Zamorak robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10461" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Blessed vestments of Guthix.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "75200", + "name": "Guthix robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10462", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "75200", + "durability": null, + "name": "Guthix robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10463" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Leggings from the Saradomin Vestments.", + "grand_exchange_price": "56300", + "durability": null, + "name": "Saradomin robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10464", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "56300", + "durability": null, + "name": "Saradomin robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10465" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Leggings from the Guthix Vestments.", + "grand_exchange_price": "56900", + "durability": null, + "name": "Guthix robe legs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10466", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "56900", + "durability": null, + "name": "Guthix robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10467" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Legs of the Zamorak Vestments.", + "grand_exchange_price": "79400", + "durability": null, + "name": "Zamorak robe legs", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "10468", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "79400", + "durability": null, + "name": "Zamorak robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10469" + }, + { + "requirements": "{5,60}", + "ge_buy_limit": "2", + "examine": "A Saradomin stole.", + "grand_exchange_price": "14000", + "durability": null, + "name": "Saradomin stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10470", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,10,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14000", + "durability": null, + "name": "Saradomin stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10471" + }, + { + "requirements": "{5,60}", + "ge_buy_limit": "2", + "examine": "A blessed stole.", + "grand_exchange_price": "3849", + "durability": null, + "name": "Guthix stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10472", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,10,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3849", + "durability": null, + "name": "Guthix stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10473" + }, + { + "requirements": "{5,60}", + "ge_buy_limit": "2", + "examine": "A Zamorak stole.", + "grand_exchange_price": "13700", + "durability": null, + "name": "Zamorak stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10474", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,10,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "13700", + "durability": null, + "name": "Zamorak stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10475" + }, + { + "ge_buy_limit": "1000", + "examine": "Remember to brush after eating!", + "grand_exchange_price": "22700", + "durability": null, + "name": "Purple sweets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10476" + }, + { + "durability": null, + "name": "Scroll", + "archery_ticket_price": "0", + "id": "10485", + "equipment_slot": "3" + }, + { + "shop_price": "1", + "examine": "An empty sack.", + "grand_exchange_price": "30", + "durability": null, + "name": "Empty sack", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10486" + }, + { + "turn90cw_anim": "821", + "examine": "Yup, definitely a chicken...an undead chicken.", + "walk_anim": "5364", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "12", + "turn180_anim": "5438", + "equip_audio": "3277", + "render_anim": "1171", + "equipment_slot": "3", + "stand_anim": "5363", + "name": "Undead chicken", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10487", + "stand_turn_anim": "823", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "destroy_message": "The Witch in Draynor supplies these bars.", + "examine": "An iron bar supplied by an insane old crone.", + "durability": null, + "name": "Selected iron", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10488", + "equipment_slot": "3" + }, + { + "destroy_message": "I can make another magnet using special bars. The Witch in Draynor supplies these bars.", + "examine": "A magnet designed for undead chicken use.", + "durability": null, + "name": "Bar magnet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10489" + }, + { + "destroy_message": "I can chop more wood from undead trees using my blessed axe.", + "examine": "Were they trying to escape just then?", + "durability": null, + "name": "Undead twigs", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10490" + }, + { + "examine": "It radiates purity but can still lop off heads.", + "durability": null, + "destroy": "true", + "weight": "1.1", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "equipment_slot": "3", + "destroy_message": "I can obtain a replacement axe from the Burthorpe Slayer Master.", + "name": "Blessed axe", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10491", + "bonuses": "-2,12,10,0,0,0,1,0,0,0,0,13,2,0,0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "These make no sense at all.", + "durability": null, + "name": "Research notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10492" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "They still make no sense, but look more meaningful now.", + "durability": null, + "name": "Translated notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10493" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Attach tab A to button B then fold along line C...", + "durability": null, + "name": "A pattern", + "archery_ticket_price": "0", + "id": "10494" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A desirable residence for discerning, undead chickens.", + "durability": null, + "name": "A container", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10495" + }, + { + "examine": "Shiny!", + "durability": null, + "name": "Polished buttons", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10496" + }, + { + "shop_price": "999", + "examine": "A bagged chicken ready to serve you, magnet in claw.", + "durability": null, + "destroy": "true", + "weight": "4.5", + "equip_audio": "3284", + "equipment_slot": "1", + "destroy_message": "I can buy a replacement from Ava in Draynor Manor; she will charge me 999 coins for this service.", + "name": "Ava's attractor", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10498", + "bonuses": "0,0,0,0,2,0,0,0,2,0,0,0,0,0,0" + }, + { + "shop_price": "999", + "examine": "A superior bagged chicken ready to serve you, magnet in claw.", + "durability": null, + "destroy": "true", + "weight": "4.5", + "equip_audio": "3284", + "equipment_slot": "1", + "destroy_message": "I can obtain a replacement for this from Ava in Draynor Manor. She will need 999 coins to buy the lower", + "name": "Ava's accumulator", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10499", + "bonuses": "0,0,0,0,4,0,1,0,4,0,0,0,0,0,0" + }, + { + "destroy_message": "I can obtain a replacement for this from the crone who lives west of the Port Phasmatys farm.", + "examine": "Allows the ghost farmer to talk to Alice - a breakthrough!", + "durability": null, + "name": "Crone-made amulet", + "tradeable": "false", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10500", + "equipment_slot": "2" + }, + { + "examine": "Made from snow. / It's a ball of snow! Uncanny. / How did this not melt in the box?", + "durability": null, + "name": "Snowball", + "archery_ticket_price": "0", + "id": "10501", + "weapon_interface": "18", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,1", + "equipment_slot": "3" + }, + { + "examine": "A gublinch frozen and crumbled into shards.", + "durability": null, + "name": "Gublinch shards", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "10506" + }, + { + "remove_head": "true", + "destroy_message": "You can reclaim this item from the place you found it. this item", + "examine": "A reindeer hat and a matching flashing nose.", + "durability": null, + "name": "Reindeer hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10507", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A wintumber tree for your player-owned house.", + "durability": null, + "name": "Wintumber tree", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "10508" + }, + { + "examine": "Made from snow. / It's a ball of snow! Uncanny. / How did this not melt in the box?", + "durability": null, + "name": "Snowball", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10509" + }, + { + "durability": null, + "name": "Snowball", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10510" + }, + { + "examine": "They're going to sing to you!", + "durability": null, + "name": "Zanaris choir", + "archery_ticket_price": "0", + "id": "10511" + }, + { + "destroy_message": "Unknown You can reclaim this item from the place you found it.", + "examine": "Some dry crackers.", + "durability": null, + "name": "Crackers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10513" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A block of tofu.", + "durability": null, + "name": "Tofu", + "archery_ticket_price": "0", + "id": "10514" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some meaty worms.", + "durability": null, + "name": "Worms", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10515" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10516" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10517" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10518" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10519" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10520" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10521" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10522" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10523" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10524" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10525" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10526" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10527" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10528" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10529" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10530" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Used to poison your enemies!", + "durability": null, + "name": "Green egg", + "archery_ticket_price": "0", + "id": "10531" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Will explode when fired.", + "durability": null, + "name": "Red egg", + "archery_ticket_price": "0", + "id": "10532" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Stun your foes!", + "durability": null, + "name": "Blue egg", + "archery_ticket_price": "0", + "id": "10533" + }, + { + "examine": "A yellow egg; it needs passing to the Healer to be poisoned!", + "durability": null, + "name": "Yellow egg", + "archery_ticket_price": "0", + "id": "10534" + }, + { + "examine": "A poisoned yellow egg; pass it to the Attacker for spikes to be added!", + "durability": null, + "name": "Poisoned egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10535" + }, + { + "examine": "A poisoned, spiky egg; pass to the defender for heating!", + "durability": null, + "name": "Spiked/pois. egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10536" + }, + { + "examine": "A heated, poisoned, spiky egg; pass to the Collector for loading.", + "durability": null, + "name": "Omega egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10537" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Defender horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10538" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some poisoned tofu.", + "durability": null, + "name": "Poisoned tofu", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10539" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some poisoned worms.", + "durability": null, + "name": "Poisoned worms", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10540" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A poisoned leg of meat.", + "durability": null, + "name": "Poisoned meat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10541" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(4)", + "archery_ticket_price": "0", + "id": "10542" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(3)", + "archery_ticket_price": "0", + "id": "10543" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(2)", + "archery_ticket_price": "0", + "id": "10544" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(1)", + "archery_ticket_price": "0", + "id": "10545" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A full healing vial.", + "durability": null, + "name": "Healing vial", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10546" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance Healer hat.", + "durability": null, + "name": "Healer hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "10547", + "absorb": "3,1,0", + "bonuses": "-5,-5,-5,7,-5,6,8,10,8,0,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance Fighter hat.", + "durability": null, + "name": "Fighter hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "10548", + "absorb": "1,0,3", + "bonuses": "5,5,5,-7,-7,30,32,28,-3,28,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance Runner hat.", + "durability": null, + "name": "Runner hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "10549", + "absorb": "1,0,3", + "bonuses": "0,0,0,0,0,30,32,27,1,30,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance ranger hat.", + "durability": null, + "name": "Ranger hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "10550", + "absorb": "0,3,1", + "bonuses": "-5,-5,-5,-5,7,7,10,11,5,9,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,40}", + "shop_price": "375", + "examine": "Penance Fighter torso armour.", + "durability": null, + "destroy": "true", + "weight": "4", + "absorb": "3,0,6", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Fighter torso", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10551", + "bonuses": "0,0,0,-30,0,66,85,62,-6,67,40,4,0,0,0" + }, + { + "requirements": "{1,40}", + "shop_price": "100", + "examine": "Boots made from a Penance Runner.", + "durability": null, + "name": "Runner boots", + "archery_ticket_price": "0", + "id": "10552", + "bonuses": "0,0,0,-3,-1,12,13,14,0,0,10,2,0,0,0", + "equipment_slot": "10" + }, + { + "requirements": "{1,40}", + "shop_price": "150", + "examine": "These gloves seem unbelievably light!", + "durability": null, + "name": "Penance gloves", + "weight": "-7", + "archery_ticket_price": "0", + "id": "10553", + "bonuses": "0,0,0,0,0,0,3,4,0,2,2,4,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,40}", + "shop_price": "150", + "examine": "These gloves seem unbelievably light!", + "durability": null, + "name": "Penance gloves", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "10554", + "bonuses": "0,0,0,0,0,0,3,4,0,2,2,4,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,40}", + "shop_price": "375", + "examine": "A skirt made from the skin of a Penance Ranger.", + "durability": null, + "name": "Penance skirt", + "weight": "3", + "archery_ticket_price": "0", + "id": "10555", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,16,26,21,28,19,27,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10556", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10557", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10558", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10559", + "equipment_slot": "1" + }, + { + "examine": "A horn for communication with your team members.", + "durability": null, + "name": "Collector horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10560" + }, + { + "destroy_message": "You will have to ask Captain Cain for another.", + "shop_price": "160", + "examine": "A book about the Barbarian Assault Queen.", + "durability": null, + "name": "Queen help book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10562" + }, + { + "requirements": "{1,50}-{2,50}", + "shop_price": "95000", + "ge_buy_limit": "10", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "22.6", + "absorb": "4,0,8", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "126800", + "name": "Granite body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10564", + "bonuses": "0,0,0,-22,-5,87,84,79,-6,97,45,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "126800", + "durability": null, + "name": "Granite body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10565" + }, + { + "examine": "A cape of fire.", + "durability": null, + "name": "Fire cape", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10566", + "bonuses": "1,1,1,1,1,11,11,11,11,11,11,4,2,0,0", + "equipment_slot": "1" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10567", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10568" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10569", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10570" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10571", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10572" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10573", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10574" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10575", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10576" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10577", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10578" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10579", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10580" + }, + { + "examine": "(Normal) A mystical-feeling dagger. (Poisoned) The twisted blade is covered with a nasty poison.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "name": "Keris", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10581", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0" + }, + { + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "durability": null, + "name": "Keris(p)", + "archery_ticket_price": "0", + "id": "10582", + "weapon_interface": "5", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "durability": null, + "name": "Keris(p+)", + "archery_ticket_price": "0", + "id": "10583", + "weapon_interface": "5", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "durability": null, + "name": "Keris(p++)", + "archery_ticket_price": "0", + "id": "10584", + "weapon_interface": "5", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "destroy_message": "You can obtain a replacement lamp from the high priest in Sophanem.", + "examine": "A mystical lamp, engraved with scenes of carnage.", + "durability": null, + "name": "Combat lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10586" + }, + { + "destroy_message": "I got this diary in Tarn's Lair, perhaps I can get another one there.", + "examine": "Tarn Razorlor's diary.", + "durability": null, + "name": "Tarn's diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10587" + }, + { + "examine": "Increases the wearer's Strength and Attack by 20% when fighting the undead.", + "durability": null, + "name": "Salve amulet(e)", + "weight": "1", + "archery_ticket_price": "0", + "id": "10588", + "bonuses": "0,0,0,0,0,3,3,3,0,0,3,0,3,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "requirements": "{1,50}-{2,50}", + "ge_buy_limit": "10", + "examine": "A stone helmet.", + "durability": null, + "weight": "4", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "28000", + "name": "Granite helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10589", + "bonuses": "0,0,0,-9,-7,31,33,29,-1,39,9,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "28000", + "durability": null, + "name": "Granite helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10590" + }, + { + "examine": "A terrifying dog beast.", + "durability": null, + "name": "Terror dog", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "10591" + }, + { + "destroy_message": "You can make another with tanned leather and a mahogany plank.", + "examine": "Small drums.", + "durability": null, + "name": "Penguin bongos", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10592" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Every song needs a cowbell.", + "durability": null, + "name": "Cowbells", + "weight": "2", + "archery_ticket_price": "0", + "id": "10593" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A book about clockwork mechanisms.", + "durability": null, + "name": "Clockwork book", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10594" + }, + { + "destroy_message": "You'll have to make another one at your house. Speak to Larry to learn how to make one.", + "examine": "A clockwork penguin suit.", + "durability": null, + "name": "Clockwork suit", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10595" + }, + { + "destroy_message": "You'll have to make another one at your house. Speak to Larry to learn how to make one.", + "examine": "A clockwork penguin suit.", + "durability": null, + "name": "Clockwork suit", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10596" + }, + { + "destroy_message": "You will need to speak to Noodle to get another.", + "examine": "So you can be a penguin too!", + "durability": null, + "name": "Kgp id card", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10600" + }, + { + "shop_price": "15000", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10601", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "shop_price": "15000", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10602", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "shop_price": "15000", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10603", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Make your foes cower by wearing a skull as a helmet!", + "durability": null, + "weight": "1.3", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "25569", + "name": "Skeletal helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10604", + "bonuses": "0,0,0,2,-2,10,9,11,3,0,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "examine": "Mystical robes.", + "grand_exchange_price": "3932123", + "durability": null, + "name": "Infinity top", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "10605", + "absorb": "3,1,0", + "bonuses": "0,0,0,22,0,0,0,0,22,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "lendable": "true", + "examine": "A wooden helmet.", + "grand_exchange_price": "5623", + "durability": null, + "name": "Splitbark helm", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10606", + "absorb": "3,1,0", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "They seem to be not quite of this world...", + "durability": null, + "name": "Ghostly boots", + "archery_ticket_price": "0", + "id": "10607", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "1000", + "examine": "A mystical hat.", + "durability": null, + "name": "Moonclan hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "10608", + "bonuses": "0,0,0,3,-5,3,3,3,3,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10609", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "10610", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "Torso armour from the order of the Void Knights.", + "durability": null, + "name": "Void knight top", + "tradeable": "false", + "weight": "6.5", + "archery_ticket_price": "0", + "id": "10611", + "bonuses": "0,0,0,0,0,40,40,40,40,40,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue mask", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "10612", + "bonuses": "0,0,0,0,0,5,5,5,5,5,0,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Protective headwear made from crabs. Better than it sounds.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "24661", + "name": "Rock-shell helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10613", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A helm fit for any Fremennik ranger.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "35640", + "name": "Spined helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10614", + "bonuses": "-6,-6,-6,-6,6,6,6,6,6,0,0,0,0,0,0" + }, + { + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1021", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10615", + "equipment_slot": "0" + }, + { + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1021", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10616", + "equipment_slot": "0" + }, + { + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1021", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10617", + "equipment_slot": "0" + }, + { + "shop_price": "3840", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "4595", + "name": "White platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10618", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,0,0,1,0,0" + }, + { + "shop_price": "10000", + "examine": "An initiate Temple Knight's Armour.", + "durability": null, + "weight": "8", + "absorb": "1,0,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "5821", + "name": "Initiate hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10619", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,0,0,6,0,0" + }, + { + "shop_price": "12000", + "examine": "A Proselyte Temple Knight's armour.", + "durability": null, + "weight": "8.6", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "6960", + "name": "Proselyte hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10620", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,0,0,8,0,0" + }, + { + "remove_sleeves": "true", + "examine": "A thick heavy leather top.", + "durability": null, + "name": "Mourner top", + "archery_ticket_price": "0", + "id": "10621", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in polar areas.", + "grand_exchange_price": "216", + "durability": null, + "name": "Kyatt top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10622", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "grand_exchange_price": "1793", + "durability": null, + "name": "Larupia top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10623", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "examine": "This should make me harder to spot in desert areas.", + "grand_exchange_price": "246", + "durability": null, + "name": "Graahk top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10624", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in wooded areas.", + "grand_exchange_price": "3883", + "durability": null, + "name": "Wood camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10625", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in jungle areas.", + "grand_exchange_price": "325", + "durability": null, + "name": "Jungle camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10626", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in desert areas.", + "grand_exchange_price": "606", + "durability": null, + "name": "Desert camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10627", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in polar areas.", + "grand_exchange_price": "5614", + "durability": null, + "name": "Polar camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10628", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "A mime would wear this.", + "durability": null, + "name": "Mime mask", + "archery_ticket_price": "0", + "id": "10629", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "Very posh!", + "durability": null, + "name": "Princess blouse", + "weight": "2", + "archery_ticket_price": "0", + "id": "10630", + "equipment_slot": "4" + }, + { + "examine": "Aside from the braaaains on the lapel, it's still quite good.", + "durability": null, + "name": "Zombie shirt", + "archery_ticket_price": "0", + "id": "10631", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Examine what?", + "durability": null, + "name": "Camo top", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "10632", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "A leather strapped top.", + "durability": null, + "name": "Lederhosen top", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "10633", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "I feel closer to the gods when I am wearing this. (Top) If a shade had knees, this would keep them nice and warm. (Bottom)", + "durability": null, + "name": "Shade robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "10634", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "450", + "examine": "The cape worn by members of the Legends Guild.", + "durability": null, + "name": "Cape of legends", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10635", + "bonuses": "0,0,0,0,0,7,7,7,7,7,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "lendable": "true", + "shop_price": "90000", + "examine": "A cape woven of obsidian plates.", + "grand_exchange_price": "38500", + "durability": null, + "name": "Obsidian cape", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10636", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A cape of fire.", + "durability": null, + "name": "Fire cape", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10637", + "bonuses": "1,1,1,1,1,11,11,11,11,11,0,4,2,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "50", + "examine": "Ooohhh look at the pretty colours...", + "durability": null, + "name": "Team-1 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10638", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{0,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of attack.", + "durability": null, + "name": "Attack cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10639", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{2,99}", + "shop_price": "99000", + "examine": "The cape only worn by the strongest people.", + "durability": null, + "name": "Strength cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10640", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{1,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of the art of Defence.", + "durability": null, + "name": "Defence cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10641", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{4,99}", + "shop_price": "99000", + "examine": "The cape worn by master archers.", + "durability": null, + "name": "Ranging cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10642", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{5,99}", + "shop_price": "99000", + "examine": "The cape worn by the most pious of heroes.", + "durability": null, + "name": "Prayer cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10643", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{6,99}", + "shop_price": "99000", + "examine": "The cape worn by the most powerful mages.", + "durability": null, + "name": "Magic cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10644", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{20,99}", + "shop_price": "99000", + "examine": "The cape worn by master runecrafters.", + "durability": null, + "name": "Runecraft cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10645", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,99}", + "shop_price": "99000", + "examine": "The cape worn by master hunters.", + "durability": null, + "name": "Hunter cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10646", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{3,99}", + "shop_price": "99000", + "examine": "The cape worn by well-constituted adventurers.", + "durability": null, + "name": "Hitpoints cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10647", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{16,99}", + "shop_price": "99000", + "examine": "The cape worn by the most agile of heroes.", + "durability": null, + "name": "Agility cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10648", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{15,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled at the art of herblore.", + "durability": null, + "name": "Herblore cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10649", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{17,99}", + "shop_price": "99000", + "examine": "The cape worn by master thieves.", + "durability": null, + "name": "Thieving cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10650", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{12,99}", + "shop_price": "99000", + "examine": "The cape worn by master craftworkers.", + "durability": null, + "name": "Crafting cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10651", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{9,99}", + "shop_price": "99000", + "examine": "The cape worn by the best of fletchers.", + "durability": null, + "name": "Fletching cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10652", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{18,99}", + "shop_price": "99000", + "examine": "The cape worn by slayer masters.", + "durability": null, + "name": "Slayer cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10653", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{22,99}", + "shop_price": "99000", + "examine": "The cape worn by master builders.", + "durability": null, + "name": "Construct. cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10654", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{14,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled miners.", + "durability": null, + "name": "Mining cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10655", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{13,99}", + "shop_price": "99000", + "examine": "The cape worn by master smiths.", + "durability": null, + "name": "Smithing cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10656", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{10,99}", + "shop_price": "99000", + "examine": "The cape worn by the best fishermen.", + "durability": null, + "name": "Fishing cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10657", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{7,99}", + "shop_price": "99000", + "examine": "The cape worn by the world's best chefs.", + "durability": null, + "name": "Cooking cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10658", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{11,99}", + "shop_price": "99000", + "examine": "The cape worn by master firelighters.", + "durability": null, + "name": "Firemaking cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10659", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{8,99}", + "shop_price": "99000", + "examine": "The cape worn by master woodcutters (Obtaining level 99 skill)", + "durability": null, + "name": "Woodcutting cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10660", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{19,99}", + "shop_price": "99000", + "examine": "The cape worn by master farmers.", + "durability": null, + "name": "Farming cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10661", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "99000", + "examine": "The cape worn by only the most experienced adventurers.", + "durability": null, + "name": "Quest point cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10662", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A surprisingly aerodynamic cape.", + "grand_exchange_price": "951", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10663", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A really surprisingly aerodynamic cape.", + "grand_exchange_price": "881", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10664", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{1,10}", + "examine": "A black kitesheild with a heraldic design.", + "grand_exchange_price": "15249", + "durability": null, + "name": "Black shield(h1)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10665", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "16339", + "name": "Adamant shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10666", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "35300", + "durability": null, + "name": "Rune shield(h1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10667", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black kiteshield with a heraldic design.", + "grand_exchange_price": "9751", + "durability": null, + "name": "Black shield(h2)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10668", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3353", + "name": "Adamant shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10669", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "31903", + "durability": null, + "name": "Rune shield(h2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10670", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black shield with a heraldic design.", + "grand_exchange_price": "6791", + "durability": null, + "name": "Black shield(h3)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10671", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "5566", + "name": "Adamant shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10672", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "32082", + "durability": null, + "name": "Rune shield(h3)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10673", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black shield with a heraldic design.", + "grand_exchange_price": "5159", + "durability": null, + "name": "Black shield(h4)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10674", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3219", + "name": "Adamant shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10675", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "32351", + "durability": null, + "name": "Rune shield(h4)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10676", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black shield with a heraldic design.", + "grand_exchange_price": "8451", + "durability": null, + "name": "Black shield(h5)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10677", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "5905", + "name": "Adamant shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10678", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "35200", + "durability": null, + "name": "Rune shield(h5)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10679", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "grand_exchange_price": "67430", + "durability": null, + "name": "Studded body (g)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10680", + "absorb": "0,3,1", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "grand_exchange_price": "22400", + "durability": null, + "name": "Studded body (t)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10681", + "absorb": "0,3,1", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body(g)", + "archery_ticket_price": "0", + "id": "10682", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body (t)", + "archery_ticket_price": "0", + "id": "10683", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body (g)", + "archery_ticket_price": "0", + "id": "10684", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body (t)", + "archery_ticket_price": "0", + "id": "10685", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "I can practise magic better in this.", + "durability": null, + "name": "Wizard robe (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10686", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "I can do magic better in this.", + "durability": null, + "name": "Wizard robe (t)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10687", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,20}-{6,40}", + "examine": "Enchanted Wizards robes.", + "durability": null, + "weight": "1", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "72800", + "name": "Enchanted top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10688", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "examine": "Slightly magical boots.", + "grand_exchange_price": "763602", + "durability": null, + "name": "Wizard boots", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10689", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "requirements": "{1,10}", + "examine": "Black platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "90744", + "name": "Black platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10690", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,0,0,0,0,0" + }, + { + "requirements": "{1,10}", + "examine": "Black platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "230800", + "name": "Black platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10691", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,0,0,0,0,0" + }, + { + "lendable": "true", + "examine": "Your money or your life!", + "grand_exchange_price": "92519", + "durability": null, + "name": "Highwayman mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10692", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "64066", + "durability": null, + "name": "Blue beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "10693", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Parlez-vous francais?(Do you speak French?)", + "grand_exchange_price": "158274", + "durability": null, + "name": "Black beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "10694", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "281900", + "durability": null, + "name": "White beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "10695", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Lightweight boots ideal for rangers.", + "grand_exchange_price": "11781186", + "durability": null, + "name": "Ranger boots", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10696", + "bonuses": "0,0,0,-10,8,2,3,4,2,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "79300", + "name": "Adam platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10697", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,0,0,0,0,0" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "207912", + "name": "Adam platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10698", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "22022", + "durability": null, + "name": "Black helm (h1)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10699", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "11700", + "durability": null, + "name": "Black helm (h2)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10700", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "10424", + "durability": null, + "name": "Black helm (h3)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10701", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "12717", + "durability": null, + "name": "Black helm (h4)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10702", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "17852", + "durability": null, + "name": "Black helm (h5)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10703", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "30298", + "durability": null, + "name": "Rune helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10704", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "26127", + "durability": null, + "name": "Rune helm (h2)", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10705", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "37333", + "durability": null, + "name": "Rune helm (h3)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10706", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "29600", + "durability": null, + "name": "Rune helm (h4)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10707", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "41325", + "durability": null, + "name": "Rune helm (h5)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10708", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "28407", + "name": "Adamant helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10709", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "9839", + "name": "Adamant helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10710", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "8485", + "name": "Adamant helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10711", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An Adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "10774", + "name": "Adamant helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10712", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "17390", + "name": "Adamant helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10713", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10714", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10715", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10716", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10717", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10718", + "equipment_slot": "4" + }, + { + "examine": "A very powerful dragonstone amulet.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10719", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "A cape from the almighty god Guthix.", + "durability": null, + "name": "Guthix cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10720", + "bonuses": "0,0,0,10,0,1,1,2,10,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "examine": "Now that's just silly.", + "durability": null, + "name": "Frog mask", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10721", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A reindeer hat and a matching flashing nose.", + "durability": null, + "name": "Reindeer hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10722" + }, + { + "remove_head": "true", + "destroy_message": "You may get another from Diango in Draynor Village.", + "examine": "Better not light it!", + "durability": null, + "name": "Jack lantern mask", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10723", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Skeleton feet.", + "durability": null, + "name": "Skeleton boots", + "weight": "2", + "archery_ticket_price": "0", + "id": "10724", + "equipment_slot": "10" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some skeletal gloves.", + "durability": null, + "name": "Skeleton gloves", + "weight": "2", + "archery_ticket_price": "0", + "id": "10725", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Does my pelvis look big in this?", + "durability": null, + "name": "Skeleton leggings", + "weight": "2", + "archery_ticket_price": "0", + "id": "10726", + "equipment_slot": "7" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "remove_sleeves": "true", + "examine": "The shirt of a fully body skeleton costume.", + "durability": null, + "name": "Skeleton shirt", + "weight": "2", + "archery_ticket_price": "0", + "id": "10727", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scary skeleton mask.", + "durability": null, + "name": "Skeleton mask", + "weight": "2", + "archery_ticket_price": "0", + "id": "10728", + "equipment_slot": "0" + }, + { + "examine": "A ring given to you by the Easter Bunny.", + "durability": null, + "name": "Easter ring", + "archery_ticket_price": "0", + "id": "10729" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10730" + }, + { + "examine": "Alas...I hardly knew him.", + "durability": null, + "name": "Zombie head", + "archery_ticket_price": "0", + "id": "10731" + }, + { + "turn90cw_anim": "821", + "examine": "Perhaps not the most powerful weapon in RuneScape.", + "walk_anim": "1830", + "durability": null, + "weight": "0.4", + "turn90ccw_anim": "822", + "attack_speed": "4", + "weapon_interface": "12", + "turn180_anim": "1830", + "render_anim": "182", + "equipment_slot": "3", + "fun_weapon": "true", + "stand_anim": "1832", + "name": "Rubber chicken", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10732", + "stand_turn_anim": "823", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "examine": "A gift from Santa.", + "durability": null, + "name": "Yo-yo", + "archery_ticket_price": "0", + "id": "10733" + }, + { + "examine": "A rabbit-like adornment.", + "durability": null, + "name": "Bunny ears", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10734", + "equipment_slot": "0" + }, + { + "turn90cw_anim": "821", + "examine": "It's a Scythe.", + "walk_anim": "819", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "820", + "render_anim": "1383", + "equipment_slot": "3", + "stand_anim": "847", + "name": "Scythe", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10735", + "stand_turn_anim": "823", + "bonuses": "3,8,3,0,0,0,3,1,0,0,0,10,0,0,0" + }, + { + "examine": "An enchanted ruby amulet with a nice trim.", + "grand_exchange_price": "443800", + "durability": null, + "name": "Strength amulet(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10736", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,10,0,0,0", + "equipment_slot": "2" + }, + { + "examine": "An enchanted sapphire amulet of magic.", + "grand_exchange_price": "67158", + "durability": null, + "name": "Amulet of magic(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10738", + "bonuses": "0,0,0,10,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "A big 'do about nothing.", + "grand_exchange_price": "36879", + "durability": null, + "name": "A powdered wig", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10740", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "These'll help me stay alive.", + "grand_exchange_price": "559284", + "durability": null, + "name": "Flared trousers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10742", + "equipment_slot": "7" + }, + { + "lendable": "true", + "examine": "Alas, someone has slashed my pantaloons.", + "grand_exchange_price": "12022", + "durability": null, + "name": "Pantaloons", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10744", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "A cap for wearing whil...zzzzzzzzz", + "grand_exchange_price": "376084", + "durability": null, + "name": "Sleeping cap", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10746", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10748", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10750", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10752", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10754", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10756", + "equipment_slot": "4" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "56600", + "durability": null, + "name": "Red boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10758", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "20300", + "durability": null, + "name": "Orange boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10760", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "59940", + "durability": null, + "name": "Green boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10762", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "54236", + "durability": null, + "name": "Blue boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10764", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "56495", + "durability": null, + "name": "Black boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10766", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A minimalist's hat.", + "grand_exchange_price": "114319", + "durability": null, + "name": "Red headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10768", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A minimalist's hat.", + "grand_exchange_price": "41778", + "durability": null, + "name": "Black headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10770", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A minimalist's hat.", + "grand_exchange_price": "21764", + "durability": null, + "name": "Brown headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10772", + "equipment_slot": "0" + }, + { + "examine": "Shiver me timbers!", + "grand_exchange_price": "83200", + "durability": null, + "name": "Pirate's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10774", + "equipment_slot": "0" + }, + { + "examine": "Rune platebody in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "647800", + "name": "Zamorak platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10776", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody in the colours of Saradomin.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "1097689", + "name": "Saradomin plate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10778", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody in the colours of Guthix.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "241600", + "name": "Guthix platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10780", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody with complete gold trim & plating.", + "durability": null, + "weight": "10", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "1653821", + "name": "Gilded platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10782", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "examine": "Blessed vestments of Saradomin.", + "grand_exchange_price": "106389", + "durability": null, + "name": "Saradomin robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10784", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Zamorak Vestments.", + "grand_exchange_price": "151000", + "durability": null, + "name": "Zamorak robe top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10786", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blessed vestments of Guthix.", + "grand_exchange_price": "80181", + "durability": null, + "name": "Guthix robe top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10788", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Zamorak blessed dragonhide body armour.", + "grand_exchange_price": "84966", + "durability": null, + "name": "Zamorak d'hide", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "10790", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "13000", + "examine": "Saradomin blessed dragonhide body armour.", + "durability": null, + "destroy": "true", + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "92762", + "name": "Saradomin d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10792", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,0,0,0,0,0" + }, + { + "shop_price": "13", + "examine": "Guthix blessed dragonhide body armour.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "22384", + "name": "Guthix dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10794", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,0,0,0,0,0" + }, + { + "lendable": "true", + "examine": "Endorsed by Robin Hood.", + "grand_exchange_price": "3070557", + "durability": null, + "name": "Robin hood hat", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10796", + "bonuses": "0,0,0,-10,8,4,6,8,4,4,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "Rune platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "231400", + "name": "Rune platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10798", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "61100", + "name": "Rune platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10800", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "lendable": "true", + "examine": "All for one and one for all!", + "grand_exchange_price": "56677", + "durability": null, + "name": "Tan cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10802", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "All for one and one for all!", + "grand_exchange_price": "18942", + "durability": null, + "name": "Dark cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10804", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "All for one and one for all!", + "grand_exchange_price": "421305", + "durability": null, + "name": "Black cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10806", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "1000", + "examine": "Arctic Pine logs prepared with sacred oil for a funeral pyre", + "grand_exchange_price": "3453", + "durability": null, + "name": "Arctic pyre logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10808" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3453", + "durability": null, + "name": "Arctic pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10809" + }, + { + "ge_buy_limit": "25000", + "examine": "Log cut from an arctic pine.", + "grand_exchange_price": "90", + "durability": null, + "name": "Arctic pine logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10810", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "90", + "durability": null, + "name": "Arctic pine logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10811" + }, + { + "ge_buy_limit": "1000", + "examine": "Used to repair bridges.", + "grand_exchange_price": "18", + "durability": null, + "name": "Split log", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10812" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "18", + "durability": null, + "name": "Split log", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10813" + }, + { + "shop_price": "120", + "ge_buy_limit": "1000", + "examine": "I can spin this into rope.", + "grand_exchange_price": "113", + "durability": null, + "name": "Hair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10814" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "113", + "durability": null, + "name": "Hair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10815" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "I need to cook this.", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw yak meat", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10816" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw yak meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10817" + }, + { + "shop_price": "50", + "ge_buy_limit": "5000", + "examine": "Thakkrad, of Neitiznot, can cure this.", + "grand_exchange_price": "301", + "durability": null, + "name": "Yak-hide", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10818" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "301", + "durability": null, + "name": "Yak-hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10819" + }, + { + "ge_buy_limit": "5000", + "examine": "Ready to be cut and sewn into armour.", + "grand_exchange_price": "396", + "durability": null, + "name": "Cured yak-hide", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10820" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "396", + "durability": null, + "name": "Cured yak-hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10821" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "examine": "Smelly yak body armour.", + "durability": null, + "weight": "3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "122", + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10822", + "bonuses": "0,0,0,-5,0,25,20,15,-2,25,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "122", + "durability": null, + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10823" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "examine": "Leg protection, made from smelly yak-hide.", + "durability": null, + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "2", + "id": "10824", + "bonuses": "0,0,0,-5,10,25,20,15,-2,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "durability": null, + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10825" + }, + { + "requirements": "{1,25}", + "ge_buy_limit": "100", + "examine": "A wooden shield with a rope rim.", + "durability": null, + "destroy": "true", + "weight": "3", + "equipment_slot": "5", + "grand_exchange_price": "402", + "name": "Fremennik round shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10826", + "bonuses": "0,0,0,-10,-10,17,17,31,-4,33,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "402", + "durability": null, + "name": "Fremennik round shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10827" + }, + { + "remove_head": "true", + "requirements": "{1,55}", + "shop_price": "50000", + "ge_buy_limit": "100", + "examine": "A gift from Neitiznot's Burgher.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "equipment_slot": "0", + "grand_exchange_price": "44800", + "name": "Helm of neitiznot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10828", + "bonuses": "0,0,0,0,0,31,29,34,3,30,8,3,3,0,0" + }, + { + "destroy_message": "King Sorvott of Jatizso will give you another one, grudgingly.", + "examine": "The document is stamped with King Gjuki Sorvott IV's royal seal.", + "durability": null, + "name": "Royal decree", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10830" + }, + { + "destroy_message": "Are you sure? You can replace it by talking to King Sorvott.", + "examine": "An empty tax bag.", + "durability": null, + "name": "Empty tax bag", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10831" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "examine": "A silly hat with bells.", + "durability": null, + "name": "Silly jester hat", + "tradeable": "false", + "destroy": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "10836", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "remove_sleeves": "true", + "examine": "A jester's jangly top.", + "durability": null, + "name": "Silly jester top", + "tradeable": "false", + "destroy": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "10837", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "examine": "Silly jester tights.", + "durability": null, + "name": "Silly jester tights", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10838", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "examine": "Silly jester boots.", + "durability": null, + "name": "Silly jester boots", + "tradeable": "false", + "destroy": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "10839", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "durability": null, + "name": "A jester stick", + "archery_ticket_price": "0", + "id": "10840", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "No brain: A gruesome, decapitated head, whose brain has rotted away. Brain: A gruesome, decapitated head - its eyes stare lifelessly at nothing.", + "durability": null, + "name": "Decapitated head", + "weight": "3", + "archery_ticket_price": "0", + "id": "10842" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Helm of neitiznot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10843" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Spring sq'irk", + "archery_ticket_price": "0", + "id": "10844" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Summer sq'irk", + "archery_ticket_price": "0", + "id": "10845" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Autumn sq'irk", + "archery_ticket_price": "0", + "id": "10846" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Winter sq'irk", + "archery_ticket_price": "0", + "id": "10847" + }, + { + "examine": "Made from 4 spring sq'irks.", + "durability": null, + "name": "Spring sq'irkjuice", + "weight": "1", + "archery_ticket_price": "0", + "id": "10848" + }, + { + "examine": "Made from 2 summer sq'irks.", + "durability": null, + "name": "Summer sq'irkjuice", + "weight": "1", + "archery_ticket_price": "0", + "id": "10849" + }, + { + "examine": "Made from 3 autumn sq'irks.", + "durability": null, + "name": "Autumn sq'irkjuice", + "weight": "1", + "archery_ticket_price": "0", + "id": "10850" + }, + { + "examine": "Made from 5 winter sq'irks.", + "durability": null, + "name": "Winter sq'irkjuice", + "archery_ticket_price": "0", + "id": "10851" + }, + { + "destroy_message": "You will need to speak to Sin Seer in Seers' Village to get another one.", + "shop_price": "40", + "examine": "Her writing is too scrawled to make out what it says.", + "durability": null, + "name": "Sin seer's note", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10856" + }, + { + "destroy_message": "You will need to speak to General Khazard, near the Fremennik Province, to get another.", + "examine": "A severed human leg.", + "durability": null, + "name": "Severed leg", + "tradeable": "false", + "destroy": "true", + "weight": "12", + "archery_ticket_price": "0", + "id": "10857" + }, + { + "turn90cw_anim": "7044", + "examine": "A shadow sword.", + "walk_anim": "7046", + "durability": null, + "destroy": "true", + "weight": "3.6", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "turn180_anim": "7045", + "render_anim": "124", + "equipment_slot": "3", + "destroy_message": "You can get another one by visiting the cave near the Fishing guild. A friendly ghost will replace it for you. You must be wearing a Ring of visibility, or you cannot get it back.", + "stand_anim": "7047", + "name": "Shadow sword", + "tradeable": "false", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "10858", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,4,0,0,0,0,4,-1,0,26,0,0,0" + }, + { + "examine": "You can put nice, hot tea in it.", + "durability": null, + "name": "Tea flask", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10859" + }, + { + "examine": "You can put nice, hot tea in it.", + "durability": null, + "name": "Tea flask", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10860" + }, + { + "examine": "You can put nice, hot tea in it.", + "durability": null, + "name": "Tea flask", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10861" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "Can't get any safer than this.", + "durability": null, + "name": "Hard hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10862", + "equipment_slot": "0" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "remove_sleeves": "true", + "examine": "Very fetching.", + "durability": null, + "name": "Builder's shirt", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10863", + "equipment_slot": "4" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "Slightly tatty in my opinion.", + "durability": null, + "name": "Builder's trousers", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10864", + "equipment_slot": "7" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "They'll offer good protection for my toes.", + "durability": null, + "name": "Builder's boots", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10865", + "equipment_slot": "10" + }, + { + "examine": "Used to bolt things together.", + "durability": null, + "name": "Rivets", + "archery_ticket_price": "0", + "id": "10866" + }, + { + "examine": "Some magical fluid to bind surfaces.", + "durability": null, + "name": "Binding fluid", + "archery_ticket_price": "0", + "id": "10870" + }, + { + "examine": "A pipe that belongs in a cannon stand.", + "durability": null, + "name": "Pipe", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10871" + }, + { + "examine": "A ring used to join two pipes together.", + "durability": null, + "name": "Pipe ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10872" + }, + { + "examine": "A sheet of metal.", + "durability": null, + "name": "Metal sheet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10873" + }, + { + "examine": "Bound to have some use.", + "durability": null, + "name": "Coloured ball", + "archery_ticket_price": "0", + "id": "10874" + }, + { + "examine": "A wheel used to control valves.", + "durability": null, + "name": "Valve wheel", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10875" + }, + { + "examine": "Some unknown metal substance.", + "durability": null, + "name": "Metal bar", + "archery_ticket_price": "0", + "id": "10876" + }, + { + "shop_price": "128", + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Plain satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10877", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Green satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10878", + "equipment_slot": "5" + }, + { + "shop_price": "128", + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Red satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10879", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Black satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10880", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Gold satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10881", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Rune satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10882", + "equipment_slot": "5" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "Can't get any safer than this.", + "durability": null, + "name": "Hard hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10883", + "equipment_slot": "0" + }, + { + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10884" + }, + { + "examine": "A small keg of gunpowder.", + "durability": null, + "name": "Keg", + "weight": "12", + "archery_ticket_price": "0", + "id": "10885" + }, + { + "examine": "Used to cure poison through prayer.", + "durability": null, + "name": "Prayer book", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10886" + }, + { + "turn90cw_anim": "5867", + "examine": "This is likely to put my back out... (when fixed) OR It's broken. I should see if a pirate smith can fix it. (when broken)", + "walk_anim": "5867", + "has_special": "true", + "durability": null, + "weight": "30", + "turn90ccw_anim": "5867", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "5867", + "defence_anim": "5866", + "render_anim": "985", + "equipment_slot": "3", + "attack_anims": "5865,5865,5865,5865", + "destroy_message": "If you drop the Anchor it will be destroyed, and you will need to get a new one from Brother Tranquillity, then pay Smith to re", + "stand_anim": "5869", + "name": "Barrelchest anchor", + "run_anim": "5868", + "archery_ticket_price": "0", + "id": "10887", + "stand_turn_anim": "823", + "bonuses": "-2,10,92,0,0,0,0,0,0,0,0,100,0,0,0" + }, + { + "examine": "This is likely to put my back out... (when fixed) OR It's broken. I should see if a pirate smith can fix it. (when broken)", + "durability": null, + "name": "Barrelchest anchor", + "weight": "30", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "10888", + "bonuses": "-2,10,92,0,0,0,0,0,0,0,0,100,0,0,0" + }, + { + "destroy_message": "If you drop this lamp it will be destroyed, and you will need to see Brother Tranquility for another.", + "examine": "This will answer my prayers.", + "durability": null, + "name": "Blessed lamp", + "archery_ticket_price": "0", + "id": "10889" + }, + { + "destroy_message": "This book is old and delicate. You can reclaim this item from the place you found it.ping it here will destroy it and you will have to search the Edgeville Monastery bookcase for another.", + "examine": "Used to cure poison through prayer.", + "durability": null, + "name": "Prayer book", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10890" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden cat toy.", + "grand_exchange_price": "922", + "durability": null, + "name": "Wooden cat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10891" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "922", + "durability": null, + "name": "Wooden cat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10892" + }, + { + "examine": "A cranial clamp.", + "durability": null, + "name": "Cranial clamp", + "archery_ticket_price": "0", + "id": "10893" + }, + { + "examine": "Some tongs for use with brains.", + "durability": null, + "name": "Brain tongs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10894" + }, + { + "examine": "A bell jar for covering things.", + "durability": null, + "name": "Bell jar", + "weight": "1", + "archery_ticket_price": "0", + "id": "10895" + }, + { + "examine": "A silver whistle.", + "durability": null, + "name": "Wolf whistle", + "archery_ticket_price": "0", + "id": "10896" + }, + { + "examine": "A shipping order list.", + "durability": null, + "name": "Shipping order", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10897" + }, + { + "examine": "A small keg of gunpowder.", + "durability": null, + "name": "Keg", + "weight": "12", + "archery_ticket_price": "0", + "id": "10898" + }, + { + "examine": "Part of a crate.", + "durability": null, + "name": "Crate part", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10899" + }, + { + "examine": "One skull staple.", + "durability": null, + "name": "Skull staple", + "archery_ticket_price": "0", + "id": "10904" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "8420", + "durability": null, + "name": "Mixture - step 1(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10909" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8420", + "durability": null, + "name": "Mixture - step 1(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10910" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "6543", + "durability": null, + "name": "Mixture - step 1(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10911" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6543", + "durability": null, + "name": "Mixture - step 1(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10912" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 1(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10913" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 1(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10914" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 1(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10915" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 1(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10916" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "8665", + "durability": null, + "name": "Mixture - step 2(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10917" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8665", + "durability": null, + "name": "Mixture - step 2(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10918" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "6695", + "durability": null, + "name": "Mixture - step 2(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10919" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6695", + "durability": null, + "name": "Mixture - step 2(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10920" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 2(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10921" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 2(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10922" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 2(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10923" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 2(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10924" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "15900", + "durability": null, + "name": "Sanfew serum(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10925" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15900", + "durability": null, + "name": "Sanfew serum(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10926" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "12000", + "durability": null, + "name": "Sanfew serum(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10927" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12000", + "durability": null, + "name": "Sanfew serum(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10928" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "10200", + "durability": null, + "name": "Sanfew serum(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10929" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10200", + "durability": null, + "name": "Sanfew serum(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10930" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "6114", + "durability": null, + "name": "Sanfew serum(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10931" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6114", + "durability": null, + "name": "Sanfew serum(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10932" + }, + { + "examine": "You certainly will be alright wearing these.", + "durability": null, + "name": "Lumberjack boots", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10933", + "equipment_slot": "10" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10934" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10935" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10936" + }, + { + "ge_buy_limit": "100", + "examine": "The claws from a nail beast", + "grand_exchange_price": "203", + "durability": null, + "name": "Nail beast nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10937" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "203", + "durability": null, + "name": "Nail beast nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10938" + }, + { + "remove_sleeves": "true", + "examine": "You certainly will be alright wearing this.", + "durability": null, + "name": "Lumberjack top", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "10939", + "equipment_slot": "4" + }, + { + "examine": "You certainly will be alright wearing these.", + "durability": null, + "name": "Lumberjack legs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10940", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "You certainly will be alright wearing this.", + "durability": null, + "name": "Lumberjack hat", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10941", + "equipment_slot": "0" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10942" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10943" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10944" + }, + { + "remove_sleeves": "true", + "examine": "You certainly will be alright wearing this.", + "durability": null, + "name": "Lumberjack top", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "10945", + "equipment_slot": "4" + }, + { + "examine": "One skull staple.", + "durability": null, + "name": "Skull staples", + "archery_ticket_price": "0", + "id": "10950" + }, + { + "examine": "One skull staple.", + "durability": null, + "name": "Skull staples", + "archery_ticket_price": "0", + "id": "10951" + }, + { + "requirements": "{18,39}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "Don't make anyone jump when you ring this!", + "grand_exchange_price": "57", + "durability": null, + "name": "Slayer bell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10952" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57", + "durability": null, + "name": "Slayer bell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10953" + }, + { + "requirements": "{1,25}-{4,25}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "Armour made out of Frog hide.", + "durability": null, + "weight": "3", + "absorb": "0,3,1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1797", + "name": "Frog-leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10954", + "bonuses": "0,0,0,-5,10,23,26,30,15,32,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1797", + "durability": null, + "name": "Frog-leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10955" + }, + { + "requirements": "{1,25}-{4,25}", + "shop_price": "900", + "ge_buy_limit": "100", + "examine": "Chaps made out of Frog hide.", + "durability": null, + "weight": "3", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "361", + "name": "Frog-leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10956", + "bonuses": "0,0,0,-5,2,7,7,9,4,9,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "361", + "durability": null, + "name": "Frog-leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10957" + }, + { + "requirements": "{1,25}-{4,25}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Boots made out of Frog hide.", + "durability": null, + "weight": "1", + "equipment_slot": "10", + "grand_exchange_price": "1156", + "name": "Frog-leather boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10958", + "bonuses": "0,0,0,-8,2,1,1,1,0,1,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1156", + "durability": null, + "name": "Frog-leather boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10959" + }, + { + "shop_price": "10", + "examine": "Thick and tasty soup.", + "durability": null, + "name": "Green gloop soup", + "archery_ticket_price": "0", + "id": "10960" + }, + { + "shop_price": "10", + "examine": "A big bowl of frogspawn gumbo.", + "durability": null, + "name": "Frogspawn gumbo", + "archery_ticket_price": "0", + "id": "10961" + }, + { + "shop_price": "10", + "examine": "A juicy frogburger.", + "durability": null, + "name": "Frogburger", + "weight": "1", + "archery_ticket_price": "0", + "id": "10962" + }, + { + "examine": "Nice and crunchy.", + "durability": null, + "name": "Coated frogs' legs", + "archery_ticket_price": "0", + "id": "10963" + }, + { + "shop_price": "10", + "examine": "Bat shish kebab.", + "durability": null, + "name": "Bat shish", + "archery_ticket_price": "0", + "id": "10964" + }, + { + "shop_price": "10", + "examine": "Wall beast fingers in a white fern sauce.", + "durability": null, + "name": "Fingers", + "archery_ticket_price": "0", + "id": "10965" + }, + { + "examine": "A whole roasted frog.", + "durability": null, + "name": "Roast frog", + "weight": "1", + "archery_ticket_price": "0", + "id": "10967" + }, + { + "examine": "Tasty saut??ed mushrooms.", + "durability": null, + "name": "Mushrooms", + "archery_ticket_price": "0", + "id": "10968" + }, + { + "examine": "Chunky cave-crawler fillets.", + "durability": null, + "name": "Fillets", + "archery_ticket_price": "0", + "id": "10969" + }, + { + "examine": "Steamed cave pond loach.", + "durability": null, + "name": "Loach", + "weight": "1", + "archery_ticket_price": "0", + "id": "10970" + }, + { + "examine": "Cave-eel sushi.", + "durability": null, + "name": "Eel sushi", + "archery_ticket_price": "0", + "id": "10971" + }, + { + "shop_price": "2", + "examine": "Oldak's Marvellous Moving-Over-Distance Sphere.", + "durability": null, + "name": "Dorgesh-kaan sphere", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "10972" + }, + { + "requirements": "{11,52}", + "ge_buy_limit": "1000", + "examine": "A component of cave goblin Magic.", + "grand_exchange_price": "90", + "durability": null, + "name": "Light orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10973" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "90", + "durability": null, + "name": "Light orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10974" + }, + { + "examine": "A goblin wrench.", + "durability": null, + "name": "Spanner", + "weight": "1", + "archery_ticket_price": "0", + "id": "10975" + }, + { + "shop_price": "1000", + "examine": "A Construction bone.", + "durability": null, + "name": "Long bone", + "weight": "1", + "archery_ticket_price": "0", + "id": "10976" + }, + { + "shop_price": "2000", + "examine": "A curved Construction bone.", + "durability": null, + "name": "Curved bone", + "weight": "1", + "archery_ticket_price": "0", + "id": "10977" + }, + { + "ge_buy_limit": "500", + "examine": "Swamp weed found in the caves near Dorgesh-Kaan.", + "grand_exchange_price": "292", + "durability": null, + "name": "Swamp weed", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10978" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "292", + "durability": null, + "name": "Swamp weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10979" + }, + { + "examine": "Add a wire to complete it.", + "durability": null, + "name": "Empty light orb", + "archery_ticket_price": "0", + "id": "10980" + }, + { + "ge_buy_limit": "1000", + "examine": "Wire found in Dorgesh-Kaan.", + "grand_exchange_price": "988", + "durability": null, + "name": "Cave goblin wire", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10981" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "988", + "durability": null, + "name": "Cave goblin wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10982" + }, + { + "destroy_message": "You can get another cog from the old power station.", + "shop_price": "160", + "examine": "A cog. Broken: A broken cog.", + "durability": null, + "name": "Cog", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10983" + }, + { + "destroy_message": "You can get another cog from the old power station.", + "shop_price": "160", + "examine": "A cog. Broken: A broken cog.", + "durability": null, + "name": "Cog", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10984" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10985" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10986" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A meter.", + "durability": null, + "name": "Meter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10987" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A meter.", + "durability": null, + "name": "Meter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10988" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A capacitor.", + "durability": null, + "name": "Capacitor", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10989" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A capacitor.", + "durability": null, + "name": "Capacitor", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10990" + }, + { + "destroy_message": "You can get another power box from the old power station.", + "examine": "A powerbox. Broken: A broken powerbox.", + "durability": null, + "name": "Powerbox", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10993" + }, + { + "destroy_message": "You can get another power box from the old power station.", + "examine": "A powerbox. Broken: A broken powerbox.", + "durability": null, + "name": "Powerbox", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10994" + }, + { + "examine": "A perfect example of a tortoise shell.", + "durability": null, + "name": "Perfect shell", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "10995" + }, + { + "examine": "A perfect example of a snail shell.", + "durability": null, + "name": "Perfect snail shell", + "weight": "7", + "archery_ticket_price": "0", + "id": "10996" + }, + { + "examine": "On wall: That white dot looks like an eye! Off wall: A strange mole-like being.", + "durability": null, + "name": "Molanisk", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "10997" + }, + { + "examine": "One of the many citizens of Dorgesh-Kaan.", + "durability": null, + "name": "Cave goblin", + "archery_ticket_price": "0", + "id": "10998" + }, + { + "examine": "A tattered goblin holy book.", + "durability": null, + "name": "Goblin book", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10999" + }, + { + "destroy_message": "You will need to get another copy from the Varrock Palace Library if you destroy this one.", + "examine": "The History of Dagon'hai.", + "durability": null, + "name": "Dagon'hai history", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11001" + }, + { + "destroy_message": "You will need to get another copy from the Varrock Palace Library if you destroy this one.", + "examine": "The diary of Sin'keth Magis.", + "durability": null, + "name": "Sin'keth's diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11002" + }, + { + "destroy_message": "You will need to ask Rat for another empty folder if you destroy this one.", + "examine": "A folder for Rat's papers.", + "durability": null, + "name": "An empty folder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11003" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A folder for rat's papers. It needs more pages.", + "durability": null, + "name": "Used folder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11006" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A full folder. You should take this back to Rat.", + "durability": null, + "name": "Full folder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11007" + }, + { + "destroy_message": "You will need to find more papers about the outlaws if you destroy this.", + "examine": "A page of Rat's document.", + "durability": null, + "name": "Rat's paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11008" + }, + { + "destroy_message": "You will need to get another copy of the letter from Rat if you destroy this.", + "shop_price": "160", + "examine": "A letter in a strange language.", + "durability": null, + "name": "Rat's letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11009" + }, + { + "destroy_message": "You will need to ask Surok for another letter to Rat if you destroy this.", + "shop_price": "27", + "examine": "A letter.", + "durability": null, + "name": "Surok's letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11010" + }, + { + "examine": "Instructions for the beacon ring.", + "durability": null, + "name": "Zaff's instructions", + "archery_ticket_price": "0", + "id": "11011" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A wand.", + "durability": null, + "name": "Wand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11012", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This wand is glowing with chaos magic.", + "durability": null, + "name": "Infused wand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11013", + "equipment_slot": "3" + }, + { + "destroy_message": "You will need to get another ring from Zaff if you destroy this one.", + "examine": "A magical ring.", + "durability": null, + "name": "Beacon ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11014", + "bonuses": "0,0,0,2,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "remove_head": "true", + "examine": "Cock-a-doodle-do!", + "durability": null, + "name": "Chicken head", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11015", + "equipment_slot": "0" + }, + { + "examine": "Perfect for crossing the road.", + "durability": null, + "name": "Chicken feet", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11016", + "equipment_slot": "10" + }, + { + "remove_sleeves": "true", + "examine": "I look fowl in this.", + "durability": null, + "name": "Chicken wings", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11017", + "equipment_slot": "4" + }, + { + "examine": "What's the matter, are you chicken?", + "durability": null, + "name": "Chicken legs", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11018", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to Diango to get another pair of chicken feet.", + "examine": "Perfect for crossing the road.", + "durability": null, + "name": "Chicken feet", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11019", + "equipment_slot": "10" + }, + { + "destroy_message": "You will need to speak to Diango to get another set of chicken wings.", + "remove_sleeves": "true", + "examine": "I look fowl in this.", + "durability": null, + "name": "Chicken wings", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11020", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You will need to speak to Diango to get another chicken head.", + "examine": "Cock-a-doodle-do!", + "durability": null, + "name": "Chicken head", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11021", + "equipment_slot": "0" + }, + { + "destroy_message": "You will need to speak to Diango to get another set of chicken legs.", + "examine": "What's the matter, are you chicken?", + "durability": null, + "name": "Chicken legs", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11022", + "equipment_slot": "7" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Let's see how far the rabbit hole goes.", + "durability": null, + "name": "Magic egg", + "archery_ticket_price": "0", + "id": "11023" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Used for making chocolate rabbits.", + "durability": null, + "name": "Rabbit mould", + "archery_ticket_price": "0", + "id": "11024" + }, + { + "examine": "Some chocolate chunks.", + "durability": null, + "name": "Chocolate chunks", + "archery_ticket_price": "0", + "id": "11025" + }, + { + "examine": "Chocolatey kebbit goodness.", + "durability": null, + "name": "Chocolate kebbit", + "archery_ticket_price": "0", + "id": "11026" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11027", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11028", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11029", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11030", + "equipment_slot": "3" + }, + { + "destroy_message": "These logs will be destroyed if you drop them and you will need to see Olaf Hradson to get some more.", + "examine": "A number of dripping, waterlogged planks.", + "durability": null, + "name": "Damp planks", + "archery_ticket_price": "0", + "id": "11031" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A log with some squiggles carved into it.", + "durability": null, + "name": "Crude carving", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11032" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Another log with some sort of bird hacked into it.", + "durability": null, + "name": "Cruder carving", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11033" + }, + { + "destroy_message": "This map will be destroyed if you drop it and you will need to see Olaf Hradson to get another.", + "examine": "A faded map marking a cross next to a section of the landscape.", + "durability": null, + "name": "Sven's last map", + "archery_ticket_price": "0", + "id": "11034" + }, + { + "destroy_message": "These logs will be destroyed if you drop them and you will need to chop more from the windswept tree.", + "examine": "Logs taken from the exotic-looking windswept tree.", + "durability": null, + "name": "Windswept logs", + "archery_ticket_price": "0", + "id": "11035" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "examine": "A salty sword.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "6", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "120200", + "name": "Brine sabre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11037", + "bonuses": "7,47,-2,0,0,0,0,0,0,0,0,46,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "120200", + "durability": null, + "name": "Brine sabre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11038" + }, + { + "examine": "Looks like it might still float.", + "durability": null, + "name": "Rotten barrel", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11044" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Looks like it might still float.", + "durability": null, + "name": "Rotten barrel", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11045" + }, + { + "shop_price": "18", + "examine": "A coil of rope.", + "grand_exchange_price": "101", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "11046" + }, + { + "examine": "Eww, a bald rat!", + "durability": null, + "name": "Brine rat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "11047" + }, + { + "examine": "A piece of ancient goblin armour.", + "durability": null, + "name": "Armour shard", + "archery_ticket_price": "0", + "id": "11048" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11049" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Axe head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11050" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11051" + }, + { + "examine": "A piece of ancient goblin helmet.", + "durability": null, + "name": "Helmet fragment", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11052" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11053" + }, + { + "examine": "A piece of an ancient goblin shield.", + "durability": null, + "name": "Shield fragment", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11054" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11055" + }, + { + "examine": "A piece of an ancient goblin sword.", + "durability": null, + "name": "Sword fragment", + "archery_ticket_price": "0", + "id": "11056" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11057" + }, + { + "durability": null, + "name": "Mace", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "11058" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11059" + }, + { + "shop_price": "2", + "examine": "Oldak's marvellous Moving-over-distance Sphere", + "durability": null, + "name": "Goblin village sphere", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "11060" + }, + { + "requirements": "{0,25}-{5,15}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "It has ancient goblin symbols on it.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "4093", + "name": "Ancient mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11061", + "bonuses": "10,-2,16,0,0,0,0,0,0,0,0,14,3,0,0" + }, + { + "durability": null, + "name": "Ancient mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11064" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold bracelets.", + "grand_exchange_price": "456", + "durability": null, + "name": "Bracelet mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "11065" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "456", + "durability": null, + "name": "Bracelet mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11066" + }, + { + "shop_price": "165", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "223", + "durability": null, + "name": "Gold bracelet", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11069", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "223", + "durability": null, + "name": "Gold bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11070" + }, + { + "shop_price": "1035", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "578", + "durability": null, + "name": "Sapphire bracelet", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11072", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "578", + "durability": null, + "name": "Sapphire bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11073" + }, + { + "shop_price": "506", + "ge_buy_limit": "5000", + "examine": "Now I can become a potter.", + "grand_exchange_price": "644", + "durability": null, + "name": "Bracelet of clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11074", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "644", + "durability": null, + "name": "Bracelet of clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11075" + }, + { + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "786", + "durability": null, + "name": "Emerald bracelet", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11076", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "786", + "durability": null, + "name": "Emerald bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11077" + }, + { + "ge_buy_limit": "34464", + "examine": "Must be worn as you enter the game to receive the bonus for that game.", + "grand_exchange_price": "926", + "durability": null, + "name": "Castlewar brace(3)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11079", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "926", + "durability": null, + "name": "Castlewar brace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11080" + }, + { + "examine": "Must be worn as you enter the game to receive the bonus for that game.", + "grand_exchange_price": "3", + "durability": null, + "name": "Castlewar brace(2)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11081", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Castlewar brace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11082" + }, + { + "ge_buy_limit": "5000", + "examine": "Must be worn as you enter the game to receive the bonus for that game.", + "grand_exchange_price": "3484", + "durability": null, + "name": "Castlewar brace(1)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11083", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3484", + "durability": null, + "name": "Castlewar brace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11084" + }, + { + "shop_price": "2325", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "1271", + "durability": null, + "name": "Ruby bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11085", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1271", + "durability": null, + "name": "Ruby bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11086" + }, + { + "ge_buy_limit": "5000", + "examine": "It eases diseases!", + "grand_exchange_price": "1376", + "durability": null, + "name": "Inoculation brace", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11088", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1376", + "durability": null, + "name": "Inoculation brace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11089" + }, + { + "ge_buy_limit": "5000", + "examine": "In case of emergency, wear necklace.", + "grand_exchange_price": "15400", + "durability": null, + "name": "Phoenix necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11090", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "15400", + "durability": null, + "name": "Phoenix necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11091" + }, + { + "shop_price": "3422", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "12100", + "durability": null, + "name": "Diamond bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11092", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "12100", + "durability": null, + "name": "Diamond bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11093" + }, + { + "ge_buy_limit": "5000", + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "15200", + "durability": null, + "name": "Forinthry brace(5)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11095", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "15200", + "durability": null, + "name": "Forinthry brace(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11096" + }, + { + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "5", + "durability": null, + "name": "Forinthry brace(4)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11097", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Forinthry brace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11098" + }, + { + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "5", + "durability": null, + "name": "Forinthry brace(3)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11099", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Forinthry brace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11100" + }, + { + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "5", + "durability": null, + "name": "Forinthry brace(2)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11101", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Forinthry brace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11102" + }, + { + "ge_buy_limit": "5000", + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "2537", + "durability": null, + "name": "Forinthry brace(1)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11103", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2537", + "durability": null, + "name": "Forinthry brace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11104" + }, + { + "ge_buy_limit": "100", + "examine": "This will help me travel.", + "grand_exchange_price": "30400", + "durability": null, + "name": "Skills necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11105", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30400", + "durability": null, + "name": "Skills necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11106" + }, + { + "examine": "This will help me travel.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skills necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11107", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Skills necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11108" + }, + { + "examine": "This will help me travel.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skills necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11109", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Skills necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11110" + }, + { + "examine": "This will help me travel.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skills necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11111", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Skills necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11112" + }, + { + "ge_buy_limit": "100", + "examine": "This will help me travel.", + "grand_exchange_price": "28400", + "durability": null, + "name": "Skills necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11113", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28400", + "durability": null, + "name": "Skills necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11114" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon bracelet", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11115", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11116" + }, + { + "ge_buy_limit": "100", + "examine": "A handy way to get around.", + "grand_exchange_price": "29700", + "durability": null, + "name": "Combat bracelet(4)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11118", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11119" + }, + { + "examine": "A handy way to get around.", + "grand_exchange_price": "1", + "durability": null, + "name": "Combat bracelet(3)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11120", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11121" + }, + { + "examine": "A handy way to get around.", + "grand_exchange_price": "1", + "durability": null, + "name": "Combat bracelet(2)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11122", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11123" + }, + { + "examine": "A handy way to get around.", + "grand_exchange_price": "1", + "durability": null, + "name": "Combat bracelet(1)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11124", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11125" + }, + { + "ge_buy_limit": "100", + "examine": "You will need to recharge the bracelet at the Legends Guild.", + "grand_exchange_price": "29000", + "durability": null, + "name": "Combat bracelet", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11126", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11127" + }, + { + "ge_buy_limit": "100", + "examine": "Makes obsidian weapons even stronger!", + "grand_exchange_price": "2400000", + "durability": null, + "name": "Berserker necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11128", + "bonuses": "-10,-10,-10,0,0,-20,-20,-20,-20,-20,-20,7,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2400000", + "durability": null, + "name": "Berserker necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11129" + }, + { + "shop_price": "80400", + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "941200", + "durability": null, + "name": "Onyx bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11130", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "941200", + "durability": null, + "name": "Onyx bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11131" + }, + { + "ge_buy_limit": "100", + "examine": "Helps to restore your life points.", + "grand_exchange_price": "124200", + "durability": null, + "name": "Regen bracelet", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11133", + "bonuses": "8,8,8,3,7,6,6,6,3,6,5,7,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124200", + "durability": null, + "name": "Regen bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11134" + }, + { + "remove_sleeves": "true", + "examine": "For all your flying needs.", + "durability": null, + "name": "Bomber jacket", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11135", + "equipment_slot": "4" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pair of pale green Karamja gloves.", + "durability": null, + "name": "Karamja gloves 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11136", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11137" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pair of green Karamja gloves.", + "durability": null, + "name": "Karamja gloves 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11138", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11139" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pair of dark green Karamja gloves.", + "durability": null, + "name": "Karamja gloves 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11140", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11141" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "When empty: A vessel for holding liquid. Filled with water: A vessel containing water. Filled with Goutweed: A vessel containing water and goutweed.", + "durability": null, + "name": "Dream vial (empty)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11151" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "When empty: A vessel for holding liquid. Filled with water: A vessel containing water. Filled with Goutweed: A vessel containing water and goutweed.", + "durability": null, + "name": "Dream vial (water)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11152" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "When empty: A vessel for holding liquid. Filled with water: A vessel containing water. Filled with Goutweed: A vessel containing water and goutweed.", + "durability": null, + "name": "Dream vial (herb)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11153" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Potion of Shared Dreaming. One dream for two!", + "durability": null, + "name": "Dream potion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11154" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A ground astral rune.", + "durability": null, + "name": "Ground astral rune", + "archery_ticket_price": "0", + "id": "11155" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An astral rune that has been broken into shards.", + "durability": null, + "name": "Astral rune shards", + "archery_ticket_price": "0", + "id": "11156" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A lunar-styled lamp. I wonder what's inside?", + "durability": null, + "name": "Dreamy lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11157" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Perfect for storing heavy things.", + "durability": null, + "name": "Cyrisus's chest", + "tradeable": "false", + "destroy": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "11158" + }, + { + "destroy_message": "You will have to create another using the Lunar Spellbook.", + "ge_buy_limit": "100", + "examine": "A box of Hunter goodies.", + "grand_exchange_price": "3", + "durability": null, + "name": "Hunter kit", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "11159" + }, + { + "destroy_message": "You'll need to get it back from Captain Rovin.", + "examine": "Complete Shield of Arrav.", + "durability": null, + "name": "Restored shield", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "11164" + }, + { + "turn90cw_anim": "821", + "examine": "Second-rate crossbow, former property of the Phoenix Gang.", + "walk_anim": "4226", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Phoenix crossbow", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "11165", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Phoenix crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11166" + }, + { + "turn90cw_anim": "821", + "examine": "Second-rate crossbow, former property of the Phoenix Gang.", + "walk_anim": "4226", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Phoenix crossbow", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "11167", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Phoenix crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11168" + }, + { + "shop_price": "50", + "examine": "A collection of written news on paper!", + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11169" + }, + { + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11170" + }, + { + "shop_price": "50", + "examine": "A collection of written news on paper!", + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11171" + }, + { + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11172" + }, + { + "destroy_message": "Instead of destroying this I should get a friend to help me retrieve the other half.", + "examine": "I can use this to claim a reward from the King, if I get the other half.", + "durability": null, + "name": "Half certificate", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11173" + }, + { + "destroy_message": "Instead of destroying this I should get a friend to help me retrieve the other half.", + "examine": "I can use this to claim a reward from the King, if I get the other half.", + "durability": null, + "name": "Half certificate", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11174" + }, + { + "destroy_message": "You can get another find from the pile in the cleaning area of Varrock Museum.", + "examine": "A roughly-prepared archaeological find ready for cleaning.", + "durability": null, + "name": "Uncleaned find", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11175" + }, + { + "examine": "An old looking coin.", + "durability": null, + "name": "Old coin", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11179" + }, + { + "examine": "A cracked and rusty looking coin.", + "durability": null, + "name": "Ancient coin", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11180" + }, + { + "examine": "A very old symbol of Saradomin.", + "durability": null, + "name": "Ancient symbol", + "archery_ticket_price": "0", + "id": "11181" + }, + { + "examine": "An old symbol of Saradomin.", + "durability": null, + "name": "Old symbol", + "archery_ticket_price": "0", + "id": "11182" + }, + { + "examine": "An old vase with Saradominist markings - it has been chipped.", + "durability": null, + "name": "Old chipped vase", + "archery_ticket_price": "0", + "id": "11183" + }, + { + "examine": "A map of Varrock Museum.", + "durability": null, + "name": "Museum map", + "archery_ticket_price": "0", + "id": "11184" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11185" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11186" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11187" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11188" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11189" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (1)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11190", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (2)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11191", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (3)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11192", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (4)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11193", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (5)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11194", + "equipment_slot": "2" + }, + { + "examine": "A recently-cleaned necklace.", + "durability": null, + "name": "Clean necklace", + "archery_ticket_price": "0", + "id": "11195", + "equipment_slot": "2" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "One of Grimgnash's feathers.", + "durability": null, + "name": "Griffin feather", + "archery_ticket_price": "0", + "id": "11196" + }, + { + "destroy_message": "You will need to try and find another pendant in the mouse hole if you destroy this.", + "examine": "The pendant belonging to Miazrqa.", + "durability": null, + "name": "Miazrqa's pendant", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11197" + }, + { + "destroy_message": "You will need to find another sheet of music in the witch's basement if you destroy this.", + "examine": "A sheet of music.", + "durability": null, + "name": "Music sheet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11198" + }, + { + "destroy_message": "You will need to obtain another helmet from Rupert the Beard if you destroy this", + "shop_price": "60000", + "examine": "A sturdy helmet that belonged to Rupert the beard.", + "durability": null, + "name": "Rupert's helmet", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11199" + }, + { + "remove_head": "true", + "requirements": "{1,50}", + "shop_price": "60000", + "ge_buy_limit": "100", + "examine": "A sturdy helmet that belonged to Rupert the beard.", + "durability": null, + "weight": "1.9", + "equipment_slot": "0", + "grand_exchange_price": "35800", + "name": "Dwarven helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11200", + "bonuses": "0,0,6,-2,-2,27,28,31,5,24,8,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35800", + "durability": null, + "name": "Dwarven helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11201" + }, + { + "destroy_message": "You will need to find another copy in the witch's basement if you destroy this.", + "examine": "A recipe for a shrinking potion.", + "durability": null, + "name": "Shrinking recipe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11202" + }, + { + "destroy_message": "You will need to find another copy in the witch's basement if you destroy this.", + "examine": "A list of tasks for the day.", + "durability": null, + "name": "To-do list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11203" + }, + { + "destroy_message": "You will need to make another shrinking potion if you destroy this.", + "examine": "Apparently it shrinks you. Very fast.", + "durability": null, + "name": "Shrink-me-quick", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11204", + "equipment_slot": "3" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "A shrunk ogleroot! How odd...", + "grand_exchange_price": "35", + "durability": null, + "name": "Shrunk ogleroot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11205" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A shiny golden goblin. Strange!", + "durability": null, + "name": "Golden goblin", + "tradeable": "false", + "destroy": "true", + "weight": "30", + "archery_ticket_price": "0", + "id": "11210" + }, + { + "destroy_message": "You will need to get another bag of beans from Sylas if you destroy this one.", + "examine": "A bag of magic beans.", + "durability": null, + "name": "Magic beans", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11211" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "2674", + "durability": null, + "name": "Dragon arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11212", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with dragon heads and oil-soaked cloth.lit: Dragon-headed fire arrow.", + "grand_exchange_price": "3988", + "durability": null, + "name": "Dragon fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11217", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with dragon heads and oil-soaked cloth.lit: Dragon-headed fire arrow.", + "grand_exchange_price": "3834", + "durability": null, + "name": "Dragon fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11222", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "3141", + "durability": null, + "name": "Dragon arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11227", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "2866", + "durability": null, + "name": "Dragon arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11228", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "3766", + "durability": null, + "name": "Dragon arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11229", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "315", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11230", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "445", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11231", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dragon dart tip - needs feathers for flight.", + "grand_exchange_price": "746", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Dragon dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11232" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "516", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11233", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "1248", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11234", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A bow from a darker dimension.", + "walk_anim": "819", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "822", + "attack_speed": "9", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "143400", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "11235", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,95,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,60}", + "durability": null, + "weight": "1.9", + "weapon_interface": "16", + "equip_audio": "3738", + "render_anim": "1", + "lendable": "true", + "attack_audios": "3731,0,0,0", + "name": "Dark bow" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "143400", + "durability": null, + "name": "Dark bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11236" + }, + { + "ge_buy_limit": "10000", + "examine": "Dragon talons, usable as arrowheads.", + "grand_exchange_price": "3391", + "durability": null, + "name": "Dragon arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11237" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "A baby impling in a jar. That's a bit cruel.", + "grand_exchange_price": "529", + "durability": null, + "name": "Baby impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11238" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "529", + "durability": null, + "name": "Baby impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11239" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "A young impling in a jar. Don't trap me, man.", + "grand_exchange_price": "514", + "durability": null, + "name": "Young impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11240" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "514", + "durability": null, + "name": "Young impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11241" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "A gourmet impling in a jar.", + "grand_exchange_price": "677", + "durability": null, + "name": "Gourm' impling jar", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11242" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "677", + "durability": null, + "name": "Gourm' impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11243" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Earth impling in a jar.", + "grand_exchange_price": "1343", + "durability": null, + "name": "Earth impling jar", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11244" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1343", + "durability": null, + "name": "Earth impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11245" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Essence impling in a jar.", + "grand_exchange_price": "1266", + "durability": null, + "name": "Ess' impling jar", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11246" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1266", + "durability": null, + "name": "Ess' impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11247" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Eclectic impling in a jar.", + "grand_exchange_price": "2943", + "durability": null, + "name": "Eclectic impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11248" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2943", + "durability": null, + "name": "Eclectic impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11249" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Nature impling in a jar.", + "grand_exchange_price": "8593", + "durability": null, + "name": "Nature impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11250" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8593", + "durability": null, + "name": "Nature impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11251" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Magpie impling in a jar.", + "grand_exchange_price": "22900", + "durability": null, + "name": "Magpie impling jar", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11252" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "22900", + "durability": null, + "name": "Magpie impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11253" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Ninja impling in a jar.", + "grand_exchange_price": "21800", + "durability": null, + "name": "Ninja impling jar", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11254" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "21800", + "durability": null, + "name": "Ninja impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11255" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "500", + "examine": "Dragon impling in a jar.", + "grand_exchange_price": "423600", + "durability": null, + "name": "Dragon impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11256" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "423600", + "durability": null, + "name": "Dragon impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11257" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Creates butterfly and impling jars.", + "durability": null, + "name": "Jar generator", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11258" + }, + { + "requirements": "{21,17}", + "shop_price": "3", + "turn90cw_anim": "6610", + "examine": "For catching butterflies.", + "walk_anim": "6607", + "durability": null, + "destroy": "true", + "weight": "0.2", + "turn90ccw_anim": "6609", + "attack_speed": "4", + "two_handed": "", + "weapon_interface": "14", + "turn180_anim": "6608", + "render_anim": "1426", + "equipment_slot": "3", + "destroy_message": "You will have to trade with Elnock to get a new magic butterfly net.", + "stand_anim": "6604", + "name": "Magic butterfly net", + "tradeable": "false", + "run_anim": "6603", + "archery_ticket_price": "0", + "id": "11259", + "stand_turn_anim": "6611" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "It's got little holes in the top.", + "grand_exchange_price": "248", + "durability": null, + "name": "Impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11260" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "248", + "durability": null, + "name": "Impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11261" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Imps seem to hate this stuff. Can't say I blame them.", + "grand_exchange_price": "1016", + "durability": null, + "name": "Imp repellent", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11262" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1016", + "durability": null, + "name": "Imp repellent", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11263" + }, + { + "ge_buy_limit": "100", + "examine": "Omega 3 oil. Good for the brain, not so for the nose.", + "grand_exchange_price": "601", + "durability": null, + "name": "Anchovy oil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11264" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "601", + "durability": null, + "name": "Anchovy oil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11265" + }, + { + "ge_buy_limit": "100", + "examine": "Fish paste. Urk.", + "grand_exchange_price": "57", + "durability": null, + "name": "Anchovy paste", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11266" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11267" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11268" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11269" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11270" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11271" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11272" + }, + { + "destroy_message": "You will have to ask Elnock for another one of these.", + "examine": "Lets you easily identify your prey.", + "durability": null, + "name": "Impling scroll", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11273" + }, + { + "remove_sleeves": "true", + "examine": "The label says 'Vivid Crimson', but it looks like pink to me!", + "grand_exchange_price": "27", + "durability": null, + "name": "Ham shirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "11274", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11275" + }, + { + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11276" + }, + { + "lendable": "true", + "examine": "I hope I don't meet any roundheads...", + "durability": null, + "name": "Cavalier mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11277", + "equipment_slot": "8" + }, + { + "examine": "Essential mime wear.", + "durability": null, + "name": "Beret mask", + "weight": "1", + "archery_ticket_price": "0", + "id": "11278", + "equipment_slot": "0" + }, + { + "destroy_message": "You can complete the quest by speaking to Oziach even if you do not have the head.", + "examine": "The severed head of the great dragon Elvarg!", + "durability": null, + "name": "Elvarg's head", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11279", + "equipment_slot": "3" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "I hope I don't meet any roundheads...", + "durability": null, + "name": "Cavalier and mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11280", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Cavalier and mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11281" + }, + { + "remove_head": "true", + "examine": "Essential mime wear.", + "durability": null, + "name": "Beret and mask", + "weight": "1", + "archery_ticket_price": "0", + "id": "11282", + "equipment_slot": "0" + }, + { + "requirements": "{1,75}", + "examine": "A heavy shield with a snarling, draconic visage.", + "grand_exchange_price": "5653008", + "rare_item": "true", + "durability": null, + "name": "Dragonfire shield", + "weight": "7.2", + "archery_ticket_price": "0", + "id": "11283", + "bonuses": "0,0,0,-10,-5,20,25,22,10,22,17,7,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,75}", + "ge_buy_limit": "10", + "examine": "A heavy shield with a snarling, draconic visage.", + "rare_item": "true", + "durability": null, + "weight": "7.2", + "equipment_slot": "5", + "grand_exchange_price": "7700000", + "name": "Dragonfire shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11284", + "bonuses": "0,0,0,-10,-5,20,25,22,10,22,17,7,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "7700000", + "durability": null, + "name": "Dragonfire shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11285" + }, + { + "ge_buy_limit": "10", + "examine": "It looks like this could be attached to a shield somehow.", + "grand_exchange_price": "8000000", + "rare_item": "true", + "durability": null, + "name": "Draconic visage", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "11286" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "8000000", + "durability": null, + "name": "Draconic visage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11287" + }, + { + "examine": "A heavy barbarian Fishing rod.", + "durability": null, + "name": "Barbarian rod", + "weight": "1", + "archery_ticket_price": "0", + "id": "11323" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "Roe, or cheap fishy eggs.", + "grand_exchange_price": "17", + "durability": null, + "name": "Roe", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "11324" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "17", + "durability": null, + "name": "Roe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11325" + }, + { + "ge_buy_limit": "5000", + "examine": "Caviar, or expensive fishy eggs.", + "grand_exchange_price": "370", + "durability": null, + "name": "Caviar", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "11326" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "370", + "durability": null, + "name": "Caviar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11327" + }, + { + "shop_price": "11", + "ge_buy_limit": "5000", + "examine": "A sad-looking trout.", + "grand_exchange_price": "9", + "durability": null, + "name": "Leaping trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11328" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "9", + "durability": null, + "name": "Leaping trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11329" + }, + { + "ge_buy_limit": "5000", + "examine": "Some non-tasty salmon.", + "grand_exchange_price": "19", + "durability": null, + "name": "Leaping salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11330" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "19", + "durability": null, + "name": "Leaping salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11331" + }, + { + "ge_buy_limit": "5000", + "examine": "A bloated sturgeon.", + "grand_exchange_price": "151", + "durability": null, + "name": "Leaping sturgeon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11332" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "151", + "durability": null, + "name": "Leaping sturgeon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11333" + }, + { + "ge_buy_limit": "100", + "examine": "Slices of inedible fish.", + "grand_exchange_price": "2", + "durability": null, + "name": "Fish offcuts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11334" + }, + { + "remove_head": "true", + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "Protects your head and looks impressive too.", + "rare_item": "true", + "durability": null, + "weight": "2", + "absorb": "2,0,4", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "51600000", + "name": "Dragon full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11335", + "bonuses": "0,0,0,-6,-2,45,48,41,-1,46,12,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "51600000", + "durability": null, + "name": "Dragon full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11336" + }, + { + "destroy_message": "I can gather more from the caverns below the Baxtorian Lake.", + "examine": "The bones of a barbarian warrior, slain by his fellow adventurers.", + "durability": null, + "name": "Mangled bones", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11337" + }, + { + "destroy_message": "I can gather more from the caverns below the Baxtorian Lake.", + "examine": "The bones of a barbarian warrior, slain by vile dragons.", + "durability": null, + "name": "Chewed bones", + "destroy": "true", + "weight": "9.6", + "archery_ticket_price": "0", + "id": "11338" + }, + { + "destroy_message": "I can obtain another from Otto.", + "examine": "Records from my discoveries beneath the lake.", + "durability": null, + "name": "My notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11339" + }, + { + "destroy_message": "I can obtain another from Otto.", + "examine": "A record of Otto's instructions to me.", + "durability": null, + "name": "Barbarian skills", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11340" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11341" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11342" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11343" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11344" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11345" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11346" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11347" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11348" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11349" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11350" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11351" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11352" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11353" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11354" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11355" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11356" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11357" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11358" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11359" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11360" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11361" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11362" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11363" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11364" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11365" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11366" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "204", + "stand_anim": "813", + "name": "Bronze hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11367", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "204", + "durability": null, + "name": "Bronze hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11368" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "25", + "stand_anim": "813", + "name": "Iron hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11369", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Iron hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11370" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "93", + "stand_anim": "813", + "name": "Steel hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11371", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "Steel hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11372" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "357", + "stand_anim": "813", + "name": "Mithril hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11373", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "357", + "durability": null, + "name": "Mithril hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11374" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1095", + "stand_anim": "813", + "name": "Adamant hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11375", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1095", + "durability": null, + "name": "Adamant hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11376" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "12300", + "stand_anim": "813", + "name": "Rune hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11377", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12300", + "durability": null, + "name": "Rune hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11378" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "290", + "stand_anim": "813", + "name": "Bronze hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11379", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "290", + "durability": null, + "name": "Bronze hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11380" + }, + { + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed bronze hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Bronze hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11381", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "775", + "stand_anim": "813", + "name": "Bronze hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11382", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "775", + "durability": null, + "name": "Bronze hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11383" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8974", + "stand_anim": "813", + "name": "Bronze hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11384", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8974", + "durability": null, + "name": "Bronze hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11385" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "99", + "stand_anim": "813", + "name": "Iron hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11386", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "99", + "durability": null, + "name": "Iron hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11387" + }, + { + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed iron hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Iron hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11388", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "584", + "stand_anim": "813", + "name": "Iron hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11389", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "584", + "durability": null, + "name": "Iron hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11390" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8783", + "stand_anim": "813", + "name": "Iron hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11391", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8783", + "durability": null, + "name": "Iron hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11392" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "151", + "stand_anim": "813", + "name": "Steel hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11393", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "151", + "durability": null, + "name": "Steel hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11394" + }, + { + "requirements": "{0,5}", + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed steel hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Steel hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11395", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "636", + "stand_anim": "813", + "name": "Steel hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11396", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "636", + "durability": null, + "name": "Steel hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11397" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8835", + "stand_anim": "813", + "name": "Steel hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11398", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8835", + "durability": null, + "name": "Steel hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11399" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "440", + "stand_anim": "813", + "name": "Mithril hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11400", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "440", + "durability": null, + "name": "Mithril hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11401" + }, + { + "requirements": "{0,20}", + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed mithril hasta", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "353", + "stand_anim": "813", + "name": "Mithril hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11402", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "925", + "stand_anim": "813", + "name": "Mithril hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11403", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "925", + "durability": null, + "name": "Mithril hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11404" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8711", + "stand_anim": "813", + "name": "Mithril hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11405", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8711", + "durability": null, + "name": "Mithril hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11406" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1154", + "stand_anim": "813", + "name": "Adamant hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11407", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1154", + "durability": null, + "name": "Adamant hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11408" + }, + { + "requirements": "{0,30}", + "turn90cw_anim": "1207", + "examine": "\tA karambwan poison-tipped, one-handed adamantite hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Adamant hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11409", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1639", + "stand_anim": "813", + "name": "Adamant hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11410", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1639", + "durability": null, + "name": "Adamant hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11411" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "9388", + "stand_anim": "813", + "name": "Adamant hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11412", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9388", + "durability": null, + "name": "Adamant hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11413" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "12300", + "stand_anim": "813", + "name": "Rune hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11414", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12300", + "durability": null, + "name": "Rune hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11415" + }, + { + "requirements": "{0,40}", + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed rune hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Rune hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11416", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "12200", + "stand_anim": "813", + "name": "Rune hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11417", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12200", + "durability": null, + "name": "Rune hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11418" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "15500", + "stand_anim": "813", + "name": "Rune hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11419", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15500", + "durability": null, + "name": "Rune hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11420" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy attack potion", + "grand_exchange_price": "20", + "durability": null, + "name": "Attack mix(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "11429" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "20", + "durability": null, + "name": "Attack mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11430" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy attack potion", + "grand_exchange_price": "19", + "durability": null, + "name": "Attack mix(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "11431" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "19", + "durability": null, + "name": "Attack mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11432" + }, + { + "ge_buy_limit": "1000", + "examine": "Two doses of fishy antipoison potion.", + "grand_exchange_price": "455", + "durability": null, + "name": "Antipoison mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11433" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "455", + "durability": null, + "name": "Antipoison mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11434" + }, + { + "ge_buy_limit": "1000", + "examine": "Two doses of fishy antipoison potion.", + "grand_exchange_price": "608", + "durability": null, + "name": "Antipoison mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11435" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "608", + "durability": null, + "name": "Antipoison mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11436" + }, + { + "ge_buy_limit": "1000", + "examine": "2 dose: Two doses of fishy Relicym's balm.", + "grand_exchange_price": "264", + "durability": null, + "name": "Relicym's mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11437" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "264", + "durability": null, + "name": "Relicym's mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11438" + }, + { + "ge_buy_limit": "1000", + "examine": "2 dose: Two doses of fishy Relicym's balm.", + "grand_exchange_price": "131", + "durability": null, + "name": "Relicym's mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11439" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "131", + "durability": null, + "name": "Relicym's mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11440" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy strength potion.", + "grand_exchange_price": "159", + "durability": null, + "name": "Strength mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11441" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "159", + "durability": null, + "name": "Strength mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11442" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy strength potion.", + "grand_exchange_price": "164", + "durability": null, + "name": "Strength mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11443" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "164", + "durability": null, + "name": "Strength mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11444" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy Combat potion", + "grand_exchange_price": "366", + "durability": null, + "name": "Combat mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11445" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "durability": null, + "name": "Combat mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11446" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy Combat potion", + "grand_exchange_price": "328", + "durability": null, + "name": "Combat mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11447" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "328", + "durability": null, + "name": "Combat mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11448" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of fishy restore potion.", + "grand_exchange_price": "17", + "durability": null, + "name": "Restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11449" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "17", + "durability": null, + "name": "Restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11450" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of fishy restore potion.", + "grand_exchange_price": "24", + "durability": null, + "name": "Restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11451" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "24", + "durability": null, + "name": "Restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11452" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy energy potion.", + "grand_exchange_price": "248", + "durability": null, + "name": "Energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11453" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "248", + "durability": null, + "name": "Energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11454" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy energy potion.", + "grand_exchange_price": "212", + "durability": null, + "name": "Energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11455" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "212", + "durability": null, + "name": "Energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11456" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy defence potion", + "grand_exchange_price": "887", + "durability": null, + "name": "Defence mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11457" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "887", + "durability": null, + "name": "Defence mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11458" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy defence potion", + "grand_exchange_price": "780", + "durability": null, + "name": "Defence mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11459" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "780", + "durability": null, + "name": "Defence mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11460" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of a fishy agility potion", + "grand_exchange_price": "388", + "durability": null, + "name": "Agility mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11461" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "388", + "durability": null, + "name": "Agility mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11462" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of a fishy agility potion", + "grand_exchange_price": "459", + "durability": null, + "name": "Agility mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11463" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "459", + "durability": null, + "name": "Agility mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11464" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of a fishy Prayer potion.", + "grand_exchange_price": "2761", + "durability": null, + "name": "Prayer mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11465" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2761", + "durability": null, + "name": "Prayer mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11466" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of a fishy Prayer potion.", + "grand_exchange_price": "1857", + "durability": null, + "name": "Prayer mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11467" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1857", + "durability": null, + "name": "Prayer mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11468" + }, + { + "ge_buy_limit": "1000", + "examine": "one/two doses of fishy super attack potion", + "grand_exchange_price": "375", + "durability": null, + "name": "Superattack mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11469" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "375", + "durability": null, + "name": "Superattack mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11470" + }, + { + "ge_buy_limit": "1000", + "examine": "one/two doses of fishy super attack potion", + "grand_exchange_price": "516", + "durability": null, + "name": "Superattack mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11471" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "516", + "durability": null, + "name": "Superattack mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11472" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy super antipoison potion.", + "grand_exchange_price": "613", + "durability": null, + "name": "Anti-p supermix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11473" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "613", + "durability": null, + "name": "Anti-p supermix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11474" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy super antipoison potion.", + "grand_exchange_price": "1119", + "durability": null, + "name": "Anti-p supermix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11475" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1119", + "durability": null, + "name": "Anti-p supermix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11476" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two Doses of fishy fishing potion.", + "grand_exchange_price": "123", + "durability": null, + "name": "Fishing mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11477" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "123", + "durability": null, + "name": "Fishing mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11478" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two Doses of fishy fishing potion.", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11479" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11480" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super energy potion.", + "grand_exchange_price": "1062", + "durability": null, + "name": "Sup. energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11481" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1062", + "durability": null, + "name": "Sup. energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11482" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super energy potion.", + "grand_exchange_price": "562", + "durability": null, + "name": "Sup. energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11483" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "562", + "durability": null, + "name": "Sup. energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11484" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Super strength potion.", + "grand_exchange_price": "955", + "durability": null, + "name": "Sup. str. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11485" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "955", + "durability": null, + "name": "Sup. str. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11486" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Super strength potion.", + "grand_exchange_price": "1040", + "durability": null, + "name": "Sup. str. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11487" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1040", + "durability": null, + "name": "Sup. str. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11488" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Magic essence potion.", + "grand_exchange_price": "808", + "durability": null, + "name": "Magic ess. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11489" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "808", + "durability": null, + "name": "Magic ess. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11490" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Magic essence potion.", + "grand_exchange_price": "447", + "durability": null, + "name": "Magic ess. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11491" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "447", + "durability": null, + "name": "Magic ess. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11492" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super restore potion.", + "grand_exchange_price": "3670", + "durability": null, + "name": "Sup. restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11493" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3670", + "durability": null, + "name": "Sup. restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11494" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super restore potion.", + "grand_exchange_price": "3104", + "durability": null, + "name": "Sup. restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11495" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3104", + "durability": null, + "name": "Sup. restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11496" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy super defence potion", + "grand_exchange_price": "38", + "durability": null, + "name": "Sup. def. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11497" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "38", + "durability": null, + "name": "Sup. def. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11498" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy super defence potion", + "grand_exchange_price": "66", + "durability": null, + "name": "Sup. def. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11499" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "66", + "durability": null, + "name": "Sup. def. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11500" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy extra strength antidote potion.", + "grand_exchange_price": "1909", + "durability": null, + "name": "Antidote+ mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11501" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1909", + "durability": null, + "name": "Antidote+ mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11502" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy extra strength antidote potion.", + "grand_exchange_price": "1330", + "durability": null, + "name": "Antidote+ mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11503" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1330", + "durability": null, + "name": "Antidote+ mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11504" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy anti-fire breath potion.", + "grand_exchange_price": "2048", + "durability": null, + "name": "Antifire mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11505" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2048", + "durability": null, + "name": "Antifire mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11506" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy anti-fire breath potion.", + "grand_exchange_price": "1444", + "durability": null, + "name": "Antifire mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11507" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1444", + "durability": null, + "name": "Antifire mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11508" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy ranging potion.", + "grand_exchange_price": "2879", + "durability": null, + "name": "Ranging mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11509" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2879", + "durability": null, + "name": "Ranging mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11510" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy ranging potion.", + "grand_exchange_price": "1880", + "durability": null, + "name": "Ranging mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11511" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1880", + "durability": null, + "name": "Ranging mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11512" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy magic potion.", + "grand_exchange_price": "1022", + "durability": null, + "name": "Magic mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11513" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1022", + "durability": null, + "name": "Magic mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11514" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy magic potion.", + "grand_exchange_price": "1323", + "durability": null, + "name": "Magic mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11515" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1323", + "durability": null, + "name": "Magic mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11516" + }, + { + "ge_buy_limit": "1000", + "examine": "Doses of fishy hunting potion", + "grand_exchange_price": "146", + "durability": null, + "name": "Hunting mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11517" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "146", + "durability": null, + "name": "Hunting mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11518" + }, + { + "ge_buy_limit": "1000", + "examine": "Doses of fishy hunting potion", + "grand_exchange_price": "87", + "durability": null, + "name": "Hunting mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11519" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "87", + "durability": null, + "name": "Hunting mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11520" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Zamorak potion.", + "grand_exchange_price": "665", + "durability": null, + "name": "Zamorak mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11521" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "665", + "durability": null, + "name": "Zamorak mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11522" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Zamorak potion.", + "grand_exchange_price": "339", + "durability": null, + "name": "Zamorak mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11523" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "339", + "durability": null, + "name": "Zamorak mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11524" + }, + { + "ge_buy_limit": "5000", + "examine": "More fluff than feather.", + "grand_exchange_price": "325", + "durability": null, + "name": "Wimpy feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11525" + }, + { + "destroy_message": "If you drop this book it will be destroyed. You cannot replace it.", + "examine": "Educate yourself.", + "durability": null, + "name": "Book of knowledge", + "weight": "1", + "archery_ticket_price": "0", + "id": "11640" + }, + { + "durability": null, + "name": "Astronomy book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11655" + }, + { + "ge_buy_limit": "100", + "examine": "A book that explains the art of crafting items from glass.", + "grand_exchange_price": "278", + "durability": null, + "name": "Glassblowing book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11656" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "278", + "durability": null, + "name": "Glassblowing book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11657" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A mage helm from the order of the Void Knights.", + "durability": null, + "name": "Void mage helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11663", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A ranger helm from the order of the Void Knights", + "durability": null, + "name": "Void ranger helm", + "tradeable": "false", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "11664", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A melee helm from the order of the Void Knights.", + "durability": null, + "name": "Void melee helm", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "11665", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Void seal(8)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11666", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(7)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11667", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(6)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11668", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(5)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11669", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(4)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11670", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(3)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11671", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(2)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11672", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(1)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11673", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A mage helm from the order of the Void Knights.", + "durability": null, + "name": "Void mage helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11674", + "bonuses": "0,0,0,0,0,6,6,6,6,6,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A ranger helm from the order of the Void Knights", + "durability": null, + "name": "Void ranger helm", + "tradeable": "false", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "11675", + "bonuses": "0,0,0,0,0,6,6,6,6,6,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A melee helm from the order of the Void Knights.", + "durability": null, + "name": "Void melee helm", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "11676", + "bonuses": "0,0,0,0,0,6,6,6,6,6,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "I can find another book in the Keldagrim library.", + "examine": "\"Beyond Trollheim\" by Nestor Peregrine.", + "durability": null, + "name": "Explorer's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11677" + }, + { + "destroy_message": "You'll need to visit the Sinclair Mansion to get another one.", + "examine": "A black helm, too small for your head", + "durability": null, + "name": "Black knight helm", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "11678" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11679" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A change of address form.", + "durability": null, + "name": "Address form", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11680" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It has something written on it.", + "durability": null, + "name": "Scrap paper", + "archery_ticket_price": "0", + "id": "11681" + }, + { + "examine": "I could use this to pick the lock.", + "durability": null, + "name": "Hair clip", + "archery_ticket_price": "0", + "id": "11682" + }, + { + "ge_buy_limit": "10", + "examine": "Godsword shards 1 and 2.Godsword shards 2 and 3.Godsword shards 1 and 3.", + "grand_exchange_price": "331300", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11686" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "331300", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11687" + }, + { + "ge_buy_limit": "10", + "examine": "Godsword shards 1 and 2.Godsword shards 2 and 3.Godsword shards 1 and 3.", + "grand_exchange_price": "342100", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11688" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "342100", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11689" + }, + { + "ge_buy_limit": "10", + "examine": "The blade for the ultimate weapon.", + "grand_exchange_price": "466800", + "durability": null, + "name": "Godsword blade", + "tradeable": "true", + "weight": "7.5", + "archery_ticket_price": "0", + "id": "11690" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "466800", + "durability": null, + "name": "Godsword blade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11691" + }, + { + "ge_buy_limit": "10", + "examine": "Godsword shards 1 and 2.Godsword shards 2 and 3.Godsword shards 1 and 3.", + "grand_exchange_price": "348500", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11692" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "348500", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11693" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A beautiful, heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "28000000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11694", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Armadyl godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "28000000", + "durability": null, + "name": "Armadyl godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11695" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A brutally heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "3700000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11696", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Bandos godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3700000", + "durability": null, + "name": "Bandos godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11697" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A gracious, heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "22000000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11698", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Saradomin godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "22000000", + "durability": null, + "name": "Saradomin godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11699" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A terrifying, heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "6100000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11700", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Zamorak godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "6100000", + "durability": null, + "name": "Zamorak godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11701" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "30600000", + "rare_item": "true", + "durability": null, + "name": "Armadyl hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11702" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "30600000", + "durability": null, + "name": "Armadyl hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11703" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "3300000", + "rare_item": "true", + "durability": null, + "name": "Bandos hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11704" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3300000", + "durability": null, + "name": "Bandos hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11705" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "24900000", + "rare_item": "true", + "durability": null, + "name": "Saradomin hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11706" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "24900000", + "durability": null, + "name": "Saradomin hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11707" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "6100000", + "rare_item": "true", + "durability": null, + "name": "Zamorak hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11708" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "6100000", + "durability": null, + "name": "Zamorak hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11709" + }, + { + "ge_buy_limit": "10", + "examine": "Part of the Godsword blade.", + "grand_exchange_price": "150200", + "durability": null, + "rare_item": "true", + "name": "Godsword shard 1", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11710" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "150200", + "durability": null, + "name": "Godsword shard 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11711" + }, + { + "ge_buy_limit": "10", + "examine": "Part of the Godsword blade.", + "grand_exchange_price": "149100", + "durability": null, + "rare_item": "true", + "name": "Godsword shard 2", + "tradeable": "true", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11712" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "149100", + "durability": null, + "name": "Godsword shard 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11713" + }, + { + "ge_buy_limit": "10", + "examine": "Part of the Godsword blade.", + "grand_exchange_price": "149800", + "durability": null, + "rare_item": "true", + "name": "Godsword shard 3", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11714" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "149800", + "durability": null, + "name": "Godsword shard 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11715" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "An evil spear.", + "walk_anim": "1205", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "5400000", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11716", + "stand_turn_anim": "1209", + "bonuses": "85,65,65,0,0,13,13,12,0,13,0,75,2,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "3", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Zamorakian spear" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "5400000", + "durability": null, + "name": "Zamorakian spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11717" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "A helmet of great craftmanship.", + "rare_item": "true", + "durability": null, + "weight": "0.5", + "absorb": "0,5,2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "4100000", + "name": "Armadyl helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11718", + "bonuses": "-5,-5,-5,-5,10,6,8,10,10,8,12,0,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "4100000", + "durability": null, + "name": "Armadyl helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11719" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "A chestplate of great craftsmanship", + "rare_item": "true", + "durability": null, + "weight": "4", + "absorb": "0,10,5", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "14800000", + "name": "Armadyl chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11720", + "bonuses": "-7,-7,-7,-15,33,56,48,61,70,57,52,0,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "14800000", + "durability": null, + "name": "Armadyl chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11721" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "2", + "examine": "A rune plateskirt in the colours of Armadyl.", + "rare_item": "true", + "durability": null, + "weight": "8", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "14800000", + "name": "Armadyl plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11722", + "bonuses": "-6,-6,-6,-10,20,32,26,34,40,33,25,0,1,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14800000", + "durability": null, + "name": "Armadyl plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11723" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "1", + "examine": "A sturdy chestplate.", + "rare_item": "true", + "durability": null, + "weight": "12", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "14700000", + "name": "Bandos chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11724", + "bonuses": "0,0,0,-15,-10,98,93,105,-6,133,52,4,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "14700000", + "durability": null, + "name": "Bandos chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11725" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "1", + "examine": "A sturdy pair of tassets.", + "rare_item": "true", + "durability": null, + "weight": "8", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "15200000", + "name": "Bandos tassets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11726", + "bonuses": "0,0,0,-21,-7,71,63,66,-4,93,25,2,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "15200000", + "durability": null, + "name": "Bandos tassets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11727" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "1", + "examine": "Some sturdy boots", + "rare_item": "true", + "durability": null, + "weight": "6", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "111700", + "name": "Bandos boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11728", + "bonuses": "0,0,0,-5,-3,17,18,19,0,0,15,0,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "111700", + "durability": null, + "name": "Bandos boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11729" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "The incredible blade of an Icyene.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7044", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "5300000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11730", + "stand_turn_anim": "7040", + "bonuses": "0,82,60,0,0,0,0,0,0,0,0,82,2,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "3", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Saradomin sword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "5300000", + "durability": null, + "name": "Saradomin sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11731" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "These will protect my feet.", + "durability": null, + "rare_item": "true", + "weight": "1", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "95400", + "name": "Dragon boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11732", + "bonuses": "0,0,0,-3,-1,16,17,18,0,0,15,4,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95400", + "durability": null, + "name": "Dragon boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11733" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scroll for Sir Tiffy. The wax seal is broken. / Before reading the scroll: A scroll for Sir Tiffy. It is sealed with a wax insignia.", + "durability": null, + "name": "Knight's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11734" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scroll for Sir Tiffy. The wax seal is broken. / Before reading the scroll: A scroll for Sir Tiffy. It is sealed with a wax insignia.", + "durability": null, + "name": "Knight's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11735" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "231300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11736", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Steam battlestaff" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "231300", + "durability": null, + "name": "Steam battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11737" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "267600", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11738", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic steam staff" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "267600", + "durability": null, + "name": "Mystic steam staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11739" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11741" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11743" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11745" + }, + { + "destroy_message": "There may be another in the chest where you found this.", + "examine": "This probably opens a chest in Golrie's caves. (Path of Glophrie)", + "durability": null, + "name": "A key to a chest", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11747" + }, + { + "destroy_message": "There may be another in the chest where you found this.", + "examine": "This opens the door into Golrie's strongroom. (Path of Glophrie)", + "durability": null, + "name": "Strongroom key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11748" + }, + { + "destroy_message": "Maybe Brimstail will have another crystal seed you could grow into a chime.", + "examine": "It makes a sound.", + "durability": null, + "name": "Crystal chime", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11749", + "equipment_slot": "3" + }, + { + "destroy_message": "There may be another in the chest where you found this.", + "examine": "Notes written by Yewnock while copying Oaknock's machine.", + "durability": null, + "name": "Yewnock's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11750" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11753" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11754" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11755" + }, + { + "destroy_message": "You will need to get a new set of armour from Rat Burgiss if you destroy this one.", + "remove_sleeves": "true", + "examine": "Varrock Smithing armour.", + "durability": null, + "name": "Varrock armour 1", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11756", + "bonuses": "0,0,0,-30,-10,15,14,9,-6,14,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You will need to get a new set of armour from Reldo if you destroy this one.", + "remove_sleeves": "true", + "examine": "Varrock smithing armour.", + "durability": null, + "name": "Varrock armour 2", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11757", + "bonuses": "0,0,0,-30,-10,21,20,12,-6,20,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You will need to get a new set of armour from Vannaka if you destroy this one.", + "remove_sleeves": "true", + "examine": "Varrock smithing armour.", + "durability": null, + "name": "Varrock armour 3", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11758", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "4", + "examine": "A number of wooden logs.", + "grand_exchange_price": "124", + "durability": null, + "name": "Logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11760" + }, + { + "destroy_message": "You can get the diary again from Sandy's desk.", + "examine": "A locked/unlocked diary.", + "durability": null, + "name": "Locked diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11761" + }, + { + "destroy_message": "You can get the diary again from Sandy's desk.", + "examine": "A locked/unlocked diary.", + "durability": null, + "name": "Unlocked diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11762" + }, + { + "destroy_message": "You can get the foot again from the creatures in the Jade Vine.", + "examine": "A wizard's severed foot. You can tell by the robes.", + "durability": null, + "name": "Foot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11764" + }, + { + "destroy_message": "You can get the arm again from the creatures in the Jade Vine.", + "examine": "\"A wizard's severed arm. You can tell by the robes.", + "durability": null, + "name": "Left arm", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11766" + }, + { + "destroy_message": "You can get the arm again from the creatures in the Jade Vine.", + "examine": "A wizard's severed arm. You can tell by the robes.", + "durability": null, + "name": "Right arm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11767" + }, + { + "destroy_message": "You can get the leg again from the creatures in the Jade Vine.", + "examine": "A wizard's severed leg. You can tell by the robes.", + "durability": null, + "name": "Left leg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11768" + }, + { + "destroy_message": "You can get the leg again from the creatures in the Jade Vine.", + "examine": "A wizard's severed leg. You can tell by the robes.", + "durability": null, + "name": "Right leg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11769" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11770" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11771" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11772" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11773" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11774" + }, + { + "examine": "A floppy root cutting. Quite dead.", + "durability": null, + "name": "Wilted cutting", + "archery_ticket_price": "0", + "id": "11775" + }, + { + "examine": "A potted root.", + "durability": null, + "name": "Potted root", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11776" + }, + { + "destroy_message": "You can get the sealed pot back by visiting Garth, the farmer on Karamja.", + "examine": "This sealed pot contains your vine cutting - hopefully still alive.", + "durability": null, + "name": "Sealed pot", + "tradeable": "false", + "destroy": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11777" + }, + { + "examine": "A large seed.", + "durability": null, + "name": "Jade vine seed", + "archery_ticket_price": "0", + "id": "11778" + }, + { + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "Surely this holds many a dark tale...", + "durability": null, + "name": "The grim reaper's diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11780" + }, + { + "bankable": "false", + "destroy_message": "Another can be found in the Grim Reaper's house.", + "examine": "Some of the Grim Reaper's garb.", + "durability": null, + "name": "Grim's robe", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11781" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "Someone's Last Will and Testament.", + "durability": null, + "name": "Last will and testament", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11782" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "A tasty treat for Muncher.", + "durability": null, + "name": "Human bones", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11783" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "Ooooh spooky!", + "durability": null, + "name": "Servant's skull", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11784" + }, + { + "bankable": "false", + "destroy_message": "You can get a replacement from Diango in Draynor Village.", + "examine": "There's not much sand left in the top half...", + "durability": null, + "name": "Hourglass", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11785" + }, + { + "bankable": "false", + "destroy_message": "Another can be found in the Grim Reaper's house.", + "examine": "Used to sharpen the blade of a scythe.", + "durability": null, + "name": "Scythe sharpener", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11786" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "That's gross. Why am I carrying it around?", + "durability": null, + "name": "Human eye", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11787" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "A 'Voice of Doom' potion, used to deepen your voice.", + "durability": null, + "name": "'voice of doom' potion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11788" + }, + { + "remove_head": "true", + "destroy_message": "You should be able to get another from Diango in Draynor Village.", + "examine": "Allows me to imitate the harbinger of doom, the stealer of souls, the eternal end...", + "durability": null, + "name": "Grim reaper hood", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11789", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "destroy_message": "You should be able to get another from Diango in Draynor Village.", + "examine": "Allows me to imitate the harbinger of doom, the stealer of souls, the eternal end...", + "durability": null, + "name": "Grim reaper hood", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11790", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "White goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "11791", + "equipment_slot": "4" + }, + { + "examine": "Smaller than the average goblin. After The Chosen Commander: Oldak's new assistant.", + "durability": null, + "name": "Grubfoot", + "archery_ticket_price": "0", + "id": "11792" + }, + { + "examine": "See article", + "durability": null, + "name": "Zanik", + "archery_ticket_price": "0", + "id": "11793" + }, + { + "shop_price": "32", + "examine": "Oldak's Marvellous Moving-Over-Distance Sphere", + "durability": null, + "name": "Plain of mud sphere", + "archery_ticket_price": "0", + "id": "11794" + }, + { + "destroy_message": "The Ekeleshuun priest probably has a spare.", + "examine": "The key you stole from the Ekeleshuun priest.", + "durability": null, + "name": "Ekeleshuun key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11795" + }, + { + "destroy_message": "The Narogoshuun priest probably has a spare.", + "examine": "The key you stole from the Narogoshuun priest.", + "durability": null, + "name": "Narogoshuun key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11796" + }, + { + "destroy_message": "The Huzamogaarb priest probably has a spare.", + "examine": "The key you stole from the Huzamogaarb priest.", + "durability": null, + "name": "Huzamogaarb key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11797" + }, + { + "destroy_message": "The Saragorgak priest probably has a spare.", + "examine": "The key you stole from the Saragorgak priest.", + "durability": null, + "name": "Saragorgak key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11798" + }, + { + "destroy_message": "The Horogothgar priest probably has a spare.", + "examine": "The key you stole from the Horogothgar priest.", + "durability": null, + "name": "Horogothgar key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11799" + }, + { + "destroy_message": "The Yurkolgokh priest probably has a spare.", + "examine": "The key you stole from the Yurkolgokh priest.", + "durability": null, + "name": "Yurkolgokh key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11800" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Snothead's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11802" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Snailfeet's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11803" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Mosschin's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11804" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Redeyes's bone", + "archery_ticket_price": "0", + "id": "11805" + }, + { + "examine": "An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Strongbones's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11806" + }, + { + "examine": "You can combine these with a toadflax to make a goblin transformation potion.", + "durability": null, + "name": "Pharmakos berries", + "archery_ticket_price": "0", + "id": "11807" + }, + { + "examine": "An ugly albino fish.", + "durability": null, + "name": "Whitefish", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11808" + }, + { + "examine": "4 doses of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (4)", + "archery_ticket_price": "0", + "id": "11809", + "equipment_slot": "5" + }, + { + "examine": "3 doses of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (3)", + "archery_ticket_price": "0", + "id": "11810" + }, + { + "examine": "2 doses of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (2)", + "archery_ticket_price": "0", + "id": "11811" + }, + { + "examine": "1 dose of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (1)", + "archery_ticket_price": "0", + "id": "11812" + }, + { + "shop_price": "177", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing bronze full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "614", + "durability": null, + "name": "Bronze armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11814" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "614", + "durability": null, + "name": "Bronze armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11815" + }, + { + "shop_price": "177", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing bronze full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "938", + "durability": null, + "name": "Bronze armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11816", + "bonuses": "0,0,0,-59,-19,27,26,18,-11,25,5,0,0,1,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "938", + "durability": null, + "name": "Bronze armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11817" + }, + { + "shop_price": "1022", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing iron full helm, platebody, legs, and kiteshield.", + "grand_exchange_price": "1830", + "durability": null, + "name": "Iron armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11818", + "bonuses": "0,0,0,-65,-21,46,44,33,-12,45,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1830", + "durability": null, + "name": "Iron armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11819" + }, + { + "shop_price": "1022", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing iron full helm, platebody, skirt, and kiteshield.", + "grand_exchange_price": "1711", + "durability": null, + "name": "Iron armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11820", + "bonuses": "0,0,0,-65,-21,46,44,33,-12,45,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1711", + "durability": null, + "name": "Iron armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11821" + }, + { + "requirements": "{5,1}", + "shop_price": "2365", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing steel full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "3646", + "durability": null, + "name": "Steel armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11822", + "bonuses": "0,0,0,-65,-21,71,72,60,-12,70,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3646", + "durability": null, + "name": "Steel armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11823" + }, + { + "requirements": "{5,1}", + "shop_price": "2365", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing steel full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "3796", + "durability": null, + "name": "Steel armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11824", + "bonuses": "0,0,0,-65,-21,71,72,60,-12,70,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3796", + "durability": null, + "name": "Steel armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11825" + }, + { + "requirements": "{10,1}", + "shop_price": "11286", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing Black full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "18900", + "durability": null, + "name": "Black armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11826" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18900", + "durability": null, + "name": "Black armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11827" + }, + { + "requirements": "{10,1}", + "shop_price": "11286", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a black full helm, platebody, skirt and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "grand_exchange_price": "14600", + "name": "Black armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11828", + "bonuses": "0,0,0,-65,-21,91,92,78,-12,90,27,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14600", + "durability": null, + "name": "Black armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11829" + }, + { + "requirements": "{20,1}", + "shop_price": "15232", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a mithril full helm, platebody, legs and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,6", + "grand_exchange_price": "8764", + "name": "Mithril armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11830", + "bonuses": "0,0,0,-65,-21,101,102,89,-12,97,52,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8764", + "durability": null, + "name": "Mithril armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11831" + }, + { + "requirements": "{20,1}", + "shop_price": "15232", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a mithril full helm, platebody, skirt and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,5", + "grand_exchange_price": "7829", + "name": "Mithril armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11832", + "bonuses": "0,0,0,-65,-21,101,102,89,-12,99,50,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7829", + "durability": null, + "name": "Mithril armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11833" + }, + { + "requirements": "{1,30}", + "shop_price": "28276", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing an adamant full helm, platebody, legs and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "7,0,15", + "grand_exchange_price": "20600", + "name": "Adamant armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11834", + "bonuses": "0,0,0,-65,-21,144,146,129,-12,142,76,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20600", + "durability": null, + "name": "Adamant armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11835" + }, + { + "requirements": "{1,30}", + "shop_price": "28276", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing an adamant full helm, platebody, skirt and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "7,0,15", + "grand_exchange_price": "21500", + "name": "Adamant armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11836", + "bonuses": "0,0,0,-65,-21,144,146,129,-12,142,76,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21500", + "durability": null, + "name": "Adamant armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11837" + }, + { + "requirements": "{1,40}", + "shop_price": "136112", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a rune full helm, platebody, legs and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "9,0,20", + "grand_exchange_price": "136300", + "name": "Rune armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11838", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "136300", + "durability": null, + "name": "Rune armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11839" + }, + { + "requirements": "{1,40}", + "shop_price": "136112", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a rune full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "140300", + "durability": null, + "name": "Rune armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11840" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "140300", + "durability": null, + "name": "Rune armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11841" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "4800000", + "examine": "Grand Exchange set containing a dragon helm, chainbody, legs.", + "durability": null, + "name": "Dragon chain armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "2.2", + "id": "11842" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "4800000", + "durability": null, + "name": "Dragon chain armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11843" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "4600000", + "examine": "Grand Exchange set containing a dragon helm, chainbody, skirt.", + "durability": null, + "name": "Dragon chain armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "2.2", + "id": "11844" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "4600000", + "durability": null, + "name": "Dragon chain armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11845" + }, + { + "requirements": "{0,70}-{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Ahrim's robetop, robeskirt, hood, and staff.", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - ahrim's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11846" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - ahrim's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11847" + }, + { + "requirements": "{0,70}-{1,70}-{2,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Dharok's helm, body, legs and greataxe.", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - dharok's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11848" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - dharok's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11849" + }, + { + "requirements": "{0,70}-{1,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Guthan's helm, platebody, chainskirt and warspear.", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Barrows - guthan's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11850" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Barrows - guthan's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11851" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "10", + "examine": "A Grand Exchange set containing Karil's coif, crossbow, leather body, and leather skirt.", + "grand_exchange_price": "2200000", + "durability": null, + "name": "Barrows - karil's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11852" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "2200000", + "durability": null, + "name": "Barrows - karil's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11853" + }, + { + "requirements": "{0,70}-{1,70}-{2,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Torag's helm, body, legs and hammers.", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Barrows - torag's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11854" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Barrows - torag's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11855" + }, + { + "requirements": "{0,70}-{1,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Verac's helm, brassard, plateskirt and flail.", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Barrows - verac's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11856" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Barrows - verac's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11857" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a helm, body, legs and shield", + "grand_exchange_price": "388700000", + "durability": null, + "name": "Third age melee set", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11858" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "388700000", + "durability": null, + "name": "Third age melee set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11859" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing coif, body, chaps and vambraces.", + "grand_exchange_price": "87500000", + "durability": null, + "name": "Third age ranger set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11860" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "87500000", + "durability": null, + "name": "Third age ranger set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11861" + }, + { + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a body, legs, amulet and hat", + "grand_exchange_price": "163100000", + "durability": null, + "name": "Third age mage set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11862" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "163100000", + "durability": null, + "name": "Third age mage set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11863" + }, + { + "requirements": "{1,40}-{4,40}", + "shop_price": "9000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "durability": null, + "weight": "2.2", + "absorb": "0,10,5", + "grand_exchange_price": "8932", + "name": "Green dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11864", + "bonuses": "0,0,0,-40,31,65,50,73,30,62,58,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8932", + "durability": null, + "name": "Green dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11865" + }, + { + "requirements": "{1,40}-{4,50}", + "shop_price": "12000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "grand_exchange_price": "9062", + "durability": null, + "name": "Blue dragonhide set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11866" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9062", + "durability": null, + "name": "Blue dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11867" + }, + { + "requirements": "{1,40}-{4,60}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "grand_exchange_price": "12800", + "durability": null, + "name": "Red dragonhide set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11868" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12800", + "durability": null, + "name": "Red dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11869" + }, + { + "requirements": "{1,40}-{4,70}", + "shop_price": "40000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "grand_exchange_price": "17600", + "durability": null, + "name": "Black dragonhide set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11870" + }, + { + "durability": null, + "name": "Black dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11871" + }, + { + "requirements": "{20,1}-{6,40}", + "shop_price": "169143", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing mystic hat, top, bottoms, gloves, and boots.", + "grand_exchange_price": "163300", + "durability": null, + "name": "Mystic robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11872" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "163300", + "durability": null, + "name": "Mystic robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11873" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing hat, top, bottoms, gloves, and boots", + "grand_exchange_price": "11000000", + "durability": null, + "name": "Infinity robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11874" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "11000000", + "durability": null, + "name": "Infinity robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11875" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a helm, body, boots, gauntlets and legs.", + "grand_exchange_price": "107400", + "durability": null, + "name": "Splitbark armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11876", + "absorb": "13,6,0", + "bonuses": "0,0,0,24,-21,74,59,86,32,0,74,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "107400", + "durability": null, + "name": "Splitbark armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11877" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "341200", + "durability": null, + "name": "Black trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11878", + "absorb": "2,0,4", + "bonuses": "0,0,0,-65,-21,91,92,77,-12,90,23,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "341200", + "durability": null, + "name": "Black trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11879" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "331600", + "durability": null, + "name": "Black trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11880", + "absorb": "2,0,4", + "bonuses": "0,0,0,-65,-21,91,92,77,-12,90,23,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "331600", + "durability": null, + "name": "Black trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11881" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Black gold-trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11882" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Black gold-trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11883" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "1300000", + "durability": null, + "name": "Black gold-trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11884" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1300000", + "durability": null, + "name": "Black gold-trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11885" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "318100", + "durability": null, + "name": "Adamant trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11886" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "318100", + "durability": null, + "name": "Adamant trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11887" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "293700", + "durability": null, + "name": "Adamant trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11888" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "293700", + "durability": null, + "name": "Adamant trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11889" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "949400", + "durability": null, + "name": "Adamant gold-trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11890" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "949400", + "durability": null, + "name": "Adamant gold-trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11891" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "880500", + "durability": null, + "name": "Adamant gold-trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11892" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "880500", + "durability": null, + "name": "Adamant gold-trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11893" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "702500", + "durability": null, + "name": "Rune trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11894", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "702500", + "durability": null, + "name": "Rune trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11895" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "675400", + "durability": null, + "name": "Rune trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11896", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "675400", + "durability": null, + "name": "Rune trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11897" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Rune gold-trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11898", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Rune gold-trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11899" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Rune gold-trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11900", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Rune gold-trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11901" + }, + { + "requirements": "{20,1}-{6,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing hat, robetops and bottoms", + "grand_exchange_price": "207200", + "durability": null, + "name": "Enchanted set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11902" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "207200", + "durability": null, + "name": "Enchanted set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11903" + }, + { + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing hat, robetops and bottoms", + "grand_exchange_price": "877900", + "durability": null, + "name": "Trimmed blue wizard set", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11904" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "877900", + "durability": null, + "name": "Trimmed blue wizard set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11905" + }, + { + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing hat, robe top and bottom", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Gold-trimmed blue wizard set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11906" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Gold-trimmed blue wizard set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11907" + }, + { + "requirements": "{20,4}", + "ge_buy_limit": "10000", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "85100", + "durability": null, + "name": "Trimmed leather armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11908" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "85100", + "durability": null, + "name": "Trimmed leather armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11909" + }, + { + "requirements": "{20,4}", + "ge_buy_limit": "10000", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "217200", + "durability": null, + "name": "Gold-trimmed leather armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11910" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "217200", + "durability": null, + "name": "Gold-trimmed leather armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11911" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "371600", + "durability": null, + "name": "Green d'hide trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11912", + "absorb": "0,10,5", + "bonuses": "0,0,0,-40,31,65,50,73,30,62,58,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "371600", + "durability": null, + "name": "Green d'hide trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11913" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Green d'hide gold-trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11914", + "absorb": "0,10,5", + "bonuses": "0,0,0,-40,31,65,50,73,30,62,58,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Green d'hide gold-trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11915" + }, + { + "requirements": "{1,40}-{4,50}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "38300", + "durability": null, + "name": "Blue d'hide trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11916" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "38300", + "durability": null, + "name": "Blue d'hide trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11917" + }, + { + "requirements": "{1,40}-{4,50}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps.", + "grand_exchange_price": "50000", + "durability": null, + "name": "Blue d'hide gold-trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11918" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "50000", + "durability": null, + "name": "Blue d'hide gold-trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11919" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body, chaps, bracers and coif.", + "grand_exchange_price": "179500", + "durability": null, + "name": "Green d'hide blessed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11920" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "179500", + "durability": null, + "name": "Green d'hide blessed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11921" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body, chaps, bracers and coif.", + "grand_exchange_price": "477500", + "durability": null, + "name": "Blue d'hide blessed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11922" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "477500", + "durability": null, + "name": "Blue d'hide blessed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11923" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body, chaps, bracers and coif.", + "grand_exchange_price": "585300", + "durability": null, + "name": "Red d'hide blessed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11924" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "585300", + "durability": null, + "name": "Red d'hide blessed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11925" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and shield.", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Guthix armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11926", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Guthix armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11927" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield", + "grand_exchange_price": "4000000", + "durability": null, + "name": "Saradomin armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11928", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "4000000", + "durability": null, + "name": "Saradomin armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11929" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield", + "grand_exchange_price": "2300000", + "durability": null, + "name": "Zamorak armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11930", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2300000", + "durability": null, + "name": "Zamorak armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11931" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Guthix armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11932", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Guthix armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11933" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield", + "grand_exchange_price": "3600000", + "durability": null, + "name": "Saradomin armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11934", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3600000", + "durability": null, + "name": "Saradomin armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11935" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield", + "grand_exchange_price": "2000000", + "durability": null, + "name": "Zamorak armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11936", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2000000", + "durability": null, + "name": "Zamorak armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11937" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "5900000", + "durability": null, + "name": "Gilded armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11938" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5900000", + "durability": null, + "name": "Gilded armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11939" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "4300000", + "durability": null, + "name": "Gilded armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11940" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "4300000", + "durability": null, + "name": "Gilded armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11941" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing helm, platebody, legs, boots and gloves", + "grand_exchange_price": "145000", + "durability": null, + "name": "Rockshell armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11942" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "145000", + "durability": null, + "name": "Rockshell armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11943" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing helm, body, chaps, boots and gloves", + "grand_exchange_price": "94500", + "durability": null, + "name": "Spined armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11944", + "absorb": "0,13,6", + "bonuses": "-6,-6,-6,-31,29,68,56,78,34,62,47,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "94500", + "durability": null, + "name": "Spined armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11945" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing helm, top, bottoms, boots and gloves", + "grand_exchange_price": "145200", + "durability": null, + "name": "Skeletal armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11946" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "145200", + "durability": null, + "name": "Skeletal armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11947" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A tiny model of Lumbridge Castle inside a glass dome.", + "durability": null, + "name": "Snow globe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11949", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A tiny model of Lumbridge Castle inside a glass dome.", + "durability": null, + "name": "Snow globe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11950", + "equipment_slot": "3" + }, + { + "attack_anims": "5063", + "examine": "Made from snow. / It's a ball of snow! Uncanny. / How did this not melt in the box?", + "durability": null, + "name": "Snowball", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "11951", + "weapon_interface": "18", + "equipment_slot": "3" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a snow warrior.", + "durability": null, + "name": "Ice sword", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11952" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a snow mage.", + "attack_audios": "2555,0,0,0", + "durability": null, + "name": "Winter staff", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11953" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a snow ranger.", + "durability": null, + "name": "Holly bow", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11954" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a barbarian snowman.", + "durability": null, + "name": "Barbarian snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11955" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "It's actually made of cardboard, but it looks like a dragon full helm.", + "durability": null, + "name": "Dragon snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11956" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Use this to make your snowman look like a dwarf.", + "durability": null, + "name": "Dwarf snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11957" + }, + { + "bankable": "false", + "destroy_message": "Talk to a snow imp to get another.", + "examine": "Arr! Shiver me snowman!", + "durability": null, + "name": "Pirate snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11958" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "The most traditional snowman hat.", + "durability": null, + "name": "Snowman top hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11959" + }, + { + "requirements": "{20,1}-{6,40}", + "shop_price": "215431", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing hat, top, bottoms, gloves, and boots", + "grand_exchange_price": "487300", + "durability": null, + "name": "Light mystic robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11960" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "487300", + "durability": null, + "name": "Light mystic robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11961" + }, + { + "requirements": "{20,1}-{6,40}", + "shop_price": "228541", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing hat, top, bottoms, gloves, and boots", + "grand_exchange_price": "294000", + "durability": null, + "name": "Dark mystic robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11962" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "294000", + "durability": null, + "name": "Dark mystic robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11963" + }, + { + "examine": "I can hatch this in an incubator.", + "durability": null, + "name": "Raven egg", + "archery_ticket_price": "0", + "id": "11964" + }, + { + "examine": "I can hatch this in an incubator.", + "durability": null, + "name": "Vulture egg", + "archery_ticket_price": "0", + "id": "11965" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "archery_ticket_price": "0", + "id": "11966" + }, + { + "shop_price": "750000", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing cannon base, stand, barrels and furnace.", + "grand_exchange_price": "718900", + "durability": null, + "name": "Dwarf cannon set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11967" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "718900", + "durability": null, + "name": "Dwarf cannon set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11968" + }, + { + "destroy_message": "If I destroy this it will disintegrate into its component parts and drop to the floor.", + "examine": "A water tiara infused with water runes. Protects from the hot desert sun.", + "durability": null, + "name": "Enchanted water tiara", + "weight": "1", + "archery_ticket_price": "0", + "id": "11969", + "bonuses": "0,0,0,2,0,5,5,5,3,3,0,0,2,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "I can obtain and fill another one from the archaeologist near Sophanem.", + "examine": "A crate full of distressed gear.", + "durability": null, + "name": "Smelly crate", + "tradeable": "false", + "destroy": "true", + "weight": "30", + "archery_ticket_price": "0", + "id": "11970" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An empty crate, ready for bronze gear.", + "durability": null, + "name": "Empty crate", + "archery_ticket_price": "0", + "id": "11972" + }, + { + "destroy_message": "I can obtain another one from the archaeologist near Sophanem.", + "examine": "A book of research on Scabarite history.", + "durability": null, + "name": "Scabaras research", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11973" + }, + { + "destroy_message": "I can obtain another one from Simon Templeton.", + "examine": "Issued by Simon Templeton.", + "durability": null, + "name": "Artefact receipt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11974" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11975" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11976" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11977" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11978" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11979" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11980" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11981" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11982" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11983" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11984" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11985" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11986" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11987" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11988" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11989" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11990" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11991" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11992" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11993" + }, + { + "destroy_message": "I can obtain another one from the archaeologists near Sophanem.", + "examine": "Newly made, but to an ancient pattern. (Dealing with Scabaras)", + "durability": null, + "name": "Scabarite key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11994" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze dagger.", + "examine": "It has been oxidised.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Oxidised dagger", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11995" + }, + { + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised medium helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11996" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze sword.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised sword", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11997" + }, + { + "turn90cw_anim": "821", + "examine": "It has been oxidised.", + "walk_anim": "819", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "1", + "destroy_message": "I can make another one by using camel dung on a bronze scimitar.", + "stand_anim": "808", + "attack_audios": "2500,0,2517,0", + "name": "Oxidised scimitar", + "tradeable": "false", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "11998", + "stand_turn_anim": "823" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze longsword.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised longsword", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11999" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze full helmet.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised full helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12000" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze square shield.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised square shield", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12001" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze chainbody.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised chainbody", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12002" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze kiteshield.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised kiteshield", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12003" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze two", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised two-handed sword", + "tradeable": "false", + "destroy": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "12004" + }, + { + "destroy_message": "I can make another one by using camel dung on some bronze platelegs.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised platelegs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12005" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze plateskirt.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised plateskirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12006" + }, + { + "requirements": "{23,52}", + "ge_buy_limit": "5000", + "grand_exchange_price": "330", + "examine": "I can summon a spirit terrorbird familiar with this.", + "durability": null, + "name": "Spirit terrorbird pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12007" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "330", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit terrorbird pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12008" + }, + { + "requirements": "{16,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "239", + "examine": "I can summon a granite crab familiar with this.", + "durability": null, + "name": "Granite crab pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12009" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "239", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Granite crab pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12010" + }, + { + "requirements": "{23,75}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2918", + "examine": "I can summon a praying mantis familiar with this.", + "durability": null, + "name": "Praying mantis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12011" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2918", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Praying mantis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12012" + }, + { + "requirements": "{23,78}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2167", + "examine": "I can summon a giant ent familiar with this.", + "durability": null, + "name": "Giant ent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12013" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2167", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Giant ent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12014" + }, + { + "requirements": "{23,63}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2018", + "examine": "I can summon a spirit cobra familiar with this.", + "durability": null, + "name": "Spirit cobra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12015" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2018", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit cobra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12016" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "121", + "examine": "I can summon a spirit dagannoth familiar with this.", + "durability": null, + "name": "Spirit dagannoth pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12017" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "121", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit dagannoth pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12018" + }, + { + "requirements": "{13,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "248", + "examine": "I can summon a thorny snail familiar with this.", + "durability": null, + "name": "Thorny snail pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12019" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "248", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Thorny snail pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12020" + }, + { + "requirements": "{23,33}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1268", + "examine": "I can summon a beaver familiar with this.", + "durability": null, + "name": "Beaver pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12021" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1268", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Beaver pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12022" + }, + { + "requirements": "{23,58}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "I can summon a karamthulhu overlord familiar with this.", + "durability": null, + "name": "Karam. overlord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12023" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karam. overlord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12024" + }, + { + "requirements": "{23,80}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2235", + "examine": "I can summon a hydra familiar with this.", + "durability": null, + "name": "Hydra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12025" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2235", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hydra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12026" + }, + { + "requirements": "{23,55}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2641", + "examine": "I can summon a spirit jelly familiar with this.", + "durability": null, + "name": "Spirit jelly pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12027" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2641", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit jelly pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12028" + }, + { + "requirements": "{23,68}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3506", + "examine": "I can summon a bunyip familiar with this.", + "durability": null, + "name": "Bunyip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12029" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3506", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bunyip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12030" + }, + { + "requirements": "{23,67}", + "ge_buy_limit": "5000", + "grand_exchange_price": "13200", + "examine": "I can summon a war tortoise familiar with this.", + "durability": null, + "name": "War tortoise pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12031" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "War tortoise pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12032" + }, + { + "requirements": "{23,69}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2269", + "examine": "I can summon a fruit bat familiar with this.", + "durability": null, + "name": "Fruit bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12033" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2269", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Fruit bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12034" + }, + { + "requirements": "{23,54}", + "ge_buy_limit": "5000", + "grand_exchange_price": "4004", + "examine": "I can summon an abyssal parasite familiar with this.", + "durability": null, + "name": "Abyssal parasite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12035" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4004", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Abyssal parasite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12036" + }, + { + "requirements": "{23,62}", + "ge_buy_limit": "5000", + "grand_exchange_price": "5660", + "examine": "I can summon an abyssal lurker familiar with this.", + "durability": null, + "name": "Abyssal lurker pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12037" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5660", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Abyssal lurker pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12038" + }, + { + "requirements": "{23,88}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2439", + "examine": "I can summon a unicorn stallion familiar with this.", + "durability": null, + "name": "Unicorn stallion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12039" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2439", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Unicorn stallion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12040" + }, + { + "requirements": "{23,47}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1559", + "examine": "I can summon a magpie familiar with this.", + "durability": null, + "name": "Magpie pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12041" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1559", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Magpie pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12042" + }, + { + "requirements": "{4,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "258", + "examine": "I can summon a dreadfowl familiar with this.", + "durability": null, + "name": "Dreadfowl pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12043" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "258", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dreadfowl pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12044" + }, + { + "requirements": "{23,64}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "I can summon a stranger plant familiar with this.", + "durability": null, + "name": "Stranger plant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12045" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Stranger plant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12046" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "301", + "examine": "I can summon a spirit wolf familiar with this.", + "durability": null, + "name": "Spirit wolf pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12047" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "301", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit wolf pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12048" + }, + { + "requirements": "{18,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "808", + "examine": "I can summon a desert wyrm familiar with this.", + "durability": null, + "name": "Desert wyrm pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12049" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "808", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Desert wyrm pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12050" + }, + { + "requirements": "{23,42}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1812", + "examine": "I can summon an evil turnip familiar with this.", + "durability": null, + "name": "Evil turnip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12051" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1812", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Evil turnip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12052" + }, + { + "requirements": "{23,31}", + "ge_buy_limit": "10000", + "grand_exchange_price": "1416", + "examine": "I can summon a vampire bat familiar with this.", + "durability": null, + "name": "Vampire bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12053" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1416", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Vampire bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12054" + }, + { + "requirements": "{19,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "992", + "examine": "I can summon a spirit scorpion familiar with this.", + "durability": null, + "name": "Spirit scorpion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12055" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "992", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit scorpion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12056" + }, + { + "requirements": "{23,71}", + "ge_buy_limit": "5000", + "grand_exchange_price": "332", + "examine": "I can summon an arctic bear familiar with this.", + "durability": null, + "name": "Arctic bear pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12057" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "332", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Arctic bear pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12058" + }, + { + "requirements": "{10,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2225", + "examine": "I can summon a spirit spider familiar with this.", + "durability": null, + "name": "Spirit spider pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12059" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2225", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit spider pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12060" + }, + { + "requirements": "{23,49}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2045", + "examine": "I can summon a bloated leech familiar with this.", + "durability": null, + "name": "Bloated leech pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12061" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2045", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bloated leech pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12062" + }, + { + "requirements": "{23,25}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3746", + "examine": "I can summon a spirit kalphite familiar with this.", + "durability": null, + "name": "Spirit kalphite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12063" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3746", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit kalphite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12064" + }, + { + "requirements": "{23,32}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1470", + "examine": "I can summon a honey badger familiar with this.", + "durability": null, + "name": "Honey badger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12065" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1470", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Honey badger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12066" + }, + { + "requirements": "{23,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1578", + "examine": "I can summon an albino rat familiar with this.", + "durability": null, + "name": "Albino rat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12067" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1578", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Albino rat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12068" + }, + { + "requirements": "{23,74}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2924", + "examine": "I can summon a granite lobster familiar with this.", + "durability": null, + "name": "Granite lobster pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12069" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2924", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Granite lobster pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12070" + }, + { + "requirements": "{23,41}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1375", + "examine": "I can summon a macaw familiar with this.", + "durability": null, + "name": "Macaw pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12071" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1375", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Macaw pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12072" + }, + { + "requirements": "{23,36}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1804", + "examine": "I can summon a bronze minotaur familiar with this.", + "durability": null, + "name": "Bronze minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12073" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1804", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bronze minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12074" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "I can summon an iron minotaur familiar with this.", + "durability": null, + "name": "Iron minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12075" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Iron minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12076" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2529", + "examine": "I can summon a steel minotaur familiar with this", + "durability": null, + "name": "Steel minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12077" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2529", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Steel minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12078" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2666", + "examine": "I can summon a mithril minotaur with this.", + "durability": null, + "name": "Mithril minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12079" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2666", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Mithril minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12080" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "I can summon an adamant minotaur familiar with this.", + "durability": null, + "name": "Adamant minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12081" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Adamant minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12082" + }, + { + "requirements": "{23,86}", + "ge_buy_limit": "5000", + "grand_exchange_price": "373", + "examine": "I can summon a rune minotaur with this.", + "durability": null, + "name": "Rune minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12083" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "373", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Rune minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12084" + }, + { + "requirements": "{23,61}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2468", + "examine": "I can summon a smoke devil familiar with this.", + "durability": null, + "name": "Smoke devil pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12085" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2468", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Smoke devil pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12086" + }, + { + "requirements": "{23,40}", + "ge_buy_limit": "5000", + "grand_exchange_price": "319", + "examine": "I can summon a bull ant familiar with this.", + "durability": null, + "name": "Bull ant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12087" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "319", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bull ant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12088" + }, + { + "requirements": "{23,92}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3625", + "examine": "I can summon a wolpertinger familiar with this.", + "durability": null, + "name": "Wolpertinger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12089" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3625", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Wolpertinger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12090" + }, + { + "requirements": "{23,28}", + "ge_buy_limit": "5000", + "grand_exchange_price": "906", + "examine": "I can summon a compost mound familiar with this.", + "durability": null, + "name": "Compost mound pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12091" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "906", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Compost mound pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12092" + }, + { + "requirements": "{23,96}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3696", + "examine": "I can summon a pack yak familiar with this.", + "durability": null, + "name": "Pack yak pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12093" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3696", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Pack yak pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12094" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1514", + "examine": "I can summon a spirit cockatrice familiar with this.", + "durability": null, + "name": "Sp. cockatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12095" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1514", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. cockatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12096" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1523", + "examine": "I can summon a spirit guthatrice familiar with this.", + "durability": null, + "name": "Sp. guthatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12097" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1523", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. guthatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12098" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1492", + "examine": "I can summon a spirit saratrice familiar with this.", + "durability": null, + "name": "Sp. saratrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12099" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1492", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. saratrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12100" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1515", + "examine": "I can summon a spirit zamatrice familiar with this.", + "durability": null, + "name": "Sp. zamatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12101" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1515", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. zamatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12102" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1531", + "examine": "I can summon a spirit pengatrice familiar with this.", + "durability": null, + "name": "Sp. pengatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12103" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1531", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. pengatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12104" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3085", + "examine": "I can summon a spirit coraxatrice familiar with this.", + "durability": null, + "name": "Sp. coraxatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12105" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3085", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. coraxatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12106" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3881", + "examine": "I can summon a spirit vulatrice familiar with this.", + "durability": null, + "name": "Sp. vulatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12107" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3881", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. vulatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12108" + }, + { + "ge_buy_limit": "10000", + "examine": "A stripy brown egg.", + "grand_exchange_price": "1053", + "durability": null, + "name": "Cockatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12109" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1053", + "durability": null, + "name": "Cockatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12110" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy green egg.", + "grand_exchange_price": "1171", + "durability": null, + "name": "Guthatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12111" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1171", + "durability": null, + "name": "Guthatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12112" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy blue egg.", + "grand_exchange_price": "1080", + "durability": null, + "name": "Saratrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12113" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1080", + "durability": null, + "name": "Saratrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12114" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy red egg.", + "grand_exchange_price": "1154", + "durability": null, + "name": "Zamatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12115" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1154", + "durability": null, + "name": "Zamatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12116" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy grey egg.", + "grand_exchange_price": "2676", + "durability": null, + "name": "Pengatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12117" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2676", + "durability": null, + "name": "Pengatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12118" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy black egg.", + "grand_exchange_price": "2865", + "durability": null, + "name": "Coraxatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12119" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2865", + "durability": null, + "name": "Coraxatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12120" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy pink egg.", + "grand_exchange_price": "18900", + "durability": null, + "name": "Vulatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12121" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "18900", + "durability": null, + "name": "Vulatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12122" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "293", + "examine": "I can summon a barker toad familiar with this.", + "durability": null, + "name": "Barker toad pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12123" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "293", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Barker toad pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12124" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "A swarm of little flies.", + "grand_exchange_price": "97", + "durability": null, + "name": "Flies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12125" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "97", + "durability": null, + "name": "Flies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12126" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Some beetle bits.", + "grand_exchange_price": "176", + "durability": null, + "name": "Beetle bits", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12127" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "176", + "durability": null, + "name": "Beetle bits", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12128" + }, + { + "ge_buy_limit": "100", + "examine": "Good for feeding birds.", + "grand_exchange_price": "1", + "durability": null, + "name": "Ground fishing bait", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12129" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Mmmm...nuts.", + "grand_exchange_price": "673", + "durability": null, + "name": "Nuts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12130" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "673", + "durability": null, + "name": "Nuts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12131" + }, + { + "examine": "Makes me want to do a truffle shuffle.", + "durability": null, + "name": "Truffle", + "tradeable": "false", + "destroy": "true", + "weight": "28.928", + "archery_ticket_price": "0", + "id": "12132" + }, + { + "durability": null, + "name": "Truffle", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12133", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "5000", + "examine": "An evil turnip.", + "grand_exchange_price": "6750", + "durability": null, + "name": "Evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12134" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "6750", + "durability": null, + "name": "Evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12135" + }, + { + "ge_buy_limit": "5000", + "examine": "An evil turnip.", + "grand_exchange_price": "133", + "durability": null, + "name": "2/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12136" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "133", + "durability": null, + "name": "2/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12137" + }, + { + "ge_buy_limit": "5000", + "examine": "An evil turnip.", + "grand_exchange_price": "20", + "durability": null, + "name": "1/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12138" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "20", + "durability": null, + "name": "1/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12139" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Summoning potion.", + "grand_exchange_price": "4489", + "durability": null, + "name": "Summoning potion(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12140" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4489", + "durability": null, + "name": "Summoning potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12141" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Summoning potion.", + "grand_exchange_price": "3320", + "durability": null, + "name": "Summoning potion(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12142" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3320", + "durability": null, + "name": "Summoning potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12143" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Summoning potion.", + "grand_exchange_price": "1671", + "durability": null, + "name": "Summoning potion(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12144" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1671", + "durability": null, + "name": "Summoning potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12145" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Summoning potion.", + "grand_exchange_price": "1576", + "durability": null, + "name": "Summoning potion(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12146" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1576", + "durability": null, + "name": "Summoning potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12147" + }, + { + "ge_buy_limit": "100", + "examine": "Grows into the root-vegetable of all evil.", + "grand_exchange_price": "68", + "durability": null, + "name": "Evil turnip seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12148" + }, + { + "ge_buy_limit": "5000", + "examine": "Utterly terrifying!", + "grand_exchange_price": "7101", + "durability": null, + "name": "Carved evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12153" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7101", + "durability": null, + "name": "Carved evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12154" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3", + "examine": "Can be used to create Summoning pouches.", + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12155" + }, + { + "ge_buy_limit": "5000", + "examine": "This is what bees craft.", + "grand_exchange_price": "393", + "durability": null, + "name": "Honeycomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12156" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "393", + "durability": null, + "name": "Honeycomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12157" + }, + { + "shop_price": "1", + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Gold charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12158" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Green charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12159" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Crimson charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12160" + }, + { + "examine": "A charm used to summon familiars", + "durability": null, + "name": "Abyssal charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12161" + }, + { + "examine": "A charm used to summon talon beasts.", + "durability": null, + "name": "Talon beast charm", + "archery_ticket_price": "0", + "id": "12162" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Blue charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12163" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void ravager.", + "durability": null, + "name": "Ravager charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12164" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void shifter.", + "durability": null, + "name": "Shifter charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12165" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void Spinner.", + "durability": null, + "name": "Spinner charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12166" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void torcher.", + "durability": null, + "name": "Torcher charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12167" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Obsidian charm", + "archery_ticket_price": "0", + "id": "12168" + }, + { + "requirements": "{23,99}", + "shop_price": "99000", + "examine": "The cape worn by master summoners.", + "durability": null, + "name": "Summoning cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12169", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{23,99}", + "durability": null, + "name": "Summoning cape(t)", + "archery_ticket_price": "0", + "id": "12170", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{23,99}", + "shop_price": "99000", + "examine": "Summoning skillcape hood.", + "durability": null, + "name": "Summoning hood", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12171", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "3597", + "durability": null, + "name": "Clean spirit weed", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12172" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3597", + "durability": null, + "name": "Clean spirit weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12173" + }, + { + "requirements": "{15,35}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "3634", + "durability": null, + "name": "Grimy spirit weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12174" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3634", + "durability": null, + "name": "Grimy spirit weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12175" + }, + { + "requirements": "{19,36}", + "ge_buy_limit": "100", + "examine": "A seed for spirit weed.", + "grand_exchange_price": "698", + "durability": null, + "name": "Spirit weed seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12176" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this spirit weed potion.", + "grand_exchange_price": "2963", + "durability": null, + "name": "Spirit weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12181" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2963", + "durability": null, + "name": "Spirit weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12182" + }, + { + "shop_price": "25", + "ge_buy_limit": "10000", + "examine": "Shards of an obelisk.", + "grand_exchange_price": "24", + "durability": null, + "name": "Spirit shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12183" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12184" + }, + { + "examine": "A fantastic saradomin owl.", + "durability": null, + "name": "Saradomin owl", + "archery_ticket_price": "0", + "id": "12185" + }, + { + "examine": "A stately zamorak hawk.", + "durability": null, + "name": "Zamorak hawk", + "archery_ticket_price": "0", + "id": "12186" + }, + { + "examine": "An impressive Guthix raptor.", + "durability": null, + "name": "Guthix raptor", + "archery_ticket_price": "0", + "id": "12187" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12190" + }, + { + "examine": "It's lively and energetic.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12191" + }, + { + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12192" + }, + { + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12193" + }, + { + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12194" + }, + { + "examine": "This little puppy is very quiet. (Puppy)Come by! Come by! (Adult)", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12195" + }, + { + "examine": "One proud little puppy. (Puppy)Looks like it's chewing a wasp. (Adult)", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12196" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Dragon hatchling", + "archery_ticket_price": "0", + "id": "12197" + }, + { + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12198" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12199" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12200" + }, + { + "examine": "It's a colour-coordinated lizard!", + "durability": null, + "name": "Chameleon", + "archery_ticket_price": "0", + "id": "12203" + }, + { + "remove_head": "true", + "requirements": "{23,10}", + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "Doors could be a problem, wearing these...", + "durability": null, + "weight": "1", + "equipment_slot": "0", + "grand_exchange_price": "40", + "name": "Antlers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12204", + "bonuses": "0,0,0,0,0,0,0,0,0,0,8,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40", + "durability": null, + "name": "Antlers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12205" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "Doors could be a problem, wearing these...", + "grand_exchange_price": "50", + "durability": null, + "name": "Antlers (charged)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12206", + "bonuses": "0,0,0,0,0,0,0,0,0,0,8,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{23,30}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "It's a little smelly in there.", + "durability": null, + "weight": "3", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "254", + "name": "Lizard skull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12207", + "bonuses": "0,0,0,0,1,2,3,4,2,3,12,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "254", + "durability": null, + "name": "Lizard skull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12208" + }, + { + "remove_head": "true", + "shop_price": "200", + "examine": "It's a little smelly in there.", + "durability": null, + "weight": "3", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "211", + "name": "Lizard skull (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12209", + "bonuses": "0,0,0,0,1,2,3,4,2,3,12,0,0,0,0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "234", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12210", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "234", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12211" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12212", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "662", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12213", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "662", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12214" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12215", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "90", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12216", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "90", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12217" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12218", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12219", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12220" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12221", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "211", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12222", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "211", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12223" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12224", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12294" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12296" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12298" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12300" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12302" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12304" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12306" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12308" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12310" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12312" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12314" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12316" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12318" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12320" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12322" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12324" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12326" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12328" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12330" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12332" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12334" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12336" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12338" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12340" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12342" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12344" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12346" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12348" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12350" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12352" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12354" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12356" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12358" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12360" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12362" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12364" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12366" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12368" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12370" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12372" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12374" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12376" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12378" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12380" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12382" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12384" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12386" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12388" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12390" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12392" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12394" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12396" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12398" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12400" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12402" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12404" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12406" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12408" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12410" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12412" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12414" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12416" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12418" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12420" + }, + { + "requirements": "{23,41}", + "ge_buy_limit": "5000", + "grand_exchange_price": "96", + "examine": "A scroll for a macaw familiar.", + "durability": null, + "name": "Herbcall scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12422" + }, + { + "requirements": "{23,69}", + "ge_buy_limit": "5000", + "grand_exchange_price": "258", + "examine": "A scroll for a fruit bat familiar.", + "durability": null, + "name": "Fruitfall scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12423" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "146", + "examine": "A scroll for an ibis familiar.", + "durability": null, + "name": "Fish rain scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12424" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7", + "examine": "A scroll for a spirit wolf familiar.", + "durability": null, + "name": "Howl scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12425" + }, + { + "requirements": "{23,47}", + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "examine": "A scroll for a magpie familiar.", + "durability": null, + "name": "Thieving fingers scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12426" + }, + { + "requirements": "{23,62}", + "ge_buy_limit": "5000", + "grand_exchange_price": "533", + "examine": "A scroll for an abyssal lurker familiar.", + "durability": null, + "name": "Abyssal stealth scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12427" + }, + { + "requirements": "{23,10}", + "ge_buy_limit": "5000", + "grand_exchange_price": "237", + "examine": "A scroll for a spirit spider familiar.", + "durability": null, + "name": "Egg spawn scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12428" + }, + { + "requirements": "{23,33}", + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "examine": "A scroll for a beaver familiar.", + "durability": null, + "name": "Multichop scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12429" + }, + { + "requirements": "{23,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "121", + "examine": "A scroll for an albino rat familiar.", + "durability": null, + "name": "Cheese feast scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12430" + }, + { + "requirements": "{23,40}", + "ge_buy_limit": "5000", + "grand_exchange_price": "39", + "examine": "A scroll for a bull ant familiar.", + "durability": null, + "name": "Unburden scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12431" + }, + { + "requirements": "{23,19}", + "ge_buy_limit": "5000", + "grand_exchange_price": "72", + "examine": "A scroll for a spirit scorpion familiar.", + "durability": null, + "name": "Venom shot scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12432" + }, + { + "requirements": "{23,32}", + "ge_buy_limit": "5000", + "grand_exchange_price": "99", + "examine": "A scroll for a honey badger familiar.", + "durability": null, + "name": "Insane ferocity scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12433" + }, + { + "requirements": "{23,88}", + "ge_buy_limit": "5000", + "grand_exchange_price": "299", + "examine": "A scroll for a unicorn stallion familiar.", + "durability": null, + "name": "Healing aura scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12434" + }, + { + "requirements": "{23,96}", + "ge_buy_limit": "5000", + "grand_exchange_price": "428", + "examine": "A scroll for a pack yak familiar.", + "durability": null, + "name": "Winter storage scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12435" + }, + { + "requirements": "{23,63}", + "ge_buy_limit": "5000", + "grand_exchange_price": "223", + "examine": "A scroll for a spirit cobra familiar.", + "durability": null, + "name": "Oph. incubation scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12436" + }, + { + "requirements": "{23,92}", + "ge_buy_limit": "5000", + "grand_exchange_price": "419", + "examine": "A scroll for a wolpertinger familiar.", + "durability": null, + "name": "Magic focus scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12437" + }, + { + "requirements": "{23,68}", + "ge_buy_limit": "5000", + "grand_exchange_price": "220", + "examine": "A scroll for a bunyip familiar.", + "durability": null, + "name": "Swallow whole scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12438" + }, + { + "requirements": "{23,67}", + "ge_buy_limit": "5000", + "grand_exchange_price": "269", + "examine": "A scroll for a war tortoise familiar.", + "durability": null, + "name": "Testudo scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12439" + }, + { + "requirements": "{23,28}", + "ge_buy_limit": "5000", + "grand_exchange_price": "47", + "examine": "A scroll for a compost mound familiar.", + "durability": null, + "name": "Generate compost scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12440" + }, + { + "requirements": "{23,52}", + "ge_buy_limit": "5000", + "grand_exchange_price": "35", + "examine": "A scroll for a spirit terrorbird familiar.", + "durability": null, + "name": "Tireless run scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12441" + }, + { + "requirements": "{23,80}", + "ge_buy_limit": "5000", + "grand_exchange_price": "174", + "examine": "A scroll for a hydra familiar.", + "durability": null, + "name": "Regrowth scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12442" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1118", + "examine": "A scroll for a Pest Control familiar.", + "durability": null, + "name": "Call to arms scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12443" + }, + { + "requirements": "{23,49}", + "ge_buy_limit": "5000", + "grand_exchange_price": "148", + "examine": "A scroll for a bloated leech familiar.", + "durability": null, + "name": "Blood drain scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12444" + }, + { + "requirements": "{23,4}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7", + "examine": "A scroll for a dreadfowl familiar.", + "durability": null, + "name": "Dreadfowl strike scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12445" + }, + { + "requirements": "{23,25}", + "ge_buy_limit": "5000", + "grand_exchange_price": "122", + "examine": "A scroll for a spirit kalphite familiar.", + "durability": null, + "name": "Sandstorm scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12446" + }, + { + "requirements": "{23,31}", + "ge_buy_limit": "1000", + "grand_exchange_price": "98", + "examine": "A scroll for a vampire bat familiar.", + "durability": null, + "name": "Vampire touch scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12447" + }, + { + "requirements": "{23,42}", + "ge_buy_limit": "5000", + "grand_exchange_price": "123", + "examine": "A scroll for an evil turnip familiar.", + "durability": null, + "name": "Evil flames scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12448" + }, + { + "requirements": "{23,74}", + "ge_buy_limit": "5000", + "grand_exchange_price": "219", + "examine": "A scroll for a granite lobster familiar.", + "durability": null, + "name": "Crushing claw scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12449" + }, + { + "requirements": "{23,75}", + "ge_buy_limit": "5000", + "grand_exchange_price": "221", + "examine": "A scroll for a praying mantis familiar.", + "durability": null, + "name": "Mantis strike scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12450" + }, + { + "requirements": "{23,71}", + "ge_buy_limit": "5000", + "grand_exchange_price": "12", + "examine": "A scroll for an arctic bear familiar.", + "durability": null, + "name": "Arctic blast scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12451" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "10", + "examine": "A scroll for a barker toad familiar.", + "durability": null, + "name": "Toad bark scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12452" + }, + { + "requirements": "{23,55}", + "ge_buy_limit": "5000", + "grand_exchange_price": "202", + "examine": "A scroll for a spirit jelly familiar.", + "durability": null, + "name": "Dissolve scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12453" + }, + { + "requirements": "{23,54}", + "ge_buy_limit": "5000", + "grand_exchange_price": "163", + "examine": "A scroll for an abyssal parasite familiar.", + "durability": null, + "name": "Abyssal drain scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12454" + }, + { + "requirements": "{23,58}", + "ge_buy_limit": "5000", + "grand_exchange_price": "198", + "examine": "A scroll for a karamthulhu overlord familiar.", + "durability": null, + "name": "Doomsphere scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12455" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "9", + "examine": "A scroll for a spirit dagannoth familiar.", + "durability": null, + "name": "Spike shot scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12456" + }, + { + "requirements": "{23,78}", + "ge_buy_limit": "5000", + "grand_exchange_price": "146", + "examine": "A scroll for a giant ent familiar.", + "durability": null, + "name": "Acorn missile scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12457" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "examine": "A scroll for a cockatrice variant familiar.", + "durability": null, + "name": "Petrifying gaze scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12458" + }, + { + "requirements": "{23,13}", + "ge_buy_limit": "5000", + "grand_exchange_price": "10", + "examine": "A scroll for a thorny snail familiar.", + "durability": null, + "name": "Slime spray scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12459" + }, + { + "requirements": "{23,18}", + "ge_buy_limit": "5000", + "grand_exchange_price": "47", + "examine": "A scroll for a desert wyrm familiar.", + "durability": null, + "name": "Electric lash scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12460" + }, + { + "requirements": "{23,36}", + "ge_buy_limit": "5000", + "grand_exchange_price": "135", + "examine": "A scroll for a bronze minotaur familiar.", + "durability": null, + "name": "Bronze bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12461" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "180", + "examine": "A scroll for an iron minotaur familiar.", + "durability": null, + "name": "Iron bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12462" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "182", + "examine": "A scroll for a steel minotaur familiar.", + "durability": null, + "name": "Steel bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12463" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "198", + "examine": "A scroll for a mithril minotaur familiar.", + "durability": null, + "name": "Mith bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12464" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "203", + "examine": "A scroll for an adamant minotaur familiar.", + "durability": null, + "name": "Addy bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12465" + }, + { + "requirements": "{23,86}", + "ge_buy_limit": "5000", + "grand_exchange_price": "67", + "examine": "A scroll for a rune minotaur familiar.", + "durability": null, + "name": "Rune bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12466" + }, + { + "requirements": "{23,64}", + "ge_buy_limit": "5000", + "grand_exchange_price": "171", + "examine": "A scroll for a stranger plant familiar.", + "durability": null, + "name": "Poisonous blast scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12467" + }, + { + "requirements": "{23,61}", + "ge_buy_limit": "5000", + "grand_exchange_price": "170", + "examine": "A scroll for a smoke devil familiar.", + "durability": null, + "name": "Dust cloud scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12468" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12469" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12471" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12473" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12475" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Red dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12477" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Blue dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12478" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Green dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12479" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Black dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12480" + }, + { + "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.", + "durability": null, + "name": "Baby penguin", + "archery_ticket_price": "0", + "id": "12481" + }, + { + "examine": "I can hatch this in an Incubator.", + "durability": null, + "name": "Penguin egg", + "archery_ticket_price": "0", + "id": "12483" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12484" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12485" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12486" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Raccoon", + "archery_ticket_price": "0", + "id": "12487" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12488" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12489" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12490" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12491" + }, + { + "examine": "It's a colour-coordinated lizard!", + "durability": null, + "name": "Baby chameleon", + "archery_ticket_price": "0", + "id": "12492" + }, + { + "examine": "It's a colour-coordinated lizard!", + "durability": null, + "name": "Chameleon", + "archery_ticket_price": "0", + "id": "12493" + }, + { + "examine": "A lizard's egg.", + "durability": null, + "name": "Chameleon egg", + "weight": "1", + "archery_ticket_price": "0", + "id": "12494" + }, + { + "examine": "A lizard's egg.", + "durability": null, + "name": "Chameleon egg", + "weight": "1", + "archery_ticket_price": "0", + "id": "12495" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12496" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12498" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12499" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12500" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12501" + }, + { + "examine": "Apparently, this token is worth one baby giant crab to someone called Nung.", + "durability": null, + "name": "Crunchy claw token", + "archery_ticket_price": "0", + "id": "12502" + }, + { + "examine": "A fluffy chick.", + "durability": null, + "name": "Saradomin chick", + "archery_ticket_price": "0", + "id": "12503" + }, + { + "examine": "Lovely blue plumage.", + "durability": null, + "name": "Saradomin bird", + "archery_ticket_price": "0", + "id": "12504" + }, + { + "examine": "A fantastic saradomin owl.", + "durability": null, + "name": "Saradomin owl", + "archery_ticket_price": "0", + "id": "12505" + }, + { + "examine": "A fluffy chick.", + "durability": null, + "name": "Zamorak chick", + "archery_ticket_price": "0", + "id": "12506" + }, + { + "examine": "Lovely red plumage.", + "durability": null, + "name": "Zamorak bird", + "archery_ticket_price": "0", + "id": "12507" + }, + { + "examine": "A stately zamorak hawk.", + "durability": null, + "name": "Zamorak hawk", + "archery_ticket_price": "0", + "id": "12508" + }, + { + "examine": "A fluffy chick.", + "durability": null, + "name": "Guthix chick", + "archery_ticket_price": "0", + "id": "12509" + }, + { + "examine": "Lovely green plumage.", + "durability": null, + "name": "Guthix bird", + "archery_ticket_price": "0", + "id": "12510" + }, + { + "examine": "An impressive Guthix raptor.", + "durability": null, + "name": "Guthix raptor", + "archery_ticket_price": "0", + "id": "12511" + }, + { + "requirements": "{4,23}", + "examine": "It's lively and energetic.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12512" + }, + { + "requirements": "{4,23}", + "examine": "It's lively and energetic.", + "durability": null, + "name": "Terrier", + "archery_ticket_price": "0", + "id": "12513" + }, + { + "requirements": "{4,23}", + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12514" + }, + { + "requirements": "{4,23}", + "examine": "An aerodynamic doggy.", + "durability": null, + "name": "Greyhound", + "archery_ticket_price": "0", + "id": "12515" + }, + { + "requirements": "{4,23}", + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12516" + }, + { + "requirements": "{4,23}", + "examine": "My most faithful friend.", + "durability": null, + "name": "Labrador", + "archery_ticket_price": "0", + "id": "12517" + }, + { + "requirements": "{4,23}", + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12518" + }, + { + "requirements": "{4,23}", + "examine": "A purebred doggy.", + "durability": null, + "name": "Dalmatian", + "archery_ticket_price": "0", + "id": "12519" + }, + { + "requirements": "{4,23}", + "examine": "This little puppy is very quiet.", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12520" + }, + { + "requirements": "{4,23}", + "examine": "Come by! Come by!", + "durability": null, + "name": "Sheepdog", + "archery_ticket_price": "0", + "id": "12521" + }, + { + "requirements": "{4,23}", + "examine": "One proud little puppy.", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12522" + }, + { + "requirements": "{4,23}", + "examine": "Looks like it's chewing a wasp.", + "durability": null, + "name": "Bulldog", + "archery_ticket_price": "0", + "id": "12523" + }, + { + "requirements": "{23,99}", + "shop_price": "99000", + "examine": "The cape worn by master summoners.", + "durability": null, + "name": "Summoning cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12524", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "1", + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Gold charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12527" + }, + { + "examine": "A key to Pikkupstix's trapdoor.", + "durability": null, + "name": "Trapdoor key", + "archery_ticket_price": "0", + "id": "12528" + }, + { + "shop_price": "25", + "examine": "Shards of an obelisk.", + "grand_exchange_price": "24", + "durability": null, + "name": "Spirit shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12530" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1914", + "examine": "I can summon an ibis familiar with this.", + "durability": null, + "name": "Ibis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12531" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1914", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ibis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12532" + }, + { + "requirements": "{23,16}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7", + "examine": "A scroll for a granite crab familiar.", + "durability": null, + "name": "Stony shell scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12533" + }, + { + "ge_buy_limit": "1000", + "examine": "Meat from a creature that can be hunted in Isafdar.", + "grand_exchange_price": "7968", + "durability": null, + "name": "Raw pawya meat", + "tradeable": "true", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "12535" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7968", + "durability": null, + "name": "Raw pawya meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12536" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12538" + }, + { + "ge_buy_limit": "5000", + "examine": "Spikes from a grenwall.", + "grand_exchange_price": "1704", + "durability": null, + "name": "Grenwall spikes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12539" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12545" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12547" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12548" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12549" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12550" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Baby platypus", + "archery_ticket_price": "0", + "id": "12551" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Baby platypus", + "archery_ticket_price": "0", + "id": "12552" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Baby platypus", + "archery_ticket_price": "0", + "id": "12553" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Patrick", + "archery_ticket_price": "0", + "id": "12554" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Penelope", + "archery_ticket_price": "0", + "id": "12555" + }, + { + "examine": "I bet he can't wait until it's cooked.", + "durability": null, + "name": "Peter", + "archery_ticket_price": "0", + "id": "12556" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Peanut", + "archery_ticket_price": "0", + "id": "12557" + }, + { + "examine": "Marginally better than egg on your face.", + "durability": null, + "name": "Mud", + "archery_ticket_price": "0", + "id": "12558", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "The height of style?", + "grand_exchange_price": "1004", + "durability": null, + "name": "Ogre wig", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12559", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1004", + "durability": null, + "name": "Ogre wig", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12560" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "It's a little big on me.", + "grand_exchange_price": "197", + "durability": null, + "name": "Ogre kilt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12561", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "197", + "durability": null, + "name": "Ogre kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12562" + }, + { + "remove_sleeves": "true", + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "It's a little big on me.", + "grand_exchange_price": "536", + "durability": null, + "name": "Ogre top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12563", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "536", + "durability": null, + "name": "Ogre top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12564" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "Good for stomping.", + "grand_exchange_price": "420", + "durability": null, + "name": "Ogre boots", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "12565", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "420", + "durability": null, + "name": "Ogre boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12566" + }, + { + "ge_buy_limit": "100", + "examine": "It's a slightly sickly-looking fur.", + "grand_exchange_price": "1468", + "durability": null, + "name": "Diseased kebbit fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12567" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "A furry hat with an unnerving tail.", + "grand_exchange_price": "3656", + "durability": null, + "name": "Davy kebbit hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12568", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3656", + "durability": null, + "name": "Davy kebbit hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12569" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "8684", + "examine": "A big piece of tree.", + "walk_anim": "8684", + "durability": null, + "weight": "10", + "turn90ccw_anim": "8684", + "attack_speed": "7", + "weapon_interface": "10", + "turn180_anim": "8684", + "render_anim": "1157", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,401,401", + "grand_exchange_price": "77", + "stand_anim": "8683", + "name": "Ogre club", + "tradeable": "true", + "run_anim": "8685", + "archery_ticket_price": "0", + "id": "12570", + "stand_turn_anim": "823", + "bonuses": "-6,-2,15,0,0,0,0,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "77", + "durability": null, + "name": "Ogre club", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12571" + }, + { + "ge_buy_limit": "100", + "examine": "A delicate, sweet-smelling flower.", + "grand_exchange_price": "20", + "durability": null, + "name": "Lavender", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12572" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Lavender", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12573" + }, + { + "ge_buy_limit": "100", + "examine": "A stiff, pungent grass.", + "grand_exchange_price": "31", + "durability": null, + "name": "Fever grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12574" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "31", + "durability": null, + "name": "Fever grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12575" + }, + { + "ge_buy_limit": "100", + "examine": "A cheerful, aromatic flower.", + "grand_exchange_price": "12", + "durability": null, + "name": "Tansymum", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12576" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Tansymum", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12577" + }, + { + "turn90cw_anim": "8681", + "examine": "A stiff, pungent grass.", + "walk_anim": "8681", + "durability": null, + "turn90ccw_anim": "8681", + "turn180_anim": "8681", + "render_anim": "294", + "equipment_slot": "3", + "grand_exchange_price": "41", + "stand_anim": "8682", + "name": "Smouldering fever grass", + "tradeable": "true", + "run_anim": "8690", + "archery_ticket_price": "0", + "id": "12578", + "stand_turn_anim": "8682" + }, + { + "turn90cw_anim": "8681", + "examine": "A delicate, sweet-smelling flower.", + "walk_anim": "8681", + "durability": null, + "turn90ccw_anim": "8681", + "turn180_anim": "8681", + "render_anim": "294", + "equipment_slot": "3", + "grand_exchange_price": "29", + "stand_anim": "8682", + "name": "Smouldering lavender", + "tradeable": "true", + "run_anim": "8690", + "archery_ticket_price": "0", + "id": "12579", + "stand_turn_anim": "8682" + }, + { + "turn90cw_anim": "8681", + "examine": "A cheerful, aromatic flower.", + "walk_anim": "8681", + "durability": null, + "turn90ccw_anim": "8681", + "turn180_anim": "8681", + "render_anim": "294", + "equipment_slot": "3", + "grand_exchange_price": "18", + "stand_anim": "8682", + "name": "Smouldering tansymum", + "tradeable": "true", + "run_anim": "8690", + "archery_ticket_price": "0", + "id": "12580", + "stand_turn_anim": "8682" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a eucalyptus tree.", + "grand_exchange_price": "507", + "durability": null, + "name": "Eucalyptus logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12581", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "507", + "durability": null, + "name": "Eucalyptus logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12582" + }, + { + "ge_buy_limit": "1000", + "examine": "Logs cut from a eucalyptus tree.", + "grand_exchange_price": "3609", + "durability": null, + "name": "Eucalyptus pyre logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12583" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3609", + "durability": null, + "name": "Eucalyptus pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12584" + }, + { + "ge_buy_limit": "100", + "examine": "A modest and mild plant.", + "grand_exchange_price": "20", + "durability": null, + "name": "Primweed", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12588" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Primweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12589" + }, + { + "ge_buy_limit": "100", + "examine": "A pretty but putrid flower.", + "grand_exchange_price": "16", + "durability": null, + "name": "Stinkbloom", + "tradeable": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "12590" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Stinkbloom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12591" + }, + { + "durability": null, + "name": "Diseased kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12592" + }, + { + "destroy_message": "If you need to, you can get another from the Tyras Camp catapult engineer.", + "examine": "The plans for repairing the Tyras Camp catapult.", + "durability": null, + "name": "Catapult schematics", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12593" + }, + { + "destroy_message": "If you need to, you can get another from General Hining in the Tyras Camp.", + "examine": "General Hining wants me to deliver this to the Catapult Engineer.", + "durability": null, + "name": "Engineer's letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12594" + }, + { + "destroy_message": "You can always get another from the drunken sailor in Port Sarim.", + "examine": "Taken from a drunken sailor in Port Sarim.", + "durability": null, + "name": "Sailor's hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "12595", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another set from Thaki the delivery dwarf in Port Sarim.", + "examine": "Dwarf-made parts for repairing the Tyras Camp catapult.", + "durability": null, + "name": "Metal catapult parts", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12596" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12597" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12598" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12599" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12600" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12601" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12602" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12603" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12604" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12605" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12606" + }, + { + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12607", + "equipment_slot": "5" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "An amulet of Farming with 1 charge.", + "grand_exchange_price": "271", + "durability": null, + "name": "Amulet of farming(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12608", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "271", + "durability": null, + "name": "Amulet of farming(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12609" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 2 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12610", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12611" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 3 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12612", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12613" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 4 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12614", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12615" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 5 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12616", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12617" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 6 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12618", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12619" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 7 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12620", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12621" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "An amulet of Farming with 8 charges.", + "grand_exchange_price": "210", + "durability": null, + "name": "Amulet of farming(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12622", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "210", + "durability": null, + "name": "Amulet of farming(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12623" + }, + { + "shop_price": "10", + "examine": "An ogleroot. How odd.", + "durability": null, + "name": "Ogleroot", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0", + "id": "12624" + }, + { + "destroy_message": "You will need to obtain more flags from Mrs. Winkin or Farmer Blinkin if you have lost all of the flags you have.", + "shop_price": "500", + "examine": "A flag to put in the ground.", + "durability": null, + "name": "Flag", + "tradeable": "false", + "destroy": "true", + "weight": "0", + "archery_ticket_price": "0", + "id": "12625" + }, + { + "destroy_message": "You will need to get another exam paper from Professor Henry", + "examine": "Player Safety test", + "durability": null, + "name": "Test paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12626" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12627" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12628" + }, + { + "destroy_message": "You can get another pair of gloves from the chest in the Stronghold of Player Safety.", + "examine": "Gloves from the Stronghold of Player Safety.", + "durability": null, + "name": "Safety gloves", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12629", + "bonuses": "0,0,0,0,0,1,2,2,1,2,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Rubium is very unstable", + "shop_price": "10", + "examine": "Be careful with this near water.", + "durability": null, + "name": "Rubium", + "weight": "1", + "archery_ticket_price": "0", + "id": "12630" + }, + { + "destroy_message": "The train is tiny", + "examine": "(While on the ground) Kennith's lost toy. (While in your inventory) A wooden toy train.", + "durability": null, + "name": "Toy train", + "archery_ticket_price": "0", + "id": "12631" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12632" + }, + { + "examine": "The jar is shaking violently!", + "durability": null, + "name": "Super fishing explosive", + "archery_ticket_price": "0", + "id": "12633" + }, + { + "destroy_message": "You can get another chocatrice cape from Diango in Draynor Village.", + "examine": "A thick, orange cape.", + "durability": null, + "name": "Chocatrice cape", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12634", + "equipment_slot": "1" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12635" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12636" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12637" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12638" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12639" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12640" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12641" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12642" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12643" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12644" + }, + { + "destroy_message": "You can get another chocatrice cape from Diango in Draynor Village.", + "examine": "A thick, orange cape.", + "durability": null, + "name": "Chocatrice cape", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12645", + "equipment_slot": "1" + }, + { + "examine": "A chocolate egg wrapped in coloured foil.", + "durability": null, + "name": "Chocolate egg", + "archery_ticket_price": "0", + "id": "12646" + }, + { + "examine": "A chocolate egg wrapped in coloured foil.", + "durability": null, + "name": "Chocolate egg", + "archery_ticket_price": "0", + "id": "12647" + }, + { + "examine": "A chocolate egg wrapped in coloured foil.", + "durability": null, + "name": "Chocolate egg", + "archery_ticket_price": "0", + "id": "12648" + }, + { + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12649" + }, + { + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "12650" + }, + { + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "12651" + }, + { + "examine": "It's a bucket of coal from the Easter Bunny's warren.", + "durability": null, + "name": "Bucket of coal", + "weight": "3", + "archery_ticket_price": "0", + "id": "12652" + }, + { + "examine": "It's a bucket of coal from the Easter Bunny's warren.", + "durability": null, + "name": "Bucket of coal", + "weight": "3", + "archery_ticket_price": "0", + "id": "12653" + }, + { + "destroy_message": "Are you sure you want to destroy this object?
You can get another in the Easter Bunny's warren.", + "examine": "A stripy brown egg.", + "grand_exchange_price": "1255", + "durability": null, + "name": "Cockatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12654" + }, + { + "destroy_message": "Are you sure you want to destroy this object?
You can make another at the Easter Bunny's warren.", + "examine": "A cockatrice egg that has been dipped in molten chocolate.", + "durability": null, + "name": "Chocatrice egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12655", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some chocolate chunks.", + "durability": null, + "name": "Chocolate chunks", + "archery_ticket_price": "0", + "id": "12657" + }, + { + "remove_head": "true", + "shop_price": "3520", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "1913", + "name": "Adamant full helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12658", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "3520", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "1913", + "name": "Adamant full helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12659", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Lightweight head protection.", + "grand_exchange_price": "1040", + "durability": null, + "name": "Snakeskin bandana (e)", + "tradeable": "false", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "12660", + "absorb": "0,2,1", + "bonuses": "0,0,0,-5,4,2,4,4,2,2,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Lightweight head protection.", + "grand_exchange_price": "1040", + "durability": null, + "name": "Snakeskin bandana (charged)", + "tradeable": "false", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "12661", + "absorb": "0,2,1", + "bonuses": "0,0,0,-5,4,2,4,4,2,2,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A wooden helmet.", + "durability": null, + "weight": "0.9", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5623", + "name": "Splitbark helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12662", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A wooden helmet.", + "durability": null, + "weight": "0.9", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5623", + "name": "Splitbark helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12663", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21200", + "name": "Rune full helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12664", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21200", + "name": "Rune full helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12665", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Makes the wearer pretty intimidating.", + "durability": null, + "weight": "1.3", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "61200", + "name": "Dragon med helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12666", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Makes the wearer pretty intimidating.", + "durability": null, + "weight": "1.3", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "61200", + "name": "Dragon med helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12667", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm (e)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12668", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm (charged)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12669", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A helmet of great craftmanship.", + "durability": null, + "weight": "0.5", + "absorb": "0,5,2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "3932989", + "name": "Armadyl helmet (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12670", + "bonuses": "-5,-5,-5,-5,10,6,8,10,10,8,12,0,1,0,0" + }, + { + "remove_head": "true", + "examine": "A helmet of great craftmanship.", + "durability": null, + "weight": "0.5", + "absorb": "0,5,2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "3932989", + "name": "Armadyl helmet (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12671", + "bonuses": "-5,-5,-5,-5,10,6,8,10,10,8,12,0,1,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by archers.", + "durability": null, + "weight": "2", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "41000", + "name": "Archer helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12672", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by archers.", + "durability": null, + "weight": "2", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "41000", + "name": "Archer helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12673", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by berserkers.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48800", + "name": "Berserker helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12674", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by berserkers.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48800", + "name": "Berserker helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12675", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by warriors.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48200", + "name": "Warrior helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12676", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by warriors.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48200", + "name": "Warrior helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12677", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by farseers.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "46400", + "name": "Farseer helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12678", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by farseers.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "46400", + "name": "Farseer helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12679", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "50000", + "examine": "A gift from Neitiznot's Burgher.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "equipment_slot": "0", + "grand_exchange_price": "44831", + "name": "Helm of neitiznot (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12680", + "bonuses": "0,0,0,0,0,31,29,34,3,30,8,3,3,0,0" + }, + { + "remove_head": "true", + "shop_price": "50000", + "examine": "A gift from Neitiznot's Burgher.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "equipment_slot": "0", + "grand_exchange_price": "44831", + "name": "Helm of neitiznot (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12681", + "bonuses": "0,0,0,0,0,31,29,34,3,30,8,3,3,0,0" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12682" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12684" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12686" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12688" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12690" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12692" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12694" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12696" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12698" + }, + { + "requirements": "{4,23}", + "examine": "A hyperactive little pup.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12700" + }, + { + "requirements": "{4,23}", + "examine": "A hyperactive little pup.", + "durability": null, + "name": "Terrier", + "archery_ticket_price": "0", + "id": "12701" + }, + { + "requirements": "{4,23}", + "examine": "Such a brave doggy.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12702" + }, + { + "requirements": "{4,23}", + "examine": "Such a brave doggy.", + "durability": null, + "name": "Terrier", + "archery_ticket_price": "0", + "id": "12703" + }, + { + "requirements": "{4,23}", + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12704" + }, + { + "requirements": "{4,23}", + "examine": "An aerodynamic doggy.", + "durability": null, + "name": "Greyhound", + "archery_ticket_price": "0", + "id": "12705" + }, + { + "requirements": "{4,23}", + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12706" + }, + { + "requirements": "{4,23}", + "examine": "An aerodynamic doggy.", + "durability": null, + "name": "Greyhound", + "archery_ticket_price": "0", + "id": "12707" + }, + { + "requirements": "{4,23}", + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12708" + }, + { + "requirements": "{4,23}", + "examine": "My most faithful friend.", + "durability": null, + "name": "Labrador", + "archery_ticket_price": "0", + "id": "12709" + }, + { + "requirements": "{4,23}", + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12710" + }, + { + "requirements": "{4,23}", + "examine": "My most faithful friend.", + "durability": null, + "name": "Labrador", + "archery_ticket_price": "0", + "id": "12711" + }, + { + "requirements": "{4,23}", + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12712" + }, + { + "requirements": "{4,23}", + "examine": "A purebred doggy.", + "durability": null, + "name": "Dalmatian", + "archery_ticket_price": "0", + "id": "12713" + }, + { + "requirements": "{4,23}", + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12714" + }, + { + "requirements": "{4,23}", + "examine": "A purebred doggy.", + "durability": null, + "name": "Dalmatian", + "archery_ticket_price": "0", + "id": "12715" + }, + { + "requirements": "{4,23}", + "examine": "This little puppy is very quiet.", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12716" + }, + { + "requirements": "{4,23}", + "examine": "Come by! Come by!", + "durability": null, + "name": "Sheepdog", + "archery_ticket_price": "0", + "id": "12717" + }, + { + "requirements": "{4,23}", + "examine": "This little puppy is very quiet.", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12718" + }, + { + "requirements": "{4,23}", + "examine": "Come by! Come by!", + "durability": null, + "name": "Sheepdog", + "archery_ticket_price": "0", + "id": "12719" + }, + { + "requirements": "{4,23}", + "examine": "One proud little puppy.", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12720" + }, + { + "requirements": "{4,23}", + "examine": "Looks like it's chewing a wasp.", + "durability": null, + "name": "Bulldog", + "archery_ticket_price": "0", + "id": "12721" + }, + { + "requirements": "{4,23}", + "examine": "One proud little puppy.", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12722" + }, + { + "requirements": "{4,23}", + "examine": "Looks like it's chewing a wasp.", + "durability": null, + "name": "Bulldog", + "archery_ticket_price": "0", + "id": "12723" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12724" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12725" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12726" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12727" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12728" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12729" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12730" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12731" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12732" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12733" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12734" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Raccoon", + "archery_ticket_price": "0", + "id": "12735" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12736" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Raccoon", + "archery_ticket_price": "0", + "id": "12737" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12738" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12739" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12740" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12741" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12742" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12743" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12744" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12745" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12746" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12747" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12748" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12749" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12750" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12751" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12752" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12753" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12754" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12755" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12756" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12757" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12758" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12759" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12760" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12761" + }, + { + "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.", + "durability": null, + "name": "Baby penguin", + "archery_ticket_price": "0", + "id": "12763" + }, + { + "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.", + "durability": null, + "name": "Baby penguin", + "archery_ticket_price": "0", + "id": "12765" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12766" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12767" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12768" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12769" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12770" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12771" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12772" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12773" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12774" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12775" + }, + { + "requirements": "{23,85}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2613", + "examine": "I can summon a swamp titan familiar with this.", + "durability": null, + "name": "Swamp titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12776" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2613", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Swamp titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12777" + }, + { + "requirements": "{17,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "130", + "examine": "I can summon a spirit mosquito familiar with this.", + "durability": null, + "name": "Spirit mosquito pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12778" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "130", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit mosquito pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12779" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "16100", + "examine": "I can summon a void spinner familiar with this.", + "durability": null, + "name": "Void spinner pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12780" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "16100", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void spinner pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12781" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2458", + "examine": "I can summon a forge regent familiar with this.", + "durability": null, + "name": "Forge regent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12782" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2458", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Forge regent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12783" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "4097", + "examine": "I can summon a spirit larupia familiar with this.", + "durability": null, + "name": "Spirit larupia pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12784" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4097", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit larupia pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12785" + }, + { + "requirements": "{23,89}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3856", + "examine": "I can summon a geyser titan familiar with this.", + "durability": null, + "name": "Geyser titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12786" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3856", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Geyser titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12787" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3840", + "examine": "I can summon a lava titan familiar with this.", + "durability": null, + "name": "Lava titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12788" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3840", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Lava titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12789" + }, + { + "requirements": "{23,99}", + "ge_buy_limit": "5000", + "grand_exchange_price": "5800", + "examine": "I can summon a steel titan familiar with this.", + "durability": null, + "name": "Steel titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12790" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Steel titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12791" + }, + { + "requirements": "{23,73}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3436", + "examine": "I can summon an obsidian golem familiar with this.", + "durability": null, + "name": "Obsidian golem pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12792" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3436", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Obsidian golem pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12793" + }, + { + "requirements": "{23,77}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3017", + "examine": "I can summon a talon beast familiar with this.", + "durability": null, + "name": "Talon beast pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12794" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3017", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Talon beast pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12795" + }, + { + "requirements": "{23,93}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2991", + "examine": "I can summon an abyssal titan familiar with this.", + "durability": null, + "name": "Abyssal titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12796" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2991", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Abyssal titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12797" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "18300", + "examine": "I can summon a void torcher familiar with this.", + "durability": null, + "name": "Void torcher pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12798" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "18300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void torcher pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12799" + }, + { + "requirements": "{23,29}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1513", + "examine": "I can summon a giant chinchompa familiar with this.", + "durability": null, + "name": "Giant chinchompa pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12800" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1513", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Giant chinchompa pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12801" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3567", + "examine": "I can summon a fire titan familiar with this.", + "durability": null, + "name": "Fire titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12802" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3567", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Fire titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12803" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3548", + "examine": "I can summon a moss titan familiar with this.", + "durability": null, + "name": "Moss titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12804" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3548", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Moss titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12805" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7184", + "examine": "I can summon an ice titan familiar with this.", + "durability": null, + "name": "Ice titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12806" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7184", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ice titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12807" + }, + { + "requirements": "{22,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1116", + "examine": "I can summon a spirit Tz-Kih familiar with this.", + "durability": null, + "name": "Spirit tz-kih pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12808" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1116", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit tz-kih pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12809" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7919", + "examine": "I can summon a spirit graahk familiar with this.", + "durability": null, + "name": "Spirit graahk pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12810" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7919", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit graahk pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12811" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "13300", + "examine": "I can summon a spirit kyatt familiar with this.", + "durability": null, + "name": "Spirit kyatt pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12812" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit kyatt pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12813" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "18600", + "examine": "I can summon a void shifter familiar with this.", + "durability": null, + "name": "Void shifter pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12814" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "18600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void shifter pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12815" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1951", + "examine": "I can summon a pyrelord familiar with this.", + "durability": null, + "name": "Pyrelord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12816" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1951", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Pyrelord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12817" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "10700", + "examine": "I can summon a void ravager familiar with this.", + "durability": null, + "name": "Void ravager pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12818" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "10700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void ravager pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12819" + }, + { + "requirements": "{23,70}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1382", + "examine": "I can summon a ravenous locust familiar with this.", + "durability": null, + "name": "Ravenous locust pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12820" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1382", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ravenous locust pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12821" + }, + { + "requirements": "{23,95}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3470", + "examine": "I can summon an iron titan familiar with this.", + "durability": null, + "name": "Iron titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12822" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3470", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Iron titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12823" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "380", + "examine": "A scroll for an elemental titan familiar.", + "durability": null, + "name": "Titan's con. scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12824" + }, + { + "requirements": "{23,99}", + "ge_buy_limit": "5000", + "grand_exchange_price": "646", + "examine": "A scroll for a steel titan familiar.", + "durability": null, + "name": "Steel of legends scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12825" + }, + { + "requirements": "{23,73}", + "ge_buy_limit": "5000", + "grand_exchange_price": "271", + "examine": "A scroll for an obsidian golem familiar.", + "durability": null, + "name": "Volcanic str. scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12826" + }, + { + "requirements": "{23,93}", + "ge_buy_limit": "5000", + "grand_exchange_price": "310", + "examine": "A scroll for an abyssal titan familiar.", + "durability": null, + "name": "Essence shipment scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12827" + }, + { + "requirements": "{23,95}", + "ge_buy_limit": "5000", + "grand_exchange_price": "389", + "examine": "A scroll for an iron titan familiar.", + "durability": null, + "name": "Iron within scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12828" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "146", + "examine": "A scroll for a pyrelord familiar.", + "durability": null, + "name": "Immense heat scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12829" + }, + { + "requirements": "{23,70}", + "ge_buy_limit": "5000", + "grand_exchange_price": "149", + "examine": "A scroll for a ravenous locust familiar.", + "durability": null, + "name": "Famine scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12830" + }, + { + "requirements": "{23,77}", + "ge_buy_limit": "5000", + "grand_exchange_price": "245", + "examine": "A scroll for a talon beast familiar.", + "durability": null, + "name": "Deadly claw scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12831" + }, + { + "requirements": "{23,85}", + "ge_buy_limit": "5000", + "grand_exchange_price": "192", + "examine": "A scroll for a swamp titan familiar.", + "durability": null, + "name": "Swamp plague scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12832" + }, + { + "requirements": "{23,89}", + "ge_buy_limit": "5000", + "grand_exchange_price": "294", + "examine": "A scroll for a geyser titan familiar.", + "durability": null, + "name": "Boil scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12833" + }, + { + "requirements": "{23,29}", + "ge_buy_limit": "5000", + "grand_exchange_price": "103", + "examine": "A scroll for a giant chinchompa familiar.", + "durability": null, + "name": "Explode scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12834" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "250", + "examine": "A scroll for a spirit graahk familiar.", + "durability": null, + "name": "Goad scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12835" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1428", + "examine": "A scroll for a spirit kyatt familiar.", + "durability": null, + "name": "Ambush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12836" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "300", + "examine": "A scroll for a lava titan familiar.", + "durability": null, + "name": "Ebon thunder scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12837" + }, + { + "requirements": "{23,17}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1", + "examine": "A scroll for a spirit mosquito familiar.", + "durability": null, + "name": "Pester scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12838" + }, + { + "requirements": "{23,22}", + "ge_buy_limit": "5000", + "grand_exchange_price": "78", + "examine": "A scroll for a spirit Tz-Kih familiar.", + "durability": null, + "name": "Fireball assault scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12839" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "196", + "examine": "A scroll for a spirit larupia familiar.", + "durability": null, + "name": "Rending scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12840" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "173", + "examine": "A scroll for a forge regent familiar.", + "durability": null, + "name": "Inferno scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12841" + }, + { + "turn90cw_anim": "8963", + "stand_anim": "8964", + "walk_anim": "8961", + "durability": null, + "name": "Gnomecopter", + "run_anim": "8963", + "archery_ticket_price": "0", + "turn90ccw_anim": "8963", + "id": "12842", + "stand_turn_anim": "8963", + "turn180_anim": "8963", + "equipment_slot": "1" + }, + { + "destroy_message": "This is for use with the gnomecopters, north of Lumbridge. Sasquine Huburns will give you another one.", + "examine": "It tells gnomecopters where you wish to go.", + "durability": null, + "name": "Gnomecopter ticket", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12843" + }, + { + "shop_price": "100", + "turn90cw_anim": "8983", + "examine": "A kite with a dragon on it.", + "walk_anim": "8982", + "durability": null, + "turn90ccw_anim": "8984", + "attack_speed": "4", + "turn180_anim": "8985", + "render_anim": "593", + "equipment_slot": "3", + "stand_anim": "8981", + "name": "Toy kite", + "run_anim": "8986", + "archery_ticket_price": "0", + "id": "12844", + "stand_turn_anim": "8987" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12845", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12846", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12847", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12848", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12849", + "stand_turn_anim": "9000" + }, + { + "examine": "A generic elemental rune", + "durability": null, + "name": "Elemental rune", + "archery_ticket_price": "0", + "id": "12850" + }, + { + "examine": "A generic non-elemental rune", + "durability": null, + "name": "Catalytic rune", + "archery_ticket_price": "0", + "id": "12851" + }, + { + "examine": "A token awarded for taking part in the Fist of Guthix minigame.", + "durability": null, + "name": "Fist of guthix token", + "archery_ticket_price": "0", + "id": "12852" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box of bandages for healing.", + "durability": null, + "name": "Bandages", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12853" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Teleports you to the centre of the arena.", + "durability": null, + "name": "Tele-orb", + "archery_ticket_price": "0", + "id": "12855" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Irit gloves", + "archery_ticket_price": "0", + "id": "12856", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "100", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Avantoe gloves", + "archery_ticket_price": "0", + "id": "12857", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Kwuarm gloves", + "archery_ticket_price": "0", + "id": "12858", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Cadantine gloves", + "archery_ticket_price": "0", + "id": "12859", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Swordfish gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "12860", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves", + "durability": null, + "name": "Shark gloves", + "weight": "1", + "archery_ticket_price": "0", + "id": "12861", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Dragon slayer gloves", + "archery_ticket_price": "0", + "id": "12862", + "equipment_slot": "9" + }, + { + "destroy_message": "You can buy a new pair from the druids at the Fist of Guthix activity.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Air runecrafting gloves", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12863", + "equipment_slot": "9" + }, + { + "destroy_message": "You can buy a new pair from the druids at the Fist of Guthix activity.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Water runecrafting gloves", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12864", + "equipment_slot": "9" + }, + { + "destroy_message": "You can buy a new pair from the druids at the Fist of Guthix minigame.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Earth runecrafting gloves", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12865", + "equipment_slot": "9" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12866", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12867", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12868", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12869", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12870", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "ge_buy_limit": "10", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "78900", + "name": "Battle hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12871", + "bonuses": "0,0,0,2,0,3,2,3,2,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "78900", + "durability": null, + "name": "Battle hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12872" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12873", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12874", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12875", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12876", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12877", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "ge_buy_limit": "10", + "examine": "Its arcane power is waning.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "431400", + "name": "Battle robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12878", + "bonuses": "0,0,0,7,0,4,4,5,7,0,8,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "431400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Battle robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12879" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12880", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12881", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12882", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12883", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12884", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "ge_buy_limit": "10", + "examine": "Its arcane power is waning.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "538000", + "name": "Battle robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12885", + "bonuses": "0,0,0,6,0,4,3,4,6,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "538000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Battle robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12886" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12887", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12888", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12889", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12890", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12891", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "ge_buy_limit": "10", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "8504", + "name": "Druidic mage hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12892", + "bonuses": "0,0,0,1,0,0,0,0,1,0,1,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "8504", + "durability": null, + "name": "Druidic mage hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12893" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12894", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12895", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12896", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12897", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12898", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "ge_buy_limit": "10", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "76300", + "name": "Druidic mage top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12899", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "76300", + "durability": null, + "name": "Druidic mage top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12900" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12901", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12902", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12903", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12904", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12905", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "ge_buy_limit": "10", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "60800", + "name": "Druidic mage bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12906", + "bonuses": "0,0,0,2,0,0,0,0,2,0,2,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "60800", + "durability": null, + "name": "Druidic mage bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12907" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12908", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12909", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12910", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12911", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12912", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Not so spiky anymore.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2718", + "name": "Adamant spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12913", + "bonuses": "0,0,0,-6,-2,11,12,10,0,11,4,1,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "Not so spiky anymore!", + "grand_exchange_price": "2718", + "durability": null, + "name": "Adamant spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12914" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12915", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12916", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12917", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12918", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12919", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "ge_buy_limit": "10", + "examine": "Not so spiky anymore!", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "23700", + "name": "Adamant berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12920", + "bonuses": "0,0,0,-8,-2,12,14,13,-1,8,4,1,0,0,0" + }, + { + "ge_buy_limit": "10", + "examine": "Not so spiky anymore!", + "grand_exchange_price": "23700", + "durability": null, + "name": "Adamant berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12921" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12922", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0", + "point_price": "35" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12923", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12924", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12925", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12926", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "50500", + "name": "Rune spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12927", + "bonuses": "0,0,0,-6,-2,14,15,13,0,14,8,2,0,0,0" + }, + { + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "grand_exchange_price": "50500", + "durability": null, + "name": "Rune spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12928" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12929", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0", + "point_price": "35" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12930", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12931", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12932", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12933", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "135300", + "name": "Rune berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12934", + "bonuses": "0,0,0,-8,-2,16,18,17,-1,17,9,2,0,0,0" + }, + { + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "grand_exchange_price": "135300", + "durability": null, + "name": "Rune berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12935" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12936", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12937", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12938", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12939", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12940", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A worn out coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "92700", + "name": "Green d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12941", + "bonuses": "0,0,0,-1,1,1,2,2,1,2,1,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A worn out coif made of green dragonhide.", + "grand_exchange_price": "92700", + "durability": null, + "name": "Green d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12942" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12943", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12944", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "Fully charged: A coif made of blue dragonhide. Fully degraded: A worn out coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12945", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12946", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12947", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A worn out coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "131900", + "name": "Blue d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12948", + "bonuses": "0,0,0,-1,1,1,2,2,1,2,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A worn out coif made of blue dragonhide.", + "grand_exchange_price": "131900", + "durability": null, + "name": "Blue d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12949" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12950", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12951", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "Fully charged: A coif made of red dragonhide.Fully degraded: A worn out coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12952", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12953", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12954", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A worn out coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "156600", + "name": "Red d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12955", + "bonuses": "0,0,0,-1,2,1,2,3,1,2,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A worn out coif made of red dragonhide.", + "grand_exchange_price": "156600", + "durability": null, + "name": "Red d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12956" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12957", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12958", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12959", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12960", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "Fully charged: A coif made of black dragonhide. Fully degraded: A worn out coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12961", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "229000", + "name": "Black d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12962", + "bonuses": "0,0,0,-1,3,1,3,3,1,2,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A coif made of black dragonhide.", + "grand_exchange_price": "229000", + "durability": null, + "name": "Black d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12963" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12964", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12965", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12966", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12967", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12968", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "ge_buy_limit": "10", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "6511", + "name": "Combat hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12969", + "bonuses": "0,0,0,1,0,0,0,0,1,0,2,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "6511", + "durability": null, + "name": "Combat hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12970" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12971", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12972", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12973", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12974", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12975", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "ge_buy_limit": "10", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "61500", + "name": "Combat robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12976", + "bonuses": "0,0,0,3,0,0,0,0,3,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "61500", + "durability": null, + "name": "Combat robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12977" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12978", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12979", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12980", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12981", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12982", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "ge_buy_limit": "10", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "47800", + "name": "Combat robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12983", + "bonuses": "0,0,0,2,0,0,0,0,2,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "47800", + "durability": null, + "name": "Combat robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12984" + }, + { + "shop_price": "15", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "3694", + "durability": null, + "name": "Bronze gauntlets", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12985", + "bonuses": "0,0,0,-1,-1,2,3,3,-1,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "3275", + "durability": null, + "name": "Worn-out bronze gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12986", + "bonuses": "0,0,0,-1,-1,0,1,1,-1,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3275", + "durability": null, + "name": "Worn-out bronze gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12987" + }, + { + "shop_price": "30", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "17339", + "durability": null, + "name": "Iron gauntlets", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12988", + "bonuses": "0,0,0,-1,-1,3,4,4,-1,3,3,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "30", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "16000", + "durability": null, + "name": "Worn-out iron gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12989", + "bonuses": "0,0,0,-1,-1,0,1,1,-1,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16000", + "durability": null, + "name": "Worn-out iron gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12990" + }, + { + "requirements": "{1,5}", + "shop_price": "50", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "29844", + "durability": null, + "name": "Steel gauntlets", + "tradeable": "false", + "weight": "10", + "archery_ticket_price": "0", + "id": "12991", + "bonuses": "0,0,0,-1,-1,4,5,5,-1,4,4,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,5}", + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "durability": null, + "weight": "10", + "equipment_slot": "9", + "grand_exchange_price": "27000", + "name": "Worn-out steel gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12992", + "bonuses": "0,0,0,-1,-1,1,1,1,-1,1,1,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27000", + "durability": null, + "name": "Worn-out steel gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12993" + }, + { + "requirements": "{1,10}", + "shop_price": "75", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "50808", + "durability": null, + "name": "Black gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "12994", + "bonuses": "0,0,0,-1,-1,5,6,6,-1,5,5,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,10}", + "shop_price": "75", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "40100", + "name": "Worn-out black gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12995", + "bonuses": "0,0,0,-1,-1,1,2,2,-1,1,1,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40100", + "durability": null, + "name": "Worn-out black gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12996" + }, + { + "requirements": "{1,20}", + "shop_price": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "60064", + "durability": null, + "name": "Mithril gauntlets", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12997", + "bonuses": "0,0,0,-1,-1,6,7,7,-1,6,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,20}", + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "54200", + "durability": null, + "name": "Worn-out mithril gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12998", + "bonuses": "0,0,0,-1,-1,2,2,2,-1,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "54200", + "durability": null, + "name": "Worn-out mithril gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12999" + }, + { + "requirements": "{1,30}", + "shop_price": "150", + "examine": "I have to keep my hands safe! Uncharged: A bit worse for wear.", + "grand_exchange_price": "74526", + "durability": null, + "name": "Adamant gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "13000", + "bonuses": "0,0,0,-1,-1,8,9,9,-1,8,8,1,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,30}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe! Uncharged: A bit worse for wear.", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "71500", + "name": "Worn-out adamant gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13001", + "bonuses": "0,0,0,-1,-1,2,3,3,-1,2,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "71500", + "durability": null, + "name": "Worn-out adamant gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13002" + }, + { + "requirements": "{1,40}", + "shop_price": "200", + "examine": "Fully charged: I have to keep my hands safe! Worn-Out: A bit worse for wear.", + "grand_exchange_price": "95700", + "durability": null, + "name": "Rune gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "13003", + "bonuses": "0,0,0,-1,-1,10,11,11,-1,10,10,2,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,40}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Fully charged: I have to keep my hands safe! Worn-Out: A bit worse for wear.", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "99900", + "name": "Worn-out rune gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13004", + "bonuses": "0,0,0,-1,-1,3,4,4,-1,3,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "99900", + "durability": null, + "name": "Worn-out rune gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13005" + }, + { + "requirements": "{1,60}", + "shop_price": "300", + "examine": "Uncharged: A bit worse for wear. Charged: I have to keep my hands safe!", + "grand_exchange_price": "214700", + "durability": null, + "name": "Dragon gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "13006", + "bonuses": "0,0,0,-1,-1,14,15,15,-1,14,14,3,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,60}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Uncharged: A bit worse for wear. Charged: I have to keep my hands safe!", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "166200", + "name": "Worn-out dragon gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13007", + "bonuses": "0,0,0,-1,-1,4,5,5,-1,4,4,1,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "166200", + "durability": null, + "name": "Worn-out dragon gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13008" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13010" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13011" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13012" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13013" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13014" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13015" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13016" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13017" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13018" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13019" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13020" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13021" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13022" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13023" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13024" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13025" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13026" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13027" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13028" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13029" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13030" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13031" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13032" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13033" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13034" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13035" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13036" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13037" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13038" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13039" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13040" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13041" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13042" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13043" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13044" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13045" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13046" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13047" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13048" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13049" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13050" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13051" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13052" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13053" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13054" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13055" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13056" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13057" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13058" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13059" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13060" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13061" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13062" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13063" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13064" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13065" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13066" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13067" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13068" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13069" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13070" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13071" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13072" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13074" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13075" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13076" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13077" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13078" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13079" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13080" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A black crossbow.", + "walk_anim": "4226", + "durability": null, + "weight": "5", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "grand_exchange_price": "261", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "tradeable": "true", + "name": "Black crossbow", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "13081", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,60,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "261", + "durability": null, + "name": "Black crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13082" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "55", + "durability": null, + "name": "Black bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13083", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "141", + "durability": null, + "name": "Black bolts(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13084", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "233", + "durability": null, + "name": "Black bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13085", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "1690", + "durability": null, + "name": "Black bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13086", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{0,8}", + "ge_buy_limit": "2", + "examine": "A sapphire-topped cane.", + "durability": null, + "weight": "0.5", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "77000", + "name": "Black cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13095", + "bonuses": "0,-2,16,0,0,0,0,0,0,0,0,13,2,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "77000", + "durability": null, + "name": "Black cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13096" + }, + { + "requirements": "{0,28}", + "ge_buy_limit": "2", + "examine": "A ruby-topped cane.", + "durability": null, + "weight": "0.5", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "19100", + "name": "Adamant cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13097", + "bonuses": "0,-2,25,0,0,0,0,0,0,0,0,23,3,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "19100", + "durability": null, + "name": "Adamant cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13098" + }, + { + "requirements": "{0,38}", + "ge_buy_limit": "2", + "examine": "A diamond-topped cane.", + "durability": null, + "weight": "0.5", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "14500", + "name": "Rune cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13099", + "bonuses": "0,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14500", + "durability": null, + "name": "Rune cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13100" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Comes with a free rabbit!", + "grand_exchange_price": "160400", + "durability": null, + "name": "Top hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13101", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "160400", + "durability": null, + "name": "Top hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13102" + }, + { + "ge_buy_limit": "2", + "examine": "Official explorer headgear!", + "grand_exchange_price": "85400", + "durability": null, + "name": "Pith helmet", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "13103", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "85400", + "durability": null, + "name": "Pith helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13104" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "ge_buy_limit": "2", + "examine": "Spikier than normal.", + "durability": null, + "weight": "10", + "equipment_slot": "0", + "grand_exchange_price": "38300", + "name": "Spiked helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13105", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "38300", + "durability": null, + "name": "Spiked helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13106" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Shear elegance.", + "grand_exchange_price": "296700", + "durability": null, + "name": "Sheep mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13107", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "296700", + "durability": null, + "name": "Sheep mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13108" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "I can get the look right, but can I do the waddle too?", + "grand_exchange_price": "633600", + "durability": null, + "name": "Penguin mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13109", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "633600", + "durability": null, + "name": "Penguin mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13110" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "The bats have left the belltower.", + "grand_exchange_price": "399000", + "durability": null, + "name": "Bat mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13111", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "399000", + "durability": null, + "name": "Bat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13112" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "It's the year of the cat!", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Cat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13113", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Cat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13114" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "I'm hungry like the wolf.", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Wolf mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13115", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Wolf mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13116" + }, + { + "turn90cw_anim": "9053", + "examine": "A fully charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "defence_anim": "9048", + "equipment_slot": "3", + "attack_anims": "9097,9097,9097,9097", + "stand_anim": "9049", + "name": "Ivandis flail (30)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13117", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (29)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13118", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "9054", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail(28)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13119", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (27)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13120", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (26)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13121", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (25)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13122", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (24)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13123", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (23)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13124", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (22)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13125", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (21)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13126", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (20)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13127", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (19)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13128", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (18)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13129", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (17)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13130", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (16)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13131", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (15)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13132", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (14)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13133", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (13)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13134", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (12)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13135", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (11)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13136", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (10)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13137", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (9)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13138", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (8)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13139", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (7)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13140", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (6)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13141", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (5)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13142", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (4)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13143", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (3)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13144", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (2)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13145", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - one last charge left.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (1)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13146", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "examine": "Flail of Ivandis dust.", + "durability": null, + "name": "Flail dust", + "archery_ticket_price": "0", + "id": "13147" + }, + { + "destroy_message": "You found this page in the top floor of Paterdomus temple on an old table.", + "examine": "A page ripped from a book; it looks like a map of some kind.", + "durability": null, + "name": "Book page", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13149" + }, + { + "destroy_message": "You got this book from a bunk bed in Sanguinesti Myreque base.", + "examine": "A big book of combat techniques.", + "durability": null, + "name": "Combat book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13151" + }, + { + "examine": "Used to make a metal chain.", + "durability": null, + "name": "Chain link mould", + "weight": "1", + "archery_ticket_price": "0", + "id": "13153" + }, + { + "examine": "A chain made from mithril and silver.", + "durability": null, + "name": "Silvthril chain", + "weight": "3", + "archery_ticket_price": "0", + "id": "13154" + }, + { + "examine": "A blessed sickle with an emerald recessed into it.", + "durability": null, + "name": "Silver sickle emerald(b)", + "weight": "1", + "archery_ticket_price": "0", + "id": "13155", + "equipment_slot": "3" + }, + { + "examine": "A blessed and enchanted silver sickle with an emerald recessed into it.", + "durability": null, + "name": "Enchanted sickle emerald(b)", + "weight": "1", + "archery_ticket_price": "0", + "id": "13156", + "equipment_slot": "3" + }, + { + "examine": "A Vyrewatch corpse. Just a husk, really.", + "durability": null, + "name": "Vyre corpse", + "weight": "5", + "archery_ticket_price": "0", + "id": "13157" + }, + { + "examine": "An ornate key: precise workmanship and an ethereal glow. (Legacy of Seergaze)", + "durability": null, + "name": "Columbarium key", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13158" + }, + { + "destroy_message": "You got this key by cremating a Vyrewatch in the Paterdomus Columbarium.", + "examine": "An ornate key: precise workmanship and an ethereal glow. (Legacy of Seergaze)", + "durability": null, + "name": "Ornate tomb key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13159" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A Tome of Experience (2nd Edition) that awards 2500 XP per chapter.", + "durability": null, + "name": "Tome of xp 2nd ed (3)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13160" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A Tome of Experience (2nd Edition) that awards 2500 XP per chapter.", + "durability": null, + "name": "Tome of xp 2nd ed (2)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13161" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A Tome of Experience (2nd Edition) that awards 2500 XP per chapter.", + "durability": null, + "name": "Tome of xp 2nd ed (1)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13162" + }, + { + "examine": "A sapphire-topped cane.", + "grand_exchange_price": "115390", + "durability": null, + "name": "Black cane", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "attack_speed": "5", + "weapon_interface": "10", + "id": "13163", + "bonuses": "0,-2,16,0,0,0,0,0,0,0,0,13,2,0,0", + "equipment_slot": "3" + }, + { + "examine": "A ruby-topped cane.", + "grand_exchange_price": "18514", + "durability": null, + "name": "Adamant cane", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "weapon_interface": "10", + "id": "13164", + "bonuses": "0,-2,25,0,0,0,0,0,0,0,0,23,3,0,0", + "equipment_slot": "3" + }, + { + "examine": "A diamond-topped cane.", + "durability": null, + "weight": "0.5", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "15023", + "name": "Rune cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13165", + "bonuses": "0,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "lendable": "true", + "examine": "Comes with a free rabbit!", + "grand_exchange_price": "425919", + "durability": null, + "name": "Top hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13166", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Official explorer headgear!", + "grand_exchange_price": "99682", + "durability": null, + "name": "Pith helmet", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "13167", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Spikier than normal.", + "grand_exchange_price": "39643", + "durability": null, + "name": "Spiked helmet", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "13168", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "Shear elegance.", + "grand_exchange_price": "313558", + "durability": null, + "name": "Sheep mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13169", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "I can get the look right, but can I do the waddle too?", + "grand_exchange_price": "609515", + "durability": null, + "name": "Penguin mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13170", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "The bats have left the belltower.", + "grand_exchange_price": "371616", + "durability": null, + "name": "Bat mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13171", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "It's the year of the cat!", + "grand_exchange_price": "1066648", + "durability": null, + "name": "Cat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13172", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "I'm hungry like the wolf.", + "grand_exchange_price": "1303443", + "durability": null, + "name": "Wolf mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13173", + "equipment_slot": "0" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Blue navy slacks", + "archery_ticket_price": "0", + "id": "13174", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Green navy slacks", + "archery_ticket_price": "0", + "id": "13175", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Red navy slacks", + "archery_ticket_price": "0", + "id": "13176", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Brown navy slacks", + "archery_ticket_price": "0", + "id": "13177", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Black navy slacks", + "archery_ticket_price": "0", + "id": "13178", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Purple navy slacks", + "archery_ticket_price": "0", + "id": "13179", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Grey navy slacks", + "archery_ticket_price": "0", + "id": "13180", + "equipment_slot": "7" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Blue naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13181", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Green naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13182", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Red naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13183", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Brown naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13184", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Black naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13185", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Purple naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13186", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Grey naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13187", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Blue tricorn hat", + "archery_ticket_price": "0", + "id": "13188", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Green tricorn hat", + "archery_ticket_price": "0", + "id": "13189", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Red tricorn hat", + "archery_ticket_price": "0", + "id": "13190", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Brown tricorn hat", + "archery_ticket_price": "0", + "id": "13191", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Black tricorn hat", + "archery_ticket_price": "0", + "id": "13192", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Purple tricorn hat", + "archery_ticket_price": "0", + "id": "13193", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Grey tricorn hat", + "archery_ticket_price": "0", + "id": "13194", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this lamp, it will be destroyed. You can obtain another from Dunstan.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Mysterious lamp", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13227" + }, + { + "destroy_message": "You can get another net from Professor Arblenap on Ice Mountain.", + "examine": "Professor Arblenap gave you this net to catch the baby icefiends on Ice Mountain.", + "durability": null, + "name": "Icefiend net", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13230", + "equipment_slot": "3" + }, + { + "examine": "You should give this to Professor Arblenap.", + "durability": null, + "name": "Baby icefiend", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13231", + "equipment_slot": "3" + }, + { + "destroy_message": "It will reappear near the bottom of Ice Mountain.", + "examine": "The remains of the Oracle's tent on Ice Mountain.", + "durability": null, + "name": "Tent", + "tradeable": "false", + "destroy": "true", + "weight": "30", + "archery_ticket_price": "0", + "id": "13232" + }, + { + "destroy_message": "You can get it back by pickpocketing Drorkar again.", + "examine": "You took this key from Drorkar's pocket in the power station. (Perils of Ice Mountain)", + "durability": null, + "name": "Dwarven key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13234" + }, + { + "examine": "A plank of oak that has been treated to resist fire.", + "durability": null, + "name": "Treated oak plank", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "13238" + }, + { + "shop_price": "14", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "33", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "13239" + }, + { + "durability": null, + "name": ".", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13240", + "equipment_slot": "5" + }, + { + "examine": "A plank of oak that has been treated to resist fire.", + "durability": null, + "name": "Treated plank", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "13241" + }, + { + "durability": null, + "name": ".", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13242" + }, + { + "examine": "An old stone slab with writing on it.", + "durability": null, + "name": "Stone tablet", + "archery_ticket_price": "0", + "id": "13243" + }, + { + "examine": "A book for those who want to visit the TzHaar city.", + "durability": null, + "name": "Tzhaar tourist guide", + "archery_ticket_price": "0", + "id": "13244" + }, + { + "destroy_message": "You can mine more stone slabs in the TzHaar mine.", + "examine": "A flawed block of obsidian from the Karamja volcano.", + "durability": null, + "name": "Stone slab", + "tradeable": "false", + "destroy": "true", + "weight": "32", + "archery_ticket_price": "0", + "id": "13245" + }, + { + "destroy_message": "You can get more pillars by crafting stone slabs from the TzHaar mine.", + "examine": "A support pillar.", + "durability": null, + "name": "Pillar", + "tradeable": "false", + "destroy": "true", + "weight": "25", + "archery_ticket_price": "0", + "id": "13246" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13247", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13248", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13249", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13250", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can obtain another from the mummy guardian in the undead slayer's tomb.", + "examine": "A key obtained in Catolax's tomb.", + "durability": null, + "name": "Ranged path key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13259", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can obtain another from the mummy guardian in the undead slayer's tomb.", + "examine": "A key obtained in Catolax's tomb.", + "durability": null, + "name": "Magic path key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13260", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "shop_price": "650", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Slayer helmet", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13263", + "bonuses": "0,0,0,0,0,30,32,27,0,30,7,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "The remains of a banshee's scream.", + "durability": null, + "name": "Banshee voice", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13276", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "400", + "examine": "More of that crazy Slayer headgear.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Masked earmuffs", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13277", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "For use against turoth and kurasks.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "89", + "name": "Broad arrow heads", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13278", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "For use against turoth and kurasks.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "17", + "name": "Unfinished broad bolts", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13279", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "For use against turoth and kurasks.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "grand_exchange_price": "34", + "name": "Broad-tipped bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13280", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(8)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13281", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(7)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13282", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(6)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13283", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(5)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13284", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(4)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13285", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(3)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13286", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(2)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13287", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(1)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13288", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "turn90cw_anim": "1207", + "examine": "A razor-sharp sword.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "43082", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13290", + "stand_turn_anim": "823", + "bonuses": "67,62,0,0,0,0,0,0,0,0,0,50,0,0,0", + "requirements": "{0,50}-{18,55}", + "shop_price": "68000", + "durability": null, + "destroy": "false", + "weapon_interface": "5", + "attack_audios": "2517,2517,2500,2517", + "name": "Leaf-bladed sword" + }, + { + "shop_price": "68000", + "examine": "A razor-sharp sword.", + "grand_exchange_price": "43082", + "durability": null, + "name": "Leaf-bladed sword", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13291" + }, + { + "durability": null, + "name": "Letter", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13292", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Plans", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13293", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these plans, they will be lost and you will need to see Captain Donnie for a replacement.", + "examine": "A charcoal rubbing taken from 50% Luke.", + "durability": null, + "name": "Charcoal rubbing", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13294", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Frank's mark, you will need to see him to get another.", + "examine": "Signature from Frank.", + "durability": null, + "name": "Frank's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13295", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these lockpicks, you will need to look under the mattress to get another set.", + "examine": "A device for opening locked doors.", + "durability": null, + "name": "Crude lockpick", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13296", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "The top of a Custom Officer's uniform.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "If you drop this shirt you will need to kill another Customs officer for a replacement.", + "remove_sleeves": "true", + "name": "Customs shirt", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13297", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these trousers you will need to kill another Customs officer for a replacement.", + "examine": "The trousers of a Custom Officer's uniform.", + "durability": null, + "name": "Customs trousers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13298", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "If you drop this hat you will need to kill another Customs officer for a replacement.", + "examine": "The hat of a Custom Officer's uniform.", + "durability": null, + "name": "Customs hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13299", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13300", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13301", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Brooch", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13302", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Izzy's No-Beard's mark, you will need to see him to get another.", + "examine": "Signature from Izzy No-Beard.", + "durability": null, + "name": "Izzy's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13303", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Key", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13304", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this crowbar, you will need to get another from the chest on the sunken ship.", + "examine": "This could be useful.", + "durability": null, + "name": "Crowbar", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13305", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the idol, you will need to go diving to get another replacement.", + "examine": "An idol. It has many heads.", + "durability": null, + "name": "Idol of many heads", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13307", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Bill Teach's mark, you will need to see him to get another.", + "examine": "Signature from Bill Teach.", + "durability": null, + "name": "Bill teach's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13308", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this paper, you will need to call to the guards for a replacement. ", + "examine": "This is generally used for writing on.", + "durability": null, + "name": "Paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13309", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this note, you'll need to call the guards for replacement paper.", + "examine": "A written confession.", + "durability": null, + "name": "Confession", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13310", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13311", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this ink, you will need to call to the guards for a replacement.", + "examine": "An empty ink bottle./This is full of ink.", + "durability": null, + "name": "Ink bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13312", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this paper you will need to call to the guards to replace it and the ink.", + "examine": "It's got ink all over it.", + "durability": null, + "name": "Inky paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13313", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this ink, you will need to call to the guards for a replacement.", + "examine": "An empty ink bottle./This is full of ink.", + "durability": null, + "name": "Ink bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13314", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this bottle, you will need to call to the guards for a replacement.", + "examine": "It's smashed. I should mind my fingers.", + "durability": null, + "name": "Smashed bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13315", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "The top part of a prisoner's uniform.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "If you drop this top, then you will need to speak to the guards to get it replaced.", + "remove_sleeves": "true", + "name": "Prison uniform top", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13316", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these trousers, then you will need to speak to the guards to get it replaced.", + "examine": "The bottom part of a prisoner's uniform.", + "durability": null, + "name": "Prison uniform trousers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13317", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "examine": "It's covered in fish slop.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "If you drop this top, you will need to speak to the guards to get it replaced, then find a way to get stew on it again.", + "remove_sleeves": "true", + "name": "Fishy prison uniform top", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13318", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this cup it will be destroyed and you will have to pick up another.", + "examine": "A standard prison-issue tin cup.", + "durability": null, + "name": "Tin cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13319", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "If you drop this cup it will be destroyed and you will have to pick up another.", + "examine": "A standard prison-issue tin cup.", + "durability": null, + "name": "Tin cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13320", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Destroy", + "examine": "A pipe that belongs in a cannon stand.", + "durability": null, + "name": "Pipe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13321", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, it will be destroyed and you will have to get another.", + "durability": null, + "name": "Accordion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13322", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, it will be destroyed and you will have to get another.", + "durability": null, + "name": "Accordion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13323", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, it will be destroyed and you will have to get another.", + "durability": null, + "name": "Accordion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13324", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, pipe and inky paper, it will all be destroyed and you will need to get all the items back again.", + "examine": "A very crude vacuum pump.", + "durability": null, + "name": "Vacuum pump", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13325", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this, you will lose all the items you put in it, as well as the seagull.", + "examine": "It sounds like a law firm.", + "durability": null, + "name": "Vacuum pump and gull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13326", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "If you drop this quill, you will need to talk to the guard for a replacement.", + "examine": "From a bird - can be used for writing.", + "durability": null, + "name": "Quill", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13327", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "From a bird - can be used for writing. It has some ink on the tip.", + "durability": null, + "name": "Inky quill", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13328", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13329", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13330", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this dead parrot, there is a chance that bad, bad things will happen to you - unless you see 50 Ships Mufassah for a replacement.", + "examine": "A very dead rotten parrot.", + "durability": null, + "name": "Ex-parrot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13331", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this cage, you will need to see Bill Teach for a replacement.", + "examine": "It feels very cold to the touch.", + "durability": null, + "name": "Magical cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13332", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this dead parrot in a cage (and who wouldn't) then you will need to see ", + "examine": "A very dead rotten parrot in a magical cage.", + "durability": null, + "name": "Ex-parrot in a magic cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13333", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the cage, the ex-ex-parrot will escape.", + "examine": "A very alive rotten parrot in a magic cage.", + "durability": null, + "name": "Ex-ex-parrot in a magic cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13334", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Ex-ex-parrot", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13335", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Ex-ex-parrot", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13336", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "A pirate impling in a jar.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "grand_exchange_price": "7346", + "name": "Pirate impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13337", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "shop_price": "50", + "grand_exchange_price": "7346", + "durability": null, + "name": "Pirate impling jar", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13338" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A white bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13339", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A white bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13340", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A red bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13341", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A red bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13342", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A blue bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13343", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A blue bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13344", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A brown bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13345", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A brown bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13346", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13347", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13348", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13349", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13350", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A orange bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13351", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A orange bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13352", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "100", + "examine": "It's dark, and I'm wearing two patches. Hit it!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Double eyepatches", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13353", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "Two patches and a hat.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Pirate hat and eyepatches", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13354", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "100", + "examine": "A patch for the left eye.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "23485", + "name": "Left eyepatch", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13355", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A patch for the left eye.", + "grand_exchange_price": "23485", + "durability": null, + "name": "Left eyepatch", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13356" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A hat and a patch.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Pirate hat and eyepatch", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13357", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A seaworthy grey shirt.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13358", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13359" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A seaworthy purple shirt.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13360", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13361" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A seaworthy orange shirt.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13362", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13363" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "A seaworthy pair of grey trousers.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "7", + "grand_exchange_price": "1", + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13364", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "350", + "grand_exchange_price": "1", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13365" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "A seaworthy pair of purple trousers.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "7", + "grand_exchange_price": "1", + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13366", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "350", + "grand_exchange_price": "1", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13367" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "A seaworthy pair of orange trousers.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "7", + "grand_exchange_price": "1", + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13368", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "350", + "grand_exchange_price": "1", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13369" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13370", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "durability": null, + "name": "Bandana", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13371" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13372", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "durability": null, + "name": "Bandana", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13373" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "An orange bandana.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13374", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "durability": null, + "name": "Bandana", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13375" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13376", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A orange bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13377", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13378", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Destroy", + "examine": "Some rock fragments.", + "durability": null, + "name": "Rock fragments", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13379", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the letter, it will be destroyed and you'll need to see Bill Teach for another.", + "examine": "Note from Teach to Brass Hand Harry.", + "durability": null, + "name": "Introduction letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13380", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13381", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13382", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13383", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13384", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13385", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Wall beast fingers in a white fern sauce.", + "durability": null, + "name": "Fingers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13386", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "This hand part is small and delicate, and dropping it here will lose it. If you lose it, you will need to see Brass Hand Harry for a replacement.", + "examine": "A brass thumb.", + "durability": null, + "name": "Thumb", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13387", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13388", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "This hand part is small and delicate, and dropping it here will lose it. If you lose it, you will need to see Brass Hand Harry for a replacement.", + "examine": "A brass wrist.", + "durability": null, + "name": "Wrist", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13389", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "This hand part is small and delicate, and dropping it here will lose it. If you lose it, you will need to see Brass Hand Harry for a replacement.", + "examine": "A brass brace.", + "durability": null, + "name": "Brace", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13390", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this hand, you will destroy it and you will have to remake it from parts that Brass Hand Harry has.", + "examine": "A completed brass hand.", + "durability": null, + "name": "Brass hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13391", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this ink pad, you will lose it and will need to see Brass Hand Harry for a replacement.", + "examine": "It's soaked with ink.", + "durability": null, + "name": "Ink pad", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13392", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this hand, you will destroy it and you will have to remake it from parts that Brass Hand Harry has.", + "examine": "An inky brass hand.", + "durability": null, + "name": "Inky hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13393", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this paper, you will need to call to the guards for a replacement. ", + "examine": "This is generally used for writing on.", + "durability": null, + "name": "Paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13394", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Brass Hand Harry's mark, it will be destroyed and you need to see him to get another.", + "examine": "Handprint from Brass Hand Harry.", + "durability": null, + "name": "Brass hand harry's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13395", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Makes me itch.", + "durability": null, + "name": "Fake beard", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13396", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "examine": "It looks like someone has sneezed in it.", + "durability": null, + "name": "Fake moustache and nose", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13397", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "examine": "Why is the monocle nailed to it?", + "durability": null, + "name": "Fake monocle, moustache and nose", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13398", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "You can barely see where it connected to the mop handle.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "name": "Curly wig", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13399", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "It looks like it is part-dog, part-mould.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "name": "Straight wig", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13400", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this order for 'rum' you will need to speak to the Rusty Anchor barman to get another.", + "examine": "An order simply for 'rum'.", + "durability": null, + "name": "Order", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13401", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Captain Braindeath's mark, you will need to speak to him to get another.", + "examine": "Signature of Captain Braindeath.", + "durability": null, + "name": "Braindeath's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13402", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "300", + "examine": "A replica tinderbox made of solid gold.", + "durability": null, + "name": "Golden tinderbox", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13403", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A bow from a darker dimension.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "9", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equip_audio": "3738", + "render_anim": "303", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "86850", + "attack_audios": "3731,0,0,0", + "name": "Dark bow", + "archery_ticket_price": "0", + "id": "13405", + "bonuses": "0,0,0,0,95,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "59171", + "name": "Ancient staff", + "archery_ticket_price": "0", + "id": "13406", + "bonuses": "10,-1,40,15,0,2,3,1,15,0,5,50,0,-1,10" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helmet is worn by archers.", + "grand_exchange_price": "46334", + "durability": null, + "name": "Archer helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13407", + "absorb": "0,3,1", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helmet is worn by berserkers.", + "grand_exchange_price": "45978", + "durability": null, + "name": "Berserker helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13408", + "absorb": "1,0,3", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helm is worn by warriors.", + "grand_exchange_price": "45664", + "durability": null, + "name": "Warrior helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13409", + "absorb": "1,0,3", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helm is worn by farseers.", + "grand_exchange_price": "45989", + "durability": null, + "name": "Farseer helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13410", + "absorb": "3,1,0", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Protective headwear made from crabs. Better than it sounds.", + "grand_exchange_price": "20378", + "durability": null, + "name": "Rock-shell helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13411", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,6,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A sturdy body armour made from rock crab pieces.", + "grand_exchange_price": "41788", + "durability": null, + "name": "Rock-shell plate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13412", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Some tough leggings made from rock crab parts.", + "grand_exchange_price": "37139", + "durability": null, + "name": "Rock-shell legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13413", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A helm fit for any Fremennik ranger.", + "grand_exchange_price": "37724", + "durability": null, + "name": "Spined helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13414", + "absorb": "0,3,1", + "bonuses": "0,-6,-6,-6,6,6,6,6,6,0,6,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A constant reminder that I'm above a Dagannoth in the food chain.", + "grand_exchange_price": "5773", + "durability": null, + "name": "Spined body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13415", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,30,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Stylish leg armour for rangers with a lingering smell of raw fish...", + "grand_exchange_price": "2696", + "durability": null, + "name": "Spined chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13416", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Make your foes cower by wearing a skull as a helmet!", + "grand_exchange_price": "39060", + "durability": null, + "name": "Skeletal helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13417", + "absorb": "3,1,0", + "bonuses": "0,0,0,2,-2,10,9,11,3,0,6,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The bones in this armour seems to vibrate with a magic quality...", + "grand_exchange_price": "26289", + "durability": null, + "name": "Skeletal top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13418", + "absorb": "6,3,0", + "bonuses": "0,0,0,8,-10,35,25,42,15,0,30,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A superior set of strengthened slacks for any self respecting seer.", + "grand_exchange_price": "24591", + "durability": null, + "name": "Skeletal bottoms", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13419", + "absorb": "4,2,0", + "bonuses": "0,0,0,6,-7,22,20,24,10,0,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Some finely crafted Fremennik boots, made from spined dagannoth hide.", + "grand_exchange_price": "158181", + "durability": null, + "name": "Spined boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13420", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,1,1,0,0,0,1,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Some Fremennik boots, made from the shards of a rock crab's shell.", + "grand_exchange_price": "1358", + "durability": null, + "name": "Rock-shell boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13421", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Some finely crafted Fremennik boots, made from the bones of a Wallasalki.", + "grand_exchange_price": "7788", + "durability": null, + "name": "Skeletal boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13422", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fremennik gloves stitched together from spined dagannoth hide.", + "grand_exchange_price": "3027", + "durability": null, + "name": "Spined gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13423", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,1,2,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Fremennik gloves stitched together from rock crab shell shards.", + "grand_exchange_price": "12839", + "durability": null, + "name": "Rock-shell gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13424", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fremennik gloves stitched together from wallasalki bones fragments.", + "grand_exchange_price": "25838", + "durability": null, + "name": "Skeletal gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13425", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A mysterious ring that can fill the wearer with magical power...", + "grand_exchange_price": "799703", + "durability": null, + "name": "Seers ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13426", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A fabled ring that improves the wearer's skill with a bow...", + "grand_exchange_price": "483521", + "durability": null, + "name": "Archers ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13427", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,4,0,0,0,0,4,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A legendary ring once worn by Fremennik warriors.", + "grand_exchange_price": "361302", + "durability": null, + "name": "Warrior ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13428", + "absorb": "0,0,0", + "bonuses": "0,4,0,0,0,0,4,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A ring reputed to bring out a berserk fury in its wearer.", + "grand_exchange_price": "963418", + "durability": null, + "name": "Berserker ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13429", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,4,0,0,0,4,0,0,0" + }, + { + "examine": "A two-handed dragon sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "124", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1024000", + "name": "Dragon 2h sword", + "archery_ticket_price": "0", + "id": "13430", + "bonuses": "-4,92,80,-4,0,0,0,0,0,-1,0,93,0,0,0" + }, + { + "shop_price": "20", + "examine": "Useful for catching crayfish.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "25", + "name": "Crayfish cage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13431", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Swap this note at any bank for the equivalent item.", + "grand_exchange_price": "25", + "durability": null, + "name": "Crayfish cage", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13432" + }, + { + "shop_price": "5", + "examine": "Some cooked crayfish. Eat it to heal.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "32", + "name": "Crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13433", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "5", + "examine": "Swap this note at any bank for the equivalent item.", + "grand_exchange_price": "32", + "durability": null, + "name": "Crayfish", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13434" + }, + { + "shop_price": "5", + "examine": "I should try cooking this. Used in Cooking (1).", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "41", + "name": "Raw crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13435", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "5", + "examine": "Swap this note at any bank for the equivalent item.", + "grand_exchange_price": "41", + "durability": null, + "name": "Raw crayfish", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13436" + }, + { + "shop_price": "1", + "durability": null, + "name": "Burnt crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "destroy": "false", + "attack_speed": "4", + "id": "13437", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Burnt crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "destroy": "false", + "attack_speed": "4", + "id": "13438" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13439", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "This is a bag of runes for Sir Vant.", + "durability": null, + "name": "Bag of runes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13440", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A very powerful onyx amulet.", + "grand_exchange_price": "2285210", + "durability": null, + "name": "Amulet of fury", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13442", + "absorb": "0,0,0", + "bonuses": "10,10,10,10,10,15,15,15,15,15,15,8,0,5,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A cape woven of obsidian plates.", + "grand_exchange_price": "56575", + "durability": null, + "name": "Obsidian cape", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13443", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0" + }, + { + "examine": "A weapon from the Abyss.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "11", + "absorb": "0,0,0", + "render_anim": "1578", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "114775", + "name": "Abyssal whip", + "archery_ticket_price": "0", + "id": "13444", + "bonuses": "0,82,0,0,0,0,0,0,0,0,0,82,0,0,0" + }, + { + "examine": "Simplicity is the best weapon.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "10", + "absorb": "0,0,0", + "render_anim": "27", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "29584", + "name": "Granite maul", + "archery_ticket_price": "0", + "id": "13445", + "bonuses": "0,0,81,0,0,0,0,0,0,0,0,79,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13446", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13447", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13448", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Protects your head and looks impressive too.", + "grand_exchange_price": "5756658", + "durability": null, + "name": "Dragon full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13449", + "absorb": "2,0,4", + "bonuses": "0,0,0,-6,-2,45,48,41,-1,46,12,0,0,0,0" + }, + { + "examine": "A beautiful, heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "7767458", + "name": "Armadyl godsword", + "archery_ticket_price": "0", + "id": "13450", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "A brutally heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1504919", + "name": "Bandos godsword", + "archery_ticket_price": "0", + "id": "13451", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "A gracious, heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "34966317", + "name": "Saradomin godsword", + "archery_ticket_price": "0", + "id": "13452", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "A terrifying, heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "2132037", + "name": "Zamorak godsword", + "archery_ticket_price": "0", + "id": "13453", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "An evil spear.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "1581", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "2070507", + "name": "Zamorakian spear", + "archery_ticket_price": "0", + "id": "13454", + "bonuses": "85,65,65,0,0,13,13,12,0,13,0,75,0,2,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A helmet of great craftmanship.", + "grand_exchange_price": "3732060", + "durability": null, + "name": "Armadyl helmet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13455", + "absorb": "0,5,2", + "bonuses": "-5,-5,-5,-5,10,6,6,10,10,8,12,0,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A chestplate of great craftsmanship", + "grand_exchange_price": "9628666", + "durability": null, + "name": "Armadyl chestplate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13456", + "absorb": "0,10,5", + "bonuses": "-7,-7,-7,-15,33,56,48,61,70,57,52,0,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A chainskirt of great craftsmanship.", + "grand_exchange_price": "9754868", + "durability": null, + "name": "Armadyl plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13457", + "absorb": "0,7,3", + "bonuses": "-6,-6,-6,-10,20,32,26,34,40,33,25,0,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A sturdy chestplate.", + "grand_exchange_price": "6460055", + "durability": null, + "name": "Bandos chestplate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13458", + "absorb": "4,0,9", + "bonuses": "0,0,0,-15,-10,98,93,105,-6,133,52,4,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A sturdy pair of tassets.", + "grand_exchange_price": "4228256", + "durability": null, + "name": "Bandos tassets", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13459", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,71,63,66,-4,93,25,2,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Some sturdy boots.", + "grand_exchange_price": "1259091", + "durability": null, + "name": "Bandos boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13460", + "absorb": "0,0,0", + "bonuses": "0,0,0,-5,-3,17,18,19,0,0,15,0,0,1,0" + }, + { + "examine": "The incredible blade of an Icyene.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "850151", + "name": "Saradomin sword", + "archery_ticket_price": "0", + "id": "13461", + "bonuses": "0,82,60,0,0,0,0,0,0,0,0,82,0,2,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These will protect my feet.", + "grand_exchange_price": "17336", + "durability": null, + "name": "Dragon boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13462", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,16,17,18,0,0,15,4,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13463", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another by talking about jobs with citizens and tutors around Lumbridge.", + "examine": "This reminds me of my current job and who set me to the task.", + "durability": null, + "name": "Task list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13464", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "16744", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger", + "archery_ticket_price": "0", + "id": "13465", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p)", + "archery_ticket_price": "0", + "id": "13466", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p+)", + "archery_ticket_price": "0", + "id": "13467", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p++)", + "archery_ticket_price": "0", + "id": "13468", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "examine": "A powerful axe.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "2", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "7263", + "name": "Rune axe", + "archery_ticket_price": "0", + "id": "13469", + "bonuses": "-2,26,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "examine": "A very powerful axe.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "2", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "3794577", + "name": "Dragon axe", + "archery_ticket_price": "0", + "id": "13470", + "bonuses": "-2,38,32,0,0,0,1,0,0,0,0,42,0,0,0" + }, + { + "examine": "A vicious looking axe.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "23993", + "name": "Rune battleaxe", + "archery_ticket_price": "0", + "id": "13471", + "bonuses": "-2,48,43,0,0,0,0,0,0,-1,0,64,0,0,0" + }, + { + "requirements": "{0,60}", + "examine": "A vicious looking axe.", + "has_special": "true", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "2586", + "defence_anim": "397", + "attack_anims": "395,395,401,395", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "123019", + "attack_audios": "2498,2498,2497,2498", + "name": "Dragon battleaxe", + "archery_ticket_price": "0", + "id": "13472", + "bonuses": "-2,70,65,0,0,0,0,0,0,-1,0,85,0,0,0" + }, + { + "examine": "I don't think it's intended for joinery.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "render_anim": "1430", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "24357", + "name": "Rune warhammer", + "archery_ticket_price": "0", + "id": "13473", + "bonuses": "-4,-4,53,-4,0,0,0,0,0,0,0,48,0,0,0" + }, + { + "examine": "A razor-sharp longsword", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "18420", + "name": "Rune longsword", + "archery_ticket_price": "0", + "id": "13474", + "bonuses": "38,47,-2,0,0,0,3,2,0,0,0,49,0,0,0" + }, + { + "examine": "A very powerful sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "58355", + "name": "Dragon longsword", + "archery_ticket_price": "0", + "id": "13475", + "bonuses": "58,69,-2,0,0,0,3,2,0,0,0,71,0,0,0" + }, + { + "examine": "A vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1582", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "14690", + "name": "Rune scimitar", + "archery_ticket_price": "0", + "id": "13476", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0" + }, + { + "examine": "A vicious, curved sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1928", + "attack_anims": "390,390,381,390", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "60405", + "name": "Dragon scimitar", + "archery_ticket_price": "0", + "id": "13477", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0" + }, + { + "examine": "A dragon halberd.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "15", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "200189", + "name": "Dragon halberd", + "archery_ticket_price": "0", + "id": "13478", + "bonuses": "70,95,0,-4,0,-1,4,5,0,0,0,89,0,0,0" + }, + { + "requirements": "{0,60}", + "examine": "A spiky mace.", + "has_special": "true", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "390,390,381,390", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "28817", + "name": "Dragon mace", + "archery_ticket_price": "0", + "id": "13479", + "bonuses": "40,-2,60,0,0,0,0,0,0,0,0,55,0,5,0" + }, + { + "examine": "Used for mining.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "18546", + "name": "Rune pickaxe", + "archery_ticket_price": "0", + "id": "13480", + "bonuses": "26,-2,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "2280904", + "durability": null, + "name": "Dragon chainbody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13481", + "absorb": "4,0,9", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides excellent protection.", + "grand_exchange_price": "38062", + "durability": null, + "name": "Rune platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13482", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "4373", + "durability": null, + "name": "Green d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13483", + "absorb": "0,6,3", + "bonuses": "0,0,0,-20,15,40,32,45,20,40,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "5266", + "durability": null, + "name": "Blue d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13484", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "6276", + "durability": null, + "name": "Red d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13485", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,25,50,42,55,40,50,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "7619", + "durability": null, + "name": "Black d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13486", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These look pretty heavy.", + "grand_exchange_price": "37355", + "durability": null, + "name": "Rune platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13487", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Looks pretty heavy.", + "grand_exchange_price": "160755", + "durability": null, + "name": "Dragon platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13488", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Designer leg protection.", + "grand_exchange_price": "37248", + "durability": null, + "name": "Rune plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13489", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This looks pretty heavy.", + "grand_exchange_price": "161006", + "durability": null, + "name": "Dragon plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13490", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "100% real dragonhide.", + "grand_exchange_price": "2037", + "durability": null, + "name": "Green d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13491", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "2352", + "durability": null, + "name": "Blue d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13492", + "absorb": "0,5,2", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "2761", + "durability": null, + "name": "Red d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13493", + "absorb": "0,6,3", + "bonuses": "0,0,0,-10,14,28,22,30,20,28,25,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "3377", + "durability": null, + "name": "Black d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13494", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Makes the wearer pretty intimidating.", + "grand_exchange_price": "59676", + "durability": null, + "name": "Dragon med helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13495", + "absorb": "2,0,4", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A full face helmet.", + "grand_exchange_price": "20388", + "durability": null, + "name": "Rune full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13496", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "1208", + "durability": null, + "name": "Green d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13497", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,8,3,2,4,2,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "1488", + "durability": null, + "name": "Blue d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13498", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,9,4,3,5,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Vambraces made from 100% real dragonhide.", + "grand_exchange_price": "1714", + "durability": null, + "name": "Red d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13499", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,10,5,4,6,6,0,5,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Vambraces made from 100% real dragonhide.", + "grand_exchange_price": "2208", + "durability": null, + "name": "Black d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13500", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A wooden helmet.", + "grand_exchange_price": "5210", + "durability": null, + "name": "Splitbark helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13501", + "absorb": "3,1,0", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides good protection.", + "grand_exchange_price": "27106", + "durability": null, + "name": "Splitbark body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13502", + "absorb": "6,3,0", + "bonuses": "0,0,0,10,-10,36,26,42,15,0,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These should protect my legs.", + "grand_exchange_price": "56050", + "durability": null, + "name": "Splitbark legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13503", + "absorb": "4,2,0", + "bonuses": "0,0,0,7,-7,22,20,25,10,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These should keep my hands safe.", + "grand_exchange_price": "2442", + "durability": null, + "name": "Splitbark gauntlets", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13504", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Wooden foot protection.", + "grand_exchange_price": "6845", + "durability": null, + "name": "Splitbark boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13505", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,9,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "An ancient and powerful looking Dragon Square shield.", + "grand_exchange_price": "328356", + "durability": null, + "name": "Dragon sq shield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13506", + "absorb": "5,0,11", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A large metal shield.", + "grand_exchange_price": "31885", + "durability": null, + "name": "Rune kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13507", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Blue: A magical hat. ", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13508", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The upper half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13509", + "absorb": "3,1,0", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The lower half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13510", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Bright/Dark magical gloves.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13511", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Magical boots.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13512", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Blue: A magical hat. ", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13513", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The upper half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13514", + "absorb": "3,1,0", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The lower half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13515", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Bright/Dark magical gloves.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13516", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Magical boots.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13517", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Blue: A magical hat. ", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13518", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The upper half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13519", + "absorb": "3,1,0", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The lower half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13520", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Bright/Dark magical gloves.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13521", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Magical boots.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13522", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "examine": "A nice sturdy bow made out of maple.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "193", + "name": "Maple longbow", + "archery_ticket_price": "0", + "id": "13523", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A shortbow made out of maple, still effective.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "111", + "name": "Maple shortbow", + "archery_ticket_price": "0", + "id": "13524", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A nice sturdy bow made out of yew.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "486", + "name": "Yew longbow", + "archery_ticket_price": "0", + "id": "13525", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A shortbow made out of yew, still effective.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "253", + "name": "Yew shortbow", + "archery_ticket_price": "0", + "id": "13526", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A nice sturdy magical bow.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1211", + "name": "Magic longbow", + "archery_ticket_price": "0", + "id": "13527", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Short and magical, but still effective.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "655", + "name": "Magic shortbow", + "archery_ticket_price": "0", + "id": "13528", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "An ancient Fremennik bow that was once used to battle the Moon Clan.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "21698", + "name": "Seercull", + "archery_ticket_price": "0", + "id": "13529", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A runite crossbow.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "17", + "absorb": "0,0,0", + "render_anim": "175", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "8890", + "name": "Rune crossbow", + "archery_ticket_price": "0", + "id": "13530", + "bonuses": "0,0,0,0,90,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1696744720", + "durability": null, + "name": "Red partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13531", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1314730495", + "durability": null, + "name": "Yellow partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13532", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "2147483647", + "durability": null, + "name": "Blue partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13533", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1481913809", + "durability": null, + "name": "Green partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13534", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1248900588", + "durability": null, + "name": "Purple partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13535", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "2147473360", + "durability": null, + "name": "White partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13536", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "It's a Santa hat.", + "grand_exchange_price": "130433327", + "durability": null, + "name": "Santa hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13537", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Aaaarrrghhh ... I'm a monster.", + "grand_exchange_price": "104671288", + "durability": null, + "name": "Green h'ween mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13538", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Aaaarrrghhh ... I'm a monster.", + "grand_exchange_price": "127720943", + "durability": null, + "name": "Blue h'ween mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13539", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Aaaarrrghhh ... I'm a monster.", + "grand_exchange_price": "171640098", + "durability": null, + "name": "Red h'ween mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13540", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful bow made from willow.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "2606", + "name": "Willow comp bow", + "archery_ticket_price": "0", + "id": "13541", + "bonuses": "0,0,0,0,22,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful bow made from yew wood.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "588", + "name": "Yew comp bow", + "archery_ticket_price": "0", + "id": "13542", + "bonuses": "0,0,0,0,49,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful bow made from magic wood.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1345", + "name": "Magic comp bow", + "archery_ticket_price": "0", + "id": "13543", + "bonuses": "0,0,0,0,71,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "74503559", + "durability": null, + "name": "3rd age range top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13544", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,30,55,47,60,60,55,52,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "47837515", + "durability": null, + "name": "3rd age range legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13545", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,17,31,25,33,30,31,25,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "9746895", + "durability": null, + "name": "3rd age range coif", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13546", + "absorb": "0,3,1", + "bonuses": "0,0,0,-2,9,4,7,10,5,8,12,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "6826420", + "durability": null, + "name": "3rd age vambraces", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13547", + "absorb": "0,0,0", + "bonuses": "0,0,0,-11,11,6,5,7,9,0,5,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "138719269", + "durability": null, + "name": "3rd age robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13548", + "absorb": "4,2,0", + "bonuses": "0,0,0,24,0,0,0,0,24,0,24,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "89961678", + "durability": null, + "name": "3rd age robe", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13549", + "absorb": "4,2,0", + "bonuses": "0,0,0,19,0,0,0,0,19,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "14976830", + "durability": null, + "name": "3rd age mage hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13550", + "absorb": "2,1,0", + "bonuses": "0,0,0,8,0,0,0,0,8,0,12,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "35019596", + "durability": null, + "name": "3rd age amulet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13551", + "absorb": "0,0,0", + "bonuses": "0,0,0,15,0,0,0,0,10,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "244180930", + "durability": null, + "name": "3rd age platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13552", + "absorb": "3,0,6", + "bonuses": "0,0,0,-25,-2,78,76,83,-5,75,25,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "266509014", + "durability": null, + "name": "3rd age platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13553", + "absorb": "4,0,9", + "bonuses": "0,0,0,-20,0,96,108,113,-4,97,52,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "50697678", + "durability": null, + "name": "3rd age full helmet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13554", + "absorb": "2,0,4", + "bonuses": "0,0,0,-5,-2,47,49,43,-3,48,12,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "91262203", + "durability": null, + "name": "3rd age kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13555", + "absorb": "5,0,11", + "bonuses": "0,0,0,-10,-4,63,65,61,-3,63,60,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Lightweight boots ideal for rangers.", + "grand_exchange_price": "6253527", + "durability": null, + "name": "Ranger boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13556", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,8,2,3,4,2,0,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Slightly magical boots.", + "grand_exchange_price": "388955", + "durability": null, + "name": "Wizard boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13557", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Endorsed by Robin Hood.", + "grand_exchange_price": "1962571", + "durability": null, + "name": "Robin hood hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13558", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,8,4,6,8,4,4,7,0,0,0,0" + }, + { + "destroy_message": "You will have talk to Explorer Jack in Lumbridge if you destroy this one.", + "shop_price": "350", + "examine": "A Lumbridge explorer's ring.", + "durability": null, + "name": "Explorer's ring 1", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13560", + "absorb": "0,0,0", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,1,0,0", + "equipment_slot": "12" + }, + { + "destroy_message": "You will have talk to ", + "shop_price": "350", + "examine": "A Lumbridge explorer's ring.", + "durability": null, + "name": "Explorer's ring 2", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13561", + "absorb": "0,0,0", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,1,0,0", + "equipment_slot": "12" + }, + { + "destroy_message": "You will need to obtain a new ring from Ned in Draynor if you destroy this one.", + "shop_price": "350", + "examine": "A Lumbridge explorer's ring.", + "durability": null, + "name": "Explorer's ring 3", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13562", + "absorb": "0,0,0", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,1,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "38", + "examine": "An occasionally edible mushroom.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "100", + "name": "Button mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13563", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "38", + "examine": "An occasionally edible mushroom.", + "grand_exchange_price": "100", + "durability": null, + "name": "Button mushroom", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13564" + }, + { + "durability": null, + "name": "Doll", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13565", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You may be able to find a new ring near where Summer stood outside the wilderness wall.", + "examine": "This magical ring once belonged to Summer's mother.", + "durability": null, + "name": "Jennica's ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13566", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "destroy_message": "Drop", + "examine": "Logs cut from a cursed magic tree.", + "durability": null, + "name": "Cursed magic logs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13567", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Logs cut from a cursed magic tree.", + "durability": null, + "name": "Cursed magic logs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13568" + }, + { + "destroy_message": "Hopefully, Jorral will be able to return them.", + "examine": "Notes on how to use the enchanted key.", + "durability": null, + "name": "Enchanted key notes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13569", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Useful for mixing things.", + "grand_exchange_price": "106", + "durability": null, + "name": "Bowl", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13570", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "It's a bucket of milk.", + "grand_exchange_price": "177", + "durability": null, + "name": "Bucket of milk", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13571", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A fresh herb.", + "grand_exchange_price": "595", + "durability": null, + "name": "Clean guam", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13572", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to start again from stratch.", + "examine": "A bowlful of bees' precious product.", + "durability": null, + "name": "Bowl of honey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13573", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to start again from stratch.", + "examine": "A bowlful of milk and honey.", + "durability": null, + "name": "Bowl of milk and honey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13574", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to start again from stratch.", + "examine": "A bowl full of milk, honey and guam.", + "durability": null, + "name": "Bowl of milk, honey and guam", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13575", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Hopefully, the family has more papyrus and charcoal.", + "examine": "Your best impression of a map of RuneScape.", + "durability": null, + "name": "Map of runescape", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13576", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Used for making notes.", + "grand_exchange_price": "290", + "durability": null, + "name": "Papyrus", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13577", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A lump of charcoal.", + "grand_exchange_price": "296", + "durability": null, + "name": "Charcoal", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13578", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A slightly muddy spade. ", + "grand_exchange_price": "130", + "durability": null, + "name": "Spade", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13579", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A plant pot filled with soil.", + "durability": null, + "name": "Plant pot", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13580", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Pear tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13581", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Mango tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13582", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Quince tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13583", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Lemon tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13584", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Avocado tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13585", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Plum tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13586", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "4", + "examine": "I can grind things for potions in this.", + "grand_exchange_price": "169", + "durability": null, + "name": "Pestle and mortar", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13587", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "One of the ingredients for making fish food.", + "grand_exchange_price": "5", + "durability": null, + "name": "Ground guam", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13588", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2", + "examine": "It's an empty bucket. ", + "grand_exchange_price": "39", + "durability": null, + "name": "Bucket", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13589", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "It seems to change temperature as I walk. (Making History)", + "durability": null, + "name": "Enchanted key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13591", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Hopefully, you can find another.", + "examine": "Some ladies jewellery.", + "durability": null, + "name": "A brooch", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13592", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will not get another chance to read the book!", + "examine": "It's falling apart, but full of knowledge.", + "durability": null, + "name": "Old tome", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13593", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Runecrafting guild teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13598", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Air altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13599", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Mind altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13600", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Water altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13601", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Earth altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13602", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Fire altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13603", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Body altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13604", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Cosmic altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13605", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Chaos altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13606", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Nature altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13607", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Law altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13608", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Death altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13609", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Blood altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13610", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Astral altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13611", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13612", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13613", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "75", + "examine": "Heavy duty wizard robes.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Runecrafter robe", + "archery_ticket_price": "0", + "id": "13614", + "bonuses": "0,0,0,5,0,5,5,5,5,5,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13615", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13616", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "A heavy-duty wizard robe.", + "durability": null, + "name": "Runecrafter skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13617", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,4,4,4,4,4,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Essence can be rough on the hands", + "durability": null, + "name": "Runecrafter gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13618", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "75", + "examine": "Heavy duty wizard robes.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Runecrafter robe", + "archery_ticket_price": "0", + "id": "13619", + "bonuses": "0,0,0,5,0,5,5,5,5,5,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13620", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13621", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "A heavy-duty wizard robe.", + "durability": null, + "name": "Runecrafter skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13622", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,4,4,4,4,4,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Essence can be rough on the hands", + "durability": null, + "name": "Runecrafter gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13623", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "75", + "examine": "Heavy duty wizard robes.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Runecrafter robe", + "archery_ticket_price": "0", + "id": "13624", + "bonuses": "0,0,0,5,0,5,5,5,5,5,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13625", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13626", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "A heavy-duty wizard robe.", + "durability": null, + "name": "Runecrafter skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13627", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,4,4,4,4,4,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Essence can be rough on the hands", + "durability": null, + "name": "Runecrafter gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13628", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Drop", + "shop_price": "15", + "examine": "Staff with a holder for a talisman on top.", + "durability": null, + "name": "Runecrafting staff", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "13629", + "absorb": "0,0,0", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0", + "render_anim": "28" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Air talisman staff", + "archery_ticket_price": "0", + "id": "13630", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Mind talisman staff", + "archery_ticket_price": "0", + "id": "13631", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Water talisman staff", + "archery_ticket_price": "0", + "id": "13632", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Earth talisman staff", + "archery_ticket_price": "0", + "id": "13633", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Fire talisman staff", + "archery_ticket_price": "0", + "id": "13634", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Body talisman staff", + "archery_ticket_price": "0", + "id": "13635", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Cosmic talisman staff", + "archery_ticket_price": "0", + "id": "13636", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Chaos talisman staff", + "archery_ticket_price": "0", + "id": "13637", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "No", + "name": "Nature talisman staff", + "archery_ticket_price": "0", + "id": "13638", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Law talisman staff", + "archery_ticket_price": "0", + "id": "13639", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Death talisman staff", + "archery_ticket_price": "0", + "id": "13640", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Blood talisman staff", + "archery_ticket_price": "0", + "id": "13641", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You will have to speak to Wizard Elriss to get another omni-talisman.", + "name": "Omni-talisman staff", + "archery_ticket_price": "0", + "id": "13642", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "20", + "examine": "Attracts Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Yellow attractor", + "archery_ticket_price": "0", + "id": "13643", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Repels Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Yellow repeller", + "archery_ticket_price": "0", + "id": "13644", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Attracts Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Green attractor", + "archery_ticket_price": "0", + "id": "13645", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Repels Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Green repeller", + "archery_ticket_price": "0", + "id": "13646", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "It creates barriers.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Green barrier generator", + "archery_ticket_price": "0", + "id": "13647", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "It creates barriers.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Yellow barrier generator", + "archery_ticket_price": "0", + "id": "13648", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will have to speak to ", + "shop_price": "4", + "examine": "Many mysterious powers emanate from the talisman.", + "durability": null, + "name": "Omni-talisman", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13649", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13650", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13651", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13652", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13653", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13654", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will have to speak to Wizard Elriss to get another omni-talisman.", + "shop_price": "100", + "examine": "A tiara infused with the properties of all talismans.", + "durability": null, + "name": "Omni-tiara", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13655", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13656", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13657", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13658", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "100", + "examine": "It burns, burns, burns...", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "12", + "destroy_message": "To get another Ring of Fire, you need to keep six beacons alight simultaneously and then talk to King Roald.", + "name": "Ring of fire", + "archery_ticket_price": "0", + "id": "13659", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "point_price": "50" + }, + { + "destroy_message": "To get another pair of Flame Gloves, you need to keep ten beacons alight simultaneously and then talk to King Roald.", + "shop_price": "200", + "examine": "The hottest gloves in town.", + "durability": null, + "name": "Flame gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13660", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "300", + "examine": "Danger: risk of fire.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "1096", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "destroy_message": "To get another Inferno Adze, you need to keep all fourteen beacons alight simultaneously and then talk to King Roald.", + "name": "Inferno adze", + "archery_ticket_price": "0", + "id": "13661", + "bonuses": "10,9,7,0,0,0,1,0,0,0,0,11,0,0,0", + "point_price": "75" + }, + { + "durability": null, + "name": "Fire beacon", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13662", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The ticket says: Tearing this ticket will make you leave the circus. Choose wisely.", + "shop_price": "10", + "examine": "Tear ticket to exit the circus.", + "durability": null, + "name": "Circus ticket", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13663", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "10", + "examine": "Let's give them a big hand!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "326", + "equipment_slot": "3", + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "name": "Giant's hand", + "archery_ticket_price": "0", + "id": "13666", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "A clown hat!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Clown hat", + "archery_ticket_price": "0", + "id": "13667", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10", + "examine": "Buttoning this up is tricky.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "remove_sleeves": "true", + "name": "Clown shirt", + "archery_ticket_price": "0", + "id": "13668", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "These are my funny pants.", + "durability": null, + "name": "Clown leggings", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13669", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "For helping clowns stay upright.", + "durability": null, + "name": "Clown shoes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13670", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "examine": "For making a happy noise.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "8", + "absorb": "0,0,0", + "render_anim": "327", + "equipment_slot": "3", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Tambourine", + "archery_ticket_price": "0", + "id": "13671", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "shop_price": "10", + "examine": "Very stylish.", + "durability": null, + "name": "Ringmaster hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13672", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "10", + "examine": "Fits nicely.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "remove_sleeves": "true", + "name": "Ringmaster shirt", + "archery_ticket_price": "0", + "id": "13673", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "shop_price": "10", + "examine": "Very stylish.", + "durability": null, + "name": "Ringmaster pants", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13674", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "shop_price": "10", + "examine": "Shiny.", + "durability": null, + "name": "Ringmaster boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13675", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "examine": "For shouting at people.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "8", + "absorb": "0,0,0", + "render_anim": "328", + "equipment_slot": "3", + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "name": "Mega-phonus", + "archery_ticket_price": "0", + "id": "13676", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10", + "examine": "Stretchy.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "remove_sleeves": "true", + "name": "Acrobat shirt", + "archery_ticket_price": "0", + "id": "13677", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very tight fitting.", + "durability": null, + "name": "Acrobat pants", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13678", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "These keep your feet off the floor.", + "durability": null, + "name": "Acrobat shoes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13679", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Oh no, I'm bald! Just kidding.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Acrobat hood", + "archery_ticket_price": "0", + "id": "13680", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10", + "examine": "Stretchy.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "remove_sleeves": "true", + "name": "Acrobat shirt", + "archery_ticket_price": "0", + "id": "13681", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very tight fitting.", + "durability": null, + "name": "Acrobat pants", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13682", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "These keep your feet off the floor.", + "durability": null, + "name": "Acrobat shoes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13683", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Oh no, I'm bald! Just kidding.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Acrobat hood", + "archery_ticket_price": "0", + "id": "13684", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "name": "A stylish hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13685", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "name": "A stylish hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13686", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "name": "A stylish hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13687", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "A stylish hat", + "archery_ticket_price": "0", + "id": "13688", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "A stylish hat", + "archery_ticket_price": "0", + "id": "13689", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "A stylish hat", + "archery_ticket_price": "0", + "id": "13690", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13691", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13692", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13693", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13694", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13695", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13696", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "10", + "durability": null, + "name": "Leggings", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13697", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Leggings", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13698", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Leggings", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13699", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Skirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13700", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Skirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13701", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Skirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13702", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13703", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13704", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13705", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13706", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You can get another Tightrope 101 by speaking to the Agility assistant.", + "examine": "Shows you the moves you need to succeed!", + "durability": null, + "name": "Tightrope 101", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13707", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another Tightrope 101 by speaking to the Agility assistant.", + "examine": "Shows you the moves you need to succeed!", + "durability": null, + "name": "Tightrope 101", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13708" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 10 is advised when juggling these.", + "durability": null, + "name": "Balls (level 10 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13709", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 20 is advised when juggling these.", + "durability": null, + "name": "Plates (level 20 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13710", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 30 is advised when juggling these.", + "durability": null, + "name": "Eggs (level 30 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13711", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 40 is advised when juggling these.", + "durability": null, + "name": "Knives (level 40 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13712", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 50 is advised when juggling these.", + "durability": null, + "name": "Spades (level 50 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13713", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 60 is advised when juggling these.", + "durability": null, + "name": "Tuna (level 60 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13714", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 70 is advised when juggling these.", + "durability": null, + "name": "Soap (level 70 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13715", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 80 is advised when juggling these.", + "durability": null, + "name": "Cannon balls (level 80 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13716", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 90 is advised when juggling these.", + "durability": null, + "name": "Torches (level 90 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13717", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 99 is advised when juggling these.", + "durability": null, + "name": "Chinchompas (level 99 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13718", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "50", + "examine": "Short, but effective.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "176", + "equipment_slot": "3", + "destroy_message": "You can get another one from the equipment box for this performance.", + "name": "Performance shortbow", + "archery_ticket_price": "0", + "id": "13719", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "14", + "examine": "A finely balanced throwing knife.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "You can get another one from the equipment box for this performance.", + "name": "Performance knife", + "archery_ticket_price": "0", + "id": "13720", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "4", + "examine": "A finely balanced throwing axe.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "You can get another one from the equipment box for this performance.", + "name": "Performance throwing axe", + "archery_ticket_price": "0", + "id": "13721", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "7", + "examine": "Arrows with bronze heads.", + "durability": null, + "name": "Performance arrow", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13722", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "13" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Teleport spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13723", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Levitation spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13724", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Alchemy spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13725", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Elemental spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13726", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can mine more if you find another crashed star.", + "shop_price": "50", + "examine": "Small, shiny bits of rock.", + "durability": null, + "name": "Stardust", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13727", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak with Larry/Chuck at Ardougne Zoo to get another.", + "examine": "Notes on the locations of penguin spies.", + "durability": null, + "name": "Spy notebook", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13732", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,40}-{5,55}", + "shop_price": "70000", + "examine": "An ethereal shield.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "39982", + "name": "Spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13734", + "bonuses": "0,0,0,0,0,39,41,50,1,45,40,0,1,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "70000", + "examine": "An ethereal shield.", + "grand_exchange_price": "39982", + "durability": null, + "name": "Spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13735" + }, + { + "requirements": "{1,70}-{5,60}", + "shop_price": "1400000", + "examine": "An ethereal shield that has been blessed with holy powers.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "936814", + "name": "Blessed spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13736", + "bonuses": "0,0,0,0,0,53,55,73,2,52,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1400000", + "examine": "An ethereal shield that has been blessed with holy powers.", + "grand_exchange_price": "936814", + "durability": null, + "name": "Blessed spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13737" + }, + { + "requirements": "{1,75}-{6,65}-{5,70}", + "shop_price": "2000000", + "examine": "An ethereal shield with an arcane sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "15076199", + "name": "Arcane spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13738", + "bonuses": "0,0,0,20,0,53,55,73,2,52,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with an arcane sigil attached to it.", + "grand_exchange_price": "15076199", + "durability": null, + "name": "Arcane spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13739" + }, + { + "requirements": "{1,75}-{5,75}", + "shop_price": "2000000", + "examine": "An ethereal shield with a divine sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "40003587", + "name": "Divine spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13740", + "bonuses": "0,0,0,0,0,63,65,75,2,57,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with a divine sigil attached to it.", + "grand_exchange_price": "40003587", + "durability": null, + "name": "Divine spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13741" + }, + { + "requirements": "{1,75}-{5,75}", + "shop_price": "2000000", + "examine": "An ethereal shield with an elysian sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "28420591", + "name": "Elysian spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13742", + "bonuses": "0,0,0,0,0,63,65,75,2,57,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with an elysian sigil attached to it.", + "grand_exchange_price": "28420591", + "durability": null, + "name": "Elysian spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13743" + }, + { + "requirements": "{1,75}-{5,70}-{6,65}", + "shop_price": "2000000", + "examine": "An ethereal shield with a spectral sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "3616112", + "name": "Spectral spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13744", + "bonuses": "0,0,0,0,0,53,55,73,30,52,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with a spectral sigil attached to it.", + "grand_exchange_price": "3616112", + "durability": null, + "name": "Spectral spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13745" + }, + { + "shop_price": "750000", + "examine": "A sigil in the shape of an arcane rune.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "19508553", + "name": "Arcane sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13746", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil in the shape of an arcane rune.", + "grand_exchange_price": "19508553", + "durability": null, + "name": "Arcane sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13747" + }, + { + "shop_price": "750000", + "examine": "A sigil in the shape of a divine symbol.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "53026134", + "name": "Divine sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13748", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil in the shape of a divine symbol.", + "grand_exchange_price": "53026134", + "durability": null, + "name": "Divine sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13749" + }, + { + "shop_price": "750000", + "examine": "A sigil marked with elysian signs.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "36159098", + "name": "Elysian sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13750", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil marked with elysian signs.", + "grand_exchange_price": "36159098", + "durability": null, + "name": "Elysian sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13751" + }, + { + "shop_price": "750000", + "examine": "A sigil tempered with spectral powers.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "3116720", + "name": "Spectral sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13752", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil tempered with spectral powers.", + "grand_exchange_price": "3116720", + "durability": null, + "name": "Spectral sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13753" + }, + { + "shop_price": "750000", + "examine": "A bottle of holy elixir.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "950904", + "name": "Holy elixir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13754", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A bottle of holy elixir.", + "grand_exchange_price": "950904", + "durability": null, + "name": "Holy elixir", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13755" + }, + { + "destroy_message": "Drop", + "shop_price": "40", + "examine": "Logs cut from cursed willow roots.", + "durability": null, + "name": "Cursed willow logs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13756", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "A loyal scout of Varrock.", + "durability": null, + "name": "Hartwin", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13757", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to keep searching trees near the zombie trails until you find another.", + "examine": "A key that was found while tracking zombies. (Defender of Varrock)", + "durability": null, + "name": "Grubby key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13758", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to speak to Thurgo to find another.", + "shop_price": "1", + "examine": "The location of ", + "durability": null, + "name": "Scrap of paper", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13759", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Bottle", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13760", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A bottle of red mist.", + "durability": null, + "name": "Bottle of mist", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13761", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another from ", + "examine": "This lists each of the founding members of the ", + "durability": null, + "name": "List of elders", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13762", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "I hope I don't meet any roundheads...", + "durability": null, + "name": "Cavalier and mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13763", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A right hand fighting claw.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "absorb": "0,0,0", + "equip_audio": "1003", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "6535", + "name": "Rune claws", + "archery_ticket_price": "0", + "id": "13764", + "bonuses": "26,38,-4,0,0,10,19,5,0,0,0,39,0,0,0" + }, + { + "examine": "A powerful dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "4381", + "name": "Rune dagger", + "archery_ticket_price": "0", + "id": "13765", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Rune dagger(p)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13766", + "absorb": "0,0,0", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Rune dagger(p+)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13767", + "absorb": "0,0,0", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Rune dagger(p++)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13768", + "absorb": "0,0,0", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "examine": "A rune tipped spear.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "11317", + "name": "Rune spear", + "archery_ticket_price": "0", + "id": "13769", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "examine": "A dragon tipped spear.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "36774", + "name": "Dragon spear", + "archery_ticket_price": "0", + "id": "13770", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "destroy_message": "Drop", + "name": "Rune spear(p)", + "archery_ticket_price": "0", + "id": "13771", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "name": "Dragon spear(p)", + "archery_ticket_price": "0", + "id": "13772", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "destroy_message": "Drop", + "name": "Rune spear(p+)", + "archery_ticket_price": "0", + "id": "13773", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "name": "Dragon spear(p+)", + "archery_ticket_price": "0", + "id": "13774", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "destroy_message": "Drop", + "name": "Rune spear(p++)", + "archery_ticket_price": "0", + "id": "13775", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "name": "Dragon spear(p++)", + "archery_ticket_price": "0", + "id": "13776", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "examine": "A razor-sharp sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1381", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "11849", + "name": "Rune sword", + "archery_ticket_price": "0", + "id": "13777", + "bonuses": "38,26,-2,0,0,0,2,1,0,0,0,39,0,0,0" + }, + { + "examine": "A two handed sword.", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "124", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "37511", + "name": "Rune 2h sword", + "archery_ticket_price": "0", + "id": "13778", + "bonuses": "-4,69,50,-4,0,0,0,0,0,-1,0,70,0,0,0" + }, + { + "examine": "A rune halberd.", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "15", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "74298", + "name": "Rune halberd", + "archery_ticket_price": "0", + "id": "13779", + "bonuses": "48,67,0,-4,0,-1,4,5,0,0,0,68,0,0,0" + }, + { + "examine": "A spiky mace.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "7917", + "name": "Rune mace", + "archery_ticket_price": "0", + "id": "13780", + "bonuses": "20,-2,39,0,0,0,0,0,0,0,0,36,0,4,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "29145", + "durability": null, + "name": "Rune chainbody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13781", + "absorb": "3,0,6", + "bonuses": "0,0,0,-15,0,63,72,78,-3,65,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These will protect my feet.", + "grand_exchange_price": "7036", + "durability": null, + "name": "Rune boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13782", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,12,13,14,0,0,10,2,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A medium sized helmet.", + "grand_exchange_price": "10678", + "durability": null, + "name": "Rune med helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13783", + "absorb": "1,0,3", + "bonuses": "0,0,0,-3,-1,22,23,21,-1,22,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A stone helmet.", + "grand_exchange_price": "26576", + "durability": null, + "name": "Granite helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13784", + "absorb": "2,0,4", + "bonuses": "0,0,0,-9,-7,31,33,29,-1,39,9,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides excellent protection.", + "grand_exchange_price": "136414", + "durability": null, + "name": "Granite body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13785", + "absorb": "4,0,8", + "bonuses": "0,0,0,-22,-5,87,84,79,-6,97,45,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These look pretty heavy.", + "grand_exchange_price": "72213", + "durability": null, + "name": "Granite legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13786", + "absorb": "2,0,5", + "bonuses": "0,0,0,-31,-18,43,45,41,-4,68,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A medium square shield.", + "grand_exchange_price": "22225", + "durability": null, + "name": "Rune sq shield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13787", + "absorb": "3,0,7", + "bonuses": "0,0,0,-6,-2,38,40,36,0,38,35,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A solid stone shield.", + "grand_exchange_price": "32512", + "durability": null, + "name": "Granite shield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13788", + "absorb": "5,0,10", + "bonuses": "0,0,0,-12,-8,40,42,38,0,65,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A big 'do about nothing.", + "grand_exchange_price": "42991", + "durability": null, + "name": "A powdered wig", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13789", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These'll help me stay alive.", + "grand_exchange_price": "811293", + "durability": null, + "name": "Flared trousers", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13790", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Alas, someone has slashed my pantaloons.", + "grand_exchange_price": "19286", + "durability": null, + "name": "Pantaloons", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13791", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A cap for wearing whil...zzzzzzzzz", + "grand_exchange_price": "75357", + "durability": null, + "name": "Sleeping cap", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13792", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A diamond-topped cane.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "76692", + "name": "Rune cane", + "archery_ticket_price": "0", + "id": "13793", + "bonuses": "0,-2,39,0,0,0,0,0,0,0,0,36,0,4,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Comes with a free rabbit!", + "grand_exchange_price": "333537", + "durability": null, + "name": "Top hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13794", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Shear elegance.", + "grand_exchange_price": "582969", + "durability": null, + "name": "Sheep mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13795", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "I can get the look right, but can I do the waddle too?", + "grand_exchange_price": "1159807", + "durability": null, + "name": "Penguin mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13796", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The bats have left the belltower.", + "grand_exchange_price": "681595", + "durability": null, + "name": "Bat mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13797", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "It's the year of the cat!", + "grand_exchange_price": "2512014", + "durability": null, + "name": "Cat mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13798", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "I'm hungry like the wolf.", + "grand_exchange_price": "3240770", + "durability": null, + "name": "Wolf mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13799", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody with gold trim.", + "grand_exchange_price": "343688", + "durability": null, + "name": "Rune platebody (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13800", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "drop", + "examine": "Rune platelegs with gold trim.", + "grand_exchange_price": "238139", + "durability": null, + "name": "Rune platelegs (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13801", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt with gold trim.", + "grand_exchange_price": "37616", + "durability": null, + "name": "Rune plateskirt (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13802", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet with gold trim.", + "grand_exchange_price": "247877", + "durability": null, + "name": "Rune full helm(g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13803", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield with gold trim", + "grand_exchange_price": "118205", + "durability": null, + "name": "Rune kiteshield (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13804", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody with trim.", + "grand_exchange_price": "100586", + "durability": null, + "name": "Rune platebody (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13805", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs with trim!", + "grand_exchange_price": "81577", + "durability": null, + "name": "Rune platelegs (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13806", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt with trim.", + "grand_exchange_price": "37701", + "durability": null, + "name": "Rune plateskirt (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13807", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet with trim.", + "grand_exchange_price": "95809", + "durability": null, + "name": "Rune full helm (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13808", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A large, metal shield with a nice trim.", + "grand_exchange_price": "46469", + "durability": null, + "name": "Rune kiteshield (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13809", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Your money or your life!", + "grand_exchange_price": "252995", + "durability": null, + "name": "Highwayman mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13810", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Parlez-vous francais?", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "135411", + "name": "Blue beret", + "archery_ticket_price": "0", + "hat": true, + "id": "13811", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Parlez-vous francais?", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "451371", + "name": "Black beret", + "archery_ticket_price": "0", + "hat": true, + "id": "13812", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Parlez-vous Francais?", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "704147", + "name": "White beret", + "archery_ticket_price": "0", + "hat": true, + "id": "13813", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "All for one and one for all!", + "grand_exchange_price": "42014", + "durability": null, + "name": "Tan cavalier", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13814", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "All for one and one for all!", + "grand_exchange_price": "61518", + "durability": null, + "name": "Dark cavalier", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13815", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "All for one and one for all!", + "grand_exchange_price": "338530", + "durability": null, + "name": "Black cavalier", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13816", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A minimalist's hat.", + "grand_exchange_price": "159694", + "durability": null, + "name": "Red headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13817", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A minimalist's hat.", + "grand_exchange_price": "83543", + "durability": null, + "name": "Black headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13818", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A minimalist's hat.", + "grand_exchange_price": "26474", + "durability": null, + "name": "Brown headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13819", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody in the colours of Zamorak.", + "grand_exchange_price": "868398", + "durability": null, + "name": "Zamorak platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13820", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs in the colours of Zamorak.", + "grand_exchange_price": "316989", + "durability": null, + "name": "Zamorak platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13821", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt in the colours of Zamorak.", + "grand_exchange_price": "38597", + "durability": null, + "name": "Zamorak plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13822", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A full helmet in the colours of Zamorak.", + "grand_exchange_price": "618480", + "durability": null, + "name": "Zamorak full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13823", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A Rune kiteshield in the colours of Zamorak.", + "grand_exchange_price": "225574", + "durability": null, + "name": "Zamorak kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13824", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody in the colours of Saradomin.", + "grand_exchange_price": "1555099", + "durability": null, + "name": "Saradomin platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13825", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs in the colours of Saradomin.", + "grand_exchange_price": "376849", + "durability": null, + "name": "Saradomin platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13826", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt in the colours of Saradomin.", + "grand_exchange_price": "53048", + "durability": null, + "name": "Saradomin plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13827", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet in the colours of Saradomin.", + "grand_exchange_price": "1025974", + "durability": null, + "name": "Saradomin full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13828", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield in the colours of Saradomin.", + "grand_exchange_price": "353916", + "durability": null, + "name": "Saradomin kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13829", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody in the colours of Guthix.", + "grand_exchange_price": "406762", + "durability": null, + "name": "Guthix platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13830", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs in the colours of Guthix.", + "grand_exchange_price": "181471", + "durability": null, + "name": "Guthix platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13831", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt in the colours of Guthix.", + "grand_exchange_price": "38388", + "durability": null, + "name": "Guthix plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13832", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A rune full helmet in the colours of Guthix.", + "grand_exchange_price": "399963", + "durability": null, + "name": "Guthix full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13833", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield in the colours of Guthix.", + "grand_exchange_price": "185266", + "durability": null, + "name": "Guthix kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13834", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody with complete gold trim & plating.", + "grand_exchange_price": "2034838", + "durability": null, + "name": "Gilded platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13835", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs with gold plate.", + "grand_exchange_price": "1299758", + "durability": null, + "name": "Gilded platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13836", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt with gold plate.", + "grand_exchange_price": "84191", + "durability": null, + "name": "Gilded plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13837", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet with gold plate.", + "grand_exchange_price": "1057068", + "durability": null, + "name": "Gilded full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13838", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield with gold plate.", + "grand_exchange_price": "506093", + "durability": null, + "name": "Gilded kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13839", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,45,0,0,0,0" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Atk, Def, Str and LP xp.", + "durability": null, + "name": "Brawling gloves (melee)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13845", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Ranged xp.", + "durability": null, + "name": "Brawling gloves (ranged)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13846", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Magic xp.", + "durability": null, + "name": "Brawling gloves (magic)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13847", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Prayer xp.", + "durability": null, + "name": "Brawling gloves (prayer)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13848", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Agility xp.", + "durability": null, + "name": "Brawling gloves (agility)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13849", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Woodcutting xp.", + "durability": null, + "name": "Brawling gloves (wc)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13850", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Firemaking xp.", + "durability": null, + "name": "Brawling gloves (fm)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13851", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Mining xp.", + "durability": null, + "name": "Brawling gloves (mining)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13852", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Hunting xp.", + "durability": null, + "name": "Brawling gloves (hunter)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13853", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Thieving xp.", + "durability": null, + "name": "Brawling gloves (thieving)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13854", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Smithing xp.", + "durability": null, + "name": "Brawling gloves (smithing)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13855", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Fishing xp.", + "durability": null, + "name": "Brawling gloves (fishing)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13856", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Cooking xp.", + "durability": null, + "name": "Brawling gloves (cooking)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13857", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1412812", + "name": "Zuriel's robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13858", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1412812", + "durability": null, + "name": "Zuriel's robe top", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13859" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1412812", + "name": "Zuriel's robe top (deg)", + "archery_ticket_price": "0", + "id": "13860", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "986668", + "name": "Zuriel's robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13861", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "986668", + "durability": null, + "name": "Zuriel's robe bottom", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13862" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "986668", + "name": "Zuriel's robe bottom (deg)", + "archery_ticket_price": "0", + "id": "13863", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "361542", + "name": "Zuriel's hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13864", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "361542", + "durability": null, + "name": "Zuriel's hood", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13865" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "150000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "361542", + "name": "Zuriel's hood (deg)", + "archery_ticket_price": "0", + "id": "13866", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "destroy_message": "Drop", + "grand_exchange_price": "2116989", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13867", + "stand_turn_anim": "1209", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10", + "requirements": "{6,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Zuriel's staff" + }, + { + "destroy_message": "Drop", + "requirements": "{6,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "2116989", + "durability": null, + "name": "Zuriel's staff", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13868" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "destroy_message": "Drop", + "grand_exchange_price": "2116989", + "stand_anim": "813", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13869", + "stand_turn_anim": "1209", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10", + "shop_price": "300000", + "durability": null, + "destroy": "true", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Zuriel's staff (deg)" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "926341", + "name": "Morrigan's leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13870", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "926341", + "durability": null, + "name": "Morrigan's leather body", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13871" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "926341", + "name": "Morrigan's leather body (deg)", + "archery_ticket_price": "0", + "id": "13872", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop, Destroy after degrading.", + "grand_exchange_price": "510395", + "name": "Morrigan's leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13873", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "destroy_message": "Drop, Destroy after degrading.", + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "510395", + "durability": null, + "name": "Morrigan's leather chaps", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13874" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop, Destroy after degrading.", + "grand_exchange_price": "510395", + "name": "Morrigan's leather chaps (deg)", + "archery_ticket_price": "0", + "id": "13875", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "236411", + "name": "Morrigan's coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13876", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "236411", + "durability": null, + "name": "Morrigan's coif", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13877" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "150000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "236411", + "name": "Morrigan's coif (deg)", + "archery_ticket_price": "0", + "id": "13878", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "requirements": "{4,78}", + "shop_price": "4000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13879", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13880", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13881", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13882", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "4000", + "examine": "A vicious throwing axe.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "5", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "9994", + "name": "Morrigan's throwing axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13883", + "bonuses": "0,0,0,0,93,0,0,0,0,0,0,0,0,0,117" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1619096", + "name": "Statius's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13884", + "bonuses": "5,5,7,-30,-10,154,145,121,-6,157,60,5,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1619096", + "durability": null, + "name": "Statius's platebody", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13885" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1619096", + "name": "Statius's platebody (deg)", + "archery_ticket_price": "0", + "id": "13886", + "bonuses": "5,5,7,-30,-10,154,145,121,-6,157,60,5,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop, Destroy once it has been degraded.", + "remove_sleeves": "true", + "grand_exchange_price": "2154168", + "name": "Vesta's chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13887", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "destroy_message": "Drop, Destroy once it has been degraded.", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "2154168", + "durability": null, + "name": "Vesta's chainbody", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13888" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop, Destroy once it has been degraded.", + "remove_sleeves": "true", + "grand_exchange_price": "2154168", + "name": "Vesta's chainbody (deg)", + "archery_ticket_price": "0", + "id": "13889", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1735029", + "name": "Statius's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13890", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1735029", + "durability": null, + "name": "Statius's platelegs", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13891" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1735029", + "name": "Statius's platelegs (deg)", + "archery_ticket_price": "0", + "id": "13892", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1860767", + "name": "Vesta's plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13893", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1860767", + "durability": null, + "name": "Vesta's plateskirt", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13894" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1860767", + "name": "Vesta's plateskirt (deg)", + "archery_ticket_price": "0", + "id": "13895", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1301986", + "name": "Statius's full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13896", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1301986", + "durability": null, + "name": "Statius's full helm", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13897" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "150000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1301986", + "name": "Statius' full helm (deg)", + "archery_ticket_price": "0", + "id": "13898", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "10464249", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13899", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weapon_interface": "5", + "render_anim": "1426", + "attack_audios": "2500,2500,2517,2500", + "name": "Vesta's longsword" + }, + { + "destroy_message": "Drop", + "requirements": "{0,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "10464249", + "durability": null, + "name": "Vesta's longsword", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13900" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "10464249", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13901", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "true", + "weapon_interface": "5", + "render_anim": "1426", + "attack_audios": "2500,2500,2517,2500", + "name": "Vesta's longsword (deg)" + }, + { + "turn90cw_anim": "821", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "destroy_message": "Drop, Destroy once it has been degraded.", + "grand_exchange_price": "7424450", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13902", + "stand_turn_anim": "823", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,114,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weapon_interface": "10", + "attack_audios": "2504,0,0,0", + "name": "Statius's warhammer" + }, + { + "destroy_message": "Drop, Destroy once it has been degraded.", + "requirements": "{0,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "7424450", + "durability": null, + "name": "Statius's warhammer", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13903" + }, + { + "turn90cw_anim": "821", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "destroy_message": "Drop, Destroy once it has been degraded.", + "grand_exchange_price": "7424450", + "stand_anim": "808", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13904", + "stand_turn_anim": "823", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,114,0,0,0", + "shop_price": "300000", + "durability": null, + "destroy": "true", + "weapon_interface": "10", + "render_anim": "1426", + "attack_audios": "2504,0,0,0", + "name": "Statius' warhammer (deg)" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "5264612", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13905", + "stand_turn_anim": "1209", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,122,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weight": "4.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Vesta's spear" + }, + { + "requirements": "{0,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "two_handed": "true", + "destroy_message": "Drop", + "grand_exchange_price": "5264612", + "name": "Vesta's spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13906" + }, + { + "requirements": "{0,78}", + "shop_price": "180000", + "examine": "This item degrades in combat, and will turn to dust.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "5264612", + "name": "Vesta's spear (deg)", + "archery_ticket_price": "0", + "id": "13907", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,122,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1897306", + "name": "Corrupt statius's platebody", + "archery_ticket_price": "0", + "id": "13908", + "bonuses": "5,5,7,-10,-30,154,145,121,-6,157,60,5,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1897306", + "durability": null, + "name": "Corrupt statius's platebody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13909" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1897306", + "name": "Corrupt statius's platebody (deg)", + "archery_ticket_price": "0", + "id": "13910", + "bonuses": "5,5,7,-10,-30,154,145,121,-6,157,60,5,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "2546175", + "name": "Corrupt vesta's chainbody", + "archery_ticket_price": "0", + "id": "13911", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "2546175", + "durability": null, + "name": "Corrupt vesta's chainbody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13912" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "2546175", + "name": "Corrupt vesta's chainbody (deg)", + "archery_ticket_price": "0", + "id": "13913", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1734527", + "name": "Corrupt statius's platelegs", + "archery_ticket_price": "0", + "id": "13914", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1734527", + "durability": null, + "name": "Corrupt statius's platelegs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13915" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1734527", + "name": "Corrupt statius's platelegs (deg)", + "archery_ticket_price": "0", + "id": "13916", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1942627", + "name": "Corrupt vesta's plateskirt", + "archery_ticket_price": "0", + "id": "13917", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1942627", + "durability": null, + "name": "Corrupt vesta's plateskirt", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13918" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1942627", + "name": "Corrupt vesta's plateskirt (deg)", + "archery_ticket_price": "0", + "id": "13919", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1062835", + "name": "Corrupt statius's full helm", + "archery_ticket_price": "0", + "id": "13920", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1062835", + "durability": null, + "name": "Corrupt statius's full helm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13921" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1062835", + "name": "Corrupt statius' full helm (deg)", + "archery_ticket_price": "0", + "id": "13922", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "turn90cw_anim": "1207", + "examine": "This item degrades while worn, and will turn to dust.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "3739998", + "name": "Corrupt vesta's longsword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13923", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "turn90cw_anim": "1207", + "examine": "This item degrades while worn, and will turn to dust.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "render_anim": "1426", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "3739998", + "name": "Corrupt vesta's longsword", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13924", + "stand_turn_anim": "823" + }, + { + "requirements": "{0,78}", + "shop_price": "75000", + "turn90cw_anim": "1207", + "examine": "This item degrades while worn, and will turn to dust.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "render_anim": "1426", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "3739998", + "name": "C. vesta's longsword (deg)", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13925", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "3033516", + "attack_audios": "395,395,395,395", + "name": "Corrupt statius's warhammer", + "archery_ticket_price": "0", + "id": "13926", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,114,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "3033516", + "durability": null, + "name": "Corrupt statius's warhammer", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13927" + }, + { + "requirements": "{0,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "8", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "3033516", + "name": "C. statius's warhammer (deg)", + "archery_ticket_price": "0", + "id": "13928", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "343474", + "name": "Corrupt vesta's spear", + "archery_ticket_price": "0", + "id": "13929", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,0,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "destroy_message": "Drop", + "grand_exchange_price": "343474", + "name": "Corrupt vesta's spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13930" + }, + { + "requirements": "{0,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "343474", + "name": "Corrupt vesta's spear (deg)", + "archery_ticket_price": "0", + "id": "13931", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "253230", + "name": "Corrupt zuriel's robe top", + "archery_ticket_price": "0", + "id": "13932", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "253230", + "durability": null, + "name": "Corrupt zuriel's robe top", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13933" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "253230", + "name": "Corrupt zuriel's robe top (deg)", + "archery_ticket_price": "0", + "id": "13934", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "121290", + "name": "Corrupt zuriel's robe bottom", + "archery_ticket_price": "0", + "id": "13935", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "121290", + "durability": null, + "name": "Corrupt zuriel's robe bottom", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13936" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "121290", + "name": "Corrupt zuriel's robe bottom (deg)", + "archery_ticket_price": "0", + "id": "13937", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "43778", + "name": "Corrupt zuriel's hood", + "archery_ticket_price": "0", + "id": "13938", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "43778", + "durability": null, + "name": "Corrupt zuriel's hood", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13939" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "43778", + "name": "Corrupt zuriel's hood (deg)", + "archery_ticket_price": "0", + "id": "13940", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "requirements": "{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2555,0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "219418", + "attack_audios": "2555,0,0,0", + "name": "Corrupt zuriel's staff", + "archery_ticket_price": "0", + "id": "13941", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10" + }, + { + "destroy_message": "Drop", + "requirements": "{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "219418", + "durability": null, + "name": "Corrupt zuriel's staff", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13942" + }, + { + "requirements": "{6,78}", + "shop_price": "70000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "219418", + "name": "Corrupt zuriel's staff (deg)", + "archery_ticket_price": "0", + "id": "13943", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "387212", + "name": "Corrupt morrigan's leather body", + "archery_ticket_price": "0", + "id": "13944", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "387212", + "durability": null, + "name": "Corrupt morrigan's leather body", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13945" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "387212", + "name": "Corrupt morrigan's leather body (deg)", + "archery_ticket_price": "0", + "id": "13946", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "84592", + "name": "Corrupt morrigan's leather chaps", + "archery_ticket_price": "0", + "id": "13947", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "84592", + "durability": null, + "name": "Corrupt morrigan's leather chaps", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13948" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "84592", + "name": "Corrupt morrigan's leather chaps (deg)", + "archery_ticket_price": "0", + "id": "13949", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "63502", + "name": "Corrupt morrigan's coif", + "archery_ticket_price": "0", + "id": "13950", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "63502", + "durability": null, + "name": "Corrupt morrigan's coif", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13951" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "63502", + "name": "Corrupt morrigan's coif (deg)", + "archery_ticket_price": "0", + "id": "13952", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "requirements": "{4,78}", + "shop_price": "1000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "Corrupt morrigan's javelin", + "archery_ticket_price": "0", + "id": "13953", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "C. morrigan's javelin (p)", + "archery_ticket_price": "0", + "id": "13954", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "C. morrigan's javelin (p+)", + "archery_ticket_price": "0", + "id": "13955", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "C. morrigan's javelin (p++)", + "archery_ticket_price": "0", + "id": "13956", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "1000", + "examine": "A vicious throwing axe.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "5388", + "name": "C. morrigan's throwing axe", + "archery_ticket_price": "0", + "id": "13957", + "bonuses": "0,0,0,0,93,0,0,0,0,0,0,0,0,0,117" + }, + { + "requirements": "{0,78}-{4,78}", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "168278", + "name": "Corrupt dragon chainbody", + "archery_ticket_price": "0", + "id": "13958", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "168278", + "durability": null, + "name": "Corrupt dragon chainbody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13959" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "168278", + "name": "Corrupt dragon chainbody (deg)", + "archery_ticket_price": "0", + "id": "13960", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "2,0,4", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "121835", + "name": "Corrupt dragon med helm", + "archery_ticket_price": "0", + "id": "13961", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "121835", + "durability": null, + "name": "Corrupt dragon med helm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13962" + }, + { + "remove_head": "true", + "shop_price": "36000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "2,0,4", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "121835", + "name": "Corrupt dragon med helm (deg)", + "archery_ticket_price": "0", + "id": "13963", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "5,0,11", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "79703", + "name": "Corrupt dragon sq shield", + "archery_ticket_price": "0", + "id": "13964", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "79703", + "durability": null, + "name": "Corrupt dragon sq shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13965" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "5,0,11", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "79703", + "name": "Corrupt dragon sq shield (deg)", + "archery_ticket_price": "0", + "id": "13966", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Destroy", + "grand_exchange_price": "71066", + "name": "Corrupt dragon plateskirt", + "archery_ticket_price": "0", + "id": "13967", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "destroy_message": "Destroy", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "71066", + "durability": null, + "name": "Corrupt dragon plateskirt", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13968" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Destroy", + "grand_exchange_price": "71066", + "name": "Corrupt dragon plateskirt (deg)", + "archery_ticket_price": "0", + "id": "13969", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "87957", + "name": "Corrupt dragon platelegs", + "archery_ticket_price": "0", + "id": "13970", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "87957", + "durability": null, + "name": "Corrupt dragon platelegs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13971" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "87957", + "name": "Corrupt dragon platelegs (deg)", + "archery_ticket_price": "0", + "id": "13972", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "destroy_message": "Drop", + "grand_exchange_price": "332229", + "attack_audios": "2498,2498,2497,2498", + "name": "Corrupt dragon battleaxe", + "archery_ticket_price": "0", + "id": "13973", + "bonuses": "-2,70,65,0,0,0,0,0,-1,-1,0,85,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "4", + "render_anim": "2586", + "defence_anim": "397", + "attack_anims": "395,395,401,395", + "destroy_message": "Drop", + "grand_exchange_price": "332229", + "attack_audios": "2498,2498,2497,2498", + "name": "Corrupt dragon battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13974", + "bonuses": "-2,70,65,0,0,0,0,0,0,-1,0,85,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "destroy_message": "Drop", + "grand_exchange_price": "332229", + "attack_audios": "2498,2498,2497,2498", + "name": "C. dragon battleaxe (deg)", + "archery_ticket_price": "0", + "id": "13975", + "bonuses": "-2,70,65,0,0,0,0,0,-1,-1,0,85,0,0,0" + }, + { + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "grand_exchange_price": "33358", + "attack_audios": "2517,2517,2500,2517", + "name": "Corrupt dragon dagger", + "archery_ticket_price": "0", + "id": "13976", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "grand_exchange_price": "33358", + "attack_audios": "2517,2517,2500,2517", + "name": "Corrupt dragon dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13977" + }, + { + "shop_price": "18000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "grand_exchange_price": "33358", + "attack_audios": "2517,2517,2500,2517", + "name": "C. dragon dagger (deg)", + "archery_ticket_price": "0", + "id": "13978", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "100000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1928", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "338644", + "attack_audios": "2500,0,2517,0", + "name": "Corrupt dragon scimitar", + "archery_ticket_price": "0", + "id": "13979", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "338644", + "durability": null, + "name": "Corrupt dragon scimitar", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13980" + }, + { + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1928", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "338644", + "name": "C. dragon scimitar (deg)", + "archery_ticket_price": "0", + "id": "13981", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "100000", + "ge_buy_limit": "10", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "207053", + "attack_audios": "2500,2500,2517,2500", + "name": "Corrupt dragon longsword", + "archery_ticket_price": "0", + "id": "13982", + "bonuses": "58,69,-2,0,0,0,3,2,1,0,0,71,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "207053", + "durability": null, + "name": "Corrupt dragon longsword", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13983" + }, + { + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "207053", + "name": "C. dragon longsword (deg)", + "archery_ticket_price": "0", + "id": "13984", + "bonuses": "58,69,-2,0,0,0,3,2,1,0,0,71,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "50096", + "name": "Corrupt dragon mace", + "archery_ticket_price": "0", + "id": "13985", + "bonuses": "40,-2,60,1,0,0,0,0,0,0,0,55,0,5,0" + }, + { + "requirements": "{0,60}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "4", + "defence_anim": "397", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "50096", + "name": "Corrupt dragon mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13986" + }, + { + "requirements": "{0,60}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "50096", + "name": "Corrupt dragon mace (deg)", + "archery_ticket_price": "0", + "id": "13987", + "bonuses": "40,-2,60,1,0,0,0,0,0,0,0,55,0,5,0" + }, + { + "shop_price": "40000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "920922", + "name": "Corrupt dragon spear", + "archery_ticket_price": "0", + "id": "13988", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "40000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "920922", + "name": "Corrupt dragon spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13989" + }, + { + "shop_price": "24000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "920922", + "name": "Corrupt dragon spear (deg)", + "archery_ticket_price": "0", + "id": "13990", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "destroy_message": "You can get another copy by searching bookshelves around RuneScape.", + "shop_price": "5", + "examine": "A book about the Wilderness.", + "durability": null, + "name": "Pvp worlds manual", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14056", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "25", + "examine": "A threat to dusty corners everywhere.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "8", + "absorb": "0,0,0", + "render_anim": "1072", + "equipment_slot": "3", + "destroy_message": "You can obtain another by talking to Maggie the witch.", + "name": "Broomstick", + "archery_ticket_price": "0", + "id": "14057", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the goulash, it will be destroyed. You can get some more by dipping a bowl into Maggie's cauldron.", + "shop_price": "2", + "examine": "What a curious and ghoulish smell!", + "durability": null, + "name": "Goulash", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14058", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another flask of magic unguent from the chest in Betty's basement.", + "shop_price": "2", + "examine": "Purple and pungent.", + "durability": null, + "name": "Magic unguent", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14061", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another flask of broom ointment from Hetty in Rimmington.", + "shop_price": "2", + "examine": "To be used on brooms.", + "durability": null, + "name": "Broom ointment", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14062", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you release this newt, you can get another from the crate in Hetty's basement in Rimmington.", + "shop_price": "5", + "examine": "A newt from Hetty's basement.", + "durability": null, + "name": "Newt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14064", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another newt label from Gus in Hetty's basement in Rimmington.", + "shop_price": "1", + "examine": "A label for a shipping crate.", + "durability": null, + "name": "Newt label", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14065", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another toad label from Gus in Hetty's basement in Rimmington.", + "shop_price": "1", + "examine": "A label for a shipping crate.", + "durability": null, + "name": "Toad label", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14066", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another newt-and-toad label from Gus in Hetty's basement in Rimmington.", + "shop_price": "1", + "examine": "A label for a shipping crate.", + "durability": null, + "name": "Newts and toads label", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14067", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can obtain another wand from the chest in Betty's basement.", + "shop_price": "15", + "examine": "Warm to the touch.", + "durability": null, + "name": "Betty's wand", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14068", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you destroy this item, you can get another from Lottie in Betty's basement.", + "shop_price": "2", + "examine": "What a view!", + "durability": null, + "name": "Magic slate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14069", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you release this creature, you will have to restart the puzzle in Betty's basement.", + "shop_price": "1", + "examine": "Desert dweller.", + "durability": null, + "name": "Reptile", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14070", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you release this creature, you will have to restart the puzzle in Betty's basement.", + "shop_price": "1", + "examine": "Bleak and beaky.", + "durability": null, + "name": "Blackbird", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14071", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "An annoying flappy thing.", + "durability": null, + "name": "Bat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14072", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "It's an extremely small brown spider, probably very poisonous.", + "durability": null, + "name": "Spider", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14073", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "A popular dwarven delicacy.", + "durability": null, + "name": "Rat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14074", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "durability": null, + "name": "Snail", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14075", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "15", + "examine": "The height of warlock fashion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You can get another warlock top from Diango in Draynor Village.", + "remove_sleeves": "true", + "name": "Warlock top", + "archery_ticket_price": "0", + "id": "14076", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another set of warlock legs from Diango in Draynor Village.", + "shop_price": "15", + "examine": "Tattered but trendy.", + "durability": null, + "name": "Warlock legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14077", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "15", + "examine": "The height of witchly fashion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You can get another witch top from Diango in Draynor.", + "remove_sleeves": "true", + "name": "Witch top", + "archery_ticket_price": "0", + "id": "14078", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another witch top from Diango in Draynor.", + "shop_price": "15", + "examine": "Tattered but trendy.", + "durability": null, + "name": "Witch skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14079", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another witch cloak from Diango in Draynor.", + "shop_price": "15", + "examine": "Ragged but rugged.", + "durability": null, + "name": "Witch cloak", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14080", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "destroy_message": "You can get another warlock cloak from Diango in Draynor Village.", + "shop_price": "15", + "examine": "Ragged but rugged.", + "durability": null, + "name": "Warlock cloak", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14081", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A sticky orb of popped corn.", + "durability": null, + "name": "Popcorn ball", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14082", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "Chocolatey goodness.", + "durability": null, + "name": "Chocolate drop", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14083", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "Sugary bliss.", + "durability": null, + "name": "Wrapped candy", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14084", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "An urgent communiqu?? revealing important information.", + "durability": null, + "name": "Armadyl communiqu?", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14085", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "15", + "examine": "The height of witchly fashion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You can get another witch top from Diango in Draynor.", + "remove_sleeves": "true", + "name": "Witch top", + "archery_ticket_price": "0", + "id": "14086", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another witch top from Diango in Draynor.", + "shop_price": "15", + "examine": "Tattered but trendy.", + "durability": null, + "name": "Witch skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14087", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another witch cloak from Diango in Draynor.", + "shop_price": "15", + "examine": "Ragged but rugged.", + "durability": null, + "name": "Witch cloak", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14088", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14089", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14090", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14091", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14092", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14093", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "43333", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Sacred clay platebody", + "archery_ticket_price": "0", + "id": "14094", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "42667", + "examine": "The sacred clay bottom has transformed into spiked, platemail legs.", + "durability": null, + "name": "Sacred clay platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14095", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "shop_price": "23467", + "examine": "The sacred clay hat has transformed into a spined helm.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "1,0,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Sacred clay helm", + "archery_ticket_price": "0", + "id": "14096", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "shop_price": "17066", + "examine": "The sacred clay weapon has transformed into a sharp scimitar.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay scimitar", + "archery_ticket_price": "0", + "id": "14097", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "This can turn into a variety of tools.", + "durability": null, + "name": "Volatile clay tool", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14098", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your volatile tool wants to mine some rocks.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Volatile clay pickaxe", + "archery_ticket_price": "0", + "id": "14099", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your volatile tool wants to cut some wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Volatile clay hatchet", + "archery_ticket_price": "0", + "id": "14100", + "bonuses": "-2,26,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to spear some big fish.", + "durability": null, + "name": "Volatile clay harpoon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14101", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "21333", + "examine": "Your volatile tool wants to catch some butterflies.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Volatile clay butterfly net", + "archery_ticket_price": "0", + "id": "14102", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to make some bows or arrows.", + "durability": null, + "name": "Volatile clay fletching knife", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14103", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to work metal or build furniture.", + "durability": null, + "name": "Volatile clay hammer", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14104", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to make some leather armour.", + "durability": null, + "name": "Volatile clay needle", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14105", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "This can turn into a variety of tools.", + "durability": null, + "name": "Proto-tool", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14106", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a pickaxe.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay pickaxe", + "archery_ticket_price": "0", + "id": "14107", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a hatchet.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay hatchet", + "archery_ticket_price": "0", + "id": "14108", + "bonuses": "-2,4,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a harpoon.", + "durability": null, + "name": "Sacred clay harpoon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14109", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "1", + "examine": "Your sacred clay tool has transformed into a butterfly net.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay butterfly net", + "archery_ticket_price": "0", + "id": "14110", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "The sacred clay has transformed into a knife.", + "durability": null, + "name": "Sacred clay fletching knife", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14111", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a hammer.", + "durability": null, + "name": "Sacred clay hammer", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14112", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "The sacred clay has transformed into a needle.", + "durability": null, + "name": "Sacred clay needle", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14113", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "43333", + "examine": "The sacred clay top has transformed into a heavy, magical robe.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Sacred clay robe top", + "archery_ticket_price": "0", + "id": "14114", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "42667", + "examine": "The sacred clay bottom has transformed into a heavy, magical robe.", + "durability": null, + "name": "Sacred clay robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14115", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "23467", + "examine": "The sacred clay hat has transformed into a wizard hat.", + "durability": null, + "name": "Sacred clay hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14116", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "17066", + "examine": "The sacred clay weapon has transformed into a magical staff.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay staff", + "archery_ticket_price": "0", + "id": "14117", + "bonuses": "10,-1,40,10,0,2,3,1,10,0,0,50,0,0,0" + }, + { + "shop_price": "43333", + "examine": "The sacred clay top has transformed into a leather body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Sacred clay body", + "archery_ticket_price": "0", + "id": "14118", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "42667", + "examine": "The sacred clay bottom has been transformed into a set of chaps.", + "durability": null, + "name": "Sacred clay chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14119", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "shop_price": "23467", + "examine": "The sacred clay hat has transformed into a coif.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,3,1", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Sacred clay coif", + "archery_ticket_price": "0", + "id": "14120", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,5,0,0,0,0" + }, + { + "shop_price": "17066", + "examine": "The sacred clay weapon has transformed into a bow.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay bow", + "archery_ticket_price": "0", + "id": "14121", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14122", + "bonuses": "10,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14123" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14124", + "bonuses": "15,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14125" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14126", + "bonuses": "20,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14127" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14128", + "bonuses": "25,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14129" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14130", + "bonuses": "30,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14131" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14132", + "bonuses": "0,10,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14133" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14134", + "bonuses": "0,15,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14135" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14136", + "bonuses": "0,20,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14137" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14138", + "bonuses": "0,25,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14139" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14140", + "bonuses": "0,30,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14141" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14142", + "bonuses": "10,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14143" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14144", + "bonuses": "15,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14145" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14146", + "bonuses": "20,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14147" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14148", + "bonuses": "25,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14149" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14150", + "bonuses": "30,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14151" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14152", + "bonuses": "0,0,10,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14153" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14154", + "bonuses": "0,0,15,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14155" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14156", + "bonuses": "0,0,20,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14157" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14158", + "bonuses": "0,0,25,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14159" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14160", + "bonuses": "0,0,30,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14161" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14162", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14163" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14164", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14165" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14166", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14167" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14168", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14169" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14170", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14171" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14172", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14173" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14174", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14175" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14176", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14177" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14178", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14179" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14180", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14181" + }, + { + "destroy_message": "Drop", + "shop_price": "15", + "examine": "Very low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14182", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "15", + "examine": "Very low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14183" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "Low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14184", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "Low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14185" + }, + { + "destroy_message": "Drop", + "shop_price": "45", + "examine": "Medium quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14186", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "45", + "examine": "Medium quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14187" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "High quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14188", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "High quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14189" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Very high quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14190", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Very high quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14191" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14192", + "bonuses": "0,0,0,0,55,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14193" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14194", + "bonuses": "0,0,0,0,90,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14195" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14196", + "bonuses": "0,0,0,0,135,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14197" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14198", + "bonuses": "0,0,0,0,180,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14199" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14200", + "bonuses": "0,0,0,0,225,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14201" + }, + { + "shop_price": "2", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14202", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,15" + }, + { + "shop_price": "4", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14203", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30" + }, + { + "shop_price": "6", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14204", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,45" + }, + { + "shop_price": "8", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14205", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60" + }, + { + "shop_price": "10", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14206", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75" + }, + { + "shop_price": "150", + "examine": "3 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14207", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "3 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14208" + }, + { + "shop_price": "120", + "examine": "4 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14210" + }, + { + "shop_price": "90", + "examine": "3 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14211", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14212" + }, + { + "shop_price": "60", + "examine": "2 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14213", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14214" + }, + { + "shop_price": "30", + "examine": "1 dose of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14215", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14216" + }, + { + "shop_price": "150", + "examine": "4 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14217", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "4 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14218" + }, + { + "shop_price": "120", + "examine": "4 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14219", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14220" + }, + { + "shop_price": "90", + "examine": "3 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14221", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14222" + }, + { + "shop_price": "60", + "examine": "2 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14223", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14224" + }, + { + "shop_price": "30", + "examine": "1 dose of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14225", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14226" + }, + { + "shop_price": "150", + "examine": "5 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14227", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14228" + }, + { + "shop_price": "120", + "examine": "4 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14229", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14230" + }, + { + "shop_price": "90", + "examine": "3 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14231", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14232" + }, + { + "shop_price": "60", + "examine": "2 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14233", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14234" + }, + { + "shop_price": "30", + "examine": "1 dose of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14235", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14236" + }, + { + "shop_price": "150", + "examine": "5 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14237", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14238" + }, + { + "shop_price": "120", + "examine": "4 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14239", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14240" + }, + { + "shop_price": "90", + "examine": "3 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14241", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14242" + }, + { + "shop_price": "60", + "examine": "2 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14243", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14244" + }, + { + "shop_price": "30", + "examine": "1 dose of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14245", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14246" + }, + { + "shop_price": "150", + "examine": "4 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14247", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14248" + }, + { + "shop_price": "120", + "examine": "4 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14249", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14250" + }, + { + "shop_price": "90", + "examine": "3 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14251", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14252" + }, + { + "shop_price": "60", + "examine": "2 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14253", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14254" + }, + { + "shop_price": "30", + "examine": "1 dose of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14255", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14256" + }, + { + "shop_price": "150", + "examine": "3 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14257", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "3 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14258" + }, + { + "shop_price": "120", + "examine": "4 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14259", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14260" + }, + { + "shop_price": "90", + "examine": "3 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14261", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14262" + }, + { + "shop_price": "60", + "examine": "2 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14263", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14264" + }, + { + "shop_price": "30", + "examine": "1 dose of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14265", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14266" + }, + { + "shop_price": "150", + "examine": "4 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14267", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14268" + }, + { + "shop_price": "120", + "examine": "4 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14269", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14270" + }, + { + "shop_price": "90", + "examine": "3 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14271", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14272" + }, + { + "shop_price": "60", + "examine": "2 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14273", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14274" + }, + { + "shop_price": "30", + "examine": "1 dose of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14275", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14276" + }, + { + "shop_price": "150", + "examine": "3 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14277", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "3 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14278" + }, + { + "shop_price": "120", + "examine": "4 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14279", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14280" + }, + { + "shop_price": "90", + "examine": "3 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14281", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14282" + }, + { + "shop_price": "60", + "examine": "2 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14283", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14284" + }, + { + "shop_price": "30", + "examine": "1 dose of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14285", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14286" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14287", + "bonuses": "0,55,0,0,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14288" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14289", + "bonuses": "0,90,0,0,0,0,0,0,0,0,0,30,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14290" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14291", + "bonuses": "0,145,0,0,0,0,0,0,0,0,0,45,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14292" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14293", + "bonuses": "0,180,0,0,0,0,0,0,0,0,0,60,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14294" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14295", + "bonuses": "0,225,0,0,0,0,0,0,0,0,0,75,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14296" + }, + { + "shop_price": "30", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14297", + "bonuses": "41,0,0,0,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14298" + }, + { + "shop_price": "60", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14299", + "bonuses": "68,0,0,0,0,0,0,0,0,0,0,30,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14300" + }, + { + "shop_price": "90", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14301", + "bonuses": "101,0,0,0,0,0,0,0,0,0,0,45,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14302" + }, + { + "shop_price": "120", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14303", + "bonuses": "135,0,0,0,0,0,0,0,0,0,0,60,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14304" + }, + { + "shop_price": "150", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14305", + "bonuses": "168,0,0,0,0,0,0,0,0,0,0,75,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14306" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14307", + "bonuses": "0,0,83,0,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14308" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14309", + "bonuses": "0,0,135,0,0,0,0,0,0,0,0,30,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14310" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14311", + "bonuses": "0,0,202,0,0,0,0,0,0,0,0,45,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14312" + }, + { + "shop_price": "120", + "examine": "The Sacred Clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14313", + "bonuses": "0,0,270,0,0,0,0,0,0,0,0,60,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The Sacred Clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14314" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14315", + "bonuses": "0,0,338,0,0,0,0,0,0,0,0,75,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14316" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14317", + "bonuses": "0,0,0,0,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe top (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14318" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14319", + "bonuses": "0,0,0,0,0,0,0,0,40,0,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14320" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14321", + "bonuses": "0,0,0,0,0,0,0,0,60,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14322" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14323", + "bonuses": "0,0,0,0,0,0,0,0,80,0,80,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14324" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14325", + "bonuses": "0,0,0,0,0,0,0,0,100,0,100,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14326" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14327", + "bonuses": "0,0,0,0,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14328" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14329", + "bonuses": "0,0,0,0,0,0,0,0,30,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14330" + }, + { + "shop_price": "90", + "examine": "The sacred clay transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14331", + "bonuses": "0,0,0,0,0,0,0,0,45,0,45,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14332" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14333", + "bonuses": "0,0,0,0,0,0,0,0,60,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14334" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14335", + "bonuses": "0,0,0,0,0,0,0,0,75,0,75,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14336" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14337", + "bonuses": "0,0,0,0,0,0,0,0,10,0,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14338" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14339", + "bonuses": "0,0,0,0,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14340" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14341", + "bonuses": "0,0,0,0,0,0,0,0,30,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14342" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14343", + "bonuses": "0,0,0,0,0,0,0,0,40,0,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14344" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14345", + "bonuses": "0,0,0,0,0,0,0,0,50,0,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14346" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14347", + "bonuses": "0,0,0,-30,-10,20,20,20,-10,10,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platebody (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14348" + }, + { + "shop_price": "60", + "examine": "The sacred clay transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14349", + "bonuses": "0,0,0,-30,-10,40,40,40,-10,20,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay transformed into a hard, metallic substance.", + "durability": null, + "name": "Platebody (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14350" + }, + { + "shop_price": "90", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14351", + "bonuses": "0,0,0,-30,-10,60,60,60,-10,30,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "name": "Platebody (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14352" + }, + { + "shop_price": "120", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14353", + "bonuses": "0,0,0,-30,-10,80,80,80,-10,40,80,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "name": "Platebody (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14354" + }, + { + "shop_price": "150", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14355", + "bonuses": "0,0,0,-30,-10,100,100,100,-10,50,100,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "name": "Platebody (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14356" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14357", + "bonuses": "0,0,0,-30,-10,15,15,15,-10,7,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14358" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14359", + "bonuses": "0,0,0,-30,-10,30,30,30,-10,15,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14360" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14361", + "bonuses": "0,0,0,-30,-10,45,45,45,-10,23,45,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14362" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14363", + "bonuses": "0,0,0,-30,-10,60,60,60,-10,30,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14364" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14365", + "bonuses": "0,0,0,-30,-10,75,75,75,-10,37,75,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14366" + }, + { + "remove_head": "true", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14367", + "bonuses": "0,0,0,-30,-10,10,10,10,-10,5,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14368" + }, + { + "remove_head": "true", + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14369", + "bonuses": "0,0,0,-30,-10,20,20,20,-10,10,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14370" + }, + { + "remove_head": "true", + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14371", + "bonuses": "0,0,0,-30,-10,30,30,30,-10,15,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14372" + }, + { + "remove_head": "true", + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14373", + "bonuses": "0,0,0,-30,-10,40,40,40,-10,20,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14374" + }, + { + "remove_head": "true", + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14375", + "bonuses": "0,0,0,-30,-10,50,50,50,-10,25,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14376" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14377", + "bonuses": "0,0,0,55,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "name": "Staff (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14378" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14379", + "bonuses": "0,0,0,90,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "name": "Staff (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14380" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14381", + "bonuses": "0,0,0,135,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "name": "Staff (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14382" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14383", + "bonuses": "0,0,0,180,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "name": "Staff (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14384" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14385", + "bonuses": "0,0,0,225,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "name": "Staff (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14386" + }, + { + "durability": null, + "name": "Cape", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14387", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Cape", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14389", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14391", + "bonuses": "0,0,0,0,0,10,10,10,10,20,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14392" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14393", + "bonuses": "0,0,0,0,0,20,20,20,20,40,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14394" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14395", + "bonuses": "0,0,0,0,0,30,30,30,30,60,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14396" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14397", + "bonuses": "0,0,0,0,0,40,40,40,40,80,80,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14398" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14399", + "bonuses": "0,0,0,0,0,50,50,50,50,100,100,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14400" + }, + { + "shop_price": "30", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14401", + "bonuses": "0,0,0,0,0,7,7,7,0,15,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14402" + }, + { + "shop_price": "60", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14403", + "bonuses": "0,0,0,0,0,15,15,15,0,30,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14404" + }, + { + "shop_price": "90", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14405", + "bonuses": "0,0,0,0,0,23,23,23,0,45,45,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14406" + }, + { + "shop_price": "120", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14407", + "bonuses": "0,0,0,0,0,30,30,30,0,60,60,0,0,1,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14408" + }, + { + "shop_price": "150", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14409", + "bonuses": "0,0,0,0,0,37,37,37,0,75,75,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14410" + }, + { + "remove_head": "true", + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14411", + "bonuses": "0,0,0,0,0,5,5,5,0,10,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14412" + }, + { + "remove_head": "true", + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14413", + "bonuses": "0,0,0,0,0,10,10,10,0,20,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14414" + }, + { + "remove_head": "true", + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14415", + "bonuses": "0,0,0,0,0,15,15,15,0,30,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14416" + }, + { + "remove_head": "true", + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14417", + "bonuses": "0,0,0,0,0,20,20,20,0,40,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14418" + }, + { + "remove_head": "true", + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14419", + "bonuses": "0,0,0,0,0,25,25,25,0,50,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14420" + }, + { + "shop_price": "30", + "durability": null, + "name": "Clay deposit scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14421", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14422", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14423" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14424", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14425" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14426", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14427" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14428", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14429" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14430", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14431" + }, + { + "durability": null, + "name": "Null sacred clay", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14432", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "5", + "examine": "A vine flower grown through magical means.", + "durability": null, + "name": "Vine flower", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14458", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You caught this broav west of the Hunting Expert's home. You can catch another one with a trap baited with mort Myre Fungus.", + "examine": "Its unconscious, poor thing.", + "durability": null, + "name": "Unconscious broav", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14459", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got these clothes from a washerman who lives near the Khazard battle arena.", + "shop_price": "10", + "examine": "Some dirty clothes that apparently belong to Movario.", + "durability": null, + "name": "Dirty laundry", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14460", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You found this basket in Movario's base.", + "examine": "A receptacle for rubbish.", + "durability": null, + "name": "Waste-paper basket", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14461", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this key attached to the bottom of the bin in Movario's base.", + "examine": "A superbly made key with a fine ruby inserted into it. (While Guthix Sleeps)", + "durability": null, + "name": "Ruby key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14462", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found these notes in Movario's basement.", + "examine": "A collection of notes made by an absent-minded fellow.", + "durability": null, + "name": "Notes on pressure", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14463", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found these notes loosely piled up on ", + "examine": "A loose-leaf collection of research notes, found on Movario's study desk.", + "durability": null, + "name": "Movario's notes (volume 1)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14464", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found these notes in Movario's bedchest, in his base of operations near the Khazard Battlefield.", + "examine": "A loose-leaf collection of research notes, found in Movario's bed chest.", + "durability": null, + "name": "Movario's notes (volume 2)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14465", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A 1kg weight.", + "durability": null, + "name": "Weight (1kg)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14466", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A 2kg weight.", + "durability": null, + "name": "Weight (2kg)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14467", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A 5kg weight.", + "durability": null, + "name": "Weight (5kg)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14468", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can find another under the bed on the top level of Movario's base", + "examine": "The loop half of a strange key.", + "durability": null, + "name": "Strange key loop", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14469", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can find another under the bed on the top level of Movario's base", + "examine": "The teeth half of a strange key.", + "durability": null, + "name": "Strange key teeth", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14470", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fused together two parts of a Dragonkin key which you obtained from Movario's base.", + "examine": "The completed dragonkin key.", + "durability": null, + "name": "Dragonkin key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14471", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "30000", + "examine": "A badly damaged lump of dragon metal.", + "durability": null, + "rare_item": "true", + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "955683", + "name": "Ruined dragon armour lump", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14472", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30000", + "examine": "A badly damaged lump of dragon metal.", + "grand_exchange_price": "955683", + "durability": null, + "name": "Ruined dragon armour lump", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14473" + }, + { + "shop_price": "30000", + "examine": "A badly damaged slice of dragon metal.", + "durability": null, + "rare_item": "true", + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "1761141", + "name": "Ruined dragon armour slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14474", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30000", + "examine": "A badly damaged slice of dragon metal.", + "grand_exchange_price": "1761141", + "durability": null, + "name": "Ruined dragon armour slice", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14475" + }, + { + "shop_price": "30000", + "examine": "A badly damaged shard of dragon metal.", + "durability": null, + "rare_item": "true", + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "1090493", + "name": "Ruined dragon armour shard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14476", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30000", + "examine": "A badly damaged shard of dragon metal.", + "grand_exchange_price": "1090493", + "durability": null, + "name": "Ruined dragon armour shard", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14477" + }, + { + "destroy_message": "Drop", + "examine": "A very powerful Smithing hammer.", + "durability": null, + "name": "Blast fusion hammer", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14478", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "requirements": "{1,60}", + "shop_price": "1760000", + "examine": "Provides excellent protection.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "4453643", + "name": "Dragon platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14479", + "bonuses": "0,0,0,-30,0,109,107,97,-6,106,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1760000", + "examine": "Provides excellent protection.", + "grand_exchange_price": "4453643", + "durability": null, + "name": "Dragon platebody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14480" + }, + { + "requirements": "{1,60}", + "examine": "Provides excellent protection.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "4453643", + "name": "Dragon platebody", + "archery_ticket_price": "0", + "id": "14481", + "bonuses": "0,0,0,-30,0,109,107,97,-6,106,50,0,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "67500", + "examine": "A set of fighting claws.", + "has_special": "true", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "absorb": "0,0,0", + "equip_audio": "1003", + "defence_anim": "397", + "render_anim": "2583", + "equipment_slot": "3", + "attack_anims": "393,393,1067,393", + "destroy_message": "Drop", + "lendable": "true", + "grand_exchange_price": "1472441", + "tradeable": "true", + "name": "Dragon claws", + "archery_ticket_price": "0", + "id": "14484", + "bonuses": "41,57,-4,0,0,13,26,7,0,0,0,56,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "67500", + "examine": "A set of fighting claws.", + "grand_exchange_price": "1472441", + "durability": null, + "name": "Dragon claws", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14485" + }, + { + "requirements": "{0,60}", + "examine": "A set of fighting claws.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "absorb": "0,0,0", + "equip_audio": "1003", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1472441", + "name": "Dragon claws", + "archery_ticket_price": "0", + "id": "14486", + "bonuses": "41,57,-4,0,0,13,26,7,0,0,0,56,0,0,0" + }, + { + "destroy_message": "You grew this herb by planting an enriched snapdragon seed in the special herb patch on top of Falador castle.", + "examine": "An enriched snapdragon herb.", + "durability": null, + "name": "Enriched snapdragon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14487", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You made this serum by mixing an enriched snapdragon into one of Betty's truth serums.", + "examine": "Fluid sloshes innocently in this vial.", + "durability": null, + "name": "Super truth serum", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14488", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You gained this item by having papyrus and charcoal in your inventory while interrogating a spy in Falador castle.", + "examine": "A sketch of the suspect known as Dark Squall.", + "durability": null, + "name": "Suspect sketch", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14489", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "shop_price": "65000", + "examine": "These look pretty heavy, but very elite.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "41559", + "name": "Elite black platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14490", + "bonuses": "0,0,0,-14,-6,52,50,25,-1,49,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "65000", + "examine": "These look pretty heavy, but very elite.", + "grand_exchange_price": "41559", + "durability": null, + "name": "Elite black platelegs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14491" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "examine": "Provides excellent protection, and is elite.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "38275", + "name": "Elite black platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14492", + "bonuses": "0,0,0,-20,-8,80,85,40,-2,80,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "64000", + "examine": "Provides excellent protection, and is elite.", + "grand_exchange_price": "38275", + "durability": null, + "name": "Elite black platebody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14493" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "35200", + "examine": "A full face helmet, and elite.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "30542", + "name": "Elite black full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14494", + "bonuses": "0,0,0,-4,-2,31,33,15,0,30,7,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "35200", + "examine": "A full face helmet, and elite.", + "grand_exchange_price": "30542", + "durability": null, + "name": "Elite black full helm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14495" + }, + { + "destroy_message": "You got this key from the key rack in Dark Squall's base.", + "examine": "Opens the cells beneath the Black Knights' Fortress. (While Guthix Sleeps)", + "durability": null, + "name": "Cell key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14496", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "examine": "A robe worn by members of the Dagon'hai.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "71098", + "name": "Dagon'hai robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14497", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,2,0" + }, + { + "shop_price": "120000", + "examine": "A robe worn by members of the Dagon'hai.", + "grand_exchange_price": "71098", + "durability": null, + "name": "Dagon'hai robe top", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14498" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "examine": "A hat worn by members of the Dagon'hai.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "1,0,0", + "equipment_slot": "0", + "grand_exchange_price": "9580", + "name": "Dagon'hai hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14499", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "shop_price": "15000", + "examine": "A hat worn by members of the Dagon'hai.", + "grand_exchange_price": "9580", + "durability": null, + "name": "Dagon'hai hat", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14500" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "examine": "A robe worn by members of the Dagon'hai.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "2,1,0", + "equipment_slot": "7", + "grand_exchange_price": "45691", + "name": "Dagon'hai robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14501", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,2,0" + }, + { + "shop_price": "80000", + "examine": "A robe worn by members of the Dagon'hai.", + "grand_exchange_price": "45691", + "durability": null, + "name": "Dagon'hai robe bottom", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14502" + }, + { + "shop_price": "1", + "examine": "Elite Black Knight armour adds to his stealthiness.", + "durability": null, + "name": "Silif", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14503", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "Elite Black Knight armour adds to his stealthiness.", + "durability": null, + "name": "Silif", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14504", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Teleorb", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14505", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "destroy_message": "You created this by focusing the light onto a snapdragon seed from a rose tinted lens while in Betty's shop.", + "examine": "An enriched snapdragon seed. The herb that grows from this seed will be extra potent!", + "durability": null, + "name": "Enriched snapdragon seed", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14506", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14507", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14508", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14509", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14510", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14511", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14512", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14513", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14514", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an air-orb on an etched wall section.", + "examine": "An elemental key of air.", + "durability": null, + "name": "Air key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14515", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an earth-orb on an etched wall section.", + "examine": "An elemental key of earth.", + "durability": null, + "name": "Earth key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14516", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of fire.", + "durability": null, + "name": "Fire key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14517", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of water.", + "durability": null, + "name": "Water key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14518", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an air-orb on an etched wall section.", + "examine": "An elemental key of air.", + "durability": null, + "name": "Air key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14519", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an earth-orb on an etched wall section.", + "examine": "An elemental key of earth.", + "durability": null, + "name": "Earth key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14520", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of fire.", + "durability": null, + "name": "Fire key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14521", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of water.", + "durability": null, + "name": "Water key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14522", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a hat, top and bottoms.", + "grand_exchange_price": "193541", + "durability": null, + "name": "Dagon'hai robes set", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14525", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a hat, top and bottoms.", + "grand_exchange_price": "193541", + "durability": null, + "name": "Dagon'hai robes set", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14526" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing an elite black full helm, platebody and legs.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,13", + "destroy_message": "Drop", + "grand_exchange_price": "140536", + "name": "Elite black armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14527", + "bonuses": "0,0,0,-38,-16,163,168,80,-3,159,62,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Grand Exchange set containing an elite black full helm, platebody and legs.", + "grand_exchange_price": "140536", + "durability": null, + "name": "Elite black armour set", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14528" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, legs.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "9,0,19", + "destroy_message": "Drop", + "grand_exchange_price": "10629814", + "name": "Dragon plate armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14529", + "bonuses": "0,0,0,-57,-9,222,221,201,-11,217,82,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, legs.", + "grand_exchange_price": "10629814", + "durability": null, + "name": "Dragon plate armour set (l)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14530" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, skirt.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "9,0,19", + "destroy_message": "Drop", + "grand_exchange_price": "12243786", + "name": "Dragon plate armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14531", + "bonuses": "0,0,0,-57,-9,222,221,201,-11,217,82,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, skirt.", + "grand_exchange_price": "12243786", + "durability": null, + "name": "Dragon plate armour set (sk)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14532" + }, + { + "durability": null, + "name": "Broav", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14533", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You gained this orb from Dark Squall's base. You can probably get another one from visiting the same place.", + "examine": "This orb can used to teleport people...somehow.", + "durability": null, + "name": "Strange teleorb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14534", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will not be able to get the book back if you destroy it.", + "examine": "Notes on the locations of turkeys.", + "durability": null, + "name": "Turkey book", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14536", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will lose all food stored in the Cornucopia. You can get another empty one from Diango in Draynor Village.", + "durability": null, + "name": "Cornucopia", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14537", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will lose all food stored in the Cornucopia. You can get another empty one from Diango in Draynor Village.", + "durability": null, + "name": "Cornucopia", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14538", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "9", + "durability": null, + "name": "Raw turkey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14539", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "4", + "examine": "Mmm, this looks tasty.", + "durability": null, + "name": "Cooked turkey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14540", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "durability": null, + "name": "Burnt turkey", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14541", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "9", + "examine": "I need to cook this first.", + "durability": null, + "name": "Raw turkey drumstick", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14542", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "4", + "examine": "Mmm, this looks tasty.", + "durability": null, + "name": "Cooked turkey drumstick", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14543", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "durability": null, + "name": "Burnt turkey drumstick", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14544", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will lose all food stored in the Cornucopia. You can get another empty one from Diango in Draynor Village.", + "durability": null, + "name": "Cornucopia", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14570", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Not-so-sturdy boots for northern winters.", + "durability": null, + "name": "Fremennik sea boots 1", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14571", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,2,3,4,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You can claim replacement Fremennik sea boots from Yrsa in Rellekka.", + "examine": "Sturdy boots for northern winters.", + "durability": null, + "name": "Fremennik sea boots 2", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14572", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,8,9,10,0,0,8,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Very sturdy boots for northern winters.", + "durability": null, + "name": "Fremennik sea boots 3", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14573", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,10,11,12,0,0,9,1,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14574", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14575", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14576", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will be able to get a replacement shield from Redbeard the Pirate in Port Sarim.", + "shop_price": "100", + "examine": "A buckler shield from Falador.", + "durability": null, + "name": "Falador shield 1", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14577", + "absorb": "0,0,0", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,3,0,0", + "equipment_slot": "5" + }, + { + "destroy_message": "You will be able to get a replacement shield from the chemist in Rimmington.", + "shop_price": "200", + "examine": "A kiteshield from Falador.", + "durability": null, + "name": "Falador shield 2", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14578", + "absorb": "0,0,0", + "bonuses": "0,0,0,-8,-2,18,22,20,-1,20,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "destroy_message": "You will be able to get a replacement shield from Sir Vyvin's squire in the White Knights' Castle.", + "shop_price": "300", + "examine": "A tower shield from Falador.", + "durability": null, + "name": "Falador shield 3", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14579", + "absorb": "0,0,0", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,7,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "1000", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14580", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "5000", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14581", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10000", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14582", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Harvest (turns to ", + "examine": "A white lily seed - plant in a flower patch.", + "durability": null, + "name": "White lily", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14583", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will not be able to replace this voucher - it is a one-time offer only!", + "shop_price": "500000", + "examine": "I can take this to the Herald to get my money crest back for free.", + "durability": null, + "name": "Money crest voucher", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14584", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1250", + "examine": "A white lily seed - plant in a flower patch.", + "durability": null, + "name": "White lily seed", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14589", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1000", + "examine": "This will teleport me to Rellekka when I play it. ", + "durability": null, + "name": "Enchanted lyre(5)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14590", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Drop", + "shop_price": "1000", + "examine": "This will teleport me to Rellekka when I play it. ", + "durability": null, + "name": "Enchanted lyre(6)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14591", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These look pretty heavy, but very elite.", + "grand_exchange_price": "41559", + "durability": null, + "name": "Elite black platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14592", + "absorb": "2,0,4", + "bonuses": "0,0,0,-14,-6,52,50,25,-1,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides excellent protection, and is elite.", + "grand_exchange_price": "38275", + "durability": null, + "name": "Elite black platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14593", + "absorb": "3,0,6", + "bonuses": "0,0,0,-20,-8,80,85,40,-2,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A full face helmet, and elite.", + "grand_exchange_price": "30542", + "durability": null, + "name": "Elite black full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14594", + "absorb": "1,0,3", + "bonuses": "0,0,0,-4,-2,31,33,15,0,30,7,0,0,0,0" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "remove_sleeves": "true", + "examine": "A red and jolly top.", + "durability": null, + "name": "Santa costume top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14595", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "A spikey amulet made of ice crystals. It has been enchanted so it will not melt.", + "durability": null, + "name": "Ice amulet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14596", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "destroy_message": "You can probably get more in the last room of the yeti cave, in the Land of Snow.", + "shop_price": "1", + "durability": null, + "name": "Stones", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14597", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will have to fetch more in the last room of the yeti cave, then get them enchanted by snow imps.", + "shop_price": "1", + "examine": "According to the snow imps, this is enchanted, frozen yeti dung.", + "durability": null, + "name": "Enchanted stones", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14598", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A spikey amulet made of ice crystals. It has been enchanted so it will not melt.", + "durability": null, + "name": "Ice amulet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14599", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "remove_sleeves": "true", + "examine": "A red and jolly top.", + "durability": null, + "name": "Santa costume top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14600", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "remove_sleeves": "true", + "examine": "A red and jolly top.", + "durability": null, + "name": "Santa costume top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14601", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You can get another pair from Diango in Draynor Village.", + "examine": "Some black and jolly gloves.", + "durability": null, + "name": "Santa costume gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14602", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "Some red and jolly legs.", + "durability": null, + "name": "Santa costume legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14603", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "Some red and jolly legs.", + "durability": null, + "name": "Santa costume legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14604", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another pair from Diango in Draynor Village.", + "examine": "Some black and jolly boots.", + "durability": null, + "name": "Santa costume boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14605", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a cinnamon tree.", + "durability": null, + "name": "Cinnamon twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14606", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a sassafras tree.", + "durability": null, + "name": "Sassafras twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14607", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a ailanthus tree.", + "durability": null, + "name": "Ailanthus twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14608", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a cedar tree.", + "durability": null, + "name": "Cedar twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14609", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a mastic tree.", + "durability": null, + "name": "Mastic twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14610", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Cinnamon twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Cinnamon weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14611", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Sassafras twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Sassafras weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14612", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Ailanthus twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Ailanthus weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14613", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Cedar twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Cedar weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14614", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Mastic twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Mastic weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14615", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "100", + "examine": "A feather from a phoenix. Used in Summoning (72).", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "3431", + "name": "Phoenix quill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14616", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A feather from a phoenix. Used in Summoning (72).", + "grand_exchange_price": "3431", + "durability": null, + "name": "Phoenix quill", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14617" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14620", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14621" + }, + { + "requirements": "{23,72}", + "shop_price": "498", + "examine": "A scroll for a phoenix familiar.", + "durability": null, + "name": "Rise from the ashes scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14622", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "4986", + "durability": null, + "name": "Phoenix pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14623", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "4986", + "durability": null, + "name": "Phoenix pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14624" + }, + { + "durability": null, + "name": "Pouch", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14625", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A baby phoenix and it's bad to the bone!", + "durability": null, + "name": "Phoenix eggling", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14626", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A baby phoenix and it's bad to the bone!", + "durability": null, + "name": "Phoenix eggling", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14627", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "I found this egg in the Phoenix's Lair, and clapped at it!", + "durability": null, + "name": "Phoenix egg", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14629", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "I found this egg in the Phoenix's Lair, and kicked it!", + "durability": null, + "name": "Cracked phoenix egg", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14630", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "A player can get a new one by talking to any seer around Seer's village.", + "examine": "A headband with an eye embroidered on it.", + "durability": null, + "name": "Seer's headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14631", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "turn90cw_anim": "821", + "examine": "This used to belong to King Arthur and has since been improved.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "You can retrieve the Enhanced Excalibur from the Lady of the Lake for 500 coins.", + "stand_anim": "808", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "14632", + "stand_turn_anim": "823", + "bonuses": "38,47,-2,0,0,0,3,2,1,0,0,45,0,0,0", + "requirements": "{0,30}", + "shop_price": "200", + "durability": null, + "destroy": "true", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Enhanced excalibur" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14633", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14634", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14635", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "650", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Slayer helmet (e)", + "archery_ticket_price": "0", + "id": "14636", + "bonuses": "0,0,0,0,0,30,32,27,0,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "650", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Slayer helmet (charged)", + "archery_ticket_price": "0", + "id": "14637", + "bonuses": "0,0,0,0,0,30,32,27,0,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "It can be charged at the Fountain of Rune.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14638", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "It can be charged at the Fountain of Rune.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14639" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with one teleport charge.", + "grand_exchange_price": "27000", + "durability": null, + "name": "Ring of wealth(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14640", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with one teleport charge.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14641" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with two teleport charges.", + "grand_exchange_price": "28000", + "durability": null, + "name": "Ring of wealth(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14642", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with two teleport charges.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14643" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with three teleport charges.", + "grand_exchange_price": "30000", + "durability": null, + "name": "Ring of wealth(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14644", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with three teleport charges.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14645" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with four teleport charges.", + "grand_exchange_price": "35000", + "durability": null, + "name": "Ring of wealth(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14646", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with four teleport charges.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14647" + }, + { + "shop_price": "0", + "ge_buy_limit": "0", + "examine": "A totally alive monkey friend for your back!", + "durability": null, + "destroy": "true", + "weight": "0.0", + "equipment_slot": "1", + "grand_exchange_price": "0", + "name": "Jangles the Monkey Backpack", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "14648", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "0", + "examine": "A ring for only the truest of cave goblins. And Logg too.", + "grand_exchange_price": "0", + "durability": null, + "name": "Zanik ring", + "tradeable": "false", + "archery_ticket_price": "0", + "destroy": "true", + "id": "14649", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "0", + "examine": "A standard issue wizard hat.", + "durability": null, + "weight": "0.1", + "destroy": "true", + "equipment_slot": "0", + "grand_exchange_price": "0", + "name": "Wizard hat", + "tradeable": "false", + "archery_ticket_price": "0", + "hat": "true", + "id": "14650", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0" + }, + { + "destroy_message": " WARNING: You will have to reobtain this item the hard way.", + "examine": "Mysterious blueprints written in an alien language.", + "durability": null, + "name": "Ancient Blueprints", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "14651" + }, + { + "destroy_message": "You can get another by bringing the materials along with the blueprint to a Star Sprite.", + "examine": "A stardust-infused dragonstone ring.", + "durability": null, + "name": "Ring of the Star Sprite", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "14652", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "examine": "A chunk of rock.", + "name": "Rock", + "id": "1480" + }, + { + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A staff with a spooky raven head attached.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Staff of the raven", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "14654", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A staff with a spooky raven head attached.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Staff of the raven", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "14655", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A staff with a spooky raven head attached.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Staff of the raven", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "14656", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Item container for C. Ele Minor Drop Table. You should not be able to obtain this item.", + "name": "C. Ele Minor Drop Table", + "id": "799" + }, + { + "examine": "This will unlock something. (Waterfall Quest)", + "name": "A key", + "tradeable": "false", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "293" + }, + { + "examine": "This will unlock something. (Waterfall dungeon)", + "name": "A key", + "tradeable": "false", + "archery_ticket_price": "0", + "weight": "0.01", + "id": "298" + }, + { + "examine": "You should not have this.", + "name": "USDT Slot", + "id": "14422" + }, + { + "examine": "You should not have this.", + "name": "HDT Slot", + "id": "14424" + }, + { + "examine": "You should not have this.", + "name": "GDT Slot", + "id": "14426" + }, + { + "examine": "You should not have this.", + "name": "RSDT Slot", + "id": "14428" + }, + { + "examine": "You should not have this.", + "name": "ASDT Slot", + "id": "14430" + } +] \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/HolidayLoginMusic/plugin.kt b/plugin-playground/src/main/kotlin/HolidayLoginMusic/plugin.kt new file mode 100644 index 0000000..c89937a --- /dev/null +++ b/plugin-playground/src/main/kotlin/HolidayLoginMusic/plugin.kt @@ -0,0 +1,75 @@ +package HolidayLoginMusic + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.API +import plugin.api.FontColor +import plugin.api.FontType +import plugin.api.TextModifier +import java.awt.Color +import java.time.LocalDate +import java.time.Month + + +open class plugin : Plugin() { + val halloweenStartDate = LocalDate.of(LocalDate.now().year, Month.OCTOBER, 17) + val halloweenEndDate = LocalDate.of(LocalDate.now().year, Month.NOVEMBER, 7) + val christmasStartDate = LocalDate.of(LocalDate.now().year, Month.DECEMBER, 1) + val christmasEndDate = LocalDate.of(LocalDate.now().year, Month.DECEMBER, 31) + val rs2ReleaseDate = LocalDate.of(LocalDate.now().year, Month.MARCH, 29) + val farmingReleaseDate = LocalDate.of(LocalDate.now().year, Month.JULY, 11) + val constructionReleaseDate = LocalDate.of(LocalDate.now().year, Month.MAY, 31) + val hunterReleaseDate = LocalDate.of(LocalDate.now().year, Month.NOVEMBER, 21) + val summonReleaseDate = LocalDate.of(LocalDate.now().year, Month.JANUARY, 15) + + val christmasMusicList = listOf("scape santa", "land of snow", "jungle bells") + var currentHoliday: String = "none" + + + fun checkIfHoliday(): String { + val currentDate = LocalDate.now() + if (!currentDate.isBefore(halloweenStartDate) && !currentDate.isAfter(halloweenEndDate)) + return "halloween" + if (!currentDate.isBefore(christmasStartDate) && !currentDate.isAfter(christmasEndDate)) + return "christmas" + if (currentDate.isEqual(rs2ReleaseDate)) + return "rs2release" + if (currentDate.isEqual(farmingReleaseDate)) + return "farmingrelease" + if (currentDate.isEqual(constructionReleaseDate)) + return "constructionrelease" + if (currentDate.isEqual(hunterReleaseDate)) + return "hunterrelease" + if (currentDate.isEqual(summonReleaseDate)) + return "summoningrelease" + + return "none" + } + + override fun Init() { + currentHoliday = checkIfHoliday() + when (currentHoliday) { + "halloween" -> API.SetLoginScreenMusicOnLoad("scape scared") + "christmas" -> API.SetLoginScreenMusicOnLoad(christmasMusicList.random()) + "rs2release" -> API.SetLoginScreenMusicOnLoad("scape original") + "farmingrelease" -> API.SetLoginScreenMusicOnLoad("ground scape") + "constructionrelease" -> API.SetLoginScreenMusicOnLoad("homescape") + "hunterrelease" -> API.SetLoginScreenMusicOnLoad("scape hunter") + "summoningrelease" -> API.SetLoginScreenMusicOnLoad("scape summon") + } + } + + override fun Draw(deltaTime: Long) { + if (!API.IsLoggedIn()) { + when(currentHoliday) { + "christmas" -> API.DrawText(FontType.LARGE, FontColor.fromColor(Color.GREEN), TextModifier.LEFT, "Happy Holidays.", 0, API.GetWindowDimensions().height - 5) + "halloween" -> API.DrawText(FontType.LARGE, FontColor.fromColor(Color.ORANGE), TextModifier.LEFT, "Happy Halloween.", 0, API.GetWindowDimensions().height - 5) + "rs2release" -> API.DrawText(FontType.LARGE, FontColor.fromColor(Color.YELLOW), TextModifier.LEFT, "On this day in 2004, RS2 was released.", 0, API.GetWindowDimensions().height - 5) + "farmingrelease" -> API.DrawText(FontType.LARGE, FontColor.fromColor(Color.YELLOW), TextModifier.LEFT, "On this day in 2005, the farming skill was released.", 0, API.GetWindowDimensions().height - 5) + "constructionrelease" -> API.DrawText(FontType.LARGE, FontColor.fromColor(Color.YELLOW), TextModifier.LEFT, "On this day in 2006, the construction skill was released.", 0, API.GetWindowDimensions().height - 5) + "hunterrelease" -> API.DrawText(FontType.LARGE, FontColor.fromColor(Color.YELLOW), TextModifier.LEFT, "On this day in 2006, the hunter skill was released.", 0, API.GetWindowDimensions().height - 5) + "summoningrelease" -> API.DrawText(FontType.LARGE, FontColor.fromColor(Color.YELLOW), TextModifier.LEFT, "On this day in 2008, the summoning skill was released.", 0, API.GetWindowDimensions().height - 5) + } + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/HolidayLoginMusic/plugin.properties b/plugin-playground/src/main/kotlin/HolidayLoginMusic/plugin.properties new file mode 100644 index 0000000..d412a40 --- /dev/null +++ b/plugin-playground/src/main/kotlin/HolidayLoginMusic/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Zerken' +DESCRIPTION='Plays specific music during holidays and skill release anniversaries at the login screen.' +VERSION=1.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/IdentifyClueScrolls/plugin.kt b/plugin-playground/src/main/kotlin/IdentifyClueScrolls/plugin.kt new file mode 100644 index 0000000..65991fe --- /dev/null +++ b/plugin-playground/src/main/kotlin/IdentifyClueScrolls/plugin.kt @@ -0,0 +1,163 @@ +package IdentifyClueScrolls + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.MiniMenuEntry +import plugin.api.MiniMenuType +import rt4.ObjTypeList + +class plugin : Plugin() { + override fun DrawMiniMenu(entry: MiniMenuEntry?) { + when(entry?.type) { + MiniMenuType.OBJ -> { + val index = entry.subjectIndex + val def = ObjTypeList.get(index.toInt()) + if(entry.verb.equals("read", true)) { + if(EASY.contains(index.toInt())) { + entry.subject = entry.subject + " (easy)" + } else if(MEDIUM.contains(index.toInt())) { + entry.subject = entry.subject + " (medium)" + } else if(HARD.contains(index.toInt())) { + entry.subject = entry.subject + " (hard)" + } + } + } + } + } + + private val EASY = intArrayOf( + 2682, + 2679, + 2680, + 2684, + 2685, + 2689, + 2690, + 2691, + 2695, + 2696, + 2697, + 2698, + 2702, + 2703, + 2707, + 2708, + 2711, + 2716, + 2719, + 2722, + 2725, + 2729, + 2731, + 2733, + 2735, + 2737, + 2745, + 2805, + 2785, + 2786, + 2788, + 2790, + 2792 + ) + + private val MEDIUM = intArrayOf( + 2677, + 2678, + 2686, + 2687, + 2688, + 2692, + 2693, + 2694, + 2699, + 2700, + 2704, + 2705, + 2712, + 2723, + 2739, + 2743, + 2747, + 2776, + 2778, + 2780, + 2793, + 2794, + 2796, + 2801, + 2803, + 2807, + 2809, + 2811, + 2813, + 2815, + 2817, + 2819, + 2821, + 2823, + 2825, + 2827, + 2829, + 2833, + 2839, + 2841, + 2849, + 2851, + 2853, + 2855, + 2857, + 2858, + 3490, + 3491, + 3492, + 3493, + 3494, + 3495, + 3496, + 3497, + 3499, + 3500 + ) + + private val HARD = intArrayOf( + 2681, + 2701, + 2706, + 2710, + 2713, + 2741, + 2773, + 2774, + 2782, + 2783, + 2797, + 2799, + 2831, + 2835, + 2843, + 2845, + 2856, + 3498, + 3501, + 3502, + 3503, + 3504, + 3505, + 3506, + 3507, + 3508, + 3509, + 3510, + 3512, + 3513, + 3514, + 3515, + 3516, + 3518, + 3520, + 3522, + 3524, + 3525 + ) +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/IdentifyClueScrolls/plugin.properties b/plugin-playground/src/main/kotlin/IdentifyClueScrolls/plugin.properties new file mode 100644 index 0000000..78957dc --- /dev/null +++ b/plugin-playground/src/main/kotlin/IdentifyClueScrolls/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='bushtail' +DESCRIPTION='Identify clue scrolls easily' +VERSION=1.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/KondoKit/AltCanvas.kt b/plugin-playground/src/main/kotlin/KondoKit/AltCanvas.kt new file mode 100644 index 0000000..af5c01d --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/AltCanvas.kt @@ -0,0 +1,166 @@ +package KondoKit + +import KondoKit.plugin.Companion.FIXED_HEIGHT +import KondoKit.plugin.Companion.FIXED_WIDTH +import plugin.api.API.IsHD +import rt4.GameShell.canvas +import rt4.GlRenderer +import rt4.SoftwareRaster +import java.awt.* +import java.awt.event.* +import java.awt.geom.AffineTransform +import java.awt.image.AffineTransformOp +import java.awt.image.BufferedImage +import java.awt.image.VolatileImage + +class AltCanvas : Canvas() { + private var gameImage: VolatileImage? = null + private var op: AffineTransformOp? = null + private var transform: AffineTransform? = null + + private var flippedImage: BufferedImage? = null + private var bufferImage = BufferedImage(FIXED_WIDTH, FIXED_HEIGHT, BufferedImage.TYPE_INT_BGR) + + private var lastImageWidth = -1 + private var lastImageHeight = -1 + + init { + isFocusable = true + requestFocusInWindow() + + addMouseListener(object : MouseAdapter() { + override fun mousePressed(e: MouseEvent) = relayMouseEvent(e) + override fun mouseReleased(e: MouseEvent) = relayMouseEvent(e) + override fun mouseClicked(e: MouseEvent) = relayMouseEvent(e) + }) + + addMouseMotionListener(object : MouseMotionAdapter() { + override fun mouseMoved(e: MouseEvent) = relayMouseEvent(e) + override fun mouseDragged(e: MouseEvent) = relayMouseEvent(e) + }) + + addKeyListener(object : KeyAdapter() { + override fun keyPressed(e: KeyEvent) = relayKeyEvent { it.keyPressed(e) } + override fun keyReleased(e: KeyEvent) = relayKeyEvent { it.keyReleased(e) } + override fun keyTyped(e: KeyEvent) = relayKeyEvent { it.keyTyped(e) } + }) + + addMouseWheelListener(MouseWheelListener { e -> relayMouseWheelEvent(e) }) + } + + override fun update(g: Graphics) = paint(g) + + override fun addNotify() { + super.addNotify() + createBufferStrategy(2) // Double-buffering + validateGameImage() + } + + private fun validateGameImage() { + val gc = GraphicsEnvironment.getLocalGraphicsEnvironment().defaultScreenDevice.defaultConfiguration + gameImage?.let { + when (it.validate(gc)) { + VolatileImage.IMAGE_INCOMPATIBLE -> createGameImage(gc) + VolatileImage.IMAGE_RESTORED -> renderGameImage() + } + } ?: createGameImage(gc) + } + + private fun createGameImage(gc: GraphicsConfiguration) { + gameImage = gc.createCompatibleVolatileImage(FIXED_WIDTH, FIXED_HEIGHT, Transparency.OPAQUE) + renderGameImage() + } + + private fun renderGameImage() { + gameImage?.createGraphics()?.apply { + color = Color.DARK_GRAY + fillRect(0, 0, gameImage!!.width, gameImage!!.height) + color = Color.BLACK + drawString("KondoKit Scaled Fixed Canvas", 20, 20) + dispose() + } + } + + + override fun paint(g: Graphics) { + bufferStrategy?.let { strategy -> + val g2d = strategy.drawGraphics as? Graphics2D ?: return + + g2d.color = Color.BLACK + g2d.fillRect(0, 0, width, height) + + gameImage?.let { image -> + val scale = minOf(width.toDouble() / image.width, height.toDouble() / image.height) + val x = ((width - image.width * scale) / 2).toInt() + val y = ((height - image.height * scale) / 2).toInt() + g2d.drawImage(image, x, y, (image.width * scale).toInt(), (image.height * scale).toInt(), null) + } + + g2d.dispose() // Release the graphics context + strategy.show() // Display the buffer + } + } + + private fun relayMouseEvent(e: MouseEvent) { + requestFocusInWindow() + val scale = minOf(width.toDouble() / gameImage!!.width, height.toDouble() / gameImage!!.height) + val xOffset = ((width - gameImage!!.width * scale) / 2) + val yOffset = ((height - gameImage!!.height * scale) / 2) + + val adjustedX = ((e.x - xOffset) / scale).toInt().coerceIn(0, gameImage!!.width - 1) + val adjustedY = ((e.y - yOffset) / scale).toInt().coerceIn(0, gameImage!!.height - 1) + + canvas.dispatchEvent(MouseEvent(this, e.id, e.`when`, e.modifiersEx, adjustedX, adjustedY, e.clickCount, e.isPopupTrigger, e.button)) + } + + private fun relayKeyEvent(action: (KeyListener) -> Unit) { + for (listener in canvas.keyListeners) action(listener) + } + + private fun relayMouseWheelEvent(e: MouseWheelEvent) { + val scale = minOf(width.toDouble() / gameImage!!.width, height.toDouble() / gameImage!!.height) + val xOffset = ((width - gameImage!!.width * scale) / 2) + val yOffset = ((height - gameImage!!.height * scale) / 2) + + val adjustedX = ((e.x - xOffset) / scale).toInt().coerceIn(0, gameImage!!.width - 1) + val adjustedY = ((e.y - yOffset) / scale).toInt().coerceIn(0, gameImage!!.height - 1) + + canvas.dispatchEvent(MouseWheelEvent(this, e.id, e.`when`, e.modifiersEx, adjustedX, adjustedY, e.clickCount, e.isPopupTrigger, e.scrollType, e.scrollAmount, e.wheelRotation)) + } + + fun updateGameImage() { + if (IsHD()) renderGlRaster() else renderSoftwareRaster() + repaint() + } + + private fun renderGlRaster() { + val width = gameImage!!.width + val height = gameImage!!.height + + bufferImage.setRGB(0, 0, width, height, GlRenderer.pixelData, 0, width) + + if (width != lastImageWidth || height != lastImageHeight) { + transform = AffineTransform.getScaleInstance(1.0, -1.0).apply { + translate(0.0, -height.toDouble()) + } + op = AffineTransformOp(transform, AffineTransformOp.TYPE_NEAREST_NEIGHBOR) + flippedImage = BufferedImage(width, height, bufferImage.type) + lastImageWidth = width + lastImageHeight = height + } + + op!!.filter(bufferImage, flippedImage) + + gameImage?.createGraphics()?.apply { + drawImage(flippedImage, 0, 0, null) + dispose() + } + } + + private fun renderSoftwareRaster() { + gameImage?.createGraphics()?.apply { + SoftwareRaster.frameBuffer.draw(this) + dispose() + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/KondoKit/Helpers.kt b/plugin-playground/src/main/kotlin/KondoKit/Helpers.kt new file mode 100644 index 0000000..4f6e3c4 --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/Helpers.kt @@ -0,0 +1,236 @@ +package KondoKit + +import rt4.GameShell +import java.awt.* +import java.awt.event.MouseListener +import java.lang.reflect.Field +import java.lang.reflect.ParameterizedType +import java.lang.reflect.Type +import java.util.* +import java.util.Timer +import javax.swing.* + +object Helpers { + + fun convertValue(type: Class<*>, genericType: Type?, value: String): Any { + return when { + type == Int::class.java -> value.toInt() + type == Double::class.java -> value.toDouble() + type == Boolean::class.java -> value.toBoolean() + type == Color::class.java -> convertToColor(value) + type == List::class.java && genericType is ParameterizedType -> { + val actualTypeArgument = genericType.actualTypeArguments.firstOrNull() + when { + value.isBlank() -> emptyList() // Handle empty string by returning an empty list + actualTypeArgument == Int::class.javaObjectType -> value.trim('[', ']').split(",").filter { it.isNotBlank() }.map { it.trim().toInt() } + actualTypeArgument == String::class.java -> value.trim('[', ']').split(",").filter { it.isNotBlank() }.map { it.trim() } + else -> throw IllegalArgumentException("Unsupported List type: $actualTypeArgument") + } + } + else -> value // Default to String + } + } + + fun showToast( + parentComponent: Component?, + message: String, + messageType: Int = JOptionPane.INFORMATION_MESSAGE + ) { + SwingUtilities.invokeLater { + val toast = JWindow() + toast.type = Window.Type.POPUP + toast.background = Color(0, 0, 0, 0) + + val panel = JPanel() + panel.isOpaque = false + panel.layout = BoxLayout(panel, BoxLayout.Y_AXIS) + + val label = JLabel(message) + label.foreground = Color.WHITE + + label.background = when (messageType) { + JOptionPane.ERROR_MESSAGE -> Color(220, 20, 60, 230) // Crimson for errors + JOptionPane.INFORMATION_MESSAGE -> Color(0, 128, 0, 230) // Green for success + JOptionPane.WARNING_MESSAGE -> Color(255, 165, 0, 230) // Orange for warnings + else -> Color(0, 0, 0, 170) // Default semi-transparent black + } + + label.isOpaque = true + label.border = BorderFactory.createEmptyBorder(10, 20, 10, 20) + label.maximumSize = Dimension(242, 50) + label.preferredSize = Dimension(242, 50) + panel.add(label) + + + + toast.contentPane.add(panel) + toast.pack() + + + // Adjust for parent component location if it exists + if (parentComponent != null && GameShell.canvas.isShowing) { + val parentLocation = parentComponent.locationOnScreen + val x = parentLocation.x + val y = GameShell.canvas.locationOnScreen.y + toast.setLocation(x, y) + } else { + // Fallback to screen center if no parent is provided + val screenSize = Toolkit.getDefaultToolkit().screenSize + val x = (screenSize.width - toast.width) / 2 + val y = screenSize.height - toast.height - 50 + toast.setLocation(x, y) + } + + toast.isVisible = true + + Timer().schedule(object : TimerTask() { + override fun run() { + SwingUtilities.invokeLater { + toast.isVisible = false + toast.dispose() + } + } + }, 2000) + } + } + + + private fun convertToColor(value: String): Color { + return Color.decode(value) + } + + fun colorToHex(color: Color): String { + return "#%02x%02x%02x".format(color.red, color.green, color.blue) + } + + fun colorToIntArray(color: Color): IntArray { + return intArrayOf(color.red, color.green, color.blue) + } + + interface FieldObserver { + fun onFieldChange(field: Field, newValue: Any?) + } + + fun addMouseListenerToAll(container: Container, listener: MouseListener) { + // Recursively go through all components within the container + for (component in container.components) { + // Add the passed MouseListener to the component + if (component is JComponent || component is Canvas) { + component.addMouseListener(listener) + } + + // If the component is a container, recursively call this function + if (component is Container) { + addMouseListenerToAll(component, listener) + } + } + } + + + + + class FieldNotifier(private val plugin: Any) { + private val observers = mutableListOf() + + private fun notifyFieldChange(field: Field, newValue: Any?) { + for (observer in observers) { + observer.onFieldChange(field, newValue) + } + } + + fun setFieldValue(field: Field, value: Any?) { + field.isAccessible = true + field.set(plugin, value) + notifyFieldChange(field, value) + + try { + val onUpdateMethod = plugin::class.java.getMethod("OnKondoValueUpdated") + onUpdateMethod.invoke(plugin) + } catch (e: NoSuchMethodException) { + // The method doesn't exist + } catch (e: Exception) { + e.printStackTrace() + } + } + } + + fun getSpriteId(skillId: Int) : Int { + return when (skillId) { + 0 -> 197 + 1 -> 199 + 2 -> 198 + 3 -> 203 + 4 -> 200 + 5 -> 201 + 6 -> 202 + 7 -> 212 + 8 -> 214 + 9 -> 208 + 10 -> 211 + 11 -> 213 + 12 -> 207 + 13 -> 210 + 14 -> 209 + 15 -> 205 + 16 -> 204 + 17 -> 206 + 18 -> 216 + 19 -> 217 + 20 -> 215 + 21 -> 220 + 22 -> 221 + 23 -> 222 + else -> 222 + } + } + + fun showAlert(message: String, title: String, type: Int){ + JOptionPane.showMessageDialog(null, message, title, type) + } + + fun formatHtmlLabelText(text1: String, color1: Color, text2: String, color2: Color): String { + return "

" + + "$text1" + + "$text2" + + "
" + } + + fun formatNumber(value: Int): String { + return when { + value >= 1_000_000 -> String.format("%.2fM", value / 1_000_000.0) + value >= 1_000 -> String.format("%.2fK", value / 1_000.0) + else -> value.toString() + } + } + + fun getProgressBarColor(skillId: Int): Color { + // Straight from runelite + return when (skillId) { + 0 -> Color(155, 32, 7) // ATTACK + 1 -> Color(98, 119, 190) // DEFENCE + 2 -> Color(4, 149, 90) // STRENGTH + 3 -> Color(131, 126, 126) // HITPOINTS + 4 -> Color(109, 144, 23) // RANGED + 5 -> Color(159, 147, 35) // PRAYER + 6 -> Color(50, 80, 193) // MAGIC + 7 -> Color(112, 35, 134) // COOKING + 8 -> Color(52, 140, 37) // WOODCUTTING + 9 -> Color(3, 141, 125) // FLETCHING + 10 -> Color(106, 132, 164) // FISHING + 11 -> Color(189, 120, 25) // FIREMAKING + 12 -> Color(151, 110, 77) // CRAFTING + 13 -> Color(108, 107, 82) // SMITHING + 14 -> Color(93, 143, 167) // MINING + 15 -> Color(7, 133, 9) // HERBLORE + 16 -> Color(58, 60, 137) // AGILITY + 17 -> Color(108, 52, 87) // THIEVING + 18 -> Color(100, 100, 100) // SLAYER + 19 -> Color(101, 152, 63) // FARMING + 20 -> Color(170, 141, 26) // RUNECRAFT + 21 -> Color(92, 89, 65) // HUNTER + 22 -> Color(130, 116, 95) // CONSTRUCTION + 23 -> Color(150, 50, 50) // Placeholder for any additional skill + else -> Color(128, 128, 128) // Default grey for unhandled skill IDs + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/KondoKit/HiscoresView.kt b/plugin-playground/src/main/kotlin/KondoKit/HiscoresView.kt new file mode 100644 index 0000000..0b48ab3 --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/HiscoresView.kt @@ -0,0 +1,510 @@ +package KondoKit + +import KondoKit.Constants.COLOR_BACKGROUND_DARK +import KondoKit.Constants.SKILL_DISPLAY_ORDER +import KondoKit.Constants.SKILL_SPRITE_DIMENSION +import KondoKit.Helpers.formatHtmlLabelText +import KondoKit.Helpers.getSpriteId +import KondoKit.Helpers.showToast +import KondoKit.SpriteToBufferedImage.getBufferedImageFromSprite +import KondoKit.plugin.Companion.POPUP_FOREGROUND +import KondoKit.plugin.Companion.TOOLTIP_BACKGROUND +import KondoKit.plugin.Companion.VIEW_BACKGROUND_COLOR +import KondoKit.plugin.Companion.WIDGET_COLOR +import KondoKit.plugin.Companion.primaryColor +import KondoKit.plugin.Companion.secondaryColor +import KondoKit.plugin.StateManager.focusedView +import com.google.gson.Gson +import plugin.api.API +import rt4.Sprites +import java.awt.* +import java.awt.datatransfer.DataFlavor +import java.awt.event.KeyAdapter +import java.awt.event.KeyEvent +import java.awt.event.MouseAdapter +import java.awt.event.MouseEvent +import java.io.BufferedReader +import java.io.InputStreamReader +import java.net.HttpURLConnection +import java.net.SocketTimeoutException +import java.net.URL +import javax.swing.* +import javax.swing.border.MatteBorder +import kotlin.math.floor + +object Constants { + // Sprite IDs + const val COMBAT_LVL_SPRITE = 168 + const val IRONMAN_SPRITE = 4 + const val MAG_SPRITE = 1423 + const val LVL_BAR_SPRITE = 898 + + // Dimensions + val SEARCH_FIELD_DIMENSION = Dimension(230, 30) + val ICON_DIMENSION_SMALL = Dimension(12, 12) + val ICON_DIMENSION_LARGE = Dimension(30, 30) + val HISCORE_PANEL_DIMENSION = Dimension(230, 500) + val FILTER_PANEL_DIMENSION = Dimension(230, 30) + val SKILLS_PANEL_DIMENSION = Dimension(230, 290) + val TOTAL_COMBAT_PANEL_DIMENSION = Dimension(230, 30) + val SKILL_PANEL_DIMENSION = Dimension(76, 35) + val IMAGE_CANVAS_DIMENSION = Dimension(20, 20) + val SKILL_SPRITE_DIMENSION = Dimension(14, 14) + val NUMBER_LABEL_DIMENSION = Dimension(20, 20) + + // Colors + val COLOR_BACKGROUND_DARK = WIDGET_COLOR + val COLOR_BACKGROUND_MEDIUM = VIEW_BACKGROUND_COLOR + val COLOR_FOREGROUND_LIGHT = POPUP_FOREGROUND + + // Fonts + val FONT_ARIAL_PLAIN_14 = Font("Arial", Font.PLAIN, 14) + val FONT_ARIAL_PLAIN_12 = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + val FONT_ARIAL_BOLD_12 = Font("Arial", Font.BOLD, 12) + val SKILL_DISPLAY_ORDER = arrayOf(0,3,14,2,16,13,1,15,10,4,17,7,5,12,11,6,9,8,20,18,19,22,21,23) +} + +var text: String = "" + +object HiscoresView { + + const val VIEW_NAME = "HISCORE_SEARCH_VIEW" + var hiScoreView: JPanel? = null + class CustomSearchField(private val hiscoresPanel: JPanel) : Canvas() { + + private var cursorVisible: Boolean = true + private val gson = Gson() + + private val bufferedImageSprite = getBufferedImageFromSprite(API.GetSprite(Constants.MAG_SPRITE)) + private val imageCanvas = bufferedImageSprite.let { + ImageCanvas(it).apply { + preferredSize = Constants.ICON_DIMENSION_SMALL + size = preferredSize + minimumSize = preferredSize + maximumSize = preferredSize + fillColor = COLOR_BACKGROUND_DARK + } + } + + init { + preferredSize = Constants.SEARCH_FIELD_DIMENSION + background = Constants.COLOR_BACKGROUND_DARK + foreground = Constants.COLOR_FOREGROUND_LIGHT + font = Constants.FONT_ARIAL_PLAIN_14 + minimumSize = preferredSize + maximumSize = preferredSize + + addKeyListener(object : KeyAdapter() { + override fun keyTyped(e: KeyEvent) { + // Prevent null character from being typed on Ctrl+A & Ctrl+V + if (e.isControlDown && (e.keyChar == '\u0001' || e.keyChar == '\u0016')) { + e.consume() + return + } + if (e.keyChar == '\b') { + if (text.isNotEmpty()) { + text = text.dropLast(1) + } + } else if (e.keyChar == '\n') { + searchPlayer(text) + } else { + text += e.keyChar + } + SwingUtilities.invokeLater { + repaint() + } + } + override fun keyPressed(e: KeyEvent) { + if (e.isControlDown) { + when (e.keyCode) { + KeyEvent.VK_A -> { + text = "" + repaint() + } + KeyEvent.VK_V -> { + val clipboard = Toolkit.getDefaultToolkit().systemClipboard + val pasteText = clipboard.getData(DataFlavor.stringFlavor) as String + text += pasteText + SwingUtilities.invokeLater { + repaint() + } + } + } + } + } + }) + + addMouseListener(object : MouseAdapter() { + override fun mouseClicked(e: MouseEvent) { + if (e.x > width - 20 && e.y < 20) { + text = "" + SwingUtilities.invokeLater { + repaint() + } + } + } + }) + + Timer(500) { + cursorVisible = !cursorVisible + if(focusedView == VIEW_NAME) + SwingUtilities.invokeLater { + repaint() + } + }.start() + } + + override fun paint(g: Graphics) { + super.paint(g) + g.color = foreground + g.font = font + + val fm = g.fontMetrics + val cursorX = fm.stringWidth(text) + 30 + + imageCanvas.let { canvas -> + val imgG = g.create(5, 5, canvas.width, canvas.height) + canvas.paint(imgG) + imgG.dispose() + } + + g.drawString(text, 30, 20) + + if (cursorVisible && hasFocus()) { + g.drawLine(cursorX, 5, cursorX, 25) + } + + if (text.isNotEmpty()) { + g.color = Color.RED + g.drawString("x", width - 20, 20) + } + } + + fun searchPlayer(username: String) { + text = username.replace(" ", "_") + val apiUrl = "http://api.2009scape.org:3000/hiscores/playerSkills/1/${text.toLowerCase()}" + + updateHiscoresView(null, "Searching...") + + Thread { + try { + val url = URL(apiUrl) + val connection = url.openConnection() as HttpURLConnection + connection.requestMethod = "GET" + + // If a request take longer than 5 seconds timeout. + connection.connectTimeout = 5000 + connection.readTimeout = 5000 + + val responseCode = connection.responseCode + if (responseCode == HttpURLConnection.HTTP_OK) { + val reader = BufferedReader(InputStreamReader(connection.inputStream)) + val response = reader.use { it.readText() } + reader.close() + + SwingUtilities.invokeLater { + updatePlayerData(response, username) + } + } else { + SwingUtilities.invokeLater { + showToast(hiscoresPanel, "Player not found!", JOptionPane.ERROR_MESSAGE) + } + } + } catch (e: SocketTimeoutException) { + SwingUtilities.invokeLater { + showToast(hiscoresPanel, "Request timed out", JOptionPane.ERROR_MESSAGE) + } + } catch (e: Exception) { + // Handle other errors + SwingUtilities.invokeLater { + showToast(hiscoresPanel, "Error fetching data!", JOptionPane.ERROR_MESSAGE) + } + } + }.start() + } + + + private fun updatePlayerData(jsonResponse: String, username: String) { + val hiscoresResponse = gson.fromJson(jsonResponse, HiscoresResponse::class.java) + updateHiscoresView(hiscoresResponse, username) + } + + private fun updateHiscoresView(data: HiscoresResponse?, username: String) { + val playerNameLabel = findComponentByName(hiscoresPanel, "playerNameLabel") as? JPanel + playerNameLabel?.removeAll() // Clear previous components + var nameLabel = JLabel(formatHtmlLabelText(username, secondaryColor, "", primaryColor), JLabel.CENTER).apply { + font = Constants.FONT_ARIAL_BOLD_12 + foreground = Constants.COLOR_FOREGROUND_LIGHT + border = BorderFactory.createEmptyBorder(0, 6, 0, 0) // Top, Left, Bottom, Right padding + } + playerNameLabel?.add(nameLabel) + playerNameLabel?.revalidate() + playerNameLabel?.repaint() + + if(data == null) return + + playerNameLabel?.removeAll() + + val ironMode = data.info.iron_mode + + if (ironMode != "0") { + val ironmanBufferedImage = getBufferedImageFromSprite(Sprites.nameIcons[Constants.IRONMAN_SPRITE + ironMode.toInt() - 1]) + val imageCanvas = ironmanBufferedImage.let { + ImageCanvas(it).apply { + preferredSize = Constants.IMAGE_CANVAS_DIMENSION + size = Constants.IMAGE_CANVAS_DIMENSION + } + } + + playerNameLabel?.add(imageCanvas) + } + + val exp_multiplier = data.info.exp_multiplier + nameLabel = JLabel(formatHtmlLabelText(username, secondaryColor, " (${exp_multiplier}x)", primaryColor), JLabel.CENTER).apply { + font = Constants.FONT_ARIAL_BOLD_12 + foreground = Constants.COLOR_FOREGROUND_LIGHT + border = BorderFactory.createEmptyBorder(0, 6, 0, 0) // Top, Left, Bottom, Right padding + } + + + playerNameLabel?.add(nameLabel) + + playerNameLabel?.revalidate() + playerNameLabel?.repaint() + + // Update skill labels + data.skills.forEachIndexed { index, skill -> + val labelName = "skillLabel_$index" + val numberLabel = findComponentByName(hiscoresPanel, labelName) as? JLabel + numberLabel?.text = skill.static + } + + updateTotalAndCombatLevel(data.skills, true) + + hiscoresPanel.revalidate() + hiscoresPanel.repaint() + } + + private fun updateTotalAndCombatLevel(skills: List, isMemberWorld: Boolean) { + val totalLevel = skills.sumBy { it.static.toInt() } + val totalLevelLabel = findComponentByName(hiscoresPanel, "totalLevelLabel") as? JLabel + totalLevelLabel?.text = totalLevel.toString() + + val attack = skills.find { it.id == "0" }?.static?.toInt() ?: 1 + val defence = skills.find { it.id == "1" }?.static?.toInt() ?: 1 + val strength = skills.find { it.id == "2" }?.static?.toInt() ?: 1 + val hitpoints = skills.find { it.id == "3" }?.static?.toInt() ?: 1 + val ranged = skills.find { it.id == "4" }?.static?.toInt() ?: 1 + val prayer = skills.find { it.id == "5" }?.static?.toInt() ?: 1 + val magic = skills.find { it.id == "6" }?.static?.toInt() ?: 1 + val summoning = skills.find { it.id == "23" }?.static?.toInt() ?: 1 + + val combatLevel = calculateCombatLevel(attack, defence, strength, hitpoints, prayer, ranged, magic, summoning, true) + val combatLevelLabel = findComponentByName(hiscoresPanel, "combatLevelLabel") as? JLabel + combatLevelLabel?.text = combatLevel.toString() + } + + private fun calculateCombatLevel( + attack: Int, + defence: Int, + strength: Int, + hitpoints: Int, + prayer: Int, + ranged: Int, + magic: Int, + summoning: Int, + isMemberWorld: Boolean + ): Double { + val base = (defence + hitpoints + floor(prayer.toDouble() / 2)) * 0.25 + val melee = (attack + strength) * 0.325 + val range = floor(ranged * 1.5) * 0.325 + val mage = floor(magic * 1.5) * 0.325 + val maxCombatType = maxOf(melee, range, mage) + + val summoningFactor = if (isMemberWorld) floor(summoning.toDouble() / 8) else 0.0 + return Math.round((base + maxCombatType + summoningFactor) * 1000.0) / 1000.0 + } + + private fun findComponentByName(container: Container, name: String): Component? { + for (component in container.components) { + if (name == component.name) { + return component + } + if (component is Container) { + val child = findComponentByName(component, name) + if (child != null) { + return child + } + } + } + return null + } + } + + fun createHiscoreSearchView() { + val hiscorePanel = JPanel().apply { + layout = BoxLayout(this, BoxLayout.Y_AXIS) + name = VIEW_NAME + background = Constants.COLOR_BACKGROUND_MEDIUM + preferredSize = Constants.HISCORE_PANEL_DIMENSION + maximumSize = preferredSize + minimumSize = preferredSize + } + + val customSearchField = CustomSearchField(hiscorePanel) + + val searchFieldWrapper = JPanel().apply { + layout = BoxLayout(this, BoxLayout.X_AXIS) + background = Constants.COLOR_BACKGROUND_MEDIUM + preferredSize = Constants.SEARCH_FIELD_DIMENSION + maximumSize = preferredSize + minimumSize = preferredSize + alignmentX = Component.CENTER_ALIGNMENT + add(customSearchField) + } + + val searchPanel = JPanel().apply { + layout = BoxLayout(this, BoxLayout.Y_AXIS) + background = Constants.COLOR_BACKGROUND_MEDIUM + add(searchFieldWrapper) + } + + hiscorePanel.add(Box.createVerticalStrut(10)) + hiscorePanel.add(searchPanel) + hiscorePanel.add(Box.createVerticalStrut(10)) + + val playerNamePanel = JPanel().apply { + layout = GridBagLayout() // This will center the JLabel both vertically and horizontally + background = TOOLTIP_BACKGROUND.darker() + preferredSize = Constants.FILTER_PANEL_DIMENSION + maximumSize = preferredSize + minimumSize = preferredSize + name = "playerNameLabel" + } + + hiscorePanel.add(playerNamePanel) + hiscorePanel.add(Box.createVerticalStrut(10)) + + val skillsPanel = JPanel(FlowLayout(FlowLayout.CENTER, 0, 0)).apply { + background = Constants.COLOR_BACKGROUND_MEDIUM + preferredSize = Constants.SKILLS_PANEL_DIMENSION + maximumSize = preferredSize + minimumSize = preferredSize + } + + for (i in SKILL_DISPLAY_ORDER) { + val skillPanel = JPanel().apply { + layout = BorderLayout() + background = COLOR_BACKGROUND_DARK + preferredSize = Constants.SKILL_PANEL_DIMENSION + maximumSize = preferredSize + minimumSize = preferredSize + border = MatteBorder(5, 0, 0, 0, COLOR_BACKGROUND_DARK) + } + + val bufferedImageSprite = getBufferedImageFromSprite(API.GetSprite(getSpriteId(i))) + + val imageCanvas = bufferedImageSprite.let { + ImageCanvas(it).apply { + preferredSize = SKILL_SPRITE_DIMENSION + size = SKILL_SPRITE_DIMENSION + fillColor = COLOR_BACKGROUND_DARK + } + } + + val numberLabel = JLabel("", JLabel.RIGHT).apply { + name = "skillLabel_$i" + foreground = Constants.COLOR_FOREGROUND_LIGHT + font = Constants.FONT_ARIAL_PLAIN_12 + preferredSize = Constants.NUMBER_LABEL_DIMENSION + minimumSize = Constants.NUMBER_LABEL_DIMENSION + } + + val imageContainer = JPanel(FlowLayout(FlowLayout.CENTER, 5, 0)).apply { + background = COLOR_BACKGROUND_DARK + add(imageCanvas) + add(numberLabel) + } + + skillPanel.add(imageContainer, BorderLayout.CENTER) + skillsPanel.add(skillPanel) + } + + hiscorePanel.add(skillsPanel) + + val totalCombatPanel = JPanel(FlowLayout(FlowLayout.CENTER, 0, 0)).apply { + background = COLOR_BACKGROUND_DARK + preferredSize = Constants.TOTAL_COMBAT_PANEL_DIMENSION + maximumSize = preferredSize + minimumSize = preferredSize + } + + val bufferedImageSprite = getBufferedImageFromSprite(API.GetSprite(Constants.LVL_BAR_SPRITE)) + + val totalLevelIcon = ImageCanvas(bufferedImageSprite).apply { + fillColor = COLOR_BACKGROUND_DARK + preferredSize = Constants.ICON_DIMENSION_LARGE + size = Constants.ICON_DIMENSION_LARGE + } + + val totalLevelLabel = JLabel("").apply { + name = "totalLevelLabel" + foreground = Constants.COLOR_FOREGROUND_LIGHT + font = Constants.FONT_ARIAL_BOLD_12 + horizontalAlignment = JLabel.LEFT + iconTextGap = 10 + } + + val totalLevelPanel = JPanel(FlowLayout(FlowLayout.LEFT)).apply { + background = Constants.COLOR_BACKGROUND_DARK + add(totalLevelIcon) + add(totalLevelLabel) + } + + val bufferedImageSprite2 = getBufferedImageFromSprite(API.GetSprite(Constants.COMBAT_LVL_SPRITE)) + + val combatLevelIcon = ImageCanvas(bufferedImageSprite2).apply { + fillColor = COLOR_BACKGROUND_DARK + preferredSize = Constants.ICON_DIMENSION_LARGE + size = Constants.ICON_DIMENSION_LARGE + } + + val combatLevelLabel = JLabel("").apply { + name = "combatLevelLabel" + foreground = Constants.COLOR_FOREGROUND_LIGHT + font = Constants.FONT_ARIAL_BOLD_12 + horizontalAlignment = JLabel.LEFT + iconTextGap = 10 + } + + val combatLevelPanel = JPanel(FlowLayout(FlowLayout.LEFT)).apply { + background = COLOR_BACKGROUND_DARK + add(combatLevelIcon) + add(combatLevelLabel) + } + + totalCombatPanel.add(totalLevelPanel) + totalCombatPanel.add(combatLevelPanel) + hiscorePanel.add(totalCombatPanel) + hiscorePanel.add(Box.createVerticalStrut(10)) + + hiScoreView = hiscorePanel + } + + data class HiscoresResponse( + val info: PlayerInfo, + val skills: List + ) + + data class PlayerInfo( + val exp_multiplier: String, + val iron_mode: String + ) + + data class Skill( + val id: String, + val dynamic: String, + val experience: String, + val static: String + ) +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/KondoKit/ImageCanvas.kt b/plugin-playground/src/main/kotlin/KondoKit/ImageCanvas.kt new file mode 100644 index 0000000..3a9a9f3 --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/ImageCanvas.kt @@ -0,0 +1,38 @@ +package KondoKit + +import KondoKit.plugin.Companion.WIDGET_COLOR +import java.awt.Canvas +import java.awt.Color +import java.awt.Dimension +import java.awt.Graphics +import java.awt.image.BufferedImage + +class ImageCanvas(private val image: BufferedImage) : Canvas() { + + var fillColor: Color = WIDGET_COLOR + + init { + val width = image.width + val height = image.height + for (y in 0 until height) { + for (x in 0 until width) { + val color = image.getRGB(x, y) + if (color != 0) { + val newColor = (color and 0x00FFFFFF) or (0xFF shl 24) + image.setRGB(x, y, newColor) + } + } + } + } + + override fun paint(g: Graphics) { + super.paint(g) + g.color = fillColor + g.fillRect(0, 0, width, height) + g.drawImage(image, 0, 0, width, height, this) + } + + override fun getPreferredSize(): Dimension { + return Dimension(image.width, image.height) + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/KondoKit/LootTrackerView.kt b/plugin-playground/src/main/kotlin/KondoKit/LootTrackerView.kt new file mode 100644 index 0000000..cfdb4a2 --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/LootTrackerView.kt @@ -0,0 +1,611 @@ +package KondoKit + +import KondoKit.Helpers.addMouseListenerToAll +import KondoKit.Helpers.formatHtmlLabelText +import KondoKit.SpriteToBufferedImage.getBufferedImageFromSprite +import KondoKit.XPTrackerView.wrappedWidget +import KondoKit.plugin.Companion.POPUP_BACKGROUND +import KondoKit.plugin.Companion.POPUP_FOREGROUND +import KondoKit.plugin.Companion.TITLE_BAR_COLOR +import KondoKit.plugin.Companion.TOOLTIP_BACKGROUND +import KondoKit.plugin.Companion.TOTAL_XP_WIDGET_SIZE +import KondoKit.plugin.Companion.VIEW_BACKGROUND_COLOR +import KondoKit.plugin.Companion.WIDGET_COLOR +import KondoKit.plugin.Companion.primaryColor +import KondoKit.plugin.Companion.secondaryColor +import KondoKit.plugin.StateManager.focusedView +import plugin.api.API +import rt4.* +import java.awt.* +import java.awt.Font +import java.awt.event.MouseAdapter +import java.awt.event.MouseEvent +import java.awt.image.BufferedImage +import java.io.BufferedReader +import java.io.InputStreamReader +import java.net.HttpURLConnection +import java.net.URL +import java.nio.charset.StandardCharsets +import java.text.DecimalFormat +import javax.swing.* +import kotlin.math.ceil + +object LootTrackerView { + private const val SNAPSHOT_LIFESPAN = 10 + const val BAG_ICON = 900 + val npcDeathSnapshots = mutableMapOf() + var gePriceMap = loadGEPrices() + const val VIEW_NAME = "LOOT_TRACKER_VIEW" + private val lootItemPanels = mutableMapOf>() + private val npcKillCounts = mutableMapOf() + private var totalTrackerWidget: XPWidget? = null + var lastConfirmedKillNpcId = -1 + private var customToolTipWindow: JWindow? = null + var lootTrackerView: JPanel? = null + + fun loadGEPrices(): Map { + return if (plugin.useLiveGEPrices) { + try { + println("LootTracker: Loading Remote GE Prices") + val url = URL("https://cdn.2009scape.org/gedata/latest.json") + val connection = url.openConnection() as HttpURLConnection + connection.requestMethod = "GET" + connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0") + + val responseCode = connection.responseCode + if (responseCode == HttpURLConnection.HTTP_OK) { + val inputStream = connection.inputStream + val content = inputStream.bufferedReader().use(BufferedReader::readText) + + val items = content.trim().removeSurrounding("[", "]").split("},").map { it.trim() + "}" } + val gePrices = mutableMapOf() + + for (item in items) { + val pairs = item.removeSurrounding("{", "}").split(",") + val itemId = pairs.find { it.trim().startsWith("\"item_id\"") }?.split(":")?.get(1)?.trim()?.trim('\"') + val value = pairs.find { it.trim().startsWith("\"value\"") }?.split(":")?.get(1)?.trim()?.trim('\"') + if (itemId != null && value != null) { + gePrices[itemId] = value + } + } + + gePrices + } else { + emptyMap() + } + } catch (e: Exception) { + emptyMap() + } + } else { + try { + println("LootTracker: Loading Local GE Prices") + BufferedReader(InputStreamReader(plugin::class.java.getResourceAsStream("res/item_configs.json"), StandardCharsets.UTF_8)) + .useLines { lines -> + val json = lines.joinToString("\n") + val items = json.trim().removeSurrounding("[", "]").split("},").map { it.trim() + "}" } + val gePrices = mutableMapOf() + + for (item in items) { + val pairs = item.removeSurrounding("{", "}").split(",") + val id = pairs.find { it.trim().startsWith("\"id\"") }?.split(":")?.get(1)?.trim()?.trim('\"') + val grandExchangePrice = pairs.find { it.trim().startsWith("\"grand_exchange_price\"") }?.split(":")?.get(1)?.trim()?.trim('\"') + if (id != null && grandExchangePrice != null) { + gePrices[id] = grandExchangePrice + } + } + + gePrices + } + } catch (e: Exception) { + emptyMap() + } + } + } + + + + fun createLootTrackerView() { + lootTrackerView = JPanel().apply { + layout = BoxLayout(this, BoxLayout.Y_AXIS) // Use BoxLayout on Y axis to stack widgets vertically + background = VIEW_BACKGROUND_COLOR + add(Box.createVerticalStrut(5)) + totalTrackerWidget = createTotalLootWidget() + + val wrapped = wrappedWidget(totalTrackerWidget!!.container) + val popupMenu = resetLootTrackerMenu() + + // Create a custom MouseListener + val rightClickListener = object : MouseAdapter() { + override fun mousePressed(e: MouseEvent) { + if (e.isPopupTrigger) { + popupMenu.show(e.component, e.x, e.y) + } + } + + override fun mouseReleased(e: MouseEvent) { + if (e.isPopupTrigger) { + popupMenu.show(e.component, e.x, e.y) + } + } + } + addMouseListenerToAll(wrapped,rightClickListener) + wrapped.addMouseListener(rightClickListener) + add(wrapped) + add(Box.createVerticalStrut(8)) + revalidate() + if(focusedView == VIEW_NAME) + repaint() + } + } + + private fun updateTotalKills() { + totalTrackerWidget?.let { + it.totalXpGained += 1 + it.xpGainedLabel.text = formatHtmlLabelText("Total Count: ", primaryColor, it.totalXpGained.toString(), secondaryColor) + it.xpGainedLabel.repaint() + } + } + + private fun updateTotalValue(newVal: Int) { + totalTrackerWidget?.let { + it.previousXp += newVal + it.xpPerHourLabel.text = formatHtmlLabelText("Total Value: ", primaryColor, formatValue(it.previousXp) + " gp", secondaryColor) + it.container.repaint() + } + } + + private fun createTotalLootWidget(): XPWidget { + val bufferedImageSprite = getBufferedImageFromSprite(API.GetSprite(BAG_ICON)) + val l1 = createLabel(formatHtmlLabelText("Total Value: ", primaryColor, "0" + " gp", secondaryColor)) + val l2 = createLabel(formatHtmlLabelText("Total Count: ", primaryColor, "0", secondaryColor)) + return XPWidget( + skillId = -1, + container = createWidgetPanel(bufferedImageSprite,l2,l1), + xpGainedLabel = l2, + xpLeftLabel = JLabel(), + actionsRemainingLabel = JLabel(), + xpPerHourLabel = l1, + progressBar = ProgressBar(0.0, Color(0,0,0)), // unused. + totalXpGained = 0, + startTime = System.currentTimeMillis(), + previousXp = 0 + ) + } + + private fun createWidgetPanel(bufferedImageSprite: BufferedImage, l1 : JLabel, l2 : JLabel): Panel { + val imageCanvas = ImageCanvas(bufferedImageSprite).apply { + preferredSize = Dimension(bufferedImageSprite.width, bufferedImageSprite.height) + minimumSize = preferredSize + maximumSize = preferredSize + size = preferredSize + background = WIDGET_COLOR + } + + val imageContainer = Panel(BorderLayout()).apply { + background = WIDGET_COLOR + add(imageCanvas, BorderLayout.NORTH) + } + + return Panel(BorderLayout(5, 0)).apply { + background = WIDGET_COLOR + preferredSize = TOTAL_XP_WIDGET_SIZE + add(imageContainer, BorderLayout.WEST) + add(createTextPanel(l1,l2), BorderLayout.CENTER) + } + } + + private fun createTextPanel(l1 : JLabel, l2: JLabel): Panel { + return Panel(GridLayout(2, 1, 5, 0)).apply { + background = WIDGET_COLOR + add(l1) + add(l2) + } + } + + private fun createLabel(text: String): JLabel { + return JLabel(text).apply { + font = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + horizontalAlignment = JLabel.LEFT + } + } + + private fun addItemToLootPanel(lootTrackerView: JPanel, drop: Item, npcName: String) { + findLootItemsPanel(lootTrackerView, npcName)?.let { lootPanel -> + val itemQuantities = lootItemPanels.getOrPut(npcName) { mutableMapOf() } + val newQuantity = itemQuantities.merge(drop.id, drop.quantity, Int::plus) ?: drop.quantity + + lootPanel.components.filterIsInstance().find { it.getClientProperty("itemId") == drop.id } + ?.let { updateItemPanelIcon(it, drop.id, newQuantity) } + ?: addNewItemToPanel(lootPanel, drop, newQuantity) + + // Recalculate lootPanel size based on the number of unique items. + val totalItems = lootItemPanels[npcName]?.size ?: 0 + val rowsNeeded = ceil(totalItems / 6.0).toInt() + val lootPanelHeight = rowsNeeded * (40) + + val size = Dimension(lootPanel.width,lootPanelHeight+32) + lootPanel.parent.preferredSize = size + lootPanel.parent.minimumSize = size + lootPanel.parent.maximumSize = size + lootPanel.parent.revalidate() + lootPanel.parent.repaint() + lootPanel.revalidate() + + if(focusedView == VIEW_NAME) + lootPanel.repaint() + } + } + + private fun addNewItemToPanel(lootPanel: JPanel, drop: Item, newQuantity: Int) { + val itemPanel = createItemPanel(drop.id, newQuantity) + lootPanel.add(itemPanel) + } + + private fun createItemPanel(itemId: Int, quantity: Int): JPanel { + val bufferedImageSprite = getBufferedImageFromSprite(API.GetObjSprite(itemId, quantity, true, 1, 3153952)) + + // Create the panel for the item + val itemPanel = FixedSizePanel(Dimension(36, 32)).apply { + preferredSize = Dimension(36, 32) + background = WIDGET_COLOR + minimumSize = preferredSize + maximumSize = preferredSize + + val imageCanvas = ImageCanvas(bufferedImageSprite).apply { + preferredSize = Dimension(36, 32) + background = WIDGET_COLOR + minimumSize = preferredSize + maximumSize = preferredSize + } + + // Add the imageCanvas to the panel + add(imageCanvas, BorderLayout.CENTER) + + // Put the itemId as a property for reference + putClientProperty("itemId", itemId) + + // Add mouse listener for custom hover text + imageCanvas.addMouseListener(object : MouseAdapter() { + override fun mouseEntered(e: MouseEvent) { + // Show custom tooltip when the mouse enters the component + showCustomToolTip(e.point, itemId,quantity,imageCanvas) + } + + override fun mouseExited(e: MouseEvent) { + // Hide tooltip when mouse exits + hideCustomToolTip() + } + }) + } + + return itemPanel + } + + // Function to show the custom tooltip + fun showCustomToolTip(location: Point, itemId: Int, quantity: Int, parentComponent: ImageCanvas) { + val itemDef = ObjTypeList.get(itemId) + val gePricePerItem = gePriceMap[itemDef.id.toString()]?.toInt() ?: 0 + val totalGePrice = gePricePerItem * quantity + val totalHaPrice = itemDef.cost * quantity + val geText = if (quantity > 1) " (${formatValue(gePricePerItem)} ea)" else "" + val haText = if (quantity > 1) " (${formatValue(itemDef.cost)} ea)" else "" + val bgColor = Helpers.colorToHex(TOOLTIP_BACKGROUND) + val textColor = Helpers.colorToHex(secondaryColor) + val text = "
" + + "${itemDef.name} x $quantity
" + + "GE: ${formatValue(totalGePrice)} ${geText}
" + + "HA: ${formatValue(totalHaPrice)} ${haText}
" + + val _font = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + if (customToolTipWindow == null) { + customToolTipWindow = JWindow().apply { + contentPane = JLabel(text).apply { + border = BorderFactory.createLineBorder(Color.BLACK) + isOpaque = true + background = TOOLTIP_BACKGROUND + foreground = Color.WHITE + font = _font + } + pack() + } + } + + // Calculate the tooltip location relative to the parent component + val screenLocation = parentComponent.locationOnScreen + customToolTipWindow!!.setLocation(screenLocation.x + location.x, screenLocation.y + location.y + 20) + customToolTipWindow!!.isVisible = true + } + + // Function to hide the custom tooltip + fun hideCustomToolTip() { + customToolTipWindow?.isVisible = false + customToolTipWindow = null // Nullify the global instance + } + + + private fun updateItemPanelIcon(panel: JPanel, itemId: Int, quantity: Int) { + panel.removeAll() + panel.add(createItemPanel(itemId, quantity).components[0], BorderLayout.CENTER) + panel.revalidate() + if(focusedView == VIEW_NAME) + panel.repaint() + } + + private fun updateKillCountLabel(lootTrackerPanel: JPanel, npcName: String) { + lootTrackerPanel.components.filterIsInstance().forEach { childFramePanel -> + (childFramePanel.components.firstOrNull { it is JPanel } as? JPanel)?.components + ?.filterIsInstance()?.find { it.name == "killCountLabel_$npcName" } + ?.apply { + text = formatHtmlLabelText(npcName, secondaryColor, " x ${npcKillCounts[npcName]}", primaryColor) + revalidate() + repaint() + } + } + } + + private fun updateValueLabel(lootTrackerPanel: JPanel, valueOfNewDrops: String, npcName: String) { + lootTrackerPanel.components.filterIsInstance().forEach { childFramePanel -> + (childFramePanel.components.firstOrNull { it is JPanel } as? JPanel)?.components + ?.filterIsInstance()?.find { it.name == "valueLabel_$npcName" } + ?.apply { + val newValue = (getClientProperty("val") as? Int ?: 0) + valueOfNewDrops.toInt() + text = "${formatValue(newValue)} gp" + foreground = primaryColor + putClientProperty("val", newValue) + revalidate() + if(focusedView == VIEW_NAME) + repaint() + } + } + } + + private fun formatValue(value: Int): String { + return when { + value >= 1_000_000 -> "%.1fM".format(value / 1_000_000.0) + value >= 10_000 -> "%.1fK".format(value / 1_000.0) + else -> DecimalFormat("#,###").format(value) + } + } + + private fun findLootItemsPanel(container: Container, npcName: String): JPanel? { + return container.components.filterIsInstance().firstOrNull { it.name == "LOOT_ITEMS_$npcName" } + ?: container.components.filterIsInstance().mapNotNull { findLootItemsPanel(it, npcName) }.firstOrNull() + } + + + fun onPostClientTick(lootTrackerView: JPanel) { + val toRemove = mutableListOf() + + npcDeathSnapshots.entries.forEach { (npcId, snapshot) -> + val postDeathSnapshot = takeGroundSnapshot(Pair(snapshot.location.first, snapshot.location.second)) + val newDrops = postDeathSnapshot.subtract(snapshot.items) + + if (newDrops.isNotEmpty()) { + val npcName = NpcTypeList.get(npcId).name + lastConfirmedKillNpcId = npcId + handleNewDrops(npcName.toString(), newDrops, lootTrackerView) + toRemove.add(npcId) + } else if (snapshot.age >= SNAPSHOT_LIFESPAN) { + toRemove.add(npcId) + } else { + snapshot.age++ + } + } + + toRemove.forEach { npcDeathSnapshots.remove(it) } + } + + + fun takeGroundSnapshot(location: Pair): Set { + return getGroundItemsAt(location.first, location.second).toSet() + } + + private fun getGroundItemsAt(x: Int, z: Int): List { + val objstacknodeLL = SceneGraph.objStacks[Player.plane][x][z] ?: return emptyList() + val items = mutableListOf() + var itemNode = objstacknodeLL.head() as ObjStackNode? + while (itemNode != null) { + items.add(Item(itemNode.value.type, itemNode.value.amount)) + itemNode = objstacknodeLL.next() as ObjStackNode? + } + return items + } + + private fun handleNewDrops(npcName: String, newDrops: Set, lootTrackerView: JPanel) { + findLootItemsPanel(lootTrackerView, npcName)?.let { + } ?: run { + lootTrackerView.add(createLootFrame(npcName)) + lootTrackerView.add(Box.createVerticalStrut(8)) + lootTrackerView.revalidate() + if(focusedView == VIEW_NAME) + lootTrackerView.repaint() + } + + npcKillCounts[npcName] = npcKillCounts.getOrDefault(npcName, 0) + 1 + updateKillCountLabel(lootTrackerView, npcName) + updateTotalKills() + newDrops.forEach { drop -> + val geValue = (gePriceMap[drop.id.toString()]?.toInt() ?: 0) * drop.quantity + updateValueLabel(lootTrackerView, geValue.toString(), npcName) + plugin.registerDrawAction { addItemToLootPanel(lootTrackerView, drop, npcName) } + updateTotalValue(geValue) + } + } + + private fun createLootFrame(npcName: String): JPanel { + val childFramePanel = JPanel().apply { + layout = BoxLayout(this, BoxLayout.Y_AXIS) + background = WIDGET_COLOR + minimumSize = Dimension(230, 0) + maximumSize = Dimension(230, 700) + name = "HELLO_WORLD" + } + + val labelPanel = JPanel(BorderLayout()).apply { + background = TITLE_BAR_COLOR + border = BorderFactory.createEmptyBorder(5, 5, 5, 5) + maximumSize = Dimension(230, 24) + minimumSize = maximumSize + preferredSize = maximumSize + } + + val killCount = npcKillCounts.getOrPut(npcName) { 0 } + val countLabel = JLabel(formatHtmlLabelText(npcName, secondaryColor, " x $killCount", primaryColor)).apply { + foreground = secondaryColor + font = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + horizontalAlignment = JLabel.LEFT + name = "killCountLabel_$npcName" + } + + val valueLabel = JLabel("0 gp").apply { + foreground = secondaryColor + font = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + horizontalAlignment = JLabel.RIGHT + name = "valueLabel_$npcName" + } + + labelPanel.add(countLabel, BorderLayout.WEST) + labelPanel.add(valueLabel, BorderLayout.EAST) + + // Panel to hold loot items, using GridLayout to manage rows and columns. + val lootPanel = JPanel().apply { + background = WIDGET_COLOR + border = BorderFactory.createLineBorder(WIDGET_COLOR, 5) + name = "LOOT_ITEMS_$npcName" + layout = GridLayout(0, 6, 1, 1) // 6 columns, rows will be added dynamically + } + + lootItemPanels[npcName] = mutableMapOf() + + childFramePanel.add(labelPanel) + childFramePanel.add(lootPanel) + + val popupMenu = removeLootFrameMenu(childFramePanel, npcName) + + // Create a custom MouseListener + val rightClickListener = object : MouseAdapter() { + override fun mousePressed(e: MouseEvent) { + if (e.isPopupTrigger) { + popupMenu.show(e.component, e.x, e.y) + } + } + + override fun mouseReleased(e: MouseEvent) { + if (e.isPopupTrigger) { + popupMenu.show(e.component, e.x, e.y) + } + } + } + + labelPanel.addMouseListener(rightClickListener) + return childFramePanel + } + + private fun removeLootFrameMenu(toRemove: JPanel, npcName: String): JPopupMenu { + // Create a popup menu + val popupMenu = JPopupMenu() + val rFont = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + + popupMenu.background = POPUP_BACKGROUND + + // Create menu items with custom font and colors + val menuItem1 = JMenuItem("Remove").apply { + font = rFont // Set custom font + background = POPUP_BACKGROUND // Dark background for item + foreground = POPUP_FOREGROUND // Light text color for item + } + popupMenu.add(menuItem1) + menuItem1.addActionListener { + lootItemPanels[npcName]?.clear() + npcKillCounts[npcName] = 0 + lootTrackerView?.let { parent -> + val components = parent.components + val toRemoveIndex = components.indexOf(toRemove) + if (toRemoveIndex >= 0 && toRemoveIndex < components.size - 1) { + val nextComponent = components[toRemoveIndex + 1] + if (nextComponent is Box.Filler) { + // Nasty way to remove the Box.createVerticalStrut(8) after + // the lootpanel. + parent.remove(nextComponent) + } + } + parent.remove(toRemove) + parent.revalidate() + parent.repaint() + } + } + return popupMenu + } + + + private fun resetLootTrackerMenu(): JPopupMenu { + // Create a popup menu + val popupMenu = JPopupMenu() + val rFont = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + + popupMenu.background = POPUP_BACKGROUND + + // Create menu items with custom font and colors + val menuItem1 = JMenuItem("Reset Loot Tracker").apply { + font = rFont // Set custom font + background = POPUP_BACKGROUND // Dark background for item + foreground = POPUP_FOREGROUND // Light text color for item + } + popupMenu.add(menuItem1) + menuItem1.addActionListener { + plugin.registerDrawAction { + resetLootTracker() + } + } + return popupMenu + } + + private fun resetLootTracker(){ + lootTrackerView?.removeAll() + npcKillCounts.clear() + lootItemPanels.clear() + totalTrackerWidget = createTotalLootWidget() + + val wrapped = wrappedWidget(totalTrackerWidget!!.container) + val _popupMenu = resetLootTrackerMenu() + + // Create a custom MouseListener + val rightClickListener = object : MouseAdapter() { + override fun mousePressed(e: MouseEvent) { + if (e.isPopupTrigger) { + _popupMenu.show(e.component, e.x, e.y) + } + } + + override fun mouseReleased(e: MouseEvent) { + if (e.isPopupTrigger) { + _popupMenu.show(e.component, e.x, e.y) + } + } + } + addMouseListenerToAll(wrapped,rightClickListener) + wrapped.addMouseListener(rightClickListener) + lootTrackerView?.add(Box.createVerticalStrut(5)) + lootTrackerView?.add(wrapped) + lootTrackerView?.add(Box.createVerticalStrut(8)) + lootTrackerView?.revalidate() + lootTrackerView?.repaint() + } + + class FixedSizePanel(private val fixedSize: Dimension) : JPanel() { + override fun getPreferredSize(): Dimension { + return fixedSize + } + + override fun getMinimumSize(): Dimension { + return fixedSize + } + + override fun getMaximumSize(): Dimension { + return fixedSize + } + } + + data class GroundSnapshot(val items: Set, val location: Pair, var age: Int) + data class Item(val id: Int, val quantity: Int) +} diff --git a/plugin-playground/src/main/kotlin/KondoKit/ProgressBar.kt b/plugin-playground/src/main/kotlin/KondoKit/ProgressBar.kt new file mode 100644 index 0000000..2c5546f --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/ProgressBar.kt @@ -0,0 +1,77 @@ +package KondoKit + +import KondoKit.plugin.Companion.PROGRESS_BAR_FILL +import KondoKit.plugin.Companion.secondaryColor +import java.awt.Canvas +import java.awt.Color +import java.awt.Dimension +import java.awt.Font +import java.awt.Graphics + +class ProgressBar( + private var progress: Double, + private val barColor: Color, + private var currentLevel: Int = 0, + private var nextLevel: Int = 1 +) : Canvas() { + + init { + font = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + } + + override fun paint(g: Graphics) { + super.paint(g) + + // Draw the filled part of the progress bar + g.color = barColor + val width = (progress * this.width / 100).toInt() + g.fillRect(0, 0, width, this.height) + + // Draw the unfilled part of the progress bar + g.color = PROGRESS_BAR_FILL + g.fillRect(width, 0, this.width - width, this.height) + + // Variables for text position + val textY = this.height / 2 + 6 + + // Draw the current level on the far left + drawTextWithShadow(g, "Lvl. $currentLevel", 5, textY, secondaryColor) + + // Draw the percentage in the middle + val percentageText = String.format("%.2f%%", progress) + val percentageWidth = g.fontMetrics.stringWidth(percentageText) + drawTextWithShadow(g, percentageText, (this.width - percentageWidth) / 2, textY, secondaryColor) + + // Draw the next level on the far right + val nextLevelText = "Lvl. $nextLevel" + val nextLevelWidth = g.fontMetrics.stringWidth(nextLevelText) + drawTextWithShadow(g, nextLevelText, this.width - nextLevelWidth - 5, textY, secondaryColor) + } + + override fun getPreferredSize(): Dimension { + return Dimension(220, 16) // Force the height to 16px, width can be anything appropriate + } + + override fun getMinimumSize(): Dimension { + return Dimension(220, 16) // Force the minimum height to 16px, width can be smaller + } + + fun updateProgress(newProgress: Double, currentLevel: Int, nextLevel: Int, isVisible : Boolean) { + this.progress = newProgress + this.currentLevel = currentLevel + this.nextLevel = nextLevel + if(isVisible) + repaint() + } + + // Helper function to draw text with a shadow effect + private fun drawTextWithShadow(g: Graphics, text: String, x: Int, y: Int, textColor: Color) { + // Draw shadow (black text with -1 x and -1 y offset) + g.color = Color(0, 0, 0) + g.drawString(text, x + 1, y + 1) + + // Draw actual text on top + g.color = textColor + g.drawString(text, x, y) + } +} diff --git a/plugin-playground/src/main/kotlin/KondoKit/ReflectiveEditorView.kt b/plugin-playground/src/main/kotlin/KondoKit/ReflectiveEditorView.kt new file mode 100644 index 0000000..5b6cfd2 --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/ReflectiveEditorView.kt @@ -0,0 +1,324 @@ +package KondoKit + +import KondoKit.Helpers.convertValue +import KondoKit.Helpers.showToast +import KondoKit.plugin.Companion.TITLE_BAR_COLOR +import KondoKit.plugin.Companion.TOOLTIP_BACKGROUND +import KondoKit.plugin.Companion.VIEW_BACKGROUND_COLOR +import KondoKit.plugin.Companion.WIDGET_COLOR +import KondoKit.plugin.Companion.primaryColor +import KondoKit.plugin.Companion.secondaryColor +import KondoKit.plugin.StateManager.focusedView +import plugin.Plugin +import plugin.PluginInfo +import plugin.PluginRepository +import java.awt.* +import java.awt.event.MouseAdapter +import java.awt.event.MouseEvent +import java.util.* +import java.util.Timer +import javax.swing.* +import kotlin.math.ceil + +/* + This is used for the runtime editing of plugin variables. + To expose fields add the @Exposed annotation. + When they are applied this will trigger an invoke of OnKondoValueUpdated() + if it is implemented. Check GroundItems plugin for an example. + */ + + +object ReflectiveEditorView { + var reflectiveEditorView: JPanel? = null + private val loadedPlugins: MutableList = mutableListOf() + const val VIEW_NAME = "REFLECTIVE_EDITOR_VIEW" + fun createReflectiveEditorView() { + val reflectiveEditorPanel = JPanel(BorderLayout()) + reflectiveEditorPanel.background = VIEW_BACKGROUND_COLOR + reflectiveEditorPanel.add(Box.createVerticalStrut(5)) + reflectiveEditorPanel.border = BorderFactory.createEmptyBorder(10, 10, 10, 10) + reflectiveEditorView = reflectiveEditorPanel + addPlugins(reflectiveEditorView!!) + } + + fun addPlugins(reflectiveEditorView: JPanel) { + reflectiveEditorView.removeAll() // clear previous + loadedPlugins.clear() + try { + val loadedPluginsField = PluginRepository::class.java.getDeclaredField("loadedPlugins") + loadedPluginsField.isAccessible = true + val loadedPlugins = loadedPluginsField.get(null) as HashMap<*, *> + + for ((pluginInfo, plugin) in loadedPlugins) { + addPluginToEditor(reflectiveEditorView, pluginInfo as PluginInfo, plugin as Plugin) + } + } catch (e: Exception) { + e.printStackTrace() + } + + // Add a centered box for plugins that have no exposed fields + if (loadedPlugins.isNotEmpty()) { + val noExposedPanel = JPanel(BorderLayout()) + noExposedPanel.background = VIEW_BACKGROUND_COLOR + noExposedPanel.border = BorderFactory.createEmptyBorder(10, 10, 10, 10) + + val label = JLabel("Loaded Plugins without Exposed Fields", SwingConstants.CENTER) + label.font = Font("RuneScape Small", Font.PLAIN, 16) + label.foreground = primaryColor + noExposedPanel.add(label, BorderLayout.NORTH) + + val pluginsList = JList(loadedPlugins.toTypedArray()) + pluginsList.background = WIDGET_COLOR + pluginsList.foreground = secondaryColor + pluginsList.font = Font("RuneScape Small", Font.PLAIN, 16) + + // Wrap the JList in a JScrollPane with a fixed height + val maxScrollPaneHeight = 200 + val scrollPane = JScrollPane(pluginsList).apply { + verticalScrollBarPolicy = JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED + horizontalScrollBarPolicy = JScrollPane.HORIZONTAL_SCROLLBAR_NEVER + } + + // Create a wrapper panel with BoxLayout to constrain the scroll pane + val scrollPaneWrapper = JPanel().apply { + layout = BoxLayout(this, BoxLayout.Y_AXIS) + add(scrollPane) + } + + noExposedPanel.add(scrollPaneWrapper, BorderLayout.CENTER) + + // Center the panel within the reflectiveEditorView + val centeredPanel = JPanel().apply { + preferredSize = Dimension(240, maxScrollPaneHeight) + maximumSize = preferredSize + minimumSize = preferredSize + } + centeredPanel.layout = BoxLayout(centeredPanel, BoxLayout.Y_AXIS) + centeredPanel.add(Box.createVerticalGlue()) + centeredPanel.add(noExposedPanel) + centeredPanel.add(Box.createVerticalGlue()) + + reflectiveEditorView.add(Box.createVerticalStrut(10)) + reflectiveEditorView.add(centeredPanel) + } + + + reflectiveEditorView.revalidate() + if(focusedView == VIEW_NAME) + reflectiveEditorView.repaint() + } + + private fun addPluginToEditor(reflectiveEditorView: JPanel, pluginInfo : PluginInfo, plugin: Plugin) { + reflectiveEditorView.layout = BoxLayout(reflectiveEditorView, BoxLayout.Y_AXIS) + + val fieldNotifier = Helpers.FieldNotifier(plugin) + val exposedFields = plugin.javaClass.declaredFields.filter { field -> + field.annotations.any { annotation -> + annotation.annotationClass.simpleName == "Exposed" + } + } + + if (exposedFields.isNotEmpty()) { + + val packageName = plugin.javaClass.`package`.name + val version = pluginInfo.version + val labelPanel = JPanel(BorderLayout()) + labelPanel.maximumSize = Dimension(Int.MAX_VALUE, 30) + labelPanel.background = VIEW_BACKGROUND_COLOR + labelPanel.border = BorderFactory.createEmptyBorder(5, 0, 0, 0) + + val label = JLabel("$packageName v$version", SwingConstants.CENTER) + label.foreground = primaryColor + label.font = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + labelPanel.add(label, BorderLayout.CENTER) + label.isOpaque = true + label.background = TITLE_BAR_COLOR + reflectiveEditorView.add(labelPanel) + + for (field in exposedFields) { + field.isAccessible = true + + // Get the "Exposed" annotation specifically and retrieve its description, if available + val exposedAnnotation = field.annotations.firstOrNull { annotation -> + annotation.annotationClass.simpleName == "Exposed" + } + + val description = exposedAnnotation?.let { annotation -> + try { + val descriptionField = annotation.annotationClass.java.getMethod("description") + descriptionField.invoke(annotation) as String + } catch (e: NoSuchMethodException) { + "" // No description method, return empty string + } + } ?: "" + + val fieldPanel = JPanel() + fieldPanel.layout = GridBagLayout() + fieldPanel.background = WIDGET_COLOR + fieldPanel.foreground = secondaryColor + fieldPanel.border = BorderFactory.createEmptyBorder(5, 0, 5, 0) + fieldPanel.maximumSize = Dimension(Int.MAX_VALUE, 40) + + val gbc = GridBagConstraints() + gbc.insets = Insets(0, 5, 0, 5) + + val label = JLabel(field.name.capitalize()) + label.foreground = secondaryColor + gbc.gridx = 0 + gbc.gridy = 0 + gbc.weightx = 0.0 + label.font = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + gbc.anchor = GridBagConstraints.WEST + fieldPanel.add(label, gbc) + + // Create appropriate input component based on field type + val inputComponent: JComponent = when { + field.type == Boolean::class.javaPrimitiveType || field.type == java.lang.Boolean::class.java -> JCheckBox().apply { + isSelected = field.get(plugin) as Boolean + } + + field.type.isEnum -> JComboBox((field.type.enumConstants as Array>)).apply { + selectedItem = field.get(plugin) + } + + field.type == Int::class.javaPrimitiveType || field.type == Integer::class.java -> JSpinner(SpinnerNumberModel(field.get(plugin) as Int, Int.MIN_VALUE, Int.MAX_VALUE, 1)) + field.type == Float::class.javaPrimitiveType || field.type == Double::class.javaPrimitiveType || field.type == java.lang.Float::class.java || field.type == java.lang.Double::class.java -> JSpinner(SpinnerNumberModel((field.get(plugin) as Number).toDouble(), -Double.MAX_VALUE, Double.MAX_VALUE, 0.1)) + else -> JTextField(field.get(plugin)?.toString() ?: "") + } + + // Add mouse listener to the label only if a description is available + if (description.isNotBlank()) { + label.cursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR) + label.addMouseListener(object : MouseAdapter() { + override fun mouseEntered(e: MouseEvent) { + showCustomToolTip(description, label) + } + + override fun mouseExited(e: MouseEvent) { + customToolTipWindow?.isVisible = false + } + }) + } + + gbc.gridx = 1 + gbc.gridy = 0 + gbc.weightx = 1.0 + gbc.fill = GridBagConstraints.HORIZONTAL + fieldPanel.add(inputComponent, gbc) + + val applyButton = JButton("\u2714").apply { + maximumSize = Dimension(Int.MAX_VALUE, 8) + } + gbc.gridx = 2 + gbc.gridy = 0 + gbc.weightx = 0.0 + gbc.fill = GridBagConstraints.NONE + applyButton.addActionListener { + try { + val newValue = when (inputComponent) { + is JCheckBox -> inputComponent.isSelected + is JComboBox<*> -> inputComponent.selectedItem + is JSpinner -> inputComponent.value + is JTextField -> convertValue(field.type, field.genericType, inputComponent.text) + else -> throw IllegalArgumentException("Unsupported input component type") + } + fieldNotifier.setFieldValue(field, newValue) + showToast( + reflectiveEditorView, + "${field.name} updated successfully!" + ) + } catch (e: Exception) { + showToast( + reflectiveEditorView, + "Failed to update ${field.name}: ${e.message}", + JOptionPane.ERROR_MESSAGE + ) + } + } + + fieldPanel.add(applyButton, gbc) + reflectiveEditorView.add(fieldPanel) + + // Track field changes in real-time and update UI + var previousValue = field.get(plugin)?.toString() + val timer = Timer() + timer.schedule(object : TimerTask() { + override fun run() { + val currentValue = field.get(plugin)?.toString() + if (currentValue != previousValue) { + previousValue = currentValue + SwingUtilities.invokeLater { + // Update the inputComponent based on the new value + when (inputComponent) { + is JCheckBox -> inputComponent.isSelected = field.get(plugin) as Boolean + is JComboBox<*> -> inputComponent.selectedItem = field.get(plugin) + is JSpinner -> inputComponent.value = field.get(plugin) + is JTextField -> inputComponent.text = field.get(plugin)?.toString() ?: "" + } + } + } + } + }, 0, 1000) // Poll every 1000 milliseconds (1 second) + } + + if (exposedFields.isNotEmpty()) { + reflectiveEditorView.add(Box.createVerticalStrut(5)) + } + } + else { + loadedPlugins.add(plugin.javaClass.`package`.name) + } + } + + var customToolTipWindow: JWindow? = null + + fun showCustomToolTip(text: String, component: JComponent) { + val _font = Font("RuneScape Small", Font.PLAIN, 16) + val maxWidth = 150 + val lineHeight = 16 + + // Create a dummy JLabel to get FontMetrics for the font used in the tooltip + val dummyLabel = JLabel() + dummyLabel.font = _font + val fontMetrics = dummyLabel.getFontMetrics(_font) + + // Calculate the approximate width of the text + val textWidth = fontMetrics.stringWidth(text) + + // Calculate the number of lines required based on the text width and max tooltip width + val numberOfLines = ceil(textWidth.toDouble() / maxWidth).toInt() + + // Calculate the required height of the tooltip + val requiredHeight = numberOfLines * lineHeight + 6 // Adding some padding + + if (customToolTipWindow == null) { + customToolTipWindow = JWindow().apply { + val bgColor = Helpers.colorToHex(TOOLTIP_BACKGROUND) + val textColor = Helpers.colorToHex(secondaryColor) + contentPane = JLabel("
$text
").apply { + border = BorderFactory.createLineBorder(Color.BLACK) + isOpaque = true + background = TOOLTIP_BACKGROUND + foreground = Color.WHITE + font = _font + maximumSize = Dimension(maxWidth, Int.MAX_VALUE) + preferredSize = Dimension(maxWidth, requiredHeight) + } + pack() + } + } else { + // Update the tooltip text + val label = customToolTipWindow!!.contentPane as JLabel + val bgColor = Helpers.colorToHex(TOOLTIP_BACKGROUND) + val textColor = Helpers.colorToHex(secondaryColor) + label.text = "
$text
" + label.preferredSize = Dimension(maxWidth, requiredHeight) + customToolTipWindow!!.pack() + } + + // Position the tooltip near the component + val locationOnScreen = component.locationOnScreen + customToolTipWindow!!.setLocation(locationOnScreen.x, locationOnScreen.y + 15) + customToolTipWindow!!.isVisible = true + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/KondoKit/ScrollablePanel.kt b/plugin-playground/src/main/kotlin/KondoKit/ScrollablePanel.kt new file mode 100644 index 0000000..0e772b9 --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/ScrollablePanel.kt @@ -0,0 +1,162 @@ +package KondoKit + +import KondoKit.plugin.Companion.SCROLL_BAR_COLOR +import KondoKit.plugin.Companion.VIEW_BACKGROUND_COLOR +import rt4.GameShell.frame +import java.awt.Graphics +import java.awt.Graphics2D +import java.awt.Rectangle +import java.awt.event.* +import java.util.* +import javax.swing.JPanel +import javax.swing.SwingUtilities + +class ScrollablePanel(private val content: JPanel) : JPanel() { + private var lastMouseY = 0 + private var currentOffsetY = 0 + private var scrollbarHeight = 0 + private var scrollbarY = 0 + private var showScrollbar = false + private var draggingScrollPill = false + private var lastSize = 0 + + // Define a buffer for the view height (extra space for smoother scrolling) + private val viewBuffer = -30 + + init { + layout = null + background = VIEW_BACKGROUND_COLOR // Color.red color can be set to debug + + // Initial content bounds + content.bounds = Rectangle(0, 0, 242, content.preferredSize.height.coerceAtLeast(frame.height + viewBuffer)) + add(content) + + // Add listeners for scrolling interactions + addMouseListener(object : MouseAdapter() { + override fun mousePressed(e: MouseEvent) { + lastMouseY = e.y + if (showScrollbar && e.x in (242 - 10)..242 && e.y in scrollbarY..(scrollbarY + scrollbarHeight)) { + draggingScrollPill = true + } + } + + override fun mouseReleased(e: MouseEvent) { + draggingScrollPill = false + } + }) + + addMouseMotionListener(object : MouseMotionAdapter() { + override fun mouseDragged(e: MouseEvent) { + val deltaY = e.y - lastMouseY + if (draggingScrollPill && showScrollbar) { + val viewHeight = frame.height + val contentHeight = content.height + val scrollRatio = contentHeight.toDouble() / viewHeight + scrollContent((deltaY * scrollRatio).toInt()) + } else if (showScrollbar) { + scrollContent(deltaY) + } + lastMouseY = e.y + } + }) + + addMouseWheelListener { e -> + if (showScrollbar) { + scrollContent(-e.wheelRotation * 20) + } + } + + // Timer to periodically check and update scrollbar status + Timer().schedule(object : TimerTask() { + override fun run() { + updateScrollbar() + if(lastSize != content.preferredSize.height.coerceAtLeast(frame.height + viewBuffer)) + handleResize() + } + }, 0, 1000) + + // Component listener for resizing the frame + frame.addComponentListener(object : ComponentAdapter() { + override fun componentResized(e: ComponentEvent) { + handleResize() + } + }) + } + + private fun handleResize() { + SwingUtilities.invokeLater{ + // Ensure the ScrollablePanel resizes with the frame + bounds = Rectangle(0, 0, 242, frame.height) + + // Dynamically update content bounds and scrollbar on frame resize with buffer + lastSize = content.preferredSize.height.coerceAtLeast(frame.height + viewBuffer) + content.bounds = Rectangle(0, 0, 242, lastSize) + showScrollbar = content.height > frame.height + + currentOffsetY = 0 + + content.setLocation(0, currentOffsetY) + updateScrollbar() + + revalidate() + repaint() + } + } + + private fun scrollContent(deltaY: Int) { + if (!showScrollbar) { + currentOffsetY = 0 + content.setLocation(0, currentOffsetY) + return + } + SwingUtilities.invokeLater { + currentOffsetY += deltaY + + // Apply buffer to maxOffset + val maxOffset = (frame.height - content.height + viewBuffer).coerceAtMost(0) + currentOffsetY = currentOffsetY.coerceAtMost(0).coerceAtLeast(maxOffset) + + content.setLocation(0, currentOffsetY) + + val contentHeight = content.height + val viewHeight = frame.height + viewBuffer + val scrollableRatio = viewHeight.toDouble() / contentHeight + scrollbarY = ((-currentOffsetY / contentHeight.toDouble()) * viewHeight).toInt() + scrollbarHeight = (viewHeight * scrollableRatio).toInt().coerceAtLeast(20) + repaint() + } + } + + private fun updateScrollbar() { + SwingUtilities.invokeLater { + showScrollbar = content.height > frame.height + + val contentHeight = content.height + val viewHeight = frame.height + viewBuffer + + if (showScrollbar) { + val scrollableRatio = viewHeight.toDouble() / contentHeight + scrollbarY = ((-currentOffsetY / contentHeight.toDouble()) * viewHeight).toInt() + scrollbarHeight = (viewHeight * scrollableRatio).toInt().coerceAtLeast(20) + } else { + scrollbarY = 0 + scrollbarHeight = 0 + } + repaint() + } + } + + override fun paintComponent(g: Graphics) { + super.paintComponent(g) + } + + override fun paintChildren(g: Graphics) { + super.paintChildren(g) + if (showScrollbar) { + val g2 = g as Graphics2D + val scrollbarX = 238 + g2.color = SCROLL_BAR_COLOR + g2.fillRect(scrollbarX, scrollbarY, 2, scrollbarHeight) + } + } +} diff --git a/plugin-playground/src/main/kotlin/KondoKit/SpriteToBufferedImage.kt b/plugin-playground/src/main/kotlin/KondoKit/SpriteToBufferedImage.kt new file mode 100644 index 0000000..0258838 --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/SpriteToBufferedImage.kt @@ -0,0 +1,199 @@ +package KondoKit + +import rt4.GlIndexedSprite +import rt4.GlSprite +import rt4.SoftwareIndexedSprite +import rt4.SoftwareSprite +import java.awt.Color +import java.awt.image.BufferedImage + +// Define interfaces for common sprite types +interface BaseSprite { + val width: Int + val height: Int +} + +interface IndexedSprite : BaseSprite { + val pixels: ByteArray + val palette: IntArray +} + +interface NonIndexedSprite : BaseSprite { + val pixels: IntArray? +} + +// Adapter functions for existing sprite types +fun adaptSoftwareSprite(sprite: SoftwareSprite): NonIndexedSprite { + return object : NonIndexedSprite { + override val width: Int = sprite.width + override val height: Int = sprite.height + override val pixels: IntArray? = sprite.pixels + } +} + +fun adaptSoftwareIndexedSprite(sprite: SoftwareIndexedSprite): IndexedSprite { + return object : IndexedSprite { + override val width: Int = sprite.width + override val height: Int = sprite.height + override val pixels: ByteArray = sprite.pixels + override val palette: IntArray = sprite.pallet + } +} + +fun adaptGlSprite(sprite: GlSprite): NonIndexedSprite { + return object : NonIndexedSprite { + override val width: Int = sprite.width + override val height: Int = sprite.height + override val pixels: IntArray? = sprite.pixels + } +} + +fun adaptGlIndexedSprite(sprite: GlIndexedSprite): IndexedSprite { + return object : IndexedSprite { + override val width: Int = sprite.width + override val height: Int = sprite.height + override val pixels: ByteArray = sprite.pixels + override val palette: IntArray = sprite.pallet + } +} + +object SpriteToBufferedImage { + /** + * Converts a BaseSprite into a BufferedImage. + * + * Handles both indexed and non-indexed sprites, with optional tinting and grayscale. + * + * @param sprite The sprite to be converted. + * @param tint An optional Color to tint the image. + * @param grayscale If true, converts the image to grayscale. + * @param brightnessBoost A multiplier to boost the brightness of the image. + * @return The BufferedImage created from the sprite. + */ + private fun convertToBufferedImage( + sprite: BaseSprite, + tint: Color? = null, + grayscale: Boolean = false, + brightnessBoost: Float = 1.0f + ): BufferedImage { + val width = sprite.width + val height = sprite.height + val image = BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB) + + when (sprite) { + is IndexedSprite -> { + val pixels = sprite.pixels + val palette = sprite.palette + + // Manually set pixels using the palette + for (y in 0 until height) { + for (x in 0 until width) { + val index = pixels[y * width + x].toInt() and 0xFF + val color = palette[index] + + // Apply grayscale or tint if provided + val finalColor = if (grayscale) { + applyGrayscale(Color(color, true), brightnessBoost) + } else if (tint != null) { + applyTint(Color(color, true), tint, brightnessBoost) + } else { + applyBrightness(Color(color, true), brightnessBoost) + } + + image.setRGB(x, y, finalColor.rgb) + } + } + } + is NonIndexedSprite -> { + val pixels = sprite.pixels ?: return image // Handle null case for GlSprite + + // Manually set pixels directly + for (y in 0 until height) { + for (x in 0 until width) { + val color = pixels[y * width + x] + + // Apply grayscale or tint if provided + val finalColor = if (grayscale) { + applyGrayscale(Color(color, true), brightnessBoost) + } else if (tint != null) { + applyTint(Color(color, true), tint, brightnessBoost) + } else { + applyBrightness(Color(color, true), brightnessBoost) + } + + image.setRGB(x, y, finalColor.rgb) + } + } + } + } + + return image + } + + /** + * Applies a tint to a given color using the tint's alpha value to control the intensity. + * + * @param original The original color. + * @param tint The tint color to be applied. + * @param brightnessBoost A multiplier to boost the brightness of the image. + * @return The tinted color. + */ + private fun applyTint(original: Color, tint: Color, brightnessBoost: Float): Color { + val boostedColor = applyBrightness(original, brightnessBoost) + val r = (boostedColor.red * tint.red / 255).coerceIn(0, 255) + val g = (boostedColor.green * tint.green / 255).coerceIn(0, 255) + val b = (boostedColor.blue * tint.blue / 255).coerceIn(0, 255) + return Color(r, g, b, boostedColor.alpha) + } + + /** + * Boosts the brightness of a given color. + * + * @param original The original color. + * @param factor The multiplier to boost the brightness. + * @return The color with boosted brightness. + */ + private fun applyBrightness(original: Color, factor: Float): Color { + val r = (original.red * factor).coerceIn(0.0f, 255.0f).toInt() + val g = (original.green * factor).coerceIn(0.0f, 255.0f).toInt() + val b = (original.blue * factor).coerceIn(0.0f, 255.0f).toInt() + return Color(r, g, b, original.alpha) + } + + /** + * Converts a color to grayscale and applies a brightness boost. + * + * @param original The original color. + * @param brightnessBoost A multiplier to boost the brightness. + * @return The grayscale version of the color with boosted brightness. + */ + private fun applyGrayscale(original: Color, brightnessBoost: Float): Color { + // Calculate the grayscale value using the luminosity method + val grayValue = (0.3 * original.red + 0.59 * original.green + 0.11 * original.blue).toInt() + val boostedGray = (grayValue * brightnessBoost).coerceIn(0.0f, 255.0f).toInt() + return Color(boostedGray, boostedGray, boostedGray, original.alpha) + } + + /** + * Converts an unknown sprite object into a BufferedImage if it matches a known sprite type. + * + * @param sprite The sprite object to be converted. + * @param tint An optional Color to tint the image. + * @param grayscale If true, converts the image to grayscale. + * @param brightnessBoost A multiplier to boost the brightness of the image. + * @return The BufferedImage created from the sprite or a default image if unsupported. + */ + fun getBufferedImageFromSprite( + sprite: Any?, + tint: Color? = null, + grayscale: Boolean = false, + brightnessBoost: Float = 1.0f + ): BufferedImage { + return when (sprite) { + is SoftwareSprite -> convertToBufferedImage(adaptSoftwareSprite(sprite), tint, grayscale, brightnessBoost) + is SoftwareIndexedSprite -> convertToBufferedImage(adaptSoftwareIndexedSprite(sprite), tint, grayscale, brightnessBoost) + is GlSprite -> convertToBufferedImage(adaptGlSprite(sprite), tint, grayscale, brightnessBoost) + is GlIndexedSprite -> convertToBufferedImage(adaptGlIndexedSprite(sprite), tint, grayscale, brightnessBoost) + else -> BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB) // Default empty image for unsupported types + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/KondoKit/Themes.kt b/plugin-playground/src/main/kotlin/KondoKit/Themes.kt new file mode 100644 index 0000000..1b7988d --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/Themes.kt @@ -0,0 +1,94 @@ +package KondoKit + +import java.awt.Color + +object Themes { + enum class ThemeType { + RUNELITE, + DARKER_RUNELITE, + SARADOMIN, + ORION, + } + + fun getTheme(themeType: ThemeType): Theme { + return when (themeType) { + ThemeType.RUNELITE -> Theme( + widgetColor = Color(30, 30, 30), + titleBarColor = Color(21, 21, 21), + viewBackgroundColor = Color(40, 40, 40), + primaryColor = Color(165, 165, 165), + secondaryColor = Color(255, 255, 255), + popupBackground = Color(45, 45, 45), + popupForeground = Color(220, 220, 220), + tooltipBackground = Color(50, 50, 50), + scrollBarColor = Color(64, 64, 64), + progressBarFill = Color(61, 56, 49), + navTint = null, + navGreyScale = false, + boost = 1f + ) + ThemeType.DARKER_RUNELITE -> Theme( + widgetColor = Color(15, 15, 15), + titleBarColor = Color(10, 10, 10), + viewBackgroundColor = Color(20, 20, 20), + primaryColor = Color(140, 140, 140), + secondaryColor = Color(210, 210, 210), + popupBackground = Color(25, 25, 25), + popupForeground = Color(200, 200, 200), + tooltipBackground = Color(30, 30, 30), + scrollBarColor = Color(40, 40, 40), + progressBarFill = Color(45, 40, 35), + navTint = null, + navGreyScale = false, + boost = 0.8f + ) + ThemeType.ORION -> Theme( + widgetColor = Color(50, 50, 50), + titleBarColor = Color(35, 35, 35), + viewBackgroundColor = Color(60, 60, 60), + primaryColor = Color(180, 180, 180), + secondaryColor = Color(210, 210, 210), + popupBackground = Color(45, 45, 45), + popupForeground = Color(230, 230, 230), + tooltipBackground = Color(55, 55, 55), + scrollBarColor = Color(75, 75, 75), + progressBarFill = Color(100, 100, 100), + navTint = null, + navGreyScale = true, + boost = 1.3f + ) + ThemeType.SARADOMIN -> Theme( + widgetColor = Color(62, 53, 41), + titleBarColor = Color(111, 93, 69).darker(), + viewBackgroundColor = Color(101, 85, 63), + primaryColor = Color(180, 150, 120), + secondaryColor = Color(230, 210, 190), + popupBackground = Color(70, 56, 42), + popupForeground = Color(220, 200, 180), + tooltipBackground = Color(80, 65, 50), + scrollBarColor = Color(100, 85, 70), + progressBarFill = Color(130, 110, 90), + navTint = null, + navGreyScale = false, + boost = 1f + ) + } + } + + + data class Theme( + val widgetColor: Color, + val titleBarColor: Color, + val viewBackgroundColor: Color, + val primaryColor: Color, + val secondaryColor: Color, + val popupBackground: Color, + val popupForeground: Color, + val tooltipBackground: Color, + val scrollBarColor: Color, + val progressBarFill: Color, + val navTint: Color?, + val navGreyScale: Boolean, + val boost: Float + ) +} diff --git a/plugin-playground/src/main/kotlin/KondoKit/XPTable.kt b/plugin-playground/src/main/kotlin/KondoKit/XPTable.kt new file mode 100644 index 0000000..78138fe --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/XPTable.kt @@ -0,0 +1,66 @@ +package KondoKit + +import plugin.api.API +import rt4.IntNode +import rt4.Node + +object XPTable { + + private const val MAX_LEVEL = 99 + private const val INVALID_LEVEL = -1 + private const val SKILLS_XP_TABLE = 716 + + private var xpTable: MutableList = mutableListOf() + + // Lazily load the XP table from the API if it's empty + private fun loadXpTable() { + if (xpTable.isEmpty()) { + // Add the initial entry for key 1 = 0 + xpTable.add(0) + + // Fetch XP table from the API + API.GetDataMap(SKILLS_XP_TABLE).table.nodes.forEach { bucket -> + var currentNode: Node = bucket.nextNode + while (currentNode !== bucket) { + if (currentNode is IntNode) { + xpTable.add(currentNode.value) + } + currentNode = currentNode.nextNode + } + } + } + } + + fun getXpRequiredForLevel(level: Int): Int { + loadXpTable() + if (level in 1..xpTable.size) { + return xpTable[level - 1] + } + return 0 + } + + fun getLevelForXp(xp: Int): Pair { + loadXpTable() + var lowIndex = 0 + var highIndex = xpTable.size - 1 + + if (xp >= xpTable[highIndex]) { + return Pair(MAX_LEVEL, xp - xpTable[highIndex]) // Level is max or above, return the highest level + } + + while (lowIndex <= highIndex) { + val midIndex = (lowIndex + highIndex) / 2 + when { + xp < xpTable[midIndex] -> highIndex = midIndex - 1 + xp >= xpTable[midIndex + 1] -> lowIndex = midIndex + 1 + else -> { + val currentLevel = midIndex + 1 + val xpGained = xp - xpTable[midIndex] + return Pair(currentLevel, xpGained) + } + } + } + + return Pair(INVALID_LEVEL, 0) // If xp is below all defined levels + } +} diff --git a/plugin-playground/src/main/kotlin/KondoKit/XPTrackerView.kt b/plugin-playground/src/main/kotlin/KondoKit/XPTrackerView.kt new file mode 100644 index 0000000..b975194 --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/XPTrackerView.kt @@ -0,0 +1,444 @@ +package KondoKit + +import KondoKit.Helpers.addMouseListenerToAll +import KondoKit.Helpers.formatHtmlLabelText +import KondoKit.Helpers.formatNumber +import KondoKit.Helpers.getProgressBarColor +import KondoKit.Helpers.getSpriteId +import KondoKit.SpriteToBufferedImage.getBufferedImageFromSprite +import KondoKit.plugin.Companion.IMAGE_SIZE +import KondoKit.plugin.Companion.LVL_ICON +import KondoKit.plugin.Companion.POPUP_BACKGROUND +import KondoKit.plugin.Companion.POPUP_FOREGROUND +import KondoKit.plugin.Companion.TOTAL_XP_WIDGET_SIZE +import KondoKit.plugin.Companion.VIEW_BACKGROUND_COLOR +import KondoKit.plugin.Companion.WIDGET_COLOR +import KondoKit.plugin.Companion.WIDGET_SIZE +import KondoKit.plugin.Companion.playerXPMultiplier +import KondoKit.plugin.Companion.primaryColor +import KondoKit.plugin.Companion.secondaryColor +import KondoKit.plugin.StateManager.focusedView +import plugin.api.API +import java.awt.* +import java.awt.event.MouseAdapter +import java.awt.event.MouseEvent +import java.io.BufferedReader +import java.io.InputStreamReader +import java.nio.charset.StandardCharsets +import javax.swing.* + +object XPTrackerView { + private val COMBAT_SKILLS = intArrayOf(0,1,2,3,4) + val xpWidgets: MutableMap = HashMap() + var totalXPWidget: XPWidget? = null + val initialXP: MutableMap = HashMap() + var xpTrackerView: JPanel? = null + const val VIEW_NAME = "XP_TRACKER_VIEW" + + + val npcHitpointsMap: Map = try { + BufferedReader(InputStreamReader(plugin::class.java.getResourceAsStream("res/npc_hitpoints_map.json"), StandardCharsets.UTF_8)) + .useLines { lines -> + val json = lines.joinToString("\n") + val pairs = json.trim().removeSurrounding("{", "}").split(",") + val map = mutableMapOf() + + for (pair in pairs) { + val keyValue = pair.split(":") + val id = keyValue[0].trim().trim('\"').toIntOrNull() + val hitpoints = keyValue[1].trim() + + if (id != null && hitpoints.isNotEmpty()) { + map[id] = hitpoints.toIntOrNull() ?: 0 + } + } + + map + } + } catch (e: Exception) { + println("XPTracker Error parsing NPC HP: ${e.message}") + emptyMap() + } + + fun updateWidget(xpWidget: XPWidget, xp: Int) { + val (currentLevel, xpGainedSinceLastLevel) = XPTable.getLevelForXp(xp) + + var xpGainedSinceLastUpdate = xp - xpWidget.previousXp + xpWidget.totalXpGained += xpGainedSinceLastUpdate + updateTotalXPWidget(xpGainedSinceLastUpdate) + + val progress: Double + if (currentLevel >= 99) { + progress = 100.0 // Set progress to 100% if the level is 99 or above + xpWidget.xpLeftLabel.text = "" // Hide XP Left when level is 99 + xpWidget.actionsRemainingLabel.text = "" + } else { + val nextLevelXp = XPTable.getXpRequiredForLevel(currentLevel + 1) + val xpLeft = nextLevelXp - xp + progress = xpGainedSinceLastLevel.toDouble() / (nextLevelXp - XPTable.getXpRequiredForLevel(currentLevel)) * 100 + val xpLeftstr = formatNumber(xpLeft) + xpWidget.xpLeftLabel.text = formatHtmlLabelText("XP Left: ", primaryColor, xpLeftstr, secondaryColor) + if(COMBAT_SKILLS.contains(xpWidget.skillId)) { + if(LootTrackerView.lastConfirmedKillNpcId != -1 && npcHitpointsMap.isNotEmpty()) { + val npcHP = npcHitpointsMap[LootTrackerView.lastConfirmedKillNpcId] + val xpPerKill = when (xpWidget.skillId) { + 3 -> playerXPMultiplier * (npcHP ?: 1) // Hitpoints + else -> playerXPMultiplier * (npcHP ?: 1) * 4 // Combat XP for other skills + } + val remainingKills = xpLeft / xpPerKill + xpWidget.actionsRemainingLabel.text = formatHtmlLabelText("Kills: ", primaryColor, remainingKills.toString(), secondaryColor) + } + } else { + if(xpGainedSinceLastUpdate == 0) + xpGainedSinceLastUpdate = 1 // Avoid possible divide by 0 + val remainingActions = (xpLeft / xpGainedSinceLastUpdate).coerceAtLeast(1) + xpWidget.actionsRemainingLabel.text = formatHtmlLabelText("Actions: ", primaryColor, remainingActions.toString(), secondaryColor) + } + } + + val formattedXp = formatNumber(xpWidget.totalXpGained) + xpWidget.xpGainedLabel.text = formatHtmlLabelText("XP Gained: ", primaryColor, formattedXp, secondaryColor) + + // Update the progress bar with current level, progress, and next level + xpWidget.progressBar.updateProgress(progress, currentLevel, if (currentLevel < 99) currentLevel + 1 else 99, focusedView == VIEW_NAME) + + xpWidget.previousXp = xp + if (focusedView == VIEW_NAME) + xpWidget.container.repaint() + } + + + private fun updateTotalXPWidget(xpGainedSinceLastUpdate: Int) { + val totalXPWidget = totalXPWidget ?: return + totalXPWidget.totalXpGained += xpGainedSinceLastUpdate + val formattedXp = formatNumber(totalXPWidget.totalXpGained) + totalXPWidget.xpGainedLabel.text = formatHtmlLabelText("Gained: ", primaryColor, formattedXp, secondaryColor) + if (focusedView == VIEW_NAME) + totalXPWidget.container.repaint() + } + + + fun resetXPTracker(xpTrackerView : JPanel){ + + // Redo logic here + xpTrackerView.removeAll() + val popupMenu = createResetMenu() + + // Create a custom MouseListener + val rightClickListener = object : MouseAdapter() { + override fun mousePressed(e: MouseEvent) { + if (e.isPopupTrigger) { + popupMenu.show(e.component, e.x, e.y) + } + } + + override fun mouseReleased(e: MouseEvent) { + if (e.isPopupTrigger) { + popupMenu.show(e.component, e.x, e.y) + } + } + } + + // Create the XP widget + totalXPWidget = createTotalXPWidget() + val wrapped = wrappedWidget(totalXPWidget!!.container) + addMouseListenerToAll(wrapped,rightClickListener) + wrapped.addMouseListener(rightClickListener) + xpTrackerView.add(Box.createVerticalStrut(5)) + xpTrackerView.add(wrapped) + xpTrackerView.add(Box.createVerticalStrut(5)) + + initialXP.clear() + xpWidgets.clear() + + xpTrackerView.revalidate() + if (focusedView == VIEW_NAME) + xpTrackerView.repaint() + } + + fun createTotalXPWidget(): XPWidget { + val widgetPanel = Panel().apply { + layout = BorderLayout(5, 5) + background = WIDGET_COLOR + preferredSize = TOTAL_XP_WIDGET_SIZE + maximumSize = TOTAL_XP_WIDGET_SIZE + minimumSize = TOTAL_XP_WIDGET_SIZE + } + + val bufferedImageSprite = getBufferedImageFromSprite(API.GetSprite(LVL_ICON)) + + val imageContainer = Panel(FlowLayout()).apply { + preferredSize = Dimension(bufferedImageSprite.width, bufferedImageSprite.height) + maximumSize = preferredSize + minimumSize = preferredSize + size = preferredSize + } + + bufferedImageSprite.let { image -> + val imageCanvas = ImageCanvas(image).apply { + preferredSize = Dimension(bufferedImageSprite.width, bufferedImageSprite.height) + maximumSize = preferredSize + minimumSize = preferredSize + size = preferredSize + } + + imageContainer.add(imageCanvas) + imageContainer.size = Dimension(bufferedImageSprite.width, bufferedImageSprite.height) + + imageContainer.revalidate() + if(focusedView == VIEW_NAME) + imageContainer.repaint() + } + + val textPanel = Panel().apply { + layout = GridLayout(2, 1, 5, 0) + } + + val font = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + + val xpGainedLabel = JLabel( + formatHtmlLabelText("Gained: ", primaryColor, "0", secondaryColor) + ).apply { + this.horizontalAlignment = JLabel.LEFT + this.font = font + } + + val xpPerHourLabel = JLabel( + formatHtmlLabelText("XP /hr: ", primaryColor, "0", secondaryColor) + ).apply { + this.horizontalAlignment = JLabel.LEFT + this.font = font + } + + textPanel.add(xpGainedLabel) + textPanel.add(xpPerHourLabel) + + widgetPanel.add(imageContainer, BorderLayout.WEST) + widgetPanel.add(textPanel, BorderLayout.CENTER) + + return XPWidget( + skillId = -1, + container = widgetPanel, + xpGainedLabel = xpGainedLabel, + xpLeftLabel = JLabel(formatHtmlLabelText("XP Left: ", primaryColor, "0", secondaryColor)).apply { + this.horizontalAlignment = JLabel.LEFT + this.font = font + }, + xpPerHourLabel = xpPerHourLabel, + progressBar = ProgressBar(0.0, Color.BLACK), // Unused + totalXpGained = 0, + startTime = System.currentTimeMillis(), + previousXp = 0, + actionsRemainingLabel = JLabel(), + ) + } + + + fun createXPTrackerView(){ + val widgetViewPanel = JPanel().apply { + layout = BoxLayout(this, BoxLayout.Y_AXIS) + background = VIEW_BACKGROUND_COLOR + } + + val popupMenu = createResetMenu() + + // Create a custom MouseListener + val rightClickListener = object : MouseAdapter() { + override fun mousePressed(e: MouseEvent) { + if (e.isPopupTrigger) { + popupMenu.show(e.component, e.x, e.y) + } + } + + override fun mouseReleased(e: MouseEvent) { + if (e.isPopupTrigger) { + popupMenu.show(e.component, e.x, e.y) + } + } + } + + // Create the XP widget + totalXPWidget = createTotalXPWidget() + val wrapped = wrappedWidget(totalXPWidget!!.container) + addMouseListenerToAll(wrapped,rightClickListener) + wrapped.addMouseListener(rightClickListener) + widgetViewPanel.add(Box.createVerticalStrut(5)) + widgetViewPanel.add(wrapped) + widgetViewPanel.add(Box.createVerticalStrut(5)) + + xpTrackerView = widgetViewPanel + } + + + fun createResetMenu(): JPopupMenu { + // Create a popup menu + val popupMenu = JPopupMenu() + + val rFont = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + + popupMenu.background = POPUP_BACKGROUND + + // Create menu items with custom font and colors + val menuItem1 = JMenuItem("Reset Tracker").apply { + font = rFont // Set custom font + background = POPUP_BACKGROUND // Dark background for item + foreground = POPUP_FOREGROUND // Light text color for item + } + + // Add menu items to the popup menu + popupMenu.add(menuItem1) + + // Add action listeners to each menu item (optional) + menuItem1.addActionListener { plugin.registerDrawAction { resetXPTracker(xpTrackerView!!) } } + return popupMenu + } + + + fun createXPWidget(skillId: Int, previousXp: Int): XPWidget { + val widgetPanel = Panel().apply { + layout = BorderLayout(5, 5) + background = WIDGET_COLOR + preferredSize = WIDGET_SIZE + maximumSize = WIDGET_SIZE + minimumSize = WIDGET_SIZE + } + + val bufferedImageSprite = getBufferedImageFromSprite(API.GetSprite(getSpriteId(skillId))) + val imageContainer = Panel(FlowLayout()).apply { + background = WIDGET_COLOR + preferredSize = IMAGE_SIZE + maximumSize = IMAGE_SIZE + minimumSize = IMAGE_SIZE + size = IMAGE_SIZE + } + + bufferedImageSprite.let { image -> + val imageCanvas = ImageCanvas(image).apply { + background = WIDGET_COLOR + preferredSize = Dimension(image.width, image.height) + maximumSize = Dimension(image.width, image.height) + minimumSize = Dimension(image.width, image.height) + size = Dimension(image.width, image.height) // Explicitly set the size + } + + imageContainer.add(imageCanvas) + imageContainer.size = Dimension(image.width, image.height) // Ensure container respects the image size + + imageContainer.revalidate() + if(focusedView == VIEW_NAME) + imageContainer.repaint() + } + + val textPanel = Panel().apply { + layout = GridLayout(2, 2, 5, 0) + background = WIDGET_COLOR + } + + val font = Font("RuneScape Small", Font.TRUETYPE_FONT, 16) + + val xpGainedLabel = JLabel( + formatHtmlLabelText("XP Gained: ", primaryColor, "0", secondaryColor) + ).apply { + this.horizontalAlignment = JLabel.LEFT + this.font = font + } + + val xpLeftLabel = JLabel( + formatHtmlLabelText("XP Left: ", primaryColor, "0K", secondaryColor) + ).apply { + this.horizontalAlignment = JLabel.LEFT + this.font = font + } + + val xpPerHourLabel = JLabel( + formatHtmlLabelText("XP /hr: ", primaryColor, "0", secondaryColor) + ).apply { + this.horizontalAlignment = JLabel.LEFT + this.font = font + } + + val killsLabel = JLabel( + formatHtmlLabelText("Kills: ", primaryColor, "0", secondaryColor) + ).apply { + this.horizontalAlignment = JLabel.LEFT + this.font = font + } + + val levelPanel = Panel().apply { + layout = BorderLayout(5, 0) + background = WIDGET_COLOR + } + + val progressBarPanel = ProgressBar(0.0, getProgressBarColor(skillId)).apply { + preferredSize = Dimension(160, 22) + } + + levelPanel.add(progressBarPanel, BorderLayout.CENTER) + + textPanel.add(xpGainedLabel) + textPanel.add(xpLeftLabel) + textPanel.add(xpPerHourLabel) + textPanel.add(killsLabel) + + widgetPanel.add(imageContainer, BorderLayout.WEST) + widgetPanel.add(textPanel, BorderLayout.CENTER) + widgetPanel.add(levelPanel, BorderLayout.SOUTH) + + widgetPanel.revalidate() + if(focusedView == VIEW_NAME) + widgetPanel.repaint() + + return XPWidget( + skillId = skillId, + container = widgetPanel, + xpGainedLabel = xpGainedLabel, + xpLeftLabel = xpLeftLabel, + xpPerHourLabel = xpPerHourLabel, + progressBar = progressBarPanel, + totalXpGained = 0, + actionsRemainingLabel = killsLabel, + startTime = System.currentTimeMillis(), + previousXp = previousXp + ) + } + + fun wrappedWidget(component: Component, padding: Int = 7): Container { + val outerPanelSize = Dimension( + component.preferredSize.width + 2 * padding, + component.preferredSize.height + 2 * padding + ) + val outerPanel = JPanel(GridBagLayout()).apply { + background = WIDGET_COLOR + preferredSize = outerPanelSize + maximumSize = outerPanelSize + minimumSize = outerPanelSize + } + val innerPanel = JPanel(BorderLayout()).apply { + background = WIDGET_COLOR + preferredSize = component.preferredSize + maximumSize = component.preferredSize + minimumSize = component.preferredSize + add(component, BorderLayout.CENTER) + } + val gbc = GridBagConstraints().apply { + anchor = GridBagConstraints.CENTER + } + outerPanel.add(innerPanel, gbc) + return outerPanel + } +} + + + +data class XPWidget( + val container: Container, + val skillId: Int, + val xpGainedLabel: JLabel, + val xpLeftLabel: JLabel, + val xpPerHourLabel: JLabel, + val actionsRemainingLabel: JLabel, + val progressBar: ProgressBar, + var totalXpGained: Int = 0, + var startTime: Long = System.currentTimeMillis(), + var previousXp: Int = 0 +) \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/KondoKit/plugin.kt b/plugin-playground/src/main/kotlin/KondoKit/plugin.kt new file mode 100644 index 0000000..fcf4666 --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/plugin.kt @@ -0,0 +1,705 @@ +package KondoKit + +import KondoKit.Constants.COMBAT_LVL_SPRITE +import KondoKit.Helpers.formatHtmlLabelText +import KondoKit.Helpers.formatNumber +import KondoKit.Helpers.getSpriteId +import KondoKit.Helpers.showAlert +import KondoKit.HiscoresView.createHiscoreSearchView +import KondoKit.HiscoresView.hiScoreView +import KondoKit.LootTrackerView.BAG_ICON +import KondoKit.LootTrackerView.createLootTrackerView +import KondoKit.LootTrackerView.lootTrackerView +import KondoKit.LootTrackerView.npcDeathSnapshots +import KondoKit.LootTrackerView.onPostClientTick +import KondoKit.LootTrackerView.takeGroundSnapshot +import KondoKit.ReflectiveEditorView.addPlugins +import KondoKit.ReflectiveEditorView.createReflectiveEditorView +import KondoKit.ReflectiveEditorView.reflectiveEditorView +import KondoKit.SpriteToBufferedImage.getBufferedImageFromSprite +import KondoKit.Themes.Theme +import KondoKit.Themes.ThemeType +import KondoKit.Themes.getTheme +import KondoKit.XPTrackerView.createXPTrackerView +import KondoKit.XPTrackerView.createXPWidget +import KondoKit.XPTrackerView.initialXP +import KondoKit.XPTrackerView.resetXPTracker +import KondoKit.XPTrackerView.totalXPWidget +import KondoKit.XPTrackerView.updateWidget +import KondoKit.XPTrackerView.wrappedWidget +import KondoKit.XPTrackerView.xpTrackerView +import KondoKit.XPTrackerView.xpWidgets +import KondoKit.plugin.StateManager.focusedView +import plugin.Plugin +import plugin.api.* +import plugin.api.API.* +import plugin.api.FontColor.fromColor +import rt4.* +import rt4.DisplayMode +import rt4.GameShell.canvas +import rt4.GameShell.frame +import rt4.client.js5Archive8 +import rt4.client.mainLoadState +import java.awt.* +import java.awt.Font +import java.awt.event.ActionListener +import java.awt.event.MouseAdapter +import java.awt.event.MouseEvent +import javax.swing.* + + +@Target(AnnotationTarget.FIELD) +@Retention(AnnotationRetention.RUNTIME) +annotation class Exposed(val description: String = "") + +class plugin : Plugin() { + companion object { + val WIDGET_SIZE = Dimension(220, 50) + val TOTAL_XP_WIDGET_SIZE = Dimension(220, 30) + val IMAGE_SIZE = Dimension(25, 23) + + // Default Theme Colors + var WIDGET_COLOR = Color(30, 30, 30) + var TITLE_BAR_COLOR = Color(21, 21, 21) + var VIEW_BACKGROUND_COLOR = Color(40, 40, 40) + var primaryColor = Color(165, 165, 165) // Color for "XP Gained:" + var secondaryColor = Color(255, 255, 255) // Color for "0" + var POPUP_BACKGROUND = Color(45, 45, 45) + var POPUP_FOREGROUND = Color(220, 220, 220) + var TOOLTIP_BACKGROUND = Color(50,50,50) + var SCROLL_BAR_COLOR = Color(64, 64, 64) + var PROGRESS_BAR_FILL = Color(61, 56, 49) + var NAV_TINT: Color? = null + var NAV_GREYSCALE = false + var BOOST = 1f + + var appliedTheme = ThemeType.RUNELITE + + @Exposed("Theme colors for KondoKit, requires a relaunch to apply.") + var theme = ThemeType.RUNELITE + + @Exposed("Default: true, Use Local JSON or the prices from the Live/Stable server API") + var useLiveGEPrices = true + + @Exposed("Used to calculate Combat Actions until next level.") + var playerXPMultiplier = 5 + + @Exposed("Start minimized/collapsed by default") + var launchMinimized = false + + @Exposed("Default 16 on Windows, 0 Linux/macOS. If Kondo is not " + + "perfectly snapped to the edge of the game due to window chrome you can update this to fix it") + var uiOffset = 0 + + @Exposed("Stretched/Scaled Fixed Mode Support") + var useScaledFixed = false + + const val FIXED_WIDTH = 765 + const val FIXED_HEIGHT = 503 + private const val NAVBAR_WIDTH = 30 + private const val MAIN_CONTENT_WIDTH = 242 + private const val WRENCH_ICON = 907 + private const val LOOT_ICON = 777 + private const val MAG_SPRITE = 1423 + const val LVL_ICON = 898 + private lateinit var cardLayout: CardLayout + private lateinit var mainContentPanel: JPanel + private var rightPanelWrapper: JScrollPane? = null + private var accumulatedTime = 0L + private var reloadInterfaces = false + private const val TICK_INTERVAL = 600L + private var pluginsReloaded = false + private var loginScreen = 160 + private var lastLogin = "" + private var initialized = false + private var lastClickTime = 0L + private var lastUIOffset = 0 + private var themeName = "RUNELITE" + private const val HIDDEN_VIEW = "HIDDEN" + private var altCanvas: AltCanvas? = null + private val drawActions = mutableListOf<() -> Unit>() + + fun registerDrawAction(action: () -> Unit) { + synchronized(drawActions) { + drawActions.add(action) + } + } + } + + override fun Init() { + // Disable Font AA + System.setProperty("sun.java2d.opengl", "false") + System.setProperty("awt.useSystemAAFontSettings", "off") + System.setProperty("swing.aatext", "false") + } + + override fun OnLogin() { + if (lastLogin != "" && lastLogin != Player.usernameInput.toString()) { + // if we logged in with a new character + // we need to reset the trackers + xpTrackerView?.let { resetXPTracker(it) } + } + lastLogin = Player.usernameInput.toString() + } + + override fun OnMiniMenuCreate(currentEntries: Array?) { + if (currentEntries != null) { + for ((index, entry) in currentEntries.withIndex()) { + if (entry.type == MiniMenuType.PLAYER && index == currentEntries.size - 1) { + val input = entry.subject + // Trim spaces, clean up tags, and remove the level info + val cleanedInput = input + .trim() // Remove any leading/trailing spaces + .replace(Regex(""), "") // Remove color tags + .replace(Regex(""), "") // Remove image tags + .replace(Regex("\\(level: \\d+\\)"), "") // Remove level text e.g. (level: 44) + .trim() // Trim again to remove extra spaces after removing level text + + // Proceed with the full cleaned username + InsertMiniMenuEntry("Lookup", entry.subject, searchHiscore(cleanedInput)) + } + } + } + } + + override fun OnPluginsReloaded(): Boolean { + if (!initialized) return true + updateDisplaySettings() + frame.remove(rightPanelWrapper) + frame.layout = BorderLayout() + rightPanelWrapper?.let { frame.add(it, BorderLayout.EAST) } + frame.revalidate() + pluginsReloaded = true + reloadInterfaces = true + return true + } + + override fun OnXPUpdate(skillId: Int, xp: Int) { + if (!initialXP.containsKey(skillId)) { + initialXP[skillId] = xp + return + } + var xpWidget = xpWidgets[skillId] + if (xpWidget != null) { + updateWidget(xpWidget, xp) + } else { + val previousXp = initialXP[skillId] ?: xp + if (xp == initialXP[skillId]) return + + xpWidget = createXPWidget(skillId, previousXp) + xpWidgets[skillId] = xpWidget + + xpTrackerView?.add(wrappedWidget(xpWidget.container)) + xpTrackerView?.add(Box.createVerticalStrut(5)) + + if(focusedView == XPTrackerView.VIEW_NAME) { + xpTrackerView?.revalidate() + xpTrackerView?.repaint() + } + + updateWidget(xpWidget, xp) + } + } + + override fun Draw(timeDelta: Long) { + if (GlRenderer.enabled && GlRenderer.canvasWidth != GameShell.canvasWidth) { + GlRenderer.canvasWidth = GameShell.canvasWidth + GlRenderer.setViewportBounds(0, 0, GameShell.canvasWidth, GameShell.canvasHeight) + } + + if (pluginsReloaded) { + reflectiveEditorView?.let { addPlugins(it) } + pluginsReloaded = false + } + + if (reloadInterfaces){ + InterfaceList.method3712(true) // Gets the resize working correctly + reloadInterfaces = false + } + + accumulatedTime += timeDelta + if (accumulatedTime >= TICK_INTERVAL) { + lootTrackerView?.let { onPostClientTick(it) } + accumulatedTime = 0L + } + + // Draw synced actions (that require to be done between glBegin and glEnd) + if (drawActions.isNotEmpty()) { + synchronized(drawActions) { + val actionsCopy = drawActions.toList() + drawActions.clear() + for (action in actionsCopy) { + action() + } + } + } + + // Init in the draw call so we know we are between glBegin and glEnd for HD + if(!initialized && mainLoadState >= loginScreen) { + initKondoUI() + } + } + + override fun LateDraw(timeDelta: Long) { + if (!initialized) return + if(GameShell.fullScreenFrame != null) { + DisplayMode.setWindowMode(true, 0, FIXED_WIDTH, FIXED_HEIGHT) + showAlert("Fullscreen is not supported by KondoKit. Disable the plugin first.", + "Error", + JOptionPane.INFORMATION_MESSAGE + ) + return + } + if(!useScaledFixed) return + if(GetWindowMode() == WindowMode.FIXED){ + moveAltCanvasToFront() + } else { + moveCanvasToFront() + } + altCanvas?.updateGameImage() // Update the game image as needed + } + + override fun Update() { + + val widgets = xpWidgets.values + val totalXP = totalXPWidget + + widgets.forEach { xpWidget -> + val elapsedTime = (System.currentTimeMillis() - xpWidget.startTime) / 1000.0 / 60.0 / 60.0 + val xpPerHour = if (elapsedTime > 0) (xpWidget.totalXpGained / elapsedTime).toInt() else 0 + val formattedXpPerHour = formatNumber(xpPerHour) + xpWidget.xpPerHourLabel.text = + formatHtmlLabelText("XP /hr: ", primaryColor, formattedXpPerHour, secondaryColor) + xpWidget.container.repaint() + } + + totalXP?.let { totalXPWidget -> + val elapsedTime = (System.currentTimeMillis() - totalXPWidget.startTime) / 1000.0 / 60.0 / 60.0 + val totalXPPerHour = if (elapsedTime > 0) (totalXPWidget.totalXpGained / elapsedTime).toInt() else 0 + val formattedTotalXpPerHour = formatNumber(totalXPPerHour) + totalXPWidget.xpPerHourLabel.text = + formatHtmlLabelText("XP /hr: ", primaryColor, formattedTotalXpPerHour, secondaryColor) + totalXPWidget.container.repaint() + } + } + + override fun OnKillingBlowNPC(npcID: Int, x: Int, z: Int) { + val preDeathSnapshot = takeGroundSnapshot(Pair(x,z)) + npcDeathSnapshots[npcID] = LootTrackerView.GroundSnapshot(preDeathSnapshot, Pair(x, z), 0) + } + + private fun allSpritesLoaded() : Boolean { + // Check all skill sprites + try{ + for (i in 0 until 24) { + if(!js5Archive8.isFileReady(getSpriteId(i))){ + return false + } + } + val otherIcons = arrayOf(LVL_ICON, MAG_SPRITE, LOOT_ICON, WRENCH_ICON, COMBAT_LVL_SPRITE, BAG_ICON) + for (icon in otherIcons) { + if(!js5Archive8.isFileReady(icon)){ + return false + } + } + } catch (e : Exception){ + return false + } + return true + } + + private fun updateDisplaySettings() { + val mode = GetWindowMode() + val currentScrollPaneWidth = if (mainContentPanel.isVisible) NAVBAR_WIDTH + MAIN_CONTENT_WIDTH else NAVBAR_WIDTH + lastUIOffset = uiOffset + + if(mode != WindowMode.FIXED) { + destroyAltCanvas() + } else if (useScaledFixed && altCanvas == null) { + initAltCanvas() + } + + when (mode) { + WindowMode.FIXED -> { + if (frame.width < FIXED_WIDTH + currentScrollPaneWidth + uiOffset) { + frame.setSize(FIXED_WIDTH + currentScrollPaneWidth + uiOffset, frame.height) + } + + val difference = frame.width - (uiOffset + currentScrollPaneWidth) + + if (useScaledFixed) { + GameShell.leftMargin = 0 + val canvasWidth = difference + uiOffset / 2 + val canvasHeight = frame.height - canvas.y // Restricting height to frame height + + altCanvas?.size = Dimension(canvasWidth, canvasHeight) + altCanvas?.setLocation(0, canvas.y) + canvas.setLocation(0, canvas.y) + } else { + val difference = frame.width - (FIXED_WIDTH + uiOffset + currentScrollPaneWidth) + GameShell.leftMargin = difference / 2 + } + } + + WindowMode.RESIZABLE -> { + GameShell.canvasWidth = frame.width - (currentScrollPaneWidth + uiOffset) + } + } + + rightPanelWrapper?.preferredSize = Dimension(currentScrollPaneWidth, frame.height) + rightPanelWrapper?.isDoubleBuffered = true + rightPanelWrapper?.revalidate() + rightPanelWrapper?.repaint() + } + + fun OnKondoValueUpdated(){ + StoreData("kondoUseRemoteGE", useLiveGEPrices) + StoreData("kondoTheme", theme.toString()) + if(appliedTheme != theme) { + showAlert( + "KondoKit Theme changes require a relaunch.", + "KondoKit", + JOptionPane.INFORMATION_MESSAGE + ) + } + StoreData("kondoPlayerXPMultiplier", playerXPMultiplier) + LootTrackerView.gePriceMap = LootTrackerView.loadGEPrices() + StoreData("kondoLaunchMinimized", launchMinimized) + StoreData("kondoUIOffset", uiOffset) + StoreData("kondoScaledFixed", useScaledFixed) + if(lastUIOffset != uiOffset){ + reloadInterfaces = true + } + updateDisplaySettings() + } + + private fun initAltCanvas(){ + if(GetWindowMode() != WindowMode.FIXED || altCanvas != null) return + if (frame != null) { + altCanvas = AltCanvas().apply { + preferredSize = Dimension(FIXED_WIDTH, FIXED_HEIGHT) + } + altCanvas?.let { frame.add(it) } + moveAltCanvasToFront() + frame.setComponentZOrder(rightPanelWrapper, 2) + } + } + + private fun destroyAltCanvas(){ + if (altCanvas == null) return + moveCanvasToFront() + frame.remove(altCanvas) + altCanvas = null + } + + private fun moveAltCanvasToFront(){ + if (altCanvas == null) return + frame.setComponentZOrder(canvas, 2) + frame.setComponentZOrder(altCanvas, 1) + frame.setComponentZOrder(rightPanelWrapper, 0) + } + + private fun moveCanvasToFront(){ + if (altCanvas == null) return + frame.setComponentZOrder(altCanvas, 2) + frame.setComponentZOrder(canvas, 1) + frame.setComponentZOrder(rightPanelWrapper, 0) + } + + private fun searchHiscore(username: String): Runnable { + return Runnable { + setActiveView(HiscoresView.VIEW_NAME) + val customSearchField = hiScoreView?.let { HiscoresView.CustomSearchField(it) } + + customSearchField?.searchPlayer(username) ?: run { + println("searchView is null or CustomSearchField creation failed.") + } + } + } + + private fun restoreSettings(){ + themeName = (GetData("kondoTheme") as? String) ?: "RUNELITE" + useLiveGEPrices = (GetData("kondoUseRemoteGE") as? Boolean) ?: true + playerXPMultiplier = (GetData("kondoPlayerXPMultiplier") as? Int) ?: 5 + val osName = System.getProperty("os.name").toLowerCase() + uiOffset = (GetData("kondoUIOffset") as? Int) ?: if (osName.contains("win")) 16 else 0 + launchMinimized = (GetData("kondoLaunchMinimized") as? Boolean) ?: false + useScaledFixed = (GetData("kondoScaledFixed") as? Boolean) ?: false + } + + private fun initKondoUI(){ + DrawText(FontType.LARGE, fromColor(Color(16777215)), TextModifier.CENTER, "KondoKit Loading Sprites...", GameShell.canvasWidth/2, GameShell.canvasHeight/2) + if(!allSpritesLoaded()) return + val frame: Frame? = GameShell.frame + if (frame != null) { + restoreSettings() + theme = ThemeType.valueOf(themeName) + applyTheme(getTheme(theme)) + appliedTheme = theme + configureLookAndFeel() + + cardLayout = CardLayout() + mainContentPanel = JPanel(cardLayout).apply { + border = BorderFactory.createEmptyBorder(0, 0, 0, 0) // Removes any default border or padding + background = VIEW_BACKGROUND_COLOR + preferredSize = Dimension(MAIN_CONTENT_WIDTH, frame.height) + isOpaque = true + } + + // Register Views + createXPTrackerView() + createHiscoreSearchView() + createLootTrackerView() + createReflectiveEditorView() + + mainContentPanel.add(ScrollablePanel(xpTrackerView!!), XPTrackerView.VIEW_NAME) + mainContentPanel.add(ScrollablePanel(hiScoreView!!), HiscoresView.VIEW_NAME) + mainContentPanel.add(ScrollablePanel(lootTrackerView!!), LootTrackerView.VIEW_NAME) + mainContentPanel.add(ScrollablePanel(reflectiveEditorView!!), ReflectiveEditorView.VIEW_NAME) + + val navPanel = Panel().apply { + layout = BoxLayout(this, BoxLayout.Y_AXIS) + background = WIDGET_COLOR + preferredSize = Dimension(NAVBAR_WIDTH, frame.height) + } + + navPanel.add(createNavButton(LVL_ICON, XPTrackerView.VIEW_NAME)) + navPanel.add(createNavButton(MAG_SPRITE, HiscoresView.VIEW_NAME)) + navPanel.add(createNavButton(LOOT_ICON, LootTrackerView.VIEW_NAME)) + navPanel.add(createNavButton(WRENCH_ICON, ReflectiveEditorView.VIEW_NAME)) + + val rightPanel = Panel(BorderLayout()).apply { + add(mainContentPanel, BorderLayout.CENTER) + add(navPanel, BorderLayout.EAST) + } + + rightPanelWrapper = JScrollPane(rightPanel).apply { + preferredSize = Dimension(NAVBAR_WIDTH + MAIN_CONTENT_WIDTH, frame.height) + background = VIEW_BACKGROUND_COLOR + border = BorderFactory.createEmptyBorder() + horizontalScrollBarPolicy = JScrollPane.HORIZONTAL_SCROLLBAR_NEVER + verticalScrollBarPolicy = JScrollPane.VERTICAL_SCROLLBAR_NEVER + } + + frame.layout = BorderLayout() + rightPanelWrapper?.let { + frame.add(it, BorderLayout.EAST) + } + + if(launchMinimized){ + setActiveView(HIDDEN_VIEW) + } else { + setActiveView(XPTrackerView.VIEW_NAME) + } + initialized = true + pluginsReloaded = true + } + } + + private fun setActiveView(viewName: String) { + // Handle the visibility of the main content panel + if (viewName == HIDDEN_VIEW) { + mainContentPanel.isVisible = false + } else { + if (!mainContentPanel.isVisible) { + mainContentPanel.isVisible = true + } + cardLayout.show(mainContentPanel, viewName) + } + + reloadInterfaces = true + updateDisplaySettings() + + // Revalidate and repaint necessary panels + mainContentPanel.revalidate() + rightPanelWrapper?.revalidate() + frame?.revalidate() + + mainContentPanel.repaint() + rightPanelWrapper?.repaint() + frame?.repaint() + + focusedView = viewName + } + + private fun createNavButton(spriteId: Int, viewName: String): JPanel { + val bufferedImageSprite = getBufferedImageFromSprite(GetSprite(spriteId), NAV_TINT, NAV_GREYSCALE, BOOST) + val buttonSize = Dimension(NAVBAR_WIDTH, 32) + val imageSize = Dimension((bufferedImageSprite.width / 1.2f).toInt(), (bufferedImageSprite.height / 1.2f).toInt()) + val cooldownDuration = 100L + + val actionListener = ActionListener { + val currentTime = System.currentTimeMillis() + if (currentTime - lastClickTime < cooldownDuration) { + return@ActionListener + } + lastClickTime = currentTime + + if (focusedView == viewName) { + setActiveView("HIDDEN") + } else { + setActiveView(viewName) + } + } + + // ImageCanvas with forced size + val imageCanvas = ImageCanvas(bufferedImageSprite).apply { + background = WIDGET_COLOR + preferredSize = imageSize + maximumSize = imageSize + minimumSize = imageSize + } + + // Wrapping the ImageCanvas in another JPanel to prevent stretching + val imageCanvasWrapper = JPanel().apply { + layout = GridBagLayout() // Keeps the layout of the wrapped panel minimal + preferredSize = imageSize + maximumSize = imageSize + minimumSize = imageSize + isOpaque = false // No background for the wrapper + add(imageCanvas) // Adding ImageCanvas directly, layout won't stretch it + } + + val panelButton = JPanel().apply { + layout = GridBagLayout() + preferredSize = buttonSize + maximumSize = buttonSize + minimumSize = buttonSize + background = WIDGET_COLOR + isOpaque = true + + val gbc = GridBagConstraints().apply { + anchor = GridBagConstraints.CENTER + fill = GridBagConstraints.NONE // Prevents stretching + } + + add(imageCanvasWrapper, gbc) + + // Hover and click behavior + val hoverListener = object : MouseAdapter() { + override fun mouseEntered(e: MouseEvent?) { + background = WIDGET_COLOR.darker() + imageCanvas.fillColor = WIDGET_COLOR.darker() + imageCanvas.repaint() + repaint() + } + + override fun mouseExited(e: MouseEvent?) { + background = WIDGET_COLOR + imageCanvas.fillColor = WIDGET_COLOR + imageCanvas.repaint() + repaint() + } + + override fun mouseClicked(e: MouseEvent?) { + actionListener.actionPerformed(null) + } + } + + addMouseListener(hoverListener) + imageCanvas.addMouseListener(hoverListener) + } + + return panelButton + } + + private fun configureLookAndFeel(){ + loadFont() + try { + UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel") + + // Modify the UI properties to match theme + UIManager.put("control", VIEW_BACKGROUND_COLOR) + UIManager.put("info", VIEW_BACKGROUND_COLOR) + UIManager.put("nimbusBase", WIDGET_COLOR) + UIManager.put("nimbusBlueGrey", TITLE_BAR_COLOR) + + UIManager.put("nimbusDisabledText", primaryColor) + UIManager.put("nimbusSelectedText", secondaryColor) + UIManager.put("text", secondaryColor) + + UIManager.put("nimbusFocus", TITLE_BAR_COLOR) + UIManager.put("nimbusInfoBlue", POPUP_BACKGROUND) + UIManager.put("nimbusLightBackground", WIDGET_COLOR) + UIManager.put("nimbusSelectionBackground", PROGRESS_BAR_FILL) + + UIManager.put("Button.background", WIDGET_COLOR) + UIManager.put("Button.foreground", secondaryColor) + + UIManager.put("CheckBox.background", VIEW_BACKGROUND_COLOR) + UIManager.put("CheckBox.foreground", secondaryColor) + UIManager.put("CheckBox.icon", UIManager.getIcon("CheckBox.icon")) + + UIManager.put("ComboBox.background", WIDGET_COLOR) + UIManager.put("ComboBox.foreground", secondaryColor) + UIManager.put("ComboBox.selectionBackground", PROGRESS_BAR_FILL) + UIManager.put("ComboBox.selectionForeground", primaryColor) + UIManager.put("ComboBox.buttonBackground", WIDGET_COLOR) + + UIManager.put("Spinner.background", WIDGET_COLOR) + UIManager.put("Spinner.foreground", secondaryColor) + UIManager.put("Spinner.border", BorderFactory.createLineBorder(TITLE_BAR_COLOR)) + + UIManager.put("TextField.background", WIDGET_COLOR) + UIManager.put("TextField.foreground", secondaryColor) + UIManager.put("TextField.caretForeground", secondaryColor) + UIManager.put("TextField.border", BorderFactory.createLineBorder(TITLE_BAR_COLOR)) + + UIManager.put("ScrollBar.thumb", WIDGET_COLOR) + UIManager.put("ScrollBar.track", VIEW_BACKGROUND_COLOR) + UIManager.put("ScrollBar.thumbHighlight", TITLE_BAR_COLOR) + + UIManager.put("ProgressBar.foreground", PROGRESS_BAR_FILL) + UIManager.put("ProgressBar.background", WIDGET_COLOR) + UIManager.put("ProgressBar.border", BorderFactory.createLineBorder(TITLE_BAR_COLOR)) + + UIManager.put("ToolTip.background", VIEW_BACKGROUND_COLOR) + UIManager.put("ToolTip.foreground", secondaryColor) + UIManager.put("ToolTip.border", BorderFactory.createLineBorder(TITLE_BAR_COLOR)) + + // Update component tree UI to apply the new theme + SwingUtilities.updateComponentTreeUI(frame) + frame.background = Color.BLACK + } catch (e : Exception) { + e.printStackTrace() + } + } + + private fun loadFont(): Font? { + val fontStream = plugin::class.java.getResourceAsStream("res/runescape_small.ttf") + return if (fontStream != null) { + try { + val font = Font.createFont(Font.TRUETYPE_FONT, fontStream) + val ge = GraphicsEnvironment.getLocalGraphicsEnvironment() + ge.registerFont(font) // Register the font in the graphics environment + font + } catch (e: Exception) { + e.printStackTrace() + null + } + } else { + println("Font not found!") + null + } + } + + object StateManager { + var focusedView: String = "" + } + + private fun applyTheme(theme: Theme) { + WIDGET_COLOR = theme.widgetColor + TITLE_BAR_COLOR = theme.titleBarColor + VIEW_BACKGROUND_COLOR = theme.viewBackgroundColor + primaryColor = theme.primaryColor + secondaryColor = theme.secondaryColor + POPUP_BACKGROUND = theme.popupBackground + POPUP_FOREGROUND = theme.popupForeground + TOOLTIP_BACKGROUND = theme.tooltipBackground + SCROLL_BAR_COLOR = theme.scrollBarColor + PROGRESS_BAR_FILL = theme.progressBarFill + NAV_TINT = theme.navTint + NAV_GREYSCALE = theme.navGreyScale + BOOST = theme.boost + } +} diff --git a/plugin-playground/src/main/kotlin/KondoKit/plugin.properties b/plugin-playground/src/main/kotlin/KondoKit/plugin.properties new file mode 100644 index 0000000..629c117 --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='downthecrop' +DESCRIPTION='A plugin that adds a right-side panel with custom widgets and navigation.' +VERSION=2.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/KondoKit/res/item_configs.json b/plugin-playground/src/main/kotlin/KondoKit/res/item_configs.json new file mode 100644 index 0000000..c1bff50 --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/res/item_configs.json @@ -0,0 +1,130818 @@ +[ + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "The body of a Dwarf savaged by Goblins.", + "durability": null, + "name": "Dwarf remains", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "two_handed": "true", + "id": "0" + }, + { + "destroy_message": "I got this from Captain Lawgof.", + "shop_price": "1", + "examine": "Good for repairing a broken cannon.", + "durability": null, + "name": "Toolkit", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "Ammo for the Dwarf Cannon.", + "grand_exchange_price": "381", + "durability": null, + "name": "Cannonball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2" + }, + { + "shop_price": "1", + "examine": "Construction notes for Dwarf cannon ammo.", + "durability": null, + "name": "Nulodion's notes", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "3" + }, + { + "requirements": "{13,35}", + "shop_price": "5", + "examine": "Used to make cannon ammunition.", + "name": "Ammo mould", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "4" + }, + { + "shop_price": "20", + "examine": "An old note book.", + "durability": null, + "name": "Instruction manual", + "weight": "0.51", + "archery_ticket_price": "0", + "id": "5" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "The cannon is built on this.", + "grand_exchange_price": "189000", + "durability": null, + "name": "Cannon base", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "6" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "189000", + "durability": null, + "name": "Cannon base", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "The mounting for the multicannon.", + "grand_exchange_price": "185000", + "durability": null, + "name": "Cannon stand", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "8" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "185000", + "durability": null, + "name": "Cannon stand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "The barrels for the multicannon.", + "grand_exchange_price": "187000", + "durability": null, + "name": "Cannon barrels", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "10" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "187000", + "durability": null, + "name": "Cannon barrels", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "examine": "This powers the multicannon.", + "grand_exchange_price": "175200", + "durability": null, + "name": "Cannon furnace", + "tradeable": "true", + "weight": "7", + "archery_ticket_price": "0", + "id": "12" + }, + { + "shop_price": "187500", + "ge_buy_limit": "10", + "grand_exchange_price": "175200", + "durability": null, + "name": "Cannon furnace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13" + }, + { + "shop_price": "1", + "examine": "A metal railing replacement.", + "durability": null, + "name": "Railing", + "archery_ticket_price": "0", + "id": "14" + }, + { + "examine": "A cloth given to me by Sir Galahad.", + "durability": null, + "name": "Holy table napkin", + "archery_ticket_price": "0", + "id": "15" + }, + { + "examine": "A small tin whistle.", + "durability": null, + "name": "Magic whistle", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "16" + }, + { + "examine": "I wonder what happens when I ring it?", + "durability": null, + "name": "Grail bell", + "archery_ticket_price": "0", + "id": "17" + }, + { + "examine": "It will point the way for me.", + "durability": null, + "name": "Magic gold feather", + "archery_ticket_price": "0", + "id": "18" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "White cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "20" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "Black cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "21" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "Blue cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "22" + }, + { + "examine": "A cog from some machinery.", + "durability": null, + "name": "Red cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "23" + }, + { + "examine": "Doesn't look very tasty.", + "durability": null, + "name": "Rat poison", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "24" + }, + { + "examine": "Wormy.", + "durability": null, + "name": "Red vine worm", + "archery_ticket_price": "0", + "id": "25" + }, + { + "examine": "Hemenster fishing contest trophy.", + "durability": null, + "name": "Fishing trophy", + "archery_ticket_price": "0", + "id": "26" + }, + { + "examine": "Pass to the Hemenster fishing contest.", + "durability": null, + "name": "Fishing pass", + "archery_ticket_price": "0", + "id": "27" + }, + { + "shop_price": "121", + "examine": "Drives away all known 6 legged creatures.", + "durability": null, + "name": "Insect repellent", + "archery_ticket_price": "0", + "id": "28" + }, + { + "examine": "It's a bucket of wax.", + "durability": null, + "name": "Bucket of wax", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "30" + }, + { + "examine": "You shouldn't have this.", + "name": "RDT Slot", + "id": "31" + }, + { + "shop_price": "3", + "examine": "A spooky candle.", + "durability": null, + "name": "Lit black candle", + "archery_ticket_price": "0", + "id": "32" + }, + { + "shop_price": "24", + "examine": "A candle.", + "grand_exchange_price": "104", + "durability": null, + "name": "Lit candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "33" + }, + { + "shop_price": "24", + "examine": "A candle.", + "grand_exchange_price": "104", + "durability": null, + "name": "Lit candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "34" + }, + { + "shop_price": "200", + "examine": "This used to belong to King Arthur.", + "has_special": "true", + "durability": null, + "weight": "2.2", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "attack_audios": "2500,2500,2517,2500", + "name": "Excalibur", + "archery_ticket_price": "0", + "id": "35", + "bonuses": "20,29,-2,0,0,0,3,2,1,0,0,25,0,0,0" + }, + { + "shop_price": "24", + "ge_buy_limit": "100", + "examine": "A candle.", + "grand_exchange_price": "119", + "durability": null, + "name": "Candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "36" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "119", + "durability": null, + "name": "Candle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "37" + }, + { + "shop_price": "3", + "examine": "A spooky candle.", + "durability": null, + "name": "Black candle", + "archery_ticket_price": "0", + "id": "38" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "16", + "durability": null, + "name": "Bronze arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "39" + }, + { + "shop_price": "26", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "23", + "durability": null, + "name": "Iron arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "40" + }, + { + "shop_price": "36", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "63", + "durability": null, + "name": "Steel arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "41" + }, + { + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "74", + "durability": null, + "name": "Mithril arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "42" + }, + { + "shop_price": "160", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "185", + "durability": null, + "name": "Adamant arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "43" + }, + { + "shop_price": "460", + "ge_buy_limit": "10000", + "examine": "I can make an arrow with these.", + "grand_exchange_price": "839", + "durability": null, + "name": "Rune arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "44" + }, + { + "ge_buy_limit": "10000", + "examine": "Opal bolt tips.", + "grand_exchange_price": "1", + "durability": null, + "name": "Opal bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "45" + }, + { + "ge_buy_limit": "10000", + "examine": "Pearl bolt tips.", + "grand_exchange_price": "5", + "durability": null, + "name": "Pearl bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "46" + }, + { + "shop_price": "114", + "ge_buy_limit": "10000", + "examine": "I can make bolts with these.", + "grand_exchange_price": "44", + "durability": null, + "name": "Barb bolttips", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "5", + "id": "47" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung longbow; I need a bowstring for this.", + "grand_exchange_price": "14", + "durability": null, + "name": "Longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "48" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "14", + "durability": null, + "name": "Longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "49" + }, + { + "ge_buy_limit": "10000", + "examine": "I need to find a string for this.", + "grand_exchange_price": "5", + "durability": null, + "name": "Shortbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "50" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5", + "durability": null, + "name": "Shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "51" + }, + { + "ge_buy_limit": "20000", + "examine": "A wooden arrow shaft", + "grand_exchange_price": "21", + "durability": null, + "name": "Arrow shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "52" + }, + { + "ge_buy_limit": "20000", + "examine": "A wooden arrow shaft with flights attached.", + "grand_exchange_price": "56", + "durability": null, + "name": "Headless arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "53" + }, + { + "shop_price": "50", + "ge_buy_limit": "10000", + "examine": "An unstrung oak bow; I need a bowstring for this.", + "grand_exchange_price": "7", + "durability": null, + "name": "Oak shortbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "54" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7", + "durability": null, + "name": "Oak shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "55" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung oak longbow; I need a bowstring for this.", + "grand_exchange_price": "20", + "durability": null, + "name": "Oak longbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "56" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "20", + "durability": null, + "name": "Oak longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "57" + }, + { + "shop_price": "64", + "ge_buy_limit": "10000", + "examine": "An unstrung willow longbow; I need a bowstring for this.", + "grand_exchange_price": "46", + "durability": null, + "name": "Willow longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "58" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "46", + "durability": null, + "name": "Willow longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "59" + }, + { + "shop_price": "16", + "ge_buy_limit": "10000", + "examine": "An unstrung willow shortbow; I need a bowstring for this.", + "grand_exchange_price": "20", + "durability": null, + "name": "Willow shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "60" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "20", + "durability": null, + "name": "Willow shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "61" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung maple bow; I need a bowstring for this.", + "grand_exchange_price": "94", + "durability": null, + "name": "Maple longbow (u)", + "tradeable": "true", + "weight": "1.2", + "archery_ticket_price": "0", + "id": "62" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "94", + "durability": null, + "name": "Maple longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "63" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung maple bow; I need a bowstring for this.", + "grand_exchange_price": "56", + "durability": null, + "name": "Maple shortbow (u)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "64" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "56", + "durability": null, + "name": "Maple shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "65" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung yew longbow; I need a bowstring for this.", + "grand_exchange_price": "468", + "durability": null, + "name": "Yew longbow (u)", + "tradeable": "true", + "weight": "1.32", + "archery_ticket_price": "0", + "id": "66" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "468", + "durability": null, + "name": "Yew longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "67" + }, + { + "ge_buy_limit": "10000", + "examine": "An unstrung yew shortbow; I need a bowstring for this.", + "grand_exchange_price": "158", + "durability": null, + "name": "Yew shortbow (u)", + "tradeable": "true", + "weight": "1.32", + "archery_ticket_price": "0", + "id": "68" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "158", + "durability": null, + "name": "Yew shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "69" + }, + { + "shop_price": "931", + "ge_buy_limit": "10000", + "examine": "An unstrung magic longbow; I need a bowstring for this.", + "grand_exchange_price": "1246", + "durability": null, + "name": "Magic longbow (u)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "70" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1246", + "durability": null, + "name": "Magic longbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "71" + }, + { + "shop_price": "890", + "ge_buy_limit": "10000", + "examine": "An unstrung magic shortbow; I need a bowstring for this.", + "grand_exchange_price": "745", + "durability": null, + "name": "Magic shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "72" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "745", + "durability": null, + "name": "Magic shortbow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "73" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "A helmet, as worn by the minions of General Khazard.", + "durability": null, + "weight": "2.7", + "destroy": "true", + "equipment_slot": "0", + "destroy_message": "I can borrow another from the armoury near the Fight Arena.", + "name": "Khazard helmet", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "74", + "bonuses": "0,0,0,0,0,4,5,3,0,0,0,0,0,0,0" + }, + { + "shop_price": "12", + "examine": "Armour, as worn by the minions of General Khazard.", + "durability": null, + "weight": "0.5", + "destroy": "true", + "equipment_slot": "4", + "destroy_message": "I can borrow another from the armoury near the Fight Arena.", + "remove_sleeves": "true", + "name": "Khazard armour", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "75", + "bonuses": "0,0,0,0,0,9,11,10,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The lazy guard probably has a spare set...", + "examine": "These keys open the cells at the Khazard Fight Arena. (Fight Arena)", + "durability": null, + "name": "Khazard cell keys", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "76" + }, + { + "destroy_message": "Angor, the Khazard barman, has a stock of Khali brew.", + "shop_price": "5", + "examine": "A bottle of Khazard's worst brew.", + "durability": null, + "name": "Khali brew", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "77" + }, + { + "destroy_message": "Can only be fired from yew, magic, dark or twisted bows.", + "shop_price": "2", + "examine": "Can only be fired from yew, magic, or dark bows.", + "durability": null, + "name": "Ice arrows", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "78", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "The power in this staff causes it to vibrate gently.", + "durability": null, + "name": "Staff of armadyl", + "tradeable": "false", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "84", + "render_anim": "2553" + }, + { + "examine": "It catches the light! (Temple of Ikov)", + "durability": null, + "name": "Shiny key", + "archery_ticket_price": "0", + "id": "85" + }, + { + "examine": "An amulet made by Lucien.", + "durability": null, + "name": "Pendant of lucien", + "archery_ticket_price": "0", + "id": "86", + "equipment_slot": "2" + }, + { + "examine": "Yet another amulet.", + "durability": null, + "name": "Armadyl pendant", + "archery_ticket_price": "0", + "id": "87", + "equipment_slot": "2" + }, + { + "examine": "Magic boots that make you lighter than normal.", + "durability": null, + "name": "Boots of lightness", + "weight": "-4.5", + "archery_ticket_price": "0", + "id": "88", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Magic boots that make you lighter than normal.", + "durability": null, + "name": "Boots of lightness", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "89", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "It's very soft!", + "durability": null, + "name": "Child's blanket", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "90" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this guam potion.", + "grand_exchange_price": "285", + "durability": null, + "name": "Guam potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "91" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "285", + "durability": null, + "name": "Guam potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "92" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this marrentill potion.", + "grand_exchange_price": "43", + "durability": null, + "name": "Marrentill potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "93" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43", + "durability": null, + "name": "Marrentill potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "94" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this tarromin potion.", + "grand_exchange_price": "287", + "durability": null, + "name": "Tarromin potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "95" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "287", + "durability": null, + "name": "Tarromin potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "96" + }, + { + "shop_price": "64", + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this potion.", + "grand_exchange_price": "435", + "durability": null, + "name": "Harralander potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "97" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "435", + "durability": null, + "name": "Harralander potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "98" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this ranarr potion.", + "grand_exchange_price": "4823", + "durability": null, + "name": "Ranarr potion(unf)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "99" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4823", + "durability": null, + "name": "Ranarr potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "100" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this irit potion.", + "grand_exchange_price": "2243", + "durability": null, + "name": "Irit potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "101" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2243", + "durability": null, + "name": "Irit potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "102" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this avantoe potion.", + "grand_exchange_price": "3831", + "durability": null, + "name": "Avantoe potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "103" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3831", + "durability": null, + "name": "Avantoe potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "104" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this kwuarm potion.", + "grand_exchange_price": "1833", + "durability": null, + "name": "Kwuarm potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "105" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1833", + "durability": null, + "name": "Kwuarm potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "106" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this cadantine potion.", + "grand_exchange_price": "1844", + "durability": null, + "name": "Cadantine potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "107" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1844", + "durability": null, + "name": "Cadantine potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "108" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this dwarf weed potion.", + "grand_exchange_price": "6740", + "durability": null, + "name": "Dwarf weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "109" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6740", + "durability": null, + "name": "Dwarf weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "110" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this torstol potion.", + "grand_exchange_price": "14500", + "durability": null, + "name": "Torstol potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "111" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14500", + "durability": null, + "name": "Torstol potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "112" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "4 doses of Strength potion.", + "grand_exchange_price": "1041", + "durability": null, + "name": "Strength potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "113" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1041", + "durability": null, + "name": "Strength potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "114" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "3 doses of Strength potion.", + "grand_exchange_price": "812", + "durability": null, + "name": "Strength potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "115" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "812", + "durability": null, + "name": "Strength potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "116" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "2 doses of Strength potion.", + "grand_exchange_price": "656", + "durability": null, + "name": "Strength potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "117" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "656", + "durability": null, + "name": "Strength potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "118" + }, + { + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "1 dose of Strength potion.", + "grand_exchange_price": "355", + "durability": null, + "name": "Strength potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "119" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "355", + "durability": null, + "name": "Strength potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "120" + }, + { + "shop_price": "560", + "ge_buy_limit": "100", + "examine": "3 doses of Attack potion.", + "grand_exchange_price": "195", + "durability": null, + "name": "Attack potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "121" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Attack potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "122" + }, + { + "shop_price": "560", + "ge_buy_limit": "100", + "examine": "2 doses of Attack potion.", + "grand_exchange_price": "113", + "durability": null, + "name": "Attack potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "123" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "113", + "durability": null, + "name": "Attack potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "124" + }, + { + "shop_price": "560", + "ge_buy_limit": "100", + "examine": "1 dose of Attack potion.", + "grand_exchange_price": "197", + "durability": null, + "name": "Attack potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "125" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "197", + "durability": null, + "name": "Attack potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "126" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "3 doses of restore potion.", + "grand_exchange_price": "59", + "durability": null, + "name": "Restore potion(3)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "127" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "59", + "durability": null, + "name": "Restore potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "128" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "2 doses of restore potion.", + "grand_exchange_price": "35", + "durability": null, + "name": "Restore potion(2)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "129" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35", + "durability": null, + "name": "Restore potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "130" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "1 dose of restore potion.", + "grand_exchange_price": "21", + "durability": null, + "name": "Restore potion(1)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "131" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Restore potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "132" + }, + { + "shop_price": "114", + "ge_buy_limit": "100", + "examine": "3 doses of Defence Potion.", + "grand_exchange_price": "323", + "durability": null, + "name": "Defence potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "133" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "323", + "durability": null, + "name": "Defence potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "134" + }, + { + "shop_price": "114", + "ge_buy_limit": "100", + "examine": "2 doses of Defence Potion.", + "grand_exchange_price": "247", + "durability": null, + "name": "Defence potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "135" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "247", + "durability": null, + "name": "Defence potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "136" + }, + { + "shop_price": "114", + "ge_buy_limit": "100", + "examine": "1 dose of Defence Potion.", + "grand_exchange_price": "148", + "durability": null, + "name": "Defence potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "137" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "148", + "durability": null, + "name": "Defence potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "138" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Prayer restore potion.", + "grand_exchange_price": "4134", + "durability": null, + "name": "Prayer potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "139" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4134", + "durability": null, + "name": "Prayer potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "140" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Prayer restore potion.", + "grand_exchange_price": "2868", + "durability": null, + "name": "Prayer potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "141" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2868", + "durability": null, + "name": "Prayer potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "142" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Prayer restore potion.", + "grand_exchange_price": "1353", + "durability": null, + "name": "Prayer potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "143" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1353", + "durability": null, + "name": "Prayer potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "144" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super Attack potion.", + "grand_exchange_price": "691", + "durability": null, + "name": "Super attack(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "145" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "691", + "durability": null, + "name": "Super attack(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "146" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super Attack potion.", + "grand_exchange_price": "451", + "durability": null, + "name": "Super attack(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "147" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "451", + "durability": null, + "name": "Super attack(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "148" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super Attack potion.", + "grand_exchange_price": "243", + "durability": null, + "name": "Super attack(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "149" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "243", + "durability": null, + "name": "Super attack(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "150" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Fishing potion.", + "grand_exchange_price": "40", + "durability": null, + "name": "Fishing potion(3)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "151" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40", + "durability": null, + "name": "Fishing potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "152" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Fishing potion.", + "grand_exchange_price": "56", + "durability": null, + "name": "Fishing potion(2)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "153" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Fishing potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "154" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Fishing potion.", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing potion(1)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "155" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "156" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super Strength potion.", + "grand_exchange_price": "1679", + "durability": null, + "name": "Super strength(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "157" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1679", + "durability": null, + "name": "Super strength(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "158" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super Strength potion.", + "grand_exchange_price": "1164", + "durability": null, + "name": "Super strength(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "159" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1164", + "durability": null, + "name": "Super strength(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "160" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super Strength potion.", + "grand_exchange_price": "603", + "durability": null, + "name": "Super strength(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "161" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "603", + "durability": null, + "name": "Super strength(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "162" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super Defence potion.", + "grand_exchange_price": "113", + "durability": null, + "name": "Super defence(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "163" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "113", + "durability": null, + "name": "Super defence(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "164" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super Defence potion.", + "grand_exchange_price": "65", + "durability": null, + "name": "Super defence(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "165" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "65", + "durability": null, + "name": "Super defence(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "166" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super Defence potion.", + "grand_exchange_price": "41", + "durability": null, + "name": "Super defence(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "167" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "41", + "durability": null, + "name": "Super defence(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "168" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of ranging potion.", + "grand_exchange_price": "6224", + "durability": null, + "name": "Ranging potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "169" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "6224", + "durability": null, + "name": "Ranging potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "170" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of ranging potion.", + "grand_exchange_price": "4330", + "durability": null, + "name": "Ranging potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "171" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4330", + "durability": null, + "name": "Ranging potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "172" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of ranging potion.", + "grand_exchange_price": "2068", + "durability": null, + "name": "Ranging potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "173" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2068", + "durability": null, + "name": "Ranging potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "174" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "3 doses of antipoison potion.", + "grand_exchange_price": "1239", + "durability": null, + "name": "Antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "175" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1239", + "durability": null, + "name": "Antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "176" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "2 doses of antipoison potion.", + "grand_exchange_price": "822", + "durability": null, + "name": "Antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "177" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "822", + "durability": null, + "name": "Antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "178" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "1 dose of antipoison potion.", + "grand_exchange_price": "460", + "durability": null, + "name": "Antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "179" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "460", + "durability": null, + "name": "Antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "180" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super anti poison potion.", + "grand_exchange_price": "872", + "durability": null, + "name": "Super antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "181" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "872", + "durability": null, + "name": "Super antipoison(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "182" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super anti poison potion.", + "grand_exchange_price": "509", + "durability": null, + "name": "Super antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "183" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "509", + "durability": null, + "name": "Super antipoison(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "184" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super anti poison potion.", + "grand_exchange_price": "366", + "durability": null, + "name": "Super antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "185" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "durability": null, + "name": "Super antipoison(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "186" + }, + { + "ge_buy_limit": "1000", + "examine": "For use on daggers and projectiles.", + "grand_exchange_price": "33", + "durability": null, + "name": "Weapon poison", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "187" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "33", + "durability": null, + "name": "Weapon poison", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "188" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of Zamorak brew.", + "grand_exchange_price": "1818", + "durability": null, + "name": "Zamorak brew(3)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "189" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1818", + "durability": null, + "name": "Zamorak brew(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "190" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of Zamorak brew.", + "grand_exchange_price": "1004", + "durability": null, + "name": "Zamorak brew(2)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "191" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1004", + "durability": null, + "name": "Zamorak brew(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "192" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of Zamorak brew.", + "grand_exchange_price": "1175", + "durability": null, + "name": "Zamorak brew(1)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "193" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1175", + "durability": null, + "name": "Zamorak brew(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "194" + }, + { + "ge_buy_limit": "100", + "examine": "This is meant to be good for spots.", + "grand_exchange_price": "117", + "durability": null, + "name": "Potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "195" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "117", + "durability": null, + "name": "Potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "196" + }, + { + "shop_price": "39", + "ge_buy_limit": "100", + "examine": "Stankers gives out these strange cocktails for free.", + "grand_exchange_price": "124", + "durability": null, + "name": "Poison chalice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "197" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124", + "durability": null, + "name": "Poison chalice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "198" + }, + { + "requirements": "{3,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "150", + "durability": null, + "name": "Grimy guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "199" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "155", + "durability": null, + "name": "Grimy guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "200" + }, + { + "requirements": "{5,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "150", + "durability": null, + "name": "Grimy marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "201" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "26", + "durability": null, + "name": "Grimy marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "202" + }, + { + "requirements": "{11,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "150", + "durability": null, + "name": "Grimy tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "203" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "151", + "durability": null, + "name": "Grimy tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "204" + }, + { + "requirements": "{20,15}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "300", + "durability": null, + "name": "Grimy harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "205" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "275", + "durability": null, + "name": "Grimy harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "206" + }, + { + "requirements": "{15,25}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Grimy ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "207" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4909", + "durability": null, + "name": "Grimy ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "208" + }, + { + "requirements": "{15,40}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "209" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2034", + "durability": null, + "name": "Grimy irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "210" + }, + { + "requirements": "{15,48}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "500", + "durability": null, + "name": "Grimy avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "211" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3789", + "durability": null, + "name": "Grimy avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "212" + }, + { + "requirements": "{15,54}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "213" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1665", + "durability": null, + "name": "Grimy kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "214" + }, + { + "requirements": "{15,65}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "215" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1582", + "durability": null, + "name": "Grimy cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "216" + }, + { + "requirements": "{15,70}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Grimy dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "217" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6934", + "durability": null, + "name": "Grimy dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "218" + }, + { + "requirements": "{15,75}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "3200", + "durability": null, + "name": "Grimy torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "219" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "35800", + "durability": null, + "name": "Grimy torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "220" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "It seems to be looking at me.", + "grand_exchange_price": "27", + "durability": null, + "name": "Eye of newt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "221" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "27", + "durability": null, + "name": "Eye of newt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "222" + }, + { + "ge_buy_limit": "10000", + "examine": "Ewww!", + "grand_exchange_price": "888", + "durability": null, + "name": "Red spiders' eggs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "223" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "888", + "durability": null, + "name": "Red spiders' eggs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "224" + }, + { + "ge_buy_limit": "10000", + "examine": "The root of a limpwurt plant.", + "grand_exchange_price": "1984", + "durability": null, + "name": "Limpwurt root", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "225" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1984", + "durability": null, + "name": "Limpwurt root", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "226" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "A glass vial containing water.", + "grand_exchange_price": "35", + "durability": null, + "name": "Vial of water", + "tradeable": "true", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "227" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "35", + "durability": null, + "name": "Vial of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "228" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "An empty glass vial.", + "grand_exchange_price": "2", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "229" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "230" + }, + { + "shop_price": "67", + "ge_buy_limit": "10000", + "examine": "Strange spiky grass.", + "grand_exchange_price": "318", + "durability": null, + "name": "Snape grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "231" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "318", + "durability": null, + "name": "Snape grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "232" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "I can grind things for potions in this.", + "grand_exchange_price": "38", + "durability": null, + "name": "Pestle and mortar", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "233" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "38", + "durability": null, + "name": "Pestle and mortar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "234" + }, + { + "ge_buy_limit": "10000", + "examine": "Finely ground horn of Unicorn.", + "grand_exchange_price": "2460", + "durability": null, + "name": "Unicorn horn dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "235" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2460", + "durability": null, + "name": "Unicorn horn dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "236" + }, + { + "ge_buy_limit": "10000", + "examine": "This horn has restorative properties.", + "grand_exchange_price": "2481", + "durability": null, + "name": "Unicorn horn", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "237" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2481", + "durability": null, + "name": "Unicorn horn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "238" + }, + { + "ge_buy_limit": "10000", + "examine": "Sour berries, used in potions.", + "grand_exchange_price": "1438", + "durability": null, + "name": "White berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "239" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1438", + "durability": null, + "name": "White berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "240" + }, + { + "ge_buy_limit": "10000", + "examine": "Finely ground scale of Dragon.", + "grand_exchange_price": "1336", + "durability": null, + "name": "Dragon scale dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "241" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1336", + "durability": null, + "name": "Dragon scale dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "242" + }, + { + "ge_buy_limit": "10000", + "examine": "A large shiny scale.", + "grand_exchange_price": "1244", + "durability": null, + "name": "Blue dragon scale", + "tradeable": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "243" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1244", + "durability": null, + "name": "Blue dragon scale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "244" + }, + { + "ge_buy_limit": "10000", + "examine": "An evil wine that is often found in chaos temples.", + "grand_exchange_price": "2768", + "durability": null, + "name": "Wine of zamorak", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "245" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2768", + "durability": null, + "name": "Wine of zamorak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "246" + }, + { + "ge_buy_limit": "10000", + "examine": "They don't look very ripe.", + "grand_exchange_price": "83", + "durability": null, + "name": "Jangerberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "247" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "83", + "durability": null, + "name": "Jangerberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "248" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "182", + "durability": null, + "name": "Clean guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "249" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "182", + "durability": null, + "name": "Clean guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "250" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "23", + "durability": null, + "name": "Clean marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "251" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "23", + "durability": null, + "name": "Clean marrentill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "252" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "144", + "durability": null, + "name": "Clean tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "253" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "144", + "durability": null, + "name": "Clean tarromin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "254" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "275", + "durability": null, + "name": "Clean harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "255" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "275", + "durability": null, + "name": "Clean harralander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "256" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "4930", + "durability": null, + "name": "Clean ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "257" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4930", + "durability": null, + "name": "Clean ranarr", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "258" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "2072", + "durability": null, + "name": "Clean irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "259" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2072", + "durability": null, + "name": "Clean irit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "260" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "3812", + "durability": null, + "name": "Clean avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "261" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3812", + "durability": null, + "name": "Clean avantoe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "262" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "1641", + "durability": null, + "name": "Clean kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "263" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1641", + "durability": null, + "name": "Clean kwuarm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "264" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "1585", + "durability": null, + "name": "Clean cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "265" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1585", + "durability": null, + "name": "Clean cadantine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "266" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "6925", + "durability": null, + "name": "Clean dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "267" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6925", + "durability": null, + "name": "Clean dwarf weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "268" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "8400", + "durability": null, + "name": "Clean torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "269" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "35900", + "durability": null, + "name": "Clean torstol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "270" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It looks like part of a machine", + "durability": null, + "name": "Pressure gauge", + "archery_ticket_price": "0", + "id": "271" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box of fish food / Keeps your pet fish strong and healthy.", + "durability": null, + "name": "Fish food", + "archery_ticket_price": "0", + "id": "272", + "equipment_slot": "5" + }, + { + "destroy_message": "You'll have to make more in Draynor Manor.", + "examine": "This isn't good for fish.", + "durability": null, + "name": "Poisoned fish food", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "274" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Key", + "archery_ticket_price": "0", + "id": "275" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's slightly charred.", + "durability": null, + "name": "Rubber tube", + "archery_ticket_price": "0", + "id": "276" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's pretty full.", + "durability": null, + "name": "Oil can", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "277" + }, + { + "examine": "A sharp cattleprod.", + "durability": null, + "name": "Cattleprod", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "278", + "weapon_interface": "5", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0", + "equipment_slot": "3" + }, + { + "examine": "Councillor Halgrive gave me this to kill some sheep.", + "durability": null, + "name": "Sheep feed", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "279" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (1)", + "archery_ticket_price": "0", + "id": "280" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (2)", + "archery_ticket_price": "0", + "id": "281" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (3)", + "archery_ticket_price": "0", + "id": "282" + }, + { + "examine": "The suspicious-looking remains of a suspicious-looking sheep.", + "durability": null, + "name": "Sheep bones (4)", + "archery_ticket_price": "0", + "id": "283" + }, + { + "remove_sleeves": "true", + "examine": "This should protect me from the plague, I hope!", + "durability": null, + "name": "Plague jacket", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "284", + "equipment_slot": "4" + }, + { + "examine": "A thick pair of leather trousers. or These should protect me from the plague, I hope!", + "durability": null, + "name": "Plague trousers", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "285", + "equipment_slot": "7" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Orange goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "286", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Blue goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "287", + "equipment_slot": "4" + }, + { + "shop_price": "16", + "ge_buy_limit": "100", + "examine": "Armour designed to fit goblins.", + "grand_exchange_price": "398", + "durability": null, + "name": "Goblin mail", + "tradeable": "true", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "288", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "398", + "durability": null, + "name": "Goblin mail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "289" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This contains some vital research results.", + "durability": null, + "name": "Research package", + "weight": "1", + "archery_ticket_price": "0", + "id": "290" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Notes", + "archery_ticket_price": "0", + "id": "291" + }, + { + "examine": "A book on elven history in northern RuneScape.", + "durability": null, + "name": "Book on baxtorian", + "archery_ticket_price": "0", + "id": "292" + }, + { + "examine": "A small pebble with elven inscription.", + "durability": null, + "name": "Glarial's pebble", + "archery_ticket_price": "0", + "id": "294" + }, + { + "examine": "A bright green gem set in a necklace.", + "durability": null, + "name": "Glarial's amulet", + "archery_ticket_price": "0", + "id": "295", + "equipment_slot": "2" + }, + { + "examine": "An urn containing Glarial's ashes./An empty urn made for Glarial's ashes.", + "durability": null, + "name": "Glarial's urn", + "archery_ticket_price": "0", + "id": "296" + }, + { + "examine": "An urn containing Glarial's ashes./An empty urn made for Glarial's ashes.", + "durability": null, + "name": "Glarial's urn", + "archery_ticket_price": "0", + "id": "297" + }, + { + "shop_price": "300", + "ge_buy_limit": "5000", + "examine": "Magical seeds in a mithril case.", + "grand_exchange_price": "623", + "durability": null, + "name": "Mithril seeds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "299" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A bit of rat.", + "durability": null, + "name": "Rat's tail", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "300" + }, + { + "requirements": "{10,40}", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Useful for catching lobsters.", + "grand_exchange_price": "100", + "durability": null, + "name": "Lobster pot", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "301" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "100", + "durability": null, + "name": "Lobster pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "302" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "Useful for catching small fish.", + "grand_exchange_price": "397", + "durability": null, + "name": "Small fishing net", + "tradeable": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "303" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "397", + "durability": null, + "name": "Small fishing net", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "304" + }, + { + "requirements": "{16,10}", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Useful for catching lots of fish.", + "grand_exchange_price": "329", + "durability": null, + "name": "Big fishing net", + "tradeable": "true", + "weight": "8.1", + "archery_ticket_price": "0", + "id": "305" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "329", + "durability": null, + "name": "Big fishing net", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "306" + }, + { + "requirements": "{5,10}", + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Useful for catching sardine or herring.", + "grand_exchange_price": "74", + "durability": null, + "name": "Fishing rod", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "307" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Fishing rod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "308" + }, + { + "requirements": "{20,10}", + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Useful for catching salmon or trout.In Daemonhiem: Just add feathers.", + "grand_exchange_price": "123", + "durability": null, + "name": "Fly fishing rod", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "309" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "123", + "durability": null, + "name": "Fly fishing rod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "310" + }, + { + "requirements": "{10,35}", + "shop_price": "45", + "ge_buy_limit": "5000", + "examine": "Useful for catching big fish.", + "grand_exchange_price": "235", + "durability": null, + "name": "Harpoon", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "311" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "235", + "durability": null, + "name": "Harpoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "312" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "For use with a fishing rod.", + "grand_exchange_price": "3", + "durability": null, + "name": "Fishing bait", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "313" + }, + { + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Used for fly fishing.", + "grand_exchange_price": "24", + "durability": null, + "name": "Feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "314" + }, + { + "ge_buy_limit": "10000", + "examine": "Some nicely cooked shrimp.", + "grand_exchange_price": "9", + "durability": null, + "name": "Shrimps", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "315" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "9", + "durability": null, + "name": "Shrimps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "316" + }, + { + "shop_price": "6", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "7", + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "317" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "7", + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "318" + }, + { + "ge_buy_limit": "10000", + "examine": "Some nicely cooked anchovies.", + "grand_exchange_price": "26", + "durability": null, + "name": "Anchovies", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "319" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "26", + "durability": null, + "name": "Anchovies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "320" + }, + { + "shop_price": "16", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "11", + "durability": null, + "name": "Raw anchovies", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "321" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "11", + "durability": null, + "name": "Raw anchovies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "322" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "324" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked Sardines.", + "grand_exchange_price": "12", + "durability": null, + "name": "Sardine", + "tradeable": "true", + "weight": "0.12", + "archery_ticket_price": "0", + "id": "325" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "12", + "durability": null, + "name": "Sardine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "326" + }, + { + "shop_price": "7", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "31", + "durability": null, + "name": "Raw sardine", + "tradeable": "true", + "weight": "0.12", + "archery_ticket_price": "0", + "id": "327" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "31", + "durability": null, + "name": "Raw sardine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "328" + }, + { + "shop_price": "88", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked salmon.", + "grand_exchange_price": "278", + "durability": null, + "name": "Salmon", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "329" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "278", + "durability": null, + "name": "Salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "330" + }, + { + "shop_price": "36", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "172", + "durability": null, + "name": "Raw salmon", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "331" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "172", + "durability": null, + "name": "Raw salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "332" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked trout.", + "grand_exchange_price": "172", + "durability": null, + "name": "Trout", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "333" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "172", + "durability": null, + "name": "Trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "334" + }, + { + "shop_price": "7", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "67", + "durability": null, + "name": "Raw trout", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "335" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "67", + "durability": null, + "name": "Raw trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "336" + }, + { + "examine": "Some nicely cooked giant carp.", + "durability": null, + "name": "Giant carp", + "archery_ticket_price": "0", + "id": "337" + }, + { + "examine": "I should try cooking this.", + "durability": null, + "name": "Raw giant carp", + "archery_ticket_price": "0", + "id": "338" + }, + { + "shop_price": "49", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked fish.", + "grand_exchange_price": "19", + "durability": null, + "name": "Cod", + "tradeable": "true", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "339" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "19", + "durability": null, + "name": "Cod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "340" + }, + { + "shop_price": "49", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "29", + "durability": null, + "name": "Raw cod", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "341" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "29", + "durability": null, + "name": "Raw cod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "342" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "344" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "63", + "durability": null, + "name": "Raw herring", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "345" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "63", + "durability": null, + "name": "Raw herring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "346" + }, + { + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked herring.", + "grand_exchange_price": "23", + "durability": null, + "name": "Herring", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "347" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "23", + "durability": null, + "name": "Herring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "348" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "72", + "durability": null, + "name": "Raw pike", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "349" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "72", + "durability": null, + "name": "Raw pike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "350" + }, + { + "ge_buy_limit": "10000", + "examine": "Some nicely cooked pike.", + "grand_exchange_price": "94", + "durability": null, + "name": "Pike", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "351" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "94", + "durability": null, + "name": "Pike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "352" + }, + { + "shop_price": "26", + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw mackerel", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "353" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw mackerel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "354" + }, + { + "shop_price": "23", + "ge_buy_limit": "10000", + "examine": "Some nicely cooked fish.", + "grand_exchange_price": "5", + "durability": null, + "name": "Mackerel", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "355" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5", + "durability": null, + "name": "Mackerel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "356" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "358" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "210", + "durability": null, + "name": "Raw tuna", + "tradeable": "true", + "weight": "0.379", + "archery_ticket_price": "0", + "id": "359" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "210", + "durability": null, + "name": "Raw tuna", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "360" + }, + { + "shop_price": "126", + "ge_buy_limit": "10000", + "examine": "Wow, this is a big fish.", + "grand_exchange_price": "281", + "durability": null, + "name": "Tuna", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "361" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "281", + "durability": null, + "name": "Tuna", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "362" + }, + { + "ge_buy_limit": "20000", + "examine": "Wow, this is a big fish.", + "grand_exchange_price": "490", + "durability": null, + "name": "Raw bass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "363" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "490", + "durability": null, + "name": "Raw bass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "364" + }, + { + "shop_price": "270", + "ge_buy_limit": "10000", + "examine": "Wow, this is a big fish.", + "grand_exchange_price": "330", + "durability": null, + "name": "Bass", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "365" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "330", + "durability": null, + "name": "Bass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "366" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "368" + }, + { + "durability": null, + "name": "Burnt fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "370" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "513", + "durability": null, + "name": "Raw swordfish", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "371" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "513", + "durability": null, + "name": "Raw swordfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "372" + }, + { + "shop_price": "400", + "ge_buy_limit": "10000", + "examine": "I'd better be careful eating this!", + "grand_exchange_price": "501", + "durability": null, + "name": "Swordfish", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "373" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "501", + "durability": null, + "name": "Swordfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "374" + }, + { + "durability": null, + "name": "Burnt swordfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "376" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "322", + "durability": null, + "name": "Raw lobster", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "377" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "322", + "durability": null, + "name": "Raw lobster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "378" + }, + { + "shop_price": "107", + "ge_buy_limit": "10000", + "examine": "This looks tricky to eat.", + "grand_exchange_price": "334", + "durability": null, + "name": "Lobster", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "379" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "334", + "durability": null, + "name": "Lobster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "380" + }, + { + "durability": null, + "name": "Burnt lobster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "382" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this.", + "grand_exchange_price": "1615", + "durability": null, + "name": "Raw shark", + "tradeable": "true", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "383" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "1615", + "durability": null, + "name": "Raw shark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "384" + }, + { + "ge_buy_limit": "10000", + "examine": "I'd better be careful eating this.", + "grand_exchange_price": "1682", + "durability": null, + "name": "Shark", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "385" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1682", + "durability": null, + "name": "Shark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "386" + }, + { + "durability": null, + "name": "Burnt shark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "388" + }, + { + "ge_buy_limit": "20000", + "examine": "Tastier when cooked.", + "grand_exchange_price": "2114", + "durability": null, + "name": "Raw manta ray", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "389" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "2114", + "durability": null, + "name": "Raw manta ray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "390" + }, + { + "ge_buy_limit": "10000", + "examine": "Mmmm...this looks tasty!", + "grand_exchange_price": "2552", + "durability": null, + "name": "Manta ray", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "391" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2552", + "durability": null, + "name": "Manta ray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "392" + }, + { + "durability": null, + "name": "Burnt manta ray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "394" + }, + { + "ge_buy_limit": "20000", + "examine": "Looks wrinkly.", + "grand_exchange_price": "2397", + "durability": null, + "name": "Raw sea turtle", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "395" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "2397", + "durability": null, + "name": "Raw sea turtle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "396" + }, + { + "ge_buy_limit": "10000", + "examine": "Tasty!", + "grand_exchange_price": "2486", + "durability": null, + "name": "Sea turtle", + "tradeable": "true", + "weight": "0.35", + "archery_ticket_price": "0", + "id": "397" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2486", + "durability": null, + "name": "Sea turtle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "398" + }, + { + "durability": null, + "name": "Burnt sea turtle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "400" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "Slightly damp seaweed.", + "grand_exchange_price": "780", + "durability": null, + "name": "Seaweed", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "401" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "780", + "durability": null, + "name": "Seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "402" + }, + { + "ge_buy_limit": "10000", + "examine": "Slightly damp seaweed.", + "grand_exchange_price": "291", + "durability": null, + "name": "Edible seaweed", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "403" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "291", + "durability": null, + "name": "Edible seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "404" + }, + { + "ge_buy_limit": "100", + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "4162", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "405" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4162", + "durability": null, + "name": "Casket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "406" + }, + { + "ge_buy_limit": "500", + "examine": "Its a rare oyster.", + "grand_exchange_price": "23", + "durability": null, + "name": "Oyster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "407" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "23", + "durability": null, + "name": "Oyster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "408" + }, + { + "shop_price": "5", + "examine": "Aww, it's empty.", + "durability": null, + "name": "Empty oyster", + "tradeable": "true", + "weight": "0.08", + "archery_ticket_price": "0", + "id": "409" + }, + { + "durability": null, + "name": "Empty oyster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "410" + }, + { + "shop_price": "44", + "ge_buy_limit": "500", + "examine": "I could work wonders with a chisel on this pearl.", + "grand_exchange_price": "18", + "durability": null, + "name": "Oyster pearl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "411", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "18", + "durability": null, + "name": "Oyster pearl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "412" + }, + { + "ge_buy_limit": "500", + "examine": "I could work wonders with a chisel on these pearls.", + "grand_exchange_price": "639", + "durability": null, + "name": "Oyster pearls", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "413", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "639", + "durability": null, + "name": "Oyster pearls", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "414" + }, + { + "examine": "An expensive colourless liquid.", + "durability": null, + "name": "Ethenea", + "archery_ticket_price": "0", + "id": "415" + }, + { + "examine": "This isn't worth much.", + "durability": null, + "name": "Liquid honey", + "archery_ticket_price": "0", + "id": "416" + }, + { + "examine": "It's highly poisonous.", + "durability": null, + "name": "Sulphuric broline", + "weight": "1", + "archery_ticket_price": "0", + "id": "417" + }, + { + "examine": "Probably best I don't keep this too long.", + "durability": null, + "name": "Plague sample", + "archery_ticket_price": "0", + "id": "418" + }, + { + "examine": "A special kind of paper.", + "durability": null, + "name": "Touch paper", + "archery_ticket_price": "0", + "id": "419" + }, + { + "examine": "Apparently it distills.", + "durability": null, + "name": "Distillator", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "420" + }, + { + "examine": "Yup. It's an amulet.", + "durability": null, + "name": "Lathas' amulet", + "archery_ticket_price": "0", + "id": "421", + "equipment_slot": "2" + }, + { + "examine": "Birds love this stuff!", + "durability": null, + "name": "Bird feed", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "422" + }, + { + "examine": "(empty) It's empty... (full) It's full of pigeons.", + "durability": null, + "name": "Pigeon cage", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "424" + }, + { + "examine": "(empty) It's empty... (full) It's full of pigeons.", + "durability": null, + "name": "Pigeon cage", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "425" + }, + { + "ge_buy_limit": "100", + "shop_price": "5", + "examine": "Top half of a priest suit.", + "durability": null, + "weight": "2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "55", + "name": "Priest gown", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "426", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "55", + "durability": null, + "name": "Priest gown", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "427" + }, + { + "ge_buy_limit": "100", + "shop_price": "5", + "examine": "Bottom half of a priest suit.", + "grand_exchange_price": "14", + "durability": null, + "name": "Priest gown", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "428", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,3,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Priest gown", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "429" + }, + { + "remove_sleeves": "true", + "examine": "Medical looking.", + "durability": null, + "name": "Doctors' gown", + "weight": "1", + "archery_ticket_price": "0", + "id": "430", + "equipment_slot": "4" + }, + { + "shop_price": "27", + "examine": "A very strong spirit brewed in Karamja.", + "durability": null, + "name": "Karamjan rum", + "archery_ticket_price": "0", + "id": "431" + }, + { + "examine": "Pirates don't have the best handwriting...", + "durability": null, + "name": "Pirate message", + "weight": "1", + "archery_ticket_price": "0", + "id": "433" + }, + { + "ge_buy_limit": "25000", + "examine": "Some hard dry clay.", + "grand_exchange_price": "150", + "durability": null, + "name": "Clay", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "434" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "406", + "durability": null, + "name": "Clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "435" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "80", + "tokkul_price": "4", + "durability": null, + "name": "Copper ore", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "436" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "58", + "durability": null, + "name": "Copper ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "437" + }, + { + "shop_price": "6", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "80", + "tokkul_price": "4", + "durability": null, + "name": "Tin ore", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "438" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "46", + "durability": null, + "name": "Tin ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "439" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "204", + "tokkul_price": "25", + "durability": null, + "name": "Iron ore", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "440" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "396", + "durability": null, + "name": "Iron ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "441" + }, + { + "shop_price": "82", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "180", + "tokkul_price": "112", + "durability": null, + "name": "Silver ore", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "442" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "205", + "durability": null, + "name": "Silver ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "443" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "311", + "tokkul_price": "225", + "durability": null, + "name": "Gold ore", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "444" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "319", + "durability": null, + "name": "Gold ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "445" + }, + { + "examine": "This needs refining.", + "durability": null, + "name": "'perfect' gold ore", + "archery_ticket_price": "0", + "id": "446" + }, + { + "shop_price": "243", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "420", + "tokkul_price": "243", + "durability": null, + "name": "Mithril ore", + "tradeable": "true", + "weight": "1.75", + "archery_ticket_price": "0", + "id": "447" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "369", + "durability": null, + "name": "Mithril ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "448" + }, + { + "shop_price": "1300", + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "1160", + "tokkul_price": "600", + "durability": null, + "name": "Adamantite ore", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "449" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "1622", + "durability": null, + "name": "Adamantite ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "450" + }, + { + "ge_buy_limit": "25000", + "examine": "This needs refining.", + "grand_exchange_price": "10300", + "tokkul_price": "4800", + "durability": null, + "name": "Runite ore", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "451" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "10300", + "durability": null, + "name": "Runite ore", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "452" + }, + { + "ge_buy_limit": "25000", + "examine": "Hmm a non-renewable energy source!", + "grand_exchange_price": "320", + "tokkul_price": "67", + "durability": null, + "name": "Coal", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "453" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "315", + "durability": null, + "name": "Coal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "454" + }, + { + "examine": "The official Alfred Grimhand bar crawl card.", + "durability": null, + "name": "Barcrawl card", + "archery_ticket_price": "0", + "id": "455" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "456" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "457" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "458" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "459" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "460" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "461" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "462" + }, + { + "destroy_message": "You will need to speak to Thormac to get another cage.", + "examine": "It's empty!", + "durability": null, + "name": "Scorpion cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "463" + }, + { + "ge_buy_limit": "10000", + "examine": "Found on strange plants that grow around Karamja.", + "grand_exchange_price": "403", + "durability": null, + "name": "Strange fruit", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "464" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "403", + "durability": null, + "name": "Strange fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "465" + }, + { + "shop_price": "1", + "examine": "Useless without the head.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Pickaxe handle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "466", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Pickaxe handle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "467" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "468", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "469" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "470", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "471" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "472", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "473" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "474", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "475" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "476", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "477" + }, + { + "examine": "Nurmof can fix this for me.", + "attack_audios": "2508,0,0,0", + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "478", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "479" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Bronze pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "480" + }, + { + "durability": null, + "name": "Bronze pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "481" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Iron pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "482" + }, + { + "durability": null, + "name": "Iron pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "483" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Steel pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "484" + }, + { + "durability": null, + "name": "Steel pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "485" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Mithril pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "486" + }, + { + "durability": null, + "name": "Mithril pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "487" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Adamant pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "488" + }, + { + "durability": null, + "name": "Adamant pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "489" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Rune pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "490" + }, + { + "durability": null, + "name": "Rune pick head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "491" + }, + { + "examine": "Useless without the head.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "492", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "493" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "494", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "495" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "496", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "497" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "498", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "499" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "500", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "501" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "502", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "503" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "504", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "505" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "506", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "507" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "508" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "509" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "510" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "511" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "512" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "513" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "514" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "515" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "516" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "517" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "518" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "519" + }, + { + "examine": "A piece of ancient goblin axe.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "520" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "521" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted beef", + "archery_ticket_price": "0", + "id": "522" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted rat meat", + "archery_ticket_price": "0", + "id": "523" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted bear meat", + "archery_ticket_price": "0", + "id": "524" + }, + { + "examine": "I don't fancy eating this now.", + "durability": null, + "name": "Enchanted chicken", + "weight": "1", + "archery_ticket_price": "0", + "id": "525" + }, + { + "shop_price": "190", + "ge_buy_limit": "10000", + "grand_exchange_price": "190", + "examine": "Bones are for burying!", + "durability": null, + "name": "Bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "526" + }, + { + "shop_price": "190", + "ge_buy_limit": "10000", + "grand_exchange_price": "190", + "durability": null, + "name": "Bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "527" + }, + { + "ge_buy_limit": "10000", + "examine": "Bones are for burying!", + "grand_exchange_price": "329", + "durability": null, + "name": "Burnt bones", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "528" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "329", + "durability": null, + "name": "Burnt bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "529" + }, + { + "ge_buy_limit": "10000", + "examine": "Ew it's a pile of bones.", + "grand_exchange_price": "354", + "durability": null, + "name": "Bat bones", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "530" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "354", + "durability": null, + "name": "Bat bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "531" + }, + { + "shop_price": "593", + "ge_buy_limit": "10000", + "examine": "Normal: Ew, it's a pile of bones.", + "grand_exchange_price": "593", + "durability": null, + "name": "Big bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "532" + }, + { + "shop_price": "593", + "ge_buy_limit": "10000", + "grand_exchange_price": "593", + "durability": null, + "name": "Big bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "533" + }, + { + "ge_buy_limit": "10000", + "examine": "Ew, it's a pile of bones.", + "grand_exchange_price": "1357", + "durability": null, + "name": "Babydragon bones", + "tradeable": "true", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "534" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1357", + "durability": null, + "name": "Babydragon bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "535" + }, + { + "ge_buy_limit": "10000", + "examine": "These would feed a dog for months.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Dragon bones", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "536" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4065", + "durability": null, + "name": "Dragon bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "537" + }, + { + "ge_buy_limit": "100", + "examine": "Keeps a druid's knees nice and warm.", + "grand_exchange_price": "168", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "538", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "168", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "539" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "I feel closer to the gods when I am wearing this.", + "grand_exchange_price": "328", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "540", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "328", + "durability": null, + "name": "Druid's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "541" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "528", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "542", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "528", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "543" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "1495", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "544", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,6,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1495", + "durability": null, + "name": "Monk's robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "545" + }, + { + "remove_sleeves": "true", + "examine": "I feel closer to the gods when I am wearing this. (Top) If a shade had knees, this would keep them nice and warm. (Bottom)", + "durability": null, + "name": "Shade robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "546", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "4" + }, + { + "examine": "I feel closer to the gods when I am wearing this. (Top) If a shade had knees, this would keep them nice and warm. (Bottom)", + "durability": null, + "name": "Shade robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "548", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,4,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "Issued by RuneScape Council to all new citizens.", + "grand_exchange_price": "123", + "durability": null, + "name": "Newcomer map", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "550" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "123", + "durability": null, + "name": "Newcomer map", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "551" + }, + { + "examine": "It lets me talk to ghosts.", + "durability": null, + "name": "Ghostspeak amulet", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "552", + "equipment_slot": "2" + }, + { + "destroy_message": "If you get rid of the skull you'll have to search for it again.", + "examine": "Ooooh spooky!", + "durability": null, + "name": "Ghost's skull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "553" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "554" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "555" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "556" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "18", + "tokkul_price": "6", + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "557" + }, + { + "shop_price": "17", + "ge_buy_limit": "25000", + "examine": "Used for basic missile spells.", + "grand_exchange_price": "18", + "tokkul_price": "4", + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "558" + }, + { + "shop_price": "16", + "ge_buy_limit": "25000", + "examine": "Used for Curse spells", + "grand_exchange_price": "16", + "tokkul_price": "4", + "durability": null, + "name": "Body rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "559" + }, + { + "shop_price": "310", + "ge_buy_limit": "25000", + "examine": "Used for medium missile spells.", + "grand_exchange_price": "320", + "durability": null, + "tokkul_price": "270", + "name": "Death rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "560" + }, + { + "shop_price": "372", + "ge_buy_limit": "25000", + "examine": "Used for alchemy spells.", + "grand_exchange_price": "380", + "durability": null, + "name": "Nature rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "561" + }, + { + "shop_price": "140", + "ge_buy_limit": "25000", + "examine": "Used for small missile spells.", + "grand_exchange_price": "140", + "durability": null, + "tokkul_price": "135", + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "562" + }, + { + "shop_price": "378", + "ge_buy_limit": "25000", + "examine": "Used for teleport spells.", + "grand_exchange_price": "380", + "durability": null, + "name": "Law rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "563" + }, + { + "shop_price": "232", + "ge_buy_limit": "25000", + "examine": "Used for enchant spells.", + "grand_exchange_price": "240", + "durability": null, + "name": "Cosmic rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "564" + }, + { + "shop_price": "550", + "ge_buy_limit": "25000", + "examine": "Used for large missile spells.", + "grand_exchange_price": "560", + "durability": null, + "name": "Blood rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "565" + }, + { + "shop_price": "400", + "ge_buy_limit": "25000", + "examine": "Used for high level curse spells.", + "grand_exchange_price": "420", + "durability": null, + "name": "Soul rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "566" + }, + { + "ge_buy_limit": "5000", + "examine": "I'd prefer it if it was powered.", + "grand_exchange_price": "561", + "durability": null, + "name": "Unpowered orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "567" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "561", + "durability": null, + "name": "Unpowered orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "568" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2346", + "durability": null, + "name": "Fire orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "569" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2346", + "durability": null, + "name": "Fire orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "570" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2024", + "durability": null, + "name": "Water orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "571" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2024", + "durability": null, + "name": "Water orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "572" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2162", + "durability": null, + "name": "Air orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "573" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2162", + "durability": null, + "name": "Air orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "574" + }, + { + "ge_buy_limit": "5000", + "examine": "A magic glowing orb.", + "grand_exchange_price": "2208", + "durability": null, + "name": "Earth orb", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "575" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2208", + "durability": null, + "name": "Earth orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "576" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "I can do magic better in this.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1840", + "name": "Wizard robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "577", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1840", + "durability": null, + "name": "Wizard robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "578" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.45", + "equipment_slot": "0", + "grand_exchange_price": "361", + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "579", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "grand_exchange_price": "361", + "durability": null, + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "580" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "I can do magic better in this.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1364", + "name": "Black robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "581", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1364", + "durability": null, + "name": "Black robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "582" + }, + { + "shop_price": "10", + "examine": "Empty: It's a bailing bucket. Full: It's a bailing bucket full of salty water.", + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "583" + }, + { + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "584" + }, + { + "shop_price": "10", + "examine": "Empty: It's a bailing bucket. Full: It's a bailing bucket full of salty water.", + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "585" + }, + { + "durability": null, + "name": "Bailing bucket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "586" + }, + { + "examine": "A strange glowing green orb.", + "durability": null, + "name": "Orb of protection", + "weight": "1", + "archery_ticket_price": "0", + "id": "587" + }, + { + "examine": "Two strange glowing green orbs.", + "durability": null, + "name": "Orbs of protection", + "archery_ticket_price": "0", + "id": "588" + }, + { + "examine": "It's an amulet of protection given to me by the Gnomes.", + "durability": null, + "name": "Gnome amulet", + "archery_ticket_price": "0", + "id": "589", + "bonuses": "0,0,0,0,0,13,13,13,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "shop_price": "1", + "ge_buy_limit": "5000", + "examine": "Useful for lighting a fire.", + "grand_exchange_price": "118", + "durability": null, + "name": "Tinderbox", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "590" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "118", + "durability": null, + "name": "Tinderbox", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "591" + }, + { + "ge_buy_limit": "10000", + "examine": "A heap of ashes.", + "grand_exchange_price": "368", + "durability": null, + "name": "Ashes", + "tradeable": "true", + "weight": "0.056", + "archery_ticket_price": "0", + "id": "592" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "368", + "durability": null, + "name": "Ashes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "593" + }, + { + "examine": "A lit home-made torch.", + "durability": null, + "name": "Lit torch", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "594" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An unlit home-made torch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Unlit torch", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "596" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Unlit torch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "597" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with bronze heads and oil-soaked cloth. lit: An easy to make, bronze-headed fire arrow.", + "grand_exchange_price": "162", + "durability": null, + "name": "Bronze fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "598", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "100", + "examine": "A book on the history of astronomy in RuneScape.", + "grand_exchange_price": "658", + "durability": null, + "name": "Astronomy book", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "600" + }, + { + "destroy_message": "You'll have to find another, down in the dungeon.", + "examine": "A small key for a large door.", + "durability": null, + "name": "Goblin kitchen key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "601" + }, + { + "destroy_message": "You'll have to get another down in the Dungeon", + "examine": "An unusual clay mould in the shape of a disc.", + "durability": null, + "name": "Lens mould", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "602" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A perfectly circular disc of glass.", + "durability": null, + "name": "Observatory lens", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "603" + }, + { + "shop_price": "160", + "examine": "A slender bone shard given to you by Zadimus.", + "durability": null, + "name": "Bone shard", + "archery_ticket_price": "0", + "id": "604" + }, + { + "shop_price": "100", + "examine": "A key fashioned from a shard of bone. (Shilo Village)", + "durability": null, + "name": "Bone key", + "archery_ticket_price": "0", + "id": "605" + }, + { + "examine": "A stone plaque with carved letters in it.", + "durability": null, + "name": "Stone-plaque", + "archery_ticket_price": "0", + "id": "606" + }, + { + "examine": "An ancient tattered scroll.", + "durability": null, + "name": "Tattered scroll", + "archery_ticket_price": "0", + "id": "607" + }, + { + "shop_price": "100", + "examine": "An ancient crumpled scroll.", + "durability": null, + "name": "Crumpled scroll", + "archery_ticket_price": "0", + "id": "608" + }, + { + "examine": "The remains of the Zombie Queen.", + "durability": null, + "name": "Rashiliyia corpse", + "archery_ticket_price": "0", + "id": "609" + }, + { + "examine": "The remains of Zadimus.", + "durability": null, + "name": "Zadimus corpse", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "610" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "611" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "612" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "613" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "614" + }, + { + "examine": "A magical crystal sphere.", + "durability": null, + "name": "Locating crystal", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "615" + }, + { + "destroy_message": "You made the beads of the dead during the Shilo Village quest. You can get another from Yanni Salika in Shilo Village for 1200 gold.", + "shop_price": "1200", + "examine": "A curious looking neck ornament.", + "durability": null, + "name": "Beads of the dead", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "616", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,1,0,0", + "equipment_slot": "2" + }, + { + "bankable": "false", + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "archery_ticket_price": "0", + "id": "617" + }, + { + "examine": "Beads carved out of a bone.", + "durability": null, + "name": "Bone beads", + "archery_ticket_price": "0", + "id": "618" + }, + { + "shop_price": "35", + "examine": "Allows you to rest in the luxurious Paramayer[sic] Inn.", + "durability": null, + "name": "Paramaya ticket", + "archery_ticket_price": "0", + "id": "619" + }, + { + "shop_price": "35", + "examine": "Allows you to rest in the luxurious Paramayer[sic] Inn.", + "durability": null, + "name": "Paramaya ticket", + "archery_ticket_price": "0", + "id": "620" + }, + { + "examine": "Sold in Shilo Village for passage on the 'Lady of the Waves'.", + "durability": null, + "name": "Ship ticket", + "archery_ticket_price": "0", + "id": "621" + }, + { + "examine": "An ivory sword pommel.", + "durability": null, + "name": "Sword pommel", + "archery_ticket_price": "0", + "id": "623" + }, + { + "examine": "Notes taken from the tomb of Bervirius.", + "durability": null, + "name": "Bervirius notes", + "archery_ticket_price": "0", + "id": "624" + }, + { + "examine": "A decorated belt used to trade information between distant villages.", + "durability": null, + "name": "Wampum belt", + "archery_ticket_price": "0", + "id": "625" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and pink.", + "grand_exchange_price": "558", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "626", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "558", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "627" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and green.", + "grand_exchange_price": "397", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "628", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "397", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "629" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and blue.", + "grand_exchange_price": "612", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "630", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "612", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "631" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and cream.", + "grand_exchange_price": "496", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "632", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "496", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "633" + }, + { + "ge_buy_limit": "100", + "shop_price": "200", + "examine": "They're soft, silky and turquoise.", + "grand_exchange_price": "226", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "634", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "226", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "635" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in pink.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "265", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "636", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "265", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "637" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in green.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "235", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "638", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "235", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "639" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in blue.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "447", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "640", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "447", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "641" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in cream.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "396", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "642", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "396", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "643" + }, + { + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "The ultimate in gnome design, now in turquoise.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "70", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "644", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "70", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "645" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for pink.", + "grand_exchange_price": "249", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "646", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "249", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "647" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for green.", + "grand_exchange_price": "210", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "648", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "210", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "649" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for blue.", + "grand_exchange_price": "453", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "650", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "453", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "651" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for cream.", + "grand_exchange_price": "348", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "652", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "348", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "653" + }, + { + "ge_buy_limit": "100", + "shop_price": "180", + "examine": "Made by tree gnomes with a thing for turquoise.", + "grand_exchange_price": "92", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "654", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "655" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "677", + "examine": "A silly, pink pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "656", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "677", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "657" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "480", + "examine": "A silly, green pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "658", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "480", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "659" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "examine": "A silly, blue pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "660", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "661" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1102", + "examine": "A silly, cream pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "662", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1102", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "663" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "295", + "examine": "A silly, turquoise pointed hat.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.4", + "hat": "true", + "id": "664", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "295", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "665" + }, + { + "examine": "Picture of a posing Paladin.", + "durability": null, + "name": "Portrait", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "666" + }, + { + "turn90cw_anim": "821", + "examine": "A Faladian Knight's sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "attack_speed": "5", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "292", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "809", + "attack_audios": "2500,2500,2517,2500", + "name": "Blurite sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "667", + "stand_turn_anim": "823", + "bonuses": "9,14,-2,0,0,0,3,2,0,0,0,10,0,0,0" + }, + { + "examine": "Definitely blue.", + "durability": null, + "name": "Blurite ore", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "668" + }, + { + "examine": "A receptacle for specimens!", + "durability": null, + "name": "Specimen jar", + "archery_ticket_price": "0", + "id": "669" + }, + { + "examine": "A small brush used to clean rock samples.", + "durability": null, + "name": "Specimen brush", + "archery_ticket_price": "0", + "id": "670" + }, + { + "examine": "A carefully-kept-safe skull sample.", + "durability": null, + "name": "Animal skull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "671" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A special cup.", + "durability": null, + "name": "Special cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "672" + }, + { + "examine": "A lucky mascot.", + "durability": null, + "name": "Teddy", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "673" + }, + { + "examine": "A roughly shaped piece of rock.", + "durability": null, + "name": "Cracked sample", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "674" + }, + { + "examine": "A small pick for digging.", + "durability": null, + "name": "Rock pick", + "archery_ticket_price": "0", + "id": "675", + "equipment_slot": "3" + }, + { + "examine": "Used for digging!", + "durability": null, + "name": "Trowel", + "archery_ticket_price": "0", + "id": "676" + }, + { + "examine": "An empty tray for panning.", + "durability": null, + "name": "Panning tray", + "archery_ticket_price": "0", + "id": "677" + }, + { + "examine": "This tray contains gold nuggets.", + "durability": null, + "name": "Panning tray", + "archery_ticket_price": "0", + "id": "678" + }, + { + "examine": "This tray contains mud.", + "durability": null, + "name": "Panning tray", + "archery_ticket_price": "0", + "id": "679" + }, + { + "examine": "Pure, lovely gold!", + "durability": null, + "name": "Nuggets", + "archery_ticket_price": "0", + "id": "680" + }, + { + "examine": "An unusual symbol as yet unidentified by the archaeological expert.", + "durability": null, + "name": "Ancient talisman", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "681" + }, + { + "examine": "A letter waiting to be stamped.", + "durability": null, + "name": "Unstamped letter", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "682" + }, + { + "examine": "A sealed letter of recommendation.", + "durability": null, + "name": "Sealed letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "683" + }, + { + "examine": "Used to hold up trousers!", + "durability": null, + "name": "Belt buckle", + "weight": "1", + "archery_ticket_price": "0", + "id": "684" + }, + { + "examine": "Phew!", + "durability": null, + "name": "Old boot", + "archery_ticket_price": "0", + "id": "685" + }, + { + "examine": "A decent-enough weapon gone rusty.", + "durability": null, + "name": "Rusty sword", + "weight": "2", + "archery_ticket_price": "0", + "id": "686" + }, + { + "examine": "This must have been shot at high speed.", + "durability": null, + "name": "Broken arrow", + "archery_ticket_price": "0", + "id": "687" + }, + { + "examine": "Not Dick Whittington's helper at all!", + "durability": null, + "name": "Buttons", + "archery_ticket_price": "0", + "id": "688" + }, + { + "examine": "I pity the poor person beaten with this!", + "attack_audios": "2555,0,0,0", + "durability": null, + "name": "Broken staff", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "689" + }, + { + "examine": "Smashed glass.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "690" + }, + { + "examine": "The owner has passed Earth Sciences Level 1 exam.", + "durability": null, + "name": "Level 1 certificate", + "archery_ticket_price": "0", + "id": "691" + }, + { + "examine": "The owner has passed Earth Sciences Level 2 exam.", + "durability": null, + "name": "Level 2 certificate", + "archery_ticket_price": "0", + "id": "692" + }, + { + "examine": "The owner has passed Earth Sciences Level 3 exam.", + "durability": null, + "name": "Level 3 certificate", + "archery_ticket_price": "0", + "id": "693" + }, + { + "examine": "Smashing!", + "durability": null, + "name": "Ceramic remains", + "archery_ticket_price": "0", + "id": "694" + }, + { + "examine": "Now, if I could just find a tooth fairy to sell this to...", + "durability": null, + "name": "Old tooth", + "archery_ticket_price": "0", + "id": "695" + }, + { + "examine": "A letter inviting me to use the private digging shafts.", + "durability": null, + "name": "Invitation letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "696" + }, + { + "examine": "It would be hard to repair this!", + "durability": null, + "name": "Damaged armour", + "weight": "7.75", + "archery_ticket_price": "0", + "id": "697" + }, + { + "examine": "Armour left over from a great fight.", + "durability": null, + "name": "Broken armour", + "weight": "8", + "archery_ticket_price": "0", + "id": "698" + }, + { + "examine": "An old stone slab with writing on it.", + "durability": null, + "name": "Stone tablet", + "archery_ticket_price": "0", + "id": "699" + }, + { + "examine": "An acrid chemical.", + "durability": null, + "name": "Chemical powder", + "archery_ticket_price": "0", + "id": "700" + }, + { + "examine": "An acrid chemical.", + "durability": null, + "name": "Ammonium nitrate", + "archery_ticket_price": "0", + "id": "701" + }, + { + "examine": "A strong chemical.", + "durability": null, + "name": "Unidentified liquid", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "702" + }, + { + "shop_price": "1", + "examine": "A strong chemical.", + "durability": null, + "name": "Nitroglycerin", + "weight": "1", + "archery_ticket_price": "0", + "id": "703" + }, + { + "examine": "Charcoal - crushed to small pieces!", + "durability": null, + "name": "Ground charcoal", + "archery_ticket_price": "0", + "id": "704" + }, + { + "examine": "A mixture of strong chemicals.", + "durability": null, + "name": "Chemical compound", + "weight": "2", + "archery_ticket_price": "0", + "id": "707" + }, + { + "examine": "The root of an arcenia plant.", + "durability": null, + "name": "Arcenia root", + "archery_ticket_price": "0", + "id": "708" + }, + { + "examine": "An unusually shaped vase. You can see something glinting inside.", + "durability": null, + "name": "Vase", + "archery_ticket_price": "0", + "id": "710" + }, + { + "examine": "It's about chemicals, judging from its cover.", + "durability": null, + "name": "Book on chemicals", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "711" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "712" + }, + { + "examine": "Notes given to you by Radimus Erkle, it includes a partially completed map.", + "durability": null, + "name": "Radimus notes", + "archery_ticket_price": "0", + "id": "714" + }, + { + "examine": "Notes given to you by Radimus Erkle, it includes a partially completed map.", + "durability": null, + "name": "Radimus notes", + "archery_ticket_price": "0", + "id": "715" + }, + { + "examine": "It makes a loud but interesting sound when swung in the air.", + "durability": null, + "name": "Bull roarer", + "archery_ticket_price": "0", + "id": "716" + }, + { + "examine": "A scrawled note with spidery writing on it.", + "durability": null, + "name": "Scrawled note", + "archery_ticket_price": "0", + "id": "717" + }, + { + "examine": "A scrawled note with spidery writing on it.", + "durability": null, + "name": "A scribbled note", + "archery_ticket_price": "0", + "id": "718" + }, + { + "examine": "A scrawled note with spidery writing on it.", + "durability": null, + "name": "Scrumpled note", + "archery_ticket_price": "0", + "id": "719" + }, + { + "examine": "A rough sketch of a bowl shaped vessel given to you by Gujuo.", + "durability": null, + "name": "Sketch", + "archery_ticket_price": "0", + "id": "720" + }, + { + "examine": "A specially made bowl constructed out of pure gold.", + "durability": null, + "name": "Gold bowl", + "archery_ticket_price": "0", + "id": "721" + }, + { + "examine": "A specially made bowl constructed out of pure gold and blessed.", + "durability": null, + "name": "Blessed gold bowl", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "722" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "723" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "724" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "725" + }, + { + "examine": "A blessed golden bowl. It has pure sacred water in it.", + "durability": null, + "name": "Golden bowl", + "weight": "1", + "archery_ticket_price": "0", + "id": "726" + }, + { + "examine": "One of nature's pipes.", + "durability": null, + "name": "Hollow reed", + "weight": "0.012", + "archery_ticket_price": "0", + "id": "727" + }, + { + "examine": "One of nature's pipes.", + "durability": null, + "name": "Hollow reed", + "weight": "0.012", + "archery_ticket_price": "0", + "id": "728" + }, + { + "examine": "It looks like the Shamans personal notes...", + "durability": null, + "name": "Shamans tome", + "archery_ticket_price": "0", + "id": "729" + }, + { + "examine": "An ancient tome on Demonology.", + "durability": null, + "name": "Binding book", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "730" + }, + { + "shop_price": "160", + "examine": "An enchanted empty glass vial.", + "durability": null, + "name": "Enchanted vial", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "731" + }, + { + "examine": "A vial of holy water, good against certain demons.", + "durability": null, + "name": "Holy water", + "archery_ticket_price": "0", + "id": "732", + "weapon_interface": "18", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,24", + "equipment_slot": "3" + }, + { + "examine": "Fragments of a broken container.", + "durability": null, + "name": "Smashed glass", + "archery_ticket_price": "0", + "id": "733" + }, + { + "examine": "These need to be germinated before they can be used. / These are germinated and ready to be planted in fertile soil.", + "durability": null, + "name": "Yommi tree seeds", + "archery_ticket_price": "0", + "id": "735" + }, + { + "examine": "These need to be germinated before they can be used. / These are germinated and ready to be planted in fertile soil.", + "durability": null, + "name": "Yommi tree seeds", + "archery_ticket_price": "0", + "id": "736" + }, + { + "examine": "A Snakeweed mixture, needs another ingredient.", + "durability": null, + "name": "Snakeweed mixture", + "weight": "1", + "archery_ticket_price": "0", + "id": "737" + }, + { + "examine": "It's a mixture of ardrigal and water. Needs another ingredient.", + "durability": null, + "name": "Ardrigal mixture", + "archery_ticket_price": "0", + "id": "738" + }, + { + "examine": "A bravery potion for which Gujuo gave you the details, let's hope it works.", + "durability": null, + "name": "Bravery potion", + "archery_ticket_price": "0", + "id": "739" + }, + { + "shop_price": "160", + "examine": "A silly, blue pointed hat.", + "grand_exchange_price": "472", + "durability": null, + "name": "Blue hat", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "hat": "true", + "id": "740", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "It looks like it's been snapped off of something.", + "durability": null, + "name": "Chunk of crystal", + "archery_ticket_price": "0", + "id": "741" + }, + { + "examine": "It looks like it's been snapped off of something.", + "durability": null, + "name": "Hunk of crystal", + "archery_ticket_price": "0", + "id": "742" + }, + { + "examine": "It looks like it's been snapped off of something.", + "durability": null, + "name": "Lump of crystal", + "archery_ticket_price": "0", + "id": "743" + }, + { + "examine": "A heart shaped crystal.", + "durability": null, + "name": "Heart crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "744" + }, + { + "examine": "A heart shaped crystal.", + "durability": null, + "name": "Heart crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "745" + }, + { + "attack_anims": "400,400,400,400", + "examine": "A black obsidian dagger, it has a strange aura about it.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Dark dagger", + "archery_ticket_price": "0", + "id": "746", + "weapon_interface": "5", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,0,0,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "examine": "A black obsidian dagger, it has a strange aura about it - it seems to be glowing.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "attack_audios": "2517,2517,2500,2517", + "name": "Glowing dagger", + "archery_ticket_price": "0", + "id": "747", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,0,0,0,0" + }, + { + "examine": "A powerful spell for good.", + "durability": null, + "name": "Holy force", + "archery_ticket_price": "0", + "id": "748" + }, + { + "examine": "A well carved totem pole made from the trunk of a Yommi tree.", + "durability": null, + "name": "Yommi totem", + "weight": "3", + "archery_ticket_price": "0", + "id": "749" + }, + { + "examine": "A gilded totem pole from the Kharazi tribe.", + "durability": null, + "name": "Gilded totem", + "archery_ticket_price": "0", + "id": "750" + }, + { + "examine": "A common gnomeball, obtained by playing gnomeball.", + "durability": null, + "name": "Gnomeball", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "751", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Gnomeball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "752" + }, + { + "ge_buy_limit": "100", + "examine": "Poisonous berries.", + "grand_exchange_price": "42", + "durability": null, + "name": "Cadava berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "753" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "42", + "durability": null, + "name": "Cadava berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "754" + }, + { + "shop_price": "1", + "examine": "This potion will most certainly almost kill you.", + "durability": null, + "name": "Cadava potion", + "archery_ticket_price": "0", + "id": "756" + }, + { + "examine": "Phoenix Gang weapon store key.", + "durability": null, + "name": "Weapon store key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "759" + }, + { + "durability": null, + "name": "Weapon store key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "760" + }, + { + "destroy_message": "You'll have to kill Jonny the beard in order to get another one.", + "examine": "An intelligence report.", + "durability": null, + "name": "Intel report", + "destroy": "true", + "archery_ticket_price": "0", + "id": "761" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Half of the Shield of Arrav.", + "durability": null, + "name": "Broken shield", + "destroy": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "763" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Half of the Shield of Arrav.", + "durability": null, + "name": "Broken shield", + "destroy": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "765" + }, + { + "turn90cw_anim": "821", + "examine": "Second-rate crossbow, former property of the Phoenix Gang.", + "walk_anim": "4226", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Phoenix crossbow", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "767", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Phoenix crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "768" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Entrance certificate to the Imperial Guard.", + "durability": null, + "name": "Certificate", + "archery_ticket_price": "0", + "id": "769" + }, + { + "destroy_message": "You can get another branch if you chop the dramen tree underneath Entrana again.", + "examine": "A limb of the fabled Dramen tree.", + "durability": null, + "name": "Dramen branch", + "tradeable": "false", + "destroy": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "771" + }, + { + "turn90cw_anim": "1207", + "examine": "Crafted from a Dramen tree branch.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Dramen staff", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "772", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "examine": "A perfect ruby ring.", + "durability": null, + "name": "'perfect' ring", + "archery_ticket_price": "0", + "id": "773", + "equipment_slot": "12" + }, + { + "examine": "A perfect ruby necklace.", + "durability": null, + "name": "'perfect' necklace", + "archery_ticket_price": "0", + "id": "774", + "equipment_slot": "2" + }, + { + "destroy_message": "You can obtain another set of Cooking gauntlets from Dimintheis.", + "examine": "These gauntlets empower with a greater ability to cook fish.", + "durability": null, + "name": "Cooking gauntlets", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "775", + "bonuses": "2,2,2,0,0,8,9,7,0,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can obtain another set of Goldsmith gauntlets from Dimintheis.", + "examine": "These gauntlets empower the bearer whilst making gold.", + "durability": null, + "name": "Goldsmith gauntlets", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "776", + "bonuses": "2,2,2,0,0,8,9,7,0,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can obtain another set of Chaos gauntlets from Dimintheis.", + "examine": "These gauntlets empower spell casters.", + "durability": null, + "name": "Chaos gauntlets", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "777", + "bonuses": "2,2,2,0,0,8,9,7,0,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "My reward for assisting the Fitzharmon family.", + "durability": null, + "name": "Family gauntlets", + "weight": "1", + "archery_ticket_price": "0", + "id": "778", + "bonuses": "2,2,2,0,0,8,9,7,0,0,0,2,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "A fragment of the Fitzharmon family crest.", + "durability": null, + "name": "Crest part", + "archery_ticket_price": "0", + "id": "779" + }, + { + "examine": "A fragment of the Fitzharmon family crest.", + "durability": null, + "name": "Crest part", + "archery_ticket_price": "0", + "id": "780" + }, + { + "examine": "A fragment of the Fitzharmon family crest.", + "durability": null, + "name": "Crest part", + "archery_ticket_price": "0", + "id": "781" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A sample of the bark from the Grand Tree.", + "durability": null, + "name": "Bark sample", + "archery_ticket_price": "0", + "id": "783" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A book to translate the ancient gnome language into English.", + "durability": null, + "name": "Translation book", + "archery_ticket_price": "0", + "id": "784" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Perhaps I should read it and see what Glough is up to!", + "durability": null, + "name": "Glough's journal", + "archery_ticket_price": "0", + "id": "785" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Hazelmere wrote something down on this scroll.", + "durability": null, + "name": "Hazelmere's scroll", + "archery_ticket_price": "0", + "id": "786" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An order from the Karamja shipyard.", + "durability": null, + "name": "Lumber order", + "archery_ticket_price": "0", + "id": "787" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "The key to Glough's chest.", + "durability": null, + "name": "Glough's key", + "weight": "1", + "archery_ticket_price": "0", + "id": "788" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "789" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "790" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "791" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Twigs bound together in the shape of a (Z/U/T/O).", + "durability": null, + "name": "Twigs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "792" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An ancient rock with strange magical properties.", + "durability": null, + "name": "Daconia rock", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "793" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "These are plans for an invasion!", + "durability": null, + "name": "Invasion plans", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "794" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A model of a Karamja warship", + "durability": null, + "name": "War ship", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "795" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "3", + "name": "Bronze thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "800", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,5" + }, + { + "shop_price": "13", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "14", + "name": "Iron thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "801", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,5}", + "shop_price": "38", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "60", + "name": "Steel thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "802", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,11" + }, + { + "requirements": "{4,20}", + "shop_price": "105", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "135", + "name": "Mithril thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "803", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,16" + }, + { + "requirements": "{4,30}", + "shop_price": "262", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "138", + "name": "Adamant thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "804", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,23" + }, + { + "requirements": "{4,40}", + "shop_price": "698", + "ge_buy_limit": "1000", + "examine": "A finely balanced throwing axe.", + "has_special": "true", + "durability": null, + "attack_speed": "5", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "243", + "name": "Rune thrownaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "805", + "bonuses": "0,0,0,0,26,0,0,0,0,0,0,0,0,0,36" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "53", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "806", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "59", + "attack_audios": "2547,0,0,0", + "name": "Iron dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "807", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "50", + "attack_audios": "2547,0,0,0", + "name": "Steel dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "808", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "68", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "809", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "96", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "810", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "122", + "attack_audios": "2547,0,0,0", + "name": "Rune dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "811", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "66", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "812", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "66", + "attack_audios": "2547,0,0,0", + "name": "Iron dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "813", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "75", + "attack_audios": "2547,0,0,0", + "name": "Steel dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "814", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "65", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "815", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "75", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "816", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "110", + "attack_audios": "2547,0,0,0", + "name": "Rune dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "817", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Poisoned dart(p)", + "archery_ticket_price": "0", + "id": "818", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of bronze - needs feathers for flight.", + "grand_exchange_price": "24", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Bronze dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "819" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of iron - needs feathers for flight.", + "grand_exchange_price": "19", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Iron dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "820" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of steel - needs feathers for flight.", + "grand_exchange_price": "66", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Steel dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "821" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of mithril - needs feathers for flight.", + "grand_exchange_price": "97", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Mithril dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "822" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of adamantite - needs feathers for flight.", + "grand_exchange_price": "212", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Adamant dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "823" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dart tip made of runite - needs feathers for flight.", + "grand_exchange_price": "498", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Rune dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "824" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "6", + "name": "Bronze javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "825", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "2", + "name": "Iron javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "826", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "19", + "name": "Steel javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "827", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "25", + "name": "Mithril javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "828", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "shop_price": "100", + "ge_buy_limit": "1000", + "examine": "An adamant tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "51", + "name": "Adamant javelin", + "tradeable": "true", + "archery_ticket_price": "100", + "id": "829", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "requirements": "{4,40}", + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "186", + "name": "Rune javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "830", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "19", + "name": "Bronze javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "831", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "19", + "name": "Iron javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "832", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "34", + "name": "Steel javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "833", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "44", + "name": "Mithril javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "834", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "shop_price": "100", + "ge_buy_limit": "1000", + "examine": "An adamant tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "88", + "name": "Adamant javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "835", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "requirements": "{4,40}", + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "256", + "name": "Rune javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "836", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "This fires crossbow bolts.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "276", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "837", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0", + "shop_price": "70", + "durability": null, + "weight": "8", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Crossbow" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "276", + "durability": null, + "name": "Crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "838" + }, + { + "ge_buy_limit": "5000", + "turn90cw_anim": "821", + "examine": "A nice sturdy bow.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "55", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "839", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,0", + "shop_price": "80", + "durability": null, + "weight": "1.8", + "weapon_interface": "16", + "render_anim": "1", + "attack_audios": "2700,0,0,0", + "name": "Longbow" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "55", + "durability": null, + "name": "Longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "840" + }, + { + "ge_buy_limit": "5000", + "turn90cw_anim": "821", + "examine": "A shortbow made of wood.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "79", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "841", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,0", + "shop_price": "50", + "durability": null, + "weight": "1.33", + "weapon_interface": "16", + "render_anim": "1", + "attack_audios": "2700,0,0,0", + "name": "Shortbow" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "79", + "durability": null, + "name": "Shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "842" + }, + { + "requirements": "{4,5}", + "shop_price": "164", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of oak, still effective.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "54", + "attack_audios": "2700,0,0,0", + "name": "Oak shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "843", + "bonuses": "0,0,0,0,14,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "54", + "durability": null, + "name": "Oak shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "844" + }, + { + "requirements": "{4,5}", + "shop_price": "160", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of oak.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "132", + "attack_audios": "2700,0,0,0", + "name": "Oak longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "845", + "bonuses": "0,0,0,0,14,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "132", + "durability": null, + "name": "Oak longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "846" + }, + { + "requirements": "{4,20}", + "shop_price": "320", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of willow.", + "durability": null, + "weight": "1.5", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "132", + "attack_audios": "2700,0,0,0", + "name": "Willow longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "847", + "bonuses": "0,0,0,0,20,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "132", + "durability": null, + "name": "Willow longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "848" + }, + { + "requirements": "{4,20}", + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of willow, still effective.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "106", + "attack_audios": "2700,0,0,0", + "name": "Willow shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "849", + "bonuses": "0,0,0,0,20,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "106", + "durability": null, + "name": "Willow shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "850" + }, + { + "requirements": "{4,30}", + "shop_price": "640", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of maple.", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "320", + "attack_audios": "2700,0,0,0", + "name": "Maple longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "851", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "320", + "durability": null, + "name": "Maple longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "852" + }, + { + "requirements": "{4,30}", + "shop_price": "400", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of maple, still effective.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "290", + "attack_audios": "2700,0,0,0", + "name": "Maple shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "853", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "290", + "durability": null, + "name": "Maple shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "854" + }, + { + "requirements": "{4,40}", + "shop_price": "674", + "ge_buy_limit": "5000", + "examine": "A nice sturdy bow made out of yew.", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "706", + "attack_audios": "2700,0,0,0", + "name": "Yew longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "855", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "706", + "durability": null, + "name": "Yew longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "856" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "5000", + "examine": "A shortbow made out of yew, still effective.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "422", + "attack_audios": "2700,0,0,0", + "name": "Yew shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "857", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "422", + "durability": null, + "name": "Yew shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "858" + }, + { + "requirements": "{4,50}", + "shop_price": "1270", + "ge_buy_limit": "5000", + "examine": "A nice sturdy magical bow.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "1437", + "attack_audios": "2700,0,0,0", + "name": "Magic longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "859", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1437", + "durability": null, + "name": "Magic longbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "860" + }, + { + "requirements": "{4,50}", + "shop_price": "5600", + "ge_buy_limit": "5000", + "examine": "Short and magical, but still effective.", + "has_special": "true", + "durability": null, + "weight": "1.3", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "959", + "attack_audios": "2700,0,0,0", + "name": "Magic shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "861", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "959", + "durability": null, + "name": "Magic shortbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "862" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "87", + "attack_audios": "2704,0,0,0", + "name": "Iron knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "863", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "73", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "864", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "136", + "attack_audios": "2704,0,0,0", + "name": "Steel knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "865", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "201", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "866", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "421", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "867", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1132", + "attack_audios": "2704,0,0,0", + "name": "Rune knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "868", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "95", + "attack_audios": "2704,0,0,0", + "name": "Black knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "869", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "73", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "870", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "88", + "attack_audios": "2704,0,0,0", + "name": "Iron knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "871", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "124", + "attack_audios": "2704,0,0,0", + "name": "Steel knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "872", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "226", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "873", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "69", + "attack_audios": "2704,0,0,0", + "name": "Black knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "874", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "503", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "875", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1374", + "attack_audios": "2704,0,0,0", + "name": "Rune knife(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "876", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "877", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "38", + "durability": null, + "name": "Bronze bolts(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "878", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "25000", + "examine": "Opal tipped bronze crossbow bolts", + "grand_exchange_price": "5", + "durability": null, + "name": "Opal bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "879", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,14", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "ge_buy_limit": "25000", + "examine": "Pearl tipped Iron crossbow bolts.", + "grand_exchange_price": "32", + "durability": null, + "name": "Pearl bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "880", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,48", + "equipment_slot": "13" + }, + { + "shop_price": "80", + "ge_buy_limit": "10000", + "examine": "Great if you have a crossbow!", + "grand_exchange_price": "42", + "durability": null, + "name": "Barbed bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "881", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,12", + "equipment_slot": "13" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "10", + "durability": null, + "name": "Bronze arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "882", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "39", + "durability": null, + "name": "Bronze arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "883", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "10", + "durability": null, + "name": "Iron arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "884", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "41", + "durability": null, + "name": "Iron arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "885", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "25", + "durability": null, + "name": "Steel arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "886", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "69", + "durability": null, + "name": "Steel arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "887", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "30", + "durability": null, + "name": "Mithril arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "888", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "69", + "durability": null, + "name": "Mithril arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "889", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "111", + "durability": null, + "name": "Adamant arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "890", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "109", + "durability": null, + "name": "Adamant arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "891", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "212", + "durability": null, + "name": "Rune arrow", + "tradeable": "true", + "archery_ticket_price": "40", + "id": "892", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "257", + "durability": null, + "name": "Rune arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "893", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with bronze heads and oil-soaked cloth. lit: An easy to make, bronze-headed fire arrow.", + "grand_exchange_price": "228", + "durability": null, + "name": "Bronze fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "942", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "0", + "examine": "Ugh! It's wriggling!", + "durability": null, + "name": "Worm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "943" + }, + { + "durability": null, + "name": "Worm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "944" + }, + { + "durability": null, + "name": "Throwing rope", + "archery_ticket_price": "0", + "id": "945", + "equipment_slot": "3" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "A dangerous looking knife.", + "grand_exchange_price": "32", + "durability": null, + "name": "Knife", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "946" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "32", + "durability": null, + "name": "Knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "947" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "This would make warm clothing.", + "grand_exchange_price": "9", + "durability": null, + "name": "Bear fur", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "948" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9", + "durability": null, + "name": "Bear fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "949" + }, + { + "shop_price": "21", + "ge_buy_limit": "100", + "examine": "It's a sheet of silk.", + "grand_exchange_price": "27", + "durability": null, + "name": "Silk", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "950" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27", + "durability": null, + "name": "Silk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "951" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A slightly muddy spade. / Popular with farmers and treasure hunters.", + "grand_exchange_price": "117", + "durability": null, + "name": "Spade", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "952" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "117", + "durability": null, + "name": "Spade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "953" + }, + { + "shop_price": "18", + "ge_buy_limit": "100", + "examine": "A coil of rope.", + "grand_exchange_price": "96", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "954" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "96", + "durability": null, + "name": "Rope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "955" + }, + { + "examine": "Get your axes from Bob's Axes.", + "durability": null, + "name": "Flier", + "archery_ticket_price": "0", + "id": "956" + }, + { + "shop_price": "70", + "ge_buy_limit": "100", + "examine": "This would make warm clothing.", + "grand_exchange_price": "34", + "durability": null, + "name": "Grey wolf fur", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "958" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34", + "durability": null, + "name": "Grey wolf fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "959" + }, + { + "shop_price": "100", + "ge_buy_limit": "10000", + "examine": "A plank of wood!", + "grand_exchange_price": "234", + "durability": null, + "name": "Plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "960" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "234", + "durability": null, + "name": "Plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "961" + }, + { + "ge_buy_limit": "2", + "examine": "I need to pull this.", + "grand_exchange_price": "15", + "durability": null, + "name": "Christmas cracker", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "962" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1900000000", + "durability": null, + "name": "Christmas cracker", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "963" + }, + { + "examine": "A fraction of a roof.", + "durability": null, + "name": "Tile", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "966" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "Used for making notes.", + "grand_exchange_price": "153", + "durability": null, + "name": "Papyrus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "970" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "153", + "durability": null, + "name": "Papyrus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "971" + }, + { + "shop_price": "15", + "examine": "Used for making notes.", + "grand_exchange_price": "163", + "durability": null, + "name": "Papyrus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "972" + }, + { + "shop_price": "45", + "ge_buy_limit": "100", + "examine": "A lump of charcoal.", + "grand_exchange_price": "272", + "durability": null, + "name": "Charcoal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "973" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "272", + "durability": null, + "name": "Charcoal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "974" + }, + { + "shop_price": "52", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "grand_exchange_price": "619", + "name": "Machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "975", + "bonuses": "0,6,-2,0,0,0,0,0,0,0,0,5,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "619", + "durability": null, + "name": "Machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "976" + }, + { + "durability": null, + "name": "Cooking pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "978" + }, + { + "shop_price": "10", + "ge_buy_limit": "2", + "examine": "Used to get out of Thordur's blackhole.", + "grand_exchange_price": "298000000", + "durability": null, + "name": "Disk of returning", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "981" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "298000000", + "durability": null, + "name": "Disk of returning", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "982" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "A key found on the floor of Edgeville Dungeon.", + "grand_exchange_price": "547", + "durability": null, + "name": "Brass key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "983" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "547", + "durability": null, + "name": "Brass key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "984" + }, + { + "ge_buy_limit": "100", + "examine": "The tooth end of the mysterious Crystal key. Can you find the other half?", + "grand_exchange_price": "24900", + "durability": null, + "name": "Tooth half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "985" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24900", + "durability": null, + "name": "Tooth half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "986" + }, + { + "ge_buy_limit": "100", + "examine": "The loop end of the mysterious Crystal key. Can you find the other half?", + "grand_exchange_price": "21100", + "durability": null, + "name": "Loop half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "987" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21100", + "durability": null, + "name": "Loop half of a key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "988" + }, + { + "ge_buy_limit": "100", + "examine": "A mysterious key for a mysterious chest.", + "grand_exchange_price": "48700", + "durability": null, + "name": "Crystal key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "989" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48700", + "durability": null, + "name": "Crystal key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "990" + }, + { + "ge_buy_limit": "100", + "examine": "It looks like the key to a chest", + "grand_exchange_price": "4971", + "durability": null, + "name": "Muddy key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "991" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4971", + "durability": null, + "name": "Muddy key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "992" + }, + { + "ge_buy_limit": "100", + "examine": "You get a sense of dread from this key.", + "grand_exchange_price": "54600", + "durability": null, + "name": "Sinister key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "993" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "54600", + "durability": null, + "name": "Sinister key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "994" + }, + { + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "995" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A mostly clean apron.", + "grand_exchange_price": "93", + "durability": null, + "name": "White apron", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "1005", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "White apron", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1006" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A bright red cape.", + "grand_exchange_price": "187", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1007", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1008" + }, + { + "ge_buy_limit": "100", + "examine": "I'd prefer a gold one.", + "grand_exchange_price": "65", + "durability": null, + "name": "Brass necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1009", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65", + "durability": null, + "name": "Brass necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1010" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "Leg covering favored by women and wizards.", + "grand_exchange_price": "208", + "durability": null, + "name": "Blue skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1011", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "208", + "durability": null, + "name": "Blue skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1012" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A ladies skirt.", + "grand_exchange_price": "216", + "durability": null, + "name": "Pink skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1013", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "216", + "durability": null, + "name": "Pink skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1014" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "Clothing favoured by women and dark wizards.", + "grand_exchange_price": "30", + "durability": null, + "name": "Black skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1015", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Black skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1016" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "grand_exchange_price": "280", + "durability": null, + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "1017", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "280", + "durability": null, + "name": "Wizard hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1018" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A warm black cape.", + "grand_exchange_price": "209", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1019", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "209", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1020" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick blue cape.", + "grand_exchange_price": "504", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1021", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "504", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1022" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick yellow cape.", + "grand_exchange_price": "439", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1023", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "439", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1024" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A black piece of cloth on a string.", + "grand_exchange_price": "111", + "durability": null, + "name": "Eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1025", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "durability": null, + "name": "Eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1026" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick green cape.", + "grand_exchange_price": "1061", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1027", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1061", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1028" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick purple cape.", + "grand_exchange_price": "955", + "durability": null, + "name": "Cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1029", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "955", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1030" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A thick orange cape.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "1", + "grand_exchange_price": "1656", + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1031", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1656", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1032" + }, + { + "shop_price": "30", + "ge_buy_limit": "2", + "examine": "A robe worn by worshippers of Zamorak.", + "grand_exchange_price": "2481", + "durability": null, + "name": "Zamorak robe", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1033", + "bonuses": "0,0,0,2,0,0,0,0,3,0,0,0,3,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2481", + "durability": null, + "name": "Zamorak robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1034" + }, + { + "shop_price": "40", + "ge_buy_limit": "2", + "examine": "A robe worn by worshippers of Zamorak.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1259", + "name": "Zamorak robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1035", + "bonuses": "0,0,0,2,0,0,0,0,3,0,3,0,3,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1259", + "durability": null, + "name": "Zamorak robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1036" + }, + { + "destroy_message": "You can get a replacement from Diango.", + "shop_price": "1", + "examine": "A rabbit-like adornment.", + "durability": null, + "name": "Bunny ears", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1037", + "equipment_slot": "0" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Red partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1038", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1500000000", + "durability": null, + "name": "Red partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1039" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Yellow partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1040", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000000", + "durability": null, + "name": "Yellow partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1041" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Blue partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1042", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2100000000", + "durability": null, + "name": "Blue partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1043" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Green partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1044", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1300000000", + "durability": null, + "name": "Green partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1045" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "Purple partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1046", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1000000000", + "durability": null, + "name": "Purple partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1047" + }, + { + "lendable": "true", + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "10", + "durability": null, + "name": "White partyhat", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1048", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2000000000", + "durability": null, + "name": "White partyhat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1049" + }, + { + "shop_price": "1", + "ge_buy_limit": "2", + "examine": "It's a Santa hat.", + "durability": null, + "weight": "0.1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5", + "name": "Santa hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "1050" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "112600000", + "durability": null, + "name": "Santa hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1051" + }, + { + "shop_price": "450", + "examine": "The cape worn by members of the Legends Guild.", + "durability": null, + "name": "Cape of legends", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "1052", + "bonuses": "0,0,0,0,0,7,7,7,7,7,7,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "shop_price": "15", + "ge_buy_limit": "2", + "examine": "Aaaarrrghhh ... I'm a monster.", + "durability": null, + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "98000000", + "name": "Green h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1053" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "98000000", + "durability": null, + "name": "Green h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1054" + }, + { + "remove_head": "true", + "shop_price": "15", + "ge_buy_limit": "2", + "examine": "Aaaarrrghhh ... I'm a monster.", + "durability": null, + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "115900000", + "name": "Blue h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1055" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "115900000", + "durability": null, + "name": "Blue h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1056" + }, + { + "remove_head": "true", + "shop_price": "15", + "ge_buy_limit": "2", + "examine": "Aaaarrrghhh ... I'm a monster.", + "durability": null, + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "154300000", + "name": "Red h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1057" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "154300000", + "durability": null, + "name": "Red h'ween mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1058" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "These will keep my hands warm!", + "grand_exchange_price": "12", + "durability": null, + "name": "Leather gloves", + "tradeable": "true", + "weight": "0.23", + "archery_ticket_price": "0", + "id": "1059", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "12", + "durability": null, + "name": "Leather gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1060" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "Comfortable leather boots.", + "grand_exchange_price": "144", + "durability": null, + "name": "Leather boots", + "tradeable": "true", + "weight": "0.34", + "archery_ticket_price": "0", + "id": "1061", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "144", + "durability": null, + "name": "Leather boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1062" + }, + { + "shop_price": "18", + "ge_buy_limit": "5000", + "examine": "Better than no armour!", + "grand_exchange_price": "13", + "durability": null, + "name": "Leather vambraces", + "tradeable": "true", + "weight": "0.22", + "archery_ticket_price": "0", + "id": "1063", + "bonuses": "0,0,0,0,4,2,2,1,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13", + "durability": null, + "name": "Leather vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1064" + }, + { + "requirements": "{4,40}", + "shop_price": "2500", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "0.28", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "1407", + "name": "Green d'hide vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1065", + "bonuses": "0,0,0,-10,8,3,2,4,2,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1407", + "durability": null, + "name": "Green d'hide vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1066" + }, + { + "shop_price": "280", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "1,0,1", + "equipment_slot": "7", + "grand_exchange_price": "55", + "name": "Iron platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1067", + "bonuses": "0,0,0,-21,-7,11,10,10,-4,10,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "55", + "durability": null, + "name": "Iron platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1068" + }, + { + "requirements": "{1,5}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "1,0,1", + "equipment_slot": "7", + "grand_exchange_price": "426", + "name": "Steel platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1069", + "bonuses": "0,0,0,-21,-7,17,16,15,-4,16,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "426", + "durability": null, + "name": "Steel platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1070" + }, + { + "requirements": "{1,20}", + "shop_price": "2600", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "7.7", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "1391", + "name": "Mithril platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1071", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1391", + "durability": null, + "name": "Mithril platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1072" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "10", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "3649", + "name": "Adamant platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1073", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3649", + "durability": null, + "name": "Adamant platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1074" + }, + { + "shop_price": "80", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "grand_exchange_price": "34", + "durability": null, + "name": "Bronze platelegs", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "1075", + "bonuses": "0,0,0,-21,-7,8,7,6,-4,7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34", + "durability": null, + "name": "Bronze platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1076" + }, + { + "requirements": "{1,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "These look pretty heavy", + "durability": null, + "weight": "9", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "4995", + "name": "Black platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1077", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4995", + "durability": null, + "name": "Black platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1078" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "ge_buy_limit": "100", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "38500", + "name": "Rune platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1079", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38500", + "durability": null, + "name": "Rune platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1080" + }, + { + "shop_price": "280", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "grand_exchange_price": "86", + "durability": null, + "name": "Iron plateskirt", + "tradeable": "true", + "weight": "8.1", + "archery_ticket_price": "0", + "id": "1081", + "bonuses": "0,0,0,-21,-7,11,10,10,-4,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "86", + "durability": null, + "name": "Iron plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1082" + }, + { + "requirements": "{1,5}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "8.1", + "equipment_slot": "7", + "grand_exchange_price": "514", + "name": "Steel plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1083", + "bonuses": "0,0,0,-21,-7,17,16,15,-4,16,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "514", + "durability": null, + "name": "Steel plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1084" + }, + { + "requirements": "{1,20}", + "shop_price": "2600", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "7.2", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "1339", + "name": "Mithril plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1085", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1339", + "durability": null, + "name": "Mithril plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1086" + }, + { + "shop_price": "80", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "grand_exchange_price": "113", + "durability": null, + "name": "Bronze plateskirt", + "tradeable": "true", + "weight": "8.1", + "archery_ticket_price": "0", + "id": "1087", + "bonuses": "0,0,0,-21,-7,8,7,6,-4,7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "113", + "durability": null, + "name": "Bronze plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1088" + }, + { + "requirements": "{1,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "8", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "2180", + "name": "Black plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1089", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2180", + "durability": null, + "name": "Black plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1090" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "3610", + "name": "Adamant plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1091", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3610", + "durability": null, + "name": "Adamant plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1092" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "ge_buy_limit": "100", + "examine": "Designer leg protection.", + "durability": null, + "weight": "8", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "38100", + "name": "Rune plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1093", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38100", + "durability": null, + "name": "Rune plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1094" + }, + { + "shop_price": "23", + "ge_buy_limit": "5000", + "examine": "Better than no armour!", + "grand_exchange_price": "5", + "durability": null, + "name": "Leather chaps", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1095", + "bonuses": "0,0,0,0,4,2,2,1,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5", + "durability": null, + "name": "Leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1096" + }, + { + "requirements": "{4,20}", + "shop_price": "750", + "ge_buy_limit": "1000", + "examine": "Those studs should provide a bit more protection.", + "durability": null, + "weight": "4.5", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "377", + "name": "Studded chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1097", + "bonuses": "0,0,0,-5,6,15,16,17,6,16,5,0,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "377", + "durability": null, + "name": "Studded chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1098" + }, + { + "requirements": "{4,40}", + "shop_price": "3900", + "ge_buy_limit": "5000", + "examine": "100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,4,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2228", + "name": "Green d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1099", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2228", + "durability": null, + "name": "Green d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1100" + }, + { + "shop_price": "210", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "76", + "durability": null, + "name": "Iron chainbody", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "1101", + "bonuses": "0,0,0,-15,0,10,15,19,-3,12,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "76", + "durability": null, + "name": "Iron chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1102" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "37", + "durability": null, + "name": "Bronze chainbody", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "1103", + "bonuses": "0,0,0,-15,0,7,11,13,-3,9,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "37", + "durability": null, + "name": "Bronze chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1104" + }, + { + "requirements": "{1,5}", + "shop_price": "750", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6", + "equipment_slot": "4", + "grand_exchange_price": "265", + "name": "Steel chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1105", + "bonuses": "0,0,0,-15,0,17,25,30,-3,19,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "265", + "durability": null, + "name": "Steel chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1106" + }, + { + "requirements": "{1,10}", + "shop_price": "1440", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6.8", + "absorb": "1,0,2", + "equipment_slot": "4", + "grand_exchange_price": "961", + "name": "Black chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1107", + "bonuses": "0,0,0,-15,0,22,32,39,-3,24,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "961", + "durability": null, + "name": "Black chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1108" + }, + { + "requirements": "{1,20}", + "shop_price": "1950", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "5.8", + "absorb": "1,0,3", + "equipment_slot": "4", + "grand_exchange_price": "963", + "name": "Mithril chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1109", + "bonuses": "0,0,0,-15,0,25,35,42,-3,27,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "963", + "durability": null, + "name": "Mithril chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1110" + }, + { + "requirements": "{1,30}", + "shop_price": "4800", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "7.7", + "absorb": "2,0,4", + "equipment_slot": "4", + "grand_exchange_price": "2731", + "name": "Adamant chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1111", + "bonuses": "0,0,0,-15,0,36,50,61,-3,38,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2731", + "durability": null, + "name": "Adamant chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1112" + }, + { + "requirements": "{1,40}", + "shop_price": "50000", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6.8", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "29800", + "name": "Rune chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1113", + "bonuses": "0,0,0,-15,0,63,72,78,-3,65,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29800", + "durability": null, + "name": "Rune chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1114" + }, + { + "shop_price": "560", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.95", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "434", + "name": "Iron platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1115", + "bonuses": "0,0,0,-30,-10,21,20,12,-6,20,5,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "434", + "durability": null, + "name": "Iron platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1116" + }, + { + "shop_price": "160", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.5", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "36", + "name": "Bronze platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1117", + "bonuses": "0,0,0,-30,-10,15,14,9,-6,14,5,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "36", + "durability": null, + "name": "Bronze platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1118" + }, + { + "requirements": "{1,5}", + "shop_price": "2000", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1077", + "name": "Steel platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1119", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1077", + "durability": null, + "name": "Steel platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1120" + }, + { + "requirements": "{1,20}", + "shop_price": "5200", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "8.6", + "absorb": "1,0,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "2965", + "name": "Mithril platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1121", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,20,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "2965", + "durability": null, + "name": "Mithril platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1122" + }, + { + "requirements": "{1,30}", + "shop_price": "16256", + "ge_buy_limit": "500", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "11", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "9790", + "name": "Adamant platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1123", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "9790", + "durability": null, + "name": "Adamant platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1124" + }, + { + "requirements": "{1,10}", + "shop_price": "3840", + "ge_buy_limit": "500", + "examine": "Provides Excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "4915", + "name": "Black platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1125", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "4915", + "durability": null, + "name": "Black platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1126" + }, + { + "requirements": "{1,40}", + "shop_price": "65000", + "ge_buy_limit": "100", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "38800", + "name": "Rune platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1127", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38800", + "durability": null, + "name": "Rune platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1128" + }, + { + "shop_price": "20", + "ge_buy_limit": "1000", + "examine": "Better than no armour!", + "grand_exchange_price": "34", + "durability": null, + "name": "Leather body", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "1129", + "bonuses": "0,0,0,-2,2,8,9,10,4,9,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "34", + "durability": null, + "name": "Leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1130" + }, + { + "requirements": "{1,10}", + "shop_price": "170", + "ge_buy_limit": "1000", + "examine": "Harder than normal leather.", + "durability": null, + "weight": "3.6", + "absorb": "0,2,1", + "equipment_slot": "4", + "grand_exchange_price": "43", + "name": "Hardleather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1131", + "bonuses": "0,0,0,-4,8,12,15,18,6,15,10,0,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "43", + "durability": null, + "name": "Hardleather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1132" + }, + { + "requirements": "{1,20}-{4,20}", + "shop_price": "850", + "ge_buy_limit": "1000", + "examine": "These studs should provide a bit more protection.", + "durability": null, + "weight": "5", + "absorb": "0,3,1", + "equipment_slot": "4", + "grand_exchange_price": "414", + "name": "Studded body", + "tradeable": "true", + "archery_ticket_price": "150", + "id": "1133", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "414", + "durability": null, + "name": "Studded body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1134" + }, + { + "requirements": "{1,40}-{4,40}", + "shop_price": "7800", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "4544", + "name": "Green d'hide body", + "tradeable": "true", + "archery_ticket_price": "2400", + "id": "1135", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4544", + "durability": null, + "name": "Green d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1136" + }, + { + "remove_head": "true", + "shop_price": "84", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "22", + "name": "Iron med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1137", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22", + "durability": null, + "name": "Iron med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1138" + }, + { + "remove_head": "true", + "shop_price": "24", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "39", + "name": "Bronze med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1139", + "bonuses": "0,0,0,-3,-1,3,4,2,-1,3,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "39", + "durability": null, + "name": "Bronze med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1140" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "52", + "name": "Steel med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1141", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "52", + "durability": null, + "name": "Steel med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1142" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "780", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.3", + "equipment_slot": "0", + "grand_exchange_price": "272", + "name": "Mithril med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1143", + "bonuses": "0,0,0,-3,-1,10,11,9,-1,10,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "272", + "durability": null, + "name": "Mithril med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1144" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "1024", + "name": "Adamant med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1145", + "bonuses": "0,0,0,-3,-1,14,15,13,-1,14,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1024", + "durability": null, + "name": "Adamant med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1146" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "19200", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "11400", + "name": "Rune med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1147", + "bonuses": "0,0,0,-3,-1,22,23,21,-1,22,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11400", + "durability": null, + "name": "Rune med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1148" + }, + { + "remove_head": "true", + "requirements": "{1,60}", + "ge_buy_limit": "100", + "examine": "Makes the wearer pretty intimidating.", + "durability": null, + "weight": "1.3", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "60500", + "name": "Dragon med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1149", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60500", + "durability": null, + "name": "Dragon med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1150" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "shop_price": "530", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "242", + "name": "Black med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1151", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "242", + "durability": null, + "name": "Black med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1152" + }, + { + "remove_head": "true", + "shop_price": "61", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "56", + "name": "Iron full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1153", + "bonuses": "0,0,0,-6,-2,6,7,5,-1,6,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Iron full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1154" + }, + { + "remove_head": "true", + "shop_price": "44", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "67", + "name": "Bronze full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1155", + "bonuses": "0,0,0,-6,-2,4,5,3,-1,4,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "67", + "durability": null, + "name": "Bronze full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1156" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "550", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "195", + "name": "Steel full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1157", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Steel full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1158" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "1430", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "675", + "name": "Mithril full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1159", + "bonuses": "0,0,0,-6,-2,13,14,11,-1,13,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "675", + "durability": null, + "name": "Mithril full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1160" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "shop_price": "3520", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "1911", + "name": "Adamant full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1161", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1911", + "durability": null, + "name": "Adamant full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1162" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "20900", + "name": "Rune full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1163", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20900", + "durability": null, + "name": "Rune full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1164" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "shop_price": "1372", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "731", + "name": "Black full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1165", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "731", + "durability": null, + "name": "Black full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1166" + }, + { + "remove_head": "true", + "shop_price": "24", + "ge_buy_limit": "5000", + "examine": "Better than no armour!", + "durability": null, + "weight": "0.9", + "equipment_slot": "0", + "grand_exchange_price": "9", + "name": "Leather cowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1167", + "bonuses": "0,0,0,0,1,2,3,4,2,3,0,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "9", + "durability": null, + "name": "Leather cowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1168" + }, + { + "remove_head": "true", + "requirements": "{4,20}", + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "Light weight head protection.", + "durability": null, + "weight": "0.9", + "equipment_slot": "0", + "grand_exchange_price": "56", + "name": "Coif", + "tradeable": "true", + "archery_ticket_price": "100", + "id": "1169", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,5,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "56", + "durability": null, + "name": "Coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1170" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A solid wooden shield.", + "grand_exchange_price": "483", + "durability": null, + "name": "Wooden shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1171", + "bonuses": "0,0,0,0,0,4,5,3,1,4,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "483", + "durability": null, + "name": "Wooden shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1172" + }, + { + "shop_price": "48", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze sq shield", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1173", + "bonuses": "0,0,0,-6,-2,5,6,4,0,5,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1174" + }, + { + "shop_price": "168", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "grand_exchange_price": "39", + "durability": null, + "name": "Iron sq shield", + "tradeable": "true", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "1175", + "bonuses": "0,0,0,-6,-2,8,9,7,0,8,1,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "39", + "durability": null, + "name": "Iron sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1176" + }, + { + "requirements": "{1,5}", + "shop_price": "600", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3", + "equipment_slot": "5", + "grand_exchange_price": "185", + "name": "Steel sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1177", + "bonuses": "0,0,0,-6,-2,12,13,11,0,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "185", + "durability": null, + "name": "Steel sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1178" + }, + { + "requirements": "{1,10}", + "shop_price": "1463", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "511", + "name": "Black sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1179", + "bonuses": "0,0,0,-6,-2,15,16,14,0,15,9,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "511", + "durability": null, + "name": "Black sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1180" + }, + { + "requirements": "{1,20}", + "shop_price": "1560", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3.1", + "absorb": "2,0,4", + "equipment_slot": "5", + "grand_exchange_price": "744", + "name": "Mithril sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1181", + "bonuses": "0,0,0,-6,-2,17,19,15,0,17,18,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "744", + "durability": null, + "name": "Mithril sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1182" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2136", + "name": "Adamant sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1183", + "bonuses": "0,0,0,-6,-2,24,26,22,0,24,25,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2136", + "durability": null, + "name": "Adamant sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1184" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3.64", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "22800", + "name": "Rune sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1185", + "bonuses": "0,0,0,-6,-2,38,40,36,0,38,35,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22800", + "durability": null, + "name": "Rune sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1186" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "An ancient and powerful looking Dragon Square shield.", + "durability": null, + "weight": "3", + "absorb": "5,0,11", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "431900", + "name": "Dragon sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1187", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "431900", + "durability": null, + "name": "Dragon sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1188" + }, + { + "shop_price": "86", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "grand_exchange_price": "18", + "durability": null, + "name": "Bronze kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "1189", + "bonuses": "0,0,0,-8,-2,5,7,6,-1,6,1,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Bronze kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1190" + }, + { + "shop_price": "233", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "grand_exchange_price": "57", + "durability": null, + "name": "Iron kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "1191", + "bonuses": "0,0,0,-8,-2,8,10,9,-1,9,2,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57", + "durability": null, + "name": "Iron kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1192" + }, + { + "requirements": "{1,5}", + "shop_price": "850", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "equipment_slot": "5", + "grand_exchange_price": "354", + "name": "Steel kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1193", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "354", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1194" + }, + { + "requirements": "{1,10}", + "shop_price": "2121", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "3311", + "name": "Black kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1195", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3311", + "durability": null, + "name": "Black kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1196" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "4.5", + "absorb": "2,0,4", + "equipment_slot": "5", + "grand_exchange_price": "1128", + "name": "Mithril kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1197", + "bonuses": "0,0,0,-8,-2,18,22,20,-1,20,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1128", + "durability": null, + "name": "Mithril kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1198" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.8", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3066", + "name": "Adamant kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1199", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3066", + "durability": null, + "name": "Adamant kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1200" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "35600", + "name": "Rune kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1201", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35600", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1202" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "35", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1203", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35", + "durability": null, + "name": "Iron dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1204" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "105", + "attack_audios": "2517,2517,2500,2517", + "name": "Bronze dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1205", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "105", + "durability": null, + "name": "Bronze dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1206" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "17", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1207", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Steel dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1208" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "71", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1209", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "71", + "durability": null, + "name": "Mithril dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1210" + }, + { + "requirements": "{0,30}", + "shop_price": "816", + "ge_buy_limit": "100", + "examine": "Short and deadly.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "300", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1211", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "300", + "durability": null, + "name": "Adamant dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1212" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "lendable": "true", + "grand_exchange_price": "4642", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1213", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4642", + "durability": null, + "name": "Rune dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1214" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "17700", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1215", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "17700", + "durability": null, + "name": "Dragon dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1216" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "79", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1217", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "79", + "durability": null, + "name": "Black dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1218" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "56", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1219", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Iron dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1220" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "86", + "attack_audios": "2517,2517,2500,2517", + "name": "Bronze dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1221", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "86", + "durability": null, + "name": "Bronze dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1222" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "98", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1223", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98", + "durability": null, + "name": "Steel dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1224" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "129", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1225", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "129", + "durability": null, + "name": "Mithril dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1226" + }, + { + "requirements": "{0,30}", + "shop_price": "816", + "ge_buy_limit": "100", + "examine": "Short and deadly.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "365", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1227", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "365", + "durability": null, + "name": "Adamant dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1228" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "lendable": "true", + "grand_exchange_price": "4831", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1229", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4831", + "durability": null, + "name": "Rune dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1230" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "17600", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1231", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "17600", + "durability": null, + "name": "Dragon dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1232" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "grand_exchange_price": "67", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1233", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "67", + "durability": null, + "name": "Black dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1234" + }, + { + "durability": null, + "name": "Poisoned dagger(p)", + "archery_ticket_price": "0", + "id": "1235", + "render_anim": "2584" + }, + { + "durability": null, + "name": "Poisoned dagger(p)", + "archery_ticket_price": "0", + "id": "1236" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "858", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1237", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0", + "shop_price": "26", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Bronze spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "858", + "durability": null, + "name": "Bronze spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1238" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "209", + "stand_anim": "813", + "tradeable": "true", + "name": "Iron spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1239", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "209", + "durability": null, + "name": "Iron spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1240" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "340", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1241", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0", + "requirements": "{0,5}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Steel spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "340", + "durability": null, + "name": "Steel spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1242" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "353", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1243", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0", + "requirements": "{0,20}", + "durability": null, + "weight": "1.8", + "weapon_interface": "14", + "render_anim": "28", + "name": "Mithril spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "353", + "durability": null, + "name": "Mithril spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1244" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "1191", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1245", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0", + "requirements": "{0,30}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Adamant spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "durability": null, + "name": "Adamant spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1246" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "12200", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1247", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0", + "requirements": "{0,40}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Rune spear" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12200", + "durability": null, + "name": "Rune spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1248" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "37200", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1249", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "37200", + "durability": null, + "name": "Dragon spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1250", + "defence_anim": "2079" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "389", + "stand_anim": "813", + "tradeable": "true", + "name": "Bronze spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1251", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "389", + "durability": null, + "name": "Bronze spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1252" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "212", + "stand_anim": "813", + "tradeable": "true", + "name": "Iron spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1253", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "212", + "durability": null, + "name": "Iron spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1254" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "136", + "stand_anim": "813", + "tradeable": "true", + "name": "Steel spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1255", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "136", + "durability": null, + "name": "Steel spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1256" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "350", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1257", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0", + "requirements": "{0,20}", + "durability": null, + "weight": "1.8", + "weapon_interface": "14", + "render_anim": "28", + "name": "Mithril spear(p)" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "350", + "durability": null, + "name": "Mithril spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1258" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "1004", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1259", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0", + "requirements": "{0,30}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Adamant spear(p)" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1004", + "durability": null, + "name": "Adamant spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1260" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "12400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1261", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0", + "requirements": "{0,40}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Rune spear(p)" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12400", + "durability": null, + "name": "Rune spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1262" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "428,2081,429,428", + "grand_exchange_price": "39700", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1263", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear(p)" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "39700", + "durability": null, + "name": "Dragon spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1264" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.25", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "17", + "attack_audios": "2508,2508,2508,2508", + "name": "Bronze pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1265", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Bronze pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1266" + }, + { + "shop_price": "140", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.25", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "200", + "attack_audios": "2508,2508,2508,2508", + "name": "Iron pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1267", + "bonuses": "5,-2,3,0,0,0,1,0,0,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "200", + "durability": null, + "name": "Iron pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1268" + }, + { + "requirements": "{0,5}", + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.25", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "571", + "attack_audios": "2508,2508,2508,2508", + "name": "Steel pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1269", + "bonuses": "8,-2,6,0,0,0,1,0,0,0,0,9,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "571", + "durability": null, + "name": "Steel pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1270" + }, + { + "requirements": "{0,30}-{14,31}", + "shop_price": "3200", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.7", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "1782", + "attack_audios": "2508,2508,2508,2508", + "name": "Adamant pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1271", + "bonuses": "17,-2,15,0,0,0,1,0,0,0,0,19,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1782", + "durability": null, + "name": "Adamant pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1272" + }, + { + "requirements": "{0,20}", + "shop_price": "1300", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "611", + "attack_audios": "2508,2508,2508,2508", + "name": "Mithril pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1273", + "bonuses": "12,-2,10,0,0,0,1,0,0,0,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "611", + "durability": null, + "name": "Mithril pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1274" + }, + { + "requirements": "{0,40}-{14,41}", + "shop_price": "32000", + "ge_buy_limit": "100", + "examine": "Used for mining.", + "durability": null, + "weight": "2.2", + "attack_speed": "5", + "weapon_interface": "4", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "lendable": "true", + "grand_exchange_price": "19500", + "attack_audios": "2508,2508,2508,2508", + "name": "Rune pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1275", + "bonuses": "26,-2,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19500", + "durability": null, + "name": "Rune pickaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1276" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "13", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1277", + "stand_turn_anim": "823", + "bonuses": "4,3,-2,0,0,0,2,1,0,0,0,5,0,0,0", + "shop_price": "33", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Bronze sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Bronze sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1278" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "17", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1279", + "stand_turn_anim": "823", + "bonuses": "6,4,-2,0,0,0,2,1,0,0,0,7,0,0,0", + "shop_price": "91", + "durability": null, + "weight": "1.8", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Iron sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Iron sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1280" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "79", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1281", + "stand_turn_anim": "823", + "bonuses": "11,8,-2,0,0,0,2,1,0,0,0,12,0,0,0", + "requirements": "{0,5}", + "shop_price": "412", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Steel sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "79", + "durability": null, + "name": "Steel sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1282" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "197", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1283", + "stand_turn_anim": "823", + "bonuses": "14,10,-2,0,0,0,2,1,0,0,0,12,0,0,0", + "requirements": "{0,10}", + "shop_price": "624", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Black sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "197", + "durability": null, + "name": "Black sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1284" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "313", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1285", + "stand_turn_anim": "823", + "bonuses": "16,11,-2,0,0,0,2,1,0,0,0,17,0,0,0", + "requirements": "{0,20}", + "shop_price": "266", + "durability": null, + "weight": "1.5", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Mithril sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "313", + "durability": null, + "name": "Mithril sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1286" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "1046", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1287", + "stand_turn_anim": "823", + "bonuses": "23,18,-2,0,0,0,2,1,0,0,0,24,0,0,0", + "requirements": "{0,30}", + "shop_price": "2080", + "durability": null, + "weight": "1", + "weapon_interface": "5", + "render_anim": "1381", + "attack_audios": "2500,2500,2517,2500", + "name": "Adamant sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1046", + "durability": null, + "name": "Adamant sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1288" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "12300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1289", + "stand_turn_anim": "823", + "bonuses": "38,26,-2,0,0,0,2,1,0,0,0,39,0,0,0", + "requirements": "{0,40}", + "shop_price": "20800", + "durability": null, + "weight": "1.8", + "weapon_interface": "5", + "render_anim": "1381", + "lendable": "true", + "attack_audios": "2500,2500,2517,2500", + "name": "Rune sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12300", + "durability": null, + "name": "Rune sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1290" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "14", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1291", + "stand_turn_anim": "823", + "bonuses": "4,5,-2,0,0,0,3,2,0,0,0,7,0,0,0", + "shop_price": "23", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Bronze longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Bronze longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1292" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "22", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1293", + "stand_turn_anim": "823", + "bonuses": "6,8,-2,0,0,0,3,2,0,0,0,10,0,0,0", + "shop_price": "177", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Iron longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22", + "durability": null, + "name": "Iron longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1294" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "147", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1295", + "stand_turn_anim": "823", + "bonuses": "9,14,-2,0,0,0,3,2,0,0,0,16,0,0,0", + "requirements": "{0,5}", + "shop_price": "500", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Steel longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Steel longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1296" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "384", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1297", + "stand_turn_anim": "823", + "bonuses": "13,18,-2,0,0,0,3,2,0,0,0,16,0,0,0", + "requirements": "{0,10}", + "shop_price": "960", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Black longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "durability": null, + "name": "Black longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1298" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "602", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1299", + "stand_turn_anim": "823", + "bonuses": "15,20,-2,0,0,0,3,2,0,0,0,22,0,0,0", + "requirements": "{0,20}", + "shop_price": "1074", + "durability": null, + "weight": "1.5", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Mithril longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "602", + "durability": null, + "name": "Mithril longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1300" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "1808", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1301", + "stand_turn_anim": "823", + "bonuses": "20,29,-2,0,0,0,3,2,0,0,0,31,0,0,0", + "requirements": "{0,30}", + "shop_price": "3200", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Adamant longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1808", + "durability": null, + "name": "Adamant longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1302" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "19000", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1303", + "stand_turn_anim": "823", + "bonuses": "38,47,-2,0,0,0,3,2,0,0,0,49,0,0,0", + "requirements": "{0,40}", + "shop_price": "32000", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "lendable": "true", + "attack_audios": "2500,2500,2517,2500", + "name": "Rune longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19000", + "durability": null, + "name": "Rune longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1304" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A very powerful sword.", + "walk_anim": "1146", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "60200", + "stand_anim": "809", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1305", + "stand_turn_anim": "823", + "bonuses": "58,69,-2,0,0,0,3,2,0,0,0,71,0,0,0", + "requirements": "{0,60}", + "shop_price": "100000", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1426", + "lendable": "true", + "attack_audios": "2500,2500,2517,2500", + "name": "Dragon longsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "60200", + "durability": null, + "name": "Dragon longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1306" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "89", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1307", + "stand_turn_anim": "7040", + "bonuses": "-4,9,8,-4,0,0,0,0,0,-1,0,10,0,0,0", + "shop_price": "160", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Bronze 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "89", + "durability": null, + "name": "Bronze 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1308" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "32", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1309", + "stand_turn_anim": "7040", + "bonuses": "-4,13,10,-4,0,0,0,0,0,-1,0,14,0,0,0", + "shop_price": "260", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Iron 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "32", + "durability": null, + "name": "Iron 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1310" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "411", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1311", + "stand_turn_anim": "7040", + "bonuses": "-4,21,16,-4,0,0,0,0,0,-1,0,22,0,0,0", + "requirements": "{0,5}", + "shop_price": "1000", + "durability": null, + "weight": "3", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Steel 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "411", + "durability": null, + "name": "Steel 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1312" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "1031", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1313", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,-4,0,0,0,0,0,-1,0,26,0,0,0", + "requirements": "{0,10}", + "shop_price": "2400", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Black 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1031", + "durability": null, + "name": "Black 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1314" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "1396", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1315", + "stand_turn_anim": "7040", + "bonuses": "-4,30,24,-4,0,0,0,0,0,-1,0,31,0,0,0", + "requirements": "{0,20}", + "shop_price": "3000", + "durability": null, + "weight": "3.1", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Mithril 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1396", + "durability": null, + "name": "Mithril 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1316" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two-handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "3577", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1317", + "stand_turn_anim": "7040", + "bonuses": "-4,43,30,-4,0,0,0,0,0,-1,0,44,0,0,0", + "requirements": "{0,30}", + "shop_price": "6400", + "durability": null, + "weight": "4", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "Adamant 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3577", + "durability": null, + "name": "Adamant 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1318" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "38200", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "1319", + "stand_turn_anim": "7040", + "bonuses": "-4,69,50,-4,0,0,0,0,0,-1,0,70,0,0,0", + "requirements": "{0,40}", + "shop_price": "40000", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "2503,0,2504,0", + "name": "Rune 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38200", + "durability": null, + "name": "Rune 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1320" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "13", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1321", + "stand_turn_anim": "823", + "bonuses": "1,7,-2,0,0,0,1,0,0,0,0,6,0,0,0", + "shop_price": "40", + "durability": null, + "weight": "1", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Bronze scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Bronze scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1322" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "30", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1323", + "stand_turn_anim": "823", + "bonuses": "2,10,-2,0,0,0,1,0,0,0,0,9,0,0,0", + "shop_price": "112", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Iron scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Iron scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1324" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "101", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1325", + "stand_turn_anim": "823", + "bonuses": "3,15,-2,0,0,0,1,0,0,0,0,14,0,0,0", + "requirements": "{0,5}", + "shop_price": "400", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Steel scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "101", + "durability": null, + "name": "Steel scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1326" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "4498", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1327", + "stand_turn_anim": "823", + "bonuses": "4,19,-2,0,0,0,1,0,0,0,0,14,0,0,0", + "requirements": "{0,10}", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Black scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4498", + "durability": null, + "name": "Black scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1328" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "469", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1329", + "stand_turn_anim": "823", + "bonuses": "5,21,-2,0,0,0,1,0,0,0,0,20,0,0,0", + "requirements": "{0,20}", + "shop_price": "1040", + "durability": null, + "weight": "1.5", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Mithril scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "469", + "durability": null, + "name": "Mithril scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1330" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A viciously curved sword", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "1525", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1331", + "stand_turn_anim": "823", + "bonuses": "6,29,-2,0,0,0,1,0,0,0,0,28,0,0,0", + "requirements": "{0,30}", + "shop_price": "2304", + "durability": null, + "weight": "2", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "Adamant scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1525", + "durability": null, + "name": "Adamant scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1332" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "15200", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1333", + "stand_turn_anim": "823", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0", + "requirements": "{0,40}", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "lendable": "true", + "attack_audios": "2500,0,2517,0", + "name": "Rune scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15200", + "durability": null, + "name": "Rune scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1334" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "20", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1335", + "stand_turn_anim": "823", + "bonuses": "-4,-4,11,-4,0,0,0,0,0,0,0,9,0,0,0", + "shop_price": "224", + "durability": null, + "weight": "1.8", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Iron warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Iron warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1336" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "16", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1337", + "stand_turn_anim": "823", + "bonuses": "-4,-4,10,-4,0,0,0,0,0,0,0,8,0,0,0", + "shop_price": "59", + "durability": null, + "weight": "1", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Bronze warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Bronze warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1338" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "283", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1339", + "stand_turn_anim": "823", + "bonuses": "-4,-4,18,-4,0,0,0,0,0,0,0,16,0,0,0", + "requirements": "{0,5}", + "shop_price": "832", + "durability": null, + "weight": "1", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Steel warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "283", + "durability": null, + "name": "Steel warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1340" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "562", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1341", + "stand_turn_anim": "823", + "bonuses": "-4,-4,22,-4,0,0,0,0,0,0,0,19,0,0,0", + "requirements": "{0,10}", + "shop_price": "1274", + "durability": null, + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Black warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "562", + "durability": null, + "name": "Black warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1342" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "1071", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1343", + "stand_turn_anim": "823", + "bonuses": "-4,-4,25,-4,0,0,0,0,0,0,0,20,0,0,0", + "requirements": "{0,20}", + "shop_price": "2158", + "durability": null, + "weight": "1.5", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Mithril warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1071", + "durability": null, + "name": "Mithril warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1344" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "2996", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1345", + "stand_turn_anim": "823", + "bonuses": "-4,-4,33,-4,0,0,0,0,0,0,0,31,0,0,0", + "requirements": "{0,30}", + "shop_price": "5356", + "durability": null, + "weight": "2", + "weapon_interface": "10", + "render_anim": "1430", + "attack_audios": "2504,0,0,0", + "name": "Adamant warhammer" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2996", + "durability": null, + "name": "Adamant warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1346" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "I don't think it's intended for joinery.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "24600", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1347", + "stand_turn_anim": "823", + "bonuses": "-4,-4,53,-4,0,0,0,0,0,0,0,48,0,0,0", + "requirements": "{0,40}", + "shop_price": "41000", + "durability": null, + "weight": "1.8", + "weapon_interface": "10", + "render_anim": "1430", + "lendable": "true", + "attack_audios": "2504,0,0,0", + "name": "Rune warhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24600", + "durability": null, + "name": "Rune warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1348" + }, + { + "shop_price": "56", + "ge_buy_limit": "100", + "examine": "A woodcutter's axe.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "2", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "8", + "attack_audios": "2498,2498,2497,2498", + "name": "Iron axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1349", + "bonuses": "-2,5,3,0,0,0,1,0,0,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Iron axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1350" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "A woodcutter's axe.", + "durability": null, + "weight": "1.35", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "44", + "attack_audios": "2498,2498,2497,2498", + "name": "Bronze axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1351", + "bonuses": "-2,4,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44", + "durability": null, + "name": "Bronze axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1352" + }, + { + "requirements": "{0,5}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A woodcutter's axe.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "36", + "attack_audios": "2498,2498,2497,2498", + "name": "Steel axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1353", + "bonuses": "-2,8,6,0,0,0,1,0,0,0,0,9,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "36", + "durability": null, + "name": "Steel axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1354" + }, + { + "requirements": "{0,20}", + "shop_price": "660", + "ge_buy_limit": "100", + "examine": "A powerful axe.", + "durability": null, + "weight": "1.1", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "141", + "attack_audios": "2498,2498,2497,2498", + "name": "Mithril axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1355", + "bonuses": "-2,12,10,0,0,0,1,0,0,0,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "141", + "durability": null, + "name": "Mithril axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1356" + }, + { + "requirements": "{0,30}-{8,31}", + "shop_price": "1625", + "ge_buy_limit": "100", + "examine": "A powerful axe.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "592", + "attack_audios": "2498,2498,2497,2498", + "name": "Adamant axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1357", + "bonuses": "-2,17,15,0,0,0,1,0,0,0,0,19,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "592", + "durability": null, + "name": "Adamant axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1358" + }, + { + "requirements": "{0,40}-{8,41}", + "ge_buy_limit": "100", + "examine": "A powerful axe.", + "durability": null, + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "7495", + "attack_audios": "2498,2498,2497,2498", + "name": "Rune axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1359", + "bonuses": "-2,26,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7495", + "durability": null, + "name": "Rune axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1360" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "examine": "A sinister looking axe.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "335", + "attack_audios": "2498,2498,2497,2498", + "name": "Black axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1361", + "bonuses": "-2,10,8,0,0,0,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "335", + "durability": null, + "name": "Black axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1362" + }, + { + "shop_price": "182", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "21", + "attack_audios": "2498,2498,2497,2498", + "name": "Iron battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1363", + "bonuses": "-2,8,5,0,0,0,0,0,0,-1,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Iron battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1364" + }, + { + "requirements": "{0,5}", + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "208", + "attack_audios": "2498,2498,2497,2498", + "name": "Steel battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1365", + "bonuses": "-2,16,11,0,0,0,0,0,0,-1,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "208", + "durability": null, + "name": "Steel battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1366" + }, + { + "requirements": "{0,10}", + "shop_price": "1248", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "556", + "attack_audios": "2498,2498,2497,2498", + "name": "Black battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1367", + "bonuses": "-2,20,15,0,0,0,0,0,0,-1,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "556", + "durability": null, + "name": "Black battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1368" + }, + { + "requirements": "{0,20}", + "shop_price": "1690", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "809", + "attack_audios": "2498,2498,2497,2498", + "name": "Mithril battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1369", + "bonuses": "-2,22,17,0,0,0,0,0,0,-1,0,29,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "809", + "durability": null, + "name": "Mithril battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1370" + }, + { + "requirements": "{0,30}", + "shop_price": "4160", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "3", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "2311", + "attack_audios": "2498,2498,2497,2498", + "name": "Adamant battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1371", + "bonuses": "-2,31,26,0,0,0,0,0,0,-1,0,41,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2311", + "durability": null, + "name": "Adamant battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1372" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "lendable": "true", + "grand_exchange_price": "24800", + "attack_audios": "2498,2498,2497,2498", + "name": "Rune battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1373", + "bonuses": "-2,48,43,0,0,0,0,0,0,-1,0,64,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24800", + "durability": null, + "name": "Rune battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1374" + }, + { + "shop_price": "52", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "15", + "attack_audios": "2498,2498,2497,2498", + "name": "Bronze battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1375", + "bonuses": "-2,6,3,0,0,0,0,0,0,-1,0,9,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "durability": null, + "name": "Bronze battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1376" + }, + { + "requirements": "{0,60}", + "shop_price": "200000", + "ge_buy_limit": "10", + "examine": "A vicious looking axe.", + "has_special": "true", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "lendable": "true", + "grand_exchange_price": "123200", + "attack_audios": "2498,2498,2497,2498", + "name": "Dragon battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1377", + "bonuses": "-2,70,65,0,0,0,0,0,0,-1,0,85,0,0,0" + }, + { + "requirements": "{0,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "123200", + "durability": null, + "name": "Dragon battleaxe", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "1378", + "defence_anim": "397" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "37", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1379", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0", + "shop_price": "15", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "37", + "durability": null, + "name": "Staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1380" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "784", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1381", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,10,0,2,3,1,10,0,0,3,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of air" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "784", + "durability": null, + "name": "Staff of air", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1382" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "890", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1383", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,10,0,2,3,1,10,0,0,3,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of water" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "890", + "durability": null, + "name": "Staff of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1384" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "879", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1385", + "stand_turn_anim": "1209", + "bonuses": "1,-1,9,10,0,2,3,1,10,0,0,5,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of earth" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "879", + "durability": null, + "name": "Staff of earth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1386" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "1330", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1387", + "stand_turn_anim": "1209", + "bonuses": "3,-1,9,10,0,2,3,1,10,0,0,6,0,0,0", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Staff of fire" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1330", + "durability": null, + "name": "Staff of fire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1388" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "58", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1389", + "stand_turn_anim": "1209", + "bonuses": "2,-1,10,10,0,2,3,1,10,0,0,7,0,0,0", + "shop_price": "200", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Magic staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "58", + "durability": null, + "name": "Magic staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1390" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "7963", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1391", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,12,0,2,3,1,12,0,0,32,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "7000", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7963", + "durability": null, + "name": "Battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1392" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9113", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1393", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "19600", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Fire battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9113", + "durability": null, + "name": "Fire battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1394" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9122", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1395", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Water battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9122", + "durability": null, + "name": "Water battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1396" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "8982", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1397", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "7000", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Air battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8982", + "durability": null, + "name": "Air battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1398" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9041", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1399", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "shop_price": "1500", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Earth battlestaff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9041", + "durability": null, + "name": "Earth battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1400" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "25400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1401", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic fire staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25400", + "durability": null, + "name": "Mystic fire staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1402" + }, + { + "requirements": "{0,40}-{6,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "24800", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "true", + "name": "Mystic water staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1403", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24800", + "durability": null, + "name": "Mystic water staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1404" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "25100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1405", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic air staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25100", + "durability": null, + "name": "Mystic air staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1406" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "25400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1407", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "shop_price": "40000", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic earth staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25400", + "durability": null, + "name": "Mystic earth staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1408" + }, + { + "turn90cw_anim": "1207", + "examine": "An ancient staff, formerly the property of Iban.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Iban's staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "1409", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,10,0,2,3,1,10,0,0,50,0,0,0" + }, + { + "examine": "An ancient staff, formerly the property of Iban.", + "attack_audios": "2555,0,0,0", + "durability": null, + "name": "Iban's staff", + "weight": "2.2", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "1410", + "bonuses": "10,-1,40,10,0,2,3,1,10,0,0,50,0,0,0" + }, + { + "durability": null, + "name": "Farmer's fork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1412" + }, + { + "durability": null, + "name": "Halberd", + "archery_ticket_price": "0", + "attack_speed": "7", + "id": "1413" + }, + { + "durability": null, + "name": "Halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1414" + }, + { + "attack_audios": "2504,0,0,0", + "durability": null, + "name": "Warhammer", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "1415" + }, + { + "durability": null, + "name": "Warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1416" + }, + { + "durability": null, + "name": "Javelin", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "1417" + }, + { + "durability": null, + "name": "Javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1418" + }, + { + "turn90cw_anim": "821", + "examine": "It's a Scythe.", + "walk_anim": "819", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "22", + "turn180_anim": "820", + "render_anim": "1383", + "defence_anim": "383", + "equipment_slot": "3", + "attack_anims": "382,382,382,382", + "stand_anim": "847", + "name": "Scythe", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "1419", + "stand_turn_anim": "823", + "bonuses": "3,8,3,0,0,0,3,1,0,0,0,10,0,0,0" + }, + { + "shop_price": "80", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "7", + "name": "Iron mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1420", + "bonuses": "4,-2,9,0,0,0,0,0,0,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Iron mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1421" + }, + { + "shop_price": "18", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "12", + "name": "Bronze mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1422", + "bonuses": "1,-2,6,0,0,0,0,0,0,0,0,5,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Bronze mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1423" + }, + { + "requirements": "{0,5}", + "shop_price": "225", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "31", + "name": "Steel mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1424", + "bonuses": "7,-2,13,0,0,0,0,0,0,0,0,11,2,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "31", + "durability": null, + "name": "Steel mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1425" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "954", + "name": "Black mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1426", + "bonuses": "8,-2,16,0,0,0,0,0,0,0,0,13,2,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "954", + "durability": null, + "name": "Black mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1427" + }, + { + "requirements": "{0,20}", + "shop_price": "585", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.5", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "157", + "name": "Mithril mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1428", + "bonuses": "11,-2,18,0,0,0,0,0,0,0,0,16,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "157", + "durability": null, + "name": "Mithril mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1429" + }, + { + "requirements": "{0,30}", + "shop_price": "1440", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "grand_exchange_price": "673", + "name": "Adamant mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1430", + "bonuses": "13,-2,25,0,0,0,0,0,0,0,0,23,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "673", + "durability": null, + "name": "Adamant mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1431" + }, + { + "requirements": "{0,40}", + "shop_price": "14400", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.79", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "lendable": "true", + "grand_exchange_price": "8380", + "name": "Rune mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1432", + "bonuses": "20,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8380", + "durability": null, + "name": "Rune mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1433" + }, + { + "requirements": "{0,60}", + "shop_price": "50000", + "ge_buy_limit": "10", + "examine": "A spiky mace.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,400,401", + "lendable": "true", + "grand_exchange_price": "29300", + "name": "Dragon mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1434", + "bonuses": "40,-2,60,0,0,0,0,0,0,0,0,55,5,0,0" + }, + { + "requirements": "{0,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "29300", + "durability": null, + "name": "Dragon mace", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "1435" + }, + { + "shop_price": "1", + "ge_buy_limit": "25000", + "examine": "An uncharged Rune Stone.", + "grand_exchange_price": "40", + "durability": null, + "name": "Rune essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1436" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "40", + "durability": null, + "name": "Rune essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1437" + }, + { + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "404", + "durability": null, + "name": "Air talisman", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1438" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "404", + "durability": null, + "name": "Air talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1439" + }, + { + "requirements": "{9,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "785", + "durability": null, + "name": "Earth talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1440" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "785", + "durability": null, + "name": "Earth talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1441" + }, + { + "requirements": "{14,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "4140", + "durability": null, + "name": "Fire talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1442" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "4140", + "durability": null, + "name": "Fire talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1443" + }, + { + "requirements": "{5,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "7975", + "durability": null, + "name": "Water talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1444" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "7975", + "durability": null, + "name": "Water talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1445" + }, + { + "requirements": "{20,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "1373", + "durability": null, + "name": "Body talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1446" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1373", + "durability": null, + "name": "Body talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1447" + }, + { + "requirements": "{2,20}", + "shop_price": "50", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "285", + "durability": null, + "name": "Mind talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1448" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "285", + "durability": null, + "name": "Mind talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1449" + }, + { + "requirements": "{20,77}", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "3178", + "durability": null, + "name": "Blood talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1450" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "3178", + "durability": null, + "name": "Blood talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1451" + }, + { + "requirements": "{20,35}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "605", + "durability": null, + "name": "Chaos talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1452" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "605", + "durability": null, + "name": "Chaos talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1453" + }, + { + "requirements": "{20,27}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "785", + "durability": null, + "name": "Cosmic talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1454" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "785", + "durability": null, + "name": "Cosmic talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1455" + }, + { + "requirements": "{20,65}", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "2501", + "durability": null, + "name": "Death talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1456" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "2501", + "durability": null, + "name": "Death talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1457" + }, + { + "requirements": "{20,54}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "1219", + "durability": null, + "name": "Law talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1458" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1219", + "durability": null, + "name": "Law talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1459" + }, + { + "durability": null, + "name": "Soul talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1461" + }, + { + "requirements": "{20,44}", + "shop_price": "125", + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "1596", + "durability": null, + "name": "Nature talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1462" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1596", + "durability": null, + "name": "Nature talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1463" + }, + { + "ge_buy_limit": "5000", + "examine": "I can exchange this for equipment.", + "grand_exchange_price": "9", + "durability": null, + "name": "Archery ticket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1464" + }, + { + "examine": "For use on daggers and projectiles.", + "grand_exchange_price": "36", + "durability": null, + "name": "Weapon poison", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1465" + }, + { + "examine": "Some damp wooden sticks.", + "durability": null, + "name": "Damp sticks", + "archery_ticket_price": "0", + "id": "1467" + }, + { + "examine": "Some dry wooden sticks.", + "durability": null, + "name": "Dry sticks", + "archery_ticket_price": "0", + "id": "1468" + }, + { + "examine": "Smashed glass.", + "durability": null, + "name": "Broken glass", + "archery_ticket_price": "0", + "id": "1469" + }, + { + "ge_buy_limit": "100", + "examine": "A small round red bead.", + "grand_exchange_price": "169", + "durability": null, + "name": "Red bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1470" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "169", + "durability": null, + "name": "Red bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1471" + }, + { + "ge_buy_limit": "100", + "examine": "A small round yellow bead.", + "grand_exchange_price": "249", + "durability": null, + "name": "Yellow bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1472" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "249", + "durability": null, + "name": "Yellow bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1473" + }, + { + "ge_buy_limit": "100", + "examine": "A small round black bead.", + "grand_exchange_price": "229", + "durability": null, + "name": "Black bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1474" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "229", + "durability": null, + "name": "Black bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1475" + }, + { + "ge_buy_limit": "100", + "examine": "A small round white bead.", + "grand_exchange_price": "1530", + "durability": null, + "name": "White bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1476" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1530", + "durability": null, + "name": "White bead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1477" + }, + { + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "Wizard Mizgog sells these aim-enhancing amulets.", + "grand_exchange_price": "2870", + "durability": null, + "name": "Amulet of accuracy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1478", + "bonuses": "4,4,4,4,4,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2870", + "durability": null, + "name": "Amulet of accuracy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1479" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1481" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1482" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1483" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "1484" + }, + { + "examine": "A damp, wet cloth.", + "durability": null, + "name": "Damp cloth", + "archery_ticket_price": "0", + "id": "1485" + }, + { + "examine": "A broken piece of railing.", + "durability": null, + "name": "Piece of railing", + "weight": "2", + "archery_ticket_price": "0", + "id": "1486" + }, + { + "examine": "This horn has restorative properties.", + "grand_exchange_price": "1159", + "durability": null, + "name": "Unicorn horn", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1487" + }, + { + "examine": "A coat of arms of the Ardougne Paladins.", + "durability": null, + "name": "Paladin's badge", + "archery_ticket_price": "0", + "id": "1488" + }, + { + "examine": "A coat of arms of the Ardougne Paladins.", + "durability": null, + "name": "Paladin's badge", + "archery_ticket_price": "0", + "id": "1489" + }, + { + "examine": "A coat of arms of the Ardougne Paladins.", + "durability": null, + "name": "Paladin's badge", + "archery_ticket_price": "0", + "id": "1490" + }, + { + "examine": "On the ground: Curiosity has yet to kill this one...", + "durability": null, + "name": "Witch's cat", + "weight": "1.2", + "archery_ticket_price": "0", + "id": "1491" + }, + { + "examine": "A simple doll with Iban's likeness.", + "durability": null, + "name": "Doll of iban", + "weight": "1", + "archery_ticket_price": "0", + "id": "1492" + }, + { + "examine": "An account of the last times of someone.", + "durability": null, + "name": "Old journal", + "archery_ticket_price": "0", + "id": "1493" + }, + { + "examine": "The tale of Iban.", + "durability": null, + "name": "History of iban", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1494" + }, + { + "shop_price": "5000", + "examine": "Strong dwarvish gloves.", + "durability": null, + "name": "Klank's gauntlets", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1495", + "bonuses": "2,2,2,0,0,8,9,7,0,0,5,2,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "I thought you only saw these in pairs?", + "durability": null, + "name": "Iban's dove", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1496" + }, + { + "examine": "A mystical demonic amulet.", + "durability": null, + "name": "Amulet of othanian", + "archery_ticket_price": "0", + "id": "1497" + }, + { + "examine": "A mystical demonic amulet.", + "durability": null, + "name": "Amulet of doomion", + "archery_ticket_price": "0", + "id": "1498" + }, + { + "examine": "A mystical demonic amulet.", + "durability": null, + "name": "Amulet of holthion", + "archery_ticket_price": "0", + "id": "1499" + }, + { + "examine": "A strange dark liquid.", + "durability": null, + "name": "Iban's shadow", + "archery_ticket_price": "0", + "id": "1500" + }, + { + "examine": "Smells stronger than most spirits.", + "durability": null, + "name": "Dwarf brew", + "archery_ticket_price": "0", + "id": "1501" + }, + { + "examine": "The burnt remains of Iban.", + "durability": null, + "name": "Iban's ashes", + "weight": "0.056", + "archery_ticket_price": "0", + "id": "1502" + }, + { + "examine": "A search warrant for a house in West Ardougne.", + "durability": null, + "name": "Warrant", + "archery_ticket_price": "0", + "id": "1503" + }, + { + "examine": "It doesn't look very tasty.", + "durability": null, + "name": "Hangover cure", + "weight": "2", + "archery_ticket_price": "0", + "id": "1504" + }, + { + "examine": "Maybe I should read this...", + "durability": null, + "name": "A magic scroll", + "archery_ticket_price": "0", + "id": "1505" + }, + { + "remove_head": "true", + "examine": "Stops me from breathing nasty stuff!", + "durability": null, + "name": "Gas mask", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "1506", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Quite a small key (Plague City).", + "durability": null, + "name": "A small key", + "archery_ticket_price": "0", + "id": "1507" + }, + { + "examine": "It seems to say \"hongorer lure\"...", + "durability": null, + "name": "A scruffy note", + "archery_ticket_price": "0", + "id": "1508" + }, + { + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Picture", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1510" + }, + { + "shop_price": "4", + "ge_buy_limit": "25000", + "examine": "A number of wooden logs.", + "grand_exchange_price": "120", + "durability": null, + "name": "Logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1511" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "279", + "durability": null, + "name": "Logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1512" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a magic tree.", + "grand_exchange_price": "680", + "durability": null, + "name": "Magic logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1513" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "1581", + "durability": null, + "name": "Magic logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1514" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a yew tree.", + "grand_exchange_price": "320", + "durability": null, + "name": "Yew logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1515" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "532", + "durability": null, + "name": "Yew logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1516" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a maple tree.", + "grand_exchange_price": "160", + "durability": null, + "name": "Maple logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1517" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "20", + "durability": null, + "name": "Maple logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1518" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a willow tree.", + "grand_exchange_price": "80", + "durability": null, + "name": "Willow logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1519" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "11", + "durability": null, + "name": "Willow logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1520" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from an Oak Tree.", + "grand_exchange_price": "140", + "durability": null, + "name": "Oak logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1521" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "153", + "durability": null, + "name": "Oak logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1522" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "For picking tough locks.", + "grand_exchange_price": "1311", + "durability": null, + "name": "Lockpick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1523" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1311", + "durability": null, + "name": "Lockpick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1524" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy snake weed", + "archery_ticket_price": "0", + "id": "1525" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean snake weed", + "archery_ticket_price": "0", + "id": "1526" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy ardrigal", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1527" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean ardrigal", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1528" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy sito foil", + "archery_ticket_price": "0", + "id": "1529" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean sito foil", + "archery_ticket_price": "0", + "id": "1530" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy volencia moss", + "archery_ticket_price": "0", + "id": "1531" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean volencia moss", + "archery_ticket_price": "0", + "id": "1532" + }, + { + "examine": "I need to clean this herb before I can use it.", + "durability": null, + "name": "Grimy rogue's purse", + "archery_ticket_price": "0", + "id": "1533" + }, + { + "examine": "A fresh herb.", + "durability": null, + "name": "Clean rogue's purse", + "archery_ticket_price": "0", + "id": "1534" + }, + { + "examine": "A piece of map.", + "durability": null, + "name": "Map part", + "archery_ticket_price": "0", + "id": "1535" + }, + { + "examine": "A piece of map.", + "durability": null, + "name": "Map part", + "archery_ticket_price": "0", + "id": "1536" + }, + { + "examine": "A piece of map.", + "durability": null, + "name": "Map part", + "archery_ticket_price": "0", + "id": "1537" + }, + { + "examine": "A map of the route to Crandor.", + "durability": null, + "name": "Crandor map", + "archery_ticket_price": "0", + "id": "1538" + }, + { + "shop_price": "52", + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "59", + "durability": null, + "name": "Steel nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1539" + }, + { + "ge_buy_limit": "100", + "examine": "This provides partial protection from dragon-breath attacks.", + "grand_exchange_price": "637", + "durability": null, + "name": "Anti-dragon shield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "1540", + "bonuses": "0,0,0,0,0,7,9,8,2,8,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "637", + "durability": null, + "name": "Anti-dragon shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1541" + }, + { + "shop_price": "1", + "examine": "A key to Melzar's Maze.", + "durability": null, + "name": "Maze key", + "archery_ticket_price": "0", + "id": "1542" + }, + { + "destroy_message": "You can get another from Dr Harlow in the Blue Moon Inn of Varrock.", + "examine": "A very pointy stick.", + "durability": null, + "name": "Stake", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1549", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "examine": "Deters vampires.", + "grand_exchange_price": "20", + "durability": null, + "name": "Garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1550" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1551" + }, + { + "examine": "Sardine flavoured with doogle leaves.", + "durability": null, + "name": "Doogle sardine", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1552" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1555" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1556" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1557" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1558" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1559" + }, + { + "examine": "This kitten seems to like you.", + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "id": "1560" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1561" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1562" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1563" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1564" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1565" + }, + { + "examine": "This cat definitely likes you.", + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "id": "1566" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1567" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1568" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1569" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1570" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1571" + }, + { + "examine": "This cat is so well fed it can hardly move.", + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "id": "1572" + }, + { + "examine": "A tasty herb good for seasoning.", + "durability": null, + "name": "Doogle leaves", + "archery_ticket_price": "0", + "id": "1573" + }, + { + "examine": "For feline training expertise.", + "durability": null, + "name": "Cat training medal", + "archery_ticket_price": "0", + "id": "1575", + "equipment_slot": "2" + }, + { + "examine": "Candlestick used during Heroes' Quest.", + "durability": null, + "name": "Pete's candlestick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1577" + }, + { + "durability": null, + "name": "Pete's candlestick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1578" + }, + { + "examine": "This denotes a Master Thief.", + "durability": null, + "name": "Thieves' armband", + "archery_ticket_price": "0", + "id": "1579" + }, + { + "examine": "These will keep my hands cold!", + "durability": null, + "name": "Ice gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1580", + "bonuses": "0,0,0,0,0,0,3,4,0,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Yuck.", + "durability": null, + "name": "Blamish snail slime", + "weight": "1", + "archery_ticket_price": "0", + "id": "1581" + }, + { + "examine": "Made from the finest snail slime.", + "durability": null, + "name": "Blamish oil", + "archery_ticket_price": "0", + "id": "1582" + }, + { + "examine": "Firebird feather.", + "durability": null, + "name": "Fire feather", + "archery_ticket_price": "0", + "id": "1583" + }, + { + "examine": "Apparently my name is Hartigan", + "durability": null, + "name": "Id papers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1584" + }, + { + "examine": "Useful for catching lava eels.", + "durability": null, + "name": "Oily fishing rod", + "weight": "1", + "archery_ticket_price": "0", + "id": "1585" + }, + { + "examine": "This is of use in completing Heroes' Quest. (Heroes' Quest)", + "durability": null, + "name": "Miscellaneous key", + "tradeable": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "1586" + }, + { + "durability": null, + "name": "Miscellaneous key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1587" + }, + { + "examine": "The key I got from Grip. (Heroes' Quest)", + "durability": null, + "name": "Grips' key ring", + "archery_ticket_price": "0", + "id": "1588" + }, + { + "shop_price": "1", + "examine": "I wonder what this unlocks. (Heroes' Quest)", + "durability": null, + "name": "Dusty key", + "archery_ticket_price": "0", + "id": "1590" + }, + { + "examine": "Key to a cell. (Heroes' Quest)", + "durability": null, + "name": "Jail key", + "archery_ticket_price": "0", + "id": "1591" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold rings.", + "grand_exchange_price": "316", + "durability": null, + "name": "Ring mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1592" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "316", + "durability": null, + "name": "Ring mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1593" + }, + { + "examine": "Used to make unholy symbols.", + "durability": null, + "name": "Unholy mould", + "archery_ticket_price": "0", + "id": "1594" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold amulets.", + "grand_exchange_price": "288", + "durability": null, + "name": "Amulet mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1595" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "288", + "durability": null, + "name": "Amulet mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1596" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold necklaces.", + "grand_exchange_price": "269", + "durability": null, + "name": "Necklace mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1597" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "269", + "durability": null, + "name": "Necklace mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1598" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make holy symbols of Saradomin.", + "grand_exchange_price": "504", + "durability": null, + "name": "Holy mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1599" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "504", + "durability": null, + "name": "Holy mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1600" + }, + { + "ge_buy_limit": "500", + "examine": "This looks valuable.", + "grand_exchange_price": "14800", + "durability": null, + "name": "Diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1601" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "14800", + "durability": null, + "name": "Diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1602" + }, + { + "shop_price": "400", + "ge_buy_limit": "1000", + "examine": "This looks valuable.", + "grand_exchange_price": "1598", + "durability": null, + "name": "Ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1603" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1598", + "durability": null, + "name": "Ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1604" + }, + { + "shop_price": "350", + "ge_buy_limit": "1000", + "examine": "This looks valuable.", + "grand_exchange_price": "853", + "durability": null, + "name": "Emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1605" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "853", + "durability": null, + "name": "Emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1606" + }, + { + "shop_price": "175", + "ge_buy_limit": "1000", + "examine": "This looks valuable.", + "grand_exchange_price": "520", + "durability": null, + "name": "Sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1607" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "520", + "durability": null, + "name": "Sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1608" + }, + { + "ge_buy_limit": "1000", + "shop_price": "100", + "examine": "A semi precious stone.", + "grand_exchange_price": "44", + "durability": null, + "name": "Opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1609" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "41", + "durability": null, + "name": "Opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1610" + }, + { + "ge_buy_limit": "1000", + "shop_price": "150", + "grand_exchange_price": "84", + "examine": "A semi precious stone.", + "durability": null, + "name": "Jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1611" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "83", + "durability": null, + "name": "Jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1612" + }, + { + "ge_buy_limit": "1000", + "shop_price": "200", + "examine": "A semi precious stone.", + "grand_exchange_price": "120", + "durability": null, + "name": "Red topaz", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1613" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "103", + "durability": null, + "name": "Red topaz", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1614" + }, + { + "shop_price": "75000", + "ge_buy_limit": "100", + "examine": "This looks valuable.", + "grand_exchange_price": "27400", + "durability": null, + "name": "Dragonstone", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1615" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27400", + "durability": null, + "name": "Dragonstone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1616" + }, + { + "ge_buy_limit": "500", + "examine": "An uncut diamond.", + "grand_exchange_price": "2160", + "tokkul_price": "300", + "durability": null, + "name": "Uncut diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1617" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "20000", + "durability": null, + "name": "Uncut diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1618" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut ruby.", + "grand_exchange_price": "1140", + "tokkul_price": "150", + "durability": null, + "name": "Uncut ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1619" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4970", + "durability": null, + "name": "Uncut ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1620" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "An uncut emerald.", + "grand_exchange_price": "580", + "tokkul_price": "75", + "durability": null, + "name": "Uncut emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1621" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2621", + "durability": null, + "name": "Uncut emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1622" + }, + { + "shop_price": "25", + "ge_buy_limit": "1000", + "examine": "An uncut sapphire.", + "grand_exchange_price": "420", + "tokkul_price": "37", + "durability": null, + "name": "Uncut sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1623" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1851", + "durability": null, + "name": "Uncut sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1624" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut opal.", + "grand_exchange_price": "65", + "durability": null, + "name": "Uncut opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1625" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "65", + "durability": null, + "name": "Uncut opal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1626" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut jade.", + "grand_exchange_price": "138", + "durability": null, + "name": "Uncut jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1627" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "138", + "durability": null, + "name": "Uncut jade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1628" + }, + { + "ge_buy_limit": "1000", + "examine": "An uncut red topaz.", + "grand_exchange_price": "279", + "durability": null, + "name": "Uncut red topaz", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1629" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "279", + "durability": null, + "name": "Uncut red topaz", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1630" + }, + { + "shop_price": "75000", + "ge_buy_limit": "100", + "examine": "An uncut dragonstone.", + "grand_exchange_price": "31700", + "tokkul_price": "1500", + "durability": null, + "name": "Uncut dragonstone", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1631" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "31700", + "durability": null, + "name": "Uncut dragonstone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1632" + }, + { + "examine": "This gem is crushed and broken.", + "durability": null, + "name": "Crushed gem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1633" + }, + { + "durability": null, + "name": "Crushed gem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1634" + }, + { + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "165", + "durability": null, + "name": "Gold ring", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "id": "1635", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "165", + "durability": null, + "name": "Gold ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1636" + }, + { + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "561", + "durability": null, + "name": "Sapphire ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1637", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "561", + "durability": null, + "name": "Sapphire ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1638" + }, + { + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "884", + "durability": null, + "name": "Emerald ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1639", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "884", + "durability": null, + "name": "Emerald ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1640" + }, + { + "shop_price": "2025", + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "1110", + "durability": null, + "name": "Ruby ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1641", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1110", + "durability": null, + "name": "Ruby ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1642" + }, + { + "shop_price": "3172", + "ge_buy_limit": "5000", + "examine": "A valuable ring.", + "grand_exchange_price": "4416", + "durability": null, + "name": "Diamond ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1643", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4416", + "durability": null, + "name": "Diamond ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1644" + }, + { + "shop_price": "7750", + "ge_buy_limit": "100", + "examine": "A valuable ring.", + "grand_exchange_price": "26700", + "durability": null, + "name": "Dragonstone ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1645", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26700", + "durability": null, + "name": "Dragonstone ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1646" + }, + { + "examine": "A valuable ring.", + "grand_exchange_price": "547", + "durability": null, + "name": "Sapphire ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1649" + }, + { + "examine": "A valuable ring.", + "grand_exchange_price": "993", + "durability": null, + "name": "Emerald ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1650" + }, + { + "shop_price": "2025", + "examine": "A valuable ring.", + "grand_exchange_price": "1125", + "durability": null, + "name": "Ruby ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1651" + }, + { + "shop_price": "3172", + "examine": "A valuable ring.", + "grand_exchange_price": "3622", + "durability": null, + "name": "Diamond ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1652" + }, + { + "shop_price": "7750", + "examine": "A valuable ring.", + "grand_exchange_price": "19606", + "durability": null, + "name": "Dragonstone ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1653" + }, + { + "shop_price": "450", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "185", + "durability": null, + "name": "Gold necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1654", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "185", + "durability": null, + "name": "Gold necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1655" + }, + { + "shop_price": "945", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "534", + "durability": null, + "name": "Sapphire necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1656", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "534", + "durability": null, + "name": "Sapphire necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1657" + }, + { + "shop_price": "1425", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "781", + "durability": null, + "name": "Emerald necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1658", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "781", + "durability": null, + "name": "Emerald necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1659" + }, + { + "shop_price": "870", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Ruby necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1660", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1276", + "durability": null, + "name": "Ruby necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1661" + }, + { + "shop_price": "3307", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "14300", + "durability": null, + "name": "Diamond necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1662", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "14300", + "durability": null, + "name": "Diamond necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1663" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1664", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1665" + }, + { + "shop_price": "945", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "532", + "durability": null, + "name": "Sapphire necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1668" + }, + { + "shop_price": "1425", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "741", + "durability": null, + "name": "Emerald necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1669" + }, + { + "shop_price": "870", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "1194", + "durability": null, + "name": "Ruby necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1670" + }, + { + "shop_price": "3307", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "9795", + "durability": null, + "name": "Diamond necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1671" + }, + { + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "23010", + "durability": null, + "name": "Dragon necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1672" + }, + { + "shop_price": "350", + "ge_buy_limit": "5000", + "examine": "A plain gold amulet.", + "grand_exchange_price": "172", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1673" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "172", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1674" + }, + { + "shop_price": "810", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "473", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1675" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "473", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1676" + }, + { + "shop_price": "1147", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "695", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1677" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "695", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1678" + }, + { + "shop_price": "2025", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1268", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1679" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1268", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1680" + }, + { + "shop_price": "3307", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "3359", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1681" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3359", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1682" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "26900", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1683" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26900", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1684" + }, + { + "shop_price": "810", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "417", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1687" + }, + { + "shop_price": "1147", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "648", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1688" + }, + { + "shop_price": "2025", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1098", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1689" + }, + { + "shop_price": "3307", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1993", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1690" + }, + { + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "18436", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1691" + }, + { + "shop_price": "350", + "ge_buy_limit": "5000", + "examine": "A plain gold amulet.", + "grand_exchange_price": "137", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1692", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "137", + "durability": null, + "name": "Gold amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1693" + }, + { + "shop_price": "810", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "435", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1694", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "435", + "durability": null, + "name": "Sapphire amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1695" + }, + { + "shop_price": "1147", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "659", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1696", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "659", + "durability": null, + "name": "Emerald amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1697" + }, + { + "shop_price": "2025", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "1115", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1698", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1115", + "durability": null, + "name": "Ruby amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1699" + }, + { + "shop_price": "3307", + "ge_buy_limit": "5000", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "2706", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1700", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2706", + "durability": null, + "name": "Diamond amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1701" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "27100", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1702", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27100", + "durability": null, + "name": "Dragonstone ammy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1703" + }, + { + "ge_buy_limit": "100", + "examine": "A very powerful dragonstone amulet.", + "grand_exchange_price": "28000", + "durability": null, + "name": "Amulet of glory", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1704", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1705" + }, + { + "examine": "A dragonstone amulet with 1 magic charge.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1706", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1707" + }, + { + "examine": "A dragonstone amulet with 2 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1708", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1709" + }, + { + "examine": "A dragonstone amulet with 3 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1710", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1711" + }, + { + "ge_buy_limit": "100", + "examine": "A dragonstone amulet with 4 magic charges.", + "grand_exchange_price": "29300", + "durability": null, + "name": "Amulet of glory(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1712", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1713" + }, + { + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "It needs a string so I can wear it.", + "grand_exchange_price": "83", + "durability": null, + "name": "Unstrung symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1714" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "83", + "durability": null, + "name": "Unstrung symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1715" + }, + { + "shop_price": "120", + "ge_buy_limit": "5000", + "examine": "A symbol of Saradomin.", + "grand_exchange_price": "29", + "durability": null, + "name": "Unblessed symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1716", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "29", + "durability": null, + "name": "Unblessed symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1717" + }, + { + "shop_price": "300", + "ge_buy_limit": "5000", + "examine": "A blessed holy symbol of Saradomin.", + "grand_exchange_price": "88", + "durability": null, + "name": "Holy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1718", + "bonuses": "0,0,0,0,0,2,2,2,2,2,3,0,8,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "88", + "durability": null, + "name": "Holy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1719" + }, + { + "ge_buy_limit": "5000", + "examine": "It needs a string so I can wear it.", + "grand_exchange_price": "178", + "durability": null, + "name": "Unstrung emblem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1720" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "178", + "durability": null, + "name": "Unstrung emblem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1721" + }, + { + "shop_price": "120", + "ge_buy_limit": "5000", + "examine": "An unholy symbol of Zamorak.", + "grand_exchange_price": "24", + "durability": null, + "name": "Unpowered symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1722", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "24", + "durability": null, + "name": "Unpowered symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1723" + }, + { + "shop_price": "135", + "ge_buy_limit": "5000", + "examine": "An unholy symbol of Zamorak.", + "grand_exchange_price": "57", + "durability": null, + "name": "Unholy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1724", + "bonuses": "2,2,2,2,2,0,0,0,0,0,0,0,8,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "examine": "An enchanted ruby amulet.", + "grand_exchange_price": "1247", + "durability": null, + "name": "Amulet of strength", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1725", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,10,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1247", + "durability": null, + "name": "Amulet of strength", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1726" + }, + { + "shop_price": "900", + "ge_buy_limit": "5000", + "examine": "An enchanted sapphire amulet of magic.", + "grand_exchange_price": "519", + "durability": null, + "name": "Amulet of magic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1727", + "bonuses": "0,0,0,10,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "519", + "durability": null, + "name": "Amulet of magic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1728" + }, + { + "shop_price": "1275", + "ge_buy_limit": "5000", + "examine": "An enchanted emerald amulet of protection.", + "grand_exchange_price": "721", + "durability": null, + "name": "Amulet of defence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1729", + "bonuses": "0,0,0,0,0,7,7,7,7,7,7,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "721", + "durability": null, + "name": "Amulet of defence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1730" + }, + { + "shop_price": "3525", + "ge_buy_limit": "5000", + "examine": "An enchanted diamond amulet of power.", + "grand_exchange_price": "2573", + "durability": null, + "name": "Amulet of power", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1731", + "bonuses": "6,6,6,6,6,6,6,6,6,6,6,6,1,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2573", + "durability": null, + "name": "Amulet of power", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1732" + }, + { + "shop_price": "1", + "ge_buy_limit": "5000", + "examine": "Used with a thread to make clothes.", + "grand_exchange_price": "5", + "durability": null, + "name": "Needle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1733" + }, + { + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Use with a needle to make clothes.", + "grand_exchange_price": "7", + "durability": null, + "name": "Thread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1734" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "For shearing sheep.", + "grand_exchange_price": "76", + "durability": null, + "name": "Shears", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1735" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "76", + "durability": null, + "name": "Shears", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1736" + }, + { + "ge_buy_limit": "5000", + "examine": "I think this came from a sheep.", + "grand_exchange_price": "160", + "durability": null, + "name": "Wool", + "tradeable": "true", + "weight": "0.14", + "archery_ticket_price": "0", + "id": "1737" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "160", + "durability": null, + "name": "Wool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1738" + }, + { + "ge_buy_limit": "10000", + "examine": "I should take this to the tannery.", + "grand_exchange_price": "140", + "durability": null, + "name": "Cowhide", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "1739" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "516", + "durability": null, + "name": "Cowhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1740" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of leather.", + "grand_exchange_price": "638", + "durability": null, + "name": "Leather", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "1741" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "638", + "durability": null, + "name": "Leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1742" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of hard leather.", + "grand_exchange_price": "640", + "durability": null, + "name": "Hard leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1743" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "640", + "durability": null, + "name": "Hard leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1744" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared green dragon hide.", + "grand_exchange_price": "2237", + "durability": null, + "name": "Green d-leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1745" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2237", + "durability": null, + "name": "Green d-leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1746" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a Black Dragon.", + "grand_exchange_price": "5802", + "durability": null, + "name": "Black dragonhide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1747" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5802", + "durability": null, + "name": "Black dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1748" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a red dragon.", + "grand_exchange_price": "3539", + "durability": null, + "name": "Red dragonhide", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1749" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3539", + "durability": null, + "name": "Red dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1750" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a blue dragon.", + "grand_exchange_price": "2473", + "durability": null, + "name": "Blue dragonhide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1751" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2473", + "durability": null, + "name": "Blue dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1752" + }, + { + "ge_buy_limit": "10000", + "examine": "The scaly rough hide from a green dragon.", + "grand_exchange_price": "1000", + "durability": null, + "name": "Green dragonhide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "1753" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1933", + "durability": null, + "name": "Green dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1754" + }, + { + "shop_price": "14", + "ge_buy_limit": "100", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "20", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1755" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1756" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A mostly clean apron.", + "grand_exchange_price": "74", + "durability": null, + "name": "Brown apron", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "1757", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Brown apron", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1758" + }, + { + "ge_buy_limit": "5000", + "examine": "Spun from sheeps' wool.", + "grand_exchange_price": "115", + "durability": null, + "name": "Ball of wool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1759" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "115", + "durability": null, + "name": "Ball of wool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1760" + }, + { + "ge_buy_limit": "10000", + "examine": "Clay soft enough to mould.", + "grand_exchange_price": "487", + "durability": null, + "name": "Soft clay", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1761" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "487", + "durability": null, + "name": "Soft clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1762" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of red dye.", + "grand_exchange_price": "1374", + "durability": null, + "name": "Red dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1763" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1374", + "durability": null, + "name": "Red dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1764" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of yellow dye.", + "grand_exchange_price": "549", + "durability": null, + "name": "Yellow dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1765" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "549", + "durability": null, + "name": "Yellow dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1766" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of blue dye", + "grand_exchange_price": "642", + "durability": null, + "name": "Blue dye", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1767" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "642", + "durability": null, + "name": "Blue dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1768" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of orange dye.", + "grand_exchange_price": "1258", + "durability": null, + "name": "Orange dye", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1769" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1258", + "durability": null, + "name": "Orange dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1770" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of green dye.", + "grand_exchange_price": "503", + "durability": null, + "name": "Green dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1771" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "503", + "durability": null, + "name": "Green dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1772" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A little bottle of purple dye.", + "grand_exchange_price": "288", + "durability": null, + "name": "Purple dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1773" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "288", + "durability": null, + "name": "Purple dye", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1774" + }, + { + "ge_buy_limit": "10000", + "examine": "Hot glass ready to be blown into useful objects.", + "grand_exchange_price": "924", + "durability": null, + "name": "Molten glass", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1775" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "924", + "durability": null, + "name": "Molten glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1776" + }, + { + "ge_buy_limit": "10000", + "examine": "I need a bow stave to attach this to.", + "grand_exchange_price": "240", + "durability": null, + "name": "Bow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1777" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "223", + "durability": null, + "name": "Bow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1778" + }, + { + "shop_price": "73", + "ge_buy_limit": "25000", + "examine": "A plant cultivated for fibres (ground); I should use this with a spinning wheel (item).", + "grand_exchange_price": "73", + "durability": null, + "name": "Flax", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1779" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "73", + "durability": null, + "name": "Flax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1780" + }, + { + "ge_buy_limit": "10000", + "examine": "One of the ingredients for making glass.", + "grand_exchange_price": "575", + "durability": null, + "name": "Soda ash", + "tradeable": "true", + "weight": "0.09", + "archery_ticket_price": "0", + "id": "1781" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "575", + "durability": null, + "name": "Soda ash", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1782" + }, + { + "ge_buy_limit": "10000", + "examine": "One of the ingredients for making glass.", + "grand_exchange_price": "265", + "durability": null, + "name": "Bucket of sand", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "1783" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "265", + "durability": null, + "name": "Bucket of sand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1784" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to form molten glass into useful items.", + "grand_exchange_price": "195", + "durability": null, + "name": "Glassblowing pipe", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1785" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Glassblowing pipe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1786" + }, + { + "ge_buy_limit": "100", + "examine": "I need to put this in a pottery oven.", + "grand_exchange_price": "53", + "durability": null, + "name": "Unfired pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1787" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "53", + "durability": null, + "name": "Unfired pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1788" + }, + { + "ge_buy_limit": "100", + "examine": "I need to put this in a pottery oven.", + "grand_exchange_price": "96", + "durability": null, + "name": "Unfired pie dish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1789" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "96", + "durability": null, + "name": "Unfired pie dish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1790" + }, + { + "shop_price": "32", + "ge_buy_limit": "100", + "examine": "I need to put this in a pottery oven.", + "grand_exchange_price": "194", + "durability": null, + "name": "Unfired bowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1791" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "194", + "durability": null, + "name": "Unfired bowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1792" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A slightly bluish leaf.", + "grand_exchange_price": "57", + "durability": null, + "name": "Woad leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1793" + }, + { + "ge_buy_limit": "100", + "examine": "Useful for crafting items.", + "grand_exchange_price": "249", + "durability": null, + "name": "Bronze wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1794" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "249", + "durability": null, + "name": "Bronze wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1795" + }, + { + "examine": "Anna's shiny silver coated necklace.", + "durability": null, + "name": "Silver necklace", + "weight": "1", + "archery_ticket_price": "0", + "id": "1796", + "equipment_slot": "2" + }, + { + "examine": "Anna's shiny silver coated necklace.", + "durability": null, + "name": "Silver necklace", + "weight": "1", + "archery_ticket_price": "0", + "id": "1797", + "equipment_slot": "2" + }, + { + "examine": "Bob's shiny silver coated tea cup.", + "durability": null, + "name": "Silver cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1798" + }, + { + "examine": "Bob's shiny silver coated tea cup.", + "durability": null, + "name": "Silver cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1799" + }, + { + "examine": "Carol's shiny silver coated bottle.", + "durability": null, + "name": "Silver bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1800" + }, + { + "examine": "Carol's shiny silver coated bottle.", + "durability": null, + "name": "Silver bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1801" + }, + { + "examine": "David's shiny silver coated book.", + "durability": null, + "name": "Silver book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1802" + }, + { + "examine": "David's shiny silver coated book.", + "durability": null, + "name": "Silver book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1803" + }, + { + "examine": "Elizabeth's shiny silver coated needle.", + "durability": null, + "name": "Silver needle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1804" + }, + { + "examine": "Elizabeth's shiny silver coated needle.", + "durability": null, + "name": "Silver needle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1805" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1806" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1807" + }, + { + "examine": "Some (colour) thread found at the murder scene.", + "durability": null, + "name": "Criminal's thread", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1808" + }, + { + "examine": "Some (colour) thread found at the murder scene.", + "durability": null, + "name": "Criminal's thread", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1809" + }, + { + "examine": "Some (colour) thread found at the murder scene.", + "durability": null, + "name": "Criminal's thread", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1810" + }, + { + "examine": "A piece of fly paper. It's sticky.", + "durability": null, + "name": "Flypaper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1811" + }, + { + "examine": "A pot found at the murder scene, with a sickly odour.", + "durability": null, + "name": "Pungent pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1812" + }, + { + "examine": "A flimsy-looking dagger found at the crime scene./A flimsy looking dagger found at the crime scene coated with a thin layer of flour.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Criminal's dagger", + "archery_ticket_price": "0", + "id": "1813" + }, + { + "examine": "A flimsy-looking dagger found at the crime scene./A flimsy looking dagger found at the crime scene coated with a thin layer of flour.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Criminal's dagger", + "archery_ticket_price": "0", + "id": "1814" + }, + { + "examine": "The fingerprints of the murderer.", + "durability": null, + "name": "Killer's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1815" + }, + { + "examine": "An imprint of Anna's fingerprint.", + "durability": null, + "name": "Anna's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1816" + }, + { + "examine": "An imprint of Bob's fingerprint.", + "durability": null, + "name": "Bob's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1817" + }, + { + "examine": "An imprint of Carol's fingerprint.", + "durability": null, + "name": "Carol's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1818" + }, + { + "examine": "An imprint of David's fingerprint.", + "durability": null, + "name": "David's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1819" + }, + { + "examine": "An imprint of Elizabeth's fingerprint.", + "durability": null, + "name": "Elizabeth's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1820" + }, + { + "examine": "An imprint of Frank's fingerprint.", + "durability": null, + "name": "Frank's print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1821" + }, + { + "examine": "An unidentified fingerprint taken from the murder weapon.", + "durability": null, + "name": "Unknown print", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1822" + }, + { + "shop_price": "30", + "ge_buy_limit": "100", + "examine": "A full waterskin with four portions of water.", + "grand_exchange_price": "184", + "durability": null, + "name": "Waterskin(4)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1823" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "184", + "durability": null, + "name": "Waterskin(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1824" + }, + { + "shop_price": "30", + "examine": "A nearly full waterskin with three portions of water.", + "grand_exchange_price": "4", + "durability": null, + "name": "Waterskin(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1825" + }, + { + "durability": null, + "name": "Waterskin(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1826" + }, + { + "shop_price": "30", + "examine": "A half empty waterskin with two portions of water.", + "grand_exchange_price": "4", + "durability": null, + "name": "Waterskin(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1827" + }, + { + "durability": null, + "name": "Waterskin(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1828" + }, + { + "shop_price": "30", + "examine": "A nearly empty waterskin with one portion of water.", + "grand_exchange_price": "4", + "durability": null, + "name": "Waterskin(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1829" + }, + { + "durability": null, + "name": "Waterskin(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1830" + }, + { + "shop_price": "30", + "ge_buy_limit": "100", + "examine": "A completely empty waterskin - you'll need to fill it up.", + "grand_exchange_price": "93", + "durability": null, + "name": "Waterskin(0)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1831" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "Waterskin(0)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1832" + }, + { + "remove_sleeves": "true", + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool, light desert shirt.", + "grand_exchange_price": "93", + "durability": null, + "name": "Desert shirt", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1833", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "Desert shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1834" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool, light desert robe.", + "grand_exchange_price": "74", + "durability": null, + "name": "Desert robe", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1835", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Desert robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1836" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Comfortable desert shoes.", + "grand_exchange_price": "257", + "durability": null, + "name": "Desert boots", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1837", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "257", + "durability": null, + "name": "Desert boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1838" + }, + { + "examine": "This key is crudely made. It came from the mining camp Mercenary Captain.", + "durability": null, + "name": "Metal key", + "archery_ticket_price": "0", + "id": "1839" + }, + { + "examine": "A metallic key, usually used by prison guards. (Tourist Trap)", + "durability": null, + "name": "Cell door key", + "archery_ticket_price": "0", + "id": "1840" + }, + { + "examine": "An empty barrel/A Splendid barrel.", + "grand_exchange_price": "206", + "durability": null, + "name": "Barrel", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "1841" + }, + { + "examine": "Inventory: A mining barrel with Ana in it.While in the mine cart: It's Ana... in a barrel... in a mine cart.", + "durability": null, + "name": "Ana in a barrel", + "weight": "32", + "archery_ticket_price": "0", + "id": "1842" + }, + { + "examine": "This key unlocks a very sturdy gate. Ana gave me this key. (Tourist Trap)", + "durability": null, + "name": "Wrought iron key", + "archery_ticket_price": "0", + "id": "1843" + }, + { + "remove_sleeves": "true", + "examine": "A filthy, smelly, flea infested shirt.", + "durability": null, + "name": "Slave shirt", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1844", + "equipment_slot": "4" + }, + { + "examine": "A filthy, smelly, flea infested robe.", + "durability": null, + "name": "Slave robe", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1845", + "equipment_slot": "7" + }, + { + "examine": "A set of filthy, smelly, flea infested desert slave boots.", + "durability": null, + "name": "Slave boots", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "1846", + "equipment_slot": "10" + }, + { + "examine": "A piece of paper with barely legible writing - looks like a recipe!", + "durability": null, + "name": "Scrumpled paper", + "archery_ticket_price": "0", + "id": "1847" + }, + { + "shop_price": "5", + "examine": "Very important information.", + "durability": null, + "name": "Shantay disclaimer", + "archery_ticket_price": "0", + "id": "1848" + }, + { + "examine": "A prototype throwing dart.", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Prototype dart", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1849" + }, + { + "examine": "Plans of a technical nature.", + "durability": null, + "name": "Technical plans", + "weight": "1", + "archery_ticket_price": "0", + "id": "1850" + }, + { + "examine": "The most delicious of pineapples.", + "durability": null, + "name": "Tenti pineapple", + "weight": "1", + "archery_ticket_price": "0", + "id": "1851" + }, + { + "examine": "A key to the chest in Captain Siad's room.", + "durability": null, + "name": "Bedabin key", + "archery_ticket_price": "0", + "id": "1852" + }, + { + "examine": "A protoype dart tip - it looks deadly.", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Prototype dart tip", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1853" + }, + { + "shop_price": "5", + "examine": "Allows you to pass through the Shantay pass into the Kharid Desert.", + "durability": null, + "name": "Shantay pass", + "archery_ticket_price": "0", + "id": "1854" + }, + { + "examine": "A Tourist's Guide to Ardougne.", + "durability": null, + "name": "Guide book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "1856" + }, + { + "examine": "The Rantuki tribe's totem.", + "durability": null, + "name": "Totem", + "weight": "3", + "archery_ticket_price": "0", + "id": "1857" + }, + { + "examine": "It says 'To Lord Handelmort, Handelmort Mansion'.", + "durability": null, + "name": "Address label", + "archery_ticket_price": "0", + "id": "1858" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to cook this first / Freshly cooked ugthanki meat.", + "grand_exchange_price": "486", + "durability": null, + "name": "Raw ugthanki meat", + "tradeable": "true", + "weight": "0.75", + "archery_ticket_price": "0", + "id": "1859" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "486", + "durability": null, + "name": "Raw ugthanki meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1860" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to cook this first / Freshly cooked ugthanki meat.", + "grand_exchange_price": "687", + "durability": null, + "name": "Ugthanki meat", + "tradeable": "true", + "weight": "0.75", + "archery_ticket_price": "0", + "id": "1861" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "687", + "durability": null, + "name": "Ugthanki meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1862" + }, + { + "shop_price": "9", + "ge_buy_limit": "1000", + "examine": "I need to cook this.", + "grand_exchange_price": "90", + "durability": null, + "name": "Pitta dough", + "tradeable": "true", + "weight": "0.14", + "archery_ticket_price": "0", + "id": "1863" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "90", + "durability": null, + "name": "Pitta dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1864" + }, + { + "ge_buy_limit": "1000", + "examine": "Nicely baked pitta bread. Needs more ingredients to make a kebab.", + "grand_exchange_price": "22", + "durability": null, + "name": "Pitta bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1865" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "22", + "durability": null, + "name": "Pitta bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1866" + }, + { + "durability": null, + "name": "Burnt pitta bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1868" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of tomatoes in a bowl.", + "grand_exchange_price": "90", + "durability": null, + "name": "Chopped tomato", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1869" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "90", + "durability": null, + "name": "Chopped tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1870" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of onions in a bowl.", + "grand_exchange_price": "142", + "durability": null, + "name": "Chopped onion", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1871" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "142", + "durability": null, + "name": "Chopped onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1872" + }, + { + "ge_buy_limit": "1000", + "examine": "Strips of ugthanki meat in a bowl.", + "grand_exchange_price": "348", + "durability": null, + "name": "Chopped ugthanki", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1873" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "348", + "durability": null, + "name": "Chopped ugthanki", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1874" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of chopped onions and tomatoes in a bowl", + "grand_exchange_price": "31", + "durability": null, + "name": "Onion & tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1875" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "31", + "durability": null, + "name": "Onion & tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1876" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "A mixture of chopped onions and ugthanki meat in a bowl.", + "grand_exchange_price": "330", + "durability": null, + "name": "Ugthanki & onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1877" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "330", + "durability": null, + "name": "Ugthanki & onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1878" + }, + { + "ge_buy_limit": "10000", + "examine": "A mixture of chopped tomatoes and ugthanki meat in a bowl.", + "grand_exchange_price": "331", + "durability": null, + "name": "Ugthanki & tomato", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "1879" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "331", + "durability": null, + "name": "Ugthanki & tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1880" + }, + { + "ge_buy_limit": "1000", + "examine": "A mixture of chopped tomatoes, onions and ugthanki meat in a bowl", + "grand_exchange_price": "412", + "durability": null, + "name": "Kebab mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1881" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "412", + "durability": null, + "name": "Kebab mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1882" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2027", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1883" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2027", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1884" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1499", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1885" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1499", + "durability": null, + "name": "Ugthanki kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1886" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Useful for baking cakes.", + "grand_exchange_price": "20", + "durability": null, + "name": "Cake tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1887" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Cake tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1888" + }, + { + "ge_buy_limit": "1000", + "examine": "Now all I need to do is cook it.", + "grand_exchange_price": "559", + "durability": null, + "name": "Uncooked cake", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1889" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "559", + "durability": null, + "name": "Uncooked cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1890" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "A plain sponge cake.", + "grand_exchange_price": "155", + "durability": null, + "name": "Cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1891" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "155", + "durability": null, + "name": "Cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1892" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "A plain sponge cake.", + "grand_exchange_price": "39", + "durability": null, + "name": "2/3 cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1893" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "39", + "durability": null, + "name": "2/3 cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1894" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "A plain sponge cake.", + "grand_exchange_price": "32", + "durability": null, + "name": "Slice of cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1895" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "32", + "durability": null, + "name": "Slice of cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1896" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks very tasty.", + "grand_exchange_price": "416", + "durability": null, + "name": "Chocolate cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1897" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "416", + "durability": null, + "name": "Chocolate cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1898" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks very tasty.", + "grand_exchange_price": "181", + "durability": null, + "name": "2/3 chocolate cake", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1899" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "181", + "durability": null, + "name": "2/3 chocolate cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1900" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks very tasty.", + "grand_exchange_price": "13", + "durability": null, + "name": "Chocolate slice", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1901" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Chocolate slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1902" + }, + { + "durability": null, + "name": "Burnt cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1904" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "190", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1905" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "190", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1906" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "171", + "durability": null, + "name": "Wizard's mind bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1907" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "171", + "durability": null, + "name": "Wizard's mind bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1908" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "828", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1909" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "828", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1910" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "487", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1911" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "487", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1912" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "212", + "durability": null, + "name": "Dwarven stout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1913" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "212", + "durability": null, + "name": "Dwarven stout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1914" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A murky glass full of your average, everyday pirate slosh.", + "grand_exchange_price": "19", + "durability": null, + "name": "Grog", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "1915" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Grog", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1916" + }, + { + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "202", + "durability": null, + "name": "Beer", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1917", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "202", + "durability": null, + "name": "Beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1918" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "I need to fill this with beer.", + "grand_exchange_price": "10", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "1919" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1920" + }, + { + "ge_buy_limit": "100", + "examine": "It's a bowl of water.", + "grand_exchange_price": "97", + "durability": null, + "name": "Bowl of water", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1921" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "97", + "durability": null, + "name": "Bowl of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1922" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "Useful for mixing things.", + "grand_exchange_price": "34", + "durability": null, + "name": "Bowl", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1923" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34", + "durability": null, + "name": "Bowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1924" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "It's an empty bucket.", + "grand_exchange_price": "30", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1925" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1926" + }, + { + "shop_price": "12", + "ge_buy_limit": "1000", + "examine": "It's a bucket of milk.", + "grand_exchange_price": "103", + "durability": null, + "name": "Bucket of milk", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "1927" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "103", + "durability": null, + "name": "Bucket of milk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1928" + }, + { + "ge_buy_limit": "100", + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "72", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "1929" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "72", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1930" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "This pot is empty.", + "grand_exchange_price": "6", + "durability": null, + "name": "Empty pot", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "1931" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6", + "durability": null, + "name": "Empty pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1932" + }, + { + "shop_price": "14", + "ge_buy_limit": "1000", + "examine": "There is flour in this pot.", + "grand_exchange_price": "172", + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "1933" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "172", + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1934" + }, + { + "shop_price": "1", + "ge_buy_limit": "10000", + "examine": "This jug is empty.", + "grand_exchange_price": "29", + "durability": null, + "name": "Jug", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1935" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "29", + "durability": null, + "name": "Jug", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1936" + }, + { + "shop_price": "1", + "ge_buy_limit": "10000", + "examine": "It's full of water.", + "grand_exchange_price": "87", + "durability": null, + "name": "Jug of water", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1937" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "87", + "durability": null, + "name": "Jug of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1938" + }, + { + "ge_buy_limit": "5000", + "examine": "A foul smelling thick tar like substance.", + "grand_exchange_price": "103", + "durability": null, + "name": "Swamp tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1939" + }, + { + "shop_price": "38", + "ge_buy_limit": "5000", + "examine": "A tar-like substance mixed with flour and warmed.", + "grand_exchange_price": "342", + "durability": null, + "name": "Raw swamp paste", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1940" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "A tar-like substance mixed with flour and warmed.", + "grand_exchange_price": "1", + "durability": null, + "name": "Swamp paste", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1941" + }, + { + "shop_price": "11", + "ge_buy_limit": "500", + "examine": "This could be used to make a good stew.", + "grand_exchange_price": "91", + "durability": null, + "name": "Potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1942" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "91", + "durability": null, + "name": "Potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1943" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "A nice fresh egg.", + "grand_exchange_price": "99", + "durability": null, + "name": "Egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1944" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "99", + "durability": null, + "name": "Egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1945" + }, + { + "shop_price": "14", + "examine": "There is flour in this pot.", + "grand_exchange_price": "162", + "durability": null, + "name": "Flour", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "1946" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "Some wheat heads.", + "grand_exchange_price": "7", + "durability": null, + "name": "Grain", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "1947" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7", + "durability": null, + "name": "Grain", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1948" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "What a silly hat.", + "grand_exchange_price": "233", + "durability": null, + "name": "Chef's hat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "1949", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "233", + "durability": null, + "name": "Chef's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1950" + }, + { + "shop_price": "3", + "ge_buy_limit": "1000", + "examine": "Very bright red berries.", + "grand_exchange_price": "337", + "durability": null, + "name": "Redberries", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "1951" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "337", + "durability": null, + "name": "Redberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1952" + }, + { + "ge_buy_limit": "1000", + "examine": "Potentially pastry.", + "grand_exchange_price": "433", + "durability": null, + "name": "Pastry dough", + "tradeable": "true", + "weight": "0.16", + "archery_ticket_price": "0", + "id": "1953" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "433", + "durability": null, + "name": "Pastry dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1954" + }, + { + "shop_price": "36", + "ge_buy_limit": "1000", + "examine": "Keeps the doctor away.", + "grand_exchange_price": "353", + "durability": null, + "name": "Cooking apple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1955" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "353", + "durability": null, + "name": "Cooking apple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1956" + }, + { + "shop_price": "12", + "ge_buy_limit": "1000", + "examine": "A strong smelling onion.", + "grand_exchange_price": "8", + "durability": null, + "name": "Onion", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1957" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8", + "durability": null, + "name": "Onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1958" + }, + { + "ge_buy_limit": "2", + "examine": "Happy Halloween.", + "grand_exchange_price": "273600000", + "durability": null, + "name": "Pumpkin", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "1959" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "273600000", + "durability": null, + "name": "Pumpkin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1960" + }, + { + "ge_buy_limit": "2", + "examine": "Happy Easter.", + "grand_exchange_price": "80400000", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1961" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "80400000", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1962" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "263", + "durability": null, + "name": "Banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1963", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "263", + "durability": null, + "name": "Banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1964" + }, + { + "ge_buy_limit": "1000", + "examine": "On ground: Cabbage... yuck!In inventory: Yuck, I don't like cabbage.", + "grand_exchange_price": "41", + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1965" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "41", + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1966" + }, + { + "examine": "On ground: Cabbage... yuck!In inventory: Yuck, I don't like cabbage.", + "grand_exchange_price": "55", + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "1967" + }, + { + "durability": null, + "name": "Cabbage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1968" + }, + { + "shop_price": "1", + "examine": "A home made spinach thing.", + "durability": null, + "name": "Spinach roll", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1969" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "A meaty kebab.", + "grand_exchange_price": "97", + "durability": null, + "name": "Kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1971" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "97", + "durability": null, + "name": "Kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1972" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Mmmmmmm chocolate.", + "grand_exchange_price": "295", + "durability": null, + "name": "Chocolate bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1973", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "295", + "durability": null, + "name": "Chocolate bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1974" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "It's ground-up chocolate.", + "grand_exchange_price": "370", + "durability": null, + "name": "Chocolate dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1975" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "370", + "durability": null, + "name": "Chocolate dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1976" + }, + { + "examine": "Milk with chocolate in it.", + "durability": null, + "name": "Chocolatey milk", + "weight": "2", + "archery_ticket_price": "0", + "id": "1977" + }, + { + "shop_price": "10", + "ge_buy_limit": "1000", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "1978" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1979" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An empty cup.", + "grand_exchange_price": "5", + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1980" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1981" + }, + { + "shop_price": "25", + "ge_buy_limit": "10000", + "examine": "This would make good ketchup.", + "grand_exchange_price": "159", + "durability": null, + "name": "Tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1982" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "159", + "durability": null, + "name": "Tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1983" + }, + { + "shop_price": "1", + "examine": "Rotten to the core!", + "durability": null, + "name": "Rotten apple", + "archery_ticket_price": "0", + "id": "1984" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "It's got holes in it.", + "grand_exchange_price": "188", + "durability": null, + "name": "Cheese", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "1985" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "188", + "durability": null, + "name": "Cheese", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1986" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "Good grapes for wine making.", + "grand_exchange_price": "1510", + "durability": null, + "name": "Grapes", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "1987" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1510", + "durability": null, + "name": "Grapes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1988" + }, + { + "ge_buy_limit": "2", + "examine": "An optimist would say it is half full.", + "grand_exchange_price": "227700000", + "durability": null, + "name": "Half full wine jug", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1989" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "227700000", + "durability": null, + "name": "Half full wine jug", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1990" + }, + { + "examine": "Oh dear, this wine is terrible!", + "durability": null, + "name": "Jug of bad wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1991" + }, + { + "examine": "Oh dear, this wine is terrible!", + "durability": null, + "name": "Jug of bad wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1992" + }, + { + "shop_price": "128", + "ge_buy_limit": "1000", + "examine": "It's full of wine.", + "grand_exchange_price": "36", + "durability": null, + "name": "Jug of wine", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "1993" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "36", + "durability": null, + "name": "Jug of wine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1994" + }, + { + "examine": "This wine needs to ferment before it can be drunk.", + "durability": null, + "name": "Unfermented wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1995" + }, + { + "examine": "This wine needs to ferment before it can be drunk.", + "durability": null, + "name": "Unfermented wine", + "weight": "1", + "archery_ticket_price": "0", + "id": "1996" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "177", + "durability": null, + "name": "Incomplete stew", + "archery_ticket_price": "0", + "id": "1997" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "177", + "durability": null, + "name": "Incomplete stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "1998" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "210", + "durability": null, + "name": "Incomplete stew", + "archery_ticket_price": "0", + "id": "1999" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "210", + "durability": null, + "name": "Incomplete stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2000" + }, + { + "shop_price": "1", + "ge_buy_limit": "200", + "examine": "I need to cook this.", + "grand_exchange_price": "600", + "durability": null, + "name": "Uncooked stew", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2001" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "600", + "durability": null, + "name": "Uncooked stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2002" + }, + { + "shop_price": "20", + "ge_buy_limit": "200", + "examine": "It's a meat and potato stew.", + "grand_exchange_price": "1133", + "durability": null, + "name": "Stew", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "2003" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1133", + "durability": null, + "name": "Stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2004" + }, + { + "durability": null, + "name": "Burnt stew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2006" + }, + { + "shop_price": "230", + "ge_buy_limit": "1000", + "examine": "This could liven up an otherwise bland stew.", + "grand_exchange_price": "277", + "durability": null, + "name": "Spice", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2007" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "277", + "durability": null, + "name": "Spice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2008" + }, + { + "ge_buy_limit": "200", + "examine": "I need to cook this.", + "grand_exchange_price": "1382", + "durability": null, + "name": "Uncooked curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2009" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1382", + "durability": null, + "name": "Uncooked curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2010" + }, + { + "ge_buy_limit": "200", + "examine": "It's a spicy hot curry.", + "grand_exchange_price": "1001", + "durability": null, + "name": "Curry", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "2011" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1001", + "durability": null, + "name": "Curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2012" + }, + { + "durability": null, + "name": "Burnt curry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2014" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "An absolutely clear spirit sold by well-stocked bars.", + "grand_exchange_price": "366", + "durability": null, + "name": "Vodka", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2015" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "durability": null, + "name": "Vodka", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2016" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "This Draynor malt is sold by well-stocked bars.", + "grand_exchange_price": "68", + "durability": null, + "name": "Whisky", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2017" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "68", + "durability": null, + "name": "Whisky", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2018" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A strong spirit that tastes of Juniper; sold at well-stocked bars.", + "grand_exchange_price": "184", + "durability": null, + "name": "Gin", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2019" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "184", + "durability": null, + "name": "Gin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2020" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A strong spirit best served in a large glass.", + "grand_exchange_price": "146", + "durability": null, + "name": "Brandy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2021" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "146", + "durability": null, + "name": "Brandy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2022" + }, + { + "shop_price": "5", + "examine": "A book on tree gnome cocktails.", + "durability": null, + "name": "Cocktail guide", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2023" + }, + { + "durability": null, + "name": "Cocktail guide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2024" + }, + { + "shop_price": "2", + "examine": "Used for mixing cocktails.", + "durability": null, + "name": "Cocktail shaker", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2025" + }, + { + "shop_price": "1", + "examine": "For sipping cocktails.", + "durability": null, + "name": "Cocktail glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2026" + }, + { + "durability": null, + "name": "Cocktail glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2027" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Blurberry Special.", + "grand_exchange_price": "70", + "durability": null, + "name": "Premade blurb' sp.", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2028" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "70", + "durability": null, + "name": "Premade blurb' sp.", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2029" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Chocolate Saturday.", + "grand_exchange_price": "13", + "durability": null, + "name": "Premade choc s'dy", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2030" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Premade choc s'dy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2031" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Drunk Dragon.", + "grand_exchange_price": "34", + "durability": null, + "name": "Premade dr' dragon", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2032" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "34", + "durability": null, + "name": "Premade dr' dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2033" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Fruit Blast.", + "grand_exchange_price": "48", + "durability": null, + "name": "Premade fr' blast", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2034" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "48", + "durability": null, + "name": "Premade fr' blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2035" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Pineapple Punch.", + "grand_exchange_price": "40", + "durability": null, + "name": "Premade p' punch", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2036" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "40", + "durability": null, + "name": "Premade p' punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2037" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A premade Short Green Guy.", + "grand_exchange_price": "33", + "durability": null, + "name": "Premade sgg", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2038" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "33", + "durability": null, + "name": "Premade sgg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2039" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A Premade Wizard Blizzard.", + "grand_exchange_price": "26", + "durability": null, + "name": "Premade wiz blz'd", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2040" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "26", + "durability": null, + "name": "Premade wiz blz'd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2041" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2042" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2043" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2044" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2045" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2046" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2047" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A fresh healthy fruit mix.", + "grand_exchange_price": "285", + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2048" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "285", + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2049" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2050" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2051" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2052" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2053" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "774", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2054" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "774", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2055" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2056" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2057" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2058" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2059" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2060" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2061" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2062" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2063" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "Looks good... smells strong.", + "grand_exchange_price": "5468", + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2064" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5468", + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2065" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2066" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2067" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2068" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2069" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2070" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2071" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2072" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2073" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "272", + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2074" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "272", + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2075" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2076" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2077" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2078" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2079" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A Short Green Guy... looks good.", + "grand_exchange_price": "756", + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2080" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "756", + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2081" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2082" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2083" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A cool refreshing fruit mix.", + "grand_exchange_price": "1802", + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2084" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1802", + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2085" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2086" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2087" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2088" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2089" + }, + { + "examine": "This cocktail is just missing those little finishing touches.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2090" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2091" + }, + { + "shop_price": "28", + "ge_buy_limit": "1000", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "506", + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2092" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "506", + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2093" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2094" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2095" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2096" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2097" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2098" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2099" + }, + { + "examine": "I'm not completely sure what this contains.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2100" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2101" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A common fruit, popularly used in cocktails.", + "grand_exchange_price": "86", + "durability": null, + "name": "Lemon", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2102" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "86", + "durability": null, + "name": "Lemon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2103" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a lemon!", + "grand_exchange_price": "29", + "durability": null, + "name": "Lemon chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2104" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "29", + "durability": null, + "name": "Lemon chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2105" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a lemon!", + "grand_exchange_price": "16", + "durability": null, + "name": "Lemon slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2106" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "16", + "durability": null, + "name": "Lemon slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2107" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "A common fruit.", + "grand_exchange_price": "930", + "durability": null, + "name": "Orange", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2108" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "930", + "durability": null, + "name": "Orange", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2109" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh chunks of orange.", + "grand_exchange_price": "46", + "durability": null, + "name": "Orange chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2110" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "46", + "durability": null, + "name": "Orange chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2111" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh orange slices.", + "grand_exchange_price": "163", + "durability": null, + "name": "Orange slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2112" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "163", + "durability": null, + "name": "Orange slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2113" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "It can be cut up into something more manageable with a knife.", + "grand_exchange_price": "45", + "durability": null, + "name": "Pineapple", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "2114" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "45", + "durability": null, + "name": "Pineapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2115" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh chunks of pineapple.", + "grand_exchange_price": "86", + "durability": null, + "name": "Pineapple chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2116" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "86", + "durability": null, + "name": "Pineapple chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2117" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a pineapple!", + "grand_exchange_price": "25", + "durability": null, + "name": "Pineapple ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2118" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "25", + "durability": null, + "name": "Pineapple ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2119" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A common fruit, popularly used in cocktails.", + "grand_exchange_price": "78", + "durability": null, + "name": "Lime", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2120" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "78", + "durability": null, + "name": "Lime", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2121" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh chunks of lime.", + "grand_exchange_price": "16", + "durability": null, + "name": "Lime chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2122" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "16", + "durability": null, + "name": "Lime chunks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2123" + }, + { + "ge_buy_limit": "1000", + "examine": "The not-too-surprising result of using a knife with a lime!", + "grand_exchange_price": "25", + "durability": null, + "name": "Lime slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2124" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "25", + "durability": null, + "name": "Lime slices", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2125" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "Some rather pretty blue berries picked from a dwellberry bush.", + "grand_exchange_price": "144", + "durability": null, + "name": "Dwellberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2126" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "144", + "durability": null, + "name": "Dwellberries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2127" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "A common ingredient in gnome cuisine.", + "grand_exchange_price": "275", + "durability": null, + "name": "Equa leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2128" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "275", + "durability": null, + "name": "Equa leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2129" + }, + { + "shop_price": "2", + "ge_buy_limit": "10000", + "examine": "Fresh cream.", + "grand_exchange_price": "58", + "durability": null, + "name": "Pot of cream", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2130" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "58", + "durability": null, + "name": "Pot of cream", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2131" + }, + { + "shop_price": "58", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "282", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2132" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "282", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2133" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "85", + "durability": null, + "name": "Raw rat meat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2134" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "85", + "durability": null, + "name": "Raw rat meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2135" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "307", + "durability": null, + "name": "Raw bear meat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2136" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "307", + "durability": null, + "name": "Raw bear meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2137" + }, + { + "shop_price": "60", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "386", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "2138" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "386", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2139" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "70", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2140" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "70", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2141" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "111", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2142" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "111", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2143" + }, + { + "durability": null, + "name": "Burnt chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2145" + }, + { + "examine": "Oh dear, it's totally burnt!", + "durability": null, + "name": "Burnt meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2146" + }, + { + "durability": null, + "name": "Burnt meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2147" + }, + { + "examine": "A very strange eel.", + "durability": null, + "name": "Raw lava eel", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2148" + }, + { + "examine": "Strange, it looks cooler now it's been cooked.", + "durability": null, + "name": "Lava eel", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "2149" + }, + { + "ge_buy_limit": "10000", + "examine": "A slippery little blighter.", + "grand_exchange_price": "750", + "durability": null, + "name": "Swamp toad", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2150" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "750", + "durability": null, + "name": "Swamp toad", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2151" + }, + { + "ge_buy_limit": "1000", + "examine": "They're a gnome delicacy apparently.", + "grand_exchange_price": "661", + "durability": null, + "name": "Toad's legs", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2152" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "661", + "durability": null, + "name": "Toad's legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2153" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2154" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2155" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Spicy toad's legs", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2156" + }, + { + "durability": null, + "name": "Spicy toad's legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2157" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Seasoned legs", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2158" + }, + { + "durability": null, + "name": "Seasoned legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2159" + }, + { + "examine": "They're a gnome delicacy apparently.", + "durability": null, + "name": "Spicy worm", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2160" + }, + { + "durability": null, + "name": "Spicy worm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2161" + }, + { + "ge_buy_limit": "100", + "examine": "They're a gnome delicacy apparently.", + "grand_exchange_price": "24", + "durability": null, + "name": "King worm", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2162" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24", + "durability": null, + "name": "King worm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2163" + }, + { + "shop_price": "1", + "examine": "A deep tin used to make gnome battas in.", + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2164" + }, + { + "shop_price": "10", + "examine": "A shallow tray used to make crunchies in.", + "durability": null, + "name": "Crunchy tray", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2165" + }, + { + "shop_price": "10", + "examine": "A large ovenproof bowl.", + "durability": null, + "name": "Gnomebowl mould", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2166" + }, + { + "examine": "Aluft Gianne's favourite dishes.", + "durability": null, + "name": "Gianne's cook book", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2167" + }, + { + "durability": null, + "name": "Gianne's cook book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2168" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "It's Aluft Gianne's secret mix of spices.", + "grand_exchange_price": "28", + "durability": null, + "name": "Gnome spice", + "tradeable": "true", + "weight": "0.14", + "archery_ticket_price": "0", + "id": "2169" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "28", + "durability": null, + "name": "Gnome spice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2170" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "It's made from a secret recipe.", + "grand_exchange_price": "13", + "durability": null, + "name": "Gianne dough", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2171" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Gianne dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2172" + }, + { + "examine": "This gnome bowl doesn't look very appetizing.", + "durability": null, + "name": "Picture", + "weight": "1", + "archery_ticket_price": "0", + "id": "2173" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2174" + }, + { + "durability": null, + "name": "Burnt gnomebowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2176" + }, + { + "examine": "This gnomebowl is in the early stages of preparation.", + "durability": null, + "name": "Half baked bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2177" + }, + { + "examine": "This gnomebowl needs cooking.", + "durability": null, + "name": "Raw gnomebowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2178" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2179" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2180" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2181" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2182" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2183" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2184" + }, + { + "shop_price": "450", + "ge_buy_limit": "1000", + "examine": "Full of creamy, chocolately goodness.", + "grand_exchange_price": "4400", + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2185" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4400", + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2186" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "2321", + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2187" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2321", + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2188" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2189" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2190" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "454", + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2191" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "454", + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2192" + }, + { + "examine": "This unfinished XX needs YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2193" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2194" + }, + { + "ge_buy_limit": "1000", + "examine": "This looks pretty healthy.", + "grand_exchange_price": "481", + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2195" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "481", + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2196" + }, + { + "examine": "These crunchies don't look very appetising.", + "durability": null, + "name": "Odd crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2197" + }, + { + "durability": null, + "name": "Odd crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2198" + }, + { + "durability": null, + "name": "Burnt crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2200" + }, + { + "examine": "This crunchy is in the early stages of preparation.", + "durability": null, + "name": "Half baked crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2201" + }, + { + "ge_buy_limit": "1000", + "examine": "These crunchies need cooking.", + "grand_exchange_price": "163", + "durability": null, + "name": "Raw crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2202" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2203" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2204" + }, + { + "shop_price": "80", + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "255", + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2205" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "255", + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2206" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2207" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2208" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "Yum... smells good.", + "grand_exchange_price": "816", + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2209" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "816", + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2210" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2211" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2212" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "Yum...smells spicy.", + "grand_exchange_price": "101", + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2213" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "101", + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2214" + }, + { + "examine": "This XX crunchy needs garnishing with YY.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2215" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2216" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "1228", + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2217" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1228", + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2218" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Worm Batta.", + "grand_exchange_price": "130", + "durability": null, + "name": "Premade w'm batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2219" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "130", + "durability": null, + "name": "Premade w'm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2220" + }, + { + "ge_buy_limit": "1000", + "examine": "A Premade Toad Batta.", + "grand_exchange_price": "127", + "durability": null, + "name": "Premade t'd batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2221" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "127", + "durability": null, + "name": "Premade t'd batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2222" + }, + { + "ge_buy_limit": "1000", + "examine": "A Premade Cheese and Tomato Batta.", + "grand_exchange_price": "137", + "durability": null, + "name": "Premade c+t batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2223" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "137", + "durability": null, + "name": "Premade c+t batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2224" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Fruit Batta.", + "grand_exchange_price": "131", + "durability": null, + "name": "Premade fr't batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2225" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "131", + "durability": null, + "name": "Premade fr't batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2226" + }, + { + "ge_buy_limit": "1000", + "examine": "A Premade Vegetable Batta.", + "grand_exchange_price": "134", + "durability": null, + "name": "Premade veg batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2227" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "134", + "durability": null, + "name": "Premade veg batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2228" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Chocolate Bomb.", + "grand_exchange_price": "1227", + "durability": null, + "name": "Premade choc bomb", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2229" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1227", + "durability": null, + "name": "Premade choc bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2230" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Tangled Toads Legs.", + "grand_exchange_price": "867", + "durability": null, + "name": "Premade ttl", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2231" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "867", + "durability": null, + "name": "Premade ttl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2232" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Worm Hole.", + "grand_exchange_price": "237", + "durability": null, + "name": "Premade worm hole", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2233" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "237", + "durability": null, + "name": "Premade worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2234" + }, + { + "ge_buy_limit": "1000", + "examine": "A premade Vegetable Ball.", + "grand_exchange_price": "233", + "durability": null, + "name": "Premade veg ball", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2235" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "233", + "durability": null, + "name": "Premade veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2236" + }, + { + "ge_buy_limit": "1000", + "examine": "Some Premade Worm Crunchies.", + "grand_exchange_price": "76", + "durability": null, + "name": "Premade w'm crun", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2237" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "76", + "durability": null, + "name": "Premade w'm crun", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2238" + }, + { + "ge_buy_limit": "1000", + "examine": "Some Premade chocchip crunchies.", + "grand_exchange_price": "95", + "durability": null, + "name": "Premade ch' crunch", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2239" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "95", + "durability": null, + "name": "Premade ch' crunch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2240" + }, + { + "ge_buy_limit": "1000", + "examine": "Some premade Spicy Crunchies.", + "grand_exchange_price": "103", + "durability": null, + "name": "Premade s'y crunch", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2241" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "103", + "durability": null, + "name": "Premade s'y crunch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2242" + }, + { + "shop_price": "80", + "ge_buy_limit": "1000", + "examine": "Some premade Toad Crunchies.", + "grand_exchange_price": "43", + "durability": null, + "name": "Premade t'd crunch", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2243" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "43", + "durability": null, + "name": "Premade t'd crunch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2244" + }, + { + "examine": "This batta doesn't look very appetising.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2245" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2246" + }, + { + "durability": null, + "name": "Burnt batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2248" + }, + { + "examine": "This gnome batta is in the early stages of preparation.", + "durability": null, + "name": "Half baked batta", + "archery_ticket_price": "0", + "id": "2249" + }, + { + "shop_price": "1", + "examine": "This gnome batta needs cooking.", + "durability": null, + "name": "Raw batta", + "archery_ticket_price": "0", + "id": "2250" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2251" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2252" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "140", + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2253" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "140", + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2254" + }, + { + "shop_price": "78", + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "271", + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2255" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "271", + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2256" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2257" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2258" + }, + { + "ge_buy_limit": "1000", + "examine": "This smells really good.", + "grand_exchange_price": "260", + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2259" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "260", + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2260" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2261" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2262" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2263" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2264" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2265" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2266" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2267" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2268" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2269" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2270" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2271" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2272" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "2273" + }, + { + "durability": null, + "name": "Unfinished batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2274" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2275" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2276" + }, + { + "ge_buy_limit": "1000", + "examine": "It actually smells quite good.", + "grand_exchange_price": "303", + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2277" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "303", + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2278" + }, + { + "shop_price": "1", + "examine": "This XX batta needs garnishing with YY.", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2279" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2280" + }, + { + "ge_buy_limit": "1000", + "examine": "Well... It looks healthy.", + "grand_exchange_price": "240", + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2281" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "240", + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2282" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "I need to add some tomato next.", + "grand_exchange_price": "418", + "durability": null, + "name": "Pizza base", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2283" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "418", + "durability": null, + "name": "Pizza base", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2284" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to add some cheese next.", + "grand_exchange_price": "366", + "durability": null, + "name": "Incomplete pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2285" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Incomplete pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2286" + }, + { + "ge_buy_limit": "1000", + "examine": "This needs cooking.", + "grand_exchange_price": "1141", + "durability": null, + "name": "Uncooked pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2287" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1141", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2288" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "A cheese and tomato pizza.", + "grand_exchange_price": "1357", + "durability": null, + "name": "Plain pizza", + "tradeable": "true", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "2289" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1357", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Plain pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2290" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "Half of this plain pizza has been eaten.", + "grand_exchange_price": "238", + "durability": null, + "name": "1/2 plain pizza", + "tradeable": "true", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "2291" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "238", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 plain pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2292" + }, + { + "ge_buy_limit": "1000", + "examine": "A pizza with bits of meat on it.", + "grand_exchange_price": "1012", + "durability": null, + "name": "Meat pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2293" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1012", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Meat pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2294" + }, + { + "ge_buy_limit": "1000", + "examine": "Half of this meat pizza has been eaten.", + "grand_exchange_price": "339", + "durability": null, + "name": "1/2 meat pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2295" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "339", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 meat pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2296" + }, + { + "ge_buy_limit": "1000", + "examine": "A pizza with anchovies.", + "grand_exchange_price": "1573", + "durability": null, + "name": "Anchovy pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2297" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1573", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Anchovy pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2298" + }, + { + "ge_buy_limit": "1000", + "examine": "Half of this anchovy pizza has been eaten.", + "grand_exchange_price": "44", + "durability": null, + "name": "1/2 anchovy pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2299" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "44", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 anchovy pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2300" + }, + { + "ge_buy_limit": "1000", + "examine": "A pizza with bits of pineapple on it.", + "grand_exchange_price": "1469", + "durability": null, + "name": "Pineapple pizza", + "tradeable": "true", + "weight": "0.83", + "archery_ticket_price": "0", + "id": "2301" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1469", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Pineapple pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2302" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "156", + "examine": "Half of this pineapple pizza has been eaten.", + "durability": null, + "name": "1/2 p'apple pizza", + "archery_ticket_price": "0", + "id": "2303" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "1/2 p'apple pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2304" + }, + { + "examine": "Oh dear!", + "durability": null, + "name": "Burnt pizza", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2306" + }, + { + "ge_buy_limit": "1000", + "examine": "Some uncooked dough.", + "grand_exchange_price": "158", + "durability": null, + "name": "Bread dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2307" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "158", + "durability": null, + "name": "Bread dough", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2308" + }, + { + "shop_price": "24", + "ge_buy_limit": "1000", + "examine": "Nice crispy bread.", + "grand_exchange_price": "110", + "durability": null, + "name": "Bread", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2309" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "110", + "durability": null, + "name": "Bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2310" + }, + { + "durability": null, + "name": "Burnt bread", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2312" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Deceptively pie shaped.", + "grand_exchange_price": "174", + "durability": null, + "name": "Pie dish", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2313" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "174", + "durability": null, + "name": "Pie dish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2314" + }, + { + "ge_buy_limit": "1000", + "examine": "I need to find a filling for this pie.", + "grand_exchange_price": "887", + "durability": null, + "name": "Pie shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2315" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "887", + "durability": null, + "name": "Pie shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2316" + }, + { + "ge_buy_limit": "1000", + "examine": "This would be much tastier cooked.", + "grand_exchange_price": "781", + "durability": null, + "name": "Uncooked apple pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2317" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "781", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked apple pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2318" + }, + { + "ge_buy_limit": "1000", + "examine": "This would be much healthier cooked.", + "grand_exchange_price": "747", + "durability": null, + "name": "Uncooked meat pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2319" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "747", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2320" + }, + { + "ge_buy_limit": "1000", + "examine": "This would be much more appetising cooked.", + "grand_exchange_price": "802", + "durability": null, + "name": "Uncooked berry pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2321" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "802", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Uncooked berry pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2322" + }, + { + "shop_price": "140", + "ge_buy_limit": "1000", + "examine": "Mmm Apple pie.", + "grand_exchange_price": "246", + "durability": null, + "name": "Apple pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2323" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "246", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Apple pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2324" + }, + { + "ge_buy_limit": "1000", + "examine": "Looks tasty.", + "grand_exchange_price": "534", + "durability": null, + "name": "Redberry pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2325" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "534", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Redberry pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2326" + }, + { + "shop_price": "16", + "ge_buy_limit": "1000", + "grand_exchange_price": "160", + "examine": "Not for vegetarians.", + "durability": null, + "name": "Meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2327" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2328" + }, + { + "examine": "I think I left it on the stove too long.", + "durability": null, + "name": "Burnt pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2330" + }, + { + "shop_price": "16", + "ge_buy_limit": "1000", + "grand_exchange_price": "174", + "examine": "Half of it is suitable for vegetarians.", + "durability": null, + "name": "Half a meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2331" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "174", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a meat pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2332" + }, + { + "ge_buy_limit": "1000", + "examine": "So tasty I kept some for later.", + "grand_exchange_price": "248", + "durability": null, + "name": "Half a redberry pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2333" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "248", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a redberry pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2334" + }, + { + "shop_price": "140", + "ge_buy_limit": "1000", + "examine": "Mmm half an apple pie.", + "grand_exchange_price": "146", + "durability": null, + "name": "Half an apple pie", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2335" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "146", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half an apple pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2336" + }, + { + "ge_buy_limit": "1000", + "examine": "Raw meat from the oomlie bird.", + "grand_exchange_price": "155", + "durability": null, + "name": "Raw oomlie", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2337" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "155", + "durability": null, + "name": "Raw oomlie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2338" + }, + { + "examine": "A thick green palm leaf used by natives to cook meat.", + "durability": null, + "name": "Palm leaf", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2339" + }, + { + "examine": "A thick green palm leaf used by natives to cook meat.", + "durability": null, + "name": "Palm leaf", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2340" + }, + { + "ge_buy_limit": "1000", + "examine": "Oomlie meat in a palm leaf pouch. It just needs to be cooked.", + "grand_exchange_price": "814", + "durability": null, + "name": "Wrapped oomlie", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2341" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "814", + "durability": null, + "name": "Wrapped oomlie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2342" + }, + { + "ge_buy_limit": "1000", + "examine": "Deliciously cooked oomlie meat in a palm leaf pouch.", + "grand_exchange_price": "1126", + "durability": null, + "name": "Cooked oomlie wrap", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "2343" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1126", + "durability": null, + "name": "Cooked oomlie wrap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2344" + }, + { + "durability": null, + "name": "Burnt oomlie wrap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2346" + }, + { + "shop_price": "13", + "ge_buy_limit": "1000", + "examine": "Good for hitting things!", + "grand_exchange_price": "37", + "durability": null, + "name": "Hammer", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "2347" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "37", + "durability": null, + "name": "Hammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2348" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "It's a bar of bronze.", + "grand_exchange_price": "268", + "durability": null, + "name": "Bronze bar", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "2349" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "268", + "durability": null, + "name": "Bronze bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2350" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of iron.", + "grand_exchange_price": "493", + "durability": null, + "name": "Iron bar", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "2351" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "493", + "durability": null, + "name": "Iron bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2352" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of steel.", + "grand_exchange_price": "1266", + "durability": null, + "name": "Steel bar", + "tradeable": "true", + "weight": "1.81", + "archery_ticket_price": "0", + "id": "2353" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1266", + "durability": null, + "name": "Steel bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2354" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of silver.", + "grand_exchange_price": "274", + "durability": null, + "name": "Silver bar", + "tradeable": "true", + "weight": "1.81", + "archery_ticket_price": "0", + "id": "2355" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "274", + "durability": null, + "name": "Silver bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2356" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of gold.", + "grand_exchange_price": "107", + "durability": null, + "name": "Gold bar", + "tradeable": "true", + "weight": "1.81", + "archery_ticket_price": "0", + "id": "2357" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "107", + "durability": null, + "name": "Gold bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2358" + }, + { + "shop_price": "120", + "ge_buy_limit": "10000", + "examine": "It's a bar of mithril.", + "grand_exchange_price": "1920", + "durability": null, + "name": "Mithril bar", + "tradeable": "true", + "weight": "1.6", + "archery_ticket_price": "0", + "id": "2359" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1920", + "durability": null, + "name": "Mithril bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2360" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of adamant.", + "grand_exchange_price": "3306", + "durability": null, + "name": "Adamantite bar", + "tradeable": "true", + "weight": "2.04", + "archery_ticket_price": "0", + "id": "2361" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3306", + "durability": null, + "name": "Adamantite bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2362" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a bar of rune.", + "grand_exchange_price": "13300", + "durability": null, + "name": "Runite bar", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2363" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "13300", + "durability": null, + "name": "Runite bar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2364" + }, + { + "examine": "It's a 'perfect' golden bar.", + "durability": null, + "name": "'perfect' gold bar", + "weight": "2", + "archery_ticket_price": "0", + "id": "2365" + }, + { + "requirements": "{13,60}", + "ge_buy_limit": "100", + "examine": "The left half of a Dragon Square Shield.", + "grand_exchange_price": "65800", + "durability": null, + "name": "Shield left half", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2366" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65800", + "durability": null, + "name": "Shield left half", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2367" + }, + { + "requirements": "{13,60}", + "shop_price": "750000", + "ge_buy_limit": "100", + "examine": "The right half of a dragon square shield.", + "grand_exchange_price": "743100", + "durability": null, + "name": "Shield right half", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2368" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "743100", + "durability": null, + "name": "Shield right half", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2369" + }, + { + "shop_price": "100", + "ge_buy_limit": "5000", + "examine": "A set of studs for leather armour.", + "grand_exchange_price": "792", + "durability": null, + "name": "Steel studs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2370" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "792", + "durability": null, + "name": "Steel studs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2371" + }, + { + "destroy_message": "This item will likely break if you put it down, and you will have to go looking for another one.", + "examine": "An old statue of an ogre warrior.", + "durability": null, + "name": "Ogre relic", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2372" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Part of an ogre relic.", + "durability": null, + "name": "Relic part 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2373" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Part of an ogre relic.", + "durability": null, + "name": "Relic part 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2374" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Part of an ogre relic.", + "durability": null, + "name": "Relic part 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2375" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "It's a map.", + "durability": null, + "name": "Skavid map", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "2376" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Very tooth-like.", + "durability": null, + "name": "Ogre tooth", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2377" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "Formerly the property of the ogre, Toban", + "durability": null, + "name": "Toban's key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2378" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Handy if you want to break all your teeth.", + "durability": null, + "name": "Rock cake", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2379" + }, + { + "destroy_message": "This item will likely break if you put it down here, and you will have to go looking for another.", + "examine": "Eeeeyeeew!", + "durability": null, + "name": "Fingernails", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2384" + }, + { + "examine": "I can't wear this old thing.", + "durability": null, + "name": "Old robe", + "weight": "1", + "archery_ticket_price": "0", + "id": "2385" + }, + { + "examine": "Looks kind of useless.", + "durability": null, + "name": "Unusual armour", + "weight": "4", + "archery_ticket_price": "0", + "id": "2386" + }, + { + "examine": "Pointy.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Damaged dagger", + "archery_ticket_price": "0", + "id": "2387" + }, + { + "examine": "Useless as an eye patch.", + "durability": null, + "name": "Tattered eye patch", + "archery_ticket_price": "0", + "id": "2388" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "An empty glass vial.", + "grand_exchange_price": "1", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2389" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "An empty glass vial.", + "grand_exchange_price": "1", + "durability": null, + "name": "Vial", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2390" + }, + { + "ge_buy_limit": "100", + "examine": "Let's see it fly, now!", + "grand_exchange_price": "350", + "durability": null, + "name": "Ground bat bones", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2391" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "350", + "durability": null, + "name": "Ground bat bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2392" + }, + { + "destroy_message": "This item will likely break if you put it down here and you will have to go looking for another.", + "examine": "It's a stolen bar of gold.", + "durability": null, + "name": "Toban's gold", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2393" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This is meant to be good for spots.", + "grand_exchange_price": "157", + "durability": null, + "name": "Potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2394" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A dangerous magical liquid.", + "durability": null, + "name": "Magic ogre potion", + "archery_ticket_price": "0", + "id": "2395", + "equipment_slot": "3" + }, + { + "examine": "A spell is written on this parchment.", + "durability": null, + "name": "Spell scroll", + "archery_ticket_price": "0", + "id": "2396" + }, + { + "examine": "A tattered old robe.", + "durability": null, + "name": "Shaman robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "2397" + }, + { + "examine": "Deadly.", + "durability": null, + "name": "Cave nightshade", + "archery_ticket_price": "0", + "id": "2398" + }, + { + "turn90cw_anim": "821", + "examine": "The magical sword 'Silverlight'. / The magical sword 'Silverlight', stained black with mushroom ink. (during Shadow of the Storm)", + "walk_anim": "819", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "822", + "attack_speed": "5", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "defence_anim": "388", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "808", + "name": "Silverlight", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "2402", + "stand_turn_anim": "823", + "bonuses": "9,14,-2,0,0,0,3,2,1,0,0,12,0,0,0" + }, + { + "examine": "Scroll containing a powerful enchantment of restoration.", + "durability": null, + "name": "Hazeel scroll", + "weight": "1", + "archery_ticket_price": "0", + "id": "2403" + }, + { + "remove_sleeves": "true", + "examine": "Decorative armour; an heirloom of the Carnillean family.", + "durability": null, + "name": "Carnillean armour", + "weight": "9", + "archery_ticket_price": "0", + "id": "2405", + "bonuses": "0,0,0,0,0,20,14,8,0,0,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "A sign of my commitment to Hazeel.", + "durability": null, + "name": "Hazeel's mark", + "archery_ticket_price": "0", + "id": "2406", + "equipment_slot": "2" + }, + { + "examine": "A child's ball.", + "durability": null, + "name": "Ball", + "archery_ticket_price": "0", + "id": "2407" + }, + { + "examine": "A key to the Witch's house's front door. (Witch's House)", + "durability": null, + "name": "Door key", + "archery_ticket_price": "0", + "id": "2409" + }, + { + "examine": "A very attractive magnet.", + "durability": null, + "name": "Magnet", + "archery_ticket_price": "0", + "id": "2410" + }, + { + "examine": "A cape from the almighty god Saradomin.", + "durability": null, + "name": "Saradomin cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2412", + "bonuses": "0,0,0,10,0,1,1,2,10,0,5,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A cape from the almighty god Guthix.", + "durability": null, + "name": "Guthix cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2413", + "bonuses": "0,0,0,10,0,1,1,2,10,0,5,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A cape from the almighty god Zamorak.", + "durability": null, + "name": "Zamorak cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2414", + "bonuses": "0,0,0,10,0,1,1,2,10,0,5,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "80000", + "examine": "A magical staff imbued with the power of Saradomin.", + "durability": null, + "weight": "2.2", + "attack_speed": "4", + "weapon_interface": "1", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "attack_audios": "2555,0,0,0", + "name": "Saradomin staff", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "2415", + "bonuses": "-1,-1,6,6,0,2,3,1,6,0,0,2,0,0,0" + }, + { + "shop_price": "80000", + "examine": "A magical staff imbued with the power of Guthix.", + "durability": null, + "weight": "2", + "attack_speed": "4", + "weapon_interface": "1", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "attack_audios": "2555,0,0,0", + "name": "Guthix staff", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "2416", + "bonuses": "-1,-1,6,6,0,2,3,1,6,0,0,2,0,0,0" + }, + { + "shop_price": "80000", + "turn90cw_anim": "1207", + "examine": "A magical staff imbued with the power of Zamorak.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Zamorak staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "2417", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,6,6,0,2,3,1,6,0,0,2,0,0,0" + }, + { + "examine": "A grey woollen wig.", + "durability": null, + "name": "Wig", + "archery_ticket_price": "0", + "id": "2419" + }, + { + "examine": "A grey woollen wig.", + "durability": null, + "name": "Wig", + "archery_ticket_price": "0", + "id": "2421" + }, + { + "lendable": "true", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "2147483647", + "durability": null, + "name": "Blue partyhat", + "archery_ticket_price": "0", + "id": "2422" + }, + { + "examine": "Imprint of a key in a lump of clay.", + "durability": null, + "name": "Key print", + "archery_ticket_price": "0", + "id": "2423" + }, + { + "examine": "A bottle of skin coloured paste.", + "durability": null, + "name": "Paste", + "archery_ticket_price": "0", + "id": "2424" + }, + { + "attack_audios": "2704,0,0,0", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "2425" + }, + { + "durability": null, + "name": "Burnt oomlie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2427" + }, + { + "shop_price": "8002", + "ge_buy_limit": "100", + "examine": "4 doses of Attack potion.", + "grand_exchange_price": "275", + "durability": null, + "name": "Attack potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2428" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "275", + "durability": null, + "name": "Attack potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2429" + }, + { + "shop_price": "139", + "ge_buy_limit": "100", + "examine": "4 doses of restore potion.", + "grand_exchange_price": "101", + "durability": null, + "name": "Restore potion(4)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "2430" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "101", + "durability": null, + "name": "Restore potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2431" + }, + { + "shop_price": "7832", + "ge_buy_limit": "100", + "examine": "4 doses of Defence Potion.", + "grand_exchange_price": "448", + "durability": null, + "name": "Defence potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2432" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "448", + "durability": null, + "name": "Defence potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2433" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Prayer restore potion.", + "grand_exchange_price": "5687", + "durability": null, + "name": "Prayer potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2434" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5687", + "durability": null, + "name": "Prayer potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2435" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "examine": "4 doses of super Attack potion.", + "grand_exchange_price": "898", + "durability": null, + "name": "Super attack(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2436" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "grand_exchange_price": "898", + "durability": null, + "name": "Super attack(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2437" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Fishing potion.", + "grand_exchange_price": "73", + "durability": null, + "name": "Fishing potion(4)", + "tradeable": "true", + "weight": "0.03", + "archery_ticket_price": "0", + "id": "2438" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "73", + "durability": null, + "name": "Fishing potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2439" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "examine": "4 doses of super Strength potion.", + "grand_exchange_price": "2278", + "durability": null, + "name": "Super strength(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2440" + }, + { + "shop_price": "8000", + "ge_buy_limit": "1000", + "grand_exchange_price": "2278", + "durability": null, + "name": "Super strength(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2441" + }, + { + "shop_price": "7000", + "ge_buy_limit": "1000", + "examine": "4 doses of super Defence potion.", + "grand_exchange_price": "153", + "durability": null, + "name": "Super defence(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2442" + }, + { + "shop_price": "7000", + "ge_buy_limit": "1000", + "grand_exchange_price": "153", + "durability": null, + "name": "Super defence(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2443" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of ranging potion.", + "grand_exchange_price": "8317", + "durability": null, + "name": "Ranging potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2444" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8317", + "durability": null, + "name": "Ranging potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2445" + }, + { + "shop_price": "375", + "ge_buy_limit": "1000", + "examine": "4 doses of antipoison potion.", + "grand_exchange_price": "1624", + "durability": null, + "name": "Antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2446" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1624", + "durability": null, + "name": "Antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2447" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of super anti poison potion.", + "grand_exchange_price": "1062", + "durability": null, + "name": "Super antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2448" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1062", + "durability": null, + "name": "Super antipoison(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2449" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of Zamorak brew.", + "grand_exchange_price": "2838", + "durability": null, + "name": "Zamorak brew(4)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2450" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2838", + "durability": null, + "name": "Zamorak brew(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2451" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of anti-firebreath potion.", + "grand_exchange_price": "4743", + "durability": null, + "name": "Antifire potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2452" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4743", + "durability": null, + "name": "Antifire potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2453" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of anti-firebreath potion.", + "grand_exchange_price": "3518", + "durability": null, + "name": "Antifire potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2454" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3518", + "durability": null, + "name": "Antifire potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2455" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of anti-firebreath potion.", + "grand_exchange_price": "2291", + "durability": null, + "name": "Antifire potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2456" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2291", + "durability": null, + "name": "Antifire potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2457" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of anti-firebreath potion.", + "grand_exchange_price": "1099", + "durability": null, + "name": "Antifire potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2458" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1099", + "durability": null, + "name": "Antifire potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2459" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "704", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2460", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "704", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2461" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "704", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2462", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "704", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2463" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "638", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2464", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "638", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2465" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "629", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2466", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "629", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2467" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "639", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2468", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "639", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2469" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "613", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2470", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "613", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2471" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "711", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2472", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "711", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2473" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "48700", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2474", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48700", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2475" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A posy of flowers.", + "durability": null, + "weight": "0.02", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "381,381,381,381", + "fun_weapon": "true", + "grand_exchange_price": "5975", + "attack_audios": "2566", + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2476", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5975", + "durability": null, + "name": "Flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2477" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "7274", + "durability": null, + "name": "Clean lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2481" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7274", + "durability": null, + "name": "Clean lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2482" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this lantadyme potion.", + "grand_exchange_price": "6940", + "durability": null, + "name": "Lantadyme potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2483" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6940", + "durability": null, + "name": "Lantadyme potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2484" + }, + { + "requirements": "{15,67}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "900", + "durability": null, + "name": "Grimy lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2485" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7210", + "durability": null, + "name": "Grimy lantadyme", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2486" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "1705", + "name": "Blue d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2487", + "bonuses": "0,0,0,-10,9,4,3,5,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1705", + "durability": null, + "name": "Blue d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2488" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "5000", + "examine": "Vambraces made from 100% real dragonhide.", + "durability": null, + "weight": "0.25", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "2046", + "name": "Red d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2489", + "bonuses": "0,0,0,-10,10,5,4,6,6,0,5,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2046", + "durability": null, + "name": "Red d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2490" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "5000", + "examine": "Vambraces made from 100% real dragonhide.", + "durability": null, + "weight": "0.25", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "2506", + "name": "Black d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2491", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2506", + "durability": null, + "name": "Black d'hide vamb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2492" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,5,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2504", + "name": "Blue d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2493", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2504", + "durability": null, + "name": "Blue d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2494" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,6,3", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "3142", + "name": "Red d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2495", + "bonuses": "0,0,0,-10,14,28,22,30,20,28,25,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3142", + "durability": null, + "name": "Red d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2496" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "5.4", + "absorb": "0,7,3", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "4744", + "name": "Black d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2497", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4744", + "durability": null, + "name": "Black d'hide chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2498" + }, + { + "requirements": "{1,40}-{4,50}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "5420", + "name": "Blue d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2499", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5420", + "durability": null, + "name": "Blue d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2500" + }, + { + "requirements": "{1,40}-{4,60}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "6680", + "name": "Red d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2501", + "bonuses": "0,0,0,-15,25,50,42,55,40,50,50,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "6680", + "durability": null, + "name": "Red d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2502" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide.", + "durability": null, + "weight": "6.8", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "grand_exchange_price": "8098", + "name": "Black d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2503", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "8098", + "durability": null, + "name": "Black d'hide body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2504" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared blue dragonhide.", + "grand_exchange_price": "2888", + "durability": null, + "name": "Blue d-leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "2505" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2888", + "durability": null, + "name": "Blue d-leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2506" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared red dragonhide.", + "grand_exchange_price": "4464", + "durability": null, + "name": "Red dragon leather", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2507" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4464", + "durability": null, + "name": "Red dragon leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2508" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a piece of prepared black dragonhide.", + "grand_exchange_price": "6664", + "durability": null, + "name": "Black d-leather", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "2509" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6664", + "durability": null, + "name": "Black d-leather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2510" + }, + { + "shop_price": "4", + "examine": "A number of wooden logs.", + "grand_exchange_price": "124", + "durability": null, + "name": "Logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "2511" + }, + { + "lendable": "true", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "2902937", + "rare_item": "true", + "durability": null, + "name": "Dragon chainbody", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "2513", + "absorb": "4,0,9", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "shop_price": "6", + "examine": "I should try cooking this.", + "grand_exchange_price": "6", + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2514" + }, + { + "durability": null, + "name": "Raw shrimps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2515" + }, + { + "shop_price": "14", + "examine": "There is flour in this pot.", + "grand_exchange_price": "162", + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "2516" + }, + { + "durability": null, + "name": "Pot of flour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2517" + }, + { + "shop_price": "1", + "examine": "Pretty smelly.", + "durability": null, + "name": "Rotten tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2518" + }, + { + "durability": null, + "name": "Rotten tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2519" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2520" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2521" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2522" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2523" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2524" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2525" + }, + { + "shop_price": "150", + "examine": "An inexpensive white/black/grey/brown toy horse.", + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2526" + }, + { + "durability": null, + "name": "Toy horsey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2527" + }, + { + "bankable": "false", + "examine": "Wonder what happens if I rub it...", + "durability": null, + "name": "Lamp", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2528" + }, + { + "examine": "A magical sphere that glimmers within.", + "durability": null, + "name": "Orb of light", + "weight": "5", + "archery_ticket_price": "0", + "id": "2529" + }, + { + "shop_price": "140", + "grand_exchange_price": "140", + "durability": null, + "name": "Bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2530" + }, + { + "durability": null, + "name": "Bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2531" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with iron heads and oil-soaked cloth. lit: An easy to make, iron-headed fire arrow.", + "grand_exchange_price": "316", + "durability": null, + "name": "Iron fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2532", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with iron heads and oil-soaked cloth. lit: An easy to make, iron-headed fire arrow.", + "grand_exchange_price": "305", + "durability": null, + "name": "Iron fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2533", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with steel heads and oil-soaked cloth. lit: An easy to make, steel-headed fire arrow.", + "grand_exchange_price": "325", + "durability": null, + "name": "Steel fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2534", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with steel heads and oil-soaked cloth. lit: An easy to make, steel-headed fire arrow.", + "grand_exchange_price": "327", + "durability": null, + "name": "Steel fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2535", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with mithril heads and oil-soaked cloth. lit: An easy to make, mithril-headed fire arrow.", + "grand_exchange_price": "9", + "durability": null, + "name": "Mithril fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2536", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with mithril heads and oil-soaked cloth. lit: An easy to make, mithril-headed fire arrow.", + "grand_exchange_price": "63", + "durability": null, + "name": "Mithril fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2537", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with adamant heads and oil-soaked cloth.lit: An easy-to-make, Adamant-headed fire arrow.", + "grand_exchange_price": "90", + "durability": null, + "name": "Adamant fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2538", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with adamant heads and oil-soaked cloth.lit: An easy-to-make, Adamant-headed fire arrow.", + "grand_exchange_price": "127", + "durability": null, + "name": "Adamant fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2539", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "An easy to make, rune-headed fire arrow.", + "grand_exchange_price": "539", + "durability": null, + "name": "Rune fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2540", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "An easy to make, rune-headed fire arrow.", + "grand_exchange_price": "682", + "durability": null, + "name": "Rune fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2541", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "5000", + "examine": "An enchanted ring.", + "grand_exchange_price": "943", + "durability": null, + "name": "Ring of recoil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2550", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "943", + "durability": null, + "name": "Ring of recoil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2551" + }, + { + "shop_price": "770", + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "1237", + "durability": null, + "name": "Ring of duelling(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2552", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1237", + "durability": null, + "name": "Ring of duelling(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2553" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2554", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2555" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2556", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2557" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2558", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2559" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2560", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2561" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2562", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2563" + }, + { + "shop_price": "770", + "examine": "An enchanted ring.", + "grand_exchange_price": "8", + "durability": null, + "name": "Ring of duelling(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2564", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of duelling(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2565" + }, + { + "shop_price": "770", + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "594", + "durability": null, + "name": "Ring of duelling(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2566", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "594", + "durability": null, + "name": "Ring of duelling(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2567" + }, + { + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "1103", + "durability": null, + "name": "Ring of forging", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2568", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1103", + "durability": null, + "name": "Ring of forging", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2569" + }, + { + "shop_price": "3000", + "ge_buy_limit": "10000", + "examine": "An enchanted ring.", + "grand_exchange_price": "4540", + "durability": null, + "name": "Ring of life", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2570", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4540", + "durability": null, + "name": "Ring of life", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2571" + }, + { + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2572", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2573" + }, + { + "examine": "Used by navigators to find their position in RuneScape.", + "durability": null, + "name": "Sextant", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2574" + }, + { + "examine": "A fine looking time piece.", + "durability": null, + "name": "Watch", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2575" + }, + { + "examine": "A navigator's chart of RuneScape.", + "durability": null, + "name": "Chart", + "archery_ticket_price": "0", + "id": "2576" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Lightweight boots ideal for rangers.", + "durability": null, + "weight": "0.2", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "13900000", + "name": "Ranger boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2577", + "bonuses": "0,0,0,-10,8,2,3,4,2,0,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "13900000", + "durability": null, + "name": "Ranger boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2578" + }, + { + "requirements": "{6,20}", + "ge_buy_limit": "2", + "examine": "Slightly magical boots.", + "durability": null, + "weight": "1", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "747300", + "name": "Wizard boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2579", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "747300", + "durability": null, + "name": "Wizard boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2580" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Endorsed by Robin Hood.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "4400000", + "name": "Robin hood hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2581", + "bonuses": "0,0,0,-10,8,4,6,8,4,4,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "4400000", + "durability": null, + "name": "Robin hood hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2582" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "74900", + "name": "Black platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2583", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "74900", + "durability": null, + "name": "Black platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2584" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platelegs with trim.", + "grand_exchange_price": "39900", + "durability": null, + "name": "Black platelegs (t)", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "2585", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "39900", + "durability": null, + "name": "Black platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2586" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "100", + "examine": "Black full helmet with trim.", + "durability": null, + "weight": "2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "82200", + "name": "Black full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2587", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "82200", + "durability": null, + "name": "Black full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2588" + }, + { + "requirements": "{1,10}", + "shop_price": "2072", + "ge_buy_limit": "2", + "examine": "Black kiteshield with trim.", + "durability": null, + "weight": "5", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "73000", + "name": "Black kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2589", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "73000", + "durability": null, + "name": "Black kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2590" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "589000", + "name": "Black platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2591", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "589000", + "durability": null, + "name": "Black platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2592" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black platelegs with gold trim.", + "grand_exchange_price": "216700", + "durability": null, + "name": "Black platelegs (g)", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "2593", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "216700", + "durability": null, + "name": "Black platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2594" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "100", + "examine": "Black full helmet with gold trim.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "364800", + "name": "Black full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2595", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "364800", + "durability": null, + "name": "Black full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2596" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black kiteshield with gold trim.", + "durability": null, + "weight": "5", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "355600", + "name": "Black kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2597", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "355600", + "durability": null, + "name": "Black kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2598" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "104000", + "name": "Adam platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2599", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "104000", + "durability": null, + "name": "Adam platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2600" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "2", + "examine": "These look heavy", + "durability": null, + "weight": "10", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "23200", + "name": "Adam platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2601", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "23200", + "durability": null, + "name": "Adam platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2602" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.8", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "49100", + "name": "Adam kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2603", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "49100", + "durability": null, + "name": "Adam kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2604" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant full helm with trim", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "85000", + "name": "Adam full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2605", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "85000", + "durability": null, + "name": "Adam full helm(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2606" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "359500", + "name": "Adam platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2607", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "359500", + "durability": null, + "name": "Adam platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2608" + }, + { + "requirements": "{1,30}", + "shop_price": "6464", + "ge_buy_limit": "2", + "examine": "Adamant platelegs with gold trim.", + "durability": null, + "weight": "10", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "94300", + "name": "Adam platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2609", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "94300", + "durability": null, + "name": "Adam platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2610" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant kiteshield with gold trim.", + "durability": null, + "weight": "6", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "170100", + "name": "Adam kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2611", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "170100", + "durability": null, + "name": "Adam kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2612" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant full helmet with gold trim.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "222400", + "name": "Adam full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2613", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "222400", + "durability": null, + "name": "Adam full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2614" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "426200", + "name": "Rune platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2615", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "426200", + "durability": null, + "name": "Rune platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2616" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "ge_buy_limit": "2", + "examine": "Rune platelegs with gold trim.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "243400", + "name": "Rune platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2617", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "243400", + "durability": null, + "name": "Rune platelegs (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2618" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "35000", + "ge_buy_limit": "100", + "examine": "Rune full helmet with gold trim.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "506800", + "name": "Rune full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2619", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "506800", + "durability": null, + "name": "Rune full helm(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2620" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield with gold trim", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "392700", + "name": "Rune kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2621", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "392700", + "durability": null, + "name": "Rune kiteshield (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2622" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "162700", + "name": "Rune platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2623", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "162700", + "durability": null, + "name": "Rune platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2624" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs with trim!", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "95400", + "name": "Rune platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2625", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "95400", + "durability": null, + "name": "Rune platelegs (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2626" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune full helmet with trim.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "216600", + "name": "Rune full helm (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2627", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "216600", + "durability": null, + "name": "Rune full helm (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2628" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A large, metal shield with a nice trim.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "160300", + "name": "Rune kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2629", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "160300", + "durability": null, + "name": "Rune kiteshield (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2630" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Your money or your life!", + "grand_exchange_price": "83500", + "durability": null, + "name": "Highwayman mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2631", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "83500", + "durability": null, + "name": "Highwayman mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2632" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "34300", + "durability": null, + "name": "Blue beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2633", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "34300", + "durability": null, + "name": "Blue beret", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2634" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Parlez-vous francais?(Do you speak French?)", + "grand_exchange_price": "117500", + "durability": null, + "name": "Black beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2635", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "117500", + "durability": null, + "name": "Black beret", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2636" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "328000", + "durability": null, + "name": "White beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2637", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "328000", + "durability": null, + "name": "White beret", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2638" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "All for one and one for all!", + "grand_exchange_price": "29100", + "durability": null, + "name": "Tan cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2639", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "29100", + "durability": null, + "name": "Tan cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2640" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "All for one and one for all!", + "grand_exchange_price": "23600", + "durability": null, + "name": "Dark cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2641", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "23600", + "durability": null, + "name": "Dark cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2642" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "All for one and one for all!", + "grand_exchange_price": "384500", + "durability": null, + "name": "Black cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "2643", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "384500", + "durability": null, + "name": "Black cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2644" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A minimalist's hat.", + "grand_exchange_price": "91300", + "durability": null, + "name": "Red headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2645", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "91300", + "durability": null, + "name": "Red headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2646" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A minimalist's hat.", + "grand_exchange_price": "32900", + "durability": null, + "name": "Black headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2647", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32900", + "durability": null, + "name": "Black headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2648" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A minimalist's hat.", + "grand_exchange_price": "17800", + "durability": null, + "name": "Brown headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2649", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "17800", + "durability": null, + "name": "Brown headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2650" + }, + { + "ge_buy_limit": "2", + "examine": "Shiver me timbers!", + "grand_exchange_price": "82500", + "durability": null, + "name": "Pirate's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2651", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "82500", + "durability": null, + "name": "Pirate's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2652" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "809000", + "name": "Zamorak platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2653", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "809000", + "durability": null, + "name": "Zamorak platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2654" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "281500", + "name": "Zamorak platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2655", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "281500", + "durability": null, + "name": "Zamorak platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2656" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A full helmet in the colours of Zamorak.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "601500", + "name": "Zamorak full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2657", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "601500", + "durability": null, + "name": "Zamorak full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2658" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A Rune kiteshield in the colours of Zamorak.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "499500", + "name": "Zamorak kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2659", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "499500", + "durability": null, + "name": "Zamorak kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2660" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody in the colours of Saradomin.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "1600000", + "name": "Saradomin platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2661", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Saradomin platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2662" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs in the colours of Saradomin.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "444000", + "name": "Saradomin platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2663", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "444000", + "durability": null, + "name": "Saradomin platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2664" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune full helmet in the colours of Saradomin.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1100000", + "name": "Saradomin full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2665", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Saradomin full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2666" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield in the colours of Saradomin.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "795900", + "name": "Saradomin kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2667", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "795900", + "durability": null, + "name": "Saradomin kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2668" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody in the colours of Guthix.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "307900", + "name": "Guthix platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2669", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "307900", + "durability": null, + "name": "Guthix platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2670" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs in the colours of Guthix.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "169900", + "name": "Guthix platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2671", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "169900", + "durability": null, + "name": "Guthix platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2672" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune full helmet in the colours of Guthix.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "323100", + "name": "Guthix full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2673", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,1,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "323100", + "durability": null, + "name": "Guthix full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2674" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield in the colours of Guthix.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "247300", + "name": "Guthix kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2675", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "247300", + "durability": null, + "name": "Guthix kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2676" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2677" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2678" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2679" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2680" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2681" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2682" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2683" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2684" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2685" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2686" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2687" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2688" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2689" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2690" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2691" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2692" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2693" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2694" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2695" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2696" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2697" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2698" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2699" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2700" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2701" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2702" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2703" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2704" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2705" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2706" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2707" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2708" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2709" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2710" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2711" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2712" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2713" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2714" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2715" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2716" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2717" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2718" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2719" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2720" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2721" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2722" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2723" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2724" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2725" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2726" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2727" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2728" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2729" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2730" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2731" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2732" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2733" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2734" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2735" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2736" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2737" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2738" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2739" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2740" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2741" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2742" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2743" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2744" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2745" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2746" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2747" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2748" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2773" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2774" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2775" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2776" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2777" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2778" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2779" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2780" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2781" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2782" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2783" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2784" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2785" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2786" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2787" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2788" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2789" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2790" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2791" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2792" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2793" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2794" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "2795" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2796" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2797" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "2798" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2799" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "2800" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2801" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2802" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2803" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2804" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2805" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2806" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2807" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2808" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2809" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2810" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2811" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2812" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2813" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2814" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2815" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2816" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2817" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2818" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2819" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2820" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2821" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2822" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2823" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2824" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2825" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2826" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2827" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2828" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2829" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "2830" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2831" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2833" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2835" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2837" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2839" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2841" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2842" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2843" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2844" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2845" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2846" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2847" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2848" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2849" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2850" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2851" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2852" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2853" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "2854" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2855" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2856" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2857" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "2858" + }, + { + "ge_buy_limit": "1000", + "examine": "Bones of a recently slain wolf.", + "grand_exchange_price": "1266", + "durability": null, + "name": "Wolf bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "2859" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1266", + "durability": null, + "name": "Wolf bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2860" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "I can make an ogre arrow with these.", + "grand_exchange_price": "5", + "durability": null, + "name": "Wolfbone arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2861" + }, + { + "ge_buy_limit": "25000", + "examine": "These logs are longer than normal.", + "grand_exchange_price": "169", + "durability": null, + "name": "Achey tree logs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2862" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "169", + "durability": null, + "name": "Achey tree logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2863" + }, + { + "ge_buy_limit": "1000", + "examine": "A wooden arrow shaft", + "grand_exchange_price": "47", + "durability": null, + "name": "Ogre arrow shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2864" + }, + { + "ge_buy_limit": "1000", + "examine": "An ogre arrow with four flights attached.", + "grand_exchange_price": "172", + "durability": null, + "name": "Flighted ogre arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2865" + }, + { + "requirements": "{4,30}", + "shop_price": "25", + "ge_buy_limit": "1000", + "examine": "A large ogre arrow with a bone tip.", + "grand_exchange_price": "49", + "durability": null, + "name": "Ogre arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2866", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows", + "archery_ticket_price": "0", + "id": "2871", + "equipment_slot": "3" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows (3)", + "archery_ticket_price": "0", + "id": "2872" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows (2)", + "archery_ticket_price": "0", + "id": "2873" + }, + { + "examine": "A large pair of ogre bellows. If filled with gas (1-3): A large pair of ogre bellows, it has x load(s) of swamp gas in it.", + "durability": null, + "name": "Ogre bellows (1)", + "archery_ticket_price": "0", + "id": "2874" + }, + { + "bankable": "false", + "examine": "An inflated toad.", + "durability": null, + "name": "Bloated toad", + "tradeable": "false", + "destroy": "true", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "2875" + }, + { + "ge_buy_limit": "10000", + "examine": "I need to cook this first.", + "grand_exchange_price": "2145", + "durability": null, + "name": "Raw chompy", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "2876" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2145", + "durability": null, + "name": "Raw chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2877" + }, + { + "shop_price": "130", + "ge_buy_limit": "1000", + "examine": "It might look delicious to an ogre.Roasted chompy bird.", + "grand_exchange_price": "95", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "2878" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "95", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2879" + }, + { + "durability": null, + "name": "Ruined chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2881" + }, + { + "examine": "It has been deliciously seasoned to taste wonderful for ogres.", + "durability": null, + "name": "Seasoned chompy", + "weight": "10", + "archery_ticket_price": "0", + "id": "2882" + }, + { + "requirements": "{4,30}", + "shop_price": "500", + "examine": "More powerful than a normal bow, useful against large game birds.", + "durability": null, + "weight": "1", + "attack_speed": "8", + "two_handed": "true", + "weapon_interface": "16", + "equipment_slot": "3", + "attack_audios": "2700,0,0,0", + "name": "Ogre bow", + "archery_ticket_price": "0", + "id": "2883", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Book of the elemental shield.", + "durability": null, + "name": "Battered book", + "archery_ticket_price": "0", + "id": "2886" + }, + { + "examine": "An old battered key. (Elemental Workshop I)", + "durability": null, + "name": "Battered key", + "archery_ticket_price": "0", + "id": "2887" + }, + { + "examine": "This is an empty stone bowl. / This is a stone bowl full of lava.", + "durability": null, + "name": "A stone bowl", + "archery_ticket_price": "0", + "id": "2888", + "equipment_slot": "3" + }, + { + "examine": "This is an empty stone bowl. / This is a stone bowl full of lava.", + "durability": null, + "name": "A stone bowl", + "archery_ticket_price": "0", + "id": "2889", + "equipment_slot": "3" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A shield made in the Elemental Workshop.", + "grand_exchange_price": "709", + "durability": null, + "name": "Elemental shield", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2890", + "bonuses": "0,0,0,0,0,0,0,0,6,0,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "709", + "durability": null, + "name": "Elemental shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2891" + }, + { + "examine": "This needs refining.", + "durability": null, + "name": "Elemental ore", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "2892" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "1570", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2894", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1570", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2895" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "867", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2896", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "867", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2897" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "741", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2898", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "741", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2899" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "844", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2900", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "844", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2901" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1039", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2902", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1039", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2903" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "1359", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2904", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1359", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2905" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "958", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2906", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "958", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2907" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "474", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2908", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "474", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2909" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "1445", + "tradeable": "true", + "name": "Hat", + "archery_ticket_price": "0", + "hat": "true", + "id": "2910", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1445", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2911" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1254", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2912", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1254", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2913" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "1054", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2914", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1054", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2915" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "789", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2916", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "789", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2917" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "603", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2918", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "603", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2919" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "997", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2920", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "997", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2921" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1221", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2922", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1221", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2923" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "737", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2924", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "737", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2925" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "504", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2926", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "504", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2927" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "637", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2928", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "637", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2929" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "925", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2930", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "925", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2931" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "1829", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2932", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1829", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2933" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "988", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2934", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "988", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2935" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Some fine werewolf clothing.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "925", + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2936", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "925", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2937" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Made by werewolves for werewolves.", + "grand_exchange_price": "927", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "2938", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "927", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Robe bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2939" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "durability": null, + "weight": "0.4", + "equipment_slot": "0", + "grand_exchange_price": "1209", + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": "true", + "id": "2940", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1209", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2941" + }, + { + "shop_price": "650", + "ge_buy_limit": "10", + "examine": "These gloves from Canifis will keep my hands warm!", + "grand_exchange_price": "634", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2942", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "634", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2943" + }, + { + "examine": "A key made from solid gold", + "durability": null, + "name": "Golden key", + "archery_ticket_price": "0", + "id": "2944" + }, + { + "examine": "A key made of solid iron.", + "durability": null, + "name": "Iron key", + "archery_ticket_price": "0", + "id": "2945" + }, + { + "examine": "A replica tinderbox made of solid gold.", + "durability": null, + "name": "Golden tinderbox", + "archery_ticket_price": "0", + "id": "2946" + }, + { + "examine": "A replica candle made of solid gold.", + "durability": null, + "name": "Golden candle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "2947" + }, + { + "examine": "A replica pot made of solid gold.", + "durability": null, + "name": "Golden pot", + "archery_ticket_price": "0", + "id": "2948" + }, + { + "examine": "A replica hammer made of solid gold.", + "durability": null, + "name": "Golden hammer", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "2949" + }, + { + "examine": "A replica needle made of solid gold.", + "durability": null, + "name": "Golden needle", + "archery_ticket_price": "0", + "id": "2951" + }, + { + "examine": "A silver dagger that can prevent werewolves changing form.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "attack_audios": "2517,2517,2500,2517", + "name": "Wolfbane", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "2952", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,1,10,5,0,0" + }, + { + "examine": "It's a bucket of water.", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2953" + }, + { + "examine": "It's a bucket of water.", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "2954" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "16", + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2955" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2956" + }, + { + "examine": "An empty druid pouch.", + "durability": null, + "name": "Druid pouch", + "archery_ticket_price": "0", + "id": "2957" + }, + { + "examine": "A druid pouch.", + "durability": null, + "name": "Druid pouch", + "archery_ticket_price": "0", + "id": "2958" + }, + { + "examine": "Erhhh! It stinks.", + "durability": null, + "name": "Rotten food", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2959" + }, + { + "durability": null, + "name": "Rotten food", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2960" + }, + { + "ge_buy_limit": "100", + "examine": "It's a silver sickle.", + "durability": null, + "weight": "1.6", + "weapon_interface": "6", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "28", + "name": "Silver sickle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2961", + "bonuses": "0,0,0,0,0,0,1,1,1,1,0,1,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28", + "durability": null, + "name": "Silver sickle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2962" + }, + { + "attack_anims": "390,390,381,390", + "examine": "It's a blessed silver sickle.", + "durability": null, + "name": "Silver sickle(b)", + "weight": "1.5", + "archery_ticket_price": "0", + "weapon_interface": "6", + "id": "2963", + "bonuses": "0,0,0,0,0,0,1,1,1,1,0,1,5,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "shop_price": "1", + "examine": "Used for washing your face, amongst other things.", + "durability": null, + "name": "Washing bowl", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2964" + }, + { + "examine": "A small mirror, probably used for grooming.", + "durability": null, + "name": "Mirror", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "2966" + }, + { + "examine": "A druidic spell given to you freely by the spirit of Filliman Tarlock.", + "durability": null, + "name": "Druidic spell", + "archery_ticket_price": "0", + "id": "2968" + }, + { + "examine": "A used druidic spell given to you freely by the spirit of Filliman Tarlock.", + "durability": null, + "name": "A used spell", + "archery_ticket_price": "0", + "id": "2969" + }, + { + "ge_buy_limit": "10000", + "examine": "A mushroom from the swamps of Mort Myre.", + "grand_exchange_price": "915", + "durability": null, + "name": "Mort myre fungus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2970" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "915", + "durability": null, + "name": "Mort myre fungus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2971" + }, + { + "ge_buy_limit": "100", + "examine": "A cutting from a budding branch.", + "grand_exchange_price": "338", + "durability": null, + "name": "Mort myre stem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2972" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "338", + "durability": null, + "name": "Mort myre stem", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2973" + }, + { + "ge_buy_limit": "100", + "examine": "A pear picked from a dying bush in Mort Myre.", + "grand_exchange_price": "975", + "durability": null, + "name": "Mort myre pear", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "2974" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "975", + "durability": null, + "name": "Mort myre pear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2975" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Used to make sickles.", + "grand_exchange_price": "498", + "durability": null, + "name": "Sickle mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "2976" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "498", + "durability": null, + "name": "Sickle mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2977" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2978", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2979", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2980", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2981", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2982", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2983", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2984", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2985", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2986", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2987", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2988", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2989", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2990", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2991", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2992", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2993", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2994", + "equipment_slot": "0" + }, + { + "examine": "A symbol of your chompy bird hunting prowess.", + "durability": null, + "name": "Chompy bird hat", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "2995", + "equipment_slot": "0" + }, + { + "examine": "I can exchange these for further experience or items.", + "durability": null, + "name": "Agility arena ticket", + "archery_ticket_price": "0", + "id": "2996" + }, + { + "shop_price": "800", + "ge_buy_limit": "10", + "examine": "You should see the shark...", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Pirate's hook", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "2997", + "bonuses": "0,0,0,0,0,1,5,3,0,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "4056", + "durability": null, + "name": "Clean toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2998" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "4056", + "durability": null, + "name": "Clean toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "2999" + }, + { + "shop_price": "10", + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "10500", + "durability": null, + "name": "Clean snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3000" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "10500", + "durability": null, + "name": "Clean snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3001" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this toadflax potion.", + "grand_exchange_price": "3988", + "durability": null, + "name": "Toadflax potion(unf)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3002" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3988", + "durability": null, + "name": "Toadflax potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3003" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this snapdragon potion.", + "grand_exchange_price": "9588", + "durability": null, + "name": "Snapdragon potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3004" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9588", + "durability": null, + "name": "Snapdragon potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3005" + }, + { + "shop_price": "150", + "examine": "Keep out of reach of children and familiars.", + "durability": null, + "name": "Firework", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3006" + }, + { + "durability": null, + "name": "Firework", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3007" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "4 doses of energy potion.", + "grand_exchange_price": "33", + "durability": null, + "name": "Energy potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3008" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "33", + "durability": null, + "name": "Energy potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3009" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "3 doses of energy potion.", + "grand_exchange_price": "18", + "durability": null, + "name": "Energy potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3010" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Energy potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3011" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "2 doses of energy potion.", + "grand_exchange_price": "11", + "durability": null, + "name": "Energy potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3012" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Energy potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3013" + }, + { + "shop_price": "145", + "ge_buy_limit": "100", + "examine": "1 dose of energy potion.", + "grand_exchange_price": "25", + "durability": null, + "name": "Energy potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3014" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Energy potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3015" + }, + { + "shop_price": "4000", + "ge_buy_limit": "1000", + "examine": "4 doses of super energy potion.", + "grand_exchange_price": "3088", + "durability": null, + "name": "Super energy(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3016" + }, + { + "shop_price": "4000", + "ge_buy_limit": "1000", + "grand_exchange_price": "3088", + "durability": null, + "name": "Super energy(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3017" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super energy potion.", + "grand_exchange_price": "2485", + "durability": null, + "name": "Super energy(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3018" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2485", + "durability": null, + "name": "Super energy(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3019" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super energy potion.", + "grand_exchange_price": "1592", + "durability": null, + "name": "Super energy(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3020" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1592", + "durability": null, + "name": "Super energy(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3021" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super energy potion.", + "grand_exchange_price": "1432", + "durability": null, + "name": "Super energy(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3022" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1432", + "durability": null, + "name": "Super energy(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3023" + }, + { + "shop_price": "12000", + "ge_buy_limit": "1000", + "examine": "4 doses of super restore potion.", + "grand_exchange_price": "11500", + "durability": null, + "name": "Super restore(4)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3024" + }, + { + "shop_price": "12000", + "ge_buy_limit": "1000", + "grand_exchange_price": "11500", + "durability": null, + "name": "Super restore(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3025" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of super restore potion.", + "grand_exchange_price": "8690", + "durability": null, + "name": "Super restore(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3026" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8690", + "durability": null, + "name": "Super restore(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3027" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of super restore potion.", + "grand_exchange_price": "5637", + "durability": null, + "name": "Super restore(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3028" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5637", + "durability": null, + "name": "Super restore(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3029" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of super restore potion.", + "grand_exchange_price": "2606", + "durability": null, + "name": "Super restore(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3030" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2606", + "durability": null, + "name": "Super restore(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3031" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Agility potion.", + "grand_exchange_price": "276", + "durability": null, + "name": "Agility potion(4)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3032" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "276", + "durability": null, + "name": "Agility potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3033" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Agility potion.", + "grand_exchange_price": "148", + "durability": null, + "name": "Agility potion(3)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3034" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "148", + "durability": null, + "name": "Agility potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3035" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Agility potion.", + "grand_exchange_price": "115", + "durability": null, + "name": "Agility potion(2)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3036" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "115", + "durability": null, + "name": "Agility potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3037" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Agility potion.", + "grand_exchange_price": "306", + "durability": null, + "name": "Agility potion(1)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3038" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "306", + "durability": null, + "name": "Agility potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3039" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Magic potion.", + "grand_exchange_price": "7214", + "durability": null, + "name": "Magic potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3040" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7214", + "durability": null, + "name": "Magic potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3041" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Magic potion.", + "grand_exchange_price": "5285", + "durability": null, + "name": "Magic potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3042" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5285", + "durability": null, + "name": "Magic potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3043" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Magic potion.", + "grand_exchange_price": "3697", + "durability": null, + "name": "Magic potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3044" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3697", + "durability": null, + "name": "Magic potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3045" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Magic potion.", + "grand_exchange_price": "1826", + "durability": null, + "name": "Magic potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3046" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1826", + "durability": null, + "name": "Magic potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3047" + }, + { + "durability": null, + "name": "Pirate's hook", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3048" + }, + { + "requirements": "{15,30}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "3996", + "durability": null, + "name": "Grimy toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3049" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3996", + "durability": null, + "name": "Grimy toadflax", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3050" + }, + { + "requirements": "{15,59}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "10500", + "durability": null, + "name": "Grimy snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3051" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "10500", + "durability": null, + "name": "Grimy snapdragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3052" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "9985", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3053", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Lava battlestaff" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "34100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3054", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "shop_price": "160", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic lava staff" + }, + { + "durability": null, + "name": "Lava battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3055" + }, + { + "durability": null, + "name": "Mystic lava staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3056" + }, + { + "examine": "A mime would wear this.", + "durability": null, + "name": "Mime mask", + "archery_ticket_price": "0", + "id": "3057", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime top", + "archery_ticket_price": "0", + "id": "3058", + "equipment_slot": "4" + }, + { + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime legs", + "archery_ticket_price": "0", + "id": "3059", + "equipment_slot": "7" + }, + { + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime gloves", + "archery_ticket_price": "0", + "id": "3060", + "equipment_slot": "9" + }, + { + "examine": "A mime would wear these.", + "durability": null, + "name": "Mime boots", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3061", + "equipment_slot": "10" + }, + { + "examine": "It seems to be humming...", + "durability": null, + "name": "Strange box", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3062" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "628", + "attack_audios": "2547,0,0,0", + "name": "Black dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3093", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "740", + "attack_audios": "2547,0,0,0", + "name": "Black dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3094", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "48", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "702", + "name": "Bronze claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3095", + "bonuses": "3,4,-4,0,0,1,2,1,0,0,0,5,0,0,0" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "13", + "name": "Iron claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3096", + "bonuses": "4,6,-4,0,0,2,3,1,0,0,0,7,0,0,0" + }, + { + "requirements": "{0,5}", + "shop_price": "175", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "20", + "name": "Steel claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3097", + "bonuses": "8,11,-4,0,0,3,6,2,0,0,0,12,0,0,0" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "6", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "940", + "name": "Black claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3098", + "bonuses": "10,14,-4,0,0,4,7,2,0,0,0,14,0,0,0" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "114", + "name": "Mithril claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3099", + "bonuses": "11,16,-4,0,0,4,8,2,0,0,0,17,0,0,0" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "649", + "name": "Adamant claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3100", + "bonuses": "18,23,-4,0,0,6,12,3,0,0,0,24,0,0,0" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "has_special": "true", + "durability": null, + "weight": "0.9", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "lendable": "true", + "grand_exchange_price": "6939", + "name": "Rune claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3101", + "bonuses": "26,38,-4,0,0,10,19,5,0,0,0,39,0,0,0" + }, + { + "examine": "The combination to Burthorpe Castle's equipment room.", + "durability": null, + "name": "Combination", + "archery_ticket_price": "0", + "id": "3102" + }, + { + "examine": "The guard wrote the IOU on the back of some paper.", + "durability": null, + "name": "Iou", + "archery_ticket_price": "0", + "id": "3103" + }, + { + "examine": "This map shows the secret way up to Death Plateau.", + "durability": null, + "name": "Secret way map", + "archery_ticket_price": "0", + "id": "3104" + }, + { + "shop_price": "1900", + "ge_buy_limit": "100", + "examine": "Boots made for general climbing; rocks a speciality.", + "durability": null, + "destroy": "true", + "weight": "0.3", + "equipment_slot": "10", + "grand_exchange_price": "51400", + "name": "Climbing boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3105", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,2,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "51400", + "durability": null, + "name": "Climbing boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3106" + }, + { + "examine": "Climbing boots with spikes.", + "durability": null, + "name": "Spiked boots", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "3107", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,2,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3109" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3110" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3111" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3112" + }, + { + "examine": "Place on the stone mechanism in the right order to open the door.", + "durability": null, + "name": "Stone ball", + "archery_ticket_price": "0", + "id": "3113" + }, + { + "examine": "Entrance certificate to the Imperial Guard.", + "durability": null, + "name": "Certificate", + "archery_ticket_price": "0", + "id": "3114" + }, + { + "durability": null, + "name": "Bronze claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3115" + }, + { + "durability": null, + "name": "Iron claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3116" + }, + { + "durability": null, + "name": "Steel claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3117" + }, + { + "durability": null, + "name": "Black claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3118" + }, + { + "durability": null, + "name": "Mithril claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3119" + }, + { + "durability": null, + "name": "Adamant claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3120" + }, + { + "durability": null, + "name": "Rune claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3121" + }, + { + "requirements": "{1,50}-{2,50}", + "ge_buy_limit": "10", + "examine": "A solid stone shield.", + "durability": null, + "weight": "6.8", + "absorb": "5,0,10", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "34800", + "name": "Granite shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3122", + "bonuses": "0,0,0,-12,-8,40,42,38,0,65,50,0,0,0,0" + }, + { + "ge_buy_limit": "10000", + "examine": "Large glistening bones which glow with a pale yellow aura.", + "grand_exchange_price": "1975", + "durability": null, + "name": "Shaikahan bones", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "3123" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1975", + "durability": null, + "name": "Shaikahan bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3124" + }, + { + "ge_buy_limit": "10000", + "examine": "Fairly big bones which smell distinctly of Jogre.", + "grand_exchange_price": "1023", + "durability": null, + "name": "Jogre bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "3125" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1023", + "durability": null, + "name": "Jogre bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3126" + }, + { + "examine": "These blackened Jogre bones have been somehow burnt.", + "durability": null, + "name": "Burnt jogre bones", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "3127" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3128" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3129" + }, + { + "examine": "Burnt Jogre bones marinated in lovely Karambwanji sauce. Perfect./Burnt Jogre bones marinated in lovely Karabwanji sauce. Not quite right.", + "durability": null, + "name": "Marinated j' bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3130" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3131" + }, + { + "examine": "See article", + "durability": null, + "name": "Pasty jogre bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3132" + }, + { + "examine": "Burnt Jogre bones marinated in lovely Karambwanji sauce. Perfect./Burnt Jogre bones marinated in lovely Karabwanji sauce. Not quite right.", + "durability": null, + "name": "Marinated j' bones", + "weight": "1", + "archery_ticket_price": "0", + "id": "3133" + }, + { + "durability": null, + "name": "Granite shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3134" + }, + { + "shop_price": "1", + "examine": "The key to the troll prison.", + "durability": null, + "name": "Cell key 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3136" + }, + { + "examine": "The key to the troll prison.", + "durability": null, + "name": "Cell key 2", + "weight": "1", + "archery_ticket_price": "0", + "id": "3137" + }, + { + "ge_buy_limit": "10000", + "examine": "How am I supposed to eat that?!", + "grand_exchange_price": "1834", + "durability": null, + "name": "Potato cactus", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3138" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1834", + "durability": null, + "name": "Potato cactus", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3139" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "A series of connected metal rings.", + "rare_item": "true", + "durability": null, + "weight": "6.8", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "4300000", + "name": "Dragon chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3140", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "4300000", + "durability": null, + "name": "Dragon chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3141" + }, + { + "shop_price": "440", + "ge_buy_limit": "20000", + "examine": "A raw green octopus.", + "grand_exchange_price": "1775", + "durability": null, + "name": "Raw karambwan", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3142" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "1775", + "durability": null, + "name": "Raw karambwan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3143" + }, + { + "shop_price": "460", + "ge_buy_limit": "10000", + "examine": "Cooked octopus.", + "grand_exchange_price": "1455", + "durability": null, + "name": "Cooked karambwan", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3144" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1455", + "durability": null, + "name": "Cooked karambwan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3145" + }, + { + "examine": "Cooked octopus. It looks poorly cooked and quite dangerous.", + "durability": null, + "name": "Poison karambwan", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3146" + }, + { + "shop_price": "460", + "examine": "Cooked octopus.", + "grand_exchange_price": "906", + "durability": null, + "name": "Cooked karambwan", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3147" + }, + { + "durability": null, + "name": "Burnt karambwan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3149" + }, + { + "examine": "Small brightly coloured tropical fish.", + "durability": null, + "name": "Raw karambwanji", + "archery_ticket_price": "0", + "id": "3150" + }, + { + "examine": "Small brightly coloured tropical fish.", + "durability": null, + "name": "Karambwanji", + "weight": "0.99", + "archery_ticket_price": "0", + "id": "3151" + }, + { + "examine": "Freshly made octopus paste. It smells quite nauseating.", + "durability": null, + "name": "Karambwan paste", + "archery_ticket_price": "0", + "id": "3152" + }, + { + "examine": "Freshly made octopus paste. It smells quite nauseating.", + "durability": null, + "name": "Karambwan paste", + "archery_ticket_price": "0", + "id": "3153" + }, + { + "examine": "Freshly made octopus paste. It smells quite nauseating.", + "durability": null, + "name": "Karambwan paste", + "archery_ticket_price": "0", + "id": "3154" + }, + { + "examine": "This paste smells of raw fish./This paste smells of cooked fish.", + "durability": null, + "name": "Karambwanji paste", + "archery_ticket_price": "0", + "id": "3155" + }, + { + "examine": "This paste smells of raw fish./This paste smells of cooked fish.", + "durability": null, + "name": "Karambwanji paste", + "archery_ticket_price": "0", + "id": "3156" + }, + { + "requirements": "{10,65}", + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A wide bodied and thin necked vessel, encrusted with sea salt. / The Karambwan Vessel is loaded with Karambwanji", + "grand_exchange_price": "221", + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "3157", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "221", + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3158" + }, + { + "requirements": "{10,65}", + "shop_price": "5", + "examine": "A wide bodied and thin necked vessel, encrusted with sea salt. / The Karambwan Vessel is loaded with Karambwanji", + "grand_exchange_price": "240", + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "3159" + }, + { + "durability": null, + "name": "Karambwan vessel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3160" + }, + { + "examine": "A set of instructions explaining how to construct a Karambwan vessel", + "durability": null, + "name": "Crafting manual", + "archery_ticket_price": "0", + "id": "3161" + }, + { + "ge_buy_limit": "100", + "examine": "You swear you had more than three slices before.", + "grand_exchange_price": "38", + "durability": null, + "name": "Sliced banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3162" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "38", + "durability": null, + "name": "Sliced banana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3163" + }, + { + "shop_price": "27", + "examine": "A very strong spirit brewed in Karamja.", + "durability": null, + "name": "Karamjan rum", + "archery_ticket_price": "0", + "id": "3164" + }, + { + "shop_price": "27", + "examine": "A very strong spirit brewed in Karamja.", + "durability": null, + "name": "Karamjan rum", + "archery_ticket_price": "0", + "id": "3165" + }, + { + "examine": "It's the body of a dead monkey.", + "durability": null, + "name": "Monkey corpse", + "weight": "1", + "archery_ticket_price": "0", + "id": "3166" + }, + { + "examine": "It's the skin of a (hopefully) dead monkey.", + "durability": null, + "name": "Monkey skin", + "archery_ticket_price": "0", + "id": "3167" + }, + { + "examine": "A 'Seaweed in Monkey Skin' sandwich. Perfect for statue repair.", + "durability": null, + "name": "Seaweed sandwich", + "archery_ticket_price": "0", + "id": "3168" + }, + { + "examine": "A body of a dead monkey, tastefully stuffed with seaweed.", + "durability": null, + "name": "Stuffed monkey", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3169" + }, + { + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "266", + "stand_anim": "813", + "name": "Bronze spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3170", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "304", + "stand_anim": "813", + "name": "Iron spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3171", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "requirements": "{0,5}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "503", + "stand_anim": "813", + "name": "Steel spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3172", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "requirements": "{0,20}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned mithril tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "368", + "stand_anim": "813", + "name": "Mithril spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3173", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0" + }, + { + "requirements": "{0,30}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned adamant tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "1093", + "stand_anim": "813", + "name": "Adamant spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3174", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0" + }, + { + "requirements": "{0,40}", + "turn90cw_anim": "1207", + "examine": "\tA Karambwan poisoned rune tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "12089", + "stand_anim": "813", + "name": "Rune spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3175", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "requirements": "{0,60}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "37446", + "stand_anim": "813", + "name": "Dragon spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3176", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "3177", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3178" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3179" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3180" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3181" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3182" + }, + { + "ge_buy_limit": "10000", + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "588", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3183" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "588", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3184" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3185" + }, + { + "examine": "These are small/medium sized monkey bones.", + "grand_exchange_price": "383", + "durability": null, + "name": "Monkey bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3186" + }, + { + "shop_price": "140", + "grand_exchange_price": "140", + "durability": null, + "name": "Bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3187" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "A piece of silk which can be used to remove poison from weapons.", + "grand_exchange_price": "286", + "durability": null, + "name": "Cleaning cloth", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3188" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "286", + "durability": null, + "name": "Cleaning cloth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3189" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "522", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3190", + "stand_turn_anim": "1209", + "bonuses": "7,8,0,-4,0,-1,1,2,0,0,0,8,0,0,0", + "shop_price": "104", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "name": "Bronze halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "522", + "durability": null, + "name": "Bronze halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3191" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "124", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3192", + "stand_turn_anim": "1209", + "bonuses": "9,12,0,-4,0,-1,1,2,0,0,0,12,0,0,0", + "shop_price": "364", + "durability": null, + "weight": "3.1", + "weapon_interface": "15", + "render_anim": "28", + "name": "Iron halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124", + "durability": null, + "name": "Iron halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3193" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "726", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3194", + "stand_turn_anim": "1209", + "bonuses": "14,19,0,-4,0,-1,2,3,0,0,0,20,0,0,0", + "requirements": "{0,5}", + "shop_price": "1300", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "name": "Steel halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "726", + "durability": null, + "name": "Steel halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3195" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "4344", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3196", + "stand_turn_anim": "1209", + "bonuses": "19,25,0,-4,0,-1,2,3,0,0,0,20,0,0,0", + "requirements": "{0,5}-{2,10}", + "shop_price": "2496", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "name": "Black halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4344", + "durability": null, + "name": "Black halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3197" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "6995", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3198", + "stand_turn_anim": "1209", + "bonuses": "22,28,0,-4,0,-1,2,4,0,0,0,29,0,0,0", + "requirements": "{0,20}-{2,10}", + "shop_price": "3380", + "durability": null, + "weight": "2.7", + "weapon_interface": "15", + "render_anim": "28", + "name": "Mithril halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6995", + "durability": null, + "name": "Mithril halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3199" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "4690", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3200", + "stand_turn_anim": "1209", + "bonuses": "28,41,0,-4,0,-1,3,4,0,0,0,42,0,0,0", + "requirements": "{0,30}-{2,15}", + "shop_price": "8320", + "durability": null, + "weight": "3.6", + "weapon_interface": "15", + "render_anim": "28", + "name": "Adamant halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4690", + "durability": null, + "name": "Adamant halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3201" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "77100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3202", + "stand_turn_anim": "1209", + "bonuses": "48,67,0,-4,0,-1,4,5,0,0,0,68,0,0,0", + "requirements": "{0,40}-{2,20}", + "shop_price": "128000", + "durability": null, + "weight": "3", + "weapon_interface": "15", + "render_anim": "28", + "lendable": "true", + "name": "Rune halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "77100", + "durability": null, + "name": "Rune halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3203" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon halberd.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "201000", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "3204", + "stand_turn_anim": "1209", + "bonuses": "70,95,0,-4,0,-1,4,5,0,0,0,89,0,0,0", + "requirements": "{0,60}-{2,30}", + "shop_price": "325000", + "durability": null, + "weight": "3.1", + "weapon_interface": "15", + "render_anim": "28", + "lendable": "true", + "name": "Dragon halberd" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "201000", + "durability": null, + "name": "Dragon halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3205" + }, + { + "examine": "A summons from King Lathas.", + "durability": null, + "name": "King's message", + "archery_ticket_price": "0", + "id": "3206" + }, + { + "examine": "A letter for King Lathas from Lord Iorwerth.", + "durability": null, + "name": "Iorwerths message", + "archery_ticket_price": "0", + "id": "3207" + }, + { + "examine": "Lord Iorwerth's crystal pendant.", + "durability": null, + "name": "Crystal pendant", + "archery_ticket_price": "0", + "id": "3208", + "equipment_slot": "2" + }, + { + "examine": "A piece of chemical formation.", + "durability": null, + "name": "Sulphur", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "3209" + }, + { + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Some limestone.", + "grand_exchange_price": "238", + "durability": null, + "name": "Limestone", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "3211" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "238", + "durability": null, + "name": "Limestone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3212" + }, + { + "examine": "Some quicklime.", + "durability": null, + "name": "Quicklime", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "3213" + }, + { + "examine": "A pot of ground quicklime.", + "durability": null, + "name": "Pot of quicklime", + "archery_ticket_price": "0", + "id": "3214" + }, + { + "shop_price": "160", + "examine": "A pile of ground sulphur.", + "durability": null, + "name": "Ground sulphur", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3215" + }, + { + "ge_buy_limit": "100", + "examine": "An empty barrel/A Splendid barrel.", + "grand_exchange_price": "207", + "durability": null, + "name": "Barrel", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3216" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "207", + "durability": null, + "name": "Barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3217" + }, + { + "examine": "A fused barrel full of fire oil.", + "durability": null, + "name": "Barrel bomb", + "weight": "32", + "archery_ticket_price": "0", + "id": "3218" + }, + { + "examine": "A fused barrel full of fire oil.", + "durability": null, + "name": "Barrel bomb", + "weight": "32", + "archery_ticket_price": "0", + "id": "3219" + }, + { + "examine": "A barrel full of coal-tar.", + "durability": null, + "name": "Barrel of coal-tar", + "weight": "32", + "archery_ticket_price": "0", + "id": "3220" + }, + { + "examine": "A barrel full of naphtha.", + "durability": null, + "name": "Barrel of naphtha", + "weight": "32", + "archery_ticket_price": "0", + "id": "3221" + }, + { + "examine": "A barrel full of naphtha and sulphur./A barrel full of naphtha and quicklime.", + "durability": null, + "name": "Naphtha mix", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3222" + }, + { + "examine": "A barrel full of naphtha and sulphur./A barrel full of naphtha and quicklime.", + "durability": null, + "name": "Naphtha mix", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3223" + }, + { + "examine": "A strip of cloth.", + "durability": null, + "name": "Strip of cloth", + "archery_ticket_price": "0", + "id": "3224" + }, + { + "shop_price": "67", + "ge_buy_limit": "5000", + "examine": "Might taste better cooked.", + "grand_exchange_price": "312", + "durability": null, + "name": "Raw rabbit", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "3226" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "312", + "durability": null, + "name": "Raw rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3227" + }, + { + "shop_price": "19", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "35", + "durability": null, + "name": "Cooked rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3228" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "35", + "durability": null, + "name": "Cooked rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3229" + }, + { + "examine": "A book by Mel Achy.", + "durability": null, + "name": "Big book of bangs", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "3230" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3232" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3234" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3236" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3238" + }, + { + "ge_buy_limit": "100", + "examine": "Bark from a hollow tree.", + "grand_exchange_price": "23", + "durability": null, + "name": "Bark", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3239" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23", + "durability": null, + "name": "Bark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3240" + }, + { + "examine": "One of RuneScape's many citizens. In Karamja or South of Falador: One of RuneScape's many citizens, apparently trying to be an explorer. In Lumbridge: One of Lumbridge's many citizens. In a Falador home: One of RuneScape's many citizens. He looks worried ", + "durability": null, + "name": "Man", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3241" + }, + { + "examine": "He grows crops in the area.", + "durability": null, + "name": "Farmer", + "archery_ticket_price": "0", + "id": "3243" + }, + { + "examine": "Rogueish.", + "durability": null, + "name": "Rogue", + "archery_ticket_price": "0", + "id": "3247" + }, + { + "examine": "Varies, refer below.", + "durability": null, + "name": "Guard", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3249" + }, + { + "examine": "A member of Ardougne's militia.", + "durability": null, + "name": "Knight of ardougne", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3251" + }, + { + "examine": "The strong arm of the law.", + "durability": null, + "name": "Watchman", + "archery_ticket_price": "0", + "id": "3253" + }, + { + "examine": "A holy warrior.", + "durability": null, + "name": "Paladin", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "3255" + }, + { + "examine": "Heroic!", + "durability": null, + "name": "Hero", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "3259" + }, + { + "examine": "A pale, tough looking herb.", + "durability": null, + "name": "Goutweed", + "archery_ticket_price": "0", + "id": "3261" + }, + { + "examine": "It's tough and spiky.", + "durability": null, + "name": "Troll thistle", + "archery_ticket_price": "0", + "id": "3262" + }, + { + "examine": "It'll be easier to grind now.", + "durability": null, + "name": "Dried thistle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3263" + }, + { + "examine": "It's ready for mixing.", + "durability": null, + "name": "Ground thistle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3264" + }, + { + "examine": "It's part of Eadgar's plan.", + "durability": null, + "name": "Troll potion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3265" + }, + { + "examine": "It's rather drunk.", + "durability": null, + "name": "Drunk parrot", + "archery_ticket_price": "0", + "id": "3266" + }, + { + "examine": "It's dirty and smelly.", + "durability": null, + "name": "Dirty robe", + "archery_ticket_price": "0", + "id": "3267" + }, + { + "examine": "It's good enough to fool a troll.", + "durability": null, + "name": "Fake man", + "archery_ticket_price": "0", + "id": "3268" + }, + { + "examine": "The key to the Trollheim storeroom.", + "durability": null, + "name": "Storeroom key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3269" + }, + { + "examine": "Pineapple chunks dipped in a strong liquor.", + "durability": null, + "name": "Alco-chunks", + "archery_ticket_price": "0", + "id": "3270" + }, + { + "ge_buy_limit": "5000", + "examine": "That used to be a vampyre!", + "grand_exchange_price": "381", + "durability": null, + "name": "Vampire dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3325" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "381", + "durability": null, + "name": "Vampire dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3326" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "An easy-to-make, marshy-coloured, Mort Myre snail shell helmet.", + "grand_exchange_price": "56", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3327", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3328" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Rounded: A red and black snail shell helmet. Pointed: A red and black pointed snail shell helmet.", + "durability": null, + "weight": "2", + "equipment_slot": "0", + "grand_exchange_price": "291", + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3329", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "291", + "durability": null, + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3330" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell helmet.", + "grand_exchange_price": "57", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3331", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3332" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "A moody blue snail shell helmet, mort myre snail shell helm", + "grand_exchange_price": "73", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "weight": "1.9", + "archery_ticket_price": "0", + "id": "3333", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "73", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3334" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "An easy-to-make, orange-and-bark coloured, Mort Myre snail shell helmet.", + "grand_exchange_price": "63", + "durability": null, + "name": "Broken bark snelm", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3335", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "63", + "durability": null, + "name": "Broken bark snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3336" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "An easy-to-make, marshy-coloured, Mort Myre snail shell helmet.", + "grand_exchange_price": "58", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3337", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "58", + "durability": null, + "name": "Myre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3338" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Rounded: A red and black snail shell helmet. Pointed: A red and black pointed snail shell helmet.", + "durability": null, + "weight": "2", + "equipment_slot": "0", + "grand_exchange_price": "147", + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3339", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Blood'n'tar snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3340" + }, + { + "remove_head": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell helmet.", + "grand_exchange_price": "54", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3341", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "54", + "durability": null, + "name": "Ochre snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3342" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "A moody blue snail shell helmet, mort myre snail shell helm", + "grand_exchange_price": "248", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "weight": "1.9", + "archery_ticket_price": "0", + "id": "3343", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "248", + "durability": null, + "name": "Bruise blue snelm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3344" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, 'myre'-coloured, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "155", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3345" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "155", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3346" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, red, Mort myre snail shell; looks protective.", + "grand_exchange_price": "590", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3347" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "590", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3348" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "134", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3349" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "134", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3350" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, blue, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "230", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3351" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "230", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3352" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, bark-coloured, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "195", + "durability": null, + "name": "Blamish bark shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3353" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "195", + "durability": null, + "name": "Blamish bark shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3354" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, 'myre'-coloured, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "145", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3355" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "145", + "durability": null, + "name": "Blamish myre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3356" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, red, Mort myre snail shell; looks protective.", + "grand_exchange_price": "614", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3357" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "614", + "durability": null, + "name": "Blamish red shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3358" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, muddy-yellow, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "173", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "3359" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "173", + "durability": null, + "name": "Blamish ochre shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3360" + }, + { + "ge_buy_limit": "100", + "examine": "An easy-to-make, blue, Mort Myre snail shell; looks protective.", + "grand_exchange_price": "874", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3361" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "874", + "durability": null, + "name": "Blamish blue shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3362" + }, + { + "shop_price": "74", + "ge_buy_limit": "10000", + "examine": "The thin, slimy corpse of a deceased giant snail.", + "grand_exchange_price": "2047", + "durability": null, + "name": "Thin snail", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3363" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2047", + "durability": null, + "name": "Thin snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3364" + }, + { + "ge_buy_limit": "1000", + "examine": "The lean, slimy corspe of a dead snail.", + "grand_exchange_price": "958", + "durability": null, + "name": "Lean snail", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3365" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "958", + "durability": null, + "name": "Lean snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3366" + }, + { + "shop_price": "160", + "ge_buy_limit": "10000", + "examine": "The fat, slimy, corpse of a deceased giant snail.", + "grand_exchange_price": "971", + "durability": null, + "name": "Fat snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3367" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "971", + "durability": null, + "name": "Fat snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3368" + }, + { + "ge_buy_limit": "10000", + "examine": "A succulently slimy piece of sumptuous snail.", + "grand_exchange_price": "833", + "durability": null, + "name": "Thin snail meat", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "3369" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "833", + "durability": null, + "name": "Thin snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3370" + }, + { + "ge_buy_limit": "10000", + "examine": "A succulently slimey slice of sumptuous snail.", + "grand_exchange_price": "251", + "durability": null, + "name": "Lean snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3371" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "251", + "durability": null, + "name": "Lean snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3372" + }, + { + "ge_buy_limit": "10000", + "examine": "A succulently slimy slice of sumptuous snail.", + "grand_exchange_price": "603", + "durability": null, + "name": "Fat snail meat", + "tradeable": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "3373" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "603", + "durability": null, + "name": "Fat snail meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3374" + }, + { + "durability": null, + "name": "Burnt snail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3376" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "An empty sample bottle.", + "grand_exchange_price": "14", + "durability": null, + "name": "Sample bottle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3377" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Sample bottle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3378" + }, + { + "ge_buy_limit": "1000", + "examine": "A slime covered eel - yuck!", + "grand_exchange_price": "358", + "durability": null, + "name": "Slimy eel", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "3379" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "358", + "durability": null, + "name": "Slimy eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3380" + }, + { + "ge_buy_limit": "1000", + "examine": "A cooked slimy eel - not delicious, but pretty nutritious.", + "grand_exchange_price": "274", + "durability": null, + "name": "Cooked slimy eel", + "tradeable": "true", + "destroy": "false", + "weight": "2", + "archery_ticket_price": "0", + "id": "3381" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "274", + "durability": null, + "name": "Cooked slimy eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3382" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "A wooden helmet.", + "durability": null, + "weight": "0.9", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5993", + "name": "Splitbark helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3385", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5993", + "durability": null, + "name": "Splitbark helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3386" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Provides good protection.", + "durability": null, + "weight": "4.5", + "absorb": "6,3,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "26700", + "name": "Splitbark body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3387", + "bonuses": "0,0,0,10,-10,36,26,42,15,0,40,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26700", + "durability": null, + "name": "Splitbark body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3388" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "These should protect my legs.", + "durability": null, + "weight": "3.6", + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "43700", + "name": "Splitbark legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3389", + "bonuses": "0,0,0,7,-7,22,20,25,10,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43700", + "durability": null, + "name": "Splitbark legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3390" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "These should keep my hands safe.", + "durability": null, + "weight": "0.9", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "2786", + "name": "Splitbark gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3391", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2786", + "durability": null, + "name": "Splitbark gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3392" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Wooden foot protection.", + "durability": null, + "weight": "0.9", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "3808", + "name": "Splitbark boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3393", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,9,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3808", + "durability": null, + "name": "Splitbark boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3394" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "18", + "durability": null, + "name": "Loar remains", + "tradeable": "true", + "weight": "1.35", + "archery_ticket_price": "0", + "id": "3396" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "18", + "durability": null, + "name": "Loar remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3397" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "249", + "durability": null, + "name": "Phrin remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3398" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "249", + "durability": null, + "name": "Phrin remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3399" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "138", + "durability": null, + "name": "Riyl remains", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3400" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "138", + "durability": null, + "name": "Riyl remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3401" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "334", + "durability": null, + "name": "Asyn remains", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3402" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "334", + "durability": null, + "name": "Asyn remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3403" + }, + { + "ge_buy_limit": "1000", + "examine": "The remains of a deadly shade.", + "grand_exchange_price": "5264", + "durability": null, + "name": "Fiyr remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3404" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5264", + "durability": null, + "name": "Fiyr remains", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3405" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this potion.", + "grand_exchange_price": "137", + "durability": null, + "name": "Ash potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3406" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137", + "durability": null, + "name": "Ash potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3407" + }, + { + "examine": "4 doses serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (4)", + "archery_ticket_price": "0", + "id": "3408" + }, + { + "examine": "3 doses serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (3)", + "archery_ticket_price": "0", + "id": "3410" + }, + { + "examine": "2 doses serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (2)", + "archery_ticket_price": "0", + "id": "3412" + }, + { + "examine": "1 dose serum 207 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 207 (1)", + "archery_ticket_price": "0", + "id": "3414" + }, + { + "shop_price": "208", + "examine": "3 doses permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (4)", + "archery_ticket_price": "0", + "id": "3416" + }, + { + "shop_price": "208", + "examine": "3 doses permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (3)", + "archery_ticket_price": "0", + "id": "3417" + }, + { + "shop_price": "208", + "examine": "2 doses permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (2)", + "archery_ticket_price": "0", + "id": "3418" + }, + { + "shop_price": "208", + "examine": "1 dose permanent serum 208 as described in Herbi Flax's diary.", + "durability": null, + "name": "Serum 208 (1)", + "archery_ticket_price": "0", + "id": "3419" + }, + { + "shop_price": "21", + "ge_buy_limit": "10000", + "examine": "A well carved limestone brick.", + "grand_exchange_price": "178", + "durability": null, + "name": "Limestone brick", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3420" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "178", + "durability": null, + "name": "Limestone brick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3421" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "4 doses of olive oil.", + "grand_exchange_price": "678", + "durability": null, + "name": "Olive oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3422" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "678", + "durability": null, + "name": "Olive oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3423" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "3 doses of olive oil.", + "grand_exchange_price": "413", + "durability": null, + "name": "Olive oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3424" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "413", + "durability": null, + "name": "Olive oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3425" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "2 doses of olive oil.", + "grand_exchange_price": "173", + "durability": null, + "name": "Olive oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3426" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "173", + "durability": null, + "name": "Olive oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3427" + }, + { + "shop_price": "26", + "ge_buy_limit": "1000", + "examine": "1 dose of olive oil.", + "grand_exchange_price": "110", + "durability": null, + "name": "Olive oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3428" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "110", + "durability": null, + "name": "Olive oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3429" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "3587", + "durability": null, + "name": "Sacred oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3430" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3587", + "durability": null, + "name": "Sacred oil(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3431" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "2596", + "durability": null, + "name": "Sacred oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3432" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2596", + "durability": null, + "name": "Sacred oil(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3433" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "1713", + "durability": null, + "name": "Sacred oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3434" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1713", + "durability": null, + "name": "Sacred oil(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3435" + }, + { + "ge_buy_limit": "1000", + "examine": "Sacred oil.", + "grand_exchange_price": "1846", + "durability": null, + "name": "Sacred oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3436" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1846", + "durability": null, + "name": "Sacred oil(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3437" + }, + { + "ge_buy_limit": "25000", + "examine": "Funeral logs used for burning loars.", + "grand_exchange_price": "853", + "durability": null, + "name": "Pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3438" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "853", + "durability": null, + "name": "Pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3439" + }, + { + "ge_buy_limit": "1000", + "examine": "Oak logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "1122", + "durability": null, + "name": "Oak pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3440" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1122", + "durability": null, + "name": "Oak pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3441" + }, + { + "ge_buy_limit": "1000", + "examine": "Willow logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "1164", + "durability": null, + "name": "Willow pyre logs", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3442" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1164", + "durability": null, + "name": "Willow pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3443" + }, + { + "ge_buy_limit": "1000", + "examine": "Maple logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "3313", + "durability": null, + "name": "Maple pyre logs", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3444" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3313", + "durability": null, + "name": "Maple pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3445" + }, + { + "ge_buy_limit": "1000", + "examine": "Yew logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "4424", + "durability": null, + "name": "Yew pyre logs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3446" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4424", + "durability": null, + "name": "Yew pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3447" + }, + { + "ge_buy_limit": "1000", + "examine": "Magic logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "5611", + "durability": null, + "name": "Magic pyre logs", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3448" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5611", + "durability": null, + "name": "Magic pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3449" + }, + { + "examine": "A bronze key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key red", + "archery_ticket_price": "0", + "id": "3450" + }, + { + "examine": "A bronze key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key brown", + "archery_ticket_price": "0", + "id": "3451" + }, + { + "examine": "A bronze key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key crimson", + "archery_ticket_price": "0", + "id": "3452" + }, + { + "examine": "A bronze key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key black", + "archery_ticket_price": "0", + "id": "3453" + }, + { + "examine": "A bronze key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Bronze key purple", + "archery_ticket_price": "0", + "id": "3454" + }, + { + "examine": "A steel key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key red", + "archery_ticket_price": "0", + "id": "3455" + }, + { + "examine": "A steel key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key brown", + "archery_ticket_price": "0", + "id": "3456" + }, + { + "examine": "A steel key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key crimson", + "archery_ticket_price": "0", + "id": "3457" + }, + { + "examine": "A steel key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key black", + "archery_ticket_price": "0", + "id": "3458" + }, + { + "examine": "A steel key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Steel key purple", + "archery_ticket_price": "0", + "id": "3459" + }, + { + "examine": "A black key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key red", + "archery_ticket_price": "0", + "id": "3460" + }, + { + "examine": "A black key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key brown", + "archery_ticket_price": "0", + "id": "3461" + }, + { + "examine": "A black key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key crimson", + "archery_ticket_price": "0", + "id": "3462" + }, + { + "examine": "A black key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key black", + "archery_ticket_price": "0", + "id": "3463" + }, + { + "examine": "A black key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Black key purple", + "archery_ticket_price": "0", + "id": "3464" + }, + { + "examine": "A silver key with a blood-red painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key red", + "archery_ticket_price": "0", + "id": "3465" + }, + { + "examine": "A silver key with a brown painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key brown", + "archery_ticket_price": "0", + "id": "3466" + }, + { + "examine": "A silver key with a crimson painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key crimson", + "archery_ticket_price": "0", + "id": "3467" + }, + { + "examine": "A silver key with a black painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key black", + "archery_ticket_price": "0", + "id": "3468" + }, + { + "examine": "A silver key with a purple painted eyelet. (Shades of Mort'ton)", + "durability": null, + "name": "Silver key purple", + "archery_ticket_price": "0", + "id": "3469" + }, + { + "ge_buy_limit": "1000", + "examine": "Amazingly untouched by time.", + "grand_exchange_price": "956", + "durability": null, + "name": "Fine cloth", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3470" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "956", + "durability": null, + "name": "Fine cloth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3471" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black plateskirt with trim.", + "grand_exchange_price": "3077", + "durability": null, + "name": "Black plateskirt (t)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "3472", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "Black plateskirt with gold trim.", + "grand_exchange_price": "10600", + "durability": null, + "name": "Black plateskirt (g)", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "3473", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant plateskirt with trim.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "4403", + "name": "Adam plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3474", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant plateskirt with gold trim.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "11000", + "name": "Adam plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3475", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt with gold trim.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "42500", + "name": "Rune plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3476", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "shop_price": "81280", + "ge_buy_limit": "2", + "examine": "Rune plateskirt with trim.", + "durability": null, + "weight": "8", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "38300", + "name": "Rune plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3477", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "42000", + "name": "Zamorak plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3478", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt in the colours of Saradomin.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "44000", + "name": "Saradomin plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3479", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt in the colours of Guthix.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "39100", + "name": "Guthix plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3480", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platebody with complete gold trim & plating.", + "durability": null, + "weight": "10", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "2500000", + "name": "Gilded platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3481", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2500000", + "durability": null, + "name": "Gilded platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3482" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune platelegs with gold plate.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2200000", + "name": "Gilded platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3483", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2200000", + "durability": null, + "name": "Gilded platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3484" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune plateskirt with gold plate.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "162300", + "name": "Gilded plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3485", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune full helmet with gold plate.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "477200", + "name": "Gilded full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3486", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "477200", + "durability": null, + "name": "Gilded full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3487" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Rune kiteshield with gold plate.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "515400", + "name": "Gilded kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3488", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "515400", + "durability": null, + "name": "Gilded kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3489" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3490" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3491" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3492" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3493" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3494" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3495" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3496" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3497" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3498" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3499" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3500" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3501" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3502" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3503" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3504" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3505" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3506" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3507" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3508" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3509" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3510" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3511" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3512" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3513" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3514" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3515" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3516" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3517" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3518" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3519" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3520" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3521" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3522" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3523" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3524" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3525" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3526" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3527" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3528" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3529" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3530" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3531" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3532" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3533" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3534" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3535" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3536" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3537" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3538" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3539" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3540" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3541" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3542" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3543" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3544" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3545" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3546" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3547" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3548" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3549" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3550" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3551" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3552" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3553" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3554" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3555" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3556" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3557" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3558" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3559" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3560" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3561" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3562" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3563" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3564" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3565" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3566" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3567" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3568" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3569" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3570" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3571" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3572" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3573" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3574" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3575" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3576" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3577" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "3578" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3579" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3580" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3581" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3582" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3583" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3584" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3585" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3586" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3587" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3588" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3589" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3590" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3591" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3592" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3593" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3594" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3595" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3596" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3597" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3598" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3599" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3600" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3601" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3602" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3603" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3604" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3605" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3607" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3609" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3610" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3611" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3612" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3613" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3614" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3615" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3616" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3617" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "3618" + }, + { + "durability": null, + "name": "Black plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3668" + }, + { + "durability": null, + "name": "Black plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3669" + }, + { + "durability": null, + "name": "Adam plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3670" + }, + { + "durability": null, + "name": "Adam plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3671" + }, + { + "durability": null, + "name": "Rune plateskirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3672" + }, + { + "durability": null, + "name": "Rune plateskirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3673" + }, + { + "durability": null, + "name": "Zamorak plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3674" + }, + { + "durability": null, + "name": "Saradomin plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3675" + }, + { + "durability": null, + "name": "Guthix plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3676" + }, + { + "durability": null, + "name": "Gilded plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3677" + }, + { + "shop_price": "13000", + "examine": "An exquisitely shaped tool specially designed for fixing temples.", + "durability": null, + "name": "Flamtaer hammer", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "3678" + }, + { + "examine": "A sealed letter of recommendation.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3685" + }, + { + "examine": "It's almost a musical instrument.", + "durability": null, + "name": "Unstrung lyre", + "weight": "1", + "archery_ticket_price": "0", + "id": "3688", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Lyre", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "3689", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "3690", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(1)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "3691", + "equipment_slot": "3" + }, + { + "examine": "I can use this to make a lyre.", + "durability": null, + "name": "Branch", + "weight": "1", + "archery_ticket_price": "0", + "id": "3692" + }, + { + "shop_price": "1000", + "examine": "I can spin this into golden wool.", + "durability": null, + "name": "Golden fleece", + "weight": "1", + "archery_ticket_price": "0", + "id": "3693" + }, + { + "examine": "I can use this to make a lyre.", + "durability": null, + "name": "Golden wool", + "weight": "1", + "archery_ticket_price": "0", + "id": "3694" + }, + { + "turn90cw_anim": "6662", + "examine": "The lowest maintenance pet you will ever have.", + "walk_anim": "6658", + "durability": null, + "turn90ccw_anim": "6663", + "turn180_anim": "6659", + "render_anim": "792", + "equipment_slot": "3", + "stand_anim": "6657", + "name": "Pet rock", + "run_anim": "6660", + "archery_ticket_price": "0", + "id": "3695", + "stand_turn_anim": "6661" + }, + { + "examine": "Talisman to bind the Draugen.", + "durability": null, + "name": "Hunters' talisman", + "archery_ticket_price": "0", + "id": "3696" + }, + { + "examine": "Talisman to bind the Draugen.", + "durability": null, + "name": "Hunters' talisman", + "archery_ticket_price": "0", + "id": "3697" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some flowers from a distant land.", + "durability": null, + "name": "Exotic flower", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3698" + }, + { + "examine": "A hauntingly beautiful love ballad.", + "durability": null, + "name": "Fremennik ballad", + "archery_ticket_price": "0", + "id": "3699" + }, + { + "examine": "A pair of sturdy made custom boots.", + "durability": null, + "name": "Sturdy boots", + "archery_ticket_price": "0", + "id": "3700" + }, + { + "examine": "Could probably be a bit clearer?", + "durability": null, + "name": "Tracking map", + "archery_ticket_price": "0", + "id": "3701" + }, + { + "examine": "A finely crafted string for a custom bow", + "durability": null, + "name": "Custom bow string", + "archery_ticket_price": "0", + "id": "3702" + }, + { + "examine": "An extremely odd, non-edible fish.", + "durability": null, + "name": "Unusual fish", + "archery_ticket_price": "0", + "id": "3703" + }, + { + "examine": "Map showing the best fishing spots out at sea.", + "durability": null, + "name": "Sea fishing map", + "archery_ticket_price": "0", + "id": "3704" + }, + { + "examine": "An estimate of expected local weather conditions.", + "durability": null, + "name": "Weather forecast", + "archery_ticket_price": "0", + "id": "3705" + }, + { + "examine": "Shows the wearer is worthy of the Champions table.", + "durability": null, + "name": "Champions token", + "archery_ticket_price": "0", + "id": "3706" + }, + { + "examine": "Probably the greatest cocktail in the world.", + "durability": null, + "name": "Legendary cocktail", + "archery_ticket_price": "0", + "id": "3707" + }, + { + "examine": "A signed statement promising a reduction on sales tax.", + "durability": null, + "name": "Fiscal statement", + "archery_ticket_price": "0", + "id": "3708" + }, + { + "shop_price": "5000", + "examine": "A legally binding contract promising not to enter the longhall.", + "durability": null, + "name": "Promissory note", + "archery_ticket_price": "0", + "id": "3709" + }, + { + "examine": "This employment contract is for a warrior to act as a bodyguard.", + "durability": null, + "name": "Warriors' contract", + "archery_ticket_price": "0", + "id": "3710" + }, + { + "shop_price": "325", + "examine": "A lot of beer in a barrel.", + "grand_exchange_price": "1555", + "durability": null, + "name": "Keg of beer", + "tradeable": "true", + "weight": "20", + "archery_ticket_price": "0", + "id": "3711" + }, + { + "examine": "Suspiciously close to beer, but without the side effects.", + "durability": null, + "name": "Low alcohol keg", + "weight": "20", + "archery_ticket_price": "0", + "id": "3712" + }, + { + "examine": "It's some kind of weird little parcel thing.", + "durability": null, + "name": "Strange object", + "archery_ticket_price": "0", + "id": "3713" + }, + { + "examine": "It's some kind of weird little parcel thing.", + "durability": null, + "name": "Lit strange object", + "archery_ticket_price": "0", + "id": "3714" + }, + { + "examine": "A red coloured disk, apparently made out of wood.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3715" + }, + { + "examine": "A red coloured disk, apparently made out of wood.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3716" + }, + { + "examine": "A very attractive magnet.", + "durability": null, + "name": "Magnet", + "archery_ticket_price": "0", + "id": "3718" + }, + { + "examine": "Some blue thread.", + "durability": null, + "name": "Thread", + "archery_ticket_price": "0", + "id": "3719" + }, + { + "examine": "A small pick for cracking small objects.", + "durability": null, + "name": "Pick", + "archery_ticket_price": "0", + "id": "3720" + }, + { + "examine": "Might be fun to play with in the bath.", + "durability": null, + "name": "Ship toy", + "archery_ticket_price": "0", + "id": "3721" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's a bucket of salty water.", + "durability": null, + "name": "Full bucket", + "archery_ticket_price": "0", + "id": "3722" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is eighty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "4/5ths full bucket", + "archery_ticket_price": "0", + "id": "3723" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is sixty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "3/5ths full bucket", + "archery_ticket_price": "0", + "id": "3724" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is forty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "2/5ths full bucket", + "archery_ticket_price": "0", + "id": "3725" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket is twenty percent full. It has a 5 painted on its side.", + "durability": null, + "name": "1/5ths full bucket", + "archery_ticket_price": "0", + "id": "3726" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Empty bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3727" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This bucket of water is frozen solid.", + "durability": null, + "name": "Frozen bucket", + "archery_ticket_price": "0", + "id": "3728" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug is completely full. It has a 3 painted on its side.", + "durability": null, + "name": "Full jug", + "archery_ticket_price": "0", + "id": "3729" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug is two thirds full. It has a 3 painted on its side.", + "durability": null, + "name": "2/3rds full jug", + "archery_ticket_price": "0", + "id": "3730" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug is one third full. It has a 3 painted on its side.", + "durability": null, + "name": "1/3rds full jug", + "archery_ticket_price": "0", + "id": "3731" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "1", + "examine": "This jug is empty.", + "grand_exchange_price": "164", + "durability": null, + "name": "Empty jug", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "3732" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This jug of water is frozen solid.", + "durability": null, + "name": "Frozen jug", + "archery_ticket_price": "0", + "id": "3733" + }, + { + "examine": "An unusually shaped vase. You can see something glinting inside.", + "durability": null, + "name": "Vase", + "archery_ticket_price": "0", + "id": "3734" + }, + { + "examine": "An unusually shaped vase full of water. You can see something glinting inside.", + "durability": null, + "name": "Vase of water", + "archery_ticket_price": "0", + "id": "3735" + }, + { + "examine": "An unusually shaped vase full of ice. You can see something glinting inside.", + "durability": null, + "name": "Frozen vase", + "archery_ticket_price": "0", + "id": "3736" + }, + { + "examine": "This looks like a lid to some kind of container.", + "durability": null, + "name": "Vase lid", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3737" + }, + { + "examine": "The lid is screwed on tightly. ", + "durability": null, + "name": "Sealed vase", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3738" + }, + { + "examine": "The lid is screwed on tightly. It is full of water.", + "durability": null, + "name": "Sealed vase", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3739" + }, + { + "examine": "The lid is screwed on tightly. It is very cold. ", + "durability": null, + "name": "Sealed vase", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3740" + }, + { + "examine": "A small, cold key.", + "durability": null, + "name": "Frozen key", + "archery_ticket_price": "0", + "id": "3741" + }, + { + "examine": "The colouring on it seems to be some kind of sticky goop.", + "durability": null, + "name": "Red herring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3742" + }, + { + "examine": "A red coloured disk, apparently made out of wood.", + "durability": null, + "name": "Red disk", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3743" + }, + { + "examine": "A simple looking disk made of wood.", + "durability": null, + "name": "Wooden disk", + "archery_ticket_price": "0", + "id": "3744" + }, + { + "shop_price": "27", + "examine": "The key to leave the Seer's house.", + "durability": null, + "name": "Seer's key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3745" + }, + { + "examine": "Yup, it's sticky, it's red and it's goop.", + "durability": null, + "name": "Sticky red goop", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "3746" + }, + { + "durability": null, + "name": "Sticky red goop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3747" + }, + { + "remove_head": "true", + "examine": "A sturdy helm worn only by Fremennik clan members.", + "durability": null, + "name": "Fremennik helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "3748", + "absorb": "1,0,2", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helmet is worn by archers.", + "durability": null, + "weight": "2", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48900", + "name": "Archer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3749", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Archer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3750" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helmet is worn by berserkers.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "60900", + "name": "Berserker helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3751", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Berserker helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3752" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helm is worn by warriors.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "50700", + "name": "Warrior helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3753", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "50700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Warrior helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3754" + }, + { + "remove_head": "true", + "requirements": "{1,45}", + "shop_price": "78000", + "ge_buy_limit": "100", + "examine": "This helm is worn by farseers.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "47900", + "name": "Farseer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3755", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Farseer helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3756" + }, + { + "attack_anims": "390,390,381,390", + "examine": "A sword used only by Fremennik warriors.", + "durability": null, + "name": "Fremennik blade", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "4", + "weapon_interface": "6", + "id": "3757", + "bonuses": "6,29,-2,0,0,0,1,0,0,0,0,28,0,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "examine": "A shield worn by Fremennik warriors.", + "durability": null, + "name": "Fremennik shield", + "destroy": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "3758", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "697", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3759", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "697", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3760" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "54", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3761", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "54", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3762" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "581", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3763", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "581", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3764" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "912", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3765", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "912", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3766" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "100", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3767", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "100", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3768" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "486", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3769", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "486", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3770" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "242", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3771", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "242", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3772" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "500", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3773", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "500", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3774" + }, + { + "remove_sleeves": "true", + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "The latest in Fremennik fashion.", + "grand_exchange_price": "450", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3775", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "450", + "durability": null, + "name": "Fremennik shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3776" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "674", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3777", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "674", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3778" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "809", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3779", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "809", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3780" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "632", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3781", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "632", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3782" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "517", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3783", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "517", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3784" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "398", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3785", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "398", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3786" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "283", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3787", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "283", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3788" + }, + { + "shop_price": "325", + "ge_buy_limit": "1000", + "examine": "The latest fashion in Rellekka.", + "grand_exchange_price": "966", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3789", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "966", + "durability": null, + "name": "Fremennik cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3790" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "Very stylish!", + "grand_exchange_price": "205", + "durability": null, + "name": "Fremennik boots", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3791", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "205", + "durability": null, + "name": "Fremennik boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3792" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "The latest fashion of Rellekka.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1191", + "name": "Fremennik robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3793", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "durability": null, + "name": "Fremennik robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3794" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "The latest fashion of Rellekka.", + "grand_exchange_price": "663", + "durability": null, + "name": "Fremennik skirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "3795", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "663", + "durability": null, + "name": "Fremennik skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3796" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A silly pointed hat.", + "grand_exchange_price": "2380", + "durability": null, + "name": "Fremennik hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3797", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2380", + "durability": null, + "name": "Fremennik hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3798" + }, + { + "ge_buy_limit": "10", + "shop_price": "650", + "examine": "These will keep my hands warm!", + "grand_exchange_price": "172", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "3799", + "bonuses": "0,0,0,0,0,0,1,2,0,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "172", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3800" + }, + { + "shop_price": "325", + "ge_buy_limit": "100", + "examine": "A lot of beer in a barrel. Beer in a barrel - a specialty of the Fremennik Province.", + "grand_exchange_price": "1817", + "durability": null, + "name": "Keg of beer", + "tradeable": "true", + "weight": "20", + "archery_ticket_price": "0", + "id": "3801" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1817", + "durability": null, + "name": "Keg of beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3802" + }, + { + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "393", + "durability": null, + "name": "Beer", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "3803" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "393", + "durability": null, + "name": "Beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3804" + }, + { + "shop_price": "26", + "examine": "A big cup for a big thirst.", + "durability": null, + "name": "Tankard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3805" + }, + { + "durability": null, + "name": "Tankard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3806" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Saradomin page 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3827" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "686000", + "durability": null, + "name": "Saradomin page 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3828" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "522800", + "durability": null, + "name": "Saradomin page 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3829" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "629500", + "durability": null, + "name": "Saradomin page 4", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3830" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "7100000", + "durability": null, + "name": "Zamorak page 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3831" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "5400000", + "durability": null, + "name": "Zamorak page 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3832" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "4700000", + "durability": null, + "name": "Zamorak page 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3833" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "5900000", + "durability": null, + "name": "Zamorak page 4", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3834" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Guthix page 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3835" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "997100", + "durability": null, + "name": "Guthix page 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3836" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "953100", + "durability": null, + "name": "Guthix page 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3837" + }, + { + "ge_buy_limit": "2", + "examine": "This seems to have been torn from a book...", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Guthix page 4", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3838" + }, + { + "shop_price": "5000", + "examine": "An incomplete book of Saradomin.", + "durability": null, + "name": "Damaged book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3839", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "5000", + "examine": "The Holy book of Saradomin.", + "durability": null, + "name": "Holy book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3840", + "bonuses": "0,0,0,0,0,8,8,8,8,8,8,0,5,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "5000", + "examine": "An incomplete book of Zamorak.", + "durability": null, + "name": "Damaged book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3841", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "examine": "The unholy book of Zamorak.", + "durability": null, + "name": "Unholy book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3842", + "bonuses": "8,8,8,8,8,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "5000", + "examine": "An incomplete book of Guthix.", + "durability": null, + "name": "Damaged book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3843", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "5" + }, + { + "examine": "The holy book of Guthix.", + "durability": null, + "name": "Book of balance", + "weight": "1", + "archery_ticket_price": "0", + "id": "3844", + "bonuses": "4,4,4,4,4,4,4,4,4,4,4,0,5,0,0", + "equipment_slot": "5" + }, + { + "examine": "Looks like some kind of manual.", + "durability": null, + "name": "Manual", + "tradeable": "false", + "destroy": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "3847" + }, + { + "examine": "A key to the front door of the lighthouse. (Horror from the Deep)", + "durability": null, + "name": "Lighthouse key", + "archery_ticket_price": "0", + "id": "3848" + }, + { + "examine": "Looks old and rusty...", + "durability": null, + "name": "Rusty casket", + "tradeable": "false", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "3849" + }, + { + "durability": null, + "name": "Unholy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3852" + }, + { + "shop_price": "490", + "ge_buy_limit": "10000", + "examine": "An enchanted necklace.", + "grand_exchange_price": "852", + "durability": null, + "name": "Games necklace(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3853", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "852", + "durability": null, + "name": "Games necklace(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3854" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3855", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3856" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3857", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3858" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3859", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3860" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3861", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3862" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3863", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3864" + }, + { + "shop_price": "490", + "examine": "An enchanted necklace.", + "grand_exchange_price": "8", + "durability": null, + "name": "Games necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3865", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Games necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3866" + }, + { + "shop_price": "490", + "ge_buy_limit": "10000", + "examine": "An enchanted necklace.", + "grand_exchange_price": "2093", + "durability": null, + "name": "Games necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3867", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2093", + "durability": null, + "name": "Games necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "3868" + }, + { + "durability": null, + "name": "Stool", + "archery_ticket_price": "0", + "id": "3893", + "equipment_slot": "3" + }, + { + "examine": "It's not very good.", + "durability": null, + "name": "Awful anthem", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3894" + }, + { + "examine": "Much better.", + "durability": null, + "name": "Good anthem", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "3895" + }, + { + "examine": "Just needs the King's signature.", + "durability": null, + "name": "Treaty", + "archery_ticket_price": "0", + "id": "3896" + }, + { + "examine": "For making a giant pen.", + "durability": null, + "name": "Giant nib", + "archery_ticket_price": "0", + "id": "3897" + }, + { + "examine": "The king should be able to use this.", + "durability": null, + "name": "Giant pen", + "archery_ticket_price": "0", + "id": "3898" + }, + { + "shop_price": "15", + "examine": "Not as good as a pet frog.", + "durability": null, + "name": "Iron sickle", + "weight": "1.6", + "archery_ticket_price": "0", + "id": "3899", + "weapon_interface": "6", + "bonuses": "0,0,0,0,0,0,1,1,1,1,0,1,0,0,0", + "equipment_slot": "3" + }, + { + "examine": "Managing Thine Kingdom for Noobes by A. Ghrim.", + "durability": null, + "name": "Ghrim's book", + "weight": "1", + "archery_ticket_price": "0", + "id": "3901" + }, + { + "examine": "A pile of gout tubers suitable for use in mountainous terrain.", + "durability": null, + "name": "Hardy gout tuber", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4001" + }, + { + "examine": "It looks like some kind of control panel.", + "durability": null, + "name": "Spare controls", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "4002" + }, + { + "examine": "It's the official Gnome Royal Seal, signed by King Narode Shareen.", + "durability": null, + "name": "Gnome royal seal", + "archery_ticket_price": "0", + "id": "4004" + }, + { + "shop_price": "160", + "examine": "Unreadable orders handwritten by King Narnode Shareen.", + "durability": null, + "name": "Narnode's orders", + "archery_ticket_price": "0", + "id": "4005" + }, + { + "shop_price": "10", + "examine": "Magical monkey talking dentures! What more can we say? Ook!", + "durability": null, + "name": "Monkey dentures", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "4006" + }, + { + "examine": "A gold bar with a talkative monkey spirit.", + "durability": null, + "name": "Enchanted bar", + "weight": "2", + "archery_ticket_price": "0", + "id": "4007" + }, + { + "shop_price": "3", + "examine": "It's... the eye of a gnome! Now what on earth could one do with this?", + "durability": null, + "name": "Eye of gnome", + "weight": "1", + "archery_ticket_price": "0", + "id": "4008" + }, + { + "shop_price": "3", + "examine": "It's... the eye of a gnome! Now what on earth could one do with this?", + "durability": null, + "name": "Eye of gnome", + "weight": "1", + "archery_ticket_price": "0", + "id": "4009" + }, + { + "shop_price": "3", + "examine": "They are Monkey Nuts. Yummy.", + "durability": null, + "name": "Monkey nuts", + "archery_ticket_price": "0", + "id": "4012" + }, + { + "shop_price": "50", + "examine": "It's a monkey bar. It looks highly nutritious.", + "durability": null, + "name": "Monkey bar", + "archery_ticket_price": "0", + "id": "4014" + }, + { + "shop_price": "300", + "examine": "It's a bowl full of mushy banana", + "durability": null, + "name": "Banana stew", + "archery_ticket_price": "0", + "id": "4016" + }, + { + "examine": "It's an amulet mould shaped like a monkey head.", + "durability": null, + "name": "M'amulet mould", + "weight": "1", + "archery_ticket_price": "0", + "id": "4020" + }, + { + "examine": "It's an Amulet of Monkey Speak. It makes vague chattering noises.", + "durability": null, + "name": "M'speak amulet", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4021", + "equipment_slot": "2" + }, + { + "examine": "It's an unstrung Amulet of Monkey Speak. It makes vague chattering noises.", + "durability": null, + "name": "M'speak amulet", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4022" + }, + { + "shop_price": "1000", + "examine": "A magic talisman in shape of a monkey head.", + "durability": null, + "name": "Monkey talisman", + "weight": "1.25", + "archery_ticket_price": "0", + "id": "4023" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4024", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4025", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4026", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4027", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4028", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4029", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4030", + "equipment_slot": "3" + }, + { + "examine": "A magical talisman in the shape of a Karamjan monkey head.", + "durability": null, + "name": "Monkey greegree", + "archery_ticket_price": "0", + "id": "4031", + "equipment_slot": "3" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Dummy", + "archery_ticket_price": "0", + "id": "4032" + }, + { + "examine": "It's a very ancient skull from some kind of ape.", + "durability": null, + "name": "Monkey skull", + "archery_ticket_price": "0", + "id": "4034" + }, + { + "examine": "It is the official sigil of the 10th squad of the Royal Guard.", + "durability": null, + "name": "10th squad sigil", + "archery_ticket_price": "0", + "id": "4035", + "equipment_slot": "2" + }, + { + "turn90cw_anim": "1424", + "examine": "The Holy Team Standard", + "walk_anim": "1422", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Saradomin banner", + "tradeable": "false", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "4037", + "stand_turn_anim": "1426" + }, + { + "durability": null, + "name": "Saradomin banner", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4038" + }, + { + "turn90cw_anim": "1424", + "examine": "The Zamorak team's flag.", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Zamorak banner", + "tradeable": "false", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "4039", + "stand_turn_anim": "1426" + }, + { + "durability": null, + "name": "Zamorak banner", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4040" + }, + { + "examine": "The colours of Saradomin/Zamorak.", + "durability": null, + "name": "Hooded cloak", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4041", + "equipment_slot": "1" + }, + { + "examine": "The colours of Saradomin/Zamorak.", + "durability": null, + "name": "Hooded cloak", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4042", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Rock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4044" + }, + { + "examine": "I could use this to destroy things...", + "durability": null, + "name": "Explosive potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4045" + }, + { + "durability": null, + "name": "Explosive potion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4046" + }, + { + "examine": "A coil of rope.", + "durability": null, + "name": "Climbing rope", + "archery_ticket_price": "0", + "id": "4047" + }, + { + "durability": null, + "name": "Climbing rope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4048" + }, + { + "examine": "A box of bandages for healing.", + "durability": null, + "name": "Bandages", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4049" + }, + { + "durability": null, + "name": "Bandages", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4050" + }, + { + "examine": "Good for repairing a broken cannon.", + "durability": null, + "name": "Toolkit", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4051" + }, + { + "durability": null, + "name": "Toolkit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4052" + }, + { + "examine": "Handy for hindering the enemy team's movement.", + "durability": null, + "name": "Barricade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4053" + }, + { + "durability": null, + "name": "Barricade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4054" + }, + { + "shop_price": "5", + "examine": "It's a manual for Castle Wars", + "durability": null, + "name": "Castlewars manual", + "weight": "1", + "archery_ticket_price": "0", + "id": "4055" + }, + { + "examine": "I can exchange these for further items.", + "durability": null, + "name": "Castle wars ticket", + "archery_ticket_price": "0", + "id": "4067" + }, + { + "requirements": "{0,5}", + "shop_price": "50", + "turn90cw_anim": "821", + "examine": "A very decorative sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "equipment_slot": "3", + "stand_anim": "808", + "name": "Decorative sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4068", + "stand_turn_anim": "823", + "bonuses": "13,18,-2,0,0,0,3,2,0,0,0,16,0,0,0" + }, + { + "remove_sleeves": "true", + "requirements": "{1,5}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4069", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,5}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4070", + "bonuses": "0,0,0,-21,-7,17,16,15,-4,16,2,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "40", + "examine": "A very decorative helm.", + "durability": null, + "name": "Decorative helm", + "weight": "1", + "archery_ticket_price": "0", + "id": "4071", + "bonuses": "0,0,0,-3,-1,7,8,6,-1,7,3,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,5}", + "shop_price": "60", + "examine": "A very decorative shield.", + "durability": null, + "name": "Decorative shield", + "archery_ticket_price": "0", + "id": "4072", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Not so useful for lighting a fire.", + "durability": null, + "name": "Damp tinderbox", + "archery_ticket_price": "0", + "id": "4073" + }, + { + "durability": null, + "name": "Damp tinderbox", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4074" + }, + { + "examine": "A bizarre fungus. It glows with a pale blue light.", + "durability": null, + "name": "Glowing fungus", + "archery_ticket_price": "0", + "id": "4075" + }, + { + "examine": "A key I found in the lower levels of the Morytanian mines. (Haunted Mine) / As the 'Innocent-looking key': A shiny key sitting quietly on a crate.", + "durability": null, + "name": "Crystal-mine key", + "archery_ticket_price": "0", + "id": "4077" + }, + { + "examine": "I stole this from a Saradominist I met South of Mort'ton.", + "durability": null, + "name": "Zealot's key", + "archery_ticket_price": "0", + "id": "4078" + }, + { + "examine": "A gift from Santa.", + "durability": null, + "name": "Yo-yo", + "archery_ticket_price": "0", + "id": "4079" + }, + { + "examine": "Increases the wearer's strength and accuracy by 15% when fighting the undead.", + "durability": null, + "name": "Salve amulet", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "4081", + "bonuses": "0,0,0,0,0,3,3,3,0,0,3,0,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "An unstrung crystal imbued with the power of Saradomin.", + "durability": null, + "name": "Salve shard", + "archery_ticket_price": "0", + "id": "4082" + }, + { + "examine": "Unwaxed: It needs waxing before I can use it. Waxed: A waxed sled.", + "durability": null, + "name": "Sled", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4083", + "equipment_slot": "3" + }, + { + "turn90cw_anim": "1468", + "examine": "Unwaxed: It needs waxing before I can use it. Waxed: A waxed sled.", + "walk_anim": "1468", + "durability": null, + "turn90ccw_anim": "1468", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "1468", + "render_anim": "1119", + "equipment_slot": "3", + "stand_anim": "1461", + "name": "Sled", + "run_anim": "1468", + "archery_ticket_price": "0", + "id": "4084", + "stand_turn_anim": "1468" + }, + { + "examine": "I can use this to wax my sled.", + "durability": null, + "name": "Wax", + "archery_ticket_price": "0", + "id": "4085", + "equipment_slot": "5" + }, + { + "examine": "These pale flowers have a pungent odour.", + "durability": null, + "name": "Trollweiss", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "4086", + "weapon_interface": "12", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0", + "equipment_slot": "3" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "Looks pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "190500", + "name": "Dragon platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4087", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "190500", + "durability": null, + "name": "Dragon platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4088" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "13700", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "4089", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13700", + "durability": null, + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4090" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "ge_buy_limit": "100", + "examine": "The upper half of a magical robe.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "72100", + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4091", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "72100", + "durability": null, + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4092" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "ge_buy_limit": "100", + "examine": "The lower half of a magical robe.", + "durability": null, + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "47700", + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4093", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47700", + "durability": null, + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4094" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical gloves.", + "durability": null, + "weight": "0.4", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "5913", + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4095", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5913", + "durability": null, + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4096" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical boots.", + "durability": null, + "weight": "0.4", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "6303", + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4097", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6303", + "durability": null, + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4098" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "Black: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "16700", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "4099", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16700", + "durability": null, + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4100" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "ge_buy_limit": "100", + "examine": "The upper half of a magical robe.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "75100", + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4101", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "75100", + "durability": null, + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4102" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "ge_buy_limit": "100", + "examine": "The lower half of a magical robe.", + "durability": null, + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "50700", + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4103", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "50700", + "durability": null, + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4104" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Dark magical gloves.", + "durability": null, + "weight": "0.4", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "8913", + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4105", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8913", + "durability": null, + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4106" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical boots.", + "durability": null, + "weight": "0.4", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "9303", + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4107", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9303", + "durability": null, + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4108" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "White: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "16700", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "4109", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16700", + "durability": null, + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4110" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "ge_buy_limit": "100", + "examine": "The upper half of a magical robe.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "75100", + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4111", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "75100", + "durability": null, + "name": "Mystic robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4112" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "ge_buy_limit": "100", + "examine": "The lower half of a magical robe.", + "durability": null, + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "50700", + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4113", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "50700", + "durability": null, + "name": "Mystic robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4114" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Bright magical gloves.", + "durability": null, + "weight": "0.4", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "8913", + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4115", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8913", + "durability": null, + "name": "Mystic gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4116" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "Magical boots.", + "durability": null, + "weight": "0.4", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "9303", + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4117", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9303", + "durability": null, + "name": "Mystic boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4118" + }, + { + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "359", + "durability": null, + "name": "Bronze boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4119", + "bonuses": "0,0,0,-3,-1,1,2,3,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "359", + "durability": null, + "name": "Bronze boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4120" + }, + { + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "17000", + "durability": null, + "name": "Iron boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4121", + "bonuses": "0,0,0,-3,-1,2,3,4,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17000", + "durability": null, + "name": "Iron boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4122" + }, + { + "requirements": "{1,5}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "258", + "durability": null, + "name": "Steel boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4123", + "bonuses": "0,0,0,-3,-1,5,6,7,0,0,5,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "258", + "durability": null, + "name": "Steel boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4124" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "317", + "durability": null, + "name": "Black boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4125", + "bonuses": "0,0,0,-3,-1,7,8,9,0,0,7,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "317", + "durability": null, + "name": "Black boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4126" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "580", + "durability": null, + "name": "Mithril boots", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4127", + "bonuses": "0,0,0,-3,-1,8,9,10,0,0,8,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "580", + "durability": null, + "name": "Mithril boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4128" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "grand_exchange_price": "1336", + "durability": null, + "name": "Adamant boots", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4129", + "bonuses": "0,0,0,-3,-1,10,11,12,0,0,9,1,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1336", + "durability": null, + "name": "Adamant boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4130" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "durability": null, + "weight": "1.3", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "7474", + "name": "Rune boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4131", + "bonuses": "0,0,0,-3,-1,12,13,14,0,0,10,2,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7474", + "durability": null, + "name": "Rune boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4132" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4133" + }, + { + "examine": "A spiky crawling critter. (level 23) Not very tasty-looking. (level 138)", + "durability": null, + "name": "Cave crawler", + "archery_ticket_price": "0", + "attack_speed": "3", + "id": "4134" + }, + { + "examine": "A tortured screaming soul.", + "durability": null, + "name": "Banshee", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4135" + }, + { + "examine": "The slime of evil.", + "durability": null, + "name": "Rockslug", + "archery_ticket_price": "0", + "id": "4136" + }, + { + "examine": "The winged reptile.", + "durability": null, + "name": "Cockatrice", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4137" + }, + { + "examine": "A small fire demon.", + "durability": null, + "name": "Pyrefiend", + "archery_ticket_price": "0", + "id": "4138" + }, + { + "examine": "The eyes of evil.", + "durability": null, + "name": "Basilisk", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4139" + }, + { + "examine": "An evil magic user.", + "durability": null, + "name": "Infernal mage", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4140" + }, + { + "examine": "The tongue of evil.", + "durability": null, + "name": "Bloodveld", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4141" + }, + { + "examine": "• Needs cream.....• Wibbly.• Wobbly...• There's always room for jelly.• Doesn't look so tough...• Looks scared to see me.", + "durability": null, + "name": "Jelly", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4142" + }, + { + "durability": null, + "name": "Turoth", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4143" + }, + { + "examine": "A very smelly ghost.", + "durability": null, + "name": "Abberant spectre", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4144" + }, + { + "examine": "The vacuumed face of evil.", + "durability": null, + "name": "Dust devil", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4145" + }, + { + "durability": null, + "name": "Kurask", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4146" + }, + { + "examine": "Flies like a rock.", + "durability": null, + "name": "Gargoyle", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4147" + }, + { + "durability": null, + "name": "Nechryael", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4148" + }, + { + "examine": "A denizen of the Abyss!", + "durability": null, + "name": "Abyssal demon", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "4149" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4150", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,28,0,0" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A weapon from the Abyss.", + "walk_anim": "1660", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "1659", + "equipment_slot": "3", + "attack_anims": "1658,1658,1658,1658", + "grand_exchange_price": "413500", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1661", + "archery_ticket_price": "0", + "id": "4151", + "stand_turn_anim": "823", + "bonuses": "0,82,0,0,0,0,0,0,0,0,0,82,0,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "0.45", + "weapon_interface": "11", + "equip_audio": "2249", + "render_anim": "620", + "lendable": "true", + "attack_audios": "2720,0,0,0", + "name": "Abyssal whip" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "413500", + "durability": null, + "name": "Abyssal whip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4152" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1663", + "examine": "Simplicity is the best weapon.", + "walk_anim": "1663", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1663", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1663", + "defence_anim": "1666", + "equipment_slot": "3", + "attack_anims": "1665,1665,1665,1665", + "grand_exchange_price": "29900", + "stand_anim": "1662", + "tradeable": "true", + "run_anim": "1664", + "archery_ticket_price": "0", + "id": "4153", + "stand_turn_anim": "823", + "bonuses": "0,0,81,0,0,0,0,0,0,0,0,79,0,0,0", + "requirements": "{0,50}-{2,50}", + "durability": null, + "weight": "4.5", + "weapon_interface": "10", + "render_anim": "27", + "lendable": "true", + "attack_audios": "2714,0,0,0", + "name": "Granite maul" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "29900", + "durability": null, + "name": "Granite maul", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4154" + }, + { + "shop_price": "1", + "examine": "I can contact the Slayer Masters with this.", + "durability": null, + "name": "Enchanted gem", + "archery_ticket_price": "0", + "id": "4155" + }, + { + "requirements": "{1,20}-{18,25}", + "shop_price": "5000", + "ge_buy_limit": "100", + "examine": "I can just about see things in this shield's reflection.", + "durability": null, + "weight": "2.2", + "equipment_slot": "5", + "grand_exchange_price": "3318", + "name": "Mirror shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4156", + "bonuses": "0,0,0,0,0,10,15,5,5,10,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3318", + "durability": null, + "name": "Mirror shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4157" + }, + { + "requirements": "{0,55}-{18,50}", + "shop_price": "31000", + "turn90cw_anim": "1207", + "examine": "A spear with a leaf-shaped point.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "stand_anim": "813", + "name": "Leaf-bladed spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4158", + "stand_turn_anim": "1209", + "bonuses": "47,42,36,0,0,1,1,0,0,0,0,50,0,0,0" + }, + { + "requirements": "{0,55}-{18,50}", + "shop_price": "31000", + "examine": "A spear with a leaf-shaped point.", + "durability": null, + "name": "Leaf-bladed spear", + "weight": "2", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "4159", + "equipment_slot": "3" + }, + { + "requirements": "{18,55}-{4,50}", + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrow", + "archery_ticket_price": "0", + "id": "4160", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "A bag of salt.", + "grand_exchange_price": "1", + "durability": null, + "name": "Bag of salt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4161" + }, + { + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "I can even smash stone with this.", + "grand_exchange_price": "140", + "durability": null, + "name": "Rock hammer", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "4162", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "140", + "durability": null, + "name": "Rock hammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4163" + }, + { + "requirements": "{18,10}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Stops me breathing in too much dust.", + "grand_exchange_price": "615", + "durability": null, + "name": "Face mask", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4164", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "615", + "durability": null, + "name": "Face mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4165" + }, + { + "requirements": "{18,15}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "These will protect my ears from loud noise.", + "grand_exchange_price": "484", + "durability": null, + "name": "Earmuffs", + "tradeable": "true", + "weight": "2.6", + "archery_ticket_price": "0", + "id": "4166", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "484", + "durability": null, + "name": "Earmuffs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4167" + }, + { + "requirements": "{18,60}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Protects me from any bad smells.", + "grand_exchange_price": "523", + "durability": null, + "name": "Nose peg", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "4168", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "523", + "durability": null, + "name": "Nose peg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4169" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An old and magical staff.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "12100", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4170", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,12,0,2,3,1,10,0,0,35,0,0,0", + "requirements": "{18,55}-{6,50}", + "shop_price": "21000", + "durability": null, + "weight": "1.8", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Slayer's staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12100", + "durability": null, + "name": "Slayer's staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4171" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4172", + "equipment_slot": "13" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4173", + "equipment_slot": "13" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4174", + "equipment_slot": "13" + }, + { + "shop_price": "90", + "examine": "Arrows with a wider than normal tip.", + "durability": null, + "name": "Broad arrows", + "archery_ticket_price": "0", + "id": "4175", + "equipment_slot": "13" + }, + { + "examine": "A weapon from the Abyss.", + "rare_item": "true", + "durability": null, + "weight": "0.45", + "attack_speed": "4", + "render_anim": "620", + "lendable": "true", + "grand_exchange_price": "388392", + "name": "Abyssal whip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4178", + "bonuses": "0,82,0,0,0,0,0,0,0,0,0,82,0,0,0" + }, + { + "examine": "A big, bad troll.", + "durability": null, + "name": "Stick", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "4179" + }, + { + "lendable": "true", + "examine": "Looks pretty heavy.", + "grand_exchange_price": "165900", + "durability": null, + "name": "Dragon platelegs", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "4180", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "durability": null, + "name": "Mouth grip", + "archery_ticket_price": "0", + "id": "4181", + "equipment_slot": "3" + }, + { + "examine": "A pale, tough looking herb.", + "durability": null, + "name": "Goutweed", + "archery_ticket_price": "0", + "id": "4182" + }, + { + "examine": "A six-pointed marble and obsidian amulet", + "durability": null, + "name": "Star amulet", + "archery_ticket_price": "0", + "id": "4183" + }, + { + "examine": "Upon close examination, this seems to be a key.", + "durability": null, + "name": "Cavern key", + "archery_ticket_price": "0", + "id": "4184" + }, + { + "examine": "Upon close examination, this seems to be a key.", + "durability": null, + "name": "Tower key", + "archery_ticket_price": "0", + "id": "4185" + }, + { + "examine": "Upon close examination, this seems to be a key.", + "durability": null, + "name": "Shed key", + "archery_ticket_price": "0", + "id": "4186" + }, + { + "examine": "Triangular in shape, made from marble, and as large as your hand.", + "durability": null, + "name": "Marble amulet", + "archery_ticket_price": "0", + "id": "4187" + }, + { + "examine": "Triangular in shape, made from obsidian, and as large as your hand.", + "durability": null, + "name": "Obsidian amulet", + "archery_ticket_price": "0", + "id": "4188" + }, + { + "examine": "A length of garden cane.", + "durability": null, + "name": "Garden cane", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4189" + }, + { + "examine": "See article", + "durability": null, + "name": "Garden brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4190" + }, + { + "examine": "See article", + "durability": null, + "name": "Extended brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4191" + }, + { + "examine": "See article", + "durability": null, + "name": "Extended brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4192" + }, + { + "examine": "See article", + "durability": null, + "name": "Extended brush", + "weight": "1", + "archery_ticket_price": "0", + "id": "4193", + "equipment_slot": "3" + }, + { + "examine": "A pair of limp, dead arms.", + "durability": null, + "name": "Arms", + "weight": "2", + "archery_ticket_price": "0", + "id": "4195" + }, + { + "examine": "A pair of lifeless, rotting legs.", + "durability": null, + "name": "Legs", + "archery_ticket_price": "0", + "id": "4196" + }, + { + "examine": "No brain: A gruesome, decapitated head, whose brain has rotted away. Brain: A gruesome, decapitated head - its eyes stare lifelessly at nothing.", + "durability": null, + "name": "Decapitated head", + "weight": "3", + "archery_ticket_price": "0", + "id": "4197" + }, + { + "examine": "No brain: A gruesome, decapitated head, whose brain has rotted away. Brain: A gruesome, decapitated head - its eyes stare lifelessly at nothing.", + "durability": null, + "name": "Decapitated head", + "weight": "3", + "archery_ticket_price": "0", + "id": "4198" + }, + { + "shop_price": "50", + "examine": "A pickled brain, submerged inside a jar of vinegar.", + "durability": null, + "name": "Pickled brain", + "archery_ticket_price": "0", + "id": "4199" + }, + { + "examine": "A mould for making silver lightning conductors.", + "durability": null, + "name": "Conductor mould", + "archery_ticket_price": "0", + "id": "4200" + }, + { + "examine": "A silver lightning conductor.", + "durability": null, + "name": "Conductor", + "weight": "4", + "archery_ticket_price": "0", + "id": "4201" + }, + { + "destroy_message": "Another can be received from pickpocketing Dr. Fenkenstrain in the tower.", + "examine": "Unactivated: The Ring of charos.Activated: The power within this ring has been activated.", + "durability": null, + "name": "Ring of charos", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4202", + "equipment_slot": "12" + }, + { + "examine": "This consecration seed looks grey and dead.", + "durability": null, + "name": "Consecration seed", + "archery_ticket_price": "0", + "id": "4205" + }, + { + "examine": "This consecration seed looks grey and dead.", + "durability": null, + "name": "Consecration seed", + "archery_ticket_price": "0", + "id": "4206" + }, + { + "ge_buy_limit": "10", + "examine": "This crystal seed looks grey and dead.", + "grand_exchange_price": "92600", + "durability": null, + "name": "Crystal seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4207" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "92600", + "durability": null, + "name": "Crystal seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4208" + }, + { + "examine": "A book on Cadarn clan history.", + "durability": null, + "name": "Cadarn lineage", + "archery_ticket_price": "0", + "id": "4209" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "ge_buy_limit": "10", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "905300", + "attack_audios": "2700,0,0,0", + "name": "New crystal bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4212", + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "905300", + "durability": null, + "name": "New crystal bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4213" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow full", + "archery_ticket_price": "0", + "id": "4214", + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 9/10", + "archery_ticket_price": "0", + "id": "4215", + "bonuses": "0,0,0,0,96,0,0,0,0,0,0,0,0,0,68" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 8/10", + "archery_ticket_price": "0", + "id": "4216", + "bonuses": "0,0,0,0,92,0,0,0,0,0,0,0,0,0,66" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 7/10", + "archery_ticket_price": "0", + "id": "4217", + "bonuses": "0,0,0,0,88,0,0,0,0,0,0,0,0,0,64" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 6/10", + "archery_ticket_price": "0", + "id": "4218", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,62" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 5/10", + "archery_ticket_price": "0", + "id": "4219", + "bonuses": "0,0,0,0,80,0,0,0,0,0,0,0,0,0,60" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 4/10", + "archery_ticket_price": "0", + "id": "4220", + "bonuses": "0,0,0,0,76,0,0,0,0,0,0,0,0,0,58" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 3/10", + "archery_ticket_price": "0", + "id": "4221", + "bonuses": "0,0,0,0,72,0,0,0,0,0,0,0,0,0,56" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 2/10", + "archery_ticket_price": "0", + "id": "4222", + "bonuses": "0,0,0,0,68,0,0,0,0,0,0,0,0,0,54" + }, + { + "requirements": "{4,70}-{16,50}", + "shop_price": "900000", + "examine": "A nice sturdy magical bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "901019", + "attack_audios": "2700,0,0,0", + "name": "Crystal bow 1/10", + "archery_ticket_price": "0", + "id": "4223", + "bonuses": "0,0,0,0,64,0,0,0,0,0,0,0,0,0,52" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "ge_buy_limit": "10", + "examine": "A nice sturdy crystal shield.", + "durability": null, + "weight": "2", + "absorb": "6,0,12", + "equipment_slot": "5", + "grand_exchange_price": "756900", + "name": "New crystal shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4224", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield full", + "weight": "2", + "archery_ticket_price": "0", + "id": "4225", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 9/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4226", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,49,52,51,0,78,68,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 8/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4227", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,47,50,49,0,76,66,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 7/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4228", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,45,48,47,0,74,65,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 6/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4229", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,43,46,45,0,72,63,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 5/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4230", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,41,44,43,0,70,61,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 4/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4231", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,39,42,41,0,68,59,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 3/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4232", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,37,40,39,0,66,58,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 2/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4233", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,35,38,37,0,64,56,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,70}-{16,50}", + "shop_price": "750000", + "examine": "A nice sturdy crystal shield.", + "grand_exchange_price": "749305", + "durability": null, + "name": "Crystal shield 1/10", + "weight": "2", + "archery_ticket_price": "0", + "id": "4234", + "absorb": "6,0,12", + "bonuses": "0,0,0,-10,-10,33,36,35,0,62,54,0,0,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "New crystal shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4235" + }, + { + "requirements": "{4,5}", + "examine": "This bow has been signed by Robin, Master Bowman.", + "durability": null, + "weight": "2", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "equipment_slot": "3", + "name": "Signed oak bow", + "archery_ticket_price": "0", + "id": "4236", + "bonuses": "0,0,0,0,14,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "It's a bowl of water, with some nettles in it.", + "durability": null, + "name": "Nettle-water", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4237" + }, + { + "examine": "It's a bowl of (milky) nettle tea.", + "durability": null, + "name": "Nettle tea", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4239" + }, + { + "examine": "It's a bowl of (milky) nettle tea.", + "durability": null, + "name": "Nettle tea", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4240" + }, + { + "examine": "(In inventory) A handful of nettles (In ground) I better not get stung/I wouldn't like to get stung/I wish I could sting other people/Dock leaves at the ready/These may hurt/nettles sting my leggies(Draynor Village nettles)", + "durability": null, + "name": "Nettles", + "archery_ticket_price": "0", + "id": "4241" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4242" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4243" + }, + { + "examine": "A porcelain cup.", + "durability": null, + "name": "Porcelain cup", + "archery_ticket_price": "0", + "id": "4244" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4245" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4246" + }, + { + "examine": "The Robes of Necrovarus.", + "durability": null, + "name": "Mystical robes", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "4247" + }, + { + "examine": "The Book of Haricanto.", + "durability": null, + "name": "Book of haricanto", + "weight": "2", + "archery_ticket_price": "0", + "id": "4248" + }, + { + "shop_price": "32", + "examine": "A translation manual.", + "durability": null, + "name": "Translation manual", + "weight": "1", + "archery_ticket_price": "0", + "id": "4249" + }, + { + "examine": "The amulet of ghostspeak glows green from the crone's enchantment.", + "durability": null, + "name": "Ghostspeak amulet", + "archery_ticket_price": "0", + "id": "4250", + "equipment_slot": "2" + }, + { + "destroy_message": "The Ectophial will smash if you drop it. Velorina can replace it.", + "examine": "The Ectophial.", + "durability": null, + "name": "Ectophial", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4251" + }, + { + "destroy_message": "The Ectophial will smash if you drop it. Velorina can replace it.", + "examine": "The Ectophial.", + "durability": null, + "name": "Ectophial", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4252" + }, + { + "examine": "A small wooden ship. / A small wooden ship with a silk flag.", + "durability": null, + "name": "Model ship", + "archery_ticket_price": "0", + "id": "4253" + }, + { + "examine": "A small wooden ship. / A small wooden ship with a silk flag.", + "durability": null, + "name": "Model ship", + "archery_ticket_price": "0", + "id": "4254" + }, + { + "examine": "A pot of crushed bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4255" + }, + { + "examine": "A pot of crushed bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4256" + }, + { + "examine": "A pot of crushed wolf bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4257" + }, + { + "examine": "A pot of crushed burnt bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4258" + }, + { + "examine": "A pot of crushed monkey bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4259" + }, + { + "examine": "A pot of crushed monkey bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4260" + }, + { + "examine": "A pot of crushed bat bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4261" + }, + { + "examine": "A pot of crushed big bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4262" + }, + { + "examine": "A pot of crushed jogre bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4263" + }, + { + "examine": "A pot of crushed zogre bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4264" + }, + { + "examine": "A pot of crushed shaikahan bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4265" + }, + { + "examine": "A pot of crushed baby dragon bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4266" + }, + { + "examine": "A pot of crushed wyvern bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4267" + }, + { + "examine": "A pot of crushed dragon bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4268" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4269" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4270" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4271" + }, + { + "shop_price": "100", + "examine": "A key fashioned from a shard of bone. (Shilo Village)", + "durability": null, + "name": "Bone key", + "archery_ticket_price": "0", + "id": "4272" + }, + { + "examine": "A section from some kind of map.", + "durability": null, + "name": "Map scrap", + "archery_ticket_price": "0", + "id": "4274" + }, + { + "examine": "A section from some kind of map.", + "durability": null, + "name": "Map scrap", + "archery_ticket_price": "0", + "id": "4275" + }, + { + "examine": "A section from some kind of map.", + "durability": null, + "name": "Map scrap", + "archery_ticket_price": "0", + "id": "4276" + }, + { + "examine": "A complete treasure map.", + "durability": null, + "name": "Treasure map", + "archery_ticket_price": "0", + "id": "4277" + }, + { + "examine": "A token with ectoplasm on it.", + "durability": null, + "name": "Ecto-token", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4278" + }, + { + "examine": "A scroll of paper containing signatures.", + "durability": null, + "name": "Petition form", + "archery_ticket_price": "0", + "id": "4283" + }, + { + "examine": "Before Ectofuntus: It's a bedsheet.After Ectofuntus: It's an ectoplasm-covered bedsheet.", + "durability": null, + "name": "Bedsheet", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "4284", + "equipment_slot": "0" + }, + { + "examine": "Before Ectofuntus: It's a bedsheet.After Ectofuntus: It's an ectoplasm-covered bedsheet.", + "durability": null, + "name": "Bedsheet", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "4285", + "equipment_slot": "0" + }, + { + "examine": "It's a bucket of ectoplasm.", + "durability": null, + "name": "Bucket of slime", + "weight": "3", + "archery_ticket_price": "0", + "id": "4286" + }, + { + "shop_price": "58", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "440", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "4287" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "440", + "durability": null, + "name": "Raw beef", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4288" + }, + { + "shop_price": "60", + "ge_buy_limit": "1000", + "examine": "I need to cook this first.", + "grand_exchange_price": "263", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "4289" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "263", + "durability": null, + "name": "Raw chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4290" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "59", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4291" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "59", + "durability": null, + "name": "Cooked chicken", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4292" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "74", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "4293" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "74", + "durability": null, + "name": "Cooked meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4294" + }, + { + "examine": "A member of the 'Humans Against Monsters' group.", + "durability": null, + "name": "Female h.a.m.", + "archery_ticket_price": "0", + "id": "4295" + }, + { + "examine": "A member of the 'Humans Against Monsters' group.", + "durability": null, + "name": "Male h.a.m.", + "archery_ticket_price": "0", + "id": "4297" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "The label says 'Vivid Crimson', but it looks like pink to me!", + "grand_exchange_price": "19", + "durability": null, + "name": "Ham shirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4298", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Ham shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4299" + }, + { + "ge_buy_limit": "100", + "examine": "The label says 'Vivid Crimson', but it looks like pink to me!", + "grand_exchange_price": "11", + "durability": null, + "name": "Ham robe", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4300", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Ham robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4301" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Light-weight head protection and eye shield.", + "grand_exchange_price": "400", + "durability": null, + "name": "Ham hood", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4302", + "bonuses": "0,0,0,0,0,0,1,2,0,1,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "400", + "durability": null, + "name": "Ham hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4303" + }, + { + "ge_buy_limit": "100", + "examine": "A HAM cape.", + "grand_exchange_price": "25", + "durability": null, + "name": "Ham cloak", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4304", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Ham cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4305" + }, + { + "ge_buy_limit": "100", + "examine": "A badge for the HAM cult.", + "grand_exchange_price": "63", + "durability": null, + "name": "H.a.m logo", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.5", + "id": "4306", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "63", + "durability": null, + "name": "H.a.m logo", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4307" + }, + { + "ge_buy_limit": "10", + "examine": "Gloves worn by the Humans Against Monsters group.", + "grand_exchange_price": "59", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4308", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "59", + "durability": null, + "name": "Gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4309" + }, + { + "ge_buy_limit": "100", + "examine": "Boots worn by the Humans Against Monsters group.", + "grand_exchange_price": "323", + "durability": null, + "name": "Boots", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4310", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "323", + "durability": null, + "name": "Boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4311" + }, + { + "examine": "A book on elven crystal.", + "durability": null, + "name": "Crystal of seren", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4313" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "2342", + "durability": null, + "name": "Team-1 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4315", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2342", + "durability": null, + "name": "Team-1 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4316" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1145", + "durability": null, + "name": "Team-2 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4317", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1145", + "durability": null, + "name": "Team-2 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4318" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "141", + "durability": null, + "name": "Team-3 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4319", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "141", + "durability": null, + "name": "Team-3 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4320" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "973", + "durability": null, + "name": "Team-4 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4321", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "973", + "durability": null, + "name": "Team-4 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4322" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1294", + "durability": null, + "name": "Team-5 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4323", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1294", + "durability": null, + "name": "Team-5 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4324" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "124", + "durability": null, + "name": "Team-6 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4325", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124", + "durability": null, + "name": "Team-6 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4326" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1264", + "durability": null, + "name": "Team-7 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4327", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1264", + "durability": null, + "name": "Team-7 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4328" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1824", + "durability": null, + "name": "Team-8 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4329", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1824", + "durability": null, + "name": "Team-8 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4330" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "841", + "durability": null, + "name": "Team-9 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4331", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "841", + "durability": null, + "name": "Team-9 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4332" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1127", + "durability": null, + "name": "Team-10 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4333", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1127", + "durability": null, + "name": "Team-10 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4334" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "2011", + "durability": null, + "name": "Team-11 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4335", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2011", + "durability": null, + "name": "Team-11 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4336" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1591", + "durability": null, + "name": "Team-12 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4337", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1591", + "durability": null, + "name": "Team-12 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4338" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "308", + "durability": null, + "name": "Team-13 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4339", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "308", + "durability": null, + "name": "Team-13 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4340" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1504", + "durability": null, + "name": "Team-14 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4341", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1504", + "durability": null, + "name": "Team-14 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4342" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1462", + "durability": null, + "name": "Team-15 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4343", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1462", + "durability": null, + "name": "Team-15 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4344" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "313", + "durability": null, + "name": "Team-16 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4345", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "313", + "durability": null, + "name": "Team-16 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4346" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1231", + "durability": null, + "name": "Team-17 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4347", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1231", + "durability": null, + "name": "Team-17 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4348" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1678", + "durability": null, + "name": "Team-18 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4349", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1678", + "durability": null, + "name": "Team-18 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4350" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1041", + "durability": null, + "name": "Team-19 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4351", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1041", + "durability": null, + "name": "Team-19 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4352" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "703", + "durability": null, + "name": "Team-20 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4353", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "703", + "durability": null, + "name": "Team-20 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4354" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1292", + "durability": null, + "name": "Team-21 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4355", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1292", + "durability": null, + "name": "Team-21 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4356" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1368", + "durability": null, + "name": "Team-22 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4357", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1368", + "durability": null, + "name": "Team-22 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4358" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "280", + "durability": null, + "name": "Team-23 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4359", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "280", + "durability": null, + "name": "Team-23 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4360" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1512", + "durability": null, + "name": "Team-24 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4361", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1512", + "durability": null, + "name": "Team-24 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4362" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1395", + "durability": null, + "name": "Team-25 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4363", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1395", + "durability": null, + "name": "Team-25 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4364" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "191", + "durability": null, + "name": "Team-26 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4365", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "191", + "durability": null, + "name": "Team-26 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4366" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1420", + "durability": null, + "name": "Team-27 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4367", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1420", + "durability": null, + "name": "Team-27 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4368" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1920", + "durability": null, + "name": "Team-28 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4369", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1920", + "durability": null, + "name": "Team-28 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4370" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1175", + "durability": null, + "name": "Team-29 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4371", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1175", + "durability": null, + "name": "Team-29 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4372" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "552", + "durability": null, + "name": "Team-30 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4373", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "552", + "durability": null, + "name": "Team-30 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4374" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1385", + "durability": null, + "name": "Team-31 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4375", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1385", + "durability": null, + "name": "Team-31 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4376" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1168", + "durability": null, + "name": "Team-32 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4377", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1168", + "durability": null, + "name": "Team-32 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4378" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "211", + "durability": null, + "name": "Team-33 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4379", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "211", + "durability": null, + "name": "Team-33 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4380" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1128", + "durability": null, + "name": "Team-34 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4381", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1128", + "durability": null, + "name": "Team-34 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4382" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1140", + "durability": null, + "name": "Team-35 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4383", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1140", + "durability": null, + "name": "Team-35 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4384" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "84", + "durability": null, + "name": "Team-36 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4385", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "84", + "durability": null, + "name": "Team-36 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4386" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1010", + "durability": null, + "name": "Team-37 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4387", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1010", + "durability": null, + "name": "Team-37 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4388" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1833", + "durability": null, + "name": "Team-38 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4389", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1833", + "durability": null, + "name": "Team-38 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4390" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "914", + "durability": null, + "name": "Team-39 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4391", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "914", + "durability": null, + "name": "Team-39 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4392" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "582", + "durability": null, + "name": "Team-40 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4393", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "582", + "durability": null, + "name": "Team-40 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4394" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1471", + "durability": null, + "name": "Team-41 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4395", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1471", + "durability": null, + "name": "Team-41 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4396" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1072", + "durability": null, + "name": "Team-42 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4397", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1072", + "durability": null, + "name": "Team-42 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4398" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "298", + "durability": null, + "name": "Team-43 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4399", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "298", + "durability": null, + "name": "Team-43 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4400" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1268", + "durability": null, + "name": "Team-44 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4401", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1268", + "durability": null, + "name": "Team-44 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4402" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1371", + "durability": null, + "name": "Team-45 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4403", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1371", + "durability": null, + "name": "Team-45 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4404" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "140", + "durability": null, + "name": "Team-46 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4405", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "140", + "durability": null, + "name": "Team-46 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4406" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1233", + "durability": null, + "name": "Team-47 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4407", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1233", + "durability": null, + "name": "Team-47 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4408" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1836", + "durability": null, + "name": "Team-48 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4409", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1836", + "durability": null, + "name": "Team-48 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4410" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "1185", + "durability": null, + "name": "Team-49 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4411", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1185", + "durability": null, + "name": "Team-49 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4412" + }, + { + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Ooohhh look at the pretty colours...", + "grand_exchange_price": "708", + "durability": null, + "name": "Team-50 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4413", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "708", + "durability": null, + "name": "Team-50 cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4414" + }, + { + "examine": "A jungle forester's blunt axe.", + "durability": null, + "name": "Blunt axe", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4415" + }, + { + "examine": "A strong medicinal brew for heavy chests.", + "durability": null, + "name": "Herbal tincture", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4416" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "223", + "durability": null, + "name": "Guthix rest(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4417" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "223", + "durability": null, + "name": "Guthix rest(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4418" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "134", + "durability": null, + "name": "Guthix rest(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4419" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "134", + "durability": null, + "name": "Guthix rest(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4420" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "83", + "durability": null, + "name": "Guthix rest(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4421" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "durability": null, + "name": "Guthix rest(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4422" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of Guthix rest.", + "grand_exchange_price": "44", + "durability": null, + "name": "Guthix rest(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4423" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44", + "durability": null, + "name": "Guthix rest(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4424" + }, + { + "examine": "A half-filled feather mattress.", + "durability": null, + "name": "Stodgy mattress", + "weight": "10", + "archery_ticket_price": "0", + "id": "4425" + }, + { + "examine": "A comfy-looking feather mattress.", + "durability": null, + "name": "Comfy mattress", + "weight": "15", + "archery_ticket_price": "0", + "id": "4426" + }, + { + "examine": "Looks like a bunch of rust to me.", + "durability": null, + "name": "Iron oxide", + "weight": "1", + "archery_ticket_price": "0", + "id": "4427" + }, + { + "examine": "An animate rock spell is written on this parchment.", + "durability": null, + "name": "Animate rock scroll", + "archery_ticket_price": "0", + "id": "4428" + }, + { + "examine": "The weathervane directions should now work.", + "durability": null, + "name": "Directionals", + "archery_ticket_price": "0", + "id": "4430" + }, + { + "examine": "A fixed weathervane ornament.", + "durability": null, + "name": "Ornament", + "archery_ticket_price": "0", + "id": "4432" + }, + { + "examine": "A fixed weathervane rotating pillar.", + "durability": null, + "name": "Weathervane pillar", + "archery_ticket_price": "0", + "id": "4434" + }, + { + "examine": "Clear skies ahead, with some chance of showers, thunderstorms, ice and hail.", + "durability": null, + "name": "Weather report", + "archery_ticket_price": "0", + "id": "4435" + }, + { + "ge_buy_limit": "100", + "examine": "This is pretty well sealed.", + "grand_exchange_price": "245", + "durability": null, + "name": "Airtight pot", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "4436" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "245", + "durability": null, + "name": "Airtight pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4437" + }, + { + "ge_buy_limit": "100", + "examine": "This needs firing, then it should fit on a normal-sized pot.", + "grand_exchange_price": "16", + "durability": null, + "name": "Unfired pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4438" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Unfired pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4439" + }, + { + "ge_buy_limit": "100", + "examine": "This should fit on a normal-sized pot.", + "grand_exchange_price": "5", + "durability": null, + "name": "Pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4440" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Pot lid", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4441" + }, + { + "examine": "An airtight pot with something inside, most likely breathing salts.", + "durability": null, + "name": "Breathing salts", + "archery_ticket_price": "0", + "id": "4442" + }, + { + "examine": "A large cage for transporting chickens.", + "durability": null, + "name": "Chicken cage", + "weight": "1", + "archery_ticket_price": "0", + "id": "4443" + }, + { + "examine": "A jungle forester's super sharp axe.", + "durability": null, + "name": "Sharpened axe", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4444" + }, + { + "examine": "Some mahogany logs which have been professionally cured.", + "durability": null, + "name": "Red mahogany log", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4445" + }, + { + "destroy_message": "You can get another key ring from Yanni Salika in Shilo Village.", + "shop_price": "500", + "examine": "I can store my keys here.", + "durability": null, + "name": "Steel key ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4446" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4447" + }, + { + "ge_buy_limit": "100", + "examine": "It's a bowl of hot water.", + "grand_exchange_price": "111", + "durability": null, + "name": "Bowl of hot water", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4456" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "durability": null, + "name": "Bowl of hot water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4457" + }, + { + "ge_buy_limit": "100", + "examine": "A cup of water.", + "grand_exchange_price": "36", + "durability": null, + "name": "Cup of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4458" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "36", + "durability": null, + "name": "Cup of water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4459" + }, + { + "ge_buy_limit": "100", + "examine": "It's hot!", + "grand_exchange_price": "102", + "durability": null, + "name": "Cup of hot water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4460" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "102", + "durability": null, + "name": "Cup of hot water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4461" + }, + { + "examine": "A ruined herb tea.", + "durability": null, + "name": "Ruined herb tea", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4462" + }, + { + "durability": null, + "name": "Ruined herb tea", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4463" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4464" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4465" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4466" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4467" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4468" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4469" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4470" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4471" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "17", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4472" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4473" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4474" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4475" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4476" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4477" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "46", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4478" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "46", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4479" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "41", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4480" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "41", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4481" + }, + { + "ge_buy_limit": "100", + "examine": "See article", + "grand_exchange_price": "43", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4482" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43", + "durability": null, + "name": "Herb tea mix", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4483" + }, + { + "shop_price": "160", + "examine": "The strange characters supposedly grant Svidi safe passage into Rellekka.", + "durability": null, + "name": "Safety guarantee", + "archery_ticket_price": "0", + "id": "4484" + }, + { + "examine": "This fruit is known as White Pearl. Should taste good.", + "durability": null, + "name": "White pearl", + "weight": "1", + "archery_ticket_price": "0", + "id": "4485" + }, + { + "examine": "You can grow this seed even in cold mountain ranges!", + "durability": null, + "name": "White pearl seed", + "archery_ticket_price": "0", + "id": "4486" + }, + { + "examine": "It's a piece of the Ancient Rock of the mountain people. It's still just a stone.", + "durability": null, + "name": "Half a rock", + "weight": "1", + "archery_ticket_price": "0", + "id": "4487" + }, + { + "examine": "The corpse of a woman who died long ago.", + "durability": null, + "name": "Corpse of woman", + "weight": "1", + "archery_ticket_price": "0", + "id": "4488" + }, + { + "examine": "This used to belong to Asleif, daughter of the mountain camp chieftain.", + "durability": null, + "name": "Asleif's necklace", + "archery_ticket_price": "0", + "id": "4489" + }, + { + "examine": "Marginally better than egg on your face.", + "durability": null, + "name": "Mud", + "archery_ticket_price": "0", + "id": "4490" + }, + { + "examine": "A muddy rock.", + "durability": null, + "name": "Muddy rock", + "weight": "1", + "archery_ticket_price": "0", + "id": "4492" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4494" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4495" + }, + { + "examine": "Splintered into pieces, it has become completely useless to you.", + "durability": null, + "name": "Broken pole", + "archery_ticket_price": "0", + "id": "4496" + }, + { + "shop_price": "18", + "examine": "A coil of rope.", + "grand_exchange_price": "101", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4498", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Rope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4499" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4500", + "equipment_slot": "3" + }, + { + "examine": "It's just a long stick, really.", + "durability": null, + "name": "Pole", + "archery_ticket_price": "0", + "id": "4501", + "equipment_slot": "3" + }, + { + "remove_head": "true", + "shop_price": "3000", + "examine": "Quite ferocious looking.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "0", + "destroy_message": "Hamal, the Chieftain of the Mountain Camp, can replace this.", + "name": "Bearhead", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "4502", + "bonuses": "0,0,0,-3,-3,12,14,10,7,9,0,0,0,0,0" + }, + { + "requirements": "{0,20}", + "shop_price": "50", + "turn90cw_anim": "821", + "examine": "A very decorative sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "808", + "name": "Decorative sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4503", + "stand_turn_anim": "823", + "bonuses": "15,20,-2,0,0,0,3,2,0,0,0,22,0,0,0" + }, + { + "remove_sleeves": "true", + "requirements": "{1,20}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4504", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,20,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,20}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4505", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "40", + "examine": "A very decorative helm.", + "durability": null, + "name": "Decorative helm", + "weight": "1", + "archery_ticket_price": "0", + "id": "4506", + "bonuses": "0,0,0,-3,-1,10,11,9,-1,10,5,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,20}", + "shop_price": "60", + "examine": "A very decorative shield.", + "durability": null, + "name": "Decorative shield", + "archery_ticket_price": "0", + "id": "4507", + "bonuses": "0,0,0,-8,-2,18,22,20,-1,20,20,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{0,30}", + "shop_price": "50", + "turn90cw_anim": "821", + "examine": "A very decorative sword.", + "walk_anim": "819", + "durability": null, + "weight": "1", + "turn90ccw_anim": "822", + "weapon_interface": "6", + "turn180_anim": "820", + "render_anim": "1", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "stand_anim": "808", + "name": "Decorative sword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4508", + "stand_turn_anim": "823", + "bonuses": "20,29,-2,0,0,0,3,2,0,0,0,31,0,0,0" + }, + { + "remove_sleeves": "true", + "requirements": "{1,30}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4509", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,30}", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "4510", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "shop_price": "40", + "examine": "A very decorative helm.", + "durability": null, + "name": "Decorative helm", + "weight": "1", + "archery_ticket_price": "0", + "id": "4511", + "bonuses": "0,0,0,-3,-1,14,15,13,-1,14,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,30}", + "shop_price": "60", + "examine": "A very decorative shield.", + "durability": null, + "name": "Decorative shield", + "archery_ticket_price": "0", + "id": "4512", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0", + "equipment_slot": "5" + }, + { + "remove_head": "true", + "durability": null, + "name": "Castlewars hood", + "archery_ticket_price": "0", + "id": "4513", + "bonuses": "0,0,0,0,0,0,1,2,0,1,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Castlewars cloak", + "archery_ticket_price": "0", + "id": "4514", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "durability": null, + "name": "Castlewars hood", + "archery_ticket_price": "0", + "id": "4515", + "bonuses": "0,0,0,0,0,0,1,2,0,1,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Castlewars cloak", + "archery_ticket_price": "0", + "id": "4516", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "1000", + "examine": "This could feed a family of gnomes for a week!", + "grand_exchange_price": "970", + "durability": null, + "name": "Giant frog legs", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4517" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "970", + "durability": null, + "name": "Giant frog legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4518" + }, + { + "requirements": "{12,11}", + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Empty: An oil lamp with no oil in it.Filled: Not the genie sort.", + "grand_exchange_price": "1575", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4522" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1575", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4523" + }, + { + "shop_price": "10", + "examine": "Empty: An oil lamp with no oil in it.Filled: Not the genie sort.", + "grand_exchange_price": "2", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4524" + }, + { + "requirements": "{12,11}", + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Empty: An oil lamp with no oil in it.Filled: Not the genie sort.", + "grand_exchange_price": "2", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4525" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Oil lamp", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4526" + }, + { + "requirements": "{4,11}", + "ge_buy_limit": "100", + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "39", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4527" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "39", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4528" + }, + { + "requirements": "{4,11}", + "ge_buy_limit": "100", + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "431", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4529" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "431", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4530" + }, + { + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "1", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4531" + }, + { + "requirements": "{4,11}", + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "1", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4532" + }, + { + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4533" + }, + { + "examine": "Lit: A flickering candle in a glass cage.Unlit: a candle in a glass cage.Without candle: Put a candle in to complete it.", + "grand_exchange_price": "1", + "durability": null, + "name": "Candle lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4534" + }, + { + "requirements": "{11,26}", + "ge_buy_limit": "100", + "examine": "Unfuelled: Put oil in to complete it. Unlit: An unlit oil lantern. Lit: It lights your way through the dark places of the earth.", + "grand_exchange_price": "12", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4535" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4536" + }, + { + "requirements": "{11,26}", + "ge_buy_limit": "100", + "examine": "Unfuelled: Put oil in to complete it. Unlit: An unlit oil lantern. Lit: It lights your way through the dark places of the earth.", + "grand_exchange_price": "218", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4537" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "218", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4538" + }, + { + "examine": "Unfuelled: Put oil in to complete it. Unlit: An unlit oil lantern. Lit: It lights your way through the dark places of the earth.", + "grand_exchange_price": "198", + "durability": null, + "name": "Oil lantern", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4539" + }, + { + "shop_price": "43", + "ge_buy_limit": "100", + "examine": "Add the glass to complete.", + "grand_exchange_price": "8", + "durability": null, + "name": "Oil lantern frame", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4540" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Oil lantern frame", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4541" + }, + { + "shop_price": "88", + "ge_buy_limit": "100", + "examine": "A roughly circular disc of glass.", + "grand_exchange_price": "1", + "durability": null, + "name": "Lantern lens", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4542" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Lantern lens", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4543" + }, + { + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "You need to add a lens before you can use it.", + "grand_exchange_price": "88", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4544" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "88", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4545" + }, + { + "requirements": "{11,49}", + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "You need to add lamp oil before you can use it.", + "grand_exchange_price": "158", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4546" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "158", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4547" + }, + { + "requirements": "{11,49}", + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "A sturdy steel lantern.", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4548" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4549" + }, + { + "shop_price": "400", + "examine": "A sturdy steel lantern casting a bright beam.", + "grand_exchange_price": "1235", + "durability": null, + "name": "Bullseye lantern", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "4550" + }, + { + "remove_head": "true", + "requirements": "{1,5}-{18,35}", + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "weight": "2.2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "774", + "name": "Spiny helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4551", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "774", + "durability": null, + "name": "Spiny helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4552" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Blue sweets", + "archery_ticket_price": "0", + "id": "4558" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Deep blue sweets", + "archery_ticket_price": "0", + "id": "4559" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "White sweets", + "archery_ticket_price": "0", + "id": "4560" + }, + { + "examine": "Remember to brush after eating!", + "grand_exchange_price": "10037", + "durability": null, + "name": "Purple sweets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4561" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Red sweets", + "archery_ticket_price": "0", + "id": "4562" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Green sweets", + "archery_ticket_price": "0", + "id": "4563" + }, + { + "examine": "Remember to brush after eating!", + "durability": null, + "name": "Pink sweets", + "archery_ticket_price": "0", + "id": "4564" + }, + { + "bankable": "true", + "turn90cw_anim": "821", + "examine": "Hand them out to spread the Easter happiness.", + "walk_anim": "1836", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "822", + "weapon_interface": "12", + "turn180_anim": "820", + "render_anim": "594", + "equipment_slot": "3", + "fun_weapon": "true", + "stand_anim": "1837", + "name": "Basket of eggs", + "tradeable": "false", + "run_anim": "1836", + "archery_ticket_price": "0", + "id": "4565", + "stand_turn_anim": "823" + }, + { + "examine": "Perhaps not the most powerful weapon in RuneScape.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "12", + "defence_anim": "1834", + "equipment_slot": "3", + "attack_anims": "1833,1833,1833,1833", + "fun_weapon": "true", + "name": "Rubber chicken", + "archery_ticket_price": "0", + "id": "4566", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "remove_head": "true", + "examine": "Made of gold and white gold.", + "durability": null, + "name": "Gold helmet", + "weight": "31.7", + "archery_ticket_price": "0", + "id": "4567", + "bonuses": "0,0,0,0,0,0,10,20,0,10,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "This book is almost falling apart, you'll have to handle it quite carefully.", + "durability": null, + "name": "Dwarven lore", + "archery_ticket_price": "0", + "id": "4568" + }, + { + "examine": "A missing page from Rolad's book! It seems to be the first one.", + "durability": null, + "name": "Book page 1", + "archery_ticket_price": "0", + "id": "4569" + }, + { + "examine": "A missing page from Rolad's book! It seems to be the second one.", + "durability": null, + "name": "Book page 2", + "archery_ticket_price": "0", + "id": "4570" + }, + { + "examine": "A missing page from Rolad's book! It seems to be the third one.", + "durability": null, + "name": "Book page 3", + "archery_ticket_price": "0", + "id": "4571" + }, + { + "examine": "A collection of missing pages from Rolad's book!", + "durability": null, + "name": "Pages", + "archery_ticket_price": "0", + "id": "4572" + }, + { + "examine": "A collection of missing pages from Rolad's book!", + "durability": null, + "name": "Pages", + "archery_ticket_price": "0", + "id": "4573" + }, + { + "examine": "These are the base schematics of a dwarven multicannon.", + "durability": null, + "name": "Base schematics", + "archery_ticket_price": "0", + "id": "4574" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "536", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4580", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "536", + "durability": null, + "name": "Black spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4581" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "2808", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear(p)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4582", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2808", + "durability": null, + "name": "Black spear(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4583" + }, + { + "requirements": "{0,10}", + "turn90cw_anim": "1207", + "examine": "A Karambwan poisoned black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "309", + "stand_anim": "813", + "name": "Black spear(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4584", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "This looks pretty heavy.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "161000", + "name": "Dragon plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4585", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "161000", + "durability": null, + "name": "Dragon plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4586" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "65400", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4587", + "stand_turn_anim": "823", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0", + "requirements": "{0,60}", + "shop_price": "100000", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "lendable": "true", + "attack_audios": "2500,0,2517,0", + "name": "Dragon scimitar" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "65400", + "durability": null, + "name": "Dragon scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4588" + }, + { + "examine": "Keys to the Mayor's house. (The Feud)", + "durability": null, + "name": "Keys", + "archery_ticket_price": "0", + "id": "4589" + }, + { + "examine": "The Mayor of Pollnivneach's wife's jewels.", + "durability": null, + "name": "Jewels", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4590" + }, + { + "shop_price": "1", + "examine": "Wear it on your head.", + "durability": null, + "name": "Karidian headpiece", + "archery_ticket_price": "0", + "id": "4591" + }, + { + "shop_price": "1", + "examine": "Makes me itch.", + "durability": null, + "name": "Fake beard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4593" + }, + { + "shop_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4597" + }, + { + "shop_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4598" + }, + { + "shop_price": "1", + "examine": "A handy little club made out of oak.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "10", + "defence_anim": "425", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "name": "Oak-blackjack", + "archery_ticket_price": "0", + "id": "4599", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,2,0,0,0" + }, + { + "shop_price": "600", + "ge_buy_limit": "100", + "examine": "A handy little club made out of willow.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "defence_anim": "425", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "321", + "name": "Willow-blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4600", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,8,0,0,0" + }, + { + "examine": "Dung of the Camelus Horribleus variety.", + "durability": null, + "name": "Ugthanki dung", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4601" + }, + { + "examine": "Dung of the Camelus Horribleus variety.", + "durability": null, + "name": "Ugthanki dung", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "4602" + }, + { + "shop_price": "2", + "examine": "A receipt for one 'Camelus Horribleus", + "durability": null, + "name": "Receipt", + "archery_ticket_price": "0", + "id": "4603" + }, + { + "examine": "A red viscous liquid in a vial.", + "durability": null, + "name": "Hag's poison", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4604" + }, + { + "examine": "Makes a hissing sound.", + "durability": null, + "name": "Snake charm", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4605", + "equipment_slot": "3" + }, + { + "examine": "This is used to hold snakes.", + "durability": null, + "name": "Snake basket", + "archery_ticket_price": "0", + "id": "4606" + }, + { + "examine": "This basket contains a snake.", + "durability": null, + "name": "Snake basket full", + "weight": "1", + "archery_ticket_price": "0", + "id": "4607" + }, + { + "shop_price": "5", + "ge_buy_limit": "1000", + "examine": "A meaty and very hot kebab.", + "grand_exchange_price": "403", + "durability": null, + "name": "Super kebab", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "4608" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "403", + "durability": null, + "name": "Super kebab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4609" + }, + { + "examine": "The bottle feels warm.", + "durability": null, + "name": "Red hot sauce", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4610" + }, + { + "remove_head": "true", + "examine": "A disguise suitable for the desert.", + "durability": null, + "name": "Desert disguise", + "archery_ticket_price": "0", + "id": "4611", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Willow-blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4612" + }, + { + "shop_price": "75", + "examine": "It has a picture of a dragon on it.", + "durability": null, + "name": "Spinning plate", + "archery_ticket_price": "0", + "id": "4613" + }, + { + "examine": "Alas...", + "durability": null, + "name": "Broken plate", + "archery_ticket_price": "0", + "id": "4614" + }, + { + "examine": "An archaeologist's notes.", + "durability": null, + "name": "Varmen's notes", + "archery_ticket_price": "0", + "id": "4616" + }, + { + "examine": "The museum curator's key (The Golem).", + "durability": null, + "name": "Display cabinet key", + "archery_ticket_price": "0", + "id": "4617" + }, + { + "examine": "It's pretty, but you wish you knew what it was.", + "durability": null, + "name": "Strange implement", + "archery_ticket_price": "0", + "id": "4619" + }, + { + "examine": "It looks horrible.On ground: Not good for eating.", + "durability": null, + "name": "Black mushroom", + "weight": "1", + "archery_ticket_price": "0", + "id": "4620" + }, + { + "examine": "A long feather patterned like a flame.", + "durability": null, + "name": "Phoenix feather", + "archery_ticket_price": "0", + "id": "4621" + }, + { + "examine": "Black ink made out of mushrooms.", + "durability": null, + "name": "Black mushroom ink", + "weight": "1", + "archery_ticket_price": "0", + "id": "4622" + }, + { + "examine": "A phoenix feather dipped in ink.", + "durability": null, + "name": "Phoenix quill pen", + "archery_ticket_price": "0", + "id": "4623" + }, + { + "examine": "It reads 'YOUR TASK IS DONE'.", + "durability": null, + "name": "Golem program", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4624" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A cheeky little lager from the Bandit Camp.", + "grand_exchange_price": "1133", + "durability": null, + "name": "Bandit's brew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4627" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1133", + "durability": null, + "name": "Bandit's brew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4628" + }, + { + "examine": "A copy of the engravings found on a mysterious stone tablet.", + "durability": null, + "name": "Etchings", + "archery_ticket_price": "0", + "id": "4654" + }, + { + "examine": "A rough translation made from archaeological etchings.", + "durability": null, + "name": "Translation", + "weight": "1", + "archery_ticket_price": "0", + "id": "4655" + }, + { + "examine": "This key is unusally warm to the touch.", + "durability": null, + "name": "Warm key", + "archery_ticket_price": "0", + "id": "4656" + }, + { + "examine": "A ring that allows you to see things that are normally invisible.", + "durability": null, + "name": "Ring of visibility", + "archery_ticket_price": "0", + "id": "4657", + "equipment_slot": "12" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4658" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4659" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4660" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4661" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4662" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4663" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4664" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4665" + }, + { + "examine": "Frank's shiny silver coated pot.", + "durability": null, + "name": "Silver pot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4666" + }, + { + "examine": "A silver pot made by Ruantun and blessed on Entrana.", + "durability": null, + "name": "Blessed pot", + "weight": "2", + "archery_ticket_price": "0", + "id": "4667" + }, + { + "examine": "Finely ground garlic powder.", + "durability": null, + "name": "Garlic powder", + "archery_ticket_price": "0", + "id": "4668" + }, + { + "examine": "The Diamond of Blood.", + "durability": null, + "name": "Blood diamond", + "archery_ticket_price": "0", + "id": "4670" + }, + { + "examine": "The Diamond of Ice.", + "durability": null, + "name": "Ice diamond", + "archery_ticket_price": "0", + "id": "4671" + }, + { + "examine": "The Diamond of Smoke.", + "durability": null, + "name": "Smoke diamond", + "weight": "1", + "archery_ticket_price": "0", + "id": "4672" + }, + { + "examine": "The Diamond of Shadow.", + "durability": null, + "name": "Shadow diamond", + "weight": "1", + "archery_ticket_price": "0", + "id": "4673" + }, + { + "examine": "An old and strangely shaped metal cross.", + "durability": null, + "name": "Gilded cross", + "archery_ticket_price": "0", + "id": "4674" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A magical staff of ancient origin...", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "59300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4675", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,15,0,2,3,1,15,0,0,50,-1,0,0", + "requirements": "{0,50}-{6,50}", + "shop_price": "80000", + "durability": null, + "weight": "2.25", + "weapon_interface": "1", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2555,0,0,0", + "name": "Ancient staff" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "59300", + "durability": null, + "name": "Ancient staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4676" + }, + { + "examine": "It's an amulet of cat speak. It makes vague purring noises.", + "durability": null, + "name": "Catspeak amulet", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4677", + "equipment_slot": "2" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4678" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4679" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4680" + }, + { + "examine": "Varies. See Types", + "durability": null, + "name": "Canopic jar", + "weight": "4", + "archery_ticket_price": "0", + "id": "4681" + }, + { + "shop_price": "300", + "examine": "A blessed holy symbol of Saradomin.", + "grand_exchange_price": "112", + "durability": null, + "name": "Holy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4682", + "bonuses": "0,0,0,0,0,2,2,2,2,2,3,0,0,8,0" + }, + { + "shop_price": "135", + "examine": "An unholy symbol of Zamorak.", + "grand_exchange_price": "52", + "durability": null, + "name": "Unholy symbol", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4683", + "bonuses": "2,2,2,2,2,0,0,0,0,0,0,0,0,8,0" + }, + { + "shop_price": "30", + "examine": "One sheet of mummy wrap.", + "durability": null, + "name": "Linen", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4684" + }, + { + "examine": "Little book of embalming by Bod E. Wrapper.", + "durability": null, + "name": "Embalming manual", + "archery_ticket_price": "0", + "id": "4686" + }, + { + "examine": "It's a bucket of sap.", + "durability": null, + "name": "Bucket of sap", + "weight": "2", + "archery_ticket_price": "0", + "id": "4687" + }, + { + "examine": "A little heap of salt.", + "durability": null, + "name": "Pile of salt", + "archery_ticket_price": "0", + "id": "4689" + }, + { + "examine": "Miniature golden statue of a sphinx.", + "durability": null, + "name": "Sphinx's token", + "archery_ticket_price": "0", + "id": "4691" + }, + { + "shop_price": "130000", + "examine": "A very delicate sheet of gold.", + "grand_exchange_price": "132580", + "durability": null, + "name": "Gold leaf", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4692" + }, + { + "examine": "It's a bucket of salty water.", + "durability": null, + "name": "Full bucket", + "archery_ticket_price": "0", + "id": "4693" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Water and Fire Rune.", + "grand_exchange_price": "48", + "durability": null, + "name": "Steam rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4694" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined air and water rune.", + "grand_exchange_price": "249", + "durability": null, + "name": "Mist rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4695" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Air and Earth Rune.", + "grand_exchange_price": "20", + "durability": null, + "name": "Dust rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4696" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Air and Fire Rune.", + "grand_exchange_price": "148", + "durability": null, + "name": "Smoke rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4697" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined Earth and Water rune.", + "grand_exchange_price": "657", + "durability": null, + "name": "Mud rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4698" + }, + { + "shop_price": "11151", + "ge_buy_limit": "25000", + "examine": "A combined earth and fire rune.", + "grand_exchange_price": "49", + "durability": null, + "name": "Lava rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4699" + }, + { + "examine": "You need to add lamp oil before you can use it.", + "durability": null, + "name": "Sapphire lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4700" + }, + { + "examine": "A bullseye lantern with a sapphire for a lens.", + "durability": null, + "name": "Sapphire lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4701" + }, + { + "examine": "A lantern casting a bright blue beam.", + "durability": null, + "name": "Sapphire lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "4702" + }, + { + "shop_price": "975000", + "examine": "A magic stone to make high-level furniture.", + "grand_exchange_price": "977755", + "durability": null, + "name": "Magic stone", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "4703" + }, + { + "turn90cw_anim": "821", + "examine": "A magic stone bowl for catching the tears of Guthix.", + "walk_anim": "819", + "durability": null, + "destroy": "true", + "weight": "1.8", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "1", + "equipment_slot": "3", + "stand_anim": "808", + "name": "Stone bowl", + "tradeable": "false", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4704", + "stand_turn_anim": "823" + }, + { + "examine": "This book must be really old!", + "durability": null, + "name": "Crumbling tome", + "archery_ticket_price": "0", + "id": "4707" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's leather hood.", + "durability": null, + "rare_item": "true", + "weight": "0.9", + "absorb": "5,2,0", + "equipment_slot": "0", + "grand_exchange_price": "94300", + "name": "Ahrim's hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4708", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "94300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4709" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "69500", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4710", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0", + "requirements": "{0,70}-{6,70}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "69500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4711" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe top.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "10,5,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1000000", + "name": "Ahrim's robetop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4712", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1000000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's robetop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4713" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "durability": null, + "rare_item": "true", + "weight": "12", + "absorb": "7,3,0", + "equipment_slot": "7", + "grand_exchange_price": "1700000", + "name": "Ahrim's robeskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4714", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1700000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's robeskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4715" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's helm.", + "durability": "1", + "rare_item": "true", + "weight": "1", + "absorb": "2,0,5", + "equipment_slot": "0", + "grand_exchange_price": "1300000", + "name": "Dharok's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4716", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1300000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4717" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "rare_item": "true", + "turn90ccw_anim": "822", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "516900", + "stand_anim": "2065", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4718", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0", + "requirements": "{0,70}-{2,70}", + "durability": null, + "weight": "13", + "weapon_interface": "2", + "render_anim": "134", + "name": "Dharok's greataxe" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "516900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's greataxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4719" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's platebody armour.", + "durability": null, + "rare_item": "true", + "weight": "9.9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "511400", + "name": "Dharok's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4720", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "511400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4721" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's plate leg armour.", + "durability": null, + "rare_item": "true", + "weight": "10", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "748800", + "name": "Dharok's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4722", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "748800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4723" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's helm", + "durability": null, + "rare_item": "true", + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "396300", + "name": "Guthan's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4724", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "396300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4725" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "588400", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4726", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "2.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Guthan's warspear" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "588400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's warspear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4727" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's platebody armour.", + "durability": null, + "rare_item": "true", + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "316800", + "name": "Guthan's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4728", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "316800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4729" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's chainskirt.", + "durability": null, + "rare_item": "true", + "weight": "8", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "315600", + "name": "Guthan's chainskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4730", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "315600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's chainskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4731" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's coif.", + "durability": null, + "rare_item": "true", + "absorb": "0,5,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "38900", + "name": "Karil's coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4732", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "38900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4733" + }, + { + "ge_buy_limit": "1", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "rare_item": "true", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "2076", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "188000", + "stand_anim": "2074", + "tradeable": "true", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4734", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,70}", + "durability": null, + "weight": "2", + "weapon_interface": "17", + "render_anim": "372", + "attack_audios": "2700,0,0,0", + "name": "Karil's crossbow" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "188000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4735" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "10000", + "examine": "Karil the Tainted's leather body armour.", + "durability": null, + "rare_item": "true", + "weight": "6", + "absorb": "0,10,5", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1800000", + "name": "Karil's leathertop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4736", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1800000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's leathertop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4737" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "10000", + "examine": "Karil the Tainted's leather skirt.", + "durability": null, + "rare_item": "true", + "weight": "2", + "absorb": "0,7,3", + "equipment_slot": "7", + "grand_exchange_price": "217000", + "name": "Karil's leatherskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4738", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "217000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's leatherskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4739" + }, + { + "requirements": "{4,70}", + "shop_price": "420", + "ge_buy_limit": "10000", + "examine": "Must need a special type of crossbow to use this.", + "grand_exchange_price": "238", + "durability": null, + "name": "Bolt rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4740", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,55", + "equipment_slot": "13" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "139000", + "name": "Torag's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4745", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "139000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4746" + }, + { + "requirements": "{0,70}-{2,70}", + "ge_buy_limit": "1000", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "rare_item": "true", + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "111600", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4747", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "111600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's hammers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4748" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's platebody armour.", + "durability": null, + "rare_item": "true", + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "346200", + "name": "Torag's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4749", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "346200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4750" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's plate leg armour.", + "durability": null, + "rare_item": "true", + "weight": "9", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "427200", + "name": "Torag's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4751", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "427200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4752" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's helm.", + "durability": null, + "rare_item": "true", + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "687200", + "name": "Verac's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4753", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "687200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4754" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "rare_item": "true", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "2060", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "135500", + "stand_anim": "1832", + "tradeable": "true", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4755", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "2", + "weapon_interface": "8", + "render_anim": "1426", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "135500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's flail", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4756" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's brassard.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "270000", + "name": "Verac's brassard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4757", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "270000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's brassard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4758" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's plate skirt.", + "durability": null, + "rare_item": "true", + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "7", + "grand_exchange_price": "411400", + "name": "Verac's plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4759", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "411400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4760" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt bronze arrow...ouch", + "grand_exchange_price": "39", + "durability": null, + "name": "Bronze brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4773", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,11", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt iron arrow...ouch", + "grand_exchange_price": "14", + "durability": null, + "name": "Iron brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4778", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,13", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt steel arrow...ouch", + "grand_exchange_price": "20", + "durability": null, + "name": "Steel brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4783", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,19", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt black arrow...ouch", + "grand_exchange_price": "63", + "durability": null, + "name": "Black brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4788", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "20", + "ge_buy_limit": "1000", + "examine": "Blunt mithril arrow...ouch", + "grand_exchange_price": "80", + "durability": null, + "name": "Mithril brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4793", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,34", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "Blunt adamant arrow...ouch", + "grand_exchange_price": "154", + "durability": null, + "name": "Adamant brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4798", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,45", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "180", + "ge_buy_limit": "1000", + "examine": "Blunt rune arrow...ouch", + "grand_exchange_price": "188", + "durability": null, + "name": "Rune brutal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4803", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "examine": "A very black prism.", + "durability": null, + "name": "Black prism", + "archery_ticket_price": "0", + "id": "4808" + }, + { + "examine": "A half torn necromantic page.", + "durability": null, + "name": "Torn page", + "archery_ticket_price": "0", + "id": "4809" + }, + { + "examine": "It's about to fall apart.", + "durability": null, + "name": "Ruined backpack", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "4810" + }, + { + "examine": "A white ceramic mug with a dragon insignia.", + "durability": null, + "name": "Dragon inn tankard", + "archery_ticket_price": "0", + "id": "4811" + }, + { + "ge_buy_limit": "10000", + "examine": "A pile of Zombie Ogre bones.", + "grand_exchange_price": "1167", + "durability": null, + "name": "Zogre bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4812" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1167", + "durability": null, + "name": "Zogre bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4813" + }, + { + "examine": "A classic realist charcoal portrait of Sithik.", + "durability": null, + "name": "Sithik portrait", + "archery_ticket_price": "0", + "id": "4814" + }, + { + "examine": "A classic realist charcoal portrait of Sithik.", + "durability": null, + "name": "Sithik portrait", + "archery_ticket_price": "0", + "id": "4815" + }, + { + "examine": "A signed classic realist charcoal portrait of Sithik.", + "durability": null, + "name": "Signed portrait", + "archery_ticket_price": "0", + "id": "4816" + }, + { + "examine": "A book explaining the art of portraiture.", + "durability": null, + "name": "Book of portraiture", + "weight": "1", + "archery_ticket_price": "0", + "id": "4817", + "equipment_slot": "5" + }, + { + "examine": "An ancient ogre artefact-resembling a large heavy helm.", + "durability": null, + "name": "Ogre artefact", + "archery_ticket_price": "0", + "id": "4818" + }, + { + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "16", + "durability": null, + "name": "Bronze nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4819" + }, + { + "shop_price": "33", + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "16", + "durability": null, + "name": "Iron nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4820" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "13", + "durability": null, + "name": "Black nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4821" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "35", + "durability": null, + "name": "Mithril nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4822" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "87", + "durability": null, + "name": "Adamantite nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4823" + }, + { + "ge_buy_limit": "10000", + "examine": "Keeps things in place fairly permanently.", + "grand_exchange_price": "114", + "durability": null, + "name": "Rune nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4824" + }, + { + "ge_buy_limit": "100", + "examine": "An unstrung composite ogre bow.", + "grand_exchange_price": "447", + "durability": null, + "name": "Unstrung comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4825" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "447", + "durability": null, + "name": "Unstrung comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4826" + }, + { + "requirements": "{4,30}", + "shop_price": "180", + "ge_buy_limit": "100", + "examine": "A composite ogre bow.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "225", + "attack_audios": "2700,0,0,0", + "name": "Comp ogre bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4827", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "225", + "durability": null, + "name": "Comp ogre bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4828" + }, + { + "examine": "A book of H.A.M. affiliation", + "durability": null, + "name": "Book of 'h.a.m", + "archery_ticket_price": "0", + "id": "4829", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "examine": "Ancient ogre bones from the ogre burial tomb.", + "grand_exchange_price": "5931", + "durability": null, + "name": "Fayrg bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4830" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "5931", + "durability": null, + "name": "Fayrg bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4831" + }, + { + "ge_buy_limit": "10000", + "examine": "Ancient ogre bones from the ogre burial tomb.", + "grand_exchange_price": "7093", + "durability": null, + "name": "Raurg bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4832" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "7093", + "durability": null, + "name": "Raurg bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4833" + }, + { + "ge_buy_limit": "10000", + "examine": "Ancient ogre bones from the burial tomb.", + "grand_exchange_price": "16300", + "durability": null, + "name": "Ourg bones", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "4834" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "16300", + "durability": null, + "name": "Ourg bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4835" + }, + { + "examine": "Some strange liquid given to you by Zavistic Rarve.", + "durability": null, + "name": "Strange potion", + "archery_ticket_price": "0", + "id": "4836" + }, + { + "examine": "A book of necromantic spells.", + "durability": null, + "name": "Necromancy book", + "archery_ticket_price": "0", + "id": "4837", + "equipment_slot": "5" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "4838" + }, + { + "examine": "A key to some sort of special tomb area.", + "durability": null, + "name": "Ogre gate key", + "archery_ticket_price": "0", + "id": "4839" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this rogue's purse potion.", + "grand_exchange_price": "2194", + "durability": null, + "name": "Rogue's purse potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4840" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2194", + "durability": null, + "name": "Rogue's purse potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4841" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "4 doses of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "1430", + "durability": null, + "name": "Relicym's balm(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4842" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1430", + "durability": null, + "name": "Relicym's balm(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4843" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "3 doses of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "654", + "durability": null, + "name": "Relicym's balm(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4844" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "654", + "durability": null, + "name": "Relicym's balm(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4845" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "2 doses of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "325", + "durability": null, + "name": "Relicym's balm(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4846" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "325", + "durability": null, + "name": "Relicym's balm(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4847" + }, + { + "shop_price": "200", + "ge_buy_limit": "1000", + "examine": "1 dose of Relicym's balm, which helps cure disease.", + "grand_exchange_price": "204", + "durability": null, + "name": "Relicym's balm(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4848" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "204", + "durability": null, + "name": "Relicym's balm(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4849" + }, + { + "ge_buy_limit": "100", + "examine": "A key which opens a coffin!", + "grand_exchange_price": "1963", + "durability": null, + "name": "Ogre coffin key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4850" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1963", + "durability": null, + "name": "Ogre coffin key", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4851" + }, + { + "examine": "A pot of crushed fayrg bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4852" + }, + { + "examine": "A pot of crushed raurg bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4853" + }, + { + "examine": "A pot of crushed ourg bones.", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4854" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "4855" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 100", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4856", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 75", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4857", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 50", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4858", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's leather hood.", + "grand_exchange_price": "77678", + "durability": null, + "name": "Ahrim's hood 25", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "4859", + "absorb": "5,2,0", + "bonuses": "0,0,0,6,-2,15,13,16,6,0,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's leather hood.", + "durability": null, + "weight": "0.9", + "absorb": "5,2,0", + "equipment_slot": "0", + "grand_exchange_price": "51700", + "name": "Ahrim's hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4860" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "51700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4861" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 100", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4862", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 75", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4863", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 50", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4864", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "50655", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 25", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4865", + "stand_turn_anim": "1209", + "bonuses": "12,-1,65,15,0,3,5,2,15,0,0,68,0,0,0" + }, + { + "requirements": "{0,70}-{6,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Ahrim the Blighted's quarterstaff.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "50600", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Ahrim's staff 0", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4866", + "stand_turn_anim": "1209" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "50600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's staff 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4867" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 100", + "weight": "5", + "archery_ticket_price": "0", + "id": "4868", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 75", + "weight": "5", + "archery_ticket_price": "0", + "id": "4869", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 50", + "weight": "5", + "archery_ticket_price": "0", + "id": "4870", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "remove_sleeves": "true", + "examine": "Ahrim the Blighted's armoured robe top.", + "grand_exchange_price": "1458307", + "durability": null, + "name": "Ahrim's top 25", + "weight": "5", + "archery_ticket_price": "0", + "id": "4871", + "absorb": "10,5,0", + "bonuses": "0,0,0,30,-10,52,37,63,30,0,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe top.", + "durability": null, + "weight": "5", + "absorb": "10,5,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1100000", + "name": "Ahrim's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4872" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1100000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4873" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 100", + "weight": "12", + "archery_ticket_price": "0", + "id": "4874", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 75", + "weight": "12", + "archery_ticket_price": "0", + "id": "4875", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 50", + "weight": "12", + "archery_ticket_price": "0", + "id": "4876", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1561591", + "durability": null, + "name": "Ahrim's skirt 25", + "weight": "12", + "archery_ticket_price": "0", + "id": "4877", + "absorb": "7,3,0", + "bonuses": "0,0,0,22,-7,33,30,36,22,0,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Ahrim the Blighted's armoured robe skirt.", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Ahrim's skirt 0", + "tradeable": "true", + "weight": "12", + "archery_ticket_price": "0", + "id": "4878", + "absorb": "7,3,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1500000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ahrim's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4879" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 100", + "weight": "1", + "archery_ticket_price": "0", + "id": "4880", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 75", + "weight": "1", + "archery_ticket_price": "0", + "id": "4881", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 50", + "weight": "1", + "archery_ticket_price": "0", + "id": "4882", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Dharok the Wretched's helm.", + "grand_exchange_price": "1355582", + "durability": null, + "name": "Dharok's helm 25", + "weight": "1", + "archery_ticket_price": "0", + "id": "4883", + "absorb": "2,0,5", + "bonuses": "0,0,0,-3,-1,45,48,44,-1,51,15,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "equipment_slot": "0", + "grand_exchange_price": "1300000", + "name": "Dharok's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4884" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1300000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4885" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 100", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4886", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 75", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4887", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 50", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4888", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "defence_anim": "424", + "render_anim": "134", + "equipment_slot": "3", + "attack_anims": "2067,2067,2066,2067", + "grand_exchange_price": "454500", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "name": "Dharok's axe 25", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4889", + "stand_turn_anim": "823", + "bonuses": "-4,103,95,-4,0,0,0,0,0,-1,0,105,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "2064", + "examine": "Dharok the Wretched's greataxe.", + "walk_anim": "2064", + "durability": null, + "weight": "13", + "turn90ccw_anim": "2064", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "2", + "turn180_anim": "2064", + "render_anim": "134", + "equipment_slot": "3", + "grand_exchange_price": "442600", + "stand_anim": "2065", + "attack_audios": "1320,0,0,0", + "tradeable": "true", + "name": "Dharok's axe 0", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "4890", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "442600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's axe 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4891" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 100", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4892", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 75", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4893", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 50", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4894", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Dharok the Wretched's platebody armour.", + "grand_exchange_price": "481600", + "durability": null, + "name": "Dharok's body 25", + "weight": "9.9", + "archery_ticket_price": "0", + "id": "4895", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's platebody armour.", + "durability": null, + "weight": "9.9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "438200", + "name": "Dharok's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4896" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "438200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4897" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 100", + "weight": "10", + "archery_ticket_price": "0", + "id": "4898", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 75", + "weight": "10", + "archery_ticket_price": "0", + "id": "4899", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 50", + "weight": "10", + "archery_ticket_price": "0", + "id": "4900", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "897451", + "durability": null, + "name": "Dharok's legs 25", + "weight": "10", + "archery_ticket_price": "0", + "id": "4901", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Dharok the Wretched's plate leg armour.", + "grand_exchange_price": "676000", + "durability": null, + "name": "Dharok's legs 0", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "4902", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "676000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dharok's legs 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4903" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 100", + "archery_ticket_price": "0", + "id": "4904", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 75", + "archery_ticket_price": "0", + "id": "4905", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 50", + "archery_ticket_price": "0", + "id": "4906", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "232455", + "name": "Guthan's helm 25", + "archery_ticket_price": "0", + "id": "4907", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's helm", + "durability": null, + "weight": "2", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "368200", + "name": "Guthan's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4908" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "368200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4909" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 100", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4910", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 75", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4911", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 50", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4912", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "defence_anim": "2079", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "371782", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "name": "Guthan's spear 25", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4913", + "stand_turn_anim": "1209", + "bonuses": "75,75,75,0,0,7,7,7,0,0,0,75,0,0,0" + }, + { + "requirements": "{0,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "Guthan the Infested's warspear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "379500", + "stand_anim": "813", + "attack_audios": "1316,0,0,0", + "tradeable": "true", + "name": "Guthan's spear 0", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "4914", + "stand_turn_anim": "1209" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "379500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's spear 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4915" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 100", + "weight": "9", + "archery_ticket_price": "0", + "id": "4916", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 75", + "weight": "9", + "archery_ticket_price": "0", + "id": "4917", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 50", + "weight": "9", + "archery_ticket_price": "0", + "id": "4918", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Guthan the Infested's platebody armour.", + "grand_exchange_price": "241605", + "durability": null, + "name": "Guthan's body 25", + "weight": "9", + "archery_ticket_price": "0", + "id": "4919", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's platebody armour.", + "durability": null, + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "245900", + "name": "Guthan's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4920" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "245900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4921" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 100", + "weight": "8", + "archery_ticket_price": "0", + "id": "4922", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 75", + "weight": "8", + "archery_ticket_price": "0", + "id": "4923", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 50", + "weight": "8", + "archery_ticket_price": "0", + "id": "4924", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "224030", + "durability": null, + "name": "Guthan's skirt 25", + "weight": "8", + "archery_ticket_price": "0", + "id": "4925", + "absorb": "3,0,7", + "bonuses": "0,0,0,-14,-7,75,72,73,-4,82,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Guthan the Infested's chainskirt.", + "grand_exchange_price": "240900", + "durability": null, + "name": "Guthan's skirt 0", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "4926", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "240900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Guthan's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4927" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 100", + "archery_ticket_price": "0", + "id": "4928", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 75", + "archery_ticket_price": "0", + "id": "4929", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 50", + "archery_ticket_price": "0", + "id": "4930", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's coif.", + "grand_exchange_price": "7520", + "durability": null, + "name": "Karil's coif 25", + "archery_ticket_price": "0", + "id": "4931", + "absorb": "0,5,2", + "bonuses": "0,0,0,-1,3,6,9,12,6,10,15,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's coif.", + "durability": null, + "absorb": "0,5,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "7557", + "name": "Karil's coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4932" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "7557", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4933" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 100", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4934", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 75", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4935", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 50", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4936", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "defence_anim": "424", + "render_anim": "372", + "equipment_slot": "3", + "attack_anims": "2075,2075,2075,2075", + "grand_exchange_price": "108029", + "stand_anim": "2074", + "attack_audios": "2700,0,0,0", + "name": "Karil's x-bow 25", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4937", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "2076", + "examine": "Karil the Tainted's repeating crossbow.", + "walk_anim": "2076", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2076", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "17", + "turn180_anim": "2076", + "render_anim": "372", + "equipment_slot": "3", + "grand_exchange_price": "106300", + "stand_anim": "2074", + "name": "Karil's x-bow 0", + "tradeable": "true", + "run_anim": "2077", + "archery_ticket_price": "0", + "id": "4938", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "106300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's x-bow 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4939" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 100", + "weight": "6", + "archery_ticket_price": "0", + "id": "4940", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 75", + "weight": "6", + "archery_ticket_price": "0", + "id": "4941", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 50", + "weight": "6", + "archery_ticket_price": "0", + "id": "4942", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "remove_sleeves": "true", + "examine": "Karil the Tainted's leather body armour.", + "grand_exchange_price": "983428", + "durability": null, + "name": "Karil's top 25", + "weight": "6", + "archery_ticket_price": "0", + "id": "4943", + "absorb": "0,10,5", + "bonuses": "0,0,0,-15,30,47,42,50,65,57,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's leather body armour.", + "durability": null, + "weight": "6", + "absorb": "0,10,5", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1500000", + "name": "Karil's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4944" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "1500000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4945" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 100", + "weight": "2", + "archery_ticket_price": "0", + "id": "4946", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 75", + "weight": "2", + "archery_ticket_price": "0", + "id": "4947", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 50", + "weight": "2", + "archery_ticket_price": "0", + "id": "4948", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "85135", + "durability": null, + "name": "Karil's skirt 25", + "weight": "2", + "archery_ticket_price": "0", + "id": "4949", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,26,20,28,35,33,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "Karil the Tainted's leather skirt.", + "grand_exchange_price": "153100", + "durability": null, + "name": "Karil's skirt 0", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "4950", + "absorb": "0,7,3", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "153100", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karil's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4951" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 100", + "archery_ticket_price": "0", + "id": "4952", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 75", + "archery_ticket_price": "0", + "id": "4953", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 50", + "archery_ticket_price": "0", + "id": "4954", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "71798", + "name": "Torag's helm 25", + "archery_ticket_price": "0", + "id": "4955", + "bonuses": "0,0,0,-6,-2,55,58,54,-1,62,15,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's helm.", + "durability": null, + "weight": "5", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "78200", + "name": "Torag's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4956" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "78200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4957" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 100", + "archery_ticket_price": "0", + "id": "4958", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 75", + "archery_ticket_price": "0", + "id": "4959", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 50", + "archery_ticket_price": "0", + "id": "4960", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2068,2068,2068,2068", + "grand_exchange_price": "95800", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 25", + "archery_ticket_price": "0", + "id": "4961", + "bonuses": "-4,-4,85,-4,0,0,0,0,0,0,0,72,0,0,0" + }, + { + "requirements": "{0,70}-{2,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's twin hammers.", + "durability": null, + "weight": "3", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "95600", + "attack_audios": "1332,0,0,0", + "name": "Torag's hammer 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4962" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's hammer 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4963" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 100", + "weight": "9", + "archery_ticket_price": "0", + "id": "4964", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 75", + "weight": "9", + "archery_ticket_price": "0", + "id": "4965", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 50", + "weight": "9", + "archery_ticket_price": "0", + "id": "4966", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Torag the Corrupted's platebody armour.", + "grand_exchange_price": "297733", + "durability": null, + "name": "Torag's body 25", + "weight": "9", + "archery_ticket_price": "0", + "id": "4967", + "absorb": "5,0,10", + "bonuses": "0,0,0,-30,-10,122,120,107,-6,132,60,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's platebody armour.", + "durability": null, + "weight": "9", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "271600", + "name": "Torag's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4968" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "271600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's body 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4969" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 100", + "weight": "9", + "archery_ticket_price": "0", + "id": "4970", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 75", + "weight": "9", + "archery_ticket_price": "0", + "id": "4971", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 50", + "weight": "9", + "archery_ticket_price": "0", + "id": "4972", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "384813", + "durability": null, + "name": "Torag's legs 25", + "weight": "9", + "archery_ticket_price": "0", + "id": "4973", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,-4,92,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Torag the Corrupted's plate leg armour.", + "grand_exchange_price": "371300", + "durability": null, + "name": "Torag's legs 0", + "tradeable": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "4974", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "371300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Torag's legs 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4975" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 100", + "archery_ticket_price": "0", + "id": "4976", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 75", + "archery_ticket_price": "0", + "id": "4977", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 50", + "archery_ticket_price": "0", + "id": "4978", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "459537", + "name": "Verac's helm 25", + "archery_ticket_price": "0", + "id": "4979", + "bonuses": "0,0,0,-6,-2,55,58,54,0,56,15,0,3,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's helm.", + "durability": null, + "weight": "1", + "absorb": "2,0,5", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "648900", + "name": "Verac's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4980" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "648900", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's helm 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4981" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 100", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4982", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 75", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4983", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 50", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4984", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "defence_anim": "424", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "2062,2062,2062,2062", + "grand_exchange_price": "95474", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "name": "Verac's flail 25", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4985", + "stand_turn_anim": "823", + "bonuses": "68,-2,82,0,0,0,0,0,0,0,0,72,6,0,0" + }, + { + "requirements": "{0,70}", + "ge_buy_limit": "10", + "turn90cw_anim": "2060", + "examine": "Verac the Defiled's flail.", + "walk_anim": "1830", + "durability": null, + "weight": "2", + "turn90ccw_anim": "2060", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "2060", + "render_anim": "1426", + "equipment_slot": "3", + "grand_exchange_price": "95500", + "stand_anim": "1832", + "attack_audios": "1323,0,0,0", + "tradeable": "true", + "name": "Verac's flail 0", + "run_anim": "1831", + "archery_ticket_price": "0", + "id": "4986", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95500", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's flail 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4987" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 100", + "weight": "5", + "archery_ticket_price": "0", + "id": "4988", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 75", + "weight": "5", + "archery_ticket_price": "0", + "id": "4989", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 50", + "weight": "5", + "archery_ticket_price": "0", + "id": "4990", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "remove_sleeves": "true", + "examine": "Verac the Defiled's brassard.", + "grand_exchange_price": "177963", + "durability": null, + "name": "Verac's top 25", + "weight": "5", + "archery_ticket_price": "0", + "id": "4991", + "absorb": "5,0,10", + "bonuses": "0,0,0,-6,-2,81,95,85,0,81,60,0,5,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's brassard.", + "durability": null, + "weight": "5", + "absorb": "5,0,10", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "174000", + "name": "Verac's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4992" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "174000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4993" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 100", + "weight": "5", + "archery_ticket_price": "0", + "id": "4994", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 75", + "weight": "5", + "archery_ticket_price": "0", + "id": "4995", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 50", + "weight": "5", + "archery_ticket_price": "0", + "id": "4996", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "297540", + "durability": null, + "name": "Verac's skirt 25", + "weight": "5", + "archery_ticket_price": "0", + "id": "4997", + "absorb": "3,0,7", + "bonuses": "0,0,0,-21,-7,85,82,83,0,84,30,0,4,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{1,70}", + "ge_buy_limit": "10", + "examine": "Verac the Defiled's plate skirt.", + "grand_exchange_price": "321600", + "durability": null, + "name": "Verac's skirt 0", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "4998", + "absorb": "3,0,7", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "321600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Verac's skirt 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "4999" + }, + { + "ge_buy_limit": "1000", + "examine": "It's incredibly slimy.", + "grand_exchange_price": "373", + "durability": null, + "name": "Raw cave eel", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5001" + }, + { + "ge_buy_limit": "1000", + "examine": "It's a bit slimy.", + "grand_exchange_price": "164", + "durability": null, + "name": "Cave eel", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5003" + }, + { + "examine": "That's disgusting!", + "durability": null, + "name": "Frog spawn", + "archery_ticket_price": "0", + "id": "5004" + }, + { + "durability": null, + "name": "Raw cave eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5005" + }, + { + "durability": null, + "name": "Burnt cave eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5006" + }, + { + "durability": null, + "name": "Cave eel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5007" + }, + { + "examine": "A book about the ancient goblin tribes.", + "durability": null, + "name": "Goblin symbol book", + "weight": "1", + "archery_ticket_price": "0", + "id": "5009" + }, + { + "examine": "You found the Lumbridge silverware in the HAM cave.", + "durability": null, + "name": "Silverware", + "archery_ticket_price": "0", + "id": "5011" + }, + { + "examine": "A peace treaty between Lumbridge and the Cave Goblins.", + "durability": null, + "name": "Peace treaty", + "archery_ticket_price": "0", + "id": "5012" + }, + { + "shop_price": "900", + "examine": "A helmet with a lamp on it.", + "grand_exchange_price": "380", + "durability": null, + "name": "Mining helmet", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5013", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{11,65}", + "shop_price": "900", + "ge_buy_limit": "100", + "examine": "A helmet with an unlit lamp on it.", + "durability": null, + "weight": "1", + "equipment_slot": "0", + "grand_exchange_price": "342", + "name": "Mining helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5014", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "342", + "durability": null, + "name": "Mining helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5015" + }, + { + "ge_buy_limit": "100", + "shop_price": "600", + "turn90cw_anim": "1207", + "examine": "Basic but brutal!", + "walk_anim": "1205", + "durability": null, + "weight": "1.3", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "two_handed": "false", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "219", + "stand_anim": "813", + "tradeable": "true", + "name": "Bone spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5016", + "stand_turn_anim": "1209", + "bonuses": "11,11,11,0,0,1,1,0,0,0,0,13,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5017" + }, + { + "shop_price": "600", + "ge_buy_limit": "100", + "examine": "Basic but brutal!", + "durability": null, + "weight": "0.9", + "attack_speed": "6", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "384", + "name": "Bone club", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5018", + "bonuses": "-4,-4,16,-4,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone club", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5019" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5020" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5021" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5022" + }, + { + "shop_price": "150", + "examine": "A ticket to take you from the dwarven mines under Ice Mountain to Keldagrim.", + "durability": null, + "name": "Minecart ticket", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5023" + }, + { + "remove_sleeves": "true", + "shop_price": "812", + "ge_buy_limit": "100", + "examine": "Far too small to wear.", + "grand_exchange_price": "710", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5024", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "710", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5025" + }, + { + "remove_sleeves": "true", + "shop_price": "812", + "ge_buy_limit": "100", + "examine": "Yellow top, too small for me.", + "grand_exchange_price": "908", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5026", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "908", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5027" + }, + { + "remove_sleeves": "true", + "shop_price": "812", + "ge_buy_limit": "100", + "examine": "Blue top, very tiny.", + "grand_exchange_price": "1357", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5028", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1357", + "durability": null, + "name": "Woven top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5029" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "867", + "examine": "Tiny!", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5030", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "867", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5031" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "1023", + "examine": "Tiny!", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5032", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1023", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5033" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "1282", + "examine": "Tiny!", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5034", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1282", + "durability": null, + "name": "Shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5035" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "746", + "examine": "A pair of long dwarven trousers... long for dwarves, of course.", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5036", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "746", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5037" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "378", + "examine": "A pair of long dwarven trousers... long for dwarves, of course.", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5038", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "378", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5039" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "442", + "examine": "A pair of long dwarven trousers... long for dwarves, of course.", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5040", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "442", + "durability": null, + "name": "Trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5041" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "examine": "These look great, on dwarves!", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5042", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1191", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5043" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1229", + "examine": "Yellow shorts. Far too small for you.", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5044", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1229", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5045" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2582", + "examine": "Blue shorts, these would look great on dwarves!", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5046", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2582", + "durability": null, + "name": "Shorts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5047" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "681", + "examine": "A brown skirt. Size small!", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5048", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "681", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5049" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1151", + "examine": "A blue skirt.", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5050", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1151", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5051" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "803", + "examine": "Lilac skirt.", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5052", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "803", + "durability": null, + "name": "Skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5053" + }, + { + "examine": "A short angry guy.", + "durability": null, + "name": "Dwarf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5054" + }, + { + "durability": null, + "name": "Dwarf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5055" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5056" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5057" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5058" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5059" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5060", + "equipment_slot": "3" + }, + { + "examine": "This looks very rusty and worn;", + "durability": null, + "name": "Dwarven battleaxe", + "archery_ticket_price": "0", + "id": "5061", + "equipment_slot": "3" + }, + { + "examine": "One of a pair I assume.", + "durability": null, + "name": "Left boot", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5062" + }, + { + "examine": "A good looking boot, for the right foot. Literally.", + "durability": null, + "name": "Right boot", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5063" + }, + { + "examine": "A lovely pair of boots.", + "durability": null, + "name": "Exquisite boots", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5064" + }, + { + "examine": "An old library book. It bears the title 'Scholars to Dwarven Costumes'.", + "durability": null, + "name": "Book on costumes", + "archery_ticket_price": "0", + "id": "5065" + }, + { + "examine": "These notes are from a meeting of the Keldagrim Consortium.", + "durability": null, + "name": "Meeting notes", + "archery_ticket_price": "0", + "id": "5066" + }, + { + "examine": "Clothes for the sculptor's model.", + "durability": null, + "name": "Exquisite clothes", + "archery_ticket_price": "0", + "id": "5067" + }, + { + "examine": "A master at farming.", + "durability": null, + "name": "Master farmer", + "archery_ticket_price": "0", + "id": "5068" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5070" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5071" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5072" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5073" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5074" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5075" + }, + { + "examine": "A red bird's egg.", + "durability": null, + "name": "Bird's egg", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5076" + }, + { + "examine": "A blue bird's egg.", + "durability": null, + "name": "Bird's egg", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5077" + }, + { + "examine": "A green bird's egg.", + "durability": null, + "name": "Bird's egg", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "5078" + }, + { + "requirements": "{2,19}", + "shop_price": "84", + "ge_buy_limit": "100", + "examine": "A marigold seed - plant in flower patch.", + "grand_exchange_price": "8", + "durability": null, + "name": "Marigold seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5096" + }, + { + "requirements": "{11,19}", + "shop_price": "98", + "ge_buy_limit": "100", + "examine": "A rosemary seed - plant in flower patch.", + "grand_exchange_price": "3", + "durability": null, + "name": "Rosemary seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5097" + }, + { + "requirements": "{24,19}", + "shop_price": "14", + "ge_buy_limit": "100", + "examine": "A nasturtium seed - plant in flower patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Nasturtium seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5098" + }, + { + "requirements": "{19,25}", + "ge_buy_limit": "100", + "examine": "A woad seed - plant in flower patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Woad seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5099" + }, + { + "requirements": "{19,26}", + "shop_price": "70", + "ge_buy_limit": "100", + "examine": "A limpwurt seed - plant in flower patch.", + "grand_exchange_price": "273", + "durability": null, + "name": "Limpwurt seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5100" + }, + { + "requirements": "{10,19}", + "ge_buy_limit": "100", + "examine": "A redberry seed - Plant in a bush patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Redberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5101" + }, + { + "requirements": "{22,19}", + "ge_buy_limit": "100", + "examine": "A cadavaberry seed - Plant in a bush patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Cadavaberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5102" + }, + { + "requirements": "{19,36}", + "ge_buy_limit": "100", + "examine": "A dwellberry seed - Plant in a bush patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Dwellberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5103" + }, + { + "requirements": "{19,48}", + "shop_price": "22", + "ge_buy_limit": "100", + "examine": "A jangerberry bush seed - plant in a bush patch.", + "grand_exchange_price": "2", + "durability": null, + "name": "Jangerberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5104" + }, + { + "requirements": "{19,59}", + "ge_buy_limit": "100", + "examine": "A whiteberry bush seed - plant in a bush patch.", + "grand_exchange_price": "8", + "durability": null, + "name": "Whiteberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5105" + }, + { + "requirements": "{19,70}", + "ge_buy_limit": "100", + "examine": "A poison ivy bush seed - plant in a bush patch.", + "grand_exchange_price": "38", + "durability": null, + "name": "Poison ivy seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5106" + }, + { + "requirements": "{19,55}", + "shop_price": "29", + "ge_buy_limit": "100", + "examine": "A Cactus seed - plant in a cactus patch.", + "grand_exchange_price": "10", + "durability": null, + "name": "Cactus seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5280" + }, + { + "requirements": "{19,63}", + "ge_buy_limit": "100", + "examine": "Also known as Deadly Nightshade - plant in a belladonna patch.", + "grand_exchange_price": "24", + "durability": null, + "name": "Belladonna seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5281" + }, + { + "requirements": "{19,53}", + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Mushroom spore", + "archery_ticket_price": "0", + "id": "5282" + }, + { + "requirements": "{19,27}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "4", + "durability": null, + "name": "Apple tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5283" + }, + { + "requirements": "{19,33}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "5", + "durability": null, + "name": "Banana tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5284" + }, + { + "requirements": "{19,39}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "30", + "durability": null, + "name": "Orange tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5285" + }, + { + "requirements": "{19,42}", + "ge_buy_limit": "100", + "examine": "Plant this in a plant pot of soil to grow a sapling.", + "grand_exchange_price": "265", + "durability": null, + "name": "Curry tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5286" + }, + { + "requirements": "{19,51}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "13700", + "durability": null, + "name": "Pineapple seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5287" + }, + { + "requirements": "{19,57}", + "ge_buy_limit": "100", + "examine": "Plant this in a plant pot of soil to grow a sapling.", + "grand_exchange_price": "41200", + "durability": null, + "name": "Papaya tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5288" + }, + { + "requirements": "{19,68}", + "shop_price": "35000", + "ge_buy_limit": "100", + "examine": "Plant in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "105100", + "durability": null, + "name": "Palm tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5289" + }, + { + "requirements": "{19,72}", + "shop_price": "35000", + "ge_buy_limit": "100", + "examine": "Plant in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "32000", + "durability": null, + "name": "Calquat tree seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5290" + }, + { + "requirements": "{9,19}", + "ge_buy_limit": "100", + "examine": "A guam seed - plant in a herb patch.", + "grand_exchange_price": "5", + "durability": null, + "name": "Guam seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5291" + }, + { + "requirements": "{14,19}", + "ge_buy_limit": "100", + "examine": "A marrentill seed - plant in a herb patch.", + "grand_exchange_price": "5", + "durability": null, + "name": "Marrentill seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5292" + }, + { + "requirements": "{19,19}", + "ge_buy_limit": "100", + "examine": "A tarromin seed - plant in a herb patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Tarromin seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5293" + }, + { + "requirements": "{19,26}", + "ge_buy_limit": "100", + "examine": "A harralander seed - plant in a herb patch.", + "grand_exchange_price": "4", + "durability": null, + "name": "Harralander seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5294" + }, + { + "requirements": "{19,32}", + "shop_price": "4000", + "ge_buy_limit": "100", + "examine": "A Ranarr seed - plant in a herb patch.", + "grand_exchange_price": "9489", + "durability": null, + "name": "Ranarr seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5295" + }, + { + "requirements": "{19,38}", + "ge_buy_limit": "100", + "examine": "A toadflax seed - plant in a herb patch.", + "grand_exchange_price": "2980", + "durability": null, + "name": "Toadflax seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5296" + }, + { + "requirements": "{19,44}", + "ge_buy_limit": "100", + "examine": "An irit seed - plant in a herb patch.", + "grand_exchange_price": "181", + "durability": null, + "name": "Irit seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5297" + }, + { + "requirements": "{19,50}", + "ge_buy_limit": "100", + "examine": "An avantoe seed - plant in a herb patch.", + "grand_exchange_price": "2492", + "durability": null, + "name": "Avantoe seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5298" + }, + { + "requirements": "{19,56}", + "ge_buy_limit": "100", + "examine": "A kwuarm seed - plant in a herb patch.", + "grand_exchange_price": "537", + "durability": null, + "name": "Kwuarm seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5299" + }, + { + "requirements": "{19,62}", + "ge_buy_limit": "100", + "examine": "A snapdragon seed - plant in a herb patch.", + "grand_exchange_price": "47800", + "durability": null, + "name": "Snapdragon seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5300" + }, + { + "requirements": "{19,67}", + "ge_buy_limit": "100", + "examine": "A cadantine seed - plant in a herb patch.", + "grand_exchange_price": "1253", + "durability": null, + "name": "Cadantine seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5301" + }, + { + "requirements": "{19,73}", + "ge_buy_limit": "100", + "examine": "A lantadyme seed - plant in a herb patch.", + "grand_exchange_price": "37100", + "durability": null, + "name": "Lantadyme seed", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5302" + }, + { + "requirements": "{19,79}", + "ge_buy_limit": "100", + "examine": "A dwarf weed seed - plant in a herb patch.", + "grand_exchange_price": "41900", + "durability": null, + "name": "Dwarf weed seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5303" + }, + { + "requirements": "{19,85}", + "ge_buy_limit": "100", + "examine": "A Torstol seed - plant in a herb patch.", + "grand_exchange_price": "302300", + "durability": null, + "name": "Torstol seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5304" + }, + { + "requirements": "{3,19}", + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "A barley seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Barley seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5305" + }, + { + "requirements": "{13,19}", + "shop_price": "86", + "ge_buy_limit": "100", + "examine": "A jute seed - plant in a hops patch.", + "grand_exchange_price": "2", + "durability": null, + "name": "Jute seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5306" + }, + { + "requirements": "{4,19}", + "shop_price": "52", + "ge_buy_limit": "100", + "examine": "A hammerstone hop seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Hammerstone seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5307" + }, + { + "requirements": "{8,19}", + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "An Asgarnian hop seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Asgarnian seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5308" + }, + { + "requirements": "{16,19}", + "shop_price": "210", + "ge_buy_limit": "100", + "examine": "A yanillian hop seed - plant in a hops patch.", + "grand_exchange_price": "11", + "durability": null, + "name": "Yanillian seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5309" + }, + { + "requirements": "{21,19}", + "shop_price": "8", + "ge_buy_limit": "100", + "examine": "A krandorian hop seed - plant in a hops patch.", + "grand_exchange_price": "1", + "durability": null, + "name": "Krandorian seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5310" + }, + { + "requirements": "{19,28}", + "shop_price": "14", + "ge_buy_limit": "100", + "examine": "A wildblood hop seed - plant in a hops patch.", + "grand_exchange_price": "12", + "durability": null, + "name": "Wildblood seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5311" + }, + { + "requirements": "{15,19}", + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "22", + "durability": null, + "name": "Acorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5312" + }, + { + "requirements": "{19,30}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "945", + "durability": null, + "name": "Willow seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5313" + }, + { + "requirements": "{19,45}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "35400", + "durability": null, + "name": "Maple seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5314" + }, + { + "requirements": "{19,60}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "81900", + "durability": null, + "name": "Yew seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5315" + }, + { + "requirements": "{19,75}", + "ge_buy_limit": "100", + "examine": "Plant this in a plantpot of soil to grow a sapling.", + "grand_exchange_price": "276900", + "durability": null, + "name": "Magic seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5316" + }, + { + "requirements": "{19,83}", + "shop_price": "55000", + "examine": "Plant this in a plant pot of soil to grow a sapling.", + "durability": null, + "name": "Spirit seed", + "archery_ticket_price": "0", + "id": "5317" + }, + { + "shop_price": "8", + "ge_buy_limit": "500", + "examine": "A potato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Potato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5318" + }, + { + "requirements": "{5,19}", + "shop_price": "10", + "ge_buy_limit": "500", + "examine": "An onion seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Onion seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5319" + }, + { + "requirements": "{20,19}", + "ge_buy_limit": "500", + "examine": "A sweetcorn seed - plant in an allotment.", + "grand_exchange_price": "2", + "durability": null, + "name": "Sweetcorn seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5320" + }, + { + "requirements": "{19,47}", + "shop_price": "56", + "ge_buy_limit": "500", + "examine": "A watermelon seed - plant in an allotment.", + "grand_exchange_price": "2491", + "durability": null, + "name": "Watermelon seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5321" + }, + { + "requirements": "{12,19}", + "shop_price": "10", + "ge_buy_limit": "500", + "examine": "A tomato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Tomato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5322" + }, + { + "requirements": "{19,31}", + "ge_buy_limit": "500", + "examine": "A strawberry seed - plant in an allotment.", + "grand_exchange_price": "240", + "durability": null, + "name": "Strawberry seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5323" + }, + { + "requirements": "{7,19}", + "shop_price": "25", + "ge_buy_limit": "500", + "examine": "A cabbage seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Cabbage seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5324" + }, + { + "shop_price": "12", + "ge_buy_limit": "100", + "examine": "Not suitable for archaeological digs.", + "grand_exchange_price": "106", + "durability": null, + "name": "Gardening trowel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5325" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "106", + "durability": null, + "name": "Gardening trowel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5326" + }, + { + "examine": "I need to attach this to its head.", + "durability": null, + "name": "Spade handle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5327" + }, + { + "examine": "I need to attach this to its handle.", + "durability": null, + "name": "Spade head", + "archery_ticket_price": "0", + "id": "5328" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Good for pruning away diseased leaves.", + "grand_exchange_price": "204", + "durability": null, + "name": "Secateurs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5329", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "204", + "durability": null, + "name": "Secateurs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5330" + }, + { + "shop_price": "8", + "ge_buy_limit": "100", + "examine": "This watering can is empty.", + "grand_exchange_price": "298", + "durability": null, + "name": "Watering can", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "5331" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "298", + "durability": null, + "name": "Watering can", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5332" + }, + { + "shop_price": "8", + "examine": " This watering can is almost empty.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(1)", + "archery_ticket_price": "0", + "weight": "0.2", + "id": "5333" + }, + { + "shop_price": "8", + "examine": "This watering can is three-quarters empty.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(2)", + "archery_ticket_price": "0", + "weight": "0.3", + "id": "5334" + }, + { + "shop_price": "8", + "examine": "This watering can is just under half-full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(3)", + "archery_ticket_price": "0", + "weight": "0.4", + "id": "5335" + }, + { + "shop_price": "8", + "examine": " Some would say this watering can is half-full, others half-empty.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(4)", + "archery_ticket_price": "0", + "weight": "0.5", + "id": "5336" + }, + { + "shop_price": "8", + "examine": "This watering can is just over half-full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(5)", + "archery_ticket_price": "0", + "weight": "0.6", + "id": "5337" + }, + { + "shop_price": "8", + "examine": " This watering can is three quarters full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(6)", + "archery_ticket_price": "0", + "weight": "0.7", + "id": "5338" + }, + { + "shop_price": "8", + "examine": " This watering can is almost completely full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(7)", + "archery_ticket_price": "0", + "weight": "0.8", + "id": "5339" + }, + { + "shop_price": "8", + "examine": " This watering can is completely full.", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can(8)", + "archery_ticket_price": "0", + "weight": "0.9", + "id": "5340" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Use this to clear weeds.", + "grand_exchange_price": "99", + "durability": null, + "name": "Rake", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "5341" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "99", + "durability": null, + "name": "Rake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5342" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Use this to plant seeds with.", + "grand_exchange_price": "117", + "durability": null, + "name": "Seed dibber", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5343" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "117", + "durability": null, + "name": "Seed dibber", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5344" + }, + { + "ge_buy_limit": "100", + "examine": "A pair of gardening boots.", + "grand_exchange_price": "3186", + "durability": null, + "name": "Gardening boots", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5345", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3186", + "durability": null, + "name": "Gardening boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5346" + }, + { + "examine": "I need to reattach this to its head.", + "durability": null, + "name": "Rake handle", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5347" + }, + { + "examine": "I need to reattach this to its handle.", + "durability": null, + "name": "Rake head", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5348" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An empty plant pot.", + "grand_exchange_price": "20", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5350" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5351" + }, + { + "shop_price": "9", + "ge_buy_limit": "100", + "examine": "An unfired plant pot.", + "grand_exchange_price": "7", + "durability": null, + "name": "Unfired plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5352" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Unfired plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5353" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "A plant pot filled with soil.", + "grand_exchange_price": "340", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5354" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "340", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5355" + }, + { + "shop_price": "1", + "examine": "A plant pot filled with soil.", + "grand_exchange_price": "243", + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5356" + }, + { + "durability": null, + "name": "Plant pot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5357" + }, + { + "shop_price": "200", + "examine": "An acorn has been sown and watered in this plant pot.", + "durability": null, + "name": "Oak seedling", + "archery_ticket_price": "0", + "id": "5358" + }, + { + "examine": "A willow tree seed has been sown and watered in this plant pot", + "durability": null, + "name": "Willow seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5359" + }, + { + "examine": "A maple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Maple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5360" + }, + { + "examine": "A yew seed has been sown in the plant pot", + "durability": null, + "name": "Yew seedling", + "weight": "1", + "archery_ticket_price": "0", + "id": "5361" + }, + { + "examine": "A magic tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Magic seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5362" + }, + { + "examine": "A spirit seedling is growing in this pot. It has been sown and watered.", + "durability": null, + "name": "Spirit seedling", + "archery_ticket_price": "0", + "id": "5363" + }, + { + "shop_price": "200", + "examine": "An acorn has been sown and watered in this plant pot.", + "durability": null, + "name": "Oak seedling", + "archery_ticket_price": "0", + "id": "5364" + }, + { + "examine": "A willow tree seed has been sown and watered in this plant pot", + "durability": null, + "name": "Willow seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5365" + }, + { + "examine": "A maple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Maple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5366" + }, + { + "examine": "A yew seed has been sown in the plant pot", + "durability": null, + "name": "Yew seedling", + "weight": "1", + "archery_ticket_price": "0", + "id": "5367" + }, + { + "examine": "A magic tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Magic seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5368" + }, + { + "examine": "A spirit seedling is growing in this pot. It has been sown and watered.", + "durability": null, + "name": "Spirit seedling", + "archery_ticket_price": "0", + "id": "5369" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Oak sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5370" + }, + { + "examine": "This sapling is ready to be replanted in a tree patch.", + "durability": null, + "name": "Willow sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5371" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Maple sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5372" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Yew sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5373" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Magic sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5374" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Spirit sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5375" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "An empty fruit basket.", + "grand_exchange_price": "1", + "durability": null, + "name": "Basket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5376" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Basket", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5377" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5378" + }, + { + "durability": null, + "name": "Apples(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5379" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5380" + }, + { + "durability": null, + "name": "Apples(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5381" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5382" + }, + { + "durability": null, + "name": "Apples(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5383" + }, + { + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "1889", + "durability": null, + "name": "Apples(4)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5384" + }, + { + "durability": null, + "name": "Apples(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5385" + }, + { + "ge_buy_limit": "1000", + "examine": "A fruit basket filled with apples.", + "grand_exchange_price": "2448", + "durability": null, + "name": "Apples(5)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5386" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2448", + "durability": null, + "name": "Apples(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5387" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5388" + }, + { + "durability": null, + "name": "Oranges(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5389" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5390" + }, + { + "durability": null, + "name": "Oranges(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5391" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5392" + }, + { + "durability": null, + "name": "Oranges(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5393" + }, + { + "examine": "A fruit basket filled with oranges", + "grand_exchange_price": "3823", + "durability": null, + "name": "Oranges(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5394" + }, + { + "durability": null, + "name": "Oranges(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5395" + }, + { + "shop_price": "70", + "ge_buy_limit": "1000", + "examine": "A common fruit.", + "grand_exchange_price": "5649", + "durability": null, + "name": "Oranges(5)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5396" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "5649", + "durability": null, + "name": "Oranges(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5397" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(1)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5398" + }, + { + "durability": null, + "name": "Strawberries(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5399" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(2)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5400" + }, + { + "durability": null, + "name": "Strawberries(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5401" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(3)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5402" + }, + { + "durability": null, + "name": "Strawberries(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5403" + }, + { + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "5", + "durability": null, + "name": "Strawberries(4)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5404" + }, + { + "durability": null, + "name": "Strawberries(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5405" + }, + { + "ge_buy_limit": "10000", + "examine": "A fruit basket filled with strawberries.", + "grand_exchange_price": "406", + "durability": null, + "name": "Strawberries(5)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "5406" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "406", + "durability": null, + "name": "Strawberries(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5407" + }, + { + "examine": "A fruit basket filled with bananas.", + "grand_exchange_price": "1064", + "durability": null, + "name": "Bananas(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5408" + }, + { + "durability": null, + "name": "Bananas(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5409" + }, + { + "examine": "A fruit basket filled with bananas.", + "grand_exchange_price": "1064", + "durability": null, + "name": "Bananas(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5410" + }, + { + "durability": null, + "name": "Bananas(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5411" + }, + { + "examine": "A fruit basket filled with bananas.", + "grand_exchange_price": "1064", + "durability": null, + "name": "Bananas(3)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5412" + }, + { + "durability": null, + "name": "Bananas(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5413" + }, + { + "shop_price": "2", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "171", + "durability": null, + "name": "Bananas(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5414" + }, + { + "durability": null, + "name": "Bananas(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5415" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "1637", + "durability": null, + "name": "Bananas(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5416" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1637", + "durability": null, + "name": "Bananas(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5417" + }, + { + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "An empty sack.", + "grand_exchange_price": "45", + "durability": null, + "name": "Empty sack", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5418" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "45", + "durability": null, + "name": "Empty sack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5419" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(1)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5420" + }, + { + "durability": null, + "name": "Potatoes(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5421" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(2)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5422" + }, + { + "durability": null, + "name": "Potatoes(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5423" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(3)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5424" + }, + { + "durability": null, + "name": "Potatoes(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5425" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(4)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5426" + }, + { + "durability": null, + "name": "Potatoes(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5427" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(5)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5428" + }, + { + "durability": null, + "name": "Potatoes(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5429" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(6)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5430" + }, + { + "durability": null, + "name": "Potatoes(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5431" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(7)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5432" + }, + { + "durability": null, + "name": "Potatoes(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5433" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(8)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5434" + }, + { + "durability": null, + "name": "Potatoes(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5435" + }, + { + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1276", + "durability": null, + "name": "Potatoes(9)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5436" + }, + { + "durability": null, + "name": "Potatoes(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5437" + }, + { + "ge_buy_limit": "1000", + "examine": "There are <number of potatoes> in this sack.", + "grand_exchange_price": "1052", + "durability": null, + "name": "Potatoes(10)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5438" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1052", + "durability": null, + "name": "Potatoes(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5439" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(1)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5440" + }, + { + "durability": null, + "name": "Onions(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5441" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(2)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5442" + }, + { + "durability": null, + "name": "Onions(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5443" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(3)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5444" + }, + { + "durability": null, + "name": "Onions(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5445" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(4)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5446" + }, + { + "durability": null, + "name": "Onions(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5447" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(5)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5448" + }, + { + "durability": null, + "name": "Onions(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5449" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(6)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5450" + }, + { + "durability": null, + "name": "Onions(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5451" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(7)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5452" + }, + { + "durability": null, + "name": "Onions(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5453" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(8)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5454" + }, + { + "durability": null, + "name": "Onions(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5455" + }, + { + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "589", + "durability": null, + "name": "Onions(9)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5456" + }, + { + "durability": null, + "name": "Onions(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5457" + }, + { + "ge_buy_limit": "1000", + "examine": "There are/is (1-10) onion(s) in this sack.", + "grand_exchange_price": "489", + "durability": null, + "name": "Onions(10)", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5458" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "489", + "durability": null, + "name": "Onions(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5459" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5460" + }, + { + "durability": null, + "name": "Cabbages(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5461" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5462" + }, + { + "durability": null, + "name": "Cabbages(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5463" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5464" + }, + { + "durability": null, + "name": "Cabbages(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5465" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5466" + }, + { + "durability": null, + "name": "Cabbages(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5467" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5468" + }, + { + "durability": null, + "name": "Cabbages(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5469" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5470" + }, + { + "durability": null, + "name": "Cabbages(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5471" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5472" + }, + { + "durability": null, + "name": "Cabbages(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5473" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5474" + }, + { + "durability": null, + "name": "Cabbages(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5475" + }, + { + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "1304", + "durability": null, + "name": "Cabbages(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5476" + }, + { + "durability": null, + "name": "Cabbages(9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5477" + }, + { + "ge_buy_limit": "1000", + "examine": "There are <number of cabbages> in this sack.", + "grand_exchange_price": "917", + "durability": null, + "name": "Cabbages(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5478" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "917", + "durability": null, + "name": "Cabbages(10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5479" + }, + { + "examine": "An apple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Apple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5480" + }, + { + "examine": "A banana tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Banana seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5481" + }, + { + "examine": "An orange tree seed has been sown (and watered)in this plant pot.", + "durability": null, + "name": "Orange seedling", + "archery_ticket_price": "0", + "id": "5482" + }, + { + "examine": "A curry seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Curry seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5483" + }, + { + "examine": "A pineapple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Pineapple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5484" + }, + { + "examine": "This needs watering before it will grow.", + "durability": null, + "name": "Papaya seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5485" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Palm seedling", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "5486" + }, + { + "examine": "A calquat tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Calquat seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5487" + }, + { + "examine": "An apple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Apple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5488" + }, + { + "examine": "A banana tree seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Banana seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5489" + }, + { + "examine": "An orange tree seed has been sown (and watered)in this plant pot.", + "durability": null, + "name": "Orange seedling", + "archery_ticket_price": "0", + "id": "5490" + }, + { + "examine": "A curry seed has been sown and watered in this plant pot.", + "durability": null, + "name": "Curry seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5491" + }, + { + "examine": "A pineapple tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Pineapple seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5492" + }, + { + "examine": "This needs watering before it will grow.", + "durability": null, + "name": "Papaya seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5493" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Palm seedling", + "weight": "0.66", + "archery_ticket_price": "0", + "id": "5494" + }, + { + "examine": "A calquat tree has been sown (and watered) in this plant pot.", + "durability": null, + "name": "Calquat seedling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5495" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Apple sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5496" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Banana sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5497" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Orange sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5498" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Curry sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5499" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Pineapple sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5500" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Papaya sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5501" + }, + { + "examine": "This sapling is ready to be replanted in a fruit tree patch.", + "durability": null, + "name": "Palm sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5502" + }, + { + "examine": "This sapling is ready to be planted in a tree patch.", + "durability": null, + "name": "Calquat sapling", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5503" + }, + { + "ge_buy_limit": "10000", + "examine": "A freshly picked strawberry.", + "grand_exchange_price": "23", + "durability": null, + "name": "Strawberry", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5504" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "23", + "durability": null, + "name": "Strawberry", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5505" + }, + { + "examine": "The Wise Old Man of Draynor Village asked you to take this to someone.", + "durability": null, + "name": "Old man's message", + "archery_ticket_price": "0", + "id": "5506" + }, + { + "examine": "A tatty old book belonging to the Wise Old Man of Draynor Village.", + "durability": null, + "name": "Strange book", + "archery_ticket_price": "0", + "id": "5507" + }, + { + "examine": "A tatty old book belonging to the Wise Old Man of Draynor Village.", + "durability": null, + "name": "Book of folklore", + "archery_ticket_price": "0", + "id": "5508" + }, + { + "examine": "A small pouch used for storing essence.", + "durability": null, + "name": "Small pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5509" + }, + { + "examine": "A medium-sized pouch used for storing essence.", + "durability": null, + "name": "Medium pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5510" + }, + { + "examine": "A medium-sized pouch used for storing essence.", + "durability": null, + "name": "Medium pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5511" + }, + { + "shop_price": "25000", + "examine": "A large pouch used for storing essence.", + "durability": null, + "name": "Large pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5512" + }, + { + "shop_price": "25000", + "examine": "A large pouch used for storing essence.", + "durability": null, + "name": "Large pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5513" + }, + { + "shop_price": "50000", + "examine": "A giant-sized pouch used for storing essence.", + "durability": null, + "name": "Giant pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5514" + }, + { + "shop_price": "50000", + "examine": "A giant-sized pouch used for storing essence.", + "durability": null, + "name": "Giant pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "5515" + }, + { + "ge_buy_limit": "500", + "examine": "A mysterious power emanates from the talisman...", + "grand_exchange_price": "186900", + "durability": null, + "name": "Elemental talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5516" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "186900", + "durability": null, + "name": "Elemental talisman", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5517" + }, + { + "examine": "When empty:", + "durability": null, + "name": "Scrying orb", + "weight": "1", + "archery_ticket_price": "0", + "id": "5518" + }, + { + "examine": "When empty:", + "durability": null, + "name": "Scrying orb", + "weight": "1", + "archery_ticket_price": "0", + "id": "5519" + }, + { + "examine": "Some research notes on abyssal space.", + "durability": null, + "name": "Abyssal book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5520" + }, + { + "ge_buy_limit": "100", + "examine": "A necklace embedded with mystical power.", + "grand_exchange_price": "720", + "durability": null, + "name": "Binding necklace", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5521", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "720", + "durability": null, + "name": "Binding necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5522" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A mould for tiaras.", + "grand_exchange_price": "315", + "durability": null, + "name": "Tiara mould", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5523" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "315", + "durability": null, + "name": "Tiara mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5524" + }, + { + "ge_buy_limit": "1000", + "examine": "Makes me feel like a Princess.", + "grand_exchange_price": "13", + "durability": null, + "name": "Tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5525", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "13", + "durability": null, + "name": "Tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5526" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of air.", + "grand_exchange_price": "5", + "durability": null, + "name": "Air tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5527", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Air tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5528" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the mind.", + "grand_exchange_price": "10", + "durability": null, + "name": "Mind tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5529", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Mind tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5530" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of water.", + "grand_exchange_price": "1351", + "durability": null, + "name": "Water tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5531", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1351", + "durability": null, + "name": "Water tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5532" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the body.", + "grand_exchange_price": "5", + "durability": null, + "name": "Body tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5533", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5", + "durability": null, + "name": "Body tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5534" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the earth.", + "grand_exchange_price": "4", + "durability": null, + "name": "Earth tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5535", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4", + "durability": null, + "name": "Earth tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5536" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of fire.", + "grand_exchange_price": "8", + "durability": null, + "name": "Fire tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5537", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Fire tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5538" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of the cosmos.", + "grand_exchange_price": "8", + "durability": null, + "name": "Cosmic tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5539", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Cosmic tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5540" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of nature.", + "grand_exchange_price": "10", + "durability": null, + "name": "Nature tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5541", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Nature tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5542" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of chaos.", + "grand_exchange_price": "10", + "durability": null, + "name": "Chaos tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5543", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10", + "durability": null, + "name": "Chaos tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5544" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of law.", + "grand_exchange_price": "11", + "durability": null, + "name": "Law tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5545", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Law tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5546" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of death.", + "grand_exchange_price": "65", + "durability": null, + "name": "Death tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5547", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65", + "durability": null, + "name": "Death tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5548" + }, + { + "ge_buy_limit": "100", + "examine": "A tiara infused with the properties of Blood.", + "grand_exchange_price": "1058", + "durability": null, + "name": "Blood tiara", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5549", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1058", + "durability": null, + "name": "Blood tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5550" + }, + { + "ge_buy_limit": "100", + "examine": " A tiara infused with the properties of the soul.", + "durability": null, + "name": "Soul tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "5551", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Soul tiara", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5552" + }, + { + "remove_sleeves": "true", + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue top", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5553", + "bonuses": "0,0,0,0,0,10,10,10,10,10,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue mask", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5554", + "bonuses": "0,0,0,0,0,5,5,5,5,5,0,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue trousers", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5555", + "bonuses": "0,0,0,0,0,7,7,7,7,7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "examine": "Black banded leather gloves, a rogue's dream!", + "durability": null, + "name": "Rogue gloves", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5556", + "bonuses": "0,0,0,0,0,2,2,2,2,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Black banded leather boots, a rogue's dream!", + "durability": null, + "name": "Rogue boots", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5557", + "bonuses": "0,0,0,0,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "35", + "examine": "It can do almost anything!", + "durability": null, + "name": "Rogue kit", + "archery_ticket_price": "0", + "id": "5558" + }, + { + "examine": "A small satchel of bright powder!", + "durability": null, + "name": "Flash powder", + "weight": "1", + "archery_ticket_price": "0", + "id": "5559" + }, + { + "shop_price": "10", + "examine": "A useful hearing aid.", + "durability": null, + "name": "Stethoscope", + "archery_ticket_price": "0", + "id": "5560", + "equipment_slot": "5" + }, + { + "examine": "I can escape the Maze with this!", + "durability": null, + "name": "Mystic jewel", + "archery_ticket_price": "0", + "id": "5561" + }, + { + "examine": "A fraction of a roof.", + "durability": null, + "name": "Picture", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "5568" + }, + { + "remove_head": "true", + "requirements": "{1,20}", + "shop_price": "6000", + "ge_buy_limit": "100", + "examine": "An initiate Temple Knight's helm.", + "durability": null, + "weight": "2.2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "3512", + "name": "Initiate sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5574", + "bonuses": "0,0,0,-6,-2,13,14,11,-1,13,5,0,3,0,0" + }, + { + "requirements": "{1,20}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "An initiate Temple Knight's Armour.", + "durability": null, + "weight": "8", + "absorb": "1,0,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "5776", + "name": "Initiate hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5575", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,20,0,6,0,0" + }, + { + "requirements": "{1,20}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "An initiate Temple Knight's leg armour.", + "durability": null, + "weight": "7", + "absorb": "1,0,2", + "equipment_slot": "7", + "grand_exchange_price": "4574", + "name": "Initiate cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5576", + "bonuses": "0,0,0,-21,-7,24,22,20,-4,22,5,0,5,0,0" + }, + { + "examine": "A vial of something labelled 'Cupric Sulfate'.", + "durability": null, + "name": "Cupric sulphate", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5577" + }, + { + "examine": "A vial of something labelled 'Acetic Acid'.", + "durability": null, + "name": "Acetic acid", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5578" + }, + { + "examine": "A vial of something labelled 'Gypsum'.", + "durability": null, + "name": "Gypsum", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5579" + }, + { + "examine": "A vial of something labelled 'Sodium Chloride'.", + "durability": null, + "name": "Sodium chloride", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5580" + }, + { + "examine": "A vial of something labelled 'Nitrous Oxide'.", + "durability": null, + "name": "Nitrous oxide", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5581" + }, + { + "examine": "A vial of something labelled Dihydrogen Monoxide.", + "durability": null, + "name": "Vial of liquid", + "archery_ticket_price": "0", + "id": "5582" + }, + { + "examine": "A vial of something labelled 'Powdered Tin Ore'.", + "durability": null, + "name": "Tin ore powder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5583" + }, + { + "examine": "A vial of something labelled 'Powdered Cupric Ore'.", + "durability": null, + "name": "Cupric ore powder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5584" + }, + { + "examine": "It's a metal spade without a handle.", + "durability": null, + "name": "Metal spade", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "5586" + }, + { + "examine": "It's a metal spade without a handle.", + "durability": null, + "name": "Metal spade", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "5587" + }, + { + "examine": "Looks like a pretty boring read.", + "durability": null, + "name": "Alchemical notes", + "archery_ticket_price": "0", + "id": "5588" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5592" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5593" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5594" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5595" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5596" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5597" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5598" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5599" + }, + { + "shop_price": "6", + "examine": "This needs refining.", + "grand_exchange_price": "42", + "durability": null, + "name": "Tin", + "tradeable": "true", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "5600" + }, + { + "shop_price": "14", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "33", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5601" + }, + { + "examine": "Useful for crafting items.", + "grand_exchange_price": "237", + "durability": null, + "name": "Bronze wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5602" + }, + { + "shop_price": "1", + "examine": "For shearing sheep.", + "grand_exchange_price": "41", + "durability": null, + "name": "Shears", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5603" + }, + { + "examine": "A very attractive magnet.", + "durability": null, + "name": "Magnet", + "archery_ticket_price": "0", + "id": "5604" + }, + { + "shop_price": "25", + "examine": "A dangerous looking knife.", + "grand_exchange_price": "102", + "durability": null, + "name": "Knife", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "5605" + }, + { + "examine": "I can exchange this for one free makeover with the makeover mage.", + "durability": null, + "name": "Makeover voucher", + "weight": "1", + "archery_ticket_price": "0", + "id": "5606" + }, + { + "shop_price": "2", + "examine": "Some wheat heads.", + "grand_exchange_price": "20", + "durability": null, + "name": "Grain", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "5607", + "equipment_slot": "1" + }, + { + "examine": "A cunning animal.", + "durability": null, + "name": "Fox", + "archery_ticket_price": "0", + "id": "5608", + "equipment_slot": "3" + }, + { + "examine": "Normal: Yep. Definitely a chicken.", + "durability": null, + "name": "Chicken", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "5609", + "equipment_slot": "5" + }, + { + "examine": "There's not much sand left in the top half...", + "durability": null, + "name": "Hourglass", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "5610" + }, + { + "durability": null, + "name": "Initiate sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5611" + }, + { + "durability": null, + "name": "Initiate hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5612" + }, + { + "durability": null, + "name": "Initiate cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5613" + }, + { + "turn90cw_anim": "330", + "walk_anim": "330", + "durability": null, + "turn90ccw_anim": "330", + "turn180_anim": "330", + "render_anim": "191", + "equipment_slot": "3", + "stand_anim": "330", + "name": "Magic carpet", + "run_anim": "330", + "archery_ticket_price": "0", + "id": "5614", + "stand_turn_anim": "330" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "5615" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "127", + "durability": null, + "name": "Bronze arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5616", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "138", + "durability": null, + "name": "Iron arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5617", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "159", + "durability": null, + "name": "Steel arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5618", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "176", + "durability": null, + "name": "Mithril arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5619", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "211", + "durability": null, + "name": "Adamant arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5620", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "415", + "durability": null, + "name": "Rune arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5621", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "shop_price": "7", + "ge_buy_limit": "10000", + "examine": "Arrows with bronze heads.", + "grand_exchange_price": "1076", + "durability": null, + "name": "Bronze arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5622", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Arrows with iron heads.", + "grand_exchange_price": "1037", + "durability": null, + "name": "Iron arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5623", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "requirements": "{4,5}", + "shop_price": "46", + "ge_buy_limit": "10000", + "examine": "Arrows with steel heads.", + "grand_exchange_price": "1038", + "durability": null, + "name": "Steel arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5624", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{4,20}", + "shop_price": "76", + "ge_buy_limit": "10000", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "718", + "durability": null, + "name": "Mithril arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5625", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{4,30}", + "shop_price": "172", + "ge_buy_limit": "10000", + "examine": "Arrows with adamantite heads.", + "grand_exchange_price": "101", + "durability": null, + "name": "Adamant arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5626", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{4,40}", + "shop_price": "510", + "ge_buy_limit": "10000", + "examine": "Arrows with rune heads.", + "grand_exchange_price": "1300", + "durability": null, + "name": "Rune arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5627", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "162", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5628", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "164", + "attack_audios": "2547,0,0,0", + "name": "Iron dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5629", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "173", + "attack_audios": "2547,0,0,0", + "name": "Steel dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5630", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "822", + "attack_audios": "2547,0,0,0", + "name": "Black dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5631", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "196", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5632", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "244", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5633", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "370", + "attack_audios": "2547,0,0,0", + "name": "Rune dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5634", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a bronze tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1733", + "attack_audios": "2547,0,0,0", + "name": "Bronze dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5635", + "bonuses": "0,0,0,0,3,0,0,0,0,0,0,0,0,0,1" + }, + { + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an iron tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1687", + "attack_audios": "2547,0,0,0", + "name": "Iron dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5636", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "requirements": "{4,5}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a steel tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1654", + "attack_audios": "2547,0,0,0", + "name": "Steel dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5637", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,10}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a black tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "2422", + "attack_audios": "2547,0,0,0", + "name": "Black dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5638", + "bonuses": "0,0,0,0,7,0,0,0,0,0,0,0,0,0,6" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a mithril tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1660", + "attack_audios": "2547,0,0,0", + "name": "Mithril dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5639", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with an adamantite tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1352", + "attack_audios": "2547,0,0,0", + "name": "Adamant dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5640", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "1000", + "examine": "A deadly throwing dart with a rune tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "582,582,582,582", + "grand_exchange_price": "1109", + "attack_audios": "2547,0,0,0", + "name": "Rune dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5641", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "shop_price": "6", + "ge_buy_limit": "1000", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "115", + "name": "Bronze javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5642", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "112", + "name": "Iron javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5643", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "128", + "name": "Steel javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5644", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "141", + "name": "Mithril javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5645", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "100", + "shop_price": "100", + "examine": "An adamant tipped javelin.", + "durability": null, + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "179", + "name": "Adamant javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5646", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "302", + "name": "Rune javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5647", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A bronze-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1755", + "name": "Bronze jav'n(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5648", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,6" + }, + { + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "An iron-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1756", + "name": "Iron javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5649", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,5}", + "shop_price": "37", + "ge_buy_limit": "1000", + "examine": "A steel-tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1769", + "name": "Steel javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5650", + "bonuses": "0,0,0,0,12,0,0,0,0,0,0,0,0,0,12" + }, + { + "requirements": "{4,20}", + "shop_price": "79", + "ge_buy_limit": "1000", + "examine": "A mithril tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1736", + "name": "Mithril javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5651", + "bonuses": "0,0,0,0,17,0,0,0,0,0,0,0,0,0,18" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "100", + "shop_price": "100", + "examine": "An adamant tipped javelin.", + "durability": null, + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1514", + "name": "Adamant javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5652", + "bonuses": "0,0,0,0,24,0,0,0,0,0,0,0,0,0,28" + }, + { + "requirements": "{4,40}", + "shop_price": "624", + "ge_buy_limit": "1000", + "examine": "A rune tipped javelin.", + "durability": null, + "attack_speed": "6", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1521", + "name": "Rune javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5653", + "bonuses": "0,0,0,0,38,0,0,0,0,0,0,0,0,0,42" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "164", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5654", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "170", + "attack_audios": "2704,0,0,0", + "name": "Iron knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5655", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "212", + "attack_audios": "2704,0,0,0", + "name": "Steel knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5656", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "330", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5657", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "66", + "attack_audios": "2704,0,0,0", + "name": "Black knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5658", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "609", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5659", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1511", + "attack_audios": "2704,0,0,0", + "name": "Rune knife(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5660", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "shop_price": "14", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1514", + "attack_audios": "2704,0,0,0", + "name": "Bronze knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5661", + "bonuses": "0,0,0,0,4,0,0,0,0,0,0,0,0,0,3" + }, + { + "shop_price": "58", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1212", + "attack_audios": "2704,0,0,0", + "name": "Iron knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5662", + "bonuses": "0,0,0,0,5,0,0,0,0,0,0,0,0,0,4" + }, + { + "requirements": "{4,5}", + "shop_price": "68", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1579", + "attack_audios": "2704,0,0,0", + "name": "Steel knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5663", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,7" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1368", + "attack_audios": "2704,0,0,0", + "name": "Mithril knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5664", + "bonuses": "0,0,0,0,11,0,0,0,0,0,0,0,0,0,10" + }, + { + "requirements": "{4,10}", + "shop_price": "15", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "103", + "attack_audios": "2704,0,0,0", + "name": "Black knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5665", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,8" + }, + { + "requirements": "{4,30}", + "ge_buy_limit": "100", + "examine": "A finely balanced throwing knife.", + "durability": null, + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "1505", + "attack_audios": "2704,0,0,0", + "name": "Adamant knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5666", + "bonuses": "0,0,0,0,15,0,0,0,0,0,0,0,0,0,14" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "10000", + "examine": "A finely balanced throwing knife.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "806,806,806,806", + "grand_exchange_price": "2207", + "attack_audios": "2704,0,0,0", + "name": "Rune knife(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5667", + "bonuses": "0,0,0,0,25,0,0,0,0,0,0,0,0,0,24" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "483", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5668", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "483", + "durability": null, + "name": "Iron dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5669" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "350", + "attack_audios": "2517,2517,2500,2517", + "name": "Bronze dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5670", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "350", + "durability": null, + "name": "Bronze dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5671" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "575", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5672", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "575", + "durability": null, + "name": "Steel dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5673" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "538", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5674", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "538", + "durability": null, + "name": "Mithril dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5675" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "durability": null, + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "800", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5676", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "800", + "durability": null, + "name": "Adamant dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5677" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "4538", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5678", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4538", + "durability": null, + "name": "Rune dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5679" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "16800", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5680", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "attack_anims": "396,396,395,396", + "ge_buy_limit": "10", + "grand_exchange_price": "16800", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Dragon dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5681", + "defence_anim": "397" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "664", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5682", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "664", + "durability": null, + "name": "Black dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5683" + }, + { + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Poison dagger(p+)", + "archery_ticket_price": "0", + "id": "5684", + "weapon_interface": "5", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0", + "render_anim": "2584", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Poison dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5685" + }, + { + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4128", + "attack_audios": "2517,2517,2500,2517", + "name": "Iron dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5686", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4128", + "durability": null, + "name": "Iron dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5687" + }, + { + "shop_price": "11", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "5088", + "attack_audios": "2517,2517,2500,2517", + "name": "Br'ze dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5688", + "bonuses": "4,2,-4,1,0,0,0,0,1,0,0,3,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5088", + "durability": null, + "name": "Br'ze dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5689" + }, + { + "requirements": "{0,5}", + "shop_price": "135", + "ge_buy_limit": "100", + "examine": "Short but pointy.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4729", + "attack_audios": "2517,2517,2500,2517", + "name": "Steel dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5690", + "bonuses": "8,4,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4729", + "durability": null, + "name": "Steel dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5691" + }, + { + "requirements": "{0,20}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A dangerous dagger.", + "durability": null, + "weight": "0.3", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "3476", + "attack_audios": "2517,2517,2500,2517", + "name": "Mithril dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5692", + "bonuses": "11,5,-4,1,0,0,0,0,1,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3476", + "durability": null, + "name": "Mithril dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5693" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "durability": null, + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4612", + "attack_audios": "2517,2517,2500,2517", + "name": "Adamant dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5694", + "bonuses": "15,8,-4,1,0,0,0,0,1,0,0,14,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4612", + "durability": null, + "name": "Adamant dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5695" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "5061", + "attack_audios": "2517,2517,2500,2517", + "name": "Rune dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5696", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5061", + "durability": null, + "name": "Rune dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5697" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "lendable": "true", + "grand_exchange_price": "20300", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5698", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "attack_anims": "396,396,395,396", + "ge_buy_limit": "10", + "grand_exchange_price": "20300", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Dragon dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5699", + "defence_anim": "397" + }, + { + "requirements": "{0,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious black dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "4921", + "attack_audios": "2517,2517,2500,2517", + "name": "Black dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5700", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4921", + "durability": null, + "name": "Black dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5701" + }, + { + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Poison dagger(p++)", + "archery_ticket_price": "0", + "id": "5702", + "weapon_interface": "5", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,0,0,0", + "render_anim": "2584", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Poison dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5703" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "861", + "stand_anim": "813", + "name": "Bronze spear(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5704", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "861", + "durability": null, + "name": "Bronze spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5705" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "676", + "stand_anim": "813", + "name": "Iron spear(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5706", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "676", + "durability": null, + "name": "Iron spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5707" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "596", + "stand_anim": "813", + "tradeable": "true", + "name": "Steel spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5708", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "596", + "durability": null, + "name": "Steel spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5709" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "802", + "stand_anim": "813", + "tradeable": "true", + "name": "Mithril spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5710", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "802", + "durability": null, + "name": "Mithril spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5711" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1394", + "stand_anim": "813", + "tradeable": "true", + "name": "Adamant spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5712", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1394", + "durability": null, + "name": "Adamant spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5713" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "12500", + "stand_anim": "813", + "tradeable": "true", + "name": "Rune spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5714", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12500", + "durability": null, + "name": "Rune spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5715" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "41800", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5716", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear(p+)" + }, + { + "attack_anims": "2080,2081,2082,2080", + "ge_buy_limit": "10", + "grand_exchange_price": "41800", + "durability": null, + "name": "Dragon spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5717", + "defence_anim": "2079" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "7557", + "stand_anim": "813", + "name": "Bronze spear(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5718", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7557", + "durability": null, + "name": "Bronze spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5719" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8394", + "stand_anim": "813", + "name": "Iron spear(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5720", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,1,1,0,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8394", + "durability": null, + "name": "Iron spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5721" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8336", + "stand_anim": "813", + "tradeable": "true", + "name": "Steel spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5722", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,1,1,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8336", + "durability": null, + "name": "Steel spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5723" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "7035", + "stand_anim": "813", + "tradeable": "true", + "name": "Mithril spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5724", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,1,1,0,0,0,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7035", + "durability": null, + "name": "Mithril spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5725" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant tipped spear.", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "7530", + "stand_anim": "813", + "name": "Adamant spear(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5726", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,1,1,0,0,0,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7530", + "durability": null, + "name": "Adamant spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5727" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "17700", + "stand_anim": "813", + "tradeable": "true", + "name": "Rune spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5728", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17700", + "durability": null, + "name": "Rune spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5729" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A dragon tipped spear.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "37800", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5730", + "stand_turn_anim": "1209", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "2", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Dragon spear(p++)" + }, + { + "attack_anims": "2080,2081,2082,2080", + "ge_buy_limit": "10", + "grand_exchange_price": "37800", + "durability": null, + "name": "Dragon spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5731", + "defence_anim": "2079" + }, + { + "durability": null, + "name": "Stool", + "archery_ticket_price": "0", + "id": "5732", + "equipment_slot": "5" + }, + { + "examine": "Yuk!", + "durability": null, + "name": "Rotten potato", + "archery_ticket_price": "0", + "id": "5733" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "3351", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear(p+)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5734", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3351", + "durability": null, + "name": "Black spear(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5735" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A black tipped spear.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "9065", + "stand_anim": "813", + "tradeable": "true", + "name": "Black spear(p++)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "5736", + "stand_turn_anim": "1209", + "bonuses": "15,15,15,0,0,1,1,0,0,0,0,16,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9065", + "durability": null, + "name": "Black spear(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5737" + }, + { + "shop_price": "15", + "examine": "A slightly bluish leaf.", + "grand_exchange_price": "19", + "durability": null, + "name": "Woad leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5738" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "459", + "durability": null, + "name": "Asgarnian ale(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5739" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "459", + "durability": null, + "name": "Asgarnian ale(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5740" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "1193", + "durability": null, + "name": "Mature wmb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5741" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1193", + "durability": null, + "name": "Mature wmb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5742" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "65400", + "durability": null, + "name": "Greenman's ale(m)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5743" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "65400", + "durability": null, + "name": "Greenman's ale(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5744" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "2458", + "durability": null, + "name": "Dragon bitter(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5745" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2458", + "durability": null, + "name": "Dragon bitter(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5746" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "56400", + "durability": null, + "name": "Dwarven stout(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5747" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "56400", + "durability": null, + "name": "Dwarven stout(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5748" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "19", + "durability": null, + "name": "Moonlight mead(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5749" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Moonlight mead(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5750" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "890", + "durability": null, + "name": "Axeman's folly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5751" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "890", + "durability": null, + "name": "Axeman's folly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5752" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Axeman's folly(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5753" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26000", + "durability": null, + "name": "Axeman's folly(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5754" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "3694", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5755" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3694", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5756" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "42800", + "durability": null, + "name": "Chef's delight(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5757" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "42800", + "durability": null, + "name": "Chef's delight(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5758" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "7", + "durability": null, + "name": "Slayer's respite", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5759" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Slayer's respite", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5760" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "1748", + "durability": null, + "name": "Slayer's respite(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5761" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1748", + "durability": null, + "name": "Slayer's respite(m)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5762" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "1279", + "durability": null, + "name": "Cider", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5763" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1279", + "durability": null, + "name": "Cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5764" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "3614", + "durability": null, + "name": "Mature cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5765" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3614", + "durability": null, + "name": "Mature cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5766" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A pot filled with ale yeast.", + "grand_exchange_price": "59", + "durability": null, + "name": "Ale yeast", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "5767" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "59", + "durability": null, + "name": "Ale yeast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5768" + }, + { + "ge_buy_limit": "100", + "examine": "Sliced and hollowed out to form a keg.", + "grand_exchange_price": "8", + "durability": null, + "name": "Calquat keg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5769" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Calquat keg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5770" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "1934", + "durability": null, + "name": "Dwarven stout(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5771" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1934", + "durability": null, + "name": "Dwarven stout(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5772" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "3214", + "durability": null, + "name": "Dwarven stout(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5773" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3214", + "durability": null, + "name": "Dwarven stout(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5774" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "4886", + "durability": null, + "name": "Dwarven stout(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5775" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4886", + "durability": null, + "name": "Dwarven stout(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5776" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A pint of thick dark beer.", + "grand_exchange_price": "5159", + "durability": null, + "name": "Dwarven stout(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5777" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5159", + "durability": null, + "name": "Dwarven stout(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5778" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "3344", + "durability": null, + "name": "Asgarnian ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5779" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3344", + "durability": null, + "name": "Asgarnian ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5780" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "6103", + "durability": null, + "name": "Asgarnian ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5781" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6103", + "durability": null, + "name": "Asgarnian ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5782" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "9230", + "durability": null, + "name": "Asgarnian ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5783" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9230", + "durability": null, + "name": "Asgarnian ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5784" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "12900", + "durability": null, + "name": "Asgarnian ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5785" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12900", + "durability": null, + "name": "Asgarnian ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5786" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "3441", + "durability": null, + "name": "Greenmans ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5787" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3441", + "durability": null, + "name": "Greenmans ale(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5788" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "4670", + "durability": null, + "name": "Greenmans ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5789" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4670", + "durability": null, + "name": "Greenmans ale(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5790" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "7654", + "durability": null, + "name": "Greenmans ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5791" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7654", + "durability": null, + "name": "Greenmans ale(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5792" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "6317", + "durability": null, + "name": "Greenmans ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5793" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6317", + "durability": null, + "name": "Greenmans ale(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5794" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "1495", + "durability": null, + "name": "Mind bomb(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5795" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1495", + "durability": null, + "name": "Mind bomb(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5796" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "2721", + "durability": null, + "name": "Mind bomb(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5797" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2721", + "durability": null, + "name": "Mind bomb(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5798" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "4038", + "durability": null, + "name": "Mind bomb(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5799" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4038", + "durability": null, + "name": "Mind bomb(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5800" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "It's got strange bubbles in it.", + "grand_exchange_price": "5166", + "durability": null, + "name": "Mind bomb(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5801" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5166", + "durability": null, + "name": "Mind bomb(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5802" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "1673", + "durability": null, + "name": "Dragon bitter(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5803" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1673", + "durability": null, + "name": "Dragon bitter(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5804" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "3259", + "durability": null, + "name": "Dragon bitter(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5805" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3259", + "durability": null, + "name": "Dragon bitter(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5806" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "4845", + "durability": null, + "name": "Dragon bitter(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5807" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4845", + "durability": null, + "name": "Dragon bitter(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5808" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of bitter.", + "grand_exchange_price": "5924", + "durability": null, + "name": "Dragon bitter(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5809" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5924", + "durability": null, + "name": "Dragon bitter(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5810" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "1298", + "durability": null, + "name": "Moonlight mead(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5811" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1298", + "durability": null, + "name": "Moonlight mead(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5812" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "2510", + "durability": null, + "name": "Moonlight mead(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5813" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2510", + "durability": null, + "name": "Moonlight mead(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5814" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "3721", + "durability": null, + "name": "Moonlight mead(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5815" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3721", + "durability": null, + "name": "Moonlight mead(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5816" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "4883", + "durability": null, + "name": "Moonlight mead(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5817" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4883", + "durability": null, + "name": "Moonlight mead(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5818" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "3333", + "durability": null, + "name": "Axeman's folly(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5819" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3333", + "durability": null, + "name": "Axeman's folly(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5820" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "6093", + "durability": null, + "name": "Axeman's folly(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5821" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6093", + "durability": null, + "name": "Axeman's folly(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5822" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "8978", + "durability": null, + "name": "Axeman's folly(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5823" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8978", + "durability": null, + "name": "Axeman's folly(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5824" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "9212", + "durability": null, + "name": "Axeman's folly(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5825" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9212", + "durability": null, + "name": "Axeman's folly(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5826" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "3851", + "durability": null, + "name": "Chef's delight(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5827" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3851", + "durability": null, + "name": "Chef's delight(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5828" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "6589", + "durability": null, + "name": "Chef's delight(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5829" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6589", + "durability": null, + "name": "Chef's delight(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5830" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "9536", + "durability": null, + "name": "Chef's delight(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5831" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9536", + "durability": null, + "name": "Chef's delight(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5832" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "13200", + "durability": null, + "name": "Chef's delight(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5833" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13200", + "durability": null, + "name": "Chef's delight(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5834" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "1127", + "durability": null, + "name": "Slayer's respite(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5835" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1127", + "durability": null, + "name": "Slayer's respite(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5836" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "2168", + "durability": null, + "name": "Slayer's respite(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5837" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2168", + "durability": null, + "name": "Slayer's respite(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5838" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "3209", + "durability": null, + "name": "Slayer's respite(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5839" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3209", + "durability": null, + "name": "Slayer's respite(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5840" + }, + { + "ge_buy_limit": "100", + "examine": "Ale with bite.", + "grand_exchange_price": "3582", + "durability": null, + "name": "Slayer's respite(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5841" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3582", + "durability": null, + "name": "Slayer's respite(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5842" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "6040", + "durability": null, + "name": "Cider(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5843" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6040", + "durability": null, + "name": "Cider(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5844" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "11000", + "durability": null, + "name": "Cider(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5845" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11000", + "durability": null, + "name": "Cider(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5846" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "15400", + "durability": null, + "name": "Cider(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5847" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15400", + "durability": null, + "name": "Cider(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5848" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A glass of Cider", + "grand_exchange_price": "18900", + "durability": null, + "name": "Cider(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5849" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18900", + "durability": null, + "name": "Cider(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5850" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "44600", + "durability": null, + "name": "Dwarven stout(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5851" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44600", + "durability": null, + "name": "Dwarven stout(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5852" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "68900", + "durability": null, + "name": "Dwarven stout(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5853" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "68900", + "durability": null, + "name": "Dwarven stout(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5854" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "98800", + "durability": null, + "name": "Dwarven stout(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5855" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98800", + "durability": null, + "name": "Dwarven stout(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5856" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal dwarven stout.", + "grand_exchange_price": "237400", + "durability": null, + "name": "Dwarven stout(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5857" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "237400", + "durability": null, + "name": "Dwarven stout(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5858" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "1697", + "durability": null, + "name": "Asgarnian ale(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5859" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1697", + "durability": null, + "name": "Asgarnian ale(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5860" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "3307", + "durability": null, + "name": "Asgarnian ale(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5861" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3307", + "durability": null, + "name": "Asgarnian ale(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5862" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "4917", + "durability": null, + "name": "Asgarnian ale(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5863" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4917", + "durability": null, + "name": "Asgarnian ale(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5864" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Asgarnian ale.", + "grand_exchange_price": "6778", + "durability": null, + "name": "Asgarnian ale(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5865" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6778", + "durability": null, + "name": "Asgarnian ale(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5866" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "57600", + "durability": null, + "name": "Greenmans ale(m1)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5867" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57600", + "durability": null, + "name": "Greenmans ale(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5868" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "92000", + "durability": null, + "name": "Greenmans ale(m2)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5869" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92000", + "durability": null, + "name": "Greenmans ale(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5870" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "136700", + "durability": null, + "name": "Greenmans ale(m3)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5871" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "136700", + "durability": null, + "name": "Greenmans ale(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5872" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Greenman's Ale.", + "grand_exchange_price": "231700", + "durability": null, + "name": "Greenmans ale(m4)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "5873" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "231700", + "durability": null, + "name": "Greenmans ale(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5874" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "3032", + "durability": null, + "name": "Mind bomb(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5875" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3032", + "durability": null, + "name": "Mind bomb(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5876" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "5977", + "durability": null, + "name": "Mind bomb(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5877" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5977", + "durability": null, + "name": "Mind bomb(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5878" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "8922", + "durability": null, + "name": "Mind bomb(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5879" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8922", + "durability": null, + "name": "Mind bomb(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5880" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Wizards Mind Bomb.", + "grand_exchange_price": "12700", + "durability": null, + "name": "Mind bomb(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5881" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12700", + "durability": null, + "name": "Mind bomb(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5882" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "2125", + "durability": null, + "name": "Dragon bitter(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5883" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2125", + "durability": null, + "name": "Dragon bitter(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5884" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "4163", + "durability": null, + "name": "Dragon bitter(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5885" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4163", + "durability": null, + "name": "Dragon bitter(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5886" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "6201", + "durability": null, + "name": "Dragon bitter(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5887" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6201", + "durability": null, + "name": "Dragon bitter(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5888" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Dragon Bitter.", + "grand_exchange_price": "8834", + "durability": null, + "name": "Dragon bitter(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5889" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8834", + "durability": null, + "name": "Dragon bitter(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5890" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "A foul smelling brew.", + "grand_exchange_price": "1315", + "durability": null, + "name": "M'light mead(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5891" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1315", + "durability": null, + "name": "M'light mead(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5892" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "2543", + "durability": null, + "name": "M'light mead(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5893" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2543", + "durability": null, + "name": "M'light mead(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5894" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "3771", + "durability": null, + "name": "M'light mead(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5895" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3771", + "durability": null, + "name": "M'light mead(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5896" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Moonlight Mead.", + "grand_exchange_price": "5000", + "durability": null, + "name": "M'light mead(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5897" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5000", + "durability": null, + "name": "M'light mead(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5898" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "13500", + "durability": null, + "name": "Axeman's folly(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5899" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13500", + "durability": null, + "name": "Axeman's folly(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5900" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "24800", + "durability": null, + "name": "Axeman's folly(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5901" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24800", + "durability": null, + "name": "Axeman's folly(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5902" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than a normal Axeman's Folly.", + "grand_exchange_price": "37300", + "durability": null, + "name": "Axeman's folly(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5903" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "37300", + "durability": null, + "name": "Axeman's folly(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5904" + }, + { + "ge_buy_limit": "100", + "examine": "This might help me chop harder.", + "grand_exchange_price": "60700", + "durability": null, + "name": "Axeman's folly(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5905" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60700", + "durability": null, + "name": "Axeman's folly(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5906" + }, + { + "ge_buy_limit": "100", + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "18000", + "durability": null, + "name": "Chef's delight(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5907" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18000", + "durability": null, + "name": "Chef's delight(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5908" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "34300", + "durability": null, + "name": "Chef's delight(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5909" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "34300", + "durability": null, + "name": "Chef's delight(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5910" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "51000", + "durability": null, + "name": "Chef's delight(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5911" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "51000", + "durability": null, + "name": "Chef's delight(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5912" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Chef's Delight.", + "grand_exchange_price": "98600", + "durability": null, + "name": "Chef's delight(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5913" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98600", + "durability": null, + "name": "Chef's delight(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5914" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "3672", + "durability": null, + "name": "Slayer respite(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5915" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3672", + "durability": null, + "name": "Slayer respite(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5916" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "7258", + "durability": null, + "name": "Slayer respite(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5917" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7258", + "durability": null, + "name": "Slayer respite(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5918" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "10800", + "durability": null, + "name": "Slayer respite(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5919" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10800", + "durability": null, + "name": "Slayer respite(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5920" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal Slayer's Respite.", + "grand_exchange_price": "15300", + "durability": null, + "name": "Slayer respite(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5921" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15300", + "durability": null, + "name": "Slayer respite(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5922" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "2966", + "durability": null, + "name": "Cider(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5923" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2966", + "durability": null, + "name": "Cider(m1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5924" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "5845", + "durability": null, + "name": "Cider(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5925" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5845", + "durability": null, + "name": "Cider(m2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5926" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "8724", + "durability": null, + "name": "Cider(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5927" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8724", + "durability": null, + "name": "Cider(m3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5928" + }, + { + "ge_buy_limit": "100", + "examine": "This looks a good deal stronger than normal cider.", + "grand_exchange_price": "11900", + "durability": null, + "name": "Cider(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5929" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11900", + "durability": null, + "name": "Cider(m4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5930" + }, + { + "ge_buy_limit": "5000", + "examine": "I can weave this to make sacks.", + "grand_exchange_price": "532", + "durability": null, + "name": "Jute fibre", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "5931" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "532", + "durability": null, + "name": "Jute fibre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5932" + }, + { + "ge_buy_limit": "200", + "examine": "A branch from a willow tree.", + "grand_exchange_price": "1255", + "durability": null, + "name": "Willow branch", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "5933" + }, + { + "ge_buy_limit": "200", + "grand_exchange_price": "1255", + "durability": null, + "name": "Willow branch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5934" + }, + { + "ge_buy_limit": "10000", + "examine": "A vial filled with coconut milk.", + "grand_exchange_price": "1307", + "durability": null, + "name": "Coconut milk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5935" + }, + { + "ge_buy_limit": "1000", + "examine": "A vial of extra-strong weapon poison, for spears and daggers.", + "grand_exchange_price": "605", + "durability": null, + "name": "Weapon poison+", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5937" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "605", + "durability": null, + "name": "Weapon poison+", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5938" + }, + { + "ge_buy_limit": "1000", + "examine": "A vial of super strong weapon poison, for spears and daggers.", + "grand_exchange_price": "4817", + "durability": null, + "name": "Weapon poison++", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "5940" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "4817", + "durability": null, + "name": "Weapon poison++", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5941" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1032", + "durability": null, + "name": "Antipoison+(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5943" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1032", + "durability": null, + "name": "Antipoison+(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5944" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1499", + "durability": null, + "name": "Antipoison+(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5945" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1499", + "durability": null, + "name": "Antipoison+(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5946" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1316", + "durability": null, + "name": "Antipoison+(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5947" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1316", + "durability": null, + "name": "Antipoison+(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5948" + }, + { + "ge_buy_limit": "1000", + "examine": "N doses of extra-stong antipoison potion", + "grand_exchange_price": "1599", + "durability": null, + "name": "Antipoison+(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5949" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1599", + "durability": null, + "name": "Antipoison+(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5950" + }, + { + "ge_buy_limit": "1000", + "examine": "4 doses of a super-strong antipoison potion.", + "grand_exchange_price": "1138", + "durability": null, + "name": "Antipoison++(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5952" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1138", + "durability": null, + "name": "Antipoison++(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5953" + }, + { + "ge_buy_limit": "1000", + "examine": "3 doses of a super-strong antipoison potion.", + "grand_exchange_price": "1071", + "durability": null, + "name": "Antipoison++(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5954" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1071", + "durability": null, + "name": "Antipoison++(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5955" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of a super-strong antipoison potion.", + "grand_exchange_price": "632", + "durability": null, + "name": "Antipoison++(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5956" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "632", + "durability": null, + "name": "Antipoison++(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5957" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of a super-strong antipoison potion.", + "grand_exchange_price": "821", + "durability": null, + "name": "Antipoison++(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5958" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "821", + "durability": null, + "name": "Antipoison++(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5959" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5960" + }, + { + "durability": null, + "name": "Tomatoes(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5961" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5962" + }, + { + "durability": null, + "name": "Tomatoes(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5963" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5964" + }, + { + "durability": null, + "name": "Tomatoes(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5965" + }, + { + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "663", + "durability": null, + "name": "Tomatoes(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5966" + }, + { + "durability": null, + "name": "Tomatoes(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5967" + }, + { + "ge_buy_limit": "10000", + "examine": "A basket filled with tomatoes.", + "grand_exchange_price": "335", + "durability": null, + "name": "Tomatoes(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5968" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "335", + "durability": null, + "name": "Tomatoes(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5969" + }, + { + "ge_buy_limit": "5000", + "examine": "I could make a spicy curry with this.", + "grand_exchange_price": "318", + "durability": null, + "name": "Curry leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5970" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "318", + "durability": null, + "name": "Curry leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5971" + }, + { + "ge_buy_limit": "5000", + "examine": "Looks delicious.", + "grand_exchange_price": "2074", + "durability": null, + "name": "Papaya fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5972" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2074", + "durability": null, + "name": "Papaya fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5973" + }, + { + "ge_buy_limit": "5000", + "examine": "It's a coconut.", + "grand_exchange_price": "2568", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5974" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2568", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5975" + }, + { + "ge_buy_limit": "5000", + "examine": "It's a coconut.", + "grand_exchange_price": "1258", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5976" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1258", + "durability": null, + "name": "Coconut", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5977" + }, + { + "ge_buy_limit": "10000", + "examine": "All the milk has been removed.", + "grand_exchange_price": "54", + "durability": null, + "name": "Coconut shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5978" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "54", + "durability": null, + "name": "Coconut shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5979" + }, + { + "ge_buy_limit": "100", + "examine": "This is the largest fruit I've ever seen.", + "grand_exchange_price": "43", + "durability": null, + "name": "Calquat fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5980" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "43", + "durability": null, + "name": "Calquat fruit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5981" + }, + { + "shop_price": "48", + "ge_buy_limit": "10000", + "examine": "A juicy watermelon.", + "grand_exchange_price": "41", + "durability": null, + "name": "Watermelon", + "tradeable": "true", + "weight": "0.111", + "archery_ticket_price": "0", + "id": "5982" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "41", + "durability": null, + "name": "Watermelon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5983" + }, + { + "ge_buy_limit": "1000", + "examine": "A slice of watermelon.", + "grand_exchange_price": "40", + "durability": null, + "name": "Watermelon slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5984" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "40", + "durability": null, + "name": "Watermelon slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5985" + }, + { + "ge_buy_limit": "10000", + "examine": "Raw sweetcorn.", + "grand_exchange_price": "19", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5986" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "19", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5987" + }, + { + "ge_buy_limit": "10000", + "examine": "Delicious cooked sweetcorn.", + "grand_exchange_price": "15", + "durability": null, + "name": "Cooked sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5988" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "15", + "durability": null, + "name": "Cooked sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5989" + }, + { + "durability": null, + "name": "Burnt sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5991" + }, + { + "ge_buy_limit": "100", + "examine": "A bucket of apple mush.", + "grand_exchange_price": "425", + "durability": null, + "name": "Apple mush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5992" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "425", + "durability": null, + "name": "Apple mush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5993" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Hammerstone hops.", + "grand_exchange_price": "14", + "durability": null, + "name": "Hammerstone hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5994" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "14", + "durability": null, + "name": "Hammerstone hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5995" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Asgarnian hops.", + "grand_exchange_price": "2", + "durability": null, + "name": "Asgarnian hops", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "5996" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2", + "durability": null, + "name": "Asgarnian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5997" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Yanillian hops.", + "grand_exchange_price": "1", + "durability": null, + "name": "Yanillian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5998" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Yanillian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "5999" + }, + { + "shop_price": "4", + "ge_buy_limit": "1000", + "examine": "A handful of Krandorian hops.", + "grand_exchange_price": "2", + "durability": null, + "name": "Krandorian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6000" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2", + "durability": null, + "name": "Krandorian hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6001" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of wildblood hops.", + "grand_exchange_price": "66", + "durability": null, + "name": "Wildblood hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6002" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "66", + "durability": null, + "name": "Wildblood hops", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6003" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "examine": "A Bittercap Mushroom", + "durability": null, + "name": "Mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6004" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "durability": null, + "name": "Mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6005" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of Barley.", + "grand_exchange_price": "211", + "durability": null, + "name": "Barley", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6006" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "211", + "durability": null, + "name": "Barley", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6007" + }, + { + "ge_buy_limit": "1000", + "examine": "A handful of barley malt.", + "grand_exchange_price": "410", + "durability": null, + "name": "Barley malt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6008" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "410", + "durability": null, + "name": "Barley malt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6009" + }, + { + "ge_buy_limit": "1000", + "examine": "A bunch of marigolds.", + "grand_exchange_price": "3326", + "durability": null, + "name": "Marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6010" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3326", + "durability": null, + "name": "Marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6011" + }, + { + "ge_buy_limit": "1000", + "examine": "A bunch of nasturtiums.", + "grand_exchange_price": "52", + "durability": null, + "name": "Nasturtiums", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6012" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "52", + "durability": null, + "name": "Nasturtiums", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6013" + }, + { + "ge_buy_limit": "1000", + "examine": "Some rosemary.", + "grand_exchange_price": "29", + "durability": null, + "name": "Rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6014" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "29", + "durability": null, + "name": "Rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6015" + }, + { + "ge_buy_limit": "10000", + "examine": "Don't prick yourself with this.", + "grand_exchange_price": "6990", + "durability": null, + "name": "Cactus spine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6016" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "6990", + "durability": null, + "name": "Cactus spine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6017" + }, + { + "ge_buy_limit": "10000", + "examine": "They look sweet and juicy, but only a fool would eat them.", + "grand_exchange_price": "399", + "durability": null, + "name": "Poison ivy berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6018" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "399", + "durability": null, + "name": "Poison ivy berries", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6019" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "152", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6020" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "152", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6021" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "27", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6022" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6023" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "21", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6024" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6025" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "7", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6026" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6027" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "11", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6028" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6029" + }, + { + "ge_buy_limit": "100", + "examine": "A pile of leaves.", + "grand_exchange_price": "4", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6030" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4", + "durability": null, + "name": "Leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6031" + }, + { + "shop_price": "20", + "ge_buy_limit": "10000", + "examine": "Good for plants, helps them grow.", + "grand_exchange_price": "97", + "durability": null, + "name": "Compost", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6032" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "97", + "durability": null, + "name": "Compost", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6033" + }, + { + "ge_buy_limit": "10000", + "examine": "Super-good for the smallest or largest of plants.", + "grand_exchange_price": "909", + "durability": null, + "name": "Supercompost", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6034" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "909", + "durability": null, + "name": "Supercompost", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6035" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "Use this on plants to cure disease.", + "grand_exchange_price": "170", + "durability": null, + "name": "Plant cure", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6036" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "170", + "durability": null, + "name": "Plant cure", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6037" + }, + { + "ge_buy_limit": "100", + "examine": "I could use this to make jewellery.", + "grand_exchange_price": "1078", + "durability": null, + "name": "Magic string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6038" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1078", + "durability": null, + "name": "Magic string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6039" + }, + { + "destroy_message": "You will need to create a new amulet if you destroy this one.", + "examine": "An Amulet of Nature.", + "durability": null, + "name": "Amulet of nature", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6040", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "examine": "Strung with the root of a Magic Tree. If I enchant this it will become an amulet of nature.", + "grand_exchange_price": "1996", + "durability": null, + "name": "Pre-nature amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6041", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1996", + "durability": null, + "name": "Pre-nature amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6042" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of the Oak tree.", + "grand_exchange_price": "60", + "durability": null, + "name": "Oak roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6043" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60", + "durability": null, + "name": "Oak roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6044" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of the Willow tree.", + "grand_exchange_price": "41", + "durability": null, + "name": "Willow roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6045" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "41", + "durability": null, + "name": "Willow roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6046" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of the Maple tree.", + "grand_exchange_price": "40", + "durability": null, + "name": "Maple roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6047" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40", + "durability": null, + "name": "Maple roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6048" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of a yew tree", + "grand_exchange_price": "570", + "durability": null, + "name": "Yew roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6049" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "570", + "durability": null, + "name": "Yew roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6050" + }, + { + "ge_buy_limit": "100", + "examine": "The roots of a magic tree.", + "grand_exchange_price": "5853", + "durability": null, + "name": "Magic roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6051" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5853", + "durability": null, + "name": "Magic roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6052" + }, + { + "durability": null, + "name": "Spirit roots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6054" + }, + { + "shop_price": "1", + "examine": "A handful of weeds.", + "durability": null, + "name": "Weeds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6055" + }, + { + "durability": null, + "name": "Weeds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6056" + }, + { + "examine": "A sack filled with hay. / This sack of hay has a bronze spear sticking through it.", + "durability": null, + "name": "Hay sack", + "archery_ticket_price": "0", + "id": "6057" + }, + { + "examine": "A sack filled with hay. / This sack of hay has a bronze spear sticking through it.", + "durability": null, + "name": "Hay sack", + "archery_ticket_price": "0", + "id": "6058" + }, + { + "examine": "This should scare the birds.", + "durability": null, + "name": "Scarecrow", + "archery_ticket_price": "0", + "id": "6059" + }, + { + "durability": null, + "name": "Stool", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6060" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "134", + "durability": null, + "name": "Bronze bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6061", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "shop_price": "3", + "ge_buy_limit": "10000", + "examine": "Bronze crossbow bolts.", + "grand_exchange_price": "1162", + "durability": null, + "name": "Bronze bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6062", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,10", + "equipment_slot": "13" + }, + { + "examine": "How do I wash blood stains out?", + "durability": null, + "name": "Bloody mourner top", + "weight": "2.72", + "archery_ticket_price": "0", + "id": "6064" + }, + { + "remove_sleeves": "true", + "examine": "A thick heavy leather top.", + "durability": null, + "name": "Mourner top", + "archery_ticket_price": "0", + "id": "6065", + "equipment_slot": "4" + }, + { + "examine": "Damaged: These are in need of a good tailor.Repaired: A pair of mourner trousers.", + "durability": null, + "name": "Mourner trousers", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "6066" + }, + { + "examine": "Damaged: These are in need of a good tailor.Repaired: A pair of mourner trousers.", + "durability": null, + "name": "Mourner trousers", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "6067", + "equipment_slot": "7" + }, + { + "shop_price": "160", + "examine": "These will keep my hands warm.", + "durability": null, + "name": "Mourner gloves", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6068", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "160", + "examine": "Comfortable leather boots.", + "durability": null, + "name": "Mourner boots", + "weight": "1.36", + "archery_ticket_price": "0", + "id": "6069", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "A dull brown cape.", + "durability": null, + "name": "Mourner cloak", + "weight": "2.25", + "archery_ticket_price": "0", + "id": "6070", + "equipment_slot": "1" + }, + { + "shop_price": "160", + "examine": "A letter of recommendation.", + "durability": null, + "name": "Mourner letter", + "archery_ticket_price": "0", + "id": "6071" + }, + { + "examine": "A bar of soap taken from Tegid.", + "durability": null, + "name": "Tegid's soap", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6072" + }, + { + "examine": "A book on the history of Prifddinas.", + "durability": null, + "name": "Prifddinas' history", + "archery_ticket_price": "0", + "id": "6073" + }, + { + "examine": "A book on the exploration of the eastern realm.", + "durability": null, + "name": "Eastern discovery", + "archery_ticket_price": "0", + "id": "6075" + }, + { + "examine": "A book on the settlement of the eastern realm.", + "durability": null, + "name": "Eastern settlement", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6077" + }, + { + "examine": "A book about the great divide.", + "durability": null, + "name": "The great divide", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6079" + }, + { + "examine": "A strange broken device of gnomic design.", + "durability": null, + "name": "Broken device", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6081" + }, + { + "turn90cw_anim": "2319", + "examine": "A device for firing dye.", + "walk_anim": "2317", + "durability": null, + "weight": "4", + "turn90ccw_anim": "2320", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "20", + "turn180_anim": "2318", + "render_anim": "284", + "equipment_slot": "3", + "stand_anim": "2316", + "name": "Fixed device", + "run_anim": "2322", + "archery_ticket_price": "0", + "id": "6082", + "stand_turn_anim": "2321" + }, + { + "examine": "This key has seen a lot of use. (Mourning's Ends Part I)", + "durability": null, + "name": "Tarnished key", + "archery_ticket_price": "0", + "id": "6083" + }, + { + "examine": "A large pair of ogre bellows filled with red dye.", + "durability": null, + "name": "Red dye bellows", + "archery_ticket_price": "0", + "id": "6085" + }, + { + "examine": "A large pair of ogre bellows filled with blue dye.", + "durability": null, + "name": "Blue dye bellows", + "archery_ticket_price": "0", + "id": "6086" + }, + { + "examine": "A large pair of ogre bellows filled with yellow dye.", + "durability": null, + "name": "Yellow dye bellows", + "archery_ticket_price": "0", + "id": "6087" + }, + { + "examine": "A large pair of ogre bellows filled with green dye.", + "durability": null, + "name": "Green dye bellows", + "archery_ticket_price": "0", + "id": "6088" + }, + { + "examine": "A blue dye filled toad.", + "durability": null, + "name": "Blue toad", + "weight": "1", + "archery_ticket_price": "0", + "id": "6089" + }, + { + "examine": "A red dye filled toad.", + "durability": null, + "name": "Red toad", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "6090" + }, + { + "examine": "A yellow dye filled toad.", + "durability": null, + "name": "Yellow toad", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "6091" + }, + { + "examine": "A green dye filled toad.", + "durability": null, + "name": "Green toad", + "weight": "1", + "archery_ticket_price": "0", + "id": "6092" + }, + { + "examine": "A barrel full of rotten apples.", + "durability": null, + "name": "Rotten apples", + "weight": "17", + "archery_ticket_price": "0", + "id": "6093" + }, + { + "examine": "A barrel full of mushed apples.", + "durability": null, + "name": "Apple barrel", + "archery_ticket_price": "0", + "id": "6094" + }, + { + "examine": "A barrel full of rotten apples and naptha.", + "durability": null, + "name": "Naphtha apple mix", + "archery_ticket_price": "0", + "id": "6095" + }, + { + "examine": "A barrel full of toxic naphtha.", + "durability": null, + "name": "Toxic naphtha", + "weight": "32", + "archery_ticket_price": "0", + "id": "6096" + }, + { + "examine": "It's a sieve.", + "durability": null, + "name": "Sieve", + "archery_ticket_price": "0", + "id": "6097" + }, + { + "examine": "A pile of toxic powder.", + "durability": null, + "name": "Toxic powder", + "archery_ticket_price": "0", + "id": "6098" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (4)", + "archery_ticket_price": "0", + "id": "6099" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (3)", + "archery_ticket_price": "0", + "id": "6100" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (2)", + "archery_ticket_price": "0", + "id": "6101" + }, + { + "examine": "A tiny crystal enchanted to return the user to Lletya.", + "durability": null, + "name": "Teleport crystal (1)", + "archery_ticket_price": "0", + "id": "6102" + }, + { + "examine": "A tiny Elf crystal, I need to have this re-enchanted", + "durability": null, + "name": "Tiny elf crystal", + "archery_ticket_price": "0", + "id": "6103" + }, + { + "examine": "This key is newly cut. (Mourning's Ends Part II)", + "durability": null, + "name": "New key", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "6104" + }, + { + "examine": "They seem to be not quite of this world...", + "durability": null, + "name": "Ghostly boots", + "archery_ticket_price": "0", + "id": "6106", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "remove_sleeves": "true", + "examine": "Varies", + "durability": null, + "name": "Ghostly robe", + "archery_ticket_price": "0", + "id": "6107", + "bonuses": "0,0,0,5,0,0,0,0,5,0,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "Varies", + "durability": null, + "name": "Ghostly robe", + "archery_ticket_price": "0", + "id": "6108", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "A ghostly hood, fit for a ghostly head.", + "durability": null, + "name": "Ghostly hood", + "archery_ticket_price": "0", + "id": "6109", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "They seem to fade in and out of existence...", + "durability": null, + "name": "Ghostly gloves", + "archery_ticket_price": "0", + "id": "6110", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Made of a strange, ghostly material...", + "durability": null, + "name": "Ghostly cloak", + "archery_ticket_price": "0", + "id": "6111", + "bonuses": "0,0,0,5,0,0,0,0,5,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "destroy_message": "Return to the drunken dwarf's drunken relative to get your seeds back.", + "examine": "Kelda hop seeds can only be grown underground!", + "durability": null, + "name": "Kelda seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6112" + }, + { + "destroy_message": "Return to the Keldagrim palace gardener to get your hops back.", + "examine": "A handful of Kelda Hops.", + "durability": null, + "name": "Kelda hops", + "tradeable": "false", + "destroy": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "6113" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pint of bluish beer.", + "durability": null, + "name": "Kelda stout", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6118" + }, + { + "examine": "There is a strange [green/yellow] marking on this stone.", + "durability": null, + "name": "Square stone", + "weight": "1", + "archery_ticket_price": "0", + "id": "6119" + }, + { + "examine": "There is a strange [green/yellow] marking on this stone.", + "durability": null, + "name": "Square stone", + "weight": "1", + "archery_ticket_price": "0", + "id": "6120" + }, + { + "durability": null, + "name": "A chair", + "archery_ticket_price": "0", + "id": "6122", + "equipment_slot": "5" + }, + { + "shop_price": "1", + "examine": "I need to fill this with beer.", + "grand_exchange_price": "25", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "6123", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Coconut milk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6124" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(2)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6125", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(3)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6126", + "equipment_slot": "3" + }, + { + "examine": "This will teleport me to Rellekka when I play it. A musical intrument that I can magically play.", + "durability": null, + "name": "Enchanted lyre(4)", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6127", + "equipment_slot": "3" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "Protective headwear made from crabs. Better than it sounds.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21000", + "name": "Rock-shell helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6128", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,6,0,0,0,0" + }, + { + "lendable": "true", + "requirements": "{1,40}", + "remove_sleeves": "true", + "ge_buy_limit": "100", + "grand_exchange_price": "40600", + "durability": null, + "name": "Rock-shell plate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6129", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,30,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "Some tough leggings made from rock crab parts.", + "durability": null, + "weight": "9", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "39400", + "name": "Rock-shell legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6130", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,10,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "A helm fit for any Fremennik ranger.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "35800", + "name": "Spined helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6131", + "bonuses": "-6,-6,-6,-6,6,6,6,6,6,0,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35800", + "durability": null, + "name": "Spined helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6132" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "A constant reminder that I'm above a Dagannoth in the food chain.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "4386", + "name": "Spined body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6133", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4386", + "durability": null, + "name": "Spined body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6134" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "Stylish leg armour for rangers with a lingering smell of raw fish...", + "durability": null, + "weight": "5", + "absorb": "0,4,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "2132", + "name": "Spined chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6135", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2132", + "durability": null, + "name": "Spined chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6136" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Make your foes cower by wearing a skull as a helmet!", + "durability": null, + "weight": "1.3", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "29500", + "name": "Skeletal helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6137", + "bonuses": "0,0,0,2,-2,10,9,11,3,0,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29500", + "durability": null, + "name": "Skeletal helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6138" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "The bones in this armour seems to vibrate with a magic quality...", + "durability": null, + "weight": "4.9", + "absorb": "6,3,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "27800", + "name": "Skeletal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6139", + "bonuses": "0,0,0,8,-10,35,25,42,15,0,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27800", + "durability": null, + "name": "Skeletal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6140" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "A superior set of strengthened slacks for any self respecting seer.", + "durability": null, + "weight": "4", + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "23600", + "name": "Skeletal bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6141", + "bonuses": "0,0,0,6,-7,22,20,24,10,0,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23600", + "durability": null, + "name": "Skeletal bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6142" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Some finely crafted Fremennik boots, made from spined dagannoth hide.", + "grand_exchange_price": "1671", + "durability": null, + "name": "Spined boots", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6143", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1671", + "durability": null, + "name": "Spined boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6144" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Some Fremennik boots, made from the shards of a rock crab's shell.", + "grand_exchange_price": "756", + "durability": null, + "name": "Rock-shell boots", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6145", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "756", + "durability": null, + "name": "Rock-shell boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6146" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Some finely crafted Fremennik boots, made from the bones of a Wallasalki.", + "grand_exchange_price": "4958", + "durability": null, + "name": "Skeletal boots", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6147", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4958", + "durability": null, + "name": "Skeletal boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6148" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Fremennik gloves stitched together from spined dagannoth hide.", + "grand_exchange_price": "955", + "durability": null, + "name": "Spined gloves", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6149", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "955", + "durability": null, + "name": "Spined gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6150" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Fremennik gloves stitched together from rock crab shell shards.", + "grand_exchange_price": "951", + "durability": null, + "name": "Rock-shell gloves", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6151", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "951", + "durability": null, + "name": "Rock-shell gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6152" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "Fremennik gloves stitched together from wallasalki bones fragments.", + "grand_exchange_price": "21800", + "durability": null, + "name": "Skeletal gloves", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6153", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21800", + "durability": null, + "name": "Skeletal gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6154" + }, + { + "ge_buy_limit": "500", + "examine": "A sturdy piece of dagannoth hide.", + "grand_exchange_price": "3978", + "durability": null, + "name": "Dagannoth hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6155" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "3978", + "durability": null, + "name": "Dagannoth hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6156" + }, + { + "ge_buy_limit": "100", + "examine": "A spherical chunk of rock-shell.", + "grand_exchange_price": "7371", + "durability": null, + "name": "Rock-shell chunk", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6157" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7371", + "durability": null, + "name": "Rock-shell chunk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6158" + }, + { + "ge_buy_limit": "100", + "examine": "A curved piece of rock-shell.", + "grand_exchange_price": "11300", + "durability": null, + "name": "Rock-shell shard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6159" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11300", + "durability": null, + "name": "Rock-shell shard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6160" + }, + { + "ge_buy_limit": "100", + "examine": "A slim piece of rock-shell.", + "grand_exchange_price": "16100", + "durability": null, + "name": "Rock-shell splinter", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6161" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16100", + "durability": null, + "name": "Rock-shell splinter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6162" + }, + { + "ge_buy_limit": "100", + "examine": "A fearsome looking skull.", + "grand_exchange_price": "9859", + "durability": null, + "name": "Skull piece", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6163" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9859", + "durability": null, + "name": "Skull piece", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6164" + }, + { + "ge_buy_limit": "100", + "examine": "A slightly damaged ribcage.", + "grand_exchange_price": "11300", + "durability": null, + "name": "Ribcage piece", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6165" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11300", + "durability": null, + "name": "Ribcage piece", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6166" + }, + { + "ge_buy_limit": "100", + "examine": "An interesting looking bone shard.", + "grand_exchange_price": "10300", + "durability": null, + "name": "Fibula piece", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6167" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10300", + "durability": null, + "name": "Fibula piece", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6168" + }, + { + "ge_buy_limit": "100", + "examine": "A toughened chunk of dagannoth hide.", + "grand_exchange_price": "23400", + "durability": null, + "name": "Circular hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6169" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23400", + "durability": null, + "name": "Circular hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6170" + }, + { + "ge_buy_limit": "100", + "examine": "A tattered chunk of dagannoth hide.", + "grand_exchange_price": "502", + "durability": null, + "name": "Flattened hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6171" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "502", + "durability": null, + "name": "Flattened hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6172" + }, + { + "ge_buy_limit": "100", + "examine": "A weathered chunk of dagannoth hide.", + "grand_exchange_price": "398", + "durability": null, + "name": "Stretched hide", + "tradeable": "true", + "weight": "3.1", + "archery_ticket_price": "0", + "id": "6173" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "398", + "durability": null, + "name": "Stretched hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6174" + }, + { + "durability": null, + "name": "Rock-shell helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6175" + }, + { + "examine": "A sturdy body armour made from rock crab pieces.", + "durability": null, + "name": "Rock-shell plate", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "9", + "id": "6176" + }, + { + "durability": null, + "name": "Rock-shell legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6177" + }, + { + "examine": "I need to cook this first.", + "durability": null, + "name": "Raw pheasant", + "weight": "10", + "archery_ticket_price": "0", + "id": "6178" + }, + { + "examine": "I need to cook this first.", + "durability": null, + "name": "Raw pheasant", + "weight": "10", + "archery_ticket_price": "0", + "id": "6179" + }, + { + "remove_sleeves": "true", + "examine": "A leather strapped top.", + "durability": null, + "name": "Lederhosen top", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6180", + "equipment_slot": "4" + }, + { + "examine": "Brown leather shorts with bright white socks?", + "durability": null, + "name": "Lederhosen shorts", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6181", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "A hat with a goat's hair attached.", + "durability": null, + "name": "Lederhosen hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "6182", + "equipment_slot": "0" + }, + { + "examine": "I can use this at the Varrock clothes shop.", + "durability": null, + "name": "Frog token", + "archery_ticket_price": "0", + "id": "6183" + }, + { + "remove_sleeves": "true", + "examine": "Very posh!", + "durability": null, + "name": "Prince tunic", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "6184", + "equipment_slot": "4" + }, + { + "examine": "Very posh!", + "durability": null, + "name": "Prince leggings", + "weight": "2", + "archery_ticket_price": "0", + "id": "6185", + "equipment_slot": "7" + }, + { + "remove_sleeves": "true", + "examine": "Very posh!", + "durability": null, + "name": "Princess blouse", + "weight": "2", + "archery_ticket_price": "0", + "id": "6186", + "equipment_slot": "4" + }, + { + "examine": "Very posh!", + "durability": null, + "name": "Princess skirt", + "weight": "2", + "archery_ticket_price": "0", + "id": "6187", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "Now that's just silly.", + "durability": null, + "name": "Frog mask", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6188", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Could there be something valuable in here?", + "durability": null, + "name": "Mystery box", + "weight": "1", + "archery_ticket_price": "0", + "id": "6199", + "point_price": "2" + }, + { + "destroy_message": "A ghastly fish", + "examine": "A raw...fish? Is this a fish??", + "durability": null, + "name": "Raw fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6200" + }, + { + "examine": "Fish-tastic!", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "6201" + }, + { + "destroy_message": "A ghastly fish", + "examine": "It's a fish-like thing that appears to already be cooked. It looks disgusting.", + "durability": null, + "name": "Fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6202" + }, + { + "destroy_message": "A ghastly fish", + "examine": "A raw...fish? Is this a fish??", + "durability": null, + "name": "Raw fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6204" + }, + { + "destroy_message": "A ghastly fish", + "examine": "It's a fish-like thing that appears to already be cooked. It looks disgusting.", + "durability": null, + "name": "Fishlike thing", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6206" + }, + { + "examine": "It's an amulet of Man speak. It makes vague grunting noises.", + "durability": null, + "name": "Man speak amulet", + "archery_ticket_price": "0", + "id": "6208", + "equipment_slot": "2" + }, + { + "shop_price": "40", + "examine": "Useful for catching small fish.", + "grand_exchange_price": "433", + "durability": null, + "name": "Small fishing net", + "tradeable": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "6209" + }, + { + "ge_buy_limit": "1000", + "examine": "Teak logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "3365", + "durability": null, + "name": "Teak pyre logs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6211" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3365", + "durability": null, + "name": "Teak pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6212" + }, + { + "ge_buy_limit": "1000", + "examine": "Mahogany logs prepared with sacred oil for a funeral pyre.", + "grand_exchange_price": "3574", + "durability": null, + "name": "Mahogany pyre log", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "6213" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3574", + "durability": null, + "name": "Mahogany pyre log", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6214" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2007", + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6215", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2007", + "durability": null, + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6216" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6217", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6218" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6219", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6220" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6221", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6222" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6223", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6224" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6225", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6226" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6227", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6228" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6229", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6230" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6231", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6232" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6233", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6234" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2572", + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6235", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2572", + "durability": null, + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6236" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2200", + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6237", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2200", + "durability": null, + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6238" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6239", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6240" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6241", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6242" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6243", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6244" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6245", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6246" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6247", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6248" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6249", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6250" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6251", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6252" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6253", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6254" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6255", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6256" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2731", + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6257", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2731", + "durability": null, + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6258" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "1494", + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6259", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "attack_anims": "7060", + "ge_buy_limit": "100", + "grand_exchange_price": "1494", + "durability": null, + "name": "Broodoo shield (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6260" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6261", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6262" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6263", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6264" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6265", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6266" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6267", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6268" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6269", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6270" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6271", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6272" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6273", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6274" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6275", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6276" + }, + { + "requirements": "{1,25}-{6,25}", + "examine": "A scary broodoo shield.", + "grand_exchange_price": "1", + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "6277", + "absorb": "4,2,0", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "durability": null, + "name": "Broodoo shield (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6278" + }, + { + "requirements": "{1,25}-{6,25}", + "ge_buy_limit": "100", + "examine": "A scary broodoo shield.", + "durability": null, + "weight": "5.4", + "absorb": "4,2,0", + "equipment_slot": "5", + "grand_exchange_price": "2957", + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6279", + "bonuses": "0,0,0,3,-7,10,10,15,5,0,20,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2957", + "durability": null, + "name": "Broodoo shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6280" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden pole for use in primitive construction.", + "grand_exchange_price": "1", + "durability": null, + "name": "Thatch spar light", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6281", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Thatch spar light", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6282" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden pole for use in primitive construction.", + "grand_exchange_price": "2", + "durability": null, + "name": "Thatch spar med", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6283", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Thatch spar med", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6284" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden pole for use in primitive construction.", + "grand_exchange_price": "3", + "durability": null, + "name": "Thatch spar dense", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6285", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3", + "durability": null, + "name": "Thatch spar dense", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6286" + }, + { + "ge_buy_limit": "10000", + "examine": "Scaly but not slimy!", + "grand_exchange_price": "2084", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6287" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2084", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6288" + }, + { + "ge_buy_limit": "10000", + "examine": "Scaley but not slimy!", + "grand_exchange_price": "2019", + "durability": null, + "name": "Snakeskin", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6289" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2019", + "durability": null, + "name": "Snakeskin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6290" + }, + { + "ge_buy_limit": "1000", + "examine": "Its creeping days are over!", + "grand_exchange_price": "1949", + "durability": null, + "name": "Spider carcass", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "6291" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1949", + "durability": null, + "name": "Spider carcass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6292" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "Raw: A raw spider threaded onto a skewer stick.Cooked: A nicely roasted spider threaded onto a skewer stick.", + "grand_exchange_price": "207", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "6293" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "207", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6294" + }, + { + "shop_price": "40", + "ge_buy_limit": "1000", + "examine": "A raw spider threaded onto an arrow shaft. (Raw) A nicely roasted spider threaded onto an arrow shaft. (Cooked) A badly burnt spider threaded onto a charred arrow shaft. (Burnt)", + "grand_exchange_price": "106", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6295" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "106", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6296" + }, + { + "shop_price": "50", + "ge_buy_limit": "1000", + "examine": "Raw: A raw spider threaded onto a skewer stick.Cooked: A nicely roasted spider threaded onto a skewer stick.", + "grand_exchange_price": "54", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "6297" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "54", + "durability": null, + "name": "Spider on stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6298" + }, + { + "shop_price": "40", + "ge_buy_limit": "1000", + "examine": "A raw spider threaded onto an arrow shaft. (Raw) A nicely roasted spider threaded onto an arrow shaft. (Cooked) A badly burnt spider threaded onto a charred arrow shaft. (Burnt)", + "grand_exchange_price": "78", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6299" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "78", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6300" + }, + { + "durability": null, + "name": "Burnt spider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6302" + }, + { + "shop_price": "40", + "examine": "A raw spider threaded onto an arrow shaft. (Raw) A nicely roasted spider threaded onto an arrow shaft. (Cooked) A badly burnt spider threaded onto a charred arrow shaft. (Burnt)", + "grand_exchange_price": "106", + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6303" + }, + { + "durability": null, + "name": "Spider on shaft", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6304" + }, + { + "ge_buy_limit": "1000", + "examine": "A sharp pointed stick, quite resistant to fire.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skewer stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6305" + }, + { + "ge_buy_limit": "10000", + "examine": "Karamja currency.", + "grand_exchange_price": "2", + "durability": null, + "name": "Trading sticks", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6306" + }, + { + "ge_buy_limit": "100", + "examine": "Plant this in a herb patch to grow Goutweed.", + "grand_exchange_price": "6991", + "durability": null, + "name": "Gout tuber", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "6311" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6991", + "durability": null, + "name": "Gout tuber", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6312" + }, + { + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weight": "1.35", + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "grand_exchange_price": "179", + "name": "Opal machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6313", + "bonuses": "0,8,-2,0,0,0,1,1,0,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "179", + "durability": null, + "name": "Opal machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6314" + }, + { + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "grand_exchange_price": "4473", + "name": "Jade machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6315", + "bonuses": "0,11,-2,0,0,0,1,1,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4473", + "durability": null, + "name": "Jade machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6316" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A jungle specific slashing device.", + "durability": null, + "weight": "1.3", + "attack_speed": "4", + "weapon_interface": "6", + "render_anim": "2554", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "8774", + "name": "Red topaz machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6317", + "bonuses": "0,16,-2,0,0,0,1,1,0,0,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8774", + "durability": null, + "name": "Red topaz machete", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6318" + }, + { + "ge_buy_limit": "100", + "examine": "A giant mosquito's proboscis: aerodynamic, sharp and pointy!", + "grand_exchange_price": "9733", + "durability": null, + "name": "Proboscis", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6319" + }, + { + "requirements": "{1,30}-{4,30}", + "shop_price": "1588", + "ge_buy_limit": "100", + "examine": "Made from 100% real snakeskin.", + "durability": null, + "weight": "10", + "absorb": "0,4,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "23100", + "name": "Snakeskin body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6322", + "bonuses": "0,0,0,-5,12,25,28,32,15,35,30,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23100", + "durability": null, + "name": "Snakeskin body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6323" + }, + { + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "100", + "examine": "Made from 100% real snake.", + "durability": null, + "weight": "3.6", + "absorb": "0,3,1", + "equipment_slot": "7", + "grand_exchange_price": "702", + "name": "Snakeskin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6324", + "bonuses": "0,0,0,-5,6,8,8,10,4,10,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "702", + "durability": null, + "name": "Snakeskin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6325" + }, + { + "remove_head": "true", + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "100", + "examine": "Lightweight head protection.", + "durability": null, + "weight": "0.9", + "absorb": "0,2,1", + "equipment_slot": "0", + "grand_exchange_price": "871", + "name": "Snakeskin bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6326", + "bonuses": "0,0,0,-5,4,2,4,4,2,2,6,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "871", + "durability": null, + "name": "Snakeskin bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6327" + }, + { + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "100", + "examine": "Made from snakes.", + "grand_exchange_price": "10800", + "durability": null, + "name": "Snakeskin boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "6328", + "bonuses": "0,0,0,-10,3,1,1,2,1,0,9,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10800", + "durability": null, + "name": "Snakeskin boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6329" + }, + { + "requirements": "{1,30}-{4,30}", + "ge_buy_limit": "10000", + "examine": "Made from 100% real snake.", + "grand_exchange_price": "914", + "durability": null, + "name": "Snakeskin v'brace", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6330", + "bonuses": "0,0,0,-5,6,2,2,2,1,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "914", + "durability": null, + "name": "Snakeskin v'brace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6331" + }, + { + "ge_buy_limit": "25000", + "examine": "Some well-cut mahogany logs.", + "grand_exchange_price": "503", + "durability": null, + "name": "Mahogany logs", + "tradeable": "true", + "weight": "1.33", + "archery_ticket_price": "0", + "id": "6332" + }, + { + "ge_buy_limit": "25000", + "examine": "Some well-cut teak logs.", + "grand_exchange_price": "92", + "durability": null, + "name": "Teak logs", + "tradeable": "true", + "weight": "1.35", + "archery_ticket_price": "0", + "id": "6333" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "92", + "durability": null, + "name": "Teak logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6334" + }, + { + "ge_buy_limit": "100", + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1306", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6335", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1306", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6336" + }, + { + "ge_buy_limit": "100", + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "997", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6337", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "997", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6338" + }, + { + "ge_buy_limit": "100", + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1018", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6339", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1018", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6340" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "3331", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6341", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3331", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6342" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "1382", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6343", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1382", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6344" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "2337", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6345", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2337", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6346" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "734", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6347", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "734", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6348" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "2793", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6349", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2793", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6350" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "3171", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6351", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3171", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6352" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "1416", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6353", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1416", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6354" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "2785", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6355", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2785", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6356" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "944", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6357", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "944", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6358" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "672", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6359", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "672", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6360" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "2484", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6361", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2484", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6362" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "499", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6363", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "499", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6364" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "2440", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6365", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2440", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6366" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "1479", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6367", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1479", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6368" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "823", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6369", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "823", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6370" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Local dress.", + "grand_exchange_price": "2683", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6371", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2683", + "durability": null, + "name": "Tribal top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6372" + }, + { + "shop_price": "250", + "ge_buy_limit": "100", + "examine": "A brightly coloured robe prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "331", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6373", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "331", + "durability": null, + "name": "Villager robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6374" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A brightly coloured hat prized by the Tai Bwo Wannai peoples.", + "grand_exchange_price": "3010", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6375", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3010", + "durability": null, + "name": "Villager hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6376" + }, + { + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "A brightly coloured pair of local sandals.", + "grand_exchange_price": "2310", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6377", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2310", + "durability": null, + "name": "Villager sandals", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6378" + }, + { + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A <colour> armband, as worn by the Tai Bwo Wannai locals.", + "grand_exchange_price": "1697", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6379", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1697", + "durability": null, + "name": "Villager armband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6380" + }, + { + "shop_price": "24", + "ge_buy_limit": "100", + "examine": "A fez hat. Juss like that.", + "grand_exchange_price": "690", + "durability": null, + "name": "Fez", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "6382", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "690", + "durability": null, + "name": "Fez", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6383" + }, + { + "remove_sleeves": "true", + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A bit itchy.", + "grand_exchange_price": "649", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6384", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "649", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6385" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "Has a coarse hard wearing texture.", + "grand_exchange_price": "533", + "durability": null, + "name": "Desert robes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6386", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "533", + "durability": null, + "name": "Desert robes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6387" + }, + { + "remove_sleeves": "true", + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "A bit itchy.", + "grand_exchange_price": "1016", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6388", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1016", + "durability": null, + "name": "Desert top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6389" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "Better than factor 50 sun cream.", + "grand_exchange_price": "515", + "durability": null, + "name": "Desert legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6390", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "515", + "durability": null, + "name": "Desert legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6391" + }, + { + "remove_head": "true", + "shop_price": "35", + "ge_buy_limit": "100", + "examine": "Good for keeping the sun off my neck.", + "grand_exchange_price": "531", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6392", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "531", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6393" + }, + { + "remove_sleeves": "true", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Colourful.", + "grand_exchange_price": "650", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6394", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "650", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6395" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool light Menaphite robe.", + "grand_exchange_price": "440", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6396", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "440", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6397" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Look at those nobbily knees.", + "grand_exchange_price": "246", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6398", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "246", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6399" + }, + { + "remove_head": "true", + "shop_price": "35", + "ge_buy_limit": "100", + "examine": "Good for keeping the sun off my neck.", + "grand_exchange_price": "484", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6400", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "484", + "durability": null, + "name": "Menap headgear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6401" + }, + { + "remove_sleeves": "true", + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Colourful.", + "grand_exchange_price": "557", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6402", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "557", + "durability": null, + "name": "Menaphite top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6403" + }, + { + "shop_price": "40", + "ge_buy_limit": "100", + "examine": "A cool light Menaphite robe.", + "grand_exchange_price": "449", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6404", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "449", + "durability": null, + "name": "Menaphite robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6405" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Look at those nobbily knees.", + "grand_exchange_price": "236", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6406", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "236", + "durability": null, + "name": "Menap action kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6407" + }, + { + "requirements": "{17,10}-{0,10}", + "shop_price": "400", + "ge_buy_limit": "100", + "examine": "An offensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "852", + "name": "Oak blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6408", + "bonuses": "0,0,4,0,0,0,0,0,0,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "852", + "durability": null, + "name": "Oak blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6409" + }, + { + "requirements": "{17,10}-{1,10}", + "ge_buy_limit": "100", + "examine": "An defensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "818", + "name": "Oak blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6410", + "bonuses": "0,0,0,0,0,0,0,4,0,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "818", + "durability": null, + "name": "Oak blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6411" + }, + { + "requirements": "{17,20}-{0,20}", + "ge_buy_limit": "100", + "examine": "An offensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "1418", + "name": "Willow blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6412", + "bonuses": "0,0,8,0,0,0,0,0,0,0,0,8,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1418", + "durability": null, + "name": "Willow blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6413" + }, + { + "requirements": "{17,20}-{1,20}", + "ge_buy_limit": "100", + "examine": "A defensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "1285", + "name": "Willow blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6414", + "bonuses": "0,0,0,0,0,0,0,8,0,0,0,8,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1285", + "durability": null, + "name": "Willow blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6415" + }, + { + "requirements": "{17,30}", + "shop_price": "1200", + "ge_buy_limit": "100", + "examine": "A solid bit of maple.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "10", + "defence_anim": "425", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "1432", + "name": "Maple blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6416", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1432", + "durability": null, + "name": "Maple blackjack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6417" + }, + { + "requirements": "{17,30}-{0,30}", + "shop_price": "1600", + "ge_buy_limit": "100", + "examine": "An offensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "2079", + "name": "Maple blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6418", + "bonuses": "0,0,24,0,0,0,0,0,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2079", + "durability": null, + "name": "Maple blackjack(o)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6419" + }, + { + "requirements": "{17,30}-{1,30}", + "shop_price": "952", + "ge_buy_limit": "100", + "examine": "A defensive blackjack.", + "durability": null, + "weight": "1", + "attack_speed": "4", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "2407", + "name": "Maple blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6420", + "bonuses": "0,0,0,0,0,0,0,24,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2407", + "durability": null, + "name": "Maple blackjack(d)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6421" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "9", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6422" + }, + { + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6423" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6424" + }, + { + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6425" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "7", + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6426" + }, + { + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6427" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "16", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6428" + }, + { + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6429" + }, + { + "shop_price": "140", + "examine": "Used for small missile spells.", + "grand_exchange_price": "65", + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6430" + }, + { + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6431" + }, + { + "shop_price": "310", + "examine": "Used for medium missile spells.", + "grand_exchange_price": "399", + "durability": null, + "name": "Death rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6432" + }, + { + "durability": null, + "name": "Death rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6433" + }, + { + "shop_price": "378", + "examine": "Used for teleport spells.", + "grand_exchange_price": "277", + "durability": null, + "name": "Law rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6434" + }, + { + "durability": null, + "name": "Law rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6435" + }, + { + "shop_price": "17", + "examine": "Used for basic missile spells.", + "grand_exchange_price": "6", + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6436" + }, + { + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6437" + }, + { + "shop_price": "16", + "examine": "Used for Curse spells", + "grand_exchange_price": "6", + "durability": null, + "name": "Body rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6438" + }, + { + "durability": null, + "name": "Body rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6439" + }, + { + "examine": "A spadeful of refined coal.", + "durability": null, + "name": "Spadeful of coke", + "weight": "2", + "archery_ticket_price": "0", + "id": "6448" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A white rosebush seed.", + "durability": null, + "name": "White rose seed", + "tradeable": "false", + "destroy": "true", + "weight": "28.928", + "archery_ticket_price": "0", + "id": "6453" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A red rosebush seed.", + "durability": null, + "name": "Red rose seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6454" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pink rosebush seed.", + "durability": null, + "name": "Pink rose seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6455" + }, + { + "destroy_message": "You can get some more Burthorpe vine seeds from Berald in Taverly.", + "examine": "A grapevine seed.", + "durability": null, + "name": "Vine seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6456" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A delphinium seed.", + "durability": null, + "name": "Delphinium seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6457" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A snowdrop seed.", + "durability": null, + "name": "Snowdrop seed", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6460" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Shoot: A shoot that has been cut from a dying White Tree.Plant pot: A young White Tree sapling.Plant pot after watering: This shoot from a White Tree has been watered and will soon grow.", + "durability": null, + "name": "White tree shoot", + "archery_ticket_price": "0", + "id": "6461" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Shoot: A shoot that has been cut from a dying White Tree.Plant pot: A young White Tree sapling.Plant pot after watering: This shoot from a White Tree has been watered and will soon grow.", + "durability": null, + "name": "White tree shoot", + "archery_ticket_price": "0", + "id": "6462" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Shoot: A shoot that has been cut from a dying White Tree.Plant pot: A young White Tree sapling.Plant pot after watering: This shoot from a White Tree has been watered and will soon grow.", + "durability": null, + "name": "White tree shoot", + "archery_ticket_price": "0", + "id": "6463" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A young White Tree sapling", + "durability": null, + "name": "White tree sapling", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "6464" + }, + { + "destroy_message": "Another can be received from pickpocketing Dr. Fenkenstrain in the tower.", + "examine": "Unactivated: The Ring of charos.Activated: The power within this ring has been activated.", + "durability": null, + "name": "Ring of charos(a)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6465", + "equipment_slot": "12" + }, + { + "examine": "A rune essence chip that has been broken into shards.", + "durability": null, + "name": "Rune shards", + "archery_ticket_price": "0", + "id": "6466" + }, + { + "examine": "Crushed rune essence.", + "durability": null, + "name": "Rune dust", + "archery_ticket_price": "0", + "id": "6467" + }, + { + "shop_price": "25", + "examine": "Use this on plants to cure disease.", + "grand_exchange_price": "199", + "durability": null, + "name": "Plant cure", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6468" + }, + { + "examine": "Looks delicious.", + "durability": null, + "name": "White tree fruit", + "archery_ticket_price": "0", + "id": "6469" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "11500", + "durability": null, + "name": "Compost potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6470" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11500", + "durability": null, + "name": "Compost potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6471" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "6804", + "durability": null, + "name": "Compost potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6472" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6804", + "durability": null, + "name": "Compost potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6473" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "3338", + "durability": null, + "name": "Compost potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6474" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3338", + "durability": null, + "name": "Compost potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6475" + }, + { + "ge_buy_limit": "100", + "examine": "Pour this onto compost to make it into super-compost.", + "grand_exchange_price": "1734", + "durability": null, + "name": "Compost potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6476" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1734", + "durability": null, + "name": "Compost potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6477" + }, + { + "destroy_message": "You can get another one from Queen Ellamaria", + "examine": "I can use this to move heavy objects. (or) An empty trolley.", + "durability": null, + "name": "Trolley", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "6478" + }, + { + "destroy_message": "You can get another list from Queen Ellamaria in Varrock", + "examine": "A list of things that I must collect for Queen Ellamaria.", + "durability": null, + "name": "List", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6479" + }, + { + "requirements": "{4,60}", + "shop_price": "375", + "ge_buy_limit": "100", + "examine": "A razor sharp ring of obsidian.", + "durability": null, + "tokkul_price": "375", + "attack_speed": "4", + "weapon_interface": "18", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "2614,2614,2614,2614", + "grand_exchange_price": "340", + "name": "Toktz-xil-ul", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6522", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,49" + }, + { + "requirements": "{0,60}", + "shop_price": "60000", + "ge_buy_limit": "10", + "examine": "A razor sharp sword of obsidian.", + "durability": null, + "tokkul_price": "60000", + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "5", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "30200", + "name": "Toktz-xil-ak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6523", + "bonuses": "47,38,-2,0,0,2,3,0,0,0,0,49,0,0,0" + }, + { + "requirements": "{1,60}", + "shop_price": "67500", + "ge_buy_limit": "10", + "examine": "A spiked shield of Obsidian.", + "durability": null, + "tokkul_price": "67500", + "weight": "3.6", + "absorb": "5,0,11", + "equipment_slot": "5", + "grand_exchange_price": "34700", + "name": "Toktz-ket-xil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6524", + "bonuses": "0,0,0,-12,-8,40,42,38,0,65,60,5,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "37500", + "ge_buy_limit": "10", + "examine": "A large knife of Obsidian.", + "durability": null, + "tokkul_price": "37500", + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "6", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "16900", + "name": "Toktz-xil-ek", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6525", + "bonuses": "16,48,0,0,0,0,0,0,0,0,0,39,0,0,0" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "A staff of obsidian.", + "walk_anim": "1205", + "tokkul_price": "52500", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "26300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6526", + "stand_turn_anim": "1209", + "bonuses": "15,-1,55,15,0,10,15,5,15,0,0,55,5,0,0", + "requirements": "{0,60}-{6,60}", + "shop_price": "52500", + "durability": null, + "weight": "1", + "weapon_interface": "1", + "render_anim": "28", + "name": "Toktz-mej-tal" + }, + { + "requirements": "{0,60}", + "shop_price": "45000", + "ge_buy_limit": "10", + "examine": "A mace of obsidian.", + "durability": null, + "tokkul_price": "45000", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "10", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "22600", + "name": "Tzhaar-ket-em", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6527", + "bonuses": "-4,-4,62,0,0,0,0,0,0,0,0,56,0,0,0" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1663", + "examine": "A maul of obsidian.", + "walk_anim": "1663", + "tokkul_price": "75000", + "turn90ccw_anim": "1663", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1663", + "defence_anim": "1666", + "equipment_slot": "3", + "attack_anims": "2661,2661,2661,2661", + "grand_exchange_price": "31000", + "stand_anim": "1662", + "tradeable": "true", + "run_anim": "1664", + "archery_ticket_price": "0", + "id": "6528", + "stand_turn_anim": "823", + "bonuses": "0,0,80,-4,0,0,0,0,0,0,0,85,0,0,0", + "requirements": "{2,60}", + "shop_price": "75000", + "durability": null, + "weight": "3.6", + "weapon_interface": "10", + "render_anim": "27", + "attack_audios": "2520,0,0,0", + "name": "Tzhaar-ket-om" + }, + { + "examine": "It's a Token of some kind made from Obsidian.", + "durability": null, + "name": "Tokkul", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "6529" + }, + { + "durability": null, + "name": "Toktz-xil-ak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6535" + }, + { + "durability": null, + "name": "Toktz-ket-xil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6536" + }, + { + "durability": null, + "name": "Toktz-xil-ek", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6537" + }, + { + "durability": null, + "name": "Toktz-mej-tal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6538" + }, + { + "durability": null, + "name": "Tzhaar-ket-em", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6539" + }, + { + "durability": null, + "name": "Tzhaar-ket-om", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6540" + }, + { + "destroy_message": "You can get a replacement mouse toy by speaking to Bob, the Jagex cat.", + "examine": "An Advanced Combat Training Device.", + "durability": null, + "name": "Mouse toy", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6541", + "weapon_interface": "12", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You will not get a replacement for the present. Open it for your reward.", + "examine": "Thanks for all your help! Love, Bob & Neite.", + "durability": null, + "name": "Present", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6542" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6543" + }, + { + "destroy_message": "You can get another Amulet of Catspeak from the Sphinx in Sophanem.", + "examine": "It's an amulet of cat speak. It makes vague purring noises.", + "durability": null, + "name": "Catspeak amulet(e)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6544", + "equipment_slot": "2" + }, + { + "destroy_message": "You have completed the chores; you can safely destroy the list.", + "examine": "A list of chores that Bob gave you to do.", + "durability": null, + "name": "Chores", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6545" + }, + { + "destroy_message": "You found the recipe in Unferth's bookcase, which is in his Burthorpe house, you will be able to get a replacement.", + "examine": "It says on the back 'My favourite recipe.", + "durability": null, + "name": "Recipe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6546" + }, + { + "destroy_message": "You can get another Doctor's hat from the Apothecary in Varrock.", + "examine": "A mirror helps reflect light on the subject.", + "durability": null, + "name": "Doctors hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6547", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another Nurse's hat from the Apothecary in Varrock.", + "examine": "A nurse's hat, but does it have healing powers?", + "durability": null, + "name": "Nurse hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6548", + "equipment_slot": "0" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6549" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6550" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6551" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6552" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6553" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "id": "6554" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6555" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6556" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6557" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6558" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6559" + }, + { + "examine": "Inventory: Wild. (wily)Lethargic. (lazy)", + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "id": "6560" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "368700", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6562", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2.2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mud battlestaff" + }, + { + "requirements": "{0,40}-{6,40}", + "ge_buy_limit": "10", + "shop_price": "40000", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "durability": null, + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "423100", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "true", + "name": "Mystic mud staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6563", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0" + }, + { + "examine": "A valuable ring.", + "grand_exchange_price": "6609743", + "durability": null, + "name": "Onyx ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6564" + }, + { + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "4501000", + "durability": null, + "name": "Onyx necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6565" + }, + { + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "9058124", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6566" + }, + { + "shop_price": "90000", + "ge_buy_limit": "100", + "examine": "A cape woven of obsidian plates.", + "durability": null, + "tokkul_price": "90000", + "weight": "1.8", + "equipment_slot": "1", + "lendable": "true", + "grand_exchange_price": "42000", + "name": "Obsidian cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6568", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "42000", + "durability": null, + "name": "Obsidian cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6569" + }, + { + "examine": "A cape of fire.", + "durability": null, + "name": "Fire cape", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6570", + "bonuses": "1,1,1,1,1,11,11,11,11,11,11,4,2,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "2700000", + "ge_buy_limit": "100", + "examine": "An uncut onyx.", + "grand_exchange_price": "10700000", + "tokkul_price": "300000", + "durability": null, + "name": "Uncut onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6571" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10700000", + "durability": null, + "name": "Uncut onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6572" + }, + { + "ge_buy_limit": "100", + "examine": "This looks valuable.", + "grand_exchange_price": "10700000", + "durability": null, + "name": "Onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6573" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10700000", + "durability": null, + "name": "Onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6574" + }, + { + "ge_buy_limit": "100", + "examine": "A valuable ring.", + "grand_exchange_price": "11900000", + "durability": null, + "name": "Onyx ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6575", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11900000", + "durability": null, + "name": "Onyx ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6576" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "4500000", + "durability": null, + "name": "Onyx necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6577", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4500000", + "durability": null, + "name": "Onyx necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6578" + }, + { + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "9058124", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6579" + }, + { + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6580" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if I can get this enchanted.", + "grand_exchange_price": "10900000", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6581", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10900000", + "durability": null, + "name": "Onyx amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6582" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring.", + "grand_exchange_price": "803700", + "durability": null, + "name": "Ring of stone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6583", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "803700", + "durability": null, + "name": "Ring of stone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6584" + }, + { + "lendable": "true", + "ge_buy_limit": "100", + "examine": "A very powerful onyx amulet.", + "grand_exchange_price": "9200000", + "durability": null, + "name": "Amulet of fury", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6585", + "bonuses": "10,10,10,10,10,15,15,15,15,15,15,8,5,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9200000", + "durability": null, + "name": "Amulet of fury", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6586" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "360", + "ge_buy_limit": "100", + "examine": "A set of fighting claws.", + "durability": null, + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "equip_audio": "1003", + "render_anim": "2583", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,390,390", + "grand_exchange_price": "1013", + "name": "White claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6587", + "bonuses": "10,14,-4,0,0,4,7,2,0,0,0,14,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1013", + "durability": null, + "name": "White claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6588" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "1248", + "ge_buy_limit": "100", + "examine": "A vicious looking axe.", + "durability": null, + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "grand_exchange_price": "1459", + "attack_audios": "2498,2498,2497,2498", + "name": "White battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6589", + "bonuses": "-2,20,15,0,0,0,0,0,0,-1,0,24,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1459", + "durability": null, + "name": "White battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6590" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "479", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6591", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "479", + "durability": null, + "name": "White dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6592" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "497", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6593", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "497", + "durability": null, + "name": "White dagger(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6594" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "982", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6595", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "982", + "durability": null, + "name": "White dagger(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6596" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "240", + "ge_buy_limit": "100", + "examine": "A vicious white dagger.", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "equipment_slot": "3", + "grand_exchange_price": "8422", + "attack_audios": "2517,2517,2500,2517", + "name": "White dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6597", + "bonuses": "10,5,-4,1,0,0,0,0,1,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8422", + "durability": null, + "name": "White dagger(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6598" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A white halberd.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "430", + "equipment_slot": "3", + "attack_anims": "440,440,412,440", + "grand_exchange_price": "1834", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6599", + "stand_turn_anim": "1209", + "bonuses": "19,25,0,-4,0,-1,2,3,0,0,0,20,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "1920", + "durability": null, + "weight": "3.1", + "weapon_interface": "15", + "render_anim": "28", + "name": "White halberd" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1834", + "durability": null, + "name": "White halberd", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6600" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "432", + "ge_buy_limit": "100", + "examine": "A spiky mace.", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "481", + "name": "White mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6601", + "bonuses": "8,-2,16,0,0,0,0,0,0,0,0,13,3,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "481", + "durability": null, + "name": "White mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6602" + }, + { + "requirements": "{0,10}-{5,10}", + "ge_buy_limit": "100", + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A Magical staff.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "650", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "true", + "name": "White magic staff", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6603", + "stand_turn_anim": "1209", + "bonuses": "2,-1,10,10,0,2,3,1,10,0,0,7,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "650", + "durability": null, + "name": "White magic staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6604" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A razor sharp sword.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "grand_exchange_price": "1187", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "6605", + "stand_turn_anim": "823", + "bonuses": "14,10,-2,0,0,0,2,1,0,0,0,12,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "624", + "durability": null, + "weight": "1.8", + "weapon_interface": "5", + "render_anim": "1381", + "name": "White sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1187", + "durability": null, + "name": "White sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6606" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A razor sharp longsword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "2060", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "6607", + "stand_turn_anim": "823", + "bonuses": "13,18,-2,0,0,0,3,2,0,0,0,16,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "960", + "durability": null, + "weight": "1.8", + "weapon_interface": "6", + "render_anim": "1", + "name": "White longsword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2060", + "durability": null, + "name": "White longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6608" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "7044", + "examine": "A two handed sword.", + "walk_anim": "7046", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "4029", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "6609", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,-4,0,0,0,0,0,-1,0,26,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "1920", + "durability": null, + "weight": "3.6", + "weapon_interface": "7", + "render_anim": "124", + "attack_audios": "2503,0,2504,0", + "name": "White 2h sword" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4029", + "durability": null, + "name": "White 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6610" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A vicious, curved sword.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "4", + "turn180_anim": "820", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "1404", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "6611", + "stand_turn_anim": "823", + "bonuses": "4,19,-2,0,0,0,1,0,0,0,0,14,1,0,0", + "requirements": "{0,10}-{5,10}", + "shop_price": "768", + "durability": null, + "weight": "1", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,0,2517,0", + "name": "White scimitar" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1404", + "durability": null, + "name": "White scimitar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6612" + }, + { + "requirements": "{0,10}-{5,10}", + "shop_price": "980", + "ge_buy_limit": "100", + "examine": "I don't think it's intended for joinery.", + "durability": null, + "weight": "1.8", + "attack_speed": "6", + "weapon_interface": "10", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "1178", + "attack_audios": "2504,0,0,0", + "name": "White warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6613", + "bonuses": "-4,-4,22,-4,0,0,0,0,0,0,0,19,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1178", + "durability": null, + "name": "White warhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6614" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1440", + "ge_buy_limit": "100", + "examine": "A series of connected metal rings.", + "durability": null, + "weight": "6.8", + "absorb": "1,0,2", + "equipment_slot": "4", + "grand_exchange_price": "788", + "name": "White chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6615", + "bonuses": "0,0,0,-15,0,22,32,39,-3,24,10,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "788", + "durability": null, + "name": "White chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6616" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "3840", + "ge_buy_limit": "100", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "5837", + "name": "White platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6617", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,10,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5837", + "durability": null, + "name": "White platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6618" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "576", + "ge_buy_limit": "100", + "examine": "These will protect my feet.", + "durability": null, + "weight": "1.3", + "equipment_slot": "10", + "grand_exchange_price": "1016", + "name": "White boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6619", + "bonuses": "0,0,0,-3,-1,7,8,9,0,0,7,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1016", + "durability": null, + "name": "White boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6620" + }, + { + "remove_head": "true", + "requirements": "{1,10}-{5,10}", + "shop_price": "576", + "ge_buy_limit": "100", + "examine": "A medium sized helmet.", + "durability": null, + "weight": "1.9", + "equipment_slot": "0", + "grand_exchange_price": "853", + "name": "White med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6621", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,4,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "853", + "durability": null, + "name": "White med helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6622" + }, + { + "remove_head": "true", + "requirements": "{1,10}-{5,10}", + "shop_price": "1056", + "ge_buy_limit": "100", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "2624", + "name": "White full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6623", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2624", + "durability": null, + "name": "White full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6624" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "Big, white and heavy looking.", + "durability": null, + "weight": "9", + "equipment_slot": "7", + "grand_exchange_price": "2115", + "name": "White platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6625", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2115", + "durability": null, + "name": "White platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6626" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1920", + "ge_buy_limit": "100", + "examine": "Big, white, and heavy looking.", + "durability": null, + "weight": "8.1", + "equipment_slot": "7", + "grand_exchange_price": "2000", + "name": "White plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6627", + "bonuses": "0,0,0,-21,-7,21,20,19,-4,20,3,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2000", + "durability": null, + "name": "White plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6628" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "These will keep my hands warm!", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "2036", + "name": "White gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6629", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2036", + "durability": null, + "name": "White gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6630" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1152", + "ge_buy_limit": "100", + "examine": "A medium square shield.", + "durability": null, + "weight": "3.6", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "1360", + "name": "White sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6631", + "bonuses": "0,0,0,-6,-2,15,16,14,0,15,9,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1360", + "durability": null, + "name": "White sq shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6632" + }, + { + "requirements": "{1,10}-{5,10}", + "shop_price": "1632", + "ge_buy_limit": "100", + "examine": "A large metal shield.", + "durability": null, + "weight": "5.4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "2390", + "name": "White kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6633", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,1,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2390", + "durability": null, + "name": "White kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6634" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A Temple Knight Communication Orb. Top Secret! / Use this to stay in touch with Korasi and Jessika. (A Void Dance version) / Tyr's commorb, given to him by Sir Tiffy. (Tyr's commorb)", + "durability": null, + "name": "Commorb", + "weight": "1", + "archery_ticket_price": "0", + "id": "6635" + }, + { + "examine": "Proof that I have defeated the evil mage Solus.", + "durability": null, + "name": "Solus's hat", + "archery_ticket_price": "0", + "id": "6636" + }, + { + "examine": "From a darker dimension.", + "durability": null, + "name": "Dark beast", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "6637" + }, + { + "examine": "A key to the nature of light itself. (Mourning's Ends Part II)", + "durability": null, + "name": "Colour wheel", + "archery_ticket_price": "0", + "id": "6638" + }, + { + "destroy_message": "Resetting the light maze will generate a new mirror.", + "examine": "A small hand mirror.", + "durability": null, + "name": "Hand mirror", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6639" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A yellow crystal.", + "durability": null, + "name": "Yellow crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6641" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A cyan crystal.", + "durability": null, + "name": "Cyan crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6643" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A blue crystal.", + "durability": null, + "name": "Blue crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6644" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A fractured crystal, one of the edges is clear.", + "durability": null, + "name": "Fractured crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6646" + }, + { + "destroy_message": "Resetting the light maze will generate a new crystal.", + "examine": "A fractured crystal, one of the edges is clear.", + "durability": null, + "name": "Fractured crystal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6647" + }, + { + "destroy_message": "You can obtain another list from Thorgel.", + "examine": "It's a list of items I need to collect.", + "durability": null, + "name": "Item list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6648" + }, + { + "examine": "The journal of Nissyen Edern.", + "durability": null, + "name": "Edern's journal", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6649" + }, + { + "examine": "A blackened crystal sample.", + "durability": null, + "name": "Blackened crystal", + "archery_ticket_price": "0", + "id": "6650" + }, + { + "examine": "A newly formed crystal / A warm energy radiates from this crystal.", + "durability": null, + "name": "Newly made crystal", + "archery_ticket_price": "0", + "id": "6651" + }, + { + "examine": "A newly formed crystal / A warm energy radiates from this crystal.", + "durability": null, + "name": "Newly made crystal", + "archery_ticket_price": "0", + "id": "6652" + }, + { + "destroy_message": "You can get another Crystal trinket from Arianwyn in Lletya.", + "examine": "A small Crystal trinket.", + "durability": null, + "name": "Crystal trinket", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6653" + }, + { + "remove_sleeves": "true", + "examine": "Examine what?", + "durability": null, + "name": "Camo top", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "6654", + "equipment_slot": "4" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo bottoms", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6655", + "equipment_slot": "7" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo helmet", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6656", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "Examine what?", + "durability": null, + "name": "Camo top", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "6657", + "equipment_slot": "4" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo bottoms", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6658", + "equipment_slot": "7" + }, + { + "examine": "Examine what?", + "durability": null, + "name": "Camo helmet", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "6659", + "equipment_slot": "0" + }, + { + "shop_price": "60", + "examine": "The jar keeps shaking... I'm scared.", + "durability": null, + "name": "Fishing explosive", + "archery_ticket_price": "0", + "id": "6660" + }, + { + "examine": "An angry Ogre in a funny hat.", + "durability": null, + "name": "Mogre", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "6661" + }, + { + "examine": "This fishing rod seems to have been bitten in half.", + "durability": null, + "name": "Broken fishing rod", + "archery_ticket_price": "0", + "id": "6662" + }, + { + "examine": "It seems someone vacated this boot in a hurry.", + "durability": null, + "name": "Forlorn boot", + "archery_ticket_price": "0", + "id": "6663" + }, + { + "requirements": "{18,32}", + "shop_price": "60", + "examine": "The jar keeps shaking... I'm scared.", + "durability": null, + "name": "Fishing explosive", + "archery_ticket_price": "0", + "id": "6664" + }, + { + "examine": "Fishy, damp and smelly.", + "durability": null, + "name": "Mudskipper hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "6665", + "equipment_slot": "0" + }, + { + "examine": "Strangely uncomfortable flippers.", + "durability": null, + "name": "Flippers", + "weight": "2", + "archery_ticket_price": "0", + "id": "6666", + "bonuses": "-2,-2,-2,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "10000", + "examine": "An empty fishbowl.", + "grand_exchange_price": "431", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "6667" + }, + { + "examine": "A fishless fishbowl.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6668" + }, + { + "examine": "A fishless fishbowl with some seaweed.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6669" + }, + { + "examine": "A fishbowl with a Tiny Bluefish in it.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6670" + }, + { + "examine": "A fishbowl with a Tiny Greenfish in it.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6671" + }, + { + "examine": "A fishbowl with a Tiny Spinefish in it.", + "grand_exchange_price": "619", + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "weight": "2.3", + "archery_ticket_price": "0", + "id": "6672" + }, + { + "examine": "An empty fishbowl in a net.", + "durability": null, + "name": "Fishbowl and net", + "weight": "2", + "archery_ticket_price": "0", + "id": "6673" + }, + { + "shop_price": "10", + "examine": "A tiny net for grabbing tiny fish.", + "durability": null, + "name": "Tiny net", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6674" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.", + "durability": null, + "name": "An empty box", + "archery_ticket_price": "0", + "id": "6675" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Guam Leaf...", + "durability": null, + "name": "Guam in a box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6677" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Guam Leaf...", + "durability": null, + "name": "Guam in a box?", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6678" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Seaweed...", + "durability": null, + "name": "Seaweed in a box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6679" + }, + { + "examine": "'Ingredients: Ground Guam and Ground Seaweed.' Well, I have the Seaweed...", + "durability": null, + "name": "Seaweed in a box?", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6680" + }, + { + "ge_buy_limit": "100", + "examine": "One of the ingredients for making fish food.", + "grand_exchange_price": "1", + "durability": null, + "name": "Ground guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6681" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Ground guam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6682" + }, + { + "ge_buy_limit": "100", + "examine": "One of the ingredients for making fish food.", + "grand_exchange_price": "14", + "durability": null, + "name": "Ground seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6683" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14", + "durability": null, + "name": "Ground seaweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6684" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "15300", + "durability": null, + "name": "Saradomin brew(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6685" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "15300", + "durability": null, + "name": "Saradomin brew(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6686" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "11400", + "durability": null, + "name": "Saradomin brew(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6687" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "11400", + "durability": null, + "name": "Saradomin brew(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6688" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "7566", + "durability": null, + "name": "Saradomin brew(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6689" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7566", + "durability": null, + "name": "Saradomin brew(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6690" + }, + { + "ge_buy_limit": "1000", + "examine": "A Saradomin Brew.", + "grand_exchange_price": "3783", + "durability": null, + "name": "Saradomin brew(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6691" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3783", + "durability": null, + "name": "Saradomin brew(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6692" + }, + { + "ge_buy_limit": "10000", + "examine": "It's a crushed bird's nest.", + "grand_exchange_price": "10500", + "durability": null, + "name": "Crushed nest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6693" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "10500", + "durability": null, + "name": "Crushed nest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6694" + }, + { + "examine": "\"A cold-blooded creature, partial to warmth.", + "durability": null, + "name": "Desert lizard", + "archery_ticket_price": "0", + "id": "6695" + }, + { + "requirements": "{22,18}", + "shop_price": "1", + "examine": "Contains ice-cold water.", + "durability": null, + "name": "Ice cooler", + "archery_ticket_price": "0", + "id": "6696" + }, + { + "shop_price": "5", + "ge_buy_limit": "10000", + "examine": "A pat of freshly churned butter.", + "grand_exchange_price": "405", + "durability": null, + "name": "Pat of butter", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "6697" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "405", + "durability": null, + "name": "Pat of butter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6698" + }, + { + "durability": null, + "name": "Burnt potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6700" + }, + { + "ge_buy_limit": "1000", + "examine": "It'd taste even better with some toppings.", + "grand_exchange_price": "326", + "durability": null, + "name": "Baked potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6701" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "326", + "durability": null, + "name": "Baked potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6702" + }, + { + "ge_buy_limit": "1000", + "examine": "A baked potato with butter.", + "grand_exchange_price": "745", + "durability": null, + "name": "Potato with butter", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6703" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "745", + "durability": null, + "name": "Potato with butter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6704" + }, + { + "shop_price": "350", + "ge_buy_limit": "10000", + "examine": "A baked potato with butter and cheese.", + "grand_exchange_price": "604", + "durability": null, + "name": "Potato with cheese", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6705" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "604", + "durability": null, + "name": "Potato with cheese", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6706" + }, + { + "examine": "An amulet of Camel-speak. It makes vague braying noises.", + "durability": null, + "name": "Camulet", + "archery_ticket_price": "0", + "id": "6707", + "equipment_slot": "2" + }, + { + "shop_price": "200", + "examine": "Especially good against diseased arachnids.", + "durability": null, + "name": "Slayer gloves", + "archery_ticket_price": "0", + "id": "6708", + "bonuses": "0,0,0,0,0,4,5,3,0,0,1,0,0,0,0" + }, + { + "examine": "A bunch of legs, eyes and teeth.", + "durability": null, + "name": "Fever spider", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "6709" + }, + { + "examine": "A blindweed seed - plant in a Blindweed patch.", + "durability": null, + "name": "Blindweed seed", + "archery_ticket_price": "0", + "id": "6710" + }, + { + "examine": "An inedible, foul smelling herb.", + "durability": null, + "name": "Blindweed", + "archery_ticket_price": "0", + "id": "6711" + }, + { + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6712" + }, + { + "examine": "A heavy metal wrench.", + "durability": null, + "name": "Wrench", + "archery_ticket_price": "0", + "id": "6713" + }, + { + "examine": "A shining paragon of wrenchly virtue.", + "durability": null, + "name": "Holy wrench", + "archery_ticket_price": "0", + "id": "6714" + }, + { + "examine": "They look at you balefully. 'Feed us...", + "durability": null, + "name": "Sluglings", + "archery_ticket_price": "0", + "id": "6715" + }, + { + "examine": "A sinister looking squid.", + "durability": null, + "name": "Karamthulhu", + "archery_ticket_price": "0", + "id": "6716" + }, + { + "examine": "A sinister looking squid.", + "durability": null, + "name": "Karamthulhu", + "archery_ticket_price": "0", + "id": "6717" + }, + { + "examine": "A diseased deceased Fever Spider. Handle with care.", + "durability": null, + "name": "Fever spider body", + "archery_ticket_price": "0", + "id": "6718" + }, + { + "examine": "Sorry, I mean a bucket of 'rum'.", + "durability": null, + "name": "Unsanitary swill", + "archery_ticket_price": "0", + "id": "6719" + }, + { + "requirements": "{18,42}", + "shop_price": "200", + "examine": "Especially good against diseased arachnids.", + "durability": null, + "name": "Slayer gloves", + "archery_ticket_price": "0", + "id": "6720", + "bonuses": "0,0,0,0,0,4,5,3,0,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "A decent enough weapon gone rusty.", + "attack_audios": "2500,0,2517,0", + "durability": null, + "name": "Rusty scimitar", + "weight": "2", + "archery_ticket_price": "0", + "id": "6721" + }, + { + "examine": "Alas...I hardly knew him.", + "durability": null, + "name": "Zombie head", + "archery_ticket_price": "0", + "id": "6722" + }, + { + "durability": null, + "name": "Fishbowl", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6723" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "100", + "examine": "An ancient Fremennik bow that was once used to battle the Moon Clan.", + "has_special": "true", + "durability": null, + "rare_item": "true", + "weight": "1", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "render_anim": "2588", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "lendable": "true", + "grand_exchange_price": "12200", + "name": "Seercull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6724", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12200", + "durability": null, + "name": "Seercull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6725" + }, + { + "durability": null, + "name": "Mud battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6726" + }, + { + "durability": null, + "name": "Mystic mud staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6727" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "6728" + }, + { + "ge_buy_limit": "10000", + "examine": "These would feed a dogfish for months!", + "grand_exchange_price": "9616", + "durability": null, + "name": "Dagannoth bones", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "6729" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "9616", + "durability": null, + "name": "Dagannoth bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6730" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A mysterious ring that can fill the wearer with magical power...", + "grand_exchange_price": "478800", + "rare_item": "true", + "durability": null, + "name": "Seers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6731", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "478800", + "durability": null, + "name": "Seers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6732" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A fabled ring that improves the wearer's skill with a bow...", + "grand_exchange_price": "1400000", + "rare_item": "true", + "durability": null, + "name": "Archers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6733", + "bonuses": "0,0,0,0,4,0,0,0,0,4,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Archers ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6734" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A legendary ring once worn by Fremennik warriors.", + "grand_exchange_price": "178100", + "rare_item": "true", + "durability": null, + "name": "Warrior ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6735", + "bonuses": "0,4,0,0,0,0,4,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "178100", + "durability": null, + "name": "Warrior ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6736" + }, + { + "lendable": "true", + "ge_buy_limit": "10", + "examine": "A ring reputed to bring out a berserk fury in its wearer.", + "grand_exchange_price": "2700000", + "rare_item": "true", + "durability": null, + "name": "Berserker ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6737", + "bonuses": "0,0,0,0,0,0,0,4,0,0,0,4,0,0,0", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "2700000", + "durability": null, + "name": "Berserker ring", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6738" + }, + { + "requirements": "{0,60}", + "ge_buy_limit": "10", + "examine": "A very powerful axe.", + "has_special": "true", + "rare_item": "true", + "durability": null, + "weapon_interface": "2", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "grand_exchange_price": "813100", + "attack_audios": "2498,2498,2497,2498", + "name": "Dragon axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6739", + "bonuses": "-2,38,32,0,0,0,1,0,0,0,0,42,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "813100", + "durability": null, + "name": "Dragon axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6740" + }, + { + "examine": "Bob can fix this broken (metal) axe for me.", + "durability": null, + "name": "Broken axe", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "6741", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Broken axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6742" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6744" + }, + { + "examine": "The magical sword 'Silverlight'. / The magical sword 'Silverlight', stained black with mushroom ink. (during Shadow of the Storm)", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "name": "Silverlight", + "archery_ticket_price": "0", + "id": "6745", + "bonuses": "9,14,-2,0,0,0,3,2,1,0,0,12,0,0,0" + }, + { + "examine": "The magical sword Silverlight, enhanced with the blood of Agrith-Naar.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "6", + "render_anim": "2554", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "name": "Darklight", + "archery_ticket_price": "0", + "id": "6746", + "bonuses": "10,16,-2,0,0,0,3,2,2,0,0,13,0,0,0" + }, + { + "examine": "Used to make the sigil of the demon Agrith-Naar.", + "durability": null, + "name": "Demonic sigil mould", + "archery_ticket_price": "0", + "id": "6747" + }, + { + "examine": "A sigil used for the summoning of the demon Agrith-Naar.", + "durability": null, + "name": "Demonic sigil", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6748" + }, + { + "examine": "Will this book help in summoning Agrith-Naar?", + "durability": null, + "name": "Demonic tome", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6749" + }, + { + "remove_sleeves": "true", + "examine": "A desert shirt stained black with mushroom ink.", + "durability": null, + "name": "Black desert shirt", + "archery_ticket_price": "0", + "id": "6750", + "equipment_slot": "4" + }, + { + "examine": "A desert robe stained black with mushroom ink.", + "durability": null, + "name": "Black desert robe", + "archery_ticket_price": "0", + "id": "6752", + "equipment_slot": "7" + }, + { + "destroy_message": "Hopefully Erin has a copy!", + "examine": "It changes temperature as I walk. (Meeting History)", + "durability": null, + "name": "Enchanted key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6754", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Guthix Mjolnir.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "You can reclaim this item from the place you found it.", + "grand_exchange_price": "2875", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6760", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0", + "shop_price": "250", + "durability": null, + "weight": "2", + "weapon_interface": "3", + "render_anim": "28", + "name": "Guthix mjolnir" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2875", + "durability": null, + "name": "Guthix mjolnir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6761" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Saradomin Mjolnir.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "You can reclaim this item from the place you found it.", + "grand_exchange_price": "17200", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6762", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0", + "shop_price": "250", + "durability": null, + "weight": "2", + "weapon_interface": "3", + "render_anim": "28", + "name": "Saradomin mjolnir" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17200", + "durability": null, + "name": "Saradomin mjolnir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6763" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A Zamorak mjolnir.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "You can reclaim this item from the place you found it.", + "grand_exchange_price": "4115", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6764", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0", + "durability": null, + "weight": "2", + "weapon_interface": "3", + "render_anim": "28", + "name": "Zamorak mjolnir" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4115", + "durability": null, + "name": "Zamorak mjolnir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6765" + }, + { + "examine": "Antipoison for Pox.", + "durability": null, + "name": "Cat antipoison", + "archery_ticket_price": "0", + "id": "6766" + }, + { + "examine": "A little more smelly than usual.", + "durability": null, + "name": "Poisoned cheese", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "6768" + }, + { + "destroy_message": "You can obtain another sheet of music by talking to the snakecharmer of Pollnivneach.", + "examine": "Charming.", + "durability": null, + "name": "Music scroll", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6769" + }, + { + "destroy_message": "You can obtain another set of directions to the party by talking to Jimmy Dazzler.", + "examine": "Jimmy Dazzler's directions.", + "durability": null, + "name": "Directions", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6770" + }, + { + "examine": "Contains garden weeds.", + "durability": null, + "name": "Pot of weeds", + "archery_ticket_price": "0", + "id": "6771" + }, + { + "examine": "Contains slowly burning garden weeds.", + "durability": null, + "name": "Smouldering pot", + "archery_ticket_price": "0", + "id": "6772" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole for putting rats on.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6773", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with one rat on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6774", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with two rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6775", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with three rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6776", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with four rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6777", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with five rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6778", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1424", + "examine": "A pole with six rats on it.", + "walk_anim": "1422", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1425", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "10", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Rat pole", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "6779", + "stand_turn_anim": "1426", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "examine": "Menaphite thug.", + "durability": null, + "name": "Menaphite thug", + "archery_ticket_price": "0", + "id": "6780" + }, + { + "remove_sleeves": "true", + "examine": "This looks quite old.", + "durability": null, + "name": "Robe of elidinis", + "archery_ticket_price": "0", + "id": "6786", + "equipment_slot": "4" + }, + { + "examine": "This looks quite old.", + "durability": null, + "name": "Robe of elidinis", + "archery_ticket_price": "0", + "id": "6787", + "equipment_slot": "7" + }, + { + "examine": "This robe is too torn to wear.", + "durability": null, + "name": "Torn robe", + "weight": "1", + "archery_ticket_price": "0", + "id": "6788" + }, + { + "examine": "This robe is too torn to wear.", + "durability": null, + "name": "Torn robe", + "weight": "1", + "archery_ticket_price": "0", + "id": "6789" + }, + { + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "id": "6790", + "equipment_slot": "10" + }, + { + "examine": "Awusah's Sole.", + "durability": null, + "name": "Sole", + "weight": "1", + "archery_ticket_price": "0", + "id": "6791" + }, + { + "examine": "An ancient key from the shrine in Nardah. (Spirits of the Elid)", + "durability": null, + "name": "Ancestral key", + "archery_ticket_price": "0", + "id": "6792" + }, + { + "examine": "The Ballad of Jaresh.", + "durability": null, + "name": "Ballad", + "archery_ticket_price": "0", + "id": "6793" + }, + { + "shop_price": "30", + "ge_buy_limit": "1000", + "examine": "A tasty treat from Nardah - better eat this before it melts.", + "grand_exchange_price": "210", + "durability": null, + "name": "Choc-ice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6794" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "210", + "durability": null, + "name": "Choc-ice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6795" + }, + { + "bankable": "false", + "examine": "Wonder what happens if I rub it...", + "durability": null, + "name": "Lamp", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "6796" + }, + { + "shop_price": "8", + "examine": "See article", + "grand_exchange_price": "206", + "durability": null, + "name": "Watering can", + "archery_ticket_price": "0", + "id": "6797" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6798" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6799" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6800" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6801" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6802" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6803" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6804" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6805" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6806" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6807" + }, + { + "examine": "A scroll once used by a champion.", + "durability": null, + "name": "Champion scroll", + "archery_ticket_price": "0", + "id": "6808" + }, + { + "requirements": "{1,50}-{2,50}", + "ge_buy_limit": "10", + "examine": "These look pretty heavy.", + "durability": null, + "weight": "15", + "absorb": "2,0,5", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "39400", + "name": "Granite legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6809", + "bonuses": "0,0,0,-31,-18,43,45,41,-4,68,20,0,0,0,0" + }, + { + "examine": "A pot of crushed [type of bones].", + "durability": null, + "name": "Bonemeal", + "weight": "1", + "archery_ticket_price": "0", + "id": "6810" + }, + { + "examine": "A very dangerous pile of animated Wyvern bones.", + "durability": null, + "name": "Skeletal wyvern", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "6811" + }, + { + "ge_buy_limit": "1000", + "examine": "Bones of a huge flying creature.", + "grand_exchange_price": "4845", + "durability": null, + "name": "Wyvern bones", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6812" + }, + { + "durability": null, + "name": "Granite legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6813" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "This would make warm clothing.", + "grand_exchange_price": "90", + "durability": null, + "name": "Fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6814" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "90", + "durability": null, + "name": "Fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6815" + }, + { + "durability": null, + "name": "Wyvern bones", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6816" + }, + { + "turn90cw_anim": "7044", + "examine": "A slender two-handed sword.", + "walk_anim": "7046", + "durability": null, + "destroy": "true", + "weight": "3", + "turn90ccw_anim": "7043", + "two_handed": "true", + "turn180_anim": "7045", + "render_anim": "124", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "7047", + "name": "Slender blade", + "tradeable": "false", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "6817", + "stand_turn_anim": "7040" + }, + { + "turn90cw_anim": "1207", + "examine": "A sharp sword that can also fire arrows.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "3", + "turn90ccw_anim": "1208", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can make a replacement.", + "stand_anim": "813", + "name": "Bow-sword", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6818", + "stand_turn_anim": "1209" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "25000", + "examine": "A large pouch used for storing essence.", + "durability": null, + "name": "Large pouch", + "weight": "1", + "archery_ticket_price": "0", + "id": "6819" + }, + { + "destroy_message": "I can get another from the assassin beside the winch that leads down into Senntisten temple.", + "examine": "It seems to have pieces missing. After Temple at Senntisten quest: The assassin's plunder from the church on Entrana.", + "durability": null, + "name": "Relic", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6820" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This looks valuable.", + "durability": null, + "name": "Orb", + "archery_ticket_price": "0", + "id": "6821" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6822" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6823" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6824" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6825" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6826" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Star bauble", + "archery_ticket_price": "0", + "id": "6827" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6828" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6829" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6830" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6831" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6832" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Box bauble", + "archery_ticket_price": "0", + "id": "6833" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6834" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6835" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6836" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6837" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6838" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Diamond bauble", + "archery_ticket_price": "0", + "id": "6839" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6840" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6841" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6842" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6843" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6844" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Tree bauble", + "archery_ticket_price": "0", + "id": "6845" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6846" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6847" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6848" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6849" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6850" + }, + { + "examine": "See individual articles.", + "durability": null, + "name": "Bell bauble", + "archery_ticket_price": "0", + "id": "6851" + }, + { + "examine": "A box for storing completed puppets.", + "durability": null, + "name": "Puppet box", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6852" + }, + { + "examine": "A box for storing painted baubles.", + "durability": null, + "name": "Bauble box", + "archery_ticket_price": "0", + "id": "6853" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box for storing completed puppets.", + "durability": null, + "name": "Puppet box", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6854" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box for storing painted baubles.", + "durability": null, + "name": "Bauble box", + "archery_ticket_price": "0", + "id": "6855" + }, + { + "destroy_message": "You can obtain another hat from Diango in the Draynor Market.", + "examine": "A woolly bobble hat.", + "durability": null, + "name": "Bobble hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6856", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A woolly scarf.", + "durability": null, + "name": "Bobble scarf", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6857", + "equipment_slot": "2" + }, + { + "destroy_message": "You can obtain another hat from Diango in the Draynor Market.", + "shop_price": "160", + "examine": "A woolly Jester hat.", + "durability": null, + "name": "Jester hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6858", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another Jester scarf from Diango.", + "examine": "A woolly jester scarf.", + "durability": null, + "name": "Jester scarf", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6859", + "equipment_slot": "2" + }, + { + "destroy_message": "You may get another from Diango in Draynor Village.", + "examine": "A woolly triple bobble jester hat.", + "durability": null, + "name": "Tri-jester hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6860", + "equipment_slot": "0" + }, + { + "destroy_message": "You can obtain another jester scarf from Diango in the Draynor Market.", + "examine": "A woolly jester scarf.", + "durability": null, + "name": "Tri-jester scarf", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6861", + "equipment_slot": "2" + }, + { + "destroy_message": "You can obtain another hat from Diango in the Draynor Market.", + "examine": "A woolly tobogganing hat.", + "durability": null, + "name": "Woolly hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6862", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A woolly tobogganing scarf.", + "durability": null, + "name": "Woolly scarf", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "6863", + "equipment_slot": "2" + }, + { + "examine": "The controlling part of a marionette.", + "durability": null, + "name": "Marionette handle", + "archery_ticket_price": "0", + "id": "6864", + "equipment_slot": "3" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6865" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6866" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6867" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6868" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6869" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6870" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6871" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6872" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6873" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Red marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6874" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6875" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6876" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6877" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6878" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6879" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6880" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6881" + }, + { + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Green marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6882" + }, + { + "examine": "A tasty fruit.", + "durability": null, + "name": "Peach", + "archery_ticket_price": "0", + "id": "6883" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A magic training arena progress hat", + "durability": null, + "name": "Progress hat", + "archery_ticket_price": "0", + "id": "6885", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A magic training arena progress hat", + "durability": null, + "name": "Progress hat", + "archery_ticket_price": "0", + "id": "6886", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A magic training arena progress hat", + "durability": null, + "name": "Progress hat", + "archery_ticket_price": "0", + "id": "6887", + "equipment_slot": "0" + }, + { + "bankable": "false", + "examine": "A guardian of the arena.", + "durability": null, + "name": "Guardian statue", + "archery_ticket_price": "0", + "id": "6888" + }, + { + "requirements": "{6,60}", + "ge_buy_limit": "10", + "examine": "The magical book of the Mage.", + "grand_exchange_price": "3800000", + "durability": null, + "name": "Mage's book", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6889", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3800000", + "durability": null, + "name": "Mage's book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6890" + }, + { + "shop_price": "200", + "examine": "A book about the Training Arena.", + "durability": null, + "name": "Arena book", + "weight": "1", + "archery_ticket_price": "0", + "id": "6891" + }, + { + "bankable": "false", + "shop_price": "6", + "examine": "Comfortable leather boots.", + "grand_exchange_price": "189", + "durability": null, + "name": "Leather boots", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "6893", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0" + }, + { + "bankable": "false", + "examine": "A large metal shield.", + "grand_exchange_price": "3084", + "durability": null, + "name": "Adamant kiteshield", + "tradeable": "true", + "weight": "5.8", + "archery_ticket_price": "0", + "id": "6894", + "absorb": "3,0,6", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "bankable": "false", + "examine": "A medium sized helmet.", + "grand_exchange_price": "1049", + "durability": null, + "name": "Adamant med helm", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "6895", + "absorb": "1,0,2", + "bonuses": "0,0,0,-3,-1,14,15,13,-1,14,6,0,0,0,0" + }, + { + "bankable": "false", + "shop_price": "350", + "examine": "This looks valuable.", + "grand_exchange_price": "644", + "durability": null, + "name": "Emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6896" + }, + { + "bankable": "false", + "shop_price": "32000", + "examine": "A razor sharp longsword", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "lendable": "true", + "grand_exchange_price": "18938", + "attack_audios": "2500,2500,2517,2500", + "name": "Rune longsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6897", + "bonuses": "38,47,-2,0,0,0,3,2,0,0,0,49,0,0,0" + }, + { + "bankable": "false", + "examine": "A green cylinder", + "durability": null, + "name": "Cylinder", + "archery_ticket_price": "0", + "id": "6898" + }, + { + "bankable": "false", + "examine": "A yellow cube", + "durability": null, + "name": "Cube", + "archery_ticket_price": "0", + "id": "6899" + }, + { + "bankable": "false", + "examine": "A blue icosahedron.", + "durability": null, + "name": "Icosahedron", + "archery_ticket_price": "0", + "id": "6900" + }, + { + "bankable": "false", + "examine": "A red pentamid.", + "durability": null, + "name": "Pentamid", + "archery_ticket_price": "0", + "id": "6901" + }, + { + "bankable": "false", + "examine": "This looks valuable.", + "durability": null, + "name": "Orb", + "archery_ticket_price": "0", + "id": "6902" + }, + { + "bankable": "false", + "examine": "This looks valuable.", + "durability": null, + "name": "Dragonstone", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "6903" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6904" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6905" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6906" + }, + { + "examine": "Various animals' bones.", + "durability": null, + "name": "Animals' bones", + "archery_ticket_price": "0", + "id": "6907" + }, + { + "requirements": "{6,45}", + "shop_price": "303030030", + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A beginner level wand", + "walk_anim": "1146", + "durability": null, + "weight": "0.2", + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "render_anim": "1426", + "equipment_slot": "3", + "grand_exchange_price": "11500", + "stand_anim": "809", + "name": "Beginner wand", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6908", + "stand_turn_anim": "823", + "bonuses": "0,0,0,5,0,0,0,0,5,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "11500", + "durability": null, + "name": "Beginner wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6909" + }, + { + "requirements": "{6,50}", + "ge_buy_limit": "10", + "shop_price": "606060060", + "turn90cw_anim": "821", + "examine": "An apprentice level wand.", + "walk_anim": "1146", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "defence_anim": "420", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "82000", + "stand_anim": "809", + "tradeable": "true", + "name": "Apprentice wand", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6910", + "stand_turn_anim": "823", + "bonuses": "0,0,0,10,0,0,0,0,10,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "82000", + "durability": null, + "name": "Apprentice wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6911" + }, + { + "requirements": "{6,55}", + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A teacher level wand.", + "walk_anim": "1146", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "render_anim": "1426", + "equipment_slot": "3", + "grand_exchange_price": "944100", + "stand_anim": "809", + "name": "Teacher wand", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6912", + "stand_turn_anim": "823", + "bonuses": "0,0,0,15,0,0,0,0,15,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "944100", + "durability": null, + "name": "Teacher wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6913" + }, + { + "requirements": "{6,60}", + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A master level wand.", + "walk_anim": "1146", + "durability": null, + "weight": "0.1", + "turn90ccw_anim": "822", + "weapon_interface": "1", + "turn180_anim": "820", + "defence_anim": "420", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "1700000", + "stand_anim": "8980", + "tradeable": "true", + "name": "Master wand", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "6914", + "stand_turn_anim": "823", + "bonuses": "0,0,0,20,0,0,0,0,20,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Master wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6915" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical robes.", + "durability": null, + "weight": "2.2", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "3300000", + "name": "Infinity top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6916", + "bonuses": "0,0,0,22,0,0,0,0,22,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3300000", + "durability": null, + "name": "Infinity top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6917" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "A mystic hat.", + "durability": null, + "weight": "0.4", + "absorb": "1,0,0", + "equipment_slot": "0", + "grand_exchange_price": "1800000", + "name": "Infinity hat", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "6918", + "bonuses": "0,0,0,6,0,0,0,0,6,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1800000", + "durability": null, + "name": "Infinity hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6919" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical boots.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "10", + "grand_exchange_price": "1200000", + "name": "Infinity boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6920", + "bonuses": "0,0,0,5,0,0,0,0,5,0,5,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Infinity boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6921" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical gloves.", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Infinity gloves", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "6922", + "bonuses": "0,0,0,5,0,0,0,0,5,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Infinity gloves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6923" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Mystical robes.", + "durability": null, + "weight": "1.8", + "absorb": "2,1,0", + "equipment_slot": "7", + "grand_exchange_price": "2500000", + "name": "Infinity bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6924", + "bonuses": "0,0,0,17,0,0,0,0,17,0,17,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "2500000", + "durability": null, + "name": "Infinity bottoms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6925" + }, + { + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "983", + "durability": null, + "name": "Bones to peaches", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6926" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A severed hand covered with sand.", + "durability": null, + "name": "Sandy hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6945" + }, + { + "destroy_message": "Speak to the Guard Captain in Yanille to get another beer soaked hand.", + "examine": "A severed hand dripping with beer.", + "durability": null, + "name": "Beer-soaked hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6946" + }, + { + "destroy_message": "Speak to Bert to replace this Rota.", + "examine": "A copy of a work rota.", + "durability": null, + "name": "Bert's rota", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6947" + }, + { + "destroy_message": "Search Sandy's office in Brimhaven for another Rota.", + "examine": "An original work rota.", + "durability": null, + "name": "Sandy's rota", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6948" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Maybe I should read this...", + "durability": null, + "name": "A magic scroll", + "archery_ticket_price": "0", + "id": "6949" + }, + { + "destroy_message": "Speak to Zavistic Rarve to replace your magical orb.", + "examine": "An ordinary looking scrying orb.", + "durability": null, + "name": "Magical orb", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6950" + }, + { + "destroy_message": "Speak to Zavistic Rarve to replace your magical orb.", + "examine": "This magical scrying orb pulsates as it stores information.", + "durability": null, + "name": "Magical orb (a)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6951" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle of truth serum.", + "examine": "Fluid sloshes innocently in this vial.", + "durability": null, + "name": "Truth serum", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6952" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle.", + "examine": "A bottle of water.", + "durability": null, + "name": "Bottled water", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6953" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle to make some more red berry juice.", + "examine": "Redberry juice sloshes around in this vial, waiting for white berries to be added.", + "durability": null, + "name": "Redberry juice", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6954" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to make more pink dye.", + "shop_price": "20", + "examine": "A vial of pink dye.", + "durability": null, + "name": "Pink dye", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6955" + }, + { + "destroy_message": "Speak to Betty in Port Sarim to get another bottle to make the lens again.", + "examine": "This lens has a pinkish tinge to it.", + "durability": null, + "name": "Rose-tinted lens", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6956", + "equipment_slot": "3" + }, + { + "destroy_message": "Speak to Mazion near the sandpit on Entrana to find the Wizard Head again.", + "examine": "A decapitated, sand-covered head.", + "durability": null, + "name": "Wizard's head", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "6957" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A handful of sand from Sandy's pocket.", + "durability": null, + "name": "Sand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6958" + }, + { + "shop_price": "20", + "ge_buy_limit": "100", + "examine": "Use pink dye on a cape and this is what you get!", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "1", + "grand_exchange_price": "919", + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6959", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "919", + "durability": null, + "name": "Cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6960" + }, + { + "examine": "A freshly baked baguette.", + "durability": null, + "name": "Baguette", + "archery_ticket_price": "0", + "id": "6961" + }, + { + "ge_buy_limit": "1000", + "examine": "A freshly made triangle sandwich.", + "grand_exchange_price": "110", + "durability": null, + "name": "Triangle sandwich", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6962" + }, + { + "examine": "A freshly made roll.", + "durability": null, + "name": "Roll", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6963" + }, + { + "bankable": "false", + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "archery_ticket_price": "0", + "id": "6964" + }, + { + "examine": "A freshly made square sandwich.", + "durability": null, + "name": "Square sandwich", + "archery_ticket_price": "0", + "id": "6965" + }, + { + "lendable": "true", + "examine": "Makes the wearer pretty intimidating.", + "grand_exchange_price": "61200", + "durability": null, + "name": "Dragon med helm", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "6967", + "absorb": "2,0,4", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "durability": null, + "name": "Triangle sandwich", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6968" + }, + { + "examine": "I'd better be careful eating this.", + "grand_exchange_price": "694", + "durability": null, + "name": "Shark", + "tradeable": "true", + "weight": "0.6", + "archery_ticket_price": "0", + "id": "6969" + }, + { + "examine": "It's a solid gold pyramid!", + "durability": null, + "name": "Pyramid top", + "weight": "11", + "archery_ticket_price": "0", + "id": "6970" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "4", + "durability": null, + "name": "Sandstone (1kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6971" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4", + "durability": null, + "name": "Sandstone (1kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6972" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "27", + "durability": null, + "name": "Sandstone (2kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6973" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27", + "durability": null, + "name": "Sandstone (2kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6974" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "30", + "durability": null, + "name": "Sandstone (5kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6975" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30", + "durability": null, + "name": "Sandstone (5kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6976" + }, + { + "ge_buy_limit": "100", + "examine": "A large chunk of sandstone.", + "grand_exchange_price": "120", + "durability": null, + "name": "Sandstone (10kg)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "6977" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "120", + "durability": null, + "name": "Sandstone (10kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6978" + }, + { + "ge_buy_limit": "10000", + "examine": "See article", + "grand_exchange_price": "304", + "durability": null, + "name": "Granite (500g)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6979" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "304", + "durability": null, + "name": "Granite (500g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6980" + }, + { + "ge_buy_limit": "10000", + "examine": "See article", + "grand_exchange_price": "845", + "durability": null, + "name": "Granite (2kg)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6981" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "845", + "durability": null, + "name": "Granite (2kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6982" + }, + { + "ge_buy_limit": "10000", + "examine": "See article", + "grand_exchange_price": "2153", + "durability": null, + "name": "Granite (5kg)", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "6983", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2153", + "durability": null, + "name": "Granite (5kg)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "6984" + }, + { + "destroy_message": "You can make another 20 kg block by giving enough stone to Lazim.", + "examine": "A huge twenty-kilo block of sandstone.", + "durability": null, + "name": "Sandstone (20kg)", + "destroy": "true", + "weight": "20", + "archery_ticket_price": "0", + "id": "6985" + }, + { + "destroy_message": "You can make another 32 kg sandstone block by giving enough stone to Lazim.", + "examine": "A huge thirty-two-kilo block of sandstone.", + "durability": null, + "name": "Sandstone (32kg)", + "destroy": "true", + "weight": "32", + "archery_ticket_price": "0", + "id": "6986" + }, + { + "destroy_message": "You can make another statue body by giving Lazim 20 kg of stone and then crafting it.", + "examine": "The body of a sandstone statue.", + "durability": null, + "name": "Sandstone body", + "destroy": "true", + "archery_ticket_price": "0", + "id": "6987" + }, + { + "destroy_message": "You can make another statue base by giving Lazim 32 kg of stone and then crafting it.", + "examine": "The base and legs of a sandstone statue.", + "durability": null, + "name": "Sandstone base", + "destroy": "true", + "weight": "32", + "archery_ticket_price": "0", + "id": "6988" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of a Z.", + "durability": null, + "name": "Z sigil", + "archery_ticket_price": "0", + "id": "6993" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of an M.", + "durability": null, + "name": "M sigil", + "archery_ticket_price": "0", + "id": "6994" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of an R.", + "durability": null, + "name": "R sigil", + "archery_ticket_price": "0", + "id": "6995" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A metal sigil in the shape of a K.", + "durability": null, + "name": "K sigil", + "archery_ticket_price": "0", + "id": "6996" + }, + { + "destroy_message": "You can get the statue's left arm back from Lazim.", + "examine": "The left arm of a large stone statue.", + "durability": null, + "name": "Stone left arm", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "6997" + }, + { + "destroy_message": "You can get the statue's right arm back from Lazim.", + "examine": "The right arm of a large stone statue.", + "durability": null, + "name": "Stone right arm", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "6998" + }, + { + "destroy_message": "You can get the statue's left leg back from Lazim.", + "examine": "The left leg of a large stone statue.", + "durability": null, + "name": "Stone left leg", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "6999" + }, + { + "destroy_message": "You can get the statue's right leg back from Lazim.", + "examine": "The right leg of a large stone statue.", + "durability": null, + "name": "Stone right leg", + "tradeable": "false", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "7000" + }, + { + "destroy_message": "You can make another positive mould by using soft clay on the pedestal in Enakhra's temple.", + "examine": "A positive clay mould of a camel's head.", + "durability": null, + "name": "Camel mould (p)", + "tradeable": "false", + "destroy": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7001" + }, + { + "remove_head": "true", + "examine": "Blend in in the desert.", + "durability": null, + "name": "Camel mask", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7003", + "equipment_slot": "0" + }, + { + "shop_price": "14", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "33", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7004", + "equipment_slot": "3" + }, + { + "requirements": "{18,33}-{11,33}", + "shop_price": "130", + "ge_buy_limit": "100", + "examine": "A lantern to aid attacking Harpie bugs.", + "grand_exchange_price": "466", + "durability": null, + "name": "Unlit bug lantern", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "7051", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "466", + "durability": null, + "name": "Unlit bug lantern", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7052" + }, + { + "requirements": "{18,33}", + "shop_price": "130", + "examine": "A lantern to aid attacking Harpie bugs.", + "durability": null, + "name": "Lit bug lantern", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "7053", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with chilli con carne", + "grand_exchange_price": "415", + "durability": null, + "name": "Chilli potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7054" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "415", + "durability": null, + "name": "Chilli potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7055" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with egg and tomato.", + "grand_exchange_price": "441", + "durability": null, + "name": "Egg potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7056" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "441", + "durability": null, + "name": "Egg potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7057" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with mushroom and onions.", + "grand_exchange_price": "1165", + "durability": null, + "name": "Mushroom potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7058" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1165", + "durability": null, + "name": "Mushroom potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7059" + }, + { + "ge_buy_limit": "10000", + "examine": "A baked potato with tuna and sweetcorn.", + "grand_exchange_price": "2134", + "durability": null, + "name": "Tuna potato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7060" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2134", + "durability": null, + "name": "Tuna potato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7061" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of meat in chilli-con-carne sauce.", + "grand_exchange_price": "215", + "durability": null, + "name": "Chilli con carne", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7062" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "215", + "durability": null, + "name": "Chilli con carne", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7063" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of scrambled eggs and tomato", + "grand_exchange_price": "126", + "durability": null, + "name": "Egg and tomato", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7064" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "126", + "durability": null, + "name": "Egg and tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7065" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of fried mushroom and onions.", + "grand_exchange_price": "368", + "durability": null, + "name": "Mushroom & onion", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7066" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "368", + "durability": null, + "name": "Mushroom & onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7067" + }, + { + "ge_buy_limit": "10000", + "examine": "A bowl of cooked tuna and sweetcorn.", + "grand_exchange_price": "514", + "durability": null, + "name": "Tuna and corn", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7068" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "514", + "durability": null, + "name": "Tuna and corn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7069" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of finely minced meat.", + "grand_exchange_price": "22", + "durability": null, + "name": "Minced meat", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7070" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "22", + "durability": null, + "name": "Minced meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7071" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of spicy sauce.", + "grand_exchange_price": "70", + "durability": null, + "name": "Spicy sauce", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7072" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "70", + "durability": null, + "name": "Spicy sauce", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7073" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of chopped garlic.", + "grand_exchange_price": "39", + "durability": null, + "name": "Chopped garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7074" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "39", + "durability": null, + "name": "Chopped garlic", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7075" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of uncooked egg.", + "grand_exchange_price": "34", + "durability": null, + "name": "Uncooked egg", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7076" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "34", + "durability": null, + "name": "Uncooked egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7077" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of scrambled egg.", + "grand_exchange_price": "24", + "durability": null, + "name": "Scrambled egg", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7078" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "24", + "durability": null, + "name": "Scrambled egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7079" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of sliced Bittercap mushrooms.", + "grand_exchange_price": "149", + "durability": null, + "name": "Sliced mushrooms", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7080" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "149", + "durability": null, + "name": "Sliced mushrooms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7081" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of fried Bittercap mushrooms.", + "grand_exchange_price": "189", + "durability": null, + "name": "Fried mushrooms", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7082" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "189", + "durability": null, + "name": "Fried mushrooms", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7083" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of sliced, fried onions.", + "grand_exchange_price": "40", + "durability": null, + "name": "Fried onions", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7084" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "40", + "durability": null, + "name": "Fried onions", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7085" + }, + { + "ge_buy_limit": "10000", + "examine": "A bowl of finely chopped tuna.", + "grand_exchange_price": "233", + "durability": null, + "name": "Chopped tuna", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7086" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "233", + "durability": null, + "name": "Chopped tuna", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7087" + }, + { + "ge_buy_limit": "10000", + "examine": "Raw sweetcorn.", + "grand_exchange_price": "110", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7088" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "110", + "durability": null, + "name": "Sweetcorn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7089" + }, + { + "durability": null, + "name": "Burnt egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7091" + }, + { + "durability": null, + "name": "Burnt onion", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7093" + }, + { + "durability": null, + "name": "Burnt mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7095" + }, + { + "examine": "Best keep this away from naked flames.", + "durability": null, + "name": "Gunpowder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7108" + }, + { + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7109" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "48", + "examine": "A seaworthy grey shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7110", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7111" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "714", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7112", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "714", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7113" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "Not for land lubbers.", + "grand_exchange_price": "2530", + "durability": null, + "name": "Pirate boots", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "7114", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2530", + "durability": null, + "name": "Pirate boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7115" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "77", + "examine": "Well, okay, they're beige, but they're part of the white pirate clothing set, so...", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7116", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "77", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7117" + }, + { + "examine": "A cannister holding shrapnel.", + "durability": null, + "name": "Canister", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7118" + }, + { + "examine": "For cleaning and packing the cannon.", + "durability": null, + "name": "Ramrod", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "7120" + }, + { + "examine": "A plank of wood to repair the hull with.", + "durability": null, + "name": "Repair plank", + "archery_ticket_price": "0", + "id": "7121" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "904", + "examine": "A sea worthy shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7122", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "904", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7123" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "340", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7124", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "340", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7125" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "examine": "A sea worthy pair of trousers.", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7126", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7127" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "744", + "examine": "A sea worthy shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7128", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "744", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7129" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "154", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7130", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "154", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7131" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "253", + "examine": "A sea worthy pair of trousers.", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7132", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "253", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7133" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "examine": "A sea worthy shirt.", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7134", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "421", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7135" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "Essential pirate wear.", + "grand_exchange_price": "469", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7136", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "469", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7137" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "examine": "A sea worthy pair of trousers.", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7138", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7139" + }, + { + "shop_price": "2560", + "examine": "Feels quite lucky.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "6", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "attack_audios": "2500,2500,2517,2500", + "name": "Lucky cutlass", + "archery_ticket_price": "0", + "id": "7140", + "bonuses": "5,20,0,-5,0,6,6,6,0,0,0,25,0,0,0" + }, + { + "shop_price": "1040", + "examine": "I hope he doesn't want it back.", + "durability": null, + "name": "Harry's cutlass", + "weight": "1", + "archery_ticket_price": "0", + "attack_speed": "4", + "weapon_interface": "6", + "id": "7141", + "bonuses": "3,14,0,-5,0,4,4,4,0,0,0,22,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "25600", + "examine": "The very butcher of a silk button.", + "durability": null, + "name": "Rapier", + "weight": "1", + "archery_ticket_price": "0", + "attack_speed": "4", + "weapon_interface": "5", + "id": "7142", + "bonuses": "45,7,-2,0,0,0,1,0,0,0,0,44,0,0,0", + "render_anim": "2622", + "equipment_slot": "3" + }, + { + "examine": "Looks valuable.", + "durability": null, + "name": "Plunder", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7143" + }, + { + "examine": "By Cap'n Hook-Hand Morrisane.", + "durability": null, + "name": "Book o' piracy", + "archery_ticket_price": "0", + "id": "7144" + }, + { + "examine": "A working cannon barrel.", + "durability": null, + "name": "Cannon barrel", + "weight": "32", + "archery_ticket_price": "0", + "id": "7145" + }, + { + "examine": "Not likely to work again.", + "durability": null, + "name": "Broken cannon", + "weight": "32", + "archery_ticket_price": "0", + "id": "7146" + }, + { + "examine": "A plank of wood to repair the hull with.", + "durability": null, + "name": "Repair plank", + "archery_ticket_price": "0", + "id": "7148" + }, + { + "examine": "A cannister holding shrapnel.", + "durability": null, + "name": "Canister", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7149" + }, + { + "examine": "Useful for pinning up paintings.", + "durability": null, + "name": "Tacks", + "archery_ticket_price": "0", + "id": "7150" + }, + { + "shop_price": "18", + "examine": "A coil of rope.", + "grand_exchange_price": "101", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "7155" + }, + { + "shop_price": "1", + "examine": "Useful for lighting a fire.", + "grand_exchange_price": "121", + "durability": null, + "name": "Tinderbox", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "7156" + }, + { + "shop_price": "30", + "examine": "I think it is eating through the bottle.", + "durability": null, + "name": "Braindeath 'rum", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7157" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7044", + "examine": "A two-handed dragon sword.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "1000000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "7158", + "stand_turn_anim": "7040", + "bonuses": "-4,92,80,-4,0,0,0,0,0,-1,0,93,0,0,0", + "requirements": "{0,60}", + "durability": null, + "weight": "3", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "2503,0,2504,0", + "name": "Dragon 2h sword" + }, + { + "requirements": "{18,37}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "They're heavily insulated wellies.", + "durability": null, + "weight": "1.3", + "equipment_slot": "10", + "grand_exchange_price": "269", + "name": "Insulated boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7159", + "bonuses": "0,0,0,0,0,1,1,0,0,1,0,0,0,0,0" + }, + { + "examine": "Before being attacked: A ball of Electrical energy.", + "durability": null, + "name": "Killerwatt", + "archery_ticket_price": "0", + "attack_speed": "2", + "id": "7160" + }, + { + "durability": null, + "name": "Insulated boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7161" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Lots of pie recipes for me to try.", + "grand_exchange_price": "62", + "durability": null, + "name": "Pie recipe book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7162" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "62", + "durability": null, + "name": "Pie recipe book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7163" + }, + { + "shop_price": "54", + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "77", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7164" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "77", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7165" + }, + { + "shop_price": "54", + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "284", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7166" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "284", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7167" + }, + { + "ge_buy_limit": "1000", + "examine": "Needs to be baked before I can use it.", + "grand_exchange_price": "1625", + "durability": null, + "name": "Raw mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7168" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1625", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7169" + }, + { + "shop_price": "54", + "ge_buy_limit": "1000", + "turn90cw_anim": "821", + "examine": "All the good of the earth.", + "walk_anim": "819", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "13", + "turn180_anim": "820", + "render_anim": "1", + "equipment_slot": "3", + "grand_exchange_price": "2024", + "stand_anim": "808", + "name": "Mud pie", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7170", + "stand_turn_anim": "823" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2024", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Mud pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7171" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "94", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7172" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "94", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7173" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "150", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7174" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "150", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7175" + }, + { + "ge_buy_limit": "1000", + "examine": "Needs cooking before I eat it.", + "grand_exchange_price": "1052", + "durability": null, + "name": "Raw garden pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7176" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1052", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7177" + }, + { + "ge_buy_limit": "1000", + "examine": "What I wouldn't give for a good steak about now...", + "grand_exchange_price": "1667", + "durability": null, + "name": "Garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7178" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1667", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7179" + }, + { + "ge_buy_limit": "1000", + "examine": "What I wouldn't give for a good steak about now...", + "grand_exchange_price": "442", + "durability": null, + "name": "Half a garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7180" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "442", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a garden pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7181" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "51", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7182" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "51", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7183" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "691", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7184" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "691", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7185" + }, + { + "ge_buy_limit": "1000", + "examine": "Raw fish is risky, better cook it.", + "grand_exchange_price": "1198", + "durability": null, + "name": "Raw fish pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7186" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1198", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7187" + }, + { + "ge_buy_limit": "1000", + "examine": "Bounty of the sea.", + "grand_exchange_price": "121", + "durability": null, + "name": "Fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7188" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "121", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7189" + }, + { + "ge_buy_limit": "1000", + "examine": "Bounty of the sea.", + "grand_exchange_price": "56", + "durability": null, + "name": "Half a fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7190" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "56", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a fish pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7191" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients. ", + "grand_exchange_price": "159", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7192" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "159", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7193" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "537", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7194" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "537", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7195" + }, + { + "ge_buy_limit": "1000", + "examine": "This would taste a lot better cooked.", + "grand_exchange_price": "1813", + "durability": null, + "name": "Raw admiral pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7196" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1813", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7197" + }, + { + "ge_buy_limit": "1000", + "examine": "Much tastier than a normal fish pie.", + "grand_exchange_price": "532", + "durability": null, + "name": "Admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7198" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "532", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7199" + }, + { + "ge_buy_limit": "1000", + "examine": "Much tastier than a normal fish pie.", + "grand_exchange_price": "184", + "durability": null, + "name": "Half an admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7200" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "184", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half an admiral pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7201" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "126", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7202" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "126", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7203" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "1116", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7204" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1116", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7205" + }, + { + "ge_buy_limit": "1000", + "examine": "Good as it looks, I'd better cook it.", + "grand_exchange_price": "3787", + "durability": null, + "name": "Raw wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7206" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3787", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7207" + }, + { + "ge_buy_limit": "1000", + "examine": "A triumph of man over nature.", + "grand_exchange_price": "1322", + "durability": null, + "name": "Wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7208" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1322", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7209" + }, + { + "ge_buy_limit": "1000", + "examine": "A triumph of man over nature.", + "grand_exchange_price": "112", + "durability": null, + "name": "Half a wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7210" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "112", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a wild pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7211" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs two more ingredients.", + "grand_exchange_price": "495", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7212" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "495", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7213" + }, + { + "ge_buy_limit": "1000", + "examine": "Still needs one more ingredient.", + "grand_exchange_price": "980", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7214" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "980", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Part summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7215" + }, + { + "ge_buy_limit": "1000", + "examine": "Fresh fruit may be good for you, but I should really cook this.", + "grand_exchange_price": "2577", + "durability": null, + "name": "Raw summer pie", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7216" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2577", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Raw summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7217" + }, + { + "ge_buy_limit": "1000", + "examine": "All the fruits of a very small forest.", + "grand_exchange_price": "1288", + "durability": null, + "name": "Summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7218" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1288", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7219" + }, + { + "ge_buy_limit": "1000", + "examine": "All the fruits of a very small forest.", + "grand_exchange_price": "430", + "durability": null, + "name": "Half a summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7220" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "430", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Half a summer pie", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7221" + }, + { + "shop_price": "19", + "examine": "Mmm this looks tasty.", + "grand_exchange_price": "32", + "durability": null, + "name": "Burnt rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7222" + }, + { + "shop_price": "25", + "ge_buy_limit": "1000", + "examine": "A delicious looking piece of roast rabbit.", + "grand_exchange_price": "37", + "durability": null, + "name": "Roast rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7223" + }, + { + "shop_price": "67", + "ge_buy_limit": "1000", + "examine": "Might taste better cooked.", + "grand_exchange_price": "112", + "durability": null, + "name": "Skewered rabbit", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7224" + }, + { + "shop_price": "81", + "ge_buy_limit": "100", + "examine": "An iron spit.", + "grand_exchange_price": "18", + "durability": null, + "name": "Iron spit", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7225" + }, + { + "durability": null, + "name": "Burnt chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7227" + }, + { + "shop_price": "130", + "ge_buy_limit": "1000", + "examine": "It might look delicious to an ogre.Roasted chompy bird.", + "grand_exchange_price": "164", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7228" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "164", + "durability": null, + "name": "Cooked chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7229" + }, + { + "ge_buy_limit": "1000", + "examine": "A skewered chompy bird.", + "grand_exchange_price": "294", + "durability": null, + "name": "Skewered chompy", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7230" + }, + { + "durability": null, + "name": "Burnt rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7231" + }, + { + "durability": null, + "name": "Roast rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7232" + }, + { + "durability": null, + "name": "Skewered rabbit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7233" + }, + { + "durability": null, + "name": "Iron spit", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7234" + }, + { + "durability": null, + "name": "Skewered chompy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7235" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7236" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7237" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7238" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7239" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7240" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7241" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7242" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7243" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7244" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7245" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7246" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7247" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7248" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7249" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7250" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7251" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7252" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7253" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7254" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7255" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7256" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7257" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7258" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7259" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7260" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7261" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7262" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7263" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7264" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7265" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7266" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7267" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7268" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7269" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7270" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7271" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7272" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7273" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7274" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7275" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7276" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7277" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7278" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7279" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7280" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7281" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7282" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7283" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7284" + }, + { + "examine": "I need to answer this correctly.", + "durability": null, + "name": "Challenge scroll", + "archery_ticket_price": "0", + "id": "7285" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7286" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7287" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7288" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7289" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7290" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7291" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7292" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7293" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7294" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7295" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7296" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7298" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7300" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7301" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7303" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7304" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7305" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7306" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7307" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7308" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7309" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7310" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7311" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7312" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7313" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7314" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7315" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7316" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "archery_ticket_price": "0", + "id": "7317" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7318" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "36600", + "durability": null, + "name": "Red boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7319", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36600", + "durability": null, + "name": "Red boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7320" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "16600", + "durability": null, + "name": "Orange boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7321", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "16600", + "durability": null, + "name": "Orange boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7322" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "43000", + "durability": null, + "name": "Green boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7323", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "43000", + "durability": null, + "name": "Green boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7324" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "37600", + "durability": null, + "name": "Blue boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7325", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "37600", + "durability": null, + "name": "Blue boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7326" + }, + { + "ge_buy_limit": "2", + "examine": "Stylish!", + "grand_exchange_price": "41700", + "durability": null, + "name": "Black boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7327", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "41700", + "durability": null, + "name": "Black boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7328" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "93", + "durability": null, + "name": "Red firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7329" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "94", + "durability": null, + "name": "Green firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7330" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "113", + "durability": null, + "name": "Blue firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7331" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black kitesheild with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "14300", + "name": "Black shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7332", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14300", + "durability": null, + "name": "Black shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7333" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "16400", + "name": "Adamant shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7334", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "16400", + "durability": null, + "name": "Adamant shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7335" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "34200", + "name": "Rune shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7336", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "34200", + "durability": null, + "name": "Rune shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7337" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black kiteshield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "9797", + "name": "Black shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7338", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "9797", + "durability": null, + "name": "Black shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7339" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3248", + "name": "Adamant shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7340", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3248", + "durability": null, + "name": "Adamant shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7341" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5.4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32400", + "name": "Rune shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7342", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32400", + "durability": null, + "name": "Rune shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7343" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black shield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "7405", + "name": "Black shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7344", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7405", + "durability": null, + "name": "Black shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7345" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "5271", + "name": "Adamant shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7346", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5271", + "durability": null, + "name": "Adamant shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7347" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32700", + "name": "Rune shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7348", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32700", + "durability": null, + "name": "Rune shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7349" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black shield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "5572", + "name": "Black shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7350", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5572", + "durability": null, + "name": "Black shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7351" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3366", + "name": "Adamant shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7352", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3366", + "durability": null, + "name": "Adamant shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7353" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32500", + "name": "Rune shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7354", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "32500", + "durability": null, + "name": "Rune shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7355" + }, + { + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black shield with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,2", + "equipment_slot": "5", + "grand_exchange_price": "7159", + "name": "Black shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7356", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7159", + "durability": null, + "name": "Black shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7357" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "6328", + "name": "Adamant shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7358", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "6328", + "durability": null, + "name": "Adamant shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7359" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune kiteshield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "32400", + "name": "Rune shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7360", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "requirements": "", + "ge_buy_limit": "2", + "grand_exchange_price": "32400", + "durability": null, + "name": "Rune shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7361" + }, + { + "requirements": "{1,20}-{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "durability": null, + "weight": "5.4", + "absorb": "0,3,1", + "equipment_slot": "4", + "grand_exchange_price": "101600", + "name": "Studded body (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7362", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "101600", + "durability": null, + "name": "Studded body (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7363" + }, + { + "requirements": "{1,20}-{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "durability": null, + "weight": "5.4", + "absorb": "0,3,1", + "equipment_slot": "4", + "grand_exchange_price": "27300", + "name": "Studded body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7364", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,20,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "27300", + "durability": null, + "name": "Studded body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7365" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "durability": null, + "weight": "4.5", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "114600", + "name": "Studded chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7366", + "bonuses": "0,0,0,-5,6,15,16,17,6,16,5,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "114600", + "durability": null, + "name": "Studded chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7367" + }, + { + "requirements": "{4,20}", + "ge_buy_limit": "2", + "examine": "Those studs should provide a bit more protection. Nice trim, too!", + "durability": null, + "weight": "4.5", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "36800", + "name": "Studded chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7368", + "bonuses": "0,0,0,-5,6,15,16,17,6,16,5,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36800", + "durability": null, + "name": "Studded chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7369" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "5000", + "examine": "Made from 100% real dragonhide. With colourful trim!", + "grand_exchange_price": "212400", + "durability": null, + "name": "D'hide body(g)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7370", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "212400", + "durability": null, + "name": "D'hide body(g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7371" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide. With colourful trim!", + "grand_exchange_price": "38800", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7372", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "38800", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7373" + }, + { + "requirements": "{1,50}-{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "6883", + "durability": null, + "name": "D'hide body (g)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7374", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "6883", + "durability": null, + "name": "D'hide body (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7375" + }, + { + "requirements": "{1,50}-{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "5268", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "7376", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5268", + "durability": null, + "name": "D'hide body (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7377" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "1300000", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7378", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1300000", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7379" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "304300", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7380", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "304300", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7381" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "21300", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7382", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "21300", + "durability": null, + "name": "D'hide chaps (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7383" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "2", + "examine": "Made from 100% real dragonhide, with colourful trim!", + "grand_exchange_price": "2554", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7384", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2554", + "durability": null, + "name": "D'hide chaps (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7385" + }, + { + "ge_buy_limit": "2", + "examine": "Leg covering favoured by women and wizards. With a colourful trim!", + "grand_exchange_price": "298900", + "durability": null, + "name": "Blue skirt (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7386", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "298900", + "durability": null, + "name": "Blue skirt (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7387" + }, + { + "ge_buy_limit": "2", + "examine": "Leg covering favoured by women and wizards. With a colourful trim!", + "grand_exchange_price": "126800", + "durability": null, + "name": "Blue skirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "7388", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "126800", + "durability": null, + "name": "Blue skirt (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7389" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "I can practise magic better in this.", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Wizard robe (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7390", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Wizard robe (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7391" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "I can do magic better in this.", + "grand_exchange_price": "244600", + "durability": null, + "name": "Wizard robe (t)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7392", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "244600", + "durability": null, + "name": "Wizard robe (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7393" + }, + { + "ge_buy_limit": "2", + "examine": "A silly pointed hat with colourful trim.", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Wizard hat (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "hat": "true", + "id": "7394", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Wizard hat (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7395" + }, + { + "ge_buy_limit": "2", + "examine": "A silly pointed hat, with colourful trim.", + "grand_exchange_price": "352700", + "durability": null, + "name": "Wizard hat (t)", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "hat": "true", + "id": "7396", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "352700", + "durability": null, + "name": "Wizard hat (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7397" + }, + { + "requirements": "{1,40}-{6,20}", + "ge_buy_limit": "2", + "examine": "Enchanted Wizards robes.", + "durability": null, + "weight": "1.8", + "absorb": "2,1,0", + "equipment_slot": "7", + "grand_exchange_price": "50000", + "name": "Enchanted robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7398", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,40}", + "ge_buy_limit": "2", + "examine": "Enchanted Wizards robes.", + "durability": null, + "weight": "1", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "75100", + "name": "Enchanted top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7399", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{6,20}", + "ge_buy_limit": "2", + "examine": "A three pointed hat of magic.", + "grand_exchange_price": "8845", + "durability": null, + "name": "Enchanted hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7400", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Enchanted robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7401" + }, + { + "durability": null, + "name": "Enchanted top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7402" + }, + { + "durability": null, + "name": "Enchanted hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7403" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Red logs", + "archery_ticket_price": "0", + "id": "7404" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Green logs", + "weight": "2", + "archery_ticket_price": "0", + "id": "7405" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Blue logs", + "weight": "2", + "archery_ticket_price": "0", + "id": "7406" + }, + { + "durability": null, + "name": "Dragon 2h sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7407" + }, + { + "destroy_message": "I found this in a grave at Draynor Manor.", + "examine": "I shouldn't joke; this is a grave matter.", + "durability": null, + "name": "Draynor skull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7408" + }, + { + "shop_price": "40000", + "examine": "The only way to kill a Tanglefoot.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "attack_speed": "5", + "weapon_interface": "5", + "equipment_slot": "3", + "destroy_message": "I'll chat to Malignius Mortifer if I want another pair.", + "name": "Magic secateurs", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "7409", + "bonuses": "7,9,-5,1,0,0,1,0,1,0,0,1,0,0,0" + }, + { + "destroy_message": "I can always find another Tanglefoot if I need more.", + "examine": "Contains the Fairy Queen's magical essence.", + "durability": null, + "name": "Queen's secateurs", + "archery_ticket_price": "0", + "id": "7410", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A list of the Fairy Queen's symptoms.", + "durability": null, + "name": "Symptoms list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7411" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "archery_ticket_price": "0", + "id": "7413" + }, + { + "durability": null, + "name": "Paddle", + "archery_ticket_price": "0", + "id": "7414", + "weapon_interface": "1", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Paddle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7415" + }, + { + "ge_buy_limit": "5000", + "examine": "A mole claw.", + "grand_exchange_price": "11800", + "durability": null, + "name": "Mole claw", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7416" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "11800", + "durability": null, + "name": "Mole claw", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7417" + }, + { + "ge_buy_limit": "5000", + "examine": "The skin of a large mole.", + "grand_exchange_price": "12000", + "durability": null, + "name": "Mole skin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7418" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "12000", + "durability": null, + "name": "Mole skin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7419" + }, + { + "examine": "A fun guy. No wait, that's awful. Plus it doesn't even make sense. (As Fungi) A bouncy fungus. (Level 74) A fun guy. No wait, that's awful.. (Level 86)", + "durability": null, + "name": "Mutated zygomite", + "archery_ticket_price": "0", + "id": "7420" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 10", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7421", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 9", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7422", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 8", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7423", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 7", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7424", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 6", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7425", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 5", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7426", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 4", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7427", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 3", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7428", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 2", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7429", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 1", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7430", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "300", + "turn90cw_anim": "821", + "examine": "Pumps fungicide.", + "walk_anim": "3334", + "durability": null, + "weight": "2", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "618", + "equipment_slot": "3", + "stand_anim": "3332", + "name": "Fungicide spray 0", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7431", + "stand_turn_anim": "823" + }, + { + "requirements": "{18,57}", + "shop_price": "10", + "examine": "Does exactly what it says on the tin. (Kills Fungi.)", + "durability": null, + "name": "Fungicide", + "archery_ticket_price": "0", + "id": "7432" + }, + { + "shop_price": "35", + "ge_buy_limit": "100", + "examine": "Spoooooon!", + "durability": null, + "weight": "0.4", + "attack_speed": "5", + "weapon_interface": "6", + "equipment_slot": "3", + "grand_exchange_price": "44", + "name": "Wooden spoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7433", + "bonuses": "4,5,-2,0,0,0,3,2,0,0,0,7,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44", + "durability": null, + "name": "Wooden spoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7434" + }, + { + "shop_price": "45", + "ge_buy_limit": "100", + "examine": "A large whisk of death.", + "durability": null, + "attack_speed": "4", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "11", + "name": "Egg whisk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7435", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11", + "durability": null, + "name": "Egg whisk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7436" + }, + { + "requirements": "{0,10}", + "shop_price": "292", + "ge_buy_limit": "100", + "examine": "Use the spork.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "196", + "name": "Spork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7437", + "bonuses": "11,8,-2,0,0,0,2,1,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "196", + "durability": null, + "name": "Spork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7438" + }, + { + "requirements": "{0,10}", + "ge_buy_limit": "100", + "shop_price": "1728", + "turn90cw_anim": "7044", + "examine": "A large spatula... of doom!", + "walk_anim": "7046", + "durability": null, + "weight": "3.6", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "turn180_anim": "7045", + "render_anim": "124", + "equipment_slot": "3", + "grand_exchange_price": "953", + "stand_anim": "7047", + "tradeable": "true", + "name": "Spatula", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "7439", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,-4,0,0,0,0,0,-1,0,22,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "953", + "durability": null, + "name": "Spatula", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7440" + }, + { + "requirements": "{0,20}", + "shop_price": "1494", + "ge_buy_limit": "100", + "examine": "Looks like it's non-stick too!", + "durability": null, + "weight": "1.5", + "attack_speed": "6", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "836", + "name": "Frying pan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7441", + "bonuses": "-4,-4,25,-4,0,0,0,0,0,0,0,20,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "836", + "durability": null, + "name": "Frying pan", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7442" + }, + { + "requirements": "{0,30}", + "shop_price": "2880", + "ge_buy_limit": "100", + "examine": "Generally used for impaling fresh meat.", + "durability": null, + "weight": "2", + "attack_speed": "5", + "weapon_interface": "6", + "equipment_slot": "3", + "grand_exchange_price": "1712", + "name": "Skewer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7443", + "bonuses": "20,29,-2,0,0,0,3,2,0,0,0,31,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1712", + "durability": null, + "name": "Skewer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7444" + }, + { + "requirements": "{0,40}", + "shop_price": "12960", + "ge_buy_limit": "100", + "examine": "That's how I roll!", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "8445", + "name": "Rolling pin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7445", + "bonuses": "20,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8445", + "durability": null, + "name": "Rolling pin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7446" + }, + { + "requirements": "{0,40}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A sharp, dependable knife, for filleting meat.", + "durability": null, + "attack_speed": "4", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "4686", + "attack_audios": "2704,0,0,0", + "name": "Kitchen knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7447", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4686", + "durability": null, + "name": "Kitchen knife", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7448" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "Often used to soften tough meat up.", + "walk_anim": "819", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "defence_anim": "1666", + "equipment_slot": "3", + "attack_anims": "2067,2066,2068", + "grand_exchange_price": "24700", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7449", + "stand_turn_anim": "823", + "bonuses": "-4,-4,53,-4,0,0,0,0,0,0,0,48,0,0,0", + "requirements": "{0,40}", + "shop_price": "41500", + "durability": null, + "weight": "1", + "weapon_interface": "10", + "render_anim": "1", + "name": "Meat tenderiser" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24700", + "durability": null, + "name": "Meat tenderiser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7450" + }, + { + "requirements": "{0,40}", + "shop_price": "24040", + "ge_buy_limit": "100", + "examine": "An effective tool for chopping tough meat.", + "durability": null, + "weight": "0.5", + "attack_speed": "4", + "weapon_interface": "6", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "15000", + "attack_audios": "2500,0,2517,0", + "name": "Cleaver", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7451", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15000", + "durability": null, + "name": "Cleaver", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7452" + }, + { + "shop_price": "50", + "examine": "A pair of plain gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7453", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "100", + "examine": "A pair of bronze-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7454", + "bonuses": "2,2,2,1,2,2,2,2,1,2,1,2,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "325", + "examine": "A pair of iron-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7455", + "bonuses": "3,3,3,2,3,3,3,3,2,3,2,3,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "500", + "examine": "A pair of steel-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7456", + "bonuses": "4,4,4,2,4,4,4,4,2,4,2,4,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "1000", + "examine": "A pair of black-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7457", + "bonuses": "5,5,5,3,5,5,5,5,3,5,3,5,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "1500", + "examine": "A pair of mithril-coloured gloves.", + "durability": null, + "name": "Gloves", + "archery_ticket_price": "0", + "id": "7458", + "bonuses": "6,6,6,3,6,6,6,6,3,6,3,6,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "2500", + "examine": "A pair of adamant-coloured gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7459", + "bonuses": "7,7,7,4,7,7,7,7,4,7,4,7,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,13}", + "shop_price": "5000", + "examine": "A pair of rune-coloured gloves.", + "durability": null, + "name": "Gloves", + "archery_ticket_price": "0", + "id": "7460", + "bonuses": "8,8,8,4,8,8,8,8,4,8,4,8,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,41}", + "shop_price": "100000", + "examine": "A pair of dragon-coloured gloves.", + "durability": null, + "name": "Gloves", + "archery_ticket_price": "0", + "id": "7461", + "bonuses": "9,9,9,5,9,9,9,9,5,9,5,9,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,41}", + "shop_price": "100000", + "examine": "A pair of Barrows-themed gloves.", + "durability": null, + "name": "Gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "7462", + "bonuses": "12,12,12,6,12,12,12,12,6,12,6,12,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "It's cornflour in a pot.", + "durability": null, + "name": "Cornflour", + "weight": "1", + "archery_ticket_price": "0", + "id": "7463" + }, + { + "examine": "A tatty old book belonging to the Wise Old Man of Draynor Village.", + "durability": null, + "name": "Book on chickens", + "archery_ticket_price": "0", + "id": "7464" + }, + { + "examine": "Surprise, it looks like a vanilla pod.", + "durability": null, + "name": "Vanilla pod", + "archery_ticket_price": "0", + "id": "7465" + }, + { + "examine": "It's cornflour in a pot.", + "durability": null, + "name": "Cornflour", + "weight": "1", + "archery_ticket_price": "0", + "id": "7466" + }, + { + "examine": "It's cornflour in a pot.", + "durability": null, + "name": "Pot of cornflour", + "weight": "1", + "archery_ticket_price": "0", + "id": "7468" + }, + { + "destroy_message": "I'll have to get all the ingredients again.", + "examine": "A mixture of milk, cream and cornflour.", + "durability": null, + "name": "Cornflour mixture", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7470" + }, + { + "destroy_message": "I'll have to get all the ingredients again.", + "examine": "It's a bucket of milk and cream.", + "durability": null, + "name": "Milky mixture", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7471" + }, + { + "examine": "Some cinnamon sticks.", + "durability": null, + "name": "Cinnamon", + "archery_ticket_price": "0", + "id": "7472" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pot of brulee supreme.", + "durability": null, + "name": "Brulee supreme", + "archery_ticket_price": "0", + "id": "7476" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "What came first, the chicken or...", + "durability": null, + "name": "Evil chicken's egg", + "archery_ticket_price": "0", + "id": "7477" + }, + { + "destroy_message": "I got this by killing a Black Dragon. It might be hard to get another one.", + "examine": "It's got a dragon on it.", + "durability": null, + "name": "Dragon token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7478" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It's a meat and potato stew with fancy seasoning.", + "durability": null, + "name": "Spicy stew", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7479" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (4)", + "archery_ticket_price": "0", + "id": "7480" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (3)", + "archery_ticket_price": "0", + "id": "7481" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (2)", + "archery_ticket_price": "0", + "id": "7482" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Red spice (1)", + "archery_ticket_price": "0", + "id": "7483" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (4)", + "archery_ticket_price": "0", + "id": "7484" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (3)", + "archery_ticket_price": "0", + "id": "7485" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (2)", + "archery_ticket_price": "0", + "id": "7486" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Orange spice (1)", + "archery_ticket_price": "0", + "id": "7487" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (4)", + "archery_ticket_price": "0", + "id": "7488" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (3)", + "archery_ticket_price": "0", + "id": "7489" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (2)", + "archery_ticket_price": "0", + "id": "7490" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Brown spice (1)", + "archery_ticket_price": "0", + "id": "7491" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (4)", + "archery_ticket_price": "0", + "id": "7492" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (3)", + "archery_ticket_price": "0", + "id": "7493" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (2)", + "archery_ticket_price": "0", + "id": "7494" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Yellow spice (1)", + "archery_ticket_price": "0", + "id": "7495" + }, + { + "examine": "Allows for equal distribution of spice.", + "durability": null, + "name": "Empty spice shaker", + "archery_ticket_price": "0", + "id": "7496" + }, + { + "examine": "A cool refreshing fruit mix. With ash in for some reason.", + "durability": null, + "name": "Dirty blast", + "archery_ticket_price": "0", + "id": "7497" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7498" + }, + { + "examine": "He seems to like wearing black.", + "durability": null, + "name": "Evil dave", + "archery_ticket_price": "0", + "id": "7499" + }, + { + "examine": "A short angry guy.", + "durability": null, + "name": "Dwarf", + "archery_ticket_price": "0", + "id": "7500" + }, + { + "examine": "He provides new players with useful information.", + "durability": null, + "name": "Lumbridge guide", + "archery_ticket_price": "0", + "id": "7502" + }, + { + "examine": "He looks a little shifty.", + "durability": null, + "name": "Osman", + "archery_ticket_price": "0", + "id": "7504" + }, + { + "examine": "A shifty-looking character.", + "durability": null, + "name": "Pirate pete", + "archery_ticket_price": "0", + "id": "7505" + }, + { + "examine": "Leader of the White Knights.", + "durability": null, + "name": "Sir amik varze", + "archery_ticket_price": "0", + "id": "7506" + }, + { + "examine": "He's been frozen in time.", + "durability": null, + "name": "Skrach", + "archery_ticket_price": "0", + "id": "7507" + }, + { + "shop_price": "4", + "examine": "There appears to be a coin in the bottom. Liked by dwarves.", + "durability": null, + "name": "Asgoldian ale", + "archery_ticket_price": "0", + "id": "7508" + }, + { + "examine": "Red hot and glowing, ouch! Only for dwarf consumption.", + "durability": null, + "name": "Dwarven rock cake", + "weight": "8.5", + "archery_ticket_price": "0", + "id": "7509" + }, + { + "examine": "Cool and heavy as a brick. Only for dwarf consumption.", + "durability": null, + "name": "Dwarven rock cake", + "weight": "8.5", + "archery_ticket_price": "0", + "id": "7510" + }, + { + "examine": "Two out of two goblin generals prefer it!", + "durability": null, + "name": "Slop of compromise", + "archery_ticket_price": "0", + "id": "7511" + }, + { + "examine": "Previously a nice crispy loaf of bread. Now just kind of icky.", + "durability": null, + "name": "Soggy bread", + "archery_ticket_price": "0", + "id": "7512" + }, + { + "examine": "They clearly taste so much better this way!", + "durability": null, + "name": "Spicy maggots", + "archery_ticket_price": "0", + "id": "7513" + }, + { + "examine": "Orange slices which have been dyed, but it looks more like they died.", + "durability": null, + "name": "Dyed orange", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7514" + }, + { + "examine": "Glad these aren't in my bed.", + "durability": null, + "name": "Breadcrumbs", + "archery_ticket_price": "0", + "id": "7515" + }, + { + "examine": "Those leaves look useful!", + "durability": null, + "name": "Kelp", + "archery_ticket_price": "0", + "id": "7516" + }, + { + "examine": "Kelp flakes. Smells of the sea.", + "durability": null, + "name": "Ground kelp", + "weight": "2", + "archery_ticket_price": "0", + "id": "7517" + }, + { + "examine": "A smelly meat.", + "durability": null, + "name": "Crab meat", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7518" + }, + { + "examine": "A smelly meat.", + "durability": null, + "name": "Crab meat", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7519" + }, + { + "ge_buy_limit": "100", + "examine": "Nice and Tasty!", + "grand_exchange_price": "219", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7521" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "219", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7522" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7523" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7524" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7525" + }, + { + "examine": "Nice and Tasty!", + "grand_exchange_price": "226", + "durability": null, + "name": "Cooked crab meat", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7526" + }, + { + "examine": "A smelly paste.", + "durability": null, + "name": "Ground crab meat", + "archery_ticket_price": "0", + "id": "7527" + }, + { + "examine": "A smelly paste.", + "durability": null, + "name": "Ground cod", + "archery_ticket_price": "0", + "id": "7528" + }, + { + "examine": "Would taste nicer if I cooked it.", + "durability": null, + "name": "Raw fishcake", + "archery_ticket_price": "0", + "id": "7529" + }, + { + "examine": "Mmmm, reminds me of the seaside.", + "durability": null, + "name": "Cooked fishcake", + "archery_ticket_price": "0", + "id": "7530" + }, + { + "examine": "Hmmm, what can I use this for?", + "durability": null, + "name": "Mudskipper hide", + "weight": "1", + "archery_ticket_price": "0", + "id": "7532" + }, + { + "remove_head": "true", + "examine": "You'll look daft, but at least you won't drown!", + "durability": null, + "name": "Fishbowl helmet", + "weight": "5", + "archery_ticket_price": "0", + "id": "7534", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "I'll need a helmet to make this work.", + "durability": null, + "name": "Diving apparatus", + "weight": "10", + "archery_ticket_price": "0", + "id": "7535", + "equipment_slot": "1" + }, + { + "examine": "Fresh off the crab itself.", + "durability": null, + "name": "Fresh crab claw", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7536" + }, + { + "examine": "If it is good enough for crabs, it's good enough for me.", + "durability": null, + "name": "Crab claw", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7537", + "bonuses": "0,0,0,0,0,3,4,2,0,0,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Fresh off the crab itself.", + "durability": null, + "name": "Fresh crab shell", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7538" + }, + { + "remove_head": "true", + "examine": "If it's good enough for crabs, it's good enough for me!", + "durability": null, + "name": "Crab helmet", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7539", + "bonuses": "0,0,0,-3,-1,4,5,3,-1,4,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "Darn, it's useless now.", + "durability": null, + "name": "Broken crab claw", + "archery_ticket_price": "0", + "id": "7540" + }, + { + "examine": "Darn, it's useless now.", + "durability": null, + "name": "Broken crab shell", + "archery_ticket_price": "0", + "id": "7541" + }, + { + "destroy_message": "Maybe Traiborn will have another.", + "examine": "Imbued with knowledge itself.", + "durability": null, + "name": "Cake of guidance", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7542" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Now all I need to do is cook it.", + "durability": null, + "name": "Raw guide cake", + "archery_ticket_price": "0", + "id": "7543" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Egg containing knowledge.", + "durability": null, + "name": "Enchanted egg", + "archery_ticket_price": "0", + "id": "7544" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Guiding milk.", + "durability": null, + "name": "Enchanted milk", + "weight": "2", + "archery_ticket_price": "0", + "id": "7545" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pot of special flour.", + "durability": null, + "name": "Enchanted flour", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7546" + }, + { + "examine": "A druid pouch.", + "durability": null, + "name": "Druid pouch", + "archery_ticket_price": "0", + "id": "7547" + }, + { + "shop_price": "8", + "examine": "A potato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Potato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7548" + }, + { + "durability": null, + "name": "Potato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7549" + }, + { + "shop_price": "10", + "examine": "An onion seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Onion seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7550" + }, + { + "durability": null, + "name": "Onion seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7551" + }, + { + "shop_price": "76", + "examine": "Arrows with mithril heads.", + "grand_exchange_price": "24", + "durability": null, + "name": "Mithril arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7552", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,22,0,0" + }, + { + "durability": null, + "name": "Mithril arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7553" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "16", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7554" + }, + { + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7555" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7556" + }, + { + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7557" + }, + { + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "9", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7558" + }, + { + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7559" + }, + { + "shop_price": "140", + "examine": "Used for small missile spells.", + "grand_exchange_price": "65", + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7560" + }, + { + "durability": null, + "name": "Chaos rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7561" + }, + { + "shop_price": "10", + "examine": "A tomato seed - plant in an allotment.", + "grand_exchange_price": "1", + "durability": null, + "name": "Tomato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7562" + }, + { + "durability": null, + "name": "Tomato seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7563" + }, + { + "examine": "An inflated toad tied to a rock like a balloon.", + "durability": null, + "name": "Balloon toad", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7564" + }, + { + "examine": "An inflated toad tied to a rock like a balloon.", + "durability": null, + "name": "Balloon toad", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7565" + }, + { + "ge_buy_limit": "100", + "examine": "The uncooked meat of a Jubbly bird.", + "grand_exchange_price": "422", + "durability": null, + "name": "Raw jubbly", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7566" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "422", + "durability": null, + "name": "Raw jubbly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7567" + }, + { + "ge_buy_limit": "100", + "examine": "Lovely jubbly!", + "grand_exchange_price": "944", + "durability": null, + "name": "Cooked jubbly", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7568" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "944", + "durability": null, + "name": "Cooked jubbly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7569" + }, + { + "durability": null, + "name": "Burnt jubbly", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7571" + }, + { + "examine": "Like a banana only redder.", + "durability": null, + "name": "Red banana", + "archery_ticket_price": "0", + "id": "7572", + "equipment_slot": "5" + }, + { + "examine": "Like monkey nuts only tchikier.", + "durability": null, + "name": "Tchiki monkey nuts", + "archery_ticket_price": "0", + "id": "7573" + }, + { + "examine": "Perfect for stuffing snakes.", + "durability": null, + "name": "Sliced red banana", + "archery_ticket_price": "0", + "id": "7574" + }, + { + "examine": "Mixing this with jam would just be wrong.", + "durability": null, + "name": "Tchiki nut paste", + "archery_ticket_price": "0", + "id": "7575" + }, + { + "examine": "Like a snake only not alive.", + "durability": null, + "name": "Snake corpse", + "weight": "3", + "archery_ticket_price": "0", + "id": "7576" + }, + { + "examine": "This snake is stuffed right up.", + "durability": null, + "name": "Raw stuffed snake", + "weight": "3", + "archery_ticket_price": "0", + "id": "7577" + }, + { + "examine": "Is this really what you wanted to do?", + "durability": null, + "name": "Odd stuffed snake", + "archery_ticket_price": "0", + "id": "7578" + }, + { + "examine": "Fit for a Monkey King. (cooked)", + "durability": null, + "name": "Stuffed snake", + "weight": "3", + "archery_ticket_price": "0", + "id": "7579" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Overgrown hellcat", + "archery_ticket_price": "0", + "id": "7581" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Hell cat", + "archery_ticket_price": "0", + "id": "7582" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Hell-kitten", + "archery_ticket_price": "0", + "id": "7583" + }, + { + "examine": "Your hellish pet cat!!", + "durability": null, + "name": "Wily hellcat", + "archery_ticket_price": "0", + "id": "7585" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Dummy", + "archery_ticket_price": "0", + "id": "7586" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7587" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7588" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7589" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7590" + }, + { + "examine": "Filled with items. Like a bank, but spookier!", + "durability": null, + "name": "Coffin", + "archery_ticket_price": "0", + "id": "7591" + }, + { + "examine": "Aside from the braaaains on the lapel, it's still quite good.", + "durability": null, + "name": "Zombie shirt", + "archery_ticket_price": "0", + "id": "7592", + "equipment_slot": "4" + }, + { + "examine": "Good for a shamble about town.", + "durability": null, + "name": "Zombie trousers", + "archery_ticket_price": "0", + "id": "7593", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "I look 40,000 years old in this...", + "durability": null, + "name": "Zombie mask", + "archery_ticket_price": "0", + "id": "7594", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Smells pretty funky.", + "durability": null, + "name": "Zombie gloves", + "archery_ticket_price": "0", + "id": "7595", + "equipment_slot": "9" + }, + { + "shop_price": "160", + "examine": "Thrilling.", + "durability": null, + "name": "Zombie boots", + "archery_ticket_price": "0", + "id": "7596", + "equipment_slot": "10" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7597" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7598" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7599" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7600" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7601" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7602" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7603" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7604" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7605" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7606" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7607" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7608" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7609" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7610" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7611" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7612" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7613" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7614" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7615" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7616" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7617" + }, + { + "durability": null, + "name": "Item", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7618" + }, + { + "examine": "A silvery rod of mithril and silver with sapphire on top.", + "durability": null, + "name": "Silvthrill rod", + "archery_ticket_price": "0", + "id": "7620" + }, + { + "examine": "A bucket partially filled with rubble. / A bucket totally filled with rubble.", + "durability": null, + "name": "Bucket of rubble", + "weight": "2", + "archery_ticket_price": "0", + "id": "7622" + }, + { + "examine": "A bucket partially filled with rubble. / A bucket totally filled with rubble.", + "durability": null, + "name": "Bucket of rubble", + "weight": "2", + "archery_ticket_price": "0", + "id": "7624" + }, + { + "examine": "A bucket partially filled with rubble. / A bucket totally filled with rubble.", + "durability": null, + "name": "Bucket of rubble", + "weight": "2", + "archery_ticket_price": "0", + "id": "7626" + }, + { + "destroy_message": "You can get another plaster fragment by exploring near the Inn in Burgh de Rott.", + "examine": "A fragment of plaster with some impressions on it.", + "durability": null, + "name": "Plaster fragment", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7628" + }, + { + "destroy_message": "You can get another scroll by exploring near the Inn in Burgh de Rott.", + "examine": "An ancient tattered scroll.", + "durability": null, + "name": "Dusty scroll", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7629" + }, + { + "destroy_message": "You can get another temple key by talking to Drezel.", + "examine": "A key for the Temple Library. (In Aid of the Myreque)", + "durability": null, + "name": "Temple library key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7632" + }, + { + "destroy_message": "You can get another Ancient Book by searching the library in the temple on the Salve.", + "shop_price": "5000", + "examine": "The unholy book of a forgotten god.", + "durability": null, + "name": "Ancient book", + "weight": "1", + "archery_ticket_price": "0", + "id": "7633", + "bonuses": "4,4,4,6,0,4,4,4,6,0,2,0,0,5,0" + }, + { + "destroy_message": "You can get another Crumbling tome by searching the library in the temple on the Salve.", + "examine": "An ancient history book.", + "durability": null, + "name": "Battered tome", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7634" + }, + { + "destroy_message": "You can get another Leather book by searching the library in the temple on the Salve.", + "examine": "An ancient leather-bound tome.", + "durability": null, + "name": "Leather book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7635" + }, + { + "examine": "Rod of Ivandis dust.", + "durability": null, + "name": "Rod dust", + "archery_ticket_price": "0", + "id": "7636" + }, + { + "examine": "A silvery rod of mithril and silver with sapphire on top.", + "durability": null, + "name": "Silvthrill rod", + "archery_ticket_price": "0", + "id": "7637", + "equipment_slot": "3" + }, + { + "examine": "A silvery rod of mithril and silver with sapphire on top.", + "durability": null, + "name": "Silvthrill rod", + "archery_ticket_price": "0", + "id": "7638" + }, + { + "turn90cw_anim": "1207", + "examine": "A fully charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(10)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7639", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(9)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7640", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(8)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7641", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(7)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7642", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(6)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7643", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(5)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7644", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(4)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7645", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(3)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7646", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "2! 2 charges left! Ha Ha Ha.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(2)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7647", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "A partialy charged rod.", + "walk_anim": "1205", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "name": "Rod of ivandis(1)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7648", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "destroy_message": "You can make another one of these by using clay on Ivandis' coffin.", + "examine": "A mould of the Rod of Ivandis.", + "durability": null, + "name": "Rod clay mould", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7649" + }, + { + "ge_buy_limit": "1000", + "examine": "It's ground up silver.", + "grand_exchange_price": "316", + "durability": null, + "name": "Silver dust", + "tradeable": "true", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "7650" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "316", + "durability": null, + "name": "Silver dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7651" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "96", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7652" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "96", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7653" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "77", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7654" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "77", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7655" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "58", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7656" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "58", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7657" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "30", + "examine": "An unfinished potion.", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7658" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "30", + "durability": null, + "name": "Guthix balance(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7659" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "140", + "durability": null, + "name": "Guthix balance(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7660" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "140", + "durability": null, + "name": "Guthix balance(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7661" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "168", + "durability": null, + "name": "Guthix balance(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7662" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "168", + "durability": null, + "name": "Guthix balance(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7663" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "132", + "durability": null, + "name": "Guthix balance(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7664" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "132", + "durability": null, + "name": "Guthix balance(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7665" + }, + { + "ge_buy_limit": "1000", + "examine": "A potion of harralander, red spiders eggs, garlic and silver dust.", + "grand_exchange_price": "66", + "durability": null, + "name": "Guthix balance(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7666" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "66", + "durability": null, + "name": "Guthix balance(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7667" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1663", + "examine": "A specially crafted hammer with strange markings on it.", + "walk_anim": "1663", + "turn90ccw_anim": "1663", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1663", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "1615", + "stand_anim": "1662", + "tradeable": "true", + "run_anim": "1664", + "archery_ticket_price": "0", + "id": "7668", + "stand_turn_anim": "823", + "bonuses": "-4,-4,35,-4,0,0,0,0,0,0,0,35,0,0,0", + "shop_price": "3000", + "durability": null, + "weight": "1.8", + "weapon_interface": "10", + "render_anim": "27", + "name": "Gadderhammer" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1615", + "durability": null, + "name": "Gadderhammer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7669" + }, + { + "turn90cw_anim": "3680", + "examine": "I think they look a bit silly.", + "walk_anim": "3680", + "durability": null, + "weight": "0.4", + "turn90ccw_anim": "3680", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "turn180_anim": "3680", + "render_anim": "1386", + "equipment_slot": "3", + "stand_anim": "3677", + "name": "Boxing gloves", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7671", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "turn90cw_anim": "3680", + "examine": "I think they look a bit silly.", + "walk_anim": "3680", + "durability": null, + "weight": "0.4", + "turn90ccw_anim": "3680", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "turn180_anim": "3680", + "render_anim": "1386", + "equipment_slot": "3", + "stand_anim": "3677", + "name": "Boxing gloves", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "7673", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "examine": "A less-than razor sharp sword.", + "durability": null, + "name": "Wooden sword", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "7675", + "weapon_interface": "5", + "bonuses": "4,3,-2,0,0,0,2,1,0,0,0,5,0,0,0", + "render_anim": "2584", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Wooden shield", + "archery_ticket_price": "0", + "id": "7676", + "equipment_slot": "5" + }, + { + "examine": "It knows where the treasure is.", + "durability": null, + "name": "Treasure stone", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "7677" + }, + { + "shop_price": "160", + "examine": "You can use this to open the prize chest!", + "durability": null, + "name": "Prize key", + "weight": "1", + "archery_ticket_price": "0", + "id": "7678" + }, + { + "examine": "A good tool for bashing someone.", + "durability": null, + "name": "Pugel", + "archery_ticket_price": "0", + "two_handed": "true", + "id": "7679", + "weapon_interface": "14", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Pugel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7680" + }, + { + "examine": "Party Pete's Bumper Book Of Games", + "durability": null, + "name": "Game book", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7681" + }, + { + "durability": null, + "name": "Hoop", + "archery_ticket_price": "0", + "id": "7682", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Hoop", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7683" + }, + { + "durability": null, + "name": "Dart", + "archery_ticket_price": "0", + "attack_speed": "3", + "id": "7684", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7685" + }, + { + "durability": null, + "name": "Bow and arrow", + "archery_ticket_price": "0", + "id": "7686", + "weapon_interface": "1", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Bow and arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7687" + }, + { + "examine": "The kettle is empty.", + "durability": null, + "name": "Kettle", + "archery_ticket_price": "0", + "id": "7688" + }, + { + "durability": null, + "name": "Kettle", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7689" + }, + { + "examine": "It's full of cold water.", + "durability": null, + "name": "Full kettle", + "archery_ticket_price": "0", + "id": "7690" + }, + { + "examine": "It's full of boiling water.", + "durability": null, + "name": "Hot kettle", + "archery_ticket_price": "0", + "id": "7691" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7692" + }, + { + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7693" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7694" + }, + { + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7695" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7696" + }, + { + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7697" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7698" + }, + { + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7699" + }, + { + "examine": "Add boiling water to make a tea.", + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7700" + }, + { + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7701" + }, + { + "examine": "This teapot is empty.", + "durability": null, + "name": "Teapot", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7702" + }, + { + "durability": null, + "name": "Teapot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7703" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7704" + }, + { + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7705" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7706" + }, + { + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7707" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7708" + }, + { + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7709" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7710" + }, + { + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7711" + }, + { + "examine": "Add boiling water to make a tea.", + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7712" + }, + { + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7713" + }, + { + "examine": "This teapot is empty.", + "durability": null, + "name": "Teapot", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7714" + }, + { + "durability": null, + "name": "Teapot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7715" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7716" + }, + { + "durability": null, + "name": "Pot of tea (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7717" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7718" + }, + { + "durability": null, + "name": "Pot of tea (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7719" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7720" + }, + { + "durability": null, + "name": "Pot of tea (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7721" + }, + { + "examine": "I'd really like a nice cup of tea.", + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7722" + }, + { + "durability": null, + "name": "Pot of tea (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7723" + }, + { + "examine": "Add boiling water to make a tea.", + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "weight": "1.5", + "archery_ticket_price": "0", + "id": "7724" + }, + { + "durability": null, + "name": "Teapot with leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7725" + }, + { + "examine": "This teapot is empty.", + "durability": null, + "name": "Teapot", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7726" + }, + { + "durability": null, + "name": "Teapot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7727" + }, + { + "shop_price": "1", + "examine": "An empty cup.", + "grand_exchange_price": "7", + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7728" + }, + { + "durability": null, + "name": "Empty cup", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7729" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7730" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7731" + }, + { + "examine": "A porcelain cup.", + "durability": null, + "name": "Porcelain cup", + "archery_ticket_price": "0", + "id": "7732" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7733" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7734" + }, + { + "examine": "A porcelain cup.", + "durability": null, + "name": "Porcelain cup", + "archery_ticket_price": "0", + "id": "7735" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7736" + }, + { + "shop_price": "10", + "examine": "A nice cup of tea.", + "grand_exchange_price": "30", + "durability": null, + "name": "Cup of tea", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "7737" + }, + { + "examine": "Mmm, how about a nice cup of tea?", + "durability": null, + "name": "Tea leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7738" + }, + { + "durability": null, + "name": "Tea leaves", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7739" + }, + { + "examine": "A glass of frothy ale.", + "grand_exchange_price": "151", + "durability": null, + "name": "Beer", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7740" + }, + { + "durability": null, + "name": "Beer", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7741" + }, + { + "shop_price": "1", + "examine": "I need to fill this with beer.", + "grand_exchange_price": "25", + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "7742" + }, + { + "durability": null, + "name": "Beer glass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7743" + }, + { + "shop_price": "3", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "131", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7744" + }, + { + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7745" + }, + { + "shop_price": "2", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "569", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7746" + }, + { + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7747" + }, + { + "shop_price": "2", + "examine": "A glass of bitter.", + "grand_exchange_price": "523", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7748" + }, + { + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7749" + }, + { + "shop_price": "5", + "examine": "A foul smelling brew.", + "grand_exchange_price": "14", + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7750" + }, + { + "durability": null, + "name": "Moonlight mead", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7751" + }, + { + "shop_price": "2", + "examine": "A glass of Cider", + "grand_exchange_price": "1539", + "durability": null, + "name": "Cider", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7752" + }, + { + "durability": null, + "name": "Cider", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7753" + }, + { + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "2371", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7754" + }, + { + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7755" + }, + { + "durability": null, + "name": "Paintbrush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7756", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Paintbrush", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7757" + }, + { + "examine": "A decent-enough weapon gone rusty.", + "durability": null, + "name": "Rusty sword", + "weight": "2", + "archery_ticket_price": "0", + "id": "7758", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "examine": "Nice bit of crafting.", + "grand_exchange_price": "3140", + "durability": null, + "name": "Toy soldier", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7759" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3140", + "durability": null, + "name": "Toy soldier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7760" + }, + { + "examine": "Nice bit of crafting.", + "grand_exchange_price": "3123", + "durability": null, + "name": "Toy soldier (wound)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7761" + }, + { + "durability": null, + "name": "Toy soldier (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7762" + }, + { + "ge_buy_limit": "100", + "examine": "In inventory: Nice bit of crafting! When released: Nice bit of crafting that...", + "grand_exchange_price": "3236", + "durability": null, + "name": "Toy doll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7763" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3236", + "durability": null, + "name": "Toy doll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7764" + }, + { + "examine": "In inventory: Nice bit of crafting! When released: Nice bit of crafting that...", + "grand_exchange_price": "3289", + "durability": null, + "name": "Toy doll (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7765" + }, + { + "durability": null, + "name": "Toy doll (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7766" + }, + { + "shop_price": "1705", + "ge_buy_limit": "100", + "examine": "Nice bit of crafting!", + "grand_exchange_price": "3384", + "durability": null, + "name": "Toy mouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7767" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3384", + "durability": null, + "name": "Toy mouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7768" + }, + { + "shop_price": "1705", + "examine": "Nice bit of crafting!", + "grand_exchange_price": "3484", + "durability": null, + "name": "Toy mouse (wound)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7769" + }, + { + "durability": null, + "name": "Toy mouse (wound)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7770" + }, + { + "ge_buy_limit": "100", + "examine": "Inventory: Nice bit of crafting!As a follower: An amazing piece of crafting.", + "grand_exchange_price": "2930", + "durability": null, + "name": "Clockwork cat", + "tradeable": "true", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7771" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2930", + "durability": null, + "name": "Clockwork cat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7772" + }, + { + "examine": "I can use this to make a lyre.", + "durability": null, + "name": "Branch", + "weight": "1", + "archery_ticket_price": "0", + "id": "7773", + "equipment_slot": "3" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7774" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7775" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7776" + }, + { + "examine": "A long section of vine made up of lots of shorter sections.", + "durability": null, + "name": "Long vine", + "archery_ticket_price": "0", + "id": "7777" + }, + { + "examine": "A short section of vines.", + "durability": null, + "name": "Short vine", + "archery_ticket_price": "0", + "id": "7778" + }, + { + "examine": "A tome of learning that focuses on the Fishing skill.", + "durability": null, + "name": "Fishing tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7779" + }, + { + "examine": "A tome of learning that focuses on the Fishing skill.", + "durability": null, + "name": "Fishing tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7780" + }, + { + "examine": "A tome of learning that focuses on the Fishing skill.", + "durability": null, + "name": "Fishing tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7781" + }, + { + "examine": "A tome of learning that focuses on Agility.", + "durability": null, + "name": "Agility tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7782" + }, + { + "examine": "A tome of learning that focuses on Agility.", + "durability": null, + "name": "Agility tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7783" + }, + { + "examine": "A tome of learning that focuses on Agility.", + "durability": null, + "name": "Agility tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7784" + }, + { + "examine": "A tome of learning that focuses on the Thieving skill.", + "durability": null, + "name": "Thieving tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7785" + }, + { + "examine": "A tome of learning that focuses on the Thieving skill.", + "durability": null, + "name": "Thieving tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7786" + }, + { + "examine": "A tome of learning that focuses on the Thieving skill.", + "durability": null, + "name": "Thieving tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7787" + }, + { + "examine": "A tome of learning which focuses on the Slayer skill.", + "durability": null, + "name": "Slayer tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7788" + }, + { + "examine": "A tome of learning which focuses on the Slayer skill.", + "durability": null, + "name": "Slayer tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7789" + }, + { + "examine": "A tome of learning which focuses on the Slayer skill.", + "durability": null, + "name": "Slayer tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7790" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Mining skill.", + "durability": null, + "name": "Mining tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7791" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Mining skill.", + "durability": null, + "name": "Mining tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7792" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Mining skill.", + "durability": null, + "name": "Mining tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7793" + }, + { + "examine": "A tome of learning that focuses on Firemaking.", + "durability": null, + "name": "Firemaking tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7794" + }, + { + "examine": "A tome of learning that focuses on Firemaking.", + "durability": null, + "name": "Firemaking tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7795" + }, + { + "examine": "A tome of learning that focuses on Firemaking.", + "durability": null, + "name": "Firemaking tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7796" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Woodcutting skill.", + "durability": null, + "name": "Woodcutting tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7797" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Woodcutting skill.", + "durability": null, + "name": "Woodcutting tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7798" + }, + { + "shop_price": "160", + "examine": "A tome of learning that focuses on the Woodcutting skill.", + "durability": null, + "name": "Woodcutting tome", + "weight": "1", + "archery_ticket_price": "0", + "id": "7799" + }, + { + "examine": "A shell from a giant snail.", + "durability": null, + "name": "Snail shell", + "weight": "7", + "archery_ticket_price": "0", + "id": "7800" + }, + { + "ge_buy_limit": "10000", + "examine": "Scaly but not slimy!", + "grand_exchange_price": "1618", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "7801" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1618", + "durability": null, + "name": "Snake hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7802" + }, + { + "shop_price": "100", + "examine": "A non-magical copy of the make-over mage's amulet.", + "durability": null, + "name": "Yin yang amulet", + "archery_ticket_price": "0", + "id": "7803", + "equipment_slot": "2" + }, + { + "turn90cw_anim": "1207", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Picture", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7804", + "stand_turn_anim": "1209", + "bonuses": "0,0,11,0,0,0,0,0,0,0,0,14,0,0,0" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7805" + }, + { + "attack_anims": "381,390,390,390", + "examine": "A heavy duty sword.", + "durability": null, + "name": "Anger sword", + "archery_ticket_price": "0", + "attack_speed": "3", + "id": "7806", + "weapon_interface": "5", + "bonuses": "20,20,20,0,0,0,2,1,0,0,0,5,0,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "attack_anims": "395,395,401,395", + "examine": "A heavy duty axe.", + "durability": null, + "attack_audios": "2498,2498,2497,2498", + "name": "Anger battleaxe", + "archery_ticket_price": "0", + "id": "7807", + "weapon_interface": "2", + "bonuses": "20,20,20,0,0,0,0,0,0,-1,0,13,0,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "attack_anims": "390,390,381,390", + "examine": "A heavy duty mace.", + "durability": null, + "name": "Anger mace", + "archery_ticket_price": "0", + "id": "7808", + "weapon_interface": "8", + "bonuses": "20,20,20,0,0,0,0,0,0,0,0,5,1,0,0", + "defence_anim": "397", + "equipment_slot": "3" + }, + { + "turn90cw_anim": "1207", + "examine": "A heavy duty spear.", + "walk_anim": "1205", + "durability": null, + "turn90ccw_anim": "1208", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "stand_anim": "813", + "name": "Anger spear", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "7809", + "stand_turn_anim": "1209", + "bonuses": "20,20,20,0,0,1,1,0,0,0,0,6,0,0,0" + }, + { + "shop_price": "1", + "examine": "This wine clearly did not age well.", + "durability": null, + "name": "Jug of vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7810" + }, + { + "examine": "Well, this pot is certainly full of vinegar and no mistake.", + "durability": null, + "name": "Pot of vinegar", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "7811" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Goblin skull", + "archery_ticket_price": "0", + "id": "7812" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7813" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Goblin skull", + "archery_ticket_price": "0", + "id": "7814" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bear ribs", + "archery_ticket_price": "0", + "id": "7815" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7816" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bear ribs", + "archery_ticket_price": "0", + "id": "7817" + }, + { + "examine": "Unpolished: This needs a good polish.", + "durability": null, + "name": "Ram skull", + "archery_ticket_price": "0", + "id": "7818" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7819" + }, + { + "examine": "Unpolished: This needs a good polish.", + "durability": null, + "name": "Ram skull", + "archery_ticket_price": "0", + "id": "7820" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Unicorn bone", + "archery_ticket_price": "0", + "id": "7821" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7822" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Unicorn bone", + "archery_ticket_price": "0", + "id": "7823" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant rat bone", + "archery_ticket_price": "0", + "id": "7824" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7825" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant rat bone", + "archery_ticket_price": "0", + "id": "7826" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7827" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7828" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Giant bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7829" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Wolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7830" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7831" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Wolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7832" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7833" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7834" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Bat wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7835" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rat bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7836" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7837" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rat bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7838" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Baby dragon bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7839" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7840" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Baby dragon bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7841" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ogre ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7842" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7843" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ogre ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7844" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7845" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7846" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7847" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7848" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7849" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7850" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Mogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7851" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7852" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Mogre bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7853" + }, + { + "examine": "This needs a good polish./ This belongs in a museum!", + "durability": null, + "name": "Monkey paw", + "archery_ticket_price": "0", + "id": "7854" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7855" + }, + { + "examine": "This needs a good polish./ This belongs in a museum!", + "durability": null, + "name": "Monkey paw", + "archery_ticket_price": "0", + "id": "7856" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Dagannoth ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7857" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7858" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Dagannoth ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7859" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Snake spine", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7860" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7861" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Snake spine", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7862" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zombie bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7863" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7864" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Zombie bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7865" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Werewolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7866" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7867" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Werewolf bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7868" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Moss giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7869" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7870" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Moss giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7871" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Fire giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7872" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7873" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Fire giant bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7874" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ice giant ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7875" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7876" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ice giant ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7877" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Terrorbird wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7878" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7879" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Terrorbird wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7880" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ghoul bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7881" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7882" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Ghoul bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7883" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Troll bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7884" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7885" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Troll bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7886" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Seagull wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7887" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7888" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Seagull wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7889" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Undead cow ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7890" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7891" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Undead cow ribs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7892" + }, + { + "shop_price": "160", + "examine": "Unpolished: This needs a good polish. Polished: This bone belongs in a museum!", + "durability": null, + "name": "Experiment bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7893" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7894" + }, + { + "shop_price": "160", + "examine": "Unpolished: This needs a good polish. Polished: This bone belongs in a museum!", + "durability": null, + "name": "Experiment bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7895" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rabbit bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7896" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7897" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Rabbit bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7898" + }, + { + "examine": "Dirty:This bone needs a good polish.", + "durability": null, + "name": "Basilisk bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7899" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7900" + }, + { + "examine": "Dirty:This bone needs a good polish.", + "durability": null, + "name": "Basilisk bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7901" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Desert lizard bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7902" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7903" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Desert lizard bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7904" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Cave goblin skull", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7905" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7906" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Cave goblin skull", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7907" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Big frog leg", + "weight": "1", + "archery_ticket_price": "0", + "id": "7908" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7909" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Big frog leg", + "weight": "1", + "archery_ticket_price": "0", + "id": "7910" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Vulture wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7911" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7912" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Vulture wing", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7913" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jackal bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7914" + }, + { + "examine": "See article", + "durability": null, + "name": "Bone in vinegar", + "weight": "1", + "archery_ticket_price": "0", + "id": "7915" + }, + { + "examine": "This needs a good polish.", + "durability": null, + "name": "Jackal bone", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "7916" + }, + { + "destroy_message": "The ram skull helm looks like it will fall apart if you drop it. You would have to go to the Odd Old Man for a replacement.", + "examine": "Makes me feel baaad to the bone.", + "durability": null, + "name": "Ram skull helm", + "weight": "3", + "archery_ticket_price": "0", + "id": "7917", + "bonuses": "0,0,0,0,-2,19,21,16,0,19,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "The bonesack looks like it will fall apart if you drop it. You would have to go to the Odd Old Man for a replacement.", + "examine": "The Bonesack is a little old item that protects like leather.", + "durability": null, + "name": "Bonesack", + "weight": "9", + "archery_ticket_price": "0", + "id": "7918", + "bonuses": "0,0,0,0,0,4,4,4,4,4,4,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "500", + "examine": "A very good vintage.", + "durability": null, + "name": "Bottle of wine", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "7919" + }, + { + "durability": null, + "name": "Bottle of wine", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7920" + }, + { + "examine": "This one has clearly been taken down and passed around.", + "durability": null, + "name": "Empty wine bottle", + "weight": "1", + "archery_ticket_price": "0", + "id": "7921" + }, + { + "examine": "The money off voucher has expired.", + "durability": null, + "name": "Al kharid flyer", + "archery_ticket_price": "0", + "id": "7922" + }, + { + "examine": "A ring given to you by the Easter Bunny.", + "durability": null, + "name": "Easter ring", + "archery_ticket_price": "0", + "id": "7927" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7928" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7929" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7930" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7931" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7932" + }, + { + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7933" + }, + { + "shop_price": "390", + "ge_buy_limit": "100", + "examine": "A field ration to help your wounds go away.", + "grand_exchange_price": "171", + "durability": null, + "name": "Field ration", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7934" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "171", + "durability": null, + "name": "Field ration", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7935" + }, + { + "shop_price": "1", + "ge_buy_limit": "25000", + "examine": "An uncharged Rune Stone of extra capability.", + "grand_exchange_price": "180", + "durability": null, + "name": "Pure essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7936" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "109", + "durability": null, + "name": "Pure essence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7937" + }, + { + "ge_buy_limit": "5000", + "examine": "A word in your shell-like.", + "grand_exchange_price": "13600", + "durability": null, + "name": "Tortoise shell", + "tradeable": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "7939" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13600", + "durability": null, + "name": "Tortoise shell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7940" + }, + { + "examine": "A sturdy sheet of iron.", + "durability": null, + "name": "Iron sheet", + "weight": "1.75", + "archery_ticket_price": "0", + "id": "7941" + }, + { + "examine": "Perfect for storing. Not so good for eating.", + "durability": null, + "name": "Fresh monkfish", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "7942" + }, + { + "examine": "Perfect for storing. Not so good for eating.", + "durability": null, + "name": "Fresh monkfish", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "7943" + }, + { + "ge_buy_limit": "20000", + "examine": "I should try cooking this./Freshly caught. Needs cooking. (Fresh Monkfish)", + "grand_exchange_price": "618", + "durability": null, + "name": "Raw monkfish", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7944" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "618", + "durability": null, + "name": "Raw monkfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7945" + }, + { + "ge_buy_limit": "10000", + "examine": "A tasty fish.", + "grand_exchange_price": "617", + "durability": null, + "name": "Monkfish", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "7946" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "617", + "durability": null, + "name": "Monkfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7947" + }, + { + "durability": null, + "name": "Burnt monkfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7949" + }, + { + "examine": "A highly portable army of skeletal magic.", + "durability": null, + "name": "Bone seeds", + "archery_ticket_price": "0", + "id": "7950" + }, + { + "shop_price": "160", + "examine": "A book taken from the desk of Herman Caranos.", + "durability": null, + "name": "Herman's book", + "tradeable": "false", + "destroy": "true", + "weight": "0.09", + "archery_ticket_price": "0", + "id": "7951" + }, + { + "examine": "Useless without the head.", + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7952", + "equipment_slot": "3" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7953" + }, + { + "durability": null, + "name": "Burnt shrimp", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "7955" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "7956" + }, + { + "shop_price": "2", + "examine": "A mostly clean apron.", + "grand_exchange_price": "169", + "durability": null, + "name": "White apron", + "tradeable": "true", + "weight": "0.45", + "archery_ticket_price": "0", + "id": "7957" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A prop for holding up a tunnel roof.", + "durability": null, + "name": "Mining prop", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7958" + }, + { + "destroy_message": "You can get your box back by talking to the guard by the dungeon entrance in Etceteria.", + "examine": "A box full of stolen Etceterian items.", + "durability": null, + "name": "Heavy box", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7959" + }, + { + "examine": "It says 'To the dungeons' on the side.", + "durability": null, + "name": "Empty box", + "archery_ticket_price": "0", + "id": "7960" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7961" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7962" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7963" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7964" + }, + { + "examine": "A diary with one/two/three/four/five page(s).", + "durability": null, + "name": "Burnt diary", + "archery_ticket_price": "0", + "id": "7965" + }, + { + "examine": "A dwarf-made coal engine. It looks very sturdy.", + "durability": null, + "name": "Engine", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7967" + }, + { + "examine": "A beam with a pulley attached.", + "durability": null, + "name": "Pulley beam", + "archery_ticket_price": "0", + "id": "7969" + }, + { + "examine": "A long beam with a pulley attached.", + "durability": null, + "name": "Long pulley beam", + "archery_ticket_price": "0", + "id": "7970" + }, + { + "examine": "A very long beam with a pulley attached.", + "durability": null, + "name": "Longer pulley beam", + "archery_ticket_price": "0", + "id": "7971" + }, + { + "examine": "The manual for an AMCE Lift-In-A-Box.", + "durability": null, + "name": "Lift manual", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "7972" + }, + { + "examine": "A wooden beam.", + "durability": null, + "name": "Beam", + "archery_ticket_price": "0", + "id": "7973" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "7975" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Cockatrice head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7976" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Basilisk head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7977" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kurask head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7978" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Abyssal head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7979" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kbd heads", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7980" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kq head", + "archery_ticket_price": "0", + "id": "7981" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "7982" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Cockatrice head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7983" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Basilisk head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7984" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kurask head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7985" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Abyssal head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7986" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kbd heads", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "7987" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kq head", + "archery_ticket_price": "0", + "id": "7988" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big bass", + "weight": "6", + "archery_ticket_price": "0", + "id": "7989" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big bass", + "weight": "6", + "archery_ticket_price": "0", + "id": "7990" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big swordfish", + "archery_ticket_price": "0", + "id": "7991" + }, + { + "examine": "Whopper! I should get this stuffed!", + "durability": null, + "name": "Big swordfish", + "archery_ticket_price": "0", + "id": "7992" + }, + { + "examine": "Its a monster! I should get this stuffed!", + "durability": null, + "name": "Big shark", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "7993" + }, + { + "examine": "Its a monster! I should get this stuffed!", + "durability": null, + "name": "Big shark", + "weight": "0.7", + "archery_ticket_price": "0", + "id": "7994" + }, + { + "examine": "A portrait of King Arthur.", + "durability": null, + "name": "Arthur portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7995" + }, + { + "shop_price": "1000", + "examine": "A portrait of Elena.", + "durability": null, + "name": "Elena portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7996" + }, + { + "examine": "A painting of the staute of King Alvis of Keldagrim", + "durability": null, + "name": "Keldagrim portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7997" + }, + { + "examine": "A portrait of Prince Brand and Princess Astrid of Miscellania.", + "durability": null, + "name": "Misc. portrait", + "weight": "1", + "archery_ticket_price": "0", + "id": "7998" + }, + { + "shop_price": "2000", + "examine": "The exotic land of the Elves.", + "durability": null, + "name": "Isafdar painting", + "archery_ticket_price": "0", + "id": "8000" + }, + { + "shop_price": "2000", + "examine": "The tropical coast of karamja.", + "durability": null, + "name": "Karamja painting", + "archery_ticket_price": "0", + "id": "8001" + }, + { + "shop_price": "2000", + "examine": "Oxtable's famous painting of the Lumbridge water mill.", + "durability": null, + "name": "Lumbridge painting", + "weight": "1", + "archery_ticket_price": "0", + "id": "8002" + }, + { + "shop_price": "2000", + "examine": "A painting of the spooky forests of morytania.", + "durability": null, + "name": "Morytania painting", + "weight": "1", + "archery_ticket_price": "0", + "id": "8003" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1341", + "durability": null, + "name": "Varrock teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8007" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1371", + "durability": null, + "name": "Lumbridge teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8008" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1414", + "durability": null, + "name": "Falador teleport", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8009" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1369", + "durability": null, + "name": "Camelot teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8010" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1511", + "durability": null, + "name": "Ardougne teleport", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8011" + }, + { + "shop_price": "2500", + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1025", + "durability": null, + "name": "Watchtower t'port", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8012" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "1426", + "durability": null, + "name": "Teleport to house", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8013" + }, + { + "ge_buy_limit": "200", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "360", + "durability": null, + "name": "Bones to bananas", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8014" + }, + { + "ge_buy_limit": "200", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "620", + "durability": null, + "name": "Bones to peaches", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8015" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "343", + "durability": null, + "name": "Enchant sapphire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8016" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "409", + "durability": null, + "name": "Enchant emerald", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8017" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "207", + "durability": null, + "name": "Enchant ruby", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8018" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "326", + "durability": null, + "name": "Enchant diamond", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8019" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "250", + "durability": null, + "name": "Enchant dragonstn.", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8020" + }, + { + "ge_buy_limit": "1000", + "examine": "A tablet containing a magic spell.", + "grand_exchange_price": "31", + "durability": null, + "name": "Enchant onyx", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8021" + }, + { + "grand_exchange_price": "1918", + "durability": null, + "name": "Wooden bed", + "archery_ticket_price": "0", + "id": "8031" + }, + { + "grand_exchange_price": "1631", + "durability": null, + "name": "Oak bed", + "archery_ticket_price": "0", + "id": "8032" + }, + { + "grand_exchange_price": "1388", + "durability": null, + "name": "Large oak bed", + "archery_ticket_price": "0", + "id": "8033" + }, + { + "grand_exchange_price": "1376", + "durability": null, + "name": "Teak bed", + "archery_ticket_price": "0", + "id": "8034" + }, + { + "grand_exchange_price": "1996", + "durability": null, + "name": "Large teak bed", + "archery_ticket_price": "0", + "id": "8035" + }, + { + "grand_exchange_price": "1314", + "durability": null, + "name": "4-poster", + "archery_ticket_price": "0", + "id": "8036" + }, + { + "grand_exchange_price": "274779", + "durability": null, + "name": "Gilded 4-poster", + "archery_ticket_price": "0", + "id": "8037" + }, + { + "grand_exchange_price": "18", + "durability": null, + "name": "Shoe box", + "archery_ticket_price": "0", + "id": "8038" + }, + { + "grand_exchange_price": "42", + "durability": null, + "name": "Oak drawers", + "archery_ticket_price": "0", + "id": "8039" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak wardrobe", + "archery_ticket_price": "0", + "id": "8040" + }, + { + "grand_exchange_price": "126", + "durability": null, + "name": "Teak drawers", + "archery_ticket_price": "0", + "id": "8041" + }, + { + "grand_exchange_price": "12", + "durability": null, + "name": "Teak wardrobe", + "archery_ticket_price": "0", + "id": "8042" + }, + { + "grand_exchange_price": "102", + "durability": null, + "name": "Mahogany 'drobe", + "archery_ticket_price": "0", + "id": "8043" + }, + { + "grand_exchange_price": "139452", + "durability": null, + "name": "Gilded wardrobe", + "archery_ticket_price": "0", + "id": "8044" + }, + { + "grand_exchange_price": "510", + "durability": null, + "name": "Shaving stand", + "archery_ticket_price": "0", + "id": "8045" + }, + { + "grand_exchange_price": "449", + "durability": null, + "name": "Oak shaving stand", + "archery_ticket_price": "0", + "id": "8046" + }, + { + "grand_exchange_price": "147", + "durability": null, + "name": "Oak dresser", + "archery_ticket_price": "0", + "id": "8047" + }, + { + "grand_exchange_price": "478", + "durability": null, + "name": "Teak dresser", + "archery_ticket_price": "0", + "id": "8048" + }, + { + "grand_exchange_price": "456", + "durability": null, + "name": "Fancy teak dresser", + "archery_ticket_price": "0", + "id": "8049" + }, + { + "grand_exchange_price": "404", + "durability": null, + "name": "Mahogany dresser", + "archery_ticket_price": "0", + "id": "8050" + }, + { + "grand_exchange_price": "140594", + "durability": null, + "name": "Gilded dresser", + "archery_ticket_price": "0", + "id": "8051" + }, + { + "grand_exchange_price": "367", + "durability": null, + "name": "Oak clock", + "archery_ticket_price": "0", + "id": "8052" + }, + { + "grand_exchange_price": "552", + "durability": null, + "name": "Teak clock", + "archery_ticket_price": "0", + "id": "8053" + }, + { + "grand_exchange_price": "154310", + "durability": null, + "name": "Gilded clock", + "archery_ticket_price": "0", + "id": "8054" + }, + { + "examine": "When unanimated: A dusty old suit of armour. When animated: Aaargh, it's alive!", + "durability": null, + "name": "Suit of armour", + "archery_ticket_price": "0", + "id": "8085" + }, + { + "grand_exchange_price": "13", + "durability": null, + "name": "Wooden bench", + "archery_ticket_price": "0", + "id": "8108" + }, + { + "grand_exchange_price": "131", + "durability": null, + "name": "Oak bench", + "archery_ticket_price": "0", + "id": "8109" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak bench", + "archery_ticket_price": "0", + "id": "8110" + }, + { + "grand_exchange_price": "17", + "durability": null, + "name": "Teak dining bench", + "archery_ticket_price": "0", + "id": "8111" + }, + { + "grand_exchange_price": "2", + "durability": null, + "name": "Carved teak bench", + "archery_ticket_price": "0", + "id": "8112" + }, + { + "grand_exchange_price": "145", + "durability": null, + "name": "Mahogany bench", + "archery_ticket_price": "0", + "id": "8113" + }, + { + "grand_exchange_price": "531526", + "durability": null, + "name": "Gilded bench", + "archery_ticket_price": "0", + "id": "8114" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Wood dining table", + "archery_ticket_price": "0", + "id": "8115" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak dining table", + "archery_ticket_price": "0", + "id": "8116" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak table", + "archery_ticket_price": "0", + "id": "8117" + }, + { + "grand_exchange_price": "2", + "durability": null, + "name": "Teak table", + "archery_ticket_price": "0", + "id": "8118" + }, + { + "grand_exchange_price": "249", + "durability": null, + "name": "Carved teak table", + "archery_ticket_price": "0", + "id": "8119" + }, + { + "grand_exchange_price": "497", + "durability": null, + "name": "Mahogany table", + "archery_ticket_price": "0", + "id": "8120" + }, + { + "grand_exchange_price": "394177", + "durability": null, + "name": "Opulent table", + "archery_ticket_price": "0", + "id": "8121" + }, + { + "shop_price": "24", + "examine": "A candle.", + "grand_exchange_price": "104", + "durability": null, + "name": "Candles", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8128" + }, + { + "durability": null, + "name": "Skeleton guard", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8131" + }, + { + "examine": "He doesn't seem pleased to see me./Beware of the dog! (Construction)", + "durability": null, + "name": "Guard dog", + "archery_ticket_price": "0", + "id": "8132" + }, + { + "examine": "He doesn't look very welcoming.", + "durability": null, + "name": "Hobgoblin guard", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8133" + }, + { + "examine": "Young but still dangerous.", + "durability": null, + "name": "Baby red dragon", + "archery_ticket_price": "0", + "id": "8134" + }, + { + "examine": "No spider could grow that big! It's unrealistic!", + "durability": null, + "name": "Huge spider", + "archery_ticket_price": "0", + "id": "8135" + }, + { + "examine": "(Level 122)", + "durability": null, + "name": "Hellhound", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8137" + }, + { + "examine": "I don't think insect repellent will work...", + "durability": null, + "name": "Kalphite soldier", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8139" + }, + { + "examine": "The Tok-Xil fires deadly spines out of its arm, projected by its own heat.", + "durability": null, + "name": "Tok-xil", + "archery_ticket_price": "0", + "id": "8140" + }, + { + "examine": "Its scales seem to be made of steel.", + "durability": null, + "name": "Steel dragon", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8142" + }, + { + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Thorny hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8203" + }, + { + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Nice hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8204" + }, + { + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Small box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8205" + }, + { + "shop_price": "20000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Topiary hedge", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8206" + }, + { + "shop_price": "25000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Fancy hedge", + "weight": "10", + "archery_ticket_price": "0", + "id": "8207" + }, + { + "shop_price": "50000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Tall fancy hedge", + "archery_ticket_price": "0", + "id": "8208" + }, + { + "examine": "Some rosemary.", + "grand_exchange_price": "20", + "durability": null, + "name": "Rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8210" + }, + { + "examine": "A bunch of marigolds.", + "grand_exchange_price": "3862", + "durability": null, + "name": "Marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8214" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Beer barrel", + "archery_ticket_price": "0", + "id": "8239" + }, + { + "grand_exchange_price": "16860", + "durability": null, + "name": "Cider barrel", + "archery_ticket_price": "0", + "id": "8240" + }, + { + "shop_price": "3", + "examine": "Probably the finest readily-available ale in Asgarnia.", + "grand_exchange_price": "131", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8241" + }, + { + "shop_price": "2", + "examine": "A glass of frothy ale.", + "grand_exchange_price": "569", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8242" + }, + { + "shop_price": "2", + "examine": "A glass of bitter.", + "grand_exchange_price": "523", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8243" + }, + { + "examine": "A fruity, full-bodied ale.", + "grand_exchange_price": "2371", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8244" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Wood kitchen table", + "archery_ticket_price": "0", + "id": "8246" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak kitchen table", + "archery_ticket_price": "0", + "id": "8247" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Teak kitchen table", + "archery_ticket_price": "0", + "id": "8248" + }, + { + "durability": null, + "name": "Crawling hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "8260" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Cockatrice head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8261" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Basilisk head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8262" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kurask head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8263" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Abyssal head", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8264" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kbd heads", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8265" + }, + { + "examine": "I should get it stuffed!", + "durability": null, + "name": "Kq head", + "archery_ticket_price": "0", + "id": "8266" + }, + { + "durability": null, + "name": "Runite armour", + "archery_ticket_price": "0", + "id": "8272", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "examine": "The magical sword 'Silverlight'. / The magical sword 'Silverlight', stained black with mushroom ink. (during Shadow of the Storm)", + "durability": null, + "name": "Silverlight", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "8279", + "bonuses": "9,14,-2,0,0,0,3,2,1,0,0,12,0,0,0" + }, + { + "examine": "This used to belong to King Arthur.", + "durability": null, + "name": "Excalibur", + "weight": "2.2", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "8280", + "bonuses": "20,29,-2,0,0,0,3,2,1,0,0,25,0,0,0" + }, + { + "examine": "The magical sword Silverlight, enhanced with the blood of Agrith-Naar.", + "durability": null, + "name": "Darklight", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "8281", + "bonuses": "10,16,-2,0,0,0,3,2,2,0,0,13,0,0,0" + }, + { + "examine": "This provides partial protection from dragon-breath attacks.", + "grand_exchange_price": "305", + "durability": null, + "name": "Anti-dragon shield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8282", + "bonuses": "0,0,0,0,0,7,9,8,2,8,0,0,0,0,0" + }, + { + "examine": "A very powerful dragonstone amulet.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8283", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,0,3,0" + }, + { + "shop_price": "450", + "examine": "The cape worn by members of the Legends Guild.", + "durability": null, + "name": "Cape of legends", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "8284", + "bonuses": "0,0,0,0,0,7,7,7,7,7,7,0,0,0,0" + }, + { + "examine": "Legendary King of the Britons.", + "durability": null, + "name": "King arthur", + "archery_ticket_price": "0", + "id": "8285" + }, + { + "examine": "She looks concerned.", + "durability": null, + "name": "Elena", + "archery_ticket_price": "0", + "id": "8286" + }, + { + "examine": "It's full of pent-up aggression.", + "durability": null, + "name": "Rocnar", + "archery_ticket_price": "0", + "id": "8305" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Crude wooden chair", + "archery_ticket_price": "0", + "id": "8309" + }, + { + "grand_exchange_price": "50", + "durability": null, + "name": "Wooden chair", + "archery_ticket_price": "0", + "id": "8310" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Rocking chair", + "archery_ticket_price": "0", + "id": "8311" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak chair", + "archery_ticket_price": "0", + "id": "8312" + }, + { + "grand_exchange_price": "2", + "durability": null, + "name": "Oak armchair", + "archery_ticket_price": "0", + "id": "8313" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Teak armchair", + "archery_ticket_price": "0", + "id": "8314" + }, + { + "grand_exchange_price": "8", + "durability": null, + "name": "Mahogany armchair", + "archery_ticket_price": "0", + "id": "8315" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden bookcase", + "archery_ticket_price": "0", + "id": "8319" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak bookcase", + "archery_ticket_price": "0", + "id": "8320" + }, + { + "grand_exchange_price": "52", + "durability": null, + "name": "Mahogany b'kcase", + "archery_ticket_price": "0", + "id": "8321" + }, + { + "requirements": "{5,22}", + "shop_price": "1000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged dead tree", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8417" + }, + { + "durability": null, + "name": "Bagged dead tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8418" + }, + { + "requirements": "{10,22}", + "shop_price": "2000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged nice tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8419" + }, + { + "durability": null, + "name": "Bagged nice tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8420" + }, + { + "requirements": "{15,22}", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged oak tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8421" + }, + { + "durability": null, + "name": "Bagged oak tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8422" + }, + { + "requirements": "{22,30}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged willow tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8423" + }, + { + "durability": null, + "name": "Bagged willow tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8424" + }, + { + "requirements": "{22,45}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged maple tree", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8425" + }, + { + "durability": null, + "name": "Bagged maple tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8426" + }, + { + "requirements": "{22,60}", + "shop_price": "20000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged yew tree", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8427" + }, + { + "durability": null, + "name": "Bagged yew tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8428" + }, + { + "requirements": "{22,75}", + "shop_price": "50000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged magic tree", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8429" + }, + { + "durability": null, + "name": "Bagged magic tree", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8430" + }, + { + "shop_price": "1000", + "ge_buy_limit": "5000", + "examine": "You can plant this in your garden.", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bagged plant 1", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8431" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1345", + "durability": null, + "name": "Bagged plant 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8432" + }, + { + "requirements": "{6,22}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged plant 2", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8433" + }, + { + "durability": null, + "name": "Bagged plant 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8434" + }, + { + "requirements": "{12,22}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged plant 3", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8435" + }, + { + "durability": null, + "name": "Bagged plant 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8436" + }, + { + "requirements": "{22,56}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Thorny hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8437" + }, + { + "durability": null, + "name": "Thorny hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8438" + }, + { + "requirements": "{22,60}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Nice hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8439" + }, + { + "durability": null, + "name": "Nice hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8440" + }, + { + "requirements": "{22,64}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Small box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8441" + }, + { + "durability": null, + "name": "Small box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8442" + }, + { + "requirements": "{22,68}", + "shop_price": "20000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Topiary hedge", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8443" + }, + { + "durability": null, + "name": "Topiary hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8444" + }, + { + "requirements": "{22,72}", + "shop_price": "25000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Fancy hedge", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8445" + }, + { + "durability": null, + "name": "Fancy hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8446" + }, + { + "requirements": "{22,76}", + "shop_price": "50000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Tall fancy hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8447" + }, + { + "durability": null, + "name": "Tall fancy hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8448" + }, + { + "requirements": "{22,80}", + "shop_price": "100000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Tall box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8449" + }, + { + "durability": null, + "name": "Tall box hedge", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8450" + }, + { + "requirements": "{22,66}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8451" + }, + { + "durability": null, + "name": "Bagged rosemary", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8452" + }, + { + "requirements": "{22,71}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged daffodils", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8453" + }, + { + "durability": null, + "name": "Bagged daffodils", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8454" + }, + { + "requirements": "{22,76}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged bluebells", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8455" + }, + { + "durability": null, + "name": "Bagged bluebells", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8456" + }, + { + "requirements": "{22,66}", + "shop_price": "5000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged sunflower", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8457" + }, + { + "durability": null, + "name": "Bagged sunflower", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8458" + }, + { + "requirements": "{22,71}", + "shop_price": "10000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "10", + "id": "8459" + }, + { + "durability": null, + "name": "Bagged marigolds", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8460" + }, + { + "requirements": "{22,76}", + "shop_price": "15000", + "examine": "You can plant this in your garden.", + "durability": null, + "name": "Bagged roses", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8461" + }, + { + "durability": null, + "name": "Bagged roses", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8462" + }, + { + "shop_price": "160", + "examine": "How to build a house.", + "durability": null, + "name": "Construction guide", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8463" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8464", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8466", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8468", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8470", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8472", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8474", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8476", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8478", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8480", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8482", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8484", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8486", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8488", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8490", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8492", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Rune heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8494", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble crude chair.", + "durability": null, + "name": "Crude wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8496" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Crude wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8497" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "53", + "examine": "A ready-to-assemble wooden chair.", + "durability": null, + "name": "Wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8498" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "53", + "durability": null, + "name": "Wooden chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8499" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble rocking chair.", + "durability": null, + "name": "Rocking chair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8500" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Rocking chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8501" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "examine": "A ready-to-assemble oak chair.", + "durability": null, + "name": "Oak chair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8502" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Oak chair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8503" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak armchair.", + "durability": null, + "name": "Oak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8504" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8505" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble teak armchair.", + "durability": null, + "name": "Teak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8506" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Teak armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8507" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "examine": "A ready-to-assemble mahogany armchair.", + "durability": null, + "name": "Mahogany armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8508" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Mahogany armchair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8509" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble wooden bookcase.", + "durability": null, + "name": "Wooden bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8510" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8511" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak bookcase.", + "durability": null, + "name": "Oak bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8512" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak bookcase", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8513" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "46", + "examine": "A ready-to-assemble mahogany bookcase.", + "durability": null, + "name": "Mahogany b'kcase", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8514" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "46", + "durability": null, + "name": "Mahogany b'kcase", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8515" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble beer barrel.", + "durability": null, + "name": "Beer barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8516" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Beer barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8517" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16900", + "examine": "A ready-to-assemble cider barrel.", + "durability": null, + "name": "Cider barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8518" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16900", + "durability": null, + "name": "Cider barrel", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8519" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Asgarnian Ale.", + "grand_exchange_price": "4586", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8520" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4586", + "durability": null, + "name": "Asgarnian ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8521" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Greenman's Ale.", + "grand_exchange_price": "8875", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8522" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8875", + "durability": null, + "name": "Greenman's ale", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8523" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Dragon Bitter.", + "grand_exchange_price": "10300", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8524" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10300", + "durability": null, + "name": "Dragon bitter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8525" + }, + { + "ge_buy_limit": "100", + "examine": "A ready-to-assemble barrel of Chef's Delight.", + "grand_exchange_price": "48800", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8526" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "48800", + "durability": null, + "name": "Chef's delight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8527" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble wooden kitchen table.", + "durability": null, + "name": "Wood kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8528" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Wood kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8529" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak kitchen table.", + "durability": null, + "name": "Oak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8530" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8531" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble teak kitchen table.", + "durability": null, + "name": "Teak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8532" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Teak kitchen table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8533" + }, + { + "durability": null, + "name": "Oak lectern", + "archery_ticket_price": "0", + "id": "8535" + }, + { + "durability": null, + "name": "Eagle lectern", + "archery_ticket_price": "0", + "id": "8537" + }, + { + "durability": null, + "name": "Demon lectern", + "archery_ticket_price": "0", + "id": "8539" + }, + { + "durability": null, + "name": "Teak eagle lectern", + "archery_ticket_price": "0", + "id": "8541" + }, + { + "durability": null, + "name": "Teak demon lectern", + "archery_ticket_price": "0", + "id": "8543" + }, + { + "durability": null, + "name": "Mahogany eagle", + "archery_ticket_price": "0", + "id": "8545" + }, + { + "durability": null, + "name": "Mahogany demon", + "archery_ticket_price": "0", + "id": "8547" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble wooden dining table.", + "durability": null, + "name": "Wood dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8548" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Wood dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8549" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak dining table.", + "durability": null, + "name": "Oak dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8550" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak dining table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8551" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble carved oak dining table.", + "durability": null, + "name": "Carved oak table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8552" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8553" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "examine": "A ready-to-assemble teak dining table.", + "durability": null, + "name": "Teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8554" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8555" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "245", + "examine": "A ready-to-assemble carved teak dining table.", + "durability": null, + "name": "Carved teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8556" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "245", + "durability": null, + "name": "Carved teak table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8557" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "575", + "examine": "A ready-to-assemble mahogany dining table.", + "durability": null, + "name": "Mahogany table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8558" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "575", + "durability": null, + "name": "Mahogany table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8559" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "379100", + "examine": "A ready-to-assemble opulent dining table.", + "durability": null, + "name": "Opulent table", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8560" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "379100", + "durability": null, + "name": "Opulent table", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8561" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "examine": "A ready-to-assemble wooden dining bench.", + "durability": null, + "name": "Wooden bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8562" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "durability": null, + "name": "Wooden bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8563" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137", + "examine": "A ready-to-assemble oak dining bench.", + "durability": null, + "name": "Oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8564" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137", + "durability": null, + "name": "Oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8565" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble carved oak dining bench.", + "durability": null, + "name": "Carved oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8566" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8567" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "examine": "A ready-to-assemble teak dining bench.", + "durability": null, + "name": "Teak dining bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8568" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18", + "durability": null, + "name": "Teak dining bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8569" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "examine": "A ready-to-assemble carved teak dining bench.", + "durability": null, + "name": "Carved teak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8570" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Carved teak bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8571" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "126", + "examine": "A ready-to-assemble mahogany dining bench.", + "durability": null, + "name": "Mahogany bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8572" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "126", + "durability": null, + "name": "Mahogany bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8573" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "517600", + "examine": "A ready-to-assemble gilded mahogany dining bench.", + "durability": null, + "name": "Gilded bench", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8574" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "517600", + "durability": null, + "name": "Gilded bench", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8575" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1974", + "examine": "A ready-to-assemble wooden bed.", + "durability": null, + "name": "Wooden bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8576" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1974", + "durability": null, + "name": "Wooden bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8577" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1775", + "examine": "A ready-to-assemble oak bed.", + "durability": null, + "name": "Oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8578" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1775", + "durability": null, + "name": "Oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8579" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1433", + "examine": "A ready-to-assemble large oak bed.", + "durability": null, + "name": "Large oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8580" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1433", + "durability": null, + "name": "Large oak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8581" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1442", + "examine": "A ready-to-assemble teak bed.", + "durability": null, + "name": "Teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8582" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1442", + "durability": null, + "name": "Teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8583" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2030", + "examine": "A ready-to-assemble large teak bed.", + "durability": null, + "name": "Large teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8584" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2030", + "durability": null, + "name": "Large teak bed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8585" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1401", + "examine": "A ready-to-assemble four-poster bed.", + "durability": null, + "name": "4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8586" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1401", + "durability": null, + "name": "4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8587" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "286700", + "examine": "A ready-to-assemble gilded four-poster bed.", + "durability": null, + "name": "Gilded 4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8588" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "286700", + "durability": null, + "name": "Gilded 4-poster", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8589" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "examine": "A ready-to-assemble oak clock.", + "durability": null, + "name": "Oak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8590" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "384", + "durability": null, + "name": "Oak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8591" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "595", + "examine": "A ready-to-assemble teak clock.", + "durability": null, + "name": "Teak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8592" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "595", + "durability": null, + "name": "Teak clock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8593" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156100", + "examine": "A ready-to-assemble gilded mahogany clock.", + "durability": null, + "name": "Gilded clock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8594" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156100", + "durability": null, + "name": "Gilded clock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8595" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "510", + "examine": "A ready-to-assemble shaving stand.", + "durability": null, + "name": "Shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8596" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "510", + "durability": null, + "name": "Shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8597" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "examine": "A ready-to-assemble oak shaving stand.", + "durability": null, + "name": "Oak shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8598" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "durability": null, + "name": "Oak shaving stand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8599" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "examine": "A ready-to-assemble oak dresser.", + "durability": null, + "name": "Oak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8600" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Oak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8601" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "478", + "examine": "A ready-to-assemble teak dresser.", + "durability": null, + "name": "Teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8602" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "478", + "durability": null, + "name": "Teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8603" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "examine": "A ready-to-assemble fancy teak dresser.", + "durability": null, + "name": "Fancy teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8604" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "455", + "durability": null, + "name": "Fancy teak dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8605" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "399", + "examine": "A ready-to-assemble mahogany dresser.", + "durability": null, + "name": "Mahogany dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8606" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "399", + "durability": null, + "name": "Mahogany dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8607" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "138800", + "examine": "A ready-to-assemble gilded dresser.", + "durability": null, + "name": "Gilded dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8608" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "138800", + "durability": null, + "name": "Gilded dresser", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8609" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "examine": "A ready-to-assemble shoe box.", + "durability": null, + "name": "Shoe box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8610" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21", + "durability": null, + "name": "Shoe box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8611" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47", + "examine": "A ready-to-assemble oak chest of drawers.", + "durability": null, + "name": "Oak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8612" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "47", + "durability": null, + "name": "Oak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8613" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak bedroom wardrobe.", + "durability": null, + "name": "Oak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8614" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8615" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "132", + "examine": "A ready-to-assemble teak chest of drawers.", + "durability": null, + "name": "Teak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8616" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "132", + "durability": null, + "name": "Teak drawers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8617" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "examine": "A ready-to-assemble teak bedroom wardrobe.", + "durability": null, + "name": "Teak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8618" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "13", + "durability": null, + "name": "Teak wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8619" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98", + "examine": "A ready-to-assemble mahogany bedroom wardrobe.", + "durability": null, + "name": "Mahogany 'drobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8620" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "98", + "durability": null, + "name": "Mahogany 'drobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8621" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137700", + "examine": "A ready-to-assemble gilded mahogany bedroom wardrobe.", + "durability": null, + "name": "Gilded wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "8622" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137700", + "durability": null, + "name": "Gilded wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8623" + }, + { + "durability": null, + "name": "Crystal ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8625" + }, + { + "durability": null, + "name": "Elemental sphere", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8627" + }, + { + "durability": null, + "name": "Crystal of power", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8629" + }, + { + "durability": null, + "name": "Globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8631" + }, + { + "durability": null, + "name": "Ornamental globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8633" + }, + { + "durability": null, + "name": "Lunar globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8635" + }, + { + "durability": null, + "name": "Celestial globe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8637" + }, + { + "durability": null, + "name": "Armillary sphere", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8639" + }, + { + "durability": null, + "name": "Small orrery", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8641" + }, + { + "durability": null, + "name": "Large orrery", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8643" + }, + { + "durability": null, + "name": "Wooden telescope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8645" + }, + { + "durability": null, + "name": "Teak telescope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8647" + }, + { + "durability": null, + "name": "Mahogany 'scope", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8649" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8650", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8652", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8654", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8656", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8658", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8660", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8662", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8664", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8666", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8668", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8670", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8672", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8674", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8676", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8678", + "stand_turn_anim": "1426" + }, + { + "turn90cw_anim": "1424", + "walk_anim": "1422", + "durability": null, + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Banner", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8680", + "stand_turn_anim": "1426" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8682", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8684", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8686", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8688", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8690", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8692", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8694", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8696", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8698", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8700", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8702", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8704", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8706", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8708", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8710", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "The colours represent crest.", + "durability": null, + "name": "Steel heraldic helm", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "8712", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8714", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8716", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8718", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8720", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8722", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8724", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8726", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8728", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8730", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8732", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8734", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8736", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8738", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8740", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8742", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "lendable": "true", + "examine": "A large metal shield.", + "grand_exchange_price": "32583", + "durability": null, + "name": "Rune kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8744", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8746", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8748", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8750", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8752", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8754", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8756", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8758", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8760", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8762", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8764", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8766", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8768", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8770", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8772", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8774", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "850", + "examine": "A large metal shield.", + "grand_exchange_price": "346", + "durability": null, + "name": "Steel kiteshield", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "8776", + "bonuses": "0,0,0,-8,-2,13,15,14,-1,14,5,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "10000", + "examine": "A plank of sturdy oak.", + "grand_exchange_price": "660", + "durability": null, + "name": "Oak plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "8778" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "660", + "durability": null, + "name": "Oak plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8779" + }, + { + "shop_price": "500", + "ge_buy_limit": "10000", + "examine": "A plank of fine teak.", + "grand_exchange_price": "959", + "durability": null, + "name": "Teak plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "8780" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "959", + "durability": null, + "name": "Teak plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8781" + }, + { + "shop_price": "1500", + "ge_buy_limit": "10000", + "examine": "A plank of expensive mahogany.", + "grand_exchange_price": "2286", + "durability": null, + "name": "Mahogany plank", + "tradeable": "true", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "8782" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "2286", + "durability": null, + "name": "Mahogany plank", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8783" + }, + { + "shop_price": "130000", + "ge_buy_limit": "100", + "examine": "A very delicate sheet of gold.", + "grand_exchange_price": "133800", + "durability": null, + "name": "Gold leaf", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8784" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "133800", + "durability": null, + "name": "Gold leaf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8785" + }, + { + "shop_price": "325000", + "ge_buy_limit": "100", + "examine": "A beautifully carved marble block.", + "grand_exchange_price": "324800", + "durability": null, + "name": "Marble block", + "tradeable": "true", + "weight": "13.6", + "archery_ticket_price": "0", + "id": "8786" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "324800", + "durability": null, + "name": "Marble block", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8787" + }, + { + "shop_price": "975000", + "ge_buy_limit": "100", + "examine": "A magic stone to make high-level furniture.", + "grand_exchange_price": "980300", + "durability": null, + "name": "Magic stone", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8788" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "980300", + "durability": null, + "name": "Magic stone", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8789" + }, + { + "shop_price": "650", + "ge_buy_limit": "100", + "examine": "A bolt of ordinary cloth.", + "grand_exchange_price": "1090", + "durability": null, + "name": "Bolt of cloth", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8790" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1090", + "durability": null, + "name": "Bolt of cloth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8791" + }, + { + "ge_buy_limit": "5000", + "examine": "A clockwork mechanism.", + "grand_exchange_price": "1630", + "durability": null, + "name": "Clockwork", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8792" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1630", + "durability": null, + "name": "Clockwork", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8793" + }, + { + "shop_price": "13", + "ge_buy_limit": "100", + "examine": "Good for cutting wood.", + "grand_exchange_price": "64", + "durability": null, + "name": "Saw", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8794", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "64", + "durability": null, + "name": "Saw", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8795" + }, + { + "durability": null, + "name": "Mahogany logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8836" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "A hefty beam of timber, perfect for building temples.", + "grand_exchange_price": "29", + "durability": null, + "name": "Timber beam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8837" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "29", + "durability": null, + "name": "Timber beam", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8838" + }, + { + "remove_sleeves": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "Torso armour from the order of the Void Knights.", + "durability": null, + "name": "Void knight top", + "tradeable": "false", + "weight": "6.5", + "archery_ticket_price": "0", + "id": "8839", + "bonuses": "0,0,0,0,0,45,45,45,45,45,45,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "Leg armour of the order of the Void Knights.", + "durability": null, + "name": "Void knight robe", + "tradeable": "false", + "weight": "8", + "archery_ticket_price": "0", + "id": "8840", + "bonuses": "0,0,0,0,0,30,30,30,30,30,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "A mace used by the order of the Void Knights.", + "durability": null, + "weight": "1", + "attack_speed": "5", + "weapon_interface": "1", + "render_anim": "2553", + "equipment_slot": "3", + "attack_anims": "401,401,401,401", + "name": "Void knight mace", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "8841", + "bonuses": "22,0,41,8,0,2,2,2,2,2,0,38,6,0,0" + }, + { + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "150", + "examine": "Gloves as used by the order of the Void Knights.", + "durability": null, + "name": "Void knight gloves", + "tradeable": "false", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "8842", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "A defensive weapon.", + "durability": null, + "name": "Bronze defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8844", + "bonuses": "3,2,1,-3,-2,3,2,1,-3,-2,1,0,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "examine": "A defensive weapon.", + "durability": null, + "name": "Iron defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8845", + "bonuses": "5,4,3,-3,-2,5,4,3,-3,-2,2,0,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,5}-{1,5}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Steel defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8846", + "bonuses": "7,6,5,-3,-2,7,6,5,-3,-2,3,1,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,10}-{1,10}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Black defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8847", + "bonuses": "9,8,7,-3,-2,9,8,7,-3,-2,4,2,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,20}-{1,20}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Mithril defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8848", + "bonuses": "10,9,8,-3,-2,10,9,8,-3,-2,5,3,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,30}-{1,30}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Adamant defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8849", + "bonuses": "13,12,11,-3,-2,13,12,11,-3,-2,6,4,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "requirements": "{0,40}-{1,40}", + "examine": "A defensive weapon.", + "durability": null, + "name": "Rune defender", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "8850", + "bonuses": "20,19,18,-3,-2,20,19,18,-3,-2,8,5,0,0,0", + "defence_anim": "4177", + "equipment_slot": "5" + }, + { + "examine": "Warrior Guild Token.", + "durability": null, + "name": "Warrior guild token", + "archery_ticket_price": "0", + "id": "8851" + }, + { + "examine": "Large, round, heavy shield.", + "durability": null, + "name": "Defensive shield", + "weight": "3.6", + "archery_ticket_price": "0", + "two_handed": "false", + "id": "8856", + "bonuses": "0,0,0,-6,-2,8,9,7,0,8,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Just landed 18lb shot.", + "durability": null, + "name": "18lb shot", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8858" + }, + { + "examine": "Just landed 22lb shot.", + "durability": null, + "name": "22lb shot", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8859" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "One barrel", + "destroy": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "8860", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Two barrels", + "destroy": "true", + "weight": "9", + "archery_ticket_price": "0", + "id": "8861", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Three barrels", + "destroy": "true", + "weight": "13.5", + "archery_ticket_price": "0", + "id": "8862", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Four barrels", + "destroy": "true", + "weight": "18.1", + "archery_ticket_price": "0", + "id": "8863", + "equipment_slot": "0" + }, + { + "examine": "To put on your head.", + "durability": null, + "name": "Five barrels", + "destroy": "true", + "weight": "22.6", + "archery_ticket_price": "0", + "id": "8864", + "equipment_slot": "0" + }, + { + "examine": "A heap of finely ground ashes.", + "durability": null, + "name": "Ground ashes", + "archery_ticket_price": "0", + "id": "8865" + }, + { + "examine": "A key made of solid iron.", + "durability": null, + "name": "Iron key", + "archery_ticket_price": "0", + "id": "8869" + }, + { + "examine": "See article", + "durability": null, + "name": "Zanik", + "archery_ticket_price": "0", + "id": "8870" + }, + { + "turn90cw_anim": "4194", + "examine": "It's got Zanik in it.", + "walk_anim": "4194", + "durability": null, + "destroy": "true", + "weight": "32", + "turn90ccw_anim": "4194", + "turn180_anim": "4194", + "render_anim": "822", + "equipment_slot": "3", + "stand_anim": "4193", + "name": "Crate with zanik", + "tradeable": "false", + "run_anim": "4194", + "archery_ticket_price": "0", + "id": "8871", + "stand_turn_anim": "4194" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "2855", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8872", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2855", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8873" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "3033", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8874", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3033", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8875" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "3523", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger (p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8876", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3523", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger (p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8877" + }, + { + "shop_price": "2000", + "ge_buy_limit": "100", + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "400,400,400,400", + "grand_exchange_price": "8337", + "attack_audios": "2517,2517,2500,2517", + "name": "Bone dagger (p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8878", + "bonuses": "5,3,-4,1,0,0,0,0,1,0,0,4,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8337", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bone dagger (p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8879" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "This fires crossbow bolts.", + "walk_anim": "4226", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "1159", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "8880", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,42,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,28}", + "shop_price": "2000", + "durability": null, + "weight": "2.2", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Dorgeshuun c'bow" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1159", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dorgeshuun c'bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8881" + }, + { + "requirements": "{4,28}", + "shop_price": "4", + "ge_buy_limit": "10000", + "examine": "Good if you have a bone crossbow!", + "grand_exchange_price": "12", + "durability": null, + "name": "Bone bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8882", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "examine": "See article", + "durability": null, + "name": "Zanik", + "archery_ticket_price": "0", + "id": "8887" + }, + { + "bankable": "false", + "examine": "Lovely money!", + "durability": null, + "name": "Coins", + "archery_ticket_price": "0", + "id": "8890" + }, + { + "examine": "A horrible, emaciated ape like creature with beady red eyes.", + "durability": null, + "name": "Cave horror", + "archery_ticket_price": "0", + "id": "8900" + }, + { + "requirements": "{1,20}-{2,10}", + "ge_buy_limit": "10", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "989400", + "durability": null, + "name": "Black mask (10)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8901", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "989400", + "durability": null, + "name": "Black mask (10)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8902" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (9)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8903", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (9)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8904" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (8)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8905", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8906" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (7)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8907", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8908" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (6)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8909", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8910" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (5)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8911", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8912" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (4)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8913", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8914" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (3)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8915", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8916" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (2)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8917", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8918" + }, + { + "requirements": "{1,20}-{2,10}", + "examine": "A magic cave horror mask.", + "grand_exchange_price": "583700", + "durability": null, + "name": "Black mask (1)", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8919", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Black mask (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8920" + }, + { + "requirements": "{1,20}-{2,10}", + "ge_buy_limit": "10", + "examine": "An inert-seeming cave horror mask.", + "grand_exchange_price": "956100", + "durability": null, + "name": "Black mask", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "8921", + "bonuses": "0,0,0,-3,-1,9,10,8,-1,9,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "956100", + "durability": null, + "name": "Black mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8922" + }, + { + "requirements": "{18,35}", + "shop_price": "900", + "examine": "A stick on a string... pure style.", + "durability": null, + "name": "Witchwood icon", + "archery_ticket_price": "0", + "id": "8923", + "bonuses": "0,0,0,1,0,0,0,0,0,0,0,0,1,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "examine": "A white bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8924", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A red bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8925", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A blue bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8926", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A brown bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8927", + "equipment_slot": "0" + }, + { + "examine": "A pirate hat and a patch for the right eye.", + "durability": null, + "name": "Hat and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8928", + "equipment_slot": "0" + }, + { + "shop_price": "800", + "examine": "Tied together so they don't come apart.", + "durability": null, + "name": "Crabclaw and hook", + "weight": "1", + "archery_ticket_price": "0", + "id": "8929", + "bonuses": "0,0,0,0,0,3,5,3,0,0,0,1,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Crude wooden pipe section.", + "durability": null, + "name": "Pipe section", + "weight": "1", + "archery_ticket_price": "0", + "id": "8930" + }, + { + "durability": null, + "name": "Pipe section", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8931" + }, + { + "examine": "Repairs made with this will be patchy at best.", + "durability": null, + "name": "Lumber patch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8932" + }, + { + "durability": null, + "name": "Lumber patch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8933" + }, + { + "examine": "Slimy logs from the scrapey tree.", + "durability": null, + "name": "Scrapey tree logs", + "archery_ticket_price": "0", + "id": "8934" + }, + { + "durability": null, + "name": "Scrapey tree logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8935" + }, + { + "examine": "Very blue.", + "durability": null, + "name": "Blue flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8936" + }, + { + "durability": null, + "name": "Blue flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8937" + }, + { + "examine": "Very red.", + "durability": null, + "name": "Red flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8938" + }, + { + "durability": null, + "name": "Red flowers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8939" + }, + { + "examine": "Bluuuuuuuue Monkeeeeeeey!", + "durability": null, + "name": "Blue monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8943" + }, + { + "examine": "Bluuuuuuuue Monkeeeeeeey!", + "durability": null, + "name": "Blue monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8944" + }, + { + "examine": "Bluuuuuuuue Monkeeeeeeey!", + "durability": null, + "name": "Blue monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8945" + }, + { + "examine": "A well red monkey.", + "durability": null, + "name": "Red monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8946" + }, + { + "examine": "A well red monkey.", + "durability": null, + "name": "Red monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8947" + }, + { + "examine": "A well red monkey.", + "durability": null, + "name": "Red monkey", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8948" + }, + { + "remove_head": "true", + "examine": "Essential pirate wear.", + "durability": null, + "name": "Pirate bandana", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "8949", + "equipment_slot": "0" + }, + { + "examine": "Shiver me timbers!", + "grand_exchange_price": "83200", + "durability": null, + "name": "Pirate hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8950", + "equipment_slot": "0" + }, + { + "examine": "Piratical currency.", + "durability": null, + "name": "Pieces of eight", + "archery_ticket_price": "0", + "id": "8951" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Blue naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8952", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Green naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8953", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Red naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8954", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Brown naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8955", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Black naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8956", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Purple naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8957", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Grey naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "8958", + "equipment_slot": "4" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Blue tricorn hat", + "archery_ticket_price": "0", + "id": "8959", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Green tricorn hat", + "archery_ticket_price": "0", + "id": "8960", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Red tricorn hat", + "archery_ticket_price": "0", + "id": "8961", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Brown tricorn hat", + "archery_ticket_price": "0", + "id": "8962", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Black tricorn hat", + "archery_ticket_price": "0", + "id": "8963", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Purple tricorn hat", + "archery_ticket_price": "0", + "id": "8964", + "equipment_slot": "0" + }, + { + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Grey tricorn hat", + "archery_ticket_price": "0", + "id": "8965", + "equipment_slot": "0" + }, + { + "shop_price": "200", + "turn90cw_anim": "1424", + "examine": "The flag of The Cutthroat.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Cutthroat flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8966", + "stand_turn_anim": "1426" + }, + { + "shop_price": "200", + "turn90cw_anim": "1424", + "examine": "The flag of The Guilded Smile.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "attack_speed": "2", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Guilded smile flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8967", + "stand_turn_anim": "1426" + }, + { + "shop_price": "300", + "turn90cw_anim": "1424", + "examine": "The flag of The Bronze Fist.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Bronze fist flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8968", + "stand_turn_anim": "1426" + }, + { + "shop_price": "400", + "turn90cw_anim": "1424", + "examine": "The flag of The Lucky Shot.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Lucky shot flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8969", + "stand_turn_anim": "1426" + }, + { + "shop_price": "500", + "turn90cw_anim": "1424", + "examine": "The flag of The Treasure Trove.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Treasure flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8970", + "stand_turn_anim": "1426" + }, + { + "shop_price": "600", + "turn90cw_anim": "1424", + "examine": "The flag of The Phasmatys Pride.", + "walk_anim": "1422", + "durability": null, + "weight": "6", + "turn90ccw_anim": "1425", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "1423", + "render_anim": "131", + "equipment_slot": "3", + "stand_anim": "1421", + "name": "Phasmatys flag", + "run_anim": "1427", + "archery_ticket_price": "0", + "id": "8971", + "stand_turn_anim": "1426" + }, + { + "examine": "A Bowl of red water.", + "durability": null, + "name": "Bowl of red water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8972" + }, + { + "durability": null, + "name": "Bowl of red water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8973" + }, + { + "examine": "A Bowl of blue water.", + "durability": null, + "name": "Bowl of blue water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8974" + }, + { + "durability": null, + "name": "Bowl of blue water", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8975" + }, + { + "examine": "Monkeys seem to like throwing these.", + "durability": null, + "name": "Bitternut", + "archery_ticket_price": "0", + "id": "8976" + }, + { + "examine": "Greasy bark from the scrapey tree.", + "durability": null, + "name": "Scrapey bark", + "weight": "1.1", + "archery_ticket_price": "0", + "id": "8977" + }, + { + "durability": null, + "name": "Scrapey bark", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8978" + }, + { + "examine": "Caution; not for use over troubled water.", + "durability": null, + "name": "Bridge section", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8979" + }, + { + "durability": null, + "name": "Bridge section", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8980" + }, + { + "examine": "Better than sea slugs.", + "durability": null, + "name": "Sweetgrubs", + "archery_ticket_price": "0", + "id": "8981" + }, + { + "durability": null, + "name": "Sweetgrubs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8982" + }, + { + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "8986" + }, + { + "durability": null, + "name": "Torch", + "archery_ticket_price": "0", + "id": "8987", + "equipment_slot": "3" + }, + { + "shop_price": "5", + "examine": "Apparently good for brewing.", + "durability": null, + "name": "The stuff", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "8988" + }, + { + "examine": "A how-to of brewing and arson.", + "durability": null, + "name": "Brewin' guide", + "archery_ticket_price": "0", + "id": "8989" + }, + { + "examine": "A how-to of brewing and arson.", + "durability": null, + "name": "Brewin' guide", + "archery_ticket_price": "0", + "id": "8990" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Blue navy slacks", + "archery_ticket_price": "0", + "id": "8991", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Green navy slacks", + "archery_ticket_price": "0", + "id": "8992", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Red navy slacks", + "archery_ticket_price": "0", + "id": "8993", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Brown navy slacks", + "archery_ticket_price": "0", + "id": "8994", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Black navy slacks", + "archery_ticket_price": "0", + "id": "8995", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Purple navy slacks", + "archery_ticket_price": "0", + "id": "8996", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Grey navy slacks", + "archery_ticket_price": "0", + "id": "8997", + "equipment_slot": "7" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8998" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "8999" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9000" + }, + { + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9001" + }, + { + "durability": null, + "name": "Hat and eyepatch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9002" + }, + { + "shop_price": "2", + "ge_buy_limit": "100", + "examine": "WARNING: Contains information which could make your account secure!", + "grand_exchange_price": "100", + "durability": null, + "name": "Security book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9003" + }, + { + "ge_buy_limit": "100", + "examine": "Information regarding the Stronghold of Security.", + "grand_exchange_price": "16", + "durability": null, + "name": "Stronghold notes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9004" + }, + { + "destroy_message": "You can get another pair of Fancy Boots from the Stronghold of Security", + "examine": "Very nice boots from the Stronghold of Security.", + "durability": null, + "name": "Fancy boots", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9005", + "bonuses": "0,0,0,-3,-1,1,2,3,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You can get another pair of Fighting Boots from the Stronghold of Security.", + "examine": "Very nice boots from the Stronghold of Security.", + "durability": null, + "name": "Fighting boots", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9006", + "bonuses": "0,0,0,-3,-1,1,2,3,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Ooooh spooky!", + "durability": null, + "name": "Right skull half", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "9007" + }, + { + "examine": "Ooooh spooky!", + "durability": null, + "name": "Left skull half", + "tradeable": "false", + "destroy": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "9008" + }, + { + "examine": "Seems to be for use with a staff or sceptre of some sort.", + "durability": null, + "name": "Strange skull", + "tradeable": "false", + "weight": "1.2", + "archery_ticket_price": "0", + "id": "9009" + }, + { + "examine": "Top half of a broken sceptre.", + "durability": null, + "name": "Top of sceptre", + "tradeable": "false", + "weight": "2", + "archery_ticket_price": "0", + "id": "9010" + }, + { + "examine": "Bottom half of a broken sceptre.", + "durability": null, + "name": "Bottom of sceptre", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "9011" + }, + { + "examine": "Sceptre with runes on it, seems to be missing something.", + "durability": null, + "name": "Runed sceptre", + "tradeable": "false", + "weight": "3.5", + "archery_ticket_price": "0", + "id": "9012" + }, + { + "turn90cw_anim": "1207", + "examine": "A fragile magical Sceptre.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can obtain another Sceptre by collecting all four pieces from the Stronghold of Security.", + "stand_anim": "813", + "name": "Skull sceptre", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9013", + "stand_turn_anim": "1209", + "bonuses": "0,-1,7,4,0,2,3,1,4,0,0,3,0,0,0" + }, + { + "durability": null, + "name": "Security book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9014" + }, + { + "durability": null, + "name": "Stronghold notes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9015" + }, + { + "examine": "Oversized nail clippings.", + "durability": null, + "name": "Gorak claws", + "archery_ticket_price": "0", + "id": "9016" + }, + { + "examine": "A flower with magical properties.", + "durability": null, + "name": "Star flower", + "archery_ticket_price": "0", + "id": "9017" + }, + { + "examine": "Ground-down gorak claws.", + "durability": null, + "name": "Gorak claw powder", + "weight": "1", + "archery_ticket_price": "0", + "id": "9018" + }, + { + "examine": "Contains the Fairy Queen's magical essence.", + "durability": null, + "name": "Queen's secateurs", + "archery_ticket_price": "0", + "id": "9020", + "equipment_slot": "3" + }, + { + "destroy_message": "Maybe I can find another in Fairy Nuff's grotto.", + "examine": "A scroll that says she's a healer, that's Fairy Nuff.", + "durability": null, + "name": "Nuff's certificate", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9025" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Pyramid will give me 50 coins for this.", + "grand_exchange_price": "187", + "durability": null, + "name": "Ivory comb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9026" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "187", + "durability": null, + "name": "Ivory comb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9027" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Pyramid will give me 1000 coins for this.", + "grand_exchange_price": "513", + "durability": null, + "name": "Golden scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9028" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "513", + "durability": null, + "name": "Golden scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9029" + }, + { + "ge_buy_limit": "100", + "examine": "Little ornament in the shape of a scarab.", + "grand_exchange_price": "168", + "durability": null, + "name": "Stone scarab", + "tradeable": "true", + "weight": "0.07", + "archery_ticket_price": "0", + "id": "9030" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "168", + "durability": null, + "name": "Stone scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9031" + }, + { + "ge_buy_limit": "100", + "examine": "A small pottery scarab.", + "grand_exchange_price": "74", + "durability": null, + "name": "Pottery scarab", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9032" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "74", + "durability": null, + "name": "Pottery scarab", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9033" + }, + { + "ge_buy_limit": "100", + "examine": "A small golden statuette.", + "grand_exchange_price": "740", + "durability": null, + "name": "Golden statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9034" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "740", + "durability": null, + "name": "Golden statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9035" + }, + { + "ge_buy_limit": "100", + "examine": "A small pottery statuette.", + "grand_exchange_price": "97", + "durability": null, + "name": "Pottery statuette", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9036" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "97", + "durability": null, + "name": "Pottery statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9037" + }, + { + "ge_buy_limit": "100", + "examine": "A small stone statuette.", + "grand_exchange_price": "193", + "durability": null, + "name": "Stone statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9038" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "193", + "durability": null, + "name": "Stone statuette", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9039" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Arena will give me 750 coins for this.", + "grand_exchange_price": "379", + "durability": null, + "name": "Gold seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9040" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "379", + "durability": null, + "name": "Gold seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9041" + }, + { + "ge_buy_limit": "100", + "examine": "Simon Templeton at the Agility Pyramid will give me 150 coins for this.", + "grand_exchange_price": "147", + "durability": null, + "name": "Stone seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9042" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "147", + "durability": null, + "name": "Stone seal", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9043" + }, + { + "requirements": "{0,30}-{6,30}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "This sceptre is fully charged.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1000000", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9044", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9045" + }, + { + "requirements": "{0,30}-{6,30}", + "turn90cw_anim": "1207", + "examine": "This sceptre has two charges left.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "27", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9046", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9047" + }, + { + "requirements": "{0,30}-{6,30}", + "turn90cw_anim": "1207", + "examine": "This sceptre has one charge left.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "27", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9048", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9049" + }, + { + "requirements": "{0,30}-{6,30}", + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "This sceptre has no charges left.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "3", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "985800", + "stand_anim": "813", + "tradeable": "true", + "name": "Pharaoh's sceptre", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9050", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "985800", + "durability": null, + "name": "Pharaoh's sceptre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9051" + }, + { + "ge_buy_limit": "1000", + "examine": "Delicious and nutritious. Well, nutritious anyway.", + "grand_exchange_price": "68", + "durability": null, + "name": "Locust meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9052" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "68", + "durability": null, + "name": "Locust meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9053" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Red goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9054", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Black goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9055", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Yellow goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9056", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Green goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9057", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Purple goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9058", + "equipment_slot": "4" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "Pink goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "9059", + "equipment_slot": "4" + }, + { + "examine": "A mystical lantern casting a green beam.", + "durability": null, + "name": "Emerald lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "9064" + }, + { + "examine": "A mystical lantern casting a green beam.", + "durability": null, + "name": "Emerald lantern", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "9065", + "equipment_slot": "5" + }, + { + "examine": "A roughly circular disc of glass.", + "durability": null, + "name": "Emerald lens", + "archery_ticket_price": "0", + "id": "9066" + }, + { + "examine": "A log of my thoughts...", + "durability": null, + "name": "Dream log", + "weight": "1", + "archery_ticket_price": "0", + "id": "9067" + }, + { + "shop_price": "1000", + "examine": "Mystical headgear.", + "durability": null, + "name": "Moonclan helm", + "archery_ticket_price": "0", + "id": "9068", + "bonuses": "0,0,0,3,-5,3,3,3,3,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "1000", + "examine": "A mystical hat.", + "durability": null, + "name": "Moonclan hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "9069", + "bonuses": "0,0,0,3,-5,3,3,3,3,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "shop_price": "1000", + "examine": "Provides good protection.", + "durability": null, + "name": "Moonclan armour", + "weight": "4", + "archery_ticket_price": "0", + "id": "9070", + "bonuses": "0,0,0,5,-10,5,5,5,5,-10,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "1000", + "examine": "This should protect my legs.", + "durability": null, + "name": "Moonclan skirt", + "weight": "3", + "archery_ticket_price": "0", + "id": "9071", + "bonuses": "0,0,0,5,-7,5,5,5,5,-7,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "900", + "examine": "These should keep my hands safe.", + "durability": null, + "name": "Moonclan gloves", + "archery_ticket_price": "0", + "id": "9072", + "bonuses": "0,0,0,2,-5,2,2,2,2,-5,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "900", + "examine": "Groovy foot protection.", + "durability": null, + "name": "Moonclan boots", + "archery_ticket_price": "0", + "id": "9073", + "bonuses": "0,0,0,2,-5,2,2,2,2,-5,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "200", + "examine": "A mystical cape.", + "durability": null, + "name": "Moonclan cape", + "archery_ticket_price": "0", + "id": "9074", + "bonuses": "0,0,0,2,-2,0,1,1,2,-2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "220", + "ge_buy_limit": "25000", + "examine": "Used for Lunar Spells", + "grand_exchange_price": "231", + "durability": null, + "name": "Astral rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9075" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This needs refining", + "durability": null, + "name": "Lunar ore", + "weight": "7", + "archery_ticket_price": "0", + "id": "9076" + }, + { + "destroy_message": "You'll have to mine another lunar ore and smelt it.", + "examine": "It's a bar of magic metal.", + "durability": null, + "name": "Lunar bar", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9077" + }, + { + "examine": "A book of Moonclan history.", + "durability": null, + "name": "Moonclan manual", + "weight": "1", + "archery_ticket_price": "0", + "id": "9078" + }, + { + "examine": "The tooth, the whole tooth, and nothing but the tooth.", + "durability": null, + "name": "Suqah tooth", + "archery_ticket_price": "0", + "id": "9079" + }, + { + "examine": "An untanned piece of suqah hide.", + "durability": null, + "name": "Suqah hide", + "archery_ticket_price": "0", + "id": "9080" + }, + { + "examine": "A piece of Suqah hide that has been expertly tanned into leather.", + "durability": null, + "name": "Suqah leather", + "weight": "3", + "archery_ticket_price": "0", + "id": "9081" + }, + { + "examine": "A ground Suqah tooth.", + "durability": null, + "name": "Ground tooth", + "archery_ticket_price": "0", + "id": "9082" + }, + { + "destroy_message": "Brundt the Chieftain will probably have another lying around somewhere anyway...", + "examine": "A seal of passage issued by Brundt the Chieftain of the Fremennik.", + "durability": null, + "name": "Seal of passage", + "tradeable": "false", + "destroy": "true", + "weight": "4.5", + "archery_ticket_price": "0", + "id": "9083", + "equipment_slot": "2" + }, + { + "requirements": "{6,65}", + "shop_price": "30000", + "turn90cw_anim": "1207", + "examine": "A Moonclan staff.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9084", + "stand_turn_anim": "1209", + "bonuses": "3,2,16,13,0,2,3,2,13,1,0,15,3,0,0" + }, + { + "destroy_message": "You'll have to get another from the Oneiromancer.", + "examine": "A vessel for holding liquid.", + "durability": null, + "name": "Empty vial", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9085" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "10", + "examine": "A glass vial containing water.", + "grand_exchange_price": "21", + "durability": null, + "name": "Vial of water", + "tradeable": "true", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "9086" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel for dreaming while awake!", + "durability": null, + "name": "Waking sleep vial", + "archery_ticket_price": "0", + "id": "9087" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel with water and Guam inside.", + "durability": null, + "name": "Guam vial", + "archery_ticket_price": "0", + "id": "9088" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel with water and Marrentill inside.", + "durability": null, + "name": "Marr vial", + "archery_ticket_price": "0", + "id": "9089" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A vessel with water, guam and marrentill inside.", + "durability": null, + "name": "Guam-marr vial", + "archery_ticket_price": "0", + "id": "9090" + }, + { + "requirements": "{6,65}", + "turn90cw_anim": "1207", + "examine": "A staff enchanted by air.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff - pt1", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9091", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "requirements": "{6,65}", + "turn90cw_anim": "1207", + "examine": "A staff enchanted by air and fire.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff - pt2", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9092", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "requirements": "{6,65}", + "turn90cw_anim": "1207", + "examine": "A staff enchanted by air, fire and water.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "1", + "turn90ccw_anim": "1208", + "weapon_interface": "1", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "name": "Lunar staff - pt3", + "tradeable": "false", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "9093", + "stand_turn_anim": "1209", + "bonuses": "-1,-1,10,10,0,2,3,1,10,0,0,10,0,0,0" + }, + { + "examine": "Small bits of wood from the first magic tree!", + "durability": null, + "name": "Kindling", + "archery_ticket_price": "0", + "id": "9094" + }, + { + "examine": "Magic wood soaked with a potion of waking sleep. Groovy.", + "durability": null, + "name": "Soaked kindling", + "archery_ticket_price": "0", + "id": "9095" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{6,65}", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9096", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,7,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "120000", + "examine": "Provides good protection.", + "durability": null, + "destroy": "true", + "weight": "4.5", + "absorb": "6,3,0", + "equipment_slot": "4", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "remove_sleeves": "true", + "name": "Lunar torso", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9097", + "bonuses": "0,0,0,10,-10,34,22,40,12,0,35,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "80000", + "examine": "These should protect my legs.", + "durability": null, + "destroy": "true", + "weight": "3.65", + "absorb": "4,2,0", + "equipment_slot": "7", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar legs", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9098", + "bonuses": "0,0,0,7,-7,20,19,23,9,0,20,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "10000", + "examine": "These should keep my hands safe.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "equipment_slot": "9", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar gloves", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9099", + "bonuses": "0,0,0,4,-1,2,1,1,2,0,1,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "10000", + "examine": "Mystical foot protection.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "equipment_slot": "10", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar boots", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9100", + "bonuses": "0,0,0,2,-1,1,2,2,2,0,2,0,0,0,0" + }, + { + "requirements": "{1,40}-{6,65}", + "shop_price": "12000", + "examine": "Oooo pretty!", + "durability": null, + "destroy": "true", + "weight": "0.4", + "equipment_slot": "1", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar cape", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9101", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0" + }, + { + "destroy_message": "The Oneiromancer might be able to help you get another.", + "requirements": "{1,40}-{6,65}", + "shop_price": "4000", + "examine": "Awesome.", + "durability": null, + "name": "Lunar amulet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9102", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "destroy_message": "The Oneiromancer might be able to help you get another.", + "examine": "I'll be the talk of the town with this... maybe.", + "durability": null, + "name": "A special tiara", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9103" + }, + { + "destroy_message": "The Oneiromancer might be able to help you get another.", + "requirements": "{1,40}-{6,65}", + "shop_price": "2000", + "examine": "A mysterious ring that can fill the wearer with magical power.", + "durability": null, + "name": "Lunar ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9104", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "durability": null, + "name": "Astral tiara", + "archery_ticket_price": "0", + "id": "9106", + "equipment_slot": "0" + }, + { + "requirements": "{4,16}", + "examine": "Blurite crossbow bolts.", + "durability": null, + "name": "Blurite bolts", + "archery_ticket_price": "0", + "id": "9139", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "41", + "durability": null, + "name": "Iron bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9140", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "shop_price": "150", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "90", + "durability": null, + "name": "Steel bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9141", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "108", + "durability": null, + "name": "Mithril bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9142", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "shop_price": "23", + "ge_buy_limit": "10000", + "examine": "Adamantite crossbow bolts.", + "grand_exchange_price": "210", + "durability": null, + "name": "Adamant bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9143", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "627", + "durability": null, + "name": "Rune bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9144", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "8", + "durability": null, + "name": "Silver bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9145", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A bronze crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "29", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9174", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,0", + "shop_price": "92", + "durability": null, + "weight": "4", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Bronze crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "29", + "durability": null, + "name": "Bronze crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9175" + }, + { + "requirements": "{4,16}", + "turn90cw_anim": "821", + "examine": "A blurite crossbow.", + "walk_anim": "4226", + "durability": null, + "weight": "4", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Blurite crossbow", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9176", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,30,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "An iron crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "20", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9177", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,42,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,26}", + "shop_price": "157", + "durability": null, + "weight": "4", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Iron crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "20", + "durability": null, + "name": "Iron crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9178" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A steel crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "99", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9179", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,54,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,31}", + "durability": null, + "weight": "5", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Steel crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "99", + "durability": null, + "name": "Steel crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9180" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A mithril crossbow", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "355", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9181", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,66,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,36}", + "durability": null, + "weight": "6", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Mith crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "355", + "durability": null, + "name": "Mith crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9182" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "An adamantite crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "905", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9183", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,78,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,46}", + "shop_price": "2244", + "durability": null, + "weight": "6", + "weapon_interface": "17", + "render_anim": "175", + "attack_audios": "2700,0,0,0", + "name": "Adamant crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "905", + "durability": null, + "name": "Adamant crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9184" + }, + { + "ge_buy_limit": "500", + "turn90cw_anim": "821", + "examine": "A runite crossbow.", + "walk_anim": "4226", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "4227", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "4230,4230,4230,4230", + "grand_exchange_price": "9706", + "stand_anim": "4591", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "9185", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,90,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,61}", + "shop_price": "16200", + "durability": null, + "weight": "6", + "weapon_interface": "17", + "render_anim": "175", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Rune crossbow" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "9706", + "durability": null, + "name": "Rune crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9186" + }, + { + "ge_buy_limit": "10000", + "examine": "Jade bolt tips.", + "grand_exchange_price": "2", + "durability": null, + "name": "Jade bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9187" + }, + { + "ge_buy_limit": "10000", + "examine": "Red Topaz bolt tips.", + "grand_exchange_price": "2", + "durability": null, + "name": "Topaz bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9188" + }, + { + "ge_buy_limit": "10000", + "examine": "Sapphire bolt tips.", + "grand_exchange_price": "4", + "durability": null, + "name": "Sapphire bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9189" + }, + { + "ge_buy_limit": "10000", + "examine": "Emerald bolt tips.", + "grand_exchange_price": "84", + "durability": null, + "name": "Emerald bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9190" + }, + { + "ge_buy_limit": "10000", + "examine": "Ruby bolt tips.", + "grand_exchange_price": "159", + "durability": null, + "name": "Ruby bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9191" + }, + { + "ge_buy_limit": "10000", + "examine": "Diamond bolt tips.", + "grand_exchange_price": "1289", + "durability": null, + "name": "Diamond bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9192" + }, + { + "ge_buy_limit": "10000", + "examine": "Dragonstone bolt tips.", + "grand_exchange_price": "2477", + "durability": null, + "name": "Dragon bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9193" + }, + { + "shop_price": "13500", + "ge_buy_limit": "10000", + "examine": "Onyx bolt tips.", + "grand_exchange_price": "8096", + "tokkul_price": "1500", + "durability": null, + "name": "Onyx bolt tips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9194" + }, + { + "ge_buy_limit": "25000", + "examine": "Enchanted Opal tipped Bronze Crossbow Bolts.", + "grand_exchange_price": "10", + "durability": null, + "name": "Opal bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9236", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,14", + "equipment_slot": "13" + }, + { + "requirements": "{4,15}", + "examine": "Enchanted Jade tipped Blurite Crossbow Bolts.", + "durability": null, + "name": "Jade bolts (e)", + "archery_ticket_price": "0", + "id": "9237", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "ge_buy_limit": "25000", + "examine": "Enchanted Pearl tipped Iron Crossbow Bolts.", + "grand_exchange_price": "36", + "durability": null, + "name": "Pearl bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9238", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,48", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "25000", + "examine": "Enchanted Red Topaz tipped Steel Crossbow Bolts.", + "grand_exchange_price": "44", + "durability": null, + "name": "Topaz bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9239", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,66", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "103", + "ge_buy_limit": "25000", + "examine": "Enchanted Sapphire tipped Mithril Crossbow Bolts.", + "grand_exchange_price": "95", + "durability": null, + "name": "Sapphire bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9240", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,83", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "ge_buy_limit": "25000", + "examine": "Enchanted Emerald tipped Mithril Crossbow Bolts.", + "grand_exchange_price": "304", + "durability": null, + "name": "Emerald bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9241", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,85", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Enchanted Ruby tipped Adamantite Crossbow Bolts.", + "grand_exchange_price": "450", + "durability": null, + "name": "Ruby bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9242", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,103", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Enchanted Diamond tipped Adamantite Crossbow Bolts.", + "grand_exchange_price": "1631", + "durability": null, + "name": "Diamond bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9243", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,105", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Enchanted Dragonstone tipped Runite Crossbow Bolts.", + "grand_exchange_price": "3217", + "durability": null, + "name": "Dragon bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9244", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,117", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Enchanted Onyx tipped runite Crossbow Bolts.", + "grand_exchange_price": "8870", + "durability": null, + "name": "Onyx bolts (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9245", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,120", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "durability": null, + "name": "Blurite bolts(p)", + "archery_ticket_price": "0", + "id": "9286", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "88", + "durability": null, + "name": "Iron bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9287", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "132", + "durability": null, + "name": "Steel bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9288", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "146", + "durability": null, + "name": "Mithril bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9289", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "shop_price": "23", + "ge_buy_limit": "10000", + "examine": "Adamantite crossbow bolts.", + "grand_exchange_price": "302", + "durability": null, + "name": "Adamant bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9290", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "734", + "durability": null, + "name": "Runite bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9291", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "34", + "durability": null, + "name": "Silver bolts (p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9292", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "durability": null, + "name": "Blurite bolts(p+)", + "archery_ticket_price": "0", + "id": "9293", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "185", + "durability": null, + "name": "Iron bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9294", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "215", + "durability": null, + "name": "Steel bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9295", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "296", + "durability": null, + "name": "Mithril bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9296", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "10000", + "grand_exchange_price": "472", + "durability": null, + "name": "Adamant bolts(p+)", + "archery_ticket_price": "0", + "id": "9297", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "1130", + "durability": null, + "name": "Runite bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9298", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "129", + "durability": null, + "name": "Silver bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9299", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "durability": null, + "name": "Blurite bolts(p++)", + "archery_ticket_price": "0", + "id": "9300", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "60", + "ge_buy_limit": "25000", + "examine": "Iron crossbow bolts.", + "grand_exchange_price": "1136", + "durability": null, + "name": "Iron bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9301", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,46", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "ge_buy_limit": "10000", + "examine": "Steel crossbow bolts.", + "grand_exchange_price": "1088", + "durability": null, + "name": "Steel bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9302", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,64", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "shop_price": "32", + "ge_buy_limit": "10000", + "examine": "Mithril crossbow bolts.", + "grand_exchange_price": "903", + "durability": null, + "name": "Mithril bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9303", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,82", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "10000", + "grand_exchange_price": "1043", + "durability": null, + "name": "Adamant bolts(p++)", + "archery_ticket_price": "0", + "id": "9304", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "10000", + "examine": "Runite crossbow bolts.", + "grand_exchange_price": "1581", + "durability": null, + "name": "Runite bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9305", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,115", + "equipment_slot": "13" + }, + { + "requirements": "{4,26}", + "shop_price": "6", + "ge_buy_limit": "10000", + "examine": "Silver crossbow bolts.", + "grand_exchange_price": "1211", + "durability": null, + "name": "Silver bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9306", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,36", + "equipment_slot": "13" + }, + { + "requirements": "{4,16}", + "examine": "Jade tipped blurite bolts.", + "durability": null, + "name": "Jade bolts", + "archery_ticket_price": "0", + "id": "9335", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30", + "equipment_slot": "13" + }, + { + "requirements": "{4,31}", + "shop_price": "62", + "ge_buy_limit": "25000", + "examine": "Red Topaz tipped Steel Crossbow Bolts.", + "grand_exchange_price": "60", + "durability": null, + "name": "Topaz bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9336", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,66", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "ge_buy_limit": "25000", + "examine": "Sapphire tipped Mithril crossbow bolts.", + "grand_exchange_price": "89", + "durability": null, + "name": "Sapphire bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9337", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,83", + "equipment_slot": "13" + }, + { + "requirements": "{4,36}", + "ge_buy_limit": "25000", + "examine": "Emerald tipped Mithril crossbow bolts.", + "grand_exchange_price": "177", + "durability": null, + "name": "Emerald bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9338", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,85", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Ruby tipped Adamantite crossbow bolts.", + "grand_exchange_price": "408", + "durability": null, + "name": "Ruby bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9339", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,103", + "equipment_slot": "13" + }, + { + "requirements": "{4,46}", + "ge_buy_limit": "25000", + "examine": "Diamond tipped Adamantite crossbow bolts.", + "grand_exchange_price": "1545", + "durability": null, + "name": "Diamond bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9340", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,105", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Dragonstone tipped Runite crossbow bolts.", + "grand_exchange_price": "3201", + "durability": null, + "name": "Dragon bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9341", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,117", + "equipment_slot": "13" + }, + { + "requirements": "{4,61}", + "ge_buy_limit": "25000", + "examine": "Onyx tipped Runite crossbow bolts.", + "grand_exchange_price": "8752", + "durability": null, + "name": "Onyx bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9342", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,120", + "equipment_slot": "13" + }, + { + "shop_price": "1", + "ge_buy_limit": "10000", + "examine": "Unfeathered bronze crossbow bolts.", + "grand_exchange_price": "3", + "durability": null, + "name": "Bronze bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9375" + }, + { + "examine": "Unfeathered blurite crossbow bolts.", + "durability": null, + "name": "Blurite bolts (unf)", + "archery_ticket_price": "0", + "id": "9376" + }, + { + "shop_price": "2", + "ge_buy_limit": "10000", + "examine": "Unfeathered iron crossbow bolts.", + "grand_exchange_price": "14", + "durability": null, + "name": "Iron bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9377" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered steel crossbow bolts.", + "grand_exchange_price": "61", + "durability": null, + "name": "Steel bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9378" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered mithril crossbow bolts.", + "grand_exchange_price": "115", + "durability": null, + "name": "Mithril bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9379" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered adamantite crossbow bolts.", + "grand_exchange_price": "266", + "durability": null, + "name": "Adamant bolts(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9380" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered runite crossbow bolts", + "grand_exchange_price": "1235", + "durability": null, + "name": "Runite bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9381" + }, + { + "ge_buy_limit": "10000", + "examine": "Unfeathered silver crossbow bolts.", + "grand_exchange_price": "2", + "durability": null, + "name": "Silver bolts (unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9382" + }, + { + "examine": "A mithril grapple tipped bolt with a rope.", + "grand_exchange_price": "1447", + "durability": null, + "name": "Grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9415" + }, + { + "ge_buy_limit": "100", + "examine": "A mithril grapple tip.", + "grand_exchange_price": "461", + "durability": null, + "name": "Mith grapple tip", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9416" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "461", + "durability": null, + "name": "Mith grapple tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9417" + }, + { + "ge_buy_limit": "1000", + "examine": "A mithril grapple tipped bolt with a rope.", + "grand_exchange_price": "858", + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9418" + }, + { + "ge_buy_limit": "1000", + "examine": "A mithril grapple tipped bolt with a rope.", + "grand_exchange_price": "1470", + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9419", + "equipment_slot": "13" + }, + { + "requirements": "{9,9}", + "shop_price": "20", + "ge_buy_limit": "5000", + "examine": "A pair of bronze crossbow limbs.", + "grand_exchange_price": "49", + "durability": null, + "name": "Bronze limbs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9420", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "49", + "durability": null, + "name": "Bronze limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9421" + }, + { + "requirements": "{24,9}", + "examine": "A pair of blurite crossbow limbs.", + "durability": null, + "name": "Blurite limbs", + "weight": "1", + "archery_ticket_price": "0", + "id": "9422", + "equipment_slot": "5" + }, + { + "requirements": "{9,39}", + "shop_price": "200", + "ge_buy_limit": "5000", + "examine": "A pair of iron crossbow limbs.", + "grand_exchange_price": "34", + "durability": null, + "name": "Iron limbs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9423", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "34", + "durability": null, + "name": "Iron limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9424" + }, + { + "requirements": "{9,46}", + "shop_price": "900", + "ge_buy_limit": "5000", + "examine": "A pair of steel crossbow limbs.", + "grand_exchange_price": "97", + "durability": null, + "name": "Steel limbs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9425", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "durability": null, + "name": "Steel limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9426" + }, + { + "requirements": "{9,54}", + "shop_price": "650", + "ge_buy_limit": "5000", + "examine": "A pair of mithril crossbow limbs.", + "grand_exchange_price": "347", + "durability": null, + "name": "Mithril limbs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9427", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "347", + "durability": null, + "name": "Mithril limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9428" + }, + { + "requirements": "{9,61}", + "shop_price": "4800", + "ge_buy_limit": "5000", + "examine": "A pair of adamantite crossbow limbs.", + "grand_exchange_price": "1434", + "durability": null, + "name": "Adamantite limbs", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9429", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1434", + "durability": null, + "name": "Adamantite limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9430" + }, + { + "requirements": "{9,69}", + "ge_buy_limit": "5000", + "examine": "A pair of runite crossbow limbs.", + "grand_exchange_price": "9441", + "durability": null, + "name": "Runite limbs", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9431", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "9441", + "durability": null, + "name": "Runite limbs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9432" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "1500", + "examine": "A pouch for storing crossbow bolts.", + "durability": null, + "name": "Bolt pouch", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9433" + }, + { + "shop_price": "25", + "ge_buy_limit": "100", + "examine": "A mould for creating silver crossbow bolts.", + "grand_exchange_price": "409", + "durability": null, + "name": "Bolt mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9434" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "409", + "durability": null, + "name": "Bolt mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9435" + }, + { + "ge_buy_limit": "1000", + "examine": "I can use this to make a crossbow string.", + "grand_exchange_price": "196", + "durability": null, + "name": "Sinew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9436" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "196", + "durability": null, + "name": "Sinew", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9437" + }, + { + "ge_buy_limit": "1000", + "examine": "A string for a crossbow.", + "grand_exchange_price": "203", + "durability": null, + "name": "Crossbow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9438" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "203", + "durability": null, + "name": "Crossbow string", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9439" + }, + { + "requirements": "{9,9}", + "shop_price": "8", + "ge_buy_limit": "1000", + "examine": "A wooden crossbow stock", + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9440", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Wooden stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9441" + }, + { + "requirements": "{24,9}", + "ge_buy_limit": "1000", + "examine": "An oak crossbow stock.", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak stock", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9442", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1", + "durability": null, + "name": "Oak stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9443" + }, + { + "requirements": "{9,39}", + "shop_price": "21", + "ge_buy_limit": "1000", + "examine": "A willow crossbow stock.", + "grand_exchange_price": "3", + "durability": null, + "name": "Willow stock", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9444", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3", + "durability": null, + "name": "Willow stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9445" + }, + { + "requirements": "{9,46}", + "shop_price": "231", + "ge_buy_limit": "1000", + "examine": "A teak crossbow stock.", + "grand_exchange_price": "6", + "durability": null, + "name": "Teak stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9446", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "6", + "durability": null, + "name": "Teak stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9447" + }, + { + "requirements": "{9,54}", + "ge_buy_limit": "1000", + "examine": "A maple crossbow stock.", + "grand_exchange_price": "7", + "durability": null, + "name": "Maple stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9448", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7", + "durability": null, + "name": "Maple stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9449" + }, + { + "requirements": "{9,61}", + "ge_buy_limit": "1000", + "examine": "A Mahogany crossbow stock.", + "grand_exchange_price": "23", + "durability": null, + "name": "Mahogany stock", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9450", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "23", + "durability": null, + "name": "Mahogany stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9451" + }, + { + "requirements": "{9,69}", + "ge_buy_limit": "1000", + "examine": "A yew crossbow stock.", + "grand_exchange_price": "37", + "durability": null, + "name": "Yew stock", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9452", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "37", + "durability": null, + "name": "Yew stock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9453" + }, + { + "shop_price": "27", + "ge_buy_limit": "500", + "examine": "An unstrung bronze crossbow.", + "grand_exchange_price": "25", + "durability": null, + "name": "Bronze c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9454" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "25", + "durability": null, + "name": "Bronze c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9455" + }, + { + "shop_price": "27", + "examine": "An unstrung blurite crossbow.", + "durability": null, + "name": "Blurite c'bow (u)", + "weight": "8", + "archery_ticket_price": "0", + "id": "9456" + }, + { + "ge_buy_limit": "500", + "examine": "An unstrung iron crossbow.", + "grand_exchange_price": "26", + "durability": null, + "name": "Iron c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9457" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "26", + "durability": null, + "name": "Iron c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9458" + }, + { + "shop_price": "27", + "ge_buy_limit": "500", + "examine": "An unstrung steel crossbow.", + "grand_exchange_price": "114", + "durability": null, + "name": "Steel c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9459" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "114", + "durability": null, + "name": "Steel c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9460" + }, + { + "shop_price": "27", + "ge_buy_limit": "500", + "examine": "An unstrung mithril crossbow.", + "grand_exchange_price": "330", + "durability": null, + "name": "Mithril c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9461" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "330", + "durability": null, + "name": "Mithril c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9462" + }, + { + "shop_price": "693", + "ge_buy_limit": "500", + "examine": "An unstrung adamantite crossbow.", + "grand_exchange_price": "1007", + "durability": null, + "name": "Adamant c'bow (u)", + "tradeable": "true", + "weight": "8", + "archery_ticket_price": "0", + "id": "9463" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "1007", + "durability": null, + "name": "Adamant c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9464" + }, + { + "shop_price": "4000", + "ge_buy_limit": "500", + "examine": "An unstrung runite crossbow.", + "grand_exchange_price": "9493", + "durability": null, + "name": "Runite c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9465" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "9493", + "durability": null, + "name": "Runite c'bow (u)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9466" + }, + { + "examine": "It's a bar of blurite.", + "durability": null, + "name": "Blurite bar", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "9467" + }, + { + "examine": "What is left over when a log is made into a plank.", + "durability": null, + "name": "Sawdust", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "9468" + }, + { + "ge_buy_limit": "100", + "examine": "A seed pod of the Grand Tree.", + "grand_exchange_price": "16200", + "durability": null, + "name": "Grand seed pod", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9469" + }, + { + "ge_buy_limit": "10", + "examine": "A scarf. You feel your upper lip stiffening.", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Gnome scarf", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9470", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1900000", + "durability": null, + "name": "Gnome scarf", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9471" + }, + { + "ge_buy_limit": "10", + "examine": "Tally Ho!", + "grand_exchange_price": "95800", + "durability": null, + "name": "Gnome goggles", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9472", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95800", + "durability": null, + "name": "Gnome goggles", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9473" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9474" + }, + { + "ge_buy_limit": "100", + "examine": "It looks very minty.", + "grand_exchange_price": "675", + "durability": null, + "name": "Mint cake", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9475" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "675", + "durability": null, + "name": "Mint cake", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9476" + }, + { + "examine": "You can check on your delivery details here", + "durability": null, + "name": "Aluft aloft box", + "archery_ticket_price": "0", + "id": "9477" + }, + { + "shop_price": "1", + "examine": "This cheese & tomato batta needs baking (and garnishing with equa leaves).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9478" + }, + { + "shop_price": "1", + "examine": "This cheese & tomato batta needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9479" + }, + { + "shop_price": "1", + "examine": "This fruit batta needs baking (and garnishing with gnome spices).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9480" + }, + { + "shop_price": "1", + "examine": "This fruit batta needs garnishing with gnome spices.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9481" + }, + { + "shop_price": "1", + "examine": "This toad batta needs baking.", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9482" + }, + { + "shop_price": "1", + "examine": "This veggie batta needs baking (and garnishing with equa leaves).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9483" + }, + { + "shop_price": "1", + "examine": "This veggie batta needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9484" + }, + { + "shop_price": "1", + "examine": "This worm batta needs baking (and garnishing with equa leaves).", + "durability": null, + "name": "Half made batta", + "archery_ticket_price": "0", + "id": "9485" + }, + { + "shop_price": "1", + "examine": "This worm batta needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished batta", + "archery_ticket_price": "0", + "id": "9486" + }, + { + "shop_price": "28", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "740", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9487" + }, + { + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9488" + }, + { + "shop_price": "28", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "740", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9489" + }, + { + "shop_price": "28", + "examine": "This looks like a strange mix.", + "grand_exchange_price": "740", + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9508" + }, + { + "durability": null, + "name": "Wizard blizzard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9509" + }, + { + "shop_price": "28", + "examine": "A Short Green Guy... looks good.", + "grand_exchange_price": "954", + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9510" + }, + { + "durability": null, + "name": "Short green guy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9511" + }, + { + "shop_price": "28", + "examine": "A fresh healthy fruit mix.", + "grand_exchange_price": "287", + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9512" + }, + { + "durability": null, + "name": "Pineapple punch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9513" + }, + { + "shop_price": "28", + "examine": "A cool refreshing fruit mix.", + "grand_exchange_price": "2276", + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9514" + }, + { + "durability": null, + "name": "Fruit blast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9515" + }, + { + "shop_price": "28", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "577", + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9516" + }, + { + "durability": null, + "name": "Drunk dragon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9517" + }, + { + "shop_price": "28", + "examine": "A warm creamy alcoholic beverage", + "grand_exchange_price": "281", + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9518" + }, + { + "durability": null, + "name": "Choc saturday", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9519" + }, + { + "shop_price": "30", + "examine": "Looks good... smells strong.", + "grand_exchange_price": "27", + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9520" + }, + { + "durability": null, + "name": "Blurberry special", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9521" + }, + { + "shop_price": "1", + "examine": "A deep tin used to make gnome battas in.", + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9522" + }, + { + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9523" + }, + { + "shop_price": "1", + "examine": "A deep tin used to make gnome battas in.", + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9524" + }, + { + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9525" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "310", + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9527" + }, + { + "durability": null, + "name": "Fruit batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9528" + }, + { + "shop_price": "78", + "examine": "It actually smells quite good.", + "grand_exchange_price": "280", + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9529" + }, + { + "durability": null, + "name": "Toad batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9530" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "148", + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9531" + }, + { + "durability": null, + "name": "Worm batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9532" + }, + { + "examine": "Well... It looks healthy.", + "grand_exchange_price": "240", + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9533" + }, + { + "durability": null, + "name": "Vegetable batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9534" + }, + { + "examine": "This smells really good.", + "grand_exchange_price": "266", + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9535" + }, + { + "durability": null, + "name": "Cheese+tom batta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9536" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "2606", + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9538" + }, + { + "durability": null, + "name": "Toad crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9539" + }, + { + "shop_price": "70", + "examine": "Yum...smells spicy.", + "grand_exchange_price": "99", + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9540" + }, + { + "durability": null, + "name": "Spicy crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9541" + }, + { + "shop_price": "80", + "examine": "It actually smells quite good.", + "grand_exchange_price": "255", + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9542" + }, + { + "durability": null, + "name": "Worm crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9543" + }, + { + "shop_price": "70", + "examine": "Yum... smells good.", + "grand_exchange_price": "889", + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9544" + }, + { + "durability": null, + "name": "Chocchip crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9545" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "475", + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9547" + }, + { + "durability": null, + "name": "Worm hole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9548" + }, + { + "examine": "This looks pretty healthy.", + "grand_exchange_price": "514", + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9549" + }, + { + "durability": null, + "name": "Veg ball", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9550" + }, + { + "examine": "It actually smells quite good.", + "grand_exchange_price": "2650", + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "9551" + }, + { + "durability": null, + "name": "Tangled toads' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9552" + }, + { + "shop_price": "450", + "examine": "Full of creamy, chocolately goodness.", + "grand_exchange_price": "4704", + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "9553" + }, + { + "durability": null, + "name": "Chocolate bomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9554" + }, + { + "examine": "This unfinished choco bomb needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9558" + }, + { + "examine": "This unfinished tangled toad legs bowl needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9559" + }, + { + "examine": "This unfinished choc bomb needs cream and chocolate dust.", + "durability": null, + "name": "Unfinished bowl", + "archery_ticket_price": "0", + "id": "9560" + }, + { + "examine": "This unfinished veggie ball needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9561" + }, + { + "examine": "This unfinished veggie ball needs equa leaves.", + "durability": null, + "name": "Unfinished bowl", + "archery_ticket_price": "0", + "id": "9562" + }, + { + "examine": "This unfinished worm hole needs baking, and final ingredients", + "durability": null, + "name": "Half made bowl", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9563" + }, + { + "examine": "This unfinished worm hole needs equa leaves.", + "durability": null, + "name": "Unfinished bowl", + "archery_ticket_price": "0", + "id": "9564" + }, + { + "durability": null, + "name": "Cocktail shaker", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9565" + }, + { + "examine": "This wizzard blizzard needs pouring, a lime slice, and pineapple chunks.", + "durability": null, + "name": "Mixed blizzard", + "archery_ticket_price": "0", + "id": "9566" + }, + { + "examine": "This short green guy cocktail needs pouring, a lime slice and equa leaves.", + "durability": null, + "name": "Mixed sgg", + "archery_ticket_price": "0", + "id": "9567" + }, + { + "examine": "This fruit blast cocktail needs pouring and a lemon slice.", + "durability": null, + "name": "Mixed blast", + "archery_ticket_price": "0", + "id": "9568" + }, + { + "examine": "This pineapple punch needs pouring, lime and pineapple chunks, and a orange slice.", + "durability": null, + "name": "Mixed punch", + "archery_ticket_price": "0", + "id": "9569" + }, + { + "examine": "This blurberry special needs pouring, orange and lemon chunks, a lime slice and equa leaves.", + "durability": null, + "name": "Mixed blurberry special", + "archery_ticket_price": "0", + "id": "9570" + }, + { + "examine": "This choco chip crunchy needs baking and garnishing with chocolate dust.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9577" + }, + { + "examine": "This choco chip crunchy needs garnishing with chocolate dust.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9578" + }, + { + "examine": "This spicy crunchy needs baking and garnishing with gnome spices.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9579" + }, + { + "examine": "This spicy crunchy needs garnishing with gnome spices.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9580" + }, + { + "examine": "This toad crunchy needs baking and garnishing with equa leaves.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9581" + }, + { + "examine": "This toad crunchy needs garnishing with equa leaves.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9582" + }, + { + "examine": "This worm crunchy needs baking and garnishing with gnome spices.", + "durability": null, + "name": "Half made crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9583" + }, + { + "examine": "This worm crunchy needs garnishing with gnome spices.", + "durability": null, + "name": "Unfinished crunchy", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9584" + }, + { + "durability": null, + "name": "Batta tin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9585" + }, + { + "durability": null, + "name": "Crunchy tray", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9586" + }, + { + "durability": null, + "name": "Gnomebowl mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9587" + }, + { + "durability": null, + "name": "Raw crunchies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9588" + }, + { + "destroy_message": "Speak to Sir Amik Varze at the beginning of the Black Knight's Fortress Quest.", + "examine": "A dossier containing info on the Black Knight plot.", + "durability": null, + "name": "Dossier", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9589" + }, + { + "examine": "A dossier containing info on the Black Knight plot.", + "durability": null, + "name": "Dossier", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9590" + }, + { + "examine": "Glue made from tree sap and ground mud runes.", + "durability": null, + "name": "Magic glue", + "weight": "3", + "archery_ticket_price": "0", + "id": "9592" + }, + { + "examine": "This doesn't look like it will do anything interesting.", + "durability": null, + "name": "Weird gloop", + "tradeable": "false", + "destroy": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "9593" + }, + { + "examine": "Mud runes ground into a powder.", + "durability": null, + "name": "Ground mud runes", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9594" + }, + { + "examine": "A red circular crystalline disc.", + "durability": null, + "name": "Red circle", + "archery_ticket_price": "0", + "id": "9597" + }, + { + "examine": "A red triangular crystalline disc.", + "durability": null, + "name": "Red triangle", + "archery_ticket_price": "0", + "id": "9598" + }, + { + "examine": "A red square-shaped crystalline disc.", + "durability": null, + "name": "Red square", + "archery_ticket_price": "0", + "id": "9599" + }, + { + "examine": "A red pentagon shaped crystalline disc.", + "durability": null, + "name": "Red pentagon", + "archery_ticket_price": "0", + "id": "9600" + }, + { + "examine": "An orange circular crystalline disc.", + "durability": null, + "name": "Orange circle", + "archery_ticket_price": "0", + "id": "9601" + }, + { + "examine": "An orange triangular crystalline disc.", + "durability": null, + "name": "Orange triangle", + "archery_ticket_price": "0", + "id": "9602" + }, + { + "examine": "An orange square-shaped crystalline disc.", + "durability": null, + "name": "Orange square", + "archery_ticket_price": "0", + "id": "9603" + }, + { + "examine": "An orange pentagon shaped crystalline disc.", + "durability": null, + "name": "Orange pentagon", + "archery_ticket_price": "0", + "id": "9604" + }, + { + "examine": "A yellow circular crystalline disc.", + "durability": null, + "name": "Yellow circle", + "archery_ticket_price": "0", + "id": "9605" + }, + { + "examine": "A yellow triangular crystalline disc.", + "durability": null, + "name": "Yellow triangle", + "archery_ticket_price": "0", + "id": "9606" + }, + { + "examine": "A yellow square-shaped crystalline disc.", + "durability": null, + "name": "Yellow square", + "archery_ticket_price": "0", + "id": "9607" + }, + { + "examine": "A yellow pentagon shaped crystalline disc.", + "durability": null, + "name": "Yellow pentagon", + "archery_ticket_price": "0", + "id": "9608" + }, + { + "examine": "A green circular crystalline disc.", + "durability": null, + "name": "Green circle", + "archery_ticket_price": "0", + "id": "9609" + }, + { + "examine": "A green triangular crystalline disc.", + "durability": null, + "name": "Green triangle", + "archery_ticket_price": "0", + "id": "9610" + }, + { + "examine": "A green square shaped crystalline disc.", + "durability": null, + "name": "Green square", + "archery_ticket_price": "0", + "id": "9611" + }, + { + "examine": "A green pentagon shaped crystalline disc.", + "durability": null, + "name": "Green pentagon", + "archery_ticket_price": "0", + "id": "9612" + }, + { + "examine": "A blue circular crystalline disc.", + "durability": null, + "name": "Blue circle", + "archery_ticket_price": "0", + "id": "9613" + }, + { + "examine": "A blue triangular crystalline disc.", + "durability": null, + "name": "Blue triangle", + "archery_ticket_price": "0", + "id": "9614" + }, + { + "examine": "A blue square shaped crystalline disc.", + "durability": null, + "name": "Blue square", + "archery_ticket_price": "0", + "id": "9615" + }, + { + "examine": "A blue pentagon shaped crystalline disc.", + "durability": null, + "name": "Blue pentagon", + "archery_ticket_price": "0", + "id": "9616" + }, + { + "examine": "An indigo circular crystalline disc.", + "durability": null, + "name": "Indigo circle", + "archery_ticket_price": "0", + "id": "9617" + }, + { + "examine": "An indigo triangular crystalline disc.", + "durability": null, + "name": "Indigo triangle", + "archery_ticket_price": "0", + "id": "9618" + }, + { + "examine": "An indigo square shaped crystalline disc.", + "durability": null, + "name": "Indigo square", + "archery_ticket_price": "0", + "id": "9619" + }, + { + "examine": "An indigo pentagon shaped crystalline disc.", + "durability": null, + "name": "Indigo pentagon", + "archery_ticket_price": "0", + "id": "9620" + }, + { + "examine": "A violet circular crystalline disc.", + "durability": null, + "name": "Violet circle", + "archery_ticket_price": "0", + "id": "9621" + }, + { + "examine": "A violet triangular crystalline disc.", + "durability": null, + "name": "Violet triangle", + "archery_ticket_price": "0", + "id": "9622" + }, + { + "examine": "A violet square-shaped crystalline disc.", + "durability": null, + "name": "Violet square", + "archery_ticket_price": "0", + "id": "9623" + }, + { + "examine": "A violet pentagon shaped crystalline disc.", + "durability": null, + "name": "Violet pentagon", + "archery_ticket_price": "0", + "id": "9624" + }, + { + "destroy_message": "Maybe Brimstail will have another...", + "examine": "A magical saw.", + "durability": null, + "name": "Crystal saw", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9625", + "equipment_slot": "3" + }, + { + "destroy_message": "Maybe Brimstail will have another...", + "examine": "This small crystal seed looks grey and dead.", + "durability": null, + "name": "Small crystal seed", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9626" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "shop_price": "1265", + "ge_buy_limit": "100", + "examine": "As used by King Tyras personal guard.", + "durability": null, + "weight": "0.9", + "equipment_slot": "0", + "grand_exchange_price": "1406", + "name": "Tyras helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9629", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1406", + "durability": null, + "name": "Tyras helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9630" + }, + { + "examine": "This needs refining.", + "durability": null, + "name": "Daeyalt ore", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9632" + }, + { + "shop_price": "635", + "ge_buy_limit": "100", + "examine": "Dressing like the Vyrewatch could be a useful disguise in the ghetto of Meiyerditch.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "2160", + "name": "Vyrewatch top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9634", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2160", + "durability": null, + "name": "Vyrewatch top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9635" + }, + { + "shop_price": "635", + "ge_buy_limit": "100", + "examine": "Dress like a powerful Vyrewatch!", + "grand_exchange_price": "1204", + "durability": null, + "name": "Vyrewatch legs", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9636", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1204", + "durability": null, + "name": "Vyrewatch legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9637" + }, + { + "shop_price": "635", + "ge_buy_limit": "100", + "examine": "Dress like a powerful Vyrewatch!", + "grand_exchange_price": "2874", + "durability": null, + "name": "Vyrewatch shoes", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9638", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2874", + "durability": null, + "name": "Vyrewatch shoes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9639" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Could be used as a disguise in the ghetto of Meiyerditch.", + "durability": null, + "weight": "0.9", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "588", + "name": "Citizen top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9640", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "588", + "durability": null, + "name": "Citizen top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9641" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Could be used as a disguise in the ghetto of Meiyerditch.", + "grand_exchange_price": "491", + "durability": null, + "name": "Citizen trousers", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9642", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "491", + "durability": null, + "name": "Citizen trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9643" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "Could be used as a disguise in the ghetto of Meiyerditch.", + "grand_exchange_price": "458", + "durability": null, + "name": "Citizen shoes", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9644", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "458", + "durability": null, + "name": "Citizen shoes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9645" + }, + { + "destroy_message": "You can get another sketch by using charcoal with papyrus, when on the wall near Castle Drakyn.", + "examine": "Northern approach of the castle.", + "durability": null, + "name": "Castle sketch 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9646" + }, + { + "destroy_message": "You can get another sketch by using charcoal with papyrus, when on the wall near Castle Drakyn.", + "examine": "Western approach of the castle.", + "durability": null, + "name": "Castle sketch 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9647" + }, + { + "destroy_message": "You can get another sketch by using charcoal with papyrus, when on the wall near Castle Drakyn.", + "examine": "Southern approach of the castle.", + "durability": null, + "name": "Castle sketch 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9648" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A key to some large, strange door.", + "durability": null, + "name": "Large ornate key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9651" + }, + { + "destroy_message": "Unknown You can reclaim this item from the place you found it.", + "examine": "A book called Haemalchemy Volume 1.", + "durability": null, + "name": "Haemalchemy", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9652" + }, + { + "destroy_message": "Safalaan gave you this message; he would probably write out another one for you.", + "examine": "A sealed message from Safalaan to Valiaf.", + "durability": null, + "name": "Sealed message", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9653" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A key to the Witch's house's front door. (Witch's House)", + "durability": null, + "name": "Door key", + "archery_ticket_price": "0", + "id": "9654" + }, + { + "destroy_message": "You found this ladder top on a wall section in the north of Meiyerditch; you can get another one there.", + "examine": "The top part of a ladder.", + "durability": null, + "name": "Ladder top", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9655" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A tome of experience that awards 2000 XP per chapter.", + "durability": null, + "name": "Tome of xp (3)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9656" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A tome of experience that awards 2000 XP per chapter.", + "durability": null, + "name": "Tome of xp (2)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9657" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A tome of experience that awards 2000 XP per chapter.", + "durability": null, + "name": "Tome of xp (1)", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9658" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "9659" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9660" + }, + { + "destroy_message": "Safalaan gave you this key as a reward for helping out in Meiyerditch, you can get another key from him.", + "examine": "A key allowing a shortcut into the Sanguinesti region. (Darkness of Hallowvale)", + "durability": null, + "name": "Shortcut key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9662" + }, + { + "durability": null, + "name": "Torch", + "archery_ticket_price": "0", + "id": "9665", + "equipment_slot": "3" + }, + { + "shop_price": "25000", + "ge_buy_limit": "100", + "examine": "Unknown edit", + "grand_exchange_price": "27500", + "durability": null, + "name": "Pros'yte harness m", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "9666" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27500", + "durability": null, + "name": "Pros'yte harness m", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9667" + }, + { + "shop_price": "20000", + "ge_buy_limit": "100", + "examine": "Unknown edit", + "grand_exchange_price": "22700", + "durability": null, + "name": "Initiate harness m", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "9668" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "22700", + "durability": null, + "name": "Initiate harness m", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9669" + }, + { + "shop_price": "25000", + "ge_buy_limit": "100", + "examine": "Unknown edit", + "grand_exchange_price": "27900", + "durability": null, + "name": "Pros'yte harness f", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "9670" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27900", + "durability": null, + "name": "Pros'yte harness f", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9671" + }, + { + "remove_head": "true", + "requirements": "{1,30}-{5,20}", + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's helm.", + "durability": null, + "weight": "2", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "4619", + "name": "Proselyte sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9672", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,4,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4619", + "durability": null, + "name": "Proselyte sallet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9673" + }, + { + "requirements": "{1,30}-{5,20}", + "shop_price": "12000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's armour.", + "durability": null, + "weight": "8.6", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "7076", + "name": "Proselyte hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9674", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,30,0,8,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7076", + "durability": null, + "name": "Proselyte hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9675" + }, + { + "requirements": "{1,30}-{5,20}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's leg armour", + "durability": null, + "weight": "7.7", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "5923", + "name": "Proselyte cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9676", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5923", + "durability": null, + "name": "Proselyte cuisse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9677" + }, + { + "requirements": "{1,30}-{5,20}", + "shop_price": "10000", + "ge_buy_limit": "100", + "examine": "A Proselyte Temple Knight's leg armour.", + "durability": null, + "weight": "9", + "absorb": "1,0,3", + "equipment_slot": "7", + "grand_exchange_price": "5730", + "name": "Proselyte tasset", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9678", + "bonuses": "0,0,0,-21,-7,33,31,29,-4,31,10,0,5,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "5730", + "durability": null, + "name": "Proselyte tasset", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9679" + }, + { + "examine": "A rendered down baby sea slug.", + "durability": null, + "name": "Sea slug glue", + "archery_ticket_price": "0", + "id": "9680" + }, + { + "destroy_message": "As a security precaution, your CommOrb will automatically self", + "examine": "A Temple Knight Communication Orb. Top Secret!", + "durability": null, + "name": "Commorb v2", + "archery_ticket_price": "0", + "id": "9681" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A copy of the mysterious glyphs.", + "durability": null, + "name": "Door transcription", + "archery_ticket_price": "0", + "id": "9682" + }, + { + "examine": "Dead sea slug, very sticky.", + "durability": null, + "name": "Dead sea slug", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9683" + }, + { + "destroy_message": "You can get this page from Mayor Hobb's Desk.", + "examine": "A page from Maledict's holy book.", + "durability": null, + "name": "Page 1", + "tradeable": "false", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9684" + }, + { + "destroy_message": "You can get this page from Ezekial Lovecraft.", + "examine": "A page from Maledict's holy book.", + "durability": null, + "name": "Page 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9685" + }, + { + "destroy_message": "You will have to get the torn page from Col. O' Niall.", + "examine": "A page from Maledict's holy book.", + "durability": null, + "name": "Page 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9686" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A piece of torn page.", + "durability": null, + "name": "Fragment 1", + "archery_ticket_price": "0", + "id": "9687" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A piece of torn page.", + "durability": null, + "name": "Fragment 2", + "archery_ticket_price": "0", + "id": "9688" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A piece of torn page.", + "durability": null, + "name": "Fragment 3", + "archery_ticket_price": "0", + "id": "9689" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank water rune.", + "durability": null, + "name": "Blank water rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9690" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "6", + "durability": null, + "name": "Water rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9691" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank air rune.", + "durability": null, + "name": "Blank air rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9692" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "9", + "durability": null, + "name": "Air rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9693" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank earth rune.", + "durability": null, + "name": "Blank earth rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9694" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "7", + "durability": null, + "name": "Earth rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9695" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank mind rune.", + "durability": null, + "name": "Blank mind rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9696" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "Used for basic missile spells.", + "grand_exchange_price": "6", + "durability": null, + "name": "Mind rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9697" + }, + { + "destroy_message": "Are you sure you wish to destroy this?", + "examine": "A blank fire rune.", + "durability": null, + "name": "Blank fire rune", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9698" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "17", + "examine": "One of the 4 basic elemental Runes.", + "grand_exchange_price": "16", + "durability": null, + "name": "Fire rune", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9699" + }, + { + "durability": null, + "name": "Torch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9701" + }, + { + "examine": "A big, bad troll.", + "durability": null, + "name": "Stick", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "9702", + "weapon_interface": "5", + "equipment_slot": "3" + }, + { + "shop_price": "35", + "examine": "Basic training sword.", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "attack_audios": "2500,2500,2517,2500", + "name": "Training sword", + "archery_ticket_price": "0", + "id": "9703", + "bonuses": "4,3,-2,0,0,0,2,1,0,0,0,5,0,0,0" + }, + { + "examine": "Made of flimsy painted wood.", + "durability": null, + "name": "Training shield", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "9704", + "bonuses": "0,0,0,0,0,4,5,3,1,4,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Light and flexible, good for a beginner.", + "durability": null, + "destroy": "true", + "weight": "1.3", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "attack_audios": "2700,0,0,0", + "name": "Training bow", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9705", + "bonuses": "0,0,0,0,8,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Standard training arrows.", + "durability": null, + "name": "Training arrows", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9706", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,7", + "equipment_slot": "13" + }, + { + "examine": "Book of the elemental shield.", + "durability": null, + "name": "Slashed book", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9715" + }, + { + "examine": "Book of the elemental helm.", + "durability": null, + "name": "Beaten book", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9717" + }, + { + "examine": "On the subject of lava dippers.", + "durability": null, + "name": "Crane schematic", + "archery_ticket_price": "0", + "id": "9718" + }, + { + "examine": "A scroll with a lever schematic drawn on it.", + "durability": null, + "name": "Lever schematic", + "archery_ticket_price": "0", + "id": "9719" + }, + { + "examine": "A crane claw.", + "durability": null, + "name": "Crane claw", + "weight": "1", + "archery_ticket_price": "0", + "id": "9720" + }, + { + "examine": "A pipe that belongs in a cannon stand.", + "durability": null, + "name": "Pipe", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9723" + }, + { + "examine": "A large cog.", + "durability": null, + "name": "Large cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "9724" + }, + { + "examine": "A medium cog.", + "durability": null, + "name": "Medium cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "9725" + }, + { + "examine": "A small cog.", + "durability": null, + "name": "Small cog", + "weight": "1", + "archery_ticket_price": "0", + "id": "9726" + }, + { + "examine": "A primed elemental ingot.", + "durability": null, + "name": "Primed bar", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "9727" + }, + { + "examine": "An elemental mind ingot.", + "durability": null, + "name": "Elemental mind bar", + "weight": "1", + "archery_ticket_price": "0", + "id": "9728" + }, + { + "ge_buy_limit": "100", + "examine": "A helmet made in the Elemental Workshop.", + "grand_exchange_price": "196", + "durability": null, + "name": "Elemental helmet", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9729", + "bonuses": "0,0,0,0,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "196", + "durability": null, + "name": "Elemental helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9730" + }, + { + "ge_buy_limit": "100", + "examine": "A shield made in the Elemental Workshop.", + "grand_exchange_price": "8351", + "durability": null, + "name": "Mind shield", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9731", + "bonuses": "0,0,0,0,0,0,0,0,9,0,25,0,0,0,0", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8351", + "durability": null, + "name": "Mind shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9732" + }, + { + "shop_price": "1200", + "ge_buy_limit": "100", + "examine": "A helmet made in the Elemental Workshop.", + "grand_exchange_price": "1589", + "durability": null, + "name": "Mind helmet", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "9733", + "bonuses": "0,0,0,0,0,0,0,0,6,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1589", + "durability": null, + "name": "Mind helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9734" + }, + { + "ge_buy_limit": "10000", + "examine": "Not much good for blowing.", + "grand_exchange_price": "902", + "durability": null, + "name": "Desert goat horn", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9735" + }, + { + "ge_buy_limit": "10000", + "examine": "Finely ground desert goat horn.", + "grand_exchange_price": "1082", + "durability": null, + "name": "Goat horn dust", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9736" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1082", + "durability": null, + "name": "Goat horn dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9737" + }, + { + "durability": null, + "name": "Desert goat horn", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9738" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "4 doses of combat potion.", + "grand_exchange_price": "45", + "durability": null, + "name": "Combat potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9739" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "45", + "durability": null, + "name": "Combat potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9740" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "3 doses of combat potion.", + "grand_exchange_price": "25", + "durability": null, + "name": "Combat potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9741" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Combat potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9742" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "2 doses of combat potion.", + "grand_exchange_price": "19", + "durability": null, + "name": "Combat potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9743" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Combat potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9744" + }, + { + "shop_price": "207", + "ge_buy_limit": "100", + "examine": "1 dose of combat potion.", + "grand_exchange_price": "72", + "durability": null, + "name": "Combat potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9745" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "72", + "durability": null, + "name": "Combat potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9746" + }, + { + "requirements": "{0,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of attack.", + "durability": null, + "name": "Attack cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9747", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{0,99}", + "durability": null, + "name": "Attack cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9748", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{0,99}", + "shop_price": "99000", + "examine": "Attack skillcape hood.", + "durability": null, + "name": "Attack hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9749", + "equipment_slot": "0" + }, + { + "requirements": "{2,99}", + "shop_price": "99000", + "examine": "The cape only worn by the strongest people.", + "durability": null, + "name": "Strength cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9750", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{2,99}", + "durability": null, + "name": "Strength cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9751", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{2,99}", + "shop_price": "99000", + "examine": "Strength skillcape hood.", + "durability": null, + "name": "Strength hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9752", + "equipment_slot": "0" + }, + { + "requirements": "{1,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of the art of Defence.", + "durability": null, + "name": "Defence cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9753", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{1,99}", + "durability": null, + "name": "Defence cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9754", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{1,99}", + "shop_price": "99000", + "examine": "Defence skillcape hood.", + "durability": null, + "name": "Defence hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9755", + "equipment_slot": "0" + }, + { + "requirements": "{4,99}", + "shop_price": "99000", + "examine": "The cape worn by master archers.", + "durability": null, + "name": "Ranging cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9756", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{4,99}", + "durability": null, + "name": "Ranging cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9757", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{4,99}", + "shop_price": "99000", + "examine": "Range skillcape hood.", + "durability": null, + "name": "Ranging hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9758", + "equipment_slot": "0" + }, + { + "requirements": "{5,99}", + "shop_price": "99000", + "examine": "The cape worn by the most pious of heroes.", + "durability": null, + "name": "Prayer cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9759", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{5,99}", + "durability": null, + "name": "Prayer cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9760", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{5,99}", + "shop_price": "99000", + "examine": "Prayer skillcape hood.", + "durability": null, + "name": "Prayer hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9761", + "equipment_slot": "0" + }, + { + "requirements": "{6,99}", + "shop_price": "99000", + "examine": "The cape worn by the most powerful mages.", + "durability": null, + "name": "Magic cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9762", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{6,99}", + "durability": null, + "name": "Magic cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9763", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{6,99}", + "shop_price": "99000", + "examine": "Magic skillcape hood.", + "durability": null, + "name": "Magic hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9764", + "equipment_slot": "0" + }, + { + "requirements": "{20,99}", + "shop_price": "99000", + "examine": "The cape worn by master runecrafters.", + "durability": null, + "name": "Runecraft cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9765", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{20,99}", + "durability": null, + "name": "Runecraft cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9766", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{20,99}", + "shop_price": "99000", + "examine": "Runecrafting skillcape hood.", + "durability": null, + "name": "Runecrafting hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9767", + "equipment_slot": "0" + }, + { + "requirements": "{3,99}", + "shop_price": "99000", + "examine": "The cape worn by well-constituted adventurers.", + "durability": null, + "name": "Hitpoints cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9768", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{3,99}", + "durability": null, + "name": "Hitpoints cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9769", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{3,99}", + "shop_price": "99000", + "examine": "Constitution skillcape hood.", + "durability": null, + "name": "Hitpoints hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9770", + "equipment_slot": "0" + }, + { + "requirements": "{16,99}", + "shop_price": "99000", + "examine": "The cape worn by the most agile of heroes.", + "durability": null, + "name": "Agility cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9771", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{16,99}", + "durability": null, + "name": "Agility cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9772", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{16,99}", + "shop_price": "99000", + "examine": "Agility skillcape hood.", + "durability": null, + "name": "Agility hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9773", + "equipment_slot": "0" + }, + { + "requirements": "{15,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled at the art of herblore.", + "durability": null, + "name": "Herblore cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9774", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{15,99}", + "durability": null, + "name": "Herblore cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9775", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{15,99}", + "shop_price": "99000", + "examine": "Herblore skillcape hood.", + "durability": null, + "name": "Herblore hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9776", + "equipment_slot": "0" + }, + { + "requirements": "{17,99}", + "shop_price": "99000", + "examine": "The cape worn by master thieves.", + "durability": null, + "name": "Thieving cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9777", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{17,99}", + "durability": null, + "name": "Thieving cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9778", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{17,99}", + "shop_price": "99000", + "examine": "Thieving skillcape hood.", + "durability": null, + "name": "Thieving hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9779", + "equipment_slot": "0" + }, + { + "requirements": "{12,99}", + "shop_price": "99000", + "examine": "The cape worn by master craftworkers.", + "durability": null, + "name": "Crafting cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9780", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{12,99}", + "durability": null, + "name": "Crafting cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9781", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{12,99}", + "shop_price": "99000", + "examine": "Crafting skillcape hood.", + "durability": null, + "name": "Crafting hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9782", + "equipment_slot": "0" + }, + { + "requirements": "{9,99}", + "shop_price": "99000", + "examine": "The cape worn by the best of fletchers.", + "durability": null, + "name": "Fletching cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9783", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{9,99}", + "durability": null, + "name": "Fletching cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9784", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{9,99}", + "shop_price": "99000", + "examine": "Fletching skillcape hood.", + "durability": null, + "name": "Fletching hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9785", + "equipment_slot": "0" + }, + { + "requirements": "{18,99}", + "shop_price": "99000", + "examine": "The cape worn by slayer masters.", + "durability": null, + "name": "Slayer cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9786", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{18,99}", + "durability": null, + "name": "Slayer cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9787", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{18,99}", + "shop_price": "99000", + "examine": "Slayer skillcape hood.", + "durability": null, + "name": "Slayer hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9788", + "equipment_slot": "0" + }, + { + "requirements": "{22,99}", + "shop_price": "99000", + "examine": "The cape worn by master builders.", + "durability": null, + "name": "Construct. cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9789", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{22,99}", + "durability": null, + "name": "Construct. cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9790", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{22,99}", + "shop_price": "99000", + "examine": "Construction skillcape hood.", + "durability": null, + "name": "Construct. hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9791", + "equipment_slot": "0" + }, + { + "requirements": "{14,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled miners.", + "durability": null, + "name": "Mining cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9792", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{14,99}", + "durability": null, + "name": "Mining cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9793", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{14,99}", + "shop_price": "99000", + "examine": "Mining skillcape hood.", + "durability": null, + "name": "Mining hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9794", + "equipment_slot": "0" + }, + { + "requirements": "{13,99}", + "shop_price": "99000", + "examine": "The cape worn by master smiths.", + "durability": null, + "name": "Smithing cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9795", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{13,99}", + "durability": null, + "name": "Smithing cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9796", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{13,99}", + "shop_price": "99000", + "examine": "Smithing skillcape hood.", + "durability": null, + "name": "Smithing hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9797", + "equipment_slot": "0" + }, + { + "requirements": "{10,99}", + "shop_price": "99000", + "examine": "The cape worn by the best fishermen.", + "durability": null, + "name": "Fishing cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9798", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{10,99}", + "durability": null, + "name": "Fishing cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9799", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{10,99}", + "shop_price": "99000", + "examine": "Fishing skillcape hood.", + "durability": null, + "name": "Fishing hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9800", + "equipment_slot": "0" + }, + { + "requirements": "{7,99}", + "shop_price": "99000", + "examine": "The cape worn by the world's best chefs.", + "durability": null, + "name": "Cooking cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9801", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{7,99}", + "durability": null, + "name": "Cooking cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9802", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{7,99}", + "shop_price": "99000", + "examine": "Cooking skillcape hood.", + "durability": null, + "name": "Cooking hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9803", + "equipment_slot": "0" + }, + { + "requirements": "{11,99}", + "shop_price": "99000", + "examine": "The cape worn by master firelighters.", + "durability": null, + "name": "Firemaking cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9804", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{11,99}", + "durability": null, + "name": "Firemaking cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9805", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{11,99}", + "shop_price": "99000", + "examine": "Firemaking skillcape hood.", + "durability": null, + "name": "Firemaking hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9806", + "equipment_slot": "0" + }, + { + "requirements": "{8,99}", + "shop_price": "99000", + "examine": "The cape worn by master woodcutters (Obtaining level 99 skill)", + "durability": null, + "name": "Woodcutting cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9807", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{8,99}", + "durability": null, + "name": "Woodcut. cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9808", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{8,99}", + "shop_price": "99000", + "examine": "Woodcutting skillcape hood.", + "durability": null, + "name": "Woodcutting hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9809", + "equipment_slot": "0" + }, + { + "requirements": "{19,99}", + "shop_price": "99000", + "examine": "The cape worn by master farmers.", + "durability": null, + "name": "Farming cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9810", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{19,99}", + "durability": null, + "name": "Farming cape(t)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "9811", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{19,99}", + "shop_price": "99000", + "examine": "Farming skillcape hood.", + "durability": null, + "name": "Farming hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9812", + "equipment_slot": "0" + }, + { + "shop_price": "99000", + "examine": "The cape worn by only the most experienced adventurers.", + "durability": null, + "name": "Quest point cape", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9813", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "shop_price": "99000", + "examine": "Quest skillcape hood.", + "durability": null, + "name": "Quest point hood", + "tradeable": "false", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9814", + "equipment_slot": "0" + }, + { + "examine": "A woolly bobble hat.", + "durability": null, + "name": "Bobble hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "9815", + "equipment_slot": "0" + }, + { + "examine": "A woolly scarf.", + "durability": null, + "name": "Bobble scarf", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "9816", + "equipment_slot": "2" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Oak cape rack", + "archery_ticket_price": "0", + "id": "9817" + }, + { + "grand_exchange_price": "88", + "durability": null, + "name": "Teak cape rack", + "archery_ticket_price": "0", + "id": "9818" + }, + { + "grand_exchange_price": "120", + "durability": null, + "name": "M'gany cape rack", + "archery_ticket_price": "0", + "id": "9819" + }, + { + "grand_exchange_price": "136025", + "durability": null, + "name": "Gilded cape rack", + "archery_ticket_price": "0", + "id": "9820" + }, + { + "grand_exchange_price": "328598", + "durability": null, + "name": "Marble cape rack", + "archery_ticket_price": "0", + "id": "9821" + }, + { + "grand_exchange_price": "979747", + "durability": null, + "name": "Magical cape rack", + "archery_ticket_price": "0", + "id": "9822" + }, + { + "grand_exchange_price": "59", + "durability": null, + "name": "Oak costume box", + "archery_ticket_price": "0", + "id": "9823" + }, + { + "grand_exchange_price": "122", + "durability": null, + "name": "Teak costume box", + "archery_ticket_price": "0", + "id": "9824" + }, + { + "grand_exchange_price": "59", + "durability": null, + "name": "Mahogany cos box", + "archery_ticket_price": "0", + "id": "9825" + }, + { + "grand_exchange_price": "15", + "durability": null, + "name": "Oak armour case", + "archery_ticket_price": "0", + "id": "9826" + }, + { + "grand_exchange_price": "27", + "durability": null, + "name": "Teak armour case", + "archery_ticket_price": "0", + "id": "9827" + }, + { + "grand_exchange_price": "90", + "durability": null, + "name": "M'gany arm'r case", + "archery_ticket_price": "0", + "id": "9828" + }, + { + "grand_exchange_price": "103", + "durability": null, + "name": "Oak magic wardrobe", + "archery_ticket_price": "0", + "id": "9829" + }, + { + "grand_exchange_price": "1", + "durability": null, + "name": "Carved oak magic wardrobe", + "archery_ticket_price": "0", + "id": "9830" + }, + { + "grand_exchange_price": "127", + "durability": null, + "name": "Teak magic wardrobe", + "archery_ticket_price": "0", + "id": "9831" + }, + { + "grand_exchange_price": "13", + "durability": null, + "name": "Carved teak magic wardrobe", + "archery_ticket_price": "0", + "id": "9832" + }, + { + "grand_exchange_price": "135", + "durability": null, + "name": "Mahogany magic wardrobe", + "archery_ticket_price": "0", + "id": "9833" + }, + { + "grand_exchange_price": "137267", + "durability": null, + "name": "Gilded magic wardrobe", + "archery_ticket_price": "0", + "id": "9834" + }, + { + "grand_exchange_price": "341567", + "durability": null, + "name": "Marble magic wardrobe", + "archery_ticket_price": "0", + "id": "9835" + }, + { + "grand_exchange_price": "21", + "durability": null, + "name": "Oak toy box", + "archery_ticket_price": "0", + "id": "9836" + }, + { + "grand_exchange_price": "151", + "durability": null, + "name": "Teak toy box", + "archery_ticket_price": "0", + "id": "9837" + }, + { + "grand_exchange_price": "20", + "durability": null, + "name": "Mahogany toy box", + "archery_ticket_price": "0", + "id": "9838" + }, + { + "grand_exchange_price": "21", + "durability": null, + "name": "Oak treasure chest", + "archery_ticket_price": "0", + "id": "9839" + }, + { + "grand_exchange_price": "157", + "durability": null, + "name": "Teak treas' chest", + "archery_ticket_price": "0", + "id": "9840" + }, + { + "grand_exchange_price": "39", + "durability": null, + "name": "M'gany treas' chest", + "archery_ticket_price": "0", + "id": "9841" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3", + "examine": "A ready-to-assemble oak cape rack.", + "durability": null, + "name": "Oak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9843" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92", + "examine": "A ready-to-assemble teak cape rack..", + "durability": null, + "name": "Teak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9844" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "examine": "A ready-to-assemble mahogany cape rack.", + "durability": null, + "name": "M'gany cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9845" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "130900", + "examine": "A ready-to-assemble gilded mahogany rack.", + "durability": null, + "name": "Gilded cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9846" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "329500", + "examine": "A ready-to-assemble marble cape rack.", + "durability": null, + "name": "Marble cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9847" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1000000", + "examine": "A ready-to-assemble magic cape rack.", + "durability": null, + "name": "Magical cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9848" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "examine": "A ready-to-assemble oak toy box.", + "durability": null, + "name": "Oak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9849" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "165", + "examine": "A ready-to-assemble teak toy box.", + "durability": null, + "name": "Teak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9850" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "examine": "A ready-to-assemble mahogany toy box.", + "durability": null, + "name": "Mahogany toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9851" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "111", + "examine": "A ready-to-assemble oak magic wardrobe.", + "durability": null, + "name": "Oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9852" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "examine": "A ready-to-assemble oak magic wardrobe.", + "durability": null, + "name": "Carved oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9853" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "133", + "examine": "A ready-to-assemble teak magic wardrobe.", + "durability": null, + "name": "Teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9854" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15", + "examine": "A ready-to-assemble carved teak magic wardrobe.", + "durability": null, + "name": "Carved teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9855" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "129", + "examine": "A ready-to-assemble mahogany magic wardrobe.", + "durability": null, + "name": "Mahogany magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9856" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "137700", + "examine": "A ready-to-assemble gilded mahogany magic wardrobe.", + "durability": null, + "name": "Gilded magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9857" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "335800", + "examine": "A ready-to-assemble marble magic wardrobe.", + "durability": null, + "name": "Marble magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9858" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "17", + "examine": "A ready-to-assemble oak armour case.", + "durability": null, + "name": "Oak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9859" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29", + "examine": "A ready-to-assemble teak armour case.", + "durability": null, + "name": "Teak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9860" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "88", + "examine": "A ready-to-assemble mahogany armour case.", + "durability": null, + "name": "M'gany arm'r case", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9861" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "24", + "examine": "A ready-to-assemble oak treasure chest.", + "durability": null, + "name": "Oak treasure chest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9862" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "164", + "examine": "A ready-to-assemble teak treasure chest.", + "durability": null, + "name": "Teak treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9863" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "41", + "examine": "A ready-to-assemble mahogany treasure chest.", + "durability": null, + "name": "M'gany treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9864" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "62", + "durability": null, + "name": "Oak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9865" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "135", + "durability": null, + "name": "Teak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9866" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "60", + "durability": null, + "name": "Mahogany cos box", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "1", + "id": "9867" + }, + { + "durability": null, + "name": "Oak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9868" + }, + { + "durability": null, + "name": "Teak cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9869" + }, + { + "durability": null, + "name": "M'gany cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9870" + }, + { + "durability": null, + "name": "Gilded cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9871" + }, + { + "durability": null, + "name": "Marble cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9872" + }, + { + "durability": null, + "name": "Magical cape rack", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9873" + }, + { + "durability": null, + "name": "Oak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9874" + }, + { + "durability": null, + "name": "Teak toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9875" + }, + { + "durability": null, + "name": "Mahogany toy box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9876" + }, + { + "durability": null, + "name": "Oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9877" + }, + { + "durability": null, + "name": "Carved oak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9878" + }, + { + "durability": null, + "name": "Teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9879" + }, + { + "durability": null, + "name": "Carved teak magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9880" + }, + { + "durability": null, + "name": "Mahogany magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9881" + }, + { + "durability": null, + "name": "Gilded magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9882" + }, + { + "durability": null, + "name": "Marble magic wardrobe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9883" + }, + { + "durability": null, + "name": "Oak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9884" + }, + { + "durability": null, + "name": "Teak armour case", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9885" + }, + { + "durability": null, + "name": "M'gany arm'r case", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9886" + }, + { + "durability": null, + "name": "Oak treasure chest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9887" + }, + { + "durability": null, + "name": "Teak treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9888" + }, + { + "durability": null, + "name": "M'gany treas' chest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9889" + }, + { + "durability": null, + "name": "Oak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9890" + }, + { + "durability": null, + "name": "Teak costume box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9891" + }, + { + "durability": null, + "name": "Mahogany cos box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9892" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A lump that at some point might have been a gout tuber.", + "durability": null, + "name": "Goutweedy lump", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9901" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pile of gout tubers suitable for use in mountainous terrain.", + "durability": null, + "name": "Hardy gout tubers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9902" + }, + { + "destroy_message": "My Arm will probably have a spare copy.", + "examine": "Farmer Gricoller's Farming Manual.", + "durability": null, + "name": "Farming manual", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9903" + }, + { + "examine": "A book for sailors.", + "durability": null, + "name": "Sailing book", + "archery_ticket_price": "0", + "id": "9904" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9906", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9907", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9908", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9909", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9910", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9911", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "See article", + "durability": null, + "name": "Ghost buster 500", + "archery_ticket_price": "0", + "id": "9912", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A white destabiliser for use in a ghost buster.", + "durability": null, + "name": "White destabiliser", + "archery_ticket_price": "0", + "id": "9913", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A red destabiliser for use in a ghost buster.", + "durability": null, + "name": "Red destabiliser", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9914", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A blue destabiliser for use in a ghost buster.", + "durability": null, + "name": "Blue destabiliser", + "archery_ticket_price": "0", + "id": "9915", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A green destabiliser for use in a ghost buster.", + "durability": null, + "name": "Green destabiliser", + "archery_ticket_price": "0", + "id": "9916", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A yellow destabiliser for use in a ghost buster.", + "durability": null, + "name": "Yellow destabiliser", + "archery_ticket_price": "0", + "id": "9917", + "equipment_slot": "5" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A black destabiliser for use in a ghost buster.", + "durability": null, + "name": "Black destabiliser", + "archery_ticket_price": "0", + "id": "9918", + "equipment_slot": "5" + }, + { + "examine": "An angry-looking tree root.", + "durability": null, + "name": "Evil root", + "archery_ticket_price": "0", + "id": "9919" + }, + { + "remove_head": "true", + "destroy_message": "Players may get another from Diango in Draynor Village.", + "examine": "Better not light it!", + "durability": null, + "name": "Jack lantern mask", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9920", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Skeleton feet.", + "durability": null, + "name": "Skeleton boots", + "weight": "2", + "archery_ticket_price": "0", + "id": "9921", + "equipment_slot": "10" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some skeletal gloves.", + "durability": null, + "name": "Skeleton gloves", + "weight": "2", + "archery_ticket_price": "0", + "id": "9922", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Does my pelvis look big in this?", + "durability": null, + "name": "Skeleton leggings", + "weight": "2", + "archery_ticket_price": "0", + "id": "9923", + "equipment_slot": "7" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "remove_sleeves": "true", + "examine": "The shirt of a fully body skeleton costume.", + "durability": null, + "name": "Skeleton shirt", + "weight": "2", + "archery_ticket_price": "0", + "id": "9924", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scary skeleton mask.", + "durability": null, + "name": "Skeleton mask", + "weight": "2", + "archery_ticket_price": "0", + "id": "9925", + "equipment_slot": "0" + }, + { + "destroy_message": "You'll have to buy another one from Auguste on Entrana.", + "shop_price": "30000", + "examine": "This sapling is ready to be replanted in a tree patch.", + "durability": null, + "name": "Auguste's sapling", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "9932" + }, + { + "examine": "An incomplete origami balloon.", + "durability": null, + "name": "Balloon structure", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9933" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Origami balloon", + "archery_ticket_price": "0", + "id": "9934" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Yellow balloon", + "archery_ticket_price": "0", + "id": "9935" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Blue balloon", + "archery_ticket_price": "0", + "id": "9936" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Red balloon", + "archery_ticket_price": "0", + "id": "9937" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Orange balloon", + "archery_ticket_price": "0", + "id": "9938" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Green balloon", + "archery_ticket_price": "0", + "id": "9939" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Purple balloon", + "archery_ticket_price": "0", + "id": "9940" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Pink balloon", + "archery_ticket_price": "0", + "id": "9941" + }, + { + "examine": "An origami balloon.", + "durability": null, + "name": "Black balloon", + "archery_ticket_price": "0", + "id": "9942" + }, + { + "examine": "A bag full of sand.", + "durability": null, + "name": "Sandbag", + "weight": "1", + "archery_ticket_price": "0", + "id": "9943", + "equipment_slot": "3" + }, + { + "destroy_message": "You'll have to visit Auguste on Entrana to get a new jacket.", + "remove_sleeves": "true", + "examine": "For all your flying needs.", + "durability": null, + "name": "Bomber jacket", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9944", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You'll have to visit Auguste on Entrana to get a new cap.", + "examine": "The red baron would be jealous.", + "durability": null, + "name": "Bomber cap", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9945", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "For better flying vision.", + "durability": null, + "name": "Cap and goggles", + "archery_ticket_price": "0", + "id": "9946", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A red coloured disk that's seen better days.", + "durability": null, + "name": "Old red disk", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "9947" + }, + { + "requirements": "{21,99}", + "shop_price": "99000", + "examine": "The cape worn by master hunters.", + "durability": null, + "name": "Hunter cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9948", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,99}", + "durability": null, + "name": "Hunter cape(t)", + "archery_ticket_price": "0", + "id": "9949", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{21,99}", + "shop_price": "99000", + "examine": "Hunter skillcape hood.", + "durability": null, + "name": "Hunter hood", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "9950", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Imp", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "9952" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9953" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9954" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9955" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9956" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9957" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9958" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9959" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9960" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9961" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9962" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9963" + }, + { + "examine": "A little bigger than usual...", + "durability": null, + "name": "Kebbit", + "archery_ticket_price": "0", + "id": "9964" + }, + { + "examine": "It appears to be protecting the nest.", + "durability": null, + "name": "Giant eagle", + "archery_ticket_price": "0", + "id": "9974" + }, + { + "examine": "Aww, how cute. ", + "durability": null, + "name": "Rabbit", + "archery_ticket_price": "0", + "id": "9975" + }, + { + "examine": "Even more volatile than its vegetarian counterpart.", + "grand_exchange_price": "796", + "durability": null, + "name": "Red chinchompa", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "9977", + "bonuses": "0,0,0,0,70,0,0,0,0,0,0,0,15,0,0" + }, + { + "shop_price": "63", + "ge_buy_limit": "10000", + "examine": "This certainly needs cooking!", + "grand_exchange_price": "204", + "durability": null, + "name": "Raw bird meat", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "9978" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "204", + "durability": null, + "name": "Raw bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9979" + }, + { + "ge_buy_limit": "1000", + "examine": "A nicely roasted bird.", + "grand_exchange_price": "18", + "durability": null, + "name": "Roast bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9980" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "18", + "durability": null, + "name": "Roast bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9981" + }, + { + "durability": null, + "name": "Burnt bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9983" + }, + { + "shop_price": "63", + "ge_buy_limit": "1000", + "examine": "This certainly needs cooking!", + "grand_exchange_price": "130", + "durability": null, + "name": "Skewered bird meat", + "tradeable": "true", + "weight": "0.15", + "archery_ticket_price": "0", + "id": "9984" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "130", + "durability": null, + "name": "Skewered bird meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9985" + }, + { + "ge_buy_limit": "1000", + "examine": "A slab of raw beast meat.", + "grand_exchange_price": "16", + "durability": null, + "name": "Raw beast meat", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9986" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "16", + "durability": null, + "name": "Raw beast meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9987" + }, + { + "ge_buy_limit": "1000", + "examine": "A delicious looking slab of roast beast.", + "grand_exchange_price": "42", + "durability": null, + "name": "Roast beast meat", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "9988" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "42", + "durability": null, + "name": "Roast beast meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9989" + }, + { + "durability": null, + "name": "Burnt beast meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9991" + }, + { + "ge_buy_limit": "1000", + "examine": "Beast meat on a spit.", + "grand_exchange_price": "97", + "durability": null, + "name": "Skewered beast", + "tradeable": "true", + "weight": "3.5", + "archery_ticket_price": "0", + "id": "9992" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "97", + "durability": null, + "name": "Skewered beast", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9993" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of chopped tomatoes with an extra kick.", + "grand_exchange_price": "324", + "durability": null, + "name": "Spicy tomato", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "9994" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "324", + "durability": null, + "name": "Spicy tomato", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9995" + }, + { + "ge_buy_limit": "1000", + "examine": "A bowl of chopped beef with an extra kick.", + "grand_exchange_price": "263", + "durability": null, + "name": "Spicy minced meat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "9996" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "263", + "durability": null, + "name": "Spicy minced meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9997" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of hunter potion.", + "grand_exchange_price": "566", + "durability": null, + "name": "Hunter potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9998" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "566", + "durability": null, + "name": "Hunter potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "9999" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of hunter potion.", + "grand_exchange_price": "229", + "durability": null, + "name": "Hunter potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10000" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "229", + "durability": null, + "name": "Hunter potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10001" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of hunter potion.", + "grand_exchange_price": "159", + "durability": null, + "name": "Hunter potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10002" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "159", + "durability": null, + "name": "Hunter potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10003" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of hunter potion.", + "grand_exchange_price": "148", + "durability": null, + "name": "Hunter potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10004" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "148", + "durability": null, + "name": "Hunter potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10005" + }, + { + "shop_price": "6", + "ge_buy_limit": "100", + "examine": "A simple bird catcher./There's something caught in it.", + "grand_exchange_price": "2", + "durability": null, + "name": "Bird snare", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10006" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2", + "durability": null, + "name": "Bird snare", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10007" + }, + { + "requirements": "{21,27}", + "shop_price": "38", + "ge_buy_limit": "100", + "examine": "If a creature goes inside, then the box should slam shut.", + "grand_exchange_price": "308", + "durability": null, + "name": "Box trap", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10008" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "308", + "durability": null, + "name": "Box trap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10009" + }, + { + "requirements": "{21,15}", + "shop_price": "24", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "For catching butterflies...", + "walk_anim": "1205", + "durability": null, + "weight": "0.2", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "weapon_interface": "10", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1", + "stand_anim": "813", + "name": "Butterfly net", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10010", + "stand_turn_anim": "1209" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Butterfly net", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10011" + }, + { + "requirements": "{21,15}", + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "It's got little holes at the top.", + "grand_exchange_price": "156", + "durability": null, + "name": "Butterfly jar", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10012" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "156", + "durability": null, + "name": "Butterfly jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10013" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "143", + "examine": "There's a black warlock butterfly in here.", + "durability": null, + "name": "Black warlock", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10014" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "143", + "durability": null, + "name": "Black warlock", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10015" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "227", + "examine": "There's a snowy knight butterfly in here.", + "durability": null, + "name": "Snowy knight", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10016" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "227", + "durability": null, + "name": "Snowy knight", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10017" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "180", + "examine": "There's a sapphire glacialis butterfly in here.", + "durability": null, + "name": "Sapphire glacialis", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10018" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "180", + "durability": null, + "name": "Sapphire glacialis", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10019" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1270", + "examine": "There's a ruby harvest butterfly in here.", + "durability": null, + "name": "Ruby harvest", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.02", + "id": "10020" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1270", + "durability": null, + "name": "Ruby harvest", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10021" + }, + { + "shop_price": "500", + "examine": "A very large, single leather glove", + "durability": null, + "name": "Falconer's glove", + "tradeable": "false", + "destroy": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "10023", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "500", + "turn90cw_anim": "5166", + "examine": "A very large, single leather glove", + "walk_anim": "5164", + "durability": null, + "destroy": "true", + "weight": "1.8", + "turn90ccw_anim": "5167", + "attack_speed": "4", + "turn180_anim": "5165", + "render_anim": "1283", + "equipment_slot": "3", + "stand_anim": "5160", + "name": "Falconer's glove", + "tradeable": "false", + "run_anim": "5168", + "archery_ticket_price": "0", + "id": "10024", + "stand_turn_anim": "5161", + "bonuses": "0,0,0,0,0,0,1,1,0,0,0,0,0,0,0" + }, + { + "requirements": "{21,71}", + "shop_price": "720", + "ge_buy_limit": "100", + "examine": "A magical catching box.", + "grand_exchange_price": "784", + "durability": null, + "name": "Magic box", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10025" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "784", + "durability": null, + "name": "Magic box", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10026" + }, + { + "shop_price": "720", + "examine": "A magical catching box.", + "grand_exchange_price": "743", + "durability": null, + "name": "Imp-in-a-box(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10027" + }, + { + "shop_price": "720", + "examine": "A magical catching box.", + "grand_exchange_price": "743", + "durability": null, + "name": "Imp-in-a-box(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10028" + }, + { + "requirements": "{21,31}", + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "Reduces the risk of hand severage when poking large, vicious carnivores.", + "durability": null, + "weight": "1", + "weapon_interface": "6", + "equipment_slot": "3", + "grand_exchange_price": "1", + "name": "Teasing stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10029", + "bonuses": "7,8,0,-4,0,-1,1,2,0,0,0,8,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Teasing stick", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10030" + }, + { + "requirements": "{21,27}", + "shop_price": "18", + "ge_buy_limit": "100", + "examine": "The snare will tighten around animals passing through.", + "grand_exchange_price": "1", + "durability": null, + "name": "Rabbit snare", + "tradeable": "true", + "weight": "0.02", + "archery_ticket_price": "0", + "id": "10031" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Rabbit snare", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10032" + }, + { + "requirements": "{4,45}", + "ge_buy_limit": "20000", + "turn90cw_anim": "3177", + "walk_anim": "3177", + "durability": null, + "turn90ccw_anim": "3177", + "attack_speed": "4", + "weapon_interface": "19", + "turn180_anim": "3177", + "render_anim": "234", + "equipment_slot": "3", + "grand_exchange_price": "973", + "stand_anim": "3175", + "name": "Chinchompa", + "run_anim": "3178", + "archery_ticket_price": "0", + "id": "10033", + "stand_turn_anim": "3177", + "bonuses": "0,0,0,0,45,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{4,55}", + "ge_buy_limit": "20000", + "turn90cw_anim": "3177", + "examine": "Even more volatile than its vegetarian counterpart.", + "walk_anim": "3177", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "3177", + "attack_speed": "4", + "weapon_interface": "19", + "turn180_anim": "3177", + "render_anim": "234", + "equipment_slot": "3", + "grand_exchange_price": "1382", + "stand_anim": "3175", + "name": "Red chinchompa", + "tradeable": "true", + "run_anim": "3178", + "archery_ticket_price": "0", + "id": "10034", + "stand_turn_anim": "3177", + "bonuses": "0,0,0,0,70,0,0,0,0,0,0,0,0,0,15" + }, + { + "requirements": "{21,52}", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in polar areas.", + "grand_exchange_price": "449", + "durability": null, + "name": "Kyatt legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10035", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,10,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "449", + "durability": null, + "name": "Kyatt legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10036" + }, + { + "requirements": "{21,52}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in polar areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "272", + "name": "Kyatt top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10037", + "bonuses": "0,0,0,0,0,10,15,19,0,12,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "272", + "durability": null, + "name": "Kyatt top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10038" + }, + { + "remove_head": "true", + "requirements": "{21,52}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in polar areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "grand_exchange_price": "8338", + "name": "Kyatt hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10039", + "bonuses": "0,0,0,0,-1,4,5,3,0,4,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8338", + "durability": null, + "name": "Kyatt hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10040" + }, + { + "requirements": "{21,28}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "grand_exchange_price": "2889", + "durability": null, + "name": "Larupia legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10041", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,5,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2889", + "durability": null, + "name": "Larupia legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10042" + }, + { + "requirements": "{21,28}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "3232", + "name": "Larupia top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10043", + "bonuses": "0,0,0,0,0,10,15,19,0,12,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3232", + "durability": null, + "name": "Larupia top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10044" + }, + { + "remove_head": "true", + "requirements": "{21,28}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "grand_exchange_price": "7237", + "name": "Larupia hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10045", + "bonuses": "0,0,0,0,-1,4,5,3,0,4,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7237", + "durability": null, + "name": "Larupia hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10046" + }, + { + "requirements": "{21,38}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "7", + "grand_exchange_price": "266", + "name": "Graahk legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10047", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "266", + "durability": null, + "name": "Graahk legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10048" + }, + { + "requirements": "{21,38}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "252", + "name": "Graahk top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10049", + "bonuses": "0,0,0,0,0,10,15,19,0,12,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "252", + "durability": null, + "name": "Graahk top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10050" + }, + { + "remove_head": "true", + "requirements": "{21,38}", + "shop_price": "1", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "0", + "grand_exchange_price": "8445", + "name": "Graahk headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10051", + "bonuses": "0,0,0,0,-1,4,5,3,0,4,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8445", + "durability": null, + "name": "Graahk headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10052" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in wooded areas.", + "grand_exchange_price": "3527", + "durability": null, + "name": "Wood camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10053", + "bonuses": "0,0,0,0,0,10,15,19,0,12,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3527", + "durability": null, + "name": "Wood camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10054" + }, + { + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in wooded areas.", + "grand_exchange_price": "3228", + "durability": null, + "name": "Wood camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10055", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3228", + "durability": null, + "name": "Wood camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10056" + }, + { + "requirements": "{21,4}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in jungle areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "315", + "name": "Jungle camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10057", + "bonuses": "0,0,0,0,0,10,15,19,0,12,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "315", + "durability": null, + "name": "Jungle camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10058" + }, + { + "requirements": "{21,4}", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in jungle areas.", + "grand_exchange_price": "462", + "durability": null, + "name": "Jungle camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10059", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "462", + "durability": null, + "name": "Jungle camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10060" + }, + { + "requirements": "{21,10}", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in desert areas.", + "durability": null, + "weight": "0.2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "541", + "name": "Desert camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10061", + "bonuses": "0,0,0,0,0,10,15,19,0,12,10,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "541", + "durability": null, + "name": "Desert camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10062" + }, + { + "requirements": "{21,10}", + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in desert areas.", + "grand_exchange_price": "910", + "durability": null, + "name": "Desert camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10063", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "910", + "durability": null, + "name": "Desert camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10064" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "100", + "examine": "This should make me harder to spot in polar areas.", + "grand_exchange_price": "7990", + "durability": null, + "name": "Polar camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10065", + "bonuses": "0,0,0,0,0,10,15,19,0,12,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7990", + "durability": null, + "name": "Polar camo top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10066" + }, + { + "ge_buy_limit": "100", + "examine": "These should make me harder to spot in polar areas", + "grand_exchange_price": "8389", + "durability": null, + "name": "Polar camo legs", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10067", + "bonuses": "0,0,0,0,-7,11,10,10,0,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8389", + "durability": null, + "name": "Polar camo legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10068" + }, + { + "requirements": "{21,40}", + "ge_buy_limit": "100", + "examine": "A surprisingly aerodynamic cape.", + "grand_exchange_price": "1140", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "weight": "-2.2", + "archery_ticket_price": "0", + "id": "10069", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1140", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10070" + }, + { + "requirements": "{21,66}", + "ge_buy_limit": "100", + "examine": "A really surprisingly aerodynamic cape.", + "grand_exchange_price": "1262", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "weight": "-4.5", + "archery_ticket_price": "0", + "id": "10071", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1262", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10072" + }, + { + "requirements": "{21,40}", + "examine": "A surprisingly aerodynamic cape.", + "grand_exchange_price": "951", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10073", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,66}", + "examine": "A really surprisingly aerodynamic cape.", + "grand_exchange_price": "881", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10074", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,54}", + "ge_buy_limit": "100", + "examine": "Made from dark kebbit fur, these are perfect for tasks of a stealthier nature.", + "grand_exchange_price": "1063", + "durability": null, + "name": "Gloves of silence", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10075", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1063", + "durability": null, + "name": "Gloves of silence", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10076" + }, + { + "ge_buy_limit": "100", + "examine": "Attack at your own risk.", + "grand_exchange_price": "80", + "durability": null, + "name": "Spiky vambraces", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10077", + "bonuses": "0,0,0,0,4,2,2,1,0,0,1,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "80", + "durability": null, + "name": "Spiky vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10078" + }, + { + "requirements": "{4,40}", + "ge_buy_limit": "100", + "examine": "Made from 100% real dragonhide. Now with added spikiness.", + "grand_exchange_price": "1353", + "durability": null, + "name": "Green spiky vambs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10079", + "bonuses": "0,0,0,-10,8,3,2,4,2,0,3,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1353", + "durability": null, + "name": "Green spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10080" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "100", + "examine": "Made from 100% real dragonhide. Now with added spikiness.", + "grand_exchange_price": "1773", + "durability": null, + "name": "Blue spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10081", + "bonuses": "0,0,0,-10,9,4,3,5,4,0,4,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1773", + "durability": null, + "name": "Blue spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10082" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "100", + "examine": "Vambraces made from 100% real dragonhide. Now with added spikes.", + "grand_exchange_price": "1978", + "durability": null, + "name": "Red spiky vambs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10083", + "bonuses": "0,0,0,-10,10,5,4,6,6,0,5,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1978", + "durability": null, + "name": "Red spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10084" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "100", + "examine": "Vambraces made from 100% real dragonhide. Now with added spikiness.", + "grand_exchange_price": "2727", + "durability": null, + "name": "Black spiky vambs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10085", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,2,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2727", + "durability": null, + "name": "Black spiky vambs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10086" + }, + { + "ge_buy_limit": "5000", + "examine": "Attractive to other birds and hunters alike.", + "grand_exchange_price": "20", + "durability": null, + "name": "Stripy feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10087" + }, + { + "shop_price": "3", + "ge_buy_limit": "5000", + "examine": "A vivid red feather.", + "grand_exchange_price": "23", + "durability": null, + "name": "Red feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10088" + }, + { + "ge_buy_limit": "5000", + "examine": "A cool blue feather.", + "grand_exchange_price": "27", + "durability": null, + "name": "Blue feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10089" + }, + { + "ge_buy_limit": "5000", + "examine": "A bright yellow feather.", + "grand_exchange_price": "36", + "durability": null, + "name": "Yellow feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10090" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "A fairly plain feather.", + "grand_exchange_price": "25", + "durability": null, + "name": "Orange feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10091" + }, + { + "ge_buy_limit": "100", + "examine": "It's a shabby-looking larupia fur.", + "grand_exchange_price": "1195", + "durability": null, + "name": "Tatty larupia fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10093" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1195", + "durability": null, + "name": "Tatty larupia fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10094" + }, + { + "ge_buy_limit": "100", + "examine": "It's a perfect-looking larupia fur.", + "grand_exchange_price": "4986", + "durability": null, + "name": "Larupia fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10095" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4986", + "durability": null, + "name": "Larupia fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10096" + }, + { + "ge_buy_limit": "100", + "examine": "It's a shabby-looking graahk fur.", + "grand_exchange_price": "28", + "durability": null, + "name": "Tatty graahk fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10097" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28", + "durability": null, + "name": "Tatty graahk fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10098" + }, + { + "ge_buy_limit": "100", + "examine": "It's a perfect-looking graahk fur.", + "grand_exchange_price": "7574", + "durability": null, + "name": "Graahk fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10099" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7574", + "durability": null, + "name": "Graahk fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10100" + }, + { + "ge_buy_limit": "100", + "examine": "It's a shabby-looking kyatt fur.", + "grand_exchange_price": "23", + "durability": null, + "name": "Tatty kyatt fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10101" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "23", + "durability": null, + "name": "Tatty kyatt fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10102" + }, + { + "shop_price": "8000", + "ge_buy_limit": "100", + "examine": "It's a perfect-looking kyatt fur.", + "grand_exchange_price": "11100", + "durability": null, + "name": "Kyatt fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10103" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "11100", + "durability": null, + "name": "Kyatt fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10104" + }, + { + "ge_buy_limit": "5000", + "examine": "These bone spikes are both very tough and very sharp.", + "grand_exchange_price": "154", + "durability": null, + "name": "Kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10105" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "154", + "durability": null, + "name": "Kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10106" + }, + { + "ge_buy_limit": "5000", + "examine": "These bone spikes are both very tough and very sharp.", + "grand_exchange_price": "1619", + "durability": null, + "name": "Long kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10107" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1619", + "durability": null, + "name": "Long kebbit spike", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10108" + }, + { + "ge_buy_limit": "5000", + "examine": "A kebbit-sized set of dentures.", + "grand_exchange_price": "894", + "durability": null, + "name": "Kebbit teeth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10109" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "894", + "durability": null, + "name": "Kebbit teeth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10110" + }, + { + "ge_buy_limit": "5000", + "examine": "Previously a kebbit-sized set of dentures.", + "grand_exchange_price": "947", + "durability": null, + "name": "Kebbit teeth dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10111" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "947", + "durability": null, + "name": "Kebbit teeth dust", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10112" + }, + { + "ge_buy_limit": "5000", + "examine": "More menacing when attached to the owner.", + "grand_exchange_price": "55", + "durability": null, + "name": "Kebbit claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10113" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "55", + "durability": null, + "name": "Kebbit claws", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10114" + }, + { + "ge_buy_limit": "100", + "examine": "Sleek, silent, and furry.", + "grand_exchange_price": "92", + "durability": null, + "name": "Dark kebbit fur", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10115" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "92", + "durability": null, + "name": "Dark kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10116" + }, + { + "shop_price": "12", + "ge_buy_limit": "175", + "examine": "A thick fur for a cold climate.", + "grand_exchange_price": "3862", + "durability": null, + "name": "Polar kebbit fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10117" + }, + { + "ge_buy_limit": "175", + "grand_exchange_price": "3862", + "durability": null, + "name": "Polar kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10118" + }, + { + "ge_buy_limit": "100", + "examine": "Not actually from a weasel, but it is, at least, furry.", + "grand_exchange_price": "3", + "durability": null, + "name": "Feldip weasel fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10119" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3", + "durability": null, + "name": "Feldip weasel fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10120" + }, + { + "ge_buy_limit": "100", + "examine": "Common fur from a common kebbit.", + "grand_exchange_price": "1555", + "durability": null, + "name": "Common kebbit fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10121" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1555", + "durability": null, + "name": "Common kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10122" + }, + { + "ge_buy_limit": "100", + "examine": "Sandy coloured kebbit fur.", + "grand_exchange_price": "95", + "durability": null, + "name": "Desert devil fur", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10123" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "95", + "durability": null, + "name": "Desert devil fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10124" + }, + { + "ge_buy_limit": "100", + "examine": "Maybe this is why people think furry dice make you go faster.", + "grand_exchange_price": "8", + "durability": null, + "name": "Spotted kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10125" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8", + "durability": null, + "name": "Spotted kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10126" + }, + { + "ge_buy_limit": "100", + "examine": "Nature's equivalent of go-faster stripes.", + "grand_exchange_price": "69", + "durability": null, + "name": "Dashing kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10127" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "69", + "durability": null, + "name": "Dashing kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10128" + }, + { + "requirements": "{10,35}", + "ge_buy_limit": "100", + "examine": "A mighty Hunter weapon. One previous owner.", + "durability": null, + "weight": "1.3", + "attack_speed": "5", + "weapon_interface": "5", + "equipment_slot": "3", + "grand_exchange_price": "19", + "name": "Barb-tail harpoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10129", + "bonuses": "9,4,-4,0,0,0,0,0,0,0,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "19", + "durability": null, + "name": "Barb-tail harpoon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10130" + }, + { + "requirements": "{21,24}", + "ge_buy_limit": "100", + "examine": "Not so lucky for the rabbit.", + "grand_exchange_price": "789", + "durability": null, + "name": "Strung rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10132", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "789", + "durability": null, + "name": "Strung rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10133" + }, + { + "ge_buy_limit": "100", + "examine": "This could be put on a string and worn for luck.", + "grand_exchange_price": "543", + "durability": null, + "name": "Rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10134" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "543", + "durability": null, + "name": "Rabbit foot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10135" + }, + { + "shop_price": "48", + "ge_buy_limit": "10000", + "examine": "Well, this would certainly add some colour to a meal.", + "grand_exchange_price": "99", + "durability": null, + "name": "Rainbow fish", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10136" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "99", + "durability": null, + "name": "Rainbow fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10137" + }, + { + "ge_buy_limit": "20000", + "examine": "A colourful fish, attracted to colourful flies.", + "grand_exchange_price": "236", + "durability": null, + "name": "Raw rainbow fish", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10138" + }, + { + "ge_buy_limit": "20000", + "grand_exchange_price": "236", + "durability": null, + "name": "Raw rainbow fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10139" + }, + { + "durability": null, + "name": "Burnt rainbow fish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10141" + }, + { + "requirements": "{0,30}-{4,30}-{6,30}", + "ge_buy_limit": "10000", + "examine": "A thick, foul-smelling, tar-like substance with a green tinge", + "grand_exchange_price": "28", + "durability": null, + "name": "Guam tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10142", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,16", + "equipment_slot": "13" + }, + { + "requirements": "{0,50}-{4,50}-{6,50}", + "ge_buy_limit": "10000", + "examine": "A thick, foul-smelling, tar-like substance with an orange tinge.", + "grand_exchange_price": "12", + "durability": null, + "name": "Marrentill tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10143", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,22", + "equipment_slot": "13" + }, + { + "requirements": "{0,60}-{4,60}-{6,60}", + "ge_buy_limit": "10000", + "examine": "A thick, foul-smelling, tar-like substance with a red tinge.", + "grand_exchange_price": "28", + "durability": null, + "name": "Tarromin tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10144", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,31", + "equipment_slot": "13" + }, + { + "requirements": "{0,70}-{4,70}-{6,70}", + "ge_buy_limit": "10000", + "examine": "A dark, thick, foul-smelling, tar-like substance.", + "grand_exchange_price": "47", + "durability": null, + "name": "Harralander tar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10145", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,49", + "equipment_slot": "13" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "5245", + "examine": "Slightly slimy, but kind of cute.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "6", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10146", + "stand_turn_anim": "823", + "bonuses": "0,19,0,0,29,0,0,0,0,0,0,31,0,0,0", + "requirements": "{0,50}-{4,50}-{6,50}", + "shop_price": "127", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Orange salamander" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "5245", + "examine": "Slightly slimy but certainly striking.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "27", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10147", + "stand_turn_anim": "823", + "bonuses": "0,37,0,0,47,0,0,0,0,0,0,49,0,0,0", + "requirements": "{0,60}-{4,60}-{6,60}", + "shop_price": "190", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Red salamander" + }, + { + "ge_buy_limit": "1000", + "turn90cw_anim": "5245", + "examine": "Slightly slimy and somewhat menacing.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "124", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10148", + "stand_turn_anim": "823", + "bonuses": "0,59,0,0,69,0,0,0,0,0,0,71,0,0,0", + "requirements": "{0,70}-{4,70}-{6,70}", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Black salamander" + }, + { + "ge_buy_limit": "2000", + "turn90cw_anim": "5245", + "examine": "A very slimy and generally disgusting green lizard.", + "walk_anim": "5245", + "turn90ccw_anim": "5245", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "5245", + "equipment_slot": "3", + "grand_exchange_price": "1802", + "stand_anim": "5246", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10149", + "stand_turn_anim": "823", + "bonuses": "0,10,0,0,20,0,0,0,0,0,0,22,0,0,0", + "requirements": "{0,30}-{4,30}-{6,30}", + "durability": null, + "destroy": "true", + "weight": "4", + "weapon_interface": "21", + "equip_audio": "732", + "render_anim": "1277", + "attack_audios": "740,735,736,0", + "name": "Swamp lizard" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A noose on a stick.", + "walk_anim": "5250", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "14", + "turn180_anim": "5251", + "render_anim": "1279", + "equipment_slot": "3", + "grand_exchange_price": "1", + "stand_anim": "5254", + "name": "Noose wand", + "tradeable": "true", + "run_anim": "5253", + "archery_ticket_price": "0", + "id": "10150", + "stand_turn_anim": "5252" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1", + "durability": null, + "name": "Noose wand", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10151" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "100", + "shop_price": "1300", + "turn90cw_anim": "821", + "examine": "A weapon made of bone and wood.", + "walk_anim": "4226", + "durability": null, + "weight": "5", + "turn90ccw_anim": "822", + "attack_speed": "4", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "grand_exchange_price": "2496", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "tradeable": "true", + "name": "Hunters' crossbow", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "10156", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,55,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2496", + "durability": null, + "name": "Hunters' crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10157" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "1000", + "examine": "Bolts made from the spikes of a prickly kebbit.", + "grand_exchange_price": "28", + "durability": null, + "name": "Kebbit bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10158", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,28", + "equipment_slot": "13" + }, + { + "requirements": "{4,50}", + "ge_buy_limit": "1000", + "examine": "Bolts made from the spikes of a razor-backed kebbit.", + "grand_exchange_price": "352", + "durability": null, + "name": "Long kebbit bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10159", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,38", + "equipment_slot": "13" + }, + { + "durability": null, + "name": "Orange salamander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10160" + }, + { + "durability": null, + "name": "Red salamander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10161" + }, + { + "durability": null, + "name": "Black salamander", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10162" + }, + { + "durability": null, + "name": "Swamp lizard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10163" + }, + { + "examine": "Probably a bit too big for fly fishing.", + "durability": null, + "name": "Eagle feather", + "archery_ticket_price": "0", + "id": "10167" + }, + { + "examine": "A cape made from giant eagle feathers.", + "durability": null, + "name": "Eagle cape", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10171", + "equipment_slot": "1" + }, + { + "examine": "A cheaply made fake beak.", + "durability": null, + "name": "Fake beak", + "archery_ticket_price": "0", + "id": "10172", + "equipment_slot": "0" + }, + { + "examine": "The title reads 'William Oddity's Guide to the Avian.", + "durability": null, + "name": "Bird book", + "archery_ticket_price": "0", + "id": "10173" + }, + { + "destroy_message": "You can obtain another metal feather from the camp", + "examine": "A small feather made out of some sort of metal. The detail is exquisite.", + "durability": null, + "name": "Metal feather", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10174" + }, + { + "destroy_message": "You can get another by inspecting the opening", + "examine": "An intricate feather crafted from a silver-coloured metal of some sort.", + "durability": null, + "name": "Silver feather", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10176" + }, + { + "destroy_message": "You can get another by taking from pedestal.", + "examine": "An intricate feather crafted from a bronze-coloured metal of some sort.", + "durability": null, + "name": "Bronze feather", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10177" + }, + { + "examine": "\"It looks like bird seed, but it's not quite right somehow.", + "durability": null, + "name": "Odd bird seed", + "archery_ticket_price": "0", + "id": "10178" + }, + { + "examine": "There's a feather glued to the front. \"Property of Arthur Artimus\".", + "durability": null, + "name": "Feathered journal", + "archery_ticket_price": "0", + "id": "10179" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10180" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10181" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10182" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10183" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10184" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10185" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10186" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10187" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10188" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10189" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10190" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10191" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10192" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10193" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10194" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10195" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10196" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10197" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10198" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10199" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10200" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10201" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10202" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10203" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10204" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10205" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10206" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10207" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10208" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10209" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10210" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10211" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10212" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10213" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10214" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10215" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10216" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10217" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10218" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10219" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10220" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10221" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10222" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10223" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10224" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10225" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10226" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10227" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10228" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10229" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10230" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10231" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10232" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10233" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10234" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10235" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10236" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10237" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10238" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10239" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10240" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10241" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10242" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10243" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10244" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10245" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10246" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10247" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10248" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10249" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10250" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10251" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10252" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10253" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10254" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10255" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10256" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10257" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10258" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10259" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10260" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10261" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10262" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10263" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10264" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10265" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10266" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10267" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10268" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10269" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10270" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10271" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10272" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10273" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10274" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10275" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10276" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10277" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10278" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10279" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A powerful bow made from willow.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "equipment_slot": "3", + "grand_exchange_price": "136", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10280", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,22,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,20}", + "durability": null, + "weight": "1.8", + "weapon_interface": "16", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Willow comp bow" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "136", + "durability": null, + "name": "Willow comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10281" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A powerful bow made from yew wood.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "equipment_slot": "3", + "grand_exchange_price": "876", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10282", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,49,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,40}", + "durability": null, + "weight": "1.8", + "weapon_interface": "16", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Yew comp bow" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "876", + "durability": null, + "name": "Yew comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10283" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A powerful bow made from magic wood.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "two_handed": "true", + "turn180_anim": "1206", + "equipment_slot": "3", + "grand_exchange_price": "1268", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10284", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,71,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,50}", + "durability": null, + "weight": "1.3", + "weapon_interface": "16", + "render_anim": "28", + "lendable": "true", + "attack_audios": "2700,0,0,0", + "name": "Magic comp bow" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1268", + "durability": null, + "name": "Magic comp bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10285" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "23600", + "name": "Rune helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10286", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "23600", + "durability": null, + "name": "Rune helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10287" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "20800", + "name": "Rune helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10288", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20800", + "durability": null, + "name": "Rune helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10289" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "4", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "20800", + "name": "Rune helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10290", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20800", + "durability": null, + "name": "Rune helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10291" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "21100", + "name": "Rune helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10292", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "21100", + "durability": null, + "name": "Rune helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10293" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "A rune helmet with a heraldic design.", + "durability": null, + "weight": "2", + "absorb": "1,0,3", + "equipment_slot": "0", + "grand_exchange_price": "24900", + "name": "Rune helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10294", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "24900", + "durability": null, + "name": "Rune helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10295" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "31500", + "name": "Adamant helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10296", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "31500", + "durability": null, + "name": "Adamant helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10297" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "10100", + "name": "Adamant helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10298", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10100", + "durability": null, + "name": "Adamant helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10299" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "8797", + "name": "Adamant helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10300", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8797", + "durability": null, + "name": "Adamant helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10301" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An Adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "10900", + "name": "Adamant helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10302", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10900", + "durability": null, + "name": "Adamant helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10303" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "17100", + "name": "Adamant helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10304", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "17100", + "durability": null, + "name": "Adamant helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10305" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "20400", + "name": "Black helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10306", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20400", + "durability": null, + "name": "Black helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10307" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "7033", + "name": "Black helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10308", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7033", + "durability": null, + "name": "Black helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10309" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "7574", + "name": "Black helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10310", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7574", + "durability": null, + "name": "Black helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10311" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "10100", + "name": "Black helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10312", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10100", + "durability": null, + "name": "Black helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10313" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "ge_buy_limit": "2", + "examine": "A black helmet with a heraldic design.", + "durability": null, + "weight": "1.8", + "equipment_slot": "0", + "grand_exchange_price": "10400", + "name": "Black helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10314", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,4,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10400", + "durability": null, + "name": "Black helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10315" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "8196", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10316", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8196", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10317" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "14700", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10318", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14700", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10319" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "8403", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10320", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8403", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10321" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "9230", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10322", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "9230", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10323" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "See table", + "grand_exchange_price": "8197", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10324", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8197", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10325" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "112", + "durability": null, + "name": "Purple firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10326" + }, + { + "ge_buy_limit": "100", + "examine": "Makes firelighting a lot easier.", + "grand_exchange_price": "167", + "durability": null, + "name": "White firelighter", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10327" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "White logs", + "archery_ticket_price": "0", + "id": "10328" + }, + { + "examine": "A number of chemical covered wooden logs.", + "durability": null, + "name": "Purple logs", + "archery_ticket_price": "0", + "id": "10329" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "4", + "absorb": "0,6,3", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "33900000", + "name": "3rd age range top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10330", + "bonuses": "0,0,0,-15,30,55,47,60,60,55,52,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "33900000", + "durability": null, + "name": "3rd age range top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10331" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "6", + "absorb": "0,4,2", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "20800000", + "name": "3rd age range legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10332", + "bonuses": "0,0,0,-10,17,31,25,33,30,31,25,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20800000", + "durability": null, + "name": "3rd age range legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10333" + }, + { + "remove_head": "true", + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "5000", + "examine": "Ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "6100000", + "name": "3rd age range coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10334", + "bonuses": "0,0,0,-2,9,4,7,10,5,8,12,0,0,0,0" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "6100000", + "durability": null, + "name": "3rd age range coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10335" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "durability": null, + "weight": "1", + "equipment_slot": "9", + "lendable": "true", + "grand_exchange_price": "7100000", + "name": "3rd age vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10336", + "bonuses": "0,0,0,-10,11,6,5,7,9,0,5,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7100000", + "durability": null, + "name": "3rd age vambraces", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10337" + }, + { + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "durability": null, + "weight": "2.5", + "absorb": "4,2,0", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "66500000", + "name": "3rd age robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10338", + "bonuses": "0,0,0,24,0,0,0,0,24,0,24,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "66500000", + "durability": null, + "name": "3rd age robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10339" + }, + { + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "durability": null, + "weight": "1", + "absorb": "4,2,0", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "31500000", + "name": "3rd age robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10340", + "bonuses": "0,0,0,19,0,0,0,0,19,0,20,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "31500000", + "durability": null, + "name": "3rd age robe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10341" + }, + { + "remove_head": "true", + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "durability": null, + "absorb": "2,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21000000", + "name": "3rd age mage hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10342", + "bonuses": "0,0,0,8,0,0,0,0,8,0,12,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "21000000", + "durability": null, + "name": "3rd age mage hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10343" + }, + { + "lendable": "true", + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "20100000", + "durability": null, + "name": "3rd age amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10344", + "bonuses": "0,0,0,15,0,0,0,0,10,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "20100000", + "durability": null, + "name": "3rd age amulet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10345" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "2", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "92800000", + "name": "3rd age platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10346", + "bonuses": "0,0,0,-25,-2,78,76,83,-5,75,25,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "92800000", + "durability": null, + "name": "3rd age platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10347" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "9", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "86200000", + "name": "3rd age platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10348", + "bonuses": "0,0,0,-20,0,96,108,113,-4,97,52,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "86200000", + "durability": null, + "name": "3rd age platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10349" + }, + { + "remove_head": "true", + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "1", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "41600000", + "name": "3rd age full helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10350", + "bonuses": "0,0,0,-5,-2,47,49,43,-3,48,12,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "41600000", + "durability": null, + "name": "3rd age full helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10351" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Ancient armour beaten from magical silver.", + "durability": null, + "weight": "2", + "absorb": "5,0,11", + "equipment_slot": "5", + "lendable": "true", + "grand_exchange_price": "65100000", + "name": "3rd age kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10352", + "bonuses": "0,0,0,-10,-4,63,65,61,-3,63,60,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "65100000", + "durability": null, + "name": "3rd age kiteshield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10353" + }, + { + "ge_buy_limit": "100", + "examine": "A dragonstone amulet with 4 magic charges.", + "grand_exchange_price": "233100", + "durability": null, + "name": "Amulet of glory(t4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10354", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "233100", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10355" + }, + { + "examine": "A dragonstone amulet with 3 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10356", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10357" + }, + { + "examine": "A dragonstone amulet with 2 magic charges.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10358", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10359" + }, + { + "examine": "A dragonstone amulet with 1 magic charge.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10360", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10361" + }, + { + "ge_buy_limit": "100", + "examine": "A very powerful dragonstone amulet with a nice trim.", + "grand_exchange_price": "223000", + "durability": null, + "name": "Amulet of glory(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10362", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "223000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Amulet of glory(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10363" + }, + { + "ge_buy_limit": "2", + "examine": "An enchanted ruby amulet with a nice trim.", + "grand_exchange_price": "819400", + "durability": null, + "name": "Strength amulet(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10364", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,10,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "819400", + "durability": null, + "name": "Strength amulet(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10365" + }, + { + "ge_buy_limit": "5000", + "examine": "An enchanted sapphire amulet of magic.", + "grand_exchange_price": "128700", + "durability": null, + "name": "Amulet of magic(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10366", + "bonuses": "0,0,0,10,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "128700", + "durability": null, + "name": "Amulet of magic(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10367" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide vambraces.", + "grand_exchange_price": "116200", + "durability": null, + "name": "Zamorak bracers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10368", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "116200", + "durability": null, + "name": "Zamorak bracers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10369" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide body armour.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "155200", + "name": "Zamorak d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10370", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "155200", + "durability": null, + "name": "Zamorak d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10371" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide chaps.", + "durability": null, + "weight": "5", + "absorb": "0,4,2", + "equipment_slot": "7", + "grand_exchange_price": "35100", + "name": "Zamorak chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10372", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "35100", + "durability": null, + "name": "Zamorak chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10373" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Zamorak blessed dragonhide coif.", + "durability": null, + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "35900", + "name": "Zamorak coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10374", + "bonuses": "0,0,0,-1,7,4,7,10,4,8,8,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "35900", + "durability": null, + "name": "Zamorak coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10375" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide vambraces.", + "grand_exchange_price": "3181", + "durability": null, + "name": "Guthix bracers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10376", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3181", + "durability": null, + "name": "Guthix bracers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10377" + }, + { + "requirements": "{1,40}-{4,70}", + "shop_price": "13", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide body armour.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "39800", + "name": "Guthix dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10378", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "39800", + "durability": null, + "name": "Guthix dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10379" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide chaps.", + "durability": null, + "weight": "5", + "absorb": "0,4,2", + "equipment_slot": "7", + "grand_exchange_price": "7346", + "name": "Guthix chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10380", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7346", + "durability": null, + "name": "Guthix chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10381" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Guthix blessed dragonhide coif.", + "durability": null, + "weight": "0.85", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "27500", + "name": "Guthix coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10382", + "bonuses": "0,0,0,-1,7,4,7,10,4,8,8,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "27500", + "durability": null, + "name": "Guthix coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10383" + }, + { + "requirements": "{1,70}-{4,40}", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide vambraces.", + "grand_exchange_price": "70800", + "durability": null, + "name": "Saradomin bracers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10384", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "70800", + "durability": null, + "name": "Saradomin bracers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10385" + }, + { + "requirements": "{1,40}-{4,70}", + "shop_price": "13000", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide body armour.", + "durability": null, + "destroy": "true", + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "164100", + "name": "Saradomin d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10386", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "164100", + "durability": null, + "name": "Saradomin d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10387" + }, + { + "requirements": "{4,70}", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide chaps.", + "grand_exchange_price": "36600", + "durability": null, + "name": "Saradomin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10388", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36600", + "durability": null, + "name": "Saradomin chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10389" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Saradomin blessed dragonhide coif.", + "durability": null, + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "28000", + "name": "Saradomin coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10390", + "bonuses": "0,0,0,-1,7,4,7,10,4,8,8,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "28000", + "durability": null, + "name": "Saradomin coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10391" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A big 'do about nothing.", + "grand_exchange_price": "45400", + "durability": null, + "name": "A powdered wig", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10392", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "45400", + "durability": null, + "name": "A powdered wig", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10393" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "These'll help me stay alive.", + "grand_exchange_price": "448900", + "durability": null, + "name": "Flared trousers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10394", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "448900", + "durability": null, + "name": "Flared trousers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10395" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Alas, someone has slashed my pantaloons.", + "grand_exchange_price": "9863", + "durability": null, + "name": "Pantaloons", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10396", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "9863", + "durability": null, + "name": "Pantaloons", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10397" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "A cap for wearing whil...zzzzzzzzz", + "grand_exchange_price": "276400", + "durability": null, + "name": "Sleeping cap", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10398", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "276400", + "durability": null, + "name": "Sleeping cap", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10399" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant mans' black shirt.", + "grand_exchange_price": "921500", + "durability": null, + "name": "Black ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10400", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "921500", + "durability": null, + "name": "Black ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10401" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant black pair of pantaloons.", + "grand_exchange_price": "270700", + "durability": null, + "name": "Black ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10402", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "270700", + "durability": null, + "name": "Black ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10403" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant men's red shirt.", + "grand_exchange_price": "118600", + "durability": null, + "name": "Red ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10404", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "118600", + "durability": null, + "name": "Red ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10405" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant red pair of pantaloons.", + "grand_exchange_price": "39400", + "durability": null, + "name": "Red ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10406", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "39400", + "durability": null, + "name": "Red ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10407" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant mans' blue shirt.", + "grand_exchange_price": "134700", + "durability": null, + "name": "Blue ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10408", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "134700", + "durability": null, + "name": "Blue ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10409" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant pair of men's blue pantaloons", + "grand_exchange_price": "80700", + "durability": null, + "name": "Blue ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10410", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "80700", + "durability": null, + "name": "Blue ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10411" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant men's green shirt.", + "grand_exchange_price": "162600", + "durability": null, + "name": "Green ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10412", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "162600", + "durability": null, + "name": "Green ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10413" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant green pair of men's pantaloons.", + "grand_exchange_price": "36100", + "durability": null, + "name": "Green ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10414", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "36100", + "durability": null, + "name": "Green ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10415" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant men's purple shirt.", + "grand_exchange_price": "116200", + "durability": null, + "name": "Purple ele' shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10416", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "116200", + "durability": null, + "name": "Purple ele' shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10417" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant purple pair of pantaloons.", + "grand_exchange_price": "73400", + "durability": null, + "name": "Purple ele' legs", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10418", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "73400", + "durability": null, + "name": "Purple ele' legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10419" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made ladies' elegant white blouse.", + "grand_exchange_price": "571500", + "durability": null, + "name": "White ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10420", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "571500", + "durability": null, + "name": "White ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10421" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant white skirt.", + "grand_exchange_price": "56600", + "durability": null, + "name": "White ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10422", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "56600", + "durability": null, + "name": "White ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10423" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant ladies' red blouse.", + "grand_exchange_price": "15000", + "durability": null, + "name": "Red ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10424", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "15000", + "durability": null, + "name": "Red ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10425" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant Red skirt.", + "grand_exchange_price": "7132", + "durability": null, + "name": "Red ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10426", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "7132", + "durability": null, + "name": "Red ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10427" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made ladies' elegant blue blouse.", + "grand_exchange_price": "22200", + "durability": null, + "name": "Blue ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10428", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "22200", + "durability": null, + "name": "Blue ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10429" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant blue skirt.", + "grand_exchange_price": "12200", + "durability": null, + "name": "Blue ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10430", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "12200", + "durability": null, + "name": "Blue ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10431" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made ladies' elegant green blouse.", + "grand_exchange_price": "12300", + "durability": null, + "name": "Green ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10432", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "12300", + "durability": null, + "name": "Green ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10433" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant green skirt.", + "grand_exchange_price": "10300", + "durability": null, + "name": "Green ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10434", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "10300", + "durability": null, + "name": "Green ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10435" + }, + { + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "A well made elegant ladies' purple blouse.", + "grand_exchange_price": "22800", + "durability": null, + "name": "Purple ele' blouse", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10436", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "22800", + "durability": null, + "name": "Purple ele' blouse", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10437" + }, + { + "ge_buy_limit": "2", + "examine": "A rather elegant purple skirt.", + "grand_exchange_price": "16700", + "durability": null, + "name": "Purple ele' skirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10438", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "16700", + "durability": null, + "name": "Purple ele' skirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10439" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A Saradomin crozier.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "8611", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10440", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,6,0,0", + "requirements": "{5,60}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Saradomin crozier" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "8611", + "durability": null, + "name": "Saradomin crozier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10441" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A Guthix crozier.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "2925", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10442", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,6,0,0", + "requirements": "{5,60}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Guthix crozier" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2925", + "durability": null, + "name": "Guthix crozier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10443" + }, + { + "ge_buy_limit": "2", + "turn90cw_anim": "1207", + "examine": "A Zamorak crozier.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "2794", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "10444", + "stand_turn_anim": "1209", + "bonuses": "7,-1,25,10,0,2,3,1,10,0,0,32,6,0,0", + "requirements": "{5,60}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Zamorak crozier" + }, + { + "attack_anims": "", + "ge_buy_limit": "2", + "grand_exchange_price": "2794", + "durability": null, + "name": "Zamorak crozier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10445" + }, + { + "requirements": "{5,40}", + "ge_buy_limit": "2", + "examine": "A Saradomin cloak.", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Saradomin cloak", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10446", + "bonuses": "0,0,0,1,0,3,3,3,3,3,3,0,3,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Saradomin cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10447" + }, + { + "requirements": "{5,40}", + "ge_buy_limit": "2", + "examine": "A Guthix cloak.", + "grand_exchange_price": "391000", + "durability": null, + "name": "Guthix cloak", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10448", + "bonuses": "0,0,0,1,0,3,3,3,3,3,3,0,3,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "391000", + "durability": null, + "name": "Guthix cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10449" + }, + { + "requirements": "{5,40}", + "ge_buy_limit": "2", + "examine": "A Zamorak cloak.", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Zamorak cloak", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10450", + "bonuses": "0,0,0,1,0,3,3,3,3,3,3,0,3,0,0", + "equipment_slot": "1" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Zamorak cloak", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10451" + }, + { + "remove_head": "true", + "requirements": "{5,40}-{6,40}", + "ge_buy_limit": "2", + "examine": "A Saradomin mitre.", + "grand_exchange_price": "299200", + "durability": null, + "name": "Saradomin mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10452", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,5,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "299200", + "durability": null, + "name": "Saradomin mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10453" + }, + { + "remove_head": "true", + "requirements": "{5,40}-{6,40}", + "ge_buy_limit": "2", + "examine": "A Guthix mitre.", + "grand_exchange_price": "130300", + "durability": null, + "name": "Guthix mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10454", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,5,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "130300", + "durability": null, + "name": "Guthix mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10455" + }, + { + "remove_head": "true", + "requirements": "{5,40}-{6,40}", + "ge_buy_limit": "2", + "examine": "A Zamorak mitre.", + "durability": null, + "weight": "0.3", + "equipment_slot": "0", + "grand_exchange_price": "346500", + "name": "Zamorak mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10456", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,5,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "346500", + "durability": null, + "name": "Zamorak mitre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10457" + }, + { + "requirements": "{5,20}", + "remove_sleeves": "true", + "ge_buy_limit": "2", + "examine": "Blessed vestments of Saradomin.", + "grand_exchange_price": "121400", + "durability": null, + "name": "Saradomin robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10458", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "121400", + "durability": null, + "name": "Saradomin robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10459" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Zamorak Vestments.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "154700", + "name": "Zamorak robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10460", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "154700", + "durability": null, + "name": "Zamorak robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10461" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Blessed vestments of Guthix.", + "durability": null, + "weight": "1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "75200", + "name": "Guthix robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10462", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "75200", + "durability": null, + "name": "Guthix robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10463" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Leggings from the Saradomin Vestments.", + "grand_exchange_price": "56300", + "durability": null, + "name": "Saradomin robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10464", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "56300", + "durability": null, + "name": "Saradomin robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10465" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Leggings from the Guthix Vestments.", + "grand_exchange_price": "56900", + "durability": null, + "name": "Guthix robe legs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10466", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "56900", + "durability": null, + "name": "Guthix robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10467" + }, + { + "requirements": "{5,20}", + "ge_buy_limit": "2", + "examine": "Legs of the Zamorak Vestments.", + "grand_exchange_price": "79400", + "durability": null, + "name": "Zamorak robe legs", + "tradeable": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "10468", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,4,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "79400", + "durability": null, + "name": "Zamorak robe legs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10469" + }, + { + "requirements": "{5,60}", + "ge_buy_limit": "2", + "examine": "A Saradomin stole.", + "grand_exchange_price": "14000", + "durability": null, + "name": "Saradomin stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10470", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,10,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14000", + "durability": null, + "name": "Saradomin stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10471" + }, + { + "requirements": "{5,60}", + "ge_buy_limit": "2", + "examine": "A blessed stole.", + "grand_exchange_price": "3849", + "durability": null, + "name": "Guthix stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10472", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,10,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3849", + "durability": null, + "name": "Guthix stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10473" + }, + { + "requirements": "{5,60}", + "ge_buy_limit": "2", + "examine": "A Zamorak stole.", + "grand_exchange_price": "13700", + "durability": null, + "name": "Zamorak stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10474", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,10,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "13700", + "durability": null, + "name": "Zamorak stole", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10475" + }, + { + "ge_buy_limit": "1000", + "examine": "Remember to brush after eating!", + "grand_exchange_price": "22700", + "durability": null, + "name": "Purple sweets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10476" + }, + { + "durability": null, + "name": "Scroll", + "archery_ticket_price": "0", + "id": "10485", + "equipment_slot": "3" + }, + { + "shop_price": "1", + "examine": "An empty sack.", + "grand_exchange_price": "30", + "durability": null, + "name": "Empty sack", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10486" + }, + { + "turn90cw_anim": "821", + "examine": "Yup, definitely a chicken...an undead chicken.", + "walk_anim": "5364", + "durability": null, + "turn90ccw_anim": "822", + "weapon_interface": "12", + "turn180_anim": "5438", + "equip_audio": "3277", + "render_anim": "1171", + "equipment_slot": "3", + "stand_anim": "5363", + "name": "Undead chicken", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10487", + "stand_turn_anim": "823", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "destroy_message": "The Witch in Draynor supplies these bars.", + "examine": "An iron bar supplied by an insane old crone.", + "durability": null, + "name": "Selected iron", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10488", + "equipment_slot": "3" + }, + { + "destroy_message": "I can make another magnet using special bars. The Witch in Draynor supplies these bars.", + "examine": "A magnet designed for undead chicken use.", + "durability": null, + "name": "Bar magnet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10489" + }, + { + "destroy_message": "I can chop more wood from undead trees using my blessed axe.", + "examine": "Were they trying to escape just then?", + "durability": null, + "name": "Undead twigs", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10490" + }, + { + "examine": "It radiates purity but can still lop off heads.", + "durability": null, + "destroy": "true", + "weight": "1.1", + "attack_speed": "5", + "weapon_interface": "2", + "render_anim": "2586", + "equipment_slot": "3", + "destroy_message": "I can obtain a replacement axe from the Burthorpe Slayer Master.", + "name": "Blessed axe", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10491", + "bonuses": "-2,12,10,0,0,0,1,0,0,0,0,13,2,0,0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "These make no sense at all.", + "durability": null, + "name": "Research notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10492" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "They still make no sense, but look more meaningful now.", + "durability": null, + "name": "Translated notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10493" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Attach tab A to button B then fold along line C...", + "durability": null, + "name": "A pattern", + "archery_ticket_price": "0", + "id": "10494" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A desirable residence for discerning, undead chickens.", + "durability": null, + "name": "A container", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10495" + }, + { + "examine": "Shiny!", + "durability": null, + "name": "Polished buttons", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10496" + }, + { + "shop_price": "999", + "examine": "A bagged chicken ready to serve you, magnet in claw.", + "durability": null, + "destroy": "true", + "weight": "4.5", + "equip_audio": "3284", + "equipment_slot": "1", + "destroy_message": "I can buy a replacement from Ava in Draynor Manor; she will charge me 999 coins for this service.", + "name": "Ava's attractor", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10498", + "bonuses": "0,0,0,0,2,0,0,0,2,0,0,0,0,0,0" + }, + { + "shop_price": "999", + "examine": "A superior bagged chicken ready to serve you, magnet in claw.", + "durability": null, + "destroy": "true", + "weight": "4.5", + "equip_audio": "3284", + "equipment_slot": "1", + "destroy_message": "I can obtain a replacement for this from Ava in Draynor Manor. She will need 999 coins to buy the lower", + "name": "Ava's accumulator", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10499", + "bonuses": "0,0,0,0,4,0,1,0,4,0,0,0,0,0,0" + }, + { + "destroy_message": "I can obtain a replacement for this from the crone who lives west of the Port Phasmatys farm.", + "examine": "Allows the ghost farmer to talk to Alice - a breakthrough!", + "durability": null, + "name": "Crone-made amulet", + "tradeable": "false", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10500", + "equipment_slot": "2" + }, + { + "examine": "Made from snow. / It's a ball of snow! Uncanny. / How did this not melt in the box?", + "durability": null, + "name": "Snowball", + "archery_ticket_price": "0", + "id": "10501", + "weapon_interface": "18", + "bonuses": "0,0,0,0,10,0,0,0,0,0,0,0,0,0,1", + "equipment_slot": "3" + }, + { + "examine": "A gublinch frozen and crumbled into shards.", + "durability": null, + "name": "Gublinch shards", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "10506" + }, + { + "remove_head": "true", + "destroy_message": "You can reclaim this item from the place you found it. this item", + "examine": "A reindeer hat and a matching flashing nose.", + "durability": null, + "name": "Reindeer hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10507", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A wintumber tree for your player-owned house.", + "durability": null, + "name": "Wintumber tree", + "tradeable": "false", + "destroy": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "10508" + }, + { + "examine": "Made from snow. / It's a ball of snow! Uncanny. / How did this not melt in the box?", + "durability": null, + "name": "Snowball", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10509" + }, + { + "durability": null, + "name": "Snowball", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10510" + }, + { + "examine": "They're going to sing to you!", + "durability": null, + "name": "Zanaris choir", + "archery_ticket_price": "0", + "id": "10511" + }, + { + "destroy_message": "Unknown You can reclaim this item from the place you found it.", + "examine": "Some dry crackers.", + "durability": null, + "name": "Crackers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10513" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A block of tofu.", + "durability": null, + "name": "Tofu", + "archery_ticket_price": "0", + "id": "10514" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some meaty worms.", + "durability": null, + "name": "Worms", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10515" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10516" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10517" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10518" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10519" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Attacker horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10520" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10521" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10522" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10523" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10524" + }, + { + "examine": "A very small/small/medium-sized/large/very large collection bag.", + "durability": null, + "name": "Collection bag", + "archery_ticket_price": "0", + "id": "10525" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10526" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10527" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10528" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10529" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Healer horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10530" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Used to poison your enemies!", + "durability": null, + "name": "Green egg", + "archery_ticket_price": "0", + "id": "10531" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Will explode when fired.", + "durability": null, + "name": "Red egg", + "archery_ticket_price": "0", + "id": "10532" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Stun your foes!", + "durability": null, + "name": "Blue egg", + "archery_ticket_price": "0", + "id": "10533" + }, + { + "examine": "A yellow egg; it needs passing to the Healer to be poisoned!", + "durability": null, + "name": "Yellow egg", + "archery_ticket_price": "0", + "id": "10534" + }, + { + "examine": "A poisoned yellow egg; pass it to the Attacker for spikes to be added!", + "durability": null, + "name": "Poisoned egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10535" + }, + { + "examine": "A poisoned, spiky egg; pass to the defender for heating!", + "durability": null, + "name": "Spiked/pois. egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10536" + }, + { + "examine": "A heated, poisoned, spiky egg; pass to the Collector for loading.", + "durability": null, + "name": "Omega egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10537" + }, + { + "examine": "A horn to call others.", + "durability": null, + "name": "Defender horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10538" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some poisoned tofu.", + "durability": null, + "name": "Poisoned tofu", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10539" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some poisoned worms.", + "durability": null, + "name": "Poisoned worms", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10540" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A poisoned leg of meat.", + "durability": null, + "name": "Poisoned meat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10541" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(4)", + "archery_ticket_price": "0", + "id": "10542" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(3)", + "archery_ticket_price": "0", + "id": "10543" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(2)", + "archery_ticket_price": "0", + "id": "10544" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "durability": null, + "name": "Healing vial(1)", + "archery_ticket_price": "0", + "id": "10545" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A full healing vial.", + "durability": null, + "name": "Healing vial", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10546" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance Healer hat.", + "durability": null, + "name": "Healer hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "10547", + "absorb": "3,1,0", + "bonuses": "-5,-5,-5,7,-5,6,8,10,8,0,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance Fighter hat.", + "durability": null, + "name": "Fighter hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "10548", + "absorb": "1,0,3", + "bonuses": "5,5,5,-7,-7,30,32,28,-3,28,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance Runner hat.", + "durability": null, + "name": "Runner hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "10549", + "absorb": "1,0,3", + "bonuses": "0,0,0,0,0,30,32,27,1,30,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,40}", + "shop_price": "275", + "examine": "A Penance ranger hat.", + "durability": null, + "name": "Ranger hat", + "weight": "2", + "archery_ticket_price": "0", + "id": "10550", + "absorb": "0,3,1", + "bonuses": "-5,-5,-5,-5,7,7,10,11,5,9,7,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{1,40}", + "shop_price": "375", + "examine": "Penance Fighter torso armour.", + "durability": null, + "destroy": "true", + "weight": "4", + "absorb": "3,0,6", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Fighter torso", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10551", + "bonuses": "0,0,0,-30,0,66,85,62,-6,67,40,4,0,0,0" + }, + { + "requirements": "{1,40}", + "shop_price": "100", + "examine": "Boots made from a Penance Runner.", + "durability": null, + "name": "Runner boots", + "archery_ticket_price": "0", + "id": "10552", + "bonuses": "0,0,0,-3,-1,12,13,14,0,0,10,2,0,0,0", + "equipment_slot": "10" + }, + { + "requirements": "{1,40}", + "shop_price": "150", + "examine": "These gloves seem unbelievably light!", + "durability": null, + "name": "Penance gloves", + "weight": "-7", + "archery_ticket_price": "0", + "id": "10553", + "bonuses": "0,0,0,0,0,0,3,4,0,2,2,4,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,40}", + "shop_price": "150", + "examine": "These gloves seem unbelievably light!", + "durability": null, + "name": "Penance gloves", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "10554", + "bonuses": "0,0,0,0,0,0,3,4,0,2,2,4,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,40}", + "shop_price": "375", + "examine": "A skirt made from the skin of a Penance Ranger.", + "durability": null, + "name": "Penance skirt", + "weight": "3", + "archery_ticket_price": "0", + "id": "10555", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,16,26,21,28,19,27,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10556", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10557", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10558", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "10559", + "equipment_slot": "1" + }, + { + "examine": "A horn for communication with your team members.", + "durability": null, + "name": "Collector horn", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10560" + }, + { + "destroy_message": "You will have to ask Captain Cain for another.", + "shop_price": "160", + "examine": "A book about the Barbarian Assault Queen.", + "durability": null, + "name": "Queen help book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10562" + }, + { + "requirements": "{1,50}-{2,50}", + "shop_price": "95000", + "ge_buy_limit": "10", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "22.6", + "absorb": "4,0,8", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "126800", + "name": "Granite body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10564", + "bonuses": "0,0,0,-22,-5,87,84,79,-6,97,45,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "126800", + "durability": null, + "name": "Granite body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10565" + }, + { + "examine": "A cape of fire.", + "durability": null, + "name": "Fire cape", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10566", + "bonuses": "1,1,1,1,1,11,11,11,11,11,11,4,2,0,0", + "equipment_slot": "1" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10567", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10568" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10569", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10570" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10571", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10572" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10573", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10574" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10575", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10576" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10577", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10578" + }, + { + "examine": "Mabob.", + "grand_exchange_price": "2", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10579", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10580" + }, + { + "examine": "(Normal) A mystical-feeling dagger. (Poisoned) The twisted blade is covered with a nasty poison.", + "durability": null, + "destroy": "true", + "weight": "0.4", + "attack_speed": "4", + "weapon_interface": "5", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3", + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "name": "Keris", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10581", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0" + }, + { + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "durability": null, + "name": "Keris(p)", + "archery_ticket_price": "0", + "id": "10582", + "weapon_interface": "5", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "durability": null, + "name": "Keris(p+)", + "archery_ticket_price": "0", + "id": "10583", + "weapon_interface": "5", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "attack_anims": "376,376,377,376", + "destroy_message": "You can obtain another from Osman. You will then need to poison it.", + "durability": null, + "name": "Keris(p++)", + "archery_ticket_price": "0", + "id": "10584", + "weapon_interface": "5", + "bonuses": "40,20,-10,2,0,0,0,0,2,0,0,30,2,0,0", + "render_anim": "2584", + "defence_anim": "378", + "equipment_slot": "3" + }, + { + "destroy_message": "You can obtain a replacement lamp from the high priest in Sophanem.", + "examine": "A mystical lamp, engraved with scenes of carnage.", + "durability": null, + "name": "Combat lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10586" + }, + { + "destroy_message": "I got this diary in Tarn's Lair, perhaps I can get another one there.", + "examine": "Tarn Razorlor's diary.", + "durability": null, + "name": "Tarn's diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10587" + }, + { + "examine": "Increases the wearer's Strength and Attack by 20% when fighting the undead.", + "durability": null, + "name": "Salve amulet(e)", + "weight": "1", + "archery_ticket_price": "0", + "id": "10588", + "bonuses": "0,0,0,0,0,3,3,3,0,0,3,0,3,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "requirements": "{1,50}-{2,50}", + "ge_buy_limit": "10", + "examine": "A stone helmet.", + "durability": null, + "weight": "4", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "28000", + "name": "Granite helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10589", + "bonuses": "0,0,0,-9,-7,31,33,29,-1,39,9,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "28000", + "durability": null, + "name": "Granite helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10590" + }, + { + "examine": "A terrifying dog beast.", + "durability": null, + "name": "Terror dog", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "10591" + }, + { + "destroy_message": "You can make another with tanned leather and a mahogany plank.", + "examine": "Small drums.", + "durability": null, + "name": "Penguin bongos", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10592" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Every song needs a cowbell.", + "durability": null, + "name": "Cowbells", + "weight": "2", + "archery_ticket_price": "0", + "id": "10593" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A book about clockwork mechanisms.", + "durability": null, + "name": "Clockwork book", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10594" + }, + { + "destroy_message": "You'll have to make another one at your house. Speak to Larry to learn how to make one.", + "examine": "A clockwork penguin suit.", + "durability": null, + "name": "Clockwork suit", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10595" + }, + { + "destroy_message": "You'll have to make another one at your house. Speak to Larry to learn how to make one.", + "examine": "A clockwork penguin suit.", + "durability": null, + "name": "Clockwork suit", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10596" + }, + { + "destroy_message": "You will need to speak to Noodle to get another.", + "examine": "So you can be a penguin too!", + "durability": null, + "name": "Kgp id card", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10600" + }, + { + "shop_price": "15000", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10601", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "shop_price": "15000", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10602", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "shop_price": "15000", + "examine": "Blue: A magical hat. ", + "durability": null, + "weight": "0.4", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "1", + "name": "Mystic hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10603", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Make your foes cower by wearing a skull as a helmet!", + "durability": null, + "weight": "1.3", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "25569", + "name": "Skeletal helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10604", + "bonuses": "0,0,0,2,-2,10,9,11,3,0,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "examine": "Mystical robes.", + "grand_exchange_price": "3932123", + "durability": null, + "name": "Infinity top", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "10605", + "absorb": "3,1,0", + "bonuses": "0,0,0,22,0,0,0,0,22,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "lendable": "true", + "examine": "A wooden helmet.", + "grand_exchange_price": "5623", + "durability": null, + "name": "Splitbark helm", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10606", + "absorb": "3,1,0", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "They seem to be not quite of this world...", + "durability": null, + "name": "Ghostly boots", + "archery_ticket_price": "0", + "id": "10607", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "1000", + "examine": "A mystical hat.", + "durability": null, + "name": "Moonclan hat", + "weight": "1", + "archery_ticket_price": "0", + "id": "10608", + "bonuses": "0,0,0,3,-5,3,3,3,3,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "10609", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "durability": null, + "name": "Decorative armour", + "archery_ticket_price": "0", + "id": "10610", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "250", + "examine": "Torso armour from the order of the Void Knights.", + "durability": null, + "name": "Void knight top", + "tradeable": "false", + "weight": "6.5", + "archery_ticket_price": "0", + "id": "10611", + "bonuses": "0,0,0,0,0,40,40,40,40,40,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "examine": "Black banded leather armour, a rogue's dream!", + "durability": null, + "name": "Rogue mask", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "10612", + "bonuses": "0,0,0,0,0,5,5,5,5,5,0,0,0,0,0", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Protective headwear made from crabs. Better than it sounds.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "24661", + "name": "Rock-shell helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10613", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A helm fit for any Fremennik ranger.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "35640", + "name": "Spined helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10614", + "bonuses": "-6,-6,-6,-6,6,6,6,6,6,0,0,0,0,0,0" + }, + { + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1021", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10615", + "equipment_slot": "0" + }, + { + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1021", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10616", + "equipment_slot": "0" + }, + { + "examine": "A ceremonial wooden mask.", + "grand_exchange_price": "1021", + "durability": null, + "name": "Tribal mask", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10617", + "equipment_slot": "0" + }, + { + "shop_price": "3840", + "examine": "Provides excellent protection.", + "durability": null, + "weight": "9.9", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "4595", + "name": "White platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10618", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,0,0,1,0,0" + }, + { + "shop_price": "10000", + "examine": "An initiate Temple Knight's Armour.", + "durability": null, + "weight": "8", + "absorb": "1,0,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "5821", + "name": "Initiate hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10619", + "bonuses": "0,0,0,-30,-10,46,44,38,-6,44,0,0,6,0,0" + }, + { + "shop_price": "12000", + "examine": "A Proselyte Temple Knight's armour.", + "durability": null, + "weight": "8.6", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "6960", + "name": "Proselyte hauberk", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10620", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,0,0,8,0,0" + }, + { + "remove_sleeves": "true", + "examine": "A thick heavy leather top.", + "durability": null, + "name": "Mourner top", + "archery_ticket_price": "0", + "id": "10621", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in polar areas.", + "grand_exchange_price": "216", + "durability": null, + "name": "Kyatt top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10622", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in woodland and jungle areas.", + "grand_exchange_price": "1793", + "durability": null, + "name": "Larupia top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10623", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "300", + "examine": "This should make me harder to spot in desert areas.", + "grand_exchange_price": "246", + "durability": null, + "name": "Graahk top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10624", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in wooded areas.", + "grand_exchange_price": "3883", + "durability": null, + "name": "Wood camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10625", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in jungle areas.", + "grand_exchange_price": "325", + "durability": null, + "name": "Jungle camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10626", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in desert areas.", + "grand_exchange_price": "606", + "durability": null, + "name": "Desert camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10627", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "This should make me harder to spot in polar areas.", + "grand_exchange_price": "5614", + "durability": null, + "name": "Polar camo top", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10628", + "bonuses": "0,0,0,0,0,10,15,19,0,12,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "A mime would wear this.", + "durability": null, + "name": "Mime mask", + "archery_ticket_price": "0", + "id": "10629", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "Very posh!", + "durability": null, + "name": "Princess blouse", + "weight": "2", + "archery_ticket_price": "0", + "id": "10630", + "equipment_slot": "4" + }, + { + "examine": "Aside from the braaaains on the lapel, it's still quite good.", + "durability": null, + "name": "Zombie shirt", + "archery_ticket_price": "0", + "id": "10631", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Examine what?", + "durability": null, + "name": "Camo top", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "10632", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "A leather strapped top.", + "durability": null, + "name": "Lederhosen top", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "10633", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "I feel closer to the gods when I am wearing this. (Top) If a shade had knees, this would keep them nice and warm. (Bottom)", + "durability": null, + "name": "Shade robe", + "weight": "2", + "archery_ticket_price": "0", + "id": "10634", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,5,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "450", + "examine": "The cape worn by members of the Legends Guild.", + "durability": null, + "name": "Cape of legends", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10635", + "bonuses": "0,0,0,0,0,7,7,7,7,7,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "lendable": "true", + "shop_price": "90000", + "examine": "A cape woven of obsidian plates.", + "grand_exchange_price": "38500", + "durability": null, + "name": "Obsidian cape", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10636", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A cape of fire.", + "durability": null, + "name": "Fire cape", + "tradeable": "false", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10637", + "bonuses": "1,1,1,1,1,11,11,11,11,11,0,4,2,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "50", + "examine": "Ooohhh look at the pretty colours...", + "durability": null, + "name": "Team-1 cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10638", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{0,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of attack.", + "durability": null, + "name": "Attack cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10639", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{2,99}", + "shop_price": "99000", + "examine": "The cape only worn by the strongest people.", + "durability": null, + "name": "Strength cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10640", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{1,99}", + "shop_price": "99000", + "examine": "The cape worn by masters of the art of Defence.", + "durability": null, + "name": "Defence cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10641", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{4,99}", + "shop_price": "99000", + "examine": "The cape worn by master archers.", + "durability": null, + "name": "Ranging cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10642", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{5,99}", + "shop_price": "99000", + "examine": "The cape worn by the most pious of heroes.", + "durability": null, + "name": "Prayer cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10643", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{6,99}", + "shop_price": "99000", + "examine": "The cape worn by the most powerful mages.", + "durability": null, + "name": "Magic cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10644", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{20,99}", + "shop_price": "99000", + "examine": "The cape worn by master runecrafters.", + "durability": null, + "name": "Runecraft cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10645", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{21,99}", + "shop_price": "99000", + "examine": "The cape worn by master hunters.", + "durability": null, + "name": "Hunter cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10646", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{3,99}", + "shop_price": "99000", + "examine": "The cape worn by well-constituted adventurers.", + "durability": null, + "name": "Hitpoints cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10647", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{16,99}", + "shop_price": "99000", + "examine": "The cape worn by the most agile of heroes.", + "durability": null, + "name": "Agility cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10648", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{15,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled at the art of herblore.", + "durability": null, + "name": "Herblore cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10649", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{17,99}", + "shop_price": "99000", + "examine": "The cape worn by master thieves.", + "durability": null, + "name": "Thieving cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10650", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{12,99}", + "shop_price": "99000", + "examine": "The cape worn by master craftworkers.", + "durability": null, + "name": "Crafting cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10651", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{9,99}", + "shop_price": "99000", + "examine": "The cape worn by the best of fletchers.", + "durability": null, + "name": "Fletching cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10652", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{18,99}", + "shop_price": "99000", + "examine": "The cape worn by slayer masters.", + "durability": null, + "name": "Slayer cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10653", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{22,99}", + "shop_price": "99000", + "examine": "The cape worn by master builders.", + "durability": null, + "name": "Construct. cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10654", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{14,99}", + "shop_price": "99000", + "examine": "The cape worn by the most skilled miners.", + "durability": null, + "name": "Mining cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10655", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{13,99}", + "shop_price": "99000", + "examine": "The cape worn by master smiths.", + "durability": null, + "name": "Smithing cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10656", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{10,99}", + "shop_price": "99000", + "examine": "The cape worn by the best fishermen.", + "durability": null, + "name": "Fishing cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10657", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{7,99}", + "shop_price": "99000", + "examine": "The cape worn by the world's best chefs.", + "durability": null, + "name": "Cooking cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10658", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{11,99}", + "shop_price": "99000", + "examine": "The cape worn by master firelighters.", + "durability": null, + "name": "Firemaking cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10659", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{8,99}", + "shop_price": "99000", + "examine": "The cape worn by master woodcutters (Obtaining level 99 skill)", + "durability": null, + "name": "Woodcutting cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10660", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{19,99}", + "shop_price": "99000", + "examine": "The cape worn by master farmers.", + "durability": null, + "name": "Farming cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10661", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "99000", + "examine": "The cape worn by only the most experienced adventurers.", + "durability": null, + "name": "Quest point cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10662", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A surprisingly aerodynamic cape.", + "grand_exchange_price": "951", + "durability": null, + "name": "Spotted cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10663", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "examine": "A really surprisingly aerodynamic cape.", + "grand_exchange_price": "881", + "durability": null, + "name": "Spottier cape", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10664", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{1,10}", + "examine": "A black kitesheild with a heraldic design.", + "grand_exchange_price": "15249", + "durability": null, + "name": "Black shield(h1)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10665", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "16339", + "name": "Adamant shield(h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10666", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "35300", + "durability": null, + "name": "Rune shield(h1)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10667", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black kiteshield with a heraldic design.", + "grand_exchange_price": "9751", + "durability": null, + "name": "Black shield(h2)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10668", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3353", + "name": "Adamant shield(h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10669", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "31903", + "durability": null, + "name": "Rune shield(h2)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10670", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black shield with a heraldic design.", + "grand_exchange_price": "6791", + "durability": null, + "name": "Black shield(h3)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10671", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "5566", + "name": "Adamant shield(h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10672", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "32082", + "durability": null, + "name": "Rune shield(h3)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10673", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black shield with a heraldic design.", + "grand_exchange_price": "5159", + "durability": null, + "name": "Black shield(h4)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10674", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "3219", + "name": "Adamant shield(h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10675", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "32351", + "durability": null, + "name": "Rune shield(h4)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10676", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,10}", + "examine": "A black shield with a heraldic design.", + "grand_exchange_price": "8451", + "durability": null, + "name": "Black shield(h5)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10677", + "absorb": "1,0,2", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "A shield with a heraldic design.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "5905", + "name": "Adamant shield(h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10678", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "examine": "A rune kiteshield with a heraldic design.", + "grand_exchange_price": "35200", + "durability": null, + "name": "Rune shield(h5)", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "10679", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "grand_exchange_price": "67430", + "durability": null, + "name": "Studded body (g)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10680", + "absorb": "0,3,1", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "Those studs should provide a bit more protection. Nice trim too!", + "grand_exchange_price": "22400", + "durability": null, + "name": "Studded body (t)", + "tradeable": "true", + "weight": "5.4", + "archery_ticket_price": "0", + "id": "10681", + "absorb": "0,3,1", + "bonuses": "0,0,0,-4,8,18,25,22,8,25,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body(g)", + "archery_ticket_price": "0", + "id": "10682", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body (t)", + "archery_ticket_price": "0", + "id": "10683", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body (g)", + "archery_ticket_price": "0", + "id": "10684", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "D'hide body (t)", + "archery_ticket_price": "0", + "id": "10685", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "I can practise magic better in this.", + "durability": null, + "name": "Wizard robe (g)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10686", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "I can do magic better in this.", + "durability": null, + "name": "Wizard robe (t)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10687", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "requirements": "{1,20}-{6,40}", + "examine": "Enchanted Wizards robes.", + "durability": null, + "weight": "1", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "72800", + "name": "Enchanted top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10688", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "examine": "Slightly magical boots.", + "grand_exchange_price": "763602", + "durability": null, + "name": "Wizard boots", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10689", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "requirements": "{1,10}", + "examine": "Black platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "90744", + "name": "Black platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10690", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,0,0,0,0,0" + }, + { + "requirements": "{1,10}", + "examine": "Black platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "1,0,2", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "230800", + "name": "Black platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10691", + "bonuses": "0,0,0,-30,-10,41,40,30,-6,40,0,0,0,0,0" + }, + { + "lendable": "true", + "examine": "Your money or your life!", + "grand_exchange_price": "92519", + "durability": null, + "name": "Highwayman mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10692", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "64066", + "durability": null, + "name": "Blue beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "10693", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Parlez-vous francais?(Do you speak French?)", + "grand_exchange_price": "158274", + "durability": null, + "name": "Black beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "10694", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Parlez-vous francais? (Do you speak French?)", + "grand_exchange_price": "281900", + "durability": null, + "name": "White beret", + "tradeable": "true", + "archery_ticket_price": "0", + "hat": true, + "id": "10695", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "Lightweight boots ideal for rangers.", + "grand_exchange_price": "11781186", + "durability": null, + "name": "Ranger boots", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10696", + "bonuses": "0,0,0,-10,8,2,3,4,2,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "79300", + "name": "Adam platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10697", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,0,0,0,0,0" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Adamant platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "2,0,4", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "207912", + "name": "Adam platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10698", + "bonuses": "0,0,0,-30,-10,65,63,55,-6,63,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "22022", + "durability": null, + "name": "Black helm (h1)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10699", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "11700", + "durability": null, + "name": "Black helm (h2)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10700", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "10424", + "durability": null, + "name": "Black helm (h3)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10701", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "12717", + "durability": null, + "name": "Black helm (h4)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10702", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "examine": "A black helmet with a heraldic design.", + "grand_exchange_price": "17852", + "durability": null, + "name": "Black helm (h5)", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10703", + "bonuses": "0,0,0,-6,-2,12,13,10,-1,12,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "30298", + "durability": null, + "name": "Rune helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10704", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "26127", + "durability": null, + "name": "Rune helm (h2)", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10705", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "37333", + "durability": null, + "name": "Rune helm (h3)", + "tradeable": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "10706", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "29600", + "durability": null, + "name": "Rune helm (h4)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10707", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A rune helmet with a heraldic design.", + "grand_exchange_price": "41325", + "durability": null, + "name": "Rune helm (h5)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10708", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "28407", + "name": "Adamant helm (h1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10709", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "9839", + "name": "Adamant helm (h2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10710", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "8485", + "name": "Adamant helm (h3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10711", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An Adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "10774", + "name": "Adamant helm (h4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10712", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "An adamant helmet with a heraldic design.", + "durability": null, + "weight": "3", + "absorb": "1,0,2", + "equipment_slot": "0", + "grand_exchange_price": "17390", + "name": "Adamant helm (h5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10713", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10714", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10715", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10716", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10717", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "See table", + "grand_exchange_price": "8425", + "durability": null, + "name": "Bob shirt", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10718", + "equipment_slot": "4" + }, + { + "examine": "A very powerful dragonstone amulet.", + "grand_exchange_price": "1", + "durability": null, + "name": "Amulet of glory(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10719", + "bonuses": "10,10,10,10,10,3,3,3,3,3,3,6,3,0,0", + "equipment_slot": "2" + }, + { + "examine": "A cape from the almighty god Guthix.", + "durability": null, + "name": "Guthix cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10720", + "bonuses": "0,0,0,10,0,1,1,2,10,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "examine": "Now that's just silly.", + "durability": null, + "name": "Frog mask", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10721", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A reindeer hat and a matching flashing nose.", + "durability": null, + "name": "Reindeer hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10722" + }, + { + "remove_head": "true", + "destroy_message": "You may get another from Diango in Draynor Village.", + "examine": "Better not light it!", + "durability": null, + "name": "Jack lantern mask", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10723", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Skeleton feet.", + "durability": null, + "name": "Skeleton boots", + "weight": "2", + "archery_ticket_price": "0", + "id": "10724", + "equipment_slot": "10" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some skeletal gloves.", + "durability": null, + "name": "Skeleton gloves", + "weight": "2", + "archery_ticket_price": "0", + "id": "10725", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Does my pelvis look big in this?", + "durability": null, + "name": "Skeleton leggings", + "weight": "2", + "archery_ticket_price": "0", + "id": "10726", + "equipment_slot": "7" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "remove_sleeves": "true", + "examine": "The shirt of a fully body skeleton costume.", + "durability": null, + "name": "Skeleton shirt", + "weight": "2", + "archery_ticket_price": "0", + "id": "10727", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scary skeleton mask.", + "durability": null, + "name": "Skeleton mask", + "weight": "2", + "archery_ticket_price": "0", + "id": "10728", + "equipment_slot": "0" + }, + { + "examine": "A ring given to you by the Easter Bunny.", + "durability": null, + "name": "Easter ring", + "archery_ticket_price": "0", + "id": "10729" + }, + { + "destroy_message": "You can obtain another marionette in Diango's workshop by the trap door.", + "examine": "I've got no strings ... oh hang on!", + "durability": null, + "name": "Blue marionette", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10730" + }, + { + "examine": "Alas...I hardly knew him.", + "durability": null, + "name": "Zombie head", + "archery_ticket_price": "0", + "id": "10731" + }, + { + "turn90cw_anim": "821", + "examine": "Perhaps not the most powerful weapon in RuneScape.", + "walk_anim": "1830", + "durability": null, + "weight": "0.4", + "turn90ccw_anim": "822", + "attack_speed": "4", + "weapon_interface": "12", + "turn180_anim": "1830", + "render_anim": "182", + "equipment_slot": "3", + "fun_weapon": "true", + "stand_anim": "1832", + "name": "Rubber chicken", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10732", + "stand_turn_anim": "823", + "bonuses": "-100,-100,-50,0,0,0,0,0,0,0,0,-10,0,0,0" + }, + { + "examine": "A gift from Santa.", + "durability": null, + "name": "Yo-yo", + "archery_ticket_price": "0", + "id": "10733" + }, + { + "examine": "A rabbit-like adornment.", + "durability": null, + "name": "Bunny ears", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10734", + "equipment_slot": "0" + }, + { + "turn90cw_anim": "821", + "examine": "It's a Scythe.", + "walk_anim": "819", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "7", + "two_handed": "true", + "turn180_anim": "820", + "render_anim": "1383", + "equipment_slot": "3", + "stand_anim": "847", + "name": "Scythe", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "10735", + "stand_turn_anim": "823", + "bonuses": "3,8,3,0,0,0,3,1,0,0,0,10,0,0,0" + }, + { + "examine": "An enchanted ruby amulet with a nice trim.", + "grand_exchange_price": "443800", + "durability": null, + "name": "Strength amulet(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10736", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,10,0,0,0", + "equipment_slot": "2" + }, + { + "examine": "An enchanted sapphire amulet of magic.", + "grand_exchange_price": "67158", + "durability": null, + "name": "Amulet of magic(t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10738", + "bonuses": "0,0,0,10,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "A big 'do about nothing.", + "grand_exchange_price": "36879", + "durability": null, + "name": "A powdered wig", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10740", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "These'll help me stay alive.", + "grand_exchange_price": "559284", + "durability": null, + "name": "Flared trousers", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10742", + "equipment_slot": "7" + }, + { + "lendable": "true", + "examine": "Alas, someone has slashed my pantaloons.", + "grand_exchange_price": "12022", + "durability": null, + "name": "Pantaloons", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10744", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "A cap for wearing whil...zzzzzzzzz", + "grand_exchange_price": "376084", + "durability": null, + "name": "Sleeping cap", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10746", + "equipment_slot": "0" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10748", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10750", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10752", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10754", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blouse: A well made elegant ladies' [colour] blouse.Skirt: A rather elegant [colour] skirt.Shirt: A well made elegant mans' [colour] shirt.Legs: A rather elegant [colour] pair of pantaloons.", + "durability": null, + "name": "Elegant shirt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10756", + "equipment_slot": "4" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "56600", + "durability": null, + "name": "Red boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10758", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "20300", + "durability": null, + "name": "Orange boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10760", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "59940", + "durability": null, + "name": "Green boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10762", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "54236", + "durability": null, + "name": "Blue boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10764", + "equipment_slot": "0" + }, + { + "examine": "Stylish!", + "grand_exchange_price": "56495", + "durability": null, + "name": "Black boater", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10766", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A minimalist's hat.", + "grand_exchange_price": "114319", + "durability": null, + "name": "Red headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10768", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A minimalist's hat.", + "grand_exchange_price": "41778", + "durability": null, + "name": "Black headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10770", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "A minimalist's hat.", + "grand_exchange_price": "21764", + "durability": null, + "name": "Brown headband", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10772", + "equipment_slot": "0" + }, + { + "examine": "Shiver me timbers!", + "grand_exchange_price": "83200", + "durability": null, + "name": "Pirate's hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10774", + "equipment_slot": "0" + }, + { + "examine": "Rune platebody in the colours of Zamorak.", + "durability": null, + "weight": "9", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "647800", + "name": "Zamorak platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10776", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody in the colours of Saradomin.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "1097689", + "name": "Saradomin plate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10778", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody in the colours of Guthix.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "241600", + "name": "Guthix platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10780", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody with complete gold trim & plating.", + "durability": null, + "weight": "10", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "1653821", + "name": "Gilded platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10782", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "examine": "Blessed vestments of Saradomin.", + "grand_exchange_price": "106389", + "durability": null, + "name": "Saradomin robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10784", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Zamorak Vestments.", + "grand_exchange_price": "151000", + "durability": null, + "name": "Zamorak robe top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10786", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Blessed vestments of Guthix.", + "grand_exchange_price": "80181", + "durability": null, + "name": "Guthix robe top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10788", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,4,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "examine": "Zamorak blessed dragonhide body armour.", + "grand_exchange_price": "84966", + "durability": null, + "name": "Zamorak d'hide", + "tradeable": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "10790", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "13000", + "examine": "Saradomin blessed dragonhide body armour.", + "durability": null, + "destroy": "true", + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "92762", + "name": "Saradomin d'hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10792", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,0,0,0,0,0" + }, + { + "shop_price": "13", + "examine": "Guthix blessed dragonhide body armour.", + "durability": null, + "weight": "6", + "absorb": "0,6,3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "22384", + "name": "Guthix dragonhide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10794", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,0,0,0,0,0" + }, + { + "lendable": "true", + "examine": "Endorsed by Robin Hood.", + "grand_exchange_price": "3070557", + "durability": null, + "name": "Robin hood hat", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10796", + "bonuses": "0,0,0,-10,8,4,6,8,4,4,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "examine": "Rune platebody with gold trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "231400", + "name": "Rune platebody (g)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10798", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "examine": "Rune platebody with trim.", + "durability": null, + "weight": "9.07", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "61100", + "name": "Rune platebody (t)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10800", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,0,0,0,0,0" + }, + { + "lendable": "true", + "examine": "All for one and one for all!", + "grand_exchange_price": "56677", + "durability": null, + "name": "Tan cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10802", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "All for one and one for all!", + "grand_exchange_price": "18942", + "durability": null, + "name": "Dark cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10804", + "equipment_slot": "0" + }, + { + "lendable": "true", + "examine": "All for one and one for all!", + "grand_exchange_price": "421305", + "durability": null, + "name": "Black cavalier", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10806", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "1000", + "examine": "Arctic Pine logs prepared with sacred oil for a funeral pyre", + "grand_exchange_price": "3453", + "durability": null, + "name": "Arctic pyre logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10808" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3453", + "durability": null, + "name": "Arctic pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10809" + }, + { + "ge_buy_limit": "25000", + "examine": "Log cut from an arctic pine.", + "grand_exchange_price": "90", + "durability": null, + "name": "Arctic pine logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10810", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "90", + "durability": null, + "name": "Arctic pine logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10811" + }, + { + "ge_buy_limit": "1000", + "examine": "Used to repair bridges.", + "grand_exchange_price": "18", + "durability": null, + "name": "Split log", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "10812" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "18", + "durability": null, + "name": "Split log", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10813" + }, + { + "shop_price": "120", + "ge_buy_limit": "1000", + "examine": "I can spin this into rope.", + "grand_exchange_price": "113", + "durability": null, + "name": "Hair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10814" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "113", + "durability": null, + "name": "Hair", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10815" + }, + { + "shop_price": "2", + "ge_buy_limit": "1000", + "examine": "I need to cook this.", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw yak meat", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10816" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "14", + "durability": null, + "name": "Raw yak meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10817" + }, + { + "shop_price": "50", + "ge_buy_limit": "5000", + "examine": "Thakkrad, of Neitiznot, can cure this.", + "grand_exchange_price": "301", + "durability": null, + "name": "Yak-hide", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10818" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "301", + "durability": null, + "name": "Yak-hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10819" + }, + { + "ge_buy_limit": "5000", + "examine": "Ready to be cut and sewn into armour.", + "grand_exchange_price": "396", + "durability": null, + "name": "Cured yak-hide", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10820" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "396", + "durability": null, + "name": "Cured yak-hide", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10821" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "examine": "Smelly yak body armour.", + "durability": null, + "weight": "3", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "122", + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10822", + "bonuses": "0,0,0,-5,0,25,20,15,-2,25,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "122", + "durability": null, + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10823" + }, + { + "requirements": "{1,20}", + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "examine": "Leg protection, made from smelly yak-hide.", + "durability": null, + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "2", + "id": "10824", + "bonuses": "0,0,0,-5,10,25,20,15,-2,10,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "83", + "durability": null, + "name": "Yak-hide armour", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10825" + }, + { + "requirements": "{1,25}", + "ge_buy_limit": "100", + "examine": "A wooden shield with a rope rim.", + "durability": null, + "destroy": "true", + "weight": "3", + "equipment_slot": "5", + "grand_exchange_price": "402", + "name": "Fremennik round shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10826", + "bonuses": "0,0,0,-10,-10,17,17,31,-4,33,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "402", + "durability": null, + "name": "Fremennik round shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10827" + }, + { + "remove_head": "true", + "requirements": "{1,55}", + "shop_price": "50000", + "ge_buy_limit": "100", + "examine": "A gift from Neitiznot's Burgher.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "equipment_slot": "0", + "grand_exchange_price": "44800", + "name": "Helm of neitiznot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10828", + "bonuses": "0,0,0,0,0,31,29,34,3,30,8,3,3,0,0" + }, + { + "destroy_message": "King Sorvott of Jatizso will give you another one, grudgingly.", + "examine": "The document is stamped with King Gjuki Sorvott IV's royal seal.", + "durability": null, + "name": "Royal decree", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10830" + }, + { + "destroy_message": "Are you sure? You can replace it by talking to King Sorvott.", + "examine": "An empty tax bag.", + "durability": null, + "name": "Empty tax bag", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10831" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "examine": "A silly hat with bells.", + "durability": null, + "name": "Silly jester hat", + "tradeable": "false", + "destroy": "true", + "weight": "2.7", + "archery_ticket_price": "0", + "id": "10836", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "remove_sleeves": "true", + "examine": "A jester's jangly top.", + "durability": null, + "name": "Silly jester top", + "tradeable": "false", + "destroy": "true", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "10837", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "examine": "Silly jester tights.", + "durability": null, + "name": "Silly jester tights", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10838", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Are you sure? You can find another in King Sorvott's chest.", + "examine": "Silly jester boots.", + "durability": null, + "name": "Silly jester boots", + "tradeable": "false", + "destroy": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "10839", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "durability": null, + "name": "A jester stick", + "archery_ticket_price": "0", + "id": "10840", + "bonuses": "0,0,0,0,0,0,0,0,5,-5,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "No brain: A gruesome, decapitated head, whose brain has rotted away. Brain: A gruesome, decapitated head - its eyes stare lifelessly at nothing.", + "durability": null, + "name": "Decapitated head", + "weight": "3", + "archery_ticket_price": "0", + "id": "10842" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "44800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Helm of neitiznot", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10843" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Spring sq'irk", + "archery_ticket_price": "0", + "id": "10844" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Summer sq'irk", + "archery_ticket_price": "0", + "id": "10845" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Autumn sq'irk", + "archery_ticket_price": "0", + "id": "10846" + }, + { + "examine": "A slightly sq'irky, I mean quirky, fruit.", + "durability": null, + "name": "Winter sq'irk", + "archery_ticket_price": "0", + "id": "10847" + }, + { + "examine": "Made from 4 spring sq'irks.", + "durability": null, + "name": "Spring sq'irkjuice", + "weight": "1", + "archery_ticket_price": "0", + "id": "10848" + }, + { + "examine": "Made from 2 summer sq'irks.", + "durability": null, + "name": "Summer sq'irkjuice", + "weight": "1", + "archery_ticket_price": "0", + "id": "10849" + }, + { + "examine": "Made from 3 autumn sq'irks.", + "durability": null, + "name": "Autumn sq'irkjuice", + "weight": "1", + "archery_ticket_price": "0", + "id": "10850" + }, + { + "examine": "Made from 5 winter sq'irks.", + "durability": null, + "name": "Winter sq'irkjuice", + "archery_ticket_price": "0", + "id": "10851" + }, + { + "destroy_message": "You will need to speak to Sin Seer in Seers' Village to get another one.", + "shop_price": "40", + "examine": "Her writing is too scrawled to make out what it says.", + "durability": null, + "name": "Sin seer's note", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10856" + }, + { + "destroy_message": "You will need to speak to General Khazard, near the Fremennik Province, to get another.", + "examine": "A severed human leg.", + "durability": null, + "name": "Severed leg", + "tradeable": "false", + "destroy": "true", + "weight": "12", + "archery_ticket_price": "0", + "id": "10857" + }, + { + "turn90cw_anim": "7044", + "examine": "A shadow sword.", + "walk_anim": "7046", + "durability": null, + "destroy": "true", + "weight": "3.6", + "turn90ccw_anim": "7043", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "turn180_anim": "7045", + "render_anim": "124", + "equipment_slot": "3", + "destroy_message": "You can get another one by visiting the cave near the Fishing guild. A friendly ghost will replace it for you. You must be wearing a Ring of visibility, or you cannot get it back.", + "stand_anim": "7047", + "name": "Shadow sword", + "tradeable": "false", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "10858", + "stand_turn_anim": "7040", + "bonuses": "-4,27,21,4,0,0,0,0,4,-1,0,26,0,0,0" + }, + { + "examine": "You can put nice, hot tea in it.", + "durability": null, + "name": "Tea flask", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10859" + }, + { + "examine": "You can put nice, hot tea in it.", + "durability": null, + "name": "Tea flask", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10860" + }, + { + "examine": "You can put nice, hot tea in it.", + "durability": null, + "name": "Tea flask", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10861" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "Can't get any safer than this.", + "durability": null, + "name": "Hard hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10862", + "equipment_slot": "0" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "remove_sleeves": "true", + "examine": "Very fetching.", + "durability": null, + "name": "Builder's shirt", + "tradeable": "false", + "destroy": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10863", + "equipment_slot": "4" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "Slightly tatty in my opinion.", + "durability": null, + "name": "Builder's trousers", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10864", + "equipment_slot": "7" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "They'll offer good protection for my toes.", + "durability": null, + "name": "Builder's boots", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10865", + "equipment_slot": "10" + }, + { + "examine": "Used to bolt things together.", + "durability": null, + "name": "Rivets", + "archery_ticket_price": "0", + "id": "10866" + }, + { + "examine": "Some magical fluid to bind surfaces.", + "durability": null, + "name": "Binding fluid", + "archery_ticket_price": "0", + "id": "10870" + }, + { + "examine": "A pipe that belongs in a cannon stand.", + "durability": null, + "name": "Pipe", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10871" + }, + { + "examine": "A ring used to join two pipes together.", + "durability": null, + "name": "Pipe ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10872" + }, + { + "examine": "A sheet of metal.", + "durability": null, + "name": "Metal sheet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10873" + }, + { + "examine": "Bound to have some use.", + "durability": null, + "name": "Coloured ball", + "archery_ticket_price": "0", + "id": "10874" + }, + { + "examine": "A wheel used to control valves.", + "durability": null, + "name": "Valve wheel", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10875" + }, + { + "examine": "Some unknown metal substance.", + "durability": null, + "name": "Metal bar", + "archery_ticket_price": "0", + "id": "10876" + }, + { + "shop_price": "128", + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Plain satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10877", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Green satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10878", + "equipment_slot": "5" + }, + { + "shop_price": "128", + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Red satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10879", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Black satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10880", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Gold satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10881", + "equipment_slot": "5" + }, + { + "examine": "I can keep my grub in here.", + "durability": null, + "name": "Rune satchel", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10882", + "equipment_slot": "5" + }, + { + "destroy_message": "You'll have to find another within the Tower of Life!", + "examine": "Can't get any safer than this.", + "durability": null, + "name": "Hard hat", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "10883", + "equipment_slot": "0" + }, + { + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10884" + }, + { + "examine": "A small keg of gunpowder.", + "durability": null, + "name": "Keg", + "weight": "12", + "archery_ticket_price": "0", + "id": "10885" + }, + { + "examine": "Used to cure poison through prayer.", + "durability": null, + "name": "Prayer book", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10886" + }, + { + "turn90cw_anim": "5867", + "examine": "This is likely to put my back out... (when fixed) OR It's broken. I should see if a pirate smith can fix it. (when broken)", + "walk_anim": "5867", + "has_special": "true", + "durability": null, + "weight": "30", + "turn90ccw_anim": "5867", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "8", + "turn180_anim": "5867", + "defence_anim": "5866", + "render_anim": "985", + "equipment_slot": "3", + "attack_anims": "5865,5865,5865,5865", + "destroy_message": "If you drop the Anchor it will be destroyed, and you will need to get a new one from Brother Tranquillity, then pay Smith to re", + "stand_anim": "5869", + "name": "Barrelchest anchor", + "run_anim": "5868", + "archery_ticket_price": "0", + "id": "10887", + "stand_turn_anim": "823", + "bonuses": "-2,10,92,0,0,0,0,0,0,0,0,100,0,0,0" + }, + { + "examine": "This is likely to put my back out... (when fixed) OR It's broken. I should see if a pirate smith can fix it. (when broken)", + "durability": null, + "name": "Barrelchest anchor", + "weight": "30", + "archery_ticket_price": "0", + "attack_speed": "6", + "id": "10888", + "bonuses": "-2,10,92,0,0,0,0,0,0,0,0,100,0,0,0" + }, + { + "destroy_message": "If you drop this lamp it will be destroyed, and you will need to see Brother Tranquility for another.", + "examine": "This will answer my prayers.", + "durability": null, + "name": "Blessed lamp", + "archery_ticket_price": "0", + "id": "10889" + }, + { + "destroy_message": "This book is old and delicate. You can reclaim this item from the place you found it.ping it here will destroy it and you will have to search the Edgeville Monastery bookcase for another.", + "examine": "Used to cure poison through prayer.", + "durability": null, + "name": "Prayer book", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10890" + }, + { + "ge_buy_limit": "100", + "examine": "A wooden cat toy.", + "grand_exchange_price": "922", + "durability": null, + "name": "Wooden cat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10891" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "922", + "durability": null, + "name": "Wooden cat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10892" + }, + { + "examine": "A cranial clamp.", + "durability": null, + "name": "Cranial clamp", + "archery_ticket_price": "0", + "id": "10893" + }, + { + "examine": "Some tongs for use with brains.", + "durability": null, + "name": "Brain tongs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10894" + }, + { + "examine": "A bell jar for covering things.", + "durability": null, + "name": "Bell jar", + "weight": "1", + "archery_ticket_price": "0", + "id": "10895" + }, + { + "examine": "A silver whistle.", + "durability": null, + "name": "Wolf whistle", + "archery_ticket_price": "0", + "id": "10896" + }, + { + "examine": "A shipping order list.", + "durability": null, + "name": "Shipping order", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10897" + }, + { + "examine": "A small keg of gunpowder.", + "durability": null, + "name": "Keg", + "weight": "12", + "archery_ticket_price": "0", + "id": "10898" + }, + { + "examine": "Part of a crate.", + "durability": null, + "name": "Crate part", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10899" + }, + { + "examine": "One skull staple.", + "durability": null, + "name": "Skull staple", + "archery_ticket_price": "0", + "id": "10904" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "8420", + "durability": null, + "name": "Mixture - step 1(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10909" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8420", + "durability": null, + "name": "Mixture - step 1(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10910" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "6543", + "durability": null, + "name": "Mixture - step 1(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10911" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6543", + "durability": null, + "name": "Mixture - step 1(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10912" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 1(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10913" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 1(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10914" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore and unicorn dust potion needs more ingredients.", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 1(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10915" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 1(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10916" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "8665", + "durability": null, + "name": "Mixture - step 2(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10917" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8665", + "durability": null, + "name": "Mixture - step 2(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10918" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "6695", + "durability": null, + "name": "Mixture - step 2(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10919" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6695", + "durability": null, + "name": "Mixture - step 2(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10920" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 2(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10921" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4335", + "durability": null, + "name": "Mixture - step 2(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10922" + }, + { + "ge_buy_limit": "100", + "examine": "This super restore, unicorn dust, snake weed potion needs more ingredients.", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 2(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10923" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2168", + "durability": null, + "name": "Mixture - step 2(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10924" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "15900", + "durability": null, + "name": "Sanfew serum(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10925" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15900", + "durability": null, + "name": "Sanfew serum(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10926" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "12000", + "durability": null, + "name": "Sanfew serum(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10927" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12000", + "durability": null, + "name": "Sanfew serum(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10928" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "10200", + "durability": null, + "name": "Sanfew serum(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10929" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "10200", + "durability": null, + "name": "Sanfew serum(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10930" + }, + { + "ge_buy_limit": "100", + "examine": "A \"X\" dose Sanfew Serum.", + "grand_exchange_price": "6114", + "durability": null, + "name": "Sanfew serum(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10931" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "6114", + "durability": null, + "name": "Sanfew serum(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10932" + }, + { + "examine": "You certainly will be alright wearing these.", + "durability": null, + "name": "Lumberjack boots", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10933", + "equipment_slot": "10" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10934" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10935" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10936" + }, + { + "ge_buy_limit": "100", + "examine": "The claws from a nail beast", + "grand_exchange_price": "203", + "durability": null, + "name": "Nail beast nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10937" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "203", + "durability": null, + "name": "Nail beast nails", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10938" + }, + { + "remove_sleeves": "true", + "examine": "You certainly will be alright wearing this.", + "durability": null, + "name": "Lumberjack top", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "10939", + "equipment_slot": "4" + }, + { + "examine": "You certainly will be alright wearing these.", + "durability": null, + "name": "Lumberjack legs", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "10940", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "examine": "You certainly will be alright wearing this.", + "durability": null, + "name": "Lumberjack hat", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "10941", + "equipment_slot": "0" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10942" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10943" + }, + { + "destroy_message": "Warning! If you destroy this item, you will lose ALL rewards that it relates to and you will have to make another trek in order to get another one.", + "examine": "Blue/Red/Yellow reward token exchanged at Burgh de Rott/Paterdomus.", + "durability": null, + "name": "Reward token", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10944" + }, + { + "remove_sleeves": "true", + "examine": "You certainly will be alright wearing this.", + "durability": null, + "name": "Lumberjack top", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "10945", + "equipment_slot": "4" + }, + { + "examine": "One skull staple.", + "durability": null, + "name": "Skull staples", + "archery_ticket_price": "0", + "id": "10950" + }, + { + "examine": "One skull staple.", + "durability": null, + "name": "Skull staples", + "archery_ticket_price": "0", + "id": "10951" + }, + { + "requirements": "{18,39}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "Don't make anyone jump when you ring this!", + "grand_exchange_price": "57", + "durability": null, + "name": "Slayer bell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10952" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "57", + "durability": null, + "name": "Slayer bell", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10953" + }, + { + "requirements": "{1,25}-{4,25}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "Armour made out of Frog hide.", + "durability": null, + "weight": "3", + "absorb": "0,3,1", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "1797", + "name": "Frog-leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10954", + "bonuses": "0,0,0,-5,10,23,26,30,15,32,20,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1797", + "durability": null, + "name": "Frog-leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10955" + }, + { + "requirements": "{1,25}-{4,25}", + "shop_price": "900", + "ge_buy_limit": "100", + "examine": "Chaps made out of Frog hide.", + "durability": null, + "weight": "3", + "absorb": "0,2,1", + "equipment_slot": "7", + "grand_exchange_price": "361", + "name": "Frog-leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10956", + "bonuses": "0,0,0,-5,2,7,7,9,4,9,5,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "361", + "durability": null, + "name": "Frog-leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10957" + }, + { + "requirements": "{1,25}-{4,25}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Boots made out of Frog hide.", + "durability": null, + "weight": "1", + "equipment_slot": "10", + "grand_exchange_price": "1156", + "name": "Frog-leather boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10958", + "bonuses": "0,0,0,-8,2,1,1,1,0,1,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1156", + "durability": null, + "name": "Frog-leather boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10959" + }, + { + "shop_price": "10", + "examine": "Thick and tasty soup.", + "durability": null, + "name": "Green gloop soup", + "archery_ticket_price": "0", + "id": "10960" + }, + { + "shop_price": "10", + "examine": "A big bowl of frogspawn gumbo.", + "durability": null, + "name": "Frogspawn gumbo", + "archery_ticket_price": "0", + "id": "10961" + }, + { + "shop_price": "10", + "examine": "A juicy frogburger.", + "durability": null, + "name": "Frogburger", + "weight": "1", + "archery_ticket_price": "0", + "id": "10962" + }, + { + "examine": "Nice and crunchy.", + "durability": null, + "name": "Coated frogs' legs", + "archery_ticket_price": "0", + "id": "10963" + }, + { + "shop_price": "10", + "examine": "Bat shish kebab.", + "durability": null, + "name": "Bat shish", + "archery_ticket_price": "0", + "id": "10964" + }, + { + "shop_price": "10", + "examine": "Wall beast fingers in a white fern sauce.", + "durability": null, + "name": "Fingers", + "archery_ticket_price": "0", + "id": "10965" + }, + { + "examine": "A whole roasted frog.", + "durability": null, + "name": "Roast frog", + "weight": "1", + "archery_ticket_price": "0", + "id": "10967" + }, + { + "examine": "Tasty saut??ed mushrooms.", + "durability": null, + "name": "Mushrooms", + "archery_ticket_price": "0", + "id": "10968" + }, + { + "examine": "Chunky cave-crawler fillets.", + "durability": null, + "name": "Fillets", + "archery_ticket_price": "0", + "id": "10969" + }, + { + "examine": "Steamed cave pond loach.", + "durability": null, + "name": "Loach", + "weight": "1", + "archery_ticket_price": "0", + "id": "10970" + }, + { + "examine": "Cave-eel sushi.", + "durability": null, + "name": "Eel sushi", + "archery_ticket_price": "0", + "id": "10971" + }, + { + "shop_price": "2", + "examine": "Oldak's Marvellous Moving-Over-Distance Sphere.", + "durability": null, + "name": "Dorgesh-kaan sphere", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "10972" + }, + { + "requirements": "{11,52}", + "ge_buy_limit": "1000", + "examine": "A component of cave goblin Magic.", + "grand_exchange_price": "90", + "durability": null, + "name": "Light orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10973" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "90", + "durability": null, + "name": "Light orb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10974" + }, + { + "examine": "A goblin wrench.", + "durability": null, + "name": "Spanner", + "weight": "1", + "archery_ticket_price": "0", + "id": "10975" + }, + { + "shop_price": "1000", + "examine": "A Construction bone.", + "durability": null, + "name": "Long bone", + "weight": "1", + "archery_ticket_price": "0", + "id": "10976" + }, + { + "shop_price": "2000", + "examine": "A curved Construction bone.", + "durability": null, + "name": "Curved bone", + "weight": "1", + "archery_ticket_price": "0", + "id": "10977" + }, + { + "ge_buy_limit": "500", + "examine": "Swamp weed found in the caves near Dorgesh-Kaan.", + "grand_exchange_price": "292", + "durability": null, + "name": "Swamp weed", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "10978" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "292", + "durability": null, + "name": "Swamp weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10979" + }, + { + "examine": "Add a wire to complete it.", + "durability": null, + "name": "Empty light orb", + "archery_ticket_price": "0", + "id": "10980" + }, + { + "ge_buy_limit": "1000", + "examine": "Wire found in Dorgesh-Kaan.", + "grand_exchange_price": "988", + "durability": null, + "name": "Cave goblin wire", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10981" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "988", + "durability": null, + "name": "Cave goblin wire", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "10982" + }, + { + "destroy_message": "You can get another cog from the old power station.", + "shop_price": "160", + "examine": "A cog. Broken: A broken cog.", + "durability": null, + "name": "Cog", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10983" + }, + { + "destroy_message": "You can get another cog from the old power station.", + "shop_price": "160", + "examine": "A cog. Broken: A broken cog.", + "durability": null, + "name": "Cog", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10984" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10985" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A fuse.", + "durability": null, + "name": "Fuse", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10986" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A meter.", + "durability": null, + "name": "Meter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10987" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A meter.", + "durability": null, + "name": "Meter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "10988" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A capacitor.", + "durability": null, + "name": "Capacitor", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10989" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A capacitor.", + "durability": null, + "name": "Capacitor", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "10990" + }, + { + "destroy_message": "You can get another power box from the old power station.", + "examine": "A powerbox. Broken: A broken powerbox.", + "durability": null, + "name": "Powerbox", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10993" + }, + { + "destroy_message": "You can get another power box from the old power station.", + "examine": "A powerbox. Broken: A broken powerbox.", + "durability": null, + "name": "Powerbox", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "10994" + }, + { + "examine": "A perfect example of a tortoise shell.", + "durability": null, + "name": "Perfect shell", + "weight": "6.8", + "archery_ticket_price": "0", + "id": "10995" + }, + { + "examine": "A perfect example of a snail shell.", + "durability": null, + "name": "Perfect snail shell", + "weight": "7", + "archery_ticket_price": "0", + "id": "10996" + }, + { + "examine": "On wall: That white dot looks like an eye! Off wall: A strange mole-like being.", + "durability": null, + "name": "Molanisk", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "10997" + }, + { + "examine": "One of the many citizens of Dorgesh-Kaan.", + "durability": null, + "name": "Cave goblin", + "archery_ticket_price": "0", + "id": "10998" + }, + { + "examine": "A tattered goblin holy book.", + "durability": null, + "name": "Goblin book", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "10999" + }, + { + "destroy_message": "You will need to get another copy from the Varrock Palace Library if you destroy this one.", + "examine": "The History of Dagon'hai.", + "durability": null, + "name": "Dagon'hai history", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11001" + }, + { + "destroy_message": "You will need to get another copy from the Varrock Palace Library if you destroy this one.", + "examine": "The diary of Sin'keth Magis.", + "durability": null, + "name": "Sin'keth's diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11002" + }, + { + "destroy_message": "You will need to ask Rat for another empty folder if you destroy this one.", + "examine": "A folder for Rat's papers.", + "durability": null, + "name": "An empty folder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11003" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A folder for rat's papers. It needs more pages.", + "durability": null, + "name": "Used folder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11006" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A full folder. You should take this back to Rat.", + "durability": null, + "name": "Full folder", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11007" + }, + { + "destroy_message": "You will need to find more papers about the outlaws if you destroy this.", + "examine": "A page of Rat's document.", + "durability": null, + "name": "Rat's paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11008" + }, + { + "destroy_message": "You will need to get another copy of the letter from Rat if you destroy this.", + "shop_price": "160", + "examine": "A letter in a strange language.", + "durability": null, + "name": "Rat's letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11009" + }, + { + "destroy_message": "You will need to ask Surok for another letter to Rat if you destroy this.", + "shop_price": "27", + "examine": "A letter.", + "durability": null, + "name": "Surok's letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11010" + }, + { + "examine": "Instructions for the beacon ring.", + "durability": null, + "name": "Zaff's instructions", + "archery_ticket_price": "0", + "id": "11011" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A wand.", + "durability": null, + "name": "Wand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11012", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "This wand is glowing with chaos magic.", + "durability": null, + "name": "Infused wand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11013", + "equipment_slot": "3" + }, + { + "destroy_message": "You will need to get another ring from Zaff if you destroy this one.", + "examine": "A magical ring.", + "durability": null, + "name": "Beacon ring", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11014", + "bonuses": "0,0,0,2,0,0,0,0,1,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "remove_head": "true", + "examine": "Cock-a-doodle-do!", + "durability": null, + "name": "Chicken head", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11015", + "equipment_slot": "0" + }, + { + "examine": "Perfect for crossing the road.", + "durability": null, + "name": "Chicken feet", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11016", + "equipment_slot": "10" + }, + { + "remove_sleeves": "true", + "examine": "I look fowl in this.", + "durability": null, + "name": "Chicken wings", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11017", + "equipment_slot": "4" + }, + { + "examine": "What's the matter, are you chicken?", + "durability": null, + "name": "Chicken legs", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11018", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to Diango to get another pair of chicken feet.", + "examine": "Perfect for crossing the road.", + "durability": null, + "name": "Chicken feet", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11019", + "equipment_slot": "10" + }, + { + "destroy_message": "You will need to speak to Diango to get another set of chicken wings.", + "remove_sleeves": "true", + "examine": "I look fowl in this.", + "durability": null, + "name": "Chicken wings", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11020", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "destroy_message": "You will need to speak to Diango to get another chicken head.", + "examine": "Cock-a-doodle-do!", + "durability": null, + "name": "Chicken head", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11021", + "equipment_slot": "0" + }, + { + "destroy_message": "You will need to speak to Diango to get another set of chicken legs.", + "examine": "What's the matter, are you chicken?", + "durability": null, + "name": "Chicken legs", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11022", + "equipment_slot": "7" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Let's see how far the rabbit hole goes.", + "durability": null, + "name": "Magic egg", + "archery_ticket_price": "0", + "id": "11023" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Used for making chocolate rabbits.", + "durability": null, + "name": "Rabbit mould", + "archery_ticket_price": "0", + "id": "11024" + }, + { + "examine": "Some chocolate chunks.", + "durability": null, + "name": "Chocolate chunks", + "archery_ticket_price": "0", + "id": "11025" + }, + { + "examine": "Chocolatey kebbit goodness.", + "durability": null, + "name": "Chocolate kebbit", + "archery_ticket_price": "0", + "id": "11026" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11027", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11028", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11029", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11030", + "equipment_slot": "3" + }, + { + "destroy_message": "These logs will be destroyed if you drop them and you will need to see Olaf Hradson to get some more.", + "examine": "A number of dripping, waterlogged planks.", + "durability": null, + "name": "Damp planks", + "archery_ticket_price": "0", + "id": "11031" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A log with some squiggles carved into it.", + "durability": null, + "name": "Crude carving", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11032" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Another log with some sort of bird hacked into it.", + "durability": null, + "name": "Cruder carving", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11033" + }, + { + "destroy_message": "This map will be destroyed if you drop it and you will need to see Olaf Hradson to get another.", + "examine": "A faded map marking a cross next to a section of the landscape.", + "durability": null, + "name": "Sven's last map", + "archery_ticket_price": "0", + "id": "11034" + }, + { + "destroy_message": "These logs will be destroyed if you drop them and you will need to chop more from the windswept tree.", + "examine": "Logs taken from the exotic-looking windswept tree.", + "durability": null, + "name": "Windswept logs", + "archery_ticket_price": "0", + "id": "11035" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "examine": "A salty sword.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "6", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "120200", + "name": "Brine sabre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11037", + "bonuses": "7,47,-2,0,0,0,0,0,0,0,0,46,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "120200", + "durability": null, + "name": "Brine sabre", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11038" + }, + { + "examine": "Looks like it might still float.", + "durability": null, + "name": "Rotten barrel", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11044" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Looks like it might still float.", + "durability": null, + "name": "Rotten barrel", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11045" + }, + { + "shop_price": "18", + "examine": "A coil of rope.", + "grand_exchange_price": "101", + "durability": null, + "name": "Rope", + "tradeable": "true", + "weight": "1.3", + "archery_ticket_price": "0", + "id": "11046" + }, + { + "examine": "Eww, a bald rat!", + "durability": null, + "name": "Brine rat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "11047" + }, + { + "examine": "A piece of ancient goblin armour.", + "durability": null, + "name": "Armour shard", + "archery_ticket_price": "0", + "id": "11048" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11049" + }, + { + "shop_price": "1", + "examine": "It's missing a handle.", + "durability": null, + "name": "Axe head", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11050" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11051" + }, + { + "examine": "A piece of ancient goblin helmet.", + "durability": null, + "name": "Helmet fragment", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11052" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11053" + }, + { + "examine": "A piece of an ancient goblin shield.", + "durability": null, + "name": "Shield fragment", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11054" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11055" + }, + { + "examine": "A piece of an ancient goblin sword.", + "durability": null, + "name": "Sword fragment", + "archery_ticket_price": "0", + "id": "11056" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11057" + }, + { + "durability": null, + "name": "Mace", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "11058" + }, + { + "examine": "An ancient goblin object encrusted in dirt.", + "durability": null, + "name": "Artefact", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11059" + }, + { + "shop_price": "2", + "examine": "Oldak's marvellous Moving-over-distance Sphere", + "durability": null, + "name": "Goblin village sphere", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "11060" + }, + { + "requirements": "{0,25}-{5,15}", + "shop_price": "1000", + "ge_buy_limit": "100", + "examine": "It has ancient goblin symbols on it.", + "has_special": "true", + "durability": null, + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "grand_exchange_price": "4093", + "name": "Ancient mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11061", + "bonuses": "10,-2,16,0,0,0,0,0,0,0,0,14,3,0,0" + }, + { + "durability": null, + "name": "Ancient mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11064" + }, + { + "shop_price": "5", + "ge_buy_limit": "100", + "examine": "Used to make gold bracelets.", + "grand_exchange_price": "456", + "durability": null, + "name": "Bracelet mould", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "11065" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "456", + "durability": null, + "name": "Bracelet mould", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11066" + }, + { + "shop_price": "165", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "223", + "durability": null, + "name": "Gold bracelet", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11069", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "223", + "durability": null, + "name": "Gold bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11070" + }, + { + "shop_price": "1035", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "578", + "durability": null, + "name": "Sapphire bracelet", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11072", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "578", + "durability": null, + "name": "Sapphire bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11073" + }, + { + "shop_price": "506", + "ge_buy_limit": "5000", + "examine": "Now I can become a potter.", + "grand_exchange_price": "644", + "durability": null, + "name": "Bracelet of clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11074", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "644", + "durability": null, + "name": "Bracelet of clay", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11075" + }, + { + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "786", + "durability": null, + "name": "Emerald bracelet", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11076", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "786", + "durability": null, + "name": "Emerald bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11077" + }, + { + "ge_buy_limit": "34464", + "examine": "Must be worn as you enter the game to receive the bonus for that game.", + "grand_exchange_price": "926", + "durability": null, + "name": "Castlewar brace(3)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11079", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "926", + "durability": null, + "name": "Castlewar brace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11080" + }, + { + "examine": "Must be worn as you enter the game to receive the bonus for that game.", + "grand_exchange_price": "3", + "durability": null, + "name": "Castlewar brace(2)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11081", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Castlewar brace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11082" + }, + { + "ge_buy_limit": "5000", + "examine": "Must be worn as you enter the game to receive the bonus for that game.", + "grand_exchange_price": "3484", + "durability": null, + "name": "Castlewar brace(1)", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11083", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3484", + "durability": null, + "name": "Castlewar brace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11084" + }, + { + "shop_price": "2325", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "1271", + "durability": null, + "name": "Ruby bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11085", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1271", + "durability": null, + "name": "Ruby bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11086" + }, + { + "ge_buy_limit": "5000", + "examine": "It eases diseases!", + "grand_exchange_price": "1376", + "durability": null, + "name": "Inoculation brace", + "tradeable": "true", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11088", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1376", + "durability": null, + "name": "Inoculation brace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11089" + }, + { + "ge_buy_limit": "5000", + "examine": "In case of emergency, wear necklace.", + "grand_exchange_price": "15400", + "durability": null, + "name": "Phoenix necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11090", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "15400", + "durability": null, + "name": "Phoenix necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11091" + }, + { + "shop_price": "3422", + "ge_buy_limit": "5000", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "12100", + "durability": null, + "name": "Diamond bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11092", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "12100", + "durability": null, + "name": "Diamond bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11093" + }, + { + "ge_buy_limit": "5000", + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "15200", + "durability": null, + "name": "Forinthry brace(5)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11095", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "15200", + "durability": null, + "name": "Forinthry brace(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11096" + }, + { + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "5", + "durability": null, + "name": "Forinthry brace(4)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11097", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Forinthry brace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11098" + }, + { + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "5", + "durability": null, + "name": "Forinthry brace(3)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11099", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Forinthry brace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11100" + }, + { + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "5", + "durability": null, + "name": "Forinthry brace(2)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11101", + "equipment_slot": "9" + }, + { + "durability": null, + "name": "Forinthry brace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11102" + }, + { + "ge_buy_limit": "5000", + "examine": "It repels revenants and helps you enter the Abyss.", + "grand_exchange_price": "2537", + "durability": null, + "name": "Forinthry brace(1)", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11103", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2537", + "durability": null, + "name": "Forinthry brace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11104" + }, + { + "ge_buy_limit": "100", + "examine": "This will help me travel.", + "grand_exchange_price": "30400", + "durability": null, + "name": "Skills necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11105", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "30400", + "durability": null, + "name": "Skills necklace(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11106" + }, + { + "examine": "This will help me travel.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skills necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11107", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Skills necklace(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11108" + }, + { + "examine": "This will help me travel.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skills necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11109", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Skills necklace(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11110" + }, + { + "examine": "This will help me travel.", + "grand_exchange_price": "1", + "durability": null, + "name": "Skills necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11111", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Skills necklace(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11112" + }, + { + "ge_buy_limit": "100", + "examine": "This will help me travel.", + "grand_exchange_price": "28400", + "durability": null, + "name": "Skills necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11113", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "28400", + "durability": null, + "name": "Skills necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11114" + }, + { + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon bracelet", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11115", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "26000", + "durability": null, + "name": "Dragon bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11116" + }, + { + "ge_buy_limit": "100", + "examine": "A handy way to get around.", + "grand_exchange_price": "29700", + "durability": null, + "name": "Combat bracelet(4)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11118", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11119" + }, + { + "examine": "A handy way to get around.", + "grand_exchange_price": "1", + "durability": null, + "name": "Combat bracelet(3)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11120", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11121" + }, + { + "examine": "A handy way to get around.", + "grand_exchange_price": "1", + "durability": null, + "name": "Combat bracelet(2)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11122", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11123" + }, + { + "examine": "A handy way to get around.", + "grand_exchange_price": "1", + "durability": null, + "name": "Combat bracelet(1)", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11124", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11125" + }, + { + "ge_buy_limit": "100", + "examine": "You will need to recharge the bracelet at the Legends Guild.", + "grand_exchange_price": "29000", + "durability": null, + "name": "Combat bracelet", + "tradeable": "true", + "weight": "0.3", + "archery_ticket_price": "0", + "id": "11126", + "bonuses": "7,7,7,3,7,5,5,5,3,5,5,6,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "29000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Combat bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11127" + }, + { + "ge_buy_limit": "100", + "examine": "Makes obsidian weapons even stronger!", + "grand_exchange_price": "2400000", + "durability": null, + "name": "Berserker necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11128", + "bonuses": "-10,-10,-10,0,0,-20,-20,-20,-20,-20,-20,7,3,0,0", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2400000", + "durability": null, + "name": "Berserker necklace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11129" + }, + { + "shop_price": "80400", + "ge_buy_limit": "100", + "examine": "I wonder if this is valuable.", + "grand_exchange_price": "941200", + "durability": null, + "name": "Onyx bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11130", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "941200", + "durability": null, + "name": "Onyx bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11131" + }, + { + "ge_buy_limit": "100", + "examine": "Helps to restore your life points.", + "grand_exchange_price": "124200", + "durability": null, + "name": "Regen bracelet", + "tradeable": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "11133", + "bonuses": "8,8,8,3,7,6,6,6,3,6,5,7,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "124200", + "durability": null, + "name": "Regen bracelet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11134" + }, + { + "remove_sleeves": "true", + "examine": "For all your flying needs.", + "durability": null, + "name": "Bomber jacket", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11135", + "equipment_slot": "4" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pair of pale green Karamja gloves.", + "durability": null, + "name": "Karamja gloves 1", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11136", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11137" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pair of green Karamja gloves.", + "durability": null, + "name": "Karamja gloves 2", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11138", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11139" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A pair of dark green Karamja gloves.", + "durability": null, + "name": "Karamja gloves 3", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11140", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11141" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "When empty: A vessel for holding liquid. Filled with water: A vessel containing water. Filled with Goutweed: A vessel containing water and goutweed.", + "durability": null, + "name": "Dream vial (empty)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11151" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "When empty: A vessel for holding liquid. Filled with water: A vessel containing water. Filled with Goutweed: A vessel containing water and goutweed.", + "durability": null, + "name": "Dream vial (water)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11152" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "When empty: A vessel for holding liquid. Filled with water: A vessel containing water. Filled with Goutweed: A vessel containing water and goutweed.", + "durability": null, + "name": "Dream vial (herb)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11153" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Potion of Shared Dreaming. One dream for two!", + "durability": null, + "name": "Dream potion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11154" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A ground astral rune.", + "durability": null, + "name": "Ground astral rune", + "archery_ticket_price": "0", + "id": "11155" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An astral rune that has been broken into shards.", + "durability": null, + "name": "Astral rune shards", + "archery_ticket_price": "0", + "id": "11156" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A lunar-styled lamp. I wonder what's inside?", + "durability": null, + "name": "Dreamy lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11157" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Perfect for storing heavy things.", + "durability": null, + "name": "Cyrisus's chest", + "tradeable": "false", + "destroy": "true", + "weight": "6", + "archery_ticket_price": "0", + "id": "11158" + }, + { + "destroy_message": "You will have to create another using the Lunar Spellbook.", + "ge_buy_limit": "100", + "examine": "A box of Hunter goodies.", + "grand_exchange_price": "3", + "durability": null, + "name": "Hunter kit", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "11159" + }, + { + "destroy_message": "You'll need to get it back from Captain Rovin.", + "examine": "Complete Shield of Arrav.", + "durability": null, + "name": "Restored shield", + "destroy": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "11164" + }, + { + "turn90cw_anim": "821", + "examine": "Second-rate crossbow, former property of the Phoenix Gang.", + "walk_anim": "4226", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Phoenix crossbow", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "11165", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Phoenix crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11166" + }, + { + "turn90cw_anim": "821", + "examine": "Second-rate crossbow, former property of the Phoenix Gang.", + "walk_anim": "4226", + "durability": null, + "weight": "3", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "name": "Phoenix crossbow", + "tradeable": "true", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "11167", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,6,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Phoenix crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11168" + }, + { + "shop_price": "50", + "examine": "A collection of written news on paper!", + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11169" + }, + { + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11170" + }, + { + "shop_price": "50", + "examine": "A collection of written news on paper!", + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11171" + }, + { + "durability": null, + "name": "Newspaper", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11172" + }, + { + "destroy_message": "Instead of destroying this I should get a friend to help me retrieve the other half.", + "examine": "I can use this to claim a reward from the King, if I get the other half.", + "durability": null, + "name": "Half certificate", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11173" + }, + { + "destroy_message": "Instead of destroying this I should get a friend to help me retrieve the other half.", + "examine": "I can use this to claim a reward from the King, if I get the other half.", + "durability": null, + "name": "Half certificate", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11174" + }, + { + "destroy_message": "You can get another find from the pile in the cleaning area of Varrock Museum.", + "examine": "A roughly-prepared archaeological find ready for cleaning.", + "durability": null, + "name": "Uncleaned find", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11175" + }, + { + "examine": "An old looking coin.", + "durability": null, + "name": "Old coin", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11179" + }, + { + "examine": "A cracked and rusty looking coin.", + "durability": null, + "name": "Ancient coin", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11180" + }, + { + "examine": "A very old symbol of Saradomin.", + "durability": null, + "name": "Ancient symbol", + "archery_ticket_price": "0", + "id": "11181" + }, + { + "examine": "An old symbol of Saradomin.", + "durability": null, + "name": "Old symbol", + "archery_ticket_price": "0", + "id": "11182" + }, + { + "examine": "An old vase with Saradominist markings - it has been chipped.", + "durability": null, + "name": "Old chipped vase", + "archery_ticket_price": "0", + "id": "11183" + }, + { + "examine": "A map of Varrock Museum.", + "durability": null, + "name": "Museum map", + "archery_ticket_price": "0", + "id": "11184" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11185" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11186" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11187" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11188" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11189" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (1)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11190", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (2)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11191", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (3)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11192", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (4)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11193", + "equipment_slot": "2" + }, + { + "examine": "An enchanted necklace.", + "durability": null, + "name": "Digsite pendant (5)", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "11194", + "equipment_slot": "2" + }, + { + "examine": "A recently-cleaned necklace.", + "durability": null, + "name": "Clean necklace", + "archery_ticket_price": "0", + "id": "11195", + "equipment_slot": "2" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "One of Grimgnash's feathers.", + "durability": null, + "name": "Griffin feather", + "archery_ticket_price": "0", + "id": "11196" + }, + { + "destroy_message": "You will need to try and find another pendant in the mouse hole if you destroy this.", + "examine": "The pendant belonging to Miazrqa.", + "durability": null, + "name": "Miazrqa's pendant", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11197" + }, + { + "destroy_message": "You will need to find another sheet of music in the witch's basement if you destroy this.", + "examine": "A sheet of music.", + "durability": null, + "name": "Music sheet", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11198" + }, + { + "destroy_message": "You will need to obtain another helmet from Rupert the Beard if you destroy this", + "shop_price": "60000", + "examine": "A sturdy helmet that belonged to Rupert the beard.", + "durability": null, + "name": "Rupert's helmet", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11199" + }, + { + "remove_head": "true", + "requirements": "{1,50}", + "shop_price": "60000", + "ge_buy_limit": "100", + "examine": "A sturdy helmet that belonged to Rupert the beard.", + "durability": null, + "weight": "1.9", + "equipment_slot": "0", + "grand_exchange_price": "35800", + "name": "Dwarven helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11200", + "bonuses": "0,0,6,-2,-2,27,28,31,5,24,8,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "35800", + "durability": null, + "name": "Dwarven helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11201" + }, + { + "destroy_message": "You will need to find another copy in the witch's basement if you destroy this.", + "examine": "A recipe for a shrinking potion.", + "durability": null, + "name": "Shrinking recipe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11202" + }, + { + "destroy_message": "You will need to find another copy in the witch's basement if you destroy this.", + "examine": "A list of tasks for the day.", + "durability": null, + "name": "To-do list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11203" + }, + { + "destroy_message": "You will need to make another shrinking potion if you destroy this.", + "examine": "Apparently it shrinks you. Very fast.", + "durability": null, + "name": "Shrink-me-quick", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11204", + "equipment_slot": "3" + }, + { + "shop_price": "4", + "ge_buy_limit": "100", + "examine": "A shrunk ogleroot! How odd...", + "grand_exchange_price": "35", + "durability": null, + "name": "Shrunk ogleroot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11205" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A shiny golden goblin. Strange!", + "durability": null, + "name": "Golden goblin", + "tradeable": "false", + "destroy": "true", + "weight": "30", + "archery_ticket_price": "0", + "id": "11210" + }, + { + "destroy_message": "You will need to get another bag of beans from Sylas if you destroy this one.", + "examine": "A bag of magic beans.", + "durability": null, + "name": "Magic beans", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11211" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "2674", + "durability": null, + "name": "Dragon arrow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11212", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with dragon heads and oil-soaked cloth.lit: Dragon-headed fire arrow.", + "grand_exchange_price": "3988", + "durability": null, + "name": "Dragon fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11217", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "unlit: Arrows with dragon heads and oil-soaked cloth.lit: Dragon-headed fire arrow.", + "grand_exchange_price": "3834", + "durability": null, + "name": "Dragon fire arrows", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11222", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "3141", + "durability": null, + "name": "Dragon arrow(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11227", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "2866", + "durability": null, + "name": "Dragon arrow(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11228", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "An arrow made using a dragon's talon.", + "grand_exchange_price": "3766", + "durability": null, + "name": "Dragon arrow(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11229", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60", + "equipment_slot": "13" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "315", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11230", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "445", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11231", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "ge_buy_limit": "5000", + "examine": "A deadly looking dragon dart tip - needs feathers for flight.", + "grand_exchange_price": "746", + "attack_audios": "2547,0,0,0", + "durability": null, + "name": "Dragon dart tip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11232" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "516", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11233", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "requirements": "{4,60}", + "ge_buy_limit": "10000", + "examine": "A deadly throwing dart with a dragon tip.", + "durability": null, + "attack_speed": "3", + "weapon_interface": "18", + "equipment_slot": "3", + "grand_exchange_price": "1248", + "attack_audios": "2547,0,0,0", + "name": "Dragon dart(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11234", + "bonuses": "0,0,0,0,18,0,0,0,0,0,0,0,0,0,20" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "821", + "examine": "A bow from a darker dimension.", + "walk_anim": "819", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "822", + "attack_speed": "9", + "two_handed": "true", + "turn180_anim": "820", + "defence_anim": "424", + "equipment_slot": "3", + "attack_anims": "426,426,426,426", + "grand_exchange_price": "143400", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "11235", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,95,0,0,0,0,0,0,0,0,0,0", + "requirements": "{4,60}", + "durability": null, + "weight": "1.9", + "weapon_interface": "16", + "equip_audio": "3738", + "render_anim": "1", + "lendable": "true", + "attack_audios": "3731,0,0,0", + "name": "Dark bow" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "143400", + "durability": null, + "name": "Dark bow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11236" + }, + { + "ge_buy_limit": "10000", + "examine": "Dragon talons, usable as arrowheads.", + "grand_exchange_price": "3391", + "durability": null, + "name": "Dragon arrowtips", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11237" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "A baby impling in a jar. That's a bit cruel.", + "grand_exchange_price": "529", + "durability": null, + "name": "Baby impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11238" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "529", + "durability": null, + "name": "Baby impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11239" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "A young impling in a jar. Don't trap me, man.", + "grand_exchange_price": "514", + "durability": null, + "name": "Young impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11240" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "514", + "durability": null, + "name": "Young impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11241" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "A gourmet impling in a jar.", + "grand_exchange_price": "677", + "durability": null, + "name": "Gourm' impling jar", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11242" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "677", + "durability": null, + "name": "Gourm' impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11243" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Earth impling in a jar.", + "grand_exchange_price": "1343", + "durability": null, + "name": "Earth impling jar", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11244" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1343", + "durability": null, + "name": "Earth impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11245" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Essence impling in a jar.", + "grand_exchange_price": "1266", + "durability": null, + "name": "Ess' impling jar", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11246" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1266", + "durability": null, + "name": "Ess' impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11247" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Eclectic impling in a jar.", + "grand_exchange_price": "2943", + "durability": null, + "name": "Eclectic impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11248" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2943", + "durability": null, + "name": "Eclectic impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11249" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Nature impling in a jar.", + "grand_exchange_price": "8593", + "durability": null, + "name": "Nature impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11250" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "8593", + "durability": null, + "name": "Nature impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11251" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Magpie impling in a jar.", + "grand_exchange_price": "22900", + "durability": null, + "name": "Magpie impling jar", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11252" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "22900", + "durability": null, + "name": "Magpie impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11253" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "1000", + "examine": "Ninja impling in a jar.", + "grand_exchange_price": "21800", + "durability": null, + "name": "Ninja impling jar", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11254" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "21800", + "durability": null, + "name": "Ninja impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11255" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "ge_buy_limit": "500", + "examine": "Dragon impling in a jar.", + "grand_exchange_price": "423600", + "durability": null, + "name": "Dragon impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11256" + }, + { + "ge_buy_limit": "500", + "grand_exchange_price": "423600", + "durability": null, + "name": "Dragon impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11257" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Creates butterfly and impling jars.", + "durability": null, + "name": "Jar generator", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11258" + }, + { + "requirements": "{21,17}", + "shop_price": "3", + "turn90cw_anim": "6610", + "examine": "For catching butterflies.", + "walk_anim": "6607", + "durability": null, + "destroy": "true", + "weight": "0.2", + "turn90ccw_anim": "6609", + "attack_speed": "4", + "two_handed": "", + "weapon_interface": "14", + "turn180_anim": "6608", + "render_anim": "1426", + "equipment_slot": "3", + "destroy_message": "You will have to trade with Elnock to get a new magic butterfly net.", + "stand_anim": "6604", + "name": "Magic butterfly net", + "tradeable": "false", + "run_anim": "6603", + "archery_ticket_price": "0", + "id": "11259", + "stand_turn_anim": "6611" + }, + { + "shop_price": "1", + "ge_buy_limit": "1000", + "examine": "It's got little holes in the top.", + "grand_exchange_price": "248", + "durability": null, + "name": "Impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11260" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "248", + "durability": null, + "name": "Impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11261" + }, + { + "shop_price": "3", + "ge_buy_limit": "100", + "examine": "Imps seem to hate this stuff. Can't say I blame them.", + "grand_exchange_price": "1016", + "durability": null, + "name": "Imp repellent", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11262" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1016", + "durability": null, + "name": "Imp repellent", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11263" + }, + { + "ge_buy_limit": "100", + "examine": "Omega 3 oil. Good for the brain, not so for the nose.", + "grand_exchange_price": "601", + "durability": null, + "name": "Anchovy oil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11264" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "601", + "durability": null, + "name": "Anchovy oil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11265" + }, + { + "ge_buy_limit": "100", + "examine": "Fish paste. Urk.", + "grand_exchange_price": "57", + "durability": null, + "name": "Anchovy paste", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11266" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11267" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11268" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11269" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11270" + }, + { + "examine": "I can train on this", + "durability": null, + "name": "Picture", + "archery_ticket_price": "0", + "id": "11271" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11272" + }, + { + "destroy_message": "You will have to ask Elnock for another one of these.", + "examine": "Lets you easily identify your prey.", + "durability": null, + "name": "Impling scroll", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11273" + }, + { + "remove_sleeves": "true", + "examine": "The label says 'Vivid Crimson', but it looks like pink to me!", + "grand_exchange_price": "27", + "durability": null, + "name": "Ham shirt", + "tradeable": "true", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "11274", + "bonuses": "0,0,0,0,0,0,2,2,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11275" + }, + { + "durability": null, + "name": "Mith grapple", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11276" + }, + { + "lendable": "true", + "examine": "I hope I don't meet any roundheads...", + "durability": null, + "name": "Cavalier mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11277", + "equipment_slot": "8" + }, + { + "examine": "Essential mime wear.", + "durability": null, + "name": "Beret mask", + "weight": "1", + "archery_ticket_price": "0", + "id": "11278", + "equipment_slot": "0" + }, + { + "destroy_message": "You can complete the quest by speaking to Oziach even if you do not have the head.", + "examine": "The severed head of the great dragon Elvarg!", + "durability": null, + "name": "Elvarg's head", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11279", + "equipment_slot": "3" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "I hope I don't meet any roundheads...", + "durability": null, + "name": "Cavalier and mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11280", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Cavalier and mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11281" + }, + { + "remove_head": "true", + "examine": "Essential mime wear.", + "durability": null, + "name": "Beret and mask", + "weight": "1", + "archery_ticket_price": "0", + "id": "11282", + "equipment_slot": "0" + }, + { + "requirements": "{1,75}", + "examine": "A heavy shield with a snarling, draconic visage.", + "grand_exchange_price": "5653008", + "rare_item": "true", + "durability": null, + "name": "Dragonfire shield", + "weight": "7.2", + "archery_ticket_price": "0", + "id": "11283", + "bonuses": "0,0,0,-10,-5,20,25,22,10,22,17,7,0,0,0", + "equipment_slot": "5" + }, + { + "requirements": "{1,75}", + "ge_buy_limit": "10", + "examine": "A heavy shield with a snarling, draconic visage.", + "rare_item": "true", + "durability": null, + "weight": "7.2", + "equipment_slot": "5", + "grand_exchange_price": "7700000", + "name": "Dragonfire shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11284", + "bonuses": "0,0,0,-10,-5,20,25,22,10,22,17,7,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "7700000", + "durability": null, + "name": "Dragonfire shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11285" + }, + { + "ge_buy_limit": "10", + "examine": "It looks like this could be attached to a shield somehow.", + "grand_exchange_price": "8000000", + "rare_item": "true", + "durability": null, + "name": "Draconic visage", + "tradeable": "true", + "weight": "1.8", + "archery_ticket_price": "0", + "id": "11286" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "8000000", + "durability": null, + "name": "Draconic visage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11287" + }, + { + "examine": "A heavy barbarian Fishing rod.", + "durability": null, + "name": "Barbarian rod", + "weight": "1", + "archery_ticket_price": "0", + "id": "11323" + }, + { + "shop_price": "6", + "ge_buy_limit": "5000", + "examine": "Roe, or cheap fishy eggs.", + "grand_exchange_price": "17", + "durability": null, + "name": "Roe", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "11324" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "17", + "durability": null, + "name": "Roe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11325" + }, + { + "ge_buy_limit": "5000", + "examine": "Caviar, or expensive fishy eggs.", + "grand_exchange_price": "370", + "durability": null, + "name": "Caviar", + "tradeable": "true", + "weight": "0.05", + "archery_ticket_price": "0", + "id": "11326" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "370", + "durability": null, + "name": "Caviar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11327" + }, + { + "shop_price": "11", + "ge_buy_limit": "5000", + "examine": "A sad-looking trout.", + "grand_exchange_price": "9", + "durability": null, + "name": "Leaping trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11328" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "9", + "durability": null, + "name": "Leaping trout", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11329" + }, + { + "ge_buy_limit": "5000", + "examine": "Some non-tasty salmon.", + "grand_exchange_price": "19", + "durability": null, + "name": "Leaping salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11330" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "19", + "durability": null, + "name": "Leaping salmon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11331" + }, + { + "ge_buy_limit": "5000", + "examine": "A bloated sturgeon.", + "grand_exchange_price": "151", + "durability": null, + "name": "Leaping sturgeon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11332" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "151", + "durability": null, + "name": "Leaping sturgeon", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11333" + }, + { + "ge_buy_limit": "100", + "examine": "Slices of inedible fish.", + "grand_exchange_price": "2", + "durability": null, + "name": "Fish offcuts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11334" + }, + { + "remove_head": "true", + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "Protects your head and looks impressive too.", + "rare_item": "true", + "durability": null, + "weight": "2", + "absorb": "2,0,4", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "51600000", + "name": "Dragon full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11335", + "bonuses": "0,0,0,-6,-2,45,48,41,-1,46,12,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "51600000", + "durability": null, + "name": "Dragon full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11336" + }, + { + "destroy_message": "I can gather more from the caverns below the Baxtorian Lake.", + "examine": "The bones of a barbarian warrior, slain by his fellow adventurers.", + "durability": null, + "name": "Mangled bones", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11337" + }, + { + "destroy_message": "I can gather more from the caverns below the Baxtorian Lake.", + "examine": "The bones of a barbarian warrior, slain by vile dragons.", + "durability": null, + "name": "Chewed bones", + "destroy": "true", + "weight": "9.6", + "archery_ticket_price": "0", + "id": "11338" + }, + { + "destroy_message": "I can obtain another from Otto.", + "examine": "Records from my discoveries beneath the lake.", + "durability": null, + "name": "My notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11339" + }, + { + "destroy_message": "I can obtain another from Otto.", + "examine": "A record of Otto's instructions to me.", + "durability": null, + "name": "Barbarian skills", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11340" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11341" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11342" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11343" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11344" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11345" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11346" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11347" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11348" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11349" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11350" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11351" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11352" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11353" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11354" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11355" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11356" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11357" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11358" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11359" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11360" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11361" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11362" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11363" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11364" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11365" + }, + { + "destroy_message": "I can loot another from the caverns beneath the Baxtorian Lake.", + "examine": "Could a dragon have written this?; Tiny writing.;Smells disgusting.", + "durability": null, + "name": "Ancient page", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11366" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "204", + "stand_anim": "813", + "name": "Bronze hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11367", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "204", + "durability": null, + "name": "Bronze hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11368" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "25", + "stand_anim": "813", + "name": "Iron hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11369", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "25", + "durability": null, + "name": "Iron hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11370" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "93", + "stand_anim": "813", + "name": "Steel hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11371", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "93", + "durability": null, + "name": "Steel hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11372" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "357", + "stand_anim": "813", + "name": "Mithril hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11373", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "357", + "durability": null, + "name": "Mithril hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11374" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1095", + "stand_anim": "813", + "name": "Adamant hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11375", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1095", + "durability": null, + "name": "Adamant hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11376" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "12300", + "stand_anim": "813", + "name": "Rune hasta", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11377", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12300", + "durability": null, + "name": "Rune hasta", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11378" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "290", + "stand_anim": "813", + "name": "Bronze hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11379", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "290", + "durability": null, + "name": "Bronze hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11380" + }, + { + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed bronze hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Bronze hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11381", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "775", + "stand_anim": "813", + "name": "Bronze hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11382", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "775", + "durability": null, + "name": "Bronze hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11383" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A bronze-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8974", + "stand_anim": "813", + "name": "Bronze hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11384", + "stand_turn_anim": "1209", + "bonuses": "5,5,5,0,0,-1,-1,-1,0,-1,0,6,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8974", + "durability": null, + "name": "Bronze hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11385" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "99", + "stand_anim": "813", + "name": "Iron hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11386", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "99", + "durability": null, + "name": "Iron hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11387" + }, + { + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed iron hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Iron hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11388", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "584", + "stand_anim": "813", + "name": "Iron hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11389", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "584", + "durability": null, + "name": "Iron hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11390" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An iron-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8783", + "stand_anim": "813", + "name": "Iron hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11391", + "stand_turn_anim": "1209", + "bonuses": "8,8,8,0,0,-2,-2,-2,0,-2,0,10,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8783", + "durability": null, + "name": "Iron hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11392" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "151", + "stand_anim": "813", + "name": "Steel hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11393", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "151", + "durability": null, + "name": "Steel hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11394" + }, + { + "requirements": "{0,5}", + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed steel hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Steel hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11395", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "636", + "stand_anim": "813", + "name": "Steel hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11396", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "636", + "durability": null, + "name": "Steel hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11397" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A steel-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8835", + "stand_anim": "813", + "name": "Steel hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11398", + "stand_turn_anim": "1209", + "bonuses": "12,12,12,0,0,-3,-3,-3,0,-3,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8835", + "durability": null, + "name": "Steel hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11399" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "440", + "stand_anim": "813", + "name": "Mithril hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11400", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "440", + "durability": null, + "name": "Mithril hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11401" + }, + { + "requirements": "{0,20}", + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed mithril hasta", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "353", + "stand_anim": "813", + "name": "Mithril hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11402", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "925", + "stand_anim": "813", + "name": "Mithril hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11403", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "925", + "durability": null, + "name": "Mithril hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11404" + }, + { + "requirements": "{0,20}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A mithril-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "1.8", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "8711", + "stand_anim": "813", + "name": "Mithril hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11405", + "stand_turn_anim": "1209", + "bonuses": "17,17,17,0,0,-5,-5,-4,0,-5,0,18,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8711", + "durability": null, + "name": "Mithril hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11406" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1154", + "stand_anim": "813", + "name": "Adamant hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11407", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1154", + "durability": null, + "name": "Adamant hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11408" + }, + { + "requirements": "{0,30}", + "turn90cw_anim": "1207", + "examine": "\tA karambwan poison-tipped, one-handed adamantite hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Adamant hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11409", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "1639", + "stand_anim": "813", + "name": "Adamant hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11410", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1639", + "durability": null, + "name": "Adamant hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11411" + }, + { + "requirements": "{0,30}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "An adamant-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "9388", + "stand_anim": "813", + "name": "Adamant hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11412", + "stand_turn_anim": "1209", + "bonuses": "24,24,24,0,0,-6,-7,-5,0,-6,0,28,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9388", + "durability": null, + "name": "Adamant hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11413" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "12300", + "stand_anim": "813", + "name": "Rune hasta(p)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11414", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12300", + "durability": null, + "name": "Rune hasta(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11415" + }, + { + "requirements": "{0,40}", + "turn90cw_anim": "1207", + "examine": "A karambwan poison-tipped, one-handed rune hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "stand_anim": "813", + "name": "Rune hasta(kp)", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11416", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "12200", + "stand_anim": "813", + "name": "Rune hasta(p+)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11417", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12200", + "durability": null, + "name": "Rune hasta(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11418" + }, + { + "requirements": "{0,40}", + "ge_buy_limit": "100", + "turn90cw_anim": "1207", + "examine": "A rune-tipped, one-handed hasta.", + "walk_anim": "1205", + "durability": null, + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "14", + "turn180_anim": "1206", + "render_anim": "28", + "equipment_slot": "3", + "grand_exchange_price": "15500", + "stand_anim": "813", + "name": "Rune hasta(p++)", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11419", + "stand_turn_anim": "1209", + "bonuses": "36,36,36,0,0,-10,-10,-9,0,-10,0,42,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "15500", + "durability": null, + "name": "Rune hasta(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11420" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy attack potion", + "grand_exchange_price": "20", + "durability": null, + "name": "Attack mix(2)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "11429" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "20", + "durability": null, + "name": "Attack mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11430" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy attack potion", + "grand_exchange_price": "19", + "durability": null, + "name": "Attack mix(1)", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "11431" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "19", + "durability": null, + "name": "Attack mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11432" + }, + { + "ge_buy_limit": "1000", + "examine": "Two doses of fishy antipoison potion.", + "grand_exchange_price": "455", + "durability": null, + "name": "Antipoison mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11433" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "455", + "durability": null, + "name": "Antipoison mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11434" + }, + { + "ge_buy_limit": "1000", + "examine": "Two doses of fishy antipoison potion.", + "grand_exchange_price": "608", + "durability": null, + "name": "Antipoison mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11435" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "608", + "durability": null, + "name": "Antipoison mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11436" + }, + { + "ge_buy_limit": "1000", + "examine": "2 dose: Two doses of fishy Relicym's balm.", + "grand_exchange_price": "264", + "durability": null, + "name": "Relicym's mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11437" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "264", + "durability": null, + "name": "Relicym's mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11438" + }, + { + "ge_buy_limit": "1000", + "examine": "2 dose: Two doses of fishy Relicym's balm.", + "grand_exchange_price": "131", + "durability": null, + "name": "Relicym's mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11439" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "131", + "durability": null, + "name": "Relicym's mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11440" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy strength potion.", + "grand_exchange_price": "159", + "durability": null, + "name": "Strength mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11441" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "159", + "durability": null, + "name": "Strength mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11442" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy strength potion.", + "grand_exchange_price": "164", + "durability": null, + "name": "Strength mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11443" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "164", + "durability": null, + "name": "Strength mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11444" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy Combat potion", + "grand_exchange_price": "366", + "durability": null, + "name": "Combat mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11445" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "366", + "durability": null, + "name": "Combat mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11446" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy Combat potion", + "grand_exchange_price": "328", + "durability": null, + "name": "Combat mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11447" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "328", + "durability": null, + "name": "Combat mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11448" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of fishy restore potion.", + "grand_exchange_price": "17", + "durability": null, + "name": "Restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11449" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "17", + "durability": null, + "name": "Restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11450" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of fishy restore potion.", + "grand_exchange_price": "24", + "durability": null, + "name": "Restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11451" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "24", + "durability": null, + "name": "Restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11452" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy energy potion.", + "grand_exchange_price": "248", + "durability": null, + "name": "Energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11453" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "248", + "durability": null, + "name": "Energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11454" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy energy potion.", + "grand_exchange_price": "212", + "durability": null, + "name": "Energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11455" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "212", + "durability": null, + "name": "Energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11456" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy defence potion", + "grand_exchange_price": "887", + "durability": null, + "name": "Defence mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11457" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "887", + "durability": null, + "name": "Defence mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11458" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of a fishy defence potion", + "grand_exchange_price": "780", + "durability": null, + "name": "Defence mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11459" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "780", + "durability": null, + "name": "Defence mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11460" + }, + { + "ge_buy_limit": "1000", + "examine": "2 doses of a fishy agility potion", + "grand_exchange_price": "388", + "durability": null, + "name": "Agility mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11461" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "388", + "durability": null, + "name": "Agility mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11462" + }, + { + "ge_buy_limit": "1000", + "examine": "1 dose of a fishy agility potion", + "grand_exchange_price": "459", + "durability": null, + "name": "Agility mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11463" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "459", + "durability": null, + "name": "Agility mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11464" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of a fishy Prayer potion.", + "grand_exchange_price": "2761", + "durability": null, + "name": "Prayer mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11465" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2761", + "durability": null, + "name": "Prayer mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11466" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two dose(s) of a fishy Prayer potion.", + "grand_exchange_price": "1857", + "durability": null, + "name": "Prayer mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11467" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1857", + "durability": null, + "name": "Prayer mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11468" + }, + { + "ge_buy_limit": "1000", + "examine": "one/two doses of fishy super attack potion", + "grand_exchange_price": "375", + "durability": null, + "name": "Superattack mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11469" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "375", + "durability": null, + "name": "Superattack mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11470" + }, + { + "ge_buy_limit": "1000", + "examine": "one/two doses of fishy super attack potion", + "grand_exchange_price": "516", + "durability": null, + "name": "Superattack mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11471" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "516", + "durability": null, + "name": "Superattack mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11472" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy super antipoison potion.", + "grand_exchange_price": "613", + "durability": null, + "name": "Anti-p supermix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11473" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "613", + "durability": null, + "name": "Anti-p supermix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11474" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy super antipoison potion.", + "grand_exchange_price": "1119", + "durability": null, + "name": "Anti-p supermix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11475" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1119", + "durability": null, + "name": "Anti-p supermix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11476" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two Doses of fishy fishing potion.", + "grand_exchange_price": "123", + "durability": null, + "name": "Fishing mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11477" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "123", + "durability": null, + "name": "Fishing mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11478" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two Doses of fishy fishing potion.", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11479" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "87", + "durability": null, + "name": "Fishing mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11480" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super energy potion.", + "grand_exchange_price": "1062", + "durability": null, + "name": "Sup. energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11481" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1062", + "durability": null, + "name": "Sup. energy mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11482" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super energy potion.", + "grand_exchange_price": "562", + "durability": null, + "name": "Sup. energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11483" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "562", + "durability": null, + "name": "Sup. energy mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11484" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Super strength potion.", + "grand_exchange_price": "955", + "durability": null, + "name": "Sup. str. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11485" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "955", + "durability": null, + "name": "Sup. str. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11486" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Super strength potion.", + "grand_exchange_price": "1040", + "durability": null, + "name": "Sup. str. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11487" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1040", + "durability": null, + "name": "Sup. str. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11488" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Magic essence potion.", + "grand_exchange_price": "808", + "durability": null, + "name": "Magic ess. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11489" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "808", + "durability": null, + "name": "Magic ess. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11490" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Magic essence potion.", + "grand_exchange_price": "447", + "durability": null, + "name": "Magic ess. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11491" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "447", + "durability": null, + "name": "Magic ess. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11492" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super restore potion.", + "grand_exchange_price": "3670", + "durability": null, + "name": "Sup. restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11493" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3670", + "durability": null, + "name": "Sup. restore mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11494" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy super restore potion.", + "grand_exchange_price": "3104", + "durability": null, + "name": "Sup. restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11495" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3104", + "durability": null, + "name": "Sup. restore mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11496" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy super defence potion", + "grand_exchange_price": "38", + "durability": null, + "name": "Sup. def. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11497" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "38", + "durability": null, + "name": "Sup. def. mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11498" + }, + { + "ge_buy_limit": "1000", + "examine": "One/two doses of fishy super defence potion", + "grand_exchange_price": "66", + "durability": null, + "name": "Sup. def. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11499" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "66", + "durability": null, + "name": "Sup. def. mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11500" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy extra strength antidote potion.", + "grand_exchange_price": "1909", + "durability": null, + "name": "Antidote+ mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11501" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1909", + "durability": null, + "name": "Antidote+ mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11502" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy extra strength antidote potion.", + "grand_exchange_price": "1330", + "durability": null, + "name": "Antidote+ mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11503" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1330", + "durability": null, + "name": "Antidote+ mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11504" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy anti-fire breath potion.", + "grand_exchange_price": "2048", + "durability": null, + "name": "Antifire mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11505" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2048", + "durability": null, + "name": "Antifire mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11506" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two dose(s) of fishy anti-fire breath potion.", + "grand_exchange_price": "1444", + "durability": null, + "name": "Antifire mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11507" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1444", + "durability": null, + "name": "Antifire mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11508" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy ranging potion.", + "grand_exchange_price": "2879", + "durability": null, + "name": "Ranging mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11509" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "2879", + "durability": null, + "name": "Ranging mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11510" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy ranging potion.", + "grand_exchange_price": "1880", + "durability": null, + "name": "Ranging mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11511" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1880", + "durability": null, + "name": "Ranging mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11512" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy magic potion.", + "grand_exchange_price": "1022", + "durability": null, + "name": "Magic mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11513" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1022", + "durability": null, + "name": "Magic mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11514" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy magic potion.", + "grand_exchange_price": "1323", + "durability": null, + "name": "Magic mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11515" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "1323", + "durability": null, + "name": "Magic mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11516" + }, + { + "ge_buy_limit": "1000", + "examine": "Doses of fishy hunting potion", + "grand_exchange_price": "146", + "durability": null, + "name": "Hunting mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11517" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "146", + "durability": null, + "name": "Hunting mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11518" + }, + { + "ge_buy_limit": "1000", + "examine": "Doses of fishy hunting potion", + "grand_exchange_price": "87", + "durability": null, + "name": "Hunting mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11519" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "87", + "durability": null, + "name": "Hunting mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11520" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Zamorak potion.", + "grand_exchange_price": "665", + "durability": null, + "name": "Zamorak mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11521" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "665", + "durability": null, + "name": "Zamorak mix(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11522" + }, + { + "ge_buy_limit": "1000", + "examine": "One/Two doses of fishy Zamorak potion.", + "grand_exchange_price": "339", + "durability": null, + "name": "Zamorak mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0.1", + "id": "11523" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "339", + "durability": null, + "name": "Zamorak mix(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11524" + }, + { + "ge_buy_limit": "5000", + "examine": "More fluff than feather.", + "grand_exchange_price": "325", + "durability": null, + "name": "Wimpy feather", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11525" + }, + { + "destroy_message": "If you drop this book it will be destroyed. You cannot replace it.", + "examine": "Educate yourself.", + "durability": null, + "name": "Book of knowledge", + "weight": "1", + "archery_ticket_price": "0", + "id": "11640" + }, + { + "durability": null, + "name": "Astronomy book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11655" + }, + { + "ge_buy_limit": "100", + "examine": "A book that explains the art of crafting items from glass.", + "grand_exchange_price": "278", + "durability": null, + "name": "Glassblowing book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11656" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "278", + "durability": null, + "name": "Glassblowing book", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11657" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A mage helm from the order of the Void Knights.", + "durability": null, + "name": "Void mage helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11663", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A ranger helm from the order of the Void Knights", + "durability": null, + "name": "Void ranger helm", + "tradeable": "false", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "11664", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A melee helm from the order of the Void Knights.", + "durability": null, + "name": "Void melee helm", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "11665", + "bonuses": "0,0,0,0,0,6,6,6,6,6,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Void seal(8)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11666", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(7)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11667", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(6)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11668", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(5)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11669", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(4)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11670", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(3)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11671", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(2)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11672", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Void seal(1)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "11673", + "bonuses": "0,0,0,0,0,1,1,1,1,1,1,0,0,0,0", + "equipment_slot": "2" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A mage helm from the order of the Void Knights.", + "durability": null, + "name": "Void mage helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11674", + "bonuses": "0,0,0,0,0,6,6,6,6,6,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A ranger helm from the order of the Void Knights", + "durability": null, + "name": "Void ranger helm", + "tradeable": "false", + "weight": "3.6", + "archery_ticket_price": "0", + "id": "11675", + "bonuses": "0,0,0,0,0,6,6,6,6,6,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{0,42}-{1,42}-{2,42}-{3,42}-{4,42}-{5,22}-{6,42}", + "shop_price": "200", + "examine": "A melee helm from the order of the Void Knights.", + "durability": null, + "name": "Void melee helm", + "tradeable": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "11676", + "bonuses": "0,0,0,0,0,6,6,6,6,6,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "I can find another book in the Keldagrim library.", + "examine": "\"Beyond Trollheim\" by Nestor Peregrine.", + "durability": null, + "name": "Explorer's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11677" + }, + { + "destroy_message": "You'll need to visit the Sinclair Mansion to get another one.", + "examine": "A black helm, too small for your head", + "durability": null, + "name": "Black knight helm", + "tradeable": "false", + "destroy": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "11678" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11679" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A change of address form.", + "durability": null, + "name": "Address form", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11680" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "It has something written on it.", + "durability": null, + "name": "Scrap paper", + "archery_ticket_price": "0", + "id": "11681" + }, + { + "examine": "I could use this to pick the lock.", + "durability": null, + "name": "Hair clip", + "archery_ticket_price": "0", + "id": "11682" + }, + { + "ge_buy_limit": "10", + "examine": "Godsword shards 1 and 2.Godsword shards 2 and 3.Godsword shards 1 and 3.", + "grand_exchange_price": "331300", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11686" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "331300", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11687" + }, + { + "ge_buy_limit": "10", + "examine": "Godsword shards 1 and 2.Godsword shards 2 and 3.Godsword shards 1 and 3.", + "grand_exchange_price": "342100", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11688" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "342100", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11689" + }, + { + "ge_buy_limit": "10", + "examine": "The blade for the ultimate weapon.", + "grand_exchange_price": "466800", + "durability": null, + "name": "Godsword blade", + "tradeable": "true", + "weight": "7.5", + "archery_ticket_price": "0", + "id": "11690" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "466800", + "durability": null, + "name": "Godsword blade", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11691" + }, + { + "ge_buy_limit": "10", + "examine": "Godsword shards 1 and 2.Godsword shards 2 and 3.Godsword shards 1 and 3.", + "grand_exchange_price": "348500", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11692" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "348500", + "durability": null, + "name": "Godsword shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11693" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A beautiful, heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "28000000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11694", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Armadyl godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "28000000", + "durability": null, + "name": "Armadyl godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11695" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A brutally heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "3700000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11696", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Bandos godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3700000", + "durability": null, + "name": "Bandos godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11697" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A gracious, heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "22000000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11698", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Saradomin godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "22000000", + "durability": null, + "name": "Saradomin godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11699" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "A terrifying, heavy sword.", + "walk_anim": "7046", + "has_special": "true", + "turn90ccw_anim": "7044", + "attack_speed": "6", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "6100000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11700", + "stand_turn_anim": "7040", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,8,0,0", + "requirements": "{0,75}", + "durability": null, + "weight": "10", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Zamorak godsword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "6100000", + "durability": null, + "name": "Zamorak godsword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11701" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "30600000", + "rare_item": "true", + "durability": null, + "name": "Armadyl hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11702" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "30600000", + "durability": null, + "name": "Armadyl hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11703" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "3300000", + "rare_item": "true", + "durability": null, + "name": "Bandos hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11704" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3300000", + "durability": null, + "name": "Bandos hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11705" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "24900000", + "rare_item": "true", + "durability": null, + "name": "Saradomin hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11706" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "24900000", + "durability": null, + "name": "Saradomin hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11707" + }, + { + "ge_buy_limit": "10", + "examine": "Brimming with potential.", + "grand_exchange_price": "6100000", + "rare_item": "true", + "durability": null, + "name": "Zamorak hilt", + "tradeable": "true", + "weight": "2.5", + "archery_ticket_price": "0", + "id": "11708" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "6100000", + "durability": null, + "name": "Zamorak hilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11709" + }, + { + "ge_buy_limit": "10", + "examine": "Part of the Godsword blade.", + "grand_exchange_price": "150200", + "durability": null, + "rare_item": "true", + "name": "Godsword shard 1", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11710" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "150200", + "durability": null, + "name": "Godsword shard 1", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11711" + }, + { + "ge_buy_limit": "10", + "examine": "Part of the Godsword blade.", + "grand_exchange_price": "149100", + "durability": null, + "rare_item": "true", + "name": "Godsword shard 2", + "tradeable": "true", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11712" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "149100", + "durability": null, + "name": "Godsword shard 2", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11713" + }, + { + "ge_buy_limit": "10", + "examine": "Part of the Godsword blade.", + "grand_exchange_price": "149800", + "durability": null, + "rare_item": "true", + "name": "Godsword shard 3", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11714" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "149800", + "durability": null, + "name": "Godsword shard 3", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11715" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "An evil spear.", + "walk_anim": "1205", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "1206", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "grand_exchange_price": "5400000", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11716", + "stand_turn_anim": "1209", + "bonuses": "85,65,65,0,0,13,13,12,0,13,0,75,2,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "3", + "weapon_interface": "14", + "render_anim": "28", + "lendable": "true", + "name": "Zamorakian spear" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "5400000", + "durability": null, + "name": "Zamorakian spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11717" + }, + { + "remove_head": "true", + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "A helmet of great craftmanship.", + "rare_item": "true", + "durability": null, + "weight": "0.5", + "absorb": "0,5,2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "4100000", + "name": "Armadyl helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11718", + "bonuses": "-5,-5,-5,-5,10,6,8,10,10,8,12,0,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "4100000", + "durability": null, + "name": "Armadyl helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11719" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "1", + "examine": "A chestplate of great craftsmanship", + "rare_item": "true", + "durability": null, + "weight": "4", + "absorb": "0,10,5", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "14800000", + "name": "Armadyl chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11720", + "bonuses": "-7,-7,-7,-15,33,56,48,61,70,57,52,0,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "14800000", + "durability": null, + "name": "Armadyl chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11721" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "2", + "examine": "A rune plateskirt in the colours of Armadyl.", + "rare_item": "true", + "durability": null, + "weight": "8", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "14800000", + "name": "Armadyl plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11722", + "bonuses": "-6,-6,-6,-10,20,32,26,34,40,33,25,0,1,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14800000", + "durability": null, + "name": "Armadyl plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11723" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "1", + "examine": "A sturdy chestplate.", + "rare_item": "true", + "durability": null, + "weight": "12", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "remove_sleeves": "true", + "grand_exchange_price": "14700000", + "name": "Bandos chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11724", + "bonuses": "0,0,0,-15,-10,98,93,105,-6,133,52,4,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "14700000", + "durability": null, + "name": "Bandos chestplate", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11725" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "1", + "examine": "A sturdy pair of tassets.", + "rare_item": "true", + "durability": null, + "weight": "8", + "absorb": "3,0,6", + "equipment_slot": "7", + "lendable": "true", + "grand_exchange_price": "15200000", + "name": "Bandos tassets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11726", + "bonuses": "0,0,0,-21,-7,71,63,66,-4,93,25,2,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "15200000", + "durability": null, + "name": "Bandos tassets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11727" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "1", + "examine": "Some sturdy boots", + "rare_item": "true", + "durability": null, + "weight": "6", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "111700", + "name": "Bandos boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11728", + "bonuses": "0,0,0,-5,-3,17,18,19,0,0,15,0,1,0,0" + }, + { + "ge_buy_limit": "1", + "grand_exchange_price": "111700", + "durability": null, + "name": "Bandos boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11729" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "7043", + "examine": "The incredible blade of an Icyene.", + "walk_anim": "7046", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "7044", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "7045", + "defence_anim": "7050", + "equipment_slot": "3", + "attack_anims": "7041,7041,7048,7049", + "grand_exchange_price": "5300000", + "stand_anim": "7047", + "tradeable": "true", + "run_anim": "7039", + "archery_ticket_price": "0", + "id": "11730", + "stand_turn_anim": "7040", + "bonuses": "0,82,60,0,0,0,0,0,0,0,0,82,2,0,0", + "requirements": "{0,70}", + "durability": null, + "weight": "3", + "weapon_interface": "7", + "render_anim": "124", + "lendable": "true", + "attack_audios": "3846,0,0,0", + "name": "Saradomin sword" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "5300000", + "durability": null, + "name": "Saradomin sword", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11731" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "examine": "These will protect my feet.", + "durability": null, + "rare_item": "true", + "weight": "1", + "equipment_slot": "10", + "lendable": "true", + "grand_exchange_price": "95400", + "name": "Dragon boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11732", + "bonuses": "0,0,0,-3,-1,16,17,18,0,0,15,4,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "95400", + "durability": null, + "name": "Dragon boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11733" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scroll for Sir Tiffy. The wax seal is broken. / Before reading the scroll: A scroll for Sir Tiffy. It is sealed with a wax insignia.", + "durability": null, + "name": "Knight's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11734" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A scroll for Sir Tiffy. The wax seal is broken. / Before reading the scroll: A scroll for Sir Tiffy. It is sealed with a wax insignia.", + "durability": null, + "name": "Knight's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11735" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "231300", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11736", + "stand_turn_anim": "1209", + "bonuses": "7,-1,28,12,0,2,3,1,12,0,0,35,0,0,0", + "requirements": "{0,30}-{6,30}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "equip_audio": "2230", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Steam battlestaff" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "231300", + "durability": null, + "name": "Steam battlestaff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11737" + }, + { + "ge_buy_limit": "10", + "turn90cw_anim": "1207", + "examine": "It's a slightly magical stick.", + "walk_anim": "1205", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "grand_exchange_price": "267600", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "11738", + "stand_turn_anim": "1209", + "bonuses": "10,-1,40,14,0,2,3,1,14,0,0,50,0,0,0", + "requirements": "{0,40}-{6,40}", + "durability": null, + "weight": "2", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Mystic steam staff" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "267600", + "durability": null, + "name": "Mystic steam staff", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11739" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11741" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11743" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11745" + }, + { + "destroy_message": "There may be another in the chest where you found this.", + "examine": "This probably opens a chest in Golrie's caves. (Path of Glophrie)", + "durability": null, + "name": "A key to a chest", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11747" + }, + { + "destroy_message": "There may be another in the chest where you found this.", + "examine": "This opens the door into Golrie's strongroom. (Path of Glophrie)", + "durability": null, + "name": "Strongroom key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11748" + }, + { + "destroy_message": "Maybe Brimstail will have another crystal seed you could grow into a chime.", + "examine": "It makes a sound.", + "durability": null, + "name": "Crystal chime", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11749", + "equipment_slot": "3" + }, + { + "destroy_message": "There may be another in the chest where you found this.", + "examine": "Notes written by Yewnock while copying Oaknock's machine.", + "durability": null, + "name": "Yewnock's notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11750" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11753" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11754" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11755" + }, + { + "destroy_message": "You will need to get a new set of armour from Rat Burgiss if you destroy this one.", + "remove_sleeves": "true", + "examine": "Varrock Smithing armour.", + "durability": null, + "name": "Varrock armour 1", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11756", + "bonuses": "0,0,0,-30,-10,15,14,9,-6,14,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You will need to get a new set of armour from Reldo if you destroy this one.", + "remove_sleeves": "true", + "examine": "Varrock smithing armour.", + "durability": null, + "name": "Varrock armour 2", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11757", + "bonuses": "0,0,0,-30,-10,21,20,12,-6,20,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You will need to get a new set of armour from Vannaka if you destroy this one.", + "remove_sleeves": "true", + "examine": "Varrock smithing armour.", + "durability": null, + "name": "Varrock armour 3", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11758", + "bonuses": "0,0,0,-30,-10,32,31,24,-6,31,5,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "4", + "examine": "A number of wooden logs.", + "grand_exchange_price": "124", + "durability": null, + "name": "Logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11760" + }, + { + "destroy_message": "You can get the diary again from Sandy's desk.", + "examine": "A locked/unlocked diary.", + "durability": null, + "name": "Locked diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11761" + }, + { + "destroy_message": "You can get the diary again from Sandy's desk.", + "examine": "A locked/unlocked diary.", + "durability": null, + "name": "Unlocked diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11762" + }, + { + "destroy_message": "You can get the foot again from the creatures in the Jade Vine.", + "examine": "A wizard's severed foot. You can tell by the robes.", + "durability": null, + "name": "Foot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11764" + }, + { + "destroy_message": "You can get the arm again from the creatures in the Jade Vine.", + "examine": "\"A wizard's severed arm. You can tell by the robes.", + "durability": null, + "name": "Left arm", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11766" + }, + { + "destroy_message": "You can get the arm again from the creatures in the Jade Vine.", + "examine": "A wizard's severed arm. You can tell by the robes.", + "durability": null, + "name": "Right arm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11767" + }, + { + "destroy_message": "You can get the leg again from the creatures in the Jade Vine.", + "examine": "A wizard's severed leg. You can tell by the robes.", + "durability": null, + "name": "Left leg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11768" + }, + { + "destroy_message": "You can get the leg again from the creatures in the Jade Vine.", + "examine": "A wizard's severed leg. You can tell by the robes.", + "durability": null, + "name": "Right leg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11769" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11770" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11771" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11772" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11773" + }, + { + "examine": "A root cutting.", + "durability": null, + "name": "Root cutting", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11774" + }, + { + "examine": "A floppy root cutting. Quite dead.", + "durability": null, + "name": "Wilted cutting", + "archery_ticket_price": "0", + "id": "11775" + }, + { + "examine": "A potted root.", + "durability": null, + "name": "Potted root", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11776" + }, + { + "destroy_message": "You can get the sealed pot back by visiting Garth, the farmer on Karamja.", + "examine": "This sealed pot contains your vine cutting - hopefully still alive.", + "durability": null, + "name": "Sealed pot", + "tradeable": "false", + "destroy": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11777" + }, + { + "examine": "A large seed.", + "durability": null, + "name": "Jade vine seed", + "archery_ticket_price": "0", + "id": "11778" + }, + { + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "Surely this holds many a dark tale...", + "durability": null, + "name": "The grim reaper's diary", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11780" + }, + { + "bankable": "false", + "destroy_message": "Another can be found in the Grim Reaper's house.", + "examine": "Some of the Grim Reaper's garb.", + "durability": null, + "name": "Grim's robe", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11781" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "Someone's Last Will and Testament.", + "durability": null, + "name": "Last will and testament", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11782" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "A tasty treat for Muncher.", + "durability": null, + "name": "Human bones", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11783" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "Ooooh spooky!", + "durability": null, + "name": "Servant's skull", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11784" + }, + { + "bankable": "false", + "destroy_message": "You can get a replacement from Diango in Draynor Village.", + "examine": "There's not much sand left in the top half...", + "durability": null, + "name": "Hourglass", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11785" + }, + { + "bankable": "false", + "destroy_message": "Another can be found in the Grim Reaper's house.", + "examine": "Used to sharpen the blade of a scythe.", + "durability": null, + "name": "Scythe sharpener", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11786" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "That's gross. Why am I carrying it around?", + "durability": null, + "name": "Human eye", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11787" + }, + { + "bankable": "false", + "destroy_message": "You'll have to find another from the Grim Reaper's house.", + "examine": "A 'Voice of Doom' potion, used to deepen your voice.", + "durability": null, + "name": "'voice of doom' potion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11788" + }, + { + "remove_head": "true", + "destroy_message": "You should be able to get another from Diango in Draynor Village.", + "examine": "Allows me to imitate the harbinger of doom, the stealer of souls, the eternal end...", + "durability": null, + "name": "Grim reaper hood", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11789", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "destroy_message": "You should be able to get another from Diango in Draynor Village.", + "examine": "Allows me to imitate the harbinger of doom, the stealer of souls, the eternal end...", + "durability": null, + "name": "Grim reaper hood", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11790", + "remove_beard": "true", + "equipment_slot": "0" + }, + { + "examine": "Armour designed to fit goblins.", + "durability": null, + "name": "White goblin mail", + "weight": "3", + "archery_ticket_price": "0", + "id": "11791", + "equipment_slot": "4" + }, + { + "examine": "Smaller than the average goblin. After The Chosen Commander: Oldak's new assistant.", + "durability": null, + "name": "Grubfoot", + "archery_ticket_price": "0", + "id": "11792" + }, + { + "examine": "See article", + "durability": null, + "name": "Zanik", + "archery_ticket_price": "0", + "id": "11793" + }, + { + "shop_price": "32", + "examine": "Oldak's Marvellous Moving-Over-Distance Sphere", + "durability": null, + "name": "Plain of mud sphere", + "archery_ticket_price": "0", + "id": "11794" + }, + { + "destroy_message": "The Ekeleshuun priest probably has a spare.", + "examine": "The key you stole from the Ekeleshuun priest.", + "durability": null, + "name": "Ekeleshuun key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11795" + }, + { + "destroy_message": "The Narogoshuun priest probably has a spare.", + "examine": "The key you stole from the Narogoshuun priest.", + "durability": null, + "name": "Narogoshuun key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11796" + }, + { + "destroy_message": "The Huzamogaarb priest probably has a spare.", + "examine": "The key you stole from the Huzamogaarb priest.", + "durability": null, + "name": "Huzamogaarb key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11797" + }, + { + "destroy_message": "The Saragorgak priest probably has a spare.", + "examine": "The key you stole from the Saragorgak priest.", + "durability": null, + "name": "Saragorgak key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11798" + }, + { + "destroy_message": "The Horogothgar priest probably has a spare.", + "examine": "The key you stole from the Horogothgar priest.", + "durability": null, + "name": "Horogothgar key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11799" + }, + { + "destroy_message": "The Yurkolgokh priest probably has a spare.", + "examine": "The key you stole from the Yurkolgokh priest.", + "durability": null, + "name": "Yurkolgokh key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11800" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Snothead's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11802" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Snailfeet's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11803" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Mosschin's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11804" + }, + { + "examine": "\"An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Redeyes's bone", + "archery_ticket_price": "0", + "id": "11805" + }, + { + "examine": "An ancient goblin bone wrapped in fragments of priestly robes.", + "durability": null, + "name": "Strongbones's bone", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11806" + }, + { + "examine": "You can combine these with a toadflax to make a goblin transformation potion.", + "durability": null, + "name": "Pharmakos berries", + "archery_ticket_price": "0", + "id": "11807" + }, + { + "examine": "An ugly albino fish.", + "durability": null, + "name": "Whitefish", + "weight": "0.25", + "archery_ticket_price": "0", + "id": "11808" + }, + { + "examine": "4 doses of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (4)", + "archery_ticket_price": "0", + "id": "11809", + "equipment_slot": "5" + }, + { + "examine": "3 doses of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (3)", + "archery_ticket_price": "0", + "id": "11810" + }, + { + "examine": "2 doses of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (2)", + "archery_ticket_price": "0", + "id": "11811" + }, + { + "examine": "1 dose of goblin transmogrification potion.", + "durability": null, + "name": "Goblin potion (1)", + "archery_ticket_price": "0", + "id": "11812" + }, + { + "shop_price": "177", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing bronze full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "614", + "durability": null, + "name": "Bronze armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11814" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "614", + "durability": null, + "name": "Bronze armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11815" + }, + { + "shop_price": "177", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing bronze full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "938", + "durability": null, + "name": "Bronze armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11816", + "bonuses": "0,0,0,-59,-19,27,26,18,-11,25,5,0,0,1,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "938", + "durability": null, + "name": "Bronze armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11817" + }, + { + "shop_price": "1022", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing iron full helm, platebody, legs, and kiteshield.", + "grand_exchange_price": "1830", + "durability": null, + "name": "Iron armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11818", + "bonuses": "0,0,0,-65,-21,46,44,33,-12,45,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1830", + "durability": null, + "name": "Iron armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11819" + }, + { + "shop_price": "1022", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing iron full helm, platebody, skirt, and kiteshield.", + "grand_exchange_price": "1711", + "durability": null, + "name": "Iron armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11820", + "bonuses": "0,0,0,-65,-21,46,44,33,-12,45,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1711", + "durability": null, + "name": "Iron armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11821" + }, + { + "requirements": "{5,1}", + "shop_price": "2365", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing steel full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "3646", + "durability": null, + "name": "Steel armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11822", + "bonuses": "0,0,0,-65,-21,71,72,60,-12,70,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3646", + "durability": null, + "name": "Steel armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11823" + }, + { + "requirements": "{5,1}", + "shop_price": "2365", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing steel full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "3796", + "durability": null, + "name": "Steel armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11824", + "bonuses": "0,0,0,-65,-21,71,72,60,-12,70,15,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3796", + "durability": null, + "name": "Steel armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11825" + }, + { + "requirements": "{10,1}", + "shop_price": "11286", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing Black full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "18900", + "durability": null, + "name": "Black armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11826" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "18900", + "durability": null, + "name": "Black armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11827" + }, + { + "requirements": "{10,1}", + "shop_price": "11286", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a black full helm, platebody, skirt and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "grand_exchange_price": "14600", + "name": "Black armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11828", + "bonuses": "0,0,0,-65,-21,91,92,78,-12,90,27,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "14600", + "durability": null, + "name": "Black armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11829" + }, + { + "requirements": "{20,1}", + "shop_price": "15232", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a mithril full helm, platebody, legs and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,6", + "grand_exchange_price": "8764", + "name": "Mithril armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11830", + "bonuses": "0,0,0,-65,-21,101,102,89,-12,97,52,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8764", + "durability": null, + "name": "Mithril armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11831" + }, + { + "requirements": "{20,1}", + "shop_price": "15232", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a mithril full helm, platebody, skirt and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,5", + "grand_exchange_price": "7829", + "name": "Mithril armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11832", + "bonuses": "0,0,0,-65,-21,101,102,89,-12,99,50,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "7829", + "durability": null, + "name": "Mithril armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11833" + }, + { + "requirements": "{1,30}", + "shop_price": "28276", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing an adamant full helm, platebody, legs and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "7,0,15", + "grand_exchange_price": "20600", + "name": "Adamant armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11834", + "bonuses": "0,0,0,-65,-21,144,146,129,-12,142,76,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20600", + "durability": null, + "name": "Adamant armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11835" + }, + { + "requirements": "{1,30}", + "shop_price": "28276", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing an adamant full helm, platebody, skirt and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "7,0,15", + "grand_exchange_price": "21500", + "name": "Adamant armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11836", + "bonuses": "0,0,0,-65,-21,144,146,129,-12,142,76,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "21500", + "durability": null, + "name": "Adamant armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11837" + }, + { + "requirements": "{1,40}", + "shop_price": "136112", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a rune full helm, platebody, legs and kiteshield.", + "durability": null, + "weight": "2.2", + "absorb": "9,0,20", + "grand_exchange_price": "136300", + "name": "Rune armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11838", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "136300", + "durability": null, + "name": "Rune armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11839" + }, + { + "requirements": "{1,40}", + "shop_price": "136112", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a rune full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "140300", + "durability": null, + "name": "Rune armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11840" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "140300", + "durability": null, + "name": "Rune armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11841" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "4800000", + "examine": "Grand Exchange set containing a dragon helm, chainbody, legs.", + "durability": null, + "name": "Dragon chain armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "2.2", + "id": "11842" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "4800000", + "durability": null, + "name": "Dragon chain armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11843" + }, + { + "requirements": "{1,60}", + "ge_buy_limit": "10", + "grand_exchange_price": "4600000", + "examine": "Grand Exchange set containing a dragon helm, chainbody, skirt.", + "durability": null, + "name": "Dragon chain armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "2.2", + "id": "11844" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "4600000", + "durability": null, + "name": "Dragon chain armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11845" + }, + { + "requirements": "{0,70}-{1,70}-{6,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Ahrim's robetop, robeskirt, hood, and staff.", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - ahrim's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11846" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - ahrim's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11847" + }, + { + "requirements": "{0,70}-{1,70}-{2,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Dharok's helm, body, legs and greataxe.", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - dharok's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11848" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Barrows - dharok's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11849" + }, + { + "requirements": "{0,70}-{1,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Guthan's helm, platebody, chainskirt and warspear.", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Barrows - guthan's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11850" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Barrows - guthan's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11851" + }, + { + "requirements": "{1,70}-{4,70}", + "ge_buy_limit": "10", + "examine": "A Grand Exchange set containing Karil's coif, crossbow, leather body, and leather skirt.", + "grand_exchange_price": "2200000", + "durability": null, + "name": "Barrows - karil's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11852" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "2200000", + "durability": null, + "name": "Barrows - karil's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11853" + }, + { + "requirements": "{0,70}-{1,70}-{2,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Torag's helm, body, legs and hammers.", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Barrows - torag's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11854" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Barrows - torag's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11855" + }, + { + "requirements": "{0,70}-{1,70}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing Verac's helm, brassard, plateskirt and flail.", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Barrows - verac's set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11856" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Barrows - verac's set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11857" + }, + { + "requirements": "{1,65}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a helm, body, legs and shield", + "grand_exchange_price": "388700000", + "durability": null, + "name": "Third age melee set", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11858" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "388700000", + "durability": null, + "name": "Third age melee set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11859" + }, + { + "requirements": "{1,45}-{4,65}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing coif, body, chaps and vambraces.", + "grand_exchange_price": "87500000", + "durability": null, + "name": "Third age ranger set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11860" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "87500000", + "durability": null, + "name": "Third age ranger set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11861" + }, + { + "requirements": "{1,30}-{6,65}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a body, legs, amulet and hat", + "grand_exchange_price": "163100000", + "durability": null, + "name": "Third age mage set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11862" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "163100000", + "durability": null, + "name": "Third age mage set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11863" + }, + { + "requirements": "{1,40}-{4,40}", + "shop_price": "9000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "durability": null, + "weight": "2.2", + "absorb": "0,10,5", + "grand_exchange_price": "8932", + "name": "Green dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11864", + "bonuses": "0,0,0,-40,31,65,50,73,30,62,58,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "8932", + "durability": null, + "name": "Green dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11865" + }, + { + "requirements": "{1,40}-{4,50}", + "shop_price": "12000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "grand_exchange_price": "9062", + "durability": null, + "name": "Blue dragonhide set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11866" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "9062", + "durability": null, + "name": "Blue dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11867" + }, + { + "requirements": "{1,40}-{4,60}", + "shop_price": "15000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "grand_exchange_price": "12800", + "durability": null, + "name": "Red dragonhide set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11868" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12800", + "durability": null, + "name": "Red dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11869" + }, + { + "requirements": "{1,40}-{4,70}", + "shop_price": "40000", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing body, chaps and vambraces.", + "grand_exchange_price": "17600", + "durability": null, + "name": "Black dragonhide set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11870" + }, + { + "durability": null, + "name": "Black dragonhide set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11871" + }, + { + "requirements": "{20,1}-{6,40}", + "shop_price": "169143", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing mystic hat, top, bottoms, gloves, and boots.", + "grand_exchange_price": "163300", + "durability": null, + "name": "Mystic robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11872" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "163300", + "durability": null, + "name": "Mystic robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11873" + }, + { + "requirements": "{1,25}-{6,50}", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing hat, top, bottoms, gloves, and boots", + "grand_exchange_price": "11000000", + "durability": null, + "name": "Infinity robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11874" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "11000000", + "durability": null, + "name": "Infinity robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11875" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing a helm, body, boots, gauntlets and legs.", + "grand_exchange_price": "107400", + "durability": null, + "name": "Splitbark armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11876", + "absorb": "13,6,0", + "bonuses": "0,0,0,24,-21,74,59,86,32,0,74,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "107400", + "durability": null, + "name": "Splitbark armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11877" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "341200", + "durability": null, + "name": "Black trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11878", + "absorb": "2,0,4", + "bonuses": "0,0,0,-65,-21,91,92,77,-12,90,23,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "341200", + "durability": null, + "name": "Black trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11879" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "331600", + "durability": null, + "name": "Black trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11880", + "absorb": "2,0,4", + "bonuses": "0,0,0,-65,-21,91,92,77,-12,90,23,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "331600", + "durability": null, + "name": "Black trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11881" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Black gold-trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11882" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Black gold-trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11883" + }, + { + "requirements": "{10,1}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "1300000", + "durability": null, + "name": "Black gold-trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11884" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1300000", + "durability": null, + "name": "Black gold-trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11885" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "318100", + "durability": null, + "name": "Adamant trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11886" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "318100", + "durability": null, + "name": "Adamant trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11887" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "293700", + "durability": null, + "name": "Adamant trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11888" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "293700", + "durability": null, + "name": "Adamant trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11889" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "949400", + "durability": null, + "name": "Adamant gold-trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11890" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "949400", + "durability": null, + "name": "Adamant gold-trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11891" + }, + { + "requirements": "{1,30}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "880500", + "durability": null, + "name": "Adamant gold-trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11892" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "880500", + "durability": null, + "name": "Adamant gold-trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11893" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "702500", + "durability": null, + "name": "Rune trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11894", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "702500", + "durability": null, + "name": "Rune trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11895" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "675400", + "durability": null, + "name": "Rune trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11896", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "675400", + "durability": null, + "name": "Rune trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11897" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Rune gold-trimmed armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11898", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1700000", + "durability": null, + "name": "Rune gold-trimmed armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11899" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Rune gold-trimmed armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11900", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1400000", + "durability": null, + "name": "Rune gold-trimmed armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11901" + }, + { + "requirements": "{20,1}-{6,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing hat, robetops and bottoms", + "grand_exchange_price": "207200", + "durability": null, + "name": "Enchanted set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11902" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "207200", + "durability": null, + "name": "Enchanted set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11903" + }, + { + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing hat, robetops and bottoms", + "grand_exchange_price": "877900", + "durability": null, + "name": "Trimmed blue wizard set", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "11904" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "877900", + "durability": null, + "name": "Trimmed blue wizard set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11905" + }, + { + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing hat, robe top and bottom", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Gold-trimmed blue wizard set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11906" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3100000", + "durability": null, + "name": "Gold-trimmed blue wizard set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11907" + }, + { + "requirements": "{20,4}", + "ge_buy_limit": "10000", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "85100", + "durability": null, + "name": "Trimmed leather armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11908" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "85100", + "durability": null, + "name": "Trimmed leather armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11909" + }, + { + "requirements": "{20,4}", + "ge_buy_limit": "10000", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "217200", + "durability": null, + "name": "Gold-trimmed leather armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11910" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "217200", + "durability": null, + "name": "Gold-trimmed leather armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11911" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "371600", + "durability": null, + "name": "Green d'hide trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11912", + "absorb": "0,10,5", + "bonuses": "0,0,0,-40,31,65,50,73,30,62,58,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "371600", + "durability": null, + "name": "Green d'hide trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11913" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Green d'hide gold-trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11914", + "absorb": "0,10,5", + "bonuses": "0,0,0,-40,31,65,50,73,30,62,58,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1600000", + "durability": null, + "name": "Green d'hide gold-trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11915" + }, + { + "requirements": "{1,40}-{4,50}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps", + "grand_exchange_price": "38300", + "durability": null, + "name": "Blue d'hide trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11916" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "38300", + "durability": null, + "name": "Blue d'hide trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11917" + }, + { + "requirements": "{1,40}-{4,50}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body and chaps.", + "grand_exchange_price": "50000", + "durability": null, + "name": "Blue d'hide gold-trimmed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11918" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "50000", + "durability": null, + "name": "Blue d'hide gold-trimmed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11919" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body, chaps, bracers and coif.", + "grand_exchange_price": "179500", + "durability": null, + "name": "Green d'hide blessed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11920" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "179500", + "durability": null, + "name": "Green d'hide blessed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11921" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body, chaps, bracers and coif.", + "grand_exchange_price": "477500", + "durability": null, + "name": "Blue d'hide blessed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11922" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "477500", + "durability": null, + "name": "Blue d'hide blessed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11923" + }, + { + "requirements": "{1,40}-{4,70}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing body, chaps, bracers and coif.", + "grand_exchange_price": "585300", + "durability": null, + "name": "Red d'hide blessed set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11924" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "585300", + "durability": null, + "name": "Red d'hide blessed set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11925" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and shield.", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Guthix armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11926", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1100000", + "durability": null, + "name": "Guthix armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11927" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield", + "grand_exchange_price": "4000000", + "durability": null, + "name": "Saradomin armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11928", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "4000000", + "durability": null, + "name": "Saradomin armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11929" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, legs and kiteshield", + "grand_exchange_price": "2300000", + "durability": null, + "name": "Zamorak armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11930", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2300000", + "durability": null, + "name": "Zamorak armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11931" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Guthix armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11932", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1000000", + "durability": null, + "name": "Guthix armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11933" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing full helm, platebody, skirt and kiteshield", + "grand_exchange_price": "3600000", + "durability": null, + "name": "Saradomin armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11934", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "3600000", + "durability": null, + "name": "Saradomin armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11935" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield", + "grand_exchange_price": "2000000", + "durability": null, + "name": "Zamorak armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11936", + "absorb": "9,0,20", + "bonuses": "0,0,0,-65,-21,207,209,192,-12,205,102,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "2000000", + "durability": null, + "name": "Zamorak armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11937" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, legs and kiteshield.", + "grand_exchange_price": "5900000", + "durability": null, + "name": "Gilded armour set (l)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11938" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "5900000", + "durability": null, + "name": "Gilded armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11939" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "2", + "examine": "Grand Exchange set containing a full helm, platebody, skirt and kiteshield.", + "grand_exchange_price": "4300000", + "durability": null, + "name": "Gilded armour set (sk)", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11940" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "4300000", + "durability": null, + "name": "Gilded armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11941" + }, + { + "requirements": "{1,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing helm, platebody, legs, boots and gloves", + "grand_exchange_price": "145000", + "durability": null, + "name": "Rockshell armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11942" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "145000", + "durability": null, + "name": "Rockshell armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11943" + }, + { + "requirements": "{1,40}-{4,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing helm, body, chaps, boots and gloves", + "grand_exchange_price": "94500", + "durability": null, + "name": "Spined armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11944", + "absorb": "0,13,6", + "bonuses": "-6,-6,-6,-31,29,68,56,78,34,62,47,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "94500", + "durability": null, + "name": "Spined armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11945" + }, + { + "requirements": "{1,40}-{6,40}", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing helm, top, bottoms, boots and gloves", + "grand_exchange_price": "145200", + "durability": null, + "name": "Skeletal armour set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11946" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "145200", + "durability": null, + "name": "Skeletal armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11947" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A tiny model of Lumbridge Castle inside a glass dome.", + "durability": null, + "name": "Snow globe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11949", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "A tiny model of Lumbridge Castle inside a glass dome.", + "durability": null, + "name": "Snow globe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11950", + "equipment_slot": "3" + }, + { + "attack_anims": "5063", + "examine": "Made from snow. / It's a ball of snow! Uncanny. / How did this not melt in the box?", + "durability": null, + "name": "Snowball", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "11951", + "weapon_interface": "18", + "equipment_slot": "3" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a snow warrior.", + "durability": null, + "name": "Ice sword", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11952" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a snow mage.", + "attack_audios": "2555,0,0,0", + "durability": null, + "name": "Winter staff", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11953" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a snow ranger.", + "durability": null, + "name": "Holly bow", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11954" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Add this to a snowman to make a barbarian snowman.", + "durability": null, + "name": "Barbarian snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11955" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "It's actually made of cardboard, but it looks like a dragon full helm.", + "durability": null, + "name": "Dragon snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11956" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "Use this to make your snowman look like a dwarf.", + "durability": null, + "name": "Dwarf snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11957" + }, + { + "bankable": "false", + "destroy_message": "Talk to a snow imp to get another.", + "examine": "Arr! Shiver me snowman!", + "durability": null, + "name": "Pirate snowman hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11958" + }, + { + "bankable": "false", + "destroy_message": "You can get another from a snow imp.", + "examine": "The most traditional snowman hat.", + "durability": null, + "name": "Snowman top hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11959" + }, + { + "requirements": "{20,1}-{6,40}", + "shop_price": "215431", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing hat, top, bottoms, gloves, and boots", + "grand_exchange_price": "487300", + "durability": null, + "name": "Light mystic robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11960" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "487300", + "durability": null, + "name": "Light mystic robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11961" + }, + { + "requirements": "{20,1}-{6,40}", + "shop_price": "228541", + "ge_buy_limit": "100", + "examine": "Grand Exchange set containing hat, top, bottoms, gloves, and boots", + "grand_exchange_price": "294000", + "durability": null, + "name": "Dark mystic robes set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11962" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "294000", + "durability": null, + "name": "Dark mystic robes set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11963" + }, + { + "examine": "I can hatch this in an incubator.", + "durability": null, + "name": "Raven egg", + "archery_ticket_price": "0", + "id": "11964" + }, + { + "examine": "I can hatch this in an incubator.", + "durability": null, + "name": "Vulture egg", + "archery_ticket_price": "0", + "id": "11965" + }, + { + "examine": "Full: ", + "durability": null, + "name": "Bird's nest", + "archery_ticket_price": "0", + "id": "11966" + }, + { + "shop_price": "750000", + "ge_buy_limit": "10", + "examine": "Grand Exchange set containing cannon base, stand, barrels and furnace.", + "grand_exchange_price": "718900", + "durability": null, + "name": "Dwarf cannon set", + "tradeable": "true", + "weight": "2.2", + "archery_ticket_price": "0", + "id": "11967" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "718900", + "durability": null, + "name": "Dwarf cannon set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "11968" + }, + { + "destroy_message": "If I destroy this it will disintegrate into its component parts and drop to the floor.", + "examine": "A water tiara infused with water runes. Protects from the hot desert sun.", + "durability": null, + "name": "Enchanted water tiara", + "weight": "1", + "archery_ticket_price": "0", + "id": "11969", + "bonuses": "0,0,0,2,0,5,5,5,3,3,0,0,2,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "I can obtain and fill another one from the archaeologist near Sophanem.", + "examine": "A crate full of distressed gear.", + "durability": null, + "name": "Smelly crate", + "tradeable": "false", + "destroy": "true", + "weight": "30", + "archery_ticket_price": "0", + "id": "11970" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "An empty crate, ready for bronze gear.", + "durability": null, + "name": "Empty crate", + "archery_ticket_price": "0", + "id": "11972" + }, + { + "destroy_message": "I can obtain another one from the archaeologist near Sophanem.", + "examine": "A book of research on Scabarite history.", + "durability": null, + "name": "Scabaras research", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "11973" + }, + { + "destroy_message": "I can obtain another one from Simon Templeton.", + "examine": "Issued by Simon Templeton.", + "durability": null, + "name": "Artefact receipt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11974" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11975" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11976" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11977" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11978" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11979" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11980" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11981" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11982" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11983" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11984" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11985" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11986" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11987" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11988" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11989" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11990" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11991" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11992" + }, + { + "destroy_message": "I can loot another one from the monsters in the areas east of Sophanem.", + "examine": "See article", + "durability": null, + "name": "Scabarite notes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11993" + }, + { + "destroy_message": "I can obtain another one from the archaeologists near Sophanem.", + "examine": "Newly made, but to an ancient pattern. (Dealing with Scabaras)", + "durability": null, + "name": "Scabarite key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11994" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze dagger.", + "examine": "It has been oxidised.", + "attack_audios": "2517,2517,2500,2517", + "durability": null, + "name": "Oxidised dagger", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11995" + }, + { + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised medium helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11996" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze sword.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised sword", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11997" + }, + { + "turn90cw_anim": "821", + "examine": "It has been oxidised.", + "walk_anim": "819", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "822", + "turn180_anim": "820", + "render_anim": "1", + "destroy_message": "I can make another one by using camel dung on a bronze scimitar.", + "stand_anim": "808", + "attack_audios": "2500,0,2517,0", + "name": "Oxidised scimitar", + "tradeable": "false", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "11998", + "stand_turn_anim": "823" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze longsword.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised longsword", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "11999" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze full helmet.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised full helm", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12000" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze square shield.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised square shield", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12001" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze chainbody.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised chainbody", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12002" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze kiteshield.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised kiteshield", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12003" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze two", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised two-handed sword", + "tradeable": "false", + "destroy": "true", + "weight": "4", + "archery_ticket_price": "0", + "id": "12004" + }, + { + "destroy_message": "I can make another one by using camel dung on some bronze platelegs.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised platelegs", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12005" + }, + { + "destroy_message": "I can make another one by using camel dung on a bronze plateskirt.", + "examine": "It has been oxidised.", + "durability": null, + "name": "Oxidised plateskirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12006" + }, + { + "requirements": "{23,52}", + "ge_buy_limit": "5000", + "grand_exchange_price": "330", + "examine": "I can summon a spirit terrorbird familiar with this.", + "durability": null, + "name": "Spirit terrorbird pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12007" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "330", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit terrorbird pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12008" + }, + { + "requirements": "{16,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "239", + "examine": "I can summon a granite crab familiar with this.", + "durability": null, + "name": "Granite crab pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12009" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "239", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Granite crab pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12010" + }, + { + "requirements": "{23,75}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2918", + "examine": "I can summon a praying mantis familiar with this.", + "durability": null, + "name": "Praying mantis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12011" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2918", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Praying mantis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12012" + }, + { + "requirements": "{23,78}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2167", + "examine": "I can summon a giant ent familiar with this.", + "durability": null, + "name": "Giant ent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12013" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2167", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Giant ent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12014" + }, + { + "requirements": "{23,63}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2018", + "examine": "I can summon a spirit cobra familiar with this.", + "durability": null, + "name": "Spirit cobra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12015" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2018", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit cobra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12016" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "121", + "examine": "I can summon a spirit dagannoth familiar with this.", + "durability": null, + "name": "Spirit dagannoth pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12017" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "121", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit dagannoth pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12018" + }, + { + "requirements": "{13,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "248", + "examine": "I can summon a thorny snail familiar with this.", + "durability": null, + "name": "Thorny snail pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12019" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "248", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Thorny snail pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12020" + }, + { + "requirements": "{23,33}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1268", + "examine": "I can summon a beaver familiar with this.", + "durability": null, + "name": "Beaver pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12021" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1268", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Beaver pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12022" + }, + { + "requirements": "{23,58}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "I can summon a karamthulhu overlord familiar with this.", + "durability": null, + "name": "Karam. overlord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12023" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Karam. overlord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12024" + }, + { + "requirements": "{23,80}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2235", + "examine": "I can summon a hydra familiar with this.", + "durability": null, + "name": "Hydra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12025" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2235", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Hydra pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12026" + }, + { + "requirements": "{23,55}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2641", + "examine": "I can summon a spirit jelly familiar with this.", + "durability": null, + "name": "Spirit jelly pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12027" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2641", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit jelly pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12028" + }, + { + "requirements": "{23,68}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3506", + "examine": "I can summon a bunyip familiar with this.", + "durability": null, + "name": "Bunyip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12029" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3506", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bunyip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12030" + }, + { + "requirements": "{23,67}", + "ge_buy_limit": "5000", + "grand_exchange_price": "13200", + "examine": "I can summon a war tortoise familiar with this.", + "durability": null, + "name": "War tortoise pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12031" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13200", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "War tortoise pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12032" + }, + { + "requirements": "{23,69}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2269", + "examine": "I can summon a fruit bat familiar with this.", + "durability": null, + "name": "Fruit bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12033" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2269", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Fruit bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12034" + }, + { + "requirements": "{23,54}", + "ge_buy_limit": "5000", + "grand_exchange_price": "4004", + "examine": "I can summon an abyssal parasite familiar with this.", + "durability": null, + "name": "Abyssal parasite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12035" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4004", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Abyssal parasite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12036" + }, + { + "requirements": "{23,62}", + "ge_buy_limit": "5000", + "grand_exchange_price": "5660", + "examine": "I can summon an abyssal lurker familiar with this.", + "durability": null, + "name": "Abyssal lurker pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12037" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5660", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Abyssal lurker pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12038" + }, + { + "requirements": "{23,88}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2439", + "examine": "I can summon a unicorn stallion familiar with this.", + "durability": null, + "name": "Unicorn stallion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12039" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2439", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Unicorn stallion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12040" + }, + { + "requirements": "{23,47}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1559", + "examine": "I can summon a magpie familiar with this.", + "durability": null, + "name": "Magpie pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12041" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1559", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Magpie pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12042" + }, + { + "requirements": "{4,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "258", + "examine": "I can summon a dreadfowl familiar with this.", + "durability": null, + "name": "Dreadfowl pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12043" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "258", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Dreadfowl pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12044" + }, + { + "requirements": "{23,64}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "I can summon a stranger plant familiar with this.", + "durability": null, + "name": "Stranger plant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12045" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Stranger plant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12046" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "301", + "examine": "I can summon a spirit wolf familiar with this.", + "durability": null, + "name": "Spirit wolf pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12047" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "301", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit wolf pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12048" + }, + { + "requirements": "{18,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "808", + "examine": "I can summon a desert wyrm familiar with this.", + "durability": null, + "name": "Desert wyrm pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12049" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "808", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Desert wyrm pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12050" + }, + { + "requirements": "{23,42}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1812", + "examine": "I can summon an evil turnip familiar with this.", + "durability": null, + "name": "Evil turnip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12051" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1812", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Evil turnip pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12052" + }, + { + "requirements": "{23,31}", + "ge_buy_limit": "10000", + "grand_exchange_price": "1416", + "examine": "I can summon a vampire bat familiar with this.", + "durability": null, + "name": "Vampire bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12053" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1416", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Vampire bat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12054" + }, + { + "requirements": "{19,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "992", + "examine": "I can summon a spirit scorpion familiar with this.", + "durability": null, + "name": "Spirit scorpion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12055" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "992", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit scorpion pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12056" + }, + { + "requirements": "{23,71}", + "ge_buy_limit": "5000", + "grand_exchange_price": "332", + "examine": "I can summon an arctic bear familiar with this.", + "durability": null, + "name": "Arctic bear pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12057" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "332", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Arctic bear pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12058" + }, + { + "requirements": "{10,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2225", + "examine": "I can summon a spirit spider familiar with this.", + "durability": null, + "name": "Spirit spider pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12059" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2225", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit spider pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12060" + }, + { + "requirements": "{23,49}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2045", + "examine": "I can summon a bloated leech familiar with this.", + "durability": null, + "name": "Bloated leech pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12061" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2045", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bloated leech pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12062" + }, + { + "requirements": "{23,25}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3746", + "examine": "I can summon a spirit kalphite familiar with this.", + "durability": null, + "name": "Spirit kalphite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12063" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3746", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit kalphite pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12064" + }, + { + "requirements": "{23,32}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1470", + "examine": "I can summon a honey badger familiar with this.", + "durability": null, + "name": "Honey badger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12065" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1470", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Honey badger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12066" + }, + { + "requirements": "{23,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1578", + "examine": "I can summon an albino rat familiar with this.", + "durability": null, + "name": "Albino rat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12067" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1578", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Albino rat pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12068" + }, + { + "requirements": "{23,74}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2924", + "examine": "I can summon a granite lobster familiar with this.", + "durability": null, + "name": "Granite lobster pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12069" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2924", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Granite lobster pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12070" + }, + { + "requirements": "{23,41}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1375", + "examine": "I can summon a macaw familiar with this.", + "durability": null, + "name": "Macaw pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12071" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1375", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Macaw pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12072" + }, + { + "requirements": "{23,36}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1804", + "examine": "I can summon a bronze minotaur familiar with this.", + "durability": null, + "name": "Bronze minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12073" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1804", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bronze minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12074" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "I can summon an iron minotaur familiar with this.", + "durability": null, + "name": "Iron minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12075" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2216", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Iron minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12076" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2529", + "examine": "I can summon a steel minotaur familiar with this", + "durability": null, + "name": "Steel minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12077" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2529", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Steel minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12078" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2666", + "examine": "I can summon a mithril minotaur with this.", + "durability": null, + "name": "Mithril minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12079" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2666", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Mithril minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12080" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "I can summon an adamant minotaur familiar with this.", + "durability": null, + "name": "Adamant minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12081" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2520", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Adamant minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12082" + }, + { + "requirements": "{23,86}", + "ge_buy_limit": "5000", + "grand_exchange_price": "373", + "examine": "I can summon a rune minotaur with this.", + "durability": null, + "name": "Rune minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12083" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "373", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Rune minotaur pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12084" + }, + { + "requirements": "{23,61}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2468", + "examine": "I can summon a smoke devil familiar with this.", + "durability": null, + "name": "Smoke devil pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12085" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2468", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Smoke devil pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12086" + }, + { + "requirements": "{23,40}", + "ge_buy_limit": "5000", + "grand_exchange_price": "319", + "examine": "I can summon a bull ant familiar with this.", + "durability": null, + "name": "Bull ant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12087" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "319", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Bull ant pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12088" + }, + { + "requirements": "{23,92}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3625", + "examine": "I can summon a wolpertinger familiar with this.", + "durability": null, + "name": "Wolpertinger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12089" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3625", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Wolpertinger pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12090" + }, + { + "requirements": "{23,28}", + "ge_buy_limit": "5000", + "grand_exchange_price": "906", + "examine": "I can summon a compost mound familiar with this.", + "durability": null, + "name": "Compost mound pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12091" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "906", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Compost mound pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12092" + }, + { + "requirements": "{23,96}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3696", + "examine": "I can summon a pack yak familiar with this.", + "durability": null, + "name": "Pack yak pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12093" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3696", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Pack yak pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12094" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1514", + "examine": "I can summon a spirit cockatrice familiar with this.", + "durability": null, + "name": "Sp. cockatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12095" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1514", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. cockatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12096" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1523", + "examine": "I can summon a spirit guthatrice familiar with this.", + "durability": null, + "name": "Sp. guthatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12097" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1523", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. guthatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12098" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1492", + "examine": "I can summon a spirit saratrice familiar with this.", + "durability": null, + "name": "Sp. saratrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12099" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1492", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. saratrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12100" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1515", + "examine": "I can summon a spirit zamatrice familiar with this.", + "durability": null, + "name": "Sp. zamatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12101" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1515", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. zamatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12102" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1531", + "examine": "I can summon a spirit pengatrice familiar with this.", + "durability": null, + "name": "Sp. pengatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12103" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1531", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. pengatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12104" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3085", + "examine": "I can summon a spirit coraxatrice familiar with this.", + "durability": null, + "name": "Sp. coraxatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12105" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3085", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. coraxatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12106" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3881", + "examine": "I can summon a spirit vulatrice familiar with this.", + "durability": null, + "name": "Sp. vulatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12107" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3881", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Sp. vulatrice pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12108" + }, + { + "ge_buy_limit": "10000", + "examine": "A stripy brown egg.", + "grand_exchange_price": "1053", + "durability": null, + "name": "Cockatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12109" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "1053", + "durability": null, + "name": "Cockatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12110" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy green egg.", + "grand_exchange_price": "1171", + "durability": null, + "name": "Guthatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12111" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1171", + "durability": null, + "name": "Guthatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12112" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy blue egg.", + "grand_exchange_price": "1080", + "durability": null, + "name": "Saratrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12113" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1080", + "durability": null, + "name": "Saratrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12114" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy red egg.", + "grand_exchange_price": "1154", + "durability": null, + "name": "Zamatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12115" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1154", + "durability": null, + "name": "Zamatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12116" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy grey egg.", + "grand_exchange_price": "2676", + "durability": null, + "name": "Pengatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12117" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2676", + "durability": null, + "name": "Pengatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12118" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy black egg.", + "grand_exchange_price": "2865", + "durability": null, + "name": "Coraxatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12119" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2865", + "durability": null, + "name": "Coraxatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12120" + }, + { + "ge_buy_limit": "5000", + "examine": "A stripy pink egg.", + "grand_exchange_price": "18900", + "durability": null, + "name": "Vulatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12121" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "18900", + "durability": null, + "name": "Vulatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12122" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "293", + "examine": "I can summon a barker toad familiar with this.", + "durability": null, + "name": "Barker toad pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12123" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "293", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Barker toad pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12124" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "A swarm of little flies.", + "grand_exchange_price": "97", + "durability": null, + "name": "Flies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12125" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "97", + "durability": null, + "name": "Flies", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12126" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Some beetle bits.", + "grand_exchange_price": "176", + "durability": null, + "name": "Beetle bits", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12127" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "176", + "durability": null, + "name": "Beetle bits", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12128" + }, + { + "ge_buy_limit": "100", + "examine": "Good for feeding birds.", + "grand_exchange_price": "1", + "durability": null, + "name": "Ground fishing bait", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12129" + }, + { + "shop_price": "10", + "ge_buy_limit": "100", + "examine": "Mmmm...nuts.", + "grand_exchange_price": "673", + "durability": null, + "name": "Nuts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12130" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "673", + "durability": null, + "name": "Nuts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12131" + }, + { + "examine": "Makes me want to do a truffle shuffle.", + "durability": null, + "name": "Truffle", + "tradeable": "false", + "destroy": "true", + "weight": "28.928", + "archery_ticket_price": "0", + "id": "12132" + }, + { + "durability": null, + "name": "Truffle", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12133", + "equipment_slot": "3" + }, + { + "ge_buy_limit": "5000", + "examine": "An evil turnip.", + "grand_exchange_price": "6750", + "durability": null, + "name": "Evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12134" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "6750", + "durability": null, + "name": "Evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12135" + }, + { + "ge_buy_limit": "5000", + "examine": "An evil turnip.", + "grand_exchange_price": "133", + "durability": null, + "name": "2/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12136" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "133", + "durability": null, + "name": "2/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12137" + }, + { + "ge_buy_limit": "5000", + "examine": "An evil turnip.", + "grand_exchange_price": "20", + "durability": null, + "name": "1/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12138" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "20", + "durability": null, + "name": "1/3 evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12139" + }, + { + "ge_buy_limit": "100", + "examine": "4 doses of Summoning potion.", + "grand_exchange_price": "4489", + "durability": null, + "name": "Summoning potion(4)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12140" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "4489", + "durability": null, + "name": "Summoning potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12141" + }, + { + "ge_buy_limit": "100", + "examine": "3 doses of Summoning potion.", + "grand_exchange_price": "3320", + "durability": null, + "name": "Summoning potion(3)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12142" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3320", + "durability": null, + "name": "Summoning potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12143" + }, + { + "ge_buy_limit": "100", + "examine": "2 doses of Summoning potion.", + "grand_exchange_price": "1671", + "durability": null, + "name": "Summoning potion(2)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12144" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1671", + "durability": null, + "name": "Summoning potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12145" + }, + { + "ge_buy_limit": "100", + "examine": "1 dose of Summoning potion.", + "grand_exchange_price": "1576", + "durability": null, + "name": "Summoning potion(1)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12146" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1576", + "durability": null, + "name": "Summoning potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12147" + }, + { + "ge_buy_limit": "100", + "examine": "Grows into the root-vegetable of all evil.", + "grand_exchange_price": "68", + "durability": null, + "name": "Evil turnip seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12148" + }, + { + "ge_buy_limit": "5000", + "examine": "Utterly terrifying!", + "grand_exchange_price": "7101", + "durability": null, + "name": "Carved evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12153" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7101", + "durability": null, + "name": "Carved evil turnip", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12154" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3", + "examine": "Can be used to create Summoning pouches.", + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12155" + }, + { + "ge_buy_limit": "5000", + "examine": "This is what bees craft.", + "grand_exchange_price": "393", + "durability": null, + "name": "Honeycomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12156" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "393", + "durability": null, + "name": "Honeycomb", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12157" + }, + { + "shop_price": "1", + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Gold charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12158" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Green charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12159" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Crimson charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12160" + }, + { + "examine": "A charm used to summon familiars", + "durability": null, + "name": "Abyssal charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12161" + }, + { + "examine": "A charm used to summon talon beasts.", + "durability": null, + "name": "Talon beast charm", + "archery_ticket_price": "0", + "id": "12162" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Blue charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12163" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void ravager.", + "durability": null, + "name": "Ravager charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12164" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void shifter.", + "durability": null, + "name": "Shifter charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12165" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void Spinner.", + "durability": null, + "name": "Spinner charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12166" + }, + { + "shop_price": "2", + "examine": "A charm needed to summon a Void torcher.", + "durability": null, + "name": "Torcher charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12167" + }, + { + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Obsidian charm", + "archery_ticket_price": "0", + "id": "12168" + }, + { + "requirements": "{23,99}", + "shop_price": "99000", + "examine": "The cape worn by master summoners.", + "durability": null, + "name": "Summoning cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12169", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0", + "equipment_slot": "1" + }, + { + "requirements": "{23,99}", + "durability": null, + "name": "Summoning cape(t)", + "archery_ticket_price": "0", + "id": "12170", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,4,0,0", + "equipment_slot": "1" + }, + { + "remove_head": "true", + "requirements": "{23,99}", + "shop_price": "99000", + "examine": "Summoning skillcape hood.", + "durability": null, + "name": "Summoning hood", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12171", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "10000", + "examine": "A fresh herb.", + "grand_exchange_price": "3597", + "durability": null, + "name": "Clean spirit weed", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12172" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3597", + "durability": null, + "name": "Clean spirit weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12173" + }, + { + "requirements": "{15,35}", + "ge_buy_limit": "10000", + "examine": "I need to clean this herb before I can use it.", + "grand_exchange_price": "3634", + "durability": null, + "name": "Grimy spirit weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12174" + }, + { + "ge_buy_limit": "10000", + "grand_exchange_price": "3634", + "durability": null, + "name": "Grimy spirit weed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12175" + }, + { + "requirements": "{19,36}", + "ge_buy_limit": "100", + "examine": "A seed for spirit weed.", + "grand_exchange_price": "698", + "durability": null, + "name": "Spirit weed seed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12176" + }, + { + "ge_buy_limit": "100", + "examine": "I need another ingredient to finish this spirit weed potion.", + "grand_exchange_price": "2963", + "durability": null, + "name": "Spirit weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12181" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "2963", + "durability": null, + "name": "Spirit weed potion(unf)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12182" + }, + { + "shop_price": "25", + "ge_buy_limit": "10000", + "examine": "Shards of an obelisk.", + "grand_exchange_price": "24", + "durability": null, + "name": "Spirit shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12183" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12184" + }, + { + "examine": "A fantastic saradomin owl.", + "durability": null, + "name": "Saradomin owl", + "archery_ticket_price": "0", + "id": "12185" + }, + { + "examine": "A stately zamorak hawk.", + "durability": null, + "name": "Zamorak hawk", + "archery_ticket_price": "0", + "id": "12186" + }, + { + "examine": "An impressive Guthix raptor.", + "durability": null, + "name": "Guthix raptor", + "archery_ticket_price": "0", + "id": "12187" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12190" + }, + { + "examine": "It's lively and energetic.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12191" + }, + { + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12192" + }, + { + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12193" + }, + { + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12194" + }, + { + "examine": "This little puppy is very quiet. (Puppy)Come by! Come by! (Adult)", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12195" + }, + { + "examine": "One proud little puppy. (Puppy)Looks like it's chewing a wasp. (Adult)", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12196" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Dragon hatchling", + "archery_ticket_price": "0", + "id": "12197" + }, + { + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12198" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12199" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12200" + }, + { + "examine": "It's a colour-coordinated lizard!", + "durability": null, + "name": "Chameleon", + "archery_ticket_price": "0", + "id": "12203" + }, + { + "remove_head": "true", + "requirements": "{23,10}", + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "Doors could be a problem, wearing these...", + "durability": null, + "weight": "1", + "equipment_slot": "0", + "grand_exchange_price": "40", + "name": "Antlers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12204", + "bonuses": "0,0,0,0,0,0,0,0,0,0,8,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40", + "durability": null, + "name": "Antlers", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12205" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "Doors could be a problem, wearing these...", + "grand_exchange_price": "50", + "durability": null, + "name": "Antlers (charged)", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12206", + "bonuses": "0,0,0,0,0,0,0,0,0,0,8,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "requirements": "{23,30}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "It's a little smelly in there.", + "durability": null, + "weight": "3", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "254", + "name": "Lizard skull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12207", + "bonuses": "0,0,0,0,1,2,3,4,2,3,12,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "254", + "durability": null, + "name": "Lizard skull", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12208" + }, + { + "remove_head": "true", + "shop_price": "200", + "examine": "It's a little smelly in there.", + "durability": null, + "weight": "3", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "211", + "name": "Lizard skull (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12209", + "bonuses": "0,0,0,0,1,2,3,4,2,3,12,0,0,0,0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "234", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12210", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "234", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12211" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12212", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "662", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12213", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "662", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12214" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12215", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "90", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12216", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "90", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12217" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12218", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12219", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12220" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12221", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "requirements": "{4,50}-{23,20}", + "ge_buy_limit": "100", + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "211", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12222", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "211", + "durability": null, + "name": "Feather headdress", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12223" + }, + { + "examine": "It's fun to go to the O-B-E-L-I-S-K!", + "grand_exchange_price": "107", + "durability": null, + "name": "Feather headdress (charged)", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12224", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,20,0,0,0,0", + "equipment_slot": "0" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12294" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12296" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12298" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12300" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12302" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12304" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12306" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12308" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12310" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12312" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12314" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12316" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12318" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12320" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12322" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12324" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12326" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12328" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12330" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12332" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12334" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12336" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12338" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12340" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12342" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12344" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12346" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12348" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12350" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12352" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12354" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12356" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12358" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12360" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12362" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12364" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12366" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12368" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12370" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12372" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12374" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12376" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12378" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12380" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12382" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12384" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12386" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12388" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12390" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12392" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12394" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12396" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12398" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12400" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12402" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12404" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12406" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12408" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12410" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12412" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12414" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12416" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12418" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12420" + }, + { + "requirements": "{23,41}", + "ge_buy_limit": "5000", + "grand_exchange_price": "96", + "examine": "A scroll for a macaw familiar.", + "durability": null, + "name": "Herbcall scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12422" + }, + { + "requirements": "{23,69}", + "ge_buy_limit": "5000", + "grand_exchange_price": "258", + "examine": "A scroll for a fruit bat familiar.", + "durability": null, + "name": "Fruitfall scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12423" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "146", + "examine": "A scroll for an ibis familiar.", + "durability": null, + "name": "Fish rain scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12424" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7", + "examine": "A scroll for a spirit wolf familiar.", + "durability": null, + "name": "Howl scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12425" + }, + { + "requirements": "{23,47}", + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "examine": "A scroll for a magpie familiar.", + "durability": null, + "name": "Thieving fingers scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12426" + }, + { + "requirements": "{23,62}", + "ge_buy_limit": "5000", + "grand_exchange_price": "533", + "examine": "A scroll for an abyssal lurker familiar.", + "durability": null, + "name": "Abyssal stealth scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12427" + }, + { + "requirements": "{23,10}", + "ge_buy_limit": "5000", + "grand_exchange_price": "237", + "examine": "A scroll for a spirit spider familiar.", + "durability": null, + "name": "Egg spawn scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12428" + }, + { + "requirements": "{23,33}", + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "examine": "A scroll for a beaver familiar.", + "durability": null, + "name": "Multichop scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12429" + }, + { + "requirements": "{23,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "121", + "examine": "A scroll for an albino rat familiar.", + "durability": null, + "name": "Cheese feast scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12430" + }, + { + "requirements": "{23,40}", + "ge_buy_limit": "5000", + "grand_exchange_price": "39", + "examine": "A scroll for a bull ant familiar.", + "durability": null, + "name": "Unburden scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12431" + }, + { + "requirements": "{23,19}", + "ge_buy_limit": "5000", + "grand_exchange_price": "72", + "examine": "A scroll for a spirit scorpion familiar.", + "durability": null, + "name": "Venom shot scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12432" + }, + { + "requirements": "{23,32}", + "ge_buy_limit": "5000", + "grand_exchange_price": "99", + "examine": "A scroll for a honey badger familiar.", + "durability": null, + "name": "Insane ferocity scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12433" + }, + { + "requirements": "{23,88}", + "ge_buy_limit": "5000", + "grand_exchange_price": "299", + "examine": "A scroll for a unicorn stallion familiar.", + "durability": null, + "name": "Healing aura scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12434" + }, + { + "requirements": "{23,96}", + "ge_buy_limit": "5000", + "grand_exchange_price": "428", + "examine": "A scroll for a pack yak familiar.", + "durability": null, + "name": "Winter storage scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12435" + }, + { + "requirements": "{23,63}", + "ge_buy_limit": "5000", + "grand_exchange_price": "223", + "examine": "A scroll for a spirit cobra familiar.", + "durability": null, + "name": "Oph. incubation scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12436" + }, + { + "requirements": "{23,92}", + "ge_buy_limit": "5000", + "grand_exchange_price": "419", + "examine": "A scroll for a wolpertinger familiar.", + "durability": null, + "name": "Magic focus scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12437" + }, + { + "requirements": "{23,68}", + "ge_buy_limit": "5000", + "grand_exchange_price": "220", + "examine": "A scroll for a bunyip familiar.", + "durability": null, + "name": "Swallow whole scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12438" + }, + { + "requirements": "{23,67}", + "ge_buy_limit": "5000", + "grand_exchange_price": "269", + "examine": "A scroll for a war tortoise familiar.", + "durability": null, + "name": "Testudo scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12439" + }, + { + "requirements": "{23,28}", + "ge_buy_limit": "5000", + "grand_exchange_price": "47", + "examine": "A scroll for a compost mound familiar.", + "durability": null, + "name": "Generate compost scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12440" + }, + { + "requirements": "{23,52}", + "ge_buy_limit": "5000", + "grand_exchange_price": "35", + "examine": "A scroll for a spirit terrorbird familiar.", + "durability": null, + "name": "Tireless run scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12441" + }, + { + "requirements": "{23,80}", + "ge_buy_limit": "5000", + "grand_exchange_price": "174", + "examine": "A scroll for a hydra familiar.", + "durability": null, + "name": "Regrowth scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12442" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1118", + "examine": "A scroll for a Pest Control familiar.", + "durability": null, + "name": "Call to arms scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12443" + }, + { + "requirements": "{23,49}", + "ge_buy_limit": "5000", + "grand_exchange_price": "148", + "examine": "A scroll for a bloated leech familiar.", + "durability": null, + "name": "Blood drain scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12444" + }, + { + "requirements": "{23,4}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7", + "examine": "A scroll for a dreadfowl familiar.", + "durability": null, + "name": "Dreadfowl strike scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12445" + }, + { + "requirements": "{23,25}", + "ge_buy_limit": "5000", + "grand_exchange_price": "122", + "examine": "A scroll for a spirit kalphite familiar.", + "durability": null, + "name": "Sandstorm scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12446" + }, + { + "requirements": "{23,31}", + "ge_buy_limit": "1000", + "grand_exchange_price": "98", + "examine": "A scroll for a vampire bat familiar.", + "durability": null, + "name": "Vampire touch scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12447" + }, + { + "requirements": "{23,42}", + "ge_buy_limit": "5000", + "grand_exchange_price": "123", + "examine": "A scroll for an evil turnip familiar.", + "durability": null, + "name": "Evil flames scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12448" + }, + { + "requirements": "{23,74}", + "ge_buy_limit": "5000", + "grand_exchange_price": "219", + "examine": "A scroll for a granite lobster familiar.", + "durability": null, + "name": "Crushing claw scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12449" + }, + { + "requirements": "{23,75}", + "ge_buy_limit": "5000", + "grand_exchange_price": "221", + "examine": "A scroll for a praying mantis familiar.", + "durability": null, + "name": "Mantis strike scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12450" + }, + { + "requirements": "{23,71}", + "ge_buy_limit": "5000", + "grand_exchange_price": "12", + "examine": "A scroll for an arctic bear familiar.", + "durability": null, + "name": "Arctic blast scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12451" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "10", + "examine": "A scroll for a barker toad familiar.", + "durability": null, + "name": "Toad bark scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12452" + }, + { + "requirements": "{23,55}", + "ge_buy_limit": "5000", + "grand_exchange_price": "202", + "examine": "A scroll for a spirit jelly familiar.", + "durability": null, + "name": "Dissolve scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12453" + }, + { + "requirements": "{23,54}", + "ge_buy_limit": "5000", + "grand_exchange_price": "163", + "examine": "A scroll for an abyssal parasite familiar.", + "durability": null, + "name": "Abyssal drain scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12454" + }, + { + "requirements": "{23,58}", + "ge_buy_limit": "5000", + "grand_exchange_price": "198", + "examine": "A scroll for a karamthulhu overlord familiar.", + "durability": null, + "name": "Doomsphere scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12455" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "9", + "examine": "A scroll for a spirit dagannoth familiar.", + "durability": null, + "name": "Spike shot scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12456" + }, + { + "requirements": "{23,78}", + "ge_buy_limit": "5000", + "grand_exchange_price": "146", + "examine": "A scroll for a giant ent familiar.", + "durability": null, + "name": "Acorn missile scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12457" + }, + { + "requirements": "{23,43}", + "ge_buy_limit": "5000", + "grand_exchange_price": "97", + "examine": "A scroll for a cockatrice variant familiar.", + "durability": null, + "name": "Petrifying gaze scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12458" + }, + { + "requirements": "{23,13}", + "ge_buy_limit": "5000", + "grand_exchange_price": "10", + "examine": "A scroll for a thorny snail familiar.", + "durability": null, + "name": "Slime spray scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12459" + }, + { + "requirements": "{23,18}", + "ge_buy_limit": "5000", + "grand_exchange_price": "47", + "examine": "A scroll for a desert wyrm familiar.", + "durability": null, + "name": "Electric lash scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12460" + }, + { + "requirements": "{23,36}", + "ge_buy_limit": "5000", + "grand_exchange_price": "135", + "examine": "A scroll for a bronze minotaur familiar.", + "durability": null, + "name": "Bronze bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12461" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "180", + "examine": "A scroll for an iron minotaur familiar.", + "durability": null, + "name": "Iron bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12462" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "182", + "examine": "A scroll for a steel minotaur familiar.", + "durability": null, + "name": "Steel bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12463" + }, + { + "requirements": "{23,66}", + "ge_buy_limit": "5000", + "grand_exchange_price": "198", + "examine": "A scroll for a mithril minotaur familiar.", + "durability": null, + "name": "Mith bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12464" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "203", + "examine": "A scroll for an adamant minotaur familiar.", + "durability": null, + "name": "Addy bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12465" + }, + { + "requirements": "{23,86}", + "ge_buy_limit": "5000", + "grand_exchange_price": "67", + "examine": "A scroll for a rune minotaur familiar.", + "durability": null, + "name": "Rune bull rush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12466" + }, + { + "requirements": "{23,64}", + "ge_buy_limit": "5000", + "grand_exchange_price": "171", + "examine": "A scroll for a stranger plant familiar.", + "durability": null, + "name": "Poisonous blast scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12467" + }, + { + "requirements": "{23,61}", + "ge_buy_limit": "5000", + "grand_exchange_price": "170", + "examine": "A scroll for a smoke devil familiar.", + "durability": null, + "name": "Dust cloud scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12468" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12469" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12471" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12473" + }, + { + "examine": "(hatchling) A hatchling <dragon colour> dragon.(baby) A bigger baby <colour> dragon.", + "durability": null, + "name": "Hatchling dragon", + "archery_ticket_price": "0", + "id": "12475" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Red dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12477" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Blue dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12478" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Green dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12479" + }, + { + "examine": "This will hatch into a mighty dragon.", + "durability": null, + "name": "Black dragon egg", + "tradeable": "false", + "destroy": "false", + "weight": "1", + "archery_ticket_price": "0", + "id": "12480" + }, + { + "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.", + "durability": null, + "name": "Baby penguin", + "archery_ticket_price": "0", + "id": "12481" + }, + { + "examine": "I can hatch this in an Incubator.", + "durability": null, + "name": "Penguin egg", + "archery_ticket_price": "0", + "id": "12483" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12484" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12485" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12486" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Raccoon", + "archery_ticket_price": "0", + "id": "12487" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12488" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12489" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12490" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12491" + }, + { + "examine": "It's a colour-coordinated lizard!", + "durability": null, + "name": "Baby chameleon", + "archery_ticket_price": "0", + "id": "12492" + }, + { + "examine": "It's a colour-coordinated lizard!", + "durability": null, + "name": "Chameleon", + "archery_ticket_price": "0", + "id": "12493" + }, + { + "examine": "A lizard's egg.", + "durability": null, + "name": "Chameleon egg", + "weight": "1", + "archery_ticket_price": "0", + "id": "12494" + }, + { + "examine": "A lizard's egg.", + "durability": null, + "name": "Chameleon egg", + "weight": "1", + "archery_ticket_price": "0", + "id": "12495" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12496" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12498" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12499" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12500" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12501" + }, + { + "examine": "Apparently, this token is worth one baby giant crab to someone called Nung.", + "durability": null, + "name": "Crunchy claw token", + "archery_ticket_price": "0", + "id": "12502" + }, + { + "examine": "A fluffy chick.", + "durability": null, + "name": "Saradomin chick", + "archery_ticket_price": "0", + "id": "12503" + }, + { + "examine": "Lovely blue plumage.", + "durability": null, + "name": "Saradomin bird", + "archery_ticket_price": "0", + "id": "12504" + }, + { + "examine": "A fantastic saradomin owl.", + "durability": null, + "name": "Saradomin owl", + "archery_ticket_price": "0", + "id": "12505" + }, + { + "examine": "A fluffy chick.", + "durability": null, + "name": "Zamorak chick", + "archery_ticket_price": "0", + "id": "12506" + }, + { + "examine": "Lovely red plumage.", + "durability": null, + "name": "Zamorak bird", + "archery_ticket_price": "0", + "id": "12507" + }, + { + "examine": "A stately zamorak hawk.", + "durability": null, + "name": "Zamorak hawk", + "archery_ticket_price": "0", + "id": "12508" + }, + { + "examine": "A fluffy chick.", + "durability": null, + "name": "Guthix chick", + "archery_ticket_price": "0", + "id": "12509" + }, + { + "examine": "Lovely green plumage.", + "durability": null, + "name": "Guthix bird", + "archery_ticket_price": "0", + "id": "12510" + }, + { + "examine": "An impressive Guthix raptor.", + "durability": null, + "name": "Guthix raptor", + "archery_ticket_price": "0", + "id": "12511" + }, + { + "requirements": "{4,23}", + "examine": "It's lively and energetic.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12512" + }, + { + "requirements": "{4,23}", + "examine": "It's lively and energetic.", + "durability": null, + "name": "Terrier", + "archery_ticket_price": "0", + "id": "12513" + }, + { + "requirements": "{4,23}", + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12514" + }, + { + "requirements": "{4,23}", + "examine": "An aerodynamic doggy.", + "durability": null, + "name": "Greyhound", + "archery_ticket_price": "0", + "id": "12515" + }, + { + "requirements": "{4,23}", + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12516" + }, + { + "requirements": "{4,23}", + "examine": "My most faithful friend.", + "durability": null, + "name": "Labrador", + "archery_ticket_price": "0", + "id": "12517" + }, + { + "requirements": "{4,23}", + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12518" + }, + { + "requirements": "{4,23}", + "examine": "A purebred doggy.", + "durability": null, + "name": "Dalmatian", + "archery_ticket_price": "0", + "id": "12519" + }, + { + "requirements": "{4,23}", + "examine": "This little puppy is very quiet.", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12520" + }, + { + "requirements": "{4,23}", + "examine": "Come by! Come by!", + "durability": null, + "name": "Sheepdog", + "archery_ticket_price": "0", + "id": "12521" + }, + { + "requirements": "{4,23}", + "examine": "One proud little puppy.", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12522" + }, + { + "requirements": "{4,23}", + "examine": "Looks like it's chewing a wasp.", + "durability": null, + "name": "Bulldog", + "archery_ticket_price": "0", + "id": "12523" + }, + { + "requirements": "{23,99}", + "shop_price": "99000", + "examine": "The cape worn by master summoners.", + "durability": null, + "name": "Summoning cape", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12524", + "bonuses": "0,0,0,0,0,9,9,9,9,9,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "1", + "examine": "A charm used to summon familiars.", + "durability": null, + "name": "Gold charm", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12527" + }, + { + "examine": "A key to Pikkupstix's trapdoor.", + "durability": null, + "name": "Trapdoor key", + "archery_ticket_price": "0", + "id": "12528" + }, + { + "shop_price": "25", + "examine": "Shards of an obelisk.", + "grand_exchange_price": "24", + "durability": null, + "name": "Spirit shards", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12530" + }, + { + "requirements": "{23,56}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1914", + "examine": "I can summon an ibis familiar with this.", + "durability": null, + "name": "Ibis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12531" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1914", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ibis pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12532" + }, + { + "requirements": "{23,16}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7", + "examine": "A scroll for a granite crab familiar.", + "durability": null, + "name": "Stony shell scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12533" + }, + { + "ge_buy_limit": "1000", + "examine": "Meat from a creature that can be hunted in Isafdar.", + "grand_exchange_price": "7968", + "durability": null, + "name": "Raw pawya meat", + "tradeable": "true", + "weight": "0.33", + "archery_ticket_price": "0", + "id": "12535" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "7968", + "durability": null, + "name": "Raw pawya meat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12536" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12538" + }, + { + "ge_buy_limit": "5000", + "examine": "Spikes from a grenwall.", + "grand_exchange_price": "1704", + "durability": null, + "name": "Grenwall spikes", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12539" + }, + { + "durability": null, + "name": "Picture", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12545" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12547" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12548" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12549" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Platypus", + "archery_ticket_price": "0", + "id": "12550" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Baby platypus", + "archery_ticket_price": "0", + "id": "12551" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Baby platypus", + "archery_ticket_price": "0", + "id": "12552" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Baby platypus", + "archery_ticket_price": "0", + "id": "12553" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Patrick", + "archery_ticket_price": "0", + "id": "12554" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Penelope", + "archery_ticket_price": "0", + "id": "12555" + }, + { + "examine": "I bet he can't wait until it's cooked.", + "durability": null, + "name": "Peter", + "archery_ticket_price": "0", + "id": "12556" + }, + { + "examine": "A most unlikely creature.", + "durability": null, + "name": "Peanut", + "archery_ticket_price": "0", + "id": "12557" + }, + { + "examine": "Marginally better than egg on your face.", + "durability": null, + "name": "Mud", + "archery_ticket_price": "0", + "id": "12558", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "The height of style?", + "grand_exchange_price": "1004", + "durability": null, + "name": "Ogre wig", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12559", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "1004", + "durability": null, + "name": "Ogre wig", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12560" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "It's a little big on me.", + "grand_exchange_price": "197", + "durability": null, + "name": "Ogre kilt", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12561", + "equipment_slot": "7" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "197", + "durability": null, + "name": "Ogre kilt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12562" + }, + { + "remove_sleeves": "true", + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "It's a little big on me.", + "grand_exchange_price": "536", + "durability": null, + "name": "Ogre top", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12563", + "equipment_slot": "4" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "536", + "durability": null, + "name": "Ogre top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12564" + }, + { + "shop_price": "60", + "ge_buy_limit": "100", + "examine": "Good for stomping.", + "grand_exchange_price": "420", + "durability": null, + "name": "Ogre boots", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "12565", + "equipment_slot": "10" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "420", + "durability": null, + "name": "Ogre boots", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12566" + }, + { + "ge_buy_limit": "100", + "examine": "It's a slightly sickly-looking fur.", + "grand_exchange_price": "1468", + "durability": null, + "name": "Diseased kebbit fur", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12567" + }, + { + "remove_head": "true", + "ge_buy_limit": "100", + "examine": "A furry hat with an unnerving tail.", + "grand_exchange_price": "3656", + "durability": null, + "name": "Davy kebbit hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12568", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3656", + "durability": null, + "name": "Davy kebbit hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12569" + }, + { + "requirements": "{0,5}", + "ge_buy_limit": "100", + "turn90cw_anim": "8684", + "examine": "A big piece of tree.", + "walk_anim": "8684", + "durability": null, + "weight": "10", + "turn90ccw_anim": "8684", + "attack_speed": "7", + "weapon_interface": "10", + "turn180_anim": "8684", + "render_anim": "1157", + "defence_anim": "403", + "equipment_slot": "3", + "attack_anims": "401,401,401,401", + "grand_exchange_price": "77", + "stand_anim": "8683", + "name": "Ogre club", + "tradeable": "true", + "run_anim": "8685", + "archery_ticket_price": "0", + "id": "12570", + "stand_turn_anim": "823", + "bonuses": "-6,-2,15,0,0,0,0,0,0,0,0,12,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "77", + "durability": null, + "name": "Ogre club", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12571" + }, + { + "ge_buy_limit": "100", + "examine": "A delicate, sweet-smelling flower.", + "grand_exchange_price": "20", + "durability": null, + "name": "Lavender", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12572" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Lavender", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12573" + }, + { + "ge_buy_limit": "100", + "examine": "A stiff, pungent grass.", + "grand_exchange_price": "31", + "durability": null, + "name": "Fever grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12574" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "31", + "durability": null, + "name": "Fever grass", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12575" + }, + { + "ge_buy_limit": "100", + "examine": "A cheerful, aromatic flower.", + "grand_exchange_price": "12", + "durability": null, + "name": "Tansymum", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12576" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "12", + "durability": null, + "name": "Tansymum", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12577" + }, + { + "turn90cw_anim": "8681", + "examine": "A stiff, pungent grass.", + "walk_anim": "8681", + "durability": null, + "turn90ccw_anim": "8681", + "turn180_anim": "8681", + "render_anim": "294", + "equipment_slot": "3", + "grand_exchange_price": "41", + "stand_anim": "8682", + "name": "Smouldering fever grass", + "tradeable": "true", + "run_anim": "8690", + "archery_ticket_price": "0", + "id": "12578", + "stand_turn_anim": "8682" + }, + { + "turn90cw_anim": "8681", + "examine": "A delicate, sweet-smelling flower.", + "walk_anim": "8681", + "durability": null, + "turn90ccw_anim": "8681", + "turn180_anim": "8681", + "render_anim": "294", + "equipment_slot": "3", + "grand_exchange_price": "29", + "stand_anim": "8682", + "name": "Smouldering lavender", + "tradeable": "true", + "run_anim": "8690", + "archery_ticket_price": "0", + "id": "12579", + "stand_turn_anim": "8682" + }, + { + "turn90cw_anim": "8681", + "examine": "A cheerful, aromatic flower.", + "walk_anim": "8681", + "durability": null, + "turn90ccw_anim": "8681", + "turn180_anim": "8681", + "render_anim": "294", + "equipment_slot": "3", + "grand_exchange_price": "18", + "stand_anim": "8682", + "name": "Smouldering tansymum", + "tradeable": "true", + "run_anim": "8690", + "archery_ticket_price": "0", + "id": "12580", + "stand_turn_anim": "8682" + }, + { + "ge_buy_limit": "25000", + "examine": "Logs cut from a eucalyptus tree.", + "grand_exchange_price": "507", + "durability": null, + "name": "Eucalyptus logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12581", + "equipment_slot": "5" + }, + { + "ge_buy_limit": "25000", + "grand_exchange_price": "507", + "durability": null, + "name": "Eucalyptus logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12582" + }, + { + "ge_buy_limit": "1000", + "examine": "Logs cut from a eucalyptus tree.", + "grand_exchange_price": "3609", + "durability": null, + "name": "Eucalyptus pyre logs", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12583" + }, + { + "ge_buy_limit": "1000", + "grand_exchange_price": "3609", + "durability": null, + "name": "Eucalyptus pyre logs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12584" + }, + { + "ge_buy_limit": "100", + "examine": "A modest and mild plant.", + "grand_exchange_price": "20", + "durability": null, + "name": "Primweed", + "tradeable": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12588" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "20", + "durability": null, + "name": "Primweed", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12589" + }, + { + "ge_buy_limit": "100", + "examine": "A pretty but putrid flower.", + "grand_exchange_price": "16", + "durability": null, + "name": "Stinkbloom", + "tradeable": "true", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "12590" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16", + "durability": null, + "name": "Stinkbloom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12591" + }, + { + "durability": null, + "name": "Diseased kebbit fur", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12592" + }, + { + "destroy_message": "If you need to, you can get another from the Tyras Camp catapult engineer.", + "examine": "The plans for repairing the Tyras Camp catapult.", + "durability": null, + "name": "Catapult schematics", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12593" + }, + { + "destroy_message": "If you need to, you can get another from General Hining in the Tyras Camp.", + "examine": "General Hining wants me to deliver this to the Catapult Engineer.", + "durability": null, + "name": "Engineer's letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12594" + }, + { + "destroy_message": "You can always get another from the drunken sailor in Port Sarim.", + "examine": "Taken from a drunken sailor in Port Sarim.", + "durability": null, + "name": "Sailor's hat", + "tradeable": "false", + "destroy": "true", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "12595", + "equipment_slot": "0" + }, + { + "destroy_message": "You can get another set from Thaki the delivery dwarf in Port Sarim.", + "examine": "Dwarf-made parts for repairing the Tyras Camp catapult.", + "durability": null, + "name": "Metal catapult parts", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12596" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12597" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12598" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12599" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12600" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12601" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12602" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12603" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12604" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12605" + }, + { + "destroy_message": "If you need to, you can make another from the Tyras Camp catapult engineer's schematics.", + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Mahogany catapult part", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12606" + }, + { + "examine": "Used to repair the Tyras Camp catapult.", + "durability": null, + "name": "Picture", + "tradeable": "false", + "destroy": "true", + "weight": "2", + "archery_ticket_price": "0", + "id": "12607", + "equipment_slot": "5" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "An amulet of Farming with 1 charge.", + "grand_exchange_price": "271", + "durability": null, + "name": "Amulet of farming(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12608", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "271", + "durability": null, + "name": "Amulet of farming(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12609" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 2 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12610", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12611" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 3 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12612", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12613" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 4 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12614", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12615" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 5 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12616", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12617" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 6 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12618", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(6)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12619" + }, + { + "shop_price": "200", + "examine": "An amulet of Farming with 7 charges.", + "grand_exchange_price": "8", + "durability": null, + "name": "Amulet of farming(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12620", + "equipment_slot": "2" + }, + { + "durability": null, + "name": "Amulet of farming(7)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12621" + }, + { + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "An amulet of Farming with 8 charges.", + "grand_exchange_price": "210", + "durability": null, + "name": "Amulet of farming(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12622", + "equipment_slot": "2" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "210", + "durability": null, + "name": "Amulet of farming(8)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12623" + }, + { + "shop_price": "10", + "examine": "An ogleroot. How odd.", + "durability": null, + "name": "Ogleroot", + "tradeable": "true", + "archery_ticket_price": "0", + "weight": "0", + "id": "12624" + }, + { + "destroy_message": "You will need to obtain more flags from Mrs. Winkin or Farmer Blinkin if you have lost all of the flags you have.", + "shop_price": "500", + "examine": "A flag to put in the ground.", + "durability": null, + "name": "Flag", + "tradeable": "false", + "destroy": "true", + "weight": "0", + "archery_ticket_price": "0", + "id": "12625" + }, + { + "destroy_message": "You will need to get another exam paper from Professor Henry", + "examine": "Player Safety test", + "durability": null, + "name": "Test paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12626" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12627" + }, + { + "destroy_message": "Are you sure you want to destroy the lamp? You won't be able to get another one.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12628" + }, + { + "destroy_message": "You can get another pair of gloves from the chest in the Stronghold of Player Safety.", + "examine": "Gloves from the Stronghold of Player Safety.", + "durability": null, + "name": "Safety gloves", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12629", + "bonuses": "0,0,0,0,0,1,2,2,1,2,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Rubium is very unstable", + "shop_price": "10", + "examine": "Be careful with this near water.", + "durability": null, + "name": "Rubium", + "weight": "1", + "archery_ticket_price": "0", + "id": "12630" + }, + { + "destroy_message": "The train is tiny", + "examine": "(While on the ground) Kennith's lost toy. (While in your inventory) A wooden toy train.", + "durability": null, + "name": "Toy train", + "archery_ticket_price": "0", + "id": "12631" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "160", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12632" + }, + { + "examine": "The jar is shaking violently!", + "durability": null, + "name": "Super fishing explosive", + "archery_ticket_price": "0", + "id": "12633" + }, + { + "destroy_message": "You can get another chocatrice cape from Diango in Draynor Village.", + "examine": "A thick, orange cape.", + "durability": null, + "name": "Chocatrice cape", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12634", + "equipment_slot": "1" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12635" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12636" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12637" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12638" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12639" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12640" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12641" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12642" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12643" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Happy Easter.", + "grand_exchange_price": "64747137", + "durability": null, + "name": "Easter egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12644" + }, + { + "destroy_message": "You can get another chocatrice cape from Diango in Draynor Village.", + "examine": "A thick, orange cape.", + "durability": null, + "name": "Chocatrice cape", + "tradeable": "false", + "destroy": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "12645", + "equipment_slot": "1" + }, + { + "examine": "A chocolate egg wrapped in coloured foil.", + "durability": null, + "name": "Chocolate egg", + "archery_ticket_price": "0", + "id": "12646" + }, + { + "examine": "A chocolate egg wrapped in coloured foil.", + "durability": null, + "name": "Chocolate egg", + "archery_ticket_price": "0", + "id": "12647" + }, + { + "examine": "A chocolate egg wrapped in coloured foil.", + "durability": null, + "name": "Chocolate egg", + "archery_ticket_price": "0", + "id": "12648" + }, + { + "shop_price": "2", + "examine": "It's an empty bucket.", + "grand_exchange_price": "50", + "durability": null, + "name": "Bucket", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "12649" + }, + { + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "12650" + }, + { + "examine": "Common bucket: It's a bucket of water.2008 Easter event: It's a bucket of water from the Easter Bunny's warren. Regular bucket filled from Braindeath Island: It's a bucket of... water?", + "grand_exchange_price": "74", + "durability": null, + "name": "Bucket of water", + "tradeable": "true", + "weight": "3", + "archery_ticket_price": "0", + "id": "12651" + }, + { + "examine": "It's a bucket of coal from the Easter Bunny's warren.", + "durability": null, + "name": "Bucket of coal", + "weight": "3", + "archery_ticket_price": "0", + "id": "12652" + }, + { + "examine": "It's a bucket of coal from the Easter Bunny's warren.", + "durability": null, + "name": "Bucket of coal", + "weight": "3", + "archery_ticket_price": "0", + "id": "12653" + }, + { + "destroy_message": "Are you sure you want to destroy this object?
You can get another in the Easter Bunny's warren.", + "examine": "A stripy brown egg.", + "grand_exchange_price": "1255", + "durability": null, + "name": "Cockatrice egg", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12654" + }, + { + "destroy_message": "Are you sure you want to destroy this object?
You can make another at the Easter Bunny's warren.", + "examine": "A cockatrice egg that has been dipped in molten chocolate.", + "durability": null, + "name": "Chocatrice egg", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12655", + "equipment_slot": "3" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Some chocolate chunks.", + "durability": null, + "name": "Chocolate chunks", + "archery_ticket_price": "0", + "id": "12657" + }, + { + "remove_head": "true", + "shop_price": "3520", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "1913", + "name": "Adamant full helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12658", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "3520", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,2", + "remove_beard": "true", + "equipment_slot": "0", + "grand_exchange_price": "1913", + "name": "Adamant full helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12659", + "bonuses": "0,0,0,-6,-2,19,21,16,-1,19,6,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Lightweight head protection.", + "grand_exchange_price": "1040", + "durability": null, + "name": "Snakeskin bandana (e)", + "tradeable": "false", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "12660", + "absorb": "0,2,1", + "bonuses": "0,0,0,-5,4,2,4,4,2,2,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Lightweight head protection.", + "grand_exchange_price": "1040", + "durability": null, + "name": "Snakeskin bandana (charged)", + "tradeable": "false", + "weight": "0.9", + "archery_ticket_price": "0", + "id": "12661", + "absorb": "0,2,1", + "bonuses": "0,0,0,-5,4,2,4,4,2,2,6,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "A wooden helmet.", + "durability": null, + "weight": "0.9", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5623", + "name": "Splitbark helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12662", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A wooden helmet.", + "durability": null, + "weight": "0.9", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "5623", + "name": "Splitbark helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12663", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21200", + "name": "Rune full helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12664", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A full face helmet.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "21200", + "name": "Rune full helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12665", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Makes the wearer pretty intimidating.", + "durability": null, + "weight": "1.3", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "61200", + "name": "Dragon med helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12666", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "Makes the wearer pretty intimidating.", + "durability": null, + "weight": "1.3", + "absorb": "2,0,4", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "61200", + "name": "Dragon med helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12667", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm (e)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12668", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "15000", + "examine": "A mystical helmet.", + "durability": null, + "destroy": "true", + "weight": "0.9", + "absorb": "3,1,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "The Oneiromancer might be able to help you get another.", + "name": "Lunar helm (charged)", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12669", + "bonuses": "0,0,0,3,-2,8,7,10,2,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "A helmet of great craftmanship.", + "durability": null, + "weight": "0.5", + "absorb": "0,5,2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "3932989", + "name": "Armadyl helmet (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12670", + "bonuses": "-5,-5,-5,-5,10,6,8,10,10,8,12,0,1,0,0" + }, + { + "remove_head": "true", + "examine": "A helmet of great craftmanship.", + "durability": null, + "weight": "0.5", + "absorb": "0,5,2", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "3932989", + "name": "Armadyl helmet (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12671", + "bonuses": "-5,-5,-5,-5,10,6,8,10,10,8,12,0,1,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by archers.", + "durability": null, + "weight": "2", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "41000", + "name": "Archer helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12672", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by archers.", + "durability": null, + "weight": "2", + "absorb": "0,3,1", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "41000", + "name": "Archer helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12673", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by berserkers.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48800", + "name": "Berserker helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12674", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helmet is worn by berserkers.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48800", + "name": "Berserker helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12675", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by warriors.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48200", + "name": "Warrior helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12676", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by warriors.", + "durability": null, + "weight": "2.7", + "absorb": "1,0,3", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "48200", + "name": "Warrior helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12677", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by farseers.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "46400", + "name": "Farseer helm (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12678", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "78000", + "examine": "This helm is worn by farseers.", + "durability": null, + "weight": "2.7", + "absorb": "3,1,0", + "equipment_slot": "0", + "lendable": "true", + "grand_exchange_price": "46400", + "name": "Farseer helm (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12679", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "50000", + "examine": "A gift from Neitiznot's Burgher.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "equipment_slot": "0", + "grand_exchange_price": "44831", + "name": "Helm of neitiznot (e)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12680", + "bonuses": "0,0,0,0,0,31,29,34,3,30,8,3,3,0,0" + }, + { + "remove_head": "true", + "shop_price": "50000", + "examine": "A gift from Neitiznot's Burgher.", + "durability": null, + "weight": "2.2", + "absorb": "2,0,4", + "equipment_slot": "0", + "grand_exchange_price": "44831", + "name": "Helm of neitiznot (charged)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12681", + "bonuses": "0,0,0,0,0,31,29,34,3,30,8,3,3,0,0" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12682" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12684" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12686" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12688" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12690" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12692" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12694" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12696" + }, + { + "examine": "(Baby) It's a tiny, cheeky monkey. (Adult) Hide the bananas!", + "durability": null, + "name": "Baby monkey", + "archery_ticket_price": "0", + "id": "12698" + }, + { + "requirements": "{4,23}", + "examine": "A hyperactive little pup.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12700" + }, + { + "requirements": "{4,23}", + "examine": "A hyperactive little pup.", + "durability": null, + "name": "Terrier", + "archery_ticket_price": "0", + "id": "12701" + }, + { + "requirements": "{4,23}", + "examine": "Such a brave doggy.", + "durability": null, + "name": "Terrier puppy", + "archery_ticket_price": "0", + "id": "12702" + }, + { + "requirements": "{4,23}", + "examine": "Such a brave doggy.", + "durability": null, + "name": "Terrier", + "archery_ticket_price": "0", + "id": "12703" + }, + { + "requirements": "{4,23}", + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12704" + }, + { + "requirements": "{4,23}", + "examine": "An aerodynamic doggy.", + "durability": null, + "name": "Greyhound", + "archery_ticket_price": "0", + "id": "12705" + }, + { + "requirements": "{4,23}", + "examine": "This is one fast little pooch.", + "durability": null, + "name": "Greyhound puppy", + "archery_ticket_price": "0", + "id": "12706" + }, + { + "requirements": "{4,23}", + "examine": "An aerodynamic doggy.", + "durability": null, + "name": "Greyhound", + "archery_ticket_price": "0", + "id": "12707" + }, + { + "requirements": "{4,23}", + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12708" + }, + { + "requirements": "{4,23}", + "examine": "My most faithful friend.", + "durability": null, + "name": "Labrador", + "archery_ticket_price": "0", + "id": "12709" + }, + { + "requirements": "{4,23}", + "examine": "Soft but strong... and cute.", + "durability": null, + "name": "Labrador puppy", + "archery_ticket_price": "0", + "id": "12710" + }, + { + "requirements": "{4,23}", + "examine": "My most faithful friend.", + "durability": null, + "name": "Labrador", + "archery_ticket_price": "0", + "id": "12711" + }, + { + "requirements": "{4,23}", + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12712" + }, + { + "requirements": "{4,23}", + "examine": "A purebred doggy.", + "durability": null, + "name": "Dalmatian", + "archery_ticket_price": "0", + "id": "12713" + }, + { + "requirements": "{4,23}", + "examine": "Now, if only I could find another hundred...", + "durability": null, + "name": "Dalmatian puppy", + "archery_ticket_price": "0", + "id": "12714" + }, + { + "requirements": "{4,23}", + "examine": "A purebred doggy.", + "durability": null, + "name": "Dalmatian", + "archery_ticket_price": "0", + "id": "12715" + }, + { + "requirements": "{4,23}", + "examine": "This little puppy is very quiet.", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12716" + }, + { + "requirements": "{4,23}", + "examine": "Come by! Come by!", + "durability": null, + "name": "Sheepdog", + "archery_ticket_price": "0", + "id": "12717" + }, + { + "requirements": "{4,23}", + "examine": "This little puppy is very quiet.", + "durability": null, + "name": "Sheepdog puppy", + "archery_ticket_price": "0", + "id": "12718" + }, + { + "requirements": "{4,23}", + "examine": "Come by! Come by!", + "durability": null, + "name": "Sheepdog", + "archery_ticket_price": "0", + "id": "12719" + }, + { + "requirements": "{4,23}", + "examine": "One proud little puppy.", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12720" + }, + { + "requirements": "{4,23}", + "examine": "Looks like it's chewing a wasp.", + "durability": null, + "name": "Bulldog", + "archery_ticket_price": "0", + "id": "12721" + }, + { + "requirements": "{4,23}", + "examine": "One proud little puppy.", + "durability": null, + "name": "Bulldog puppy", + "archery_ticket_price": "0", + "id": "12722" + }, + { + "requirements": "{4,23}", + "examine": "Looks like it's chewing a wasp.", + "durability": null, + "name": "Bulldog", + "archery_ticket_price": "0", + "id": "12723" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12724" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12725" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12726" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12727" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12728" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12729" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12730" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12731" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven chick", + "archery_ticket_price": "0", + "id": "12732" + }, + { + "examine": "Chick: A raven chick.", + "durability": null, + "name": "Raven", + "archery_ticket_price": "0", + "id": "12733" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12734" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Raccoon", + "archery_ticket_price": "0", + "id": "12735" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Baby raccoon", + "archery_ticket_price": "0", + "id": "12736" + }, + { + "examine": "(Baby) A stripy little baby raccoon.(Adult) He can run with us.", + "durability": null, + "name": "Raccoon", + "archery_ticket_price": "0", + "id": "12737" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12738" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12739" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12740" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Baby gecko", + "archery_ticket_price": "0", + "id": "12741" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12742" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12743" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12744" + }, + { + "examine": "(Baby) It's so adorably tiny! (Adult) How cute!", + "durability": null, + "name": "Gecko", + "archery_ticket_price": "0", + "id": "12745" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12746" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12747" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12748" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12749" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12750" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12751" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Baby giant crab", + "archery_ticket_price": "0", + "id": "12752" + }, + { + "requirements": "{23,40}", + "examine": "Baby: Little NipperAdult: Bigger Nipper.", + "durability": null, + "name": "Giant crab", + "archery_ticket_price": "0", + "id": "12753" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12754" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12755" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12756" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12757" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12758" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12759" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Baby squirrel", + "archery_ticket_price": "0", + "id": "12760" + }, + { + "examine": "Adult: An experienced nut-thief.Baby: A tiny nut-thief.", + "durability": null, + "name": "Squirrel", + "archery_ticket_price": "0", + "id": "12761" + }, + { + "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.", + "durability": null, + "name": "Baby penguin", + "archery_ticket_price": "0", + "id": "12763" + }, + { + "examine": "(Baby) Can't fly and can barely walk, but adorable nonetheless. (adult) Emperor of all he surveys.", + "durability": null, + "name": "Baby penguin", + "archery_ticket_price": "0", + "id": "12765" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12766" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12767" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12768" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12769" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12770" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12771" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12772" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12773" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture chick", + "archery_ticket_price": "0", + "id": "12774" + }, + { + "examine": "If you see them circling: run.", + "durability": null, + "name": "Vulture", + "archery_ticket_price": "0", + "id": "12775" + }, + { + "requirements": "{23,85}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2613", + "examine": "I can summon a swamp titan familiar with this.", + "durability": null, + "name": "Swamp titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12776" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2613", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Swamp titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12777" + }, + { + "requirements": "{17,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "130", + "examine": "I can summon a spirit mosquito familiar with this.", + "durability": null, + "name": "Spirit mosquito pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12778" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "130", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit mosquito pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12779" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "16100", + "examine": "I can summon a void spinner familiar with this.", + "durability": null, + "name": "Void spinner pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12780" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "16100", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void spinner pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12781" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2458", + "examine": "I can summon a forge regent familiar with this.", + "durability": null, + "name": "Forge regent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12782" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2458", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Forge regent pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12783" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "4097", + "examine": "I can summon a spirit larupia familiar with this.", + "durability": null, + "name": "Spirit larupia pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12784" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "4097", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit larupia pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12785" + }, + { + "requirements": "{23,89}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3856", + "examine": "I can summon a geyser titan familiar with this.", + "durability": null, + "name": "Geyser titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12786" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3856", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Geyser titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12787" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3840", + "examine": "I can summon a lava titan familiar with this.", + "durability": null, + "name": "Lava titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12788" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3840", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Lava titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12789" + }, + { + "requirements": "{23,99}", + "ge_buy_limit": "5000", + "grand_exchange_price": "5800", + "examine": "I can summon a steel titan familiar with this.", + "durability": null, + "name": "Steel titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12790" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "5800", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Steel titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12791" + }, + { + "requirements": "{23,73}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3436", + "examine": "I can summon an obsidian golem familiar with this.", + "durability": null, + "name": "Obsidian golem pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12792" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3436", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Obsidian golem pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12793" + }, + { + "requirements": "{23,77}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3017", + "examine": "I can summon a talon beast familiar with this.", + "durability": null, + "name": "Talon beast pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12794" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3017", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Talon beast pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12795" + }, + { + "requirements": "{23,93}", + "ge_buy_limit": "5000", + "grand_exchange_price": "2991", + "examine": "I can summon an abyssal titan familiar with this.", + "durability": null, + "name": "Abyssal titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12796" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "2991", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Abyssal titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12797" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "18300", + "examine": "I can summon a void torcher familiar with this.", + "durability": null, + "name": "Void torcher pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12798" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "18300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void torcher pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12799" + }, + { + "requirements": "{23,29}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1513", + "examine": "I can summon a giant chinchompa familiar with this.", + "durability": null, + "name": "Giant chinchompa pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12800" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1513", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Giant chinchompa pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12801" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3567", + "examine": "I can summon a fire titan familiar with this.", + "durability": null, + "name": "Fire titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12802" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3567", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Fire titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12803" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3548", + "examine": "I can summon a moss titan familiar with this.", + "durability": null, + "name": "Moss titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12804" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3548", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Moss titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12805" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7184", + "examine": "I can summon an ice titan familiar with this.", + "durability": null, + "name": "Ice titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12806" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7184", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ice titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12807" + }, + { + "requirements": "{22,23}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1116", + "examine": "I can summon a spirit Tz-Kih familiar with this.", + "durability": null, + "name": "Spirit tz-kih pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12808" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1116", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit tz-kih pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12809" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "7919", + "examine": "I can summon a spirit graahk familiar with this.", + "durability": null, + "name": "Spirit graahk pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12810" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "7919", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit graahk pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12811" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "13300", + "examine": "I can summon a spirit kyatt familiar with this.", + "durability": null, + "name": "Spirit kyatt pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12812" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "13300", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Spirit kyatt pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12813" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "18600", + "examine": "I can summon a void shifter familiar with this.", + "durability": null, + "name": "Void shifter pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12814" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "18600", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void shifter pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12815" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1951", + "examine": "I can summon a pyrelord familiar with this.", + "durability": null, + "name": "Pyrelord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12816" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1951", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Pyrelord pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12817" + }, + { + "requirements": "{23,34}", + "ge_buy_limit": "5000", + "grand_exchange_price": "10700", + "examine": "I can summon a void ravager familiar with this.", + "durability": null, + "name": "Void ravager pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12818" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "10700", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Void ravager pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12819" + }, + { + "requirements": "{23,70}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1382", + "examine": "I can summon a ravenous locust familiar with this.", + "durability": null, + "name": "Ravenous locust pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12820" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "1382", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Ravenous locust pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12821" + }, + { + "requirements": "{23,95}", + "ge_buy_limit": "5000", + "grand_exchange_price": "3470", + "examine": "I can summon an iron titan familiar with this.", + "durability": null, + "name": "Iron titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12822" + }, + { + "ge_buy_limit": "5000", + "grand_exchange_price": "3470", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Iron titan pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12823" + }, + { + "requirements": "{23,79}", + "ge_buy_limit": "5000", + "grand_exchange_price": "380", + "examine": "A scroll for an elemental titan familiar.", + "durability": null, + "name": "Titan's con. scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12824" + }, + { + "requirements": "{23,99}", + "ge_buy_limit": "5000", + "grand_exchange_price": "646", + "examine": "A scroll for a steel titan familiar.", + "durability": null, + "name": "Steel of legends scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12825" + }, + { + "requirements": "{23,73}", + "ge_buy_limit": "5000", + "grand_exchange_price": "271", + "examine": "A scroll for an obsidian golem familiar.", + "durability": null, + "name": "Volcanic str. scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12826" + }, + { + "requirements": "{23,93}", + "ge_buy_limit": "5000", + "grand_exchange_price": "310", + "examine": "A scroll for an abyssal titan familiar.", + "durability": null, + "name": "Essence shipment scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12827" + }, + { + "requirements": "{23,95}", + "ge_buy_limit": "5000", + "grand_exchange_price": "389", + "examine": "A scroll for an iron titan familiar.", + "durability": null, + "name": "Iron within scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12828" + }, + { + "requirements": "{23,46}", + "ge_buy_limit": "5000", + "grand_exchange_price": "146", + "examine": "A scroll for a pyrelord familiar.", + "durability": null, + "name": "Immense heat scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12829" + }, + { + "requirements": "{23,70}", + "ge_buy_limit": "5000", + "grand_exchange_price": "149", + "examine": "A scroll for a ravenous locust familiar.", + "durability": null, + "name": "Famine scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12830" + }, + { + "requirements": "{23,77}", + "ge_buy_limit": "5000", + "grand_exchange_price": "245", + "examine": "A scroll for a talon beast familiar.", + "durability": null, + "name": "Deadly claw scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12831" + }, + { + "requirements": "{23,85}", + "ge_buy_limit": "5000", + "grand_exchange_price": "192", + "examine": "A scroll for a swamp titan familiar.", + "durability": null, + "name": "Swamp plague scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12832" + }, + { + "requirements": "{23,89}", + "ge_buy_limit": "5000", + "grand_exchange_price": "294", + "examine": "A scroll for a geyser titan familiar.", + "durability": null, + "name": "Boil scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12833" + }, + { + "requirements": "{23,29}", + "ge_buy_limit": "5000", + "grand_exchange_price": "103", + "examine": "A scroll for a giant chinchompa familiar.", + "durability": null, + "name": "Explode scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12834" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "250", + "examine": "A scroll for a spirit graahk familiar.", + "durability": null, + "name": "Goad scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12835" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1428", + "examine": "A scroll for a spirit kyatt familiar.", + "durability": null, + "name": "Ambush scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12836" + }, + { + "requirements": "{23,83}", + "ge_buy_limit": "5000", + "grand_exchange_price": "300", + "examine": "A scroll for a lava titan familiar.", + "durability": null, + "name": "Ebon thunder scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12837" + }, + { + "requirements": "{23,17}", + "ge_buy_limit": "5000", + "grand_exchange_price": "1", + "examine": "A scroll for a spirit mosquito familiar.", + "durability": null, + "name": "Pester scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12838" + }, + { + "requirements": "{23,22}", + "ge_buy_limit": "5000", + "grand_exchange_price": "78", + "examine": "A scroll for a spirit Tz-Kih familiar.", + "durability": null, + "name": "Fireball assault scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12839" + }, + { + "requirements": "{23,57}", + "ge_buy_limit": "5000", + "grand_exchange_price": "196", + "examine": "A scroll for a spirit larupia familiar.", + "durability": null, + "name": "Rending scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12840" + }, + { + "requirements": "{23,76}", + "ge_buy_limit": "5000", + "grand_exchange_price": "173", + "examine": "A scroll for a forge regent familiar.", + "durability": null, + "name": "Inferno scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12841" + }, + { + "turn90cw_anim": "8963", + "stand_anim": "8964", + "walk_anim": "8961", + "durability": null, + "name": "Gnomecopter", + "run_anim": "8963", + "archery_ticket_price": "0", + "turn90ccw_anim": "8963", + "id": "12842", + "stand_turn_anim": "8963", + "turn180_anim": "8963", + "equipment_slot": "1" + }, + { + "destroy_message": "This is for use with the gnomecopters, north of Lumbridge. Sasquine Huburns will give you another one.", + "examine": "It tells gnomecopters where you wish to go.", + "durability": null, + "name": "Gnomecopter ticket", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12843" + }, + { + "shop_price": "100", + "turn90cw_anim": "8983", + "examine": "A kite with a dragon on it.", + "walk_anim": "8982", + "durability": null, + "turn90ccw_anim": "8984", + "attack_speed": "4", + "turn180_anim": "8985", + "render_anim": "593", + "equipment_slot": "3", + "stand_anim": "8981", + "name": "Toy kite", + "run_anim": "8986", + "archery_ticket_price": "0", + "id": "12844", + "stand_turn_anim": "8987" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12845", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12846", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12847", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12848", + "stand_turn_anim": "9000" + }, + { + "turn90cw_anim": "9002", + "examine": "A stone used to gather energy.", + "walk_anim": "8997", + "durability": null, + "destroy": "true", + "weight": "30", + "turn90ccw_anim": "9003", + "turn180_anim": "9001", + "render_anim": "370", + "equipment_slot": "3", + "destroy_message": "You can reclaim this item from the place you found it.", + "stand_anim": "8998", + "name": "Stone of power", + "tradeable": "false", + "run_anim": "9004", + "archery_ticket_price": "0", + "id": "12849", + "stand_turn_anim": "9000" + }, + { + "examine": "A generic elemental rune", + "durability": null, + "name": "Elemental rune", + "archery_ticket_price": "0", + "id": "12850" + }, + { + "examine": "A generic non-elemental rune", + "durability": null, + "name": "Catalytic rune", + "archery_ticket_price": "0", + "id": "12851" + }, + { + "examine": "A token awarded for taking part in the Fist of Guthix minigame.", + "durability": null, + "name": "Fist of guthix token", + "archery_ticket_price": "0", + "id": "12852" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "A box of bandages for healing.", + "durability": null, + "name": "Bandages", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12853" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "examine": "Teleports you to the centre of the arena.", + "durability": null, + "name": "Tele-orb", + "archery_ticket_price": "0", + "id": "12855" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Irit gloves", + "archery_ticket_price": "0", + "id": "12856", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "100", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Avantoe gloves", + "archery_ticket_price": "0", + "id": "12857", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Kwuarm gloves", + "archery_ticket_price": "0", + "id": "12858", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Cadantine gloves", + "archery_ticket_price": "0", + "id": "12859", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Swordfish gloves", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "12860", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves", + "durability": null, + "name": "Shark gloves", + "weight": "1", + "archery_ticket_price": "0", + "id": "12861", + "equipment_slot": "9" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "200", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Dragon slayer gloves", + "archery_ticket_price": "0", + "id": "12862", + "equipment_slot": "9" + }, + { + "destroy_message": "You can buy a new pair from the druids at the Fist of Guthix activity.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Air runecrafting gloves", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12863", + "equipment_slot": "9" + }, + { + "destroy_message": "You can buy a new pair from the druids at the Fist of Guthix activity.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Water runecrafting gloves", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12864", + "equipment_slot": "9" + }, + { + "destroy_message": "You can buy a new pair from the druids at the Fist of Guthix minigame.", + "shop_price": "75", + "examine": "A pair of mystical gloves.", + "durability": null, + "name": "Earth runecrafting gloves", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "12865", + "equipment_slot": "9" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12866", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12867", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12868", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12869", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "70529", + "name": "Battle hood 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12870", + "bonuses": "0,0,0,5,0,7,6,8,5,0,8,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,60}-{6,50}", + "shop_price": "250", + "ge_buy_limit": "10", + "examine": "Its arcane power is waning.", + "durability": null, + "absorb": "4,3,0", + "equipment_slot": "0", + "grand_exchange_price": "78900", + "name": "Battle hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12871", + "bonuses": "0,0,0,2,0,3,2,3,2,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "78900", + "durability": null, + "name": "Battle hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12872" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12873", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12874", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12875", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12876", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "examine": "A robe top infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "537714", + "name": "Battle robe top 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12877", + "bonuses": "0,0,0,26,0,17,15,20,26,0,30,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1500", + "ge_buy_limit": "10", + "examine": "Its arcane power is waning.", + "durability": null, + "weight": "4", + "absorb": "8,4,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "431400", + "name": "Battle robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12878", + "bonuses": "0,0,0,7,0,4,4,5,7,0,8,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "431400", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Battle robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12879" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12880", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12881", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12882", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12883", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "examine": "A robe bottom infused with arcane power, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "364878", + "name": "Battle robe bottom 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12884", + "bonuses": "0,0,0,20,0,14,11,16,20,0,23,0,0,0,0" + }, + { + "requirements": "{1,50}-{6,60}", + "shop_price": "1000", + "ge_buy_limit": "10", + "examine": "Its arcane power is waning.", + "durability": null, + "weight": "3", + "absorb": "5,2,0", + "equipment_slot": "7", + "grand_exchange_price": "538000", + "name": "Battle robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12885", + "bonuses": "0,0,0,6,0,4,3,4,6,0,7,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "538000", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Battle robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12886" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12887", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12888", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12889", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12890", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "6915", + "name": "Druidic mage hood 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12891", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "ge_buy_limit": "10", + "examine": "A worn-out hood, formerly worn by the followers of Guthix.", + "durability": null, + "weight": "7", + "equipment_slot": "0", + "grand_exchange_price": "8504", + "name": "Druidic mage hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12892", + "bonuses": "0,0,0,1,0,0,0,0,1,0,1,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "8504", + "durability": null, + "name": "Druidic mage hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12893" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12894", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12895", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12896", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12897", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "80273", + "name": "Druidic mage top 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12898", + "bonuses": "0,0,0,7,0,0,0,0,7,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "300", + "ge_buy_limit": "10", + "examine": "A magical robe top worn by followers of Guthix.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "76300", + "name": "Druidic mage top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12899", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "76300", + "durability": null, + "name": "Druidic mage top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12900" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12901", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12902", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12903", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12904", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "54532", + "name": "Druidic mage bottom 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12905", + "bonuses": "0,0,0,6,0,0,0,0,6,0,6,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "200", + "ge_buy_limit": "10", + "examine": "A magical robe bottom worn by a person who follows Guthix.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "60800", + "name": "Druidic mage bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12906", + "bonuses": "0,0,0,2,0,0,0,0,2,0,2,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "60800", + "durability": null, + "name": "Druidic mage bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12907" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12908", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12909", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12910", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12911", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "examine": "A spiked square shield.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2271", + "name": "Adamant spikeshield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12912", + "bonuses": "0,0,0,-6,-2,25,27,23,0,25,26,1,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "Not so spiky anymore.", + "durability": null, + "weight": "5", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "2718", + "name": "Adamant spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12913", + "bonuses": "0,0,0,-6,-2,11,12,10,0,11,4,1,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "Not so spiky anymore!", + "grand_exchange_price": "2718", + "durability": null, + "name": "Adamant spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12914" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12915", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12916", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12917", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12918", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "examine": "A large, spiked metal shield", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "19190", + "name": "Adamant berserker shield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12919", + "bonuses": "0,0,0,-8,-2,28,32,30,-1,30,31,2,0,0,0" + }, + { + "requirements": "{1,35}", + "shop_price": "100", + "ge_buy_limit": "10", + "examine": "Not so spiky anymore!", + "durability": null, + "weight": "7", + "absorb": "3,0,6", + "equipment_slot": "5", + "grand_exchange_price": "23700", + "name": "Adamant berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12920", + "bonuses": "0,0,0,-8,-2,12,14,13,-1,8,4,1,0,0,0" + }, + { + "ge_buy_limit": "10", + "examine": "Not so spiky anymore!", + "grand_exchange_price": "23700", + "durability": null, + "name": "Adamant berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12921" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12922", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0", + "point_price": "35" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12923", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12924", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12925", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "examine": "A spiked, medium square shield.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "57548", + "name": "Rune spikeshield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12926", + "bonuses": "0,0,0,-6,-2,39,41,37,0,39,36,3,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "200", + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "durability": null, + "weight": "4", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "50500", + "name": "Rune spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12927", + "bonuses": "0,0,0,-6,-2,14,15,13,0,14,8,2,0,0,0" + }, + { + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "grand_exchange_price": "50500", + "durability": null, + "name": "Rune spikeshield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12928" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12929", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0", + "point_price": "35" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12930", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12931", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12932", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "examine": "A Large, spiked metal shield.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "82000", + "name": "Rune berserker shield 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12933", + "bonuses": "0,0,0,-8,-2,45,49,47,-1,47,41,4,0,0,0" + }, + { + "requirements": "{1,45}", + "shop_price": "300", + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "durability": null, + "weight": "6", + "absorb": "3,0,7", + "equipment_slot": "5", + "grand_exchange_price": "135300", + "name": "Rune berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12934", + "bonuses": "0,0,0,-8,-2,16,18,17,-1,17,9,2,0,0,0" + }, + { + "ge_buy_limit": "10", + "examine": "Not so spiky anymore.", + "grand_exchange_price": "135300", + "durability": null, + "name": "Rune berserker shield 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12935" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12936", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12937", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12938", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12939", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "examine": "A coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "88084", + "name": "Green d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12940", + "bonuses": "0,0,0,-1,4,4,6,8,4,5,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,40}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "A worn out coif made of green dragonhide.", + "durability": null, + "weight": "0.9", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "92700", + "name": "Green d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12941", + "bonuses": "0,0,0,-1,1,1,2,2,1,2,1,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A worn out coif made of green dragonhide.", + "grand_exchange_price": "92700", + "durability": null, + "name": "Green d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12942" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12943", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12944", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "Fully charged: A coif made of blue dragonhide. Fully degraded: A worn out coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12945", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12946", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "examine": "A coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "186985", + "name": "Blue d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12947", + "bonuses": "0,0,0,-1,5,4,6,8,4,6,5,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,50}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "A worn out coif made of blue dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "131900", + "name": "Blue d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12948", + "bonuses": "0,0,0,-1,1,1,2,2,1,2,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A worn out coif made of blue dragonhide.", + "grand_exchange_price": "131900", + "durability": null, + "name": "Blue d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12949" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12950", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12951", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "Fully charged: A coif made of red dragonhide.Fully degraded: A worn out coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12952", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12953", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "examine": "A coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "230059", + "name": "Red d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12954", + "bonuses": "0,0,0,-1,6,4,6,9,4,6,6,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,60}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A worn out coif made of red dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "156600", + "name": "Red d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12955", + "bonuses": "0,0,0,-1,2,1,2,3,1,2,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A worn out coif made of red dragonhide.", + "grand_exchange_price": "156600", + "durability": null, + "name": "Red d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12956" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12957", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12958", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12959", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12960", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "examine": "Fully charged: A coif made of black dragonhide. Fully degraded: A worn out coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "379555", + "name": "Black d'hide coif 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12961", + "bonuses": "0,0,0,-1,7,4,7,9,4,7,7,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,40}-{4,70}", + "shop_price": "500", + "ge_buy_limit": "100", + "examine": "A coif made of black dragonhide.", + "durability": null, + "weight": "1", + "absorb": "0,3,1", + "equipment_slot": "0", + "grand_exchange_price": "229000", + "name": "Black d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12962", + "bonuses": "0,0,0,-1,3,1,3,3,1,2,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "A coif made of black dragonhide.", + "grand_exchange_price": "229000", + "durability": null, + "name": "Black d'hide coif 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12963" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12964", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12965", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12966", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12967", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "5661", + "name": "Combat hood 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12968", + "bonuses": "0,0,0,3,0,1,1,1,3,0,4,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,20}-{6,10}", + "shop_price": "50", + "ge_buy_limit": "10", + "examine": "A magical hood, especially created for combat spells.", + "durability": null, + "weight": "0.8", + "equipment_slot": "0", + "grand_exchange_price": "6511", + "name": "Combat hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12969", + "bonuses": "0,0,0,1,0,0,0,0,1,0,2,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "6511", + "durability": null, + "name": "Combat hood 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12970" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12971", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12972", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12973", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12974", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "37700", + "name": "Combat robe top 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12975", + "bonuses": "0,0,0,7,0,1,1,1,7,0,8,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "150", + "ge_buy_limit": "10", + "examine": "A magical robe top, especially made for combat spells.", + "durability": null, + "weight": "4", + "absorb": "2,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "61500", + "name": "Combat robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12976", + "bonuses": "0,0,0,3,0,0,0,0,3,0,4,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "61500", + "durability": null, + "name": "Combat robe top 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12977" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 100", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12978", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 80", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12979", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 60", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12980", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 40", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12981", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "50200", + "name": "Combat robe bottom 20", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12982", + "bonuses": "0,0,0,6,0,1,1,1,6,0,7,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,10}", + "shop_price": "100", + "ge_buy_limit": "10", + "examine": "A magical robe bottom, especially created for combat spells.", + "durability": null, + "weight": "3", + "absorb": "1,0,0", + "equipment_slot": "7", + "grand_exchange_price": "47800", + "name": "Combat robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12983", + "bonuses": "0,0,0,2,0,0,0,0,2,0,3,0,0,0,0" + }, + { + "ge_buy_limit": "10", + "grand_exchange_price": "47800", + "durability": null, + "name": "Combat robe bottom 0", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12984" + }, + { + "shop_price": "15", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "3694", + "durability": null, + "name": "Bronze gauntlets", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12985", + "bonuses": "0,0,0,-1,-1,2,3,3,-1,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "15", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "3275", + "durability": null, + "name": "Worn-out bronze gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12986", + "bonuses": "0,0,0,-1,-1,0,1,1,-1,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "3275", + "durability": null, + "name": "Worn-out bronze gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12987" + }, + { + "shop_price": "30", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "17339", + "durability": null, + "name": "Iron gauntlets", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12988", + "bonuses": "0,0,0,-1,-1,3,4,4,-1,3,3,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "30", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "16000", + "durability": null, + "name": "Worn-out iron gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12989", + "bonuses": "0,0,0,-1,-1,0,1,1,-1,0,1,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "16000", + "durability": null, + "name": "Worn-out iron gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12990" + }, + { + "requirements": "{1,5}", + "shop_price": "50", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "29844", + "durability": null, + "name": "Steel gauntlets", + "tradeable": "false", + "weight": "10", + "archery_ticket_price": "0", + "id": "12991", + "bonuses": "0,0,0,-1,-1,4,5,5,-1,4,4,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,5}", + "shop_price": "50", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "durability": null, + "weight": "10", + "equipment_slot": "9", + "grand_exchange_price": "27000", + "name": "Worn-out steel gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12992", + "bonuses": "0,0,0,-1,-1,1,1,1,-1,1,1,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "27000", + "durability": null, + "name": "Worn-out steel gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12993" + }, + { + "requirements": "{1,10}", + "shop_price": "75", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "50808", + "durability": null, + "name": "Black gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "12994", + "bonuses": "0,0,0,-1,-1,5,6,6,-1,5,5,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,10}", + "shop_price": "75", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "40100", + "name": "Worn-out black gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12995", + "bonuses": "0,0,0,-1,-1,1,2,2,-1,1,1,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "40100", + "durability": null, + "name": "Worn-out black gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12996" + }, + { + "requirements": "{1,20}", + "shop_price": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "60064", + "durability": null, + "name": "Mithril gauntlets", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "12997", + "bonuses": "0,0,0,-1,-1,6,7,7,-1,6,6,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,20}", + "shop_price": "100", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe!", + "grand_exchange_price": "54200", + "durability": null, + "name": "Worn-out mithril gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12998", + "bonuses": "0,0,0,-1,-1,2,2,2,-1,2,2,0,0,0,0", + "equipment_slot": "9" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "54200", + "durability": null, + "name": "Worn-out mithril gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "12999" + }, + { + "requirements": "{1,30}", + "shop_price": "150", + "examine": "I have to keep my hands safe! Uncharged: A bit worse for wear.", + "grand_exchange_price": "74526", + "durability": null, + "name": "Adamant gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "13000", + "bonuses": "0,0,0,-1,-1,8,9,9,-1,8,8,1,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,30}", + "shop_price": "150", + "ge_buy_limit": "100", + "examine": "I have to keep my hands safe! Uncharged: A bit worse for wear.", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "71500", + "name": "Worn-out adamant gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13001", + "bonuses": "0,0,0,-1,-1,2,3,3,-1,2,2,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "71500", + "durability": null, + "name": "Worn-out adamant gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13002" + }, + { + "requirements": "{1,40}", + "shop_price": "200", + "examine": "Fully charged: I have to keep my hands safe! Worn-Out: A bit worse for wear.", + "grand_exchange_price": "95700", + "durability": null, + "name": "Rune gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "13003", + "bonuses": "0,0,0,-1,-1,10,11,11,-1,10,10,2,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,40}", + "shop_price": "200", + "ge_buy_limit": "100", + "examine": "Fully charged: I have to keep my hands safe! Worn-Out: A bit worse for wear.", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "99900", + "name": "Worn-out rune gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13004", + "bonuses": "0,0,0,-1,-1,3,4,4,-1,3,3,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "99900", + "durability": null, + "name": "Worn-out rune gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13005" + }, + { + "requirements": "{1,60}", + "shop_price": "300", + "examine": "Uncharged: A bit worse for wear. Charged: I have to keep my hands safe!", + "grand_exchange_price": "214700", + "durability": null, + "name": "Dragon gauntlets", + "tradeable": "false", + "weight": "0.2", + "archery_ticket_price": "0", + "id": "13006", + "bonuses": "0,0,0,-1,-1,14,15,15,-1,14,14,3,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,60}", + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "Uncharged: A bit worse for wear. Charged: I have to keep my hands safe!", + "durability": null, + "weight": "0.2", + "equipment_slot": "9", + "grand_exchange_price": "166200", + "name": "Worn-out dragon gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13007", + "bonuses": "0,0,0,-1,-1,4,5,5,-1,4,4,1,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "166200", + "durability": null, + "name": "Worn-out dragon gauntlets", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13008" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13010" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13011" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13012" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13013" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13014" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13015" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13016" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13017" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13018" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13019" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13020" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13021" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13022" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13023" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13024" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13025" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13026" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13027" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13028" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13029" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13030" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13031" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13032" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13033" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13034" + }, + { + "destroy_message": "You can reclaim this item from the place you found it.", + "shop_price": "5", + "examine": "I need to solve this.", + "durability": null, + "name": "Puzzle box", + "archery_ticket_price": "0", + "id": "13035" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13036" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13037" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13038" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13039" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13040" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13041" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13042" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13043" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13044" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13045" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13046" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13047" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13048" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13049" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13050" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13051" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13052" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13053" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13054" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13055" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13056" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13057" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13058" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13059" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13060" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13061" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13062" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13063" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13064" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13065" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13066" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13067" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13068" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13069" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13070" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13071" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13072" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13074" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13075" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13076" + }, + { + "examine": "I hope there's treasure in it.", + "grand_exchange_price": "3726", + "durability": null, + "name": "Casket", + "tradeable": "true", + "weight": "5", + "archery_ticket_price": "0", + "id": "13077" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13078" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13079" + }, + { + "shop_price": "5000", + "examine": "A set of instructions to be followed.", + "durability": null, + "name": "Clue scroll", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13080" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "turn90cw_anim": "821", + "examine": "A black crossbow.", + "walk_anim": "4226", + "durability": null, + "weight": "5", + "turn90ccw_anim": "822", + "attack_speed": "6", + "weapon_interface": "17", + "turn180_anim": "4227", + "render_anim": "175", + "equipment_slot": "3", + "grand_exchange_price": "261", + "stand_anim": "4591", + "attack_audios": "2700,0,0,0", + "tradeable": "true", + "name": "Black crossbow", + "run_anim": "4228", + "archery_ticket_price": "0", + "id": "13081", + "stand_turn_anim": "823", + "bonuses": "0,0,0,0,60,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "grand_exchange_price": "261", + "durability": null, + "name": "Black crossbow", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13082" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "55", + "durability": null, + "name": "Black bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13083", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "141", + "durability": null, + "name": "Black bolts(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13084", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "233", + "durability": null, + "name": "Black bolts(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13085", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{4,33}", + "ge_buy_limit": "100", + "examine": "Black crossbow bolts.", + "grand_exchange_price": "1690", + "durability": null, + "name": "Black bolts(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13086", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75", + "equipment_slot": "13" + }, + { + "requirements": "{0,8}", + "ge_buy_limit": "2", + "examine": "A sapphire-topped cane.", + "durability": null, + "weight": "0.5", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "77000", + "name": "Black cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13095", + "bonuses": "0,-2,16,0,0,0,0,0,0,0,0,13,2,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "77000", + "durability": null, + "name": "Black cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13096" + }, + { + "requirements": "{0,28}", + "ge_buy_limit": "2", + "examine": "A ruby-topped cane.", + "durability": null, + "weight": "0.5", + "weapon_interface": "10", + "equipment_slot": "3", + "grand_exchange_price": "19100", + "name": "Adamant cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13097", + "bonuses": "0,-2,25,0,0,0,0,0,0,0,0,23,3,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "19100", + "durability": null, + "name": "Adamant cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13098" + }, + { + "requirements": "{0,38}", + "ge_buy_limit": "2", + "examine": "A diamond-topped cane.", + "durability": null, + "weight": "0.5", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "14500", + "name": "Rune cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13099", + "bonuses": "0,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "14500", + "durability": null, + "name": "Rune cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13100" + }, + { + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Comes with a free rabbit!", + "grand_exchange_price": "160400", + "durability": null, + "name": "Top hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13101", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "160400", + "durability": null, + "name": "Top hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13102" + }, + { + "ge_buy_limit": "2", + "examine": "Official explorer headgear!", + "grand_exchange_price": "85400", + "durability": null, + "name": "Pith helmet", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "13103", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "85400", + "durability": null, + "name": "Pith helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13104" + }, + { + "remove_head": "true", + "requirements": "{1,5}", + "ge_buy_limit": "2", + "examine": "Spikier than normal.", + "durability": null, + "weight": "10", + "equipment_slot": "0", + "grand_exchange_price": "38300", + "name": "Spiked helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13105", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "38300", + "durability": null, + "name": "Spiked helmet", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13106" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "Shear elegance.", + "grand_exchange_price": "296700", + "durability": null, + "name": "Sheep mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13107", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "296700", + "durability": null, + "name": "Sheep mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13108" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "I can get the look right, but can I do the waddle too?", + "grand_exchange_price": "633600", + "durability": null, + "name": "Penguin mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13109", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "633600", + "durability": null, + "name": "Penguin mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13110" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "The bats have left the belltower.", + "grand_exchange_price": "399000", + "durability": null, + "name": "Bat mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13111", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "399000", + "durability": null, + "name": "Bat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13112" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "It's the year of the cat!", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Cat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13113", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1200000", + "durability": null, + "name": "Cat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13114" + }, + { + "remove_head": "true", + "lendable": "true", + "ge_buy_limit": "2", + "examine": "I'm hungry like the wolf.", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Wolf mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13115", + "equipment_slot": "0" + }, + { + "ge_buy_limit": "2", + "grand_exchange_price": "1500000", + "durability": null, + "name": "Wolf mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13116" + }, + { + "turn90cw_anim": "9053", + "examine": "A fully charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "defence_anim": "9048", + "equipment_slot": "3", + "attack_anims": "9097,9097,9097,9097", + "stand_anim": "9049", + "name": "Ivandis flail (30)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13117", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (29)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13118", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "turn90ccw_anim": "9054", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail(28)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13119", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (27)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13120", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (26)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13121", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (25)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13122", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (24)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13123", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (23)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13124", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (22)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13125", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (21)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13126", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (20)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13127", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (19)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13128", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (18)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13129", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (17)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13130", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (16)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13131", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (15)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13132", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (14)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13133", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (13)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13134", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (12)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13135", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (11)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13136", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (10)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13137", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (9)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13138", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (8)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13139", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (7)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13140", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (6)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13141", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (5)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13142", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (4)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13143", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (3)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13144", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - it's nearly out of charges.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (2)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13145", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "turn90cw_anim": "9053", + "examine": "A partially charged flail - one last charge left.", + "walk_anim": "9051", + "has_special": "true", + "durability": null, + "weight": "5", + "turn90ccw_anim": "9054", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "23", + "turn180_anim": "9052", + "render_anim": "712", + "equipment_slot": "3", + "stand_anim": "9049", + "name": "Ivandis flail (1)", + "run_anim": "9050", + "archery_ticket_price": "0", + "id": "13146", + "stand_turn_anim": "823", + "bonuses": "0,16,11,6,0,2,3,1,6,0,0,26,5,0,0" + }, + { + "examine": "Flail of Ivandis dust.", + "durability": null, + "name": "Flail dust", + "archery_ticket_price": "0", + "id": "13147" + }, + { + "destroy_message": "You found this page in the top floor of Paterdomus temple on an old table.", + "examine": "A page ripped from a book; it looks like a map of some kind.", + "durability": null, + "name": "Book page", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13149" + }, + { + "destroy_message": "You got this book from a bunk bed in Sanguinesti Myreque base.", + "examine": "A big book of combat techniques.", + "durability": null, + "name": "Combat book", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13151" + }, + { + "examine": "Used to make a metal chain.", + "durability": null, + "name": "Chain link mould", + "weight": "1", + "archery_ticket_price": "0", + "id": "13153" + }, + { + "examine": "A chain made from mithril and silver.", + "durability": null, + "name": "Silvthril chain", + "weight": "3", + "archery_ticket_price": "0", + "id": "13154" + }, + { + "examine": "A blessed sickle with an emerald recessed into it.", + "durability": null, + "name": "Silver sickle emerald(b)", + "weight": "1", + "archery_ticket_price": "0", + "id": "13155", + "equipment_slot": "3" + }, + { + "examine": "A blessed and enchanted silver sickle with an emerald recessed into it.", + "durability": null, + "name": "Enchanted sickle emerald(b)", + "weight": "1", + "archery_ticket_price": "0", + "id": "13156", + "equipment_slot": "3" + }, + { + "examine": "A Vyrewatch corpse. Just a husk, really.", + "durability": null, + "name": "Vyre corpse", + "weight": "5", + "archery_ticket_price": "0", + "id": "13157" + }, + { + "examine": "An ornate key: precise workmanship and an ethereal glow. (Legacy of Seergaze)", + "durability": null, + "name": "Columbarium key", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13158" + }, + { + "destroy_message": "You got this key by cremating a Vyrewatch in the Paterdomus Columbarium.", + "examine": "An ornate key: precise workmanship and an ethereal glow. (Legacy of Seergaze)", + "durability": null, + "name": "Ornate tomb key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13159" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A Tome of Experience (2nd Edition) that awards 2500 XP per chapter.", + "durability": null, + "name": "Tome of xp 2nd ed (3)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13160" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A Tome of Experience (2nd Edition) that awards 2500 XP per chapter.", + "durability": null, + "name": "Tome of xp 2nd ed (2)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13161" + }, + { + "destroy_message": "You can get another Tome of Experience from Veliaf in Burgh de Rott.", + "examine": "A Tome of Experience (2nd Edition) that awards 2500 XP per chapter.", + "durability": null, + "name": "Tome of xp 2nd ed (1)", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13162" + }, + { + "examine": "A sapphire-topped cane.", + "grand_exchange_price": "115390", + "durability": null, + "name": "Black cane", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "attack_speed": "5", + "weapon_interface": "10", + "id": "13163", + "bonuses": "0,-2,16,0,0,0,0,0,0,0,0,13,2,0,0", + "equipment_slot": "3" + }, + { + "examine": "A ruby-topped cane.", + "grand_exchange_price": "18514", + "durability": null, + "name": "Adamant cane", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "weapon_interface": "10", + "id": "13164", + "bonuses": "0,-2,25,0,0,0,0,0,0,0,0,23,3,0,0", + "equipment_slot": "3" + }, + { + "examine": "A diamond-topped cane.", + "durability": null, + "weight": "0.5", + "attack_speed": "5", + "weapon_interface": "10", + "equipment_slot": "3", + "lendable": "true", + "grand_exchange_price": "15023", + "name": "Rune cane", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13165", + "bonuses": "0,-2,39,0,0,0,0,0,0,0,0,36,4,0,0" + }, + { + "lendable": "true", + "examine": "Comes with a free rabbit!", + "grand_exchange_price": "425919", + "durability": null, + "name": "Top hat", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13166", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Official explorer headgear!", + "grand_exchange_price": "99682", + "durability": null, + "name": "Pith helmet", + "tradeable": "true", + "weight": "0.5", + "archery_ticket_price": "0", + "id": "13167", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "Spikier than normal.", + "grand_exchange_price": "39643", + "durability": null, + "name": "Spiked helmet", + "tradeable": "true", + "weight": "10", + "archery_ticket_price": "0", + "id": "13168", + "bonuses": "0,0,0,-6,-2,9,10,7,-1,9,3,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "Shear elegance.", + "grand_exchange_price": "313558", + "durability": null, + "name": "Sheep mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13169", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "I can get the look right, but can I do the waddle too?", + "grand_exchange_price": "609515", + "durability": null, + "name": "Penguin mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13170", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "The bats have left the belltower.", + "grand_exchange_price": "371616", + "durability": null, + "name": "Bat mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13171", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "It's the year of the cat!", + "grand_exchange_price": "1066648", + "durability": null, + "name": "Cat mask", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13172", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "lendable": "true", + "examine": "I'm hungry like the wolf.", + "grand_exchange_price": "1303443", + "durability": null, + "name": "Wolf mask", + "tradeable": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13173", + "equipment_slot": "0" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Blue navy slacks", + "archery_ticket_price": "0", + "id": "13174", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Green navy slacks", + "archery_ticket_price": "0", + "id": "13175", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Red navy slacks", + "archery_ticket_price": "0", + "id": "13176", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Brown navy slacks", + "archery_ticket_price": "0", + "id": "13177", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Black navy slacks", + "archery_ticket_price": "0", + "id": "13178", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Purple navy slacks", + "archery_ticket_price": "0", + "id": "13179", + "equipment_slot": "7" + }, + { + "shop_price": "100", + "examine": "Not for slackers", + "durability": null, + "name": "Grey navy slacks", + "archery_ticket_price": "0", + "id": "13180", + "equipment_slot": "7" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Blue naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13181", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Green naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13182", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Red naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13183", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Brown naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13184", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Black naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13185", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Purple naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13186", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "100", + "examine": "...You can sail the seven seas...", + "durability": null, + "name": "Grey naval shirt", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13187", + "equipment_slot": "4" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Blue tricorn hat", + "archery_ticket_price": "0", + "id": "13188", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Green tricorn hat", + "archery_ticket_price": "0", + "id": "13189", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Red tricorn hat", + "archery_ticket_price": "0", + "id": "13190", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Brown tricorn hat", + "archery_ticket_price": "0", + "id": "13191", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Black tricorn hat", + "archery_ticket_price": "0", + "id": "13192", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Purple tricorn hat", + "archery_ticket_price": "0", + "id": "13193", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "50", + "examine": "I could never look square in this.", + "durability": null, + "name": "Grey tricorn hat", + "archery_ticket_price": "0", + "id": "13194", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this lamp, it will be destroyed. You can obtain another from Dunstan.", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Mysterious lamp", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13227" + }, + { + "destroy_message": "You can get another net from Professor Arblenap on Ice Mountain.", + "examine": "Professor Arblenap gave you this net to catch the baby icefiends on Ice Mountain.", + "durability": null, + "name": "Icefiend net", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13230", + "equipment_slot": "3" + }, + { + "examine": "You should give this to Professor Arblenap.", + "durability": null, + "name": "Baby icefiend", + "tradeable": "false", + "destroy": "true", + "weight": "1", + "archery_ticket_price": "0", + "id": "13231", + "equipment_slot": "3" + }, + { + "destroy_message": "It will reappear near the bottom of Ice Mountain.", + "examine": "The remains of the Oracle's tent on Ice Mountain.", + "durability": null, + "name": "Tent", + "tradeable": "false", + "destroy": "true", + "weight": "30", + "archery_ticket_price": "0", + "id": "13232" + }, + { + "destroy_message": "You can get it back by pickpocketing Drorkar again.", + "examine": "You took this key from Drorkar's pocket in the power station. (Perils of Ice Mountain)", + "durability": null, + "name": "Dwarven key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "id": "13234" + }, + { + "examine": "A plank of oak that has been treated to resist fire.", + "durability": null, + "name": "Treated oak plank", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "13238" + }, + { + "shop_price": "14", + "examine": "Good for detailed crafting.", + "grand_exchange_price": "33", + "durability": null, + "name": "Chisel", + "tradeable": "true", + "weight": "0.4", + "archery_ticket_price": "0", + "id": "13239" + }, + { + "durability": null, + "name": ".", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13240", + "equipment_slot": "5" + }, + { + "examine": "A plank of oak that has been treated to resist fire.", + "durability": null, + "name": "Treated plank", + "weight": "0.8", + "archery_ticket_price": "0", + "id": "13241" + }, + { + "durability": null, + "name": ".", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13242" + }, + { + "examine": "An old stone slab with writing on it.", + "durability": null, + "name": "Stone tablet", + "archery_ticket_price": "0", + "id": "13243" + }, + { + "examine": "A book for those who want to visit the TzHaar city.", + "durability": null, + "name": "Tzhaar tourist guide", + "archery_ticket_price": "0", + "id": "13244" + }, + { + "destroy_message": "You can mine more stone slabs in the TzHaar mine.", + "examine": "A flawed block of obsidian from the Karamja volcano.", + "durability": null, + "name": "Stone slab", + "tradeable": "false", + "destroy": "true", + "weight": "32", + "archery_ticket_price": "0", + "id": "13245" + }, + { + "destroy_message": "You can get more pillars by crafting stone slabs from the TzHaar mine.", + "examine": "A support pillar.", + "durability": null, + "name": "Pillar", + "tradeable": "false", + "destroy": "true", + "weight": "25", + "archery_ticket_price": "0", + "id": "13246" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13247", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13248", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13249", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Splat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13250", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can obtain another from the mummy guardian in the undead slayer's tomb.", + "examine": "A key obtained in Catolax's tomb.", + "durability": null, + "name": "Ranged path key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13259", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can obtain another from the mummy guardian in the undead slayer's tomb.", + "examine": "A key obtained in Catolax's tomb.", + "durability": null, + "name": "Magic path key", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13260", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,10}", + "shop_price": "650", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Slayer helmet", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13263", + "bonuses": "0,0,0,0,0,30,32,27,0,30,7,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "The remains of a banshee's scream.", + "durability": null, + "name": "Banshee voice", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13276", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "400", + "examine": "More of that crazy Slayer headgear.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Masked earmuffs", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13277", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "For use against turoth and kurasks.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "89", + "name": "Broad arrow heads", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13278", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "For use against turoth and kurasks.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "17", + "name": "Unfinished broad bolts", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13279", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "For use against turoth and kurasks.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "grand_exchange_price": "34", + "name": "Broad-tipped bolts", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13280", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,100" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(8)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13281", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(7)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13282", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(6)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13283", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(5)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13284", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(4)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13285", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(3)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13286", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(2)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13287", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "150", + "examine": "An enchanted ring.", + "durability": null, + "name": "Ring of slaying(1)", + "tradeable": "false", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13288", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "turn90cw_anim": "1207", + "examine": "A razor-sharp sword.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,381,390,381", + "grand_exchange_price": "43082", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13290", + "stand_turn_anim": "823", + "bonuses": "67,62,0,0,0,0,0,0,0,0,0,50,0,0,0", + "requirements": "{0,50}-{18,55}", + "shop_price": "68000", + "durability": null, + "destroy": "false", + "weapon_interface": "5", + "attack_audios": "2517,2517,2500,2517", + "name": "Leaf-bladed sword" + }, + { + "shop_price": "68000", + "examine": "A razor-sharp sword.", + "grand_exchange_price": "43082", + "durability": null, + "name": "Leaf-bladed sword", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13291" + }, + { + "durability": null, + "name": "Letter", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13292", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Plans", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13293", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these plans, they will be lost and you will need to see Captain Donnie for a replacement.", + "examine": "A charcoal rubbing taken from 50% Luke.", + "durability": null, + "name": "Charcoal rubbing", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13294", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Frank's mark, you will need to see him to get another.", + "examine": "Signature from Frank.", + "durability": null, + "name": "Frank's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13295", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these lockpicks, you will need to look under the mattress to get another set.", + "examine": "A device for opening locked doors.", + "durability": null, + "name": "Crude lockpick", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13296", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "The top of a Custom Officer's uniform.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "If you drop this shirt you will need to kill another Customs officer for a replacement.", + "remove_sleeves": "true", + "name": "Customs shirt", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13297", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these trousers you will need to kill another Customs officer for a replacement.", + "examine": "The trousers of a Custom Officer's uniform.", + "durability": null, + "name": "Customs trousers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13298", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "If you drop this hat you will need to kill another Customs officer for a replacement.", + "examine": "The hat of a Custom Officer's uniform.", + "durability": null, + "name": "Customs hat", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13299", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13300", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13301", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Brooch", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13302", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Izzy's No-Beard's mark, you will need to see him to get another.", + "examine": "Signature from Izzy No-Beard.", + "durability": null, + "name": "Izzy's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13303", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Key", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13304", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this crowbar, you will need to get another from the chest on the sunken ship.", + "examine": "This could be useful.", + "durability": null, + "name": "Crowbar", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13305", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the idol, you will need to go diving to get another replacement.", + "examine": "An idol. It has many heads.", + "durability": null, + "name": "Idol of many heads", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13307", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Bill Teach's mark, you will need to see him to get another.", + "examine": "Signature from Bill Teach.", + "durability": null, + "name": "Bill teach's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13308", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this paper, you will need to call to the guards for a replacement. ", + "examine": "This is generally used for writing on.", + "durability": null, + "name": "Paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13309", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this note, you'll need to call the guards for replacement paper.", + "examine": "A written confession.", + "durability": null, + "name": "Confession", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13310", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Note", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13311", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this ink, you will need to call to the guards for a replacement.", + "examine": "An empty ink bottle./This is full of ink.", + "durability": null, + "name": "Ink bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13312", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this paper you will need to call to the guards to replace it and the ink.", + "examine": "It's got ink all over it.", + "durability": null, + "name": "Inky paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13313", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this ink, you will need to call to the guards for a replacement.", + "examine": "An empty ink bottle./This is full of ink.", + "durability": null, + "name": "Ink bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13314", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this bottle, you will need to call to the guards for a replacement.", + "examine": "It's smashed. I should mind my fingers.", + "durability": null, + "name": "Smashed bottle", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13315", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "The top part of a prisoner's uniform.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "If you drop this top, then you will need to speak to the guards to get it replaced.", + "remove_sleeves": "true", + "name": "Prison uniform top", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13316", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop these trousers, then you will need to speak to the guards to get it replaced.", + "examine": "The bottom part of a prisoner's uniform.", + "durability": null, + "name": "Prison uniform trousers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13317", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "examine": "It's covered in fish slop.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "If you drop this top, you will need to speak to the guards to get it replaced, then find a way to get stew on it again.", + "remove_sleeves": "true", + "name": "Fishy prison uniform top", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13318", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this cup it will be destroyed and you will have to pick up another.", + "examine": "A standard prison-issue tin cup.", + "durability": null, + "name": "Tin cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13319", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "If you drop this cup it will be destroyed and you will have to pick up another.", + "examine": "A standard prison-issue tin cup.", + "durability": null, + "name": "Tin cup", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13320", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Destroy", + "examine": "A pipe that belongs in a cannon stand.", + "durability": null, + "name": "Pipe", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13321", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, it will be destroyed and you will have to get another.", + "durability": null, + "name": "Accordion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13322", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, it will be destroyed and you will have to get another.", + "durability": null, + "name": "Accordion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13323", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, it will be destroyed and you will have to get another.", + "durability": null, + "name": "Accordion", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13324", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this accordion, pipe and inky paper, it will all be destroyed and you will need to get all the items back again.", + "examine": "A very crude vacuum pump.", + "durability": null, + "name": "Vacuum pump", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13325", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this, you will lose all the items you put in it, as well as the seagull.", + "examine": "It sounds like a law firm.", + "durability": null, + "name": "Vacuum pump and gull", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13326", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "If you drop this quill, you will need to talk to the guard for a replacement.", + "examine": "From a bird - can be used for writing.", + "durability": null, + "name": "Quill", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13327", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "From a bird - can be used for writing. It has some ink on the tip.", + "durability": null, + "name": "Inky quill", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13328", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13329", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this file, it and all the marks inside it will be destroyed.", + "examine": "A folder containing all the marks I have gathered.", + "durability": null, + "name": "File", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13330", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this dead parrot, there is a chance that bad, bad things will happen to you - unless you see 50 Ships Mufassah for a replacement.", + "examine": "A very dead rotten parrot.", + "durability": null, + "name": "Ex-parrot", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13331", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this cage, you will need to see Bill Teach for a replacement.", + "examine": "It feels very cold to the touch.", + "durability": null, + "name": "Magical cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13332", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this dead parrot in a cage (and who wouldn't) then you will need to see ", + "examine": "A very dead rotten parrot in a magical cage.", + "durability": null, + "name": "Ex-parrot in a magic cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13333", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the cage, the ex-ex-parrot will escape.", + "examine": "A very alive rotten parrot in a magic cage.", + "durability": null, + "name": "Ex-ex-parrot in a magic cage", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13334", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Ex-ex-parrot", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13335", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Ex-ex-parrot", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13336", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "50", + "examine": "A pirate impling in a jar.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "grand_exchange_price": "7346", + "name": "Pirate impling jar", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13337", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this it will disappear. Are you sure you want to do this?", + "shop_price": "50", + "grand_exchange_price": "7346", + "durability": null, + "name": "Pirate impling jar", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13338" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A white bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13339", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A white bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13340", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A red bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13341", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A red bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13342", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A blue bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13343", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A blue bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13344", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A brown bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13345", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A brown bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13346", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13347", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13348", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13349", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13350", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A orange bandana and a patch for the left eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13351", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A orange bandana and a patch for both eyes.", + "durability": null, + "name": "Bandana and eyepatches", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13352", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "100", + "examine": "It's dark, and I'm wearing two patches. Hit it!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Double eyepatches", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13353", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "Two patches and a hat.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Pirate hat and eyepatches", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13354", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "100", + "examine": "A patch for the left eye.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "23485", + "name": "Left eyepatch", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13355", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A patch for the left eye.", + "grand_exchange_price": "23485", + "durability": null, + "name": "Left eyepatch", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13356" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A hat and a patch.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Pirate hat and eyepatch", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13357", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A seaworthy grey shirt.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13358", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13359" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A seaworthy purple shirt.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13360", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13361" + }, + { + "shop_price": "300", + "ge_buy_limit": "100", + "examine": "A seaworthy orange shirt.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13362", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "300", + "durability": null, + "name": "Stripy pirate shirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13363" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "A seaworthy pair of grey trousers.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "7", + "grand_exchange_price": "1", + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13364", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "350", + "grand_exchange_price": "1", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13365" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "A seaworthy pair of purple trousers.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "7", + "grand_exchange_price": "1", + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13366", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "350", + "grand_exchange_price": "1", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13367" + }, + { + "shop_price": "350", + "ge_buy_limit": "100", + "examine": "A seaworthy pair of orange trousers.", + "durability": null, + "weight": "1", + "absorb": "0,0,0", + "equipment_slot": "7", + "grand_exchange_price": "1", + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13368", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "350", + "grand_exchange_price": "1", + "durability": null, + "name": "Pirate leggings", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13369" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13370", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "durability": null, + "name": "Bandana", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13371" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13372", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "durability": null, + "name": "Bandana", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13373" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "An orange bandana.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Bandana", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13374", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "durability": null, + "name": "Bandana", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13375" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A purple bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13376", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A orange bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13377", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "100", + "examine": "A grey bandana and a patch for the right eye.", + "durability": null, + "name": "Bandana and eyepatch", + "tradeable": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "13378", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Destroy", + "examine": "Some rock fragments.", + "durability": null, + "name": "Rock fragments", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13379", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the letter, it will be destroyed and you'll need to see Bill Teach for another.", + "examine": "Note from Teach to Brass Hand Harry.", + "durability": null, + "name": "Introduction letter", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13380", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13381", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13382", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13383", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13384", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The hand is already broken and dropping it will destroy it completely. You will need to see Brass Hand Harry for a replacement.", + "examine": "One of many broken hands.", + "durability": null, + "name": "Broken hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13385", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Wall beast fingers in a white fern sauce.", + "durability": null, + "name": "Fingers", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13386", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "This hand part is small and delicate, and dropping it here will lose it. If you lose it, you will need to see Brass Hand Harry for a replacement.", + "examine": "A brass thumb.", + "durability": null, + "name": "Thumb", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13387", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Hand", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13388", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "This hand part is small and delicate, and dropping it here will lose it. If you lose it, you will need to see Brass Hand Harry for a replacement.", + "examine": "A brass wrist.", + "durability": null, + "name": "Wrist", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13389", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "This hand part is small and delicate, and dropping it here will lose it. If you lose it, you will need to see Brass Hand Harry for a replacement.", + "examine": "A brass brace.", + "durability": null, + "name": "Brace", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13390", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this hand, you will destroy it and you will have to remake it from parts that Brass Hand Harry has.", + "examine": "A completed brass hand.", + "durability": null, + "name": "Brass hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13391", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this ink pad, you will lose it and will need to see Brass Hand Harry for a replacement.", + "examine": "It's soaked with ink.", + "durability": null, + "name": "Ink pad", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13392", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this hand, you will destroy it and you will have to remake it from parts that Brass Hand Harry has.", + "examine": "An inky brass hand.", + "durability": null, + "name": "Inky hand", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13393", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this paper, you will need to call to the guards for a replacement. ", + "examine": "This is generally used for writing on.", + "durability": null, + "name": "Paper", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13394", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Brass Hand Harry's mark, it will be destroyed and you need to see him to get another.", + "examine": "Handprint from Brass Hand Harry.", + "durability": null, + "name": "Brass hand harry's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13395", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Makes me itch.", + "durability": null, + "name": "Fake beard", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13396", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "examine": "It looks like someone has sneezed in it.", + "durability": null, + "name": "Fake moustache and nose", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13397", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "examine": "Why is the monocle nailed to it?", + "durability": null, + "name": "Fake monocle, moustache and nose", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13398", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "examine": "You can barely see where it connected to the mop handle.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "name": "Curly wig", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13399", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "examine": "It looks like it is part-dog, part-mould.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "If you drop this disguise you will need to see Captain Braindeath for a replacement.", + "name": "Straight wig", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "13400", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop this order for 'rum' you will need to speak to the Rusty Anchor barman to get another.", + "examine": "An order simply for 'rum'.", + "durability": null, + "name": "Order", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13401", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop Captain Braindeath's mark, you will need to speak to him to get another.", + "examine": "Signature of Captain Braindeath.", + "durability": null, + "name": "Braindeath's mark", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13402", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "300", + "examine": "A replica tinderbox made of solid gold.", + "durability": null, + "name": "Golden tinderbox", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13403", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A bow from a darker dimension.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "9", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equip_audio": "3738", + "render_anim": "303", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "86850", + "attack_audios": "3731,0,0,0", + "name": "Dark bow", + "archery_ticket_price": "0", + "id": "13405", + "bonuses": "0,0,0,0,95,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "59171", + "name": "Ancient staff", + "archery_ticket_price": "0", + "id": "13406", + "bonuses": "10,-1,40,15,0,2,3,1,15,0,5,50,0,-1,10" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helmet is worn by archers.", + "grand_exchange_price": "46334", + "durability": null, + "name": "Archer helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13407", + "absorb": "0,3,1", + "bonuses": "-5,-5,-5,-5,6,6,8,10,6,6,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helmet is worn by berserkers.", + "grand_exchange_price": "45978", + "durability": null, + "name": "Berserker helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13408", + "absorb": "1,0,3", + "bonuses": "0,0,0,-5,-5,31,29,33,0,30,7,3,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helm is worn by warriors.", + "grand_exchange_price": "45664", + "durability": null, + "name": "Warrior helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13409", + "absorb": "1,0,3", + "bonuses": "0,5,0,-5,-5,31,33,29,0,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This helm is worn by farseers.", + "grand_exchange_price": "45989", + "durability": null, + "name": "Farseer helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13410", + "absorb": "3,1,0", + "bonuses": "-5,-5,-5,6,-5,8,10,12,6,0,7,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Protective headwear made from crabs. Better than it sounds.", + "grand_exchange_price": "20378", + "durability": null, + "name": "Rock-shell helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13411", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,6,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A sturdy body armour made from rock crab pieces.", + "grand_exchange_price": "41788", + "durability": null, + "name": "Rock-shell plate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13412", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Some tough leggings made from rock crab parts.", + "grand_exchange_price": "37139", + "durability": null, + "name": "Rock-shell legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13413", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A helm fit for any Fremennik ranger.", + "grand_exchange_price": "37724", + "durability": null, + "name": "Spined helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13414", + "absorb": "0,3,1", + "bonuses": "0,-6,-6,-6,6,6,6,6,6,0,6,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A constant reminder that I'm above a Dagannoth in the food chain.", + "grand_exchange_price": "5773", + "durability": null, + "name": "Spined body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13415", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,30,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Stylish leg armour for rangers with a lingering smell of raw fish...", + "grand_exchange_price": "2696", + "durability": null, + "name": "Spined chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13416", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Make your foes cower by wearing a skull as a helmet!", + "grand_exchange_price": "39060", + "durability": null, + "name": "Skeletal helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13417", + "absorb": "3,1,0", + "bonuses": "0,0,0,2,-2,10,9,11,3,0,6,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The bones in this armour seems to vibrate with a magic quality...", + "grand_exchange_price": "26289", + "durability": null, + "name": "Skeletal top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13418", + "absorb": "6,3,0", + "bonuses": "0,0,0,8,-10,35,25,42,15,0,30,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A superior set of strengthened slacks for any self respecting seer.", + "grand_exchange_price": "24591", + "durability": null, + "name": "Skeletal bottoms", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13419", + "absorb": "4,2,0", + "bonuses": "0,0,0,6,-7,22,20,24,10,0,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Some finely crafted Fremennik boots, made from spined dagannoth hide.", + "grand_exchange_price": "158181", + "durability": null, + "name": "Spined boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13420", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,1,1,0,0,0,1,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Some Fremennik boots, made from the shards of a rock crab's shell.", + "grand_exchange_price": "1358", + "durability": null, + "name": "Rock-shell boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13421", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Some finely crafted Fremennik boots, made from the bones of a Wallasalki.", + "grand_exchange_price": "7788", + "durability": null, + "name": "Skeletal boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13422", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,0,1,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fremennik gloves stitched together from spined dagannoth hide.", + "grand_exchange_price": "3027", + "durability": null, + "name": "Spined gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13423", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,1,2,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Fremennik gloves stitched together from rock crab shell shards.", + "grand_exchange_price": "12839", + "durability": null, + "name": "Rock-shell gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13424", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fremennik gloves stitched together from wallasalki bones fragments.", + "grand_exchange_price": "25838", + "durability": null, + "name": "Skeletal gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13425", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,2,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A mysterious ring that can fill the wearer with magical power...", + "grand_exchange_price": "799703", + "durability": null, + "name": "Seers ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13426", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A fabled ring that improves the wearer's skill with a bow...", + "grand_exchange_price": "483521", + "durability": null, + "name": "Archers ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13427", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,4,0,0,0,0,4,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A legendary ring once worn by Fremennik warriors.", + "grand_exchange_price": "361302", + "durability": null, + "name": "Warrior ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13428", + "absorb": "0,0,0", + "bonuses": "0,4,0,0,0,0,4,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A ring reputed to bring out a berserk fury in its wearer.", + "grand_exchange_price": "963418", + "durability": null, + "name": "Berserker ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13429", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,4,0,0,0,4,0,0,0" + }, + { + "examine": "A two-handed dragon sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "124", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1024000", + "name": "Dragon 2h sword", + "archery_ticket_price": "0", + "id": "13430", + "bonuses": "-4,92,80,-4,0,0,0,0,0,-1,0,93,0,0,0" + }, + { + "shop_price": "20", + "examine": "Useful for catching crayfish.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "25", + "name": "Crayfish cage", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13431", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Swap this note at any bank for the equivalent item.", + "grand_exchange_price": "25", + "durability": null, + "name": "Crayfish cage", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13432" + }, + { + "shop_price": "5", + "examine": "Some cooked crayfish. Eat it to heal.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "32", + "name": "Crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13433", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "5", + "examine": "Swap this note at any bank for the equivalent item.", + "grand_exchange_price": "32", + "durability": null, + "name": "Crayfish", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13434" + }, + { + "shop_price": "5", + "examine": "I should try cooking this. Used in Cooking (1).", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "41", + "name": "Raw crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13435", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "5", + "examine": "Swap this note at any bank for the equivalent item.", + "grand_exchange_price": "41", + "durability": null, + "name": "Raw crayfish", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13436" + }, + { + "shop_price": "1", + "durability": null, + "name": "Burnt crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "destroy": "false", + "attack_speed": "4", + "id": "13437", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "Swap this note at any bank for the equivalent item.", + "durability": null, + "name": "Burnt crayfish", + "tradeable": "true", + "archery_ticket_price": "0", + "destroy": "false", + "attack_speed": "4", + "id": "13438" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13439", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "This is a bag of runes for Sir Vant.", + "durability": null, + "name": "Bag of runes", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13440", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A very powerful onyx amulet.", + "grand_exchange_price": "2285210", + "durability": null, + "name": "Amulet of fury", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13442", + "absorb": "0,0,0", + "bonuses": "10,10,10,10,10,15,15,15,15,15,15,8,0,5,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A cape woven of obsidian plates.", + "grand_exchange_price": "56575", + "durability": null, + "name": "Obsidian cape", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13443", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,9,9,9,9,9,9,0,0,0,0" + }, + { + "examine": "A weapon from the Abyss.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "11", + "absorb": "0,0,0", + "render_anim": "1578", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "114775", + "name": "Abyssal whip", + "archery_ticket_price": "0", + "id": "13444", + "bonuses": "0,82,0,0,0,0,0,0,0,0,0,82,0,0,0" + }, + { + "examine": "Simplicity is the best weapon.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "10", + "absorb": "0,0,0", + "render_anim": "27", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "29584", + "name": "Granite maul", + "archery_ticket_price": "0", + "id": "13445", + "bonuses": "0,0,81,0,0,0,0,0,0,0,0,79,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13446", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13447", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13448", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Protects your head and looks impressive too.", + "grand_exchange_price": "5756658", + "durability": null, + "name": "Dragon full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13449", + "absorb": "2,0,4", + "bonuses": "0,0,0,-6,-2,45,48,41,-1,46,12,0,0,0,0" + }, + { + "examine": "A beautiful, heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "7767458", + "name": "Armadyl godsword", + "archery_ticket_price": "0", + "id": "13450", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "A brutally heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1504919", + "name": "Bandos godsword", + "archery_ticket_price": "0", + "id": "13451", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "A gracious, heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "34966317", + "name": "Saradomin godsword", + "archery_ticket_price": "0", + "id": "13452", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "A terrifying, heavy sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "2132037", + "name": "Zamorak godsword", + "archery_ticket_price": "0", + "id": "13453", + "bonuses": "0,132,80,0,0,0,0,0,0,0,0,132,0,8,0" + }, + { + "examine": "An evil spear.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "1581", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "2070507", + "name": "Zamorakian spear", + "archery_ticket_price": "0", + "id": "13454", + "bonuses": "85,65,65,0,0,13,13,12,0,13,0,75,0,2,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A helmet of great craftmanship.", + "grand_exchange_price": "3732060", + "durability": null, + "name": "Armadyl helmet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13455", + "absorb": "0,5,2", + "bonuses": "-5,-5,-5,-5,10,6,6,10,10,8,12,0,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A chestplate of great craftsmanship", + "grand_exchange_price": "9628666", + "durability": null, + "name": "Armadyl chestplate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13456", + "absorb": "0,10,5", + "bonuses": "-7,-7,-7,-15,33,56,48,61,70,57,52,0,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A chainskirt of great craftsmanship.", + "grand_exchange_price": "9754868", + "durability": null, + "name": "Armadyl plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13457", + "absorb": "0,7,3", + "bonuses": "-6,-6,-6,-10,20,32,26,34,40,33,25,0,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A sturdy chestplate.", + "grand_exchange_price": "6460055", + "durability": null, + "name": "Bandos chestplate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13458", + "absorb": "4,0,9", + "bonuses": "0,0,0,-15,-10,98,93,105,-6,133,52,4,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A sturdy pair of tassets.", + "grand_exchange_price": "4228256", + "durability": null, + "name": "Bandos tassets", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13459", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,71,63,66,-4,93,25,2,0,1,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Some sturdy boots.", + "grand_exchange_price": "1259091", + "durability": null, + "name": "Bandos boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13460", + "absorb": "0,0,0", + "bonuses": "0,0,0,-5,-3,17,18,19,0,0,15,0,0,1,0" + }, + { + "examine": "The incredible blade of an Icyene.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "1579", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "850151", + "name": "Saradomin sword", + "archery_ticket_price": "0", + "id": "13461", + "bonuses": "0,82,60,0,0,0,0,0,0,0,0,82,0,2,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These will protect my feet.", + "grand_exchange_price": "17336", + "durability": null, + "name": "Dragon boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13462", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,16,17,18,0,0,15,4,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13463", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another by talking about jobs with citizens and tutors around Lumbridge.", + "examine": "This reminds me of my current job and who set me to the task.", + "durability": null, + "name": "Task list", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13464", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful dagger.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "16744", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger", + "archery_ticket_price": "0", + "id": "13465", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p)", + "archery_ticket_price": "0", + "id": "13466", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p+)", + "archery_ticket_price": "0", + "id": "13467", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dragon dagger(p++)", + "archery_ticket_price": "0", + "id": "13468", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "examine": "A powerful axe.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "2", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "7263", + "name": "Rune axe", + "archery_ticket_price": "0", + "id": "13469", + "bonuses": "-2,26,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "examine": "A very powerful axe.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "2", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "3794577", + "name": "Dragon axe", + "archery_ticket_price": "0", + "id": "13470", + "bonuses": "-2,38,32,0,0,0,1,0,0,0,0,42,0,0,0" + }, + { + "examine": "A vicious looking axe.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "23993", + "name": "Rune battleaxe", + "archery_ticket_price": "0", + "id": "13471", + "bonuses": "-2,48,43,0,0,0,0,0,0,-1,0,64,0,0,0" + }, + { + "requirements": "{0,60}", + "examine": "A vicious looking axe.", + "has_special": "true", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "2586", + "defence_anim": "397", + "attack_anims": "395,395,401,395", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "123019", + "attack_audios": "2498,2498,2497,2498", + "name": "Dragon battleaxe", + "archery_ticket_price": "0", + "id": "13472", + "bonuses": "-2,70,65,0,0,0,0,0,0,-1,0,85,0,0,0" + }, + { + "examine": "I don't think it's intended for joinery.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "render_anim": "1430", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "24357", + "name": "Rune warhammer", + "archery_ticket_price": "0", + "id": "13473", + "bonuses": "-4,-4,53,-4,0,0,0,0,0,0,0,48,0,0,0" + }, + { + "examine": "A razor-sharp longsword", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "18420", + "name": "Rune longsword", + "archery_ticket_price": "0", + "id": "13474", + "bonuses": "38,47,-2,0,0,0,3,2,0,0,0,49,0,0,0" + }, + { + "examine": "A very powerful sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "58355", + "name": "Dragon longsword", + "archery_ticket_price": "0", + "id": "13475", + "bonuses": "58,69,-2,0,0,0,3,2,0,0,0,71,0,0,0" + }, + { + "examine": "A vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1582", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "14690", + "name": "Rune scimitar", + "archery_ticket_price": "0", + "id": "13476", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0" + }, + { + "examine": "A vicious, curved sword.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1928", + "attack_anims": "390,390,381,390", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "60405", + "name": "Dragon scimitar", + "archery_ticket_price": "0", + "id": "13477", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0" + }, + { + "examine": "A dragon halberd.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "15", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "200189", + "name": "Dragon halberd", + "archery_ticket_price": "0", + "id": "13478", + "bonuses": "70,95,0,-4,0,-1,4,5,0,0,0,89,0,0,0" + }, + { + "requirements": "{0,60}", + "examine": "A spiky mace.", + "has_special": "true", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "attack_anims": "390,390,381,390", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "28817", + "name": "Dragon mace", + "archery_ticket_price": "0", + "id": "13479", + "bonuses": "40,-2,60,0,0,0,0,0,0,0,0,55,0,5,0" + }, + { + "examine": "Used for mining.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "18546", + "name": "Rune pickaxe", + "archery_ticket_price": "0", + "id": "13480", + "bonuses": "26,-2,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "2280904", + "durability": null, + "name": "Dragon chainbody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13481", + "absorb": "4,0,9", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides excellent protection.", + "grand_exchange_price": "38062", + "durability": null, + "name": "Rune platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13482", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "4373", + "durability": null, + "name": "Green d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13483", + "absorb": "0,6,3", + "bonuses": "0,0,0,-20,15,40,32,45,20,40,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "5266", + "durability": null, + "name": "Blue d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13484", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,20,45,37,50,30,45,45,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "6276", + "durability": null, + "name": "Red d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13485", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,25,50,42,55,40,50,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "7619", + "durability": null, + "name": "Black d'hide body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13486", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,30,55,47,60,50,55,55,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These look pretty heavy.", + "grand_exchange_price": "37355", + "durability": null, + "name": "Rune platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13487", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Looks pretty heavy.", + "grand_exchange_price": "160755", + "durability": null, + "name": "Dragon platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13488", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Designer leg protection.", + "grand_exchange_price": "37248", + "durability": null, + "name": "Rune plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13489", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "This looks pretty heavy.", + "grand_exchange_price": "161006", + "durability": null, + "name": "Dragon plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13490", + "absorb": "3,0,6", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "100% real dragonhide.", + "grand_exchange_price": "2037", + "durability": null, + "name": "Green d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13491", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "2352", + "durability": null, + "name": "Blue d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13492", + "absorb": "0,5,2", + "bonuses": "0,0,0,-10,11,25,19,27,14,25,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "2761", + "durability": null, + "name": "Red d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13493", + "absorb": "0,6,3", + "bonuses": "0,0,0,-10,14,28,22,30,20,28,25,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "3377", + "durability": null, + "name": "Black d'hide chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13494", + "absorb": "0,7,3", + "bonuses": "0,0,0,-10,17,31,25,33,28,31,30,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Makes the wearer pretty intimidating.", + "grand_exchange_price": "59676", + "durability": null, + "name": "Dragon med helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13495", + "absorb": "2,0,4", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A full face helmet.", + "grand_exchange_price": "20388", + "durability": null, + "name": "Rune full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13496", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "1208", + "durability": null, + "name": "Green d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13497", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,8,3,2,4,2,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Made from 100% real dragonhide.", + "grand_exchange_price": "1488", + "durability": null, + "name": "Blue d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13498", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,9,4,3,5,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Vambraces made from 100% real dragonhide.", + "grand_exchange_price": "1714", + "durability": null, + "name": "Red d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13499", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,10,5,4,6,6,0,5,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Vambraces made from 100% real dragonhide.", + "grand_exchange_price": "2208", + "durability": null, + "name": "Black d'hide vamb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13500", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,11,6,5,7,8,0,6,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A wooden helmet.", + "grand_exchange_price": "5210", + "durability": null, + "name": "Splitbark helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13501", + "absorb": "3,1,0", + "bonuses": "0,0,0,3,-2,10,9,11,3,0,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides good protection.", + "grand_exchange_price": "27106", + "durability": null, + "name": "Splitbark body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13502", + "absorb": "6,3,0", + "bonuses": "0,0,0,10,-10,36,26,42,15,0,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These should protect my legs.", + "grand_exchange_price": "56050", + "durability": null, + "name": "Splitbark legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13503", + "absorb": "4,2,0", + "bonuses": "0,0,0,7,-7,22,20,25,10,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These should keep my hands safe.", + "grand_exchange_price": "2442", + "durability": null, + "name": "Splitbark gauntlets", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13504", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Wooden foot protection.", + "grand_exchange_price": "6845", + "durability": null, + "name": "Splitbark boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13505", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,-1,3,2,4,2,0,9,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "An ancient and powerful looking Dragon Square shield.", + "grand_exchange_price": "328356", + "durability": null, + "name": "Dragon sq shield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13506", + "absorb": "5,0,11", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A large metal shield.", + "grand_exchange_price": "31885", + "durability": null, + "name": "Rune kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13507", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Blue: A magical hat. ", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13508", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The upper half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13509", + "absorb": "3,1,0", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The lower half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13510", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Bright/Dark magical gloves.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13511", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Magical boots.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13512", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Blue: A magical hat. ", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13513", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The upper half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13514", + "absorb": "3,1,0", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The lower half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13515", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Bright/Dark magical gloves.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13516", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Magical boots.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13517", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Blue: A magical hat. ", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13518", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The upper half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13519", + "absorb": "3,1,0", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The lower half of a magical robe.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13520", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Bright/Dark magical gloves.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13521", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Magical boots.", + "grand_exchange_price": "1", + "durability": null, + "name": "Mystic boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13522", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,0,0,0,3,0,3,0,0,0,0" + }, + { + "examine": "A nice sturdy bow made out of maple.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "193", + "name": "Maple longbow", + "archery_ticket_price": "0", + "id": "13523", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A shortbow made out of maple, still effective.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "111", + "name": "Maple shortbow", + "archery_ticket_price": "0", + "id": "13524", + "bonuses": "0,0,0,0,29,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A nice sturdy bow made out of yew.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "486", + "name": "Yew longbow", + "archery_ticket_price": "0", + "id": "13525", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A shortbow made out of yew, still effective.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "253", + "name": "Yew shortbow", + "archery_ticket_price": "0", + "id": "13526", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A nice sturdy magical bow.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1211", + "name": "Magic longbow", + "archery_ticket_price": "0", + "id": "13527", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Short and magical, but still effective.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "655", + "name": "Magic shortbow", + "archery_ticket_price": "0", + "id": "13528", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "An ancient Fremennik bow that was once used to battle the Moon Clan.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "21698", + "name": "Seercull", + "archery_ticket_price": "0", + "id": "13529", + "bonuses": "0,0,0,0,69,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A runite crossbow.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "17", + "absorb": "0,0,0", + "render_anim": "175", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "8890", + "name": "Rune crossbow", + "archery_ticket_price": "0", + "id": "13530", + "bonuses": "0,0,0,0,90,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1696744720", + "durability": null, + "name": "Red partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13531", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1314730495", + "durability": null, + "name": "Yellow partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13532", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "2147483647", + "durability": null, + "name": "Blue partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13533", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1481913809", + "durability": null, + "name": "Green partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13534", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "1248900588", + "durability": null, + "name": "Purple partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13535", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A nice hat from a cracker.", + "grand_exchange_price": "2147473360", + "durability": null, + "name": "White partyhat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13536", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "It's a Santa hat.", + "grand_exchange_price": "130433327", + "durability": null, + "name": "Santa hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13537", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Aaaarrrghhh ... I'm a monster.", + "grand_exchange_price": "104671288", + "durability": null, + "name": "Green h'ween mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13538", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Aaaarrrghhh ... I'm a monster.", + "grand_exchange_price": "127720943", + "durability": null, + "name": "Blue h'ween mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13539", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Aaaarrrghhh ... I'm a monster.", + "grand_exchange_price": "171640098", + "durability": null, + "name": "Red h'ween mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13540", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful bow made from willow.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "2606", + "name": "Willow comp bow", + "archery_ticket_price": "0", + "id": "13541", + "bonuses": "0,0,0,0,22,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful bow made from yew wood.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "588", + "name": "Yew comp bow", + "archery_ticket_price": "0", + "id": "13542", + "bonuses": "0,0,0,0,49,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A powerful bow made from magic wood.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1345", + "name": "Magic comp bow", + "archery_ticket_price": "0", + "id": "13543", + "bonuses": "0,0,0,0,71,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "74503559", + "durability": null, + "name": "3rd age range top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13544", + "absorb": "0,6,3", + "bonuses": "0,0,0,-15,30,55,47,60,60,55,52,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "47837515", + "durability": null, + "name": "3rd age range legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13545", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,17,31,25,33,30,31,25,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "9746895", + "durability": null, + "name": "3rd age range coif", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13546", + "absorb": "0,3,1", + "bonuses": "0,0,0,-2,9,4,7,10,5,8,12,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Fabulously ancient range protection crafted from white dragonhide.", + "grand_exchange_price": "6826420", + "durability": null, + "name": "3rd age vambraces", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13547", + "absorb": "0,0,0", + "bonuses": "0,0,0,-11,11,6,5,7,9,0,5,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "138719269", + "durability": null, + "name": "3rd age robe top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13548", + "absorb": "4,2,0", + "bonuses": "0,0,0,24,0,0,0,0,24,0,24,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "89961678", + "durability": null, + "name": "3rd age robe", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13549", + "absorb": "4,2,0", + "bonuses": "0,0,0,19,0,0,0,0,19,0,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "14976830", + "durability": null, + "name": "3rd age mage hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13550", + "absorb": "2,1,0", + "bonuses": "0,0,0,8,0,0,0,0,8,0,12,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient mage protection enchanted in the Third-Age.", + "grand_exchange_price": "35019596", + "durability": null, + "name": "3rd age amulet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13551", + "absorb": "0,0,0", + "bonuses": "0,0,0,15,0,0,0,0,10,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "244180930", + "durability": null, + "name": "3rd age platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13552", + "absorb": "3,0,6", + "bonuses": "0,0,0,-25,-2,78,76,83,-5,75,25,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "266509014", + "durability": null, + "name": "3rd age platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13553", + "absorb": "4,0,9", + "bonuses": "0,0,0,-20,0,96,108,113,-4,97,52,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "50697678", + "durability": null, + "name": "3rd age full helmet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13554", + "absorb": "2,0,4", + "bonuses": "0,0,0,-5,-2,47,49,43,-3,48,12,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Ancient armour beaten from magical silver.", + "grand_exchange_price": "91262203", + "durability": null, + "name": "3rd age kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13555", + "absorb": "5,0,11", + "bonuses": "0,0,0,-10,-4,63,65,61,-3,63,60,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Lightweight boots ideal for rangers.", + "grand_exchange_price": "6253527", + "durability": null, + "name": "Ranger boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13556", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,8,2,3,4,2,0,10,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Slightly magical boots.", + "grand_exchange_price": "388955", + "durability": null, + "name": "Wizard boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13557", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Endorsed by Robin Hood.", + "grand_exchange_price": "1962571", + "durability": null, + "name": "Robin hood hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13558", + "absorb": "0,0,0", + "bonuses": "0,0,0,-10,8,4,6,8,4,4,7,0,0,0,0" + }, + { + "destroy_message": "You will have talk to Explorer Jack in Lumbridge if you destroy this one.", + "shop_price": "350", + "examine": "A Lumbridge explorer's ring.", + "durability": null, + "name": "Explorer's ring 1", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13560", + "absorb": "0,0,0", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,1,0,0", + "equipment_slot": "12" + }, + { + "destroy_message": "You will have talk to ", + "shop_price": "350", + "examine": "A Lumbridge explorer's ring.", + "durability": null, + "name": "Explorer's ring 2", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13561", + "absorb": "0,0,0", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,1,0,0", + "equipment_slot": "12" + }, + { + "destroy_message": "You will need to obtain a new ring from Ned in Draynor if you destroy this one.", + "shop_price": "350", + "examine": "A Lumbridge explorer's ring.", + "durability": null, + "name": "Explorer's ring 3", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13562", + "absorb": "0,0,0", + "bonuses": "0,0,0,1,0,0,0,0,1,0,0,0,1,0,0", + "equipment_slot": "12" + }, + { + "shop_price": "38", + "examine": "An occasionally edible mushroom.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "100", + "name": "Button mushroom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13563", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "38", + "examine": "An occasionally edible mushroom.", + "grand_exchange_price": "100", + "durability": null, + "name": "Button mushroom", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13564" + }, + { + "durability": null, + "name": "Doll", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13565", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You may be able to find a new ring near where Summer stood outside the wilderness wall.", + "examine": "This magical ring once belonged to Summer's mother.", + "durability": null, + "name": "Jennica's ring", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13566", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "destroy_message": "Drop", + "examine": "Logs cut from a cursed magic tree.", + "durability": null, + "name": "Cursed magic logs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13567", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Logs cut from a cursed magic tree.", + "durability": null, + "name": "Cursed magic logs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13568" + }, + { + "destroy_message": "Hopefully, Jorral will be able to return them.", + "examine": "Notes on how to use the enchanted key.", + "durability": null, + "name": "Enchanted key notes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13569", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Useful for mixing things.", + "grand_exchange_price": "106", + "durability": null, + "name": "Bowl", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13570", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "It's a bucket of milk.", + "grand_exchange_price": "177", + "durability": null, + "name": "Bucket of milk", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13571", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A fresh herb.", + "grand_exchange_price": "595", + "durability": null, + "name": "Clean guam", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13572", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to start again from stratch.", + "examine": "A bowlful of bees' precious product.", + "durability": null, + "name": "Bowl of honey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13573", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to start again from stratch.", + "examine": "A bowlful of milk and honey.", + "durability": null, + "name": "Bowl of milk and honey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13574", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to start again from stratch.", + "examine": "A bowl full of milk, honey and guam.", + "durability": null, + "name": "Bowl of milk, honey and guam", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13575", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Hopefully, the family has more papyrus and charcoal.", + "examine": "Your best impression of a map of RuneScape.", + "durability": null, + "name": "Map of runescape", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13576", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "Used for making notes.", + "grand_exchange_price": "290", + "durability": null, + "name": "Papyrus", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13577", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A lump of charcoal.", + "grand_exchange_price": "296", + "durability": null, + "name": "Charcoal", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13578", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A slightly muddy spade. ", + "grand_exchange_price": "130", + "durability": null, + "name": "Spade", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13579", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A plant pot filled with soil.", + "durability": null, + "name": "Plant pot", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13580", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Pear tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13581", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Mango tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13582", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Quince tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13583", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Lemon tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13584", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Avocado tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13585", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A seedling has been sown in this plant pot.", + "durability": null, + "name": "Plum tree seedling", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13586", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "4", + "examine": "I can grind things for potions in this.", + "grand_exchange_price": "169", + "durability": null, + "name": "Pestle and mortar", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13587", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "One of the ingredients for making fish food.", + "grand_exchange_price": "5", + "durability": null, + "name": "Ground guam", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13588", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2", + "examine": "It's an empty bucket. ", + "grand_exchange_price": "39", + "durability": null, + "name": "Bucket", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13589", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "It seems to change temperature as I walk. (Making History)", + "durability": null, + "name": "Enchanted key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13591", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Hopefully, you can find another.", + "examine": "Some ladies jewellery.", + "durability": null, + "name": "A brooch", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13592", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will not get another chance to read the book!", + "examine": "It's falling apart, but full of knowledge.", + "durability": null, + "name": "Old tome", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13593", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Runecrafting guild teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13598", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Air altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13599", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Mind altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13600", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Water altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13601", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Earth altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13602", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Fire altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13603", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Body altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13604", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Cosmic altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13605", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Chaos altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13606", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Nature altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13607", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Law altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13608", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Death altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13609", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Blood altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13610", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A tablet containing a magic spell.", + "durability": null, + "name": "Astral altar teleport", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13611", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13612", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13613", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "75", + "examine": "Heavy duty wizard robes.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Runecrafter robe", + "archery_ticket_price": "0", + "id": "13614", + "bonuses": "0,0,0,5,0,5,5,5,5,5,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13615", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13616", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "A heavy-duty wizard robe.", + "durability": null, + "name": "Runecrafter skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13617", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,4,4,4,4,4,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Essence can be rough on the hands", + "durability": null, + "name": "Runecrafter gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13618", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "75", + "examine": "Heavy duty wizard robes.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Runecrafter robe", + "archery_ticket_price": "0", + "id": "13619", + "bonuses": "0,0,0,5,0,5,5,5,5,5,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13620", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13621", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "A heavy-duty wizard robe.", + "durability": null, + "name": "Runecrafter skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13622", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,4,4,4,4,4,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Essence can be rough on the hands", + "durability": null, + "name": "Runecrafter gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13623", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "75", + "examine": "Heavy duty wizard robes.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Runecrafter robe", + "archery_ticket_price": "0", + "id": "13624", + "bonuses": "0,0,0,5,0,5,5,5,5,5,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13625", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13626", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "A heavy-duty wizard robe.", + "durability": null, + "name": "Runecrafter skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13627", + "absorb": "0,0,0", + "bonuses": "0,0,0,4,0,4,4,4,4,4,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Essence can be rough on the hands", + "durability": null, + "name": "Runecrafter gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13628", + "absorb": "0,0,0", + "bonuses": "0,0,0,2,0,2,2,2,2,2,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Drop", + "shop_price": "15", + "examine": "Staff with a holder for a talisman on top.", + "durability": null, + "name": "Runecrafting staff", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "5", + "id": "13629", + "absorb": "0,0,0", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0", + "render_anim": "28" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Air talisman staff", + "archery_ticket_price": "0", + "id": "13630", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Mind talisman staff", + "archery_ticket_price": "0", + "id": "13631", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Water talisman staff", + "archery_ticket_price": "0", + "id": "13632", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Earth talisman staff", + "archery_ticket_price": "0", + "id": "13633", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Fire talisman staff", + "archery_ticket_price": "0", + "id": "13634", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Body talisman staff", + "archery_ticket_price": "0", + "id": "13635", + "bonuses": "0,-1,7,5,0,2,3,1,15,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Cosmic talisman staff", + "archery_ticket_price": "0", + "id": "13636", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Chaos talisman staff", + "archery_ticket_price": "0", + "id": "13637", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "No", + "name": "Nature talisman staff", + "archery_ticket_price": "0", + "id": "13638", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Law talisman staff", + "archery_ticket_price": "0", + "id": "13639", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Death talisman staff", + "archery_ticket_price": "0", + "id": "13640", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Blood talisman staff", + "archery_ticket_price": "0", + "id": "13641", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "1500", + "examine": "A staff with a talisman on top.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "You will have to speak to Wizard Elriss to get another omni-talisman.", + "name": "Omni-talisman staff", + "archery_ticket_price": "0", + "id": "13642", + "bonuses": "0,-1,7,5,0,2,3,1,16,0,0,33,0,0,0" + }, + { + "shop_price": "20", + "examine": "Attracts Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Yellow attractor", + "archery_ticket_price": "0", + "id": "13643", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Repels Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Yellow repeller", + "archery_ticket_price": "0", + "id": "13644", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Attracts Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Green attractor", + "archery_ticket_price": "0", + "id": "13645", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Repels Runecrafting energy orbs in the rune altars.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Green repeller", + "archery_ticket_price": "0", + "id": "13646", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "It creates barriers.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Green barrier generator", + "archery_ticket_price": "0", + "id": "13647", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "It creates barriers.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "If you destroy this, you will leave the game.", + "name": "Yellow barrier generator", + "archery_ticket_price": "0", + "id": "13648", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will have to speak to ", + "shop_price": "4", + "examine": "Many mysterious powers emanate from the talisman.", + "durability": null, + "name": "Omni-talisman", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13649", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13650", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13651", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13652", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13653", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "Wizard Elriss will exchange these for rewards.", + "durability": null, + "name": "Runecrafting guild token", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13654", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will have to speak to Wizard Elriss to get another omni-talisman.", + "shop_price": "100", + "examine": "A tiara infused with the properties of all talismans.", + "durability": null, + "name": "Omni-tiara", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13655", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13656", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13657", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Comes with goggles, for extra safety while Runecrafting.", + "durability": null, + "name": "Runecrafter hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13658", + "absorb": "0,0,0", + "bonuses": "0,0,0,3,0,3,3,3,3,3,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "100", + "examine": "It burns, burns, burns...", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "12", + "destroy_message": "To get another Ring of Fire, you need to keep six beacons alight simultaneously and then talk to King Roald.", + "name": "Ring of fire", + "archery_ticket_price": "0", + "id": "13659", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "point_price": "50" + }, + { + "destroy_message": "To get another pair of Flame Gloves, you need to keep ten beacons alight simultaneously and then talk to King Roald.", + "shop_price": "200", + "examine": "The hottest gloves in town.", + "durability": null, + "name": "Flame gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13660", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "shop_price": "300", + "examine": "Danger: risk of fire.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "1096", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "destroy_message": "To get another Inferno Adze, you need to keep all fourteen beacons alight simultaneously and then talk to King Roald.", + "name": "Inferno adze", + "archery_ticket_price": "0", + "id": "13661", + "bonuses": "10,9,7,0,0,0,1,0,0,0,0,11,0,0,0", + "point_price": "75" + }, + { + "durability": null, + "name": "Fire beacon", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13662", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "The ticket says: Tearing this ticket will make you leave the circus. Choose wisely.", + "shop_price": "10", + "examine": "Tear ticket to exit the circus.", + "durability": null, + "name": "Circus ticket", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13663", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "10", + "examine": "Let's give them a big hand!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "326", + "equipment_slot": "3", + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "name": "Giant's hand", + "archery_ticket_price": "0", + "id": "13666", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "A clown hat!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Clown hat", + "archery_ticket_price": "0", + "id": "13667", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10", + "examine": "Buttoning this up is tricky.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "remove_sleeves": "true", + "name": "Clown shirt", + "archery_ticket_price": "0", + "id": "13668", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "These are my funny pants.", + "durability": null, + "name": "Clown leggings", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13669", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "For helping clowns stay upright.", + "durability": null, + "name": "Clown shoes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13670", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "examine": "For making a happy noise.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "8", + "absorb": "0,0,0", + "render_anim": "327", + "equipment_slot": "3", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Tambourine", + "archery_ticket_price": "0", + "id": "13671", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "shop_price": "10", + "examine": "Very stylish.", + "durability": null, + "name": "Ringmaster hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13672", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "10", + "examine": "Fits nicely.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "remove_sleeves": "true", + "name": "Ringmaster shirt", + "archery_ticket_price": "0", + "id": "13673", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "shop_price": "10", + "examine": "Very stylish.", + "durability": null, + "name": "Ringmaster pants", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13674", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "shop_price": "10", + "examine": "Shiny.", + "durability": null, + "name": "Ringmaster boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13675", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "examine": "For shouting at people.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "8", + "absorb": "0,0,0", + "render_anim": "328", + "equipment_slot": "3", + "destroy_message": "You will need to speak to the ringmaster to get another one.", + "name": "Mega-phonus", + "archery_ticket_price": "0", + "id": "13676", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10", + "examine": "Stretchy.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "remove_sleeves": "true", + "name": "Acrobat shirt", + "archery_ticket_price": "0", + "id": "13677", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very tight fitting.", + "durability": null, + "name": "Acrobat pants", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13678", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "These keep your feet off the floor.", + "durability": null, + "name": "Acrobat shoes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13679", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Oh no, I'm bald! Just kidding.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Acrobat hood", + "archery_ticket_price": "0", + "id": "13680", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10", + "examine": "Stretchy.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "remove_sleeves": "true", + "name": "Acrobat shirt", + "archery_ticket_price": "0", + "id": "13681", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very tight fitting.", + "durability": null, + "name": "Acrobat pants", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13682", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "These keep your feet off the floor.", + "durability": null, + "name": "Acrobat shoes", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13683", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Oh no, I'm bald! Just kidding.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "Acrobat hood", + "archery_ticket_price": "0", + "id": "13684", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "name": "A stylish hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13685", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "name": "A stylish hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13686", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "destroy_message": "You will need to speak to the ringmaster to get another.", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "name": "A stylish hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13687", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "A stylish hat", + "archery_ticket_price": "0", + "id": "13688", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "A stylish hat", + "archery_ticket_price": "0", + "id": "13689", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "10", + "examine": "Very dapper!", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "You will need to speak to the ringmaster to get another.", + "name": "A stylish hat", + "archery_ticket_price": "0", + "id": "13690", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13691", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13692", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13693", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13694", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13695", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "remove_sleeves": "true", + "shop_price": "10", + "durability": null, + "name": "Shirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13696", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "shop_price": "10", + "durability": null, + "name": "Leggings", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13697", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Leggings", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13698", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Leggings", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13699", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Skirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13700", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Skirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13701", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Skirt", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13702", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13703", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13704", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13705", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "shop_price": "10", + "durability": null, + "name": "Shoes", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13706", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You can get another Tightrope 101 by speaking to the Agility assistant.", + "examine": "Shows you the moves you need to succeed!", + "durability": null, + "name": "Tightrope 101", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13707", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another Tightrope 101 by speaking to the Agility assistant.", + "examine": "Shows you the moves you need to succeed!", + "durability": null, + "name": "Tightrope 101", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13708" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 10 is advised when juggling these.", + "durability": null, + "name": "Balls (level 10 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13709", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 20 is advised when juggling these.", + "durability": null, + "name": "Plates (level 20 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13710", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 30 is advised when juggling these.", + "durability": null, + "name": "Eggs (level 30 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13711", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 40 is advised when juggling these.", + "durability": null, + "name": "Knives (level 40 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13712", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 50 is advised when juggling these.", + "durability": null, + "name": "Spades (level 50 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13713", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 60 is advised when juggling these.", + "durability": null, + "name": "Tuna (level 60 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13714", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 70 is advised when juggling these.", + "durability": null, + "name": "Soap (level 70 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13715", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 80 is advised when juggling these.", + "durability": null, + "name": "Cannon balls (level 80 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13716", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 90 is advised when juggling these.", + "durability": null, + "name": "Torches (level 90 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13717", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "examine": "An Agility level of 99 is advised when juggling these.", + "durability": null, + "name": "Chinchompas (level 99 approx.)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13718", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "50", + "examine": "Short, but effective.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "16", + "absorb": "0,0,0", + "render_anim": "176", + "equipment_slot": "3", + "destroy_message": "You can get another one from the equipment box for this performance.", + "name": "Performance shortbow", + "archery_ticket_price": "0", + "id": "13719", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "14", + "examine": "A finely balanced throwing knife.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "You can get another one from the equipment box for this performance.", + "name": "Performance knife", + "archery_ticket_price": "0", + "id": "13720", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "4", + "examine": "A finely balanced throwing axe.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "You can get another one from the equipment box for this performance.", + "name": "Performance throwing axe", + "archery_ticket_price": "0", + "id": "13721", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "7", + "examine": "Arrows with bronze heads.", + "durability": null, + "name": "Performance arrow", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13722", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "13" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Teleport spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13723", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Levitation spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13724", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Alchemy spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13725", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another one from the equipment box for this performance.", + "shop_price": "100", + "examine": "A tablet containing a Magic spell.", + "durability": null, + "name": "Elemental spell", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13726", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can mine more if you find another crashed star.", + "shop_price": "50", + "examine": "Small, shiny bits of rock.", + "durability": null, + "name": "Stardust", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13727", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will need to speak with Larry/Chuck at Ardougne Zoo to get another.", + "examine": "Notes on the locations of penguin spies.", + "durability": null, + "name": "Spy notebook", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13732", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,40}-{5,55}", + "shop_price": "70000", + "examine": "An ethereal shield.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "39982", + "name": "Spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13734", + "bonuses": "0,0,0,0,0,39,41,50,1,45,40,0,1,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "70000", + "examine": "An ethereal shield.", + "grand_exchange_price": "39982", + "durability": null, + "name": "Spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13735" + }, + { + "requirements": "{1,70}-{5,60}", + "shop_price": "1400000", + "examine": "An ethereal shield that has been blessed with holy powers.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "936814", + "name": "Blessed spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13736", + "bonuses": "0,0,0,0,0,53,55,73,2,52,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1400000", + "examine": "An ethereal shield that has been blessed with holy powers.", + "grand_exchange_price": "936814", + "durability": null, + "name": "Blessed spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13737" + }, + { + "requirements": "{1,75}-{6,65}-{5,70}", + "shop_price": "2000000", + "examine": "An ethereal shield with an arcane sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "15076199", + "name": "Arcane spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13738", + "bonuses": "0,0,0,20,0,53,55,73,2,52,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with an arcane sigil attached to it.", + "grand_exchange_price": "15076199", + "durability": null, + "name": "Arcane spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13739" + }, + { + "requirements": "{1,75}-{5,75}", + "shop_price": "2000000", + "examine": "An ethereal shield with a divine sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "40003587", + "name": "Divine spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13740", + "bonuses": "0,0,0,0,0,63,65,75,2,57,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with a divine sigil attached to it.", + "grand_exchange_price": "40003587", + "durability": null, + "name": "Divine spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13741" + }, + { + "requirements": "{1,75}-{5,75}", + "shop_price": "2000000", + "examine": "An ethereal shield with an elysian sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "28420591", + "name": "Elysian spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13742", + "bonuses": "0,0,0,0,0,63,65,75,2,57,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with an elysian sigil attached to it.", + "grand_exchange_price": "28420591", + "durability": null, + "name": "Elysian spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13743" + }, + { + "requirements": "{1,75}-{5,70}-{6,65}", + "shop_price": "2000000", + "examine": "An ethereal shield with a spectral sigil attached to it.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "3616112", + "name": "Spectral spirit shield", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13744", + "bonuses": "0,0,0,0,0,53,55,73,30,52,65,0,3,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "2000000", + "examine": "An ethereal shield with a spectral sigil attached to it.", + "grand_exchange_price": "3616112", + "durability": null, + "name": "Spectral spirit shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13745" + }, + { + "shop_price": "750000", + "examine": "A sigil in the shape of an arcane rune.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "19508553", + "name": "Arcane sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13746", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil in the shape of an arcane rune.", + "grand_exchange_price": "19508553", + "durability": null, + "name": "Arcane sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13747" + }, + { + "shop_price": "750000", + "examine": "A sigil in the shape of a divine symbol.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "53026134", + "name": "Divine sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13748", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil in the shape of a divine symbol.", + "grand_exchange_price": "53026134", + "durability": null, + "name": "Divine sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13749" + }, + { + "shop_price": "750000", + "examine": "A sigil marked with elysian signs.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "36159098", + "name": "Elysian sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13750", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil marked with elysian signs.", + "grand_exchange_price": "36159098", + "durability": null, + "name": "Elysian sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13751" + }, + { + "shop_price": "750000", + "examine": "A sigil tempered with spectral powers.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "3116720", + "name": "Spectral sigil", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13752", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A sigil tempered with spectral powers.", + "grand_exchange_price": "3116720", + "durability": null, + "name": "Spectral sigil", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13753" + }, + { + "shop_price": "750000", + "examine": "A bottle of holy elixir.", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "950904", + "name": "Holy elixir", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13754", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "750000", + "examine": "A bottle of holy elixir.", + "grand_exchange_price": "950904", + "durability": null, + "name": "Holy elixir", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13755" + }, + { + "destroy_message": "Drop", + "shop_price": "40", + "examine": "Logs cut from cursed willow roots.", + "durability": null, + "name": "Cursed willow logs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13756", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "A loyal scout of Varrock.", + "durability": null, + "name": "Hartwin", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13757", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to keep searching trees near the zombie trails until you find another.", + "examine": "A key that was found while tracking zombies. (Defender of Varrock)", + "durability": null, + "name": "Grubby key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13758", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You'll have to speak to Thurgo to find another.", + "shop_price": "1", + "examine": "The location of ", + "durability": null, + "name": "Scrap of paper", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13759", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Bottle", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13760", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A bottle of red mist.", + "durability": null, + "name": "Bottle of mist", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13761", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another from ", + "examine": "This lists each of the founding members of the ", + "durability": null, + "name": "List of elders", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13762", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "I hope I don't meet any roundheads...", + "durability": null, + "name": "Cavalier and mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13763", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A right hand fighting claw.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "absorb": "0,0,0", + "equip_audio": "1003", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "6535", + "name": "Rune claws", + "archery_ticket_price": "0", + "id": "13764", + "bonuses": "26,38,-4,0,0,10,19,5,0,0,0,39,0,0,0" + }, + { + "examine": "A powerful dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "4381", + "name": "Rune dagger", + "archery_ticket_price": "0", + "id": "13765", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Rune dagger(p)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13766", + "absorb": "0,0,0", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Rune dagger(p+)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13767", + "absorb": "0,0,0", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "name": "Rune dagger(p++)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13768", + "absorb": "0,0,0", + "bonuses": "25,12,-4,1,0,0,0,0,1,0,0,24,0,0,0" + }, + { + "examine": "A rune tipped spear.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "11317", + "name": "Rune spear", + "archery_ticket_price": "0", + "id": "13769", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "examine": "A dragon tipped spear.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "36774", + "name": "Dragon spear", + "archery_ticket_price": "0", + "id": "13770", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "destroy_message": "Drop", + "name": "Rune spear(p)", + "archery_ticket_price": "0", + "id": "13771", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "name": "Dragon spear(p)", + "archery_ticket_price": "0", + "id": "13772", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "destroy_message": "Drop", + "name": "Rune spear(p+)", + "archery_ticket_price": "0", + "id": "13773", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "name": "Dragon spear(p+)", + "archery_ticket_price": "0", + "id": "13774", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "destroy_message": "Drop", + "name": "Rune spear(p++)", + "archery_ticket_price": "0", + "id": "13775", + "bonuses": "36,36,36,0,0,1,1,0,0,0,0,42,0,0,0" + }, + { + "shop_price": "1", + "examine": "A picture of a lady called Elena.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "name": "Dragon spear(p++)", + "archery_ticket_price": "0", + "id": "13776", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "examine": "A razor-sharp sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1381", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "11849", + "name": "Rune sword", + "archery_ticket_price": "0", + "id": "13777", + "bonuses": "38,26,-2,0,0,0,2,1,0,0,0,39,0,0,0" + }, + { + "examine": "A two handed sword.", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "7", + "absorb": "0,0,0", + "render_anim": "124", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "37511", + "name": "Rune 2h sword", + "archery_ticket_price": "0", + "id": "13778", + "bonuses": "-4,69,50,-4,0,0,0,0,0,-1,0,70,0,0,0" + }, + { + "examine": "A rune halberd.", + "durability": null, + "destroy": "true", + "attack_speed": "7", + "two_handed": "true", + "weapon_interface": "15", + "absorb": "0,0,0", + "render_anim": "28", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "74298", + "name": "Rune halberd", + "archery_ticket_price": "0", + "id": "13779", + "bonuses": "48,67,0,-4,0,-1,4,5,0,0,0,68,0,0,0" + }, + { + "examine": "A spiky mace.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "7917", + "name": "Rune mace", + "archery_ticket_price": "0", + "id": "13780", + "bonuses": "20,-2,39,0,0,0,0,0,0,0,0,36,0,4,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A series of connected metal rings.", + "grand_exchange_price": "29145", + "durability": null, + "name": "Rune chainbody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13781", + "absorb": "3,0,6", + "bonuses": "0,0,0,-15,0,63,72,78,-3,65,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These will protect my feet.", + "grand_exchange_price": "7036", + "durability": null, + "name": "Rune boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13782", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,12,13,14,0,0,10,2,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A medium sized helmet.", + "grand_exchange_price": "10678", + "durability": null, + "name": "Rune med helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13783", + "absorb": "1,0,3", + "bonuses": "0,0,0,-3,-1,22,23,21,-1,22,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A stone helmet.", + "grand_exchange_price": "26576", + "durability": null, + "name": "Granite helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13784", + "absorb": "2,0,4", + "bonuses": "0,0,0,-9,-7,31,33,29,-1,39,9,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides excellent protection.", + "grand_exchange_price": "136414", + "durability": null, + "name": "Granite body", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13785", + "absorb": "4,0,8", + "bonuses": "0,0,0,-22,-5,87,84,79,-6,97,45,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These look pretty heavy.", + "grand_exchange_price": "72213", + "durability": null, + "name": "Granite legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13786", + "absorb": "2,0,5", + "bonuses": "0,0,0,-31,-18,43,45,41,-4,68,20,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A medium square shield.", + "grand_exchange_price": "22225", + "durability": null, + "name": "Rune sq shield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13787", + "absorb": "3,0,7", + "bonuses": "0,0,0,-6,-2,38,40,36,0,38,35,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A solid stone shield.", + "grand_exchange_price": "32512", + "durability": null, + "name": "Granite shield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13788", + "absorb": "5,0,10", + "bonuses": "0,0,0,-12,-8,40,42,38,0,65,50,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A big 'do about nothing.", + "grand_exchange_price": "42991", + "durability": null, + "name": "A powdered wig", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13789", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These'll help me stay alive.", + "grand_exchange_price": "811293", + "durability": null, + "name": "Flared trousers", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13790", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Alas, someone has slashed my pantaloons.", + "grand_exchange_price": "19286", + "durability": null, + "name": "Pantaloons", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13791", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A cap for wearing whil...zzzzzzzzz", + "grand_exchange_price": "75357", + "durability": null, + "name": "Sleeping cap", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13792", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A diamond-topped cane.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "76692", + "name": "Rune cane", + "archery_ticket_price": "0", + "id": "13793", + "bonuses": "0,-2,39,0,0,0,0,0,0,0,0,36,0,4,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Comes with a free rabbit!", + "grand_exchange_price": "333537", + "durability": null, + "name": "Top hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13794", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Shear elegance.", + "grand_exchange_price": "582969", + "durability": null, + "name": "Sheep mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13795", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "I can get the look right, but can I do the waddle too?", + "grand_exchange_price": "1159807", + "durability": null, + "name": "Penguin mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13796", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "The bats have left the belltower.", + "grand_exchange_price": "681595", + "durability": null, + "name": "Bat mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13797", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "It's the year of the cat!", + "grand_exchange_price": "2512014", + "durability": null, + "name": "Cat mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13798", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "I'm hungry like the wolf.", + "grand_exchange_price": "3240770", + "durability": null, + "name": "Wolf mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13799", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody with gold trim.", + "grand_exchange_price": "343688", + "durability": null, + "name": "Rune platebody (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13800", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "drop", + "examine": "Rune platelegs with gold trim.", + "grand_exchange_price": "238139", + "durability": null, + "name": "Rune platelegs (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13801", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt with gold trim.", + "grand_exchange_price": "37616", + "durability": null, + "name": "Rune plateskirt (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13802", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet with gold trim.", + "grand_exchange_price": "247877", + "durability": null, + "name": "Rune full helm(g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13803", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield with gold trim", + "grand_exchange_price": "118205", + "durability": null, + "name": "Rune kiteshield (g)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13804", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody with trim.", + "grand_exchange_price": "100586", + "durability": null, + "name": "Rune platebody (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13805", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs with trim!", + "grand_exchange_price": "81577", + "durability": null, + "name": "Rune platelegs (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13806", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt with trim.", + "grand_exchange_price": "37701", + "durability": null, + "name": "Rune plateskirt (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13807", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet with trim.", + "grand_exchange_price": "95809", + "durability": null, + "name": "Rune full helm (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13808", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A large, metal shield with a nice trim.", + "grand_exchange_price": "46469", + "durability": null, + "name": "Rune kiteshield (t)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13809", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Your money or your life!", + "grand_exchange_price": "252995", + "durability": null, + "name": "Highwayman mask", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13810", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Parlez-vous francais?", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "135411", + "name": "Blue beret", + "archery_ticket_price": "0", + "hat": true, + "id": "13811", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Parlez-vous francais?", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "451371", + "name": "Black beret", + "archery_ticket_price": "0", + "hat": true, + "id": "13812", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Parlez-vous Francais?", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "704147", + "name": "White beret", + "archery_ticket_price": "0", + "hat": true, + "id": "13813", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "All for one and one for all!", + "grand_exchange_price": "42014", + "durability": null, + "name": "Tan cavalier", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13814", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "All for one and one for all!", + "grand_exchange_price": "61518", + "durability": null, + "name": "Dark cavalier", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13815", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "All for one and one for all!", + "grand_exchange_price": "338530", + "durability": null, + "name": "Black cavalier", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13816", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A minimalist's hat.", + "grand_exchange_price": "159694", + "durability": null, + "name": "Red headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13817", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A minimalist's hat.", + "grand_exchange_price": "83543", + "durability": null, + "name": "Black headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13818", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A minimalist's hat.", + "grand_exchange_price": "26474", + "durability": null, + "name": "Brown headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13819", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody in the colours of Zamorak.", + "grand_exchange_price": "868398", + "durability": null, + "name": "Zamorak platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13820", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs in the colours of Zamorak.", + "grand_exchange_price": "316989", + "durability": null, + "name": "Zamorak platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13821", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt in the colours of Zamorak.", + "grand_exchange_price": "38597", + "durability": null, + "name": "Zamorak plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13822", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A full helmet in the colours of Zamorak.", + "grand_exchange_price": "618480", + "durability": null, + "name": "Zamorak full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13823", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A Rune kiteshield in the colours of Zamorak.", + "grand_exchange_price": "225574", + "durability": null, + "name": "Zamorak kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13824", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody in the colours of Saradomin.", + "grand_exchange_price": "1555099", + "durability": null, + "name": "Saradomin platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13825", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs in the colours of Saradomin.", + "grand_exchange_price": "376849", + "durability": null, + "name": "Saradomin platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13826", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt in the colours of Saradomin.", + "grand_exchange_price": "53048", + "durability": null, + "name": "Saradomin plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13827", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet in the colours of Saradomin.", + "grand_exchange_price": "1025974", + "durability": null, + "name": "Saradomin full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13828", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield in the colours of Saradomin.", + "grand_exchange_price": "353916", + "durability": null, + "name": "Saradomin kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13829", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody in the colours of Guthix.", + "grand_exchange_price": "406762", + "durability": null, + "name": "Guthix platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13830", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs in the colours of Guthix.", + "grand_exchange_price": "181471", + "durability": null, + "name": "Guthix platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13831", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt in the colours of Guthix.", + "grand_exchange_price": "38388", + "durability": null, + "name": "Guthix plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13832", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A rune full helmet in the colours of Guthix.", + "grand_exchange_price": "399963", + "durability": null, + "name": "Guthix full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13833", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield in the colours of Guthix.", + "grand_exchange_price": "185266", + "durability": null, + "name": "Guthix kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13834", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platebody with complete gold trim & plating.", + "grand_exchange_price": "2034838", + "durability": null, + "name": "Gilded platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13835", + "absorb": "3,0,6", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune platelegs with gold plate.", + "grand_exchange_price": "1299758", + "durability": null, + "name": "Gilded platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13836", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune plateskirt with gold plate.", + "grand_exchange_price": "84191", + "durability": null, + "name": "Gilded plateskirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13837", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune full helmet with gold plate.", + "grand_exchange_price": "1057068", + "durability": null, + "name": "Gilded full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13838", + "absorb": "1,0,3", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Rune kiteshield with gold plate.", + "grand_exchange_price": "506093", + "durability": null, + "name": "Gilded kiteshield", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13839", + "absorb": "3,0,7", + "bonuses": "0,0,0,-8,-2,44,48,46,-1,46,45,0,0,0,0" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Atk, Def, Str and LP xp.", + "durability": null, + "name": "Brawling gloves (melee)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13845", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Ranged xp.", + "durability": null, + "name": "Brawling gloves (ranged)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13846", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Magic xp.", + "durability": null, + "name": "Brawling gloves (magic)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13847", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Prayer xp.", + "durability": null, + "name": "Brawling gloves (prayer)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13848", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Agility xp.", + "durability": null, + "name": "Brawling gloves (agility)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13849", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Woodcutting xp.", + "durability": null, + "name": "Brawling gloves (wc)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13850", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Firemaking xp.", + "durability": null, + "name": "Brawling gloves (fm)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13851", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Mining xp.", + "durability": null, + "name": "Brawling gloves (mining)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13852", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Hunting xp.", + "durability": null, + "name": "Brawling gloves (hunter)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13853", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Thieving xp.", + "durability": null, + "name": "Brawling gloves (thieving)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13854", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Smithing xp.", + "durability": null, + "name": "Brawling gloves (smithing)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13855", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Fishing xp.", + "durability": null, + "name": "Brawling gloves (fishing)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13856", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "Your brawling gloves are fragile and will disappear if you drop them. Are you sure you want to drop them?", + "shop_price": "50000", + "examine": "A pair of gloves that gives you bonus Cooking xp.", + "durability": null, + "name": "Brawling gloves (cooking)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13857", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1412812", + "name": "Zuriel's robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13858", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1412812", + "durability": null, + "name": "Zuriel's robe top", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13859" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1412812", + "name": "Zuriel's robe top (deg)", + "archery_ticket_price": "0", + "id": "13860", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "986668", + "name": "Zuriel's robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13861", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "986668", + "durability": null, + "name": "Zuriel's robe bottom", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13862" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "986668", + "name": "Zuriel's robe bottom (deg)", + "archery_ticket_price": "0", + "id": "13863", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "361542", + "name": "Zuriel's hood", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13864", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "361542", + "durability": null, + "name": "Zuriel's hood", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13865" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "150000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "361542", + "name": "Zuriel's hood (deg)", + "archery_ticket_price": "0", + "id": "13866", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "destroy_message": "Drop", + "grand_exchange_price": "2116989", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13867", + "stand_turn_anim": "1209", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10", + "requirements": "{6,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Zuriel's staff" + }, + { + "destroy_message": "Drop", + "requirements": "{6,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "2116989", + "durability": null, + "name": "Zuriel's staff", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13868" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "6", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "420", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "destroy_message": "Drop", + "grand_exchange_price": "2116989", + "stand_anim": "813", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13869", + "stand_turn_anim": "1209", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10", + "shop_price": "300000", + "durability": null, + "destroy": "true", + "weapon_interface": "1", + "render_anim": "28", + "attack_audios": "2555,0,0,0", + "name": "Zuriel's staff (deg)" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "926341", + "name": "Morrigan's leather body", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13870", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "926341", + "durability": null, + "name": "Morrigan's leather body", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13871" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "926341", + "name": "Morrigan's leather body (deg)", + "archery_ticket_price": "0", + "id": "13872", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop, Destroy after degrading.", + "grand_exchange_price": "510395", + "name": "Morrigan's leather chaps", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13873", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "destroy_message": "Drop, Destroy after degrading.", + "requirements": "{1,78}-{4,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "510395", + "durability": null, + "name": "Morrigan's leather chaps", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13874" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop, Destroy after degrading.", + "grand_exchange_price": "510395", + "name": "Morrigan's leather chaps (deg)", + "archery_ticket_price": "0", + "id": "13875", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "236411", + "name": "Morrigan's coif", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13876", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "236411", + "durability": null, + "name": "Morrigan's coif", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13877" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "150000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "236411", + "name": "Morrigan's coif (deg)", + "archery_ticket_price": "0", + "id": "13878", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "requirements": "{4,78}", + "shop_price": "4000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13879", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin(p)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13880", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin(p+)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13881", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "19944", + "name": "Morrigan's javelin(p++)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13882", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "4000", + "examine": "A vicious throwing axe.", + "has_special": "true", + "durability": null, + "destroy": "false", + "attack_speed": "5", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "9994", + "name": "Morrigan's throwing axe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13883", + "bonuses": "0,0,0,0,93,0,0,0,0,0,0,0,0,0,117" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1619096", + "name": "Statius's platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13884", + "bonuses": "5,5,7,-30,-10,154,145,121,-6,157,60,5,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1619096", + "durability": null, + "name": "Statius's platebody", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13885" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1619096", + "name": "Statius's platebody (deg)", + "archery_ticket_price": "0", + "id": "13886", + "bonuses": "5,5,7,-30,-10,154,145,121,-6,157,60,5,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop, Destroy once it has been degraded.", + "remove_sleeves": "true", + "grand_exchange_price": "2154168", + "name": "Vesta's chainbody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13887", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "destroy_message": "Drop, Destroy once it has been degraded.", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "2154168", + "durability": null, + "name": "Vesta's chainbody", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13888" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop, Destroy once it has been degraded.", + "remove_sleeves": "true", + "grand_exchange_price": "2154168", + "name": "Vesta's chainbody (deg)", + "archery_ticket_price": "0", + "id": "13889", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1735029", + "name": "Statius's platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13890", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1735029", + "durability": null, + "name": "Statius's platelegs", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13891" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1735029", + "name": "Statius's platelegs (deg)", + "archery_ticket_price": "0", + "id": "13892", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1860767", + "name": "Vesta's plateskirt", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13893", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "500000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1860767", + "durability": null, + "name": "Vesta's plateskirt", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13894" + }, + { + "requirements": "{1,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1860767", + "name": "Vesta's plateskirt (deg)", + "archery_ticket_price": "0", + "id": "13895", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1301986", + "name": "Statius's full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13896", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "250000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "1301986", + "durability": null, + "name": "Statius's full helm", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13897" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "150000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1301986", + "name": "Statius' full helm (deg)", + "archery_ticket_price": "0", + "id": "13898", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "10464249", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13899", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weapon_interface": "5", + "render_anim": "1426", + "attack_audios": "2500,2500,2517,2500", + "name": "Vesta's longsword" + }, + { + "destroy_message": "Drop", + "requirements": "{0,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "10464249", + "durability": null, + "name": "Vesta's longsword", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13900" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "has_special": "true", + "rare_item": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "10464249", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13901", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "true", + "weapon_interface": "5", + "render_anim": "1426", + "attack_audios": "2500,2500,2517,2500", + "name": "Vesta's longsword (deg)" + }, + { + "turn90cw_anim": "821", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "destroy_message": "Drop, Destroy once it has been degraded.", + "grand_exchange_price": "7424450", + "stand_anim": "808", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13902", + "stand_turn_anim": "823", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,114,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weapon_interface": "10", + "attack_audios": "2504,0,0,0", + "name": "Statius's warhammer" + }, + { + "destroy_message": "Drop, Destroy once it has been degraded.", + "requirements": "{0,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "grand_exchange_price": "7424450", + "durability": null, + "name": "Statius's warhammer", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13903" + }, + { + "turn90cw_anim": "821", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "6", + "turn180_anim": "820", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "395,395,395,395", + "destroy_message": "Drop, Destroy once it has been degraded.", + "grand_exchange_price": "7424450", + "stand_anim": "808", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13904", + "stand_turn_anim": "823", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,114,0,0,0", + "shop_price": "300000", + "durability": null, + "destroy": "true", + "weapon_interface": "10", + "render_anim": "1426", + "attack_audios": "2504,0,0,0", + "name": "Statius' warhammer (deg)" + }, + { + "turn90cw_anim": "1207", + "examine": "This item degrades in combat, and will turn to dust.", + "walk_anim": "1205", + "has_special": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "two_handed": "true", + "turn180_anim": "1206", + "absorb": "0,0,0", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "5264612", + "stand_anim": "813", + "tradeable": "true", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "13905", + "stand_turn_anim": "1209", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,122,0,0,0", + "requirements": "{0,78}", + "shop_price": "300000", + "durability": null, + "destroy": "false", + "weight": "4.2", + "weapon_interface": "14", + "render_anim": "28", + "name": "Vesta's spear" + }, + { + "requirements": "{0,78}", + "shop_price": "300000", + "examine": "This item degrades in combat, and will turn to dust.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "two_handed": "true", + "destroy_message": "Drop", + "grand_exchange_price": "5264612", + "name": "Vesta's spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13906" + }, + { + "requirements": "{0,78}", + "shop_price": "180000", + "examine": "This item degrades in combat, and will turn to dust.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "5264612", + "name": "Vesta's spear (deg)", + "archery_ticket_price": "0", + "id": "13907", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,122,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1897306", + "name": "Corrupt statius's platebody", + "archery_ticket_price": "0", + "id": "13908", + "bonuses": "5,5,7,-10,-30,154,145,121,-6,157,60,5,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1897306", + "durability": null, + "name": "Corrupt statius's platebody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13909" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "1897306", + "name": "Corrupt statius's platebody (deg)", + "archery_ticket_price": "0", + "id": "13910", + "bonuses": "5,5,7,-10,-30,154,145,121,-6,157,60,5,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "2546175", + "name": "Corrupt vesta's chainbody", + "archery_ticket_price": "0", + "id": "13911", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "2546175", + "durability": null, + "name": "Corrupt vesta's chainbody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13912" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,12", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "2546175", + "name": "Corrupt vesta's chainbody (deg)", + "archery_ticket_price": "0", + "id": "13913", + "bonuses": "5,7,7,-15,0,120,131,145,-3,140,60,6,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1734527", + "name": "Corrupt statius's platelegs", + "archery_ticket_price": "0", + "id": "13914", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1734527", + "durability": null, + "name": "Corrupt statius's platelegs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13915" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1734527", + "name": "Corrupt statius's platelegs (deg)", + "archery_ticket_price": "0", + "id": "13916", + "bonuses": "3,3,5,-21,-7,110,106,97,-4,121,30,3,0,0,0" + }, + { + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1942627", + "name": "Corrupt vesta's plateskirt", + "archery_ticket_price": "0", + "id": "13917", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1942627", + "durability": null, + "name": "Corrupt vesta's plateskirt", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13918" + }, + { + "requirements": "{1,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,8", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "1942627", + "name": "Corrupt vesta's plateskirt (deg)", + "archery_ticket_price": "0", + "id": "13919", + "bonuses": "3,5,5,-17,-4,86,100,112,-2,118,30,3,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1062835", + "name": "Corrupt statius's full helm", + "archery_ticket_price": "0", + "id": "13920", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "1062835", + "durability": null, + "name": "Corrupt statius's full helm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13921" + }, + { + "remove_head": "true", + "requirements": "{1,78}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "1062835", + "name": "Corrupt statius' full helm (deg)", + "archery_ticket_price": "0", + "id": "13922", + "bonuses": "3,3,4,-6,-2,65,70,63,-1,71,15,3,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "turn90cw_anim": "1207", + "examine": "This item degrades while worn, and will turn to dust.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "render_anim": "1426", + "equipment_slot": "3", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "3739998", + "name": "Corrupt vesta's longsword", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13923", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "turn90cw_anim": "1207", + "examine": "This item degrades while worn, and will turn to dust.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "1208", + "attack_speed": "4", + "turn180_anim": "1206", + "render_anim": "1426", + "attack_anims": "381,390,390,390", + "destroy_message": "Drop", + "grand_exchange_price": "3739998", + "name": "Corrupt vesta's longsword", + "tradeable": "true", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13924", + "stand_turn_anim": "823" + }, + { + "requirements": "{0,78}", + "shop_price": "75000", + "turn90cw_anim": "1207", + "examine": "This item degrades while worn, and will turn to dust.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "5", + "turn180_anim": "1206", + "absorb": "0,0,0", + "render_anim": "1426", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "3739998", + "name": "C. vesta's longsword (deg)", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "13925", + "stand_turn_anim": "823", + "bonuses": "106,121,-2,0,0,1,4,3,0,0,0,118,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "3033516", + "attack_audios": "395,395,395,395", + "name": "Corrupt statius's warhammer", + "archery_ticket_price": "0", + "id": "13926", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,114,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "3033516", + "durability": null, + "name": "Corrupt statius's warhammer", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13927" + }, + { + "requirements": "{0,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "8", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "3033516", + "name": "C. statius's warhammer (deg)", + "archery_ticket_price": "0", + "id": "13928", + "bonuses": "-4,-4,123,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "343474", + "name": "Corrupt vesta's spear", + "archery_ticket_price": "0", + "id": "13929", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,0,0,0,0" + }, + { + "requirements": "{0,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "destroy_message": "Drop", + "grand_exchange_price": "343474", + "name": "Corrupt vesta's spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13930" + }, + { + "requirements": "{0,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "343474", + "name": "Corrupt vesta's spear (deg)", + "archery_ticket_price": "0", + "id": "13931", + "bonuses": "133,113,120,0,0,18,21,21,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "253230", + "name": "Corrupt zuriel's robe top", + "archery_ticket_price": "0", + "id": "13932", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "253230", + "durability": null, + "name": "Corrupt zuriel's robe top", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13933" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "12,6,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "253230", + "name": "Corrupt zuriel's robe top (deg)", + "archery_ticket_price": "0", + "id": "13934", + "bonuses": "0,0,0,35,-10,63,45,74,35,0,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "121290", + "name": "Corrupt zuriel's robe bottom", + "archery_ticket_price": "0", + "id": "13935", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "121290", + "durability": null, + "name": "Corrupt zuriel's robe bottom", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13936" + }, + { + "requirements": "{1,78}-{6,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "8,4,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "121290", + "name": "Corrupt zuriel's robe bottom (deg)", + "archery_ticket_price": "0", + "id": "13937", + "bonuses": "0,0,0,25,-7,38,35,44,24,0,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "43778", + "name": "Corrupt zuriel's hood", + "archery_ticket_price": "0", + "id": "13938", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{6,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "43778", + "durability": null, + "name": "Corrupt zuriel's hood", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13939" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{6,78}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "43778", + "name": "Corrupt zuriel's hood (deg)", + "archery_ticket_price": "0", + "id": "13940", + "bonuses": "0,0,0,8,-2,20,16,22,8,0,15,0,0,0,0" + }, + { + "requirements": "{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "2555,0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "219418", + "attack_audios": "2555,0,0,0", + "name": "Corrupt zuriel's staff", + "archery_ticket_price": "0", + "id": "13941", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10" + }, + { + "destroy_message": "Drop", + "requirements": "{6,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "219418", + "durability": null, + "name": "Corrupt zuriel's staff", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13942" + }, + { + "requirements": "{6,78}", + "shop_price": "70000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "219418", + "name": "Corrupt zuriel's staff (deg)", + "archery_ticket_price": "0", + "id": "13943", + "bonuses": "13,-1,65,18,0,5,7,4,18,0,0,72,0,0,10" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "387212", + "name": "Corrupt morrigan's leather body", + "archery_ticket_price": "0", + "id": "13944", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "387212", + "durability": null, + "name": "Corrupt morrigan's leather body", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13945" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,12,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "387212", + "name": "Corrupt morrigan's leather body (deg)", + "archery_ticket_price": "0", + "id": "13946", + "bonuses": "0,0,0,-15,36,61,53,66,75,62,60,0,0,0,0" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "84592", + "name": "Corrupt morrigan's leather chaps", + "archery_ticket_price": "0", + "id": "13947", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "125000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "84592", + "durability": null, + "name": "Corrupt morrigan's leather chaps", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13948" + }, + { + "requirements": "{1,78}-{4,78}", + "shop_price": "75000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,8,4", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "84592", + "name": "Corrupt morrigan's leather chaps (deg)", + "archery_ticket_price": "0", + "id": "13949", + "bonuses": "0,0,0,-10,23,35,29,37,46,35,30,0,0,0,0" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "63502", + "name": "Corrupt morrigan's coif", + "archery_ticket_price": "0", + "id": "13950", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "requirements": "{1,78}-{4,78}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "63502", + "durability": null, + "name": "Corrupt morrigan's coif", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13951" + }, + { + "remove_head": "true", + "requirements": "{1,78}-{4,78}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "63502", + "name": "Corrupt morrigan's coif (deg)", + "archery_ticket_price": "0", + "id": "13952", + "bonuses": "0,0,0,-5,13,8,11,14,8,12,15,0,0,0,0" + }, + { + "requirements": "{4,78}", + "shop_price": "1000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "Corrupt morrigan's javelin", + "archery_ticket_price": "0", + "id": "13953", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "C. morrigan's javelin (p)", + "archery_ticket_price": "0", + "id": "13954", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "C. morrigan's javelin (p+)", + "archery_ticket_price": "0", + "id": "13955", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "10000", + "examine": "A vicious javelin.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "18", + "absorb": "0,0,0", + "render_anim": "1381", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "6752", + "name": "C. morrigan's javelin (p++)", + "archery_ticket_price": "0", + "id": "13956", + "bonuses": "0,0,0,0,105,0,0,0,0,0,0,0,0,0,145" + }, + { + "requirements": "{4,78}", + "shop_price": "1000", + "examine": "A vicious throwing axe.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "18", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "5388", + "name": "C. morrigan's throwing axe", + "archery_ticket_price": "0", + "id": "13957", + "bonuses": "0,0,0,0,93,0,0,0,0,0,0,0,0,0,117" + }, + { + "requirements": "{0,78}-{4,78}", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "168278", + "name": "Corrupt dragon chainbody", + "archery_ticket_price": "0", + "id": "13958", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "168278", + "durability": null, + "name": "Corrupt dragon chainbody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13959" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "168278", + "name": "Corrupt dragon chainbody (deg)", + "archery_ticket_price": "0", + "id": "13960", + "bonuses": "0,0,0,-15,0,81,93,98,-3,82,50,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "2,0,4", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "121835", + "name": "Corrupt dragon med helm", + "archery_ticket_price": "0", + "id": "13961", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "121835", + "durability": null, + "name": "Corrupt dragon med helm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13962" + }, + { + "remove_head": "true", + "shop_price": "36000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "2,0,4", + "equipment_slot": "0", + "destroy_message": "Drop", + "grand_exchange_price": "121835", + "name": "Corrupt dragon med helm (deg)", + "archery_ticket_price": "0", + "id": "13963", + "bonuses": "0,0,0,-3,-1,33,35,32,-1,34,10,0,0,0,0" + }, + { + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "5,0,11", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "79703", + "name": "Corrupt dragon sq shield", + "archery_ticket_price": "0", + "id": "13964", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "79703", + "durability": null, + "name": "Corrupt dragon sq shield", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13965" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "5,0,11", + "equipment_slot": "5", + "destroy_message": "Drop", + "grand_exchange_price": "79703", + "name": "Corrupt dragon sq shield (deg)", + "archery_ticket_price": "0", + "id": "13966", + "bonuses": "0,0,0,-6,-2,50,52,48,0,50,50,0,0,0,0" + }, + { + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Destroy", + "grand_exchange_price": "71066", + "name": "Corrupt dragon plateskirt", + "archery_ticket_price": "0", + "id": "13967", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "destroy_message": "Destroy", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "71066", + "durability": null, + "name": "Corrupt dragon plateskirt", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13968" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Destroy", + "grand_exchange_price": "71066", + "name": "Corrupt dragon plateskirt (deg)", + "archery_ticket_price": "0", + "id": "13969", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "87957", + "name": "Corrupt dragon platelegs", + "archery_ticket_price": "0", + "id": "13970", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "87957", + "durability": null, + "name": "Corrupt dragon platelegs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13971" + }, + { + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "7", + "destroy_message": "Drop", + "grand_exchange_price": "87957", + "name": "Corrupt dragon platelegs (deg)", + "archery_ticket_price": "0", + "id": "13972", + "bonuses": "0,0,0,-21,-7,68,66,63,-4,65,20,0,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "destroy_message": "Drop", + "grand_exchange_price": "332229", + "attack_audios": "2498,2498,2497,2498", + "name": "Corrupt dragon battleaxe", + "archery_ticket_price": "0", + "id": "13973", + "bonuses": "-2,70,65,0,0,0,0,0,-1,-1,0,85,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "120000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "4", + "render_anim": "2586", + "defence_anim": "397", + "attack_anims": "395,395,401,395", + "destroy_message": "Drop", + "grand_exchange_price": "332229", + "attack_audios": "2498,2498,2497,2498", + "name": "Corrupt dragon battleaxe", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13974", + "bonuses": "-2,70,65,0,0,0,0,0,0,-1,0,85,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "72000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "2.7", + "attack_speed": "6", + "weapon_interface": "2", + "absorb": "0,0,0", + "render_anim": "2586", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "395,395,401,395", + "destroy_message": "Drop", + "grand_exchange_price": "332229", + "attack_audios": "2498,2498,2497,2498", + "name": "C. dragon battleaxe (deg)", + "archery_ticket_price": "0", + "id": "13975", + "bonuses": "-2,70,65,0,0,0,0,0,-1,-1,0,85,0,0,0" + }, + { + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "grand_exchange_price": "33358", + "attack_audios": "2517,2517,2500,2517", + "name": "Corrupt dragon dagger", + "archery_ticket_price": "0", + "id": "13976", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "defence_anim": "397", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "grand_exchange_price": "33358", + "attack_audios": "2517,2517,2500,2517", + "name": "Corrupt dragon dagger", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13977" + }, + { + "shop_price": "18000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "396,396,395,396", + "destroy_message": "Drop", + "grand_exchange_price": "33358", + "attack_audios": "2517,2517,2500,2517", + "name": "C. dragon dagger (deg)", + "archery_ticket_price": "0", + "id": "13978", + "bonuses": "40,25,-4,1,0,0,0,0,1,0,0,40,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "100000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1928", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "338644", + "attack_audios": "2500,0,2517,0", + "name": "Corrupt dragon scimitar", + "archery_ticket_price": "0", + "id": "13979", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "338644", + "durability": null, + "name": "Corrupt dragon scimitar", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13980" + }, + { + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1928", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "338644", + "name": "C. dragon scimitar (deg)", + "archery_ticket_price": "0", + "id": "13981", + "bonuses": "8,67,-2,0,0,0,1,0,0,0,0,66,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "100000", + "ge_buy_limit": "10", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "207053", + "attack_audios": "2500,2500,2517,2500", + "name": "Corrupt dragon longsword", + "archery_ticket_price": "0", + "id": "13982", + "bonuses": "58,69,-2,0,0,0,3,2,1,0,0,71,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100000", + "examine": "This item degrades while worn, and will turn to dust.", + "grand_exchange_price": "207053", + "durability": null, + "name": "Corrupt dragon longsword", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "13983" + }, + { + "shop_price": "60000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1582", + "equipment_slot": "3", + "destroy_message": "Drop", + "grand_exchange_price": "207053", + "name": "C. dragon longsword (deg)", + "archery_ticket_price": "0", + "id": "13984", + "bonuses": "58,69,-2,0,0,0,3,2,1,0,0,71,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "50096", + "name": "Corrupt dragon mace", + "archery_ticket_price": "0", + "id": "13985", + "bonuses": "40,-2,60,1,0,0,0,0,0,0,0,55,0,5,0" + }, + { + "requirements": "{0,60}", + "shop_price": "50000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "4", + "defence_anim": "397", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "50096", + "name": "Corrupt dragon mace", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13986" + }, + { + "requirements": "{0,60}", + "shop_price": "30000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "weight": "1.8", + "attack_speed": "5", + "weapon_interface": "8", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "grand_exchange_price": "50096", + "name": "Corrupt dragon mace (deg)", + "archery_ticket_price": "0", + "id": "13987", + "bonuses": "40,-2,60,1,0,0,0,0,0,0,0,55,0,5,0" + }, + { + "shop_price": "40000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "920922", + "name": "Corrupt dragon spear", + "archery_ticket_price": "0", + "id": "13988", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "shop_price": "40000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "defence_anim": "2079", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "920922", + "name": "Corrupt dragon spear", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "13989" + }, + { + "shop_price": "24000", + "examine": "This item degrades while worn, and will turn to dust.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "two_handed": "true", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "28", + "defence_anim": "2079", + "equipment_slot": "3", + "attack_anims": "2080,2081,2082,2080", + "destroy_message": "Drop", + "grand_exchange_price": "920922", + "name": "Corrupt dragon spear (deg)", + "archery_ticket_price": "0", + "id": "13990", + "bonuses": "55,55,55,0,0,5,5,5,5,5,0,60,0,0,0" + }, + { + "destroy_message": "You can get another copy by searching bookshelves around RuneScape.", + "shop_price": "5", + "examine": "A book about the Wilderness.", + "durability": null, + "name": "Pvp worlds manual", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14056", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "25", + "examine": "A threat to dusty corners everywhere.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "8", + "absorb": "0,0,0", + "render_anim": "1072", + "equipment_slot": "3", + "destroy_message": "You can obtain another by talking to Maggie the witch.", + "name": "Broomstick", + "archery_ticket_price": "0", + "id": "14057", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you drop the goulash, it will be destroyed. You can get some more by dipping a bowl into Maggie's cauldron.", + "shop_price": "2", + "examine": "What a curious and ghoulish smell!", + "durability": null, + "name": "Goulash", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14058", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another flask of magic unguent from the chest in Betty's basement.", + "shop_price": "2", + "examine": "Purple and pungent.", + "durability": null, + "name": "Magic unguent", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14061", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another flask of broom ointment from Hetty in Rimmington.", + "shop_price": "2", + "examine": "To be used on brooms.", + "durability": null, + "name": "Broom ointment", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14062", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you release this newt, you can get another from the crate in Hetty's basement in Rimmington.", + "shop_price": "5", + "examine": "A newt from Hetty's basement.", + "durability": null, + "name": "Newt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14064", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You can get another newt label from Gus in Hetty's basement in Rimmington.", + "shop_price": "1", + "examine": "A label for a shipping crate.", + "durability": null, + "name": "Newt label", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14065", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another toad label from Gus in Hetty's basement in Rimmington.", + "shop_price": "1", + "examine": "A label for a shipping crate.", + "durability": null, + "name": "Toad label", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14066", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another newt-and-toad label from Gus in Hetty's basement in Rimmington.", + "shop_price": "1", + "examine": "A label for a shipping crate.", + "durability": null, + "name": "Newts and toads label", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14067", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can obtain another wand from the chest in Betty's basement.", + "shop_price": "15", + "examine": "Warm to the touch.", + "durability": null, + "name": "Betty's wand", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14068", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you destroy this item, you can get another from Lottie in Betty's basement.", + "shop_price": "2", + "examine": "What a view!", + "durability": null, + "name": "Magic slate", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14069", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you release this creature, you will have to restart the puzzle in Betty's basement.", + "shop_price": "1", + "examine": "Desert dweller.", + "durability": null, + "name": "Reptile", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14070", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "If you release this creature, you will have to restart the puzzle in Betty's basement.", + "shop_price": "1", + "examine": "Bleak and beaky.", + "durability": null, + "name": "Blackbird", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14071", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "An annoying flappy thing.", + "durability": null, + "name": "Bat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14072", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "It's an extremely small brown spider, probably very poisonous.", + "durability": null, + "name": "Spider", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14073", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "A popular dwarven delicacy.", + "durability": null, + "name": "Rat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14074", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "durability": null, + "name": "Snail", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14075", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "15", + "examine": "The height of warlock fashion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You can get another warlock top from Diango in Draynor Village.", + "remove_sleeves": "true", + "name": "Warlock top", + "archery_ticket_price": "0", + "id": "14076", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another set of warlock legs from Diango in Draynor Village.", + "shop_price": "15", + "examine": "Tattered but trendy.", + "durability": null, + "name": "Warlock legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14077", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "shop_price": "15", + "examine": "The height of witchly fashion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You can get another witch top from Diango in Draynor.", + "remove_sleeves": "true", + "name": "Witch top", + "archery_ticket_price": "0", + "id": "14078", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another witch top from Diango in Draynor.", + "shop_price": "15", + "examine": "Tattered but trendy.", + "durability": null, + "name": "Witch skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14079", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another witch cloak from Diango in Draynor.", + "shop_price": "15", + "examine": "Ragged but rugged.", + "durability": null, + "name": "Witch cloak", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14080", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "destroy_message": "You can get another warlock cloak from Diango in Draynor Village.", + "shop_price": "15", + "examine": "Ragged but rugged.", + "durability": null, + "name": "Warlock cloak", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14081", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "A sticky orb of popped corn.", + "durability": null, + "name": "Popcorn ball", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14082", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "Chocolatey goodness.", + "durability": null, + "name": "Chocolate drop", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14083", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "Sugary bliss.", + "durability": null, + "name": "Wrapped candy", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14084", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1", + "examine": "An urgent communiqu?? revealing important information.", + "durability": null, + "name": "Armadyl communiqu?", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14085", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "15", + "examine": "The height of witchly fashion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "You can get another witch top from Diango in Draynor.", + "remove_sleeves": "true", + "name": "Witch top", + "archery_ticket_price": "0", + "id": "14086", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can get another witch top from Diango in Draynor.", + "shop_price": "15", + "examine": "Tattered but trendy.", + "durability": null, + "name": "Witch skirt", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14087", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another witch cloak from Diango in Draynor.", + "shop_price": "15", + "examine": "Ragged but rugged.", + "durability": null, + "name": "Witch cloak", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14088", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Pet kitten", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14089", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Pet cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14090", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Lazy cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14091", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Overgrown cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14092", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Wily cat", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14093", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "43333", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Sacred clay platebody", + "archery_ticket_price": "0", + "id": "14094", + "bonuses": "0,0,0,-30,-10,82,80,72,-6,80,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "42667", + "examine": "The sacred clay bottom has transformed into spiked, platemail legs.", + "durability": null, + "name": "Sacred clay platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14095", + "absorb": "2,0,4", + "bonuses": "0,0,0,-21,-7,51,49,47,-4,49,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "shop_price": "23467", + "examine": "The sacred clay hat has transformed into a spined helm.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "1,0,3", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Sacred clay helm", + "archery_ticket_price": "0", + "id": "14096", + "bonuses": "0,0,0,-6,-2,30,32,27,-1,30,7,0,0,0,0" + }, + { + "shop_price": "17066", + "examine": "The sacred clay weapon has transformed into a sharp scimitar.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay scimitar", + "archery_ticket_price": "0", + "id": "14097", + "bonuses": "7,45,-2,0,0,0,1,0,0,0,0,44,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "This can turn into a variety of tools.", + "durability": null, + "name": "Volatile clay tool", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14098", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your volatile tool wants to mine some rocks.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Volatile clay pickaxe", + "archery_ticket_price": "0", + "id": "14099", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your volatile tool wants to cut some wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Volatile clay hatchet", + "archery_ticket_price": "0", + "id": "14100", + "bonuses": "-2,26,24,0,0,0,1,0,0,0,0,29,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to spear some big fish.", + "durability": null, + "name": "Volatile clay harpoon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14101", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "21333", + "examine": "Your volatile tool wants to catch some butterflies.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Volatile clay butterfly net", + "archery_ticket_price": "0", + "id": "14102", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to make some bows or arrows.", + "durability": null, + "name": "Volatile clay fletching knife", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14103", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to work metal or build furniture.", + "durability": null, + "name": "Volatile clay hammer", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14104", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your volatile tool wants to make some leather armour.", + "durability": null, + "name": "Volatile clay needle", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14105", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "This can turn into a variety of tools.", + "durability": null, + "name": "Proto-tool", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14106", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a pickaxe.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay pickaxe", + "archery_ticket_price": "0", + "id": "14107", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a hatchet.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay hatchet", + "archery_ticket_price": "0", + "id": "14108", + "bonuses": "-2,4,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a harpoon.", + "durability": null, + "name": "Sacred clay harpoon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14109", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "shop_price": "1", + "examine": "Your sacred clay tool has transformed into a butterfly net.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "5", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay butterfly net", + "archery_ticket_price": "0", + "id": "14110", + "bonuses": "4,-2,2,0,0,0,1,0,0,0,0,5,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "The sacred clay has transformed into a knife.", + "durability": null, + "name": "Sacred clay fletching knife", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14111", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "Your sacred clay tool has transformed into a hammer.", + "durability": null, + "name": "Sacred clay hammer", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14112", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "21333", + "examine": "The sacred clay has transformed into a needle.", + "durability": null, + "name": "Sacred clay needle", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14113", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "43333", + "examine": "The sacred clay top has transformed into a heavy, magical robe.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,3,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Sacred clay robe top", + "archery_ticket_price": "0", + "id": "14114", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "42667", + "examine": "The sacred clay bottom has transformed into a heavy, magical robe.", + "durability": null, + "name": "Sacred clay robe bottom", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14115", + "absorb": "4,2,0", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "Drop", + "shop_price": "23467", + "examine": "The sacred clay hat has transformed into a wizard hat.", + "durability": null, + "name": "Sacred clay hat", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14116", + "absorb": "3,1,0", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0", + "equipment_slot": "0" + }, + { + "shop_price": "17066", + "examine": "The sacred clay weapon has transformed into a magical staff.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay staff", + "archery_ticket_price": "0", + "id": "14117", + "bonuses": "10,-1,40,10,0,2,3,1,10,0,0,50,0,0,0" + }, + { + "shop_price": "43333", + "examine": "The sacred clay top has transformed into a leather body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,6,3", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Sacred clay body", + "archery_ticket_price": "0", + "id": "14118", + "bonuses": "0,0,0,-15,15,40,32,45,20,40,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "42667", + "examine": "The sacred clay bottom has been transformed into a set of chaps.", + "durability": null, + "name": "Sacred clay chaps", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14119", + "absorb": "0,4,2", + "bonuses": "0,0,0,-10,8,22,16,24,8,22,15,0,0,0,0", + "equipment_slot": "7" + }, + { + "remove_head": "true", + "shop_price": "23467", + "examine": "The sacred clay hat has transformed into a coif.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,3,1", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Sacred clay coif", + "archery_ticket_price": "0", + "id": "14120", + "bonuses": "0,0,0,-1,2,4,6,8,4,4,5,0,0,0,0" + }, + { + "shop_price": "17066", + "examine": "The sacred clay weapon has transformed into a bow.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Sacred clay bow", + "archery_ticket_price": "0", + "id": "14121", + "bonuses": "0,0,0,0,47,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14122", + "bonuses": "10,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14123" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14124", + "bonuses": "15,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14125" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14126", + "bonuses": "20,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14127" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14128", + "bonuses": "25,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14129" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "4", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Pickaxe (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14130", + "bonuses": "30,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become hard enough to chip stone.", + "durability": null, + "name": "Pickaxe (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14131" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14132", + "bonuses": "0,10,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14133" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14134", + "bonuses": "0,15,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14135" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14136", + "bonuses": "0,20,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14137" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14138", + "bonuses": "0,25,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14139" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "2", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Hatchet (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14140", + "bonuses": "0,30,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become sharp enough to cut wood.", + "durability": null, + "name": "Hatchet (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14141" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14142", + "bonuses": "10,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14143" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14144", + "bonuses": "15,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14145" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14146", + "bonuses": "20,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14147" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14148", + "bonuses": "25,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14149" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Harpoon (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14150", + "bonuses": "30,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become long enough to reach the depths of pools.", + "durability": null, + "name": "Harpoon (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14151" + }, + { + "shop_price": "30", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14152", + "bonuses": "0,0,10,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14153" + }, + { + "shop_price": "60", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14154", + "bonuses": "0,0,15,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14155" + }, + { + "shop_price": "90", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14156", + "bonuses": "0,0,20,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14157" + }, + { + "shop_price": "120", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14158", + "bonuses": "0,0,25,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14159" + }, + { + "shop_price": "150", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "14", + "absorb": "0,0,0", + "render_anim": "158", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Butterfly net (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14160", + "bonuses": "0,0,30,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has become light enough to swing at floating shards.", + "durability": null, + "name": "Butterfly net (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14161" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14162", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14163" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14164", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14165" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14166", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14167" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14168", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14169" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14170", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into something bland, but edible.", + "durability": null, + "name": "Food (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14171" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14172", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14173" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14174", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14175" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14176", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14177" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14178", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14179" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14180", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The clay has transformed into an expandable wall.", + "durability": null, + "name": "Barrier (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14181" + }, + { + "destroy_message": "Drop", + "shop_price": "15", + "examine": "Very low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14182", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "15", + "examine": "Very low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14183" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "Low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14184", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "Low quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14185" + }, + { + "destroy_message": "Drop", + "shop_price": "45", + "examine": "Medium quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14186", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "45", + "examine": "Medium quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14187" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "High quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14188", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "High quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14189" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Very high quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14190", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "75", + "examine": "Very high quality sacred clay.", + "durability": null, + "name": "Sacred clay (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14191" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14192", + "bonuses": "0,0,0,0,55,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14193" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14194", + "bonuses": "0,0,0,0,90,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14195" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14196", + "bonuses": "0,0,0,0,135,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14197" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14198", + "bonuses": "0,0,0,0,180,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14199" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "two_handed": "true", + "weapon_interface": "16", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Bow (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14200", + "bonuses": "0,0,0,0,225,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a wood-like substance.", + "durability": null, + "name": "Bow (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14201" + }, + { + "shop_price": "2", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14202", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,15" + }, + { + "shop_price": "4", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14203", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30" + }, + { + "shop_price": "6", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14204", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,45" + }, + { + "shop_price": "8", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14205", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60" + }, + { + "shop_price": "10", + "examine": "The Sacred Clay has transformed into a wood-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "13", + "destroy_message": "Drop", + "name": "Arrows (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14206", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75" + }, + { + "shop_price": "150", + "examine": "3 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14207", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "3 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14208" + }, + { + "shop_price": "120", + "examine": "4 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14210" + }, + { + "shop_price": "90", + "examine": "3 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14211", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14212" + }, + { + "shop_price": "60", + "examine": "2 doses of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14213", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14214" + }, + { + "shop_price": "30", + "examine": "1 dose of Prayer restore potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Prayer potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14215", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Prayer restore potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Prayer potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14216" + }, + { + "shop_price": "150", + "examine": "4 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14217", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "4 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14218" + }, + { + "shop_price": "120", + "examine": "4 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14219", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14220" + }, + { + "shop_price": "90", + "examine": "3 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14221", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14222" + }, + { + "shop_price": "60", + "examine": "2 doses of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14223", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14224" + }, + { + "shop_price": "30", + "examine": "1 dose of energy potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Energy potion (1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14225", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of energy potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Energy potion (1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14226" + }, + { + "shop_price": "150", + "examine": "5 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14227", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14228" + }, + { + "shop_price": "120", + "examine": "4 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14229", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14230" + }, + { + "shop_price": "90", + "examine": "3 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14231", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14232" + }, + { + "shop_price": "60", + "examine": "2 doses of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14233", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14234" + }, + { + "shop_price": "30", + "examine": "1 dose of super Attack potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super attack(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14235", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of super Attack potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super attack(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14236" + }, + { + "shop_price": "150", + "examine": "5 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14237", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14238" + }, + { + "shop_price": "120", + "examine": "4 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14239", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14240" + }, + { + "shop_price": "90", + "examine": "3 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14241", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14242" + }, + { + "shop_price": "60", + "examine": "2 doses of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14243", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14244" + }, + { + "shop_price": "30", + "examine": "1 dose of super Strength potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Super strength(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14245", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of super Strength potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Super strength(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14246" + }, + { + "shop_price": "150", + "examine": "4 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14247", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14248" + }, + { + "shop_price": "120", + "examine": "4 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14249", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14250" + }, + { + "shop_price": "90", + "examine": "3 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14251", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14252" + }, + { + "shop_price": "60", + "examine": "2 doses of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14253", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14254" + }, + { + "shop_price": "30", + "examine": "1 dose of ranging potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Ranging potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14255", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of ranging potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Ranging potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14256" + }, + { + "shop_price": "150", + "examine": "3 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14257", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "3 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14258" + }, + { + "shop_price": "120", + "examine": "4 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14259", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14260" + }, + { + "shop_price": "90", + "examine": "3 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14261", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14262" + }, + { + "shop_price": "60", + "examine": "2 doses of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14263", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14264" + }, + { + "shop_price": "30", + "examine": "1 dose of Defence Potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Defence potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14265", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Defence Potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Defence potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14266" + }, + { + "shop_price": "150", + "examine": "4 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14267", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "5 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14268" + }, + { + "shop_price": "120", + "examine": "4 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14269", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14270" + }, + { + "shop_price": "90", + "examine": "3 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14271", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14272" + }, + { + "shop_price": "60", + "examine": "2 doses of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14273", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14274" + }, + { + "shop_price": "30", + "examine": "1 dose of Magic potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Magic potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14275", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Magic potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Magic potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14276" + }, + { + "shop_price": "150", + "examine": "3 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14277", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "3 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14278" + }, + { + "shop_price": "120", + "examine": "4 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14279", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "4 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14280" + }, + { + "shop_price": "90", + "examine": "3 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14281", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "3 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14282" + }, + { + "shop_price": "60", + "examine": "2 doses of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14283", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "2 doses of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14284" + }, + { + "shop_price": "30", + "examine": "1 dose of Summoning potion.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "4", + "name": "Summoning potion(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14285", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "1 dose of Summoning potion.", + "grand_exchange_price": "4", + "durability": null, + "name": "Summoning potion(1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14286" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14287", + "bonuses": "0,55,0,0,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14288" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14289", + "bonuses": "0,90,0,0,0,0,0,0,0,0,0,30,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14290" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14291", + "bonuses": "0,145,0,0,0,0,0,0,0,0,0,45,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14292" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14293", + "bonuses": "0,180,0,0,0,0,0,0,0,0,0,60,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14294" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "weapon_interface": "6", + "absorb": "0,0,0", + "render_anim": "1629", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "Drop", + "attack_audios": "2500,0,2517,0", + "name": "Scimitar (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14295", + "bonuses": "0,225,0,0,0,0,0,0,0,0,0,75,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a vicious, curved sword.", + "durability": null, + "name": "Scimitar (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14296" + }, + { + "shop_price": "30", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14297", + "bonuses": "41,0,0,0,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14298" + }, + { + "shop_price": "60", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14299", + "bonuses": "68,0,0,0,0,0,0,0,0,0,0,30,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14300" + }, + { + "shop_price": "90", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14301", + "bonuses": "101,0,0,0,0,0,0,0,0,0,0,45,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14302" + }, + { + "shop_price": "120", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14303", + "bonuses": "135,0,0,0,0,0,0,0,0,0,0,60,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14304" + }, + { + "shop_price": "150", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "destroy": "true", + "attack_speed": "3", + "weapon_interface": "5", + "absorb": "0,0,0", + "equipment_slot": "3", + "attack_anims": "400,400,401,400", + "destroy_message": "Drop", + "attack_audios": "2517,2517,2500,2517", + "name": "Dagger (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14305", + "bonuses": "168,0,0,0,0,0,0,0,0,0,0,75,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay transformed into a sharp dagger.", + "durability": null, + "name": "Dagger (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14306" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14307", + "bonuses": "0,0,83,0,0,0,0,0,0,0,0,15,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14308" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14309", + "bonuses": "0,0,135,0,0,0,0,0,0,0,0,30,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14310" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14311", + "bonuses": "0,0,202,0,0,0,0,0,0,0,0,45,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14312" + }, + { + "shop_price": "120", + "examine": "The Sacred Clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14313", + "bonuses": "0,0,270,0,0,0,0,0,0,0,0,60,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The Sacred Clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14314" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "destroy": "true", + "attack_speed": "6", + "weapon_interface": "10", + "absorb": "0,0,0", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Warhammer (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14315", + "bonuses": "0,0,338,0,0,0,0,0,0,0,0,75,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a heavy warhammer.", + "durability": null, + "name": "Warhammer (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14316" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14317", + "bonuses": "0,0,0,0,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe top (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14318" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14319", + "bonuses": "0,0,0,0,0,0,0,0,40,0,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14320" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14321", + "bonuses": "0,0,0,0,0,0,0,0,60,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14322" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14323", + "bonuses": "0,0,0,0,0,0,0,0,80,0,80,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14324" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Robe top (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14325", + "bonuses": "0,0,0,0,0,0,0,0,100,0,100,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like substance.", + "durability": null, + "name": "Robe top (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14326" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14327", + "bonuses": "0,0,0,0,0,0,0,0,15,0,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14328" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14329", + "bonuses": "0,0,0,0,0,0,0,0,30,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14330" + }, + { + "shop_price": "90", + "examine": "The sacred clay transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14331", + "bonuses": "0,0,0,0,0,0,0,0,45,0,45,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14332" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14333", + "bonuses": "0,0,0,0,0,0,0,0,60,0,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14334" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Robe bottom (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14335", + "bonuses": "0,0,0,0,0,0,0,0,75,0,75,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Robe bottom (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14336" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14337", + "bonuses": "0,0,0,0,0,0,0,0,10,0,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14338" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14339", + "bonuses": "0,0,0,0,0,0,0,0,20,0,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14340" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14341", + "bonuses": "0,0,0,0,0,0,0,0,30,0,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14342" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14343", + "bonuses": "0,0,0,0,0,0,0,0,40,0,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14344" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Hat (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14345", + "bonuses": "0,0,0,0,0,0,0,0,50,0,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a light, cloth-like material.", + "durability": null, + "name": "Hat (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14346" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14347", + "bonuses": "0,0,0,-30,-10,20,20,20,-10,10,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platebody (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14348" + }, + { + "shop_price": "60", + "examine": "The sacred clay transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14349", + "bonuses": "0,0,0,-30,-10,40,40,40,-10,20,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay transformed into a hard, metallic substance.", + "durability": null, + "name": "Platebody (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14350" + }, + { + "shop_price": "90", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14351", + "bonuses": "0,0,0,-30,-10,60,60,60,-10,30,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "name": "Platebody (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14352" + }, + { + "shop_price": "120", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14353", + "bonuses": "0,0,0,-30,-10,80,80,80,-10,40,80,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "name": "Platebody (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14354" + }, + { + "shop_price": "150", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Platebody (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14355", + "bonuses": "0,0,0,-30,-10,100,100,100,-10,50,100,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay top has transformed into a spiked, platemail body.", + "durability": null, + "name": "Platebody (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14356" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14357", + "bonuses": "0,0,0,-30,-10,15,15,15,-10,7,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14358" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14359", + "bonuses": "0,0,0,-30,-10,30,30,30,-10,15,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14360" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14361", + "bonuses": "0,0,0,-30,-10,45,45,45,-10,23,45,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14362" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14363", + "bonuses": "0,0,0,-30,-10,60,60,60,-10,30,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14364" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Platelegs (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14365", + "bonuses": "0,0,0,-30,-10,75,75,75,-10,37,75,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Platelegs (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14366" + }, + { + "remove_head": "true", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14367", + "bonuses": "0,0,0,-30,-10,10,10,10,-10,5,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14368" + }, + { + "remove_head": "true", + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14369", + "bonuses": "0,0,0,-30,-10,20,20,20,-10,10,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14370" + }, + { + "remove_head": "true", + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14371", + "bonuses": "0,0,0,-30,-10,30,30,30,-10,15,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14372" + }, + { + "remove_head": "true", + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14373", + "bonuses": "0,0,0,-30,-10,40,40,40,-10,20,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14374" + }, + { + "remove_head": "true", + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Helm (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14375", + "bonuses": "0,0,0,-30,-10,50,50,50,-10,25,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a hard, metallic substance.", + "durability": null, + "name": "Helm (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14376" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14377", + "bonuses": "0,0,0,55,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "name": "Staff (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14378" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14379", + "bonuses": "0,0,0,90,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a light weight, magical stick.", + "durability": null, + "name": "Staff (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14380" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14381", + "bonuses": "0,0,0,135,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "name": "Staff (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14382" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14383", + "bonuses": "0,0,0,180,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "name": "Staff (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14384" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "destroy": "true", + "attack_speed": "5", + "weapon_interface": "1", + "absorb": "0,0,0", + "render_anim": "28", + "equipment_slot": "3", + "destroy_message": "Drop", + "name": "Staff (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14385", + "bonuses": "0,0,0,225,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a lightweight, magical stick.", + "durability": null, + "name": "Staff (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14386" + }, + { + "durability": null, + "name": "Cape", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14387", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "durability": null, + "name": "Cape", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14389", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,1,1,0,2,0,0,0,0,0", + "equipment_slot": "1" + }, + { + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14391", + "bonuses": "0,0,0,0,0,10,10,10,10,20,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14392" + }, + { + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14393", + "bonuses": "0,0,0,0,0,20,20,20,20,40,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14394" + }, + { + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14395", + "bonuses": "0,0,0,0,0,30,30,30,30,60,60,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14396" + }, + { + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14397", + "bonuses": "0,0,0,0,0,40,40,40,40,80,80,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14398" + }, + { + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "4", + "destroy_message": "Drop", + "remove_sleeves": "true", + "name": "Leather body (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14399", + "bonuses": "0,0,0,0,0,50,50,50,50,100,100,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible mesh.", + "durability": null, + "name": "Leather body (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14400" + }, + { + "shop_price": "30", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14401", + "bonuses": "0,0,0,0,0,7,7,7,0,15,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14402" + }, + { + "shop_price": "60", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14403", + "bonuses": "0,0,0,0,0,15,15,15,0,30,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14404" + }, + { + "shop_price": "90", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14405", + "bonuses": "0,0,0,0,0,23,23,23,0,45,45,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14406" + }, + { + "shop_price": "120", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14407", + "bonuses": "0,0,0,0,0,30,30,30,0,60,60,0,0,1,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14408" + }, + { + "shop_price": "150", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "7", + "destroy_message": "Drop", + "name": "Chaps (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14409", + "bonuses": "0,0,0,0,0,37,37,37,0,75,75,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay transformed into a flexible mesh.", + "durability": null, + "name": "Chaps (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14410" + }, + { + "remove_head": "true", + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14411", + "bonuses": "0,0,0,0,0,5,5,5,0,10,10,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14412" + }, + { + "remove_head": "true", + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14413", + "bonuses": "0,0,0,0,0,10,10,10,0,20,20,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14414" + }, + { + "remove_head": "true", + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14415", + "bonuses": "0,0,0,0,0,15,15,15,0,30,30,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14416" + }, + { + "remove_head": "true", + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14417", + "bonuses": "0,0,0,0,0,20,20,20,0,40,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14418" + }, + { + "remove_head": "true", + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Coif (class 5)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14419", + "bonuses": "0,0,0,0,0,25,25,25,0,50,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "The sacred clay has transformed into a flexible, protective mesh.", + "durability": null, + "name": "Coif (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14420" + }, + { + "shop_price": "30", + "durability": null, + "name": "Clay deposit scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14421", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14422", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 1)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14423" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14424", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "60", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 2)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14425" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14426", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "90", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 3)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14427" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14428", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "120", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 4)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14429" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14430", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "150", + "examine": "This scroll will make your familiar deposit its items at your base.", + "durability": null, + "name": "Sacred clay pouch (class 5)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14431" + }, + { + "durability": null, + "name": "Null sacred clay", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14432", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "5", + "examine": "A vine flower grown through magical means.", + "durability": null, + "name": "Vine flower", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14458", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You caught this broav west of the Hunting Expert's home. You can catch another one with a trap baited with mort Myre Fungus.", + "examine": "Its unconscious, poor thing.", + "durability": null, + "name": "Unconscious broav", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14459", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got these clothes from a washerman who lives near the Khazard battle arena.", + "shop_price": "10", + "examine": "Some dirty clothes that apparently belong to Movario.", + "durability": null, + "name": "Dirty laundry", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14460", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "You found this basket in Movario's base.", + "examine": "A receptacle for rubbish.", + "durability": null, + "name": "Waste-paper basket", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14461", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this key attached to the bottom of the bin in Movario's base.", + "examine": "A superbly made key with a fine ruby inserted into it. (While Guthix Sleeps)", + "durability": null, + "name": "Ruby key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14462", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found these notes in Movario's basement.", + "examine": "A collection of notes made by an absent-minded fellow.", + "durability": null, + "name": "Notes on pressure", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14463", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found these notes loosely piled up on ", + "examine": "A loose-leaf collection of research notes, found on Movario's study desk.", + "durability": null, + "name": "Movario's notes (volume 1)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14464", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found these notes in Movario's bedchest, in his base of operations near the Khazard Battlefield.", + "examine": "A loose-leaf collection of research notes, found in Movario's bed chest.", + "durability": null, + "name": "Movario's notes (volume 2)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14465", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A 1kg weight.", + "durability": null, + "name": "Weight (1kg)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14466", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A 2kg weight.", + "durability": null, + "name": "Weight (2kg)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14467", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "examine": "A 5kg weight.", + "durability": null, + "name": "Weight (5kg)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14468", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can find another under the bed on the top level of Movario's base", + "examine": "The loop half of a strange key.", + "durability": null, + "name": "Strange key loop", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14469", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You can find another under the bed on the top level of Movario's base", + "examine": "The teeth half of a strange key.", + "durability": null, + "name": "Strange key teeth", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14470", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fused together two parts of a Dragonkin key which you obtained from Movario's base.", + "examine": "The completed dragonkin key.", + "durability": null, + "name": "Dragonkin key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14471", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "30000", + "examine": "A badly damaged lump of dragon metal.", + "durability": null, + "rare_item": "true", + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "955683", + "name": "Ruined dragon armour lump", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14472", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30000", + "examine": "A badly damaged lump of dragon metal.", + "grand_exchange_price": "955683", + "durability": null, + "name": "Ruined dragon armour lump", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14473" + }, + { + "shop_price": "30000", + "examine": "A badly damaged slice of dragon metal.", + "durability": null, + "rare_item": "true", + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "1761141", + "name": "Ruined dragon armour slice", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14474", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30000", + "examine": "A badly damaged slice of dragon metal.", + "grand_exchange_price": "1761141", + "durability": null, + "name": "Ruined dragon armour slice", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14475" + }, + { + "shop_price": "30000", + "examine": "A badly damaged shard of dragon metal.", + "durability": null, + "rare_item": "true", + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "1090493", + "name": "Ruined dragon armour shard", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14476", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "30000", + "examine": "A badly damaged shard of dragon metal.", + "grand_exchange_price": "1090493", + "durability": null, + "name": "Ruined dragon armour shard", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14477" + }, + { + "destroy_message": "Drop", + "examine": "A very powerful Smithing hammer.", + "durability": null, + "name": "Blast fusion hammer", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14478", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "requirements": "{1,60}", + "shop_price": "1760000", + "examine": "Provides excellent protection.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "equipment_slot": "4", + "lendable": "true", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "4453643", + "name": "Dragon platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14479", + "bonuses": "0,0,0,-30,0,109,107,97,-6,106,50,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1760000", + "examine": "Provides excellent protection.", + "grand_exchange_price": "4453643", + "durability": null, + "name": "Dragon platebody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14480" + }, + { + "requirements": "{1,60}", + "examine": "Provides excellent protection.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "4,0,9", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "4453643", + "name": "Dragon platebody", + "archery_ticket_price": "0", + "id": "14481", + "bonuses": "0,0,0,-30,0,109,107,97,-6,106,50,0,0,0,0" + }, + { + "requirements": "{0,60}", + "shop_price": "67500", + "examine": "A set of fighting claws.", + "has_special": "true", + "rare_item": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "absorb": "0,0,0", + "equip_audio": "1003", + "defence_anim": "397", + "render_anim": "2583", + "equipment_slot": "3", + "attack_anims": "393,393,1067,393", + "destroy_message": "Drop", + "lendable": "true", + "grand_exchange_price": "1472441", + "tradeable": "true", + "name": "Dragon claws", + "archery_ticket_price": "0", + "id": "14484", + "bonuses": "41,57,-4,0,0,13,26,7,0,0,0,56,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "67500", + "examine": "A set of fighting claws.", + "grand_exchange_price": "1472441", + "durability": null, + "name": "Dragon claws", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "two_handed": "true", + "id": "14485" + }, + { + "requirements": "{0,60}", + "examine": "A set of fighting claws.", + "has_special": "true", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "two_handed": "true", + "weapon_interface": "9", + "absorb": "0,0,0", + "equip_audio": "1003", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "1472441", + "name": "Dragon claws", + "archery_ticket_price": "0", + "id": "14486", + "bonuses": "41,57,-4,0,0,13,26,7,0,0,0,56,0,0,0" + }, + { + "destroy_message": "You grew this herb by planting an enriched snapdragon seed in the special herb patch on top of Falador castle.", + "examine": "An enriched snapdragon herb.", + "durability": null, + "name": "Enriched snapdragon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14487", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You made this serum by mixing an enriched snapdragon into one of Betty's truth serums.", + "examine": "Fluid sloshes innocently in this vial.", + "durability": null, + "name": "Super truth serum", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14488", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You gained this item by having papyrus and charcoal in your inventory while interrogating a spy in Falador castle.", + "examine": "A sketch of the suspect known as Dark Squall.", + "durability": null, + "name": "Suspect sketch", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14489", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,40}", + "shop_price": "65000", + "examine": "These look pretty heavy, but very elite.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "2,0,4", + "equipment_slot": "7", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "41559", + "name": "Elite black platelegs", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14490", + "bonuses": "0,0,0,-14,-6,52,50,25,-1,49,15,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "65000", + "examine": "These look pretty heavy, but very elite.", + "grand_exchange_price": "41559", + "durability": null, + "name": "Elite black platelegs", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14491" + }, + { + "requirements": "{1,40}", + "shop_price": "64000", + "examine": "Provides excellent protection, and is elite.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "3,0,6", + "equipment_slot": "4", + "lendable": "true", + "destroy_message": "Drop", + "remove_sleeves": "true", + "grand_exchange_price": "38275", + "name": "Elite black platebody", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14492", + "bonuses": "0,0,0,-20,-8,80,85,40,-2,80,40,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "64000", + "examine": "Provides excellent protection, and is elite.", + "grand_exchange_price": "38275", + "durability": null, + "name": "Elite black platebody", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14493" + }, + { + "remove_head": "true", + "requirements": "{1,40}", + "shop_price": "35200", + "examine": "A full face helmet, and elite.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "1,0,3", + "remove_beard": "true", + "equipment_slot": "0", + "lendable": "true", + "destroy_message": "Drop", + "grand_exchange_price": "30542", + "name": "Elite black full helm", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14494", + "bonuses": "0,0,0,-4,-2,31,33,15,0,30,7,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "35200", + "examine": "A full face helmet, and elite.", + "grand_exchange_price": "30542", + "durability": null, + "name": "Elite black full helm", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14495" + }, + { + "destroy_message": "You got this key from the key rack in Dark Squall's base.", + "examine": "Opens the cells beneath the Black Knights' Fortress. (While Guthix Sleeps)", + "durability": null, + "name": "Cell key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14496", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "120000", + "examine": "A robe worn by members of the Dagon'hai.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "3,1,0", + "equipment_slot": "4", + "remove_sleeves": "true", + "grand_exchange_price": "71098", + "name": "Dagon'hai robe top", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14497", + "bonuses": "0,0,0,20,0,0,0,0,20,0,20,0,0,2,0" + }, + { + "shop_price": "120000", + "examine": "A robe worn by members of the Dagon'hai.", + "grand_exchange_price": "71098", + "durability": null, + "name": "Dagon'hai robe top", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14498" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "15000", + "examine": "A hat worn by members of the Dagon'hai.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "1,0,0", + "equipment_slot": "0", + "grand_exchange_price": "9580", + "name": "Dagon'hai hat", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14499", + "bonuses": "0,0,0,4,0,0,0,0,4,0,4,0,0,0,0" + }, + { + "shop_price": "15000", + "examine": "A hat worn by members of the Dagon'hai.", + "grand_exchange_price": "9580", + "durability": null, + "name": "Dagon'hai hat", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14500" + }, + { + "requirements": "{1,20}-{6,40}", + "shop_price": "80000", + "examine": "A robe worn by members of the Dagon'hai.", + "durability": null, + "destroy": "false", + "attack_speed": "4", + "absorb": "2,1,0", + "equipment_slot": "7", + "grand_exchange_price": "45691", + "name": "Dagon'hai robe bottom", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14501", + "bonuses": "0,0,0,15,0,0,0,0,15,0,15,0,0,2,0" + }, + { + "shop_price": "80000", + "examine": "A robe worn by members of the Dagon'hai.", + "grand_exchange_price": "45691", + "durability": null, + "name": "Dagon'hai robe bottom", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14502" + }, + { + "shop_price": "1", + "examine": "Elite Black Knight armour adds to his stealthiness.", + "durability": null, + "name": "Silif", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14503", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "examine": "Elite Black Knight armour adds to his stealthiness.", + "durability": null, + "name": "Silif", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14504", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Teleorb", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14505", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "5" + }, + { + "destroy_message": "You created this by focusing the light onto a snapdragon seed from a rose tinted lens while in Betty's shop.", + "examine": "An enriched snapdragon seed. The herb that grows from this seed will be extra potent!", + "durability": null, + "name": "Enriched snapdragon seed", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14506", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14507", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14508", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14509", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14510", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14511", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14512", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14513", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You got this by solving a puzzle in the a Guthixian temple near the Chasm of Tears.", + "examine": "Part of a stone circle.", + "durability": null, + "name": "Dolmen", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14514", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an air-orb on an etched wall section.", + "examine": "An elemental key of air.", + "durability": null, + "name": "Air key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14515", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an earth-orb on an etched wall section.", + "examine": "An elemental key of earth.", + "durability": null, + "name": "Earth key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14516", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of fire.", + "durability": null, + "name": "Fire key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14517", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of water.", + "durability": null, + "name": "Water key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14518", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an air-orb on an etched wall section.", + "examine": "An elemental key of air.", + "durability": null, + "name": "Air key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14519", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an earth-orb on an etched wall section.", + "examine": "An elemental key of earth.", + "durability": null, + "name": "Earth key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14520", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of fire.", + "durability": null, + "name": "Fire key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14521", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You found this in the Chasm of Tears by using an", + "examine": "An elemental key of water.", + "durability": null, + "name": "Water key", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14522", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a hat, top and bottoms.", + "grand_exchange_price": "193541", + "durability": null, + "name": "Dagon'hai robes set", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14525", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a hat, top and bottoms.", + "grand_exchange_price": "193541", + "durability": null, + "name": "Dagon'hai robes set", + "tradeable": "true", + "destroy": "false", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14526" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing an elite black full helm, platebody and legs.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "6,0,13", + "destroy_message": "Drop", + "grand_exchange_price": "140536", + "name": "Elite black armour set", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14527", + "bonuses": "0,0,0,-38,-16,163,168,80,-3,159,62,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Grand Exchange set containing an elite black full helm, platebody and legs.", + "grand_exchange_price": "140536", + "durability": null, + "name": "Elite black armour set", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14528" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, legs.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "9,0,19", + "destroy_message": "Drop", + "grand_exchange_price": "10629814", + "name": "Dragon plate armour set (l)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14529", + "bonuses": "0,0,0,-57,-9,222,221,201,-11,217,82,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, legs.", + "grand_exchange_price": "10629814", + "durability": null, + "name": "Dragon plate armour set (l)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14530" + }, + { + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, skirt.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "9,0,19", + "destroy_message": "Drop", + "grand_exchange_price": "12243786", + "name": "Dragon plate armour set (sk)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14531", + "bonuses": "0,0,0,-57,-9,222,221,201,-11,217,82,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "20", + "examine": "Grand Exchange set containing a dragon full helm, platebody, skirt.", + "grand_exchange_price": "12243786", + "durability": null, + "name": "Dragon plate armour set (sk)", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14532" + }, + { + "durability": null, + "name": "Broav", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14533", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You gained this orb from Dark Squall's base. You can probably get another one from visiting the same place.", + "examine": "This orb can used to teleport people...somehow.", + "durability": null, + "name": "Strange teleorb", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14534", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will not be able to get the book back if you destroy it.", + "examine": "Notes on the locations of turkeys.", + "durability": null, + "name": "Turkey book", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14536", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will lose all food stored in the Cornucopia. You can get another empty one from Diango in Draynor Village.", + "durability": null, + "name": "Cornucopia", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14537", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will lose all food stored in the Cornucopia. You can get another empty one from Diango in Draynor Village.", + "durability": null, + "name": "Cornucopia", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14538", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "9", + "durability": null, + "name": "Raw turkey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14539", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "4", + "examine": "Mmm, this looks tasty.", + "durability": null, + "name": "Cooked turkey", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14540", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "durability": null, + "name": "Burnt turkey", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14541", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "9", + "examine": "I need to cook this first.", + "durability": null, + "name": "Raw turkey drumstick", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14542", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "4", + "examine": "Mmm, this looks tasty.", + "durability": null, + "name": "Cooked turkey drumstick", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14543", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1", + "durability": null, + "name": "Burnt turkey drumstick", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14544", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will lose all food stored in the Cornucopia. You can get another empty one from Diango in Draynor Village.", + "durability": null, + "name": "Cornucopia", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14570", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Not-so-sturdy boots for northern winters.", + "durability": null, + "name": "Fremennik sea boots 1", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14571", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,2,3,4,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You can claim replacement Fremennik sea boots from Yrsa in Rellekka.", + "examine": "Sturdy boots for northern winters.", + "durability": null, + "name": "Fremennik sea boots 2", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14572", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,8,9,10,0,0,8,0,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "Very sturdy boots for northern winters.", + "durability": null, + "name": "Fremennik sea boots 3", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14573", + "absorb": "0,0,0", + "bonuses": "0,0,0,-3,-1,10,11,12,0,0,9,1,0,0,0", + "equipment_slot": "10" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14574", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14575", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14576", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will be able to get a replacement shield from Redbeard the Pirate in Port Sarim.", + "shop_price": "100", + "examine": "A buckler shield from Falador.", + "durability": null, + "name": "Falador shield 1", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14577", + "absorb": "0,0,0", + "bonuses": "0,0,0,-8,-2,17,19,18,-1,18,10,0,3,0,0", + "equipment_slot": "5" + }, + { + "destroy_message": "You will be able to get a replacement shield from the chemist in Rimmington.", + "shop_price": "200", + "examine": "A kiteshield from Falador.", + "durability": null, + "name": "Falador shield 2", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14578", + "absorb": "0,0,0", + "bonuses": "0,0,0,-8,-2,18,22,20,-1,20,20,0,5,0,0", + "equipment_slot": "5" + }, + { + "destroy_message": "You will be able to get a replacement shield from Sir Vyvin's squire in the White Knights' Castle.", + "shop_price": "300", + "examine": "A tower shield from Falador.", + "durability": null, + "name": "Falador shield 3", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14579", + "absorb": "0,0,0", + "bonuses": "0,0,0,-8,-2,27,31,29,-1,29,30,0,7,0,0", + "equipment_slot": "5" + }, + { + "shop_price": "1000", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14580", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "5000", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14581", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "10000", + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14582", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Harvest (turns to ", + "examine": "A white lily seed - plant in a flower patch.", + "durability": null, + "name": "White lily", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14583", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will not be able to replace this voucher - it is a one-time offer only!", + "shop_price": "500000", + "examine": "I can take this to the Herald to get my money crest back for free.", + "durability": null, + "name": "Money crest voucher", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14584", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "1250", + "examine": "A white lily seed - plant in a flower patch.", + "durability": null, + "name": "White lily seed", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14589", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "1000", + "examine": "This will teleport me to Rellekka when I play it. ", + "durability": null, + "name": "Enchanted lyre(5)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14590", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "destroy_message": "Drop", + "shop_price": "1000", + "examine": "This will teleport me to Rellekka when I play it. ", + "durability": null, + "name": "Enchanted lyre(6)", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14591", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "3" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "These look pretty heavy, but very elite.", + "grand_exchange_price": "41559", + "durability": null, + "name": "Elite black platelegs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14592", + "absorb": "2,0,4", + "bonuses": "0,0,0,-14,-6,52,50,25,-1,49,15,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "Provides excellent protection, and is elite.", + "grand_exchange_price": "38275", + "durability": null, + "name": "Elite black platebody", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14593", + "absorb": "3,0,6", + "bonuses": "0,0,0,-20,-8,80,85,40,-2,80,40,0,0,0,0" + }, + { + "lendable": "true", + "destroy_message": "Drop", + "examine": "A full face helmet, and elite.", + "grand_exchange_price": "30542", + "durability": null, + "name": "Elite black full helm", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14594", + "absorb": "1,0,3", + "bonuses": "0,0,0,-4,-2,31,33,15,0,30,7,0,0,0,0" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "remove_sleeves": "true", + "examine": "A red and jolly top.", + "durability": null, + "name": "Santa costume top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14595", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "examine": "A spikey amulet made of ice crystals. It has been enchanted so it will not melt.", + "durability": null, + "name": "Ice amulet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14596", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "destroy_message": "You can probably get more in the last room of the yeti cave, in the Land of Snow.", + "shop_price": "1", + "durability": null, + "name": "Stones", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14597", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You will have to fetch more in the last room of the yeti cave, then get them enchanted by snow imps.", + "shop_price": "1", + "examine": "According to the snow imps, this is enchanted, frozen yeti dung.", + "durability": null, + "name": "Enchanted stones", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14598", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A spikey amulet made of ice crystals. It has been enchanted so it will not melt.", + "durability": null, + "name": "Ice amulet", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14599", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "2" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "remove_sleeves": "true", + "examine": "A red and jolly top.", + "durability": null, + "name": "Santa costume top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14600", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "remove_sleeves": "true", + "examine": "A red and jolly top.", + "durability": null, + "name": "Santa costume top", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14601", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "4" + }, + { + "destroy_message": "You can get another pair from Diango in Draynor Village.", + "examine": "Some black and jolly gloves.", + "durability": null, + "name": "Santa costume gloves", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14602", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "9" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "Some red and jolly legs.", + "durability": null, + "name": "Santa costume legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14603", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another from Diango in Draynor Village.", + "examine": "Some red and jolly legs.", + "durability": null, + "name": "Santa costume legs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14604", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "7" + }, + { + "destroy_message": "You can get another pair from Diango in Draynor Village.", + "examine": "Some black and jolly boots.", + "durability": null, + "name": "Santa costume boots", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14605", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "10" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a cinnamon tree.", + "durability": null, + "name": "Cinnamon twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14606", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a sassafras tree.", + "durability": null, + "name": "Sassafras twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14607", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a ailanthus tree.", + "durability": null, + "name": "Ailanthus twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14608", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a cedar tree.", + "durability": null, + "name": "Cedar twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14609", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You harvested these from a tree in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Aromatic twigs from a mastic tree.", + "durability": null, + "name": "Mastic twigs", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14610", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Cinnamon twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Cinnamon weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14611", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Sassafras twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Sassafras weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14612", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Ailanthus twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Ailanthus weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14613", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Cedar twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Cedar weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14614", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "You fletched this from twigs found in the phoenix's lair. You need one to complete the dungeon.", + "examine": "Mastic twigs, fletched into ribbons of wood and ready to be woven.", + "durability": null, + "name": "Mastic weaving ribbon", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14615", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "100", + "examine": "A feather from a phoenix. Used in Summoning (72).", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "destroy_message": "Drop", + "grand_exchange_price": "3431", + "name": "Phoenix quill", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14616", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Drop", + "shop_price": "100", + "examine": "A feather from a phoenix. Used in Summoning (72).", + "grand_exchange_price": "3431", + "durability": null, + "name": "Phoenix quill", + "tradeable": "true", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14617" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14620", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "durability": null, + "name": "Pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14621" + }, + { + "requirements": "{23,72}", + "shop_price": "498", + "examine": "A scroll for a phoenix familiar.", + "durability": null, + "name": "Rise from the ashes scroll", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14622", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "4986", + "durability": null, + "name": "Phoenix pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14623", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "4986", + "durability": null, + "name": "Phoenix pouch", + "tradeable": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14624" + }, + { + "durability": null, + "name": "Pouch", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14625", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A baby phoenix and it's bad to the bone!", + "durability": null, + "name": "Phoenix eggling", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14626", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "A baby phoenix and it's bad to the bone!", + "durability": null, + "name": "Phoenix eggling", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14627", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "I found this egg in the Phoenix's Lair, and clapped at it!", + "durability": null, + "name": "Phoenix egg", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14629", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "Unknown ", + "examine": "I found this egg in the Phoenix's Lair, and kicked it!", + "durability": null, + "name": "Cracked phoenix egg", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14630", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "destroy_message": "A player can get a new one by talking to any seer around Seer's village.", + "examine": "A headband with an eye embroidered on it.", + "durability": null, + "name": "Seer's headband", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14631", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,3,0,0,0,0,0,0", + "equipment_slot": "0" + }, + { + "turn90cw_anim": "821", + "examine": "This used to belong to King Arthur and has since been improved.", + "walk_anim": "819", + "has_special": "true", + "turn90ccw_anim": "822", + "attack_speed": "5", + "turn180_anim": "820", + "absorb": "0,0,0", + "defence_anim": "397", + "equipment_slot": "3", + "attack_anims": "390,390,381,390", + "destroy_message": "You can retrieve the Enhanced Excalibur from the Lady of the Lake for 500 coins.", + "stand_anim": "808", + "run_anim": "824", + "archery_ticket_price": "0", + "id": "14632", + "stand_turn_anim": "823", + "bonuses": "38,47,-2,0,0,0,3,2,1,0,0,45,0,0,0", + "requirements": "{0,30}", + "shop_price": "200", + "durability": null, + "destroy": "true", + "weapon_interface": "6", + "render_anim": "1", + "attack_audios": "2500,2500,2517,2500", + "name": "Enhanced excalibur" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14633", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14634", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "I wonder what happens if I rub it.", + "durability": null, + "name": "Antique lamp", + "tradeable": "false", + "destroy": "true", + "archery_ticket_price": "0", + "attack_speed": "4", + "id": "14635", + "absorb": "0,0,0", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "650", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Slayer helmet (e)", + "archery_ticket_price": "0", + "id": "14636", + "bonuses": "0,0,0,0,0,30,32,27,0,30,7,0,0,0,0" + }, + { + "remove_head": "true", + "shop_price": "650", + "examine": "You don't want to wear it inside-out.", + "durability": null, + "destroy": "true", + "attack_speed": "4", + "absorb": "0,0,0", + "remove_beard": "true", + "equipment_slot": "0", + "destroy_message": "Drop", + "name": "Slayer helmet (charged)", + "archery_ticket_price": "0", + "id": "14637", + "bonuses": "0,0,0,0,0,30,32,27,0,30,7,0,0,0,0" + }, + { + "ge_buy_limit": "100", + "examine": "It can be charged at the Fountain of Rune.", + "grand_exchange_price": "26000", + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14638", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "It can be charged at the Fountain of Rune.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14639" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with one teleport charge.", + "grand_exchange_price": "27000", + "durability": null, + "name": "Ring of wealth(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14640", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with one teleport charge.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(1)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14641" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with two teleport charges.", + "grand_exchange_price": "28000", + "durability": null, + "name": "Ring of wealth(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14642", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with two teleport charges.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(2)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14643" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with three teleport charges.", + "grand_exchange_price": "30000", + "durability": null, + "name": "Ring of wealth(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14644", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with three teleport charges.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(3)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14645" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with four teleport charges.", + "grand_exchange_price": "35000", + "durability": null, + "name": "Ring of wealth(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14646", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "100", + "examine": "An enchanted ring with four teleport charges.", + "grand_exchange_price": "29800", + "durability": null, + "name": "Ring of wealth(4)", + "tradeable": "true", + "archery_ticket_price": "0", + "id": "14647" + }, + { + "shop_price": "0", + "ge_buy_limit": "0", + "examine": "A totally alive monkey friend for your back!", + "durability": null, + "destroy": "true", + "weight": "0.0", + "equipment_slot": "1", + "grand_exchange_price": "0", + "name": "Jangles the Monkey Backpack", + "tradeable": "false", + "archery_ticket_price": "0", + "id": "14648", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "ge_buy_limit": "0", + "examine": "A ring for only the truest of cave goblins. And Logg too.", + "grand_exchange_price": "0", + "durability": null, + "name": "Zanik ring", + "tradeable": "false", + "archery_ticket_price": "0", + "destroy": "true", + "id": "14649", + "equipment_slot": "12" + }, + { + "ge_buy_limit": "0", + "examine": "A standard issue wizard hat.", + "durability": null, + "weight": "0.1", + "destroy": "true", + "equipment_slot": "0", + "grand_exchange_price": "0", + "name": "Wizard hat", + "tradeable": "false", + "archery_ticket_price": "0", + "hat": "true", + "id": "14650", + "bonuses": "0,0,0,2,0,0,0,0,2,0,0,0,0,0,0" + }, + { + "destroy_message": " WARNING: You will have to reobtain this item the hard way.", + "examine": "Mysterious blueprints written in an alien language.", + "durability": null, + "name": "Ancient Blueprints", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "14651" + }, + { + "destroy_message": "You can get another by bringing the materials along with the blueprint to a Star Sprite.", + "examine": "A stardust-infused dragonstone ring.", + "durability": null, + "name": "Ring of the Star Sprite", + "destroy": "true", + "weight": "0.1", + "archery_ticket_price": "0", + "id": "14652", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "equipment_slot": "12" + }, + { + "examine": "A chunk of rock.", + "name": "Rock", + "id": "1480" + }, + { + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A staff with a spooky raven head attached.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Staff of the raven", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "14654", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A staff with a spooky raven head attached.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Staff of the raven", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "14655", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "shop_price": "200", + "turn90cw_anim": "1207", + "examine": "A staff with a spooky raven head attached.", + "walk_anim": "1205", + "durability": null, + "destroy": "true", + "weight": "2.2", + "turn90ccw_anim": "1208", + "attack_speed": "5", + "weapon_interface": "1", + "turn180_anim": "1206", + "defence_anim": "420", + "render_anim": "28", + "equipment_slot": "3", + "attack_anims": "419,419,419,419", + "stand_anim": "813", + "attack_audios": "2555,0,0,0", + "tradeable": "false", + "name": "Staff of the raven", + "run_anim": "1210", + "archery_ticket_price": "0", + "id": "14656", + "stand_turn_anim": "1209", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" + }, + { + "examine": "Item container for C. Ele Minor Drop Table. You should not be able to obtain this item.", + "name": "C. Ele Minor Drop Table", + "id": "799" + }, + { + "examine": "This will unlock something. (Waterfall Quest)", + "name": "A key", + "tradeable": "false", + "weight": "0.01", + "archery_ticket_price": "0", + "id": "293" + }, + { + "examine": "This will unlock something. (Waterfall dungeon)", + "name": "A key", + "tradeable": "false", + "archery_ticket_price": "0", + "weight": "0.01", + "id": "298" + }, + { + "examine": "You should not have this.", + "name": "USDT Slot", + "id": "14422" + }, + { + "examine": "You should not have this.", + "name": "HDT Slot", + "id": "14424" + }, + { + "examine": "You should not have this.", + "name": "GDT Slot", + "id": "14426" + }, + { + "examine": "You should not have this.", + "name": "RSDT Slot", + "id": "14428" + }, + { + "examine": "You should not have this.", + "name": "ASDT Slot", + "id": "14430" + } +] \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/KondoKit/res/npc_hitpoints_map.json b/plugin-playground/src/main/kotlin/KondoKit/res/npc_hitpoints_map.json new file mode 100644 index 0000000..c94be2f --- /dev/null +++ b/plugin-playground/src/main/kotlin/KondoKit/res/npc_hitpoints_map.json @@ -0,0 +1 @@ +{"0": 12, "1": 10, "2": 10, "3": 10, "4": 10, "5": 10, "6": 4, "7": 7, "8": 14, "9": 18, "10": 10, "11": 10, "12": 10, "13": 14, "14": 30, "15": 20, "16": 4, "18": 19, "19": 35, "20": 66, "21": 82, "22": 17, "23": 52, "24": 4, "25": 4, "26": 52, "27": 50, "28": 10, "29": 10, "30": 10, "31": 10, "32": 22, "33": 10, "34": 22, "35": 22, "36": 10, "37": 10, "38": 10, "39": 10, "40": 10, "41": 3, "42": 10, "43": 10, "44": 10, "45": 10, "46": 1, "47": 2, "48": 40, "49": 116, "50": 240, "51": 160, "52": 50, "53": 140, "54": 190, "55": 105, "56": 10, "57": 10, "58": 55, "59": 5, "60": 32, "61": 1, "62": 50, "63": 35, "64": 65, "65": 10, "66": 3, "67": 3, "68": 3, "69": 10, "71": 10, "72": 10, "73": 22, "74": 24, "75": 30, "76": 30, "77": 22, "78": 32, "79": 80, "80": 10, "81": 8, "82": 79, "83": 89, "84": 157, "85": 10, "86": 5, "87": 10, "88": 12, "89": 19, "95": 69, "96": 34, "97": 44, "98": 10, "99": 49, "100": 5, "101": 10, "102": 10, "103": 25, "104": 25, "105": 27, "106": 25, "107": 17, "108": 23, "109": 57, "110": 111, "111": 70, "112": 60, "113": 50, "114": 60, "115": 60, "116": 75, "117": 35, "118": 10, "119": 61, "120": 26, "121": 10, "122": 29, "123": 29, "124": 54, "125": 59, "126": 64, "127": 44, "128": 6, "131": 8, "132": 6, "133": 29, "134": 64, "137": 10, "138": 34, "139": 34, "140": 47, "141": 44, "142": 69, "143": 90, "144": 40, "145": 59, "146": 10, "147": 10, "148": 10, "153": 10, "154": 10, "158": 67, "159": 1, "160": 21, "161": 1, "162": 10, "163": 54, "164": 54, "168": 42, "169": 42, "170": 4, "172": 24, "173": 42, "174": 12, "175": 15, "176": 31, "178": 42, "179": 42, "180": 13, "181": 20, "182": 20, "183": 20, "184": 23, "185": 10, "186": 18, "188": 20, "189": 10, "190": 40, "191": 39, "192": 10, "193": 20, "194": 40, "196": 28, "198": 10, "199": 41, "201": 47, "202": 40, "1631": 30, "1632": 30, "203": 40, "204": 40, "205": 70, "206": 17, "208": 10, "210": 10, "212": 10, "214": 10, "216": 10, "219": 10, "220": 10, "221": 142, "222": 14, "223": 10, "224": 11, "230": 10, "231": 10, "233": 10, "237": 42, "238": 142, "246": 10, "247": 50, "251": 10, "253": 31, "254": 31, "255": 31, "256": 31, "257": 31, "258": 170, "259": 10, "262": 10, "264": 10, "265": 10, "266": 10, "267": 10, "268": 10, "269": 116, "270": 65, "271": 51, "272": 17, "274": 42, "275": 42, "277": 59, "278": 10, "279": 10, "280": 10, "281": 5, "282": 21, "283": 25, "284": 10, "285": 10, "288": 3, "289": 10, "290": 10, "291": 10, "296": 35, "297": 35, "298": 35, "299": 35, "307": 10, "308": 10, "336": 10, "338": 10, "339": 10, "340": 10, "341": 10, "342": 10, "344": 10, "345": 10, "346": 10, "347": 34, "348": 34, "351": 7, "352": 7, "353": 7, "354": 7, "355": 10, "358": 10, "359": 7, "360": 7, "361": 7, "362": 7, "363": 7, "364": 10, "365": 10, "367": 10, "368": 10, "369": 34, "373": 10, "374": 60, "375": 10, "380": 10, "382": 10, "384": 10, "385": 10, "386": 10, "387": 10, "388": 10, "390": 1, "392": 35, "397": 8, "398": 10, "401": 10, "402": 10, "411": 10, "412": 8, "419": 14, "420": 14, "421": 30, "422": 79, "423": 120, "424": 159, "425": 8, "426": 17, "427": 28, "428": 42, "429": 170, "430": 100, "435": 10, "437": 10, "438": 25, "439": 40, "440": 60, "441": 86, "442": 120, "443": 170, "444": 10, "445": 10, "446": 5, "447": 32, "448": 32, "449": 32, "452": 10, "453": 29, "456": 10, "457": 10, "458": 10, "460": 10, "461": 10, "462": 10, "469": 10, "470": 10, "475": 45, "476": 11, "477": 54, "478": 50, "479": 45, "481": 10, "482": 10, "483": 10, "485": 10, "487": 10, "489": 28, "490": 10, "491": 20, "492": 10, "493": 10, "494": 10, "495": 10, "498": 10, "499": 10, "502": 45, "503": 47, "504": 45, "505": 47, "507": 100, "508": 75, "509": 110, "518": 10, "519": 10, "520": 10, "521": 10, "522": 10, "523": 10, "524": 10, "525": 10, "526": 10, "527": 10, "530": 10, "531": 10, "532": 285, "533": 285, "534": 10, "535": 10, "539": 10, "540": 10, "542": 10, "551": 10, "552": 10, "554": 10, "555": 10, "561": 10, "562": 10, "567": 10, "569": 10, "570": 10, "571": 10, "572": 10, "573": 10, "574": 10, "579": 10, "582": 10, "595": 10, "596": 10, "598": 10, "599": 10, "606": 10, "609": 37, "610": 10, "611": 10, "613": 10, "614": 10, "615": 10, "616": 10, "617": 10, "618": 10, "619": 10, "620": 10, "621": 10, "633": 10, "635": 10, "638": 10, "640": 10, "641": 10, "643": 42, "645": 2, "646": 10, "648": 10, "649": 10, "650": 10, "651": 10, "652": 10, "655": 64, "656": 10, "657": 10, "658": 10, "659": 10, "660": 10, "663": 10, "665": 10, "667": 60, "670": 10, "674": 28, "677": 157, "678": 10, "679": 10, "680": 10, "681": 10, "682": 10, "683": 10, "684": 10, "688": 14, "689": 28, "690": 42, "691": 57, "692": 10, "694": 10, "705": 10, "706": 10, "708": 8, "709": 8, "713": 10, "714": 10, "716": 10, "720": 10, "726": 10, "727": 10, "728": 10, "729": 10, "730": 10, "731": 10, "732": 10, "735": 10, "737": 10, "738": 10, "739": 10, "741": 10, "742": 80, "745": 1, "749": 108, "750": 108, "751": 108, "752": 190, "753": 40, "757": 4, "758": 10, "767": 88, "778": 66, "785": 10, "786": 10, "787": 10, "790": 10, "793": 10, "794": 10, "795": 157, "798": 10, "799": 42, "800": 10, "801": 10, "802": 10, "803": 17, "804": 10, "805": 10, "806": 10, "812": 10, "813": 10, "820": 10, "821": 10, "825": 10, "827": 7, "830": 28, "831": 10, "833": 10, "834": 10, "837": 15, "838": 10, "839": 15, "840": 46, "841": 10, "842": 400, "843": 10, "847": 10, "850": 10, "851": 10, "852": 60, "856": 81, "858": 10, "859": 10, "862": 331, "863": 10, "864": 10, "870": 331, "872": 10, "873": 10, "874": 10, "875": 10, "877": 97, "878": 71, "879": 7, "884": 10, "885": 10, "887": 10, "893": 25, "894": 28, "895": 10, "897": 21, "898": 31, "899": 41, "900": 51, "904": 10, "905": 10, "907": 3, "908": 65, "909": 65, "910": 78, "911": 107, "912": 120, "913": 120, "914": 120, "916": 10, "917": 32, "923": 10, "925": 10, "931": 62, "934": 150, "938": 130, "939": 10, "941": 75, "942": 10, "943": 10, "944": 10, "945": 10, "946": 10, "947": 10, "948": 10, "949": 10, "950": 5, "951": 3, "954": 10, "955": 8, "956": 10, "961": 10, "977": 42, "978": 17, "979": 10, "980": 10, "981": 10, "982": 10, "983": 10, "984": 10, "985": 10, "986": 10, "987": 10, "988": 57, "989": 57, "990": 57, "991": 10, "993": 10, "997": 91, "998": 90, "999": 90, "1000": 90, "1001": 10, "1002": 45, "1004": 2, "1005": 32, "1007": 73, "1009": 64, "1013": 10, "1015": 10, "1017": 3, "1018": 2, "1019": 45, "1020": 35, "1021": 45, "1022": 45, "1023": 50, "1044": 20, "1045": 10, "1046": 25, "1052": 10, "1053": 45, "1055": 10, "1057": 10, "1058": 10, "1059": 10, "1060": 10, "1061": 10, "1062": 10, "1063": 10, "1064": 10, "1065": 55, "1066": 10, "1067": 10, "1068": 10, "1069": 10, "1072": 10, "1073": 55, "1074": 55, "1076": 44, "1077": 44, "1081": 10, "1084": 10, "1085": 10, "1086": 10, "1087": 10, "1088": 10, "1089": 10, "1092": 38, "1095": 140, "1096": 135, "1097": 120, "1098": 120, "1099": 10, "1100": 10, "1101": 95, "1102": 95, "1103": 95, "1104": 95, "1105": 95, "1106": 90, "1107": 90, "1108": 90, "1109": 90, "1110": 90, "1111": 90, "1112": 90, "1115": 92, "1116": 92, "1117": 92, "1118": 67, "1119": 67, "1120": 67, "1121": 67, "1122": 67, "1123": 67, "1124": 67, "1125": 120, "1126": 90, "1127": 90, "1128": 90, "1129": 90, "1130": 95, "1131": 95, "1132": 95, "1133": 95, "1134": 95, "1135": 10, "1136": 10, "1137": 10, "1138": 90, "1139": 10, "1140": 10, "1141": 10, "1142": 10, "1143": 10, "1144": 10, "1145": 10, "1146": 10, "1147": 10, "1148": 10, "1149": 10, "1150": 10, "1151": 10, "1152": 10, "1153": 40, "1154": 90, "1155": 170, "1156": 40, "1157": 170, "1158": 255, "1160": 255, "1161": 10, "1172": 100, "1183": 91, "1184": 85, "1185": 10, "1192": 1, "1193": 5, "1194": 5, "1195": 35, "1196": 30, "1197": 35, "1198": 47, "1199": 10, "1200": 60, "1201": 105, "1203": 110, "1204": 112, "1208": 10, "1211": 10, "1216": 10, "1217": 5, "1218": 50, "1219": 60, "1220": 50, "1223": 50, "1225": 50, "1227": 8, "1228": 13, "1229": 10, "1230": 12, "1231": 22, "1232": 8, "1233": 13, "1234": 10, "1235": 12, "1239": 42, "1240": 38, "1241": 38, "1243": 56, "1244": 56, "1245": 76, "1246": 76, "1247": 90, "1248": 90, "1249": 110, "1250": 110, "1257": 61, "1258": 62, "1261": 64, "1262": 65, "1263": 10, "1264": 120, "1265": 50, "1266": 50, "1267": 50, "1268": 50, "1269": 50, "1270": 10, "1271": 10, "1272": 10, "1273": 10, "1274": 10, "1275": 10, "1276": 10, "1277": 10, "1278": 10, "1279": 57, "1281": 10, "1282": 10, "1283": 10, "1286": 10, "1287": 10, "1288": 10, "1289": 10, "1290": 14, "1291": 14, "1292": 14, "1293": 14, "1294": 10, "1296": 10, "1297": 10, "1298": 10, "1300": 10, "1301": 10, "1302": 10, "1303": 10, "1304": 10, "1305": 50, "1306": 50, "1307": 50, "1308": 51, "1309": 51, "1313": 10, "1314": 10, "1315": 10, "1316": 10, "1317": 40, "1318": 40, "1319": 45, "1320": 1, "1321": 5, "1326": 11, "1327": 20, "1328": 15, "1329": 25, "1330": 69, "1338": 70, "1339": 70, "1340": 70, "1341": 120, "1342": 120, "1343": 120, "1344": 10, "1345": 10, "1346": 10, "1347": 10, "1351": 128, "1352": 100, "1353": 100, "1354": 100, "1355": 100, "1356": 100, "1360": 10, "1367": 1, "1368": 1, "1369": 10, "1370": 10, "1374": 10, "1377": 10, "1378": 10, "1381": 1, "1385": 10, "1386": 1, "1388": 1, "1389": 1, "1390": 1, "1391": 1, "1392": 1, "1393": 10, "1394": 10, "1395": 10, "1396": 10, "1397": 10, "1398": 10, "1401": 3, "1402": 3, "1403": 5, "1404": 5, "1419": 10, "1427": 10, "1442": 130, "1443": 130, "1444": 130, "1445": 130, "1446": 130, "1447": 133, "1451": 10, "1452": 10, "1453": 10, "1454": 10, "1455": 94, "1456": 82, "1457": 50, "1458": 50, "1459": 130, "1460": 90, "1461": 10, "1463": 10, "1464": 10, "1465": 60, "1466": 90, "1467": 60, "1469": 10, "1472": 428, "1473": 2, "1475": 7, "1476": 7, "1477": 10, "1478": 90, "1479": 10, "1480": 10, "1481": 10, "1483": 10, "1484": 10, "1485": 10, "1486": 10, "1487": 10, "1521": 550, "1524": 100, "1528": 10, "1531": 8, "1532": 50, "1533": 50, "1534": 50, "1535": 50, "1536": 40, "1537": 10, "1538": 10, "1539": 50, "1540": 100, "1541": 10, "1549": 30, "1550": 10, "1551": 10, "1553": 10, "1556": 150, "1557": 10, "1558": 72, "1560": 85, "1561": 85, "1562": 85, "1563": 85, "1564": 85, "1565": 85, "1566": 85, "1567": 10, "1582": 111, "1583": 111, "1584": 111, "1585": 111, "1586": 111, "1587": 60, "1588": 60, "1589": 50, "1590": 122, "1591": 165, "1592": 210, "1593": 62, "1594": 62, "1600": 23, "1601": 23, "1602": 23, "1603": 23, "1604": 90, "1605": 90, "1606": 90, "1607": 90, "1608": 97, "1609": 97, "1610": 105, "1611": 105, "1612": 22, "1613": 105, "1614": 60, "1615": 150, "1616": 75, "1617": 75, "1618": 120, "1619": 120, "1620": 37, "1621": 37, "1622": 78, "1623": 81, "1624": 105, "1625": 87, "1626": 79, "1627": 77, "1628": 76, "1629": 80, "1630": 80, "1633": 45, "1634": 45, "1635": 45, "1636": 45, "1637": 75, "1638": 70, "1639": 70, "1640": 140, "1641": 75, "1642": 75, "1643": 60, "1644": 60, "1645": 60, "1646": 60, "1647": 60, "1648": 16, "1649": 5, "1650": 5, "1651": 5, "1652": 5, "1653": 18, "1654": 18, "1655": 18, "1656": 18, "1657": 18, "1658": 10, "1660": 10, "1661": 10, "1662": 10, "1663": 10, "1665": 100, "1675": 10, "1681": 120, "1686": 10, "1688": 10, "1691": 8, "1692": 3, "1693": 128, "1695": 10, "1696": 10, "1697": 10, "1698": 51, "1699": 10, "1700": 10, "1701": 10, "1702": 10, "1703": 10, "1704": 10, "1705": 10, "1706": 10, "1707": 10, "1708": 10, "1710": 31, "1711": 31, "1712": 31, "1713": 10, "1714": 10, "1715": 10, "1716": 10, "1717": 10, "1718": 10, "1739": 10, "1740": 10, "1741": 10, "1742": 10, "1743": 10, "1744": 10, "1745": 10, "1746": 10, "1747": 10, "1748": 10, "1751": 34, "1752": 37, "1754": 10, "1757": 7, "1758": 7, "1759": 10, "1760": 7, "1761": 10, "1763": 10, "1766": 6, "1767": 8, "1768": 6, "1769": 5, "1770": 5, "1771": 5, "1772": 5, "1773": 5, "1774": 5, "1775": 5, "1776": 5, "1794": 10, "1795": 35, "1796": 35, "1797": 35, "1802": 60, "1803": 10, "1805": 10, "1806": 10, "1807": 10, "1812": 85, "1813": 50, "1814": 15, "1815": 15, "1816": 15, "1817": 15, "1818": 15, "1819": 10, "1820": 10, "1822": 1, "1823": 1, "1824": 1, "1825": 1, "1827": 105, "1828": 100, "1829": 37, "1831": 25, "1832": 5, "1833": 10, "1834": 10, "1840": 10, "1842": 10, "1843": 10, "1844": 10, "1846": 10, "1850": 114, "1851": 110, "1852": 70, "1853": 114, "1854": 110, "1855": 70, "1856": 114, "1857": 110, "1858": 70, "1859": 10, "1866": 10, "1861": 10, "1863": 10, "1864": 10, "1865": 10, "1867": 10, "1868": 10, "1871": 10, "1872": 10, "1873": 10, "1874": 8, "1875": 10, "1885": 55, "1886": 10, "1902": 10, "1904": 60, "1905": 60, "1906": 114, "1911": 10, "1913": 50, "1914": 200, "1915": 200, "1917": 10, "1918": 10, "1919": 82, "1921": 10, "1926": 65, "1931": 65, "1935": 10, "1936": 91, "1937": 91, "1938": 91, "1939": 91, "1940": 91, "1941": 91, "1942": 91, "1951": 72, "1952": 72, "1953": 72, "1954": 72, "1955": 72, "1956": 72, "1958": 78, "1961": 78, "1962": 78, "1963": 78, "1964": 78, "1965": 78, "1967": 78, "1969": 88, "1972": 10, "1973": 85, "1976": 68, "1977": 130, "1978": 10, "1979": 10, "1980": 10, "1981": 10, "1988": 10, "1991": 57, "1993": 63, "1994": 27, "1995": 34, "1997": 42, "1998": 10, "1999": 10, "2001": 900, "2015": 71, "2016": 71, "2017": 71, "2018": 71, "2019": 71, "2021": 10, "2024": 10, "2025": 100, "2026": 100, "2027": 100, "2028": 100, "2029": 100, "2030": 100, "2031": 45, "2032": 35, "2033": 70, "2034": 45, "2035": 80, "2044": 71, "2045": 71, "2046": 71, "2047": 71, "2048": 71, "2049": 71, "2050": 71, "2051": 71, "2052": 71, "2053": 71, "2054": 71, "2055": 71, "2056": 71, "2057": 71, "2058": 60, "2060": 103, "2067": 10, "2069": 7, "2070": 7, "2071": 7, "2072": 7, "2073": 21, "2074": 21, "2075": 10, "2076": 10, "2077": 10, "2078": 10, "2082": 10, "2091": 10, "2092": 10, "2093": 10, "2094": 10, "2095": 10, "2096": 10, "2097": 10, "2098": 10, "2100": 10, "2101": 10, "2102": 10, "2103": 10, "2104": 10, "2105": 10, "2106": 10, "2109": 10, "2110": 10, "2111": 10, "2112": 10, "2113": 10, "2114": 10, "2115": 10, "2116": 10, "2117": 10, "2118": 10, "2119": 10, "2120": 10, "2121": 10, "2122": 10, "2127": 10, "2130": 48, "2131": 48, "2132": 48, "2133": 48, "2134": 54, "2135": 54, "2136": 54, "2138": 10, "2139": 10, "2140": 10, "2141": 10, "2154": 10, "2160": 10, "2163": 10, "2164": 10, "2165": 10, "2167": 10, "2168": 10, "2170": 10, "2171": 10, "2172": 10, "2173": 10, "2174": 10, "2175": 10, "2178": 10, "2180": 10, "2181": 10, "2182": 10, "2183": 10, "2184": 10, "2185": 10, "2186": 10, "2187": 10, "2190": 10, "2191": 10, "2192": 10, "2193": 10, "2195": 10, "2198": 10, "2201": 10, "2202": 10, "2203": 10, "2205": 10, "2206": 10, "2207": 10, "2232": 10, "2234": 10, "2235": 10, "2236": 42, "2237": 10, "2240": 10, "2241": 10, "2242": 10, "2244": 10, "2245": 22, "2246": 45, "2247": 3, "2248": 3, "2256": 66, "2262": 10, "2263": 74, "2264": 50, "2265": 95, "2267": 10, "2269": 10, "2271": 10, "2272": 10, "2274": 5, "2275": 5, "2276": 5, "2277": 5, "2278": 5, "2279": 5, "2280": 5, "2281": 5, "2285": 21, "2288": 10, "2289": 10, "2291": 10, "2292": 10, "2293": 10, "2294": 10, "2301": 10, "2310": 6, "2311": 10, "2312": 10, "2313": 3, "2314": 3, "2315": 3, "2316": 10, "2317": 10, "2318": 10, "2319": 10, "2320": 10, "2321": 10, "2329": 10, "2333": 10, "2336": 10, "2342": 10, "2354": 10, "2355": 476, "2359": 85, "2360": 85, "2361": 91, "2362": 91, "2372": 10, "2373": 87, "2397": 10, "2398": 10, "2399": 10, "2400": 10, "2401": 10, "2402": 10, "2423": 10, "2436": 10, "2439": 10, "2443": 0, "2452": 180, "2453": 240, "2454": 67, "2455": 120, "2456": 70, "2457": 120, "2459": 5, "2460": 5, "2461": 5, "2462": 5, "2463": 19, "2464": 40, "2465": 60, "2466": 80, "2467": 105, "2468": 120, "2476": 10, "2477": 10, "2479": 10, "2481": 10, "2482": 32, "2489": 87, "2490": 25, "2491": 50, "2492": 50, "2493": 90, "2494": 94, "2495": 97, "2496": 40, "2497": 39, "2499": 64, "2501": 61, "2503": 100, "2539": 10, "2547": 20, "2549": 10, "2553": 10, "2571": 23, "2574": 10, "2588": 10, "2591": 100, "2592": 100, "2593": 100, "2594": 100, "2595": 100, "2596": 100, "2597": 100, "2598": 80, "2599": 80, "2600": 80, "2601": 80, "2602": 80, "2603": 80, "2604": 120, "2605": 120, "2606": 120, "2607": 120, "2608": 120, "2609": 120, "2610": 140, "2611": 140, "2612": 140, "2613": 140, "2614": 140, "2615": 140, "2616": 140, "2627": 10, "2628": 10, "2629": 20, "2630": 20, "2631": 114, "2634": 10, "2641": 10, "2674": 14, "2675": 10, "2677": 13, "2678": 5, "2679": 5, "2680": 5, "2681": 5, "2682": 2, "2683": 10, "2684": 10, "2685": 29, "2686": 29, "2687": 29, "2688": 29, "2689": 10, "2690": 10, "2691": 10, "2693": 1, "2694": 1, "2695": 20, "2696": 15, "2697": 15, "2698": 42, "2699": 18, "2700": 18, "2701": 18, "2702": 18, "2703": 18, "2704": 10, "2705": 10, "2706": 10, "2707": 10, "2709": 25, "2710": 20, "2711": 22, "2712": 17, "2714": 40, "2716": 10, "2718": 10, "2725": 10, "2728": 10, "2729": 10, "2731": 10, "2732": 10, "2733": 10, "2734": 10, "2735": 10, "2736": 20, "2737": 20, "2738": 10, "2739": 40, "2740": 40, "2741": 80, "2742": 80, "2743": 160, "2744": 160, "2745": 250, "2746": 40, "2759": 10, "2776": 10, "2779": 20, "2782": 100, "2783": 220, "2785": 10, "2786": 10, "2787": 10, "2790": 10, "2792": 10, "2801": 48, "2802": 10, "2803": 40, "2804": 25, "2805": 25, "2806": 25, "2807": 15, "2808": 15, "2809": 10, "2810": 10, "2811": 10, "2812": 10, "2815": 10, "2825": 10, "2826": 10, "2827": 10, "2828": 10, "2830": 10, "2831": 10, "2832": 10, "2833": 10, "2834": 10, "2835": 10, "2836": 10, "2837": 51, "2838": 51, "2839": 51, "2840": 51, "2841": 51, "2842": 51, "2843": 48, "2844": 48, "2845": 48, "2846": 48, "2847": 48, "2848": 48, "2849": 57, "2850": 40, "2851": 10, "2852": 10, "2853": 10, "2854": 10, "2855": 10, "2856": 10, "2857": 10, "2858": 10, "2863": 40, "2866": 40, "2869": 40, "2878": 40, "2880": 74, "2881": 255, "2882": 255, "2883": 255, "2885": 180, "2886": 240, "2887": 85, "2888": 70, "2889": 150, "2890": 150, "2892": 75, "2894": 75, "2896": 75, "2919": 95, "2931": 10, "2941": 10, "2945": 10, "2948": 10, "2949": 10, "2950": 10, "2952": 10, "2958": 10, "2962": 10, "2963": 10, "2964": 10, "2965": 10, "2966": 10, "2967": 10, "2968": 10, "2969": 10, "2970": 10, "2971": 10, "2972": 10, "2973": 10, "2980": 5, "2981": 5, "2982": 10, "2984": 10, "2986": 10, "2988": 10, "2990": 10, "2997": 10, "2998": 10, "3001": 10, "3002": 10, "3003": 10, "3004": 10, "3005": 10, "3006": 10, "3007": 5, "3008": 5, "3009": 5, "3010": 5, "3011": 5, "3012": 5, "3013": 5, "3014": 5, "3015": 5, "3016": 5, "3017": 5, "3018": 5, "3021": 10, "3022": 10, "3026": 78, "3027": 78, "3028": 78, "3029": 10, "3030": 10, "3040": 10, "3042": 22, "3043": 22, "3044": 10, "3046": 10, "3051": 10, "3052": 10, "3053": 10, "3054": 10, "3055": 10, "3056": 10, "3057": 108, "3058": 70, "3059": 100, "3060": 32, "3061": 58, "3062": 40, "3063": 120, "3064": 148, "3065": 58, "3066": 37, "3067": 123, "3068": 200, "3069": 200, "3070": 200, "3071": 200, "3072": 70, "3073": 59, "3074": 10, "3075": 10, "3079": 10, "3080": 10, "3089": 10, "3090": 24, "3091": 10, "3094": 10, "3097": 10, "3098": 10, "3099": 10, "3100": 10, "3101": 10, "3102": 10, "3103": 10, "3104": 10, "3105": 10, "3106": 10, "3109": 10, "3121": 10, "3122": 10, "3123": 12, "3135": 0, "3150": 10, "3153": 25, "3155": 10, "3167": 10, "3168": 10, "3169": 10, "3170": 10, "3171": 10, "3172": 10, "3173": 10, "3174": 10, "3175": 10, "3176": 10, "3177": 10, "3178": 10, "3179": 10, "3180": 10, "3181": 10, "3182": 10, "3183": 10, "3184": 10, "3185": 10, "3186": 10, "3187": 52, "3188": 45, "3189": 45, "3190": 45, "3191": 45, "3192": 45, "3193": 45, "3194": 45, "3195": 45, "3196": 52, "3198": 10, "3199": 10, "3200": 250, "3201": 51, "3202": 51, "3203": 10, "3204": 10, "3216": 10, "3219": 40, "3220": 45, "3221": 40, "3223": 4, "3224": 10, "3225": 4, "3226": 9, "3227": 10, "3228": 18, "3229": 18, "3230": 18, "3231": 18, "3232": 18, "3233": 18, "3234": 5, "3235": 10, "3236": 10, "3237": 7, "3239": 7, "3240": 7, "3241": 22, "3242": 30, "3243": 38, "3244": 22, "3245": 22, "3246": 31, "3247": 18, "3248": 31, "3249": 31, "3250": 31, "3251": 31, "3252": 31, "3253": 31, "3255": 31, "3256": 31, "3257": 31, "3258": 31, "3259": 31, "3260": 28, "3261": 28, "3262": 28, "3263": 20, "3264": 10, "3265": 10, "3266": 10, "3267": 10, "3268": 14, "3269": 14, "3270": 14, "3271": 14, "3272": 14, "3273": 14, "3274": 14, "3275": 14, "3276": 42, "3277": 42, "3278": 42, "3279": 42, "3280": 10, "3282": 10, "3283": 10, "3286": 10, "3288": 10, "3293": 10, "3294": 10, "3295": 10, "3296": 10, "3298": 10, "3299": 10, "3302": 10, "3304": 10, "3307": 10, "3309": 8, "3313": 102, "3319": 58, "3320": 58, "3327": 10, "3331": 10, "3334": 1000, "3340": 200, "3341": 10, "3344": 65, "3345": 75, "3346": 60, "3347": 75, "3348": 53, "3349": 53, "3350": 53, "3366": 10, "3367": 10, "3368": 10, "3369": 10, "3370": 10, "3371": 10, "3375": 117, "3376": 50, "3378": 10, "3382": 10, "3389": 10, "3390": 10, "3391": 10, "3392": 10, "3393": 10, "3394": 10, "3404": 10, "3406": 171, "3407": 35, "3408": 35, "3409": 185, "3410": 185, "3411": 185, "3412": 185, "3413": 10, "3414": 10, "3415": 10, "3416": 10, "3418": 10, "3419": 60, "3420": 10, "3421": 31, "3422": 20, "3423": 20, "3424": 18, "3425": 10, "3426": 10, "3427": 10, "3431": 10, "3432": 10, "3433": 10, "3434": 10, "3435": 10, "3436": 10, "3437": 10, "3438": 10, "3439": 10, "3443": 10, "3444": 10, "3445": 10, "3449": 60, "3450": 60, "3451": 60, "3463": 10, "3476": 11, "3478": 328, "3484": 65, "3491": 140, "3493": 200, "3494": 210, "3495": 240, "3496": 140, "3497": 139, "3498": 240, "3499": 240, "3500": 240, "3501": 240, "3502": 240, "3509": 10, "3514": 10, "3521": 64, "3522": 85, "3523": 85, "3524": 85, "3525": 85, "3526": 65, "3527": 64, "3531": 57, "3532": 57, "3533": 60, "3534": 57, "3577": 65, "3579": 10, "3582": 10, "3583": 29, "3585": 122, "3586": 116, "3587": 60, "3588": 50, "3589": 90, "3590": 210, "3591": 10, "3593": 107, "3599": 121, "3600": 121, "3601": 121, "3602": 121, "3603": 10, "3604": 10, "3605": 10, "3618": 171, "3619": 171, "3620": 150, "3622": 40, "3634": 10, "3645": 35, "3646": 50, "3647": 35, "3648": 35, "3649": 25, "3650": 40, "3655": 35, "3661": 50, "3662": 50, "3663": 50, "3664": 10, "3665": 57, "3666": 64, "3667": 71, "3672": 8, "3673": 8, "3675": 10, "3676": 10, "3680": 10, "3706": 60, "3707": 50, "3709": 10, "3711": 32, "3715": 22, "3726": 10, "3727": 13, "3728": 23, "3729": 23, "3730": 23, "3731": 23, "3732": 23, "3733": 23, "3734": 38, "3735": 38, "3736": 53, "3737": 53, "3738": 68, "3739": 68, "3740": 83, "3741": 83, "3742": 23, "3743": 38, "3744": 53, "3745": 53, "3746": 53, "3747": 33, "3748": 50, "3749": 67, "3750": 101, "3751": 84, "3752": 18, "3753": 18, "3754": 30, "3755": 30, "3756": 42, "3757": 42, "3758": 51, "3759": 51, "3760": 62, "3761": 62, "3762": 27, "3763": 27, "3764": 45, "3765": 45, "3766": 62, "3767": 62, "3768": 78, "3769": 78, "3770": 97, "3771": 97, "3772": 53, "3773": 83, "3774": 113, "3775": 143, "3776": 173, "3777": 10, "3782": 200, "3783": 78, "3784": 200, "3785": 200, "3786": 10, "3788": 10, "3790": 10, "3791": 10, "3792": 10, "3793": 10, "3794": 10, "3795": 10, "3796": 10, "3797": 10, "3798": 10, "3799": 10, "3800": 10, "3801": 10, "3802": 10, "3805": 10, "3806": 10, "3807": 10, "3808": 51, "3809": 10, "3810": 10, "3811": 10, "3812": 10, "3814": 42, "3815": 47, "3816": 48, "3818": 10, "3819": 51, "3835": 255, "3836": 255, "3840": 64, "3843": 85, "3847": 428, "3849": 10, "3915": 7, "3916": 10, "3917": 10, "3939": 128, "3940": 100, "3941": 10, "3942": 10, "3943": 385, "4227": 10, "4228": 10, "4229": 97, "4230": 150, "4243": 10, "4245": 10, "4246": 10, "4247": 10, "4248": 10, "4250": 10, "4251": 10, "4252": 10, "4257": 10, "4258": 17, "4259": 10, "4260": 10, "4261": 10, "4262": 10, "4263": 10, "4264": 10, "4265": 10, "4266": 10, "4267": 10, "4268": 10, "4269": 10, "4270": 10, "4271": 10, "4272": 10, "4273": 10, "4274": 10, "4275": 10, "4276": 10, "4278": 10, "4279": 20, "4280": 40, "4281": 60, "4282": 80, "4283": 99, "4284": 120, "4291": 75, "4292": 100, "4300": 10, "4301": 10, "4302": 10, "4303": 10, "4304": 10, "4305": 10, "4306": 10, "4307": 37, "4308": 22, "4309": 22, "4310": 22, "4311": 22, "4316": 10, "4318": 10, "4320": 10, "4329": 10, "4336": 22, "4343": 10, "4344": 12, "4345": 44, "4347": 90, "4348": 45, "4349": 45, "4350": 45, "4351": 45, "4352": 45, "4353": 55, "4354": 55, "4355": 55, "4356": 55, "4357": 55, "4359": 10, "4361": 10, "4362": 10, "4363": 10, "4371": 10, "4372": 10, "4373": 10, "4375": 10, "4381": 60, "4382": 66, "4383": 66, "4387": 36, "4388": 42, "4389": 25, "4390": 25, "4391": 25, "4392": 23, "4393": 18, "4394": 40, "4395": 26, "4396": 2, "4397": 50, "4398": 70, "4399": 50, "4400": 50, "4401": 22, "4402": 55, "4403": 37, "4404": 10, "4405": 10, "4406": 22, "4407": 10, "4408": 10, "4409": 10, "4410": 10, "4411": 10, "4412": 10, "4413": 15, "4414": 10, "4415": 2, "4418": 112, "4419": 10, "4438": 10, "4439": 10, "4440": 19, "4441": 10, "4455": 10, "4457": 10, "4458": 10, "4459": 10, "4470": 12, "4474": 15, "4476": 10, "4479": 10, "4480": 10, "4481": 10, "4482": 10, "4483": 10, "4484": 10, "4485": 10, "4486": 10, "4487": 10, "4488": 10, "4489": 10, "4490": 10, "4491": 10, "4492": 10, "4494": 10, "4499": 10, "4501": 10, "4502": 10, "4503": 10, "4504": 10, "4505": 10, "4506": 10, "4507": 10, "4509": 171, "4510": 171, "4511": 10, "4512": 10, "4521": 10, "4524": 10, "4529": 105, "4530": 105, "4531": 105, "4533": 105, "4534": 85, "4537": 10, "4539": 10, "4540": 214, "4541": 10, "4542": 10, "4543": 10, "4545": 10, "4546": 50, "4547": 10, "4548": 50, "4549": 10, "4550": 10, "4551": 10, "4554": 10, "4555": 10, "4556": 10, "4557": 10, "4564": 10, "4565": 10, "4566": 10, "4567": 10, "4568": 10, "4579": 10, "4580": 10, "4581": 10, "4582": 10, "4589": 10, "4590": 10, "4593": 10, "4594": 10, "4595": 10, "4600": 10, "4603": 37, "4604": 37, "4605": 37, "4606": 37, "4607": 10, "4608": 10, "4611": 10, "4615": 0, "4633": 10, "4634": 10, "4635": 10, "4636": 10, "4637": 10, "4638": 10, "4639": 10, "4640": 10, "4641": 10, "4642": 10, "4643": 10, "4645": 10, "4650": 10, "4651": 10, "4652": 10, "4653": 10, "4654": 10, "4655": 10, "4656": 10, "4659": 12, "4660": 24, "4661": 30, "4665": 50, "4666": 50, "4667": 50, "4668": 50, "4669": 140, "4670": 140, "4671": 140, "4672": 140, "4673": 190, "4674": 190, "4675": 190, "4676": 190, "4677": 75, "4678": 75, "4679": 75, "4680": 75, "4681": 105, "4682": 105, "4683": 105, "4684": 105, "4685": 70, "4686": 70, "4687": 70, "4688": 60, "4689": 35, "4690": 35, "4691": 35, "4692": 35, "4693": 35, "4694": 79, "4695": 79, "4696": 79, "4697": 79, "4698": 87, "4699": 87, "4700": 87, "4701": 87, "4702": 157, "4703": 157, "4704": 157, "4705": 157, "4706": 85, "4707": 10, "4708": 10, "4716": 10, "4717": 10, "4718": 10, "4719": 10, "4720": 10, "4721": 10, "4722": 10, "4723": 10, "4724": 10, "4725": 10, "4726": 10, "4733": 28, "4734": 10, "4735": 10, "4736": 10, "4737": 10, "4738": 10, "4739": 10, "4740": 10, "4741": 10, "4746": 10, "4747": 10, "4748": 10, "4749": 10, "4750": 10, "4751": 10, "4752": 10, "4753": 10, "4754": 10, "4755": 10, "4756": 10, "4757": 10, "4759": 10, "4765": 10, "4766": 10, "4768": 10, "4772": 10, "4773": 10, "4774": 57, "4775": 57, "4776": 62, "4777": 62, "4778": 57, "4779": 57, "4780": 62, "4789": 60, "4793": 155, "4796": 28, "4805": 71, "4806": 74, "4807": 77, "4808": 80, "4810": 100, "4811": 100, "4812": 100, "4813": 71, "4814": 74, "4815": 77, "4816": 80, "4817": 71, "4818": 74, "4819": 77, "4820": 80, "4821": 100, "4822": 100, "4823": 100, "4824": 100, "4825": 71, "4826": 74, "4827": 77, "4828": 80, "4829": 95, "4830": 105, "4831": 120, "4832": 130, "4833": 95, "4834": 105, "4835": 120, "4836": 130, "4837": 95, "4838": 105, "4839": 120, "4840": 130, "4841": 95, "4842": 105, "4843": 120, "4844": 130, "4845": 100, "4847": 95, "4848": 95, "4849": 105, "4850": 95, "4851": 95, "4852": 105, "4868": 28, "4870": 28, "4890": 105, "4893": 82, "4894": 10, "4898": 29, "4899": 10, "4900": 10, "4901": 10, "4902": 10, "4903": 10, "4904": 10, "4906": 10, "4907": 10, "4909": 10, "4910": 35, "4911": 10, "4920": 70, "4921": 70, "4922": 7, "4923": 7, "4924": 7, "4925": 10, "4926": 10, "4927": 10, "4928": 18, "4929": 18, "4930": 7, "4931": 7, "4932": 15, "4933": 21, "4934": 21, "4935": 28, "4936": 11, "4937": 11, "4938": 10, "4939": 10, "4940": 35, "4941": 17, "4942": 5, "4943": 5, "4944": 26, "4945": 26, "4947": 10, "4962": 10, "4965": 10, "4971": 100, "4972": 285, "4975": 10, "4977": 10, "4989": 35, "4990": 35, "4991": 35, "4992": 35, "4993": 35, "4994": 35, "4995": 35, "4996": 35, "4997": 35, "4998": 35, "4999": 10, "5000": 10, "5001": 10, "5002": 10, "5026": 10, "5027": 10, "5028": 10, "5029": 10, "5030": 10, "5031": 10, "5032": 10, "5033": 10, "5034": 10, "5035": 10, "5036": 10, "5037": 10, "5038": 10, "5039": 10, "5040": 10, "5041": 10, "5042": 10, "5043": 10, "5048": 22, "5067": 10, "5072": 10, "5073": 10, "5074": 10, "5075": 10, "5076": 10, "5079": 1, "5080": 10, "5081": 10, "5082": 10, "5083": 10, "5084": 10, "5085": 10, "5086": 10, "5087": 10, "5088": 10, "5089": 10, "5097": 22, "5098": 10, "5099": 10, "5100": 10, "5103": 10, "5104": 10, "5105": 10, "5106": 10, "5112": 10, "5113": 10, "5114": 10, "5115": 10, "5116": 10, "5117": 10, "5120": 10, "5130": 10, "5131": 10, "5132": 10, "5133": 10, "5137": 40, "5140": 10, "5144": 85, "5145": 120, "5146": 10, "5147": 10, "5162": 10, "5163": 10, "5166": 10, "5167": 10, "5168": 8, "5169": 8, "5170": 8, "5171": 10, "5172": 10, "5173": 10, "5176": 371, "5178": 105, "5181": 371, "5184": 371, "5187": 371, "5188": 165, "5190": 1, "5193": 1, "5195": 10, "5196": 10, "5197": 10, "5204": 22, "5211": 8, "5229": 10, "5237": 10, "5247": 71, "5248": 450, "5249": 10, "5250": 77, "5251": 77, "5252": 77, "5253": 571, "5254": 50, "5258": 10, "5260": 10, "5270": 10, "5274": 10, "5277": 10, "5285": 22, "5293": 22, "5294": 22, "5295": 22, "5296": 22, "5297": 22, "5298": 22, "5299": 22, "5300": 22, "5301": 22, "5302": 22, "5303": 22, "5304": 22, "5305": 18, "5306": 22, "5307": 18, "5308": 24, "5309": 40, "5310": 24, "5311": 24, "5312": 24, "5313": 24, "5314": 30, "5315": 30, "5316": 30, "5317": 30, "5318": 30, "5319": 40, "5320": 40, "5321": 40, "5322": 30, "5323": 30, "5324": 30, "5325": 30, "5326": 30, "5327": 30, "5328": 30, "5329": 30, "5330": 30, "5331": 30, "5342": 25, "5343": 25, "5344": 25, "5345": 25, "5346": 25, "5347": 25, "5348": 25, "5349": 25, "5350": 25, "5351": 25, "5352": 25, "5353": 45, "5354": 47, "5355": 45, "5356": 45, "5357": 47, "5358": 47, "5359": 85, "5361": 128, "5362": 175, "5363": 254, "5364": 175, "5369": 36, "5370": 36, "5371": 36, "5372": 36, "5373": 36, "5374": 36, "5375": 23, "5376": 23, "5377": 30, "5378": 30, "5379": 40, "5380": 40, "5382": 40, "5384": 100, "5393": 56, "5394": 40, "5395": 40, "5396": 40, "5397": 40, "5398": 40, "5399": 40, "5400": 40, "5401": 40, "5402": 40, "5403": 40, "5404": 92, "5405": 40, "5406": 40, "5407": 40, "5408": 40, "5409": 40, "5410": 40, "5413": 78, "5414": 74, "5417": 134, "5418": 82, "5420": 65, "5421": 325, "5439": 10, "5442": 10, "5447": 10, "5448": 10, "5452": 42, "5453": 42, "5454": 42, "5455": 42, "5472": 185, "5473": 60, "5474": 80, "5475": 80, "5476": 80, "5478": 10, "5480": 10, "5488": 10, "5489": 10, "5490": 10, "5491": 10, "5492": 10, "5497": 10, "5514": 10, "5516": 10, "5517": 10, "5521": 60, "5522": 80, "5523": 80, "5525": 60, "5526": 80, "5527": 80, "5529": 50, "5531": 10, "5532": 10, "5533": 10, "5539": 10, "5547": 10, "5553": 10, "5561": 157, "5571": 10, "5572": 10, "5581": 10, "5584": 85, "5589": 10, "5590": 10, "5591": 10, "5593": 70, "5594": 35, "5595": 64, "5596": 60, "5597": 57, "5603": 58, "5608": 10, "5609": 10, "5610": 10, "5611": 10, "5614": 10, "5619": 10, "5620": 10, "5621": 10, "5622": 10, "5627": 50, "5628": 50, "5629": 50, "5630": 52, "5631": 50, "5632": 52, "5633": 50, "5634": 50, "5635": 50, "5636": 52, "5637": 50, "5638": 50, "5639": 50, "5640": 50, "5641": 50, "5642": 50, "5643": 50, "5644": 50, "5645": 50, "5646": 50, "5647": 50, "5648": 50, "5649": 52, "5650": 50, "5651": 52, "5652": 50, "5653": 52, "5654": 50, "5655": 52, "5656": 50, "5657": 52, "5658": 50, "5659": 50, "5660": 52, "5661": 50, "5662": 52, "5663": 50, "5664": 52, "5665": 50, "5666": 285, "5680": 100, "5750": 93, "5751": 52, "5752": 10, "5753": 10, "5754": 10, "5755": 10, "5756": 10, "5757": 10, "5758": 10, "5759": 10, "5760": 10, "5761": 10, "5762": 10, "5763": 10, "5764": 10, "5765": 10, "5766": 10, "5767": 10, "5768": 10, "5769": 10, "5776": 10, "5777": 10, "5783": 10, "5784": 10, "5785": 10, "5786": 10, "5800": 60, "5801": 60, "5803": 10, "5805": 10, "5807": 10, "5808": 10, "5809": 10, "5810": 10, "5811": 10, "5812": 10, "5813": 10, "5814": 10, "5815": 10, "5816": 10, "5817": 10, "5818": 10, "5819": 10, "5820": 10, "5821": 10, "5822": 10, "5823": 10, "5824": 10, "5827": 10, "5829": 5, "5833": 10, "5842": 32, "5843": 32, "5844": 32, "5845": 32, "5846": 32, "5847": 32, "5848": 32, "5849": 32, "5850": 32, "5851": 32, "5852": 85, "5854": 10, "5855": 10, "5856": 10, "5859": 57, "5860": 57, "5861": 71, "5864": 10, "5865": 10, "5866": 10, "5867": 10, "5873": 10, "5874": 10, "5875": 10, "5876": 10, "5877": 10, "5878": 10, "5879": 10, "5880": 10, "5881": 10, "5882": 10, "5883": 10, "5884": 10, "5885": 10, "5886": 10, "5902": 100, "5903": 191, "5904": 100, "5905": 90, "5906": 78, "5908": 142, "5909": 28, "5910": 10, "5911": 10, "5914": 10, "5916": 10, "5917": 10, "5919": 25, "5920": 25, "5921": 10, "5922": 10, "5923": 4, "5924": 4, "5926": 25, "5927": 25, "5928": 24, "5929": 24, "5930": 10, "5931": 10, "5938": 10, "5944": 10, "5945": 10, "5947": 10, "5952": 10, "5954": 10, "5956": 10, "5958": 10, "5959": 10, "5960": 10, "5961": 10, "5962": 10, "5963": 10, "5966": 10, "5971": 10, "5972": 10, "5973": 10, "5974": 10, "5975": 10, "5976": 10, "5977": 10, "5978": 34, "5979": 10, "5980": 10, "5981": 10, "5982": 10, "5986": 34, "5990": 10, "5992": 10, "5993": 131, "5994": 62, "5996": 160, "5999": 10, "6001": 10, "6006": 87, "6007": 87, "6008": 87, "6009": 87, "6010": 87, "6011": 87, "6012": 87, "6013": 87, "6014": 87, "6015": 64, "6016": 64, "6017": 64, "6018": 64, "6019": 100, "6020": 64, "6021": 64, "6022": 100, "6023": 100, "6024": 100, "6025": 100, "6026": 60, "6027": 60, "6028": 60, "6029": 60, "6030": 60, "6031": 60, "6032": 60, "6033": 60, "6034": 60, "6035": 60, "6036": 60, "6037": 60, "6038": 60, "6039": 60, "6040": 60, "6041": 60, "6042": 60, "6043": 60, "6044": 60, "6045": 60, "6046": 74, "6047": 69, "6048": 157, "6049": 100, "6050": 55, "6051": 55, "6052": 70, "6054": 10, "6064": 10, "6072": 10, "6073": 10, "6074": 10, "6078": 75, "6079": 100, "6080": 75, "6081": 100, "6088": 2, "6089": 2, "6090": 2, "6094": 25, "6095": 25, "6096": 25, "6097": 25, "6098": 25, "6099": 30, "6100": 30, "6101": 79, "6102": 85, "6108": 1, "6109": 54, "6110": 55, "6111": 55, "6112": 10, "6113": 3, "6115": 5, "6116": 5, "6117": 10, "6118": 10, "6122": 10, "6123": 10, "6124": 10, "6125": 10, "6126": 10, "6127": 10, "6128": 10, "6129": 10, "6131": 40, "6132": 10, "6133": 10, "6134": 10, "6135": 10, "6140": 10, "6141": 10, "6142": 200, "6143": 200, "6144": 200, "6145": 200, "6146": 200, "6147": 200, "6148": 200, "6149": 200, "6150": 250, "6151": 250, "6152": 250, "6153": 250, "6154": 250, "6155": 250, "6156": 250, "6157": 250, "6159": 114, "6169": 10, "6170": 118, "6183": 10, "6184": 10, "6188": 10, "6189": 42, "6190": 10, "6198": 85, "6200": 10, "6201": 10, "6203": 255, "6204": 142, "6205": 10, "6206": 150, "6207": 10, "6208": 161, "6209": 10, "6210": 116, "6211": 10, "6212": 100, "6213": 100, "6214": 60, "6215": 120, "6216": 48, "6217": 15, "6218": 112, "6219": 102, "6220": 120, "6221": 75, "6222": 255, "6223": 121, "6224": 10, "6225": 132, "6226": 10, "6227": 133, "6228": 10, "6229": 98, "6230": 89, "6231": 75, "6232": 70, "6233": 83, "6234": 86, "6235": 86, "6236": 95, "6237": 98, "6238": 124, "6239": 139, "6240": 63, "6241": 65, "6242": 83, "6243": 69, "6244": 75, "6245": 98, "6246": 73, "6247": 255, "6248": 160, "6249": 10, "6250": 146, "6251": 10, "6252": 162, "6253": 10, "6254": 89, "6255": 100, "6256": 106, "6257": 85, "6258": 135, "6259": 108, "6260": 255, "6261": 128, "6262": 10, "6263": 127, "6264": 10, "6265": 146, "6266": 10, "6267": 60, "6268": 70, "6269": 110, "6270": 110, "6271": 110, "6272": 110, "6273": 110, "6274": 110, "6275": 52, "6276": 130, "6277": 131, "6278": 106, "6279": 20, "6280": 15, "6281": 15, "6282": 18, "6283": 16, "6285": 168, "6286": 168, "6287": 168, "6288": 168, "6289": 168, "6290": 154, "6291": 168, "6292": 168, "6293": 154, "6294": 308, "6295": 308, "6296": 148, "6297": 87, "6306": 0, "6314": 10, "6315": 10, "6322": 154, "6323": 154, "6324": 154, "6325": 154, "6326": 154, "6327": 154, "6328": 154, "6329": 154, "6330": 154, "6331": 154, "6332": 154, "6334": 10, "6335": 10, "6336": 10, "6337": 10, "6338": 10, "6339": 10, "6344": 92, "6346": 20, "6347": 20, "6348": 20, "6349": 20, "6350": 20, "6351": 23, "6352": 23, "6353": 23, "6354": 23, "6355": 23, "6356": 23, "6358": 1428, "6363": 62, "6364": 67, "6365": 65, "6366": 65, "6367": 70, "6368": 70, "6369": 67, "6370": 10, "6371": 27, "6372": 25, "6374": 10, "6376": 25, "6377": 25, "6378": 85, "6379": 50, "6380": 71, "6381": 85, "6382": 64, "6383": 37, "6385": 10, "6389": 105, "6390": 10, "6402": 10, "6403": 10, "6404": 10, "6405": 10, "6406": 10, "6407": 10, "6408": 10, "6409": 10, "6410": 10, "6411": 10, "6412": 10, "6413": 10, "6414": 10, "6415": 10, "6416": 10, "6417": 10, "6418": 10, "6419": 10, "6420": 10, "6421": 10, "6422": 10, "6423": 10, "6424": 10, "6425": 10, "6426": 10, "6427": 10, "6428": 10, "6429": 10, "6430": 10, "6431": 10, "6432": 10, "6433": 10, "6434": 10, "6435": 10, "6436": 10, "6437": 10, "6438": 10, "6439": 10, "6440": 10, "6441": 10, "6442": 10, "6443": 10, "6444": 10, "6445": 10, "6446": 10, "6447": 10, "6448": 10, "6449": 10, "6450": 10, "6451": 10, "6452": 10, "6453": 10, "6454": 10, "6455": 10, "6456": 10, "6457": 10, "6458": 10, "6459": 10, "6460": 10, "6461": 10, "6462": 10, "6463": 10, "6464": 10, "6465": 10, "6466": 10, "6467": 10, "6469": 20, "6470": 25, "6471": 31, "6472": 37, "6473": 37, "6482": 10, "6488": 10, "6490": 10, "6491": 10, "6492": 10, "6493": 10, "6494": 10, "6495": 10, "6496": 10, "6497": 10, "6498": 10, "6499": 10, "6500": 10, "6501": 10, "6502": 10, "6503": 10, "6504": 10, "6507": 10, "6508": 10, "6509": 10, "6510": 10, "6512": 10, "6514": 1, "6516": 10, "6518": 10, "6521": 10, "6523": 10, "6524": 10, "6525": 10, "6526": 10, "6527": 10, "6536": 10, "6543": 10, "6544": 10, "6558": 10, "6560": 254, "6604": 20, "6605": 24, "6606": 40, "6607": 65, "6608": 72, "6609": 65, "6610": 105, "6611": 143, "6612": 24, "6613": 60, "6614": 65, "6615": 105, "6616": 24, "6617": 65, "6618": 105, "6619": 143, "6620": 24, "6621": 40, "6622": 48, "6623": 60, "6624": 105, "6625": 65, "6626": 105, "6627": 143, "6628": 40, "6629": 105, "6630": 143, "6631": 48, "6632": 65, "6633": 105, "6634": 143, "6635": 20, "6636": 24, "6637": 24, "6638": 24, "6639": 24, "6640": 40, "6641": 48, "6642": 72, "6643": 60, "6644": 65, "6645": 110, "6646": 80, "6647": 80, "6648": 105, "6649": 140, "6650": 143, "6651": 24, "6652": 60, "6653": 105, "6654": 143, "6655": 20, "6656": 24, "6657": 34, "6658": 24, "6659": 40, "6660": 48, "6661": 72, "6662": 60, "6663": 65, "6664": 105, "6665": 143, "6666": 20, "6667": 24, "6668": 48, "6669": 60, "6670": 105, "6671": 60, "6672": 105, "6673": 143, "6674": 60, "6675": 65, "6676": 143, "6677": 20, "6678": 24, "6679": 24, "6680": 24, "6681": 24, "6682": 40, "6683": 48, "6684": 72, "6685": 60, "6686": 65, "6687": 110, "6688": 80, "6689": 80, "6690": 105, "6691": 140, "6692": 143, "6693": 24, "6694": 40, "6695": 60, "6696": 105, "6697": 20, "6698": 24, "6699": 24, "6700": 60, "6701": 65, "6702": 105, "6703": 20, "6704": 24, "6705": 24, "6706": 24, "6707": 24, "6708": 40, "6709": 48, "6710": 72, "6711": 60, "6712": 65, "6713": 105, "6714": 143, "6715": 20, "6716": 24, "6717": 24, "6718": 24, "6719": 24, "6720": 40, "6721": 48, "6722": 72, "6723": 60, "6724": 65, "6725": 105, "6726": 143, "6727": 72, "6728": 65, "6729": 105, "6730": 143, "6731": 10, "6739": 10, "6740": 10, "6743": 20, "6745": 20, "6747": 30, "6748": 20, "6749": 20, "6761": 68, "6762": 68, "6763": 68, "6769": 10, "6770": 285, "6772": 25, "6773": 157, "6774": 78, "6776": 78, "6777": 78, "6778": 78, "6779": 72, "6780": 78, "6781": 70, "6785": 10, "6786": 10, "6787": 10, "6788": 10, "6789": 94, "6790": 94, "6794": 74, "6795": 74, "6796": 39, "6797": 39, "6798": 10, "6799": 107, "6800": 10, "6801": 111, "6802": 10, "6803": 90, "6804": 10, "6805": 115, "6806": 28, "6807": 28, "6809": 10, "6810": 82, "6811": 10, "6812": 10, "6813": 40, "6814": 40, "6815": 348, "6816": 95, "6817": 10, "6818": 10, "6819": 77, "6820": 10, "6821": 88, "6822": 100, "6823": 100, "6824": 16, "6825": 16, "6826": 16, "6827": 10, "6828": 91, "6829": 15, "6830": 15, "6831": 47, "6832": 25, "6834": 60, "6835": 20, "6836": 44, "6837": 67, "6838": 27, "6839": 10, "6840": 101, "6841": 18, "6842": 18, "6843": 10, "6844": 70, "6845": 10, "6846": 45, "6847": 68, "6848": 68, "6849": 10, "6850": 105, "6851": 10, "6852": 10, "6853": 133, "6854": 133, "6855": 193, "6856": 193, "6857": 260, "6858": 260, "6859": 340, "6860": 340, "6861": 441, "6862": 441, "6863": 570, "6864": 570, "6865": 10, "6866": 87, "6867": 10, "6868": 57, "6869": 619, "6870": 619, "6871": 96, "6872": 40, "6873": 710, "6874": 710, "6875": 10, "6876": 61, "6877": 10, "6878": 61, "6879": 10, "6880": 61, "6881": 10, "6882": 61, "6883": 10, "6884": 61, "6885": 10, "6886": 61, "6887": 10, "6888": 61, "6889": 10, "6890": 94, "6891": 10, "6892": 10, "6893": 10, "6896": 10, "6897": 10, "6900": 10, "6901": 10, "6902": 10, "6903": 10, "6904": 10, "6905": 10, "6906": 10, "6907": 10, "6917": 10, "6921": 10, "6942": 10, "6943": 10, "6944": 10, "6969": 651, "6972": 30, "6973": 30, "6974": 30, "6975": 30, "6976": 30, "6977": 30, "6978": 30, "6979": 30, "6980": 30, "6981": 30, "6982": 30, "6983": 30, "6984": 30, "6985": 30, "6986": 30, "6987": 30, "6992": 10, "6993": 78, "6994": 77, "6995": 35, "6997": 10, "6998": 155, "6999": 155, "7003": 111, "7004": 111, "7005": 21, "7010": 10, "7011": 10, "7012": 10, "7013": 10, "7014": 10, "7021": 10, "7024": 10, "7031": 10, "7039": 10, "7049": 10, "7051": 10, "7078": 68, "7079": 64, "7080": 64, "7081": 60, "7082": 60, "7084": 145, "7085": 142, "7086": 162, "7105": 20, "7106": 18, "7107": 18, "7108": 18, "7109": 18, "7110": 18, "7111": 18, "7112": 18, "7113": 18, "7114": 18, "7115": 10, "7120": 10, "7125": 10, "7128": 10, "7130": 10, "7132": 10, "7133": 300, "7134": 300, "7135": 100, "7137": 70, "7138": 88, "7139": 88, "7140": 88, "7141": 4, "7142": 10, "7144": 10, "7145": 10, "7146": 10, "7147": 10, "7148": 10, "7149": 10, "7150": 10, "7152": 10, "7156": 10, "7157": 10, "7158": 4, "7159": 31, "7160": 97, "7161": 8, "7162": 8, "7202": 5, "7204": 5, "7206": 10, "7207": 10, "7209": 10, "7210": 10, "7211": 10, "7212": 10, "7213": 10, "7214": 10, "7215": 10, "7216": 10, "7217": 10, "7218": 10, "7219": 10, "7220": 10, "7221": 10, "7222": 10, "7223": 10, "7224": 10, "7225": 10, "7226": 10, "7227": 10, "7228": 10, "7229": 10, "7230": 10, "7231": 10, "7232": 10, "7233": 10, "7234": 10, "7235": 10, "7236": 10, "7275": 10, "7285": 10, "7329": 556, "7330": 117, "7331": 43, "7332": 43, "7334": 48, "7335": 10, "7336": 108, "7337": 10, "7338": 81, "7339": 620, "7340": 620, "7341": 528, "7342": 115, "7343": 750, "7344": 750, "7345": 10, "7346": 104, "7347": 10, "7348": 110, "7349": 667, "7350": 125, "7352": 48, "7353": 1, "7354": 41, "7355": 476, "7356": 476, "7357": 476, "7358": 476, "7359": 476, "7360": 476, "7361": 62, "7362": 31, "7363": 10, "7364": 81, "7365": 10, "7366": 81, "7368": 48, "7371": 48, "7373": 100, "7374": 10, "7375": 694, "7376": 694, "7378": 65, "7379": 120, "7380": 120, "7381": 75, "7382": 75, "7398": 7, "7417": 2, "7425": 10, "7426": 10, "7438": 10, "7439": 10, "7440": 10, "7441": 10, "7443": 11, "7459": 75, "7460": 75, "7461": 5, "7462": 120, "7463": 120, "7475": 42, "7476": 50, "7477": 50, "7479": 60, "7480": 70, "7481": 42, "7482": 42, "7483": 42, "7484": 42, "7485": 42, "7486": 42, "7487": 42, "7488": 42, "7492": 42, "7493": 42, "7494": 42, "7495": 42, "7496": 42, "7497": 38, "7500": 42, "7501": 42, "7502": 42, "7503": 42, "7504": 10, "7505": 10, "7506": 10, "7507": 10, "7508": 10, "7510": 10, "7511": 10, "7512": 10, "7513": 10, "7514": 10, "7515": 10, "7518": 10, "7519": 10, "7520": 10, "7528": 22, "7532": 10, "7551": 250, "7552": 250, "7553": 250, "7554": 250, "7555": 250, "7556": 250, "7557": 250, "7558": 250, "7559": 10, "7560": 10, "7561": 10, "7562": 10, "7563": 10, "7564": 10, "7565": 10, "7566": 10, "7569": 10, "7570": 10, "7571": 10, "7572": 10, "7573": 10, "7580": 10, "7582": 10, "7583": 10, "7585": 10, "7586": 10, "7593": 10, "7605": 10, "7606": 95, "7607": 105, "7608": 120, "7609": 130, "7614": 95, "7615": 105, "7616": 120, "7617": 130, "7618": 95, "7619": 105, "7620": 120, "7621": 130, "7626": 95, "7627": 105, "7628": 120, "7629": 130, "7631": 95, "7632": 120, "7634": 95, "7635": 120, "7640": 90, "7641": 90, "7642": 112, "7643": 116, "7644": 88, "7645": 88, "7646": 88, "7647": 88, "7648": 88, "7649": 88, "7650": 88, "7651": 88, "7654": 65, "7655": 65, "7656": 65, "7657": 65, "7658": 65, "7659": 65, "7660": 65, "7661": 65, "7682": 105, "7683": 105, "7691": 95, "7692": 105, "7693": 120, "7694": 120, "7695": 95, "7696": 105, "7697": 120, "7698": 120, "7699": 95, "7700": 105, "7701": 120, "7702": 130, "7703": 95, "7704": 105, "7705": 120, "7706": 130, "7711": 34, "7713": 50, "7714": 35, "7715": 35, "7716": 35, "7727": 17, "7736": 50, "7740": 10, "7741": 5, "7747": 10, "7752": 10, "7756": 10, "7767": 80, "7768": 80, "7769": 80, "7772": 54, "7773": 54, "7823": 105, "7891": 15, "7958": 10, "7959": 10, "7969": 10, "8133": 2000, "8149": 62, "8150": 62, "8151": 62, "8349": 326, "8350": 326, "8351": 326, "8352": 326, "8353": 326, "8354": 326, "8355": 326, "8356": 326, "8357": 326, "8358": 326, "8359": 326, "8360": 326, "8361": 326, "8362": 326, "8363": 326, "8364": 326, "8365": 326, "8366": 326, "696": 10, "698": 10, "4856": 10, "4872": 10, "4874": 10, "4878": 10, "4883": 10, "4885": 10, "4887": 10, "4895": 10, "7168": 10, "5479": 10, "5483": 10, "5484": 10, "5485": 10, "5486": 10, "5487": 10, "5493": 10, "5494": 10, "5495": 10, "5496": 10, "5499": 10, "5500": 10, "5501": 10, "7126": 10, "7129": 10, "90": 29, "91": 24, "92": 17, "93": 59, "187": 10, "459": 14, "1471": 77, "2036": 51, "2037": 51, "2715": 10, "2717": 10, "3151": 10, "3222": 5, "3291": 11, "3581": 29, "3697": 24, "3698": 25, "3699": 25, "3700": 28, "3701": 28, "3702": 35, "3703": 31, "3704": 31, "3705": 10, "4384": 68, "4385": 48, "4386": 85, "4532": 105, "5332": 29, "5333": 29, "5334": 29, "5335": 24, "5336": 24, "5337": 17, "5338": 17, "5339": 17, "5340": 17, "5341": 60, "5365": 48, "5366": 60, "5367": 85, "5368": 85, "5381": 88, "5385": 81, "5386": 78, "5387": 78, "5388": 71, "5389": 72, "5390": 420, "5391": 78, "5392": 74, "5411": 78, "5412": 81, "5422": 90, "6091": 22, "6092": 22, "6093": 12, "6103": 75, "6104": 90, "6105": 92, "6106": 91, "6107": 87, "6764": 97, "6765": 108, "6766": 120, "6767": 115, "6768": 140, "7127": 10, "2177": 10, "3322": 10, "4527": 105, "4528": 105, "5524": 80, "2250": 2, "2249": 3, "391": 20, "393": 48, "394": 85, "395": 120, "396": 170, "413": 25, "414": 40, "415": 60, "416": 86, "417": 120, "418": 166, "1677": 100, "1676": 40, "1678": 100, "3851": 80, "408": 100, "6742": 20, "6744": 20, "7151": 10, "7153": 10, "7154": 10, "7155": 10} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/KondoKit/res/runescape_small.ttf b/plugin-playground/src/main/kotlin/KondoKit/res/runescape_small.ttf new file mode 100644 index 0000000..4f3d764 Binary files /dev/null and b/plugin-playground/src/main/kotlin/KondoKit/res/runescape_small.ttf differ diff --git a/plugin-playground/src/main/kotlin/LoginTimer/plugin.kt b/plugin-playground/src/main/kotlin/LoginTimer/plugin.kt new file mode 100644 index 0000000..1b8f60b --- /dev/null +++ b/plugin-playground/src/main/kotlin/LoginTimer/plugin.kt @@ -0,0 +1,157 @@ +package LoginTimer + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.API +import plugin.api.MiniMenuEntry +import rt4.Component +import rt4.JagString +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter +import java.util.concurrent.TimeUnit + +/** + * Timer/SysTime that goes over the report abuse button + * @author Woah + */ +class plugin : Plugin() { + + private val COMPONENT_REPORT_ABUSE = 49217565 + private val DEFAULT_TIME_MODE = 0 + private val PLAY_TIME_TIME_MODE = 1 + private val LOCAL_TIME_TIME_MODE = 2 + private val TIME_MODE_EMPTY = 3 + private val TIME_MODE_INITIALIZATION = 4 + + private var timeMode = TIME_MODE_INITIALIZATION + private var initTime: Long = 0 + private var logoutFlag = true + private var displayMessageCounter = 0 + + private var component: Component? = null + + override fun Init() { + timeMode = TIME_MODE_INITIALIZATION + initTime = System.currentTimeMillis() + displayMessageCounter = 0 + } + + override fun OnPluginsReloaded(): Boolean { + return true + } + + override fun OnLogin() { + if(logoutFlag) + initTime = System.currentTimeMillis() + logoutFlag = false + } + + override fun OnLogout() { + logoutFlag = true + } + + override fun Draw(timeDelta: Long) { + if (component == null) + return + when (timeMode) { + DEFAULT_TIME_MODE -> { + if (component != null) { + if (component?.id == COMPONENT_REPORT_ABUSE) { + component?.text = JagString.parse("Report Abuse") + timeMode = TIME_MODE_EMPTY + } + } + } + PLAY_TIME_TIME_MODE -> { + val passedTime = System.currentTimeMillis() - initTime + val hrs = TimeUnit.MILLISECONDS.toHours(passedTime).toInt() % 24 + val min = TimeUnit.MILLISECONDS.toMinutes(passedTime).toInt() % 60 + val sec = TimeUnit.MILLISECONDS.toSeconds(passedTime).toInt() % 60 + val timeInHHMMSS = String.format("%02d:%02d:%02d", hrs, min, sec); + if (component != null) { + if (component?.id == COMPONENT_REPORT_ABUSE) { + component?.text = JagString.parse(timeInHHMMSS) + } + } + } + LOCAL_TIME_TIME_MODE -> { + val now = LocalDateTime.now() + val formatter = DateTimeFormatter.ofPattern("HH:mm:ss") + val formattedTime = now.format(formatter) + if (component != null) { + if (component?.id == COMPONENT_REPORT_ABUSE) { + component?.text = JagString.parse(formattedTime) + } + } + } + TIME_MODE_EMPTY -> { /*Nothing*/ } + TIME_MODE_INITIALIZATION -> { + val now = LocalDateTime.now() + val formatter = DateTimeFormatter.ofPattern("HH") + val formattedTime = now.format(formatter) + if (component != null) { + if (component?.id == COMPONENT_REPORT_ABUSE) { + val hour = formattedTime.toInt() + val welcomeString = when (hour) { + in 0..11 -> "Good morning!" + in 12..17 -> "Good afternoon!" + in 17..23 -> "Good evening!" + else -> { "Hello!" } + } + component?.text = JagString.parse(welcomeString) + if (displayMessageCounter in 0..400) { + displayMessageCounter++ + } + if (displayMessageCounter > 400 && displayMessageCounter != -1) { + displayMessageCounter = -1 + timeMode = PLAY_TIME_TIME_MODE + } + } + } + } + else -> { + timeMode = DEFAULT_TIME_MODE + } + } + } + + // This is done in the main component draw so the users who plain in SD will have their time updated + // Without having to interact with the interface + override fun ComponentDraw(componentIndex: Int, component: Component?, screenX: Int, screenY: Int) { + if (component?.id == COMPONENT_REPORT_ABUSE) + this.component = component + } + + override fun ProcessCommand(commandStr: String, args: Array?) { + if (commandStr.equals("::playedtime", ignoreCase = true)) { + timeMode = 1 + } else if (commandStr.equals("::systime", ignoreCase = true)) { + timeMode = 2 + } else if (commandStr.equals("::notime", ignoreCase = true)) { + timeMode = 0 + } + } + + override fun OnMiniMenuCreate(currentEntries: Array) { + var hasReportAbuse = false + for (entry in currentEntries) { + if (entry.verb == "Report Abuse") + hasReportAbuse = true + } + + if (hasReportAbuse) { + API.InsertMiniMenuEntry("Play Time", "") { + timeMode = PLAY_TIME_TIME_MODE + } + API.InsertMiniMenuEntry("Local Time", "") { + timeMode = LOCAL_TIME_TIME_MODE + } + API.InsertMiniMenuEntry("Disable Timer", "") { + timeMode = DEFAULT_TIME_MODE + } + API.InsertMiniMenuEntry("Reset Play Time", "") { + initTime = System.currentTimeMillis() + } + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/LoginTimer/plugin.properties b/plugin-playground/src/main/kotlin/LoginTimer/plugin.properties new file mode 100644 index 0000000..1f9beaa --- /dev/null +++ b/plugin-playground/src/main/kotlin/LoginTimer/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Woahscam, Ceikry' +DESCRIPTION='Displays the session time played, system time, or no time over the "Report Abuse" button.' +VERSION=1.1 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/MiniMenuQOL/plugin.kt b/plugin-playground/src/main/kotlin/MiniMenuQOL/plugin.kt new file mode 100644 index 0000000..19d1f23 --- /dev/null +++ b/plugin-playground/src/main/kotlin/MiniMenuQOL/plugin.kt @@ -0,0 +1,84 @@ +package MiniMenuQOL + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.* +import rt4.NpcList +import rt4.NpcType +import rt4.ObjType +import rt4.ObjTypeList + +class plugin : Plugin() { + private var debugEnabled = false + + override fun ProcessCommand(commandStr: String?, args: Array?) { + when (commandStr) { + "::mmdebug" -> debugEnabled = !debugEnabled + } + } + + override fun Draw(timeDelta: Long) { + if (!debugEnabled) return + val sb = StringBuilder() + val entries = API.GetMiniMenuEntries() + val strings = ArrayList() + + for (entry in entries) { + sb.append(entry.subject) + sb.append(" - ") + sb.append(entry.verb) + sb.append("(") + sb.append(entry.actionCode) + sb.append(")") + strings.add(sb.toString()) + sb.clear() + } + + if (debugEnabled) { + var screenY = 50 + for (string in strings) { + API.DrawText( + FontType.SMALL, + FontColor.YELLOW, + TextModifier.LEFT, + string, + 10, + screenY + ) + screenY += 10 + } + } + } + + override fun DrawMiniMenu(entry: MiniMenuEntry) { + when (entry.type) { + MiniMenuType.NPC -> { + val index = entry.subjectIndex + val npc = NpcList.npcs[index.toInt()] + val type = npc.type + if (debugEnabled && entry.verb.equals("examine", true)) + entry.subject = entry.subject + "(I:${entry.subjectIndex},ID:${type.id})" + if (entry.isStrictlySecondary) + entry.toggleStrictlySecondary() + } + + MiniMenuType.LOCATION -> { + if (debugEnabled && entry.verb.equals("examine", true)) + entry.subject = entry.subject + "(ID:${entry.subjectIndex})" + } + + MiniMenuType.PLAYER -> { + if (debugEnabled && entry.verb.equals("follow", true)) + entry.subject = entry.subject + "(I:${entry.subjectIndex})" + } + + MiniMenuType.OBJ -> { + val def = ObjTypeList.get(entry.subjectIndex.toInt()) + if (debugEnabled) + entry.subject = entry.subject + "(ID:${entry.subjectIndex})" + if (def.cost >= 1000) + entry.subject = "" + entry.subject.substring(12) + } + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/MiniMenuQOL/plugin.properties b/plugin-playground/src/main/kotlin/MiniMenuQOL/plugin.properties new file mode 100644 index 0000000..91bfb7c --- /dev/null +++ b/plugin-playground/src/main/kotlin/MiniMenuQOL/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Provides debug and some basic QOL for the MiniMenu' +VERSION=1.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/RememberMyLogin/plugin.kt b/plugin-playground/src/main/kotlin/RememberMyLogin/plugin.kt new file mode 100644 index 0000000..5c5d39f --- /dev/null +++ b/plugin-playground/src/main/kotlin/RememberMyLogin/plugin.kt @@ -0,0 +1,46 @@ +package RememberMyLogin + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.API +import rt4.Component +import rt4.JagString +import rt4.Player +import rt4.client + +class plugin : Plugin() { + var hasRan = false + var credentials = HashMap>() + var server = "" + var username = "" + var password = "" + + override fun Init() { + server = client.hostname + ":" + client.port + credentials = API.GetData("login-credentials") as? HashMap> ?: HashMap() + username = credentials.get(server)?.get("username") ?: "" + password = credentials.get(server)?.get("password") ?: "" + } + + override fun ComponentDraw(componentIndex: Int, component: Component?, screenX: Int, screenY: Int) { + if (hasRan || API.IsLoggedIn()) return + if (component!!.text == JagString.of("Please Log In")) { + API.SetVarcStr(32, username) + API.SetVarcStr(33, password) + hasRan = true + } + } + + override fun OnLogin() { + username = String(Player.usernameInput.chars) + password = String(Player.password.chars) + + credentials[server] = mapOf("username" to username, "password" to password) as HashMap + + API.StoreData("login-credentials", credentials) + } + + override fun OnLogout() { + hasRan = false + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/RememberMyLogin/plugin.properties b/plugin-playground/src/main/kotlin/RememberMyLogin/plugin.properties new file mode 100644 index 0000000..c010f1b --- /dev/null +++ b/plugin-playground/src/main/kotlin/RememberMyLogin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Stores your last used login for automatic reuse, per server' +VERSION=1.1 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/SlayerTrackerPlugin/plugin.kt b/plugin-playground/src/main/kotlin/SlayerTrackerPlugin/plugin.kt new file mode 100644 index 0000000..50bfbdb --- /dev/null +++ b/plugin-playground/src/main/kotlin/SlayerTrackerPlugin/plugin.kt @@ -0,0 +1,166 @@ +package SlayerTrackerPlugin + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.API +import plugin.api.FontColor +import plugin.api.FontType +import plugin.api.TextModifier +import rt4.Sprite +import java.awt.Color +import java.lang.Exception + +class plugin : Plugin() { + val boxColor = 6116423 + val posX = 5 + val posY = 30 + val boxWidth = 90 + val boxHeight = 30 + val boxOpacity = 160 + val textX = 65 + val textY = 50 + val spriteX = 7 + val spriteY = 30 + + var slayerTaskID = -1 + var slayerTaskAmount = 0 + var curSprite: Sprite? = null + + override fun Draw(deltaTime: Long) { + if (slayerTaskAmount == 0 || slayerTaskID == -1) return + + API.FillRect(posX, posY, boxWidth, boxHeight, boxColor, boxOpacity) + curSprite?.render(spriteX, spriteY) + API.DrawText( + FontType.SMALL, + FontColor.fromColor(Color.WHITE), + TextModifier.LEFT, + slayerTaskAmount.toString(), + textX, + textY + ) + } + + override fun OnVarpUpdate(id: Int, value: Int) { + if (id == 2502) { + slayerTaskID = value and 0x7F + slayerTaskAmount = (value shr 7) and 0xFF + setSprite() + } + } + + override fun OnLogout() { + slayerTaskID = -1 + slayerTaskAmount = 0 + curSprite = null + } + + private fun setSprite() { + try { + val itemId: Int = when (slayerTaskID) { + 0 -> 4144 + 1 -> 4149 + 2 -> 9008 + 3 -> 10176 + 4 -> 4135 + 5 -> 4139 + 6 -> 14072 + 7 -> 948 + 8 -> 12189 + 9 -> 3098 + 10 -> 1747 + 11 -> 4141 + 12 -> 1751 + 13 -> 11047 + 14 -> 2349 + 15 -> 9008 + 16 -> 4521 + 17 -> 4134 + 18 -> 8900 + 19 -> 4520 + 20 -> 4137 + 21 -> 1739 + 22 -> 7982 + 23 -> 10149 + 24 -> 8141 + 25 -> 6637 + 26 -> 6695 + 27 -> 8132 + 28 -> 4145 + 29 -> 7500 + 30 -> 1422 + 31 -> 6105 + 32 -> 6709 + 33 -> 1387 + 34 -> 28 + 35 -> 4147 + 36 -> 552 + 37 -> 6722 + 38 -> 10998 + 39 -> 9016 + 40 -> 2402 + 41 -> 1753 + 42 -> 7050 + 43 -> 8137 + 44 -> 12570 + 45 -> 8133 + 46 -> 4671 + 47 -> 4671 + 48 -> 1159 + 49 -> 4140 + 50 -> 2351 + 51 -> 4142 + 52 -> 7778 + 53 -> 8139 + 54 -> 7160 + 55 -> 4146 + 56 -> 2402 + 57 -> 9007 + 58 -> 2359 + 59 -> 6661 + 60 -> 10997 + 61 -> 12201 + 62 -> 12570 + 63 -> 7420 + 64 -> 4148 + 65 -> 4818 + 66 -> 6109 + 67 -> 4138 + 68 -> 8134 + 69 -> 4136 + 70 -> 9032 + 71 -> 12055 + 72 -> 7576 + 73 -> 10634 + 74 -> 1165 + 75 -> 6811 + 76 -> 553 + 77 -> 8135 + 78 -> 11732 + 79 -> 10284 + 80 -> 13923 + 81 -> 2353 + 82 -> 9105 + 83 -> 10591 + 84 -> 8136 + 85 -> 4143 + 86 -> 1549 + 87 -> 4519 + 88 -> 24 + 89 -> 10535 + 90 -> 571 + 91 -> 2952 + 92 -> 958 + 93 -> 7594 + else -> -1 + } + + val sprite = API.GetObjSprite(itemId, 1, false, 1, 1) + + curSprite = sprite + } catch (ignored: Exception){} + } + + //Check the source of plugin.Plugin for more methods you can override! Happy hacking! <3 + //There are also many methods to aid in plugin development in plugin.api.API +} diff --git a/plugin-playground/src/main/kotlin/SlayerTrackerPlugin/plugin.properties b/plugin-playground/src/main/kotlin/SlayerTrackerPlugin/plugin.properties new file mode 100644 index 0000000..ca7efb5 --- /dev/null +++ b/plugin-playground/src/main/kotlin/SlayerTrackerPlugin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry, Greg' +DESCRIPTION='Draws a simple slayer task tracker onto the screen if one is active.' +VERSION=1.1 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/TabReply/plugin.kt b/plugin-playground/src/main/kotlin/TabReply/plugin.kt new file mode 100644 index 0000000..c1cbc4f --- /dev/null +++ b/plugin-playground/src/main/kotlin/TabReply/plugin.kt @@ -0,0 +1,18 @@ +package TabReply + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.API +import java.awt.event.KeyAdapter +import java.awt.event.KeyEvent + +class plugin : Plugin() { + override fun Init() { + API.AddKeyboardListener(object : KeyAdapter() { + override fun keyPressed(e: KeyEvent) { + if (e.keyCode == KeyEvent.VK_TAB) + API.DispatchCommand("::reply") + } + }) + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/TabReply/plugin.properties b/plugin-playground/src/main/kotlin/TabReply/plugin.properties new file mode 100644 index 0000000..bf77a72 --- /dev/null +++ b/plugin-playground/src/main/kotlin/TabReply/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Allows you to press tab to reply to DMs.' +VERSION=1.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/TakeScreenshot/plugin.kt b/plugin-playground/src/main/kotlin/TakeScreenshot/plugin.kt new file mode 100644 index 0000000..bfb2480 --- /dev/null +++ b/plugin-playground/src/main/kotlin/TakeScreenshot/plugin.kt @@ -0,0 +1,19 @@ +package TakeScreenshot + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.API +import java.awt.event.KeyAdapter +import java.awt.event.KeyEvent + +class plugin : Plugin() { + override fun Init() { + API.AddKeyboardListener(object : KeyAdapter() { + override fun keyPressed(e: KeyEvent) { + if (e.keyCode == KeyEvent.VK_PRINTSCREEN && e.isControlDown) { + API.Screenshot() + } + } + }) + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/TakeScreenshot/plugin.properties b/plugin-playground/src/main/kotlin/TakeScreenshot/plugin.properties new file mode 100644 index 0000000..51234cb --- /dev/null +++ b/plugin-playground/src/main/kotlin/TakeScreenshot/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='ipkpjersi' +DESCRIPTION='Allows you to use CRTL + PRINTSCREEN to take a screenshot.' +VERSION=1.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/ToggleResizableSD/plugin.kt b/plugin-playground/src/main/kotlin/ToggleResizableSD/plugin.kt new file mode 100644 index 0000000..58ed363 --- /dev/null +++ b/plugin-playground/src/main/kotlin/ToggleResizableSD/plugin.kt @@ -0,0 +1,94 @@ +package ToggleResizableSD + +import KondoKit.Exposed +import plugin.Plugin +import plugin.api.API +import plugin.api.API.StoreData +import rt4.DisplayMode +import rt4.GameShell +import rt4.InterfaceList +import rt4.client +import java.awt.event.KeyAdapter +import java.awt.event.KeyEvent + +class plugin : Plugin() { + + @Exposed("Use Resizable SD") + var useResizable = false + + @Exposed("Setting wantHd to true hides the black screen on logout (when resize SD is enabled), by enabling HD on logout ") + var wantHd = false + + override fun Init() { + API.AddKeyboardListener(object : KeyAdapter() { + override fun keyPressed(e: KeyEvent) { + if (e.keyCode == KeyEvent.VK_F12) { + toggleResizableSd() + } + } + }) + + useResizable = DisplayMode.resizableSD + if (API.GetData("use-resizable-sd") == true) { + useResizable = true + } + + var osNameLowerCase: String = System.getProperty("os.name").toLowerCase() + if (!osNameLowerCase.startsWith("mac")) { + wantHd = true + } + + if (API.GetData("want-hd") == false) { + wantHd = false + } + } + + override fun ProcessCommand(commandStr: String, args: Array?) { + when (commandStr.toLowerCase()) { + "::toggleresizablesd", "::resizablesd", "::togglersd", "::rsd" -> { + toggleResizableSd() + } + "::toggleresizablesdhd", "::resizablesdhd", "::togglersdhd", "::rsdhd" -> { + wantHd = !wantHd + StoreData("want-hd", wantHd) + API.SendMessage("You have turned login screen HD " + (if (wantHd) "on" else "off")) + } + } + } + + fun toggleResizableSd() { + //We only want to toggle resizable SD when we are logged in and the lobby/welcome interface is not open. + if (InterfaceList.aClass13_26 == null || client.gameState != 30) { + return + } + + DisplayMode.resizableSD = !DisplayMode.resizableSD + useResizable = DisplayMode.resizableSD + StoreData("use-resizable-sd", useResizable) + + if (!DisplayMode.resizableSD) { + DisplayMode.setWindowMode(true, 0, -1, -1) + } else { + DisplayMode.setWindowMode(true, 0, GameShell.frameWidth, GameShell.frameHeight) + } + } + + override fun Draw(timeDelta: Long) { + if (useResizable != DisplayMode.resizableSD) { + toggleResizableSd() + } + } + + fun OnKondoValueUpdated() { + StoreData("want-hd", wantHd) + StoreData("use-resizable-sd", useResizable) + } + + override fun OnLogout() { + if (DisplayMode.resizableSD && wantHd) { + //Because resizable SD always uses the "HD" size canvas/window mode (check the in-game Graphics Options with resizeable SD enabled if you don't believe me!), useHD becomes true when logging out, so logging out with resizeSD enabled means "HD" will always be enabled on the login screen after logging out, so we might as well fix the HD flyover by setting resizableSD to false first, and then calling setWindowMode to replace the canvas and set newMode to 2. + DisplayMode.resizableSD = false + DisplayMode.setWindowMode(true, 2, GameShell.frameWidth, GameShell.frameHeight) + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/ToggleResizableSD/plugin.properties b/plugin-playground/src/main/kotlin/ToggleResizableSD/plugin.properties new file mode 100644 index 0000000..54fa4cc --- /dev/null +++ b/plugin-playground/src/main/kotlin/ToggleResizableSD/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='ipkpjersi' +DESCRIPTION='Allows you to use F12 to toggle resizable SD.' +VERSION=1.1 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/ValUAdd/plugin.kt b/plugin-playground/src/main/kotlin/ValUAdd/plugin.kt new file mode 100644 index 0000000..c2e028a --- /dev/null +++ b/plugin-playground/src/main/kotlin/ValUAdd/plugin.kt @@ -0,0 +1,29 @@ +package ValUAdd + +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.API.SendMessage +import rt4.Inv +import rt4.ObjTypeList +import kotlin.math.round + +class plugin : Plugin() { + override fun ProcessCommand(commandStr: String, args: Array?) { + when(commandStr.toLowerCase()) { + "::valuadd" -> { + var value = 0 + val inventory = Inv.objectContainerCache.get(93) as Inv + for(i in 0 until inventory.objectIds.size) { + if(inventory.objectIds[i] != -1) { + val obj = ObjTypeList.get(inventory.objectIds[i]) + val stackSize = inventory.objectStackSizes[i] + val itemBaseCost = round(obj.cost * 0.6).toInt() + val itemStackCost = itemBaseCost * stackSize + value += itemStackCost + } + } + SendMessage("Total HA value of inventory: $value GP") + } + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/ValUAdd/plugin.properties b/plugin-playground/src/main/kotlin/ValUAdd/plugin.properties new file mode 100644 index 0000000..6a3f2e0 --- /dev/null +++ b/plugin-playground/src/main/kotlin/ValUAdd/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='bushtail' +DESCRIPTION='Quickly tally the value of your inventory with a command.' +VERSION=1.0 \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/XPDropPlugin/XPSprites.kt b/plugin-playground/src/main/kotlin/XPDropPlugin/XPSprites.kt new file mode 100644 index 0000000..a7c2173 --- /dev/null +++ b/plugin-playground/src/main/kotlin/XPDropPlugin/XPSprites.kt @@ -0,0 +1,40 @@ +package XPDropPlugin + +import plugin.api.API +import rt4.Sprite + +object XPSprites { + fun getSpriteForSkill(skillId: Int) : Sprite? { + return API.GetSprite(getSpriteId(skillId)) + } + + private fun getSpriteId(skillId: Int) : Int { + return when (skillId) { + 0 -> 197 + 1 -> 199 + 2 -> 198 + 3 -> 203 + 4 -> 200 + 5 -> 201 + 6 -> 202 + 7 -> 212 + 8 -> 214 + 9 -> 208 + 10 -> 211 + 11 -> 213 + 12 -> 207 + 13 -> 210 + 14 -> 209 + 15 -> 205 + 16 -> 204 + 17 -> 206 + 18 -> 216 + 19 -> 217 + 20 -> 215 + 21 -> 220 + 22 -> 221 + 23 -> 222 + else -> 222 + } + } +} \ No newline at end of file diff --git a/plugin-playground/src/main/kotlin/XPDropPlugin/plugin.kt b/plugin-playground/src/main/kotlin/XPDropPlugin/plugin.kt new file mode 100644 index 0000000..e857ef1 --- /dev/null +++ b/plugin-playground/src/main/kotlin/XPDropPlugin/plugin.kt @@ -0,0 +1,260 @@ +package XPDropPlugin + +import KondoKit.Exposed +import plugin.Plugin +import plugin.api.API +import plugin.api.API.* +import plugin.api.FontColor.fromColor +import plugin.api.FontType +import plugin.api.TextModifier +import plugin.api.WindowMode +import rt4.Sprite +import rt4.client +import java.awt.Color +import java.awt.image.BufferedImage +import java.io.InputStream +import javax.imageio.ImageIO +import kotlin.math.ceil + + +class plugin : Plugin() { + + enum class Theme { + DEFAULT, RUNELITE + } + + @Exposed + private var theme = Theme.DEFAULT + + @Exposed + private var alwaysShow = false + + private val displayTimeout = 10000L // 10 seconds + private val drawStart = 175 + private val drawPadding = 25 + private val drawClear = 60 + private val lastXp = IntArray(24) + private var totalXp = 0 + private val activeGains = ArrayList() + private var lastGain = 0L + private val IN_GAME = 30 + + private val spriteCache = HashMap() + + override fun Init() { + val themeIndex = (GetData("xp-drop-theme") as? String) ?: "DEFAULT" + theme = Theme.valueOf(themeIndex) + alwaysShow = (GetData("xp-drop-alwaysShow") as? Boolean) ?: false + } + + override fun Draw(deltaTime: Long) { + if (shouldSkipDrawing()) return + + drawTotalXPBox() + val removeList = ArrayList() + + val movementSpeedFactor = deltaTime / 16.666 // 60 FPS + + for (gain in activeGains) { + gain.currentPos -= ceil(movementSpeedFactor).toInt() // Adjust movement based on deltaTime + if (gain.currentPos <= drawClear) { + removeList.add(gain) + totalXp += gain.xp + } else if (gain.currentPos <= drawStart) { + drawXPDrops(gain) + } + } + + activeGains.removeAll(removeList.toSet()) + } + + private fun shouldSkipDrawing(): Boolean { + return client.gameState < IN_GAME || (!alwaysShow && isDisplayTimeoutExpired() && activeGains.isEmpty()) + } + + fun OnKondoValueUpdated() { + StoreData("xp-drop-theme",theme.toString()) + StoreData("xp-drop-alwaysShow",alwaysShow) + } + + private fun isDisplayTimeoutExpired(): Boolean { + return System.currentTimeMillis() - lastGain >= displayTimeout + } + + override fun OnXPUpdate(skill: Int, xp: Int) { + if (xp == lastXp[skill]) return + + val gain = xp - lastXp[skill] + if (gain <= 0) return + + if (lastXp[skill] == 0) { + lastXp[skill] = xp + totalXp += xp + return + } + lastXp[skill] = xp + + val currentTail = try { + activeGains.last().currentPos + } catch (e: Exception) { + drawStart - drawPadding + } + + activeGains.add(XPGain(skill, gain, currentTail + drawPadding)) + lastGain = System.currentTimeMillis() + } + + override fun OnLogout() { + lastGain = 0L + for (i in 0 until 24) lastXp[i] = 0 + totalXp = 0 + activeGains.clear() + } + + private fun drawTotalXPBox() { + when (theme) { + Theme.DEFAULT -> drawDefaultXPBox() + Theme.RUNELITE -> drawRuneliteXPBox() + } + } + + private fun drawXPDrops(gain : XPGain) { + when (theme) { + Theme.DEFAULT -> drawDefaultXPDrop(gain) + Theme.RUNELITE -> drawRuneliteXPDrops(gain) + } + } + + private fun drawDefaultXPDrop(gain: XPGain) { + var posX = API.GetWindowDimensions().width / 2 + if (API.GetWindowMode() == WindowMode.FIXED) + posX += 60 + val sprite = spriteCache.getOrPut(gain.skill) { XPSprites.getSpriteForSkill(skillId = gain.skill) } + sprite?.render(posX - 25, gain.currentPos - 20) + DrawText( + FontType.SMALL, + fromColor(Color.WHITE), + TextModifier.LEFT, + addCommas(gain.xp.toString()), + posX, + gain.currentPos + ) + } + + private fun drawRuneliteXPDrops(gain: XPGain) { + val w = API.GetWindowDimensions().width + val offset = if(API.GetWindowMode() == WindowMode.FIXED) 251 else 225 + val extra = 2; + val posX = w - (offset + extra) + + val str = addCommas(gain.xp.toString()) + val fontCharWidth = 4 + val displace = str.length*fontCharWidth + 30 + + // should be scaled https://github.com/runelite/runelite/blob/0500906f8de9cd20875c168a7a59e5e066ed5058/runelite-client/src/main/java/net/runelite/client/game/SkillIconManager.java#L50 + // but for now this is good enough + + val sprite = spriteCache.getOrPut(gain.skill) { XPSprites.getSpriteForSkill(skillId = gain.skill) } + sprite?.render(posX - displace, gain.currentPos - 20) + drawTextWithDropShadow(posX, gain.currentPos, Color.WHITE, addCommas(gain.xp.toString())) + } + + private fun drawDefaultXPBox() { + var posX = API.GetWindowDimensions().width / 2 + val posY = API.GetWindowDimensions().height / 4 + + if (API.GetWindowMode() == WindowMode.FIXED) + posX += 60 + + API.ClipRect(0, 0, posX * 2, posY * 4) + + val horizontal = spriteCache.getOrPut(822) { API.GetSprite(822) } + val horizontalTop = spriteCache.getOrPut(820) { API.GetSprite(820) } + val tlCorner = spriteCache.getOrPut(824) { API.GetSprite(824) } + val blCorner = spriteCache.getOrPut(826) { API.GetSprite(826) } + val trCorner = spriteCache.getOrPut(825) { API.GetSprite(825) } + val brCorner = spriteCache.getOrPut(827) { API.GetSprite(827) } + val bg = spriteCache.getOrPut(657) { API.GetSprite(657) } + + bg?.render(posX - 77, 10) + API.FillRect(posX - 75, 5, 140, 30, 0, 64) + + blCorner?.render(posX - 77, 10) + tlCorner?.render(posX - 77, 5) + trCorner?.render(posX + 41, 5) + brCorner?.render(posX + 41, 10) + + horizontalTop?.render(posX - 45, -8) + horizontal?.render(posX - 45, 22) + horizontalTop?.render(posX - 15, -8) + horizontal?.render(posX - 15, 22) + horizontalTop?.render(posX + 9, -8) + horizontal?.render(posX + 9, 22) + + DrawText( + FontType.SMALL, + fromColor(Color.WHITE), + TextModifier.LEFT, + "Total Xp: ${addCommas(totalXp.toString())}", + posX - 65, + 28 + ) + } + + private fun drawRuneliteXPBox() { + val boxHeight = 29 + val boxWidth = 119 + val posX = API.GetWindowDimensions().width + + val innerBorderColor = Color(90, 82, 69).rgb + val outerBorderColor = Color(56,48,35).rgb + + val offset = if(API.GetWindowMode() == WindowMode.FIXED) 251 else 225 + val boxStart = posX - (offset + boxWidth) + val yOffset = if(API.GetWindowMode() == WindowMode.FIXED) 4 else 0 + + val lvlIcon = 898; + val sprite = spriteCache.getOrPut(lvlIcon){ + val imageStream: InputStream = plugin::class.java.getResourceAsStream("res/rl-lvls.png") + imageStream.use { imageStream -> + val image: BufferedImage = ImageIO.read(imageStream) + API.GetSpriteFromPNG(image) + } + } + + // Draw a simple rectangle instead of the default box design + API.FillRect(boxStart, yOffset, boxWidth, boxHeight, innerBorderColor, 150) + drawTextWithDropShadow(boxStart+boxWidth-4, 18+yOffset, Color.WHITE, addCommas(totalXp.toString())) + + // Inner Border + API.DrawRect(boxStart+1, 1+yOffset, boxWidth-2, boxHeight-2, innerBorderColor) + // redraw around the border + API.DrawRect(boxStart, yOffset, boxWidth, boxHeight, outerBorderColor) + sprite?.render(boxStart + 3, 3+yOffset) + } + + data class XPGain(val skill: Int, val xp: Int, var currentPos: Int) + + fun addCommas(num: String): String { + var newString = "" + if (num.length > 9) { + return "Lots!" + } + var counter = 1 + num.reversed().forEach { + if (counter % 3 == 0 && counter != num.length) { + newString += "$it," + } else { + newString += it + } + counter++ + } + return newString.reversed() + } + + private fun drawTextWithDropShadow(x: Int, y: Int, color: Color, text: String, mod : TextModifier = TextModifier.RIGHT) { + DrawText(FontType.SMALL, fromColor(Color(0)), mod, text, x + 1, y + 1) + DrawText(FontType.SMALL, fromColor(color), mod, text, x, y) + } +} + diff --git a/plugin-playground/src/main/kotlin/XPDropPlugin/plugin.properties b/plugin-playground/src/main/kotlin/XPDropPlugin/plugin.properties new file mode 100644 index 0000000..53b820f --- /dev/null +++ b/plugin-playground/src/main/kotlin/XPDropPlugin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Ceikry' +DESCRIPTION='Draws nice and clean experience drops onto the screen.' +VERSION=1.3 diff --git a/plugin-playground/src/main/kotlin/XPDropPlugin/res/rl-lvls.png b/plugin-playground/src/main/kotlin/XPDropPlugin/res/rl-lvls.png new file mode 100644 index 0000000..c840a49 Binary files /dev/null and b/plugin-playground/src/main/kotlin/XPDropPlugin/res/rl-lvls.png differ diff --git a/plugin-playground/src/main/kotlin/XPDropPlugin/res/xpIco.png b/plugin-playground/src/main/kotlin/XPDropPlugin/res/xpIco.png new file mode 100644 index 0000000..c68a872 Binary files /dev/null and b/plugin-playground/src/main/kotlin/XPDropPlugin/res/xpIco.png differ diff --git a/plugin-playground/src/main/kotlin/XPGlobesPlugin/Constants.kt b/plugin-playground/src/main/kotlin/XPGlobesPlugin/Constants.kt new file mode 100644 index 0000000..6990c89 --- /dev/null +++ b/plugin-playground/src/main/kotlin/XPGlobesPlugin/Constants.kt @@ -0,0 +1,30 @@ +package XPGlobesPlugin + +import java.awt.Color + + +object Constants { + const val SKILL_COUNT = 24 + const val MAX_LEVEL = 99 + const val INVALID_LEVEL = -1 + const val INVALID_XP = -1 + const val GLOBE_LIFETIME = 7000L // 7 seconds + const val GLOBES_Y_OFFSET = 48 // y-offset in screen space where globes are drawn + val GLOBE_BKG_COLOR: Color = Color.GRAY + const val GLOBE_BKG_SIZE = 33 // Size of the globe background + val GLOBE_BORDER_COLOR: Color = Color.BLACK + const val GLOBE_BORDER_WIDTH = 1 // Width of the globe border + val GLOBE_XP_ARC_COLOR: Color = Color.YELLOW + val GLOBE_XP_ARC_LEVEL_UP_COLOR: Color = Color.BLUE + const val GLOBE_XP_ARC_WIDTH = 3 // Width of the Xp arc + const val MAX_GLOBES = 6 // maximum number of globes we will draw on resizable clients + const val MAX_GLOBES_SD = 3 // maximum number of globes we will draw on fixed clients + const val GLOBE_PADDING = 3 // horizontal padding between globes + const val GLOBE_TEXT_SIZE = 20 // font size of level text + const val GLOBE_TEXT_PULSES = 7 // 7 text pulses per globe lifetime, on level-up + const val GLOBE_TEXT_PULSE_LOW = 0.2F // alpha during text fade-out + const val GLOBE_TEXT_PULSE_HIGH = 0.8F // alpha during text fade-in + val GLOBE_TEXT_FG_COLOR: Color = Color.BLUE // foreground color of level text during level-up + val GLOBE_TEXT_BG_COLOR: Color = Color.BLACK // background color (outline) of text number during level-up + const val GLOBE_TEXT_OUTLINE_WIDTH = 2 // outline width +} diff --git a/plugin-playground/src/main/kotlin/XPGlobesPlugin/XPSprites.kt b/plugin-playground/src/main/kotlin/XPGlobesPlugin/XPSprites.kt new file mode 100644 index 0000000..0005f2b --- /dev/null +++ b/plugin-playground/src/main/kotlin/XPGlobesPlugin/XPSprites.kt @@ -0,0 +1,80 @@ +package XPGlobesPlugin + +import plugin.api.API +import rt4.Sprite + + +object XPSprites { + + private val spriteOffsets: Array> = arrayOf( + Pair(1,-1), // attack + Pair(0,0), // defense + Pair(0,0), // strength + Pair(0,1), // health + Pair(0,0), // ranged + Pair(0,0), // prayer + Pair(0,-1), // magic + Pair(0,-1), // cooking + Pair(0,0), // woodcutting + Pair(1,0), // fletching + Pair(3,0), // fishing + Pair(0,-1), // fire-making + Pair(1,0), // crafting + Pair(1,0), // smithing + Pair(2,-1), // mining + Pair(0,1), // herblore + Pair(2,0), // agility + Pair(0,0), // thieving + Pair(-1,0), // slayer + Pair(0,0), // farming + Pair(0,0), // runecrafting + Pair(0,0), // hunter + Pair(1,-1), // construction + Pair(2,-1), // summoning + ) + + + fun getSpriteForSkill(skillId: Int) : Sprite? { + return API.GetSprite(getSpriteId(skillId)) + } + + + fun getSpriteOffsetForSkill(skillId: Int) : Pair { + if (skillId < 0 || skillId >= Constants.SKILL_COUNT) { + return Pair(0,0) + } + + return spriteOffsets[skillId]; + } + + + private fun getSpriteId(skillId: Int) : Int { + return when (skillId) { + 0 -> 197 + 1 -> 199 + 2 -> 198 + 3 -> 203 + 4 -> 200 + 5 -> 201 + 6 -> 202 + 7 -> 212 + 8 -> 214 + 9 -> 208 + 10 -> 211 + 11 -> 213 + 12 -> 207 + 13 -> 210 + 14 -> 209 + 15 -> 205 + 16 -> 204 + 17 -> 206 + 18 -> 216 + 19 -> 217 + 20 -> 215 + 21 -> 220 + 22 -> 221 + 23 -> 222 + else -> 222 + } + } +} diff --git a/plugin-playground/src/main/kotlin/XPGlobesPlugin/XPTable.kt b/plugin-playground/src/main/kotlin/XPGlobesPlugin/XPTable.kt new file mode 100644 index 0000000..15f161a --- /dev/null +++ b/plugin-playground/src/main/kotlin/XPGlobesPlugin/XPTable.kt @@ -0,0 +1,64 @@ +package XPGlobesPlugin + +import plugin.api.API +import rt4.IntNode +import rt4.Node + +object XPTable { + + const val SKILLS_XP_TABLE = 716 + + private var xpTable: MutableList = mutableListOf() + + // Function to lazily load the XP table from the API if it's not already populated + private fun loadXpTable() { + if (xpTable.isEmpty()) { + // Add the initial entry for key 1 = 0 + xpTable.add(0) + + // Fetch XP table from the API + API.GetDataMap(SKILLS_XP_TABLE).table.nodes.forEach { bucket -> + var currentNode: Node = bucket.nextNode + while (currentNode !== bucket) { + if (currentNode is IntNode) { + xpTable.add(currentNode.value) + } + currentNode = currentNode.nextNode + } + } + } + } + + fun getXpRequiredForLevel(level: Int): Int { + loadXpTable() + if (level in 1..xpTable.size) { + return xpTable[level - 1] + } + return 0 + } + + fun getLevelForXp(xp: Int): Pair { + loadXpTable() + var lowIndex = 0 + var highIndex = xpTable.size - 1 + + if (xp >= xpTable[highIndex]) { + return Pair(Constants.MAX_LEVEL, xp - xpTable[highIndex]) // Level is max or above, return the highest level + } + + while (lowIndex <= highIndex) { + val midIndex = (lowIndex + highIndex) / 2 + when { + xp < xpTable[midIndex] -> highIndex = midIndex - 1 + xp >= xpTable[midIndex + 1] -> lowIndex = midIndex + 1 + else -> { + val currentLevel = midIndex + 1 + val xpGained = xp - xpTable[midIndex] + return Pair(currentLevel, xpGained) + } + } + } + + return Pair(Constants.INVALID_LEVEL, 0) // If xp is below all defined levels + } +} diff --git a/plugin-playground/src/main/kotlin/XPGlobesPlugin/plugin.kt b/plugin-playground/src/main/kotlin/XPGlobesPlugin/plugin.kt new file mode 100644 index 0000000..311afb5 --- /dev/null +++ b/plugin-playground/src/main/kotlin/XPGlobesPlugin/plugin.kt @@ -0,0 +1,285 @@ +package XPGlobesPlugin + +import rt4.Sprite +import plugin.Plugin +import plugin.annotations.PluginMeta +import plugin.api.* +import java.awt.Color +import java.awt.geom.Arc2D +import java.awt.image.BufferedImage +import java.awt.Font +import java.awt.font.FontRenderContext +import java.awt.geom.AffineTransform +import java.awt.Graphics2D +import java.awt.BasicStroke +import kotlin.math.cos +import kotlin.math.PI + +class plugin : Plugin() { + private var xpGlobes = Array(Constants.SKILL_COUNT) { skillId -> XPGlobe(skillId, Constants.INVALID_XP, 0L, null, null ) } + private var hasActiveGlobes = false + private var backgroundSprite: Sprite? = null + private var borderSprite: Sprite? = null + + + override fun Draw(deltaTime: Long) { + if (!hasActiveGlobes) + return + + var posX = API.GetWindowDimensions().width / 2 + val posY = API.GetWindowDimensions().height / 4 + + if (API.GetWindowMode() == WindowMode.FIXED) { + posX += 60 + } + + API.ClipRect(0, 0, posX * 2, posY * 4) + + // update globes + val activeGlobes = ArrayList() + for (xpGlobe in xpGlobes) { + val globeDelta = System.currentTimeMillis() - xpGlobe.timestamp + if (globeDelta >= Constants.GLOBE_LIFETIME) { + xpGlobe.timestamp = 0L // dead + xpGlobe.textSprite = null + } + + if (xpGlobe.timestamp != 0L) { + activeGlobes.add(xpGlobe) // alive + } + } + + if (activeGlobes.isEmpty()) { + hasActiveGlobes = false + return + } + + val maxGlobes = if (API.GetWindowMode() == WindowMode.FIXED) Constants.MAX_GLOBES_SD else Constants.MAX_GLOBES + val globeCount = if (activeGlobes.size > maxGlobes) maxGlobes else activeGlobes.size + val (backgroundSize, globeBorder, xpBorder) = getGlobeDimensions() + val globeSize = backgroundSize + globeBorder * 2 + xpBorder * 2 + val allGlobesWidth = globeCount * (globeSize + Constants.GLOBE_PADDING) - Constants.GLOBE_PADDING + var globePosX = posX - (allGlobesWidth / 2) + + // render globes + activeGlobes.take(globeCount).forEach { xpGlobe -> + drawXpGlobe(xpGlobe, globePosX) + globePosX += globeSize + Constants.GLOBE_PADDING // Update globePosX for the next globe + } + } + + + override fun OnXPUpdate(skillId: Int, xp: Int) { + val xpGlobe = xpGlobes[skillId] + if (xpGlobe.xp == Constants.INVALID_XP) { + xpGlobe.xp = xp + return + } + + if (xp == xpGlobe.xp) { + return + } + + val prevXp = xpGlobe.xp + xpGlobe.xp = xp + val (prevLevel, _) = XPTable.getLevelForXp(prevXp) + val (level, gainedXp) = XPTable.getLevelForXp(xp) + + // we do not draw XP globes for level >= MAX_LEVEL + if (level != Constants.INVALID_LEVEL && level < Constants.MAX_LEVEL) { + var arcWeight = 1.0 + var arcColor = Constants.GLOBE_XP_ARC_LEVEL_UP_COLOR + val hasLeveledUp = level != prevLevel + + if (!hasLeveledUp) { + val levelXpDiff = XPTable.getXpRequiredForLevel(level + 1) - XPTable.getXpRequiredForLevel(level) + arcWeight = gainedXp.toDouble() / levelXpDiff.toDouble() + arcColor = Constants.GLOBE_XP_ARC_COLOR + } + + val (backgroundSize, globeBorder, xpBorder) = getGlobeDimensions() + val globeSize = backgroundSize + globeBorder * 2 + xpBorder * 2 + if (xpGlobe.textSprite == null) { + // update arcSprite and timestamp only if the textSprite has finished the animation + xpGlobe.arcSprite = createArcSprite(backgroundSize + xpBorder * 2, arcColor, arcWeight) + xpGlobe.timestamp = System.currentTimeMillis() + } + + if (borderSprite == null) { + borderSprite = createArcSprite(globeSize, Constants.GLOBE_BORDER_COLOR, 1.0) + } + + if (backgroundSprite == null) { + backgroundSprite = createArcSprite(backgroundSize, Constants.GLOBE_BKG_COLOR, 1.0) + } + + if (hasLeveledUp) { + val fontSize = Constants.GLOBE_TEXT_SIZE + val fgColor = Constants.GLOBE_TEXT_FG_COLOR + val bgColor = Constants.GLOBE_TEXT_BG_COLOR + val outlineSize = Constants.GLOBE_TEXT_OUTLINE_WIDTH + xpGlobes[skillId].textSprite = createTextSprite(fontSize, fgColor, bgColor, outlineSize, level.toString()) + xpGlobe.timestamp = System.currentTimeMillis() + } + + hasActiveGlobes = true + } + } + + + override fun OnLogout() { + hasActiveGlobes = false + xpGlobes = Array(Constants.SKILL_COUNT) { skillId -> XPGlobe(skillId, Constants.INVALID_XP, 0L, null, null) } + } + + + data class XPGlobe(val skillId: Int, var xp: Int, var timestamp: Long, var arcSprite: Sprite?, var textSprite: Sprite?) + + + private fun getGlobeDimensions() : Triple { + val backgroundSize = Constants.GLOBE_BKG_SIZE + val globeBorder = Constants.GLOBE_BORDER_WIDTH + val xpBorder: Int = Constants.GLOBE_XP_ARC_WIDTH + return Triple(backgroundSize, globeBorder, xpBorder) + } + + + private fun drawXpGlobe(globe: XPGlobe, posX: Int, posY: Int = Constants.GLOBES_Y_OFFSET) { + + val (backgroundSize, globeBorder, xpBorder) = getGlobeDimensions() + val totalBorder = globeBorder + xpBorder + + // rendering background + borderSprite?.render(posX, posY) + globe.arcSprite?.render(posX + globeBorder, posY + globeBorder) + backgroundSprite?.render(posX + totalBorder, posY + totalBorder) + + // rendering skill sprite + val skillSprite = XPSprites.getSpriteForSkill(globe.skillId) + + val spriteWidth = skillSprite?.anInt1860 ?: 0 // sprite width without trimmed pixels + val spriteHeight = skillSprite?.anInt1866 ?: 0 // sprite height without trimmed pixels + val xOffset = (backgroundSize - spriteWidth) / 2 + val yOffset = (backgroundSize - spriteHeight) / 2 + + val drawX = posX + totalBorder + xOffset + val drawY = posY + totalBorder + yOffset + + // even if the centering logic is correct, the sprite seems not to be well-centered inside the + // graphic resource. Manually adjust... + val (spriteXOffset, spriteYOffset) = XPSprites.getSpriteOffsetForSkill(globe.skillId) + + skillSprite?.render(drawX + spriteXOffset, drawY + spriteYOffset) + + // rendering level-up text animation + if (globe.textSprite != null) { + val clamp: (Float, Float, Float) -> Float = { value, min, max -> + when { + value < min -> min + value > max -> max + else -> value + } + } + + val lerp: (Float, Float, Float) -> Float = { valA, valB, factor -> + valA * (1.0F - factor) + (valB * factor) + } + + val currentTime = System.currentTimeMillis() + var animWeight = (currentTime - globe.timestamp).toFloat() / Constants.GLOBE_LIFETIME + animWeight = clamp(animWeight, 0.0F, 1.0F) + // sample cosine for the text pulse animation effect (cosine phase-shift is to respect number of pulses) + var pulseWeight = cos(PI + animWeight * (PI * 2 * Constants.GLOBE_TEXT_PULSES).toFloat()).toFloat() + pulseWeight = (pulseWeight + 1.0F) / 2.0F // map pulseWeight from [-1,1] to [0,1] + val pulseIntensity = lerp(Constants.GLOBE_TEXT_PULSE_LOW, Constants.GLOBE_TEXT_PULSE_HIGH, pulseWeight) + + val globeSize = backgroundSize + globeBorder * 2 + xpBorder * 2 + + val textWidth = globe.textSprite?.anInt1860 ?: 0 + val textHeight = globe.textSprite?.anInt1866 ?: 0 + val textXOffset = (globeSize - textWidth) / 2 + val textYOffset = (globeSize - textHeight) / 2 + + val textX = posX + textXOffset + (Constants.GLOBE_TEXT_OUTLINE_WIDTH / 2) + val textY = posY + textYOffset + (Constants.GLOBE_TEXT_OUTLINE_WIDTH / 2) + + val alpha = lerp(0f, 255f, pulseIntensity).toInt() + globe.textSprite?.renderAlpha(textX, textY, alpha) + } + } + + private fun createTextSprite(size: Int, fgColor: Color, bgColor: Color, outlineSize: Int, text: String) : Sprite { + return SpritePNGLoader.getImageIndexedSprite(createTextImage(size, fgColor, bgColor, outlineSize, text)) + } + + private fun createTextImage(fontSize: Int, fgColor: Color, bgColor: Color, outlineSize: Int, text: String) : BufferedImage { + // Create a dummy font to calculate the size of the BufferedImage + val font = Font("Arial", Font.PLAIN, fontSize) + val affineTransform = AffineTransform() + val frc = FontRenderContext(affineTransform, true, true) + val textWidth = font.getStringBounds(text, frc).width.toInt() + outlineSize + val textHeight = font.getStringBounds(text, frc).height.toInt() + outlineSize + + // Create an image that can contain the text + val image = BufferedImage(textWidth, textHeight, BufferedImage.TYPE_INT_ARGB) + val graphics = image.createGraphics() as Graphics2D + + // Enable antialiasing for smoother text + graphics.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING, java.awt.RenderingHints.VALUE_ANTIALIAS_ON) + + // Set the font + graphics.font = font + + // Calculate position for the text + val metrics = graphics.getFontMetrics(font) + val x = 0 + val y = metrics.ascent + + // Create a glyph vector for the outline + val glyphVector = font.createGlyphVector(frc, text) + val shape = glyphVector.getOutline(x.toFloat(), y.toFloat()) + + // Draw the outline (background color) + graphics.color = bgColor + graphics.stroke = BasicStroke(outlineSize.toFloat()) // Set the outline width + graphics.draw(shape) + + // Fill the text (foreground color) + graphics.color = fgColor + graphics.fill(shape) + + // Dispose graphics to release resources + graphics.dispose() + + return image + } + + + private fun createArcSprite(size: Int, arcColor: Color, weight: Double): Sprite { + return SpritePNGLoader.getImageIndexedSprite(createArcImage(size, arcColor, weight)) + } + + + private fun createArcImage(size: Int, arcColor: Color, weight: Double): BufferedImage { + val image = BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB) + val graphics = image.createGraphics() + + // Enable antialiasing for smoother circle edges + graphics.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING, java.awt.RenderingHints.VALUE_ANTIALIAS_ON) + + // Set the color for the circle + graphics.color = arcColor + + // Calculate the angle and starting angle based on the weight + val angle = weight * 360 + val startAngle = 360 * (0.75 - weight) + + // Draw the portion of the circle + graphics.fill(Arc2D.Double(0.0, 0.0, size.toDouble(), size.toDouble(), startAngle, angle, Arc2D.PIE)) + + // Dispose graphics to release resources + graphics.dispose() + + return image + } +} diff --git a/plugin-playground/src/main/kotlin/XPGlobesPlugin/plugin.properties b/plugin-playground/src/main/kotlin/XPGlobesPlugin/plugin.properties new file mode 100644 index 0000000..d5a64b8 --- /dev/null +++ b/plugin-playground/src/main/kotlin/XPGlobesPlugin/plugin.properties @@ -0,0 +1,3 @@ +AUTHOR='Pyrethus' +DESCRIPTION='Draws experience globes (level progress) on experience gains.' +VERSION=0.9 diff --git a/ref/cs2-names.txt b/ref/cs2-names.txt new file mode 100644 index 0000000..831408b --- /dev/null +++ b/ref/cs2-names.txt @@ -0,0 +1,1897 @@ +NXT Beta + +1: if_setonstocktransmit +2: userflowflags +3: player_group_member_get_rank +4: worldmap_getmap +5: cam2_setlookatacceleration +6: detail_bgsoundvol +7: cc_setonplayergroupvarptransmit +8: stockmarket_getoffercount +9: ttv_stream_getstate +10: if_setmouseovercursor +11: cc_setsize +12: cam_forceangle +13: if_setplayermodel_self +14: detailcanmod_animdetail +15: chatcat_getphrasecount +16: if_setoptkeyignoreheld +17: if_setonhold +18: cc_getcolour +19: ttv_livestreams_getstream_next +20: coordz +21: chatcat_findsubcatbyshortcut +22: friend_is_referred +23: cc_getscrolly +24: cc_getmodelangle_y +25: if_getinvobject +26: cc_gety +27: cam2_removealleffects +28: if_setcolour +29: struct_param +30: resume_clanforumqfcdialog +31: detailcanset_reflections +32: enum_hasoutput +33: get_mousebuttons +34: sound_speech_volume +35: push_array_int +36: cc_setonmouseleave +37: os_physicalmemorysize +38: is_npc_visible +39: player_group_find +40: get_npc_name +41: cam2_setpositionangularinterpolation +42: inv_getnum +43: detail_particles +44: chat_playername_unfiltered +45: if_setoncamfinished +46: cam_setfollowheight +47: detailcanmod_spotshadows +48: get_selfyangle +49: worldmap_getzoom +50: cc_setaspect +51: get_minimenu_length +52: userdetail_lobby_lastloginday +53: sound_synth +54: cc_setdragdeadzone +55: worldmap_isloaded +56: if_debug_button6 +57: if_debug_button2 +58: if_resume_pausebutton +59: worldlist_specific_thisworld +60: oc_shardcount +61: oc_hasvarobj +62: worldmap_3dview_gettextfont +63: cc_setpausetext +64: player_group_member_is_owner +65: ttv_livestreams_getstream_start +66: cc_setonplayergrouptransmit +67: detail_lightdetail_high +68: telemetry_get_row_index +69: if_setgraphic +70: if_setdragdeadtime +71: opcount +72: stockmarket_getoffercompletedcount +73: branch_greater_than +74: worldmap_setflashtics_default +75: create_step_reached +76: oc_cert +77: if_debug_getcomname +78: detail_speechvol +79: cc_setmaxlines +80: oc_findnext +81: worldlist_switch +82: pop_int_local +83: fps_stats +84: activeclansettings_getbanneddisplayname +85: if_setoutline +86: worldmap_setflashtics +87: autosetup_dosetup +88: if_setonkey +89: cam2_setlookatorientation_yrotation +90: ttv_webcam_start +91: if_setdraggable +92: worldmap_perpetualflash +93: if_getmodel +94: create_suggest_name_request +95: friend_getslotfromname +96: if_setlinedirection +97: get_loc_screen_position +98: oc_members +99: login_request +100: worldmap_jumptosourcecoord_instant +101: detailcanset_vsync +102: detailget_ambientocclusion +103: cc_setobject_alwaysnum +104: login_request_social_network +105: stat_base +106: detailget_customcursors +107: cc_setopcursor +108: cam2_getlookatmode +109: if_setopcursor +110: if_set2dangle +111: stockmarket_getoffertype +112: cc_setonclanchanneltransmit +113: cam2_enable +114: login_ban_duration +115: cam_moveto +116: cam2_setlookatangularinterpolation +117: fullscreen_enter +118: detail_loadingscreentype +119: ttv_livestreams_update +120: is_gamescreen_state +121: cc_create +122: ignore_add +123: cam2_setpositionmode +124: quit +125: worldmap_3dview_getcoordfine +126: cc_getgraphicdimensions +127: if_sethflip +128: profile_cpu +129: if_gettrans +130: mec_category +131: worldlist_specific +132: sound_song_volume +133: get_obj_screen_position +134: if_getscrollheight +135: detailget_canchoosesafemode +136: if_opensubclient +137: notify_accountcreated +138: chatcat_getsubcatshortcut +139: lobby_entergamereply +140: if_settext +141: cam2_setlookatorientation_vector +142: detailcanmod_antialiasingmode +143: if_setonstattransmit +144: chat_getfilter_public +145: if_setonmisctransmit +146: quest_varpreq_count +147: push_int_local +148: detailcanset_orthographic +149: cc_setonvarcstrtransmit +150: keyheld_alt +151: if_getmodelxof +152: if_getcharindexatpos +153: if_setobject_wearcol_nonum +154: if_sethide +155: if_setonclanchanneltransmit +156: db_getfield +157: cc_setlinkfriend +158: get_entity_bounding_box +159: activeclansettings_getbannedcount +160: detail_soundvol +161: quest_varbitreq_count +162: os_ismac +163: cc_sethide +164: chat_getfilter_trade +165: preload_percent +166: if_getlayer +167: activeclansettings_getaffinedmuted +168: activechatphrase_setdynamicint +169: cam2_setpositionacceleration +170: map_isowner +171: cc_setontimer +172: cam2_setpositionmaxspeed_axis +173: if_setonrelease +174: facing_fine +175: mes +176: shader_preload_throttle +177: if_setpausetext +178: fullscreen_getmode +179: append +180: sound_vorbis_volume +181: cc_setdragrenderbehaviour +182: inv_getobj +183: chat_setfilter +184: cc_callonresize +185: detailcanmod_antialiasing_quality +186: if_setop +187: detailget_safemode +188: cc_setmodelzoom +189: cc_setretex +190: detailget_particles +191: stockmarket_getofferprice +192: create_name_validate_reply +193: detailget_fog_on +194: if_settextshadow +195: worldmap_setmap +196: date_isleapyear +197: worldmap_getconfigorigin +198: stockmarket_isofferadding +199: activeclanchannel_find_affined +200: cam2_getpositionmode +201: if_setongamepadtrigger +202: cc_setonscrollwheel +203: add +204: cc_getop +205: cc_setgraphicshadow +206: detailcanmod_ambientocclusion +207: basematerial +208: tostring_localised +209: get_obj_bounding_box +210: setobj +211: movecoord +212: clan_getchatuserworld +213: if_getinvcount +214: detail_antialiasing_default +215: is_targeted_entity +216: testbit +217: if_get2dangle +218: detailget_texturing +219: comlevel_active +220: detail_skydetail +221: detailget_chosesafemode +222: cc_invalidate +223: cam2_setlookatentity_npc +224: cc_gettext +225: if_setnoclickthrough +226: ttv_library_getstate +227: activeclansettings_find_listened +228: create_setunder13 +229: worldmap_jumptodisplaycoord_instant +230: detail_idleanims_many +231: or +232: oc_cost +233: autosetup_blackflaglast +234: if_settrans +235: fullscreen_exit +236: userdetail_lobby_jcoins_balance +237: cc_getopbase +238: if_debug_getcomcount +239: sethardcodedopcursors +240: worldmap_jumptodisplaycoord +241: worldmap_setflashloops_default +242: cc_dragpickup +243: and +244: autosetup_getlevel +245: cc_deleteall +246: if_setobject_nonum +247: if_setmodelangle +248: cc_getx +249: if_getscrollx +250: clan_getchatdisplayname +251: activeclansettings_find_affined +252: map_lang +253: branch_equals +254: detailcanset_bloom +255: if_gettext +256: cam2_setfieldofview +257: runenergy_visible +258: push_constant_int +259: shader_preload_percent +260: branch_if_true +261: enum_getreversecount_string +262: cam2_setspringproperties +263: db_find_with_count +264: push_array_int_and_index +265: activechatphrase_setdynamicobj +266: if_settextalign +267: cc_setvflip +268: detailget_bgsoundvol +269: defaultminimenu +270: video_advert_play +271: chatphrase_find +272: if_setlinkplayergroup +273: define_array +274: ignore_setnotes +275: detailget_idleanims_many +276: map_world +277: resume_namedialog +278: oc_wearpos +279: chatphrase_findnext +280: cam2_setpositionacceleration_axis +281: getwindowmode +282: cc_setonvartransmit +283: chatcat_findphrasebyshortcut +284: autosetup_setmin +285: detail_cpuusage +286: worldmap_closemap +287: cc_getmodel +288: quest_param +289: sound_group_start +290: get_obj_overlay_height +291: cc_npc_setcustomretex +292: worldmap_setcategorypriority +293: if_setfill +294: if_setongamepadaxis +295: bug_report +296: pop_varbit +297: cc_getmodelxof +298: cc_setdraggable +299: switch +300: if_getfontgraphic +301: openurl_shim +302: ttv_stream_stop +303: player_find_active_minimenu_entry +304: player_group_is_members_only +305: detailcanset_waterdetail +306: cam_reset +307: cam_removeroof +308: has_html5 +309: get_second_minimenu_entry +310: nc_param +311: worldlist_fetch +312: coordx_fine +313: detail_customcursors +314: db_findnext +315: if_setscrollpos +316: login_accountappeal +317: quest_questreq_count +318: if_setopkey +319: if_getnextsubid +320: if_setonsubchange +321: login_inprogress +322: coordz_fine +323: worldmap_getcurrentmap +324: email_validation_change_address +325: detailget_orthographic +326: cc_gettargetmask +327: detailget_reflections +328: chatphrase_getdynamiccommandparam_enum +329: detailget_hardshadows +330: append_num +331: cc_getgraphic +332: if_settextantimacro +333: mes_typed +334: mec_param +335: detailget_musicvol +336: if_getcharposatindex +337: ignore_del +338: autosetup_sethigh +339: stockmarket_getoffercompletedgold +340: worldlist_pingworlds +341: cam_smoothreset +342: sound_synth_rate +343: affinedclansettings_setmuted_fromchannel +344: if_setonclansettingstransmit +345: append_char +346: detail_loginvol +347: if_setretex +348: get_active_minimenu_entry +349: quest_statreq_met +350: oc_stackable +351: worldmap_disableelement +352: if_setmodelorigin +353: date_runeday_todate +354: if_setlinkfriend +355: if_setnpchead +356: autosetup_setmedium +357: worldmap_getsourcecoord +358: quest_allreqmet +359: if_get_gamescreen +360: cc_setcolour +361: cam2_setpositionspline_spline +362: cam2_legacycam_ready +363: keyheld_ctrl +364: enum_hasoutput_string +365: cc_setmodelangle +366: mec_textsize +367: detailcanmod_particles +368: quest_getname +369: if_npc_setcustomretex +370: enum_getoutputcount +371: if_debug_button8 +372: if_setopbase +373: clan_getchatuserrank +374: if_setobject_alwaysnum +375: cc_setfill +376: inv_stockbase +377: cc_settrans +378: sound_synth_volume +379: sound_jingle +380: cc_setongamepadtrigger +381: invother_getnum +382: telemetry_get_column_id +383: detailcanset_particles +384: oc_minimenu_colour_overridden +385: if_setonop +386: create_reply +387: scale +388: cam2_setlookatorientation_xmovement +389: chatphrase_getdynamiccommandcount +390: quest_questreq +391: oc_unshard +392: create_createrequest +393: if_npc_setcustomheadmodel +394: cc_getinvobject +395: text_switch +396: cam_dec_y +397: force_interface_drag +398: viewport_getfov +399: can_run_java_client +400: cc_resume_pausebutton +401: friend_setrank +402: cc_getfontgraphic +403: worldmap_flashelement +404: ttv_chat_sendmessage +405: detail_shadows +406: cc_setlinkfriendchat +407: detailcanmod_vsync +408: if_find +409: detailcanset_groundblending +410: interpolate +411: telemetry_get_group_count +412: cc_getscrollwidth +413: detailget_flickering_on +414: detail_stereo +415: if_setoninvtransmit +416: if_close +417: cc_getcharindexatpos +418: if_setscrollsize +419: min +420: cam2_setpositionentity_npc +421: if_setobject_wearcol_alwaysnum +422: friend_getworldname +423: cc_set2dangle +424: userdetail_lobby_graceexpiry +425: os_islinux +426: userdetail_lobby_lastloginaddress +427: if_setobject_wearcol +428: append_signnum +429: oc_multistacksize +430: detailget_lightdetail_high +431: cc_getmodelzoom +432: quest_statreq_stat +433: cc_setmodeltint +434: ttv_webcam_getstate +435: cc_setobject_wearcol_nonum +436: cc_getlayer +437: detailget_buildarea +438: cc_setonclansettingstransmit +439: sound_mixbuss_setlevel +440: cc_setonop +441: if_setondragcomplete +442: detailcanset_hardshadows +443: os_iswindows +444: oc_findrestart +445: cam2_setlookatspline_spline +446: cc_getmodelangle_x +447: detail_idleanims +448: detail_maxscreensize +449: ttv_chat_getstate +450: if_getx +451: cam2_setpositionspringproperties +452: ignore_is_temp +453: cc_setoninvtransmit +454: detailcanset_fog +455: if_debug_button1 +456: cc_settextshadow +457: player_group_get_create_seconds_to_now +458: detail_grounddecor_on +459: quest_type +460: cc_setlinkactiveclanchannel +461: friend_is_referrer +462: worldmap_disabletextsize +463: ttv_library_request +464: if_setclickmask +465: playercountry +466: tostring +467: detailcanmod_grounddecor +468: worldmap_getdisableelement +469: detail_buildarea +470: notify_accountcreatestarted +471: divide +472: userdetail_quickchat +473: cc_sethflip +474: cc_setparam +475: detailcanset_antialiasingmode +476: cam2_setlookatorientation_xrotation +477: detail_removeroofs_option +478: sound_vorbis_rate +479: if_setlinkactiveclanchannel +480: if_getwidth +481: cc_setonvarctransmit +482: worldlist_sort +483: cc_resetmodellighting +484: friend_platform +485: detailcanmod_lightingquality +486: lobby_enterlobby_social_network +487: cancel_interface_drag +488: chat_sendprivate +489: cc_getinvcount +490: stat_visible_xp_actual +491: activeclanchannel_getuserrank +492: cc_setobject_wearcol_alwaysnum +493: if_setonclickrepeat +494: cam2_setlookatspringproperties +495: enum_getreversecount +496: worldmap_getsize +497: friend_getname +498: lobby_leavelobby +499: affinedclansettings_addbanned_fromchannel +500: oc_param +501: cc_setdragdeadtime +502: detailget_antialiasing_default +503: docheat +504: ignore_getname_unfiltered +505: activeclanchannel_getuserdisplayname +506: npc_find_active_minimenu_entry +507: worldmap_setflashloops +508: telemetry_get_group_id +509: get_entity_screen_position +510: viewport_geteffectivesize +511: stat_visible_xp +512: detailget_spotshadows_on +513: oc_category +514: ttv_webcam_stop +515: friend_getworld +516: if_setondialogabort +517: resume_stringdialog +518: chat_setmode +519: cc_setonkey +520: cc_setonmouseover +521: cam2_setlookatacceleration_axis +522: sound_group_stop +523: detailget_maxdiskcachesize +524: detailget_toolkit_default +525: if_setondrag +526: string_length +527: resume_hsldialog +528: detailget_animdetail +529: if_setopchar +530: detail_shadowquality +531: cam2_getpositionentity_lookatangleoffsets +532: detail_waterdetail_high +533: affiliate +534: detailget_lightingquality +535: activeclansettings_getaffineddisplayname +536: ttv_webcam_getcap_count +537: telemetry_is_row_pinned +538: cc_setnpcmodel +539: clan_getchatcount +540: detail_toolkit_default +541: gender +542: worldmap_disableelements +543: ttv_stream_start +544: not +545: login_hoptime +546: minimenuopen +547: ttv_setdebugouput +548: ttv_logout +549: cc_setnpchead +550: login_disallowtrigger +551: viewport_clampfov +552: detailget_diskcachesize +553: worldmap_jumptosourcecoord +554: clientclock +555: parawidth +556: if_setonplayergroupvarptransmit +557: cc_setondrag +558: cc_setparam_int +559: worldmap_getdisableelementcategory +560: cc_setonhold +561: inv_freespace +562: string_distance +563: detailcanset_shadowquality +564: date_minutes +565: if_setongamepadbutton +566: chat_gethistorylength +567: cc_setopkeyignoreheld +568: spline_addpoint +569: detail_fog_on +570: targetmode_active +571: worldmap_flashelementcategory +572: cc_setoncamfinished +573: cc_setonclick +574: get_entity_overlay_height +575: ignore_getname +576: is_npc_active +577: oc_find +578: pop_array_int +579: player_group_member_get_same_world_var +580: db_getfieldcount +581: detail_diskcachesize +582: cc_setoutline +583: detailget_maxscreensize +584: self_player_uid +585: worldmap_getconfigbounds +586: if_setvflip +587: player_group_get_owner_slot +588: activeclanchannel_getusercount +589: email_validation_submit_code +590: map_build_complete +591: detailcanset_buildarea +592: email_validation_add_new_address +593: chat_sendabusereport +594: pop_string_discard +595: detailget_groundblending +596: clan_kickuser +597: stringwidth +598: enum_getreverseindex_string +599: detailget_drawdistance +600: chatcat_getsubcatcount +601: enum_getreverseindex +602: invother_getobj +603: detail_ambientocclusion +604: telemetry_get_group_index +605: cc_setmodelorigin +606: chatcat_getdesc +607: cc_setlinewid +608: detailcanset_animdetail +609: activeclansettings_getranktalk +610: activeclansettings_getaffinedjoinruneday +611: detailcanmod_texturing +612: detailget_loadingscreentype +613: char_isprintable +614: cc_setopkey +615: worldmap_listelement_start +616: char_touppercase +617: player_group_member_get_team +618: oc_icursor +619: detailcanmod_shadowquality +620: urlencode +621: cam2_setlookatmaxspeed_axis +622: if_setoncameraupdatetransmit +623: player_group_get_overall_status +624: cc_gethide +625: cc_setondragcomplete +626: detailget_antialiasingmode +627: cam2_setcollisionmode +628: ttv_stream_getquality +629: cc_setopkeyrate +630: inv_totalparam +631: friend_test +632: telemetry_get_row_count +633: detailcanset_maxscreensize +634: detailget_cpuusage +635: get_loc_bounding_box +636: player_group_member_count +637: get_mousex +638: activeclansettings_getrankkick +639: worldmap_disabletype +640: array_sort +641: if_settargetopcursor +642: inv_total +643: worldmap_coordinmap +644: cc_setonmisctransmit +645: coordy_fine +646: detail_reflections +647: cc_getscrollheight +648: oc_iop +649: targetmode_cancel +650: ignore_test +651: branch_less_than_or_equals +652: cc_sendtofront +653: ttv_webcam_getdevice_byuniquename +654: if_debug_button4 +655: detailget_bloom +656: detailcanmod_groundblending +657: spline_new +658: if_getscrollwidth +659: inv_totalcat +660: detail_animdetail +661: sound_song +662: chatphrase_getautoresponsecount +663: worldmap_setmap_coord +664: stockmarket_isofferfinished +665: if_getfontmetrics +666: lobby_enterlobbyreply +667: detailcanmod_bloom +668: stockmarket_isofferempty +669: setdefaultwindowmode +670: cc_delete +671: detailcanset_texturing +672: shader_preload_allow +673: if_getopbase +674: bas_getanim_ready +675: coordy +676: clienttype +677: detailget_performance_metric +678: activechatphrase_sendprivate +679: cc_settargetcursors +680: worldmap_3dview_enable +681: detailget_vsync +682: cc_sendtoback +683: cc_setongamepadbutton +684: cam2_removeeffect +685: if_setonmouseleave +686: detail_antialiasing_quality +687: player_group_member_get_last_seen_node_id +688: baseidkit +689: chat_sendpublic +690: quest_varbitreq_desc +691: pop_long_discard +692: if_setonvarcstrtransmit +693: cc_setonrelease +694: cam_followcoord +695: sound_vorbis_volume_rate_group +696: if_setoptkey +697: cc_setmodellighting +698: if_sendtofront +699: string_indexof_char +700: ttv_hasprerequisites +701: friend_getrank +702: cc_getscrollx +703: cc_getid +704: spline_length +705: detailget_shadows +706: cam2_setlinearmovementmode +707: if_dragpickup +708: if_setalpha +709: activeclansettings_getreplacementowner_slot +710: quest_getdifficulty +711: create_connectrequest +712: mec_sprite +713: keyheld_shift +714: worldmap_listelement_next +715: lowercase +716: if_gethide +717: detailcanset_antialiasing +718: worldmap_3dview_settextfont +719: cc_setalpha +720: chat_playername +721: ignore_getnotes +722: if_setonopt +723: cc_setparam_string +724: quest_getsortname +725: join_string +726: compare +727: viewport_getzoom +728: emoji_enable_auto_chatline +729: cc_setoptkeyrate +730: activeclansettings_getranklootshare +731: resume_objdialog +732: if_debug_getopenifcount +733: activeclanchannel_getuserslot +734: friend_del +735: if_setmodelorthog +736: detailcanmod_skydetail +737: sub +738: cc_settextantimacro +739: login_cancel +740: activeclanchannel_getranktalk +741: create_connect_reply +742: clan_getchatusername +743: get_npc_vislevel +744: getclipboard +745: resume_countdialog +746: cc_setonclantransmit +747: viewport_setfov +748: activeclansettings_getcurrentowner_slot +749: oc_uncert +750: ttv_stream_settitle +751: ttv_webcam_supported +752: cc_find +753: sound_distancefocusfilter_setparams +754: if_debug_target +755: multiply +756: worldlist_start +757: cc_setmodelorthog +758: date_runeday +759: cc_getmodelangle_z +760: pop_var +761: frombilling +762: get_loc_overlay_height +763: runjavascript +764: telemetry_get_grid_value +765: activeclansettings_getsortedaffinedslot +766: quest_getmembers +767: player_group_member_get_status +768: activeclansettings_getallowunaffined +769: paraheight +770: activeclansettings_getaffinedextrainfo +771: autosetup_setultra +772: cam2_setpositionpoint_point +773: cam_getfollowheight +774: emoji_removeall +775: activeclanchannel_kickuser +776: if_triggerop +777: detail_groundblending +778: removetags +779: if_resetmodellighting +780: if_setonfriendtransmit +781: detailget_skydetail +782: pow +783: ttv_webcam_getcap_byuniqueid +784: userdetail_lobby_membersstats +785: cc_setonstattransmit +786: if_getmodelangle_z +787: oc_wearpos2 +788: worldmap_getdisplayposition +789: worldlist_autoworld +790: if_gettop +791: worldmap_3dview_getscreenposition +792: chat_getprevuid +793: if_setgraphicshadow +794: if_closesubclient +795: quest_finished +796: cc_setobject_nonum +797: cc_npc_setcustomheadmodel +798: date_runeday_fromdate +799: date_year +800: detailget_removeroofs_option +801: detailcanset_lightingquality +802: worldmap_setzoom +803: stat_base_actual +804: getdefaultwindowmode +805: video_advert_allow_skip +806: lobby_enterlobby +807: detailget_recommendeddiskcachesize +808: substring +809: oc_op +810: cam2_getpositionentity_lookatangle +811: detail_hardshadows +812: if_setonresize +813: if_setonvarctransmit +814: cc_setonsubchange +815: detail_antialiasingmode +816: escape +817: cc_setmodelanim +818: lc_param +819: if_setontargetenter +820: if_gety +821: activeclanchannel_getuserworld +822: branch_if_false +823: cc_param +824: detailget_antialiasing +825: if_getscrolly +826: inv_getvar +827: seq_param +828: cc_setonstocktransmit +829: chatphrase_getautoresponse +830: automatedtestflags +831: pop_long_local +832: push_string_local +833: if_settargetcursors +834: detailcanmod_orthographic +835: map_quickchat +836: pop_int_discard +837: setbit +838: if_setrecol +839: cam2_getpositionpoint_point +840: cc_setobject_wearcol +841: detailcanset_spotshadows +842: detailget_shadowquality +843: oc_wearpos3 +844: cam2_isenabled +845: userdetail_lobby_playage +846: clan_leavechat +847: paraline +848: worldmap_getconfigzoom +849: cc_clearops +850: create_get_email +851: get_displayname_withextras +852: userdetail_lobby_recoveryday +853: clan_getchatrank +854: sound_song_stop +855: pop_array_int_leave_value_on_stack +856: cc_setlinedirection +857: text_gender +858: cc_setondialogabort +859: cam_dec_x +860: cc_setmodel +861: detailcanset_grounddecor +862: ttv_login +863: player_group_member_is_online +864: string_indexof_string +865: push_long_constant +866: player_group_member_is_member +867: cc_resetlinkplayer +868: if_clearscripthooks +869: cam2_setdepthplanes +870: invother_getvar +871: if_getmodelzoom +872: writeconsole +873: push_array_int_leave_index_on_stack +874: stockmarket_getofferitem +875: cam2_resetsnapdistances +876: db_find +877: chatcat_getphraseshortcut +878: friend_getnotes +879: create_suggest_name_reply +880: emoji_add +881: detail_lightingquality +882: if_debug_button9 +883: cc_get2dangle +884: userdetail_lobby_unreadmessages +885: cc_getparentlayer +886: userdetail_lobby_dobrequested +887: long_branch_not +888: cam2_getpositionentity_lookatdistance +889: telemetry_get_column_index +890: cc_setopchar +891: inv_size +892: cam2_setsnapdistances +893: create_under13 +894: cc_setplayermodel_self +895: detailcanmod_fog +896: detail_spotshadows_on +897: if_setposition +898: login_reply +899: get_col_tag +900: if_setplayermodel +901: worldmap_getdisableelements +902: oc_minimenu_colour +903: if_setnpcmodel +904: if_resetlinkplayer +905: if_setmaxlines +906: cc_settiling +907: activeclanchannel_find_listened +908: cam_inc_x +909: if_setfontmono +910: cc_getwidth +911: cam2_setlookatorientation_maxdistanceclamping +912: viewport_setzoom +913: if_setonmouseover +914: inv_totalparam_stack +915: branch_greater_than_or_equals +916: chat_getnextuid +917: if_gettargetmask +918: if_setparam_string +919: if_debug_button3 +920: if_setmodelzoom +921: if_setontimer +922: cc_setplayerhead_self +923: sound_jingle_volume +924: worldmap_getconfigsize +925: coord_fine +926: opplayer +927: worldmap_getdisabletextsize +928: cc_settextfont +929: userdetail_lobby_membership +930: cc_setontargetenter +931: cc_npc_setcustomrecol +932: if_setonclantransmit +933: if_setonmouserepeat +934: enum_string +935: oc_shard +936: if_debug_button10 +937: cc_setmouseovercursor +938: detail_drawdistance +939: if_hassuboverlay +940: if_settextfont +941: cc_setplayermodel +942: telemetry_get_row_id +943: random_sound_pitch +944: worldmap_disableelementcategory +945: detailget_speechvol +946: activeclansettings_getaffinedslot +947: if_setonvarclantransmit +948: coord_finetogrid +949: player_group_member_get_join_xp +950: cc_npc_setcustombodymodel +951: cam2_getpositionentity_angleoffsets +952: chat_getfilter_private +953: cc_setonvarclantransmit +954: enum +955: cc_setoptkey +956: login_last_transfer_reply +957: worldlist_next +958: hsvtorgb +959: cam2_updateeffect_ztilt +960: worldmap_3dview_setloddistance +961: login_continue +962: worldmap_getsourceposition +963: stockmarket_isofferstable +964: cam_getangle_ya +965: cam2_setlookatmaxspeed +966: if_npc_setcustomrecol +967: if_hassubmodal +968: cc_getcharposatindex +969: invpow +970: openurl_nologin +971: cam2_setfieldofviewscreen +972: cam2_setlookatentity_player +973: if_setoptkeyrate +974: ignore_getslotfromname +975: cam_getangle_xa +976: cc_settargetverb +977: push_long_local +978: friend_count +979: if_setobject +980: detailcanset_shadows +981: detailcanmod_toolkit_default +982: cc_getmodelyof +983: activeclanchannel_getrankkick +984: cc_triggerop +985: detailget_brightness +986: worldmap_getmapname +987: detail_vsync +988: setwindowmode +989: cc_setclickmask +990: if_setontargetleave +991: cam_lookat +992: login_disallowresult +993: userdetail_dob +994: quest_questreq_met +995: playermod +996: cc_setontargetleave +997: detailget_idleanims +998: worldmap_getdisplaycoord +999: get_mousey +1000: long_branch_greater_than_or_equals +1001: cam2_setlookatmode +1002: if_getmodelyof +1003: cc_setonchattransmit +1004: if_setsize +1005: chatphrase_gettext +1006: branch_not +1007: cc_setopbase +1008: activeclansettings_getclanname +1009: if_setonplayergrouptransmit +1010: player_group_get_max_size +1011: detail_bloom +1012: detailget_mindiskcachesize +1013: friend_setnotes +1014: quest_pointsreq +1015: if_setopkeyignoreheld +1016: format_datetime_from_minutes +1017: cc_setonfriendtransmit +1018: if_setlinkfriendchat +1019: if_setoptchar +1020: detailget_stereo +1021: detail_brightness +1022: clan_isself +1023: if_setparam_int +1024: if_setmodeltint +1025: login_resetreply +1026: playermember +1027: emoji_substitute +1028: detailcanset_antialiasing_quality +1029: if_setopkeyrate +1030: gosub_with_params +1031: if_setdragrenderbehaviour +1032: stat +1033: cc_setposition +1034: map_loadedpercent +1035: npc_type +1036: abort_dialog +1037: quest_varbitreq_met +1038: opplayert +1039: ttv_stream_setsmoothresize +1040: if_clearops +1041: player_group_get_displayname +1042: addpercent +1043: worldmap_3dview_getloddistance +1044: cam2_setpositionmaxspeed +1045: invother_total +1046: date_minutes_fromruneday +1047: clearbit +1048: modulo +1049: quest_points +1050: if_sendtoback +1051: if_getgraphicdimensions +1052: get_minimenu_target +1053: cam2_addeffect_ztilt +1054: if_getgraphic +1055: char_tolowercase +1056: basecolour +1057: clanprofile_find +1058: player_group_banned_get_displayname +1059: detail_texturing +1060: char_isnumeric +1061: movecoord_fine +1062: player_group_member_get_displayname +1063: get_npc_stat +1064: if_getop +1065: setdefaultcursors +1066: detailcanset_skydetail +1067: detailcanmod_hardshadows +1068: quest_varpreq_desc +1069: if_getmodelangle_y +1070: if_debug_getname +1071: setgender +1072: create_email_validate_reply +1073: coord +1074: detailcanmod_antialiasing +1075: friend_add +1076: cc_gettrans +1077: if_setdragdeadzone +1078: detail_toolkit +1079: clan_getchatminkick +1080: cc_setobject +1081: if_getheight +1082: detailcanmod_buildarea +1083: detailcanset_toolkit_default +1084: video_advert_force_remove +1085: map_preload +1086: userdetail_lobby_loyalty_balance +1087: if_getmodelangle_x +1088: cc_setgraphic +1089: cc_setonclickrepeat +1090: push_constant_string +1091: cam2_getcontrolmode +1092: userdetail_lobby_emailstatus +1093: cc_setlinkplayergroup +1094: userdetail_lobby_ccexpiry +1095: max +1096: branch +1097: if_setlinewid +1098: if_npc_setcustombodymodel +1099: detailcanmod_maxscreensize +1100: push_varbit +1101: formatminimenu +1102: fullscreen_lastmode +1103: cc_setfontmono +1104: player_group_banned_count +1105: clan_getchatusername_unfiltered +1106: cc_setscrollpos +1107: activeclansettings_getaffinedrank +1108: pop_string_local +1109: autosetup_setlow +1110: telemetry_get_column_count +1111: ttv_webcam_getdevice_byindex +1112: cc_setoptkeyignoreheld +1113: autosetup_setcustom +1114: cc_settext +1115: worldmap_setmap_coord_override +1116: clan_getchatownername +1117: char_isalpha +1118: detail_antialiasing +1119: cc_setscrollsize +1120: setup_messagebox +1121: get_entity_say +1122: if_setaspect +1123: cam2_setlookatpoint_point +1124: cam2_setlookatorientation_zmovement +1125: randominc +1126: fullscreen_modecount +1127: activechatphrase_prepare +1128: detail_flickering_on +1129: if_getparentlayer +1130: staffmodlevel +1131: fromdate +1132: clanforumqfc_tostring +1133: detailget_waterdetail_high +1134: detailget_grounddecor_on +1135: if_debug_button5 +1136: activeclansettings_getaffinedcount +1137: detailget_antialiasing_quality +1138: detailcanmod_shadows +1139: emoji_remove +1140: quest_statreq_count +1141: branch_less_than +1142: detailget_soundvol +1143: video_advert_has_finished +1144: worldmap_getcategorypriority +1145: cam2_setpositionentity_player +1146: create_availablerequest +1147: clan_getchatuserworldname +1148: quest_pointsreq_met +1149: if_settiling +1150: cc_setonopt +1151: cc_getfontmetrics +1152: cc_getheight +1153: if_debug_getopenifid +1154: if_setonchattransmit +1155: chat_gethistory_byuid +1156: getgridcoordrelativetocamera +1157: chat_gethistory_bytypeandline +1158: applet_hasfocus +1159: activechatphrase_send +1160: chatcat_getphrase +1161: player_group_get_create_mins_since_epoch +1162: detailcanmod_waterdetail +1163: cc_settargetopcursor +1164: oc_name +1165: if_setongamepadbuttonheld +1166: chatcat_getsubcat +1167: worldmap_3dview_active +1168: worldmap_stopcurrentflashes +1169: cc_setongamepadaxis +1170: worldmap_getdisabletype +1171: detailcanset_ambientocclusion +1172: cc_setoncameraupdatetransmit +1173: if_callonresize +1174: lastlogin +1175: if_setmodelanim +1176: cc_clearscripthooks +1177: cam_modeisfollowplayer +1178: activeclanchannel_getsorteduserslot +1179: long_branch_less_than +1180: if_setonscrollwheel +1181: clan_joinchat +1182: playerdemo +1183: chatphrase_getdynamiccommand +1184: ttv_webcam_flip +1185: lobby_entergame +1186: activeclanchannel_getclanname +1187: push_var +1188: setsubmenuminlength +1189: detail_removeroofs_option_override +1190: coordx +1191: map_members +1192: reboottimer +1193: sound_mixbuss_add +1194: openurl +1195: cc_setonmouserepeat +1196: quest_varpreq_met +1197: detail_musicvol +1198: create_name_availablerequest +1199: cc_settextalign +1200: friend_getworldflags +1201: return +1202: cc_setrecol +1203: telemetry_is_grid_processor_set +1204: if_hassub +1205: long_branch_equals +1206: ttv_login_getstate +1207: cam_inc_y +1208: long_branch_less_than_or_equals +1209: if_settargetverb +1210: worldmap_3dview_disable +1211: quest_statreq_level +1212: quest_started +1213: if_debug_button7 +1214: coordlevel_fine +1215: cam_movealong +1216: char_isalphanumeric +1217: worldmap_3dview_setlighting +1218: ignore_count +1219: cc_setongamepadbuttonheld +1220: detailget_toolkit +1221: if_getcolour +1222: resend_uid_passport_request +1223: cam2_settraildistance +1224: cam2_setpositionpointcollision +1225: runweight_visible +1226: cam2_addeffect_shake +1227: ttv_webcam_getcap_byindex +1228: if_setonvartransmit +1229: seqlength +1230: activeclansettings_getcoinshare +1231: if_setmodel +1232: mec_text +1233: cc_setonresize +1234: ttv_webcam_getdevice_count +1235: get_currentcursor +1236: movescripted +1237: chatphrase_findrestart +1238: random +1239: cc_setoptchar +1240: if_debug_getservertriggers +1241: if_setplayerhead_self +1242: detailcanmod_reflections +1243: detailget_loginvol +1244: long_branch_greater_than +1245: if_set_gamescreen_enabled +1246: ignore_add_temp +1247: ttv_stream_getviewers +1248: playermodlevel +1249: coord_gridtofine +1250: cc_setnoclickthrough +1251: if_setonclick +1252: cc_setop +1253: if_setmodellighting +1254: has_nxt +1255: worldmap_findnearestelement +0: chat_getfilter_private +1: cc_setonvartransmit +2: if_setonvarclantransmit +3: cc_setscrollsize +4: long_branch_not +5: pop_int_local +6: detail_bgsoundvol +7: cc_setonplayergroupvarptransmit +8: cc_setonhold +9: openurl_nologin +10: branch_equals +11: cc_setsize +12: cam_forceangle +13: if_setplayermodel_self +14: push_constant_string +15: chatcat_getphrasecount +16: if_setoptkeyignoreheld +17: if_setonhold +18: cc_getcolour +19: if_setontargetenter +20: coordz +21: if_setongamepadaxis +22: cc_setparam_string +23: cc_getscrolly +24: cc_getmodelangle_y +25: if_getinvobject +26: cc_gety +27: cam2_removealleffects +28: if_setcolour +29: struct_param +30: resume_clanforumqfcdialog +31: if_setmodellighting +32: detail_antialiasing_quality +33: get_mousebuttons +34: sound_speech_volume +36: cc_setonmouseleave +37: viewport_clampfov +38: is_npc_visible +39: clan_getchatownername +40: if_sendtoback +41: oc_findrestart +42: inv_getnum +43: detail_particles +44: if_closesubclient +45: if_setoncamfinished +46: cam_setfollowheight +47: cc_setonmisctransmit +48: cc_create +49: worldmap_getzoom +50: if_resume_pausebutton +51: coordy +52: cc_setposition +53: sound_synth +54: cc_setdragdeadzone +55: worldmap_isloaded +56: cc_setmodeltint +57: resume_stringdialog +59: if_setopkeyignoreheld +60: oc_shardcount +61: if_settextantimacro +62: if_debug_button9 +63: cc_setpausetext +64: if_setnpchead +65: cc_settargetopcursor +66: cc_setontimer +67: cc_setonvarctransmit +68: cc_setonstocktransmit +69: if_setgraphic +70: if_setdragdeadtime +71: if_setparam_int +72: pop_var +74: autosetup_setcustom +75: create_step_reached +76: cc_setnpchead +77: cc_sethflip +78: docheat +79: cc_setmaxlines +80: cc_set2dangle +81: friend_setnotes +83: cc_setscrollpos +84: activeclansettings_getbanneddisplayname +85: if_setoutline +86: cc_setoptkeyignoreheld +87: cc_setgraphicshadow +88: if_setnoclickthrough +89: push_int_local +90: activechatphrase_send +91: cc_callonresize +92: cc_settext +93: if_getmodel +94: worldmap_disabletextsize +95: if_gethide +96: if_setlinedirection +97: worldmap_disableelements +98: oc_members +99: login_request +100: pop_string_local +101: if_setparam_string +102: clan_isself +103: cc_setobject_alwaysnum +104: login_request_social_network +105: stat_base +106: push_long_local +107: cc_setopcursor +108: coord_fine +109: if_setopcursor +110: if_set2dangle +111: stockmarket_getoffertype +112: cc_setonclanchanneltransmit +113: cam2_enable +114: detail_drawdistance +115: cc_resume_pausebutton +116: cam2_setlookatangularinterpolation +117: activeclanchannel_find_listened +118: detail_loadingscreentype +119: ttv_livestreams_update +120: basematerial +122: ignore_add +123: cam2_setpositionmode +124: quit +125: worldmap_3dview_getcoordfine +126: targetmode_active +127: if_sethflip +128: profile_cpu +129: if_gettrans +130: mec_category +131: worldlist_specific +132: sound_song_volume +133: get_obj_screen_position +134: email_validation_add_new_address +135: friend_setrank +136: cc_setdragrenderbehaviour +137: notify_accountcreated +138: chatcat_getsubcatshortcut +139: lobby_entergamereply +140: if_settext +141: cam2_setpositionspringproperties +142: if_getgraphic +143: if_setonstattransmit +144: chat_getfilter_public +145: if_setonmisctransmit +146: quest_varpreq_count +148: cc_clearops +149: cc_setonvarcstrtransmit +150: cam2_resetsnapdistances +151: if_getmodelxof +152: if_getcharindexatpos +153: if_setobject_wearcol_nonum +154: if_sethide +155: if_setonclanchanneltransmit +156: pop_varbit +158: get_entity_bounding_box +159: activeclansettings_getbannedcount +160: detail_soundvol +161: worldmap_3dview_getloddistance +162: branch_greater_than +164: if_dragpickup +165: formatminimenu +166: if_getlayer +167: if_setmodelorthog +168: activechatphrase_setdynamicint +169: if_close +170: worldmap_3dview_enable +172: cam2_setpositionmaxspeed_axis +173: if_setonrelease +174: facing_fine +175: mes +176: shader_preload_throttle +177: if_setpausetext +178: if_setfontmono +179: worldlist_autoworld +180: sound_vorbis_volume +182: inv_getobj +183: chat_setfilter +185: return +186: if_setop +187: setwindowmode +190: if_setoptkeyrate +191: stockmarket_getofferprice +192: cc_setplayermodel +193: if_npc_setcustomrecol +194: if_settextshadow +195: worldmap_setmap +196: cc_setopbase +197: if_setfill +198: cc_getid +199: resume_countdialog +200: opplayer +201: if_setongamepadtrigger +203: add +204: cc_getop +206: ignore_add_temp +208: cc_setonsubchange +209: get_obj_bounding_box +211: cc_setmodelorigin +212: clan_getchatuserworld +213: cc_setlinewid +214: cc_setobject_wearcol_alwaysnum +215: cc_setdragdeadtime +216: if_setonsubchange +217: if_get2dangle +218: viewport_setfov +219: if_getscrollwidth +220: detail_skydetail +221: sound_synth_volume +223: cam2_setlookatentity_npc +224: cc_gettext +226: push_array_int_and_index +227: activeclansettings_find_listened +228: create_setunder13 +229: autosetup_setlow +230: cam2_setlookatorientation_xrotation +231: or +232: branch_if_false +233: cc_setnpcmodel +235: fullscreen_exit +236: addpercent +237: cc_getopbase +238: if_resetmodellighting +239: sethardcodedopcursors +240: if_setopbase +241: worldmap_setflashloops_default +242: cc_dragpickup +243: if_setonfriendtransmit +244: invother_total +248: cc_getx +249: if_getscrollx +250: if_setoptkey +251: join_string +252: map_lang +254: resend_uid_passport_request +255: if_gettext +256: cam2_setfieldofview +257: runenergy_visible +259: cc_setfontmono +261: enum_getreversecount_string +262: cam2_setspringproperties +263: map_members +265: activechatphrase_setdynamicobj +268: cam2_setlookatentity_player +269: defaultminimenu +270: if_setonplayergrouptransmit +271: push_array_int +274: ignore_setnotes +275: cam2_updateeffect_ztilt +276: cc_sendtofront +277: resume_namedialog +278: pop_long_local +279: cc_setmodelorthog +280: cam2_setpositionacceleration_axis +281: cc_settextshadow +283: cam2_setdepthplanes +284: autosetup_setmin +285: detail_cpuusage +286: cc_setongamepadtrigger +287: spline_addpoint +288: userdetail_lobby_emailstatus +289: max +290: if_getop +291: cc_npc_setcustomretex +292: worldmap_setcategorypriority +295: bug_report +297: cc_getmodelxof +300: if_getfontgraphic +301: openurl_shim +302: worldmap_getcategorypriority +303: player_find_active_minimenu_entry +304: if_getmodelangle_z +305: worldmap_3dview_setlighting +306: if_setobject_alwaysnum +307: cam_removeroof +308: if_gettargetmask +309: get_second_minimenu_entry +310: nc_param +311: worldlist_fetch +312: coordx_fine +313: detail_customcursors +314: branch_less_than_or_equals +316: cc_setoptkey +317: quest_questreq_count +319: if_getnextsubid +321: worldmap_getdisabletextsize +322: coordz_fine +323: setobj +324: if_setmodelangle +325: branch_if_true +326: cc_gettargetmask +327: if_setplayerhead_self +328: writeconsole +329: get_col_tag +330: append_num +331: define_array +334: mec_param +335: cam2_setfieldofviewscreen +336: if_getcharposatindex +337: ignore_del +338: autosetup_sethigh +339: cc_delete +340: worldlist_pingworlds +341: cam_smoothreset +343: if_setretex +345: if_npc_setcustomretex +346: detail_loginvol +348: cc_setopkey +349: quest_statreq_met +350: cc_param +351: sound_jingle +353: activeclansettings_getclanname +356: autosetup_setmedium +357: worldmap_getsourcecoord +358: cc_setonclickrepeat +359: if_setonclantransmit +361: cam2_setpositionspline_spline +362: cam2_removeeffect +363: keyheld_ctrl +364: enum_hasoutput_string +366: spline_new +367: cc_setrecol +368: quest_getname +370: baseidkit +371: if_debug_button8 +373: clan_getchatuserrank +376: inv_stockbase +381: cc_setondrag +382: playerdemo +383: detailget_toolkit +384: cc_setobject_wearcol +386: if_hassuboverlay +387: scale +388: cam2_setlookatorientation_xmovement +389: detail_waterdetail_high +390: friend_add +391: oc_unshard +392: create_createrequest +394: cc_sethide +395: text_switch +396: cam_dec_y +397: cc_deleteall +398: if_getmodelyof +399: clan_getchatusername_unfiltered +402: cc_resetmodellighting +404: cc_setonopt +405: cc_setretex +407: playermodlevel +408: if_find +409: cc_setonop +410: cam2_setpositionpoint_point +411: if_callonresize +412: if_setonplayergroupvarptransmit +413: worldmap_3dview_setloddistance +414: lobby_enterlobby_social_network +417: pop_array_int +419: pow +420: if_setobject_wearcol +422: friend_getworldname +424: userdetail_lobby_graceexpiry +425: cc_setongamepadaxis +426: coordy_fine +428: append_signnum +429: setbit +430: cc_setplayerhead_self +431: cc_setparam_int +432: cc_setobject +434: cc_settrans +436: cc_getlayer +437: if_setontimer +439: sound_mixbuss_setlevel +442: cam_movealong +443: cc_setfill +446: cc_getmodelangle_x +447: detail_idleanims +448: detail_maxscreensize +449: cc_setmodelzoom +450: if_getx +452: cc_setalpha +454: cc_settextfont +455: if_setondialogabort +457: cam2_setlookatmaxspeed +458: detail_grounddecor_on +459: cc_invalidate +461: if_setonopt +463: branch_less_than +465: cc_setmodelangle +466: tostring +467: cc_setonmouserepeat +468: if_resetlinkplayer +469: if_setonclickrepeat +471: divide +472: if_setopkeyrate +475: if_setonclick +480: cc_setoutline +482: worldlist_sort +484: friend_platform +485: long_branch_greater_than +487: detail_shadowquality +489: cc_setonclick +490: cc_setopkeyrate +491: activeclanchannel_getuserrank +495: chat_sendpublic +496: worldmap_getsize +497: cam_followcoord +500: detail_animdetail +502: ignore_getslotfromname +504: ignore_getnotes +505: activeclanchannel_getuserdisplayname +506: npc_find_active_minimenu_entry +507: worldmap_setflashloops +508: if_setmodelanim +509: cc_setongamepadbutton +510: long_branch_greater_than_or_equals +511: cam2_setcollisionmode +512: login_continue +513: oc_category +514: chatcat_getphrase +515: friend_getworld +522: branch +523: playermod +524: detailget_toolkit_default +526: string_length +528: get_mousey +531: cam2_getpositionentity_lookatangleoffsets +533: affiliate +534: cc_settextantimacro +535: activeclansettings_getaffineddisplayname +536: ttv_webcam_getcap_count +537: long_branch_less_than +539: worldmap_jumptosourcecoord +541: cc_setobject_wearcol_nonum +543: activeclanchannel_kickuser +544: not +545: cc_setmouseovercursor +546: branch_greater_than_or_equals +547: if_setongamepadbuttonheld +548: ttv_logout +550: cc_setonvarclantransmit +552: if_setplayermodel +554: clientclock +555: parawidth +559: if_setnpcmodel +561: sound_song +562: escape +563: char_isalphanumeric +564: cc_setonchattransmit +566: chat_gethistorylength +574: if_setonresize +575: ignore_getname +576: clanprofile_find +577: if_setrecol +579: detail_antialiasing +580: openurl +583: cc_npc_setcustombodymodel +584: cc_sendtoback +585: worldmap_getconfigbounds +587: activeclansettings_getaffinedcount +588: activeclanchannel_getusercount +590: cc_setlinkplayergroup +591: if_getcolour +595: if_setobject +597: stringwidth +598: if_setonvarcstrtransmit +599: detailget_drawdistance +600: cc_setlinkfriendchat +601: pop_long_discard +602: invother_getobj +603: if_setlinkfriendchat +604: worldmap_setmap_coord +606: cc_setondialogabort +608: resume_objdialog +609: activeclansettings_getranktalk +610: activeclansettings_getaffinedjoinruneday +611: ttv_login_getstate +612: cc_setclickmask +613: stat_base_actual +615: cc_setplayermodel_self +616: if_setonvarctransmit +617: setup_messagebox +618: pop_int_discard +619: create_name_availablerequest +623: cc_setonmouseover +626: cc_setoptchar +628: clan_getchatuserworldname +630: inv_totalparam +631: friend_test +632: cc_clearscripthooks +633: cc_setonkey +634: cc_getmodelyof +635: cc_setdraggable +636: affinedclansettings_addbanned_fromchannel +637: get_mousex +638: cc_setoptkeyrate +643: sound_vorbis_rate +646: activechatphrase_sendprivate +648: cc_find +650: if_setclickmask +653: chat_gethistory_byuid +655: cc_settargetverb +656: long_branch_equals +662: if_setlinkactiveclanchannel +664: stockmarket_isofferfinished +666: activeclansettings_getaffinedslot +667: if_hassub +668: stockmarket_isofferempty +671: cc_setonclansettingstransmit +672: cc_getwidth +674: paraline +676: if_setmodelorigin +677: cc_triggerop +681: detailget_vsync +687: detail_groundblending +690: pop_string_discard +695: if_setlinewid +699: string_indexof_char +700: cc_setmodel +704: if_setonmouseover +705: cc_setcolour +709: activeclansettings_getreplacementowner_slot +710: setgender +712: login_resetreply +713: cc_resetlinkplayer +714: worldmap_listelement_next +715: lowercase +717: if_setalpha +720: chat_playername +724: sound_synth_rate +726: cc_setobject_nonum +727: cam2_setlookatmode +728: detail_removeroofs_option_override +730: activeclansettings_getranklootshare +732: cc_setlinkfriend +733: activeclanchannel_getuserslot +736: if_getheight +737: sub +740: notify_accountcreatestarted +741: cc_setonstattransmit +743: if_getgraphicdimensions +744: pop_array_int_leave_value_on_stack +749: oc_uncert +750: cam2_setpositionentity_player +751: cc_getheight +753: push_varbit +755: activeclansettings_getallowunaffined +756: cam2_setlookatspline_spline +758: if_setsize +762: basecolour +763: friend_del +764: chat_sendabusereport +766: if_settextfont +767: if_setaspect +769: switch +771: cc_settiling +773: sound_jingle_volume +774: push_var +778: removetags +781: detailget_skydetail +783: setdefaultwindowmode +784: if_clearops +787: push_string_local +788: cc_setopchar +790: cc_setmodelanim +791: cc_setopkeyignoreheld +792: cc_setlinedirection +795: cam2_setsnapdistances +798: chatphrase_gettext +799: branch_not +800: detailget_removeroofs_option +801: cc_setnoclickthrough +804: viewport_setzoom +807: cc_setonrelease +808: substring +809: detail_diskcachesize +810: cc_setontargetenter +815: cc_setonresize +818: if_settargetcursors +824: if_hassubmodal +827: seq_param +829: push_long_constant +830: if_setonop +834: if_settargetverb +841: worldmap_disabletype +842: stockmarket_isofferstable +844: if_settextalign +845: userdetail_lobby_playage +848: if_setposition +850: push_constant_int +851: get_displayname_withextras +852: if_setdragrenderbehaviour +854: abort_dialog +861: if_debug_button7 +862: cc_getcharposatindex +863: if_setobject_wearcol_alwaysnum +866: cam2_setlookatorientation_zmovement +876: coordx +879: create_suggest_name_reply +880: lobby_entergame +881: if_setmodeltint +884: cc_setondragcomplete +886: opplayert +888: cc_npc_setcustomrecol +889: clan_joinchat +893: create_under13 +895: long_branch_less_than_or_equals +898: if_setondrag +901: oc_minimenu_colour +929: gosub_with_params +942: if_debug_target +945: worldmap_getmapname +949: cam_inc_x +957: cc_setontargetleave +980: if_settargetopcursor +981: worldmap_3dview_disable +987: cc_setoncameraupdatetransmit +993: userdetail_dob +994: cc_gettrans +1010: cc_setonscrollwheel +1014: if_setdragdeadzone +1027: setsubmenuminlength +1028: cc_setongamepadbuttonheld +1035: lobby_enterlobby +1037: cc_setgraphic +1039: lobby_leavelobby +1041: staffmodlevel +1049: coord +1058: if_setvflip +1062: randominc +1066: if_setonclansettingstransmit +1067: if_setlinkfriend +1068: video_advert_force_remove +1074: if_sendtofront +1082: clanforumqfc_tostring +1083: if_setonvartransmit +1099: cam_inc_y +1104: cc_setparam +1110: if_setonscrollwheel +1111: if_setonchattransmit +1138: detailget_loginvol +1139: cc_setonclantransmit +1156: getgridcoordrelativetocamera +1162: cc_settextalign +1171: cc_setop +1242: cc_setlinkactiveclanchannel \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..2dd4593 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,21 @@ +rootProject.name = "rt4-client" + +dependencyResolutionManagement { + repositories { + mavenCentral() + flatDir { + dirs 'lib' + } + } +} + +include( + "deob-annotations", + "signlink", + "client", + "playground" +) + +startParameter.excludedTaskNames << ':playground:run' +include 'plugin-playground' + diff --git a/signlink/build.gradle b/signlink/build.gradle new file mode 100644 index 0000000..8f68f52 --- /dev/null +++ b/signlink/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'java-library' +} + +version = '1.0.0' + +sourceCompatibility = 1.8 +targetCompatibility = 1.8 + +dependencies { + compileOnly project(':deob-annotations') + compileOnly 'lib:jogl-all' +} diff --git a/signlink/build/classes/java/main/rt4/AudioSource.class b/signlink/build/classes/java/main/rt4/AudioSource.class new file mode 100644 index 0000000..7c1cf7d Binary files /dev/null and b/signlink/build/classes/java/main/rt4/AudioSource.class differ diff --git a/signlink/build/classes/java/main/rt4/CursorManager.class b/signlink/build/classes/java/main/rt4/CursorManager.class new file mode 100644 index 0000000..a11ba98 Binary files /dev/null and b/signlink/build/classes/java/main/rt4/CursorManager.class differ diff --git a/signlink/build/classes/java/main/rt4/FileOnDisk.class b/signlink/build/classes/java/main/rt4/FileOnDisk.class new file mode 100644 index 0000000..f4cf7eb Binary files /dev/null and b/signlink/build/classes/java/main/rt4/FileOnDisk.class differ diff --git a/signlink/build/classes/java/main/rt4/FullScreenManager.class b/signlink/build/classes/java/main/rt4/FullScreenManager.class new file mode 100644 index 0000000..098bc28 Binary files /dev/null and b/signlink/build/classes/java/main/rt4/FullScreenManager.class differ diff --git a/signlink/build/classes/java/main/rt4/MonotonicClock.class b/signlink/build/classes/java/main/rt4/MonotonicClock.class new file mode 100644 index 0000000..a45c5e0 Binary files /dev/null and b/signlink/build/classes/java/main/rt4/MonotonicClock.class differ diff --git a/signlink/build/classes/java/main/rt4/PrivilegedRequest.class b/signlink/build/classes/java/main/rt4/PrivilegedRequest.class new file mode 100644 index 0000000..56cf40f Binary files /dev/null and b/signlink/build/classes/java/main/rt4/PrivilegedRequest.class differ diff --git a/signlink/build/classes/java/main/rt4/SignLink.class b/signlink/build/classes/java/main/rt4/SignLink.class new file mode 100644 index 0000000..330057c Binary files /dev/null and b/signlink/build/classes/java/main/rt4/SignLink.class differ diff --git a/signlink/build/libs/signlink-1.0.0.jar b/signlink/build/libs/signlink-1.0.0.jar new file mode 100644 index 0000000..181fcff Binary files /dev/null and b/signlink/build/libs/signlink-1.0.0.jar differ diff --git a/signlink/build/tmp/compileJava/previous-compilation-data.bin b/signlink/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..3877475 Binary files /dev/null and b/signlink/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/signlink/build/tmp/jar/MANIFEST.MF b/signlink/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/signlink/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/signlink/src/main/java/rt4/AudioSource.java b/signlink/src/main/java/rt4/AudioSource.java new file mode 100644 index 0000000..4a3155c --- /dev/null +++ b/signlink/src/main/java/rt4/AudioSource.java @@ -0,0 +1,29 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +import java.awt.*; + +@OriginalClass("signlink!ai") +public interface AudioSource { + + @OriginalMember(owner = "signlink!ai", name = "a", descriptor = "(II)V") + void close(@OriginalArg(0) int channel); + + @OriginalMember(owner = "signlink!ai", name = "b", descriptor = "(BI)I") + int getBufferSize(@OriginalArg(1) int channel); + + @OriginalMember(owner = "signlink!ai", name = "a", descriptor = "(III)V") + void open(@OriginalArg(0) int channel, @OriginalArg(2) int bufferCapacity) throws Exception; + + @OriginalMember(owner = "signlink!ai", name = "a", descriptor = "(BI)V") + void flush(@OriginalArg(1) int channel); + + @OriginalMember(owner = "signlink!ai", name = "a", descriptor = "(IBLjava/awt/Component;Z)V") + void init(@OriginalArg(0) int sampleRate, @OriginalArg(2) Component component, @OriginalArg(3) boolean stereo) throws Exception; + + @OriginalMember(owner = "signlink!ai", name = "a", descriptor = "(I[I)V") + void write(@OriginalArg(0) int channel, @OriginalArg(1) int[] samples); +} diff --git a/signlink/src/main/java/rt4/CursorManager.java b/signlink/src/main/java/rt4/CursorManager.java new file mode 100644 index 0000000..8478676 --- /dev/null +++ b/signlink/src/main/java/rt4/CursorManager.java @@ -0,0 +1,59 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.*; +import java.awt.image.BufferedImage; + +@OriginalClass("signlink!g") +public final class CursorManager { + + @OriginalMember(owner = "signlink!g", name = "b", descriptor = "Ljava/awt/Component;") + private Component component; + + @OriginalMember(owner = "signlink!g", name = "a", descriptor = "Ljava/awt/Robot;") + private final Robot robot = new Robot(); + + @OriginalMember(owner = "signlink!g", name = "", descriptor = "()V") + public CursorManager() throws Exception { + } + + @OriginalMember(owner = "signlink!g", name = "a", descriptor = "(BLjava/awt/Point;ILjava/awt/Component;I[I)V") + public final void setCursor(@OriginalArg(1) Point hotSpot, @OriginalArg(2) int width, @OriginalArg(3) Component component, @OriginalArg(4) int height, @OriginalArg(5) int[] pixels) { + if (pixels == null) { + component.setCursor(null); + } else { + @Pc(13) BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + image.setRGB(0, 0, width, height, pixels, 0, width); + component.setCursor(component.getToolkit().createCustomCursor(image, hotSpot, null)); + } + } + + @OriginalMember(owner = "signlink!g", name = "a", descriptor = "(III)V") + public final void setPosition(@OriginalArg(0) int x, @OriginalArg(2) int y) { + this.robot.mouseMove(x, y); + } + + @OriginalMember(owner = "signlink!g", name = "a", descriptor = "(Ljava/awt/Component;IZ)V") + public final void setComponent(@OriginalArg(0) Component component, @OriginalArg(2) boolean reset) { + if (reset) { + component = null; + } else if (component == null) { + throw new NullPointerException(); + } + if (component == this.component) { + return; + } + if (this.component != null) { + this.component.setCursor(null); + this.component = null; + } + if (component != null) { + component.setCursor(component.getToolkit().createCustomCursor(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB), new Point(0, 0), null)); + this.component = component; + } + } +} diff --git a/signlink/src/main/java/rt4/FileOnDisk.java b/signlink/src/main/java/rt4/FileOnDisk.java new file mode 100644 index 0000000..8585d70 --- /dev/null +++ b/signlink/src/main/java/rt4/FileOnDisk.java @@ -0,0 +1,101 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.io.EOFException; +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; + +@OriginalClass("signlink!qm") +public final class FileOnDisk { + + @OriginalMember(owner = "signlink!qm", name = "c", descriptor = "Ljava/io/RandomAccessFile;") + private RandomAccessFile randomAccessFile; + + @OriginalMember(owner = "signlink!qm", name = "b", descriptor = "Ljava/io/File;") + private final File file; + + @OriginalMember(owner = "signlink!qm", name = "a", descriptor = "J") + private final long maxLength; + + @OriginalMember(owner = "signlink!qm", name = "d", descriptor = "J") + private long offset; + + @OriginalMember(owner = "signlink!qm", name = "", descriptor = "(Ljava/io/File;Ljava/lang/String;J)V") + public FileOnDisk(@OriginalArg(0) File file, @OriginalArg(1) String mode, @OriginalArg(2) long maxLength) throws IOException { + if (maxLength == -1L) { + maxLength = Long.MAX_VALUE; + } + if (maxLength <= file.length()) { + file.delete(); + } + this.randomAccessFile = new RandomAccessFile(file, mode); + this.file = file; + this.maxLength = maxLength; + this.offset = 0L; + @Pc(42) int firstByte = this.randomAccessFile.read(); + if (firstByte != -1 && !mode.equals("r")) { + this.randomAccessFile.seek(0L); + this.randomAccessFile.write(firstByte); + } + this.randomAccessFile.seek(0L); + } + + @OriginalMember(owner = "signlink!qm", name = "a", descriptor = "(BJ)V") + public final void seek(@OriginalArg(1) long offset) throws IOException { + this.randomAccessFile.seek(offset); + this.offset = offset; + } + + @OriginalMember(owner = "signlink!qm", name = "finalize", descriptor = "()V") + @Override + public final void finalize() throws Throwable { + if (this.randomAccessFile != null) { + System.out.println("Warning! fileondisk " + this.file + " not closed correctly using close(). Auto-closing instead. "); + this.close(); + } + } + + @OriginalMember(owner = "signlink!qm", name = "a", descriptor = "(I[BII)V") + public final void write(@OriginalArg(1) byte[] src, @OriginalArg(2) int len, @OriginalArg(3) int off) throws IOException { + if (this.offset + (long) len > this.maxLength) { + this.randomAccessFile.seek(this.maxLength + 1L); + this.randomAccessFile.write(1); + throw new EOFException(); + } else { + this.randomAccessFile.write(src, off, len); + this.offset += len; + } + } + + @OriginalMember(owner = "signlink!qm", name = "a", descriptor = "(III[B)I") + public final int read(@OriginalArg(0) int off, @OriginalArg(2) int len, @OriginalArg(3) byte[] bytes) throws IOException { + @Pc(6) int n = this.randomAccessFile.read(bytes, off, len); + if (n > 0) { + this.offset += n; + } + return n; + } + + @OriginalMember(owner = "signlink!qm", name = "b", descriptor = "(I)V") + public final void close() throws IOException { + if (this.randomAccessFile != null) { + this.randomAccessFile.close(); + this.randomAccessFile = null; + } + } + + @OriginalMember(owner = "signlink!qm", name = "c", descriptor = "(I)J") + public final long length() throws IOException { + return this.randomAccessFile.length(); + } + + @OriginalMember(owner = "signlink!qm", name = "a", descriptor = "(I)Ljava/io/File;") + public final File getFile() { + return this.file; + } +} diff --git a/signlink/src/main/java/rt4/FullScreenManager.java b/signlink/src/main/java/rt4/FullScreenManager.java new file mode 100644 index 0000000..d7111f4 --- /dev/null +++ b/signlink/src/main/java/rt4/FullScreenManager.java @@ -0,0 +1,116 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.awt.*; +import java.lang.reflect.Field; + +@OriginalClass("signlink!e") +public final class FullScreenManager { + + @OriginalMember(owner = "signlink!e", name = "b", descriptor = "Ljava/awt/DisplayMode;") + private DisplayMode previousDisplayMode; + + @OriginalMember(owner = "signlink!e", name = "a", descriptor = "Ljava/awt/GraphicsDevice;") + private GraphicsDevice device; + + @OriginalMember(owner = "signlink!e", name = "", descriptor = "()V") + public FullScreenManager() throws Exception { + @Pc(3) GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); + this.device = env.getDefaultScreenDevice(); + if (!this.device.isFullScreenSupported()) { + @Pc(15) GraphicsDevice[] devices = env.getScreenDevices(); + for (@Pc(19) int i = 0; i < devices.length; i++) { + @Pc(27) GraphicsDevice d = devices[i]; + if (d != null && d.isFullScreenSupported()) { + this.device = d; + return; + } + } + throw new Exception(); + } + } + + @OriginalMember(owner = "signlink!e", name = "a", descriptor = "(Ljava/awt/Frame;B)V") + private void setFullScreenWindow(@OriginalArg(0) Frame frame) { + @Pc(1) boolean wasValid = false; + try { + @Pc(6) Field valid = Class.forName("sun.awt.Win32GraphicsDevice").getDeclaredField("valid"); + valid.setAccessible(true); + @Pc(16) boolean v = (Boolean) valid.get(this.device); + if (v) { + valid.set(this.device, Boolean.FALSE); + wasValid = true; + } + } catch (@Pc(27) Throwable ex) { + } + try { + this.device.setFullScreenWindow(frame); + } finally { + if (wasValid) { + try { + @Pc(66) Field valid = Class.forName("sun.awt.Win32GraphicsDevice").getDeclaredField("valid"); + valid.set(this.device, Boolean.TRUE); + } catch (@Pc(73) Throwable ex) { + } + } + } + } + + @OriginalMember(owner = "signlink!e", name = "a", descriptor = "(IIIILjava/awt/Frame;I)V") + public final void enter(@OriginalArg(1) int refreshRate, @OriginalArg(2) int bitDepth, @OriginalArg(3) int height, @OriginalArg(4) Frame frame, @OriginalArg(5) int width) { + this.previousDisplayMode = this.device.getDisplayMode(); + if (this.previousDisplayMode == null) { + throw new NullPointerException(); + } + frame.setUndecorated(true); + frame.enableInputMethods(false); + this.setFullScreenWindow(frame); + if (refreshRate == 0) { + @Pc(37) int previousRefreshRate = this.previousDisplayMode.getRefreshRate(); + @Pc(41) DisplayMode[] displayModes = this.device.getDisplayModes(); + @Pc(43) boolean foundMode = false; + for (@Pc(45) int i = 0; i < displayModes.length; i++) { + if (displayModes[i].getWidth() == width && displayModes[i].getHeight() == height && bitDepth == displayModes[i].getBitDepth()) { + @Pc(77) int r = displayModes[i].getRefreshRate(); + if (!foundMode || Math.abs(r - previousRefreshRate) < Math.abs(refreshRate - previousRefreshRate)) { + foundMode = true; + refreshRate = r; + } + } + } + if (!foundMode) { + refreshRate = previousRefreshRate; + } + } + this.device.setDisplayMode(new DisplayMode(width, height, bitDepth, refreshRate)); + } + + @OriginalMember(owner = "signlink!e", name = "a", descriptor = "(Z)[I") + public final int[] getDisplayModes() { + @Pc(9) DisplayMode[] displayModes = this.device.getDisplayModes(); + @Pc(15) int[] result = new int[displayModes.length << 2]; + for (@Pc(17) int i = 0; i < displayModes.length; i++) { + result[i << 2] = displayModes[i].getWidth(); + result[(i << 2) + 1] = displayModes[i].getHeight(); + result[(i << 2) + 2] = displayModes[i].getBitDepth(); + result[(i << 2) + 3] = displayModes[i].getRefreshRate(); + } + return result; + } + + @OriginalMember(owner = "signlink!e", name = "a", descriptor = "(I)V") + public final void exit() { + if (this.previousDisplayMode != null) { + this.device.setDisplayMode(this.previousDisplayMode); + if (!this.device.getDisplayMode().equals(this.previousDisplayMode)) { + throw new RuntimeException("Did not return to correct resolution!"); + } + this.previousDisplayMode = null; + } + this.setFullScreenWindow(null); + } +} diff --git a/signlink/src/main/java/rt4/MonotonicClock.java b/signlink/src/main/java/rt4/MonotonicClock.java new file mode 100644 index 0000000..535d2c5 --- /dev/null +++ b/signlink/src/main/java/rt4/MonotonicClock.java @@ -0,0 +1,25 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +@OriginalClass("signlink!ad") +public final class MonotonicClock { + + @OriginalMember(owner = "signlink!ad", name = "a", descriptor = "J") + private static long leapMillis; + + @OriginalMember(owner = "signlink!ad", name = "b", descriptor = "J") + private static long previous; + + @OriginalMember(owner = "signlink!ad", name = "a", descriptor = "(B)J") + public static synchronized long currentTimeMillis() { + @Pc(1) long now = System.currentTimeMillis(); + if (previous > now) { + leapMillis += previous - now; + } + previous = now; + return leapMillis + now; + } +} diff --git a/signlink/src/main/java/rt4/PrivilegedRequest.java b/signlink/src/main/java/rt4/PrivilegedRequest.java new file mode 100644 index 0000000..e2f3076 --- /dev/null +++ b/signlink/src/main/java/rt4/PrivilegedRequest.java @@ -0,0 +1,29 @@ +package rt4; + +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; + +@OriginalClass("signlink!im") +public final class PrivilegedRequest { + + @OriginalMember(owner = "signlink!im", name = "e", descriptor = "Ljava/lang/Object;") + public volatile Object result; + + @OriginalMember(owner = "signlink!im", name = "f", descriptor = "I") + public int type; + + @OriginalMember(owner = "signlink!im", name = "b", descriptor = "Lsignlink!im;") + public PrivilegedRequest next; + + @OriginalMember(owner = "signlink!im", name = "c", descriptor = "Ljava/lang/Object;") + public Object objectArg; + + @OriginalMember(owner = "signlink!im", name = "a", descriptor = "I") + public int intArg2; + + @OriginalMember(owner = "signlink!im", name = "g", descriptor = "I") + public int intArg1; + + @OriginalMember(owner = "signlink!im", name = "d", descriptor = "I") + public volatile int status = 0; +} diff --git a/signlink/src/main/java/rt4/SignLink.java b/signlink/src/main/java/rt4/SignLink.java new file mode 100644 index 0000000..fe733a0 --- /dev/null +++ b/signlink/src/main/java/rt4/SignLink.java @@ -0,0 +1,542 @@ +package rt4; + +import com.jogamp.opengl.GLProfile; +import org.openrs2.deob.annotation.OriginalArg; +import org.openrs2.deob.annotation.OriginalClass; +import org.openrs2.deob.annotation.OriginalMember; +import org.openrs2.deob.annotation.Pc; + +import java.applet.Applet; +import java.awt.*; +import java.io.DataInputStream; +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.lang.reflect.Method; +import java.net.InetAddress; +import java.net.Socket; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.Hashtable; + +@OriginalClass("signlink!ll") +public final class SignLink implements Runnable { + + @OriginalMember(owner = "signlink!ll", name = "o", descriptor = "Ljava/lang/String;") + public static String javaVersion; + + @OriginalMember(owner = "signlink!ll", name = "n", descriptor = "Ljava/lang/String;") + public static String osName; + + @OriginalMember(owner = "signlink!ll", name = "l", descriptor = "Ljava/lang/String;") + private static String osNameRaw; + + @OriginalMember(owner = "signlink!ll", name = "v", descriptor = "Ljava/lang/String;") + private static String homeDir; + + @OriginalMember(owner = "signlink!ll", name = "j", descriptor = "Ljava/lang/String;") + private static String osVersion; + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "Ljava/lang/String;") + public static String javaVendor; + + @OriginalMember(owner = "signlink!ll", name = "b", descriptor = "Ljava/lang/String;") + private static String osArch; + + @OriginalMember(owner = "signlink!ll", name = "u", descriptor = "Ljava/lang/reflect/Method;") + public static Method setFocusCycleRoot; + + @OriginalMember(owner = "signlink!ll", name = "r", descriptor = "Ljava/lang/reflect/Method;") + public static Method setFocusTraversalKeysEnabled; + + @OriginalMember(owner = "signlink!ll", name = "e", descriptor = "I") + public static final int anInt5928 = 1; + + @OriginalMember(owner = "signlink!ll", name = "w", descriptor = "Ljava/util/Hashtable;") + private static final Hashtable fileCache = new Hashtable(16); + + @OriginalMember(owner = "signlink!ll", name = "q", descriptor = "J") + private static volatile long breakConnectionsUntil = 0L; + + @OriginalMember(owner = "signlink!ll", name = "A", descriptor = "Lsignlink!ai;") + private AudioSource audioSource; + + @OriginalMember(owner = "signlink!ll", name = "g", descriptor = "Lsignlink!qm;") + public FileOnDisk cacheData; + + @OriginalMember(owner = "signlink!ll", name = "p", descriptor = "Lsignlink!im;") + private PrivilegedRequest requestQueueTail = null; + + @OriginalMember(owner = "signlink!ll", name = "f", descriptor = "Z") + private boolean stop; + + @OriginalMember(owner = "signlink!ll", name = "h", descriptor = "Lsignlink!qm;") + public FileOnDisk cacheMasterIndex; + + @OriginalMember(owner = "signlink!ll", name = "d", descriptor = "Lsignlink!qm;") + public FileOnDisk uid; + + @OriginalMember(owner = "signlink!ll", name = "y", descriptor = "Lsignlink!im;") + private PrivilegedRequest requestQueueHead = null; + + @OriginalMember(owner = "signlink!ll", name = "i", descriptor = "Ljava/applet/Applet;") + public Applet applet; + + @OriginalMember(owner = "signlink!ll", name = "x", descriptor = "Ljava/lang/String;") + private final String cacheSubDir; + + @OriginalMember(owner = "signlink!ll", name = "z", descriptor = "I") + private final int cacheId; + + @OriginalMember(owner = "signlink!ll", name = "k", descriptor = "Ljava/awt/EventQueue;") + public EventQueue eventQueue; + + @OriginalMember(owner = "signlink!ll", name = "c", descriptor = "[Lsignlink!qm;") + public FileOnDisk[] cacheIndexes; + + @OriginalMember(owner = "signlink!ll", name = "t", descriptor = "Lsignlink!e;") + private FullScreenManager fullScreenManager; + + @OriginalMember(owner = "signlink!ll", name = "s", descriptor = "Lsignlink!g;") + private CursorManager cursorManager; + + @OriginalMember(owner = "signlink!ll", name = "m", descriptor = "Ljava/lang/Thread;") + private final Thread thread; + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(ZLjava/lang/String;)Lsignlink!qm;") + private static FileOnDisk openPreferencesInternal(@OriginalArg(1) String cacheSubDir) { + @Pc(41) String[] cacheLocations = new String[]{"c:/rscache/", "/rscache/", homeDir, "c:/windows/", "c:/winnt/", "c:/", "/tmp/", ""}; + for (@Pc(43) int i = 0; i < cacheLocations.length; i++) { + @Pc(51) String cacheLocation = cacheLocations[i]; + if (cacheLocation.length() <= 0 || (new File(cacheLocation)).exists()) { + try { + return new FileOnDisk(new File(cacheLocation, "jagex_" + cacheSubDir + "_preferences.dat"), "rw", 10000L); + } catch (@Pc(84) Exception ex) { + } + } + } + return null; + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(Ljava/lang/String;IZLjava/lang/String;)Ljava/io/File;") + public static File getFile(@OriginalArg(0) String cacheSubDir, @OriginalArg(1) int storeId, @OriginalArg(3) String name) { + @Pc(4) File cachedFile = (File) fileCache.get(name); + if (cachedFile != null) { + return cachedFile; + } + @Pc(53) String[] cacheLocations = new String[]{homeDir, "c:/rscache/", "/rscache/", "c:/windows/", "c:/winnt/", "c:/", "/tmp/", ""}; + @Pc(78) String[] cacheDirs = new String[]{"cache", ".runite_rs", ".530file_store_" + storeId, ".jagex_cache_" + storeId, ".file_store_" + storeId}; + for (@Pc(80) int attempt = 0; attempt < 2; attempt++) { + for (@Pc(87) int i = 0; i < cacheDirs.length; i++) { + for (@Pc(93) int j = 0; j < cacheLocations.length; j++) { + @Pc(128) String path = cacheLocations[j] + cacheDirs[i] + "/" + (cacheSubDir == null ? "" : cacheSubDir + "/") + name; + @Pc(130) RandomAccessFile randomAccessFile = null; + try { + @Pc(135) File file = new File(path); + if (attempt != 0 || file.exists()) { + @Pc(145) String cacheLocation = cacheLocations[j]; + if (attempt != 1 || cacheLocation.length() <= 0 || (new File(cacheLocation)).exists()) { + (new File(cacheLocations[j] + cacheDirs[i])).mkdir(); + if (cacheSubDir != null) { + (new File(cacheLocations[j] + cacheDirs[i] + "/" + cacheSubDir)).mkdir(); + } + randomAccessFile = new RandomAccessFile(file, "rw"); + @Pc(210) int firstByte = randomAccessFile.read(); + randomAccessFile.seek(0L); + randomAccessFile.write(firstByte); + randomAccessFile.seek(0L); + randomAccessFile.close(); + fileCache.put(name, file); + return file; + } + } + } catch (@Pc(229) Exception ex) { + try { + if (randomAccessFile != null) { + randomAccessFile.close(); + } + } catch (@Pc(239) Exception ex2) { + } + } + } + } + } + throw new RuntimeException(); + } + + @OriginalMember(owner = "signlink!ll", name = "", descriptor = "(Ljava/applet/Applet;ILjava/lang/String;I)V") + public SignLink(@OriginalArg(0) Applet applet, @OriginalArg(1) int cacheId, @OriginalArg(2) String cacheSubDir, @OriginalArg(3) int archiveCount) throws Exception { + javaVersion = "1.1"; + this.cacheSubDir = cacheSubDir; + this.cacheId = cacheId; + this.applet = applet; + javaVendor = "Unknown"; + try { + javaVendor = System.getProperty("java.vendor"); + javaVersion = System.getProperty("java.version"); + } catch (@Pc(43) Exception local43) { + } + try { + osNameRaw = System.getProperty("os.name"); + } catch (@Pc(48) Exception local48) { + osNameRaw = "Unknown"; + } + osName = osNameRaw.toLowerCase(); + try { + osArch = System.getProperty("os.arch").toLowerCase(); + } catch (@Pc(59) Exception local59) { + osArch = ""; + } + try { + osVersion = System.getProperty("os.version").toLowerCase(); + } catch (@Pc(67) Exception local67) { + osVersion = ""; + } + + String homeDirOverride = System.getProperty("clientHomeOverride"); + if (homeDirOverride != null) { + homeDir = homeDirOverride; + } else { + try { + if (homeDir == null) + homeDir = System.getProperty("user.home") + File.separatorChar; + + if (osName.startsWith("linux")) { + String xdgHome = System.getenv("XDG_DATA_HOME"); + + if (xdgHome != null) { + homeDir = xdgHome + "/2009scape/"; + } else { + homeDir += ".local/share/2009scape/"; + } + } else if (osName.startsWith("mac")) { + homeDir += "Library/Application Support/2009scape/"; + } else if (osName.startsWith("windows")) { + homeDir += "2009scape\\"; + } + } catch (@Pc(86) Exception ex) { + } + } + + try { + this.eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue(); + } catch (@Pc(97) Throwable ex) { + } + try { + if (applet == null) { + setFocusTraversalKeysEnabled = Class.forName("java.awt.Component").getDeclaredMethod("setFocusTraversalKeysEnabled", Boolean.TYPE); + } else { + setFocusTraversalKeysEnabled = applet.getClass().getMethod("setFocusTraversalKeysEnabled", Boolean.TYPE); + } + } catch (@Pc(125) Exception ex) { + } + try { + if (applet == null) { + setFocusCycleRoot = Class.forName("java.awt.Container").getDeclaredMethod("setFocusCycleRoot", Boolean.TYPE); + } else { + setFocusCycleRoot = applet.getClass().getMethod("setFocusCycleRoot", Boolean.TYPE); + } + } catch (@Pc(153) Exception ex) { + } + this.uid = new FileOnDisk(getFile(null, this.cacheId, "random.dat"), "rw", 25L); + this.cacheData = new FileOnDisk(getFile(this.cacheSubDir, this.cacheId, "main_file_cache.dat2"), "rw", 104857600L); + this.cacheMasterIndex = new FileOnDisk(getFile(this.cacheSubDir, this.cacheId, "main_file_cache.idx255"), "rw", 1048576L); + this.cacheIndexes = new FileOnDisk[archiveCount]; + for (@Pc(200) int i = 0; i < archiveCount; i++) { + this.cacheIndexes[i] = new FileOnDisk(getFile(this.cacheSubDir, this.cacheId, "main_file_cache.idx" + i), "rw", 1048576L); + } + try { + this.fullScreenManager = new FullScreenManager(); + } catch (@Pc(239) Throwable ex) { + } + try { + this.cursorManager = new CursorManager(); + } catch (@Pc(246) Throwable ex) { + } + @Pc(249) ThreadGroup rootGroup = Thread.currentThread().getThreadGroup(); + for (@Pc(252) ThreadGroup group = rootGroup.getParent(); group != null; group = group.getParent()) { + rootGroup = group; + } + @Pc(263) Thread[] threads = new Thread[1000]; + rootGroup.enumerate(threads); + for (@Pc(269) int i = 0; i < threads.length; i++) { + if (threads[i] != null && threads[i].getName().startsWith("AWT")) { + threads[i].setPriority(1); + } + } + this.stop = false; + this.thread = new Thread(this); + this.thread.setPriority(10); + this.thread.setDaemon(true); + this.thread.start(); + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(I)V") + public final void breakConnection() { + breakConnectionsUntil = MonotonicClock.currentTimeMillis() + 5000L; + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(Z)Z") + public final boolean isFullScreenSupported() { + return this.fullScreenManager != null; + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(Ljava/lang/String;I)Lsignlink!im;") + public final PrivilegedRequest openPreferences(@OriginalArg(0) String cacheSubDir) { + return this.enqueue(12, 0, cacheSubDir, 0); + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "([IIILjava/awt/Component;Ljava/awt/Point;I)Lsignlink!im;") + public final PrivilegedRequest setCursor(@OriginalArg(0) int[] pixels, @OriginalArg(2) int width, @OriginalArg(3) Component component, @OriginalArg(4) Point hotSpot, @OriginalArg(5) int height) { + return this.enqueue(17, height, new Object[]{component, pixels, hotSpot}, width); + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(IILjava/lang/Object;II)Lsignlink!im;") + private PrivilegedRequest enqueue(@OriginalArg(0) int type, @OriginalArg(1) int intArg1, @OriginalArg(2) Object objectArg, @OriginalArg(3) int intArg2) { + @Pc(3) PrivilegedRequest request = new PrivilegedRequest(); + request.intArg1 = intArg1; + request.intArg2 = intArg2; + request.type = type; + request.objectArg = objectArg; + synchronized (this) { + if (this.requestQueueTail == null) { + this.requestQueueTail = this.requestQueueHead = request; + } else { + this.requestQueueTail.next = request; + this.requestQueueTail = request; + } + this.notify(); + return request; + } + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(Ljava/awt/Frame;I)Lsignlink!im;") + public final PrivilegedRequest exitFullScreen(@OriginalArg(0) Frame frame) { + return this.enqueue(7, 0, frame, 0); + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(ZLjava/net/URL;)Lsignlink!im;") + public final PrivilegedRequest openUrlStream(@OriginalArg(1) URL url) { + return this.enqueue(4, 0, url, 0); + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(BLjava/lang/String;I)Lsignlink!im;") + public final PrivilegedRequest openSocket(@OriginalArg(1) String hostname, @OriginalArg(2) int port) { + System.out.println("openSocket(" + hostname + ":" + port + ")"); + return this.enqueue(1, 0, hostname, port); + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(Ljava/lang/Class;I)Lsignlink!im;") + public final PrivilegedRequest unloadGlNatives(@OriginalArg(0) Class targetClass) { + return this.enqueue(11, 0, targetClass, 0); + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(Ljava/lang/Class;[Ljava/lang/Class;ILjava/lang/String;)Lsignlink!im;") + public final PrivilegedRequest getDeclaredMethod(@OriginalArg(0) Class targetClass, @OriginalArg(1) Class[] parameterTypes, @OriginalArg(3) String name) { + return this.enqueue(8, 0, new Object[]{targetClass, name, parameterTypes}, 0); + } + + @OriginalMember(owner = "signlink!ll", name = "run", descriptor = "()V") + @Override + public final void run() { + while (true) { + @Pc(16) PrivilegedRequest request; + synchronized (this) { + while (true) { + if (this.stop) { + return; + } + if (this.requestQueueHead != null) { + request = this.requestQueueHead; + this.requestQueueHead = this.requestQueueHead.next; + if (this.requestQueueHead == null) { + this.requestQueueTail = null; + } + break; + } + try { + this.wait(); + } catch (@Pc(33) InterruptedException ex) { + } + } + } + try { + @Pc(45) int type = request.type; + @Pc(687) Object[] args; + if (type == 1) { + if (breakConnectionsUntil > MonotonicClock.currentTimeMillis()) { + throw new IOException(); + } + request.result = new Socket(InetAddress.getByName((String) request.objectArg), request.intArg2); + } else if (type == 2) { + @Pc(813) Thread thread = new Thread((Runnable) request.objectArg); + thread.setDaemon(true); + thread.start(); + thread.setPriority(request.intArg2); + request.result = thread; + } else if (type == 3) { + if (MonotonicClock.currentTimeMillis() < breakConnectionsUntil) { + throw new IOException(); + } + @Pc(147) String ip = (request.intArg2 >> 24 & 0xFF) + "." + (request.intArg2 >> 16 & 0xFF) + "." + (request.intArg2 >> 8 & 0xFF) + "." + (request.intArg2 & 0xFF); + request.result = InetAddress.getByName(ip).getHostName(); + } else if (type == 4) { + if (breakConnectionsUntil > MonotonicClock.currentTimeMillis()) { + throw new IOException(); + } + request.result = new DataInputStream(((URL) request.objectArg).openStream()); + } else if (type == 5) { + request.result = this.fullScreenManager.getDisplayModes(); + } else if (type == 6) { + @Pc(168) Frame frame = new Frame("Jagex Full Screen"); + request.result = frame; + frame.setResizable(false); + frame.setBackground(Color.black); + this.fullScreenManager.enter(request.intArg1 & 0xFFFF, request.intArg1 >> 16, request.intArg2 & 0xFFFF, frame, request.intArg2 >>> 16); + } else if (type == 7) { + this.fullScreenManager.exit(); + } else if (type == 8) { + args = (Object[]) request.objectArg; + if (((Class) args[0]).getClassLoader() == null) { + throw new SecurityException(); + } + request.result = ((Class) args[0]).getDeclaredMethod((String) args[1], (Class[]) args[2]); + } else if (type == 9) { + args = (Object[]) request.objectArg; + if (((Class) args[0]).getClassLoader() == null) { + throw new SecurityException(); + } + request.result = ((Class) args[0]).getDeclaredField((String) args[1]); + } else if (type == 10) { + GLProfile.initSingleton(); + } else if (type == 11) { + GLProfile.shutdown(); + } else if (type == 12) { + String cacheSubDir = (String) request.objectArg; + @Pc(558) FileOnDisk preferences = openPreferencesInternal(cacheSubDir); + request.result = preferences; + } else if (type == 14) { + @Pc(570) int x = request.intArg1; + @Pc(573) int y = request.intArg2; + this.cursorManager.setPosition(y, x); + } else if (type == 15) { + @Pc(591) boolean reset = request.intArg2 != 0; + @Pc(595) Component component = (Component) request.objectArg; + this.cursorManager.setComponent(component, reset); + } else if (type == 17) { + args = (Object[]) request.objectArg; + this.cursorManager.setCursor((Point) args[2], request.intArg2, (Component) args[0], request.intArg1, (int[]) args[1]); + } else if (type == 16) { + try { + if (!osName.startsWith("win")) { + throw new Exception(); + } + String url = (String) request.objectArg; + if (!url.startsWith("http://") && !url.startsWith("https://")) { + throw new Exception(); + } + @Pc(636) String safeChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789?&=,.%+-_#:/*"; + for (@Pc(490) int i = 0; i < url.length(); i++) { + if (safeChars.indexOf(url.charAt(i)) == -1) { + throw new Exception(); + } + } + Runtime.getRuntime().exec("cmd /c start \"j\" \"" + url + "\""); + request.result = null; + } catch (@Pc(674) Exception ex) { + request.result = ex; + } + } else { + throw new Exception(); + } + request.status = 1; + } catch (@Pc(830) ThreadDeath ex) { + throw ex; + } catch (@Pc(833) Throwable ex) { + request.status = 2; + } + } + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(ILjava/lang/Class;)Lsignlink!im;") + public final PrivilegedRequest loadGlNatives(@OriginalArg(1) Class targetClass) { + return this.enqueue(10, 0, targetClass, 0); + } + + @OriginalMember(owner = "signlink!ll", name = "b", descriptor = "(I)V") + public final void stop() { + synchronized (this) { + this.stop = true; + this.notifyAll(); + } + try { + this.thread.join(); + } catch (@Pc(21) InterruptedException ex) { + } + if (this.cacheData != null) { + try { + this.cacheData.close(); + } catch (@Pc(39) IOException ex) { + } + } + if (this.cacheMasterIndex != null) { + try { + this.cacheMasterIndex.close(); + } catch (@Pc(49) IOException ex) { + } + } + if (this.cacheIndexes != null) { + for (@Pc(55) int i = 0; i < this.cacheIndexes.length; i++) { + if (this.cacheIndexes[i] != null) { + try { + this.cacheIndexes[i].close(); + } catch (@Pc(79) IOException ex) { + } + } + } + } + if (this.uid != null) { + try { + this.uid.close(); + } catch (@Pc(93) IOException ex) { + } + } + } + + @OriginalMember(owner = "signlink!ll", name = "b", descriptor = "(B)Lsignlink!ai;") + public final AudioSource getAudioSource() { + return this.audioSource; + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(ILjava/lang/String;Ljava/lang/Class;)Lsignlink!im;") + public final PrivilegedRequest getDeclaredField(@OriginalArg(1) String name, @OriginalArg(2) Class targetClass) { + return this.enqueue(9, 0, new Object[]{targetClass, name}, 0); + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(II)Lsignlink!im;") + public final PrivilegedRequest getReverseDns(@OriginalArg(1) int ip) { + return this.enqueue(3, 0, null, ip); + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(IIIII)Lsignlink!im;") + public final PrivilegedRequest enterFullScreen(@OriginalArg(1) int bitDepth, @OriginalArg(2) int height, @OriginalArg(3) int width) { + return this.enqueue(6, bitDepth << 16, null, (width << 16) + height); + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(IILjava/lang/Runnable;)Lsignlink!im;") + public final PrivilegedRequest startThread(@OriginalArg(1) int priority, @OriginalArg(2) Runnable runnable) { + return this.enqueue(2, 0, runnable, priority); + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(Ljava/lang/String;Z)Lsignlink!im;") + public final PrivilegedRequest openUrl(@OriginalArg(0) String url) { + return this.enqueue(16, 0, url, 0); + } + + @OriginalMember(owner = "signlink!ll", name = "a", descriptor = "(B)Lsignlink!im;") + public final PrivilegedRequest getDisplayModes() { + return this.enqueue(5, 0, null, 0); + } +}